From 89b6dab0925bd991d4b1909afb1aa7a8d818307b Mon Sep 17 00:00:00 2001 From: Jonathan Wolter Date: Tue, 29 Mar 2016 23:17:14 -0700 Subject: [PATCH] Adding example reference implementations against: node, with a plain js frontend: rails, with multiple frontend examples: JS JQuery Angular 1 React Ember JS + Bootstrap --- connect-examples/v2/README.md | 12 + connect-examples/v2/node_payment/.gitignore | 37 + connect-examples/v2/node_payment/README.rdoc | 9 + connect-examples/v2/node_payment/app.js | 58 + connect-examples/v2/node_payment/bin/www | 90 + .../v2/node_payment/config.json.sample | 10 + connect-examples/v2/node_payment/package.json | 18 + .../node_payment/public/stylesheets/style.css | 100 + .../v2/node_payment/routes/index.js | 65 + .../v2/node_payment/views/error.jade | 6 + .../v2/node_payment/views/index.jade | 241 + .../v2/node_payment/views/layout.jade | 8 + connect-examples/v2/rails_payment/.env.sample | 3 + connect-examples/v2/rails_payment/.gitignore | 19 + .../v2/rails_payment/.ruby-version | 1 + connect-examples/v2/rails_payment/Gemfile | 54 + .../v2/rails_payment/Gemfile.lock | 180 + connect-examples/v2/rails_payment/README.rdoc | 22 + connect-examples/v2/rails_payment/Rakefile | 6 + .../v2/rails_payment/app/assets/images/.keep | 0 .../app/assets/javascripts/application.js | 16 + .../app/assets/javascripts/charges.coffee | 3 + .../javascripts/ember-template-compiler.js | 20732 ++++++++++++++++ .../ember-template-compiler.map.js | 0 .../app/assets/javascripts/ember.min.js | 15 + .../app/assets/javascripts/welcome.coffee | 3 + .../app/assets/stylesheets/application.css | 15 + .../app/assets/stylesheets/bootstrap.css | 6760 +++++ .../app/assets/stylesheets/bootstrap.css.map | 1 + .../app/assets/stylesheets/charges.scss | 3 + .../app/assets/stylesheets/welcome.scss | 173 + .../app/controllers/application_controller.rb | 5 + .../app/controllers/charges_controller.rb | 60 + .../app/controllers/concerns/.keep | 0 .../app/controllers/welcome_controller.rb | 31 + .../app/helpers/application_helper.rb | 2 + .../app/helpers/charges_helper.rb | 2 + .../app/helpers/welcome_helper.rb | 2 + .../v2/rails_payment/app/mailers/.keep | 0 .../app/mailers/application_mailer.rb | 4 + .../app/mailers/receipt_mailer.rb | 9 + .../v2/rails_payment/app/models/.keep | 0 .../rails_payment/app/models/concerns/.keep | 0 .../app/views/charges/charge_card.html.erb | 2 + .../app/views/layouts/angular.html.erb | 16 + .../app/views/layouts/ember.html.erb | 18 + .../app/views/layouts/js.html.erb | 15 + .../app/views/layouts/js_bootstrap.html.erb | 15 + .../app/views/layouts/mailer.html.erb | 5 + .../app/views/layouts/mailer.text.erb | 1 + .../app/views/layouts/react.html.erb | 19 + .../receipt_mailer/charge_email.text.erb | 12 + .../app/views/welcome/angular.html.erb | 236 + .../app/views/welcome/ember.html.erb | 253 + .../app/views/welcome/index.html.erb | 11 + .../app/views/welcome/jquery.html.erb | 240 + .../app/views/welcome/js.html.erb | 237 + .../app/views/welcome/js_bootstrap.html.erb | 245 + .../app/views/welcome/react.html.erb | 349 + connect-examples/v2/rails_payment/bin/bundle | 3 + connect-examples/v2/rails_payment/bin/rails | 9 + connect-examples/v2/rails_payment/bin/rake | 9 + connect-examples/v2/rails_payment/bin/setup | 29 + connect-examples/v2/rails_payment/bin/spring | 15 + connect-examples/v2/rails_payment/config.ru | 4 + .../v2/rails_payment/config/application.rb | 29 + .../v2/rails_payment/config/boot.rb | 3 + .../v2/rails_payment/config/database.yml | 25 + .../v2/rails_payment/config/environment.rb | 5 + .../config/environments/development.rb | 45 + .../config/environments/production.rb | 79 + .../rails_payment/config/environments/test.rb | 42 + .../config/initializers/assets.rb | 11 + .../initializers/backtrace_silencers.rb | 7 + .../config/initializers/cookies_serializer.rb | 3 + .../initializers/filter_parameter_logging.rb | 4 + .../config/initializers/inflections.rb | 16 + .../config/initializers/mime_types.rb | 4 + .../config/initializers/session_store.rb | 3 + .../config/initializers/wrap_parameters.rb | 14 + .../v2/rails_payment/config/locales/en.yml | 23 + .../v2/rails_payment/config/routes.rb | 69 + .../v2/rails_payment/config/secrets.yml | 28 + .../v2/rails_payment/db/schema.rb | 19 + connect-examples/v2/rails_payment/db/seeds.rb | 7 + .../v2/rails_payment/lib/assets/.keep | 0 .../v2/rails_payment/lib/tasks/.keep | 0 connect-examples/v2/rails_payment/log/.keep | 0 .../v2/rails_payment/public/404.html | 67 + .../v2/rails_payment/public/422.html | 67 + .../v2/rails_payment/public/500.html | 66 + .../v2/rails_payment/public/favicon.ico | 0 .../v2/rails_payment/public/robots.txt | 5 + .../v2/rails_payment/test/controllers/.keep | 0 .../controllers/charges_controller_test.rb | 9 + .../controllers/welcome_controller_test.rb | 9 + .../v2/rails_payment/test/fixtures/.keep | 0 .../v2/rails_payment/test/helpers/.keep | 0 .../v2/rails_payment/test/integration/.keep | 0 .../v2/rails_payment/test/mailers/.keep | 0 .../previews/receipt_mailer_preview.rb | 4 + .../test/mailers/receipt_mailer_test.rb | 7 + .../v2/rails_payment/test/models/.keep | 0 .../v2/rails_payment/test/test_helper.rb | 10 + .../vendor/assets/javascripts/.keep | 0 .../vendor/assets/stylesheets/.keep | 0 106 files changed, 31198 insertions(+) create mode 100644 connect-examples/v2/README.md create mode 100644 connect-examples/v2/node_payment/.gitignore create mode 100644 connect-examples/v2/node_payment/README.rdoc create mode 100644 connect-examples/v2/node_payment/app.js create mode 100755 connect-examples/v2/node_payment/bin/www create mode 100644 connect-examples/v2/node_payment/config.json.sample create mode 100644 connect-examples/v2/node_payment/package.json create mode 100644 connect-examples/v2/node_payment/public/stylesheets/style.css create mode 100644 connect-examples/v2/node_payment/routes/index.js create mode 100644 connect-examples/v2/node_payment/views/error.jade create mode 100644 connect-examples/v2/node_payment/views/index.jade create mode 100644 connect-examples/v2/node_payment/views/layout.jade create mode 100644 connect-examples/v2/rails_payment/.env.sample create mode 100644 connect-examples/v2/rails_payment/.gitignore create mode 100644 connect-examples/v2/rails_payment/.ruby-version create mode 100644 connect-examples/v2/rails_payment/Gemfile create mode 100644 connect-examples/v2/rails_payment/Gemfile.lock create mode 100644 connect-examples/v2/rails_payment/README.rdoc create mode 100644 connect-examples/v2/rails_payment/Rakefile create mode 100644 connect-examples/v2/rails_payment/app/assets/images/.keep create mode 100644 connect-examples/v2/rails_payment/app/assets/javascripts/application.js create mode 100644 connect-examples/v2/rails_payment/app/assets/javascripts/charges.coffee create mode 100644 connect-examples/v2/rails_payment/app/assets/javascripts/ember-template-compiler.js create mode 100644 connect-examples/v2/rails_payment/app/assets/javascripts/ember-template-compiler.map.js create mode 100644 connect-examples/v2/rails_payment/app/assets/javascripts/ember.min.js create mode 100644 connect-examples/v2/rails_payment/app/assets/javascripts/welcome.coffee create mode 100644 connect-examples/v2/rails_payment/app/assets/stylesheets/application.css create mode 100644 connect-examples/v2/rails_payment/app/assets/stylesheets/bootstrap.css create mode 100644 connect-examples/v2/rails_payment/app/assets/stylesheets/bootstrap.css.map create mode 100644 connect-examples/v2/rails_payment/app/assets/stylesheets/charges.scss create mode 100644 connect-examples/v2/rails_payment/app/assets/stylesheets/welcome.scss create mode 100644 connect-examples/v2/rails_payment/app/controllers/application_controller.rb create mode 100644 connect-examples/v2/rails_payment/app/controllers/charges_controller.rb create mode 100644 connect-examples/v2/rails_payment/app/controllers/concerns/.keep create mode 100644 connect-examples/v2/rails_payment/app/controllers/welcome_controller.rb create mode 100644 connect-examples/v2/rails_payment/app/helpers/application_helper.rb create mode 100644 connect-examples/v2/rails_payment/app/helpers/charges_helper.rb create mode 100644 connect-examples/v2/rails_payment/app/helpers/welcome_helper.rb create mode 100644 connect-examples/v2/rails_payment/app/mailers/.keep create mode 100644 connect-examples/v2/rails_payment/app/mailers/application_mailer.rb create mode 100644 connect-examples/v2/rails_payment/app/mailers/receipt_mailer.rb create mode 100644 connect-examples/v2/rails_payment/app/models/.keep create mode 100644 connect-examples/v2/rails_payment/app/models/concerns/.keep create mode 100644 connect-examples/v2/rails_payment/app/views/charges/charge_card.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/layouts/angular.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/layouts/ember.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/layouts/js.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/layouts/js_bootstrap.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/layouts/mailer.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/layouts/mailer.text.erb create mode 100644 connect-examples/v2/rails_payment/app/views/layouts/react.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/receipt_mailer/charge_email.text.erb create mode 100644 connect-examples/v2/rails_payment/app/views/welcome/angular.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/welcome/ember.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/welcome/index.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/welcome/jquery.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/welcome/js.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/welcome/js_bootstrap.html.erb create mode 100644 connect-examples/v2/rails_payment/app/views/welcome/react.html.erb create mode 100755 connect-examples/v2/rails_payment/bin/bundle create mode 100755 connect-examples/v2/rails_payment/bin/rails create mode 100755 connect-examples/v2/rails_payment/bin/rake create mode 100755 connect-examples/v2/rails_payment/bin/setup create mode 100755 connect-examples/v2/rails_payment/bin/spring create mode 100644 connect-examples/v2/rails_payment/config.ru create mode 100644 connect-examples/v2/rails_payment/config/application.rb create mode 100644 connect-examples/v2/rails_payment/config/boot.rb create mode 100644 connect-examples/v2/rails_payment/config/database.yml create mode 100644 connect-examples/v2/rails_payment/config/environment.rb create mode 100644 connect-examples/v2/rails_payment/config/environments/development.rb create mode 100644 connect-examples/v2/rails_payment/config/environments/production.rb create mode 100644 connect-examples/v2/rails_payment/config/environments/test.rb create mode 100644 connect-examples/v2/rails_payment/config/initializers/assets.rb create mode 100644 connect-examples/v2/rails_payment/config/initializers/backtrace_silencers.rb create mode 100644 connect-examples/v2/rails_payment/config/initializers/cookies_serializer.rb create mode 100644 connect-examples/v2/rails_payment/config/initializers/filter_parameter_logging.rb create mode 100644 connect-examples/v2/rails_payment/config/initializers/inflections.rb create mode 100644 connect-examples/v2/rails_payment/config/initializers/mime_types.rb create mode 100644 connect-examples/v2/rails_payment/config/initializers/session_store.rb create mode 100644 connect-examples/v2/rails_payment/config/initializers/wrap_parameters.rb create mode 100644 connect-examples/v2/rails_payment/config/locales/en.yml create mode 100644 connect-examples/v2/rails_payment/config/routes.rb create mode 100644 connect-examples/v2/rails_payment/config/secrets.yml create mode 100644 connect-examples/v2/rails_payment/db/schema.rb create mode 100644 connect-examples/v2/rails_payment/db/seeds.rb create mode 100644 connect-examples/v2/rails_payment/lib/assets/.keep create mode 100644 connect-examples/v2/rails_payment/lib/tasks/.keep create mode 100644 connect-examples/v2/rails_payment/log/.keep create mode 100644 connect-examples/v2/rails_payment/public/404.html create mode 100644 connect-examples/v2/rails_payment/public/422.html create mode 100644 connect-examples/v2/rails_payment/public/500.html create mode 100644 connect-examples/v2/rails_payment/public/favicon.ico create mode 100644 connect-examples/v2/rails_payment/public/robots.txt create mode 100644 connect-examples/v2/rails_payment/test/controllers/.keep create mode 100644 connect-examples/v2/rails_payment/test/controllers/charges_controller_test.rb create mode 100644 connect-examples/v2/rails_payment/test/controllers/welcome_controller_test.rb create mode 100644 connect-examples/v2/rails_payment/test/fixtures/.keep create mode 100644 connect-examples/v2/rails_payment/test/helpers/.keep create mode 100644 connect-examples/v2/rails_payment/test/integration/.keep create mode 100644 connect-examples/v2/rails_payment/test/mailers/.keep create mode 100644 connect-examples/v2/rails_payment/test/mailers/previews/receipt_mailer_preview.rb create mode 100644 connect-examples/v2/rails_payment/test/mailers/receipt_mailer_test.rb create mode 100644 connect-examples/v2/rails_payment/test/models/.keep create mode 100644 connect-examples/v2/rails_payment/test/test_helper.rb create mode 100644 connect-examples/v2/rails_payment/vendor/assets/javascripts/.keep create mode 100644 connect-examples/v2/rails_payment/vendor/assets/stylesheets/.keep diff --git a/connect-examples/v2/README.md b/connect-examples/v2/README.md new file mode 100644 index 000000000..4109ff34e --- /dev/null +++ b/connect-examples/v2/README.md @@ -0,0 +1,12 @@ + +The project is structured under two folders: + +* rails_payment: rails server implementation, within here it also includes frontend implementations for: + * plain JS + * JQuery + * Angular 1 + * React + * Ember + * JS + Bootstrap +* node_payment: node server implementation, within here there is a frontend implementation: + * plain JS diff --git a/connect-examples/v2/node_payment/.gitignore b/connect-examples/v2/node_payment/.gitignore new file mode 100644 index 000000000..3ca26fd3c --- /dev/null +++ b/connect-examples/v2/node_payment/.gitignore @@ -0,0 +1,37 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +config.json + diff --git a/connect-examples/v2/node_payment/README.rdoc b/connect-examples/v2/node_payment/README.rdoc new file mode 100644 index 000000000..5d4193811 --- /dev/null +++ b/connect-examples/v2/node_payment/README.rdoc @@ -0,0 +1,9 @@ +== README + +Rename config.json.sample to config.json and fill in values for APP_ID & APP_TOKEN + +To get the app running: + +* npm install + +* npm start diff --git a/connect-examples/v2/node_payment/app.js b/connect-examples/v2/node_payment/app.js new file mode 100644 index 000000000..f0579b1dc --- /dev/null +++ b/connect-examples/v2/node_payment/app.js @@ -0,0 +1,58 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var routes = require('./routes/index'); + +var app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'jade'); + +// uncomment after placing your favicon in /public +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use('/', routes); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +// error handlers + +// development error handler +// will print stacktrace +if (app.get('env') === 'development') { + app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err + }); + }); +} + +// production error handler +// no stacktraces leaked to user +app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {} + }); +}); + + +module.exports = app; diff --git a/connect-examples/v2/node_payment/bin/www b/connect-examples/v2/node_payment/bin/www new file mode 100755 index 000000000..dc7597d02 --- /dev/null +++ b/connect-examples/v2/node_payment/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('node-payment:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/connect-examples/v2/node_payment/config.json.sample b/connect-examples/v2/node_payment/config.json.sample new file mode 100644 index 000000000..fb9b2991d --- /dev/null +++ b/connect-examples/v2/node_payment/config.json.sample @@ -0,0 +1,10 @@ +{ + "development": { + "squareApplicationId": "dev-application-id-here", + "squareAccessToken": "dev-access-token-here" + }, + "production": { + "squareApplicationId": "prod-application-id-here", + "squareAccessToken": "prod-access-token-here" + } +} diff --git a/connect-examples/v2/node_payment/package.json b/connect-examples/v2/node_payment/package.json new file mode 100644 index 000000000..ec14aae13 --- /dev/null +++ b/connect-examples/v2/node_payment/package.json @@ -0,0 +1,18 @@ +{ + "name": "node-payment", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "body-parser": "*", + "cookie-parser": "*", + "debug": "*", + "express": "*", + "jade": "*", + "morgan": "*", + "serve-favicon": "*", + "unirest": "latest" + } +} diff --git a/connect-examples/v2/node_payment/public/stylesheets/style.css b/connect-examples/v2/node_payment/public/stylesheets/style.css new file mode 100644 index 000000000..96120d8b9 --- /dev/null +++ b/connect-examples/v2/node_payment/public/stylesheets/style.css @@ -0,0 +1,100 @@ +body{ + font-family: Helvetica; +} + +.no-boot{ + margin: 10px 10%; +} + + +.no-boot label{ + display: block; +} + +/* input styles */ +.no-boot input, +.no-boot select{ + width: 100%; + height: 24px; + margin-bottom: 10px; + padding: 4px 10px; + font-family: helvetica; + font-size: 14px; +} + +.no-boot input{ + border: none; + border-bottom: 1px solid #b6b6b6; +} + +.no-boot input:focus{ + outline: 0; + border-bottom: 1px solid #66afe9; + box-shadow: 0 3px 0 #66afe9; +} + +/* submit button styles */ +.no-boot input[type=submit]{ + background-color: #62DF49; + color: #fff; + height: 44px; + width: 45%; + cursor: pointer; +} + +.no-boot input[type=submit]:hover{ + background-color: #56FBD2; +} + +.no-boot input[type=submit]:focus{ + outline: 0; + border-bottom: 0; + box-shadow: none; +} + +/* disable submit button so no other actions can take place while form goes through */ +.no-boot input[type=submit][disabled]{ + cursor: not-allowed; + background-color: #8CE67A; +} + +/* Square Fields */ +.sq-input{ + margin-bottom: 10px; + border: none; + border-bottom: 1px solid #b6b6b6; +} + +/* [iFrame class]--focus is added when the square form is focused +use similar to other form focus style for consistency */ +.sq-input--focus{ + outline: 0; + border-bottom: 1px solid #66afe9; + box-shadow: 0 3px 0 #66afe9; +} + +/* [iFrame class]--error is added when the iFrame local check fails +use similar styling on other forms to ensure consistent error styles */ +.sq-input--error{ + background-color: #F3C0C0; +} + +/* error messages */ +.no-boot #card-errors li{ + list-style-type: none; + padding: 10px; + margin-bottom: 5px; + background-color: #E27272; + color: white; +} + +/* Success */ +#successNotification{ + margin: 0; + text-align: center; + background-image: linear-gradient(-1deg, #72E07B 0%, #56FBD2 100%); + border-radius: 4px; + padding: 25% 30%; + color: white; + font-size: 32px; +} diff --git a/connect-examples/v2/node_payment/routes/index.js b/connect-examples/v2/node_payment/routes/index.js new file mode 100644 index 000000000..2f571831b --- /dev/null +++ b/connect-examples/v2/node_payment/routes/index.js @@ -0,0 +1,65 @@ +var express = require('express'); +var router = express.Router(); + +var app = express(); +var config = require('.././config.json')[app.get('env')]; + +var unirest = require('unirest'); +var base_url = "https://connect.squareup.com/v2"; + +// data store for product cost +var product_cost = {"001": 100, "002": 4900, "003": 500000} + +/* GET home page. */ +router.get('/', function(req, res, next) { + res.render('index', { title: 'Express Node.js Implementation', 'square_application_id': config.squareApplicationId }); +}); + +router.post('/charges/charge_card', function(req,res,next){ + var location; + var request_params = req.body; + unirest.get(base_url + '/locations') + .headers({ + 'Authorization': 'Bearer ' + config.squareAccessToken, + 'Accept': 'application/json' + }) + .end(function (response) { + location = response.body.locations[0]; + + var token = require('crypto').randomBytes(64).toString('hex'); + + //Check if product exists + if (!product_cost.hasOwnProperty(request_params.product_id)) { + return res.json({status: 400, errors: [{"detail": "Product Unavailable"}] }) + } + + //Make sure amount is a valid integer + var amount = product_cost[request_params.product_id] + + request_body = { + card_nonce: request_params.nonce, + amount_money: { + amount: amount, + currency: 'USD' + }, + idempotency_key: token + } + unirest.post(base_url + '/locations/' + location.id + "/transactions") + .headers({ + 'Authorization': 'Bearer ' + config.squareAccessToken, + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }) + .send(request_body) + .end(function(response){ + if (response.body.errors){ + res.json({status: 400, errors: response.body.errors}) + }else{ + res.json({status: 200}) + } + }) + + }); +}); + +module.exports = router; diff --git a/connect-examples/v2/node_payment/views/error.jade b/connect-examples/v2/node_payment/views/error.jade new file mode 100644 index 000000000..51ec12c6a --- /dev/null +++ b/connect-examples/v2/node_payment/views/error.jade @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/connect-examples/v2/node_payment/views/index.jade b/connect-examples/v2/node_payment/views/index.jade new file mode 100644 index 000000000..450455016 --- /dev/null +++ b/connect-examples/v2/node_payment/views/index.jade @@ -0,0 +1,241 @@ +extends layout + +block content + html. +
+ + +
+ +

Node.js example

+ + + + + + + + + + + +

Shipping Address

+ + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ + script(type='text/javascript'). + var cardNonce; + var paymentForm = new SqPaymentForm({ + applicationId: '#{square_application_id}', + inputClass: 'sq-input', + inputStyles: [ + { + fontSize: '14px', + padding: '7px 12px', + backgroundColor: "transparent" + } + ], + cardNumber: { + elementId: 'sq-card-number', + placeholder: '0000 0000 0000 0000' + }, + cvv: { + elementId: 'sq-cvv', + placeholder: 'CVV' + }, + expirationDate: { + elementId: 'sq-expiration-date', + placeholder: 'MM/YY' + }, + postalCode: { + elementId: 'sq-postal-code', + placeholder: '94110' + }, + callbacks: { + cardNonceResponseReceived: function(errors, nonce, cardData) { + if (errors){ + var error_html = "" + for (var i =0; i < errors.length; i++){ + error_html += "
  • " + errors[i].message + "
  • "; + } + document.getElementById("card-errors").innerHTML = error_html; + document.getElementById('submit').disabled = false; + }else{ + document.getElementById("card-errors").innerHTML = ""; + chargeCardWithNonce(nonce); + } + + + }, + unsupportedBrowserDetected: function() { + // Alert the buyer + } + } + }); + + // build payment form after DOM load + document.addEventListener('page:change', function(){ + console.log('dom loaded') + paymentForm.build() + }); + + var paymentFormSubmit = function(){ + console.log('submit clicked'); + document.getElementById('submit').disabled = true; + paymentForm.requestCardNonce(); + return false; + } + + var chargeCardWithNonce = function(nonce) { + var product_id = document.getElementById('product_id').value; + var name = document.getElementById('name').value; + var email = document.getElementById('email').value; + var street_address_1 = document.getElementById('street_address_1').value; + var street_address_2 = document.getElementById('street_address_2').value; + var city = document.getElementById('city').value; + var state = document.getElementById('state').value; + var zip = document.getElementById('zip').value; + + var http = new XMLHttpRequest(); + var url = "/charges/charge_card"; + var params = "product_id=" + product_id + +"&name=" + name + +"&email=" + email + + "&nonce=" + nonce + + "&street_address_1=" + street_address_1 + + "&street_address_2=" + street_address_2 + + "&city=" + city + + "&state=" + state + + "&zip=" + zip; + + http.open("POST", url, true); + + //Send the proper header information along with the request + http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + http.setRequestHeader("X-CSRF-Token", "<%= form_authenticity_token %>"); + + http.onreadystatechange = function() {//Call a function when the state changes. + if(http.readyState == 4 && http.status == 200) { + var data = JSON.parse(http.responseText) + if (data.status == 200) { + document.getElementById("successNotification").style.display = "block"; + document.getElementById("payment-form").style.display = "none"; + window.scrollTo(0, 0); + }else if (data.status == 400){ + var error_html = "" + for (var i =0; i < data.errors.length; i++){ + error_html += "
  • " + data.errors[i].detail + "
  • "; + } + document.getElementById("card-errors").innerHTML = error_html; + document.getElementById('submit').disabled = false; + } + } + } + http.send(params); + } diff --git a/connect-examples/v2/node_payment/views/layout.jade b/connect-examples/v2/node_payment/views/layout.jade new file mode 100644 index 000000000..77fdfd769 --- /dev/null +++ b/connect-examples/v2/node_payment/views/layout.jade @@ -0,0 +1,8 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + script(type="text/javascript" src="https://js.squareup.com/v2/paymentform") + body + block content diff --git a/connect-examples/v2/rails_payment/.env.sample b/connect-examples/v2/rails_payment/.env.sample new file mode 100644 index 000000000..94d83afb3 --- /dev/null +++ b/connect-examples/v2/rails_payment/.env.sample @@ -0,0 +1,3 @@ +# save your values in .env +SQUARE_APPLICATION_ID=your-app-id +SQUARE_ACCESS_TOKEN=your-access-token diff --git a/connect-examples/v2/rails_payment/.gitignore b/connect-examples/v2/rails_payment/.gitignore new file mode 100644 index 000000000..fd6b5be17 --- /dev/null +++ b/connect-examples/v2/rails_payment/.gitignore @@ -0,0 +1,19 @@ +# See https://help.github.com/articles/ignoring-files for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile '~/.gitignore_global' + +# Ignore bundler config. +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 +/db/*.sqlite3-journal + +# Ignore all logfiles and tempfiles. +/log/* +!/log/.keep +tmp/ +.env +.byebug_history diff --git a/connect-examples/v2/rails_payment/.ruby-version b/connect-examples/v2/rails_payment/.ruby-version new file mode 100644 index 000000000..c043eea77 --- /dev/null +++ b/connect-examples/v2/rails_payment/.ruby-version @@ -0,0 +1 @@ +2.2.1 diff --git a/connect-examples/v2/rails_payment/Gemfile b/connect-examples/v2/rails_payment/Gemfile new file mode 100644 index 000000000..e7f3793c0 --- /dev/null +++ b/connect-examples/v2/rails_payment/Gemfile @@ -0,0 +1,54 @@ +source 'https://rubygems.org' + +ruby "2.2.1" + +# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' +gem 'rails', '4.2.6' +# Use sqlite3 as the database for Active Record +# gem 'sqlite3' +gem 'pg' +# Use SCSS for stylesheets +gem 'sass-rails', '~> 5.0' +# Use Uglifier as compressor for JavaScript assets +gem 'uglifier', '>= 1.3.0' +# Use CoffeeScript for .coffee assets and views +gem 'coffee-rails', '~> 4.1.0' +# See https://github.com/rails/execjs#readme for more supported runtimes +# gem 'therubyracer', platforms: :ruby + +# Use jquery as the JavaScript library +gem 'jquery-rails' +# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks +gem 'turbolinks' +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder +gem 'jbuilder', '~> 2.0' +# bundle exec rake doc:rails generates the API under doc/api. +gem 'sdoc', '~> 0.4.0', group: :doc + +gem 'square_connect', '~>2.0' + +gem 'rails_12factor', group: :production + +# Use ActiveModel has_secure_password +# gem 'bcrypt', '~> 3.1.7' + +# Use Unicorn as the app server +# gem 'unicorn' + +# Use Capistrano for deployment +# gem 'capistrano-rails', group: :development + +group :development, :test do + # Call 'byebug' anywhere in the code to stop execution and get a debugger console + gem 'byebug' + gem 'dotenv-rails' +end + +group :development do + # Access an IRB console on exception pages or by using <%= console %> in views + gem 'web-console', '~> 2.0' + + # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'spring' +end + diff --git a/connect-examples/v2/rails_payment/Gemfile.lock b/connect-examples/v2/rails_payment/Gemfile.lock new file mode 100644 index 000000000..eb1e606d2 --- /dev/null +++ b/connect-examples/v2/rails_payment/Gemfile.lock @@ -0,0 +1,180 @@ +GEM + remote: https://rubygems.org/ + specs: + actionmailer (4.2.6) + actionpack (= 4.2.6) + actionview (= 4.2.6) + activejob (= 4.2.6) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.6) + actionview (= 4.2.6) + activesupport (= 4.2.6) + rack (~> 1.6) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (4.2.6) + activesupport (= 4.2.6) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + activejob (4.2.6) + activesupport (= 4.2.6) + globalid (>= 0.3.0) + activemodel (4.2.6) + activesupport (= 4.2.6) + builder (~> 3.1) + activerecord (4.2.6) + activemodel (= 4.2.6) + activesupport (= 4.2.6) + arel (~> 6.0) + activesupport (4.2.6) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + arel (6.0.3) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) + builder (3.2.2) + byebug (8.2.2) + coffee-rails (4.1.1) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.1.x) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.10.0) + concurrent-ruby (1.0.1) + debug_inspector (0.0.2) + dotenv (2.1.0) + dotenv-rails (2.1.0) + dotenv (= 2.1.0) + railties (>= 4.0, < 5.1) + erubis (2.7.0) + ethon (0.8.1) + ffi (>= 1.3.0) + execjs (2.6.0) + ffi (1.9.10) + globalid (0.3.6) + activesupport (>= 4.1.0) + i18n (0.7.0) + jbuilder (2.4.1) + activesupport (>= 3.0.0, < 5.1) + multi_json (~> 1.2) + jquery-rails (4.1.1) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + json (1.8.3) + loofah (2.0.3) + nokogiri (>= 1.5.9) + mail (2.6.4) + mime-types (>= 1.16, < 4) + mime-types (3.0) + mime-types-data (~> 3.2015) + mime-types-data (3.2016.0221) + mini_portile2 (2.0.0) + minitest (5.8.4) + multi_json (1.11.2) + nokogiri (1.6.7.2) + mini_portile2 (~> 2.0.0.rc2) + pg (0.18.4) + rack (1.6.4) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.6) + actionmailer (= 4.2.6) + actionpack (= 4.2.6) + actionview (= 4.2.6) + activejob (= 4.2.6) + activemodel (= 4.2.6) + activerecord (= 4.2.6) + activesupport (= 4.2.6) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.6) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.7) + activesupport (>= 4.2.0.beta, < 5.0) + nokogiri (~> 1.6.0) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.3) + loofah (~> 2.0) + rails_12factor (0.0.3) + rails_serve_static_assets + rails_stdout_logging + rails_serve_static_assets (0.0.5) + rails_stdout_logging (0.0.5) + railties (4.2.6) + actionpack (= 4.2.6) + activesupport (= 4.2.6) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (11.1.1) + rdoc (4.2.2) + json (~> 1.4) + sass (3.4.21) + sass-rails (5.0.4) + railties (>= 4.0.0, < 5.0) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.1) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + spring (1.6.4) + sprockets (3.5.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.0.4) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + square_connect (2.0.0) + json (~> 1.4, >= 1.4.6) + typhoeus (~> 0.2, >= 0.2.1) + thor (0.19.1) + thread_safe (0.3.5) + tilt (2.0.2) + turbolinks (2.5.3) + coffee-rails + typhoeus (0.8.0) + ethon (>= 0.8.0) + tzinfo (1.2.2) + thread_safe (~> 0.1) + uglifier (3.0.0) + execjs (>= 0.3.0, < 3) + web-console (2.3.0) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + coffee-rails (~> 4.1.0) + dotenv-rails + jbuilder (~> 2.0) + jquery-rails + pg + rails (= 4.2.6) + rails_12factor + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + spring + square_connect (~> 2.0) + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + +BUNDLED WITH + 1.11.2 diff --git a/connect-examples/v2/rails_payment/README.rdoc b/connect-examples/v2/rails_payment/README.rdoc new file mode 100644 index 000000000..c2f2e9208 --- /dev/null +++ b/connect-examples/v2/rails_payment/README.rdoc @@ -0,0 +1,22 @@ +== README + +The root page has the selections for the different implemetations. + +Ruby version: 2.2.1 + +Rails version: 4.2.6 + +To get the app running: + +* bundle install + +* bundle exec rake db:create db:migrate # (No db in example, but keeps rails from complaining) + +* Add a .env file at the root with following values: + + SQUARE_APPLICATION_ID=your-app-id + SQUARE_ACCESS_TOKEN=your-access-token + +* Install & run mailcatcher and visit "http://localhost:1080" + +* rails s diff --git a/connect-examples/v2/rails_payment/Rakefile b/connect-examples/v2/rails_payment/Rakefile new file mode 100644 index 000000000..ba6b733dd --- /dev/null +++ b/connect-examples/v2/rails_payment/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Rails.application.load_tasks diff --git a/connect-examples/v2/rails_payment/app/assets/images/.keep b/connect-examples/v2/rails_payment/app/assets/images/.keep new file mode 100644 index 000000000..e69de29bb diff --git a/connect-examples/v2/rails_payment/app/assets/javascripts/application.js b/connect-examples/v2/rails_payment/app/assets/javascripts/application.js new file mode 100644 index 000000000..e28204545 --- /dev/null +++ b/connect-examples/v2/rails_payment/app/assets/javascripts/application.js @@ -0,0 +1,16 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require turbolinks + diff --git a/connect-examples/v2/rails_payment/app/assets/javascripts/charges.coffee b/connect-examples/v2/rails_payment/app/assets/javascripts/charges.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/connect-examples/v2/rails_payment/app/assets/javascripts/charges.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/connect-examples/v2/rails_payment/app/assets/javascripts/ember-template-compiler.js b/connect-examples/v2/rails_payment/app/assets/javascripts/ember-template-compiler.js new file mode 100644 index 000000000..3ba5139a5 --- /dev/null +++ b/connect-examples/v2/rails_payment/app/assets/javascripts/ember-template-compiler.js @@ -0,0 +1,20732 @@ +;(function() { +/*! + * @overview Ember - JavaScript Application Framework + * @copyright Copyright 2011-2016 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 2.4.3 + */ + +var enifed, requireModule, require, requirejs, Ember; +var mainContext = this; + +(function() { + var isNode = typeof window === 'undefined' && + typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; + + if (!isNode) { + Ember = this.Ember = this.Ember || {}; + } + + if (typeof Ember === 'undefined') { Ember = {}; }; + + if (typeof Ember.__loader === 'undefined') { + var registry = {}; + var seen = {}; + + enifed = function(name, deps, callback) { + var value = { }; + + if (!callback) { + value.deps = []; + value.callback = deps; + } else { + value.deps = deps; + value.callback = callback; + } + + registry[name] = value; + }; + + requirejs = require = requireModule = function(name) { + return internalRequire(name, null); + } + + // setup `require` module + require['default'] = require; + + require.has = function registryHas(moduleName) { + return !!registry[moduleName] || !!registry[moduleName + '/index']; + }; + + function missingModule(name, referrerName) { + if (referrerName) { + throw new Error('Could not find module ' + name + ' required by: ' + referrerName); + } else { + throw new Error('Could not find module ' + name); + } + } + + function internalRequire(_name, referrerName) { + var name = _name; + var mod = registry[name]; + + if (!mod) { + name = name + '/index'; + mod = registry[name]; + } + + var exports = seen[name]; + + if (exports !== undefined) { + return exports; + } + + exports = seen[name] = {}; + + if (!mod) { + missingModule(_name, referrerName); + } + + var deps = mod.deps; + var callback = mod.callback; + var length = deps.length; + var reified = new Array(length);; + + for (var i = 0; i < length; i++) { + if (deps[i] === 'exports') { + reified[i] = exports; + } else if (deps[i] === 'require') { + reified[i] = require; + } else { + reified[i] = internalRequire(deps[i], name); + } + } + + callback.apply(this, reified); + + return exports; + }; + + requirejs._eak_seen = registry; + + Ember.__loader = { + define: enifed, + require: require, + registry: registry + }; + } else { + enifed = Ember.__loader.define; + requirejs = require = requireModule = Ember.__loader.require; + } +})(); + +enifed("backburner/binary-search", ["exports"], function (exports) { + "use strict"; + + exports.default = binarySearch; + + function binarySearch(time, timers) { + var start = 0; + var end = timers.length - 2; + var middle, l; + + while (start < end) { + // since timers is an array of pairs 'l' will always + // be an integer + l = (end - start) / 2; + + // compensate for the index in case even number + // of pairs inside timers + middle = start + l - l % 2; + + if (time >= timers[middle]) { + start = middle + 2; + } else { + end = middle; + } + } + + return time >= timers[start] ? start + 2 : start; + } +}); +enifed('backburner/deferred-action-queues', ['exports', 'backburner/utils', 'backburner/queue'], function (exports, _backburnerUtils, _backburnerQueue) { + 'use strict'; + + exports.default = DeferredActionQueues; + + function DeferredActionQueues(queueNames, options) { + var queues = this.queues = {}; + this.queueNames = queueNames = queueNames || []; + + this.options = options; + + _backburnerUtils.each(queueNames, function (queueName) { + queues[queueName] = new _backburnerQueue.default(queueName, options[queueName], options); + }); + } + + function noSuchQueue(name) { + throw new Error('You attempted to schedule an action in a queue (' + name + ') that doesn\'t exist'); + } + + function noSuchMethod(name) { + throw new Error('You attempted to schedule an action in a queue (' + name + ') for a method that doesn\'t exist'); + } + + DeferredActionQueues.prototype = { + schedule: function (name, target, method, args, onceFlag, stack) { + var queues = this.queues; + var queue = queues[name]; + + if (!queue) { + noSuchQueue(name); + } + + if (!method) { + noSuchMethod(name); + } + + if (onceFlag) { + return queue.pushUnique(target, method, args, stack); + } else { + return queue.push(target, method, args, stack); + } + }, + + flush: function () { + var queues = this.queues; + var queueNames = this.queueNames; + var queueName, queue; + var queueNameIndex = 0; + var numberOfQueues = queueNames.length; + + while (queueNameIndex < numberOfQueues) { + queueName = queueNames[queueNameIndex]; + queue = queues[queueName]; + + var numberOfQueueItems = queue._queue.length; + + if (numberOfQueueItems === 0) { + queueNameIndex++; + } else { + queue.flush(false /* async */); + queueNameIndex = 0; + } + } + } + }; +}); +enifed('backburner/platform', ['exports'], function (exports) { + 'use strict'; + + var GlobalContext; + + /* global self */ + if (typeof self === 'object') { + GlobalContext = self; + + /* global global */ + } else if (typeof global === 'object') { + GlobalContext = global; + + /* global window */ + } else if (typeof window === 'object') { + GlobalContext = window; + } else { + throw new Error('no global: `self`, `global` nor `window` was found'); + } + + exports.default = GlobalContext; +}); +enifed('backburner/queue', ['exports', 'backburner/utils'], function (exports, _backburnerUtils) { + 'use strict'; + + exports.default = Queue; + + function Queue(name, options, globalOptions) { + this.name = name; + this.globalOptions = globalOptions || {}; + this.options = options; + this._queue = []; + this.targetQueues = {}; + this._queueBeingFlushed = undefined; + } + + Queue.prototype = { + push: function (target, method, args, stack) { + var queue = this._queue; + queue.push(target, method, args, stack); + + return { + queue: this, + target: target, + method: method + }; + }, + + pushUniqueWithoutGuid: function (target, method, args, stack) { + var queue = this._queue; + + for (var i = 0, l = queue.length; i < l; i += 4) { + var currentTarget = queue[i]; + var currentMethod = queue[i + 1]; + + if (currentTarget === target && currentMethod === method) { + queue[i + 2] = args; // replace args + queue[i + 3] = stack; // replace stack + return; + } + } + + queue.push(target, method, args, stack); + }, + + targetQueue: function (targetQueue, target, method, args, stack) { + var queue = this._queue; + + for (var i = 0, l = targetQueue.length; i < l; i += 2) { + var currentMethod = targetQueue[i]; + var currentIndex = targetQueue[i + 1]; + + if (currentMethod === method) { + queue[currentIndex + 2] = args; // replace args + queue[currentIndex + 3] = stack; // replace stack + return; + } + } + + targetQueue.push(method, queue.push(target, method, args, stack) - 4); + }, + + pushUniqueWithGuid: function (guid, target, method, args, stack) { + var hasLocalQueue = this.targetQueues[guid]; + + if (hasLocalQueue) { + this.targetQueue(hasLocalQueue, target, method, args, stack); + } else { + this.targetQueues[guid] = [method, this._queue.push(target, method, args, stack) - 4]; + } + + return { + queue: this, + target: target, + method: method + }; + }, + + pushUnique: function (target, method, args, stack) { + var KEY = this.globalOptions.GUID_KEY; + + if (target && KEY) { + var guid = target[KEY]; + if (guid) { + return this.pushUniqueWithGuid(guid, target, method, args, stack); + } + } + + this.pushUniqueWithoutGuid(target, method, args, stack); + + return { + queue: this, + target: target, + method: method + }; + }, + + invoke: function (target, method, args, _, _errorRecordedForStack) { + if (args && args.length > 0) { + method.apply(target, args); + } else { + method.call(target); + } + }, + + invokeWithOnError: function (target, method, args, onError, errorRecordedForStack) { + try { + if (args && args.length > 0) { + method.apply(target, args); + } else { + method.call(target); + } + } catch (error) { + onError(error, errorRecordedForStack); + } + }, + + flush: function (sync) { + var queue = this._queue; + var length = queue.length; + + if (length === 0) { + return; + } + + var globalOptions = this.globalOptions; + var options = this.options; + var before = options && options.before; + var after = options && options.after; + var onError = globalOptions.onError || globalOptions.onErrorTarget && globalOptions.onErrorTarget[globalOptions.onErrorMethod]; + var target, method, args, errorRecordedForStack; + var invoke = onError ? this.invokeWithOnError : this.invoke; + + this.targetQueues = Object.create(null); + var queueItems = this._queueBeingFlushed = this._queue.slice(); + this._queue = []; + + if (before) { + before(); + } + + for (var i = 0; i < length; i += 4) { + target = queueItems[i]; + method = queueItems[i + 1]; + args = queueItems[i + 2]; + errorRecordedForStack = queueItems[i + 3]; // Debugging assistance + + if (_backburnerUtils.isString(method)) { + method = target[method]; + } + + // method could have been nullified / canceled during flush + if (method) { + // + // ** Attention intrepid developer ** + // + // To find out the stack of this task when it was scheduled onto + // the run loop, add the following to your app.js: + // + // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production. + // + // Once that is in place, when you are at a breakpoint and navigate + // here in the stack explorer, you can look at `errorRecordedForStack.stack`, + // which will be the captured stack when this job was scheduled. + // + invoke(target, method, args, onError, errorRecordedForStack); + } + } + + if (after) { + after(); + } + + this._queueBeingFlushed = undefined; + + if (sync !== false && this._queue.length > 0) { + // check if new items have been added + this.flush(true); + } + }, + + cancel: function (actionToCancel) { + var queue = this._queue, + currentTarget, + currentMethod, + i, + l; + var target = actionToCancel.target; + var method = actionToCancel.method; + var GUID_KEY = this.globalOptions.GUID_KEY; + + if (GUID_KEY && this.targetQueues && target) { + var targetQueue = this.targetQueues[target[GUID_KEY]]; + + if (targetQueue) { + for (i = 0, l = targetQueue.length; i < l; i++) { + if (targetQueue[i] === method) { + targetQueue.splice(i, 1); + } + } + } + } + + for (i = 0, l = queue.length; i < l; i += 4) { + currentTarget = queue[i]; + currentMethod = queue[i + 1]; + + if (currentTarget === target && currentMethod === method) { + queue.splice(i, 4); + return true; + } + } + + // if not found in current queue + // could be in the queue that is being flushed + queue = this._queueBeingFlushed; + + if (!queue) { + return; + } + + for (i = 0, l = queue.length; i < l; i += 4) { + currentTarget = queue[i]; + currentMethod = queue[i + 1]; + + if (currentTarget === target && currentMethod === method) { + // don't mess with array during flush + // just nullify the method + queue[i + 1] = null; + return true; + } + } + } + }; +}); +enifed('backburner/utils', ['exports'], function (exports) { + 'use strict'; + + exports.each = each; + exports.isString = isString; + exports.isFunction = isFunction; + exports.isNumber = isNumber; + exports.isCoercableNumber = isCoercableNumber; + var NUMBER = /\d+/; + + function each(collection, callback) { + for (var i = 0; i < collection.length; i++) { + callback(collection[i]); + } + } + + function isString(suspect) { + return typeof suspect === 'string'; + } + + function isFunction(suspect) { + return typeof suspect === 'function'; + } + + function isNumber(suspect) { + return typeof suspect === 'number'; + } + + function isCoercableNumber(number) { + return isNumber(number) || NUMBER.test(number); + } +}); +enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'backburner/binary-search', 'backburner/deferred-action-queues'], function (exports, _backburnerUtils, _backburnerPlatform, _backburnerBinarySearch, _backburnerDeferredActionQueues) { + 'use strict'; + + exports.default = Backburner; + + function Backburner(queueNames, options) { + this.queueNames = queueNames; + this.options = options || {}; + if (!this.options.defaultQueue) { + this.options.defaultQueue = queueNames[0]; + } + this.instanceStack = []; + this._debouncees = []; + this._throttlers = []; + this._eventCallbacks = { + end: [], + begin: [] + }; + + var _this = this; + this._boundClearItems = function () { + clearItems(); + }; + + this._timerTimeoutId = undefined; + this._timers = []; + + this._platform = this.options._platform || _backburnerPlatform.default; + + this._boundRunExpiredTimers = function () { + _this._runExpiredTimers(); + }; + } + + Backburner.prototype = { + begin: function () { + var options = this.options; + var onBegin = options && options.onBegin; + var previousInstance = this.currentInstance; + + if (previousInstance) { + this.instanceStack.push(previousInstance); + } + + this.currentInstance = new _backburnerDeferredActionQueues.default(this.queueNames, options); + this._trigger('begin', this.currentInstance, previousInstance); + if (onBegin) { + onBegin(this.currentInstance, previousInstance); + } + }, + + end: function () { + var options = this.options; + var onEnd = options && options.onEnd; + var currentInstance = this.currentInstance; + var nextInstance = null; + + // Prevent double-finally bug in Safari 6.0.2 and iOS 6 + // This bug appears to be resolved in Safari 6.0.5 and iOS 7 + var finallyAlreadyCalled = false; + try { + currentInstance.flush(); + } finally { + if (!finallyAlreadyCalled) { + finallyAlreadyCalled = true; + + this.currentInstance = null; + + if (this.instanceStack.length) { + nextInstance = this.instanceStack.pop(); + this.currentInstance = nextInstance; + } + this._trigger('end', currentInstance, nextInstance); + if (onEnd) { + onEnd(currentInstance, nextInstance); + } + } + } + }, + + /** + Trigger an event. Supports up to two arguments. Designed around + triggering transition events from one run loop instance to the + next, which requires an argument for the first instance and then + an argument for the next instance. + @private + @method _trigger + @param {String} eventName + @param {any} arg1 + @param {any} arg2 + */ + _trigger: function (eventName, arg1, arg2) { + var callbacks = this._eventCallbacks[eventName]; + if (callbacks) { + for (var i = 0; i < callbacks.length; i++) { + callbacks[i](arg1, arg2); + } + } + }, + + on: function (eventName, callback) { + if (typeof callback !== 'function') { + throw new TypeError('Callback must be a function'); + } + var callbacks = this._eventCallbacks[eventName]; + if (callbacks) { + callbacks.push(callback); + } else { + throw new TypeError('Cannot on() event "' + eventName + '" because it does not exist'); + } + }, + + off: function (eventName, callback) { + if (eventName) { + var callbacks = this._eventCallbacks[eventName]; + var callbackFound = false; + if (!callbacks) return; + if (callback) { + for (var i = 0; i < callbacks.length; i++) { + if (callbacks[i] === callback) { + callbackFound = true; + callbacks.splice(i, 1); + i--; + } + } + } + if (!callbackFound) { + throw new TypeError('Cannot off() callback that does not exist'); + } + } else { + throw new TypeError('Cannot off() event "' + eventName + '" because it does not exist'); + } + }, + + run: function () /* target, method, args */{ + var length = arguments.length; + var method, target, args; + + if (length === 1) { + method = arguments[0]; + target = null; + } else { + target = arguments[0]; + method = arguments[1]; + } + + if (_backburnerUtils.isString(method)) { + method = target[method]; + } + + if (length > 2) { + args = new Array(length - 2); + for (var i = 0, l = length - 2; i < l; i++) { + args[i] = arguments[i + 2]; + } + } else { + args = []; + } + + var onError = getOnError(this.options); + + this.begin(); + + // guard against Safari 6's double-finally bug + var didFinally = false; + + if (onError) { + try { + return method.apply(target, args); + } catch (error) { + onError(error); + } finally { + if (!didFinally) { + didFinally = true; + this.end(); + } + } + } else { + try { + return method.apply(target, args); + } finally { + if (!didFinally) { + didFinally = true; + this.end(); + } + } + } + }, + + /* + Join the passed method with an existing queue and execute immediately, + if there isn't one use `Backburner#run`. + The join method is like the run method except that it will schedule into + an existing queue if one already exists. In either case, the join method will + immediately execute the passed in function and return its result. + @method join + @param {Object} target + @param {Function} method The method to be executed + @param {any} args The method arguments + @return method result + */ + join: function () /* target, method, args */{ + if (!this.currentInstance) { + return this.run.apply(this, arguments); + } + + var length = arguments.length; + var method, target; + + if (length === 1) { + method = arguments[0]; + target = null; + } else { + target = arguments[0]; + method = arguments[1]; + } + + if (_backburnerUtils.isString(method)) { + method = target[method]; + } + + if (length === 1) { + return method(); + } else if (length === 2) { + return method.call(target); + } else { + var args = new Array(length - 2); + for (var i = 0, l = length - 2; i < l; i++) { + args[i] = arguments[i + 2]; + } + return method.apply(target, args); + } + }, + + /* + Defer the passed function to run inside the specified queue. + @method defer + @param {String} queueName + @param {Object} target + @param {Function|String} method The method or method name to be executed + @param {any} args The method arguments + @return method result + */ + defer: function (queueName /* , target, method, args */) { + var length = arguments.length; + var method, target, args; + + if (length === 2) { + method = arguments[1]; + target = null; + } else { + target = arguments[1]; + method = arguments[2]; + } + + if (_backburnerUtils.isString(method)) { + method = target[method]; + } + + var stack = this.DEBUG ? new Error() : undefined; + + if (length > 3) { + args = new Array(length - 3); + for (var i = 3; i < length; i++) { + args[i - 3] = arguments[i]; + } + } else { + args = undefined; + } + + if (!this.currentInstance) { + createAutorun(this); + } + return this.currentInstance.schedule(queueName, target, method, args, false, stack); + }, + + deferOnce: function (queueName /* , target, method, args */) { + var length = arguments.length; + var method, target, args; + + if (length === 2) { + method = arguments[1]; + target = null; + } else { + target = arguments[1]; + method = arguments[2]; + } + + if (_backburnerUtils.isString(method)) { + method = target[method]; + } + + var stack = this.DEBUG ? new Error() : undefined; + + if (length > 3) { + args = new Array(length - 3); + for (var i = 3; i < length; i++) { + args[i - 3] = arguments[i]; + } + } else { + args = undefined; + } + + if (!this.currentInstance) { + createAutorun(this); + } + return this.currentInstance.schedule(queueName, target, method, args, true, stack); + }, + + setTimeout: function () { + var l = arguments.length; + var args = new Array(l); + + for (var x = 0; x < l; x++) { + args[x] = arguments[x]; + } + + var length = args.length, + method, + wait, + target, + methodOrTarget, + methodOrWait, + methodOrArgs; + + if (length === 0) { + return; + } else if (length === 1) { + method = args.shift(); + wait = 0; + } else if (length === 2) { + methodOrTarget = args[0]; + methodOrWait = args[1]; + + if (_backburnerUtils.isFunction(methodOrWait) || _backburnerUtils.isFunction(methodOrTarget[methodOrWait])) { + target = args.shift(); + method = args.shift(); + wait = 0; + } else if (_backburnerUtils.isCoercableNumber(methodOrWait)) { + method = args.shift(); + wait = args.shift(); + } else { + method = args.shift(); + wait = 0; + } + } else { + var last = args[args.length - 1]; + + if (_backburnerUtils.isCoercableNumber(last)) { + wait = args.pop(); + } else { + wait = 0; + } + + methodOrTarget = args[0]; + methodOrArgs = args[1]; + + if (_backburnerUtils.isFunction(methodOrArgs) || _backburnerUtils.isString(methodOrArgs) && methodOrTarget !== null && methodOrArgs in methodOrTarget) { + target = args.shift(); + method = args.shift(); + } else { + method = args.shift(); + } + } + + var executeAt = Date.now() + parseInt(wait, 10); + + if (_backburnerUtils.isString(method)) { + method = target[method]; + } + + var onError = getOnError(this.options); + + function fn() { + if (onError) { + try { + method.apply(target, args); + } catch (e) { + onError(e); + } + } else { + method.apply(target, args); + } + } + + return this._setTimeout(fn, executeAt); + }, + + _setTimeout: function (fn, executeAt) { + if (this._timers.length === 0) { + this._timers.push(executeAt, fn); + this._installTimerTimeout(); + return fn; + } + + // find position to insert + var i = _backburnerBinarySearch.default(executeAt, this._timers); + + this._timers.splice(i, 0, executeAt, fn); + + // we should be the new earliest timer if i == 0 + if (i === 0) { + this._reinstallTimerTimeout(); + } + + return fn; + }, + + throttle: function (target, method /* , args, wait, [immediate] */) { + var backburner = this; + var args = new Array(arguments.length); + for (var i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } + var immediate = args.pop(); + var wait, throttler, index, timer; + + if (_backburnerUtils.isNumber(immediate) || _backburnerUtils.isString(immediate)) { + wait = immediate; + immediate = true; + } else { + wait = args.pop(); + } + + wait = parseInt(wait, 10); + + index = findThrottler(target, method, this._throttlers); + if (index > -1) { + return this._throttlers[index]; + } // throttled + + timer = this._platform.setTimeout(function () { + if (!immediate) { + backburner.run.apply(backburner, args); + } + var index = findThrottler(target, method, backburner._throttlers); + if (index > -1) { + backburner._throttlers.splice(index, 1); + } + }, wait); + + if (immediate) { + this.run.apply(this, args); + } + + throttler = [target, method, timer]; + + this._throttlers.push(throttler); + + return throttler; + }, + + debounce: function (target, method /* , args, wait, [immediate] */) { + var backburner = this; + var args = new Array(arguments.length); + for (var i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } + + var immediate = args.pop(); + var wait, index, debouncee, timer; + + if (_backburnerUtils.isNumber(immediate) || _backburnerUtils.isString(immediate)) { + wait = immediate; + immediate = false; + } else { + wait = args.pop(); + } + + wait = parseInt(wait, 10); + // Remove debouncee + index = findDebouncee(target, method, this._debouncees); + + if (index > -1) { + debouncee = this._debouncees[index]; + this._debouncees.splice(index, 1); + this._platform.clearTimeout(debouncee[2]); + } + + timer = this._platform.setTimeout(function () { + if (!immediate) { + backburner.run.apply(backburner, args); + } + var index = findDebouncee(target, method, backburner._debouncees); + if (index > -1) { + backburner._debouncees.splice(index, 1); + } + }, wait); + + if (immediate && index === -1) { + backburner.run.apply(backburner, args); + } + + debouncee = [target, method, timer]; + + backburner._debouncees.push(debouncee); + + return debouncee; + }, + + cancelTimers: function () { + _backburnerUtils.each(this._throttlers, this._boundClearItems); + this._throttlers = []; + + _backburnerUtils.each(this._debouncees, this._boundClearItems); + this._debouncees = []; + + this._clearTimerTimeout(); + this._timers = []; + + if (this._autorun) { + this._platform.clearTimeout(this._autorun); + this._autorun = null; + } + }, + + hasTimers: function () { + return !!this._timers.length || !!this._debouncees.length || !!this._throttlers.length || this._autorun; + }, + + cancel: function (timer) { + var timerType = typeof timer; + + if (timer && timerType === 'object' && timer.queue && timer.method) { + // we're cancelling a deferOnce + return timer.queue.cancel(timer); + } else if (timerType === 'function') { + // we're cancelling a setTimeout + for (var i = 0, l = this._timers.length; i < l; i += 2) { + if (this._timers[i + 1] === timer) { + this._timers.splice(i, 2); // remove the two elements + if (i === 0) { + this._reinstallTimerTimeout(); + } + return true; + } + } + } else if (Object.prototype.toString.call(timer) === '[object Array]') { + // we're cancelling a throttle or debounce + return this._cancelItem(findThrottler, this._throttlers, timer) || this._cancelItem(findDebouncee, this._debouncees, timer); + } else { + return; // timer was null or not a timer + } + }, + + _cancelItem: function (findMethod, array, timer) { + var item, index; + + if (timer.length < 3) { + return false; + } + + index = findMethod(timer[0], timer[1], array); + + if (index > -1) { + + item = array[index]; + + if (item[2] === timer[2]) { + array.splice(index, 1); + this._platform.clearTimeout(timer[2]); + return true; + } + } + + return false; + }, + + _runExpiredTimers: function () { + this._timerTimeoutId = undefined; + this.run(this, this._scheduleExpiredTimers); + }, + + _scheduleExpiredTimers: function () { + var n = Date.now(); + var timers = this._timers; + var i = 0; + var l = timers.length; + for (; i < l; i += 2) { + var executeAt = timers[i]; + var fn = timers[i + 1]; + if (executeAt <= n) { + this.schedule(this.options.defaultQueue, null, fn); + } else { + break; + } + } + timers.splice(0, i); + this._installTimerTimeout(); + }, + + _reinstallTimerTimeout: function () { + this._clearTimerTimeout(); + this._installTimerTimeout(); + }, + + _clearTimerTimeout: function () { + if (!this._timerTimeoutId) { + return; + } + this._platform.clearTimeout(this._timerTimeoutId); + this._timerTimeoutId = undefined; + }, + + _installTimerTimeout: function () { + if (!this._timers.length) { + return; + } + var minExpiresAt = this._timers[0]; + var n = Date.now(); + var wait = Math.max(0, minExpiresAt - n); + this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait); + } + }; + + Backburner.prototype.schedule = Backburner.prototype.defer; + Backburner.prototype.scheduleOnce = Backburner.prototype.deferOnce; + Backburner.prototype.later = Backburner.prototype.setTimeout; + + function getOnError(options) { + return options.onError || options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]; + } + + function createAutorun(backburner) { + backburner.begin(); + backburner._autorun = backburner._platform.setTimeout(function () { + backburner._autorun = null; + backburner.end(); + }); + } + + function findDebouncee(target, method, debouncees) { + return findItem(target, method, debouncees); + } + + function findThrottler(target, method, throttlers) { + return findItem(target, method, throttlers); + } + + function findItem(target, method, collection) { + var item; + var index = -1; + + for (var i = 0, l = collection.length; i < l; i++) { + item = collection[i]; + if (item[0] === target && item[1] === method) { + index = i; + break; + } + } + + return index; + } + + function clearItems(item) { + this._platform.clearTimeout(item[2]); + } +}); +enifed('ember-debug/deprecate', ['exports', 'ember-metal/core', 'ember-metal/error', 'ember-metal/logger', 'ember-debug/handlers'], function (exports, _emberMetalCore, _emberMetalError, _emberMetalLogger, _emberDebugHandlers) { + /*global __fail__*/ + + 'use strict'; + + var _slice = Array.prototype.slice; + exports.registerHandler = registerHandler; + exports.default = deprecate; + + function registerHandler(handler) { + _emberDebugHandlers.registerHandler('deprecate', handler); + } + + function formatMessage(_message, options) { + var message = _message; + + if (options && options.id) { + message = message + (' [deprecation id: ' + options.id + ']'); + } + + if (options && options.url) { + message += ' See ' + options.url + ' for more details.'; + } + + return message; + } + + registerHandler(function logDeprecationToConsole(message, options) { + var updatedMessage = formatMessage(message, options); + + _emberMetalLogger.default.warn('DEPRECATION: ' + updatedMessage); + }); + + registerHandler(function logDeprecationStackTrace(message, options, next) { + if (_emberMetalCore.default.LOG_STACKTRACE_ON_DEPRECATION) { + var stackStr = ''; + var error = undefined, + stack = undefined; + + // When using new Error, we can't do the arguments check for Chrome. Alternatives are welcome + try { + __fail__.fail(); + } catch (e) { + error = e; + } + + if (error.stack) { + if (error['arguments']) { + // Chrome + stack = error.stack.replace(/^\s+at\s+/gm, '').replace(/^([^\(]+?)([\n$])/gm, '{anonymous}($1)$2').replace(/^Object.\s*\(([^\)]+)\)/gm, '{anonymous}($1)').split('\n'); + stack.shift(); + } else { + // Firefox + stack = error.stack.replace(/(?:\n@:0)?\s+$/m, '').replace(/^\(/gm, '{anonymous}(').split('\n'); + } + + stackStr = '\n ' + stack.slice(2).join('\n '); + } + + var updatedMessage = formatMessage(message, options); + + _emberMetalLogger.default.warn('DEPRECATION: ' + updatedMessage + stackStr); + } else { + next.apply(undefined, arguments); + } + }); + + registerHandler(function raiseOnDeprecation(message, options, next) { + if (_emberMetalCore.default.ENV.RAISE_ON_DEPRECATION) { + var updatedMessage = formatMessage(message); + + throw new _emberMetalError.default(updatedMessage); + } else { + next.apply(undefined, arguments); + } + }); + + var missingOptionsDeprecation = 'When calling `Ember.deprecate` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include `id` and `until` properties.'; + exports.missingOptionsDeprecation = missingOptionsDeprecation; + var missingOptionsIdDeprecation = 'When calling `Ember.deprecate` you must provide `id` in options.'; + exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation; + var missingOptionsUntilDeprecation = 'When calling `Ember.deprecate` you must provide `until` in options.'; + + exports.missingOptionsUntilDeprecation = missingOptionsUntilDeprecation; + /** + @module ember + @submodule ember-debug + */ + + /** + Display a deprecation warning with the provided message and a stack trace + (Chrome and Firefox only). Ember build tools will remove any calls to + `Ember.deprecate()` when doing a production build. + + @method deprecate + @param {String} message A description of the deprecation. + @param {Boolean} test A boolean. If falsy, the deprecation + will be displayed. + @param {Object} options An object that can be used to pass + in a `url` to the transition guide on the emberjs.com website, and a unique + `id` for this deprecation. The `id` can be used by Ember debugging tools + to change the behavior (raise, log or silence) for that specific deprecation. + The `id` should be namespaced by dots, e.g. "view.helper.select". + @for Ember + @public + */ + + function deprecate(message, test, options) { + if (!options || !options.id && !options.until) { + deprecate(missingOptionsDeprecation, false, { + id: 'ember-debug.deprecate-options-missing', + until: '3.0.0', + url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options' + }); + } + + if (options && !options.id) { + deprecate(missingOptionsIdDeprecation, false, { + id: 'ember-debug.deprecate-id-missing', + until: '3.0.0', + url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options' + }); + } + + if (options && !options.until) { + deprecate(missingOptionsUntilDeprecation, options && options.until, { + id: 'ember-debug.deprecate-until-missing', + until: '3.0.0', + url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options' + }); + } + + _emberDebugHandlers.invoke.apply(undefined, ['deprecate'].concat(_slice.call(arguments))); + } +}); +enifed('ember-debug/handlers', ['exports', 'ember-debug/is-plain-function', 'ember-debug/deprecate'], function (exports, _emberDebugIsPlainFunction, _emberDebugDeprecate) { + 'use strict'; + + exports.generateTestAsFunctionDeprecation = generateTestAsFunctionDeprecation; + exports.registerHandler = registerHandler; + exports.invoke = invoke; + var HANDLERS = {}; + + exports.HANDLERS = HANDLERS; + + function generateTestAsFunctionDeprecation(source) { + return 'Calling `' + source + '` with a function argument is deprecated. Please ' + 'use `!!Constructor` for constructors, or an `IIFE` to compute the test for deprecation. ' + 'In a future version functions will be treated as truthy values instead of being executed.'; + } + + function normalizeTest(test, source) { + if (_emberDebugIsPlainFunction.default(test)) { + _emberDebugDeprecate.default(generateTestAsFunctionDeprecation(source), false, { id: 'ember-debug.deprecate-test-as-function', until: '2.5.0' }); + + return test(); + } + + return test; + } + + function registerHandler(type, callback) { + var nextHandler = HANDLERS[type] || function () {}; + + HANDLERS[type] = function (message, options) { + callback(message, options, nextHandler); + }; + } + + function invoke(type, message, test, options) { + if (normalizeTest(test, 'Ember.' + type)) { + return; + } + + var handlerForType = HANDLERS[type]; + + if (!handlerForType) { + return; + } + + if (handlerForType) { + handlerForType(message, options); + } + } +}); +enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/error', 'ember-metal/logger', 'ember-metal/environment', 'ember-debug/deprecate', 'ember-debug/warn', 'ember-debug/is-plain-function', 'ember-debug/handlers'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalFeatures, _emberMetalError, _emberMetalLogger, _emberMetalEnvironment, _emberDebugDeprecate, _emberDebugWarn, _emberDebugIsPlainFunction, _emberDebugHandlers) { + 'use strict'; + + exports._warnIfUsingStrippedFeatureFlags = _warnIfUsingStrippedFeatureFlags; + + /** + @module ember + @submodule ember-debug + */ + + /** + @class Ember + @public + */ + + /** + Define an assertion that will throw an exception if the condition is not + met. Ember build tools will remove any calls to `Ember.assert()` when + doing a production build. Example: + + ```javascript + // Test for truthiness + Ember.assert('Must pass a valid object', obj); + + // Fail unconditionally + Ember.assert('This code path should never be run'); + ``` + + @method assert + @param {String} desc A description of the assertion. This will become + the text of the Error thrown if the assertion fails. + @param {Boolean} test Must be truthy for the assertion to pass. If + falsy, an exception will be thrown. + @public + */ + _emberMetalDebug.setDebugFunction('assert', function assert(desc, test) { + var throwAssertion = undefined; + + if (_emberDebugIsPlainFunction.default(test)) { + _emberMetalDebug.deprecate(_emberDebugHandlers.generateTestAsFunctionDeprecation('Ember.assert'), false, { id: 'ember-debug.deprecate-test-as-function', until: '2.5.0' }); + + throwAssertion = !test(); + } else { + throwAssertion = !test; + } + + if (throwAssertion) { + throw new _emberMetalError.default('Assertion Failed: ' + desc); + } + }); + + /** + Display a debug notice. Ember build tools will remove any calls to + `Ember.debug()` when doing a production build. + + ```javascript + Ember.debug('I\'m a debug notice!'); + ``` + + @method debug + @param {String} message A debug message to display. + @public + */ + _emberMetalDebug.setDebugFunction('debug', function debug(message) { + _emberMetalLogger.default.debug('DEBUG: ' + message); + }); + + /** + Display an info notice. + + @method info + @private + */ + _emberMetalDebug.setDebugFunction('info', function info() { + _emberMetalLogger.default.info.apply(undefined, arguments); + }); + + /** + Alias an old, deprecated method with its new counterpart. + + Display a deprecation warning with the provided message and a stack trace + (Chrome and Firefox only) when the assigned method is called. + + Ember build tools will not remove calls to `Ember.deprecateFunc()`, though + no warnings will be shown in production. + + ```javascript + Ember.oldMethod = Ember.deprecateFunc('Please use the new, updated method', Ember.newMethod); + ``` + + @method deprecateFunc + @param {String} message A description of the deprecation. + @param {Object} [options] The options object for Ember.deprecate. + @param {Function} func The new function called to replace its deprecated counterpart. + @return {Function} a new function that wrapped the original function with a deprecation warning + @private + */ + _emberMetalDebug.setDebugFunction('deprecateFunc', function deprecateFunc() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + if (args.length === 3) { + var _ret = (function () { + var message = args[0]; + var options = args[1]; + var func = args[2]; + + return { + v: function () { + _emberMetalDebug.deprecate(message, false, options); + return func.apply(this, arguments); + } + }; + })(); + + if (typeof _ret === 'object') return _ret.v; + } else { + var _ret2 = (function () { + var message = args[0]; + var func = args[1]; + + return { + v: function () { + _emberMetalDebug.deprecate(message); + return func.apply(this, arguments); + } + }; + })(); + + if (typeof _ret2 === 'object') return _ret2.v; + } + }); + + /** + Run a function meant for debugging. Ember build tools will remove any calls to + `Ember.runInDebug()` when doing a production build. + + ```javascript + Ember.runInDebug(() => { + Ember.Component.reopen({ + didInsertElement() { + console.log("I'm happy"); + } + }); + }); + ``` + + @method runInDebug + @param {Function} func The function to be executed. + @since 1.5.0 + @public + */ + _emberMetalDebug.setDebugFunction('runInDebug', function runInDebug(func) { + func(); + }); + + _emberMetalDebug.setDebugFunction('debugSeal', function debugSeal(obj) { + Object.seal(obj); + }); + + _emberMetalDebug.setDebugFunction('deprecate', _emberDebugDeprecate.default); + + _emberMetalDebug.setDebugFunction('warn', _emberDebugWarn.default); + + /** + Will call `Ember.warn()` if ENABLE_OPTIONAL_FEATURES or + any specific FEATURES flag is truthy. + + This method is called automatically in debug canary builds. + + @private + @method _warnIfUsingStrippedFeatureFlags + @return {void} + */ + + function _warnIfUsingStrippedFeatureFlags(FEATURES, featuresWereStripped) { + if (featuresWereStripped) { + _emberMetalDebug.warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberMetalCore.default.ENV.ENABLE_OPTIONAL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' }); + + for (var key in FEATURES) { + if (FEATURES.hasOwnProperty(key) && key !== 'isEnabled') { + _emberMetalDebug.warn('FEATURE["' + key + '"] is set as enabled, but FEATURE flags are only available in canary builds.', !FEATURES[key], { id: 'ember-debug.feature-flag-with-features-stripped' }); + } + } + } + } + + if (!_emberMetalCore.default.testing) { + // Complain if they're using FEATURE flags in builds other than canary + _emberMetalFeatures.FEATURES['features-stripped-test'] = true; + var featuresWereStripped = true; + + delete _emberMetalFeatures.FEATURES['features-stripped-test']; + _warnIfUsingStrippedFeatureFlags(_emberMetalCore.default.ENV.FEATURES, featuresWereStripped); + + // Inform the developer about the Ember Inspector if not installed. + var isFirefox = _emberMetalEnvironment.default.isFirefox; + var isChrome = _emberMetalEnvironment.default.isChrome; + + if (typeof window !== 'undefined' && (isFirefox || isChrome) && window.addEventListener) { + window.addEventListener('load', function () { + if (document.documentElement && document.documentElement.dataset && !document.documentElement.dataset.emberExtension) { + var downloadURL; + + if (isChrome) { + downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi'; + } else if (isFirefox) { + downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/'; + } + + _emberMetalDebug.debug('For more advanced debugging, install the Ember Inspector from ' + downloadURL); + } + }, false); + } + } + /** + @public + @class Ember.Debug + */ + _emberMetalCore.default.Debug = {}; + + /** + Allows for runtime registration of handler functions that override the default deprecation behavior. + Deprecations are invoked by calls to [Ember.deprecate](http://emberjs.com/api/classes/Ember.html#method_deprecate). + The following example demonstrates its usage by registering a handler that throws an error if the + message contains the word "should", otherwise defers to the default handler. + ```javascript + Ember.Debug.registerDeprecationHandler((message, options, next) => { + if (message.indexOf('should') !== -1) { + throw new Error(`Deprecation message with should: ${message}`); + } else { + // defer to whatever handler was registered before this one + next(message, options); + } + } + ``` + The handler function takes the following arguments: + + @public + @static + @method registerDeprecationHandler + @param handler {Function} a function to handle deprecation calls + @since 2.1.0 + */ + _emberMetalCore.default.Debug.registerDeprecationHandler = _emberDebugDeprecate.registerHandler; + /** + Allows for runtime registration of handler functions that override the default warning behavior. + Warnings are invoked by calls made to [Ember.warn](http://emberjs.com/api/classes/Ember.html#method_warn). + The following example demonstrates its usage by registering a handler that does nothing overriding Ember's + default warning behavior. + ```javascript + // next is not called, so no warnings get the default behavior + Ember.Debug.registerWarnHandler(() => {}); + ``` + The handler function takes the following arguments: + + @public + @static + @method registerWarnHandler + @param handler {Function} a function to handle warnings + @since 2.1.0 + */ + _emberMetalCore.default.Debug.registerWarnHandler = _emberDebugWarn.registerHandler; + + /* + We are transitioning away from `ember.js` to `ember.debug.js` to make + it much clearer that it is only for local development purposes. + + This flag value is changed by the tooling (by a simple string replacement) + so that if `ember.js` (which must be output for backwards compat reasons) is + used a nice helpful warning message will be printed out. + */ + var runningNonEmberDebugJS = false; + exports.runningNonEmberDebugJS = runningNonEmberDebugJS; + if (runningNonEmberDebugJS) { + _emberMetalDebug.warn('Please use `ember.debug.js` instead of `ember.js` for development and debugging.'); + } +}); +enifed('ember-debug/is-plain-function', ['exports'], function (exports) { + 'use strict'; + + exports.default = isPlainFunction; + + function isPlainFunction(test) { + return typeof test === 'function' && test.PrototypeMixin === undefined; + } +}); +enifed('ember-debug/warn', ['exports', 'ember-metal/logger', 'ember-metal/debug', 'ember-debug/handlers'], function (exports, _emberMetalLogger, _emberMetalDebug, _emberDebugHandlers) { + 'use strict'; + + var _slice = Array.prototype.slice; + exports.registerHandler = registerHandler; + exports.default = warn; + + function registerHandler(handler) { + _emberDebugHandlers.registerHandler('warn', handler); + } + + registerHandler(function logWarning(message, options) { + _emberMetalLogger.default.warn('WARNING: ' + message); + if ('trace' in _emberMetalLogger.default) { + _emberMetalLogger.default.trace(); + } + }); + + var missingOptionsDeprecation = 'When calling `Ember.warn` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include an `id` property.'; + exports.missingOptionsDeprecation = missingOptionsDeprecation; + var missingOptionsIdDeprecation = 'When calling `Ember.warn` you must provide `id` in options.'; + + exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation; + /** + @module ember + @submodule ember-debug + */ + + /** + Display a warning with the provided message. Ember build tools will + remove any calls to `Ember.warn()` when doing a production build. + + @method warn + @param {String} message A warning to display. + @param {Boolean} test An optional boolean. If falsy, the warning + will be displayed. + @param {Object} options An ojbect that can be used to pass a unique + `id` for this warning. The `id` can be used by Ember debugging tools + to change the behavior (raise, log, or silence) for that specific warning. + The `id` should be namespaced by dots, e.g. "ember-debug.feature-flag-with-features-stripped" + @for Ember + @public + */ + + function warn(message, test, options) { + if (!options) { + _emberMetalDebug.deprecate(missingOptionsDeprecation, false, { + id: 'ember-debug.warn-options-missing', + until: '3.0.0', + url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options' + }); + } + + if (options && !options.id) { + _emberMetalDebug.deprecate(missingOptionsIdDeprecation, false, { + id: 'ember-debug.warn-id-missing', + until: '3.0.0', + url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options' + }); + } + + _emberDebugHandlers.invoke.apply(undefined, ['warn'].concat(_slice.call(arguments))); + } +}); +enifed('ember-metal/alias', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/dependent_keys'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalError, _emberMetalProperties, _emberMetalComputed, _emberMetalUtils, _emberMetalMeta, _emberMetalDependent_keys) { + 'use strict'; + + exports.default = alias; + exports.AliasedProperty = AliasedProperty; + + function alias(altKey) { + return new AliasedProperty(altKey); + } + + function AliasedProperty(altKey) { + this.isDescriptor = true; + this.altKey = altKey; + this._dependentKeys = [altKey]; + } + + AliasedProperty.prototype = Object.create(_emberMetalProperties.Descriptor.prototype); + + AliasedProperty.prototype.get = function AliasedProperty_get(obj, keyName) { + return _emberMetalProperty_get.get(obj, this.altKey); + }; + + AliasedProperty.prototype.set = function AliasedProperty_set(obj, keyName, value) { + return _emberMetalProperty_set.set(obj, this.altKey, value); + }; + + AliasedProperty.prototype.willWatch = function (obj, keyName) { + _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, _emberMetalMeta.meta(obj)); + }; + + AliasedProperty.prototype.didUnwatch = function (obj, keyName) { + _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, _emberMetalMeta.meta(obj)); + }; + + AliasedProperty.prototype.setup = function (obj, keyName) { + _emberMetalDebug.assert('Setting alias \'' + keyName + '\' on self', this.altKey !== keyName); + var m = _emberMetalMeta.meta(obj); + if (m.peekWatching(keyName)) { + _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, m); + } + }; + + AliasedProperty.prototype.teardown = function (obj, keyName) { + var m = _emberMetalMeta.meta(obj); + if (m.peekWatching(keyName)) { + _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, m); + } + }; + + AliasedProperty.prototype.readOnly = function () { + this.set = AliasedProperty_readOnlySet; + return this; + }; + + function AliasedProperty_readOnlySet(obj, keyName, value) { + throw new _emberMetalError.default('Cannot set read-only property \'' + keyName + '\' on object: ' + _emberMetalUtils.inspect(obj)); + } + + AliasedProperty.prototype.oneWay = function () { + this.set = AliasedProperty_oneWaySet; + return this; + }; + + function AliasedProperty_oneWaySet(obj, keyName, value) { + _emberMetalProperties.defineProperty(obj, keyName, null); + return _emberMetalProperty_set.set(obj, keyName, value); + } + + // Backwards compatibility with Ember Data + AliasedProperty.prototype._meta = undefined; + AliasedProperty.prototype.meta = _emberMetalComputed.ComputedProperty.prototype.meta; +}); +enifed("ember-metal/assign", ["exports"], function (exports) { + /** + Copy properties from a source object to a target object. + + ```javascript + var a = {first: 'Yehuda'}; + var b = {last: 'Katz'}; + var c = {company: 'Tilde Inc.'}; + Ember.assign(a, b, c); // a === {first: 'Yehuda', last: 'Katz', company: 'Tilde Inc.'}, b === {last: 'Katz'}, c === {company: 'Tilde Inc.'} + ``` + + @method assign + @for Ember + @param {Object} original The object to assign into + @param {Object} ...args The objects to copy properties from + @return {Object} + @public + */ + "use strict"; + + exports.default = assign; + + function assign(original) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + for (var i = 0, l = args.length; i < l; i++) { + var arg = args[i]; + if (!arg) { + continue; + } + + var updates = Object.keys(arg); + + for (var _i = 0, _l = updates.length; _i < _l; _i++) { + var prop = updates[_i]; + original[prop] = arg[prop]; + } + } + + return original; + } +}); +enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logger', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/observer', 'ember-metal/run_loop', 'ember-metal/path_cache'], function (exports, _emberMetalCore, _emberMetalLogger, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalUtils, _emberMetalObserver, _emberMetalRun_loop, _emberMetalPath_cache) { + 'use strict'; + + exports.bind = bind; + + // ES6TODO: where is Ember.lookup defined? + /** + @module ember + @submodule ember-metal + */ + + // .......................................................... + // CONSTANTS + // + + /** + Debug parameter you can turn on. This will log all bindings that fire to + the console. This should be disabled in production code. Note that you + can also enable this from the console or temporarily. + + @property LOG_BINDINGS + @for Ember + @type Boolean + @default false + @public + */ + _emberMetalCore.default.LOG_BINDINGS = false || !!_emberMetalCore.default.ENV.LOG_BINDINGS; + + /** + Returns true if the provided path is global (e.g., `MyApp.fooController.bar`) + instead of local (`foo.bar.baz`). + + @method isGlobalPath + @for Ember + @private + @param {String} path + @return Boolean + */ + + function getWithGlobals(obj, path) { + return _emberMetalProperty_get.get(_emberMetalPath_cache.isGlobal(path) ? _emberMetalCore.default.lookup : obj, path); + } + + // .......................................................... + // BINDING + // + + function Binding(toPath, fromPath) { + this._direction = undefined; + this._from = fromPath; + this._to = toPath; + this._readyToSync = undefined; + this._oneWay = undefined; + } + + /** + @class Binding + @namespace Ember + @public + */ + + Binding.prototype = { + /** + This copies the Binding so it can be connected to another object. + @method copy + @return {Ember.Binding} `this` + @public + */ + copy: function () { + var copy = new Binding(this._to, this._from); + if (this._oneWay) { + copy._oneWay = true; + } + return copy; + }, + + // .......................................................... + // CONFIG + // + + /** + This will set `from` property path to the specified value. It will not + attempt to resolve this property path to an actual object until you + connect the binding. + The binding will search for the property path starting at the root object + you pass when you `connect()` the binding. It follows the same rules as + `get()` - see that method for more information. + @method from + @param {String} path the property path to connect to + @return {Ember.Binding} `this` + @public + */ + from: function (path) { + this._from = path; + return this; + }, + + /** + This will set the `to` property path to the specified value. It will not + attempt to resolve this property path to an actual object until you + connect the binding. + The binding will search for the property path starting at the root object + you pass when you `connect()` the binding. It follows the same rules as + `get()` - see that method for more information. + @method to + @param {String|Tuple} path A property path or tuple + @return {Ember.Binding} `this` + @public + */ + to: function (path) { + this._to = path; + return this; + }, + + /** + Configures the binding as one way. A one-way binding will relay changes + on the `from` side to the `to` side, but not the other way around. This + means that if you change the `to` side directly, the `from` side may have + a different value. + @method oneWay + @return {Ember.Binding} `this` + @public + */ + oneWay: function () { + this._oneWay = true; + return this; + }, + + /** + @method toString + @return {String} string representation of binding + @public + */ + toString: function () { + var oneWay = this._oneWay ? '[oneWay]' : ''; + return 'Ember.Binding<' + _emberMetalUtils.guidFor(this) + '>(' + this._from + ' -> ' + this._to + ')' + oneWay; + }, + + // .......................................................... + // CONNECT AND SYNC + // + + /** + Attempts to connect this binding instance so that it can receive and relay + changes. This method will raise an exception if you have not set the + from/to properties yet. + @method connect + @param {Object} obj The root object for this binding. + @return {Ember.Binding} `this` + @public + */ + connect: function (obj) { + _emberMetalDebug.assert('Must pass a valid object to Ember.Binding.connect()', !!obj); + + var fromPath = this._from; + var toPath = this._to; + _emberMetalProperty_set.trySet(obj, toPath, getWithGlobals(obj, fromPath)); + + // add an observer on the object to be notified when the binding should be updated + _emberMetalObserver.addObserver(obj, fromPath, this, this.fromDidChange); + + // if the binding is a two-way binding, also set up an observer on the target + if (!this._oneWay) { + _emberMetalObserver.addObserver(obj, toPath, this, this.toDidChange); + } + + this._readyToSync = true; + + return this; + }, + + /** + Disconnects the binding instance. Changes will no longer be relayed. You + will not usually need to call this method. + @method disconnect + @param {Object} obj The root object you passed when connecting the binding. + @return {Ember.Binding} `this` + @public + */ + disconnect: function (obj) { + _emberMetalDebug.assert('Must pass a valid object to Ember.Binding.disconnect()', !!obj); + + var twoWay = !this._oneWay; + + // remove an observer on the object so we're no longer notified of + // changes that should update bindings. + _emberMetalObserver.removeObserver(obj, this._from, this, this.fromDidChange); + + // if the binding is two-way, remove the observer from the target as well + if (twoWay) { + _emberMetalObserver.removeObserver(obj, this._to, this, this.toDidChange); + } + + this._readyToSync = false; // disable scheduled syncs... + return this; + }, + + // .......................................................... + // PRIVATE + // + + /* called when the from side changes */ + fromDidChange: function (target) { + this._scheduleSync(target, 'fwd'); + }, + + /* called when the to side changes */ + toDidChange: function (target) { + this._scheduleSync(target, 'back'); + }, + + _scheduleSync: function (obj, dir) { + var existingDir = this._direction; + + // if we haven't scheduled the binding yet, schedule it + if (existingDir === undefined) { + _emberMetalRun_loop.default.schedule('sync', this, this._sync, obj); + this._direction = dir; + } + + // If both a 'back' and 'fwd' sync have been scheduled on the same object, + // default to a 'fwd' sync so that it remains deterministic. + if (existingDir === 'back' && dir === 'fwd') { + this._direction = 'fwd'; + } + }, + + _sync: function (obj) { + var log = _emberMetalCore.default.LOG_BINDINGS; + + // don't synchronize destroyed objects or disconnected bindings + if (obj.isDestroyed || !this._readyToSync) { + return; + } + + // get the direction of the binding for the object we are + // synchronizing from + var direction = this._direction; + + var fromPath = this._from; + var toPath = this._to; + + this._direction = undefined; + + // if we're synchronizing from the remote object... + if (direction === 'fwd') { + var fromValue = getWithGlobals(obj, this._from); + if (log) { + _emberMetalLogger.default.log(' ', this.toString(), '->', fromValue, obj); + } + if (this._oneWay) { + _emberMetalProperty_set.trySet(obj, toPath, fromValue); + } else { + _emberMetalObserver._suspendObserver(obj, toPath, this, this.toDidChange, function () { + _emberMetalProperty_set.trySet(obj, toPath, fromValue); + }); + } + // if we're synchronizing *to* the remote object + } else if (direction === 'back') { + var toValue = _emberMetalProperty_get.get(obj, this._to); + if (log) { + _emberMetalLogger.default.log(' ', this.toString(), '<-', toValue, obj); + } + _emberMetalObserver._suspendObserver(obj, fromPath, this, this.fromDidChange, function () { + _emberMetalProperty_set.trySet(_emberMetalPath_cache.isGlobal(fromPath) ? _emberMetalCore.default.lookup : obj, fromPath, toValue); + }); + } + } + + }; + + function mixinProperties(to, from) { + for (var key in from) { + if (from.hasOwnProperty(key)) { + to[key] = from[key]; + } + } + } + + mixinProperties(Binding, { + + /* + See `Ember.Binding.from`. + @method from + @static + */ + from: function (from) { + var C = this; + return new C(undefined, from); + }, + + /* + See `Ember.Binding.to`. + @method to + @static + */ + to: function (to) { + var C = this; + return new C(to, undefined); + } + }); + /** + An `Ember.Binding` connects the properties of two objects so that whenever + the value of one property changes, the other property will be changed also. + + ## Automatic Creation of Bindings with `/^*Binding/`-named Properties + + You do not usually create Binding objects directly but instead describe + bindings in your class or object definition using automatic binding + detection. + + Properties ending in a `Binding` suffix will be converted to `Ember.Binding` + instances. The value of this property should be a string representing a path + to another object or a custom binding instance created using Binding helpers + (see "One Way Bindings"): + + ``` + valueBinding: "MyApp.someController.title" + ``` + + This will create a binding from `MyApp.someController.title` to the `value` + property of your object instance automatically. Now the two values will be + kept in sync. + + ## One Way Bindings + + One especially useful binding customization you can use is the `oneWay()` + helper. This helper tells Ember that you are only interested in + receiving changes on the object you are binding from. For example, if you + are binding to a preference and you want to be notified if the preference + has changed, but your object will not be changing the preference itself, you + could do: + + ``` + bigTitlesBinding: Ember.Binding.oneWay("MyApp.preferencesController.bigTitles") + ``` + + This way if the value of `MyApp.preferencesController.bigTitles` changes the + `bigTitles` property of your object will change also. However, if you + change the value of your `bigTitles` property, it will not update the + `preferencesController`. + + One way bindings are almost twice as fast to setup and twice as fast to + execute because the binding only has to worry about changes to one side. + + You should consider using one way bindings anytime you have an object that + may be created frequently and you do not intend to change a property; only + to monitor it for changes (such as in the example above). + + ## Adding Bindings Manually + + All of the examples above show you how to configure a custom binding, but the + result of these customizations will be a binding template, not a fully active + Binding instance. The binding will actually become active only when you + instantiate the object the binding belongs to. It is useful however, to + understand what actually happens when the binding is activated. + + For a binding to function it must have at least a `from` property and a `to` + property. The `from` property path points to the object/key that you want to + bind from while the `to` path points to the object/key you want to bind to. + + When you define a custom binding, you are usually describing the property + you want to bind from (such as `MyApp.someController.value` in the examples + above). When your object is created, it will automatically assign the value + you want to bind `to` based on the name of your binding key. In the + examples above, during init, Ember objects will effectively call + something like this on your binding: + + ```javascript + binding = Ember.Binding.from("valueBinding").to("value"); + ``` + + This creates a new binding instance based on the template you provide, and + sets the to path to the `value` property of the new object. Now that the + binding is fully configured with a `from` and a `to`, it simply needs to be + connected to become active. This is done through the `connect()` method: + + ```javascript + binding.connect(this); + ``` + + Note that when you connect a binding you pass the object you want it to be + connected to. This object will be used as the root for both the from and + to side of the binding when inspecting relative paths. This allows the + binding to be automatically inherited by subclassed objects as well. + + This also allows you to bind between objects using the paths you declare in + `from` and `to`: + + ```javascript + // Example 1 + binding = Ember.Binding.from("App.someObject.value").to("value"); + binding.connect(this); + + // Example 2 + binding = Ember.Binding.from("parentView.value").to("App.someObject.value"); + binding.connect(this); + ``` + + Now that the binding is connected, it will observe both the from and to side + and relay changes. + + If you ever needed to do so (you almost never will, but it is useful to + understand this anyway), you could manually create an active binding by + using the `Ember.bind()` helper method. (This is the same method used by + to setup your bindings on objects): + + ```javascript + Ember.bind(MyApp.anotherObject, "value", "MyApp.someController.value"); + ``` + + Both of these code fragments have the same effect as doing the most friendly + form of binding creation like so: + + ```javascript + MyApp.anotherObject = Ember.Object.create({ + valueBinding: "MyApp.someController.value", + + // OTHER CODE FOR THIS OBJECT... + }); + ``` + + Ember's built in binding creation method makes it easy to automatically + create bindings for you. You should always use the highest-level APIs + available, even if you understand how it works underneath. + + @class Binding + @namespace Ember + @since Ember 0.9 + @public + */ + // Ember.Binding = Binding; ES6TODO: where to put this? + + /** + Global helper method to create a new binding. Just pass the root object + along with a `to` and `from` path to create and connect the binding. + + @method bind + @for Ember + @param {Object} obj The root object of the transform. + @param {String} to The path to the 'to' side of the binding. + Must be relative to obj. + @param {String} from The path to the 'from' side of the binding. + Must be relative to obj or a global path. + @return {Ember.Binding} binding instance + @public + */ + + function bind(obj, to, from) { + return new Binding(to, from).connect(obj); + } + + exports.Binding = Binding; + exports.isGlobalPath = _emberMetalPath_cache.isGlobal; +}); +// Ember.LOG_BINDINGS +enifed('ember-metal/cache', ['exports', 'ember-metal/empty_object'], function (exports, _emberMetalEmpty_object) { + 'use strict'; + + exports.default = Cache; + + function Cache(limit, func) { + this.store = new _emberMetalEmpty_object.default(); + this.size = 0; + this.misses = 0; + this.hits = 0; + this.limit = limit; + this.func = func; + } + + var UNDEFINED = function () {}; + + Cache.prototype = { + set: function (key, value) { + if (this.limit > this.size) { + this.size++; + if (value === undefined) { + this.store[key] = UNDEFINED; + } else { + this.store[key] = value; + } + } + + return value; + }, + + get: function (key) { + var value = this.store[key]; + + if (value === undefined) { + this.misses++; + value = this.set(key, this.func(key)); + } else if (value === UNDEFINED) { + this.hits++; + value = undefined; + } else { + this.hits++; + // nothing to translate + } + + return value; + }, + + purge: function () { + this.store = new _emberMetalEmpty_object.default(); + this.size = 0; + this.hits = 0; + this.misses = 0; + } + }; +}); +enifed('ember-metal/chains', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/meta', 'ember-metal/watch_key', 'ember-metal/empty_object'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalMeta, _emberMetalWatch_key, _emberMetalEmpty_object) { + 'use strict'; + + exports.flushPendingChains = flushPendingChains; + exports.finishChains = finishChains; + + var FIRST_KEY = /^([^\.]+)/; + + function firstKey(path) { + return path.match(FIRST_KEY)[0]; + } + + function isObject(obj) { + return obj && typeof obj === 'object'; + } + + function isVolatile(obj) { + return !(isObject(obj) && obj.isDescriptor && obj._volatile === false); + } + + function ChainWatchers(obj) { + // this obj would be the referencing chain node's parent node's value + this.obj = obj; + // chain nodes that reference a key in this obj by key + // we only create ChainWatchers when we are going to add them + // so create this upfront + this.chains = new _emberMetalEmpty_object.default(); + } + + ChainWatchers.prototype = { + add: function (key, node) { + var nodes = this.chains[key]; + if (nodes === undefined) { + this.chains[key] = [node]; + } else { + nodes.push(node); + } + }, + + remove: function (key, node) { + var nodes = this.chains[key]; + if (nodes) { + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i] === node) { + nodes.splice(i, 1); + break; + } + } + } + }, + + has: function (key, node) { + var nodes = this.chains[key]; + if (nodes) { + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i] === node) { + return true; + } + } + } + return false; + }, + + revalidateAll: function () { + for (var key in this.chains) { + this.notify(key, true, undefined); + } + }, + + revalidate: function (key) { + this.notify(key, true, undefined); + }, + + // key: the string key that is part of a path changed + // revalidate: boolean; the chains that are watching this value should revalidate + // callback: function that will be called with the object and path that + // will be/are invalidated by this key change, depending on + // whether the revalidate flag is passed + notify: function (key, revalidate, callback) { + var nodes = this.chains[key]; + if (nodes === undefined || nodes.length === 0) { + return; + } + + var affected = undefined; + + if (callback) { + affected = []; + } + + for (var i = 0, l = nodes.length; i < l; i++) { + nodes[i].notify(revalidate, affected); + } + + if (callback === undefined) { + return; + } + + // we gather callbacks so we don't notify them during revalidation + for (var i = 0, l = affected.length; i < l; i += 2) { + var obj = affected[i]; + var path = affected[i + 1]; + callback(obj, path); + } + } + }; + + var pendingQueue = []; + + // attempts to add the pendingQueue chains again. If some of them end up + // back in the queue and reschedule is true, schedules a timeout to try + // again. + + function flushPendingChains() { + if (pendingQueue.length === 0) { + return; + } + + var queue = pendingQueue; + pendingQueue = []; + + queue.forEach(function (q) { + return q[0].add(q[1]); + }); + + _emberMetalDebug.warn('Watching an undefined global, Ember expects watched globals to be ' + 'setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0, { id: 'ember-metal.chains-flush-pending-chains' }); + } + + function makeChainWatcher(obj) { + return new ChainWatchers(obj); + } + + function addChainWatcher(obj, keyName, node) { + if (!isObject(obj)) { + return; + } + + var m = _emberMetalMeta.meta(obj); + m.writableChainWatchers(makeChainWatcher).add(keyName, node); + _emberMetalWatch_key.watchKey(obj, keyName, m); + } + + function removeChainWatcher(obj, keyName, node) { + if (!isObject(obj)) { + return; + } + + var m = _emberMetalMeta.peekMeta(obj); + + if (!m || !m.readableChainWatchers()) { + return; + } + + // make meta writable + m = _emberMetalMeta.meta(obj); + + m.readableChainWatchers().remove(keyName, node); + + _emberMetalWatch_key.unwatchKey(obj, keyName, m); + } + + // A ChainNode watches a single key on an object. If you provide a starting + // value for the key then the node won't actually watch it. For a root node + // pass null for parent and key and object for value. + function ChainNode(parent, key, value) { + this._parent = parent; + this._key = key; + + // _watching is true when calling get(this._parent, this._key) will + // return the value of this node. + // + // It is false for the root of a chain (because we have no parent) + // and for global paths (because the parent node is the object with + // the observer on it) + this._watching = value === undefined; + + this._chains = undefined; + this._object = undefined; + this.count = 0; + + this._value = value; + this._paths = {}; + if (this._watching) { + this._object = parent.value(); + if (this._object) { + addChainWatcher(this._object, this._key, this); + } + } + } + + function lazyGet(obj, key) { + if (!obj) { + return; + } + + var meta = _emberMetalMeta.peekMeta(obj); + + // check if object meant only to be a prototype + if (meta && meta.proto === obj) { + return; + } + + // Use `get` if the return value is an EachProxy or an uncacheable value. + if (isVolatile(obj[key])) { + return _emberMetalProperty_get.get(obj, key); + // Otherwise attempt to get the cached value of the computed property + } else { + var cache = meta.readableCache(); + if (cache && key in cache) { + return cache[key]; + } + } + } + + ChainNode.prototype = { + value: function () { + if (this._value === undefined && this._watching) { + var obj = this._parent.value(); + this._value = lazyGet(obj, this._key); + } + return this._value; + }, + + destroy: function () { + if (this._watching) { + var obj = this._object; + if (obj) { + removeChainWatcher(obj, this._key, this); + } + this._watching = false; // so future calls do nothing + } + }, + + // copies a top level object only + copy: function (obj) { + var ret = new ChainNode(null, null, obj); + var paths = this._paths; + var path; + + for (path in paths) { + // this check will also catch non-number vals. + if (paths[path] <= 0) { + continue; + } + ret.add(path); + } + return ret; + }, + + // called on the root node of a chain to setup watchers on the specified + // path. + add: function (path) { + var obj, tuple, key, src, paths; + + paths = this._paths; + paths[path] = (paths[path] || 0) + 1; + + obj = this.value(); + tuple = _emberMetalProperty_get.normalizeTuple(obj, path); + + // the path was a local path + if (tuple[0] && tuple[0] === obj) { + path = tuple[1]; + key = firstKey(path); + path = path.slice(key.length + 1); + + // global path, but object does not exist yet. + // put into a queue and try to connect later. + } else if (!tuple[0]) { + pendingQueue.push([this, path]); + tuple.length = 0; + return; + + // global path, and object already exists + } else { + src = tuple[0]; + key = path.slice(0, 0 - (tuple[1].length + 1)); + path = tuple[1]; + } + + tuple.length = 0; + this.chain(key, path, src); + }, + + // called on the root node of a chain to teardown watcher on the specified + // path + remove: function (path) { + var obj, tuple, key, src, paths; + + paths = this._paths; + if (paths[path] > 0) { + paths[path]--; + } + + obj = this.value(); + tuple = _emberMetalProperty_get.normalizeTuple(obj, path); + if (tuple[0] === obj) { + path = tuple[1]; + key = firstKey(path); + path = path.slice(key.length + 1); + } else { + src = tuple[0]; + key = path.slice(0, 0 - (tuple[1].length + 1)); + path = tuple[1]; + } + + tuple.length = 0; + this.unchain(key, path); + }, + + chain: function (key, path, src) { + var chains = this._chains; + var node; + if (chains === undefined) { + chains = this._chains = new _emberMetalEmpty_object.default(); + } else { + node = chains[key]; + } + + if (node === undefined) { + node = chains[key] = new ChainNode(this, key, src); + } + + node.count++; // count chains... + + // chain rest of path if there is one + if (path) { + key = firstKey(path); + path = path.slice(key.length + 1); + node.chain(key, path); // NOTE: no src means it will observe changes... + } + }, + + unchain: function (key, path) { + var chains = this._chains; + var node = chains[key]; + + // unchain rest of path first... + if (path && path.length > 1) { + var nextKey = firstKey(path); + var nextPath = path.slice(nextKey.length + 1); + node.unchain(nextKey, nextPath); + } + + // delete node if needed. + node.count--; + if (node.count <= 0) { + chains[node._key] = undefined; + node.destroy(); + } + }, + + notify: function (revalidate, affected) { + if (revalidate && this._watching) { + var obj = this._parent.value(); + if (obj !== this._object) { + removeChainWatcher(this._object, this._key, this); + this._object = obj; + addChainWatcher(obj, this._key, this); + } + this._value = undefined; + } + + // then notify chains... + var chains = this._chains; + var node; + if (chains) { + for (var key in chains) { + node = chains[key]; + if (node !== undefined) { + node.notify(revalidate, affected); + } + } + } + + if (affected && this._parent) { + this._parent.populateAffected(this, this._key, 1, affected); + } + }, + + populateAffected: function (chain, path, depth, affected) { + if (this._key) { + path = this._key + '.' + path; + } + + if (this._parent) { + this._parent.populateAffected(this, path, depth + 1, affected); + } else { + if (depth > 1) { + affected.push(this.value(), path); + } + path = 'this.' + path; + if (this._paths[path] > 0) { + affected.push(this.value(), path); + } + } + } + }; + + function finishChains(obj) { + // We only create meta if we really have to + var m = _emberMetalMeta.peekMeta(obj); + if (m) { + m = _emberMetalMeta.meta(obj); + + // finish any current chains node watchers that reference obj + var chainWatchers = m.readableChainWatchers(); + if (chainWatchers) { + chainWatchers.revalidateAll(); + } + // ensure that if we have inherited any chains they have been + // copied onto our own meta. + if (m.readableChains()) { + m.writableChains(); + } + } + } + + exports.removeChainWatcher = removeChainWatcher; + exports.ChainNode = ChainNode; +}); +enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/expand_properties', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/property_events', 'ember-metal/dependent_keys'], function (exports, _emberMetalDebug, _emberMetalProperty_set, _emberMetalUtils, _emberMetalMeta, _emberMetalExpand_properties, _emberMetalError, _emberMetalProperties, _emberMetalProperty_events, _emberMetalDependent_keys) { + 'use strict'; + + exports.default = computed; + + /** + @module ember + @submodule ember-metal + */ + + function UNDEFINED() {} + + var DEEP_EACH_REGEX = /\.@each\.[^.]+\./; + + // .......................................................... + // COMPUTED PROPERTY + // + + /** + A computed property transforms an object literal with object's accessor function(s) into a property. + + By default the function backing the computed property will only be called + once and the result will be cached. You can specify various properties + that your computed property depends on. This will force the cached + result to be recomputed if the dependencies are modified. + + In the following example we declare a computed property - `fullName` - by calling + `.Ember.computed()` with property dependencies (`firstName` and `lastName`) as leading arguments and getter accessor function. The `fullName` getter function + will be called once (regardless of how many times it is accessed) as long + as its dependencies have not changed. Once `firstName` or `lastName` are updated + any future calls (or anything bound) to `fullName` will incorporate the new + values. + + ```javascript + let Person = Ember.Object.extend({ + // these will be supplied by `create` + firstName: null, + lastName: null, + + fullName: Ember.computed('firstName', 'lastName', function() { + let firstName = this.get('firstName'), + lastName = this.get('lastName'); + + return firstName + ' ' + lastName; + }) + }); + + let tom = Person.create({ + firstName: 'Tom', + lastName: 'Dale' + }); + + tom.get('fullName') // 'Tom Dale' + ``` + + You can also define what Ember should do when setting a computed property by providing additional function (`set`) in hash argument. + If you try to set a computed property, it will try to invoke setter accessor function with the key and + value you want to set it to as arguments. + + ```javascript + let Person = Ember.Object.extend({ + // these will be supplied by `create` + firstName: null, + lastName: null, + + fullName: Ember.computed('firstName', 'lastName', { + get(key) { + let firstName = this.get('firstName'), + lastName = this.get('lastName'); + + return firstName + ' ' + lastName; + }, + set(key, value) { + let [firstName, lastName] = value.split(' '); + + this.set('firstName', firstName); + this.set('lastName', lastName); + + return value; + } + }) + }); + + let person = Person.create(); + + person.set('fullName', 'Peter Wagenet'); + person.get('firstName'); // 'Peter' + person.get('lastName'); // 'Wagenet' + ``` + + You can overwrite computed property with normal property (no longer computed), that won't change if dependencies change, if you set computed property and it won't have setter accessor function defined. + + You can also mark computed property as `.readOnly()` and block all attempts to set it. + + ```javascript + let Person = Ember.Object.extend({ + // these will be supplied by `create` + firstName: null, + lastName: null, + + fullName: Ember.computed('firstName', 'lastName', { + get(key) { + let firstName = this.get('firstName'); + let lastName = this.get('lastName'); + + return firstName + ' ' + lastName; + } + }).readOnly() + }); + + let person = Person.create(); + person.set('fullName', 'Peter Wagenet'); // Uncaught Error: Cannot set read-only property "fullName" on object: <(...):emberXXX> + ``` + + Additional resources: + - [New CP syntax RFC](https://github.com/emberjs/rfcs/blob/master/text/0011-improved-cp-syntax.md) + - [New computed syntax explained in "Ember 1.12 released" ](http://emberjs.com/blog/2015/05/13/ember-1-12-released.html#toc_new-computed-syntax) + + @class ComputedProperty + @namespace Ember + @constructor + @public + */ + function ComputedProperty(config, opts) { + this.isDescriptor = true; + if (typeof config === 'function') { + this._getter = config; + } else { + _emberMetalDebug.assert('Ember.computed expects a function or an object as last argument.', typeof config === 'object' && !Array.isArray(config)); + _emberMetalDebug.assert('Config object pased to a Ember.computed can only contain `get` or `set` keys.', (function () { + var keys = Object.keys(config); + for (var i = 0; i < keys.length; i++) { + if (keys[i] !== 'get' && keys[i] !== 'set') { + return false; + } + } + return true; + })()); + this._getter = config.get; + this._setter = config.set; + } + _emberMetalDebug.assert('Computed properties must receive a getter or a setter, you passed none.', !!this._getter || !!this._setter); + this._dependentKeys = undefined; + this._suspended = undefined; + this._meta = undefined; + this._volatile = false; + this._dependentKeys = opts && opts.dependentKeys; + this._readOnly = false; + } + + ComputedProperty.prototype = new _emberMetalProperties.Descriptor(); + + var ComputedPropertyPrototype = ComputedProperty.prototype; + + /** + Call on a computed property to set it into non-cached mode. When in this + mode the computed property will not automatically cache the return value. + + It also does not automatically fire any change events. You must manually notify + any changes if you want to observe this property. + + Dependency keys have no effect on volatile properties as they are for cache + invalidation and notification when cached value is invalidated. + + ```javascript + let outsideService = Ember.Object.extend({ + value: Ember.computed(function() { + return OutsideService.getValue(); + }).volatile() + }).create(); + ``` + + @method volatile + @return {Ember.ComputedProperty} this + @chainable + @public + */ + ComputedPropertyPrototype.volatile = function () { + this._volatile = true; + return this; + }; + + /** + Call on a computed property to set it into read-only mode. When in this + mode the computed property will throw an error when set. + + ```javascript + let Person = Ember.Object.extend({ + guid: Ember.computed(function() { + return 'guid-guid-guid'; + }).readOnly() + }); + + let person = Person.create(); + + person.set('guid', 'new-guid'); // will throw an exception + ``` + + @method readOnly + @return {Ember.ComputedProperty} this + @chainable + @public + */ + ComputedPropertyPrototype.readOnly = function () { + this._readOnly = true; + _emberMetalDebug.assert('Computed properties that define a setter using the new syntax cannot be read-only', !(this._readOnly && this._setter && this._setter !== this._getter)); + return this; + }; + + /** + Sets the dependent keys on this computed property. Pass any number of + arguments containing key paths that this computed property depends on. + + ```javascript + let President = Ember.Object.extend({ + fullName: Ember.computed(function() { + return this.get('firstName') + ' ' + this.get('lastName'); + + // Tell Ember that this computed property depends on firstName + // and lastName + }).property('firstName', 'lastName') + }); + + let president = President.create({ + firstName: 'Barack', + lastName: 'Obama' + }); + + president.get('fullName'); // 'Barack Obama' + ``` + + @method property + @param {String} path* zero or more property paths + @return {Ember.ComputedProperty} this + @chainable + @public + */ + ComputedPropertyPrototype.property = function () { + var args; + + var addArg = function (property) { + _emberMetalDebug.warn('Dependent keys containing @each only work one level deep. ' + 'You cannot use nested forms like todos.@each.owner.name or todos.@each.owner.@each.name. ' + 'Please create an intermediary computed property.', DEEP_EACH_REGEX.test(property) === false, { id: 'ember-metal.computed-deep-each' }); + args.push(property); + }; + + args = []; + for (var i = 0, l = arguments.length; i < l; i++) { + _emberMetalExpand_properties.default(arguments[i], addArg); + } + + this._dependentKeys = args; + return this; + }; + + /** + In some cases, you may want to annotate computed properties with additional + metadata about how they function or what values they operate on. For example, + computed property functions may close over variables that are then no longer + available for introspection. + + You can pass a hash of these values to a computed property like this: + + ``` + person: Ember.computed(function() { + let personId = this.get('personId'); + return App.Person.create({ id: personId }); + }).meta({ type: App.Person }) + ``` + + The hash that you pass to the `meta()` function will be saved on the + computed property descriptor under the `_meta` key. Ember runtime + exposes a public API for retrieving these values from classes, + via the `metaForProperty()` function. + + @method meta + @param {Object} meta + @chainable + @public + */ + + ComputedPropertyPrototype.meta = function (meta) { + if (arguments.length === 0) { + return this._meta || {}; + } else { + this._meta = meta; + return this; + } + }; + + // invalidate cache when CP key changes + ComputedPropertyPrototype.didChange = function (obj, keyName) { + // _suspended is set via a CP.set to ensure we don't clear + // the cached value set by the setter + if (this._volatile || this._suspended === obj) { + return; + } + + // don't create objects just to invalidate + var meta = _emberMetalMeta.peekMeta(obj); + if (!meta || meta.source !== obj) { + return; + } + + var cache = meta.readableCache(); + if (cache && cache[keyName] !== undefined) { + cache[keyName] = undefined; + _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta); + } + }; + + /** + Access the value of the function backing the computed property. + If this property has already been cached, return the cached result. + Otherwise, call the function passing the property name as an argument. + + ```javascript + let Person = Ember.Object.extend({ + fullName: Ember.computed('firstName', 'lastName', function(keyName) { + // the keyName parameter is 'fullName' in this case. + return this.get('firstName') + ' ' + this.get('lastName'); + }) + }); + + + let tom = Person.create({ + firstName: 'Tom', + lastName: 'Dale' + }); + + tom.get('fullName') // 'Tom Dale' + ``` + + @method get + @param {String} keyName The key being accessed. + @return {Object} The return value of the function backing the CP. + @public + */ + ComputedPropertyPrototype.get = function (obj, keyName) { + if (this._volatile) { + return this._getter.call(obj, keyName); + } + + var meta = _emberMetalMeta.meta(obj); + var cache = meta.writableCache(); + + var result = cache[keyName]; + if (result === UNDEFINED) { + return undefined; + } else if (result !== undefined) { + return result; + } + + var ret = this._getter.call(obj, keyName); + if (ret === undefined) { + cache[keyName] = UNDEFINED; + } else { + cache[keyName] = ret; + } + + var chainWatchers = meta.readableChainWatchers(); + if (chainWatchers) { + chainWatchers.revalidate(keyName); + } + _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta); + + return ret; + }; + + /** + Set the value of a computed property. If the function that backs your + computed property does not accept arguments then the default action for + setting would be to define the property on the current object, and set + the value of the property to the value being set. + + Generally speaking if you intend for your computed property to be set + you should pass `set(key, value)` function in hash as argument to `Ember.computed()` along with `get(key)` function. + + ```javascript + let Person = Ember.Object.extend({ + // these will be supplied by `create` + firstName: null, + lastName: null, + + fullName: Ember.computed('firstName', 'lastName', { + // getter + get() { + let firstName = this.get('firstName'); + let lastName = this.get('lastName'); + + return firstName + ' ' + lastName; + }, + // setter + set(key, value) { + let [firstName, lastName] = value.split(' '); + + this.set('firstName', firstName); + this.set('lastName', lastName); + + return value; + } + }) + }); + + let person = Person.create(); + + person.set('fullName', 'Peter Wagenet'); + person.get('firstName'); // 'Peter' + person.get('lastName'); // 'Wagenet' + ``` + + @method set + @param {String} keyName The key being accessed. + @param {Object} newValue The new value being assigned. + @return {Object} The return value of the function backing the CP. + @public + */ + ComputedPropertyPrototype.set = function computedPropertySetEntry(obj, keyName, value) { + if (this._readOnly) { + this._throwReadOnlyError(obj, keyName); + } + + if (!this._setter) { + return this.clobberSet(obj, keyName, value); + } + + if (this._volatile) { + return this.volatileSet(obj, keyName, value); + } + + return this.setWithSuspend(obj, keyName, value); + }; + + ComputedPropertyPrototype._throwReadOnlyError = function computedPropertyThrowReadOnlyError(obj, keyName) { + throw new _emberMetalError.default('Cannot set read-only property "' + keyName + '" on object: ' + _emberMetalUtils.inspect(obj)); + }; + + ComputedPropertyPrototype.clobberSet = function computedPropertyClobberSet(obj, keyName, value) { + var cachedValue = cacheFor(obj, keyName); + _emberMetalProperties.defineProperty(obj, keyName, null, cachedValue); + _emberMetalProperty_set.set(obj, keyName, value); + return value; + }; + + ComputedPropertyPrototype.volatileSet = function computedPropertyVolatileSet(obj, keyName, value) { + return this._setter.call(obj, keyName, value); + }; + + ComputedPropertyPrototype.setWithSuspend = function computedPropertySetWithSuspend(obj, keyName, value) { + var oldSuspended = this._suspended; + this._suspended = obj; + try { + return this._set(obj, keyName, value); + } finally { + this._suspended = oldSuspended; + } + }; + + ComputedPropertyPrototype._set = function computedPropertySet(obj, keyName, value) { + // cache requires own meta + var meta = _emberMetalMeta.meta(obj); + // either there is a writable cache or we need one to update + var cache = meta.writableCache(); + var hadCachedValue = false; + var cachedValue = undefined; + if (cache[keyName] !== undefined) { + if (cache[keyName] !== UNDEFINED) { + cachedValue = cache[keyName]; + } + hadCachedValue = true; + } + + var ret = this._setter.call(obj, keyName, value, cachedValue); + + // allows setter to return the same value that is cached already + if (hadCachedValue && cachedValue === ret) { + return ret; + } + + var watched = meta.peekWatching(keyName); + if (watched) { + _emberMetalProperty_events.propertyWillChange(obj, keyName); + } + + if (hadCachedValue) { + cache[keyName] = undefined; + } + + if (!hadCachedValue) { + _emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta); + } + + if (ret === undefined) { + cache[keyName] = UNDEFINED; + } else { + cache[keyName] = ret; + } + + if (watched) { + _emberMetalProperty_events.propertyDidChange(obj, keyName); + } + + return ret; + }; + + /* called before property is overridden */ + ComputedPropertyPrototype.teardown = function (obj, keyName) { + if (this._volatile) { + return; + } + var meta = _emberMetalMeta.meta(obj); + var cache = meta.readableCache(); + if (cache && cache[keyName] !== undefined) { + _emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta); + cache[keyName] = undefined; + } + }; + + /** + This helper returns a new property descriptor that wraps the passed + computed property function. You can use this helper to define properties + with mixins or via `Ember.defineProperty()`. + + If you pass a function as an argument, it will be used as a getter. A computed + property defined in this way might look like this: + + ```js + let Person = Ember.Object.extend({ + init() { + this._super(...arguments); + + this.firstName = 'Betty'; + this.lastName = 'Jones'; + }, + + fullName: Ember.computed('firstName', 'lastName', function() { + return `${this.get('firstName')} ${this.get('lastName')}`; + }) + }); + + let client = Person.create(); + + client.get('fullName'); // 'Betty Jones' + + client.set('lastName', 'Fuller'); + client.get('fullName'); // 'Betty Fuller' + ``` + + You can pass a hash with two functions, `get` and `set`, as an + argument to provide both a getter and setter: + + ```js + let Person = Ember.Object.extend({ + init() { + this._super(...arguments); + + this.firstName = 'Betty'; + this.lastName = 'Jones'; + }, + + fullName: Ember.computed({ + get(key) { + return `${this.get('firstName')} ${this.get('lastName')}`; + }, + set(key, value) { + let [firstName, lastName] = value.split(/\s+/); + this.setProperties({ firstName, lastName }); + return value; + } + }); + }) + + let client = Person.create(); + client.get('firstName'); // 'Betty' + + client.set('fullName', 'Carroll Fuller'); + client.get('firstName'); // 'Carroll' + ``` + + The `set` function should accept two parameters, `key` and `value`. The value + returned from `set` will be the new value of the property. + + _Note: This is the preferred way to define computed properties when writing third-party + libraries that depend on or use Ember, since there is no guarantee that the user + will have [prototype Extensions](http://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/) enabled._ + + The alternative syntax, with prototype extensions, might look like: + + ```js + fullName() { + return this.get('firstName') + ' ' + this.get('lastName'); + }.property('firstName', 'lastName') + ``` + + @class computed + @namespace Ember + @constructor + @static + @param {String} [dependentKeys*] Optional dependent keys that trigger this computed property. + @param {Function} func The computed property function. + @return {Ember.ComputedProperty} property descriptor instance + @public + */ + + function computed(func) { + var args; + + if (arguments.length > 1) { + args = [].slice.call(arguments); + func = args.pop(); + } + + var cp = new ComputedProperty(func); + + if (args) { + cp.property.apply(cp, args); + } + + return cp; + } + + /** + Returns the cached value for a property, if one exists. + This can be useful for peeking at the value of a computed + property that is generated lazily, without accidentally causing + it to be created. + + @method cacheFor + @for Ember + @param {Object} obj the object whose property you want to check + @param {String} key the name of the property whose cached value you want + to return + @return {Object} the cached value + @public + */ + function cacheFor(obj, key) { + var meta = _emberMetalMeta.peekMeta(obj); + var cache = meta && meta.source === obj && meta.readableCache(); + var ret = cache && cache[key]; + + if (ret === UNDEFINED) { + return undefined; + } + return ret; + } + + cacheFor.set = function (cache, key, value) { + if (value === undefined) { + cache[key] = UNDEFINED; + } else { + cache[key] = value; + } + }; + + cacheFor.get = function (cache, key) { + var ret = cache[key]; + if (ret === UNDEFINED) { + return undefined; + } + return ret; + }; + + cacheFor.remove = function (cache, key) { + cache[key] = undefined; + }; + + exports.ComputedProperty = ComputedProperty; + exports.computed = computed; + exports.cacheFor = cacheFor; +}); +enifed('ember-metal/computed_macros', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/computed', 'ember-metal/is_empty', 'ember-metal/is_none', 'ember-metal/alias'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalComputed, _emberMetalIs_empty, _emberMetalIs_none, _emberMetalAlias) { + 'use strict'; + + exports.empty = empty; + exports.notEmpty = notEmpty; + exports.none = none; + exports.not = not; + exports.bool = bool; + exports.match = match; + exports.equal = equal; + exports.gt = gt; + exports.gte = gte; + exports.lt = lt; + exports.lte = lte; + exports.oneWay = oneWay; + exports.readOnly = readOnly; + exports.deprecatingAlias = deprecatingAlias; + + /** + @module ember + @submodule ember-metal + */ + + function getProperties(self, propertyNames) { + var ret = {}; + for (var i = 0; i < propertyNames.length; i++) { + ret[propertyNames[i]] = _emberMetalProperty_get.get(self, propertyNames[i]); + } + return ret; + } + + function generateComputedWithProperties(macro) { + return function () { + for (var _len = arguments.length, properties = Array(_len), _key = 0; _key < _len; _key++) { + properties[_key] = arguments[_key]; + } + + var computedFunc = _emberMetalComputed.computed(function () { + return macro.apply(this, [getProperties(this, properties)]); + }); + + return computedFunc.property.apply(computedFunc, properties); + }; + } + + /** + A computed property that returns true if the value of the dependent + property is null, an empty string, empty array, or empty function. + + Example + + ```javascript + var ToDoList = Ember.Object.extend({ + isDone: Ember.computed.empty('todos') + }); + + var todoList = ToDoList.create({ + todos: ['Unit Test', 'Documentation', 'Release'] + }); + + todoList.get('isDone'); // false + todoList.get('todos').clear(); + todoList.get('isDone'); // true + ``` + + @since 1.6.0 + @method empty + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which negate + the original value for property + @public + */ + + function empty(dependentKey) { + return _emberMetalComputed.computed(dependentKey + '.length', function () { + return _emberMetalIs_empty.default(_emberMetalProperty_get.get(this, dependentKey)); + }); + } + + /** + A computed property that returns true if the value of the dependent + property is NOT null, an empty string, empty array, or empty function. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + hasStuff: Ember.computed.notEmpty('backpack') + }); + + var hamster = Hamster.create({ backpack: ['Food', 'Sleeping Bag', 'Tent'] }); + + hamster.get('hasStuff'); // true + hamster.get('backpack').clear(); // [] + hamster.get('hasStuff'); // false + ``` + + @method notEmpty + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which returns true if + original value for property is not empty. + @public + */ + + function notEmpty(dependentKey) { + return _emberMetalComputed.computed(dependentKey + '.length', function () { + return !_emberMetalIs_empty.default(_emberMetalProperty_get.get(this, dependentKey)); + }); + } + + /** + A computed property that returns true if the value of the dependent + property is null or undefined. This avoids errors from JSLint complaining + about use of ==, which can be technically confusing. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + isHungry: Ember.computed.none('food') + }); + + var hamster = Hamster.create(); + + hamster.get('isHungry'); // true + hamster.set('food', 'Banana'); + hamster.get('isHungry'); // false + hamster.set('food', null); + hamster.get('isHungry'); // true + ``` + + @method none + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which + returns true if original value for property is null or undefined. + @public + */ + + function none(dependentKey) { + return _emberMetalComputed.computed(dependentKey, function () { + return _emberMetalIs_none.default(_emberMetalProperty_get.get(this, dependentKey)); + }); + } + + /** + A computed property that returns the inverse boolean value + of the original value for the dependent property. + + Example + + ```javascript + var User = Ember.Object.extend({ + isAnonymous: Ember.computed.not('loggedIn') + }); + + var user = User.create({loggedIn: false}); + + user.get('isAnonymous'); // true + user.set('loggedIn', true); + user.get('isAnonymous'); // false + ``` + + @method not + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which returns + inverse of the original value for property + @public + */ + + function not(dependentKey) { + return _emberMetalComputed.computed(dependentKey, function () { + return !_emberMetalProperty_get.get(this, dependentKey); + }); + } + + /** + A computed property that converts the provided dependent property + into a boolean value. + + ```javascript + var Hamster = Ember.Object.extend({ + hasBananas: Ember.computed.bool('numBananas') + }); + + var hamster = Hamster.create(); + + hamster.get('hasBananas'); // false + hamster.set('numBananas', 0); + hamster.get('hasBananas'); // false + hamster.set('numBananas', 1); + hamster.get('hasBananas'); // true + hamster.set('numBananas', null); + hamster.get('hasBananas'); // false + ``` + + @method bool + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which converts + to boolean the original value for property + @public + */ + + function bool(dependentKey) { + return _emberMetalComputed.computed(dependentKey, function () { + return !!_emberMetalProperty_get.get(this, dependentKey); + }); + } + + /** + A computed property which matches the original value for the + dependent property against a given RegExp, returning `true` + if the value matches the RegExp and `false` if it does not. + + Example + + ```javascript + var User = Ember.Object.extend({ + hasValidEmail: Ember.computed.match('email', /^.+@.+\..+$/) + }); + + var user = User.create({loggedIn: false}); + + user.get('hasValidEmail'); // false + user.set('email', ''); + user.get('hasValidEmail'); // false + user.set('email', 'ember_hamster@example.com'); + user.get('hasValidEmail'); // true + ``` + + @method match + @for Ember.computed + @param {String} dependentKey + @param {RegExp} regexp + @return {Ember.ComputedProperty} computed property which match + the original value for property against a given RegExp + @public + */ + + function match(dependentKey, regexp) { + return _emberMetalComputed.computed(dependentKey, function () { + var value = _emberMetalProperty_get.get(this, dependentKey); + + return typeof value === 'string' ? regexp.test(value) : false; + }); + } + + /** + A computed property that returns true if the provided dependent property + is equal to the given value. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + napTime: Ember.computed.equal('state', 'sleepy') + }); + + var hamster = Hamster.create(); + + hamster.get('napTime'); // false + hamster.set('state', 'sleepy'); + hamster.get('napTime'); // true + hamster.set('state', 'hungry'); + hamster.get('napTime'); // false + ``` + + @method equal + @for Ember.computed + @param {String} dependentKey + @param {String|Number|Object} value + @return {Ember.ComputedProperty} computed property which returns true if + the original value for property is equal to the given value. + @public + */ + + function equal(dependentKey, value) { + return _emberMetalComputed.computed(dependentKey, function () { + return _emberMetalProperty_get.get(this, dependentKey) === value; + }); + } + + /** + A computed property that returns true if the provided dependent property + is greater than the provided value. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + hasTooManyBananas: Ember.computed.gt('numBananas', 10) + }); + + var hamster = Hamster.create(); + + hamster.get('hasTooManyBananas'); // false + hamster.set('numBananas', 3); + hamster.get('hasTooManyBananas'); // false + hamster.set('numBananas', 11); + hamster.get('hasTooManyBananas'); // true + ``` + + @method gt + @for Ember.computed + @param {String} dependentKey + @param {Number} value + @return {Ember.ComputedProperty} computed property which returns true if + the original value for property is greater than given value. + @public + */ + + function gt(dependentKey, value) { + return _emberMetalComputed.computed(dependentKey, function () { + return _emberMetalProperty_get.get(this, dependentKey) > value; + }); + } + + /** + A computed property that returns true if the provided dependent property + is greater than or equal to the provided value. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + hasTooManyBananas: Ember.computed.gte('numBananas', 10) + }); + + var hamster = Hamster.create(); + + hamster.get('hasTooManyBananas'); // false + hamster.set('numBananas', 3); + hamster.get('hasTooManyBananas'); // false + hamster.set('numBananas', 10); + hamster.get('hasTooManyBananas'); // true + ``` + + @method gte + @for Ember.computed + @param {String} dependentKey + @param {Number} value + @return {Ember.ComputedProperty} computed property which returns true if + the original value for property is greater or equal then given value. + @public + */ + + function gte(dependentKey, value) { + return _emberMetalComputed.computed(dependentKey, function () { + return _emberMetalProperty_get.get(this, dependentKey) >= value; + }); + } + + /** + A computed property that returns true if the provided dependent property + is less than the provided value. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + needsMoreBananas: Ember.computed.lt('numBananas', 3) + }); + + var hamster = Hamster.create(); + + hamster.get('needsMoreBananas'); // true + hamster.set('numBananas', 3); + hamster.get('needsMoreBananas'); // false + hamster.set('numBananas', 2); + hamster.get('needsMoreBananas'); // true + ``` + + @method lt + @for Ember.computed + @param {String} dependentKey + @param {Number} value + @return {Ember.ComputedProperty} computed property which returns true if + the original value for property is less then given value. + @public + */ + + function lt(dependentKey, value) { + return _emberMetalComputed.computed(dependentKey, function () { + return _emberMetalProperty_get.get(this, dependentKey) < value; + }); + } + + /** + A computed property that returns true if the provided dependent property + is less than or equal to the provided value. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + needsMoreBananas: Ember.computed.lte('numBananas', 3) + }); + + var hamster = Hamster.create(); + + hamster.get('needsMoreBananas'); // true + hamster.set('numBananas', 5); + hamster.get('needsMoreBananas'); // false + hamster.set('numBananas', 3); + hamster.get('needsMoreBananas'); // true + ``` + + @method lte + @for Ember.computed + @param {String} dependentKey + @param {Number} value + @return {Ember.ComputedProperty} computed property which returns true if + the original value for property is less or equal than given value. + @public + */ + + function lte(dependentKey, value) { + return _emberMetalComputed.computed(dependentKey, function () { + return _emberMetalProperty_get.get(this, dependentKey) <= value; + }); + } + + /** + A computed property that performs a logical `and` on the + original values for the provided dependent properties. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + readyForCamp: Ember.computed.and('hasTent', 'hasBackpack') + }); + + var hamster = Hamster.create(); + + hamster.get('readyForCamp'); // false + hamster.set('hasTent', true); + hamster.get('readyForCamp'); // false + hamster.set('hasBackpack', true); + hamster.get('readyForCamp'); // true + hamster.set('hasBackpack', 'Yes'); + hamster.get('readyForCamp'); // 'Yes' + ``` + + @method and + @for Ember.computed + @param {String} dependentKey* + @return {Ember.ComputedProperty} computed property which performs + a logical `and` on the values of all the original values for properties. + @public + */ + var and = generateComputedWithProperties(function (properties) { + var value; + for (var key in properties) { + value = properties[key]; + if (properties.hasOwnProperty(key) && !value) { + return false; + } + } + return value; + }); + + exports.and = and; + /** + A computed property which performs a logical `or` on the + original values for the provided dependent properties. + + Example + + ```javascript + var Hamster = Ember.Object.extend({ + readyForRain: Ember.computed.or('hasJacket', 'hasUmbrella') + }); + + var hamster = Hamster.create(); + + hamster.get('readyForRain'); // false + hamster.set('hasUmbrella', true); + hamster.get('readyForRain'); // true + hamster.set('hasJacket', 'Yes'); + hamster.get('readyForRain'); // 'Yes' + ``` + + @method or + @for Ember.computed + @param {String} dependentKey* + @return {Ember.ComputedProperty} computed property which performs + a logical `or` on the values of all the original values for properties. + @public + */ + var or = generateComputedWithProperties(function (properties) { + var value; + for (var key in properties) { + value = properties[key]; + if (properties.hasOwnProperty(key) && value) { + return value; + } + } + return value; + }); + + exports.or = or; + /** + Creates a new property that is an alias for another property + on an object. Calls to `get` or `set` this property behave as + though they were called on the original property. + + ```javascript + var Person = Ember.Object.extend({ + name: 'Alex Matchneer', + nomen: Ember.computed.alias('name') + }); + + var alex = Person.create(); + + alex.get('nomen'); // 'Alex Matchneer' + alex.get('name'); // 'Alex Matchneer' + + alex.set('nomen', '@machty'); + alex.get('name'); // '@machty' + ``` + + @method alias + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which creates an + alias to the original value for property. + @public + */ + + /** + Where `computed.alias` aliases `get` and `set`, and allows for bidirectional + data flow, `computed.oneWay` only provides an aliased `get`. The `set` will + not mutate the upstream property, rather causes the current property to + become the value set. This causes the downstream property to permanently + diverge from the upstream property. + + Example + + ```javascript + var User = Ember.Object.extend({ + firstName: null, + lastName: null, + nickName: Ember.computed.oneWay('firstName') + }); + + var teddy = User.create({ + firstName: 'Teddy', + lastName: 'Zeenny' + }); + + teddy.get('nickName'); // 'Teddy' + teddy.set('nickName', 'TeddyBear'); // 'TeddyBear' + teddy.get('firstName'); // 'Teddy' + ``` + + @method oneWay + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which creates a + one way computed property to the original value for property. + @public + */ + + function oneWay(dependentKey) { + return _emberMetalAlias.default(dependentKey).oneWay(); + } + + /** + This is a more semantically meaningful alias of `computed.oneWay`, + whose name is somewhat ambiguous as to which direction the data flows. + + @method reads + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which creates a + one way computed property to the original value for property. + @public + */ + + /** + Where `computed.oneWay` provides oneWay bindings, `computed.readOnly` provides + a readOnly one way binding. Very often when using `computed.oneWay` one does + not also want changes to propagate back up, as they will replace the value. + + This prevents the reverse flow, and also throws an exception when it occurs. + + Example + + ```javascript + var User = Ember.Object.extend({ + firstName: null, + lastName: null, + nickName: Ember.computed.readOnly('firstName') + }); + + var teddy = User.create({ + firstName: 'Teddy', + lastName: 'Zeenny' + }); + + teddy.get('nickName'); // 'Teddy' + teddy.set('nickName', 'TeddyBear'); // throws Exception + // throw new Ember.Error('Cannot Set: nickName on: ' );` + teddy.get('firstName'); // 'Teddy' + ``` + + @method readOnly + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which creates a + one way computed property to the original value for property. + @since 1.5.0 + @public + */ + + function readOnly(dependentKey) { + return _emberMetalAlias.default(dependentKey).readOnly(); + } + + /** + Creates a new property that is an alias for another property + on an object. Calls to `get` or `set` this property behave as + though they were called on the original property, but also + print a deprecation warning. + + @method deprecatingAlias + @for Ember.computed + @param {String} dependentKey + @return {Ember.ComputedProperty} computed property which creates an + alias with a deprecation to the original value for property. + @since 1.7.0 + @public + */ + + function deprecatingAlias(dependentKey, options) { + return _emberMetalComputed.computed(dependentKey, { + get: function (key) { + _emberMetalDebug.deprecate('Usage of `' + key + '` is deprecated, use `' + dependentKey + '` instead.', false, options); + return _emberMetalProperty_get.get(this, dependentKey); + }, + set: function (key, value) { + _emberMetalDebug.deprecate('Usage of `' + key + '` is deprecated, use `' + dependentKey + '` instead.', false, options); + _emberMetalProperty_set.set(this, dependentKey, value); + return value; + } + }); + } +}); +enifed('ember-metal/core', ['exports', 'require'], function (exports, _require) { + /*globals Ember:true,ENV,EmberENV */ + + 'use strict'; + + /** + @module ember + @submodule ember-metal + */ + + /** + This namespace contains all Ember methods and functions. Future versions of + Ember may overwrite this namespace and therefore, you should avoid adding any + new properties. + + You can also use the shorthand `Em` instead of `Ember`. + + At the heart of Ember is Ember-Runtime, a set of core functions that provide + cross-platform compatibility and object property observing. Ember-Runtime is + small and performance-focused so you can use it alongside other + cross-platform libraries such as jQuery. For more details, see + [Ember-Runtime](http://emberjs.com/api/modules/ember-runtime.html). + + @class Ember + @static + @version 2.4.3 + @public + */ + + if ('undefined' === typeof Ember) { + // Create core object. Make it act like an instance of Ember.Namespace so that + // objects assigned to it are given a sane string representation. + Ember = {}; + } + + // Default imports, exports and lookup to the global object; + var global = mainContext || {}; // jshint ignore:line + Ember.imports = Ember.imports || global; + Ember.lookup = Ember.lookup || global; + var emExports = Ember.exports = Ember.exports || global; + + // aliases needed to keep minifiers from removing the global context + emExports.Em = emExports.Ember = Ember; + + // Make sure these are set whether Ember was already defined or not + + Ember.isNamespace = true; + + Ember.toString = function () { + return 'Ember'; + }; + + // The debug functions are exported to globals with `require` to + // prevent babel-plugin-filter-imports from removing them. + var debugModule = _require.default('ember-metal/debug'); + Ember.assert = debugModule.assert; + Ember.warn = debugModule.warn; + Ember.debug = debugModule.debug; + Ember.deprecate = debugModule.deprecate; + Ember.deprecateFunc = debugModule.deprecateFunc; + Ember.runInDebug = debugModule.runInDebug; + + /** + The semantic version. + + @property VERSION + @type String + @default '2.4.3' + @static + @public + */ + Ember.VERSION = '2.4.3'; + + /** + The hash of environment variables used to control various configuration + settings. To specify your own or override default settings, add the + desired properties to a global hash named `EmberENV` (or `ENV` for + backwards compatibility with earlier versions of Ember). The `EmberENV` + hash must be created before loading Ember. + + @property ENV + @type Object + @public + */ + + if (Ember.ENV) { + // do nothing if Ember.ENV is already setup + Ember.assert('Ember.ENV should be an object.', 'object' !== typeof Ember.ENV); + } else if ('undefined' !== typeof EmberENV) { + Ember.ENV = EmberENV; + } else if ('undefined' !== typeof ENV) { + Ember.ENV = ENV; + } else { + Ember.ENV = {}; + } + + // ENABLE_ALL_FEATURES was documented, but you can't actually enable non optional features. + if (Ember.ENV.ENABLE_ALL_FEATURES) { + Ember.ENV.ENABLE_OPTIONAL_FEATURES = Ember.ENV.ENABLE_ALL_FEATURES; + } + + Ember.config = Ember.config || {}; + + // .......................................................... + // BOOTSTRAP + // + + /** + Determines whether Ember should add to `Array`, `Function`, and `String` + native object prototypes, a few extra methods in order to provide a more + friendly API. + + We generally recommend leaving this option set to true however, if you need + to turn it off, you can add the configuration property + `EXTEND_PROTOTYPES` to `EmberENV` and set it to `false`. + + Note, when disabled (the default configuration for Ember Addons), you will + instead have to access all methods and functions from the Ember + namespace. + + @property EXTEND_PROTOTYPES + @type Boolean + @default true + @for Ember + @public + */ + Ember.EXTEND_PROTOTYPES = Ember.ENV.EXTEND_PROTOTYPES; + + if (typeof Ember.EXTEND_PROTOTYPES === 'undefined') { + Ember.EXTEND_PROTOTYPES = true; + } + + /** + The `LOG_STACKTRACE_ON_DEPRECATION` property, when true, tells Ember to log + a full stack trace during deprecation warnings. + + @property LOG_STACKTRACE_ON_DEPRECATION + @type Boolean + @default true + @public + */ + Ember.LOG_STACKTRACE_ON_DEPRECATION = Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION !== false; + + /** + The `LOG_VERSION` property, when true, tells Ember to log versions of all + dependent libraries in use. + + @property LOG_VERSION + @type Boolean + @default true + @public + */ + Ember.LOG_VERSION = Ember.ENV.LOG_VERSION === false ? false : true; + + /** + An empty function useful for some operations. Always returns `this`. + + @method K + @return {Object} + @public + */ + function K() { + return this; + } + exports.K = K; + + Ember.K = K; + //TODO: ES6 GLOBAL TODO + + exports.default = Ember; +}); +enifed("ember-metal/debug", ["exports"], function (exports) { + "use strict"; + + exports.getDebugFunction = getDebugFunction; + exports.setDebugFunction = setDebugFunction; + exports.assert = assert; + exports.info = info; + exports.warn = warn; + exports.debug = debug; + exports.deprecate = deprecate; + exports.deprecateFunc = deprecateFunc; + exports.runInDebug = runInDebug; + exports.debugSeal = debugSeal; + var debugFunctions = { + assert: function () {}, + info: function () {}, + warn: function () {}, + debug: function () {}, + deprecate: function () {}, + deprecateFunc: function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return args[args.length - 1]; + }, + runInDebug: function () {}, + debugSeal: function () {} + }; + + exports.debugFunctions = debugFunctions; + + function getDebugFunction(name) { + return debugFunctions[name]; + } + + function setDebugFunction(name, fn) { + debugFunctions[name] = fn; + } + + function assert() { + return debugFunctions.assert.apply(undefined, arguments); + } + + function info() { + return debugFunctions.info.apply(undefined, arguments); + } + + function warn() { + return debugFunctions.warn.apply(undefined, arguments); + } + + function debug() { + return debugFunctions.debug.apply(undefined, arguments); + } + + function deprecate() { + return debugFunctions.deprecate.apply(undefined, arguments); + } + + function deprecateFunc() { + return debugFunctions.deprecateFunc.apply(undefined, arguments); + } + + function runInDebug() { + return debugFunctions.runInDebug.apply(undefined, arguments); + } + + function debugSeal() { + return debugFunctions.debugSeal.apply(undefined, arguments); + } +}); +enifed('ember-metal/dependent_keys', ['exports', 'ember-metal/watching'], function (exports, _emberMetalWatching) { + 'no use strict'; + // Remove "use strict"; from transpiled module until + // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed + + exports.addDependentKeys = addDependentKeys; + exports.removeDependentKeys = removeDependentKeys; + + /** + @module ember + @submodule ember-metal + */ + + // .......................................................... + // DEPENDENT KEYS + // + + function addDependentKeys(desc, obj, keyName, meta) { + // the descriptor has a list of dependent keys, so + // add all of its dependent keys. + var idx, len, depKey; + var depKeys = desc._dependentKeys; + if (!depKeys) { + return; + } + + for (idx = 0, len = depKeys.length; idx < len; idx++) { + depKey = depKeys[idx]; + // Increment the number of times depKey depends on keyName. + meta.writeDeps(depKey, keyName, (meta.peekDeps(depKey, keyName) || 0) + 1); + // Watch the depKey + _emberMetalWatching.watch(obj, depKey, meta); + } + } + + function removeDependentKeys(desc, obj, keyName, meta) { + // the descriptor has a list of dependent keys, so + // remove all of its dependent keys. + var depKeys = desc._dependentKeys; + var idx, len, depKey; + if (!depKeys) { + return; + } + + for (idx = 0, len = depKeys.length; idx < len; idx++) { + depKey = depKeys[idx]; + // Decrement the number of times depKey depends on keyName. + meta.writeDeps(depKey, keyName, (meta.peekDeps(depKey, keyName) || 0) - 1); + // Unwatch the depKey + _emberMetalWatching.unwatch(obj, depKey, meta); + } + } +}); +enifed('ember-metal/deprecate_property', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set) { + /** + @module ember + @submodule ember-metal + */ + + 'use strict'; + + exports.deprecateProperty = deprecateProperty; + + /** + Used internally to allow changing properties in a backwards compatible way, and print a helpful + deprecation warning. + + @method deprecateProperty + @param {Object} object The object to add the deprecated property to. + @param {String} deprecatedKey The property to add (and print deprecation warnings upon accessing). + @param {String} newKey The property that will be aliased. + @private + @since 1.7.0 + */ + + function deprecateProperty(object, deprecatedKey, newKey, options) { + function _deprecate() { + _emberMetalDebug.deprecate('Usage of `' + deprecatedKey + '` is deprecated, use `' + newKey + '` instead.', false, options); + } + + Object.defineProperty(object, deprecatedKey, { + configurable: true, + enumerable: false, + set: function (value) { + _deprecate(); + _emberMetalProperty_set.set(this, newKey, value); + }, + get: function () { + _deprecate(); + return _emberMetalProperty_get.get(this, newKey); + } + }); + } +}); +enifed('ember-metal/dictionary', ['exports', 'ember-metal/empty_object'], function (exports, _emberMetalEmpty_object) { + 'use strict'; + + exports.default = makeDictionary; + + // the delete is meant to hint at runtimes that this object should remain in + // dictionary mode. This is clearly a runtime specific hack, but currently it + // appears worthwhile in some usecases. Please note, these deletes do increase + // the cost of creation dramatically over a plain Object.create. And as this + // only makes sense for long-lived dictionaries that aren't instantiated often. + + function makeDictionary(parent) { + var dict; + if (parent === null) { + dict = new _emberMetalEmpty_object.default(); + } else { + dict = Object.create(parent); + } + dict['_dict'] = null; + delete dict['_dict']; + return dict; + } +}); +enifed("ember-metal/empty_object", ["exports"], function (exports) { + // This exists because `Object.create(null)` is absurdly slow compared + // to `new EmptyObject()`. In either case, you want a null prototype + // when you're treating the object instances as arbitrary dictionaries + // and don't want your keys colliding with build-in methods on the + // default object prototype. + + "use strict"; + + var proto = Object.create(null, { + // without this, we will always still end up with (new + // EmptyObject()).constructor === Object + constructor: { + value: undefined, + enumerable: false, + writable: true + } + }); + + function EmptyObject() {} + EmptyObject.prototype = proto; + exports.default = EmptyObject; +}); +enifed('ember-metal/environment', ['exports', 'ember-metal/core'], function (exports, _emberMetalCore) { + 'use strict'; + + /* + Ember can run in many different environments, including environments like + Node.js where the DOM is unavailable. This object serves as an abstraction + over the browser features that Ember relies on, so that code does not + explode when trying to boot in an environment that doesn't have them. + + This is a private abstraction. In the future, we hope that other + abstractions (like `Location`, `Renderer`, `dom-helper`) can fully abstract + over the differences in environment. + */ + var environment; + + // This code attempts to automatically detect an environment with DOM + // by searching for window and document.createElement. An environment + // with DOM may disable the DOM functionality of Ember explicitly by + // defining a `disableBrowserEnvironment` ENV. + var hasDOM = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof document.createElement !== 'undefined' && !_emberMetalCore.default.ENV.disableBrowserEnvironment; + + if (hasDOM) { + environment = { + hasDOM: true, + isChrome: !!window.chrome && !window.opera, + isFirefox: typeof InstallTrigger !== 'undefined', + isPhantom: !!window.callPhantom, + location: window.location, + history: window.history, + userAgent: window.navigator.userAgent, + global: window + }; + } else { + environment = { + hasDOM: false, + isChrome: false, + isFirefox: false, + isPhantom: false, + location: null, + history: null, + userAgent: 'Lynx (textmode)', + global: null + }; + } + + exports.default = environment; +}); +enifed('ember-metal/error', ['exports', 'ember-metal/core'], function (exports, _emberMetalCore) { + 'use strict'; + + exports.default = EmberError; + + var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; + + /** + A subclass of the JavaScript Error object for use in Ember. + + @class Error + @namespace Ember + @extends Error + @constructor + @public + */ + + function EmberError() { + var tmp = Error.apply(this, arguments); + + // Adds a `stack` property to the given error object that will yield the + // stack trace at the time captureStackTrace was called. + // When collecting the stack trace all frames above the topmost call + // to this function, including that call, will be left out of the + // stack trace. + // This is useful because we can hide Ember implementation details + // that are not very helpful for the user. + if (Error.captureStackTrace) { + Error.captureStackTrace(this, _emberMetalCore.default.Error); + } + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + } + + EmberError.prototype = Object.create(Error.prototype); +}); +enifed('ember-metal/events', ['exports', 'ember-metal/debug', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/meta_listeners'], function (exports, _emberMetalDebug, _emberMetalUtils, _emberMetalMeta, _emberMetalMeta_listeners) { + 'no use strict'; + // Remove "use strict"; from transpiled module until + // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed + + /** + @module ember + @submodule ember-metal + */ + exports.accumulateListeners = accumulateListeners; + exports.addListener = addListener; + exports.removeListener = removeListener; + exports.suspendListener = suspendListener; + exports.suspendListeners = suspendListeners; + exports.watchedEvents = watchedEvents; + exports.sendEvent = sendEvent; + exports.hasListeners = hasListeners; + exports.listenersFor = listenersFor; + exports.on = on; + + /* + The event system uses a series of nested hashes to store listeners on an + object. When a listener is registered, or when an event arrives, these + hashes are consulted to determine which target and action pair to invoke. + + The hashes are stored in the object's meta hash, and look like this: + + // Object's meta hash + { + listeners: { // variable name: `listenerSet` + "foo:changed": [ // variable name: `actions` + target, method, flags + ] + } + } + + */ + + function indexOf(array, target, method) { + var index = -1; + // hashes are added to the end of the event array + // so it makes sense to start searching at the end + // of the array and search in reverse + for (var i = array.length - 3; i >= 0; i -= 3) { + if (target === array[i] && method === array[i + 1]) { + index = i; + break; + } + } + return index; + } + + function accumulateListeners(obj, eventName, otherActions) { + var meta = _emberMetalMeta.peekMeta(obj); + if (!meta) { + return; + } + var actions = meta.matchingListeners(eventName); + var newActions = []; + + for (var i = actions.length - 3; i >= 0; i -= 3) { + var target = actions[i]; + var method = actions[i + 1]; + var flags = actions[i + 2]; + var actionIndex = indexOf(otherActions, target, method); + + if (actionIndex === -1) { + otherActions.push(target, method, flags); + newActions.push(target, method, flags); + } + } + + return newActions; + } + + /** + Add an event listener + + @method addListener + @for Ember + @param obj + @param {String} eventName + @param {Object|Function} target A target object or a function + @param {Function|String} method A function or the name of a function to be called on `target` + @param {Boolean} once A flag whether a function should only be called once + @public + */ + + function addListener(obj, eventName, target, method, once) { + _emberMetalDebug.assert('You must pass at least an object and event name to Ember.addListener', !!obj && !!eventName); + + if (!method && 'function' === typeof target) { + method = target; + target = null; + } + + var flags = 0; + if (once) { + flags |= _emberMetalMeta_listeners.ONCE; + } + + _emberMetalMeta.meta(obj).addToListeners(eventName, target, method, flags); + + if ('function' === typeof obj.didAddListener) { + obj.didAddListener(eventName, target, method); + } + } + + /** + Remove an event listener + + Arguments should match those passed to `Ember.addListener`. + + @method removeListener + @for Ember + @param obj + @param {String} eventName + @param {Object|Function} target A target object or a function + @param {Function|String} method A function or the name of a function to be called on `target` + @public + */ + + function removeListener(obj, eventName, target, method) { + _emberMetalDebug.assert('You must pass at least an object and event name to Ember.removeListener', !!obj && !!eventName); + + if (!method && 'function' === typeof target) { + method = target; + target = null; + } + + _emberMetalMeta.meta(obj).removeFromListeners(eventName, target, method, function () { + if ('function' === typeof obj.didRemoveListener) { + obj.didRemoveListener.apply(obj, arguments); + } + }); + } + + /** + Suspend listener during callback. + + This should only be used by the target of the event listener + when it is taking an action that would cause the event, e.g. + an object might suspend its property change listener while it is + setting that property. + + @method suspendListener + @for Ember + + @private + @param obj + @param {String} eventName + @param {Object|Function} target A target object or a function + @param {Function|String} method A function or the name of a function to be called on `target` + @param {Function} callback + */ + + function suspendListener(obj, eventName, target, method, callback) { + return suspendListeners(obj, [eventName], target, method, callback); + } + + /** + Suspends multiple listeners during a callback. + + @method suspendListeners + @for Ember + + @private + @param obj + @param {Array} eventNames Array of event names + @param {Object|Function} target A target object or a function + @param {Function|String} method A function or the name of a function to be called on `target` + @param {Function} callback + */ + + function suspendListeners(obj, eventNames, target, method, callback) { + if (!method && 'function' === typeof target) { + method = target; + target = null; + } + return _emberMetalMeta.meta(obj).suspendListeners(eventNames, target, method, callback); + } + + /** + Return a list of currently watched events + + @private + @method watchedEvents + @for Ember + @param obj + */ + + function watchedEvents(obj) { + return _emberMetalMeta.meta(obj).watchedEvents(); + } + + /** + Send an event. The execution of suspended listeners + is skipped, and once listeners are removed. A listener without + a target is executed on the passed object. If an array of actions + is not passed, the actions stored on the passed object are invoked. + + @method sendEvent + @for Ember + @param obj + @param {String} eventName + @param {Array} params Optional parameters for each listener. + @param {Array} actions Optional array of actions (listeners). + @return true + @public + */ + + function sendEvent(obj, eventName, params, actions) { + if (!actions) { + var meta = _emberMetalMeta.peekMeta(obj); + actions = meta && meta.matchingListeners(eventName); + } + + if (!actions || actions.length === 0) { + return; + } + + for (var i = actions.length - 3; i >= 0; i -= 3) { + // looping in reverse for once listeners + var target = actions[i]; + var method = actions[i + 1]; + var flags = actions[i + 2]; + + if (!method) { + continue; + } + if (flags & _emberMetalMeta_listeners.SUSPENDED) { + continue; + } + if (flags & _emberMetalMeta_listeners.ONCE) { + removeListener(obj, eventName, target, method); + } + if (!target) { + target = obj; + } + if ('string' === typeof method) { + if (params) { + _emberMetalUtils.applyStr(target, method, params); + } else { + target[method](); + } + } else { + if (params) { + _emberMetalUtils.apply(target, method, params); + } else { + method.call(target); + } + } + } + return true; + } + + /** + @private + @method hasListeners + @for Ember + @param obj + @param {String} eventName + */ + + function hasListeners(obj, eventName) { + var meta = _emberMetalMeta.peekMeta(obj); + if (!meta) { + return false; + } + return meta.matchingListeners(eventName).length > 0; + } + + /** + @private + @method listenersFor + @for Ember + @param obj + @param {String} eventName + */ + + function listenersFor(obj, eventName) { + var ret = []; + var meta = _emberMetalMeta.peekMeta(obj); + var actions = meta && meta.matchingListeners(eventName); + + if (!actions) { + return ret; + } + + for (var i = 0, l = actions.length; i < l; i += 3) { + var target = actions[i]; + var method = actions[i + 1]; + ret.push([target, method]); + } + + return ret; + } + + /** + Define a property as a function that should be executed when + a specified event or events are triggered. + + + ``` javascript + var Job = Ember.Object.extend({ + logCompleted: Ember.on('completed', function() { + console.log('Job completed!'); + }) + }); + + var job = Job.create(); + + Ember.sendEvent(job, 'completed'); // Logs 'Job completed!' + ``` + + @method on + @for Ember + @param {String} eventNames* + @param {Function} func + @return func + @public + */ + + function on() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var func = args.pop(); + var events = args; + func.__ember_listens__ = events; + return func; + } +}); +enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], function (exports, _emberMetalError) { + 'use strict'; + + exports.default = expandProperties; + + /** + @module ember + @submodule ember-metal + */ + + var SPLIT_REGEX = /\{|\}/; + + var END_WITH_EACH_REGEX = /\.@each$/; + + /** + Expands `pattern`, invoking `callback` for each expansion. + + The only pattern supported is brace-expansion, anything else will be passed + once to `callback` directly. + + Example + + ```js + function echo(arg){ console.log(arg); } + + Ember.expandProperties('foo.bar', echo); //=> 'foo.bar' + Ember.expandProperties('{foo,bar}', echo); //=> 'foo', 'bar' + Ember.expandProperties('foo.{bar,baz}', echo); //=> 'foo.bar', 'foo.baz' + Ember.expandProperties('{foo,bar}.baz', echo); //=> 'foo.baz', 'bar.baz' + Ember.expandProperties('foo.{bar,baz}.[]', echo) //=> 'foo.bar.[]', 'foo.baz.[]' + Ember.expandProperties('{foo,bar}.{spam,eggs}', echo) //=> 'foo.spam', 'foo.eggs', 'bar.spam', 'bar.eggs' + Ember.expandProperties('{foo}.bar.{baz}') //=> 'foo.bar.baz' + ``` + + @method expandProperties + @for Ember + @private + @param {String} pattern The property pattern to expand. + @param {Function} callback The callback to invoke. It is invoked once per + expansion, and is passed the expansion. + */ + + function expandProperties(pattern, callback) { + if (pattern.indexOf(' ') > -1) { + throw new _emberMetalError.default('Brace expanded properties cannot contain spaces, e.g. \'user.{firstName, lastName}\' should be \'user.{firstName,lastName}\''); + } + + if ('string' === typeof pattern) { + var parts = pattern.split(SPLIT_REGEX); + var properties = [parts]; + + parts.forEach(function (part, index) { + if (part.indexOf(',') >= 0) { + properties = duplicateAndReplace(properties, part.split(','), index); + } + }); + + properties.forEach(function (property) { + callback(property.join('').replace(END_WITH_EACH_REGEX, '.[]')); + }); + } else { + callback(pattern.replace(END_WITH_EACH_REGEX, '.[]')); + } + } + + function duplicateAndReplace(properties, currentParts, index) { + var all = []; + + properties.forEach(function (property) { + currentParts.forEach(function (part) { + var current = property.slice(0); + current[index] = part; + all.push(current); + }); + }); + + return all; + } +}); +enifed('ember-metal/features', ['exports', 'ember-metal/core', 'ember-metal/assign'], function (exports, _emberMetalCore, _emberMetalAssign) { + 'use strict'; + + exports.default = isEnabled; + + /** + The hash of enabled Canary features. Add to this, any canary features + before creating your application. + + Alternatively (and recommended), you can also define `EmberENV.FEATURES` + if you need to enable features flagged at runtime. + + @class FEATURES + @namespace Ember + @static + @since 1.1.0 + @public + */ + var FEATURES = _emberMetalAssign.default({}, _emberMetalCore.default.ENV.FEATURES);exports.FEATURES = FEATURES; + // jshint ignore:line + + /** + Determine whether the specified `feature` is enabled. Used by Ember's + build tools to exclude experimental features from beta/stable builds. + + You can define the following configuration options: + + * `EmberENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly + enabled/disabled. + + @method isEnabled + @param {String} feature The feature to check + @return {Boolean} + @for Ember.FEATURES + @since 1.1.0 + @public + */ + + function isEnabled(feature) { + var featureValue = FEATURES[feature]; + + if (featureValue === true || featureValue === false || featureValue === undefined) { + return featureValue; + } else if (_emberMetalCore.default.ENV.ENABLE_OPTIONAL_FEATURES) { + return true; + } else { + return false; + } + } +}); +enifed('ember-metal/get_properties', ['exports', 'ember-metal/property_get'], function (exports, _emberMetalProperty_get) { + 'use strict'; + + exports.default = getProperties; + + /** + To get multiple properties at once, call `Ember.getProperties` + with an object followed by a list of strings or an array: + + ```javascript + Ember.getProperties(record, 'firstName', 'lastName', 'zipCode'); + // { firstName: 'John', lastName: 'Doe', zipCode: '10011' } + ``` + + is equivalent to: + + ```javascript + Ember.getProperties(record, ['firstName', 'lastName', 'zipCode']); + // { firstName: 'John', lastName: 'Doe', zipCode: '10011' } + ``` + + @method getProperties + @for Ember + @param {Object} obj + @param {String...|Array} list of keys to get + @return {Object} + @public + */ + + function getProperties(obj) { + var ret = {}; + var propertyNames = arguments; + var i = 1; + + if (arguments.length === 2 && Array.isArray(arguments[1])) { + i = 0; + propertyNames = arguments[1]; + } + for (var len = propertyNames.length; i < len; i++) { + ret[propertyNames[i]] = _emberMetalProperty_get.get(obj, propertyNames[i]); + } + return ret; + } +}); +enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/assign', 'ember-metal/merge', 'ember-metal/instrumentation', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/error', 'ember-metal/cache', '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/alias', 'ember-metal/computed_macros', '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', 'ember-metal/is_present', 'backburner'], function (exports, _require, _emberMetalCore, _emberMetalDebug, _emberMetalFeatures, _emberMetalAssign, _emberMetalMerge, _emberMetalInstrumentation, _emberMetalUtils, _emberMetalMeta, _emberMetalError, _emberMetalCache, _emberMetalLogger, _emberMetalProperty_get, _emberMetalEvents, _emberMetalObserver_set, _emberMetalProperty_events, _emberMetalProperties, _emberMetalProperty_set, _emberMetalMap, _emberMetalGet_properties, _emberMetalSet_properties, _emberMetalWatch_key, _emberMetalChains, _emberMetalWatch_path, _emberMetalWatching, _emberMetalExpand_properties, _emberMetalComputed, _emberMetalAlias, _emberMetalComputed_macros, _emberMetalObserver, _emberMetalMixin, _emberMetalBinding, _emberMetalRun_loop, _emberMetalLibraries, _emberMetalIs_none, _emberMetalIs_empty, _emberMetalIs_blank, _emberMetalIs_present, _backburner) { + /** + @module ember + @submodule ember-metal + */ + + // BEGIN IMPORTS + 'use strict'; + + _emberMetalComputed.computed.empty = _emberMetalComputed_macros.empty; + _emberMetalComputed.computed.notEmpty = _emberMetalComputed_macros.notEmpty; + _emberMetalComputed.computed.none = _emberMetalComputed_macros.none; + _emberMetalComputed.computed.not = _emberMetalComputed_macros.not; + _emberMetalComputed.computed.bool = _emberMetalComputed_macros.bool; + _emberMetalComputed.computed.match = _emberMetalComputed_macros.match; + _emberMetalComputed.computed.equal = _emberMetalComputed_macros.equal; + _emberMetalComputed.computed.gt = _emberMetalComputed_macros.gt; + _emberMetalComputed.computed.gte = _emberMetalComputed_macros.gte; + _emberMetalComputed.computed.lt = _emberMetalComputed_macros.lt; + _emberMetalComputed.computed.lte = _emberMetalComputed_macros.lte; + _emberMetalComputed.computed.alias = _emberMetalAlias.default; + _emberMetalComputed.computed.oneWay = _emberMetalComputed_macros.oneWay; + _emberMetalComputed.computed.reads = _emberMetalComputed_macros.oneWay; + _emberMetalComputed.computed.readOnly = _emberMetalComputed_macros.readOnly; + _emberMetalComputed.computed.defaultTo = _emberMetalComputed_macros.defaultTo; + _emberMetalComputed.computed.deprecatingAlias = _emberMetalComputed_macros.deprecatingAlias; + _emberMetalComputed.computed.and = _emberMetalComputed_macros.and; + _emberMetalComputed.computed.or = _emberMetalComputed_macros.or; + _emberMetalComputed.computed.any = _emberMetalComputed_macros.any; + + // END IMPORTS + + // BEGIN EXPORTS + var EmberInstrumentation = _emberMetalCore.default.Instrumentation = {}; + EmberInstrumentation.instrument = _emberMetalInstrumentation.instrument; + EmberInstrumentation.subscribe = _emberMetalInstrumentation.subscribe; + EmberInstrumentation.unsubscribe = _emberMetalInstrumentation.unsubscribe; + EmberInstrumentation.reset = _emberMetalInstrumentation.reset; + + _emberMetalCore.default.instrument = _emberMetalInstrumentation.instrument; + _emberMetalCore.default.subscribe = _emberMetalInstrumentation.subscribe; + + _emberMetalCore.default._Cache = _emberMetalCache.default; + + _emberMetalCore.default.generateGuid = _emberMetalUtils.generateGuid; + _emberMetalCore.default.GUID_KEY = _emberMetalUtils.GUID_KEY; + _emberMetalCore.default.platform = { + defineProperty: true, + hasPropertyAccessors: true + }; + + _emberMetalCore.default.Error = _emberMetalError.default; + _emberMetalCore.default.guidFor = _emberMetalUtils.guidFor; + _emberMetalCore.default.META_DESC = _emberMetalMeta.META_DESC; + _emberMetalCore.default.meta = _emberMetalMeta.meta; + _emberMetalCore.default.inspect = _emberMetalUtils.inspect; + + _emberMetalCore.default.tryCatchFinally = _emberMetalUtils.deprecatedTryCatchFinally; + _emberMetalCore.default.makeArray = _emberMetalUtils.makeArray; + _emberMetalCore.default.canInvoke = _emberMetalUtils.canInvoke; + _emberMetalCore.default.tryInvoke = _emberMetalUtils.tryInvoke; + _emberMetalCore.default.wrap = _emberMetalUtils.wrap; + _emberMetalCore.default.apply = _emberMetalUtils.apply; + _emberMetalCore.default.applyStr = _emberMetalUtils.applyStr; + _emberMetalCore.default.uuid = _emberMetalUtils.uuid; + + _emberMetalCore.default.Logger = _emberMetalLogger.default; + + _emberMetalCore.default.get = _emberMetalProperty_get.get; + _emberMetalCore.default.getWithDefault = _emberMetalProperty_get.getWithDefault; + _emberMetalCore.default.normalizeTuple = _emberMetalProperty_get.normalizeTuple; + _emberMetalCore.default._getPath = _emberMetalProperty_get._getPath; + + _emberMetalCore.default.on = _emberMetalEvents.on; + _emberMetalCore.default.addListener = _emberMetalEvents.addListener; + _emberMetalCore.default.removeListener = _emberMetalEvents.removeListener; + _emberMetalCore.default._suspendListener = _emberMetalEvents.suspendListener; + _emberMetalCore.default._suspendListeners = _emberMetalEvents.suspendListeners; + _emberMetalCore.default.sendEvent = _emberMetalEvents.sendEvent; + _emberMetalCore.default.hasListeners = _emberMetalEvents.hasListeners; + _emberMetalCore.default.watchedEvents = _emberMetalEvents.watchedEvents; + _emberMetalCore.default.listenersFor = _emberMetalEvents.listenersFor; + _emberMetalCore.default.accumulateListeners = _emberMetalEvents.accumulateListeners; + + _emberMetalCore.default._ObserverSet = _emberMetalObserver_set.default; + + _emberMetalCore.default.propertyWillChange = _emberMetalProperty_events.propertyWillChange; + _emberMetalCore.default.propertyDidChange = _emberMetalProperty_events.propertyDidChange; + _emberMetalCore.default.overrideChains = _emberMetalProperty_events.overrideChains; + _emberMetalCore.default.beginPropertyChanges = _emberMetalProperty_events.beginPropertyChanges; + _emberMetalCore.default.endPropertyChanges = _emberMetalProperty_events.endPropertyChanges; + _emberMetalCore.default.changeProperties = _emberMetalProperty_events.changeProperties; + + _emberMetalCore.default.defineProperty = _emberMetalProperties.defineProperty; + + _emberMetalCore.default.set = _emberMetalProperty_set.set; + _emberMetalCore.default.trySet = _emberMetalProperty_set.trySet; + + _emberMetalCore.default.OrderedSet = _emberMetalMap.OrderedSet; + _emberMetalCore.default.Map = _emberMetalMap.Map; + _emberMetalCore.default.MapWithDefault = _emberMetalMap.MapWithDefault; + + _emberMetalCore.default.getProperties = _emberMetalGet_properties.default; + _emberMetalCore.default.setProperties = _emberMetalSet_properties.default; + + _emberMetalCore.default.watchKey = _emberMetalWatch_key.watchKey; + _emberMetalCore.default.unwatchKey = _emberMetalWatch_key.unwatchKey; + + _emberMetalCore.default.flushPendingChains = _emberMetalChains.flushPendingChains; + _emberMetalCore.default.removeChainWatcher = _emberMetalChains.removeChainWatcher; + _emberMetalCore.default._ChainNode = _emberMetalChains.ChainNode; + _emberMetalCore.default.finishChains = _emberMetalChains.finishChains; + + _emberMetalCore.default.watchPath = _emberMetalWatch_path.watchPath; + _emberMetalCore.default.unwatchPath = _emberMetalWatch_path.unwatchPath; + + _emberMetalCore.default.watch = _emberMetalWatching.watch; + _emberMetalCore.default.isWatching = _emberMetalWatching.isWatching; + _emberMetalCore.default.unwatch = _emberMetalWatching.unwatch; + _emberMetalCore.default.rewatch = _emberMetalWatching.rewatch; + _emberMetalCore.default.destroy = _emberMetalWatching.destroy; + + _emberMetalCore.default.expandProperties = _emberMetalExpand_properties.default; + + _emberMetalCore.default.ComputedProperty = _emberMetalComputed.ComputedProperty; + _emberMetalCore.default.computed = _emberMetalComputed.computed; + _emberMetalCore.default.cacheFor = _emberMetalComputed.cacheFor; + + _emberMetalCore.default.addObserver = _emberMetalObserver.addObserver; + _emberMetalCore.default.observersFor = _emberMetalObserver.observersFor; + _emberMetalCore.default.removeObserver = _emberMetalObserver.removeObserver; + _emberMetalCore.default._suspendObserver = _emberMetalObserver._suspendObserver; + _emberMetalCore.default._suspendObservers = _emberMetalObserver._suspendObservers; + + _emberMetalCore.default.IS_BINDING = _emberMetalMixin.IS_BINDING; + _emberMetalCore.default.required = _emberMetalMixin.required; + _emberMetalCore.default.aliasMethod = _emberMetalMixin.aliasMethod; + _emberMetalCore.default.observer = _emberMetalMixin.observer; + _emberMetalCore.default.immediateObserver = _emberMetalMixin._immediateObserver; + _emberMetalCore.default.mixin = _emberMetalMixin.mixin; + _emberMetalCore.default.Mixin = _emberMetalMixin.Mixin; + + _emberMetalCore.default.bind = _emberMetalBinding.bind; + _emberMetalCore.default.Binding = _emberMetalBinding.Binding; + _emberMetalCore.default.isGlobalPath = _emberMetalBinding.isGlobalPath; + + _emberMetalCore.default.run = _emberMetalRun_loop.default; + + /** + @class Backburner + @for Ember + @private + */ + _emberMetalCore.default.Backburner = _backburner.default; + // this is the new go forward, once Ember Data updates to using `_Backburner` we + // can remove the non-underscored version. + _emberMetalCore.default._Backburner = _backburner.default; + + _emberMetalCore.default.libraries = new _emberMetalLibraries.default(); + _emberMetalCore.default.libraries.registerCoreLibrary('Ember', _emberMetalCore.default.VERSION); + + _emberMetalCore.default.isNone = _emberMetalIs_none.default; + _emberMetalCore.default.isEmpty = _emberMetalIs_empty.default; + _emberMetalCore.default.isBlank = _emberMetalIs_blank.default; + _emberMetalCore.default.isPresent = _emberMetalIs_present.default; + + _emberMetalCore.default.merge = _emberMetalMerge.default; + + _emberMetalCore.default.FEATURES = _emberMetalFeatures.FEATURES; + _emberMetalCore.default.FEATURES.isEnabled = _emberMetalFeatures.default; + + /** + A function may be assigned to `Ember.onerror` to be called when Ember + internals encounter an error. This is useful for specialized error handling + and reporting code. + + ```javascript + Ember.onerror = function(error) { + Em.$.ajax('/report-error', 'POST', { + stack: error.stack, + otherInformation: 'whatever app state you want to provide' + }); + }; + ``` + + Internally, `Ember.onerror` is used as Backburner's error handler. + + @event onerror + @for Ember + @param {Exception} error the error object + @public + */ + _emberMetalCore.default.onerror = null; + // END EXPORTS + + // do this for side-effects of updating Ember.assert, warn, etc when + // ember-debug is present + // This needs to be called before any deprecateFunc + if (_require.has('ember-debug')) { + _require.default('ember-debug'); + } else { + _emberMetalCore.default.Debug = {}; + + _emberMetalCore.default.Debug.registerDeprecationHandler = function () {}; + _emberMetalCore.default.Debug.registerWarnHandler = function () {}; + } + + _emberMetalCore.default.create = _emberMetalDebug.deprecateFunc('Ember.create is deprecated in favor of Object.create', { id: 'ember-metal.ember-create', until: '3.0.0' }, Object.create); + _emberMetalCore.default.keys = _emberMetalDebug.deprecateFunc('Ember.keys is deprecated in favor of Object.keys', { id: 'ember-metal.ember.keys', until: '3.0.0' }, Object.keys); + + exports.default = _emberMetalCore.default; +}); +enifed('ember-metal/injected_property', ['exports', 'ember-metal/debug', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/properties', 'container/owner'], function (exports, _emberMetalDebug, _emberMetalComputed, _emberMetalAlias, _emberMetalProperties, _containerOwner) { + 'use strict'; + + /** + Read-only property that returns the result of a container lookup. + + @class InjectedProperty + @namespace Ember + @constructor + @param {String} type The container type the property will lookup + @param {String} name (optional) The name the property will lookup, defaults + to the property's name + @private + */ + function InjectedProperty(type, name) { + this.type = type; + this.name = name; + + this._super$Constructor(injectedPropertyGet); + AliasedPropertyPrototype.oneWay.call(this); + } + + function injectedPropertyGet(keyName) { + var desc = this[keyName]; + var owner = _containerOwner.getOwner(this); + + _emberMetalDebug.assert('InjectedProperties should be defined with the Ember.inject computed property macros.', desc && desc.isDescriptor && desc.type); + _emberMetalDebug.assert('Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.', owner); + + return owner.lookup(desc.type + ':' + (desc.name || keyName)); + } + + InjectedProperty.prototype = Object.create(_emberMetalProperties.Descriptor.prototype); + + var InjectedPropertyPrototype = InjectedProperty.prototype; + var ComputedPropertyPrototype = _emberMetalComputed.ComputedProperty.prototype; + var AliasedPropertyPrototype = _emberMetalAlias.AliasedProperty.prototype; + + InjectedPropertyPrototype._super$Constructor = _emberMetalComputed.ComputedProperty; + + InjectedPropertyPrototype.get = ComputedPropertyPrototype.get; + InjectedPropertyPrototype.readOnly = ComputedPropertyPrototype.readOnly; + + InjectedPropertyPrototype.teardown = ComputedPropertyPrototype.teardown; + + exports.default = InjectedProperty; +}); +enifed('ember-metal/instrumentation', ['exports', 'ember-metal/core'], function (exports, _emberMetalCore) { + 'use strict'; + + exports.instrument = instrument; + exports._instrumentStart = _instrumentStart; + exports.subscribe = subscribe; + exports.unsubscribe = unsubscribe; + exports.reset = reset; + + /** + The purpose of the Ember Instrumentation module is + to provide efficient, general-purpose instrumentation + for Ember. + + Subscribe to a listener by using `Ember.subscribe`: + + ```javascript + Ember.subscribe("render", { + before: function(name, timestamp, payload) { + + }, + + after: function(name, timestamp, payload) { + + } + }); + ``` + + If you return a value from the `before` callback, that same + value will be passed as a fourth parameter to the `after` + callback. + + Instrument a block of code by using `Ember.instrument`: + + ```javascript + Ember.instrument("render.handlebars", payload, function() { + // rendering logic + }, binding); + ``` + + Event names passed to `Ember.instrument` are namespaced + by periods, from more general to more specific. Subscribers + can listen for events by whatever level of granularity they + are interested in. + + In the above example, the event is `render.handlebars`, + and the subscriber listened for all events beginning with + `render`. It would receive callbacks for events named + `render`, `render.handlebars`, `render.container`, or + even `render.handlebars.layout`. + + @class Instrumentation + @namespace Ember + @static + @private + */ + var subscribers = []; + exports.subscribers = subscribers; + var cache = {}; + + var populateListeners = function (name) { + var listeners = []; + var subscriber; + + for (var i = 0, l = subscribers.length; i < l; i++) { + subscriber = subscribers[i]; + if (subscriber.regex.test(name)) { + listeners.push(subscriber.object); + } + } + + cache[name] = listeners; + return listeners; + }; + + var time = (function () { + var perf = 'undefined' !== typeof window ? window.performance || {} : {}; + var fn = perf.now || perf.mozNow || perf.webkitNow || perf.msNow || perf.oNow; + // fn.bind will be available in all the browsers that support the advanced window.performance... ;-) + return fn ? fn.bind(perf) : function () { + return +new Date(); + }; + })(); + + /** + Notifies event's subscribers, calls `before` and `after` hooks. + + @method instrument + @namespace Ember.Instrumentation + + @param {String} [name] Namespaced event name. + @param {Object} _payload + @param {Function} callback Function that you're instrumenting. + @param {Object} binding Context that instrument function is called with. + @private + */ + + function instrument(name, _payload, callback, binding) { + if (arguments.length <= 3 && typeof _payload === 'function') { + binding = callback; + callback = _payload; + _payload = undefined; + } + if (subscribers.length === 0) { + return callback.call(binding); + } + var payload = _payload || {}; + var finalizer = _instrumentStart(name, function () { + return payload; + }); + + if (finalizer) { + return withFinalizer(callback, finalizer, payload, binding); + } else { + return callback.call(binding); + } + } + + function withFinalizer(callback, finalizer, payload, binding) { + try { + return callback.call(binding); + } catch (e) { + payload.exception = e; + return payload; + } finally { + return finalizer(); + } + } + + // private for now + + function _instrumentStart(name, _payload) { + var listeners = cache[name]; + + if (!listeners) { + listeners = populateListeners(name); + } + + if (listeners.length === 0) { + return; + } + + var payload = _payload(); + + var STRUCTURED_PROFILE = _emberMetalCore.default.STRUCTURED_PROFILE; + var timeName; + if (STRUCTURED_PROFILE) { + timeName = name + ': ' + payload.object; + console.time(timeName); + } + + var l = listeners.length; + var beforeValues = new Array(l); + var i, listener; + var timestamp = time(); + for (i = 0; i < l; i++) { + listener = listeners[i]; + beforeValues[i] = listener.before(name, timestamp, payload); + } + + return function _instrumentEnd() { + var i, l, listener; + var timestamp = time(); + for (i = 0, l = listeners.length; i < l; i++) { + listener = listeners[i]; + listener.after(name, timestamp, payload, beforeValues[i]); + } + + if (STRUCTURED_PROFILE) { + console.timeEnd(timeName); + } + }; + } + + /** + Subscribes to a particular event or instrumented block of code. + + @method subscribe + @namespace Ember.Instrumentation + + @param {String} [pattern] Namespaced event name. + @param {Object} [object] Before and After hooks. + + @return {Subscriber} + @private + */ + + function subscribe(pattern, object) { + var paths = pattern.split('.'); + var path; + var regex = []; + + for (var i = 0, l = paths.length; i < l; i++) { + path = paths[i]; + if (path === '*') { + regex.push('[^\\.]*'); + } else { + regex.push(path); + } + } + + regex = regex.join('\\.'); + regex = regex + '(\\..*)?'; + + var subscriber = { + pattern: pattern, + regex: new RegExp('^' + regex + '$'), + object: object + }; + + subscribers.push(subscriber); + cache = {}; + + return subscriber; + } + + /** + Unsubscribes from a particular event or instrumented block of code. + + @method unsubscribe + @namespace Ember.Instrumentation + + @param {Object} [subscriber] + @private + */ + + function unsubscribe(subscriber) { + var index; + + for (var i = 0, l = subscribers.length; i < l; i++) { + if (subscribers[i] === subscriber) { + index = i; + } + } + + subscribers.splice(index, 1); + cache = {}; + } + + /** + Resets `Ember.Instrumentation` by flushing list of subscribers. + + @method reset + @namespace Ember.Instrumentation + @private + */ + + function reset() { + subscribers.length = 0; + cache = {}; + } +}); +enifed('ember-metal/is_blank', ['exports', 'ember-metal/is_empty'], function (exports, _emberMetalIs_empty) { + 'use strict'; + + exports.default = isBlank; + + /** + A value is blank if it is empty or a whitespace string. + + ```javascript + Ember.isBlank(); // true + Ember.isBlank(null); // true + Ember.isBlank(undefined); // true + Ember.isBlank(''); // true + Ember.isBlank([]); // true + Ember.isBlank('\n\t'); // true + Ember.isBlank(' '); // true + Ember.isBlank({}); // false + Ember.isBlank('\n\t Hello'); // false + Ember.isBlank('Hello world'); // false + Ember.isBlank([1,2,3]); // false + ``` + + @method isBlank + @for Ember + @param {Object} obj Value to test + @return {Boolean} + @since 1.5.0 + @public + */ + + function isBlank(obj) { + return _emberMetalIs_empty.default(obj) || typeof obj === 'string' && obj.match(/\S/) === null; + } +}); +enifed('ember-metal/is_empty', ['exports', 'ember-metal/property_get', 'ember-metal/is_none'], function (exports, _emberMetalProperty_get, _emberMetalIs_none) { + 'use strict'; + + /** + Verifies that a value is `null` or an empty string, empty array, + or empty function. + + Constrains the rules on `Ember.isNone` by returning true for empty + string and empty arrays. + + ```javascript + Ember.isEmpty(); // true + Ember.isEmpty(null); // true + Ember.isEmpty(undefined); // true + Ember.isEmpty(''); // true + Ember.isEmpty([]); // true + Ember.isEmpty({}); // false + Ember.isEmpty('Adam Hawkins'); // false + Ember.isEmpty([0,1,2]); // false + Ember.isEmpty('\n\t'); // false + Ember.isEmpty(' '); // false + ``` + + @method isEmpty + @for Ember + @param {Object} obj Value to test + @return {Boolean} + @public + */ + function isEmpty(obj) { + var none = _emberMetalIs_none.default(obj); + if (none) { + return none; + } + + if (typeof obj.size === 'number') { + return !obj.size; + } + + var objectType = typeof obj; + + if (objectType === 'object') { + var size = _emberMetalProperty_get.get(obj, 'size'); + if (typeof size === 'number') { + return !size; + } + } + + if (typeof obj.length === 'number' && objectType !== 'function') { + return !obj.length; + } + + if (objectType === 'object') { + var length = _emberMetalProperty_get.get(obj, 'length'); + if (typeof length === 'number') { + return !length; + } + } + + return false; + } + + exports.default = isEmpty; +}); +enifed("ember-metal/is_none", ["exports"], function (exports) { + /** + Returns true if the passed value is null or undefined. This avoids errors + from JSLint complaining about use of ==, which can be technically + confusing. + + ```javascript + Ember.isNone(); // true + Ember.isNone(null); // true + Ember.isNone(undefined); // true + Ember.isNone(''); // false + Ember.isNone([]); // false + Ember.isNone(function() {}); // false + ``` + + @method isNone + @for Ember + @param {Object} obj Value to test + @return {Boolean} + @public + */ + "use strict"; + + exports.default = isNone; + + function isNone(obj) { + return obj === null || obj === undefined; + } +}); +enifed('ember-metal/is_present', ['exports', 'ember-metal/is_blank'], function (exports, _emberMetalIs_blank) { + 'use strict'; + + exports.default = isPresent; + + /** + A value is present if it not `isBlank`. + + ```javascript + Ember.isPresent(); // false + Ember.isPresent(null); // false + Ember.isPresent(undefined); // false + Ember.isPresent(''); // false + Ember.isPresent(' '); // false + Ember.isPresent('\n\t'); // false + Ember.isPresent([]); // false + Ember.isPresent({ length: 0 }) // false + Ember.isPresent(false); // true + Ember.isPresent(true); // true + Ember.isPresent('string'); // true + Ember.isPresent(0); // true + Ember.isPresent(function() {}) // true + Ember.isPresent({}); // true + Ember.isPresent(false); // true + Ember.isPresent('\n\t Hello'); // true + Ember.isPresent([1,2,3]); // true + ``` + + @method isPresent + @for Ember + @param {Object} obj Value to test + @return {Boolean} + @since 1.8.0 + @public + */ + + function isPresent(obj) { + return !_emberMetalIs_blank.default(obj); + } +}); +enifed('ember-metal/libraries', ['exports', 'ember-metal/debug', 'ember-metal/features'], function (exports, _emberMetalDebug, _emberMetalFeatures) { + 'use strict'; + + /** + Helper class that allows you to register your library with Ember. + + Singleton created at `Ember.libraries`. + + @class Libraries + @constructor + @private + */ + function Libraries() { + this._registry = []; + this._coreLibIndex = 0; + } + + Libraries.prototype = { + constructor: Libraries, + + _getLibraryByName: function (name) { + var libs = this._registry; + var count = libs.length; + + for (var i = 0; i < count; i++) { + if (libs[i].name === name) { + return libs[i]; + } + } + }, + + register: function (name, version, isCoreLibrary) { + var index = this._registry.length; + + if (!this._getLibraryByName(name)) { + if (isCoreLibrary) { + index = this._coreLibIndex++; + } + this._registry.splice(index, 0, { name: name, version: version }); + } else { + _emberMetalDebug.warn('Library "' + name + '" is already registered with Ember.', false, { id: 'ember-metal.libraries-register' }); + } + }, + + registerCoreLibrary: function (name, version) { + this.register(name, version, true); + }, + + deRegister: function (name) { + var lib = this._getLibraryByName(name); + var index; + + if (lib) { + index = this._registry.indexOf(lib); + this._registry.splice(index, 1); + } + } + }; + + exports.default = Libraries; +}); +enifed('ember-metal/logger', ['exports', 'ember-metal/core', 'ember-metal/error'], function (exports, _emberMetalCore, _emberMetalError) { + 'use strict'; + + function K() { + return this; + } + + function consoleMethod(name) { + var consoleObj, logToConsole; + if (_emberMetalCore.default.imports.console) { + consoleObj = _emberMetalCore.default.imports.console; + } else if (typeof console !== 'undefined') { + consoleObj = console; + } + + var method = typeof consoleObj === 'object' ? consoleObj[name] : null; + + if (method) { + // Older IE doesn't support bind, but Chrome needs it + if (typeof method.bind === 'function') { + logToConsole = method.bind(consoleObj); + logToConsole.displayName = 'console.' + name; + return logToConsole; + } else if (typeof method.apply === 'function') { + logToConsole = function () { + method.apply(consoleObj, arguments); + }; + logToConsole.displayName = 'console.' + name; + return logToConsole; + } else { + return function () { + var message = Array.prototype.join.call(arguments, ', '); + method(message); + }; + } + } + } + + function assertPolyfill(test, message) { + if (!test) { + try { + // attempt to preserve the stack + throw new _emberMetalError.default('assertion failed: ' + message); + } catch (error) { + setTimeout(function () { + throw error; + }, 0); + } + } + } + + /** + Inside Ember-Metal, simply uses the methods from `imports.console`. + Override this to provide more robust logging functionality. + + @class Logger + @namespace Ember + @public + */ + exports.default = { + /** + Logs the arguments to the console. + You can pass as many arguments as you want and they will be joined together with a space. + ```javascript + var foo = 1; + Ember.Logger.log('log value of foo:', foo); + // "log value of foo: 1" will be printed to the console + ``` + @method log + @for Ember.Logger + @param {*} arguments + @public + */ + log: consoleMethod('log') || K, + + /** + Prints the arguments to the console with a warning icon. + You can pass as many arguments as you want and they will be joined together with a space. + ```javascript + Ember.Logger.warn('Something happened!'); + // "Something happened!" will be printed to the console with a warning icon. + ``` + @method warn + @for Ember.Logger + @param {*} arguments + @public + */ + warn: consoleMethod('warn') || K, + + /** + Prints the arguments to the console with an error icon, red text and a stack trace. + You can pass as many arguments as you want and they will be joined together with a space. + ```javascript + Ember.Logger.error('Danger! Danger!'); + // "Danger! Danger!" will be printed to the console in red text. + ``` + @method error + @for Ember.Logger + @param {*} arguments + @public + */ + error: consoleMethod('error') || K, + + /** + Logs the arguments to the console. + You can pass as many arguments as you want and they will be joined together with a space. + ```javascript + var foo = 1; + Ember.Logger.info('log value of foo:', foo); + // "log value of foo: 1" will be printed to the console + ``` + @method info + @for Ember.Logger + @param {*} arguments + @public + */ + info: consoleMethod('info') || K, + + /** + Logs the arguments to the console in blue text. + You can pass as many arguments as you want and they will be joined together with a space. + ```javascript + var foo = 1; + Ember.Logger.debug('log value of foo:', foo); + // "log value of foo: 1" will be printed to the console + ``` + @method debug + @for Ember.Logger + @param {*} arguments + @public + */ + debug: consoleMethod('debug') || consoleMethod('info') || K, + + /** + If the value passed into `Ember.Logger.assert` is not truthy it will throw an error with a stack trace. + ```javascript + Ember.Logger.assert(true); // undefined + Ember.Logger.assert(true === false); // Throws an Assertion failed error. + ``` + @method assert + @for Ember.Logger + @param {Boolean} bool Value to test + @public + */ + assert: consoleMethod('assert') || assertPolyfill + }; +}); +// Ember.imports +enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils', 'ember-metal/empty_object'], function (exports, _emberMetalCore, _emberMetalUtils, _emberMetalEmpty_object) { + /** + @module ember + @submodule ember-metal + */ + + /* + JavaScript (before ES6) does not have a Map implementation. Objects, + which are often used as dictionaries, may only have Strings as keys. + + Because Ember has a way to get a unique identifier for every object + via `Ember.guidFor`, we can implement a performant Map with arbitrary + keys. Because it is commonly used in low-level bookkeeping, Map is + implemented as a pure JavaScript object for performance. + + This implementation follows the current iteration of the ES6 proposal for + maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets), + with one exception: as we do not have the luxury of in-VM iteration, we implement a + forEach method for iteration. + + Map is mocked out to look like an Ember object, so you can do + `Ember.Map.create()` for symmetry with other Ember classes. + */ + + 'use strict'; + + function missingFunction(fn) { + throw new TypeError(Object.prototype.toString.call(fn) + ' is not a function'); + } + + function missingNew(name) { + throw new TypeError('Constructor ' + name + ' requires \'new\''); + } + + function copyNull(obj) { + var output = new _emberMetalEmpty_object.default(); + + for (var prop in obj) { + // hasOwnPropery is not needed because obj is new EmptyObject(); + output[prop] = obj[prop]; + } + + return output; + } + + function copyMap(original, newObject) { + var keys = original._keys.copy(); + var values = copyNull(original._values); + + newObject._keys = keys; + newObject._values = values; + newObject.size = original.size; + + return newObject; + } + + /** + This class is used internally by Ember and Ember Data. + Please do not use it at this time. We plan to clean it up + and add many tests soon. + + @class OrderedSet + @namespace Ember + @constructor + @private + */ + function OrderedSet() { + if (this instanceof OrderedSet) { + this.clear(); + this._silenceRemoveDeprecation = false; + } else { + missingNew('OrderedSet'); + } + } + + /** + @method create + @static + @return {Ember.OrderedSet} + @private + */ + OrderedSet.create = function () { + var Constructor = this; + + return new Constructor(); + }; + + OrderedSet.prototype = { + constructor: OrderedSet, + /** + @method clear + @private + */ + clear: function () { + this.presenceSet = new _emberMetalEmpty_object.default(); + this.list = []; + this.size = 0; + }, + + /** + @method add + @param obj + @param guid (optional, and for internal use) + @return {Ember.OrderedSet} + @private + */ + add: function (obj, _guid) { + var guid = _guid || _emberMetalUtils.guidFor(obj); + var presenceSet = this.presenceSet; + var list = this.list; + + if (presenceSet[guid] !== true) { + presenceSet[guid] = true; + this.size = list.push(obj); + } + + return this; + }, + + /** + @since 1.8.0 + @method delete + @param obj + @param _guid (optional and for internal use only) + @return {Boolean} + @private + */ + delete: function (obj, _guid) { + var guid = _guid || _emberMetalUtils.guidFor(obj); + var presenceSet = this.presenceSet; + var list = this.list; + + if (presenceSet[guid] === true) { + delete presenceSet[guid]; + var index = list.indexOf(obj); + if (index > -1) { + list.splice(index, 1); + } + this.size = list.length; + return true; + } else { + return false; + } + }, + + /** + @method isEmpty + @return {Boolean} + @private + */ + isEmpty: function () { + return this.size === 0; + }, + + /** + @method has + @param obj + @return {Boolean} + @private + */ + has: function (obj) { + if (this.size === 0) { + return false; + } + + var guid = _emberMetalUtils.guidFor(obj); + var presenceSet = this.presenceSet; + + return presenceSet[guid] === true; + }, + + /** + @method forEach + @param {Function} fn + @param self + @private + */ + forEach: function (fn /*, ...thisArg*/) { + if (typeof fn !== 'function') { + missingFunction(fn); + } + + if (this.size === 0) { + return; + } + + var list = this.list; + var length = arguments.length; + var i; + + if (length === 2) { + for (i = 0; i < list.length; i++) { + fn.call(arguments[1], list[i]); + } + } else { + for (i = 0; i < list.length; i++) { + fn(list[i]); + } + } + }, + + /** + @method toArray + @return {Array} + @private + */ + toArray: function () { + return this.list.slice(); + }, + + /** + @method copy + @return {Ember.OrderedSet} + @private + */ + copy: function () { + var Constructor = this.constructor; + var set = new Constructor(); + + set._silenceRemoveDeprecation = this._silenceRemoveDeprecation; + set.presenceSet = copyNull(this.presenceSet); + set.list = this.toArray(); + set.size = this.size; + + return set; + } + }; + + /** + A Map stores values indexed by keys. Unlike JavaScript's + default Objects, the keys of a Map can be any JavaScript + object. + + Internally, a Map has two data structures: + + 1. `keys`: an OrderedSet of all of the existing keys + 2. `values`: a JavaScript Object indexed by the `Ember.guidFor(key)` + + When a key/value pair is added for the first time, we + add the key to the `keys` OrderedSet, and create or + replace an entry in `values`. When an entry is deleted, + we delete its entry in `keys` and `values`. + + @class Map + @namespace Ember + @private + @constructor + */ + function Map() { + if (this instanceof this.constructor) { + this._keys = OrderedSet.create(); + this._keys._silenceRemoveDeprecation = true; + this._values = new _emberMetalEmpty_object.default(); + this.size = 0; + } else { + missingNew('OrderedSet'); + } + } + + _emberMetalCore.default.Map = Map; + + /** + @method create + @static + @private + */ + Map.create = function () { + var Constructor = this; + return new Constructor(); + }; + + Map.prototype = { + constructor: Map, + + /** + This property will change as the number of objects in the map changes. + @since 1.8.0 + @property size + @type number + @default 0 + @private + */ + size: 0, + + /** + Retrieve the value associated with a given key. + @method get + @param {*} key + @return {*} the value associated with the key, or `undefined` + @private + */ + get: function (key) { + if (this.size === 0) { + return; + } + + var values = this._values; + var guid = _emberMetalUtils.guidFor(key); + + return values[guid]; + }, + + /** + Adds a value to the map. If a value for the given key has already been + provided, the new value will replace the old value. + @method set + @param {*} key + @param {*} value + @return {Ember.Map} + @private + */ + set: function (key, value) { + var keys = this._keys; + var values = this._values; + var guid = _emberMetalUtils.guidFor(key); + + // ensure we don't store -0 + var k = key === -0 ? 0 : key; + + keys.add(k, guid); + + values[guid] = value; + + this.size = keys.size; + + return this; + }, + + /** + Removes a value from the map for an associated key. + @since 1.8.0 + @method delete + @param {*} key + @return {Boolean} true if an item was removed, false otherwise + @private + */ + delete: function (key) { + if (this.size === 0) { + return false; + } + // don't use ES6 "delete" because it will be annoying + // to use in browsers that are not ES6 friendly; + var keys = this._keys; + var values = this._values; + var guid = _emberMetalUtils.guidFor(key); + + if (keys.delete(key, guid)) { + delete values[guid]; + this.size = keys.size; + return true; + } else { + return false; + } + }, + + /** + Check whether a key is present. + @method has + @param {*} key + @return {Boolean} true if the item was present, false otherwise + @private + */ + has: function (key) { + return this._keys.has(key); + }, + + /** + Iterate over all the keys and values. Calls the function once + for each key, passing in value, key, and the map being iterated over, + in that order. + The keys are guaranteed to be iterated over in insertion order. + @method forEach + @param {Function} callback + @param {*} self if passed, the `this` value inside the + callback. By default, `this` is the map. + @private + */ + forEach: function (callback /*, ...thisArg*/) { + if (typeof callback !== 'function') { + missingFunction(callback); + } + + if (this.size === 0) { + return; + } + + var length = arguments.length; + var map = this; + var cb, thisArg; + + if (length === 2) { + thisArg = arguments[1]; + cb = function (key) { + callback.call(thisArg, map.get(key), key, map); + }; + } else { + cb = function (key) { + callback(map.get(key), key, map); + }; + } + + this._keys.forEach(cb); + }, + + /** + @method clear + @private + */ + clear: function () { + this._keys.clear(); + this._values = new _emberMetalEmpty_object.default(); + this.size = 0; + }, + + /** + @method copy + @return {Ember.Map} + @private + */ + copy: function () { + return copyMap(this, new Map()); + } + }; + + /** + @class MapWithDefault + @namespace Ember + @extends Ember.Map + @private + @constructor + @param [options] + @param {*} [options.defaultValue] + */ + function MapWithDefault(options) { + this._super$constructor(); + this.defaultValue = options.defaultValue; + } + + /** + @method create + @static + @param [options] + @param {*} [options.defaultValue] + @return {Ember.MapWithDefault|Ember.Map} If options are passed, returns + `Ember.MapWithDefault` otherwise returns `Ember.Map` + @private + */ + MapWithDefault.create = function (options) { + if (options) { + return new MapWithDefault(options); + } else { + return new Map(); + } + }; + + MapWithDefault.prototype = Object.create(Map.prototype); + MapWithDefault.prototype.constructor = MapWithDefault; + MapWithDefault.prototype._super$constructor = Map; + MapWithDefault.prototype._super$get = Map.prototype.get; + + /** + Retrieve the value associated with a given key. + + @method get + @param {*} key + @return {*} the value associated with the key, or the default value + @private + */ + MapWithDefault.prototype.get = function (key) { + var hasValue = this.has(key); + + if (hasValue) { + return this._super$get(key); + } else { + var defaultValue = this.defaultValue(key); + this.set(key, defaultValue); + return defaultValue; + } + }; + + /** + @method copy + @return {Ember.MapWithDefault} + @private + */ + MapWithDefault.prototype.copy = function () { + var Constructor = this.constructor; + return copyMap(this, new Constructor({ + defaultValue: this.defaultValue + })); + }; + + exports.default = Map; + exports.OrderedSet = OrderedSet; + exports.Map = Map; + exports.MapWithDefault = MapWithDefault; +}); +enifed('ember-metal/merge', ['exports', 'ember-metal/debug', 'ember-metal/features'], function (exports, _emberMetalDebug, _emberMetalFeatures) { + 'use strict'; + + exports.default = merge; + + /** + Merge the contents of two objects together into the first object. + + ```javascript + Ember.merge({first: 'Tom'}, {last: 'Dale'}); // {first: 'Tom', last: 'Dale'} + var a = {first: 'Yehuda'}; + var b = {last: 'Katz'}; + Ember.merge(a, b); // a == {first: 'Yehuda', last: 'Katz'}, b == {last: 'Katz'} + ``` + + @method merge + @for Ember + @param {Object} original The object to merge into + @param {Object} updates The object to copy properties from + @return {Object} + @public + */ + + function merge(original, updates) { + + if (!updates || typeof updates !== 'object') { + return original; + } + + var props = Object.keys(updates); + var prop; + var length = props.length; + + for (var i = 0; i < length; i++) { + prop = props[i]; + original[prop] = updates[prop]; + } + + return original; + } +}); +enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-metal/empty_object'], function (exports, _emberMetalMeta_listeners, _emberMetalEmpty_object) { + 'no use strict'; + // Remove "use strict"; from transpiled module until + // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed + + exports.meta = meta; + exports.peekMeta = peekMeta; + exports.deleteMeta = deleteMeta; + + /** + @module ember-metal + */ + + /* + This declares several meta-programmed members on the Meta class. Such + meta! + + In general, the `readable` variants will give you an object (if it + already exists) that you can read but should not modify. The + `writable` variants will give you a mutable object, and they will + create it if it didn't already exist. + + The following methods will get generated metaprogrammatically, and + I'm including them here for greppability: + + writableCache, readableCache, writeWatching, + peekWatching, clearWatching, writeMixins, + peekMixins, clearMixins, writeBindings, + peekBindings, clearBindings, writeValues, + peekValues, clearValues, writeDeps, forEachInDeps + writableChainWatchers, readableChainWatchers, writableChains, + readableChains + + */ + var members = { + cache: ownMap, + weak: ownMap, + watching: inheritedMap, + mixins: inheritedMap, + bindings: inheritedMap, + values: inheritedMap, + deps: inheritedMapOfMaps, + chainWatchers: ownCustomObject, + chains: inheritedCustomObject + }; + + var memberNames = Object.keys(members); + var META_FIELD = '__ember_meta__'; + + function Meta(obj, parentMeta) { + this._cache = undefined; + this._weak = undefined; + this._watching = undefined; + this._mixins = undefined; + this._bindings = undefined; + this._values = undefined; + this._deps = undefined; + this._chainWatchers = undefined; + this._chains = undefined; + // used only internally + this.source = obj; + + // when meta(obj).proto === obj, the object is intended to be only a + // prototype and doesn't need to actually be observable itself + this.proto = undefined; + + // The next meta in our inheritance chain. We (will) track this + // explicitly instead of using prototypical inheritance because we + // have detailed knowledge of how each property should really be + // inherited, and we can optimize it much better than JS runtimes. + this.parent = parentMeta; + + this._initializeListeners(); + } + + for (var _name in _emberMetalMeta_listeners.protoMethods) { + Meta.prototype[_name] = _emberMetalMeta_listeners.protoMethods[_name]; + } + memberNames.forEach(function (name) { + return members[name](name, Meta); + }); + + // Implements a member that is a lazily created, non-inheritable + // POJO. + function ownMap(name, Meta) { + var key = memberProperty(name); + var capitalized = capitalize(name); + Meta.prototype['writable' + capitalized] = function () { + return this._getOrCreateOwnMap(key); + }; + Meta.prototype['readable' + capitalized] = function () { + return this[key]; + }; + } + + Meta.prototype._getOrCreateOwnMap = function (key) { + var ret = this[key]; + if (!ret) { + ret = this[key] = new _emberMetalEmpty_object.default(); + } + return ret; + }; + + // Implements a member that is a lazily created POJO with inheritable + // values. + function inheritedMap(name, Meta) { + var key = memberProperty(name); + var capitalized = capitalize(name); + + Meta.prototype['write' + capitalized] = function (subkey, value) { + var map = this._getOrCreateOwnMap(key); + map[subkey] = value; + }; + + Meta.prototype['peek' + capitalized] = function (subkey) { + return this._findInherited(key, subkey); + }; + + Meta.prototype['forEach' + capitalized] = function (fn) { + var pointer = this; + var seen = new _emberMetalEmpty_object.default(); + while (pointer !== undefined) { + var map = pointer[key]; + if (map) { + for (var _key in map) { + if (!seen[_key]) { + seen[_key] = true; + fn(_key, map[_key]); + } + } + } + pointer = pointer.parent; + } + }; + + Meta.prototype['clear' + capitalized] = function () { + this[key] = undefined; + }; + + Meta.prototype['deleteFrom' + capitalized] = function (subkey) { + delete this._getOrCreateOwnMap(key)[subkey]; + }; + + Meta.prototype['hasIn' + capitalized] = function (subkey) { + return this._findInherited(key, subkey) !== undefined; + }; + } + + Meta.prototype._getInherited = function (key) { + var pointer = this; + while (pointer !== undefined) { + if (pointer[key]) { + return pointer[key]; + } + pointer = pointer.parent; + } + }; + + Meta.prototype._findInherited = function (key, subkey) { + var pointer = this; + while (pointer !== undefined) { + var map = pointer[key]; + if (map) { + var value = map[subkey]; + if (value !== undefined) { + return value; + } + } + pointer = pointer.parent; + } + }; + + // Implements a member that provides a lazily created map of maps, + // with inheritance at both levels. + function inheritedMapOfMaps(name, Meta) { + var key = memberProperty(name); + var capitalized = capitalize(name); + + Meta.prototype['write' + capitalized] = function (subkey, itemkey, value) { + var outerMap = this._getOrCreateOwnMap(key); + var innerMap = outerMap[subkey]; + if (!innerMap) { + innerMap = outerMap[subkey] = new _emberMetalEmpty_object.default(); + } + innerMap[itemkey] = value; + }; + + Meta.prototype['peek' + capitalized] = function (subkey, itemkey) { + var pointer = this; + while (pointer !== undefined) { + var map = pointer[key]; + if (map) { + var value = map[subkey]; + if (value) { + if (value[itemkey] !== undefined) { + return value[itemkey]; + } + } + } + pointer = pointer.parent; + } + }; + + Meta.prototype['has' + capitalized] = function (subkey) { + var pointer = this; + while (pointer !== undefined) { + if (pointer[key] && pointer[key][subkey]) { + return true; + } + pointer = pointer.parent; + } + return false; + }; + + Meta.prototype['forEachIn' + capitalized] = function (subkey, fn) { + return this._forEachIn(key, subkey, fn); + }; + } + + Meta.prototype._forEachIn = function (key, subkey, fn) { + var pointer = this; + var seen = new _emberMetalEmpty_object.default(); + var calls = []; + while (pointer !== undefined) { + var map = pointer[key]; + if (map) { + var innerMap = map[subkey]; + if (innerMap) { + for (var innerKey in innerMap) { + if (!seen[innerKey]) { + seen[innerKey] = true; + calls.push([innerKey, innerMap[innerKey]]); + } + } + } + } + pointer = pointer.parent; + } + for (var i = 0; i < calls.length; i++) { + var _calls$i = calls[i]; + var innerKey = _calls$i[0]; + var value = _calls$i[1]; + + fn(innerKey, value); + } + }; + + // Implements a member that provides a non-heritable, lazily-created + // object using the method you provide. + function ownCustomObject(name, Meta) { + var key = memberProperty(name); + var capitalized = capitalize(name); + Meta.prototype['writable' + capitalized] = function (create) { + var ret = this[key]; + if (!ret) { + ret = this[key] = create(this.source); + } + return ret; + }; + Meta.prototype['readable' + capitalized] = function () { + return this[key]; + }; + } + + // Implements a member that provides an inheritable, lazily-created + // object using the method you provide. We will derived children from + // their parents by calling your object's `copy()` method. + function inheritedCustomObject(name, Meta) { + var key = memberProperty(name); + var capitalized = capitalize(name); + Meta.prototype['writable' + capitalized] = function (create) { + var ret = this[key]; + if (!ret) { + if (this.parent) { + ret = this[key] = this.parent['writable' + capitalized](create).copy(this.source); + } else { + ret = this[key] = create(this.source); + } + } + return ret; + }; + Meta.prototype['readable' + capitalized] = function () { + return this._getInherited(key); + }; + } + + function memberProperty(name) { + return '_' + name; + } + + // there's a more general-purpose capitalize in ember-runtime, but we + // don't want to make ember-metal depend on ember-runtime. + function capitalize(name) { + return name.replace(/^\w/, function (m) { + return m.toUpperCase(); + }); + } + + var META_DESC = { + writable: true, + configurable: true, + enumerable: false, + value: null + }; + + exports.META_DESC = META_DESC; + var EMBER_META_PROPERTY = { + name: META_FIELD, + descriptor: META_DESC + }; + + // choose the one appropriate for given platform + var setMeta = function (obj, meta) { + // if `null` already, just set it to the new value + // otherwise define property first + if (obj[META_FIELD] !== null) { + if (obj.__defineNonEnumerable) { + obj.__defineNonEnumerable(EMBER_META_PROPERTY); + } else { + Object.defineProperty(obj, META_FIELD, META_DESC); + } + } + + obj[META_FIELD] = meta; + }; + + /** + Retrieves the meta hash for an object. If `writable` is true ensures the + hash is writable for this object as well. + + The meta object contains information about computed property descriptors as + well as any watched properties and other information. You generally will + not access this information directly but instead work with higher level + methods that manipulate this hash indirectly. + + @method meta + @for Ember + @private + + @param {Object} obj The object to retrieve meta for + @param {Boolean} [writable=true] Pass `false` if you do not intend to modify + the meta hash, allowing the method to avoid making an unnecessary copy. + @return {Object} the meta hash for an object + */ + + function meta(obj) { + var maybeMeta = peekMeta(obj); + var parent = undefined; + + // remove this code, in-favor of explicit parent + if (maybeMeta) { + if (maybeMeta.source === obj) { + return maybeMeta; + } + parent = maybeMeta; + } + + var newMeta = new Meta(obj, parent); + setMeta(obj, newMeta); + return newMeta; + } + + function peekMeta(obj) { + return obj[META_FIELD]; + } + + function deleteMeta(obj) { + if (typeof obj[META_FIELD] !== 'object') { + return; + } + obj[META_FIELD] = null; + } +}); +enifed('ember-metal/meta_listeners', ['exports'], function (exports) { + /* + When we render a rich template hierarchy, the set of events that + *might* happen tends to be much larger than the set of events that + actually happen. This implies that we should make listener creation & + destruction cheap, even at the cost of making event dispatch more + expensive. + + Thus we store a new listener with a single push and no new + allocations, without even bothering to do deduplication -- we can + save that for dispatch time, if an event actually happens. + */ + + /* listener flags */ + 'use strict'; + + var ONCE = 1; + exports.ONCE = ONCE; + var SUSPENDED = 2; + + exports.SUSPENDED = SUSPENDED; + var protoMethods = { + + addToListeners: function (eventName, target, method, flags) { + if (!this._listeners) { + this._listeners = []; + } + this._listeners.push(eventName, target, method, flags); + }, + + _finalizeListeners: function () { + if (this._listenersFinalized) { + return; + } + if (!this._listeners) { + this._listeners = []; + } + var pointer = this.parent; + while (pointer) { + var listeners = pointer._listeners; + if (listeners) { + this._listeners = this._listeners.concat(listeners); + } + if (pointer._listenersFinalized) { + break; + } + pointer = pointer.parent; + } + this._listenersFinalized = true; + }, + + removeFromListeners: function (eventName, target, method, didRemove) { + var pointer = this; + while (pointer) { + var listeners = pointer._listeners; + if (listeners) { + for (var index = listeners.length - 4; index >= 0; index -= 4) { + if (listeners[index] === eventName && (!method || listeners[index + 1] === target && listeners[index + 2] === method)) { + if (pointer === this) { + // we are modifying our own list, so we edit directly + if (typeof didRemove === 'function') { + didRemove(eventName, target, listeners[index + 2]); + } + listeners.splice(index, 4); + } else { + // we are trying to remove an inherited listener, so we do + // just-in-time copying to detach our own listeners from + // our inheritance chain. + this._finalizeListeners(); + return this.removeFromListeners(eventName, target, method); + } + } + } + } + if (pointer._listenersFinalized) { + break; + } + pointer = pointer.parent; + } + }, + + matchingListeners: function (eventName) { + var pointer = this; + var result = []; + while (pointer) { + var listeners = pointer._listeners; + if (listeners) { + for (var index = 0; index < listeners.length - 3; index += 4) { + if (listeners[index] === eventName) { + pushUniqueListener(result, listeners, index); + } + } + } + if (pointer._listenersFinalized) { + break; + } + pointer = pointer.parent; + } + var sus = this._suspendedListeners; + if (sus) { + for (var susIndex = 0; susIndex < sus.length - 2; susIndex += 3) { + if (eventName === sus[susIndex]) { + for (var resultIndex = 0; resultIndex < result.length - 2; resultIndex += 3) { + if (result[resultIndex] === sus[susIndex + 1] && result[resultIndex + 1] === sus[susIndex + 2]) { + result[resultIndex + 2] |= SUSPENDED; + } + } + } + } + } + return result; + }, + + suspendListeners: function (eventNames, target, method, callback) { + var sus = this._suspendedListeners; + if (!sus) { + sus = this._suspendedListeners = []; + } + for (var i = 0; i < eventNames.length; i++) { + sus.push(eventNames[i], target, method); + } + try { + return callback.call(target); + } finally { + if (sus.length === eventNames.length) { + this._suspendedListeners = undefined; + } else { + for (var i = sus.length - 3; i >= 0; i -= 3) { + if (sus[i + 1] === target && sus[i + 2] === method && eventNames.indexOf(sus[i]) !== -1) { + sus.splice(i, 3); + } + } + } + } + }, + + watchedEvents: function () { + var pointer = this; + var names = {}; + while (pointer) { + var listeners = pointer._listeners; + if (listeners) { + for (var index = 0; index < listeners.length - 3; index += 4) { + names[listeners[index]] = true; + } + } + if (pointer._listenersFinalized) { + break; + } + pointer = pointer.parent; + } + return Object.keys(names); + }, + + _initializeListeners: function () { + this._listeners = undefined; + this._listenersFinalized = undefined; + this._suspendedListeners = undefined; + } + }; + + exports.protoMethods = protoMethods; + function pushUniqueListener(destination, source, index) { + var target = source[index + 1]; + var method = source[index + 2]; + for (var destinationIndex = 0; destinationIndex < destination.length - 2; destinationIndex += 3) { + if (destination[destinationIndex] === target && destination[destinationIndex + 1] === method) { + return; + } + } + destination.push(target, method, source[index + 3]); + } +}); +enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error', 'ember-metal/debug', 'ember-metal/assign', 'ember-metal/empty_object', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/expand_properties', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/binding', 'ember-metal/observer', 'ember-metal/events', 'ember-metal/streams/utils'], function (exports, _emberMetalCore, _emberMetalError, _emberMetalDebug, _emberMetalAssign, _emberMetalEmpty_object, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalUtils, _emberMetalMeta, _emberMetalExpand_properties, _emberMetalProperties, _emberMetalComputed, _emberMetalBinding, _emberMetalObserver, _emberMetalEvents, _emberMetalStreamsUtils) { + 'no use strict'; + // Remove "use strict"; from transpiled module until + // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed + + /** + @module ember + @submodule ember-metal + */ + exports.mixin = mixin; + exports.default = Mixin; + exports.required = required; + exports.aliasMethod = aliasMethod; + exports.observer = observer; + exports._immediateObserver = _immediateObserver; + exports._beforeObserver = _beforeObserver; + + function ROOT() {} + ROOT.__hasSuper = false; + + var REQUIRED; + var a_slice = [].slice; + + function isMethod(obj) { + return 'function' === typeof obj && obj.isMethod !== false && obj !== Boolean && obj !== Object && obj !== Number && obj !== Array && obj !== Date && obj !== String; + } + + var CONTINUE = {}; + + function mixinProperties(mixinsMeta, mixin) { + var guid; + + if (mixin instanceof Mixin) { + guid = _emberMetalUtils.guidFor(mixin); + if (mixinsMeta.peekMixins(guid)) { + return CONTINUE; + } + mixinsMeta.writeMixins(guid, mixin); + return mixin.properties; + } else { + return mixin; // apply anonymous mixin properties + } + } + + function concatenatedMixinProperties(concatProp, props, values, base) { + var concats; + + // reset before adding each new mixin to pickup concats from previous + concats = values[concatProp] || base[concatProp]; + if (props[concatProp]) { + concats = concats ? concats.concat(props[concatProp]) : props[concatProp]; + } + + return concats; + } + + function giveDescriptorSuper(meta, key, property, values, descs, base) { + var superProperty; + + // Computed properties override methods, and do not call super to them + if (values[key] === undefined) { + // Find the original descriptor in a parent mixin + superProperty = descs[key]; + } + + // If we didn't find the original descriptor in a parent mixin, find + // it on the original object. + if (!superProperty) { + var possibleDesc = base[key]; + var superDesc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; + + superProperty = superDesc; + } + + if (superProperty === undefined || !(superProperty instanceof _emberMetalComputed.ComputedProperty)) { + return property; + } + + // Since multiple mixins may inherit from the same parent, we need + // to clone the computed property so that other mixins do not receive + // the wrapped version. + property = Object.create(property); + property._getter = _emberMetalUtils.wrap(property._getter, superProperty._getter); + if (superProperty._setter) { + if (property._setter) { + property._setter = _emberMetalUtils.wrap(property._setter, superProperty._setter); + } else { + property._setter = superProperty._setter; + } + } + + return property; + } + + function giveMethodSuper(obj, key, method, values, descs) { + var superMethod; + + // Methods overwrite computed properties, and do not call super to them. + if (descs[key] === undefined) { + // Find the original method in a parent mixin + superMethod = values[key]; + } + + // If we didn't find the original value in a parent mixin, find it in + // the original object + superMethod = superMethod || obj[key]; + + // Only wrap the new method if the original method was a function + if (superMethod === undefined || 'function' !== typeof superMethod) { + return method; + } + + return _emberMetalUtils.wrap(method, superMethod); + } + + function applyConcatenatedProperties(obj, key, value, values) { + var baseValue = values[key] || obj[key]; + + if (baseValue) { + if ('function' === typeof baseValue.concat) { + if (value === null || value === undefined) { + return baseValue; + } else { + return baseValue.concat(value); + } + } else { + return _emberMetalUtils.makeArray(baseValue).concat(value); + } + } else { + return _emberMetalUtils.makeArray(value); + } + } + + function applyMergedProperties(obj, key, value, values) { + var baseValue = values[key] || obj[key]; + + _emberMetalDebug.runInDebug(function () { + if (Array.isArray(value)) { + // use conditional to avoid stringifying every time + _emberMetalDebug.assert('You passed in `' + JSON.stringify(value) + '` as the value for `' + key + '` but `' + key + '` cannot be an Array', false); + } + }); + + if (!baseValue) { + return value; + } + + var newBase = _emberMetalAssign.default({}, baseValue); + var hasFunction = false; + + for (var prop in value) { + if (!value.hasOwnProperty(prop)) { + continue; + } + + var propValue = value[prop]; + if (isMethod(propValue)) { + // TODO: support for Computed Properties, etc? + hasFunction = true; + newBase[prop] = giveMethodSuper(obj, prop, propValue, baseValue, {}); + } else { + newBase[prop] = propValue; + } + } + + if (hasFunction) { + newBase._super = ROOT; + } + + return newBase; + } + + function addNormalizedProperty(base, key, value, meta, descs, values, concats, mergings) { + if (value instanceof _emberMetalProperties.Descriptor) { + if (value === REQUIRED && descs[key]) { + return CONTINUE; + } + + // Wrap descriptor function to implement + // _super() if needed + if (value._getter) { + value = giveDescriptorSuper(meta, key, value, values, descs, base); + } + + descs[key] = value; + values[key] = undefined; + } else { + if (concats && concats.indexOf(key) >= 0 || key === 'concatenatedProperties' || key === 'mergedProperties') { + value = applyConcatenatedProperties(base, key, value, values); + } else if (mergings && mergings.indexOf(key) >= 0) { + value = applyMergedProperties(base, key, value, values); + } else if (isMethod(value)) { + value = giveMethodSuper(base, key, value, values, descs); + } + + descs[key] = undefined; + values[key] = value; + } + } + + function mergeMixins(mixins, m, descs, values, base, keys) { + var currentMixin, props, key, concats, mergings, meta; + + function removeKeys(keyName) { + delete descs[keyName]; + delete values[keyName]; + } + + for (var i = 0, l = mixins.length; i < l; i++) { + currentMixin = mixins[i]; + _emberMetalDebug.assert('Expected hash or Mixin instance, got ' + Object.prototype.toString.call(currentMixin), typeof currentMixin === 'object' && currentMixin !== null && Object.prototype.toString.call(currentMixin) !== '[object Array]'); + + props = mixinProperties(m, currentMixin); + if (props === CONTINUE) { + continue; + } + + if (props) { + meta = _emberMetalMeta.meta(base); + if (base.willMergeMixin) { + base.willMergeMixin(props); + } + concats = concatenatedMixinProperties('concatenatedProperties', props, values, base); + mergings = concatenatedMixinProperties('mergedProperties', props, values, base); + + for (key in props) { + if (!props.hasOwnProperty(key)) { + continue; + } + keys.push(key); + addNormalizedProperty(base, key, props[key], meta, descs, values, concats, mergings); + } + + // manually copy toString() because some JS engines do not enumerate it + if (props.hasOwnProperty('toString')) { + base.toString = props.toString; + } + } else if (currentMixin.mixins) { + mergeMixins(currentMixin.mixins, m, descs, values, base, keys); + if (currentMixin._without) { + currentMixin._without.forEach(removeKeys); + } + } + } + } + + var IS_BINDING = /^.+Binding$/; + + function detectBinding(obj, key, value, m) { + if (IS_BINDING.test(key)) { + m.writeBindings(key, value); + } + } + + function connectStreamBinding(obj, key, stream) { + var onNotify = function (stream) { + _emberMetalObserver._suspendObserver(obj, key, null, didChange, function () { + _emberMetalProperty_set.trySet(obj, key, stream.value()); + }); + }; + + var didChange = function () { + stream.setValue(_emberMetalProperty_get.get(obj, key), onNotify); + }; + + // Initialize value + _emberMetalProperty_set.set(obj, key, stream.value()); + + _emberMetalObserver.addObserver(obj, key, null, didChange); + + stream.subscribe(onNotify); + + if (obj._streamBindingSubscriptions === undefined) { + obj._streamBindingSubscriptions = new _emberMetalEmpty_object.default(); + } + + obj._streamBindingSubscriptions[key] = onNotify; + } + + function connectBindings(obj, m) { + // TODO Mixin.apply(instance) should disconnect binding if exists + m.forEachBindings(function (key, binding) { + if (binding) { + var to = key.slice(0, -7); // strip Binding off end + if (_emberMetalStreamsUtils.isStream(binding)) { + connectStreamBinding(obj, to, binding); + return; + } else if (binding instanceof _emberMetalBinding.Binding) { + binding = binding.copy(); // copy prototypes' instance + binding.to(to); + } else { + // binding is string path + binding = new _emberMetalBinding.Binding(to, binding); + } + binding.connect(obj); + obj[key] = binding; + } + }); + // mark as applied + m.clearBindings(); + } + + function finishPartial(obj, m) { + connectBindings(obj, m || _emberMetalMeta.meta(obj)); + return obj; + } + + function followAlias(obj, desc, m, descs, values) { + var altKey = desc.methodName; + var value; + var possibleDesc; + if (descs[altKey] || values[altKey]) { + value = values[altKey]; + desc = descs[altKey]; + } else if ((possibleDesc = obj[altKey]) && possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor) { + desc = possibleDesc; + value = undefined; + } else { + desc = undefined; + value = obj[altKey]; + } + + return { desc: desc, value: value }; + } + + function updateObserversAndListeners(obj, key, observerOrListener, pathsKey, updateMethod) { + var paths = observerOrListener[pathsKey]; + + if (paths) { + for (var i = 0, l = paths.length; i < l; i++) { + updateMethod(obj, paths[i], null, key); + } + } + } + + function replaceObserversAndListeners(obj, key, observerOrListener) { + var prev = obj[key]; + + if ('function' === typeof prev) { + updateObserversAndListeners(obj, key, prev, '__ember_observesBefore__', _emberMetalObserver._removeBeforeObserver); + updateObserversAndListeners(obj, key, prev, '__ember_observes__', _emberMetalObserver.removeObserver); + updateObserversAndListeners(obj, key, prev, '__ember_listens__', _emberMetalEvents.removeListener); + } + + if ('function' === typeof observerOrListener) { + updateObserversAndListeners(obj, key, observerOrListener, '__ember_observesBefore__', _emberMetalObserver._addBeforeObserver); + updateObserversAndListeners(obj, key, observerOrListener, '__ember_observes__', _emberMetalObserver.addObserver); + updateObserversAndListeners(obj, key, observerOrListener, '__ember_listens__', _emberMetalEvents.addListener); + } + } + + function applyMixin(obj, mixins, partial) { + var descs = {}; + var values = {}; + var m = _emberMetalMeta.meta(obj); + var keys = []; + var key, value, desc; + + obj._super = ROOT; + + // Go through all mixins and hashes passed in, and: + // + // * Handle concatenated properties + // * Handle merged properties + // * Set up _super wrapping if necessary + // * Set up computed property descriptors + // * Copying `toString` in broken browsers + mergeMixins(mixins, m, descs, values, obj, keys); + + for (var i = 0, l = keys.length; i < l; i++) { + key = keys[i]; + if (key === 'constructor' || !values.hasOwnProperty(key)) { + continue; + } + + desc = descs[key]; + value = values[key]; + + if (desc === REQUIRED) { + continue; + } + + while (desc && desc instanceof Alias) { + var followed = followAlias(obj, desc, m, descs, values); + desc = followed.desc; + value = followed.value; + } + + if (desc === undefined && value === undefined) { + continue; + } + + replaceObserversAndListeners(obj, key, value); + detectBinding(obj, key, value, m); + _emberMetalProperties.defineProperty(obj, key, desc, value, m); + } + + if (!partial) { + // don't apply to prototype + finishPartial(obj, m); + } + + return obj; + } + + /** + @method mixin + @for Ember + @param obj + @param mixins* + @return obj + @private + */ + + function mixin(obj) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + applyMixin(obj, args, false); + return obj; + } + + /** + The `Ember.Mixin` class allows you to create mixins, whose properties can be + added to other classes. For instance, + + ```javascript + App.Editable = Ember.Mixin.create({ + edit: function() { + console.log('starting to edit'); + this.set('isEditing', true); + }, + isEditing: false + }); + + // Mix mixins into classes by passing them as the first arguments to + // .extend. + App.CommentView = Ember.View.extend(App.Editable, { + template: Ember.Handlebars.compile('{{#if view.isEditing}}...{{else}}...{{/if}}') + }); + + commentView = App.CommentView.create(); + commentView.edit(); // outputs 'starting to edit' + ``` + + Note that Mixins are created with `Ember.Mixin.create`, not + `Ember.Mixin.extend`. + + Note that mixins extend a constructor's prototype so arrays and object literals + defined as properties will be shared amongst objects that implement the mixin. + If you want to define a property in a mixin that is not shared, you can define + it either as a computed property or have it be created on initialization of the object. + + ```javascript + //filters array will be shared amongst any object implementing mixin + App.Filterable = Ember.Mixin.create({ + filters: Ember.A() + }); + + //filters will be a separate array for every object implementing the mixin + App.Filterable = Ember.Mixin.create({ + filters: Ember.computed(function() {return Ember.A();}) + }); + + //filters will be created as a separate array during the object's initialization + App.Filterable = Ember.Mixin.create({ + init: function() { + this._super(...arguments); + this.set("filters", Ember.A()); + } + }); + ``` + + @class Mixin + @namespace Ember + @public + */ + + function Mixin(args, properties) { + this.properties = properties; + + var length = args && args.length; + + if (length > 0) { + var m = new Array(length); + + for (var i = 0; i < length; i++) { + var x = args[i]; + if (x instanceof Mixin) { + m[i] = x; + } else { + m[i] = new Mixin(undefined, x); + } + } + + this.mixins = m; + } else { + this.mixins = undefined; + } + this.ownerConstructor = undefined; + this._without = undefined; + this[_emberMetalUtils.GUID_KEY] = null; + this[_emberMetalUtils.GUID_KEY + '_name'] = null; + _emberMetalDebug.debugSeal(this); + } + + Mixin._apply = applyMixin; + + Mixin.applyPartial = function (obj) { + var args = a_slice.call(arguments, 1); + return applyMixin(obj, args, true); + }; + + Mixin.finishPartial = finishPartial; + + // ES6TODO: this relies on a global state? + _emberMetalCore.default.anyUnprocessedMixins = false; + + /** + @method create + @static + @param arguments* + @public + */ + Mixin.create = function () { + // ES6TODO: this relies on a global state? + _emberMetalCore.default.anyUnprocessedMixins = true; + var M = this; + + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return new M(args, undefined); + }; + + var MixinPrototype = Mixin.prototype; + + /** + @method reopen + @param arguments* + @private + */ + MixinPrototype.reopen = function () { + var currentMixin; + + if (this.properties) { + currentMixin = new Mixin(undefined, this.properties); + this.properties = undefined; + this.mixins = [currentMixin]; + } else if (!this.mixins) { + this.mixins = []; + } + + var len = arguments.length; + var mixins = this.mixins; + var idx; + + for (idx = 0; idx < len; idx++) { + currentMixin = arguments[idx]; + _emberMetalDebug.assert('Expected hash or Mixin instance, got ' + Object.prototype.toString.call(currentMixin), typeof currentMixin === 'object' && currentMixin !== null && Object.prototype.toString.call(currentMixin) !== '[object Array]'); + + if (currentMixin instanceof Mixin) { + mixins.push(currentMixin); + } else { + mixins.push(new Mixin(undefined, currentMixin)); + } + } + + return this; + }; + + /** + @method apply + @param obj + @return applied object + @private + */ + MixinPrototype.apply = function (obj) { + return applyMixin(obj, [this], false); + }; + + MixinPrototype.applyPartial = function (obj) { + return applyMixin(obj, [this], true); + }; + + MixinPrototype.toString = function Mixin_toString() { + return '(unknown mixin)'; + }; + + function _detect(curMixin, targetMixin, seen) { + var guid = _emberMetalUtils.guidFor(curMixin); + + if (seen[guid]) { + return false; + } + seen[guid] = true; + + if (curMixin === targetMixin) { + return true; + } + var mixins = curMixin.mixins; + var loc = mixins ? mixins.length : 0; + while (--loc >= 0) { + if (_detect(mixins[loc], targetMixin, seen)) { + return true; + } + } + return false; + } + + /** + @method detect + @param obj + @return {Boolean} + @private + */ + MixinPrototype.detect = function (obj) { + if (!obj) { + return false; + } + if (obj instanceof Mixin) { + return _detect(obj, this, {}); + } + var m = _emberMetalMeta.peekMeta(obj); + if (!m) { + return false; + } + return !!m.peekMixins(_emberMetalUtils.guidFor(this)); + }; + + MixinPrototype.without = function () { + var ret = new Mixin([this]); + + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + ret._without = args; + return ret; + }; + + function _keys(ret, mixin, seen) { + if (seen[_emberMetalUtils.guidFor(mixin)]) { + return; + } + seen[_emberMetalUtils.guidFor(mixin)] = true; + + if (mixin.properties) { + var props = Object.keys(mixin.properties); + for (var i = 0; i < props.length; i++) { + var key = props[i]; + ret[key] = true; + } + } else if (mixin.mixins) { + mixin.mixins.forEach(function (x) { + return _keys(ret, x, seen); + }); + } + } + + MixinPrototype.keys = function () { + var keys = {}; + var seen = {}; + + _keys(keys, this, seen); + var ret = Object.keys(keys); + return ret; + }; + + _emberMetalDebug.debugSeal(MixinPrototype); + + // returns the mixins currently applied to the specified object + // TODO: Make Ember.mixin + Mixin.mixins = function (obj) { + var m = _emberMetalMeta.peekMeta(obj); + var ret = []; + if (!m) { + return ret; + } + + m.forEachMixins(function (key, currentMixin) { + // skip primitive mixins since these are always anonymous + if (!currentMixin.properties) { + ret.push(currentMixin); + } + }); + + return ret; + }; + + exports.REQUIRED = REQUIRED = new _emberMetalProperties.Descriptor(); + REQUIRED.toString = function () { + return '(Required Property)'; + }; + + /** + Denotes a required property for a mixin + + @method required + @for Ember + @private + */ + + function required() { + _emberMetalDebug.deprecate('Ember.required is deprecated as its behavior is inconsistent and unreliable.', false, { id: 'ember-metal.required', until: '3.0.0' }); + return REQUIRED; + } + + function Alias(methodName) { + this.isDescriptor = true; + this.methodName = methodName; + } + + Alias.prototype = new _emberMetalProperties.Descriptor(); + + /** + Makes a method available via an additional name. + + ```javascript + App.Person = Ember.Object.extend({ + name: function() { + return 'Tomhuda Katzdale'; + }, + moniker: Ember.aliasMethod('name') + }); + + var goodGuy = App.Person.create(); + + goodGuy.name(); // 'Tomhuda Katzdale' + goodGuy.moniker(); // 'Tomhuda Katzdale' + ``` + + @method aliasMethod + @for Ember + @param {String} methodName name of the method to alias + @public + */ + + function aliasMethod(methodName) { + return new Alias(methodName); + } + + // .......................................................... + // OBSERVER HELPER + // + + /** + Specify a method that observes property changes. + + ```javascript + Ember.Object.extend({ + valueObserver: Ember.observer('value', function() { + // Executes whenever the "value" property changes + }) + }); + ``` + + Also available as `Function.prototype.observes` if prototype extensions are + enabled. + + @method observer + @for Ember + @param {String} propertyNames* + @param {Function} func + @return func + @public + */ + + function observer() { + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + var func = args.slice(-1)[0]; + var paths; + + var addWatchedProperty = function (path) { + paths.push(path); + }; + var _paths = args.slice(0, -1); + + if (typeof func !== 'function') { + // revert to old, soft-deprecated argument ordering + _emberMetalDebug.deprecate('Passing the dependentKeys after the callback function in Ember.observer is deprecated. Ensure the callback function is the last argument.', false, { id: 'ember-metal.observer-argument-order', until: '3.0.0' }); + + func = args[0]; + _paths = args.slice(1); + } + + paths = []; + + for (var i = 0; i < _paths.length; ++i) { + _emberMetalExpand_properties.default(_paths[i], addWatchedProperty); + } + + if (typeof func !== 'function') { + throw new _emberMetalError.default('Ember.observer called without a function'); + } + + func.__ember_observes__ = paths; + return func; + } + + /** + Specify a method that observes property changes. + + ```javascript + Ember.Object.extend({ + valueObserver: Ember.immediateObserver('value', function() { + // Executes whenever the "value" property changes + }) + }); + ``` + + In the future, `Ember.observer` may become asynchronous. In this event, + `Ember.immediateObserver` will maintain the synchronous behavior. + + Also available as `Function.prototype.observesImmediately` if prototype extensions are + enabled. + + @method _immediateObserver + @for Ember + @param {String} propertyNames* + @param {Function} func + @deprecated Use `Ember.observer` instead. + @return func + @private + */ + + function _immediateObserver() { + _emberMetalDebug.deprecate('Usage of `Ember.immediateObserver` is deprecated, use `Ember.observer` instead.', false, { id: 'ember-metal.immediate-observer', until: '3.0.0' }); + + for (var i = 0, l = arguments.length; i < l; i++) { + var arg = arguments[i]; + _emberMetalDebug.assert('Immediate observers must observe internal properties only, not properties on other objects.', typeof arg !== 'string' || arg.indexOf('.') === -1); + } + + return observer.apply(this, arguments); + } + + /** + When observers fire, they are called with the arguments `obj`, `keyName`. + + Note, `@each.property` observer is called per each add or replace of an element + and it's not called with a specific enumeration item. + + A `_beforeObserver` fires before a property changes. + + A `_beforeObserver` is an alternative form of `.observesBefore()`. + + ```javascript + App.PersonView = Ember.View.extend({ + friends: [{ name: 'Tom' }, { name: 'Stefan' }, { name: 'Kris' }], + + valueDidChange: Ember.observer('content.value', function(obj, keyName) { + // only run if updating a value already in the DOM + if (this.get('state') === 'inDOM') { + var color = obj.get(keyName) > this.changingFrom ? 'green' : 'red'; + // logic + } + }), + + friendsDidChange: Ember.observer('friends.@each.name', function(obj, keyName) { + // some logic + // obj.get(keyName) returns friends array + }) + }); + ``` + + Also available as `Function.prototype.observesBefore` if prototype extensions are + enabled. + + @method beforeObserver + @for Ember + @param {String} propertyNames* + @param {Function} func + @return func + @deprecated + @private + */ + + function _beforeObserver() { + for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + args[_key5] = arguments[_key5]; + } + + var func = args.slice(-1)[0]; + var paths; + + var addWatchedProperty = function (path) { + paths.push(path); + }; + + var _paths = args.slice(0, -1); + + if (typeof func !== 'function') { + // revert to old, soft-deprecated argument ordering + + func = args[0]; + _paths = args.slice(1); + } + + paths = []; + + for (var i = 0; i < _paths.length; ++i) { + _emberMetalExpand_properties.default(_paths[i], addWatchedProperty); + } + + if (typeof func !== 'function') { + throw new _emberMetalCore.default.Error('Ember.beforeObserver called without a function'); + } + + func.__ember_observesBefore__ = paths; + return func; + } + + exports.IS_BINDING = IS_BINDING; + exports.Mixin = Mixin; + exports.required = required; + exports.REQUIRED = REQUIRED; +}); +// warn, assert, wrap, et; +enifed('ember-metal/observer', ['exports', 'ember-metal/watching', 'ember-metal/events'], function (exports, _emberMetalWatching, _emberMetalEvents) { + 'use strict'; + + exports.addObserver = addObserver; + exports.observersFor = observersFor; + exports.removeObserver = removeObserver; + exports._addBeforeObserver = _addBeforeObserver; + exports._suspendObserver = _suspendObserver; + exports._suspendObservers = _suspendObservers; + exports._removeBeforeObserver = _removeBeforeObserver; + + /** + @module ember-metal + */ + + var AFTER_OBSERVERS = ':change'; + var BEFORE_OBSERVERS = ':before'; + + function changeEvent(keyName) { + return keyName + AFTER_OBSERVERS; + } + + function beforeEvent(keyName) { + return keyName + BEFORE_OBSERVERS; + } + + /** + @method addObserver + @for Ember + @param obj + @param {String} _path + @param {Object|Function} target + @param {Function|String} [method] + @public + */ + + function addObserver(obj, _path, target, method) { + _emberMetalEvents.addListener(obj, changeEvent(_path), target, method); + _emberMetalWatching.watch(obj, _path); + + return this; + } + + function observersFor(obj, path) { + return _emberMetalEvents.listenersFor(obj, changeEvent(path)); + } + + /** + @method removeObserver + @for Ember + @param obj + @param {String} path + @param {Object|Function} target + @param {Function|String} [method] + @public + */ + + function removeObserver(obj, path, target, method) { + _emberMetalWatching.unwatch(obj, path); + _emberMetalEvents.removeListener(obj, changeEvent(path), target, method); + + return this; + } + + /** + @method _addBeforeObserver + @for Ember + @param obj + @param {String} path + @param {Object|Function} target + @param {Function|String} [method] + @deprecated + @private + */ + + function _addBeforeObserver(obj, path, target, method) { + _emberMetalEvents.addListener(obj, beforeEvent(path), target, method); + _emberMetalWatching.watch(obj, path); + + return this; + } + + // Suspend observer during callback. + // + // This should only be used by the target of the observer + // while it is setting the observed path. + + function _suspendObserver(obj, path, target, method, callback) { + return _emberMetalEvents.suspendListener(obj, changeEvent(path), target, method, callback); + } + + function _suspendObservers(obj, paths, target, method, callback) { + var events = paths.map(changeEvent); + return _emberMetalEvents.suspendListeners(obj, events, target, method, callback); + } + + /** + @method removeBeforeObserver + @for Ember + @param obj + @param {String} path + @param {Object|Function} target + @param {Function|String} [method] + @deprecated + @private + */ + + function _removeBeforeObserver(obj, path, target, method) { + _emberMetalWatching.unwatch(obj, path); + _emberMetalEvents.removeListener(obj, beforeEvent(path), target, method); + + return this; + } +}); +enifed('ember-metal/observer_set', ['exports', 'ember-metal/utils', 'ember-metal/events'], function (exports, _emberMetalUtils, _emberMetalEvents) { + 'use strict'; + + /* + this.observerSet = { + [senderGuid]: { // variable name: `keySet` + [keyName]: listIndex + } + }, + this.observers = [ + { + sender: obj, + keyName: keyName, + eventName: eventName, + listeners: [ + [target, method, flags] + ] + }, + ... + ] + */ + exports.default = ObserverSet; + + function ObserverSet() { + this.clear(); + } + + ObserverSet.prototype.add = function (sender, keyName, eventName) { + var observerSet = this.observerSet; + var observers = this.observers; + var senderGuid = _emberMetalUtils.guidFor(sender); + var keySet = observerSet[senderGuid]; + var index; + + if (!keySet) { + observerSet[senderGuid] = keySet = {}; + } + index = keySet[keyName]; + if (index === undefined) { + index = observers.push({ + sender: sender, + keyName: keyName, + eventName: eventName, + listeners: [] + }) - 1; + keySet[keyName] = index; + } + return observers[index].listeners; + }; + + ObserverSet.prototype.flush = function () { + var observers = this.observers; + var i, len, observer, sender; + this.clear(); + for (i = 0, len = observers.length; i < len; ++i) { + observer = observers[i]; + sender = observer.sender; + if (sender.isDestroying || sender.isDestroyed) { + continue; + } + _emberMetalEvents.sendEvent(sender, observer.eventName, [sender, observer.keyName], observer.listeners); + } + }; + + ObserverSet.prototype.clear = function () { + this.observerSet = {}; + this.observers = []; + }; +}); +enifed('ember-metal/path_cache', ['exports', 'ember-metal/cache'], function (exports, _emberMetalCache) { + 'use strict'; + + exports.isGlobal = isGlobal; + exports.isGlobalPath = isGlobalPath; + exports.hasThis = hasThis; + exports.isPath = isPath; + exports.getFirstKey = getFirstKey; + exports.getTailPath = getTailPath; + + var IS_GLOBAL = /^[A-Z$]/; + var IS_GLOBAL_PATH = /^[A-Z$].*[\.]/; + var HAS_THIS = 'this.'; + + var isGlobalCache = new _emberMetalCache.default(1000, function (key) { + return IS_GLOBAL.test(key); + }); + + var isGlobalPathCache = new _emberMetalCache.default(1000, function (key) { + return IS_GLOBAL_PATH.test(key); + }); + + var hasThisCache = new _emberMetalCache.default(1000, function (key) { + return key.lastIndexOf(HAS_THIS, 0) === 0; + }); + + var firstDotIndexCache = new _emberMetalCache.default(1000, function (key) { + return key.indexOf('.'); + }); + + var firstKeyCache = new _emberMetalCache.default(1000, function (path) { + var index = firstDotIndexCache.get(path); + if (index === -1) { + return path; + } else { + return path.slice(0, index); + } + }); + + var tailPathCache = new _emberMetalCache.default(1000, function (path) { + var index = firstDotIndexCache.get(path); + if (index !== -1) { + return path.slice(index + 1); + } + }); + + var caches = { + isGlobalCache: isGlobalCache, + isGlobalPathCache: isGlobalPathCache, + hasThisCache: hasThisCache, + firstDotIndexCache: firstDotIndexCache, + firstKeyCache: firstKeyCache, + tailPathCache: tailPathCache + }; + + exports.caches = caches; + + function isGlobal(path) { + return isGlobalCache.get(path); + } + + function isGlobalPath(path) { + return isGlobalPathCache.get(path); + } + + function hasThis(path) { + return hasThisCache.get(path); + } + + function isPath(path) { + return firstDotIndexCache.get(path) !== -1; + } + + function getFirstKey(path) { + return firstKeyCache.get(path); + } + + function getTailPath(path) { + return tailPathCache.get(path); + } +}); +enifed('ember-metal/properties', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/meta', 'ember-metal/property_events'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalMeta, _emberMetalProperty_events) { + /** + @module ember-metal + */ + + 'use strict'; + + exports.Descriptor = Descriptor; + exports.MANDATORY_SETTER_FUNCTION = MANDATORY_SETTER_FUNCTION; + exports.DEFAULT_GETTER_FUNCTION = DEFAULT_GETTER_FUNCTION; + exports.INHERITING_GETTER_FUNCTION = INHERITING_GETTER_FUNCTION; + exports.defineProperty = defineProperty; + + // .......................................................... + // DESCRIPTOR + // + + /** + Objects of this type can implement an interface to respond to requests to + get and set. The default implementation handles simple properties. + + @class Descriptor + @private + */ + + function Descriptor() { + this.isDescriptor = true; + } + + var REDEFINE_SUPPORTED = (function () { + // https://github.com/spalger/kibana/commit/b7e35e6737df585585332857a4c397dc206e7ff9 + var a = Object.create(Object.prototype, { + prop: { + configurable: true, + value: 1 + } + }); + + Object.defineProperty(a, 'prop', { + configurable: true, + value: 2 + }); + + return a.prop === 2; + })(); + // .......................................................... + // DEFINING PROPERTIES API + // + + function MANDATORY_SETTER_FUNCTION(name) { + function SETTER_FUNCTION(value) { + _emberMetalDebug.assert('You must use Ember.set() to set the `' + name + '` property (of ' + this + ') to `' + value + '`.', false); + } + + SETTER_FUNCTION.isMandatorySetter = true; + return SETTER_FUNCTION; + } + + function DEFAULT_GETTER_FUNCTION(name) { + return function GETTER_FUNCTION() { + var meta = this['__ember_meta__']; + return meta && meta.peekValues(name); + }; + } + + function INHERITING_GETTER_FUNCTION(name) { + function IGETTER_FUNCTION() { + var proto = Object.getPrototypeOf(this); + return proto && proto[name]; + } + + IGETTER_FUNCTION.isInheritingGetter = true; + return IGETTER_FUNCTION; + } + + /** + NOTE: This is a low-level method used by other parts of the API. You almost + never want to call this method directly. Instead you should use + `Ember.mixin()` to define new properties. + + Defines a property on an object. This method works much like the ES5 + `Object.defineProperty()` method except that it can also accept computed + properties and other special descriptors. + + Normally this method takes only three parameters. However if you pass an + instance of `Descriptor` as the third param then you can pass an + optional value as the fourth parameter. This is often more efficient than + creating new descriptor hashes for each property. + + ## Examples + + ```javascript + // ES5 compatible mode + Ember.defineProperty(contact, 'firstName', { + writable: true, + configurable: false, + enumerable: true, + value: 'Charles' + }); + + // define a simple property + Ember.defineProperty(contact, 'lastName', undefined, 'Jolley'); + + // define a computed property + Ember.defineProperty(contact, 'fullName', Ember.computed(function() { + return this.firstName+' '+this.lastName; + }).property('firstName', 'lastName')); + ``` + + @private + @method defineProperty + @for Ember + @param {Object} obj the object to define this property on. This may be a prototype. + @param {String} keyName the name of the property + @param {Descriptor} [desc] an instance of `Descriptor` (typically a + computed property) or an ES5 descriptor. + You must provide this or `data` but not both. + @param {*} [data] something other than a descriptor, that will + become the explicit value of this property. + */ + + function defineProperty(obj, keyName, desc, data, meta) { + var possibleDesc, existingDesc, watching, value; + + if (!meta) { + meta = _emberMetalMeta.meta(obj); + } + var watchEntry = meta.peekWatching(keyName); + possibleDesc = obj[keyName]; + existingDesc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; + + watching = watchEntry !== undefined && watchEntry > 0; + + if (existingDesc) { + existingDesc.teardown(obj, keyName); + } + + if (desc instanceof Descriptor) { + value = desc; + + if (watching) { + Object.defineProperty(obj, keyName, { + configurable: true, + enumerable: true, + writable: true, + value: value + }); + } else { + obj[keyName] = value; + } + + if (desc.setup) { + desc.setup(obj, keyName); + } + } else { + if (desc == null) { + value = data; + + if (watching) { + meta.writeValues(keyName, data); + + var defaultDescriptor = { + configurable: true, + enumerable: true, + set: MANDATORY_SETTER_FUNCTION(keyName), + get: DEFAULT_GETTER_FUNCTION(keyName) + }; + + if (REDEFINE_SUPPORTED) { + Object.defineProperty(obj, keyName, defaultDescriptor); + } else { + handleBrokenPhantomDefineProperty(obj, keyName, defaultDescriptor); + } + } else { + obj[keyName] = data; + } + } else { + value = desc; + + // fallback to ES5 + Object.defineProperty(obj, keyName, desc); + } + } + + // if key is being watched, override chains that + // were initialized with the prototype + if (watching) { + _emberMetalProperty_events.overrideChains(obj, keyName, meta); + } + + // The `value` passed to the `didDefineProperty` hook is + // either the descriptor or data, whichever was passed. + if (obj.didDefineProperty) { + obj.didDefineProperty(obj, keyName, value); + } + + return this; + } + + function handleBrokenPhantomDefineProperty(obj, keyName, desc) { + // https://github.com/ariya/phantomjs/issues/11856 + Object.defineProperty(obj, keyName, { configurable: true, writable: true, value: 'iCry' }); + Object.defineProperty(obj, keyName, desc); + } +}); +enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/events', 'ember-metal/observer_set', 'ember-metal/symbol'], function (exports, _emberMetalUtils, _emberMetalMeta, _emberMetalEvents, _emberMetalObserver_set, _emberMetalSymbol) { + 'use strict'; + + var PROPERTY_DID_CHANGE = _emberMetalSymbol.default('PROPERTY_DID_CHANGE'); + + exports.PROPERTY_DID_CHANGE = PROPERTY_DID_CHANGE; + var beforeObserverSet = new _emberMetalObserver_set.default(); + var observerSet = new _emberMetalObserver_set.default(); + var deferred = 0; + + // .......................................................... + // PROPERTY CHANGES + // + + /** + This function is called just before an object property is about to change. + It will notify any before observers and prepare caches among other things. + + Normally you will not need to call this method directly but if for some + reason you can't directly watch a property you can invoke this method + manually along with `Ember.propertyDidChange()` which you should call just + after the property value changes. + + @method propertyWillChange + @for Ember + @param {Object} obj The object with the property that will change + @param {String} keyName The property key (or path) that will change. + @return {void} + @private + */ + function propertyWillChange(obj, keyName) { + var m = _emberMetalMeta.peekMeta(obj); + var watching = m && m.peekWatching(keyName) > 0 || keyName === 'length'; + var proto = m && m.proto; + var possibleDesc = obj[keyName]; + var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; + + if (!watching) { + return; + } + + if (proto === obj) { + return; + } + + if (desc && desc.willChange) { + desc.willChange(obj, keyName); + } + + dependentKeysWillChange(obj, keyName, m); + chainsWillChange(obj, keyName, m); + notifyBeforeObservers(obj, keyName); + } + + /** + This function is called just after an object property has changed. + It will notify any observers and clear caches among other things. + + Normally you will not need to call this method directly but if for some + reason you can't directly watch a property you can invoke this method + manually along with `Ember.propertyWillChange()` which you should call just + before the property value changes. + + @method propertyDidChange + @for Ember + @param {Object} obj The object with the property that will change + @param {String} keyName The property key (or path) that will change. + @return {void} + @private + */ + function propertyDidChange(obj, keyName) { + var m = _emberMetalMeta.peekMeta(obj); + var watching = m && m.peekWatching(keyName) > 0 || keyName === 'length'; + var proto = m && m.proto; + var possibleDesc = obj[keyName]; + var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; + + if (proto === obj) { + return; + } + + // shouldn't this mean that we're watching this key? + if (desc && desc.didChange) { + desc.didChange(obj, keyName); + } + + if (obj[PROPERTY_DID_CHANGE]) { + obj[PROPERTY_DID_CHANGE](keyName); + } + + if (!watching && keyName !== 'length') { + return; + } + + if (m && m.hasDeps(keyName)) { + dependentKeysDidChange(obj, keyName, m); + } + + chainsDidChange(obj, keyName, m, false); + notifyObservers(obj, keyName); + } + + var WILL_SEEN, DID_SEEN; + // called whenever a property is about to change to clear the cache of any dependent keys (and notify those properties of changes, etc...) + function dependentKeysWillChange(obj, depKey, meta) { + if (obj.isDestroying) { + return; + } + + if (meta && meta.hasDeps(depKey)) { + var seen = WILL_SEEN; + var top = !seen; + + if (top) { + seen = WILL_SEEN = {}; + } + + iterDeps(propertyWillChange, obj, depKey, seen, meta); + + if (top) { + WILL_SEEN = null; + } + } + } + + // called whenever a property has just changed to update dependent keys + function dependentKeysDidChange(obj, depKey, meta) { + if (obj.isDestroying) { + return; + } + + if (meta && meta.hasDeps(depKey)) { + var seen = DID_SEEN; + var top = !seen; + + if (top) { + seen = DID_SEEN = {}; + } + + iterDeps(propertyDidChange, obj, depKey, seen, meta); + + if (top) { + DID_SEEN = null; + } + } + } + + function iterDeps(method, obj, depKey, seen, meta) { + var possibleDesc, desc; + var guid = _emberMetalUtils.guidFor(obj); + var current = seen[guid]; + + if (!current) { + current = seen[guid] = {}; + } + + if (current[depKey]) { + return; + } + + current[depKey] = true; + + meta.forEachInDeps(depKey, function (key, value) { + if (!value) { + return; + } + + possibleDesc = obj[key]; + desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; + + if (desc && desc._suspended === obj) { + return; + } + + method(obj, key); + }); + } + + function chainsWillChange(obj, keyName, m) { + var c = m.readableChainWatchers(); + if (c) { + c.notify(keyName, false, propertyWillChange); + } + } + + function chainsDidChange(obj, keyName, m) { + var c = m.readableChainWatchers(); + if (c) { + c.notify(keyName, true, propertyDidChange); + } + } + + function overrideChains(obj, keyName, m) { + var c = m.readableChainWatchers(); + if (c) { + c.revalidate(keyName); + } + } + + /** + @method beginPropertyChanges + @chainable + @private + */ + function beginPropertyChanges() { + deferred++; + } + + /** + @method endPropertyChanges + @private + */ + function endPropertyChanges() { + deferred--; + if (deferred <= 0) { + beforeObserverSet.clear(); + observerSet.flush(); + } + } + + /** + Make a series of property changes together in an + exception-safe way. + + ```javascript + Ember.changeProperties(function() { + obj1.set('foo', mayBlowUpWhenSet); + obj2.set('bar', baz); + }); + ``` + + @method changeProperties + @param {Function} callback + @param [binding] + @private + */ + function changeProperties(callback, binding) { + beginPropertyChanges(); + try { + callback.call(binding); + } finally { + endPropertyChanges.call(binding); + } + } + + function notifyBeforeObservers(obj, keyName) { + if (obj.isDestroying) { + return; + } + + var eventName = keyName + ':before'; + var listeners, added; + if (deferred) { + listeners = beforeObserverSet.add(obj, keyName, eventName); + added = _emberMetalEvents.accumulateListeners(obj, eventName, listeners); + _emberMetalEvents.sendEvent(obj, eventName, [obj, keyName], added); + } else { + _emberMetalEvents.sendEvent(obj, eventName, [obj, keyName]); + } + } + + function notifyObservers(obj, keyName) { + if (obj.isDestroying) { + return; + } + + var eventName = keyName + ':change'; + var listeners; + if (deferred) { + listeners = observerSet.add(obj, keyName, eventName); + _emberMetalEvents.accumulateListeners(obj, eventName, listeners); + } else { + _emberMetalEvents.sendEvent(obj, eventName, [obj, keyName]); + } + } + + exports.propertyWillChange = propertyWillChange; + exports.propertyDidChange = propertyDidChange; + exports.overrideChains = overrideChains; + exports.beginPropertyChanges = beginPropertyChanges; + exports.endPropertyChanges = endPropertyChanges; + exports.changeProperties = changeProperties; +}); +enifed('ember-metal/property_get', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/error', 'ember-metal/path_cache'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalError, _emberMetalPath_cache) { + /** + @module ember-metal + */ + + 'use strict'; + + exports.get = get; + exports.normalizeTuple = normalizeTuple; + exports._getPath = _getPath; + exports.getWithDefault = getWithDefault; + + var FIRST_KEY = /^([^\.]+)/; + + // .......................................................... + // GET AND SET + // + // If we are on a platform that supports accessors we can use those. + // Otherwise simulate accessors by looking up the property directly on the + // object. + + /** + Gets the value of a property on an object. If the property is computed, + the function will be invoked. If the property is not defined but the + object implements the `unknownProperty` method then that will be invoked. + + If you plan to run on IE8 and older browsers then you should use this + method anytime you want to retrieve a property on an object that you don't + know for sure is private. (Properties beginning with an underscore '_' + are considered private.) + + On all newer browsers, you only need to use this method to retrieve + properties if the property might not be defined on the object and you want + to respect the `unknownProperty` handler. Otherwise you can ignore this + method. + + Note that if the object itself is `undefined`, this method will throw + an error. + + @method get + @for Ember + @param {Object} obj The object to retrieve from. + @param {String} keyName The property key to retrieve + @return {Object} the property value or `null`. + @public + */ + + function get(obj, keyName) { + _emberMetalDebug.assert('Get must be called with two arguments; an object and a property key', arguments.length === 2); + _emberMetalDebug.assert('Cannot call get with \'' + keyName + '\' on an undefined object.', obj !== undefined && obj !== null); + _emberMetalDebug.assert('The key provided to get must be a string, you passed ' + keyName, typeof keyName === 'string'); + _emberMetalDebug.assert('\'this\' in paths is not supported', !_emberMetalPath_cache.hasThis(keyName)); + + // Helpers that operate with 'this' within an #each + if (keyName === '') { + return obj; + } + + var value = obj[keyName]; + var desc = value !== null && typeof value === 'object' && value.isDescriptor ? value : undefined; + var ret; + + if (desc === undefined && _emberMetalPath_cache.isPath(keyName)) { + return _getPath(obj, keyName); + } + + if (desc) { + return desc.get(obj, keyName); + } else { + ret = value; + + if (ret === undefined && 'object' === typeof obj && !(keyName in obj) && 'function' === typeof obj.unknownProperty) { + return obj.unknownProperty(keyName); + } + + return ret; + } + } + + /** + Normalizes a target/path pair to reflect that actual target/path that should + be observed, etc. This takes into account passing in global property + paths (i.e. a path beginning with a capital letter not defined on the + target). + + @private + @method normalizeTuple + @for Ember + @param {Object} target The current target. May be `null`. + @param {String} path A path on the target or a global property path. + @return {Array} a temporary array with the normalized target/path pair. + */ + + function normalizeTuple(target, path) { + var hasThis = _emberMetalPath_cache.hasThis(path); + var isGlobal = !hasThis && _emberMetalPath_cache.isGlobal(path); + var key; + + if (!target && !isGlobal) { + return [undefined, '']; + } + + if (hasThis) { + path = path.slice(5); + } + + if (!target || isGlobal) { + target = _emberMetalCore.default.lookup; + } + + if (isGlobal && _emberMetalPath_cache.isPath(path)) { + key = path.match(FIRST_KEY)[0]; + target = get(target, key); + path = path.slice(key.length + 1); + } + + // must return some kind of path to be valid else other things will break. + validateIsPath(path); + + return [target, path]; + } + + function validateIsPath(path) { + if (!path || path.length === 0) { + throw new _emberMetalError.default('Object in path ' + path + ' could not be found or was destroyed.'); + } + } + + function _getPath(root, path) { + var hasThis, parts, tuple, idx, len; + + // detect complicated paths and normalize them + hasThis = _emberMetalPath_cache.hasThis(path); + + if (!root || hasThis) { + tuple = normalizeTuple(root, path); + root = tuple[0]; + path = tuple[1]; + tuple.length = 0; + } + + parts = path.split('.'); + len = parts.length; + for (idx = 0; root != null && idx < len; idx++) { + root = get(root, parts[idx]); + if (root && root.isDestroyed) { + return undefined; + } + } + return root; + } + + /** + Retrieves the value of a property from an Object, or a default value in the + case that the property returns `undefined`. + + ```javascript + Ember.getWithDefault(person, 'lastName', 'Doe'); + ``` + + @method getWithDefault + @for Ember + @param {Object} obj The object to retrieve from. + @param {String} keyName The name of the property to retrieve + @param {Object} defaultValue The value to return if the property value is undefined + @return {Object} The property value or the defaultValue. + @public + */ + + function getWithDefault(root, key, defaultValue) { + var value = get(root, key); + + if (value === undefined) { + return defaultValue; + } + return value; + } + + exports.default = get; +}); +enifed('ember-metal/property_set', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/error', 'ember-metal/path_cache', 'ember-metal/meta', 'ember-metal/utils'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_events, _emberMetalProperties, _emberMetalError, _emberMetalPath_cache, _emberMetalMeta, _emberMetalUtils) { + 'use strict'; + + exports.set = set; + exports.trySet = trySet; + + /** + Sets the value of a property on an object, respecting computed properties + and notifying observers and other listeners of the change. If the + property is not defined but the object implements the `setUnknownProperty` + method then that will be invoked as well. + + @method set + @for Ember + @param {Object} obj The object to modify. + @param {String} keyName The property key to set + @param {Object} value The value to set + @return {Object} the passed value. + @public + */ + + function set(obj, keyName, value, tolerant) { + _emberMetalDebug.assert('Set must be called with three or four arguments; an object, a property key, a value and tolerant true/false', arguments.length === 3 || arguments.length === 4); + _emberMetalDebug.assert('Cannot call set with \'' + keyName + '\' on an undefined object.', obj !== undefined && obj !== null); + _emberMetalDebug.assert('The key provided to set must be a string, you passed ' + keyName, typeof keyName === 'string'); + _emberMetalDebug.assert('\'this\' in paths is not supported', !_emberMetalPath_cache.hasThis(keyName)); + + var meta, possibleDesc, desc; + if (obj) { + meta = _emberMetalMeta.peekMeta(obj); + possibleDesc = obj[keyName]; + desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; + } + + var isUnknown, currentValue; + if (desc === undefined && _emberMetalPath_cache.isPath(keyName)) { + return setPath(obj, keyName, value, tolerant); + } + + _emberMetalDebug.assert('calling set on destroyed object', !obj.isDestroyed); + + if (desc) { + desc.set(obj, keyName, value); + } else { + if (value !== undefined && typeof obj === 'object' && obj[keyName] === value) { + return value; + } + + isUnknown = 'object' === typeof obj && !(keyName in obj); + + // setUnknownProperty is called if `obj` is an object, + // the property does not already exist, and the + // `setUnknownProperty` method exists on the object + if (isUnknown && 'function' === typeof obj.setUnknownProperty) { + obj.setUnknownProperty(keyName, value); + } else if (meta && meta.peekWatching(keyName) > 0) { + if (meta.proto !== obj) { + currentValue = obj[keyName]; + } + // only trigger a change if the value has changed + if (value !== currentValue) { + _emberMetalProperty_events.propertyWillChange(obj, keyName); + + if (currentValue === undefined && !(keyName in obj) || !Object.prototype.propertyIsEnumerable.call(obj, keyName)) { + _emberMetalProperties.defineProperty(obj, keyName, null, value); // setup mandatory setter + } else { + var descriptor = _emberMetalUtils.lookupDescriptor(obj, keyName); + var isMandatorySetter = descriptor && descriptor.set && descriptor.set.isMandatorySetter; + if (isMandatorySetter) { + meta.writeValues(keyName, value); + } else { + obj[keyName] = value; + } + } + + _emberMetalProperty_events.propertyDidChange(obj, keyName); + } + } else { + obj[keyName] = value; + if (obj[_emberMetalProperty_events.PROPERTY_DID_CHANGE]) { + obj[_emberMetalProperty_events.PROPERTY_DID_CHANGE](keyName); + } + } + } + return value; + } + + function setPath(root, path, value, tolerant) { + var keyName; + + // get the last part of the path + keyName = path.slice(path.lastIndexOf('.') + 1); + + // get the first part of the part + path = path === keyName ? keyName : path.slice(0, path.length - (keyName.length + 1)); + + // unless the path is this, look up the first part to + // get the root + if (path !== 'this') { + root = _emberMetalProperty_get._getPath(root, path); + } + + if (!keyName || keyName.length === 0) { + throw new _emberMetalError.default('Property set failed: You passed an empty path'); + } + + if (!root) { + if (tolerant) { + return; + } else { + throw new _emberMetalError.default('Property set failed: object in path "' + path + '" could not be found or was destroyed.'); + } + } + + return set(root, keyName, value); + } + + /** + Error-tolerant form of `Ember.set`. Will not blow up if any part of the + chain is `undefined`, `null`, or destroyed. + + This is primarily used when syncing bindings, which may try to update after + an object has been destroyed. + + @method trySet + @for Ember + @param {Object} root The object to modify. + @param {String} path The property path to set + @param {Object} value The value to set + @public + */ + + function trySet(root, path, value) { + return set(root, path, value, true); + } +}); +enifed("ember-metal/replace", ["exports"], function (exports) { + "use strict"; + + exports._replace = _replace; + exports.default = replace; + var splice = Array.prototype.splice; + + function _replace(array, idx, amt, objects) { + var args = [].concat(objects); + var ret = []; + // https://code.google.com/p/chromium/issues/detail?id=56588 + var size = 60000; + var start = idx; + var ends = amt; + var count, chunk; + + while (args.length) { + count = ends > size ? size : ends; + if (count <= 0) { + count = 0; + } + + chunk = args.splice(0, size); + chunk = [start, count].concat(chunk); + + start += size; + ends -= count; + + ret = ret.concat(splice.apply(array, chunk)); + } + return ret; + } + + /** + Replaces objects in an array with the passed objects. + + ```javascript + var array = [1,2,3]; + Ember.EnumerableUtils.replace(array, 1, 2, [4, 5]); // [1, 4, 5] + + var array = [1,2,3]; + Ember.EnumerableUtils.replace(array, 1, 1, [4, 5]); // [1, 4, 5, 3] + + var array = [1,2,3]; + Ember.EnumerableUtils.replace(array, 10, 1, [4, 5]); // [1, 2, 3, 4, 5] + ``` + + @method replace + @deprecated + @param {Array} array The array the objects should be inserted into. + @param {Number} idx Starting index in the array to replace. If *idx* >= + length, then append to the end of the array. + @param {Number} amt Number of elements that should be removed from the array, + starting at *idx* + @param {Array} objects An array of zero or more objects that should be + inserted into the array at *idx* + + @return {Array} The modified array. + @public + */ + + function replace(array, idx, amt, objects) { + if (array.replace) { + return array.replace(idx, amt, objects); + } else { + return _replace(array, idx, amt, objects); + } + } +}); +enifed('ember-metal/run_loop', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/utils', 'ember-metal/property_events', 'backburner'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalUtils, _emberMetalProperty_events, _backburner) { + 'use strict'; + + exports.default = run; + + function onBegin(current) { + run.currentRunLoop = current; + } + + function onEnd(current, next) { + run.currentRunLoop = next; + } + + // ES6TODO: should Backburner become es6? + var backburner = new _backburner.default(['sync', 'actions', 'destroy'], { + GUID_KEY: _emberMetalUtils.GUID_KEY, + sync: { + before: _emberMetalProperty_events.beginPropertyChanges, + after: _emberMetalProperty_events.endPropertyChanges + }, + defaultQueue: 'actions', + onBegin: onBegin, + onEnd: onEnd, + onErrorTarget: _emberMetalCore.default, + onErrorMethod: 'onerror' + }); + + // .......................................................... + // run - this is ideally the only public API the dev sees + // + + /** + Runs the passed target and method inside of a RunLoop, ensuring any + deferred actions including bindings and views updates are flushed at the + end. + + Normally you should not need to invoke this method yourself. However if + you are implementing raw event handlers when interfacing with other + libraries or plugins, you should probably wrap all of your code inside this + call. + + ```javascript + run(function() { + // code to be executed within a RunLoop + }); + ``` + + @class run + @namespace Ember + @static + @constructor + @param {Object} [target] target of method to call + @param {Function|String} method Method to invoke. + May be a function or a string. If you pass a string + then it will be looked up on the passed target. + @param {Object} [args*] Any additional arguments you wish to pass to the method. + @return {Object} return value from invoking the passed function. + @public + */ + + function run() { + return backburner.run.apply(backburner, arguments); + } + + /** + If no run-loop is present, it creates a new one. If a run loop is + present it will queue itself to run on the existing run-loops action + queue. + + Please note: This is not for normal usage, and should be used sparingly. + + If invoked when not within a run loop: + + ```javascript + run.join(function() { + // creates a new run-loop + }); + ``` + + Alternatively, if called within an existing run loop: + + ```javascript + run(function() { + // creates a new run-loop + run.join(function() { + // joins with the existing run-loop, and queues for invocation on + // the existing run-loops action queue. + }); + }); + ``` + + @method join + @namespace Ember + @param {Object} [target] target of method to call + @param {Function|String} method Method to invoke. + May be a function or a string. If you pass a string + then it will be looked up on the passed target. + @param {Object} [args*] Any additional arguments you wish to pass to the method. + @return {Object} Return value from invoking the passed function. Please note, + when called within an existing loop, no return value is possible. + @public + */ + run.join = function () { + return backburner.join.apply(backburner, arguments); + }; + + /** + Allows you to specify which context to call the specified function in while + adding the execution of that function to the Ember run loop. This ability + makes this method a great way to asynchronously integrate third-party libraries + into your Ember application. + + `run.bind` takes two main arguments, the desired context and the function to + invoke in that context. Any additional arguments will be supplied as arguments + to the function that is passed in. + + Let's use the creation of a TinyMCE component as an example. Currently, + TinyMCE provides a setup configuration option we can use to do some processing + after the TinyMCE instance is initialized but before it is actually rendered. + We can use that setup option to do some additional setup for our component. + The component itself could look something like the following: + + ```javascript + App.RichTextEditorComponent = Ember.Component.extend({ + initializeTinyMCE: Ember.on('didInsertElement', function() { + tinymce.init({ + selector: '#' + this.$().prop('id'), + setup: Ember.run.bind(this, this.setupEditor) + }); + }), + + setupEditor: function(editor) { + this.set('editor', editor); + + editor.on('change', function() { + console.log('content changed!'); + }); + } + }); + ``` + + In this example, we use Ember.run.bind to bind the setupEditor method to the + context of the App.RichTextEditorComponent and to have the invocation of that + method be safely handled and executed by the Ember run loop. + + @method bind + @namespace Ember + @param {Object} [target] target of method to call + @param {Function|String} method Method to invoke. + May be a function or a string. If you pass a string + then it will be looked up on the passed target. + @param {Object} [args*] Any additional arguments you wish to pass to the method. + @return {Function} returns a new function that will always have a particular context + @since 1.4.0 + @public + */ + run.bind = function () { + for (var _len = arguments.length, curried = Array(_len), _key = 0; _key < _len; _key++) { + curried[_key] = arguments[_key]; + } + + return function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return run.join.apply(run, curried.concat(args)); + }; + }; + + run.backburner = backburner; + run.currentRunLoop = null; + run.queues = backburner.queueNames; + + /** + Begins a new RunLoop. Any deferred actions invoked after the begin will + be buffered until you invoke a matching call to `run.end()`. This is + a lower-level way to use a RunLoop instead of using `run()`. + + ```javascript + run.begin(); + // code to be executed within a RunLoop + run.end(); + ``` + + @method begin + @return {void} + @public + */ + run.begin = function () { + backburner.begin(); + }; + + /** + Ends a RunLoop. This must be called sometime after you call + `run.begin()` to flush any deferred actions. This is a lower-level way + to use a RunLoop instead of using `run()`. + + ```javascript + run.begin(); + // code to be executed within a RunLoop + run.end(); + ``` + + @method end + @return {void} + @public + */ + run.end = function () { + backburner.end(); + }; + + /** + Array of named queues. This array determines the order in which queues + are flushed at the end of the RunLoop. You can define your own queues by + simply adding the queue name to this array. Normally you should not need + to inspect or modify this property. + + @property queues + @type Array + @default ['sync', 'actions', 'destroy'] + @private + */ + + /** + Adds the passed target/method and any optional arguments to the named + queue to be executed at the end of the RunLoop. If you have not already + started a RunLoop when calling this method one will be started for you + automatically. + + At the end of a RunLoop, any methods scheduled in this way will be invoked. + Methods will be invoked in an order matching the named queues defined in + the `run.queues` property. + + ```javascript + run.schedule('sync', this, function() { + // this will be executed in the first RunLoop queue, when bindings are synced + console.log('scheduled on sync queue'); + }); + + run.schedule('actions', this, function() { + // this will be executed in the 'actions' queue, after bindings have synced. + console.log('scheduled on actions queue'); + }); + + // Note the functions will be run in order based on the run queues order. + // Output would be: + // scheduled on sync queue + // scheduled on actions queue + ``` + + @method schedule + @param {String} queue The name of the queue to schedule against. + Default queues are 'sync' and 'actions' + @param {Object} [target] target object to use as the context when invoking a method. + @param {String|Function} method The method to invoke. If you pass a string it + will be resolved on the target object at the time the scheduled item is + invoked allowing you to change the target function. + @param {Object} [arguments*] Optional arguments to be passed to the queued method. + @return {void} + @public + */ + run.schedule = function () /* queue, target, method */{ + checkAutoRun(); + backburner.schedule.apply(backburner, arguments); + }; + + // Used by global test teardown + run.hasScheduledTimers = function () { + return backburner.hasTimers(); + }; + + // Used by global test teardown + run.cancelTimers = function () { + backburner.cancelTimers(); + }; + + /** + Immediately flushes any events scheduled in the 'sync' queue. Bindings + use this queue so this method is a useful way to immediately force all + bindings in the application to sync. + + You should call this method anytime you need any changed state to propagate + throughout the app immediately without repainting the UI (which happens + in the later 'render' queue added by the `ember-views` package). + + ```javascript + run.sync(); + ``` + + @method sync + @return {void} + @private + */ + run.sync = function () { + if (backburner.currentInstance) { + backburner.currentInstance.queues.sync.flush(); + } + }; + + /** + Invokes the passed target/method and optional arguments after a specified + period of time. The last parameter of this method must always be a number + of milliseconds. + + You should use this method whenever you need to run some action after a + period of time instead of using `setTimeout()`. This method will ensure that + items that expire during the same script execution cycle all execute + together, which is often more efficient than using a real setTimeout. + + ```javascript + run.later(myContext, function() { + // code here will execute within a RunLoop in about 500ms with this == myContext + }, 500); + ``` + + @method later + @param {Object} [target] target of method to invoke + @param {Function|String} method The method to invoke. + If you pass a string it will be resolved on the + target at the time the method is invoked. + @param {Object} [args*] Optional arguments to pass to the timeout. + @param {Number} wait Number of milliseconds to wait. + @return {*} Timer information for use in cancelling, see `run.cancel`. + @public + */ + run.later = function () /*target, method*/{ + return backburner.later.apply(backburner, arguments); + }; + + /** + Schedule a function to run one time during the current RunLoop. This is equivalent + to calling `scheduleOnce` with the "actions" queue. + + @method once + @param {Object} [target] The target of the method to invoke. + @param {Function|String} method The method to invoke. + If you pass a string it will be resolved on the + target at the time the method is invoked. + @param {Object} [args*] Optional arguments to pass to the timeout. + @return {Object} Timer information for use in cancelling, see `run.cancel`. + @public + */ + run.once = function () { + checkAutoRun(); + + for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + args.unshift('actions'); + return backburner.scheduleOnce.apply(backburner, args); + }; + + /** + Schedules a function to run one time in a given queue of the current RunLoop. + Calling this method with the same queue/target/method combination will have + no effect (past the initial call). + + Note that although you can pass optional arguments these will not be + considered when looking for duplicates. New arguments will replace previous + calls. + + ```javascript + function sayHi() { + console.log('hi'); + } + + run(function() { + run.scheduleOnce('afterRender', myContext, sayHi); + run.scheduleOnce('afterRender', myContext, sayHi); + // sayHi will only be executed once, in the afterRender queue of the RunLoop + }); + ``` + + Also note that passing an anonymous function to `run.scheduleOnce` will + not prevent additional calls with an identical anonymous function from + scheduling the items multiple times, e.g.: + + ```javascript + function scheduleIt() { + run.scheduleOnce('actions', myContext, function() { + console.log('Closure'); + }); + } + + scheduleIt(); + scheduleIt(); + + // "Closure" will print twice, even though we're using `run.scheduleOnce`, + // because the function we pass to it is anonymous and won't match the + // previously scheduled operation. + ``` + + Available queues, and their order, can be found at `run.queues` + + @method scheduleOnce + @param {String} [queue] The name of the queue to schedule against. Default queues are 'sync' and 'actions'. + @param {Object} [target] The target of the method to invoke. + @param {Function|String} method The method to invoke. + If you pass a string it will be resolved on the + target at the time the method is invoked. + @param {Object} [args*] Optional arguments to pass to the timeout. + @return {Object} Timer information for use in cancelling, see `run.cancel`. + @public + */ + run.scheduleOnce = function () /*queue, target, method*/{ + checkAutoRun(); + return backburner.scheduleOnce.apply(backburner, arguments); + }; + + /** + Schedules an item to run from within a separate run loop, after + control has been returned to the system. This is equivalent to calling + `run.later` with a wait time of 1ms. + + ```javascript + run.next(myContext, function() { + // code to be executed in the next run loop, + // which will be scheduled after the current one + }); + ``` + + Multiple operations scheduled with `run.next` will coalesce + into the same later run loop, along with any other operations + scheduled by `run.later` that expire right around the same + time that `run.next` operations will fire. + + Note that there are often alternatives to using `run.next`. + For instance, if you'd like to schedule an operation to happen + after all DOM element operations have completed within the current + run loop, you can make use of the `afterRender` run loop queue (added + by the `ember-views` package, along with the preceding `render` queue + where all the DOM element operations happen). Example: + + ```javascript + App.MyCollectionView = Ember.CollectionView.extend({ + didInsertElement: function() { + run.scheduleOnce('afterRender', this, 'processChildElements'); + }, + processChildElements: function() { + // ... do something with collectionView's child view + // elements after they've finished rendering, which + // can't be done within the CollectionView's + // `didInsertElement` hook because that gets run + // before the child elements have been added to the DOM. + } + }); + ``` + + One benefit of the above approach compared to using `run.next` is + that you will be able to perform DOM/CSS operations before unprocessed + elements are rendered to the screen, which may prevent flickering or + other artifacts caused by delaying processing until after rendering. + + The other major benefit to the above approach is that `run.next` + introduces an element of non-determinism, which can make things much + harder to test, due to its reliance on `setTimeout`; it's much harder + to guarantee the order of scheduled operations when they are scheduled + outside of the current run loop, i.e. with `run.next`. + + @method next + @param {Object} [target] target of method to invoke + @param {Function|String} method The method to invoke. + If you pass a string it will be resolved on the + target at the time the method is invoked. + @param {Object} [args*] Optional arguments to pass to the timeout. + @return {Object} Timer information for use in cancelling, see `run.cancel`. + @public + */ + run.next = function () { + for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + args.push(1); + return backburner.later.apply(backburner, args); + }; + + /** + Cancels a scheduled item. Must be a value returned by `run.later()`, + `run.once()`, `run.scheduleOnce()`, `run.next()`, `run.debounce()`, or + `run.throttle()`. + + ```javascript + var runNext = run.next(myContext, function() { + // will not be executed + }); + + run.cancel(runNext); + + var runLater = run.later(myContext, function() { + // will not be executed + }, 500); + + run.cancel(runLater); + + var runScheduleOnce = run.scheduleOnce('afterRender', myContext, function() { + // will not be executed + }); + + run.cancel(runScheduleOnce); + + var runOnce = run.once(myContext, function() { + // will not be executed + }); + + run.cancel(runOnce); + + var throttle = run.throttle(myContext, function() { + // will not be executed + }, 1, false); + + run.cancel(throttle); + + var debounce = run.debounce(myContext, function() { + // will not be executed + }, 1); + + run.cancel(debounce); + + var debounceImmediate = run.debounce(myContext, function() { + // will be executed since we passed in true (immediate) + }, 100, true); + + // the 100ms delay until this method can be called again will be cancelled + run.cancel(debounceImmediate); + ``` + + @method cancel + @param {Object} timer Timer object to cancel + @return {Boolean} true if cancelled or false/undefined if it wasn't found + @public + */ + run.cancel = function (timer) { + return backburner.cancel(timer); + }; + + /** + Delay calling the target method until the debounce period has elapsed + with no additional debounce calls. If `debounce` is called again before + the specified time has elapsed, the timer is reset and the entire period + must pass again before the target method is called. + + This method should be used when an event may be called multiple times + but the action should only be called once when the event is done firing. + A common example is for scroll events where you only want updates to + happen once scrolling has ceased. + + ```javascript + function whoRan() { + console.log(this.name + ' ran.'); + } + + var myContext = { name: 'debounce' }; + + run.debounce(myContext, whoRan, 150); + + // less than 150ms passes + run.debounce(myContext, whoRan, 150); + + // 150ms passes + // whoRan is invoked with context myContext + // console logs 'debounce ran.' one time. + ``` + + Immediate allows you to run the function immediately, but debounce + other calls for this function until the wait time has elapsed. If + `debounce` is called again before the specified time has elapsed, + the timer is reset and the entire period must pass again before + the method can be called again. + + ```javascript + function whoRan() { + console.log(this.name + ' ran.'); + } + + var myContext = { name: 'debounce' }; + + run.debounce(myContext, whoRan, 150, true); + + // console logs 'debounce ran.' one time immediately. + // 100ms passes + run.debounce(myContext, whoRan, 150, true); + + // 150ms passes and nothing else is logged to the console and + // the debouncee is no longer being watched + run.debounce(myContext, whoRan, 150, true); + + // console logs 'debounce ran.' one time immediately. + // 150ms passes and nothing else is logged to the console and + // the debouncee is no longer being watched + + ``` + + @method debounce + @param {Object} [target] target of method to invoke + @param {Function|String} method The method to invoke. + May be a function or a string. If you pass a string + then it will be looked up on the passed target. + @param {Object} [args*] Optional arguments to pass to the timeout. + @param {Number} wait Number of milliseconds to wait. + @param {Boolean} immediate Trigger the function on the leading instead + of the trailing edge of the wait interval. Defaults to false. + @return {Array} Timer information for use in cancelling, see `run.cancel`. + @public + */ + run.debounce = function () { + return backburner.debounce.apply(backburner, arguments); + }; + + /** + Ensure that the target method is never called more frequently than + the specified spacing period. The target method is called immediately. + + ```javascript + function whoRan() { + console.log(this.name + ' ran.'); + } + + var myContext = { name: 'throttle' }; + + run.throttle(myContext, whoRan, 150); + // whoRan is invoked with context myContext + // console logs 'throttle ran.' + + // 50ms passes + run.throttle(myContext, whoRan, 150); + + // 50ms passes + run.throttle(myContext, whoRan, 150); + + // 150ms passes + run.throttle(myContext, whoRan, 150); + // whoRan is invoked with context myContext + // console logs 'throttle ran.' + ``` + + @method throttle + @param {Object} [target] target of method to invoke + @param {Function|String} method The method to invoke. + May be a function or a string. If you pass a string + then it will be looked up on the passed target. + @param {Object} [args*] Optional arguments to pass to the timeout. + @param {Number} spacing Number of milliseconds to space out requests. + @param {Boolean} immediate Trigger the function on the leading instead + of the trailing edge of the wait interval. Defaults to true. + @return {Array} Timer information for use in cancelling, see `run.cancel`. + @public + */ + run.throttle = function () { + return backburner.throttle.apply(backburner, arguments); + }; + + // Make sure it's not an autorun during testing + function checkAutoRun() { + if (!run.currentRunLoop) { + _emberMetalDebug.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 a run', !_emberMetalCore.default.testing); + } + } + + /** + Add a new named queue after the specified queue. + + The queue to add will only be added once. + + @method _addQueue + @param {String} name the name of the queue to add. + @param {String} after the name of the queue to add after. + @private + */ + run._addQueue = function (name, after) { + if (run.queues.indexOf(name) === -1) { + run.queues.splice(run.queues.indexOf(after) + 1, 0, name); + } + }; +}); +enifed('ember-metal/set_properties', ['exports', 'ember-metal/property_events', 'ember-metal/property_set'], function (exports, _emberMetalProperty_events, _emberMetalProperty_set) { + 'use strict'; + + exports.default = setProperties; + + /** + Set a list of properties on an object. These properties are set inside + a single `beginPropertyChanges` and `endPropertyChanges` batch, so + observers will be buffered. + + ```javascript + var anObject = Ember.Object.create(); + + anObject.setProperties({ + firstName: 'Stanley', + lastName: 'Stuart', + age: 21 + }); + ``` + + @method setProperties + @param obj + @param {Object} properties + @return properties + @public + */ + + function setProperties(obj, properties) { + if (!properties || typeof properties !== 'object') { + return properties; + } + _emberMetalProperty_events.changeProperties(function () { + var props = Object.keys(properties); + var propertyName; + + for (var i = 0, l = props.length; i < l; i++) { + propertyName = props[i]; + + _emberMetalProperty_set.set(obj, propertyName, properties[propertyName]); + } + }); + return properties; + } +}); +enifed('ember-metal/streams/dependency', ['exports', 'ember-metal/debug', 'ember-metal/assign', 'ember-metal/streams/utils'], function (exports, _emberMetalDebug, _emberMetalAssign, _emberMetalStreamsUtils) { + 'use strict'; + + /** + @module ember-metal + */ + + /** + @private + @class Dependency + @namespace Ember.streams + @constructor + */ + function Dependency(depender, dependee) { + _emberMetalDebug.assert('Dependency error: Depender must be a stream', _emberMetalStreamsUtils.isStream(depender)); + + this.next = null; + this.prev = null; + this.depender = depender; + this.dependee = dependee; + this.unsubscription = null; + } + + _emberMetalAssign.default(Dependency.prototype, { + subscribe: function () { + _emberMetalDebug.assert('Dependency error: Dependency tried to subscribe while already subscribed', !this.unsubscription); + + this.unsubscription = _emberMetalStreamsUtils.subscribe(this.dependee, this.depender.notify, this.depender); + }, + + unsubscribe: function () { + if (this.unsubscription) { + this.unsubscription(); + this.unsubscription = null; + } + }, + + replace: function (dependee) { + if (this.dependee !== dependee) { + this.dependee = dependee; + + if (this.unsubscription) { + this.unsubscribe(); + this.subscribe(); + } + return true; + } + return false; + }, + + getValue: function () { + return _emberMetalStreamsUtils.read(this.dependee); + }, + + setValue: function (value) { + return _emberMetalStreamsUtils.setValue(this.dependee, value); + } + + // destroy() { + // var next = this.next; + // var prev = this.prev; + + // if (prev) { + // prev.next = next; + // } else { + // this.depender.dependencyHead = next; + // } + + // if (next) { + // next.prev = prev; + // } else { + // this.depender.dependencyTail = prev; + // } + + // this.unsubscribe(); + // } + }); + + exports.default = Dependency; +}); +enifed('ember-metal/streams/key-stream', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/observer', 'ember-metal/streams/stream', 'ember-metal/streams/utils'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalObserver, _emberMetalStreamsStream, _emberMetalStreamsUtils) { + 'use strict'; + + function labelFor(source, key) { + return source.label ? source.label + '.' + key : key; + } + + exports.default = _emberMetalStreamsStream.default.extend({ + init: function (source, key) { + _emberMetalDebug.assert('KeyStream error: source must be a stream', _emberMetalStreamsUtils.isStream(source)); // TODO: This isn't necessary. + _emberMetalDebug.assert('KeyStream error: key must be a non-empty string', typeof key === 'string' && key.length > 0); + _emberMetalDebug.assert('KeyStream error: key must not have a \'.\'', key.indexOf('.') === -1); + + var label = labelFor(source, key); + + this.path = label; + this.observedObject = null; + this.key = key; + this.sourceDep = this.addMutableDependency(source); + this.label = label; + }, + + compute: function () { + var object = this.sourceDep.getValue(); + var type = typeof object; + + if (!object || type === 'boolean') { + return; + } + + if (type === 'object') { + return _emberMetalProperty_get.get(object, this.key); + } + + return object[this.key]; + }, + + setValue: function (value) { + var object = this.sourceDep.getValue(); + if (object) { + _emberMetalProperty_set.set(object, this.key, value); + } + }, + + setSource: function (source) { + this.sourceDep.replace(source); + this.notify(); + }, + + _super$revalidate: _emberMetalStreamsStream.default.prototype.revalidate, + + revalidate: function (value) { + this._super$revalidate(value); + + var object = this.sourceDep.getValue(); + if (object !== this.observedObject) { + this._clearObservedObject(); + + if (object && typeof object === 'object') { + _emberMetalObserver.addObserver(object, this.key, this, this.notify); + this.observedObject = object; + } + } + }, + + _super$deactivate: _emberMetalStreamsStream.default.prototype.deactivate, + + _clearObservedObject: function () { + if (this.observedObject) { + _emberMetalObserver.removeObserver(this.observedObject, this.key, this, this.notify); + this.observedObject = null; + } + }, + + deactivate: function () { + this._super$deactivate(); + this._clearObservedObject(); + } + }); +}); +enifed('ember-metal/streams/proxy-stream', ['exports', 'ember-runtime/system/object', 'ember-metal/streams/stream'], function (exports, _emberRuntimeSystemObject, _emberMetalStreamsStream) { + 'use strict'; + + var ProxyStream = _emberMetalStreamsStream.default.extend({ + init: function (source, label) { + this.label = label; + this.sourceDep = this.addMutableDependency(source); + }, + + compute: function () { + return this.sourceDep.getValue(); + }, + + setValue: function (value) { + this.sourceDep.setValue(value); + }, + + setSource: function (source) { + var didChange = this.sourceDep.replace(source); + if (didChange || !(source instanceof _emberRuntimeSystemObject.default)) { + // If the source changed, we must notify. If the source is not + // an Ember.Object, we must also notify, because it could have + // interior mutability that is otherwise not being observed. + this.notify(); + } + } + }); + + ProxyStream.extend = _emberMetalStreamsStream.default.extend; + + exports.default = ProxyStream; +}); +enifed('ember-metal/streams/stream', ['exports', 'ember-metal/assign', 'ember-metal/debug', 'ember-metal/path_cache', 'ember-metal/observer', 'ember-metal/streams/utils', 'ember-metal/empty_object', 'ember-metal/streams/subscriber', 'ember-metal/streams/dependency', 'ember-metal/utils', 'require'], function (exports, _emberMetalAssign, _emberMetalDebug, _emberMetalPath_cache, _emberMetalObserver, _emberMetalStreamsUtils, _emberMetalEmpty_object, _emberMetalStreamsSubscriber, _emberMetalStreamsDependency, _emberMetalUtils, _require) { + 'use strict'; + + exports.wrap = wrap; + + /** + @module ember-metal + */ + + /** + @private + @class Stream + @namespace Ember.stream + @constructor + */ + function BasicStream(label) { + this._init(label); + } + + var KeyStream; + var ProxyMixin; + + BasicStream.prototype = { + isStream: true, + + _init: function (label) { + this.label = makeLabel(label); + this.isActive = false; + this.isDirty = true; + this.isDestroyed = false; + this.cache = undefined; + this.children = undefined; + this.subscriberHead = null; + this.subscriberTail = null; + this.dependencyHead = null; + this.dependencyTail = null; + this.observedProxy = null; + this.__ember_meta__ = null; + this[_emberMetalUtils.GUID_KEY] = null; + }, + + _makeChildStream: function (key) { + KeyStream = KeyStream || _require.default('ember-metal/streams/key-stream').default; + return new KeyStream(this, key); + }, + + removeChild: function (key) { + delete this.children[key]; + }, + + getKey: function (key) { + if (this.children === undefined) { + this.children = new _emberMetalEmpty_object.default(); + } + + var keyStream = this.children[key]; + + if (keyStream === undefined) { + keyStream = this._makeChildStream(key); + this.children[key] = keyStream; + } + + return keyStream; + }, + + get: function (path) { + var firstKey = _emberMetalPath_cache.getFirstKey(path); + var tailPath = _emberMetalPath_cache.getTailPath(path); + + if (this.children === undefined) { + this.children = new _emberMetalEmpty_object.default(); + } + + var keyStream = this.children[firstKey]; + + if (keyStream === undefined) { + keyStream = this._makeChildStream(firstKey, path); + this.children[firstKey] = keyStream; + } + + if (tailPath === undefined) { + return keyStream; + } else { + return keyStream.get(tailPath); + } + }, + + value: function () { + // TODO: Ensure value is never called on a destroyed stream + // so that we can uncomment this assertion. + // + // assert("Stream error: value was called after the stream was destroyed", !this.isDestroyed); + + // TODO: Remove this block. This will require ensuring we are + // not treating streams as "volatile" anywhere. + if (!this.isActive) { + this.isDirty = true; + } + + var willRevalidate = false; + + if (!this.isActive && this.subscriberHead) { + this.activate(); + willRevalidate = true; + } + + if (this.isDirty) { + if (this.isActive) { + willRevalidate = true; + } + + this.cache = this.compute(); + this.isDirty = false; + } + + if (willRevalidate) { + this.revalidate(this.cache); + } + + return this.cache; + }, + + addMutableDependency: function (object) { + var dependency = new _emberMetalStreamsDependency.default(this, object); + + if (this.isActive) { + dependency.subscribe(); + } + + if (this.dependencyHead === null) { + this.dependencyHead = this.dependencyTail = dependency; + } else { + var tail = this.dependencyTail; + tail.next = dependency; + dependency.prev = tail; + this.dependencyTail = dependency; + } + + return dependency; + }, + + addDependency: function (object) { + if (_emberMetalStreamsUtils.isStream(object)) { + this.addMutableDependency(object); + } + }, + + subscribeDependencies: function () { + var dependency = this.dependencyHead; + while (dependency) { + var next = dependency.next; + dependency.subscribe(); + dependency = next; + } + }, + + unsubscribeDependencies: function () { + var dependency = this.dependencyHead; + while (dependency) { + var next = dependency.next; + dependency.unsubscribe(); + dependency = next; + } + }, + + maybeDeactivate: function () { + if (!this.subscriberHead && this.isActive) { + this.isActive = false; + this.unsubscribeDependencies(); + this.deactivate(); + } + }, + + activate: function () { + this.isActive = true; + this.subscribeDependencies(); + }, + + revalidate: function (value) { + if (value !== this.observedProxy) { + this._clearObservedProxy(); + + ProxyMixin = ProxyMixin || _require.default('ember-runtime/mixins/-proxy').default; + + if (ProxyMixin.detect(value)) { + _emberMetalObserver.addObserver(value, 'content', this, this.notify); + this.observedProxy = value; + } + } + }, + + _clearObservedProxy: function () { + if (this.observedProxy) { + _emberMetalObserver.removeObserver(this.observedProxy, 'content', this, this.notify); + this.observedProxy = null; + } + }, + + deactivate: function () { + this._clearObservedProxy(); + }, + + compute: function () { + throw new Error('Stream error: compute not implemented'); + }, + + setValue: function () { + throw new Error('Stream error: setValue not implemented'); + }, + + notify: function () { + this.notifyExcept(); + }, + + notifyExcept: function (callbackToSkip, contextToSkip) { + if (!this.isDirty) { + this.isDirty = true; + this.notifySubscribers(callbackToSkip, contextToSkip); + } + }, + + subscribe: function (callback, context) { + _emberMetalDebug.assert('You tried to subscribe to a stream but the callback provided was not a function.', typeof callback === 'function'); + + var subscriber = new _emberMetalStreamsSubscriber.default(callback, context, this); + if (this.subscriberHead === null) { + this.subscriberHead = this.subscriberTail = subscriber; + } else { + var tail = this.subscriberTail; + tail.next = subscriber; + subscriber.prev = tail; + this.subscriberTail = subscriber; + } + + var stream = this; + return function (prune) { + subscriber.removeFrom(stream); + if (prune) { + stream.prune(); + } + }; + }, + + prune: function () { + if (this.subscriberHead === null) { + this.destroy(true); + } + }, + + unsubscribe: function (callback, context) { + var subscriber = this.subscriberHead; + + while (subscriber) { + var next = subscriber.next; + if (subscriber.callback === callback && subscriber.context === context) { + subscriber.removeFrom(this); + } + subscriber = next; + } + }, + + notifySubscribers: function (callbackToSkip, contextToSkip) { + var subscriber = this.subscriberHead; + + while (subscriber) { + var next = subscriber.next; + + var callback = subscriber.callback; + var context = subscriber.context; + + subscriber = next; + + if (callback === callbackToSkip && context === contextToSkip) { + continue; + } + + if (context === undefined) { + callback(this); + } else { + callback.call(context, this); + } + } + }, + + destroy: function (prune) { + if (!this.isDestroyed) { + this.isDestroyed = true; + + this.subscriberHead = this.subscriberTail = null; + this.maybeDeactivate(); + + var dependencies = this.dependencies; + + if (dependencies) { + for (var i = 0, l = dependencies.length; i < l; i++) { + dependencies[i](prune); + } + } + + return true; + } + } + }; + + BasicStream.extend = function (object) { + var Child = function () { + this._init(); + this.init.apply(this, arguments); + + _emberMetalDebug.debugSeal(this); + }; + + Child.prototype = Object.create(this.prototype); + + _emberMetalAssign.default(Child.prototype, object); + Child.extend = BasicStream.extend; + return Child; + }; + + var Stream = BasicStream.extend({ + init: function (fn, label) { + this._compute = fn; + this.label = label; + }, + + compute: function () { + return this._compute(); + } + }); + + function wrap(value, Kind, param) { + if (_emberMetalStreamsUtils.isStream(value)) { + return value; + } else { + return new Kind(value, param); + } + } + + function makeLabel(label) { + if (label === undefined) { + return '(no label)'; + } else { + return label; + } + } + + exports.default = BasicStream; + exports.Stream = Stream; +}); +enifed('ember-metal/streams/subscriber', ['exports', 'ember-metal/assign'], function (exports, _emberMetalAssign) { + 'use strict'; + + /** + @module ember-metal + */ + + /** + @private + @class Subscriber + @namespace Ember.streams + @constructor + */ + function Subscriber(callback, context) { + this.next = null; + this.prev = null; + this.callback = callback; + this.context = context; + } + + _emberMetalAssign.default(Subscriber.prototype, { + removeFrom: function (stream) { + var next = this.next; + var prev = this.prev; + + if (prev) { + prev.next = next; + } else { + stream.subscriberHead = next; + } + + if (next) { + next.prev = prev; + } else { + stream.subscriberTail = prev; + } + + stream.maybeDeactivate(); + } + }); + + exports.default = Subscriber; +}); +enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-metal/streams/stream'], function (exports, _emberMetalDebug, _emberMetalStreamsStream) { + 'use strict'; + + exports.isStream = isStream; + exports.subscribe = subscribe; + exports.unsubscribe = unsubscribe; + exports.read = read; + exports.readArray = readArray; + exports.readHash = readHash; + exports.scanArray = scanArray; + exports.scanHash = scanHash; + exports.concat = concat; + exports.labelsFor = labelsFor; + exports.labelsForObject = labelsForObject; + exports.labelFor = labelFor; + exports.or = or; + exports.addDependency = addDependency; + exports.zip = zip; + exports.zipHash = zipHash; + exports.chain = chain; + exports.setValue = setValue; + + /* + Check whether an object is a stream or not + + @private + @for Ember.stream + @function isStream + @param {Object|Stream} object object to check whether it is a stream + @return {Boolean} `true` if the object is a stream, `false` otherwise + */ + + function isStream(object) { + return object && object.isStream; + } + + /* + A method of subscribing to a stream which is safe for use with a non-stream + object. If a non-stream object is passed, the function does nothing. + + @public + @for Ember.stream + @function subscribe + @param {Object|Stream} object object or stream to potentially subscribe to + @param {Function} callback function to run when stream value changes + @param {Object} [context] the callback will be executed with this context if it + is provided + */ + + function subscribe(object, callback, context) { + if (object && object.isStream) { + return object.subscribe(callback, context); + } + } + + /* + A method of unsubscribing from a stream which is safe for use with a non-stream + object. If a non-stream object is passed, the function does nothing. + + @private + @for Ember.stream + @function unsubscribe + @param {Object|Stream} object object or stream to potentially unsubscribe from + @param {Function} callback function originally passed to `subscribe()` + @param {Object} [context] object originally passed to `subscribe()` + */ + + function unsubscribe(object, callback, context) { + if (object && object.isStream) { + object.unsubscribe(callback, context); + } + } + + /* + Retrieve the value of a stream, or in the case a non-stream object is passed, + return the object itself. + + @private + @for Ember.stream + @function read + @param {Object|Stream} object object to return the value of + @return the stream's current value, or the non-stream object itself + */ + + function read(object) { + if (object && object.isStream) { + return object.value(); + } else { + return object; + } + } + + /* + Map an array, replacing any streams with their values. + + @private + @for Ember.stream + @function readArray + @param {Array} array The array to read values from + @return {Array} a new array of the same length with the values of non-stream + objects mapped from their original positions untouched, and + the values of stream objects retaining their original position + and replaced with the stream's current value. + */ + + function readArray(array) { + var length = array.length; + var ret = new Array(length); + for (var i = 0; i < length; i++) { + ret[i] = read(array[i]); + } + return ret; + } + + /* + Map a hash, replacing any stream property values with the current value of that + stream. + + @private + @for Ember.stream + @function readHash + @param {Object} object The hash to read keys and values from + @return {Object} a new object with the same keys as the passed object. The + property values in the new object are the original values in + the case of non-stream objects, and the streams' current + values in the case of stream objects. + */ + + function readHash(object) { + var ret = {}; + for (var key in object) { + ret[key] = read(object[key]); + } + return ret; + } + + /* + Check whether an array contains any stream values + + @private + @for Ember.stream + @function scanArray + @param {Array} array array given to a handlebars helper + @return {Boolean} `true` if the array contains a stream/bound value, `false` + otherwise + */ + + function scanArray(array) { + var length = array.length; + var containsStream = false; + + for (var i = 0; i < length; i++) { + if (isStream(array[i])) { + containsStream = true; + break; + } + } + + return containsStream; + } + + /* + Check whether a hash has any stream property values + + @private + @for Ember.stream + @function scanHash + @param {Object} hash "hash" argument given to a handlebars helper + @return {Boolean} `true` if the object contains a stream/bound value, `false` + otherwise + */ + + function scanHash(hash) { + var containsStream = false; + + for (var prop in hash) { + if (isStream(hash[prop])) { + containsStream = true; + break; + } + } + + return containsStream; + } + + var ConcatStream = _emberMetalStreamsStream.default.extend({ + init: function (array, separator) { + this.array = array; + this.separator = separator; + + // used by angle bracket components to detect an attribute was provided + // as a string literal + this.isConcat = true; + }, + + label: function () { + var labels = labelsFor(this.array); + return 'concat([' + labels.join(', ') + ']; separator=' + inspect(this.separator) + ')'; + }, + + compute: function () { + return concat(readArray(this.array), this.separator); + } + }); + + /* + Join an array, with any streams replaced by their current values + + @private + @for Ember.stream + @function concat + @param {Array} array An array containing zero or more stream objects and + zero or more non-stream objects + @param {String} separator string to be used to join array elements + @return {String} String with array elements concatenated and joined by the + provided separator, and any stream array members having been + replaced by the current value of the stream + */ + + function concat(array, separator) { + // TODO: Create subclass ConcatStream < Stream. Defer + // subscribing to streams until the value() is called. + var hasStream = scanArray(array); + if (hasStream) { + var stream = new ConcatStream(array, separator); + + for (var i = 0, l = array.length; i < l; i++) { + addDependency(stream, array[i]); + } + + return stream; + } else { + return array.join(separator); + } + } + + function labelsFor(streams) { + var labels = []; + + for (var i = 0, l = streams.length; i < l; i++) { + var stream = streams[i]; + labels.push(labelFor(stream)); + } + + return labels; + } + + function labelsForObject(streams) { + var labels = []; + + for (var prop in streams) { + labels.push(prop + ': ' + inspect(streams[prop])); + } + + return labels.length ? '{ ' + labels.join(', ') + ' }' : '{}'; + } + + function labelFor(maybeStream) { + if (isStream(maybeStream)) { + var stream = maybeStream; + return typeof stream.label === 'function' ? stream.label() : stream.label; + } else { + return inspect(maybeStream); + } + } + + function inspect(value) { + switch (typeof value) { + case 'string': + return '"' + value + '"'; + case 'object': + return '{ ... }'; + case 'function': + return 'function() { ... }'; + default: + return String(value); + } + } + + function or(first, second) { + var stream = new _emberMetalStreamsStream.Stream(function () { + return first.value() || second.value(); + }, function () { + return labelFor(first) + ' || ' + labelFor(second); + }); + + stream.addDependency(first); + stream.addDependency(second); + + return stream; + } + + function addDependency(stream, dependency) { + _emberMetalDebug.assert('Cannot add a stream as a dependency to a non-stream', isStream(stream) || !isStream(dependency)); + if (isStream(stream)) { + stream.addDependency(dependency); + } + } + + function zip(streams, callback, label) { + _emberMetalDebug.assert('Must call zip with a label', !!label); + + var stream = new _emberMetalStreamsStream.Stream(function () { + var array = readArray(streams); + return callback ? callback(array) : array; + }, function () { + return label + '(' + labelsFor(streams) + ')'; + }); + + for (var i = 0, l = streams.length; i < l; i++) { + stream.addDependency(streams[i]); + } + + return stream; + } + + function zipHash(object, callback, label) { + _emberMetalDebug.assert('Must call zipHash with a label', !!label); + + var stream = new _emberMetalStreamsStream.Stream(function () { + var hash = readHash(object); + return callback ? callback(hash) : hash; + }, function () { + return label + '(' + labelsForObject(object) + ')'; + }); + + for (var prop in object) { + stream.addDependency(object[prop]); + } + + return stream; + } + + /** + Generate a new stream by providing a source stream and a function that can + be used to transform the stream's value. In the case of a non-stream object, + returns the result of the function. + + The value to transform would typically be available to the function you pass + to `chain()` via scope. For example: + + ```javascript + var source = ...; // stream returning a number + // or a numeric (non-stream) object + var result = chain(source, function() { + var currentValue = read(source); + return currentValue + 1; + }); + ``` + + In the example, result is a stream if source is a stream, or a number of + source was numeric. + + @private + @for Ember.stream + @function chain + @param {Object|Stream} value A stream or non-stream object + @param {Function} fn function to be run when the stream value changes, or to + be run once in the case of a non-stream object + @return {Object|Stream} In the case of a stream `value` parameter, a new + stream that will be updated with the return value of + the provided function `fn`. In the case of a + non-stream object, the return value of the provided + function `fn`. + */ + + function chain(value, fn, label) { + _emberMetalDebug.assert('Must call chain with a label', !!label); + if (isStream(value)) { + var stream = new _emberMetalStreamsStream.Stream(fn, function () { + return label + '(' + labelFor(value) + ')'; + }); + stream.addDependency(value); + return stream; + } else { + return fn(); + } + } + + function setValue(object, value) { + if (object && object.isStream) { + object.setValue(value); + } + } +}); +enifed('ember-metal/symbol', ['exports', 'ember-metal/utils'], function (exports, _emberMetalUtils) { + 'use strict'; + + exports.default = symbol; + + function symbol(debugName) { + // TODO: Investigate using platform symbols, but we do not + // want to require non-enumerability for this API, which + // would introduce a large cost. + + return _emberMetalUtils.intern(debugName + ' [id=' + _emberMetalUtils.GUID_KEY + Math.floor(Math.random() * new Date()) + ']'); + } +}); +enifed('ember-metal/utils', ['exports'], function (exports) { + 'no use strict'; + // Remove "use strict"; from transpiled module until + // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed + + /** + @module ember-metal + */ + + /** + Previously we used `Ember.$.uuid`, however `$.uuid` has been removed from + jQuery master. We'll just bootstrap our own uuid now. + + @private + @return {Number} the uuid + */ + exports.uuid = uuid; + exports.intern = intern; + exports.generateGuid = generateGuid; + exports.guidFor = guidFor; + exports.wrap = wrap; + exports.tryInvoke = tryInvoke; + exports.makeArray = makeArray; + exports.inspect = inspect; + exports.apply = apply; + exports.applyStr = applyStr; + exports.lookupDescriptor = lookupDescriptor; + var _uuid = 0; + + /** + Generates a universally unique identifier. This method + is used internally by Ember for assisting with + the generation of GUID's and other unique identifiers. + + @public + @return {Number} [description] + */ + + function uuid() { + return ++_uuid; + } + + /** + Prefix used for guids through out Ember. + @private + @property GUID_PREFIX + @for Ember + @type String + @final + */ + var GUID_PREFIX = 'ember'; + + // Used for guid generation... + var numberCache = []; + var stringCache = {}; + + /** + Strongly hint runtimes to intern the provided string. + + When do I need to use this function? + + For the most part, never. Pre-mature optimization is bad, and often the + runtime does exactly what you need it to, and more often the trade-off isn't + worth it. + + Why? + + Runtimes store strings in at least 2 different representations: + Ropes and Symbols (interned strings). The Rope provides a memory efficient + data-structure for strings created from concatenation or some other string + manipulation like splitting. + + Unfortunately checking equality of different ropes can be quite costly as + runtimes must resort to clever string comparison algorithms. These + algorithms typically cost in proportion to the length of the string. + Luckily, this is where the Symbols (interned strings) shine. As Symbols are + unique by their string content, equality checks can be done by pointer + comparison. + + How do I know if my string is a rope or symbol? + + Typically (warning general sweeping statement, but truthy in runtimes at + present) static strings created as part of the JS source are interned. + Strings often used for comparisons can be interned at runtime if some + criteria are met. One of these criteria can be the size of the entire rope. + For example, in chrome 38 a rope longer then 12 characters will not + intern, nor will segments of that rope. + + Some numbers: http://jsperf.com/eval-vs-keys/8 + + Known Trickâ„¢ + + @private + @return {String} interned version of the provided string + */ + + function intern(str) { + var obj = {}; + obj[str] = 1; + for (var key in obj) { + if (key === str) { + return key; + } + } + return str; + } + + /** + A unique key used to assign guids and other private metadata to objects. + If you inspect an object in your browser debugger you will often see these. + They can be safely ignored. + + On browsers that support it, these properties are added with enumeration + disabled so they won't show up when you iterate over your properties. + + @private + @property GUID_KEY + @for Ember + @type String + @final + */ + var GUID_KEY = intern('__ember' + +new Date()); + + var GUID_DESC = { + writable: true, + configurable: true, + enumerable: false, + value: null + }; + + exports.GUID_DESC = GUID_DESC; + var nullDescriptor = { + configurable: true, + writable: true, + enumerable: false, + value: null + }; + + var GUID_KEY_PROPERTY = { + name: GUID_KEY, + descriptor: nullDescriptor + }; + + exports.GUID_KEY_PROPERTY = GUID_KEY_PROPERTY; + /** + Generates a new guid, optionally saving the guid to the object that you + pass in. You will rarely need to use this method. Instead you should + call `Ember.guidFor(obj)`, which return an existing guid if available. + + @private + @method generateGuid + @for Ember + @param {Object} [obj] Object the guid will be used for. If passed in, the guid will + be saved on the object and reused whenever you pass the same object + again. + + If no object is passed, just generate a new guid. + @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to + separate the guid into separate namespaces. + @return {String} the guid + */ + + function generateGuid(obj, prefix) { + if (!prefix) { + prefix = GUID_PREFIX; + } + + var ret = prefix + uuid(); + if (obj) { + if (obj[GUID_KEY] === null) { + obj[GUID_KEY] = ret; + } else { + GUID_DESC.value = ret; + if (obj.__defineNonEnumerable) { + obj.__defineNonEnumerable(GUID_KEY_PROPERTY); + } else { + Object.defineProperty(obj, GUID_KEY, GUID_DESC); + } + } + } + return ret; + } + + /** + Returns a unique id for the object. If the object does not yet have a guid, + one will be assigned to it. You can call this on any object, + `Ember.Object`-based or not, but be aware that it will add a `_guid` + property. + + You can also use this method on DOM Element objects. + + @public + @method guidFor + @for Ember + @param {Object} obj any object, string, number, Element, or primitive + @return {String} the unique guid for this instance. + */ + + function guidFor(obj) { + if (obj && obj[GUID_KEY]) { + return obj[GUID_KEY]; + } + + // special cases where we don't want to add a key to object + if (obj === undefined) { + return '(undefined)'; + } + + if (obj === null) { + return '(null)'; + } + + var ret; + var type = typeof obj; + + // Don't allow prototype changes to String etc. to change the guidFor + switch (type) { + case 'number': + ret = numberCache[obj]; + + if (!ret) { + ret = numberCache[obj] = 'nu' + obj; + } + + return ret; + + case 'string': + ret = stringCache[obj]; + + if (!ret) { + ret = stringCache[obj] = 'st' + uuid(); + } + + return ret; + + case 'boolean': + return obj ? '(true)' : '(false)'; + + default: + if (obj === Object) { + return '(Object)'; + } + + if (obj === Array) { + return '(Array)'; + } + + ret = GUID_PREFIX + uuid(); + + if (obj[GUID_KEY] === null) { + obj[GUID_KEY] = ret; + } else { + GUID_DESC.value = ret; + + if (obj.__defineNonEnumerable) { + obj.__defineNonEnumerable(GUID_KEY_PROPERTY); + } else { + Object.defineProperty(obj, GUID_KEY, GUID_DESC); + } + } + return ret; + } + } + + var HAS_SUPER_PATTERN = /\.(_super|call\(this|apply\(this)/; + + var checkHasSuper = (function () { + var sourceAvailable = (function () { + return this; + }).toString().indexOf('return this') > -1; + + if (sourceAvailable) { + return function checkHasSuper(func) { + return HAS_SUPER_PATTERN.test(func.toString()); + }; + } + + return function checkHasSuper() { + return true; + }; + })(); + + exports.checkHasSuper = checkHasSuper; + function ROOT() {} + ROOT.__hasSuper = false; + + function hasSuper(func) { + if (func.__hasSuper === undefined) { + func.__hasSuper = checkHasSuper(func); + } + return func.__hasSuper; + } + + /** + Wraps the passed function so that `this._super` will point to the superFunc + when the function is invoked. This is the primitive we use to implement + calls to super. + + @private + @method wrap + @for Ember + @param {Function} func The function to call + @param {Function} superFunc The super function. + @return {Function} wrapped function. + */ + + function wrap(func, superFunc) { + if (!hasSuper(func)) { + return func; + } + // ensure an unwrapped super that calls _super is wrapped with a terminal _super + if (!superFunc.wrappedFunction && hasSuper(superFunc)) { + return _wrap(func, _wrap(superFunc, ROOT)); + } + return _wrap(func, superFunc); + } + + function _wrap(func, superFunc) { + function superWrapper() { + var orig = this._super; + var length = arguments.length; + var ret = undefined; + this._super = superFunc; + switch (length) { + case 0: + ret = func.call(this);break; + case 1: + ret = func.call(this, arguments[0]);break; + case 2: + ret = func.call(this, arguments[0], arguments[1]);break; + case 3: + ret = func.call(this, arguments[0], arguments[1], arguments[2]);break; + case 4: + ret = func.call(this, arguments[0], arguments[1], arguments[2], arguments[3]);break; + case 5: + ret = func.call(this, arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);break; + default: + // v8 bug potentially incorrectly deopts this function: https://code.google.com/p/v8/issues/detail?id=3709 + // we may want to keep this around till this ages out on mobile + var args = new Array(length); + for (var x = 0; x < length; x++) { + args[x] = arguments[x]; + } + ret = func.apply(this, args); + break; + } + this._super = orig; + return ret; + } + + superWrapper.wrappedFunction = func; + superWrapper.__ember_observes__ = func.__ember_observes__; + superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__; + superWrapper.__ember_listens__ = func.__ember_listens__; + + return superWrapper; + } + + /** + Checks to see if the `methodName` exists on the `obj`. + + ```javascript + var foo = { bar: function() { return 'bar'; }, baz: null }; + + Ember.canInvoke(foo, 'bar'); // true + Ember.canInvoke(foo, 'baz'); // false + Ember.canInvoke(foo, 'bat'); // false + ``` + + @method canInvoke + @for Ember + @param {Object} obj The object to check for the method + @param {String} methodName The method name to check for + @return {Boolean} + @private + */ + function canInvoke(obj, methodName) { + return !!(obj && typeof obj[methodName] === 'function'); + } + + /** + Checks to see if the `methodName` exists on the `obj`, + and if it does, invokes it with the arguments passed. + + ```javascript + var d = new Date('03/15/2013'); + + Ember.tryInvoke(d, 'getTime'); // 1363320000000 + Ember.tryInvoke(d, 'setFullYear', [2014]); // 1394856000000 + Ember.tryInvoke(d, 'noSuchMethod', [2014]); // undefined + ``` + + @method tryInvoke + @for Ember + @param {Object} obj The object to check for the method + @param {String} methodName The method name to check for + @param {Array} [args] The arguments to pass to the method + @return {*} the return value of the invoked method or undefined if it cannot be invoked + @public + */ + + function tryInvoke(obj, methodName, args) { + if (canInvoke(obj, methodName)) { + return args ? applyStr(obj, methodName, args) : applyStr(obj, methodName); + } + } + + // ........................................ + // TYPING & ARRAY MESSAGING + // + + var toString = Object.prototype.toString; + + /** + Forces the passed object to be part of an array. If the object is already + an array, it will return the object. Otherwise, it will add the object to + an array. If obj is `null` or `undefined`, it will return an empty array. + + ```javascript + Ember.makeArray(); // [] + Ember.makeArray(null); // [] + Ember.makeArray(undefined); // [] + Ember.makeArray('lindsay'); // ['lindsay'] + Ember.makeArray([1, 2, 42]); // [1, 2, 42] + + var controller = Ember.ArrayProxy.create({ content: [] }); + + Ember.makeArray(controller) === controller; // true + ``` + + @method makeArray + @for Ember + @param {Object} obj the object + @return {Array} + @private + */ + + function makeArray(obj) { + if (obj === null || obj === undefined) { + return []; + } + return Array.isArray(obj) ? obj : [obj]; + } + + /** + Convenience method to inspect an object. This method will attempt to + convert the object into a useful string description. + + It is a pretty simple implementation. If you want something more robust, + use something like JSDump: https://github.com/NV/jsDump + + @method inspect + @for Ember + @param {Object} obj The object you want to inspect. + @return {String} A description of the object + @since 1.4.0 + @private + */ + + function inspect(obj) { + if (obj === null) { + return 'null'; + } + if (obj === undefined) { + return 'undefined'; + } + if (Array.isArray(obj)) { + return '[' + obj + ']'; + } + // for non objects + var type = typeof obj; + if (type !== 'object' && type !== 'symbol') { + return '' + obj; + } + // overridden toString + if (typeof obj.toString === 'function' && obj.toString !== toString) { + return obj.toString(); + } + + // Object.prototype.toString === {}.toString + var v; + var ret = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + v = obj[key]; + if (v === 'toString') { + continue; + } // ignore useless items + if (typeof v === 'function') { + v = 'function() { ... }'; + } + + if (v && typeof v.toString !== 'function') { + ret.push(key + ': ' + toString.call(v)); + } else { + ret.push(key + ': ' + v); + } + } + } + return '{' + ret.join(', ') + '}'; + } + + // The following functions are intentionally minified to keep the functions + // below Chrome's function body size inlining limit of 600 chars. + /** + @param {Object} t target + @param {Function} m method + @param {Array} a args + @private + */ + + function apply(t, m, a) { + var l = a && a.length; + if (!a || !l) { + return m.call(t); + } + switch (l) { + case 1: + return m.call(t, a[0]); + case 2: + return m.call(t, a[0], a[1]); + case 3: + return m.call(t, a[0], a[1], a[2]); + case 4: + return m.call(t, a[0], a[1], a[2], a[3]); + case 5: + return m.call(t, a[0], a[1], a[2], a[3], a[4]); + default: + return m.apply(t, a); + } + } + + /** + @param {Object} t target + @param {String} m method + @param {Array} a args + @private + */ + + function applyStr(t, m, a) { + var l = a && a.length; + if (!a || !l) { + return t[m](); + } + switch (l) { + case 1: + return t[m](a[0]); + case 2: + return t[m](a[0], a[1]); + case 3: + return t[m](a[0], a[1], a[2]); + case 4: + return t[m](a[0], a[1], a[2], a[3]); + case 5: + return t[m](a[0], a[1], a[2], a[3], a[4]); + default: + return t[m].apply(t, a); + } + } + + function lookupDescriptor(obj, keyName) { + var current = obj; + while (current) { + var descriptor = Object.getOwnPropertyDescriptor(current, keyName); + + if (descriptor) { + return descriptor; + } + + current = Object.getPrototypeOf(current); + } + + return null; + } + + exports.GUID_KEY = GUID_KEY; + exports.makeArray = makeArray; + exports.canInvoke = canInvoke; +}); +enifed('ember-metal/watch_key', ['exports', 'ember-metal/features', 'ember-metal/meta', 'ember-metal/properties', 'ember-metal/utils'], function (exports, _emberMetalFeatures, _emberMetalMeta, _emberMetalProperties, _emberMetalUtils) { + 'use strict'; + + exports.watchKey = watchKey; + exports.unwatchKey = unwatchKey; + + var handleMandatorySetter = undefined; + + function watchKey(obj, keyName, meta) { + // can't watch length on Array - it is special... + if (keyName === 'length' && Array.isArray(obj)) { + return; + } + + var m = meta || _emberMetalMeta.meta(obj); + + // activate watching first time + if (!m.peekWatching(keyName)) { + m.writeWatching(keyName, 1); + + var possibleDesc = obj[keyName]; + var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; + if (desc && desc.willWatch) { + desc.willWatch(obj, keyName); + } + + if ('function' === typeof obj.willWatchProperty) { + obj.willWatchProperty(keyName); + } + + // NOTE: this is dropped for prod + minified builds + handleMandatorySetter(m, obj, keyName); + } else { + m.writeWatching(keyName, (m.peekWatching(keyName) || 0) + 1); + } + } + + // Future traveler, although this code looks scary. It merely exists in + // development to aid in development asertions. Production builds of + // ember strip this entire block out + handleMandatorySetter = function handleMandatorySetter(m, obj, keyName) { + var descriptor = _emberMetalUtils.lookupDescriptor(obj, keyName); + var configurable = descriptor ? descriptor.configurable : true; + var isWritable = descriptor ? descriptor.writable : true; + var hasValue = descriptor ? 'value' in descriptor : true; + var possibleDesc = descriptor && descriptor.value; + var isDescriptor = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor; + + if (isDescriptor) { + return; + } + + // this x in Y deopts, so keeping it in this function is better; + if (configurable && isWritable && hasValue && keyName in obj) { + var desc = { + configurable: true, + enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName), + set: _emberMetalProperties.MANDATORY_SETTER_FUNCTION(keyName), + get: undefined + }; + + if (Object.prototype.hasOwnProperty.call(obj, keyName)) { + m.writeValues(keyName, obj[keyName]); + desc.get = _emberMetalProperties.DEFAULT_GETTER_FUNCTION(keyName); + } else { + desc.get = _emberMetalProperties.INHERITING_GETTER_FUNCTION(keyName); + } + + Object.defineProperty(obj, keyName, desc); + } + }; + + function unwatchKey(obj, keyName, meta) { + var m = meta || _emberMetalMeta.meta(obj); + var count = m.peekWatching(keyName); + if (count === 1) { + m.writeWatching(keyName, 0); + + var possibleDesc = obj[keyName]; + var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined; + + if (desc && desc.didUnwatch) { + desc.didUnwatch(obj, keyName); + } + + if ('function' === typeof obj.didUnwatchProperty) { + obj.didUnwatchProperty(keyName); + } + + // It is true, the following code looks quite WAT. But have no fear, It + // exists purely to improve development ergonomics and is removed from + // ember.min.js and ember.prod.js builds. + // + // Some further context: Once a property is watched by ember, bypassing `set` + // for mutation, will bypass observation. This code exists to assert when + // that occurs, and attempt to provide more helpful feedback. The alternative + // is tricky to debug partially observable properties. + if (!desc && keyName in obj) { + var maybeMandatoryDescriptor = _emberMetalUtils.lookupDescriptor(obj, keyName); + + if (maybeMandatoryDescriptor.set && maybeMandatoryDescriptor.set.isMandatorySetter) { + if (maybeMandatoryDescriptor.get && maybeMandatoryDescriptor.get.isInheritingGetter) { + delete obj[keyName]; + } else { + Object.defineProperty(obj, keyName, { + configurable: true, + enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName), + writable: true, + value: m.peekValues(keyName) + }); + m.deleteFromValues(keyName); + } + } + } + } else if (count > 1) { + m.writeWatching(keyName, count - 1); + } + } +}); +enifed('ember-metal/watch_path', ['exports', 'ember-metal/meta', 'ember-metal/chains'], function (exports, _emberMetalMeta, _emberMetalChains) { + 'use strict'; + + exports.watchPath = watchPath; + exports.unwatchPath = unwatchPath; + + // get the chains for the current object. If the current object has + // chains inherited from the proto they will be cloned and reconfigured for + // the current object. + function chainsFor(obj, meta) { + return (meta || _emberMetalMeta.meta(obj)).writableChains(makeChainNode); + } + + function makeChainNode(obj) { + return new _emberMetalChains.ChainNode(null, null, obj); + } + + function watchPath(obj, keyPath, meta) { + // can't watch length on Array - it is special... + if (keyPath === 'length' && Array.isArray(obj)) { + return; + } + + var m = meta || _emberMetalMeta.meta(obj); + var counter = m.peekWatching(keyPath) || 0; + if (!counter) { + // activate watching first time + m.writeWatching(keyPath, 1); + chainsFor(obj, m).add(keyPath); + } else { + m.writeWatching(keyPath, counter + 1); + } + } + + function unwatchPath(obj, keyPath, meta) { + var m = meta || _emberMetalMeta.meta(obj); + var counter = m.peekWatching(keyPath) || 0; + + if (counter === 1) { + m.writeWatching(keyPath, 0); + chainsFor(obj, m).remove(keyPath); + } else if (counter > 1) { + m.writeWatching(keyPath, counter - 1); + } + } +}); +enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/watch_key', 'ember-metal/watch_path', 'ember-metal/path_cache', 'ember-metal/meta'], function (exports, _emberMetalChains, _emberMetalWatch_key, _emberMetalWatch_path, _emberMetalPath_cache, _emberMetalMeta) { + /** + @module ember-metal + */ + + 'use strict'; + + exports.isWatching = isWatching; + exports.watcherCount = watcherCount; + exports.unwatch = unwatch; + exports.destroy = destroy; + + /** + Starts watching a property on an object. Whenever the property changes, + invokes `Ember.propertyWillChange` and `Ember.propertyDidChange`. This is the + primitive used by observers and dependent keys; usually you will never call + this method directly but instead use higher level methods like + `Ember.addObserver()` + + @private + @method watch + @for Ember + @param obj + @param {String} _keyPath + */ + function watch(obj, _keyPath, m) { + // can't watch length on Array - it is special... + if (_keyPath === 'length' && Array.isArray(obj)) { + return; + } + + if (!_emberMetalPath_cache.isPath(_keyPath)) { + _emberMetalWatch_key.watchKey(obj, _keyPath, m); + } else { + _emberMetalWatch_path.watchPath(obj, _keyPath, m); + } + } + + exports.watch = watch; + + function isWatching(obj, key) { + var meta = _emberMetalMeta.peekMeta(obj); + return (meta && meta.peekWatching(key)) > 0; + } + + function watcherCount(obj, key) { + var meta = _emberMetalMeta.peekMeta(obj); + return meta && meta.peekWatching(key) || 0; + } + + watch.flushPending = _emberMetalChains.flushPendingChains; + + function unwatch(obj, _keyPath, m) { + // can't watch length on Array - it is special... + if (_keyPath === 'length' && Array.isArray(obj)) { + return; + } + + if (!_emberMetalPath_cache.isPath(_keyPath)) { + _emberMetalWatch_key.unwatchKey(obj, _keyPath, m); + } else { + _emberMetalWatch_path.unwatchPath(obj, _keyPath, m); + } + } + + var NODE_STACK = []; + + /** + Tears down the meta on an object so that it can be garbage collected. + Multiple calls will have no effect. + + @method destroy + @for Ember + @param {Object} obj the object to destroy + @return {void} + @private + */ + + function destroy(obj) { + var meta = _emberMetalMeta.peekMeta(obj); + var node, nodes, key, nodeObject; + + if (meta) { + _emberMetalMeta.deleteMeta(obj); + // remove chainWatchers to remove circular references that would prevent GC + node = meta.readableChains(); + if (node) { + NODE_STACK.push(node); + // process tree + while (NODE_STACK.length > 0) { + node = NODE_STACK.pop(); + // push children + nodes = node._chains; + if (nodes) { + for (key in nodes) { + if (nodes[key] !== undefined) { + NODE_STACK.push(nodes[key]); + } + } + } + // remove chainWatcher in node object + if (node._watching) { + nodeObject = node._object; + if (nodeObject) { + _emberMetalChains.removeChainWatcher(nodeObject, node._key, node); + } + } + } + } + } + } +}); +enifed('ember-metal/weak_map', ['exports', 'ember-metal/debug', 'ember-metal/utils', 'ember-metal/meta'], function (exports, _emberMetalDebug, _emberMetalUtils, _emberMetalMeta) { + 'use strict'; + + exports.default = WeakMap; + + var id = 0; + function UNDEFINED() {} + + /* + * @private + * @class Ember.WeakMap + * + * A partial polyfill for [WeakMap](http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap-objects). + * + * There is a small but important caveat. This implementation assumes that the + * weak map will live longer (in the sense of garbage collection) than all of its + * keys, otherwise it is possible to leak the values stored in the weak map. In + * practice, most use cases satisfy this limitation which is why it is included + * in ember-metal. + */ + + function WeakMap() { + _emberMetalDebug.assert('Invoking the WeakMap constructor with arguments is not supported at this time', arguments.length === 0); + + this._id = _emberMetalUtils.GUID_KEY + id++; + } + + /* + * @method get + * @param key {Object | Function} + * @return {Any} stored value + */ + WeakMap.prototype.get = function (obj) { + var meta = _emberMetalMeta.peekMeta(obj); + if (meta) { + var map = meta.readableWeak(); + if (map) { + if (map[this._id] === UNDEFINED) { + return undefined; + } + + return map[this._id]; + } + } + }; + + /* + * @method set + * @param key {Object | Function} + * @param value {Any} + * @return {WeakMap} the weak map + */ + WeakMap.prototype.set = function (obj, value) { + _emberMetalDebug.assert('Uncaught TypeError: Invalid value used as weak map key', obj && (typeof obj === 'object' || typeof obj === 'function')); + + if (value === undefined) { + value = UNDEFINED; + } + + _emberMetalMeta.meta(obj).writableWeak()[this._id] = value; + + return this; + }; + + /* + * @method has + * @param key {Object | Function} + * @return {boolean} if the key exists + */ + WeakMap.prototype.has = function (obj) { + var meta = _emberMetalMeta.peekMeta(obj); + if (meta) { + var map = meta.readableWeak(); + if (map) { + return map[this._id] !== undefined; + } + } + + return false; + }; + + /* + * @method delete + * @param key {Object | Function} + * @return {boolean} if the key was deleted + */ + WeakMap.prototype.delete = function (obj) { + if (this.has(obj)) { + delete _emberMetalMeta.meta(obj).writableWeak()[this._id]; + return true; + } else { + return false; + } + }; +}); +enifed('ember-template-compiler/compat/precompile', ['exports', 'require', 'ember-template-compiler/system/compile_options'], function (exports, _require, _emberTemplateCompilerSystemCompile_options) { + /** + @module ember + @submodule ember-template-compiler + */ + 'use strict'; + + var compile, compileSpec; + + exports.default = function (string) { + if ((!compile || !compileSpec) && _require.has('htmlbars-compiler/compiler')) { + var Compiler = _require.default('htmlbars-compiler/compiler'); + + compile = Compiler.compile; + compileSpec = Compiler.compileSpec; + } + + if (!compile || !compileSpec) { + throw new Error('Cannot call `precompile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `precompile`.'); + } + + var asObject = arguments[1] === undefined ? true : arguments[1]; + var compileFunc = asObject ? compile : compileSpec; + + return compileFunc(string, _emberTemplateCompilerSystemCompile_options.default()); + }; +}); +enifed('ember-template-compiler/compat', ['exports', 'ember-metal/core', 'ember-template-compiler/compat/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/template'], function (exports, _emberMetalCore, _emberTemplateCompilerCompatPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemTemplate) { + 'use strict'; + + var EmberHandlebars = _emberMetalCore.default.Handlebars = _emberMetalCore.default.Handlebars || {}; + + EmberHandlebars.precompile = _emberTemplateCompilerCompatPrecompile.default; + EmberHandlebars.compile = _emberTemplateCompilerSystemCompile.default; + EmberHandlebars.template = _emberTemplateCompilerSystemTemplate.default; +}); +enifed('ember-template-compiler/index', ['exports', 'ember-metal', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/template', 'ember-template-compiler/plugins', 'ember-template-compiler/plugins/transform-old-binding-syntax', 'ember-template-compiler/plugins/transform-old-class-binding-syntax', 'ember-template-compiler/plugins/transform-item-class', 'ember-template-compiler/plugins/transform-component-attrs-into-mut', 'ember-template-compiler/plugins/transform-component-curly-to-readonly', 'ember-template-compiler/plugins/transform-angle-bracket-components', 'ember-template-compiler/plugins/transform-input-on-to-onEvent', 'ember-template-compiler/plugins/transform-top-level-components', 'ember-template-compiler/plugins/transform-each-into-collection', 'ember-template-compiler/plugins/transform-unescaped-inline-link-to', 'ember-template-compiler/plugins/assert-no-view-and-controller-paths', 'ember-template-compiler/plugins/assert-no-view-helper', 'ember-template-compiler/compat'], function (exports, _emberMetal, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemTemplate, _emberTemplateCompilerPlugins, _emberTemplateCompilerPluginsTransformOldBindingSyntax, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax, _emberTemplateCompilerPluginsTransformItemClass, _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut, _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly, _emberTemplateCompilerPluginsTransformAngleBracketComponents, _emberTemplateCompilerPluginsTransformInputOnToOnEvent, _emberTemplateCompilerPluginsTransformTopLevelComponents, _emberTemplateCompilerPluginsTransformEachIntoCollection, _emberTemplateCompilerPluginsTransformUnescapedInlineLinkTo, _emberTemplateCompilerPluginsAssertNoViewAndControllerPaths, _emberTemplateCompilerPluginsAssertNoViewHelper, _emberTemplateCompilerCompat) { + 'use strict'; + + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformOldBindingSyntax.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformOldClassBindingSyntax.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformItemClass.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformAngleBracketComponents.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformInputOnToOnEvent.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformTopLevelComponents.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformUnescapedInlineLinkTo.default); + + if (_emberMetal.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT) { + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformEachIntoCollection.default); + } else { + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsAssertNoViewAndControllerPaths.default); + _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsAssertNoViewHelper.default); + } + + exports._Ember = _emberMetal.default; + exports.precompile = _emberTemplateCompilerSystemPrecompile.default; + exports.compile = _emberTemplateCompilerSystemCompile.default; + exports.template = _emberTemplateCompilerSystemTemplate.default; + exports.registerPlugin = _emberTemplateCompilerPlugins.registerPlugin; +}); + +// used for adding Ember.Handlebars.compile for backwards compat +enifed('ember-template-compiler/plugins/assert-no-view-and-controller-paths', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalCore, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { + 'use strict'; + + function AssertNoViewAndControllerPaths(options) { + // set later within HTMLBars to the syntax package + this.syntax = null; + this.options = options || {}; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + AssertNoViewAndControllerPaths.prototype.transform = function AssertNoViewAndControllerPaths_transform(ast) { + var walker = new this.syntax.Walker(); + var moduleName = this.options && this.options.moduleName; + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + assertPath(moduleName, node, node.path); + assertPaths(moduleName, node, node.params); + assertHash(moduleName, node, node.hash); + }); + + return ast; + }; + + function assertHash(moduleName, node, hash) { + if (!hash || !hash.pairs) { + return; + } + var i, l, pair, paths; + for (i = 0, l = hash.pairs.length; i < l; i++) { + pair = hash.pairs[i]; + paths = pair.value.params; + assertPaths(moduleName, pair, paths); + } + } + + function assertPaths(moduleName, node, paths) { + if (!paths) { + return; + } + var i, l, path; + for (i = 0, l = paths.length; i < l; i++) { + path = paths[i]; + assertPath(moduleName, node, path); + } + } + + function assertPath(moduleName, node, path) { + _emberMetalDebug.assert('Using `{{' + (path && path.type === 'PathExpression' && path.parts[0]) + '}}` or any path based on it ' + _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, node.loc) + 'has been removed in Ember 2.0', (function () { + var noAssertion = true; + + var viewKeyword = path && path.type === 'PathExpression' && path.parts && path.parts[0]; + if (viewKeyword === 'view') { + noAssertion = _emberMetalCore.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT; + } else if (viewKeyword === 'controller') { + noAssertion = _emberMetalCore.default.ENV._ENABLE_LEGACY_CONTROLLER_SUPPORT; + } + + return noAssertion; + })(), { + id: path.parts && path.parts[0] === 'view' ? 'view.keyword.view' : 'view.keyword.controller', + until: '2.0.0' + }); + } + + function validate(node) { + return node.type === 'MustacheStatement' || node.type === 'BlockStatement'; + } + + exports.default = AssertNoViewAndControllerPaths; +}); +enifed('ember-template-compiler/plugins/assert-no-view-helper', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalCore, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { + 'use strict'; + + function AssertNoViewHelper(options) { + // set later within HTMLBars to the syntax package + this.syntax = null; + this.options = options || {}; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + AssertNoViewHelper.prototype.transform = function AssertNoViewHelper_transform(ast) { + if (!!_emberMetalCore.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT) { + return ast; + } + var walker = new this.syntax.Walker(); + var moduleName = this.options && this.options.moduleName; + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + assertHelper(moduleName, node); + }); + + return ast; + }; + + function assertHelper(moduleName, node) { + var paramValue = node.params.length && node.params[0].value; + + if (!paramValue) { + return; + } else { + _emberMetalDebug.assert('Using the `{{view "string"}}` helper is removed in 2.0. ' + _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, node.loc), _emberMetalCore.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT, { id: 'view.helper', until: '2.0.0' }); + } + } + + function validate(node) { + return (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && node.path.parts[0] === 'view'; + } + + exports.default = AssertNoViewHelper; +}); +enifed('ember-template-compiler/plugins/transform-angle-bracket-components', ['exports'], function (exports) { + 'use strict'; + + function TransformAngleBracketComponents() { + // set later within HTMLBars to the syntax package + this.syntax = null; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + TransformAngleBracketComponents.prototype.transform = function TransformAngleBracketComponents_transform(ast) { + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + node.tag = '<' + node.tag + '>'; + }); + + return ast; + }; + + function validate(node) { + return node.type === 'ComponentNode'; + } + + exports.default = TransformAngleBracketComponents; +}); +enifed('ember-template-compiler/plugins/transform-component-attrs-into-mut', ['exports'], function (exports) { + 'use strict'; + + function TransformComponentAttrsIntoMut() { + // set later within HTMLBars to the syntax package + this.syntax = null; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + TransformComponentAttrsIntoMut.prototype.transform = function TransformComponentAttrsIntoMut_transform(ast) { + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + each(node.hash.pairs, function (pair) { + var value = pair.value; + + if (value.type === 'PathExpression') { + pair.value = b.sexpr(b.path('@mut'), [pair.value]); + } + }); + }); + + return ast; + }; + + function validate(node) { + return node.type === 'BlockStatement' || node.type === 'MustacheStatement'; + } + + function each(list, callback) { + for (var i = 0, l = list.length; i < l; i++) { + callback(list[i]); + } + } + + exports.default = TransformComponentAttrsIntoMut; +}); +enifed('ember-template-compiler/plugins/transform-component-curly-to-readonly', ['exports'], function (exports) { + 'use strict'; + + function TransformComponentCurlyToReadonly() { + // set later within HTMLBars to the syntax package + this.syntax = null; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + TransformComponentCurlyToReadonly.prototype.transform = function TransformComponetnCurlyToReadonly_transform(ast) { + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + each(node.attributes, function (attr) { + if (attr.value.type !== 'MustacheStatement') { + return; + } + if (attr.value.params.length || attr.value.hash.pairs.length) { + return; + } + + attr.value = b.mustache(b.path('readonly'), [attr.value.path], null, !attr.value.escape); + }); + }); + + return ast; + }; + + function validate(node) { + return node.type === 'ComponentNode'; + } + + function each(list, callback) { + for (var i = 0, l = list.length; i < l; i++) { + callback(list[i]); + } + } + + exports.default = TransformComponentCurlyToReadonly; +}); +enifed('ember-template-compiler/plugins/transform-each-in-to-hash', ['exports'], function (exports) { + /** + @module ember + @submodule ember-htmlbars + */ + + /** + An HTMLBars AST transformation that replaces all instances of + + ```handlebars + {{#each item in items}} + {{/each}} + ``` + + with + + ```handlebars + {{#each items keyword="item"}} + {{/each}} + ``` + + @class TransformEachInToHash + @private + */ + 'use strict'; + + function TransformEachInToHash(options) { + // set later within HTMLBars to the syntax package + this.syntax = null; + this.options = options || {}; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + TransformEachInToHash.prototype.transform = function TransformEachInToHash_transform(ast) { + var pluginContext = this; + var walker = new pluginContext.syntax.Walker(); + var b = pluginContext.syntax.builders; + + walker.visit(ast, function (node) { + if (pluginContext.validate(node)) { + if (node.program && node.program.blockParams.length) { + throw new Error('You cannot use keyword (`{{each foo in bar}}`) and block params (`{{each bar as |foo|}}`) at the same time.'); + } + + var removedParams = node.sexpr.params.splice(0, 2); + var keyword = removedParams[0].original; + + // TODO: This may not be necessary. + if (!node.sexpr.hash) { + node.sexpr.hash = b.hash(); + } + + node.sexpr.hash.pairs.push(b.pair('keyword', b.string(keyword))); + } + }); + + return ast; + }; + + TransformEachInToHash.prototype.validate = function TransformEachInToHash_validate(node) { + return (node.type === 'BlockStatement' || node.type === 'MustacheStatement') && node.sexpr.path.original === 'each' && node.sexpr.params.length === 3 && node.sexpr.params[1].type === 'PathExpression' && node.sexpr.params[1].original === 'in'; + }; + + exports.default = TransformEachInToHash; +}); +enifed('ember-template-compiler/plugins/transform-each-into-collection', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { + 'use strict'; + + exports.default = TransformEachIntoCollection; + + function TransformEachIntoCollection(options) { + this.options = options; + this.syntax = null; + } + + TransformEachIntoCollection.prototype.transform = function TransformEachIntoCollection_transform(ast) { + var moduleName = this.options.moduleName; + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + var legacyHashKey = validate(node); + if (!legacyHashKey) { + return; + } + + var moduleInfo = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, legacyHashKey.loc); + + _emberMetalDebug.deprecate('Using \'' + legacyHashKey.key + '\' with \'{{each}}\' ' + moduleInfo + 'is deprecated. Please refactor to a component.', false, { id: 'ember-template-compiler.transform-each-into-collection', until: '2.0.0' }); + + var list = node.params.shift(); + node.path = b.path('collection'); + + node.params.unshift(b.string('-legacy-each')); + + var pair = b.pair('content', list); + pair.loc = list.loc; + + node.hash.pairs.push(pair); + + //pair = b.pair('dataSource', list); + //node.hash.pairs.push(pair); + }); + + return ast; + }; + + function validate(node) { + if ((node.type === 'BlockStatement' || node.type === 'MustacheStatement') && node.path.original === 'each') { + return any(node.hash.pairs, function (pair) { + var key = pair.key; + return key === 'itemController' || key === 'itemView' || key === 'itemViewClass' || key === 'tagName' || key === 'emptyView' || key === 'emptyViewClass'; + }); + } + + return false; + } + + function any(list, predicate) { + for (var i = 0, l = list.length; i < l; i++) { + if (predicate(list[i])) { + return list[i]; + } + } + + return false; + } +}); +enifed('ember-template-compiler/plugins/transform-input-on-to-onEvent', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { + 'use strict'; + + /** + @module ember + @submodule ember-htmlbars + */ + + /** + An HTMLBars AST transformation that replaces all instances of + + ```handlebars + {{input on="enter" action="doStuff"}} + {{input on="key-press" action="doStuff"}} + ``` + + with + + ```handlebars + {{input enter="doStuff"}} + {{input key-press="doStuff"}} + ``` + + @private + @class TransformInputOnToOnEvent + */ + function TransformInputOnToOnEvent(options) { + // set later within HTMLBars to the syntax package + this.syntax = null; + this.options = options || {}; + } + + /** + @private + @method transform + @param {AST} ast The AST to be transformed. + */ + TransformInputOnToOnEvent.prototype.transform = function TransformInputOnToOnEvent_transform(ast) { + var pluginContext = this; + var b = pluginContext.syntax.builders; + var walker = new pluginContext.syntax.Walker(); + var moduleName = pluginContext.options.moduleName; + + walker.visit(ast, function (node) { + if (pluginContext.validate(node)) { + var action = hashPairForKey(node.hash, 'action'); + var on = hashPairForKey(node.hash, 'on'); + var onEvent = hashPairForKey(node.hash, 'onEvent'); + var normalizedOn = on || onEvent; + var moduleInfo = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, node.loc); + + if (normalizedOn && normalizedOn.value.type !== 'StringLiteral') { + _emberMetalDebug.deprecate('Using a dynamic value for \'#{normalizedOn.key}=\' with the \'{{input}}\' helper ' + moduleInfo + 'is deprecated.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.dynamic-value', until: '3.0.0' }); + + normalizedOn.key = 'onEvent'; + return; // exit early, as we cannot transform further + } + + removeFromHash(node.hash, normalizedOn); + removeFromHash(node.hash, action); + + if (!action) { + _emberMetalDebug.deprecate('Using \'{{input ' + normalizedOn.key + '="' + normalizedOn.value.value + '" ...}}\' without specifying an action ' + moduleInfo + 'will do nothing.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.no-action', until: '3.0.0' }); + + return; // exit early, if no action was available there is nothing to do + } + + var specifiedOn = normalizedOn ? normalizedOn.key + '="' + normalizedOn.value.value + '" ' : ''; + if (normalizedOn && normalizedOn.value.value === 'keyPress') { + // using `keyPress` in the root of the component will + // clobber the keyPress event handler + normalizedOn.value.value = 'key-press'; + } + + var expected = (normalizedOn ? normalizedOn.value.value : 'enter') + '="' + action.value.original + '"'; + + _emberMetalDebug.deprecate('Using \'{{input ' + specifiedOn + 'action="' + action.value.original + '"}}\' ' + moduleInfo + 'is deprecated. Please use \'{{input ' + expected + '}}\' instead.', false, { id: 'ember-template-compiler.transform-input-on-to-onEvent.normalized-on', until: '3.0.0' }); + if (!normalizedOn) { + normalizedOn = b.pair('onEvent', b.string('enter')); + } + + node.hash.pairs.push(b.pair(normalizedOn.value.value, action.value)); + } + }); + + return ast; + }; + + TransformInputOnToOnEvent.prototype.validate = function TransformWithAsToHash_validate(node) { + return node.type === 'MustacheStatement' && node.path.original === 'input' && (hashPairForKey(node.hash, 'action') || hashPairForKey(node.hash, 'on') || hashPairForKey(node.hash, 'onEvent')); + }; + + function hashPairForKey(hash, key) { + for (var i = 0, l = hash.pairs.length; i < l; i++) { + var pair = hash.pairs[i]; + if (pair.key === key) { + return pair; + } + } + + return false; + } + + function removeFromHash(hash, pairToRemove) { + var newPairs = []; + for (var i = 0, l = hash.pairs.length; i < l; i++) { + var pair = hash.pairs[i]; + + if (pair !== pairToRemove) { + newPairs.push(pair); + } + } + + hash.pairs = newPairs; + } + + exports.default = TransformInputOnToOnEvent; +}); +enifed('ember-template-compiler/plugins/transform-item-class', ['exports'], function (exports) { + 'use strict'; + + exports.default = TransformItemClass; + + function TransformItemClass() { + this.syntax = null; + } + + TransformItemClass.prototype.transform = function TransformItemClass_transform(ast) { + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + each(node.hash.pairs, function (pair) { + var key = pair.key; + var value = pair.value; + + if (key !== 'itemClass') { + return; + } + if (value.type === 'StringLiteral') { + return; + } + + var propName = value.original; + var params = [value]; + var sexprParams = [b.string(propName), b.path(propName)]; + + params.push(b.sexpr(b.string('-normalize-class'), sexprParams)); + var sexpr = b.sexpr(b.string('if'), params); + + pair.value = sexpr; + }); + }); + + return ast; + }; + + function validate(node) { + return (node.type === 'BlockStatement' || node.type === 'MustacheStatement') && node.path.original === 'collection'; + } + + function each(list, callback) { + for (var i = 0, l = list.length; i < l; i++) { + callback(list[i]); + } + } +}); +enifed('ember-template-compiler/plugins/transform-old-binding-syntax', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) { + 'use strict'; + + exports.default = TransformOldBindingSyntax; + + function TransformOldBindingSyntax(options) { + this.syntax = null; + this.options = options; + } + + TransformOldBindingSyntax.prototype.transform = function TransformOldBindingSyntax_transform(ast) { + var moduleName = this.options.moduleName; + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + each(node.hash.pairs, function (pair) { + var key = pair.key; + var value = pair.value; + + var sourceInformation = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, pair.loc); + + if (key === 'classBinding') { + return; + } + + _emberMetalDebug.assert('Setting \'attributeBindings\' via template helpers is not allowed ' + sourceInformation, key !== 'attributeBindings'); + + if (key.substr(-7) === 'Binding') { + var newKey = key.slice(0, -7); + + _emberMetalDebug.deprecate('You\'re using legacy binding syntax: ' + key + '=' + exprToString(value) + ' ' + sourceInformation + '. Please replace with ' + newKey + '=' + value.original, false, { id: 'ember-template-compiler.transform-old-binding-syntax', until: '3.0.0' }); + + pair.key = newKey; + if (value.type === 'StringLiteral') { + pair.value = b.path(value.original); + } + } + }); + }); + + return ast; + }; + + function validate(node) { + return node.type === 'BlockStatement' || node.type === 'MustacheStatement'; + } + + function each(list, callback) { + for (var i = 0, l = list.length; i < l; i++) { + callback(list[i]); + } + } + + function exprToString(expr) { + switch (expr.type) { + case 'StringLiteral': + return '"' + expr.original + '"'; + case 'PathExpression': + return expr.original; + } + } +}); +enifed('ember-template-compiler/plugins/transform-old-class-binding-syntax', ['exports'], function (exports) { + 'use strict'; + + exports.default = TransformOldClassBindingSyntax; + + function TransformOldClassBindingSyntax(options) { + this.syntax = null; + this.options = options; + } + + TransformOldClassBindingSyntax.prototype.transform = function TransformOldClassBindingSyntax_transform(ast) { + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + var allOfTheMicrosyntaxes = []; + var allOfTheMicrosyntaxIndexes = []; + var classPair = undefined; + + each(node.hash.pairs, function (pair, index) { + var key = pair.key; + + if (key === 'classBinding' || key === 'classNameBindings') { + allOfTheMicrosyntaxIndexes.push(index); + allOfTheMicrosyntaxes.push(pair); + } else if (key === 'class') { + classPair = pair; + } + }); + + if (allOfTheMicrosyntaxes.length === 0) { + return; + } + + var classValue = []; + + if (classPair) { + classValue.push(classPair.value); + classValue.push(b.string(' ')); + } else { + classPair = b.pair('class', null); + node.hash.pairs.push(classPair); + } + + each(allOfTheMicrosyntaxIndexes, function (index) { + node.hash.pairs.splice(index, 1); + }); + + each(allOfTheMicrosyntaxes, function (_ref) { + var value = _ref.value; + var loc = _ref.loc; + + var sexprs = []; + // TODO: add helpful deprecation when both `classNames` and `classNameBindings` can + // be removed. + + if (value.type === 'StringLiteral') { + var microsyntax = parseMicrosyntax(value.original); + + buildSexprs(microsyntax, sexprs, b); + + classValue.push.apply(classValue, sexprs); + } + }); + + var hash = b.hash(); + classPair.value = b.sexpr(b.string('concat'), classValue, hash); + }); + + return ast; + }; + + function buildSexprs(microsyntax, sexprs, b) { + for (var i = 0, l = microsyntax.length; i < l; i++) { + var _microsyntax$i = microsyntax[i]; + var propName = _microsyntax$i[0]; + var activeClass = _microsyntax$i[1]; + var inactiveClass = _microsyntax$i[2]; + + var sexpr = undefined; + + // :my-class-name microsyntax for static values + if (propName === '') { + sexpr = b.string(activeClass); + } else { + var params = [b.path(propName)]; + + if (activeClass) { + params.push(b.string(activeClass)); + } else { + var sexprParams = [b.string(propName), b.path(propName)]; + + var hash = b.hash(); + if (activeClass !== undefined) { + hash.pairs.push(b.pair('activeClass', b.string(activeClass))); + } + + if (inactiveClass !== undefined) { + hash.pairs.push(b.pair('inactiveClass', b.string(inactiveClass))); + } + + params.push(b.sexpr(b.string('-normalize-class'), sexprParams, hash)); + } + + if (inactiveClass) { + params.push(b.string(inactiveClass)); + } + + sexpr = b.sexpr(b.string('if'), params); + } + + sexprs.push(sexpr); + sexprs.push(b.string(' ')); + } + } + + function validate(node) { + return node.type === 'BlockStatement' || node.type === 'MustacheStatement'; + } + + function each(list, callback) { + for (var i = 0, l = list.length; i < l; i++) { + callback(list[i], i); + } + } + + function parseMicrosyntax(string) { + var segments = string.split(' '); + + for (var i = 0, l = segments.length; i < l; i++) { + segments[i] = segments[i].split(':'); + } + + return segments; + } +}); +enifed('ember-template-compiler/plugins/transform-top-level-components', ['exports', 'ember-metal/features'], function (exports, _emberMetalFeatures) { + 'use strict'; + + function TransformTopLevelComponents() { + // set later within HTMLBars to the syntax package + this.syntax = null; + } + + /** + @private + @method transform + @param {AST} The AST to be transformed. + */ + TransformTopLevelComponents.prototype.transform = function TransformTopLevelComponents_transform(ast) { + var b = this.syntax.builders; + + hasSingleComponentNode(ast, function (component) { + if (component.type === 'ComponentNode') { + component.tag = '@' + component.tag; + component.isStatic = true; + } + }, function (element) { + var hasTripleCurlies = element.attributes.some(function (attr) { + return attr.value.escaped === false; + }); + + if (element.modifiers.length || hasTripleCurlies) { + return element; + } else { + // TODO: Properly copy loc from children + var program = b.program(element.children); + var component = b.component('@<' + element.tag + '>', element.attributes, program, element.loc); + component.isStatic = true; + return component; + } + }); + + return ast; + }; + + function hasSingleComponentNode(program, componentCallback, elementCallback) { + var loc = program.loc; + var body = program.body; + + if (!loc || loc.start.line !== 1 || loc.start.column !== 0) { + return; + } + + var lastComponentNode = undefined; + var lastIndex = undefined; + var nodeCount = 0; + + for (var i = 0, l = body.length; i < l; i++) { + var curr = body[i]; + + // text node with whitespace only + if (curr.type === 'TextNode' && /^[\s]*$/.test(curr.chars)) { + continue; + } + + // has multiple root elements if we've been here before + if (nodeCount++ > 0) { + return false; + } + + if (curr.type === 'ComponentNode' || curr.type === 'ElementNode') { + lastComponentNode = curr; + lastIndex = i; + } + } + + if (!lastComponentNode) { + return; + } + + if (lastComponentNode.type === 'ComponentNode') { + componentCallback(lastComponentNode); + } + } + + exports.default = TransformTopLevelComponents; +}); +enifed('ember-template-compiler/plugins/transform-unescaped-inline-link-to', ['exports'], function (exports) { + 'use strict'; + + exports.default = TransformUnescapedInlineLinkTo; + + function TransformUnescapedInlineLinkTo(options) { + this.options = options; + this.syntax = null; + } + + TransformUnescapedInlineLinkTo.prototype.transform = function TransformUnescapedInlineLinkTo_transform(ast) { + var b = this.syntax.builders; + var walker = new this.syntax.Walker(); + + walker.visit(ast, function (node) { + if (!validate(node)) { + return; + } + + node.escaped = true; + node.params[0] = b.sexpr(b.string('-html-safe'), [node.params[0]]); + }); + + return ast; + }; + + function validate(node) { + return node.type === 'MustacheStatement' && node.path.original === 'link-to' && !node.escaped; + } +}); +enifed('ember-template-compiler/plugins', ['exports'], function (exports) { + /** + @module ember + @submodule ember-template-compiler + */ + + /** + @private + @property helpers + */ + 'use strict'; + + exports.registerPlugin = registerPlugin; + var plugins = { + ast: [] + }; + + /** + Adds an AST plugin to be used by Ember.HTMLBars.compile. + + @private + @method registerASTPlugin + */ + + function registerPlugin(type, Plugin) { + if (!plugins[type]) { + throw new Error('Attempting to register "' + Plugin + '" as "' + type + '" which is not a valid HTMLBars plugin type.'); + } + + plugins[type].push(Plugin); + } + + exports.default = plugins; +}); +enifed('ember-template-compiler/system/calculate-location-display', ['exports'], function (exports) { + 'use strict'; + + exports.default = calculateLocationDisplay; + + function calculateLocationDisplay(moduleName, _loc) { + var loc = _loc || {}; + + var _ref = loc.start || {}; + + var column = _ref.column; + var line = _ref.line; + + var moduleInfo = ''; + if (moduleName) { + moduleInfo += '\'' + moduleName + '\' '; + } + + if (line !== undefined && column !== undefined) { + if (moduleName) { + // only prepend @ if the moduleName was present + moduleInfo += '@ '; + } + moduleInfo += 'L' + line + ':C' + column; + } + + if (moduleInfo) { + moduleInfo = '(' + moduleInfo + ') '; + } + + return moduleInfo; + } +}); +enifed('ember-template-compiler/system/compile', ['exports', 'require', 'ember-template-compiler/system/compile_options', 'ember-template-compiler/system/template'], function (exports, _require, _emberTemplateCompilerSystemCompile_options, _emberTemplateCompilerSystemTemplate) { + /** + @module ember + @submodule ember-template-compiler + */ + + 'use strict'; + + var compile; + + /** + Uses HTMLBars `compile` function to process a string into a compiled template. + + This is not present in production builds. + + @private + @method compile + @param {String} templateString This is the string to be compiled by HTMLBars. + @param {Object} options This is an options hash to augment the compiler options. + */ + + exports.default = function (templateString, options) { + if (!compile && _require.has('htmlbars-compiler/compiler')) { + compile = _require.default('htmlbars-compiler/compiler').compile; + } + + if (!compile) { + throw new Error('Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.'); + } + + var templateSpec = compile(templateString, _emberTemplateCompilerSystemCompile_options.default(options)); + + return _emberTemplateCompilerSystemTemplate.default(templateSpec); + }; +}); +enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-metal/features', 'ember-metal/assign', 'ember-template-compiler/plugins'], function (exports, _emberMetalFeatures, _emberMetalAssign, _emberTemplateCompilerPlugins) { + /** + @module ember + @submodule ember-template-compiler + */ + + 'use strict'; + + /** + @private + @property compileOptions + */ + + exports.default = function (_options) { + var disableComponentGeneration = true; + + var options = undefined; + // When calling `Ember.Handlebars.compile()` a second argument of `true` + // had a special meaning (long since lost), this just gaurds against + // `options` being true, and causing an error during compilation. + if (_options === true) { + options = {}; + } else { + options = _emberMetalAssign.default({}, _options); + } + + options.disableComponentGeneration = disableComponentGeneration; + + var plugins = { + ast: _emberTemplateCompilerPlugins.default.ast.slice() + }; + + if (options.plugins && options.plugins.ast) { + plugins.ast = plugins.ast.concat(options.plugins.ast); + } + options.plugins = plugins; + + options.buildMeta = function buildMeta(program) { + return { + fragmentReason: fragmentReason(program), + revision: 'Ember@2.4.3', + loc: program.loc, + moduleName: options.moduleName + }; + }; + + return options; + }; + + function fragmentReason(program) { + var loc = program.loc; + var body = program.body; + + if (!loc || loc.start.line !== 1 || loc.start.column !== 0) { + return false; + } + + var candidate = undefined; + var nodeCount = 0; + + var problems = {}; + + for (var i = 0, l = body.length; i < l; i++) { + var curr = body[i]; + + // text node with whitespace only + if (curr.type === 'TextNode' && /^[\s]*$/.test(curr.chars)) { + continue; + } + + // has multiple root elements if we've been here before + if (nodeCount++ > 0) { + problems['multiple-nodes'] = true; + } + + if (curr.type === 'ComponentNode' || curr.type === 'ElementNode') { + candidate = curr; + } else { + problems['wrong-type'] = true; + } + } + + if (nodeCount === 0) { + return { name: 'missing-wrapper', problems: ['empty-body'] }; + } + + var problemList = Object.keys(problems); + if (problemList.length) { + return { name: 'missing-wrapper', problems: problemList }; + } + + if (candidate.type === 'ComponentNode') { + return false; + } else if (candidate.modifiers.length) { + return { name: 'modifiers', modifiers: candidate.modifiers.map(function (m) { + return m.path.original; + }) }; + } else if (candidate.attributes.some(function (attr) { + return !attr.value.escaped; + })) { + return { name: 'triple-curlies' }; + } else { + return false; + } + } +}); +enifed('ember-template-compiler/system/precompile', ['exports', 'require', 'ember-template-compiler/system/compile_options'], function (exports, _require, _emberTemplateCompilerSystemCompile_options) { + /** + @module ember + @submodule ember-template-compiler + */ + 'use strict'; + + var compileSpec; + + /** + Uses HTMLBars `compile` function to process a string into a compiled template string. + The returned string must be passed through `Ember.HTMLBars.template`. + + This is not present in production builds. + + @private + @method precompile + @param {String} templateString This is the string to be compiled by HTMLBars. + */ + + exports.default = function (templateString, options) { + if (!compileSpec && _require.has('htmlbars-compiler/compiler')) { + compileSpec = _require.default('htmlbars-compiler/compiler').compileSpec; + } + + if (!compileSpec) { + throw new Error('Cannot call `compileSpec` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compileSpec`.'); + } + + return compileSpec(templateString, _emberTemplateCompilerSystemCompile_options.default(options)); + }; +}); +enifed('ember-template-compiler/system/template', ['exports', 'htmlbars-runtime/hooks'], function (exports, _htmlbarsRuntimeHooks) { + 'use strict'; + + /** + @module ember + @submodule ember-template-compiler + */ + + /** + Augments the default precompiled output of an HTMLBars template with + additional information needed by Ember. + + @private + @method template + @param {Function} templateSpec This is the compiled HTMLBars template spec. + */ + + exports.default = function (templateSpec) { + if (!templateSpec.render) { + templateSpec = _htmlbarsRuntimeHooks.wrap(templateSpec); + } + + templateSpec.isTop = true; + templateSpec.isMethod = false; + + return templateSpec; + }; +}); +enifed("htmlbars-compiler/compiler", ["exports", "htmlbars-syntax/parser", "htmlbars-compiler/template-compiler", "htmlbars-runtime/hooks", "htmlbars-runtime/render"], function (exports, _htmlbarsSyntaxParser, _htmlbarsCompilerTemplateCompiler, _htmlbarsRuntimeHooks, _htmlbarsRuntimeRender) { + /*jshint evil:true*/ + "use strict"; + + exports.compileSpec = compileSpec; + exports.template = template; + exports.compile = compile; + + /* + * Compile a string into a template spec string. The template spec is a string + * representation of a template. Usually, you would use compileSpec for + * pre-compilation of a template on the server. + * + * Example usage: + * + * var templateSpec = compileSpec("Howdy {{name}}"); + * // This next step is basically what plain compile does + * var template = new Function("return " + templateSpec)(); + * + * @method compileSpec + * @param {String} string An HTMLBars template string + * @return {TemplateSpec} A template spec string + */ + + function compileSpec(string, options) { + var ast = _htmlbarsSyntaxParser.preprocess(string, options); + var compiler = new _htmlbarsCompilerTemplateCompiler.default(options); + var program = compiler.compile(ast); + return program; + } + + /* + * @method template + * @param {TemplateSpec} templateSpec A precompiled template + * @return {Template} A template spec string + */ + + function template(templateSpec) { + return new Function("return " + templateSpec)(); + } + + /* + * Compile a string into a template rendering function + * + * Example usage: + * + * // Template is the hydration portion of the compiled template + * var template = compile("Howdy {{name}}"); + * + * // Template accepts three arguments: + * // + * // 1. A context object + * // 2. An env object + * // 3. A contextualElement (optional, document.body is the default) + * // + * // The env object *must* have at least these two properties: + * // + * // 1. `hooks` - Basic hooks for rendering a template + * // 2. `dom` - An instance of DOMHelper + * // + * import {hooks} from 'htmlbars-runtime'; + * import {DOMHelper} from 'morph'; + * var context = {name: 'whatever'}, + * env = {hooks: hooks, dom: new DOMHelper()}, + * contextualElement = document.body; + * var domFragment = template(context, env, contextualElement); + * + * @method compile + * @param {String} string An HTMLBars template string + * @param {Object} options A set of options to provide to the compiler + * @return {Template} A function for rendering the template + */ + + function compile(string, options) { + return _htmlbarsRuntimeHooks.wrap(template(compileSpec(string, options)), _htmlbarsRuntimeRender.default); + } +}); +enifed("htmlbars-compiler/fragment-javascript-compiler", ["exports", "htmlbars-compiler/utils", "htmlbars-util/quoting"], function (exports, _htmlbarsCompilerUtils, _htmlbarsUtilQuoting) { + "use strict"; + + var svgNamespace = "http://www.w3.org/2000/svg", + + // http://www.w3.org/html/wg/drafts/html/master/syntax.html#html-integration-point + svgHTMLIntegrationPoints = { 'foreignObject': true, 'desc': true, 'title': true }; + + function FragmentJavaScriptCompiler() { + this.source = []; + this.depth = -1; + } + + exports.default = FragmentJavaScriptCompiler; + + FragmentJavaScriptCompiler.prototype.compile = function (opcodes, options) { + this.source.length = 0; + this.depth = -1; + this.indent = options && options.indent || ""; + this.namespaceFrameStack = [{ namespace: null, depth: null }]; + this.domNamespace = null; + + this.source.push('function buildFragment(dom) {\n'); + _htmlbarsCompilerUtils.processOpcodes(this, opcodes); + this.source.push(this.indent + '}'); + + return this.source.join(''); + }; + + FragmentJavaScriptCompiler.prototype.createFragment = function () { + var el = 'el' + ++this.depth; + this.source.push(this.indent + ' var ' + el + ' = dom.createDocumentFragment();\n'); + }; + + FragmentJavaScriptCompiler.prototype.createElement = function (tagName) { + var el = 'el' + ++this.depth; + if (tagName === 'svg') { + this.pushNamespaceFrame({ namespace: svgNamespace, depth: this.depth }); + } + this.ensureNamespace(); + this.source.push(this.indent + ' var ' + el + ' = dom.createElement(' + _htmlbarsUtilQuoting.string(tagName) + ');\n'); + if (svgHTMLIntegrationPoints[tagName]) { + this.pushNamespaceFrame({ namespace: null, depth: this.depth }); + } + }; + + FragmentJavaScriptCompiler.prototype.createText = function (str) { + var el = 'el' + ++this.depth; + this.source.push(this.indent + ' var ' + el + ' = dom.createTextNode(' + _htmlbarsUtilQuoting.string(str) + ');\n'); + }; + + FragmentJavaScriptCompiler.prototype.createComment = function (str) { + var el = 'el' + ++this.depth; + this.source.push(this.indent + ' var ' + el + ' = dom.createComment(' + _htmlbarsUtilQuoting.string(str) + ');\n'); + }; + + FragmentJavaScriptCompiler.prototype.returnNode = function () { + var el = 'el' + this.depth; + this.source.push(this.indent + ' return ' + el + ';\n'); + }; + + FragmentJavaScriptCompiler.prototype.setAttribute = function (name, value, namespace) { + var el = 'el' + this.depth; + if (namespace) { + this.source.push(this.indent + ' dom.setAttributeNS(' + el + ',' + _htmlbarsUtilQuoting.string(namespace) + ',' + _htmlbarsUtilQuoting.string(name) + ',' + _htmlbarsUtilQuoting.string(value) + ');\n'); + } else { + this.source.push(this.indent + ' dom.setAttribute(' + el + ',' + _htmlbarsUtilQuoting.string(name) + ',' + _htmlbarsUtilQuoting.string(value) + ');\n'); + } + }; + + FragmentJavaScriptCompiler.prototype.appendChild = function () { + if (this.depth === this.getCurrentNamespaceFrame().depth) { + this.popNamespaceFrame(); + } + var child = 'el' + this.depth--; + var el = 'el' + this.depth; + this.source.push(this.indent + ' dom.appendChild(' + el + ', ' + child + ');\n'); + }; + + FragmentJavaScriptCompiler.prototype.getCurrentNamespaceFrame = function () { + return this.namespaceFrameStack[this.namespaceFrameStack.length - 1]; + }; + + FragmentJavaScriptCompiler.prototype.pushNamespaceFrame = function (frame) { + this.namespaceFrameStack.push(frame); + }; + + FragmentJavaScriptCompiler.prototype.popNamespaceFrame = function () { + return this.namespaceFrameStack.pop(); + }; + + FragmentJavaScriptCompiler.prototype.ensureNamespace = function () { + var correctNamespace = this.getCurrentNamespaceFrame().namespace; + if (this.domNamespace !== correctNamespace) { + this.source.push(this.indent + ' dom.setNamespace(' + (correctNamespace ? _htmlbarsUtilQuoting.string(correctNamespace) : 'null') + ');\n'); + this.domNamespace = correctNamespace; + } + }; +}); +enifed("htmlbars-compiler/fragment-opcode-compiler", ["exports", "htmlbars-compiler/template-visitor", "htmlbars-compiler/utils", "htmlbars-util", "htmlbars-util/array-utils"], function (exports, _htmlbarsCompilerTemplateVisitor, _htmlbarsCompilerUtils, _htmlbarsUtil, _htmlbarsUtilArrayUtils) { + "use strict"; + + function FragmentOpcodeCompiler() { + this.opcodes = []; + } + + exports.default = FragmentOpcodeCompiler; + + FragmentOpcodeCompiler.prototype.compile = function (ast) { + var templateVisitor = new _htmlbarsCompilerTemplateVisitor.default(); + templateVisitor.visit(ast); + + _htmlbarsCompilerUtils.processOpcodes(this, templateVisitor.actions); + + return this.opcodes; + }; + + FragmentOpcodeCompiler.prototype.opcode = function (type, params) { + this.opcodes.push([type, params]); + }; + + FragmentOpcodeCompiler.prototype.text = function (text) { + this.opcode('createText', [text.chars]); + this.opcode('appendChild'); + }; + + FragmentOpcodeCompiler.prototype.comment = function (comment) { + this.opcode('createComment', [comment.value]); + this.opcode('appendChild'); + }; + + FragmentOpcodeCompiler.prototype.openElement = function (element) { + this.opcode('createElement', [element.tag]); + _htmlbarsUtilArrayUtils.forEach(element.attributes, this.attribute, this); + }; + + FragmentOpcodeCompiler.prototype.closeElement = function () { + this.opcode('appendChild'); + }; + + FragmentOpcodeCompiler.prototype.startProgram = function () { + this.opcodes.length = 0; + this.opcode('createFragment'); + }; + + FragmentOpcodeCompiler.prototype.endProgram = function () { + this.opcode('returnNode'); + }; + + FragmentOpcodeCompiler.prototype.mustache = function () { + this.pushMorphPlaceholderNode(); + }; + + FragmentOpcodeCompiler.prototype.component = function () { + this.pushMorphPlaceholderNode(); + }; + + FragmentOpcodeCompiler.prototype.block = function () { + this.pushMorphPlaceholderNode(); + }; + + FragmentOpcodeCompiler.prototype.pushMorphPlaceholderNode = function () { + this.opcode('createComment', [""]); + this.opcode('appendChild'); + }; + + FragmentOpcodeCompiler.prototype.attribute = function (attr) { + if (attr.value.type === 'TextNode') { + var namespace = _htmlbarsUtil.getAttrNamespace(attr.name); + this.opcode('setAttribute', [attr.name, attr.value.chars, namespace]); + } + }; + + FragmentOpcodeCompiler.prototype.setNamespace = function (namespace) { + this.opcode('setNamespace', [namespace]); + }; +}); +enifed("htmlbars-compiler/hydration-javascript-compiler", ["exports", "htmlbars-compiler/utils", "htmlbars-util/quoting"], function (exports, _htmlbarsCompilerUtils, _htmlbarsUtilQuoting) { + "use strict"; + + function HydrationJavaScriptCompiler() { + this.stack = []; + this.source = []; + this.mustaches = []; + this.parents = [['fragment']]; + this.parentCount = 0; + this.morphs = []; + this.fragmentProcessing = []; + this.hooks = undefined; + } + + exports.default = HydrationJavaScriptCompiler; + + var prototype = HydrationJavaScriptCompiler.prototype; + + prototype.compile = function (opcodes, options) { + this.stack.length = 0; + this.mustaches.length = 0; + this.source.length = 0; + this.parents.length = 1; + this.parents[0] = ['fragment']; + this.morphs.length = 0; + this.fragmentProcessing.length = 0; + this.parentCount = 0; + this.indent = options && options.indent || ""; + this.hooks = {}; + this.hasOpenBoundary = false; + this.hasCloseBoundary = false; + this.statements = []; + this.expressionStack = []; + this.locals = []; + this.hasOpenBoundary = false; + this.hasCloseBoundary = false; + + _htmlbarsCompilerUtils.processOpcodes(this, opcodes); + + if (this.hasOpenBoundary) { + this.source.unshift(this.indent + " dom.insertBoundary(fragment, 0);\n"); + } + + if (this.hasCloseBoundary) { + this.source.unshift(this.indent + " dom.insertBoundary(fragment, null);\n"); + } + + var i, l; + + var indent = this.indent; + + var morphs; + + var result = { + createMorphsProgram: '', + hydrateMorphsProgram: '', + fragmentProcessingProgram: '', + statements: this.statements, + locals: this.locals, + hasMorphs: false + }; + + result.hydrateMorphsProgram = this.source.join(''); + + if (this.morphs.length) { + result.hasMorphs = true; + morphs = indent + ' var morphs = new Array(' + this.morphs.length + ');\n'; + + for (i = 0, l = this.morphs.length; i < l; ++i) { + var morph = this.morphs[i]; + morphs += indent + ' morphs[' + i + '] = ' + morph + ';\n'; + } + } + + if (this.fragmentProcessing.length) { + var processing = ""; + for (i = 0, l = this.fragmentProcessing.length; i < l; ++i) { + processing += this.indent + ' ' + this.fragmentProcessing[i] + '\n'; + } + result.fragmentProcessingProgram = processing; + } + + var createMorphsProgram; + if (result.hasMorphs) { + createMorphsProgram = 'function buildRenderNodes(dom, fragment, contextualElement) {\n' + result.fragmentProcessingProgram + morphs; + + if (this.hasOpenBoundary) { + createMorphsProgram += indent + " dom.insertBoundary(fragment, 0);\n"; + } + + if (this.hasCloseBoundary) { + createMorphsProgram += indent + " dom.insertBoundary(fragment, null);\n"; + } + + createMorphsProgram += indent + ' return morphs;\n' + indent + '}'; + } else { + createMorphsProgram = 'function buildRenderNodes() { return []; }'; + } + + result.createMorphsProgram = createMorphsProgram; + + return result; + }; + + prototype.prepareArray = function (length) { + var values = []; + + for (var i = 0; i < length; i++) { + values.push(this.expressionStack.pop()); + } + + this.expressionStack.push(values); + }; + + prototype.prepareObject = function (size) { + var pairs = []; + + for (var i = 0; i < size; i++) { + pairs.push(this.expressionStack.pop(), this.expressionStack.pop()); + } + + this.expressionStack.push(pairs); + }; + + prototype.openBoundary = function () { + this.hasOpenBoundary = true; + }; + + prototype.closeBoundary = function () { + this.hasCloseBoundary = true; + }; + + prototype.pushLiteral = function (value) { + this.expressionStack.push(value); + }; + + prototype.pushGetHook = function (path, meta) { + this.expressionStack.push(['get', path, meta]); + }; + + prototype.pushSexprHook = function (meta) { + this.expressionStack.push(['subexpr', this.expressionStack.pop(), this.expressionStack.pop(), this.expressionStack.pop(), meta]); + }; + + prototype.pushConcatHook = function () { + this.expressionStack.push(['concat', this.expressionStack.pop()]); + }; + + prototype.printSetHook = function (name) { + this.locals.push(name); + }; + + prototype.printBlockHook = function (templateId, inverseId, meta) { + this.statements.push(['block', this.expressionStack.pop(), // path + this.expressionStack.pop(), // params + this.expressionStack.pop(), // hash + templateId, inverseId, meta]); + }; + + prototype.printInlineHook = function (meta) { + var path = this.expressionStack.pop(); + var params = this.expressionStack.pop(); + var hash = this.expressionStack.pop(); + + this.statements.push(['inline', path, params, hash, meta]); + }; + + prototype.printContentHook = function (meta) { + this.statements.push(['content', this.expressionStack.pop(), meta]); + }; + + prototype.printComponentHook = function (templateId) { + this.statements.push(['component', this.expressionStack.pop(), // path + this.expressionStack.pop(), // attrs + templateId]); + }; + + prototype.printAttributeHook = function () { + this.statements.push(['attribute', this.expressionStack.pop(), // name + this.expressionStack.pop() // value; + ]); + }; + + prototype.printElementHook = function (meta) { + this.statements.push(['element', this.expressionStack.pop(), // path + this.expressionStack.pop(), // params + this.expressionStack.pop(), // hash + meta]); + }; + + prototype.createMorph = function (morphNum, parentPath, startIndex, endIndex, escaped) { + var isRoot = parentPath.length === 0; + var parent = this.getParent(); + + var morphMethod = escaped ? 'createMorphAt' : 'createUnsafeMorphAt'; + var morph = "dom." + morphMethod + "(" + parent + "," + (startIndex === null ? "-1" : startIndex) + "," + (endIndex === null ? "-1" : endIndex) + (isRoot ? ",contextualElement)" : ")"); + + this.morphs[morphNum] = morph; + }; + + prototype.createAttrMorph = function (attrMorphNum, elementNum, name, escaped, namespace) { + var morphMethod = escaped ? 'createAttrMorph' : 'createUnsafeAttrMorph'; + var morph = "dom." + morphMethod + "(element" + elementNum + ", '" + name + (namespace ? "', '" + namespace : '') + "')"; + this.morphs[attrMorphNum] = morph; + }; + + prototype.createElementMorph = function (morphNum, elementNum) { + var morphMethod = 'createElementMorph'; + var morph = "dom." + morphMethod + "(element" + elementNum + ")"; + this.morphs[morphNum] = morph; + }; + + prototype.repairClonedNode = function (blankChildTextNodes, isElementChecked) { + var parent = this.getParent(), + processing = 'if (this.cachedFragment) { dom.repairClonedNode(' + parent + ',' + _htmlbarsUtilQuoting.array(blankChildTextNodes) + (isElementChecked ? ',true' : '') + '); }'; + this.fragmentProcessing.push(processing); + }; + + prototype.shareElement = function (elementNum) { + var elementNodesName = "element" + elementNum; + this.fragmentProcessing.push('var ' + elementNodesName + ' = ' + this.getParent() + ';'); + this.parents[this.parents.length - 1] = [elementNodesName]; + }; + + prototype.consumeParent = function (i) { + var newParent = this.lastParent().slice(); + newParent.push(i); + + this.parents.push(newParent); + }; + + prototype.popParent = function () { + this.parents.pop(); + }; + + prototype.getParent = function () { + var last = this.lastParent().slice(); + var frag = last.shift(); + + if (!last.length) { + return frag; + } + + return 'dom.childAt(' + frag + ', [' + last.join(', ') + '])'; + }; + + prototype.lastParent = function () { + return this.parents[this.parents.length - 1]; + }; +}); +enifed("htmlbars-compiler/hydration-opcode-compiler", ["exports", "htmlbars-compiler/template-visitor", "htmlbars-compiler/utils", "htmlbars-util", "htmlbars-util/array-utils", "htmlbars-syntax/utils"], function (exports, _htmlbarsCompilerTemplateVisitor, _htmlbarsCompilerUtils, _htmlbarsUtil, _htmlbarsUtilArrayUtils, _htmlbarsSyntaxUtils) { + "use strict"; + + function detectIsElementChecked(element) { + for (var i = 0, len = element.attributes.length; i < len; i++) { + if (element.attributes[i].name === 'checked') { + return true; + } + } + return false; + } + + function HydrationOpcodeCompiler() { + this.opcodes = []; + this.paths = []; + this.templateId = 0; + this.currentDOMChildIndex = 0; + this.morphs = []; + this.morphNum = 0; + this.element = null; + this.elementNum = -1; + } + + exports.default = HydrationOpcodeCompiler; + + HydrationOpcodeCompiler.prototype.compile = function (ast) { + var templateVisitor = new _htmlbarsCompilerTemplateVisitor.default(); + templateVisitor.visit(ast); + + _htmlbarsCompilerUtils.processOpcodes(this, templateVisitor.actions); + + return this.opcodes; + }; + + HydrationOpcodeCompiler.prototype.accept = function (node) { + this[node.type](node); + }; + + HydrationOpcodeCompiler.prototype.opcode = function (type) { + var params = [].slice.call(arguments, 1); + this.opcodes.push([type, params]); + }; + + HydrationOpcodeCompiler.prototype.startProgram = function (program, c, blankChildTextNodes) { + this.opcodes.length = 0; + this.paths.length = 0; + this.morphs.length = 0; + this.templateId = 0; + this.currentDOMChildIndex = -1; + this.morphNum = 0; + + var blockParams = program.blockParams || []; + + for (var i = 0; i < blockParams.length; i++) { + this.opcode('printSetHook', blockParams[i], i); + } + + if (blankChildTextNodes.length > 0) { + this.opcode('repairClonedNode', blankChildTextNodes); + } + }; + + HydrationOpcodeCompiler.prototype.insertBoundary = function (first) { + this.opcode(first ? 'openBoundary' : 'closeBoundary'); + }; + + HydrationOpcodeCompiler.prototype.endProgram = function () { + distributeMorphs(this.morphs, this.opcodes); + }; + + HydrationOpcodeCompiler.prototype.text = function () { + ++this.currentDOMChildIndex; + }; + + HydrationOpcodeCompiler.prototype.comment = function () { + ++this.currentDOMChildIndex; + }; + + HydrationOpcodeCompiler.prototype.openElement = function (element, pos, len, mustacheCount, blankChildTextNodes) { + distributeMorphs(this.morphs, this.opcodes); + ++this.currentDOMChildIndex; + + this.element = this.currentDOMChildIndex; + + this.opcode('consumeParent', this.currentDOMChildIndex); + + // If our parent reference will be used more than once, cache its reference. + if (mustacheCount > 1) { + shareElement(this); + } + + var isElementChecked = detectIsElementChecked(element); + if (blankChildTextNodes.length > 0 || isElementChecked) { + this.opcode('repairClonedNode', blankChildTextNodes, isElementChecked); + } + + this.paths.push(this.currentDOMChildIndex); + this.currentDOMChildIndex = -1; + + _htmlbarsUtilArrayUtils.forEach(element.attributes, this.attribute, this); + _htmlbarsUtilArrayUtils.forEach(element.modifiers, this.elementModifier, this); + }; + + HydrationOpcodeCompiler.prototype.closeElement = function () { + distributeMorphs(this.morphs, this.opcodes); + this.opcode('popParent'); + this.currentDOMChildIndex = this.paths.pop(); + }; + + HydrationOpcodeCompiler.prototype.mustache = function (mustache, childIndex, childCount) { + this.pushMorphPlaceholderNode(childIndex, childCount); + + var opcode; + + if (_htmlbarsSyntaxUtils.isHelper(mustache)) { + prepareHash(this, mustache.hash); + prepareParams(this, mustache.params); + preparePath(this, mustache.path); + opcode = 'printInlineHook'; + } else { + preparePath(this, mustache.path); + opcode = 'printContentHook'; + } + + var morphNum = this.morphNum++; + var start = this.currentDOMChildIndex; + var end = this.currentDOMChildIndex; + this.morphs.push([morphNum, this.paths.slice(), start, end, mustache.escaped]); + + this.opcode(opcode, meta(mustache)); + }; + + function meta(node) { + var loc = node.loc; + if (!loc) { + return []; + } + + var source = loc.source; + var start = loc.start; + var end = loc.end; + + return ['loc', [source || null, [start.line, start.column], [end.line, end.column]]]; + } + + HydrationOpcodeCompiler.prototype.block = function (block, childIndex, childCount) { + this.pushMorphPlaceholderNode(childIndex, childCount); + + prepareHash(this, block.hash); + prepareParams(this, block.params); + preparePath(this, block.path); + + var morphNum = this.morphNum++; + var start = this.currentDOMChildIndex; + var end = this.currentDOMChildIndex; + this.morphs.push([morphNum, this.paths.slice(), start, end, true]); + + var templateId = this.templateId++; + var inverseId = block.inverse === null ? null : this.templateId++; + + this.opcode('printBlockHook', templateId, inverseId, meta(block)); + }; + + HydrationOpcodeCompiler.prototype.component = function (component, childIndex, childCount) { + this.pushMorphPlaceholderNode(childIndex, childCount, component.isStatic); + + var program = component.program || {}; + var blockParams = program.blockParams || []; + + var attrs = component.attributes; + for (var i = attrs.length - 1; i >= 0; i--) { + var name = attrs[i].name; + var value = attrs[i].value; + + // TODO: Introduce context specific AST nodes to avoid switching here. + if (value.type === 'TextNode') { + this.opcode('pushLiteral', value.chars); + } else if (value.type === 'MustacheStatement') { + this.accept(_htmlbarsSyntaxUtils.unwrapMustache(value)); + } else if (value.type === 'ConcatStatement') { + prepareParams(this, value.parts); + this.opcode('pushConcatHook', this.morphNum); + } + + this.opcode('pushLiteral', name); + } + + var morphNum = this.morphNum++; + var start = this.currentDOMChildIndex; + var end = this.currentDOMChildIndex; + this.morphs.push([morphNum, this.paths.slice(), start, end, true]); + + this.opcode('prepareObject', attrs.length); + this.opcode('pushLiteral', component.tag); + this.opcode('printComponentHook', this.templateId++, blockParams.length, meta(component)); + }; + + HydrationOpcodeCompiler.prototype.attribute = function (attr) { + var value = attr.value; + var escaped = true; + var namespace = _htmlbarsUtil.getAttrNamespace(attr.name); + + // TODO: Introduce context specific AST nodes to avoid switching here. + if (value.type === 'TextNode') { + return; + } else if (value.type === 'MustacheStatement') { + escaped = value.escaped; + this.accept(_htmlbarsSyntaxUtils.unwrapMustache(value)); + } else if (value.type === 'ConcatStatement') { + prepareParams(this, value.parts); + this.opcode('pushConcatHook', this.morphNum); + } + + this.opcode('pushLiteral', attr.name); + + var attrMorphNum = this.morphNum++; + + if (this.element !== null) { + shareElement(this); + } + + this.opcode('createAttrMorph', attrMorphNum, this.elementNum, attr.name, escaped, namespace); + this.opcode('printAttributeHook'); + }; + + HydrationOpcodeCompiler.prototype.elementModifier = function (modifier) { + prepareHash(this, modifier.hash); + prepareParams(this, modifier.params); + preparePath(this, modifier.path); + + // If we have a helper in a node, and this element has not been cached, cache it + if (this.element !== null) { + shareElement(this); + } + + publishElementMorph(this); + this.opcode('printElementHook', meta(modifier)); + }; + + HydrationOpcodeCompiler.prototype.pushMorphPlaceholderNode = function (childIndex, childCount, skipBoundaryNodes) { + if (!skipBoundaryNodes) { + if (this.paths.length === 0) { + if (childIndex === 0) { + this.opcode('openBoundary'); + } + if (childIndex === childCount - 1) { + this.opcode('closeBoundary'); + } + } + } + + this.comment(); + }; + + HydrationOpcodeCompiler.prototype.MustacheStatement = function (mustache) { + prepareHash(this, mustache.hash); + prepareParams(this, mustache.params); + preparePath(this, mustache.path); + this.opcode('pushSexprHook', meta(mustache)); + }; + + HydrationOpcodeCompiler.prototype.SubExpression = function (sexpr) { + prepareHash(this, sexpr.hash); + prepareParams(this, sexpr.params); + preparePath(this, sexpr.path); + this.opcode('pushSexprHook', meta(sexpr)); + }; + + HydrationOpcodeCompiler.prototype.PathExpression = function (path) { + this.opcode('pushGetHook', path.original, meta(path)); + }; + + HydrationOpcodeCompiler.prototype.StringLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; + + HydrationOpcodeCompiler.prototype.BooleanLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; + + HydrationOpcodeCompiler.prototype.NumberLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; + + HydrationOpcodeCompiler.prototype.UndefinedLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; + + HydrationOpcodeCompiler.prototype.NullLiteral = function (node) { + this.opcode('pushLiteral', node.value); + }; + + function preparePath(compiler, path) { + compiler.opcode('pushLiteral', path.original); + } + + function prepareParams(compiler, params) { + for (var i = params.length - 1; i >= 0; i--) { + var param = params[i]; + compiler[param.type](param); + } + + compiler.opcode('prepareArray', params.length); + } + + function prepareHash(compiler, hash) { + var pairs = hash.pairs; + + for (var i = pairs.length - 1; i >= 0; i--) { + var key = pairs[i].key; + var value = pairs[i].value; + + compiler[value.type](value); + compiler.opcode('pushLiteral', key); + } + + compiler.opcode('prepareObject', pairs.length); + } + + function shareElement(compiler) { + compiler.opcode('shareElement', ++compiler.elementNum); + compiler.element = null; // Set element to null so we don't cache it twice + } + + function publishElementMorph(compiler) { + var morphNum = compiler.morphNum++; + compiler.opcode('createElementMorph', morphNum, compiler.elementNum); + } + + function distributeMorphs(morphs, opcodes) { + if (morphs.length === 0) { + return; + } + + // Splice morphs after the most recent shareParent/consumeParent. + var o; + for (o = opcodes.length - 1; o >= 0; --o) { + var opcode = opcodes[o][0]; + if (opcode === 'shareElement' || opcode === 'consumeParent' || opcode === 'popParent') { + break; + } + } + + var spliceArgs = [o + 1, 0]; + for (var i = 0; i < morphs.length; ++i) { + spliceArgs.push(['createMorph', morphs[i].slice()]); + } + opcodes.splice.apply(opcodes, spliceArgs); + morphs.length = 0; + } +}); +enifed('htmlbars-compiler/template-compiler', ['exports', 'htmlbars-compiler/fragment-opcode-compiler', 'htmlbars-compiler/fragment-javascript-compiler', 'htmlbars-compiler/hydration-opcode-compiler', 'htmlbars-compiler/hydration-javascript-compiler', 'htmlbars-compiler/template-visitor', 'htmlbars-compiler/utils', 'htmlbars-util/quoting', 'htmlbars-util/array-utils'], function (exports, _htmlbarsCompilerFragmentOpcodeCompiler, _htmlbarsCompilerFragmentJavascriptCompiler, _htmlbarsCompilerHydrationOpcodeCompiler, _htmlbarsCompilerHydrationJavascriptCompiler, _htmlbarsCompilerTemplateVisitor, _htmlbarsCompilerUtils, _htmlbarsUtilQuoting, _htmlbarsUtilArrayUtils) { + 'use strict'; + + function TemplateCompiler(options) { + this.options = options || {}; + this.consumerBuildMeta = this.options.buildMeta || function () {}; + this.fragmentOpcodeCompiler = new _htmlbarsCompilerFragmentOpcodeCompiler.default(); + this.fragmentCompiler = new _htmlbarsCompilerFragmentJavascriptCompiler.default(); + this.hydrationOpcodeCompiler = new _htmlbarsCompilerHydrationOpcodeCompiler.default(); + this.hydrationCompiler = new _htmlbarsCompilerHydrationJavascriptCompiler.default(); + this.templates = []; + this.childTemplates = []; + } + + exports.default = TemplateCompiler; + + TemplateCompiler.prototype.compile = function (ast) { + var templateVisitor = new _htmlbarsCompilerTemplateVisitor.default(); + templateVisitor.visit(ast); + + _htmlbarsCompilerUtils.processOpcodes(this, templateVisitor.actions); + + return this.templates.pop(); + }; + + TemplateCompiler.prototype.startProgram = function (program, childTemplateCount, blankChildTextNodes) { + this.fragmentOpcodeCompiler.startProgram(program, childTemplateCount, blankChildTextNodes); + this.hydrationOpcodeCompiler.startProgram(program, childTemplateCount, blankChildTextNodes); + + this.childTemplates.length = 0; + while (childTemplateCount--) { + this.childTemplates.push(this.templates.pop()); + } + }; + + TemplateCompiler.prototype.insertBoundary = function (first) { + this.hydrationOpcodeCompiler.insertBoundary(first); + }; + + TemplateCompiler.prototype.getChildTemplateVars = function (indent) { + var vars = ''; + if (this.childTemplates) { + for (var i = 0; i < this.childTemplates.length; i++) { + vars += indent + 'var child' + i + ' = ' + this.childTemplates[i] + ';\n'; + } + } + return vars; + }; + + TemplateCompiler.prototype.getHydrationHooks = function (indent, hooks) { + var hookVars = []; + for (var hook in hooks) { + hookVars.push(hook + ' = hooks.' + hook); + } + + if (hookVars.length > 0) { + return indent + 'var hooks = env.hooks, ' + hookVars.join(', ') + ';\n'; + } else { + return ''; + } + }; + + TemplateCompiler.prototype.endProgram = function (program, programDepth) { + this.fragmentOpcodeCompiler.endProgram(program); + this.hydrationOpcodeCompiler.endProgram(program); + + var indent = _htmlbarsUtilQuoting.repeat(" ", programDepth); + var options = { + indent: indent + " " + }; + + // function build(dom) { return fragment; } + var fragmentProgram = this.fragmentCompiler.compile(this.fragmentOpcodeCompiler.opcodes, options); + + // function hydrate(fragment) { return mustaches; } + var hydrationPrograms = this.hydrationCompiler.compile(this.hydrationOpcodeCompiler.opcodes, options); + + var blockParams = program.blockParams || []; + + var templateSignature = 'context, rootNode, env, options'; + if (blockParams.length > 0) { + templateSignature += ', blockArguments'; + } + + var statements = _htmlbarsUtilArrayUtils.map(hydrationPrograms.statements, function (s) { + return indent + ' ' + JSON.stringify(s); + }).join(",\n"); + + var locals = JSON.stringify(hydrationPrograms.locals); + + var templates = _htmlbarsUtilArrayUtils.map(this.childTemplates, function (_, index) { + return 'child' + index; + }).join(', '); + + var template = '(function() {\n' + this.getChildTemplateVars(indent + ' ') + indent + ' return {\n' + this.buildMeta(indent + ' ', program) + indent + ' isEmpty: ' + (program.body.length ? 'false' : 'true') + ',\n' + indent + ' arity: ' + blockParams.length + ',\n' + indent + ' cachedFragment: null,\n' + indent + ' hasRendered: false,\n' + indent + ' buildFragment: ' + fragmentProgram + ',\n' + indent + ' buildRenderNodes: ' + hydrationPrograms.createMorphsProgram + ',\n' + indent + ' statements: [\n' + statements + '\n' + indent + ' ],\n' + indent + ' locals: ' + locals + ',\n' + indent + ' templates: [' + templates + ']\n' + indent + ' };\n' + indent + '}())'; + + this.templates.push(template); + }; + + TemplateCompiler.prototype.buildMeta = function (indent, program) { + var meta = this.consumerBuildMeta(program) || {}; + + var head = indent + 'meta: '; + var stringMeta = JSON.stringify(meta, null, 2).replace(/\n/g, '\n' + indent); + var tail = ',\n'; + + return head + stringMeta + tail; + }; + + TemplateCompiler.prototype.openElement = function (element, i, l, r, c, b) { + this.fragmentOpcodeCompiler.openElement(element, i, l, r, c, b); + this.hydrationOpcodeCompiler.openElement(element, i, l, r, c, b); + }; + + TemplateCompiler.prototype.closeElement = function (element, i, l, r) { + this.fragmentOpcodeCompiler.closeElement(element, i, l, r); + this.hydrationOpcodeCompiler.closeElement(element, i, l, r); + }; + + TemplateCompiler.prototype.component = function (component, i, l, s) { + this.fragmentOpcodeCompiler.component(component, i, l, s); + this.hydrationOpcodeCompiler.component(component, i, l, s); + }; + + TemplateCompiler.prototype.block = function (block, i, l, s) { + this.fragmentOpcodeCompiler.block(block, i, l, s); + this.hydrationOpcodeCompiler.block(block, i, l, s); + }; + + TemplateCompiler.prototype.text = function (string, i, l, r) { + this.fragmentOpcodeCompiler.text(string, i, l, r); + this.hydrationOpcodeCompiler.text(string, i, l, r); + }; + + TemplateCompiler.prototype.comment = function (string, i, l, r) { + this.fragmentOpcodeCompiler.comment(string, i, l, r); + this.hydrationOpcodeCompiler.comment(string, i, l, r); + }; + + TemplateCompiler.prototype.mustache = function (mustache, i, l, s) { + this.fragmentOpcodeCompiler.mustache(mustache, i, l, s); + this.hydrationOpcodeCompiler.mustache(mustache, i, l, s); + }; + + TemplateCompiler.prototype.setNamespace = function (namespace) { + this.fragmentOpcodeCompiler.setNamespace(namespace); + }; +}); +enifed('htmlbars-compiler/template-visitor', ['exports'], function (exports) { + 'use strict'; + + var push = Array.prototype.push; + + function Frame() { + this.parentNode = null; + this.children = null; + this.childIndex = null; + this.childCount = null; + this.childTemplateCount = 0; + this.mustacheCount = 0; + this.actions = []; + } + + /** + * Takes in an AST and outputs a list of actions to be consumed + * by a compiler. For example, the template + * + * foo{{bar}}
    baz
    + * + * produces the actions + * + * [['startProgram', [programNode, 0]], + * ['text', [textNode, 0, 3]], + * ['mustache', [mustacheNode, 1, 3]], + * ['openElement', [elementNode, 2, 3, 0]], + * ['text', [textNode, 0, 1]], + * ['closeElement', [elementNode, 2, 3], + * ['endProgram', [programNode]]] + * + * This visitor walks the AST depth first and backwards. As + * a result the bottom-most child template will appear at the + * top of the actions list whereas the root template will appear + * at the bottom of the list. For example, + * + *
    {{#if}}foo{{else}}bar{{/if}}
    + * + * produces the actions + * + * [['startProgram', [programNode, 0]], + * ['text', [textNode, 0, 2, 0]], + * ['openElement', [elementNode, 1, 2, 0]], + * ['closeElement', [elementNode, 1, 2]], + * ['endProgram', [programNode]], + * ['startProgram', [programNode, 0]], + * ['text', [textNode, 0, 1]], + * ['endProgram', [programNode]], + * ['startProgram', [programNode, 2]], + * ['openElement', [elementNode, 0, 1, 1]], + * ['block', [blockNode, 0, 1]], + * ['closeElement', [elementNode, 0, 1]], + * ['endProgram', [programNode]]] + * + * The state of the traversal is maintained by a stack of frames. + * Whenever a node with children is entered (either a ProgramNode + * or an ElementNode) a frame is pushed onto the stack. The frame + * contains information about the state of the traversal of that + * node. For example, + * + * - index of the current child node being visited + * - the number of mustaches contained within its child nodes + * - the list of actions generated by its child nodes + */ + + function TemplateVisitor() { + this.frameStack = []; + this.actions = []; + this.programDepth = -1; + } + + // Traversal methods + + TemplateVisitor.prototype.visit = function (node) { + this[node.type](node); + }; + + TemplateVisitor.prototype.Program = function (program) { + this.programDepth++; + + var parentFrame = this.getCurrentFrame(); + var programFrame = this.pushFrame(); + + programFrame.parentNode = program; + programFrame.children = program.body; + programFrame.childCount = program.body.length; + programFrame.blankChildTextNodes = []; + programFrame.actions.push(['endProgram', [program, this.programDepth]]); + + for (var i = program.body.length - 1; i >= 0; i--) { + programFrame.childIndex = i; + this.visit(program.body[i]); + } + + programFrame.actions.push(['startProgram', [program, programFrame.childTemplateCount, programFrame.blankChildTextNodes.reverse()]]); + this.popFrame(); + + this.programDepth--; + + // Push the completed template into the global actions list + if (parentFrame) { + parentFrame.childTemplateCount++; + } + push.apply(this.actions, programFrame.actions.reverse()); + }; + + TemplateVisitor.prototype.ElementNode = function (element) { + var parentFrame = this.getCurrentFrame(); + var elementFrame = this.pushFrame(); + + elementFrame.parentNode = element; + elementFrame.children = element.children; + elementFrame.childCount = element.children.length; + elementFrame.mustacheCount += element.modifiers.length; + elementFrame.blankChildTextNodes = []; + + var actionArgs = [element, parentFrame.childIndex, parentFrame.childCount]; + + elementFrame.actions.push(['closeElement', actionArgs]); + + for (var i = element.attributes.length - 1; i >= 0; i--) { + this.visit(element.attributes[i]); + } + + for (i = element.children.length - 1; i >= 0; i--) { + elementFrame.childIndex = i; + this.visit(element.children[i]); + } + + elementFrame.actions.push(['openElement', actionArgs.concat([elementFrame.mustacheCount, elementFrame.blankChildTextNodes.reverse()])]); + this.popFrame(); + + // Propagate the element's frame state to the parent frame + if (elementFrame.mustacheCount > 0) { + parentFrame.mustacheCount++; + } + parentFrame.childTemplateCount += elementFrame.childTemplateCount; + push.apply(parentFrame.actions, elementFrame.actions); + }; + + TemplateVisitor.prototype.AttrNode = function (attr) { + if (attr.value.type !== 'TextNode') { + this.getCurrentFrame().mustacheCount++; + } + }; + + TemplateVisitor.prototype.TextNode = function (text) { + var frame = this.getCurrentFrame(); + if (text.chars === '') { + frame.blankChildTextNodes.push(domIndexOf(frame.children, text)); + } + frame.actions.push(['text', [text, frame.childIndex, frame.childCount]]); + }; + + TemplateVisitor.prototype.BlockStatement = function (node) { + var frame = this.getCurrentFrame(); + + frame.mustacheCount++; + frame.actions.push(['block', [node, frame.childIndex, frame.childCount]]); + + if (node.inverse) { + this.visit(node.inverse); + } + if (node.program) { + this.visit(node.program); + } + }; + + TemplateVisitor.prototype.ComponentNode = function (node) { + var frame = this.getCurrentFrame(); + + frame.mustacheCount++; + frame.actions.push(['component', [node, frame.childIndex, frame.childCount]]); + + if (node.program) { + this.visit(node.program); + } + }; + + TemplateVisitor.prototype.PartialStatement = function (node) { + var frame = this.getCurrentFrame(); + frame.mustacheCount++; + frame.actions.push(['mustache', [node, frame.childIndex, frame.childCount]]); + }; + + TemplateVisitor.prototype.CommentStatement = function (text) { + var frame = this.getCurrentFrame(); + frame.actions.push(['comment', [text, frame.childIndex, frame.childCount]]); + }; + + TemplateVisitor.prototype.MustacheStatement = function (mustache) { + var frame = this.getCurrentFrame(); + frame.mustacheCount++; + frame.actions.push(['mustache', [mustache, frame.childIndex, frame.childCount]]); + }; + + // Frame helpers + + TemplateVisitor.prototype.getCurrentFrame = function () { + return this.frameStack[this.frameStack.length - 1]; + }; + + TemplateVisitor.prototype.pushFrame = function () { + var frame = new Frame(); + this.frameStack.push(frame); + return frame; + }; + + TemplateVisitor.prototype.popFrame = function () { + return this.frameStack.pop(); + }; + + exports.default = TemplateVisitor; + + // Returns the index of `domNode` in the `nodes` array, skipping + // over any nodes which do not represent DOM nodes. + function domIndexOf(nodes, domNode) { + var index = -1; + + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + + if (node.type !== 'TextNode' && node.type !== 'ElementNode') { + continue; + } else { + index++; + } + + if (node === domNode) { + return index; + } + } + + return -1; + } +}); +enifed("htmlbars-compiler/utils", ["exports"], function (exports) { + "use strict"; + + exports.processOpcodes = processOpcodes; + + function processOpcodes(compiler, opcodes) { + for (var i = 0, l = opcodes.length; i < l; i++) { + var method = opcodes[i][0]; + var params = opcodes[i][1]; + if (params) { + compiler[method].apply(compiler, params); + } else { + compiler[method].call(compiler); + } + } + } +}); +enifed("htmlbars-compiler", ["exports", "htmlbars-compiler/compiler"], function (exports, _htmlbarsCompilerCompiler) { + "use strict"; + + exports.compile = _htmlbarsCompilerCompiler.compile; + exports.compileSpec = _htmlbarsCompilerCompiler.compileSpec; + exports.template = _htmlbarsCompilerCompiler.template; +}); +enifed('htmlbars-runtime/expression-visitor', ['exports'], function (exports) { + /** + # Expression Nodes: + + These nodes are not directly responsible for any part of the DOM, but are + eventually passed to a Statement Node. + + * get + * subexpr + * concat + */ + + 'use strict'; + + exports.acceptParams = acceptParams; + exports.acceptHash = acceptHash; + + function acceptParams(nodes, env, scope) { + var array = []; + + for (var i = 0, l = nodes.length; i < l; i++) { + array.push(acceptExpression(nodes[i], env, scope).value); + } + + return array; + } + + function acceptHash(pairs, env, scope) { + var object = {}; + + for (var i = 0, l = pairs.length; i < l; i += 2) { + var key = pairs[i]; + var value = pairs[i + 1]; + object[key] = acceptExpression(value, env, scope).value; + } + + return object; + } + + function acceptExpression(node, env, scope) { + var ret = { value: null }; + + // Primitive literals are unambiguously non-array representations of + // themselves. + if (typeof node !== 'object' || node === null) { + ret.value = node; + } else { + ret.value = evaluateNode(node, env, scope); + } + + return ret; + } + + function evaluateNode(node, env, scope) { + switch (node[0]) { + // can be used by manualElement + case 'value': + return node[1]; + case 'get': + return evaluateGet(node, env, scope); + case 'subexpr': + return evaluateSubexpr(node, env, scope); + case 'concat': + return evaluateConcat(node, env, scope); + } + } + + function evaluateGet(node, env, scope) { + var path = node[1]; + + return env.hooks.get(env, scope, path); + } + + function evaluateSubexpr(node, env, scope) { + var path = node[1]; + var rawParams = node[2]; + var rawHash = node[3]; + + var params = acceptParams(rawParams, env, scope); + var hash = acceptHash(rawHash, env, scope); + + return env.hooks.subexpr(env, scope, path, params, hash); + } + + function evaluateConcat(node, env, scope) { + var rawParts = node[1]; + + var parts = acceptParams(rawParts, env, scope); + + return env.hooks.concat(env, parts); + } +}); +enifed("htmlbars-runtime/hooks", ["exports", "htmlbars-runtime/render", "morph-range/morph-list", "htmlbars-util/object-utils", "htmlbars-util/morph-utils", "htmlbars-util/template-utils"], function (exports, _htmlbarsRuntimeRender, _morphRangeMorphList, _htmlbarsUtilObjectUtils, _htmlbarsUtilMorphUtils, _htmlbarsUtilTemplateUtils) { + "use strict"; + + exports.wrap = wrap; + exports.wrapForHelper = wrapForHelper; + exports.createScope = createScope; + exports.createFreshScope = createFreshScope; + exports.bindShadowScope = bindShadowScope; + exports.createChildScope = createChildScope; + exports.bindSelf = bindSelf; + exports.updateSelf = updateSelf; + exports.bindLocal = bindLocal; + exports.updateLocal = updateLocal; + exports.bindBlock = bindBlock; + exports.block = block; + exports.continueBlock = continueBlock; + exports.hostBlock = hostBlock; + exports.handleRedirect = handleRedirect; + exports.handleKeyword = handleKeyword; + exports.linkRenderNode = linkRenderNode; + exports.inline = inline; + exports.keyword = keyword; + exports.invokeHelper = invokeHelper; + exports.classify = classify; + exports.partial = partial; + exports.range = range; + exports.element = element; + exports.attribute = attribute; + exports.subexpr = subexpr; + exports.get = get; + exports.getRoot = getRoot; + exports.getBlock = getBlock; + exports.getChild = getChild; + exports.getValue = getValue; + exports.getCellOrValue = getCellOrValue; + exports.component = component; + exports.concat = concat; + exports.hasHelper = hasHelper; + exports.lookupHelper = lookupHelper; + exports.bindScope = bindScope; + exports.updateScope = updateScope; + + /** + HTMLBars delegates the runtime behavior of a template to + hooks provided by the host environment. These hooks explain + the lexical environment of a Handlebars template, the internal + representation of references, and the interaction between an + HTMLBars template and the DOM it is managing. + + While HTMLBars host hooks have access to all of this internal + machinery, templates and helpers have access to the abstraction + provided by the host hooks. + + ## The Lexical Environment + + The default lexical environment of an HTMLBars template includes: + + * Any local variables, provided by *block arguments* + * The current value of `self` + + ## Simple Nesting + + Let's look at a simple template with a nested block: + + ```hbs +

    {{title}}

    + + {{#if author}} + + {{/if}} + ``` + + In this case, the lexical environment at the top-level of the + template does not change inside of the `if` block. This is + achieved via an implementation of `if` that looks like this: + + ```js + registerHelper('if', function(params) { + if (!!params[0]) { + return this.yield(); + } + }); + ``` + + A call to `this.yield` invokes the child template using the + current lexical environment. + + ## Block Arguments + + It is possible for nested blocks to introduce new local + variables: + + ```hbs + {{#count-calls as |i|}} +

    {{title}}

    +

    Called {{i}} times

    + {{/count}} + ``` + + In this example, the child block inherits its surrounding + lexical environment, but augments it with a single new + variable binding. + + The implementation of `count-calls` supplies the value of + `i`, but does not otherwise alter the environment: + + ```js + var count = 0; + registerHelper('count-calls', function() { + return this.yield([ ++count ]); + }); + ``` + */ + + function wrap(template) { + if (template === null) { + return null; + } + + return { + meta: template.meta, + arity: template.arity, + raw: template, + render: function (self, env, options, blockArguments) { + var scope = env.hooks.createFreshScope(); + + var contextualElement = options && options.contextualElement; + var renderOptions = new _htmlbarsRuntimeRender.RenderOptions(null, self, blockArguments, contextualElement); + + return _htmlbarsRuntimeRender.default(template, env, scope, renderOptions); + } + }; + } + + function wrapForHelper(template, env, scope, morph, renderState, visitor) { + if (!template) { + return {}; + } + + var yieldArgs = yieldTemplate(template, env, scope, morph, renderState, visitor); + + return { + meta: template.meta, + arity: template.arity, + 'yield': yieldArgs, // quoted since it's a reserved word, see issue #420 + yieldItem: yieldItem(template, env, scope, morph, renderState, visitor), + raw: template, + + render: function (self, blockArguments) { + yieldArgs(blockArguments, self); + } + }; + } + + // Called by a user-land helper to render a template. + function yieldTemplate(template, env, parentScope, morph, renderState, visitor) { + return function (blockArguments, self) { + // Render state is used to track the progress of the helper (since it + // may call into us multiple times). As the user-land helper calls + // into library code, we track what needs to be cleaned up after the + // helper has returned. + // + // Here, we remember that a template has been yielded and so we do not + // need to remove the previous template. (If no template is yielded + // this render by the helper, we assume nothing should be shown and + // remove any previous rendered templates.) + renderState.morphToClear = null; + + // In this conditional is true, it means that on the previous rendering pass + // the helper yielded multiple items via `yieldItem()`, but this time they + // are yielding a single template. In that case, we mark the morph list for + // cleanup so it is removed from the DOM. + if (morph.morphList) { + _htmlbarsUtilTemplateUtils.clearMorphList(morph.morphList, morph, env); + renderState.morphListToClear = null; + } + + var scope = parentScope; + + if (morph.lastYielded && isStableTemplate(template, morph.lastYielded)) { + return morph.lastResult.revalidateWith(env, undefined, self, blockArguments, visitor); + } + + // Check to make sure that we actually **need** a new scope, and can't + // share the parent scope. Note that we need to move this check into + // a host hook, because the host's notion of scope may require a new + // scope in more cases than the ones we can determine statically. + if (self !== undefined || parentScope === null || template.arity) { + scope = env.hooks.createChildScope(parentScope); + } + + morph.lastYielded = { self: self, template: template, shadowTemplate: null }; + + // Render the template that was selected by the helper + var renderOptions = new _htmlbarsRuntimeRender.RenderOptions(morph, self, blockArguments); + _htmlbarsRuntimeRender.default(template, env, scope, renderOptions); + }; + } + + function yieldItem(template, env, parentScope, morph, renderState, visitor) { + // Initialize state that tracks multiple items being + // yielded in. + var currentMorph = null; + + // Candidate morphs for deletion. + var candidates = {}; + + // Reuse existing MorphList if this is not a first-time + // render. + var morphList = morph.morphList; + if (morphList) { + currentMorph = morphList.firstChildMorph; + } + + // Advances the currentMorph pointer to the morph in the previously-rendered + // list that matches the yielded key. While doing so, it marks any morphs + // that it advances past as candidates for deletion. Assuming those morphs + // are not yielded in later, they will be removed in the prune step during + // cleanup. + // Note that this helper function assumes that the morph being seeked to is + // guaranteed to exist in the previous MorphList; if this is called and the + // morph does not exist, it will result in an infinite loop + function advanceToKey(key) { + var seek = currentMorph; + + while (seek.key !== key) { + candidates[seek.key] = seek; + seek = seek.nextMorph; + } + + currentMorph = seek.nextMorph; + return seek; + } + + return function (_key, blockArguments, self) { + if (typeof _key !== 'string') { + throw new Error("You must provide a string key when calling `yieldItem`; you provided " + _key); + } + + // At least one item has been yielded, so we do not wholesale + // clear the last MorphList but instead apply a prune operation. + renderState.morphListToClear = null; + morph.lastYielded = null; + + var morphList, morphMap; + + if (!morph.morphList) { + morph.morphList = new _morphRangeMorphList.default(); + morph.morphMap = {}; + morph.setMorphList(morph.morphList); + } + + morphList = morph.morphList; + morphMap = morph.morphMap; + + // A map of morphs that have been yielded in on this + // rendering pass. Any morphs that do not make it into + // this list will be pruned from the MorphList during the cleanup + // process. + var handledMorphs = renderState.handledMorphs; + var key = undefined; + + if (_key in handledMorphs) { + // In this branch we are dealing with a duplicate key. The strategy + // is to take the original key and append a counter to it that is + // incremented every time the key is reused. In order to greatly + // reduce the chance of colliding with another valid key we also add + // an extra string "--z8mS2hvDW0A--" to the new key. + var collisions = renderState.collisions; + if (collisions === undefined) { + collisions = renderState.collisions = {}; + } + var count = collisions[_key] | 0; + collisions[_key] = ++count; + + key = _key + '--z8mS2hvDW0A--' + count; + } else { + key = _key; + } + + if (currentMorph && currentMorph.key === key) { + yieldTemplate(template, env, parentScope, currentMorph, renderState, visitor)(blockArguments, self); + currentMorph = currentMorph.nextMorph; + handledMorphs[key] = currentMorph; + } else if (morphMap[key] !== undefined) { + var foundMorph = morphMap[key]; + + if (key in candidates) { + // If we already saw this morph, move it forward to this position + morphList.insertBeforeMorph(foundMorph, currentMorph); + } else { + // Otherwise, move the pointer forward to the existing morph for this key + advanceToKey(key); + } + + handledMorphs[foundMorph.key] = foundMorph; + yieldTemplate(template, env, parentScope, foundMorph, renderState, visitor)(blockArguments, self); + } else { + var childMorph = _htmlbarsRuntimeRender.createChildMorph(env.dom, morph); + childMorph.key = key; + morphMap[key] = handledMorphs[key] = childMorph; + morphList.insertBeforeMorph(childMorph, currentMorph); + yieldTemplate(template, env, parentScope, childMorph, renderState, visitor)(blockArguments, self); + } + + renderState.morphListToPrune = morphList; + morph.childNodes = null; + }; + } + + function isStableTemplate(template, lastYielded) { + return !lastYielded.shadowTemplate && template === lastYielded.template; + } + function optionsFor(template, inverse, env, scope, morph, visitor) { + // If there was a template yielded last time, set morphToClear so it will be cleared + // if no template is yielded on this render. + var morphToClear = morph.lastResult ? morph : null; + var renderState = new _htmlbarsUtilTemplateUtils.RenderState(morphToClear, morph.morphList || null); + + return { + templates: { + template: wrapForHelper(template, env, scope, morph, renderState, visitor), + inverse: wrapForHelper(inverse, env, scope, morph, renderState, visitor) + }, + renderState: renderState + }; + } + + function thisFor(options) { + return { + arity: options.template.arity, + 'yield': options.template.yield, // quoted since it's a reserved word, see issue #420 + yieldItem: options.template.yieldItem, + yieldIn: options.template.yieldIn + }; + } + + /** + Host Hook: createScope + + @param {Scope?} parentScope + @return Scope + + Corresponds to entering a new HTMLBars block. + + This hook is invoked when a block is entered with + a new `self` or additional local variables. + + When invoked for a top-level template, the + `parentScope` is `null`, and this hook should return + a fresh Scope. + + When invoked for a child template, the `parentScope` + is the scope for the parent environment. + + Note that the `Scope` is an opaque value that is + passed to other host hooks. For example, the `get` + hook uses the scope to retrieve a value for a given + scope and variable name. + */ + + function createScope(env, parentScope) { + if (parentScope) { + return env.hooks.createChildScope(parentScope); + } else { + return env.hooks.createFreshScope(); + } + } + + function createFreshScope() { + // because `in` checks have unpredictable performance, keep a + // separate dictionary to track whether a local was bound. + // See `bindLocal` for more information. + return { self: null, blocks: {}, locals: {}, localPresent: {} }; + } + + /** + Host Hook: bindShadowScope + + @param {Scope?} parentScope + @return Scope + + Corresponds to rendering a new template into an existing + render tree, but with a new top-level lexical scope. This + template is called the "shadow root". + + If a shadow template invokes `{{yield}}`, it will render + the block provided to the shadow root in the original + lexical scope. + + ```hbs + {{!-- post template --}} +

    {{props.title}}

    + {{yield}} + + {{!-- blog template --}} + {{#post title="Hello world"}} +

    by {{byline}}

    +
    This is my first post
    + {{/post}} + + {{#post title="Goodbye world"}} +

    by {{byline}}

    +
    This is my last post
    + {{/post}} + ``` + + ```js + helpers.post = function(params, hash, options) { + options.template.yieldIn(postTemplate, { props: hash }); + }; + + blog.render({ byline: "Yehuda Katz" }); + ``` + + Produces: + + ```html +

    Hello world

    +

    by Yehuda Katz

    +
    This is my first post
    + +

    Goodbye world

    +

    by Yehuda Katz

    +
    This is my last post
    + ``` + + In short, `yieldIn` creates a new top-level scope for the + provided template and renders it, making the original block + available to `{{yield}}` in that template. + */ + + function bindShadowScope(env /*, parentScope, shadowScope */) { + return env.hooks.createFreshScope(); + } + + function createChildScope(parent) { + var scope = Object.create(parent); + scope.locals = Object.create(parent.locals); + scope.localPresent = Object.create(parent.localPresent); + scope.blocks = Object.create(parent.blocks); + return scope; + } + + /** + Host Hook: bindSelf + + @param {Scope} scope + @param {any} self + + Corresponds to entering a template. + + This hook is invoked when the `self` value for a scope is ready to be bound. + + The host must ensure that child scopes reflect the change to the `self` in + future calls to the `get` hook. + */ + + function bindSelf(env, scope, self) { + scope.self = self; + } + + function updateSelf(env, scope, self) { + env.hooks.bindSelf(env, scope, self); + } + + /** + Host Hook: bindLocal + + @param {Environment} env + @param {Scope} scope + @param {String} name + @param {any} value + + Corresponds to entering a template with block arguments. + + This hook is invoked when a local variable for a scope has been provided. + + The host must ensure that child scopes reflect the change in future calls + to the `get` hook. + */ + + function bindLocal(env, scope, name, value) { + scope.localPresent[name] = true; + scope.locals[name] = value; + } + + function updateLocal(env, scope, name, value) { + env.hooks.bindLocal(env, scope, name, value); + } + + /** + Host Hook: bindBlock + + @param {Environment} env + @param {Scope} scope + @param {Function} block + + Corresponds to entering a shadow template that was invoked by a block helper with + `yieldIn`. + + This hook is invoked with an opaque block that will be passed along + to the shadow template, and inserted into the shadow template when + `{{yield}}` is used. Optionally provide a non-default block name + that can be targeted by `{{yield to=blockName}}`. + */ + + function bindBlock(env, scope, block) { + var name = arguments.length <= 3 || arguments[3] === undefined ? 'default' : arguments[3]; + + scope.blocks[name] = block; + } + + /** + Host Hook: block + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {String} path + @param {Array} params + @param {Object} hash + @param {Block} block + @param {Block} elseBlock + + Corresponds to: + + ```hbs + {{#helper param1 param2 key1=val1 key2=val2}} + {{!-- child template --}} + {{/helper}} + ``` + + This host hook is a workhorse of the system. It is invoked + whenever a block is encountered, and is responsible for + resolving the helper to call, and then invoke it. + + The helper should be invoked with: + + - `{Array} params`: the parameters passed to the helper + in the template. + - `{Object} hash`: an object containing the keys and values passed + in the hash position in the template. + + The values in `params` and `hash` will already be resolved + through a previous call to the `get` host hook. + + The helper should be invoked with a `this` value that is + an object with one field: + + `{Function} yield`: when invoked, this function executes the + block with the current scope. It takes an optional array of + block parameters. If block parameters are supplied, HTMLBars + will invoke the `bindLocal` host hook to bind the supplied + values to the block arguments provided by the template. + + In general, the default implementation of `block` should work + for most host environments. It delegates to other host hooks + where appropriate, and properly invokes the helper with the + appropriate arguments. + */ + + function block(morph, env, scope, path, params, hash, template, inverse, visitor) { + if (handleRedirect(morph, env, scope, path, params, hash, template, inverse, visitor)) { + return; + } + + continueBlock(morph, env, scope, path, params, hash, template, inverse, visitor); + } + + function continueBlock(morph, env, scope, path, params, hash, template, inverse, visitor) { + hostBlock(morph, env, scope, template, inverse, null, visitor, function (options) { + var helper = env.hooks.lookupHelper(env, scope, path); + return env.hooks.invokeHelper(morph, env, scope, visitor, params, hash, helper, options.templates, thisFor(options.templates)); + }); + } + + function hostBlock(morph, env, scope, template, inverse, shadowOptions, visitor, callback) { + var options = optionsFor(template, inverse, env, scope, morph, visitor); + _htmlbarsUtilTemplateUtils.renderAndCleanup(morph, env, options, shadowOptions, callback); + } + + function handleRedirect(morph, env, scope, path, params, hash, template, inverse, visitor) { + if (!path) { + return false; + } + + var redirect = env.hooks.classify(env, scope, path); + if (redirect) { + switch (redirect) { + case 'component': + env.hooks.component(morph, env, scope, path, params, hash, { default: template, inverse: inverse }, visitor);break; + case 'inline': + env.hooks.inline(morph, env, scope, path, params, hash, visitor);break; + case 'block': + env.hooks.block(morph, env, scope, path, params, hash, template, inverse, visitor);break; + default: + throw new Error("Internal HTMLBars redirection to " + redirect + " not supported"); + } + return true; + } + + if (handleKeyword(path, morph, env, scope, params, hash, template, inverse, visitor)) { + return true; + } + + return false; + } + + function handleKeyword(path, morph, env, scope, params, hash, template, inverse, visitor) { + var keyword = env.hooks.keywords[path]; + if (!keyword) { + return false; + } + + if (typeof keyword === 'function') { + return keyword(morph, env, scope, params, hash, template, inverse, visitor); + } + + if (keyword.willRender) { + keyword.willRender(morph, env); + } + + var lastState, newState; + if (keyword.setupState) { + lastState = _htmlbarsUtilObjectUtils.shallowCopy(morph.getState()); + newState = morph.setState(keyword.setupState(lastState, env, scope, params, hash)); + } + + if (keyword.childEnv) { + // Build the child environment... + env = keyword.childEnv(morph.getState(), env); + + // ..then save off the child env builder on the render node. If the render + // node tree is re-rendered and this node is not dirty, the child env + // builder will still be invoked so that child dirty render nodes still get + // the correct child env. + morph.buildChildEnv = keyword.childEnv; + } + + var firstTime = !morph.rendered; + + if (keyword.isEmpty) { + var isEmpty = keyword.isEmpty(morph.getState(), env, scope, params, hash); + + if (isEmpty) { + if (!firstTime) { + _htmlbarsUtilTemplateUtils.clearMorph(morph, env, false); + } + return true; + } + } + + if (firstTime) { + if (keyword.render) { + keyword.render(morph, env, scope, params, hash, template, inverse, visitor); + } + morph.rendered = true; + return true; + } + + var isStable; + if (keyword.isStable) { + isStable = keyword.isStable(lastState, newState); + } else { + isStable = stableState(lastState, newState); + } + + if (isStable) { + if (keyword.rerender) { + var newEnv = keyword.rerender(morph, env, scope, params, hash, template, inverse, visitor); + env = newEnv || env; + } + _htmlbarsUtilMorphUtils.validateChildMorphs(env, morph, visitor); + return true; + } else { + _htmlbarsUtilTemplateUtils.clearMorph(morph, env, false); + } + + // If the node is unstable, re-render from scratch + if (keyword.render) { + keyword.render(morph, env, scope, params, hash, template, inverse, visitor); + morph.rendered = true; + return true; + } + } + + function stableState(oldState, newState) { + if (_htmlbarsUtilObjectUtils.keyLength(oldState) !== _htmlbarsUtilObjectUtils.keyLength(newState)) { + return false; + } + + for (var prop in oldState) { + if (oldState[prop] !== newState[prop]) { + return false; + } + } + + return true; + } + + function linkRenderNode() /* morph, env, scope, params, hash */{ + return; + } + + /** + Host Hook: inline + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {String} path + @param {Array} params + @param {Hash} hash + + Corresponds to: + + ```hbs + {{helper param1 param2 key1=val1 key2=val2}} + ``` + + This host hook is similar to the `block` host hook, but it + invokes helpers that do not supply an attached block. + + Like the `block` hook, the helper should be invoked with: + + - `{Array} params`: the parameters passed to the helper + in the template. + - `{Object} hash`: an object containing the keys and values passed + in the hash position in the template. + + The values in `params` and `hash` will already be resolved + through a previous call to the `get` host hook. + + In general, the default implementation of `inline` should work + for most host environments. It delegates to other host hooks + where appropriate, and properly invokes the helper with the + appropriate arguments. + + The default implementation of `inline` also makes `partial` + a keyword. Instead of invoking a helper named `partial`, + it invokes the `partial` host hook. + */ + + function inline(morph, env, scope, path, params, hash, visitor) { + if (handleRedirect(morph, env, scope, path, params, hash, null, null, visitor)) { + return; + } + + var value = undefined, + hasValue = undefined; + if (morph.linkedResult) { + value = env.hooks.getValue(morph.linkedResult); + hasValue = true; + } else { + var options = optionsFor(null, null, env, scope, morph); + + var helper = env.hooks.lookupHelper(env, scope, path); + var result = env.hooks.invokeHelper(morph, env, scope, visitor, params, hash, helper, options.templates, thisFor(options.templates)); + + if (result && result.link) { + morph.linkedResult = result.value; + _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@content-helper', [morph.linkedResult], null); + } + + if (result && 'value' in result) { + value = env.hooks.getValue(result.value); + hasValue = true; + } + } + + if (hasValue) { + if (morph.lastValue !== value) { + morph.setContent(value); + } + morph.lastValue = value; + } + } + + function keyword(path, morph, env, scope, params, hash, template, inverse, visitor) { + handleKeyword(path, morph, env, scope, params, hash, template, inverse, visitor); + } + + function invokeHelper(morph, env, scope, visitor, _params, _hash, helper, templates, context) { + var params = normalizeArray(env, _params); + var hash = normalizeObject(env, _hash); + return { value: helper.call(context, params, hash, templates) }; + } + + function normalizeArray(env, array) { + var out = new Array(array.length); + + for (var i = 0, l = array.length; i < l; i++) { + out[i] = env.hooks.getCellOrValue(array[i]); + } + + return out; + } + + function normalizeObject(env, object) { + var out = {}; + + for (var prop in object) { + out[prop] = env.hooks.getCellOrValue(object[prop]); + } + + return out; + } + + function classify() /* env, scope, path */{ + return null; + } + + var keywords = { + partial: function (morph, env, scope, params) { + var value = env.hooks.partial(morph, env, scope, params[0]); + morph.setContent(value); + return true; + }, + + // quoted since it's a reserved word, see issue #420 + 'yield': function (morph, env, scope, params, hash, template, inverse, visitor) { + // the current scope is provided purely for the creation of shadow + // scopes; it should not be provided to user code. + + var to = env.hooks.getValue(hash.to) || 'default'; + var block = env.hooks.getBlock(scope, to); + + if (block) { + block.invoke(env, params, hash.self, morph, scope, visitor); + } + return true; + }, + + hasBlock: function (morph, env, scope, params) { + var name = env.hooks.getValue(params[0]) || 'default'; + return !!env.hooks.getBlock(scope, name); + }, + + hasBlockParams: function (morph, env, scope, params) { + var name = env.hooks.getValue(params[0]) || 'default'; + var block = env.hooks.getBlock(scope, name); + return !!(block && block.arity); + } + + }; + + exports.keywords = keywords; + /** + Host Hook: partial + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {String} path + + Corresponds to: + + ```hbs + {{partial "location"}} + ``` + + This host hook is invoked by the default implementation of + the `inline` hook. This makes `partial` a keyword in an + HTMLBars environment using the default `inline` host hook. + + It is implemented as a host hook so that it can retrieve + the named partial out of the `Environment`. Helpers, in + contrast, only have access to the values passed in to them, + and not to the ambient lexical environment. + + The host hook should invoke the referenced partial with + the ambient `self`. + */ + + function partial(renderNode, env, scope, path) { + var template = env.partials[path]; + return template.render(scope.self, env, {}).fragment; + } + + /** + Host hook: range + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {any} value + + Corresponds to: + + ```hbs + {{content}} + {{{unescaped}}} + ``` + + This hook is responsible for updating a render node + that represents a range of content with a value. + */ + + function range(morph, env, scope, path, value, visitor) { + if (handleRedirect(morph, env, scope, path, [], {}, null, null, visitor)) { + return; + } + + value = env.hooks.getValue(value); + + if (morph.lastValue !== value) { + morph.setContent(value); + } + + morph.lastValue = value; + } + + /** + Host hook: element + + @param {RenderNode} renderNode + @param {Environment} env + @param {Scope} scope + @param {String} path + @param {Array} params + @param {Hash} hash + + Corresponds to: + + ```hbs +
    + ``` + + This hook is responsible for invoking a helper that + modifies an element. + + Its purpose is largely legacy support for awkward + idioms that became common when using the string-based + Handlebars engine. + + Most of the uses of the `element` hook are expected + to be superseded by component syntax and the + `attribute` hook. + */ + + function element(morph, env, scope, path, params, hash, visitor) { + if (handleRedirect(morph, env, scope, path, params, hash, null, null, visitor)) { + return; + } + + var helper = env.hooks.lookupHelper(env, scope, path); + if (helper) { + env.hooks.invokeHelper(null, env, scope, null, params, hash, helper, { element: morph.element }); + } + } + + /** + Host hook: attribute + + @param {RenderNode} renderNode + @param {Environment} env + @param {String} name + @param {any} value + + Corresponds to: + + ```hbs +
    + ``` + + This hook is responsible for updating a render node + that represents an element's attribute with a value. + + It receives the name of the attribute as well as an + already-resolved value, and should update the render + node with the value if appropriate. + */ + + function attribute(morph, env, scope, name, value) { + value = env.hooks.getValue(value); + + if (morph.lastValue !== value) { + morph.setContent(value); + } + + morph.lastValue = value; + } + + function subexpr(env, scope, helperName, params, hash) { + var helper = env.hooks.lookupHelper(env, scope, helperName); + var result = env.hooks.invokeHelper(null, env, scope, null, params, hash, helper, {}); + if (result && 'value' in result) { + return env.hooks.getValue(result.value); + } + } + + /** + Host Hook: get + + @param {Environment} env + @param {Scope} scope + @param {String} path + + Corresponds to: + + ```hbs + {{foo.bar}} + ^ + + {{helper foo.bar key=value}} + ^ ^ + ``` + + This hook is the "leaf" hook of the system. It is used to + resolve a path relative to the current scope. + */ + + function get(env, scope, path) { + if (path === '') { + return scope.self; + } + + var keys = path.split('.'); + var value = env.hooks.getRoot(scope, keys[0])[0]; + + for (var i = 1; i < keys.length; i++) { + if (value) { + value = env.hooks.getChild(value, keys[i]); + } else { + break; + } + } + + return value; + } + + function getRoot(scope, key) { + if (scope.localPresent[key]) { + return [scope.locals[key]]; + } else if (scope.self) { + return [scope.self[key]]; + } else { + return [undefined]; + } + } + + function getBlock(scope, key) { + return scope.blocks[key]; + } + + function getChild(value, key) { + return value[key]; + } + + function getValue(reference) { + return reference; + } + + function getCellOrValue(reference) { + return reference; + } + + function component(morph, env, scope, tagName, params, attrs, templates, visitor) { + if (env.hooks.hasHelper(env, scope, tagName)) { + return env.hooks.block(morph, env, scope, tagName, params, attrs, templates.default, templates.inverse, visitor); + } + + componentFallback(morph, env, scope, tagName, attrs, templates.default); + } + + function concat(env, params) { + var value = ""; + for (var i = 0, l = params.length; i < l; i++) { + value += env.hooks.getValue(params[i]); + } + return value; + } + + function componentFallback(morph, env, scope, tagName, attrs, template) { + var element = env.dom.createElement(tagName); + for (var name in attrs) { + element.setAttribute(name, env.hooks.getValue(attrs[name])); + } + var fragment = _htmlbarsRuntimeRender.default(template, env, scope, {}).fragment; + element.appendChild(fragment); + morph.setNode(element); + } + + function hasHelper(env, scope, helperName) { + return env.helpers[helperName] !== undefined; + } + + function lookupHelper(env, scope, helperName) { + return env.helpers[helperName]; + } + + function bindScope() /* env, scope */{ + // this function is used to handle host-specified extensions to scope + // other than `self`, `locals` and `block`. + } + + function updateScope(env, scope) { + env.hooks.bindScope(env, scope); + } + + exports.default = { + // fundamental hooks that you will likely want to override + bindLocal: bindLocal, + bindSelf: bindSelf, + bindScope: bindScope, + classify: classify, + component: component, + concat: concat, + createFreshScope: createFreshScope, + getChild: getChild, + getRoot: getRoot, + getBlock: getBlock, + getValue: getValue, + getCellOrValue: getCellOrValue, + keywords: keywords, + linkRenderNode: linkRenderNode, + partial: partial, + subexpr: subexpr, + + // fundamental hooks with good default behavior + bindBlock: bindBlock, + bindShadowScope: bindShadowScope, + updateLocal: updateLocal, + updateSelf: updateSelf, + updateScope: updateScope, + createChildScope: createChildScope, + hasHelper: hasHelper, + lookupHelper: lookupHelper, + invokeHelper: invokeHelper, + cleanupRenderNode: null, + destroyRenderNode: null, + willCleanupTree: null, + didCleanupTree: null, + willRenderNode: null, + didRenderNode: null, + + // derived hooks + attribute: attribute, + block: block, + createScope: createScope, + element: element, + get: get, + inline: inline, + range: range, + keyword: keyword + }; +}); +enifed("htmlbars-runtime/morph", ["exports", "morph-range"], function (exports, _morphRange) { + "use strict"; + + var guid = 1; + + function HTMLBarsMorph(domHelper, contextualElement) { + this.super$constructor(domHelper, contextualElement); + + this._state = undefined; + this.ownerNode = null; + this.isDirty = false; + this.isSubtreeDirty = false; + this.lastYielded = null; + this.lastResult = null; + this.lastValue = null; + this.buildChildEnv = null; + this.morphList = null; + this.morphMap = null; + this.key = null; + this.linkedParams = null; + this.linkedResult = null; + this.childNodes = null; + this.rendered = false; + this.guid = "range" + guid++; + this.seen = false; + } + + HTMLBarsMorph.empty = function (domHelper, contextualElement) { + var morph = new HTMLBarsMorph(domHelper, contextualElement); + morph.clear(); + return morph; + }; + + HTMLBarsMorph.create = function (domHelper, contextualElement, node) { + var morph = new HTMLBarsMorph(domHelper, contextualElement); + morph.setNode(node); + return morph; + }; + + HTMLBarsMorph.attach = function (domHelper, contextualElement, firstNode, lastNode) { + var morph = new HTMLBarsMorph(domHelper, contextualElement); + morph.setRange(firstNode, lastNode); + return morph; + }; + + var prototype = HTMLBarsMorph.prototype = Object.create(_morphRange.default.prototype); + prototype.constructor = HTMLBarsMorph; + prototype.super$constructor = _morphRange.default; + + prototype.getState = function () { + if (!this._state) { + this._state = {}; + } + + return this._state; + }; + + prototype.setState = function (newState) { + /*jshint -W093 */ + + return this._state = newState; + }; + + exports.default = HTMLBarsMorph; +}); +enifed("htmlbars-runtime/node-visitor", ["exports", "htmlbars-util/morph-utils", "htmlbars-runtime/expression-visitor"], function (exports, _htmlbarsUtilMorphUtils, _htmlbarsRuntimeExpressionVisitor) { + "use strict"; + + /** + Node classification: + + # Primary Statement Nodes: + + These nodes are responsible for a render node that represents a morph-range. + + * block + * inline + * content + * element + * component + + # Leaf Statement Nodes: + + This node is responsible for a render node that represents a morph-attr. + + * attribute + */ + + function linkParamsAndHash(env, scope, morph, path, params, hash) { + if (morph.linkedParams) { + params = morph.linkedParams.params; + hash = morph.linkedParams.hash; + } else { + params = params && _htmlbarsRuntimeExpressionVisitor.acceptParams(params, env, scope); + hash = hash && _htmlbarsRuntimeExpressionVisitor.acceptHash(hash, env, scope); + } + + _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, path, params, hash); + return [params, hash]; + } + + var AlwaysDirtyVisitor = { + + block: function (node, morph, env, scope, template, visitor) { + var path = node[1]; + var params = node[2]; + var hash = node[3]; + var templateId = node[4]; + var inverseId = node[5]; + + var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash); + + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.block(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], templateId === null ? null : template.templates[templateId], inverseId === null ? null : template.templates[inverseId], visitor); + }, + + inline: function (node, morph, env, scope, visitor) { + var path = node[1]; + var params = node[2]; + var hash = node[3]; + + var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash); + + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.inline(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], visitor); + }, + + content: function (node, morph, env, scope, visitor) { + var path = node[1]; + + morph.isDirty = morph.isSubtreeDirty = false; + + if (isHelper(env, scope, path)) { + env.hooks.inline(morph, env, scope, path, [], {}, visitor); + if (morph.linkedResult) { + _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@content-helper', [morph.linkedResult], null); + } + return; + } + + var params = undefined; + if (morph.linkedParams) { + params = morph.linkedParams.params; + } else { + params = [env.hooks.get(env, scope, path)]; + } + + _htmlbarsUtilMorphUtils.linkParams(env, scope, morph, '@range', params, null); + env.hooks.range(morph, env, scope, path, params[0], visitor); + }, + + element: function (node, morph, env, scope, visitor) { + var path = node[1]; + var params = node[2]; + var hash = node[3]; + + var paramsAndHash = linkParamsAndHash(env, scope, morph, path, params, hash); + + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.element(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], visitor); + }, + + attribute: function (node, morph, env, scope) { + var name = node[1]; + var value = node[2]; + + var paramsAndHash = linkParamsAndHash(env, scope, morph, '@attribute', [value], null); + + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.attribute(morph, env, scope, name, paramsAndHash[0][0]); + }, + + component: function (node, morph, env, scope, template, visitor) { + var path = node[1]; + var attrs = node[2]; + var templateId = node[3]; + var inverseId = node[4]; + + var paramsAndHash = linkParamsAndHash(env, scope, morph, path, [], attrs); + var templates = { + default: template.templates[templateId], + inverse: template.templates[inverseId] + }; + + morph.isDirty = morph.isSubtreeDirty = false; + env.hooks.component(morph, env, scope, path, paramsAndHash[0], paramsAndHash[1], templates, visitor); + }, + + attributes: function (node, morph, env, scope, parentMorph, visitor) { + var template = node[1]; + + env.hooks.attributes(morph, env, scope, template, parentMorph, visitor); + } + + }; + + exports.AlwaysDirtyVisitor = AlwaysDirtyVisitor; + exports.default = { + block: function (node, morph, env, scope, template, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.block(node, morph, env, scope, template, visitor); + }); + }, + + inline: function (node, morph, env, scope, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.inline(node, morph, env, scope, visitor); + }); + }, + + content: function (node, morph, env, scope, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.content(node, morph, env, scope, visitor); + }); + }, + + element: function (node, morph, env, scope, template, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.element(node, morph, env, scope, template, visitor); + }); + }, + + attribute: function (node, morph, env, scope, template) { + dirtyCheck(env, morph, null, function () { + AlwaysDirtyVisitor.attribute(node, morph, env, scope, template); + }); + }, + + component: function (node, morph, env, scope, template, visitor) { + dirtyCheck(env, morph, visitor, function (visitor) { + AlwaysDirtyVisitor.component(node, morph, env, scope, template, visitor); + }); + }, + + attributes: function (node, morph, env, scope, parentMorph, visitor) { + AlwaysDirtyVisitor.attributes(node, morph, env, scope, parentMorph, visitor); + } + }; + + function dirtyCheck(_env, morph, visitor, callback) { + var isDirty = morph.isDirty; + var isSubtreeDirty = morph.isSubtreeDirty; + var env = _env; + + if (isSubtreeDirty) { + visitor = AlwaysDirtyVisitor; + } + + if (isDirty || isSubtreeDirty) { + callback(visitor); + } else { + if (morph.buildChildEnv) { + env = morph.buildChildEnv(morph.getState(), env); + } + _htmlbarsUtilMorphUtils.validateChildMorphs(env, morph, visitor); + } + } + + function isHelper(env, scope, path) { + return env.hooks.keywords[path] !== undefined || env.hooks.hasHelper(env, scope, path); + } +}); +enifed("htmlbars-runtime/render", ["exports", "htmlbars-util/morph-utils", "htmlbars-runtime/node-visitor", "htmlbars-runtime/morph", "htmlbars-util/template-utils", "htmlbars-util/void-tag-names"], function (exports, _htmlbarsUtilMorphUtils, _htmlbarsRuntimeNodeVisitor, _htmlbarsRuntimeMorph, _htmlbarsUtilTemplateUtils, _htmlbarsUtilVoidTagNames) { + "use strict"; + + exports.default = render; + exports.RenderOptions = RenderOptions; + exports.manualElement = manualElement; + exports.attachAttributes = attachAttributes; + exports.createChildMorph = createChildMorph; + exports.getCachedFragment = getCachedFragment; + + var svgNamespace = "http://www.w3.org/2000/svg"; + + function render(template, env, scope, options) { + var dom = env.dom; + var contextualElement; + + if (options) { + if (options.renderNode) { + contextualElement = options.renderNode.contextualElement; + } else if (options.contextualElement) { + contextualElement = options.contextualElement; + } + } + + dom.detectNamespace(contextualElement); + + var renderResult = RenderResult.build(env, scope, template, options, contextualElement); + renderResult.render(); + + return renderResult; + } + + function RenderOptions(renderNode, self, blockArguments, contextualElement) { + this.renderNode = renderNode || null; + this.self = self; + this.blockArguments = blockArguments || null; + this.contextualElement = contextualElement || null; + } + + function RenderResult(env, scope, options, rootNode, ownerNode, nodes, fragment, template, shouldSetContent) { + this.root = rootNode; + this.fragment = fragment; + + this.nodes = nodes; + this.template = template; + this.statements = template.statements.slice(); + this.env = env; + this.scope = scope; + this.shouldSetContent = shouldSetContent; + + if (options.self !== undefined) { + this.bindSelf(options.self); + } + if (options.blockArguments !== undefined) { + this.bindLocals(options.blockArguments); + } + + this.initializeNodes(ownerNode); + } + + RenderResult.build = function (env, scope, template, options, contextualElement) { + var dom = env.dom; + var fragment = getCachedFragment(template, env); + var nodes = template.buildRenderNodes(dom, fragment, contextualElement); + + var rootNode, ownerNode, shouldSetContent; + + if (options && options.renderNode) { + rootNode = options.renderNode; + ownerNode = rootNode.ownerNode; + shouldSetContent = true; + } else { + rootNode = dom.createMorph(null, fragment.firstChild, fragment.lastChild, contextualElement); + ownerNode = rootNode; + rootNode.ownerNode = ownerNode; + shouldSetContent = false; + } + + if (rootNode.childNodes) { + _htmlbarsUtilMorphUtils.visitChildren(rootNode.childNodes, function (node) { + _htmlbarsUtilTemplateUtils.clearMorph(node, env, true); + }); + } + + rootNode.childNodes = nodes; + return new RenderResult(env, scope, options, rootNode, ownerNode, nodes, fragment, template, shouldSetContent); + }; + + function manualElement(tagName, attributes, _isEmpty) { + var statements = []; + + for (var key in attributes) { + if (typeof attributes[key] === 'string') { + continue; + } + statements.push(["attribute", key, attributes[key]]); + } + + var isEmpty = _isEmpty || _htmlbarsUtilVoidTagNames.default[tagName]; + + if (!isEmpty) { + statements.push(['content', 'yield']); + } + + var template = { + arity: 0, + cachedFragment: null, + hasRendered: false, + buildFragment: function buildFragment(dom) { + var el0 = dom.createDocumentFragment(); + if (tagName === 'svg') { + dom.setNamespace(svgNamespace); + } + var el1 = dom.createElement(tagName); + + for (var key in attributes) { + if (typeof attributes[key] !== 'string') { + continue; + } + dom.setAttribute(el1, key, attributes[key]); + } + + if (!isEmpty) { + var el2 = dom.createComment(""); + dom.appendChild(el1, el2); + } + + dom.appendChild(el0, el1); + + return el0; + }, + buildRenderNodes: function buildRenderNodes(dom, fragment) { + var element = dom.childAt(fragment, [0]); + var morphs = []; + + for (var key in attributes) { + if (typeof attributes[key] === 'string') { + continue; + } + morphs.push(dom.createAttrMorph(element, key)); + } + + if (!isEmpty) { + morphs.push(dom.createMorphAt(element, 0, 0)); + } + + return morphs; + }, + statements: statements, + locals: [], + templates: [] + }; + + return template; + } + + function attachAttributes(attributes) { + var statements = []; + + for (var key in attributes) { + if (typeof attributes[key] === 'string') { + continue; + } + statements.push(["attribute", key, attributes[key]]); + } + + var template = { + arity: 0, + cachedFragment: null, + hasRendered: false, + buildFragment: function buildFragment(dom) { + var el0 = this.element; + if (el0.namespaceURI === "http://www.w3.org/2000/svg") { + dom.setNamespace(svgNamespace); + } + for (var key in attributes) { + if (typeof attributes[key] !== 'string') { + continue; + } + dom.setAttribute(el0, key, attributes[key]); + } + + return el0; + }, + buildRenderNodes: function buildRenderNodes(dom) { + var element = this.element; + var morphs = []; + + for (var key in attributes) { + if (typeof attributes[key] === 'string') { + continue; + } + morphs.push(dom.createAttrMorph(element, key)); + } + + return morphs; + }, + statements: statements, + locals: [], + templates: [], + element: null + }; + + return template; + } + + RenderResult.prototype.initializeNodes = function (ownerNode) { + var childNodes = this.root.childNodes; + + for (var i = 0, l = childNodes.length; i < l; i++) { + childNodes[i].ownerNode = ownerNode; + } + }; + + RenderResult.prototype.render = function () { + this.root.lastResult = this; + this.root.rendered = true; + this.populateNodes(_htmlbarsRuntimeNodeVisitor.AlwaysDirtyVisitor); + + if (this.shouldSetContent && this.root.setContent) { + this.root.setContent(this.fragment); + } + }; + + RenderResult.prototype.dirty = function () { + _htmlbarsUtilMorphUtils.visitChildren([this.root], function (node) { + node.isDirty = true; + }); + }; + + RenderResult.prototype.revalidate = function (env, self, blockArguments, scope) { + this.revalidateWith(env, scope, self, blockArguments, _htmlbarsRuntimeNodeVisitor.default); + }; + + RenderResult.prototype.rerender = function (env, self, blockArguments, scope) { + this.revalidateWith(env, scope, self, blockArguments, _htmlbarsRuntimeNodeVisitor.AlwaysDirtyVisitor); + }; + + RenderResult.prototype.revalidateWith = function (env, scope, self, blockArguments, visitor) { + if (env !== undefined) { + this.env = env; + } + if (scope !== undefined) { + this.scope = scope; + } + this.updateScope(); + + if (self !== undefined) { + this.updateSelf(self); + } + if (blockArguments !== undefined) { + this.updateLocals(blockArguments); + } + + this.populateNodes(visitor); + }; + + RenderResult.prototype.destroy = function () { + var rootNode = this.root; + _htmlbarsUtilTemplateUtils.clearMorph(rootNode, this.env, true); + }; + + RenderResult.prototype.populateNodes = function (visitor) { + var env = this.env; + var scope = this.scope; + var template = this.template; + var nodes = this.nodes; + var statements = this.statements; + var i, l; + + for (i = 0, l = statements.length; i < l; i++) { + var statement = statements[i]; + var morph = nodes[i]; + + if (env.hooks.willRenderNode) { + env.hooks.willRenderNode(morph, env, scope); + } + + switch (statement[0]) { + case 'block': + visitor.block(statement, morph, env, scope, template, visitor);break; + case 'inline': + visitor.inline(statement, morph, env, scope, visitor);break; + case 'content': + visitor.content(statement, morph, env, scope, visitor);break; + case 'element': + visitor.element(statement, morph, env, scope, template, visitor);break; + case 'attribute': + visitor.attribute(statement, morph, env, scope);break; + case 'component': + visitor.component(statement, morph, env, scope, template, visitor);break; + } + + if (env.hooks.didRenderNode) { + env.hooks.didRenderNode(morph, env, scope); + } + } + }; + + RenderResult.prototype.bindScope = function () { + this.env.hooks.bindScope(this.env, this.scope); + }; + + RenderResult.prototype.updateScope = function () { + this.env.hooks.updateScope(this.env, this.scope); + }; + + RenderResult.prototype.bindSelf = function (self) { + this.env.hooks.bindSelf(this.env, this.scope, self); + }; + + RenderResult.prototype.updateSelf = function (self) { + this.env.hooks.updateSelf(this.env, this.scope, self); + }; + + RenderResult.prototype.bindLocals = function (blockArguments) { + var localNames = this.template.locals; + + for (var i = 0, l = localNames.length; i < l; i++) { + this.env.hooks.bindLocal(this.env, this.scope, localNames[i], blockArguments[i]); + } + }; + + RenderResult.prototype.updateLocals = function (blockArguments) { + var localNames = this.template.locals; + + for (var i = 0, l = localNames.length; i < l; i++) { + this.env.hooks.updateLocal(this.env, this.scope, localNames[i], blockArguments[i]); + } + }; + + function initializeNode(node, owner) { + node.ownerNode = owner; + } + + function createChildMorph(dom, parentMorph, contextualElement) { + var morph = _htmlbarsRuntimeMorph.default.empty(dom, contextualElement || parentMorph.contextualElement); + initializeNode(morph, parentMorph.ownerNode); + return morph; + } + + function getCachedFragment(template, env) { + var dom = env.dom, + fragment; + if (env.useFragmentCache && dom.canClone) { + if (template.cachedFragment === null) { + fragment = template.buildFragment(dom); + if (template.hasRendered) { + template.cachedFragment = fragment; + } else { + template.hasRendered = true; + } + } + if (template.cachedFragment) { + fragment = dom.cloneNode(template.cachedFragment, true); + } + } else if (!fragment) { + fragment = template.buildFragment(dom); + } + + return fragment; + } +}); +enifed('htmlbars-runtime', ['exports', 'htmlbars-runtime/hooks', 'htmlbars-runtime/render', 'htmlbars-util/morph-utils', 'htmlbars-util/template-utils'], function (exports, _htmlbarsRuntimeHooks, _htmlbarsRuntimeRender, _htmlbarsUtilMorphUtils, _htmlbarsUtilTemplateUtils) { + 'use strict'; + + var internal = { + blockFor: _htmlbarsUtilTemplateUtils.blockFor, + manualElement: _htmlbarsRuntimeRender.manualElement, + hostBlock: _htmlbarsRuntimeHooks.hostBlock, + continueBlock: _htmlbarsRuntimeHooks.continueBlock, + hostYieldWithShadowTemplate: _htmlbarsRuntimeHooks.hostYieldWithShadowTemplate, + visitChildren: _htmlbarsUtilMorphUtils.visitChildren, + validateChildMorphs: _htmlbarsUtilMorphUtils.validateChildMorphs, + clearMorph: _htmlbarsUtilTemplateUtils.clearMorph + }; + + exports.hooks = _htmlbarsRuntimeHooks.default; + exports.render = _htmlbarsRuntimeRender.default; + exports.internal = internal; +}); +enifed("htmlbars-syntax/builders", ["exports"], function (exports) { + // Statements + + "use strict"; + + exports.buildMustache = buildMustache; + exports.buildBlock = buildBlock; + exports.buildElementModifier = buildElementModifier; + exports.buildPartial = buildPartial; + exports.buildComment = buildComment; + exports.buildConcat = buildConcat; + exports.buildElement = buildElement; + exports.buildComponent = buildComponent; + exports.buildAttr = buildAttr; + exports.buildText = buildText; + exports.buildSexpr = buildSexpr; + exports.buildPath = buildPath; + exports.buildString = buildString; + exports.buildBoolean = buildBoolean; + exports.buildNumber = buildNumber; + exports.buildNull = buildNull; + exports.buildUndefined = buildUndefined; + exports.buildHash = buildHash; + exports.buildPair = buildPair; + exports.buildProgram = buildProgram; + + function buildMustache(path, params, hash, raw, loc) { + return { + type: "MustacheStatement", + path: buildPath(path), + params: params || [], + hash: hash || buildHash([]), + escaped: !raw, + loc: buildLoc(loc) + }; + } + + function buildBlock(path, params, hash, program, inverse, loc) { + return { + type: "BlockStatement", + path: buildPath(path), + params: params || [], + hash: hash || buildHash([]), + program: program || null, + inverse: inverse || null, + loc: buildLoc(loc) + }; + } + + function buildElementModifier(path, params, hash, loc) { + return { + type: "ElementModifierStatement", + path: buildPath(path), + params: params || [], + hash: hash || buildHash([]), + loc: buildLoc(loc) + }; + } + + function buildPartial(name, params, hash, indent) { + return { + type: "PartialStatement", + name: name, + params: params || [], + hash: hash || buildHash([]), + indent: indent + }; + } + + function buildComment(value) { + return { + type: "CommentStatement", + value: value + }; + } + + function buildConcat(parts) { + return { + type: "ConcatStatement", + parts: parts || [] + }; + } + + // Nodes + + function buildElement(tag, attributes, modifiers, children, loc) { + return { + type: "ElementNode", + tag: tag || "", + attributes: attributes || [], + modifiers: modifiers || [], + children: children || [], + loc: buildLoc(loc) + }; + } + + function buildComponent(tag, attributes, program, loc) { + return { + type: "ComponentNode", + tag: tag, + attributes: attributes, + program: program, + loc: buildLoc(loc), + + // this should be true only if this component node is guaranteed + // to produce start and end points that can never change after the + // initial render, regardless of changes to dynamic inputs. If + // a component represents a "fragment" (any number of top-level nodes), + // this will usually not be true. + isStatic: false + }; + } + + function buildAttr(name, value) { + return { + type: "AttrNode", + name: name, + value: value + }; + } + + function buildText(chars, loc) { + return { + type: "TextNode", + chars: chars || "", + loc: buildLoc(loc) + }; + } + + // Expressions + + function buildSexpr(path, params, hash) { + return { + type: "SubExpression", + path: buildPath(path), + params: params || [], + hash: hash || buildHash([]) + }; + } + + function buildPath(original) { + if (typeof original === 'string') { + return { + type: "PathExpression", + original: original, + parts: original.split('.') + }; + } else { + return original; + } + } + + function buildString(value) { + return { + type: "StringLiteral", + value: value, + original: value + }; + } + + function buildBoolean(value) { + return { + type: "BooleanLiteral", + value: value, + original: value + }; + } + + function buildNumber(value) { + return { + type: "NumberLiteral", + value: value, + original: value + }; + } + + function buildNull() { + return { + type: "NullLiteral", + value: null, + original: null + }; + } + + function buildUndefined() { + return { + type: "UndefinedLiteral", + value: undefined, + original: undefined + }; + } + + // Miscellaneous + + function buildHash(pairs) { + return { + type: "Hash", + pairs: pairs || [] + }; + } + + function buildPair(key, value) { + return { + type: "HashPair", + key: key, + value: value + }; + } + + function buildProgram(body, blockParams, loc) { + return { + type: "Program", + body: body || [], + blockParams: blockParams || [], + loc: buildLoc(loc) + }; + } + + function buildSource(source) { + return source || null; + } + + function buildPosition(line, column) { + return { + line: typeof line === 'number' ? line : null, + column: typeof column === 'number' ? column : null + }; + } + + function buildLoc(startLine, startColumn, endLine, endColumn, source) { + if (arguments.length === 1) { + var loc = startLine; + + if (typeof loc === 'object') { + return { + source: buildSource(loc.source), + start: buildPosition(loc.start.line, loc.start.column), + end: buildPosition(loc.end.line, loc.end.column) + }; + } else { + return null; + } + } else { + return { + source: buildSource(source), + start: buildPosition(startLine, startColumn), + end: buildPosition(endLine, endColumn) + }; + } + } + + exports.default = { + mustache: buildMustache, + block: buildBlock, + partial: buildPartial, + comment: buildComment, + element: buildElement, + elementModifier: buildElementModifier, + component: buildComponent, + attr: buildAttr, + text: buildText, + sexpr: buildSexpr, + path: buildPath, + string: buildString, + boolean: buildBoolean, + number: buildNumber, + undefined: buildUndefined, + null: buildNull, + concat: buildConcat, + hash: buildHash, + pair: buildPair, + program: buildProgram, + loc: buildLoc, + pos: buildPosition + }; +}); +enifed('htmlbars-syntax/generation/print', ['exports'], function (exports) { + 'use strict'; + + exports.default = build; + + function build(ast) { + if (!ast) { + return ''; + } + var output = []; + + switch (ast.type) { + case 'Program': + { + var chainBlock = ast.chained && ast.body[0]; + if (chainBlock) { + chainBlock.chained = true; + } + var body = buildEach(ast.body).join(''); + output.push(body); + } + break; + case 'ElementNode': + output.push('<', ast.tag); + if (ast.attributes.length) { + output.push(' ', buildEach(ast.attributes).join(' ')); + } + if (ast.modifiers.length) { + output.push(' ', buildEach(ast.modifiers).join(' ')); + } + output.push('>'); + output.push.apply(output, buildEach(ast.children)); + output.push(''); + break; + case 'AttrNode': + output.push(ast.name, '='); + var value = build(ast.value); + if (ast.value.type === 'TextNode') { + output.push('"', value, '"'); + } else { + output.push(value); + } + break; + case 'ConcatStatement': + output.push('"'); + ast.parts.forEach(function (node) { + if (node.type === 'StringLiteral') { + output.push(node.original); + } else { + output.push(build(node)); + } + }); + output.push('"'); + break; + case 'TextNode': + output.push(ast.chars); + break; + case 'MustacheStatement': + { + output.push(compactJoin(['{{', pathParams(ast), '}}'])); + } + break; + case 'ElementModifierStatement': + { + output.push(compactJoin(['{{', pathParams(ast), '}}'])); + } + break; + case 'PathExpression': + output.push(ast.original); + break; + case 'SubExpression': + { + output.push('(', pathParams(ast), ')'); + } + break; + case 'BooleanLiteral': + output.push(ast.value ? 'true' : false); + break; + case 'BlockStatement': + { + var lines = []; + + if (ast.chained) { + lines.push(['{{else ', pathParams(ast), '}}'].join('')); + } else { + lines.push(openBlock(ast)); + } + + lines.push(build(ast.program)); + + if (ast.inverse) { + if (!ast.inverse.chained) { + lines.push('{{else}}'); + } + lines.push(build(ast.inverse)); + } + + if (!ast.chained) { + lines.push(closeBlock(ast)); + } + + output.push(lines.join('')); + } + break; + case 'PartialStatement': + { + output.push(compactJoin(['{{>', pathParams(ast), '}}'])); + } + break; + case 'CommentStatement': + { + output.push(compactJoin([''])); + } + break; + case 'StringLiteral': + { + output.push('"' + ast.value + '"'); + } + break; + case 'NumberLiteral': + { + output.push(ast.value); + } + break; + case 'UndefinedLiteral': + { + output.push('undefined'); + } + break; + case 'NullLiteral': + { + output.push('null'); + } + break; + case 'Hash': + { + output.push(ast.pairs.map(function (pair) { + return build(pair); + }).join(' ')); + } + break; + case 'HashPair': + { + output.push(ast.key + '=' + build(ast.value)); + } + break; + } + return output.join(''); + } + + function compact(array) { + var newArray = []; + array.forEach(function (a) { + if (typeof a !== 'undefined' && a !== null && a !== '') { + newArray.push(a); + } + }); + return newArray; + } + + function buildEach(asts) { + var output = []; + asts.forEach(function (node) { + output.push(build(node)); + }); + return output; + } + + function pathParams(ast) { + var name = build(ast.name); + var path = build(ast.path); + var params = buildEach(ast.params).join(' '); + var hash = build(ast.hash); + return compactJoin([name, path, params, hash], ' '); + } + + function compactJoin(array, delimiter) { + return compact(array).join(delimiter || ''); + } + + function blockParams(block) { + var params = block.program.blockParams; + if (params.length) { + return ' as |' + params.join(',') + '|'; + } + } + + function openBlock(block) { + return ['{{#', pathParams(block), blockParams(block), '}}'].join(''); + } + + function closeBlock(block) { + return ['{{/', build(block.path), '}}'].join(''); + } +}); +enifed('htmlbars-syntax/handlebars/compiler/ast', ['exports'], function (exports) { + 'use strict'; + + var AST = { + Program: function (statements, blockParams, strip, locInfo) { + this.loc = locInfo; + this.type = 'Program'; + this.body = statements; + + this.blockParams = blockParams; + this.strip = strip; + }, + + MustacheStatement: function (path, params, hash, escaped, strip, locInfo) { + this.loc = locInfo; + this.type = 'MustacheStatement'; + + this.path = path; + this.params = params || []; + this.hash = hash; + this.escaped = escaped; + + this.strip = strip; + }, + + BlockStatement: function (path, params, hash, program, inverse, openStrip, inverseStrip, closeStrip, locInfo) { + this.loc = locInfo; + this.type = 'BlockStatement'; + + this.path = path; + this.params = params || []; + this.hash = hash; + this.program = program; + this.inverse = inverse; + + this.openStrip = openStrip; + this.inverseStrip = inverseStrip; + this.closeStrip = closeStrip; + }, + + PartialStatement: function (name, params, hash, strip, locInfo) { + this.loc = locInfo; + this.type = 'PartialStatement'; + + this.name = name; + this.params = params || []; + this.hash = hash; + + this.indent = ''; + this.strip = strip; + }, + + ContentStatement: function (string, locInfo) { + this.loc = locInfo; + this.type = 'ContentStatement'; + this.original = this.value = string; + }, + + CommentStatement: function (comment, strip, locInfo) { + this.loc = locInfo; + this.type = 'CommentStatement'; + this.value = comment; + + this.strip = strip; + }, + + SubExpression: function (path, params, hash, locInfo) { + this.loc = locInfo; + + this.type = 'SubExpression'; + this.path = path; + this.params = params || []; + this.hash = hash; + }, + + PathExpression: function (data, depth, parts, original, locInfo) { + this.loc = locInfo; + this.type = 'PathExpression'; + + this.data = data; + this.original = original; + this.parts = parts; + this.depth = depth; + }, + + StringLiteral: function (string, locInfo) { + this.loc = locInfo; + this.type = 'StringLiteral'; + this.original = this.value = string; + }, + + NumberLiteral: function (number, locInfo) { + this.loc = locInfo; + this.type = 'NumberLiteral'; + this.original = this.value = Number(number); + }, + + BooleanLiteral: function (bool, locInfo) { + this.loc = locInfo; + this.type = 'BooleanLiteral'; + this.original = this.value = bool === 'true'; + }, + + UndefinedLiteral: function (locInfo) { + this.loc = locInfo; + this.type = 'UndefinedLiteral'; + this.original = this.value = undefined; + }, + + NullLiteral: function (locInfo) { + this.loc = locInfo; + this.type = 'NullLiteral'; + this.original = this.value = null; + }, + + Hash: function (pairs, locInfo) { + this.loc = locInfo; + this.type = 'Hash'; + this.pairs = pairs; + }, + HashPair: function (key, value, locInfo) { + this.loc = locInfo; + this.type = 'HashPair'; + this.key = key; + this.value = value; + }, + + // Public API used to evaluate derived attributes regarding AST nodes + helpers: { + // a mustache is definitely a helper if: + // * it is an eligible helper, and + // * it has at least one parameter or hash segment + helperExpression: function (node) { + return !!(node.type === 'SubExpression' || node.params.length || node.hash); + }, + + scopedId: function (path) { + return (/^\.|this\b/.test(path.original) + ); + }, + + // an ID is simple if it only has one part, and that part is not + // `..` or `this`. + simpleId: function (path) { + return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; + } + } + }; + + // Must be exported as an object rather than the root of the module as the jison lexer + // must modify the object to operate properly. + exports.default = AST; +}); +enifed('htmlbars-syntax/handlebars/compiler/base', ['exports', 'htmlbars-syntax/handlebars/compiler/parser', 'htmlbars-syntax/handlebars/compiler/ast', 'htmlbars-syntax/handlebars/compiler/whitespace-control', 'htmlbars-syntax/handlebars/compiler/helpers', 'htmlbars-syntax/handlebars/utils'], function (exports, _htmlbarsSyntaxHandlebarsCompilerParser, _htmlbarsSyntaxHandlebarsCompilerAst, _htmlbarsSyntaxHandlebarsCompilerWhitespaceControl, _htmlbarsSyntaxHandlebarsCompilerHelpers, _htmlbarsSyntaxHandlebarsUtils) { + 'use strict'; + + exports.parse = parse; + exports.parser = _htmlbarsSyntaxHandlebarsCompilerParser.default; + + var yy = {}; + _htmlbarsSyntaxHandlebarsUtils.extend(yy, _htmlbarsSyntaxHandlebarsCompilerHelpers, _htmlbarsSyntaxHandlebarsCompilerAst.default); + + function parse(input, options) { + // Just return if an already-compiled AST was passed in. + if (input.type === 'Program') { + return input; + } + + _htmlbarsSyntaxHandlebarsCompilerParser.default.yy = yy; + + // Altering the shared object here, but this is ok as parser is a sync operation + yy.locInfo = function (locInfo) { + return new yy.SourceLocation(options && options.srcName, locInfo); + }; + + var strip = new _htmlbarsSyntaxHandlebarsCompilerWhitespaceControl.default(); + return strip.accept(_htmlbarsSyntaxHandlebarsCompilerParser.default.parse(input)); + } +}); +enifed('htmlbars-syntax/handlebars/compiler/helpers', ['exports', 'htmlbars-syntax/handlebars/exception'], function (exports, _htmlbarsSyntaxHandlebarsException) { + 'use strict'; + + exports.SourceLocation = SourceLocation; + exports.id = id; + exports.stripFlags = stripFlags; + exports.stripComment = stripComment; + exports.preparePath = preparePath; + exports.prepareMustache = prepareMustache; + exports.prepareRawBlock = prepareRawBlock; + exports.prepareBlock = prepareBlock; + + function SourceLocation(source, locInfo) { + this.source = source; + this.start = { + line: locInfo.first_line, + column: locInfo.first_column + }; + this.end = { + line: locInfo.last_line, + column: locInfo.last_column + }; + } + + function id(token) { + if (/^\[.*\]$/.test(token)) { + return token.substr(1, token.length - 2); + } else { + return token; + } + } + + function stripFlags(open, close) { + return { + open: open.charAt(2) === '~', + close: close.charAt(close.length - 3) === '~' + }; + } + + function stripComment(comment) { + return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, ''); + } + + function preparePath(data, parts, locInfo) { + locInfo = this.locInfo(locInfo); + + var original = data ? '@' : '', + dig = [], + depth = 0, + depthString = ''; + + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i].part, + + // If we have [] syntax then we do not treat path references as operators, + // i.e. foo.[this] resolves to approximately context.foo['this'] + isLiteral = parts[i].original !== part; + original += (parts[i].separator || '') + part; + + if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { + if (dig.length > 0) { + throw new _htmlbarsSyntaxHandlebarsException.default('Invalid path: ' + original, { loc: locInfo }); + } else if (part === '..') { + depth++; + depthString += '../'; + } + } else { + dig.push(part); + } + } + + return new this.PathExpression(data, depth, dig, original, locInfo); + } + + function prepareMustache(path, params, hash, open, strip, locInfo) { + // Must use charAt to support IE pre-10 + var escapeFlag = open.charAt(3) || open.charAt(2), + escaped = escapeFlag !== '{' && escapeFlag !== '&'; + + return new this.MustacheStatement(path, params, hash, escaped, strip, this.locInfo(locInfo)); + } + + function prepareRawBlock(openRawBlock, content, close, locInfo) { + if (openRawBlock.path.original !== close) { + var errorNode = { loc: openRawBlock.path.loc }; + + throw new _htmlbarsSyntaxHandlebarsException.default(openRawBlock.path.original + " doesn't match " + close, errorNode); + } + + locInfo = this.locInfo(locInfo); + var program = new this.Program([content], null, {}, locInfo); + + return new this.BlockStatement(openRawBlock.path, openRawBlock.params, openRawBlock.hash, program, undefined, {}, {}, {}, locInfo); + } + + function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { + // When we are chaining inverse calls, we will not have a close path + if (close && close.path && openBlock.path.original !== close.path.original) { + var errorNode = { loc: openBlock.path.loc }; + + throw new _htmlbarsSyntaxHandlebarsException.default(openBlock.path.original + ' doesn\'t match ' + close.path.original, errorNode); + } + + program.blockParams = openBlock.blockParams; + + var inverse = undefined, + inverseStrip = undefined; + + if (inverseAndProgram) { + if (inverseAndProgram.chain) { + inverseAndProgram.program.body[0].closeStrip = close.strip; + } + + inverseStrip = inverseAndProgram.strip; + inverse = inverseAndProgram.program; + } + + if (inverted) { + inverted = inverse; + inverse = program; + program = inverted; + } + + return new this.BlockStatement(openBlock.path, openBlock.params, openBlock.hash, program, inverse, openBlock.strip, inverseStrip, close && close.strip, this.locInfo(locInfo)); + } +}); +enifed("htmlbars-syntax/handlebars/compiler/parser", ["exports"], function (exports) { + /* istanbul ignore next */ + /* Jison generated parser */ + "use strict"; + + var handlebars = (function () { + var parser = { trace: function trace() {}, + yy: {}, + symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "content": 12, "COMMENT": 13, "CONTENT": 14, "openRawBlock": 15, "END_RAW_BLOCK": 16, "OPEN_RAW_BLOCK": 17, "helperName": 18, "openRawBlock_repetition0": 19, "openRawBlock_option0": 20, "CLOSE_RAW_BLOCK": 21, "openBlock": 22, "block_option0": 23, "closeBlock": 24, "openInverse": 25, "block_option1": 26, "OPEN_BLOCK": 27, "openBlock_repetition0": 28, "openBlock_option0": 29, "openBlock_option1": 30, "CLOSE": 31, "OPEN_INVERSE": 32, "openInverse_repetition0": 33, "openInverse_option0": 34, "openInverse_option1": 35, "openInverseChain": 36, "OPEN_INVERSE_CHAIN": 37, "openInverseChain_repetition0": 38, "openInverseChain_option0": 39, "openInverseChain_option1": 40, "inverseAndProgram": 41, "INVERSE": 42, "inverseChain": 43, "inverseChain_option0": 44, "OPEN_ENDBLOCK": 45, "OPEN": 46, "mustache_repetition0": 47, "mustache_option0": 48, "OPEN_UNESCAPED": 49, "mustache_repetition1": 50, "mustache_option1": 51, "CLOSE_UNESCAPED": 52, "OPEN_PARTIAL": 53, "partialName": 54, "partial_repetition0": 55, "partial_option0": 56, "param": 57, "sexpr": 58, "OPEN_SEXPR": 59, "sexpr_repetition0": 60, "sexpr_option0": 61, "CLOSE_SEXPR": 62, "hash": 63, "hash_repetition_plus0": 64, "hashSegment": 65, "ID": 66, "EQUALS": 67, "blockParams": 68, "OPEN_BLOCK_PARAMS": 69, "blockParams_repetition_plus0": 70, "CLOSE_BLOCK_PARAMS": 71, "path": 72, "dataName": 73, "STRING": 74, "NUMBER": 75, "BOOLEAN": 76, "UNDEFINED": 77, "NULL": 78, "DATA": 79, "pathSegments": 80, "SEP": 81, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "EOF", 13: "COMMENT", 14: "CONTENT", 16: "END_RAW_BLOCK", 17: "OPEN_RAW_BLOCK", 21: "CLOSE_RAW_BLOCK", 27: "OPEN_BLOCK", 31: "CLOSE", 32: "OPEN_INVERSE", 37: "OPEN_INVERSE_CHAIN", 42: "INVERSE", 45: "OPEN_ENDBLOCK", 46: "OPEN", 49: "OPEN_UNESCAPED", 52: "CLOSE_UNESCAPED", 53: "OPEN_PARTIAL", 59: "OPEN_SEXPR", 62: "CLOSE_SEXPR", 66: "ID", 67: "EQUALS", 69: "OPEN_BLOCK_PARAMS", 71: "CLOSE_BLOCK_PARAMS", 74: "STRING", 75: "NUMBER", 76: "BOOLEAN", 77: "UNDEFINED", 78: "NULL", 79: "DATA", 81: "SEP" }, + productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [12, 1], [10, 3], [15, 5], [9, 4], [9, 4], [22, 6], [25, 6], [36, 6], [41, 2], [43, 3], [43, 1], [24, 3], [8, 5], [8, 5], [11, 5], [57, 1], [57, 1], [58, 5], [63, 1], [65, 3], [68, 3], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [54, 1], [54, 1], [73, 2], [72, 1], [80, 3], [80, 1], [6, 0], [6, 2], [19, 0], [19, 2], [20, 0], [20, 1], [23, 0], [23, 1], [26, 0], [26, 1], [28, 0], [28, 2], [29, 0], [29, 1], [30, 0], [30, 1], [33, 0], [33, 2], [34, 0], [34, 1], [35, 0], [35, 1], [38, 0], [38, 2], [39, 0], [39, 1], [40, 0], [40, 1], [44, 0], [44, 1], [47, 0], [47, 2], [48, 0], [48, 1], [50, 0], [50, 2], [51, 0], [51, 1], [55, 0], [55, 2], [56, 0], [56, 1], [60, 0], [60, 2], [61, 0], [61, 1], [64, 1], [64, 2], [70, 1], [70, 2]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + break; + case 2: + this.$ = new yy.Program($$[$0], null, {}, yy.locInfo(this._$)); + break; + case 3: + this.$ = $$[$0]; + break; + case 4: + this.$ = $$[$0]; + break; + case 5: + this.$ = $$[$0]; + break; + case 6: + this.$ = $$[$0]; + break; + case 7: + this.$ = $$[$0]; + break; + case 8: + this.$ = new yy.CommentStatement(yy.stripComment($$[$0]), yy.stripFlags($$[$0], $$[$0]), yy.locInfo(this._$)); + break; + case 9: + this.$ = new yy.ContentStatement($$[$0], yy.locInfo(this._$)); + break; + case 10: + this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 11: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; + break; + case 12: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); + break; + case 13: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); + break; + case 14: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 15: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 16: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 17: + this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; + break; + case 18: + var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), + program = new yy.Program([inverse], null, {}, yy.locInfo(this._$)); + program.chained = true; + + this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; + + break; + case 19: + this.$ = $$[$0]; + break; + case 20: + this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; + break; + case 21: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 22: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 23: + this.$ = new yy.PartialStatement($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], yy.stripFlags($$[$0 - 4], $$[$0]), yy.locInfo(this._$)); + break; + case 24: + this.$ = $$[$0]; + break; + case 25: + this.$ = $$[$0]; + break; + case 26: + this.$ = new yy.SubExpression($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], yy.locInfo(this._$)); + break; + case 27: + this.$ = new yy.Hash($$[$0], yy.locInfo(this._$)); + break; + case 28: + this.$ = new yy.HashPair(yy.id($$[$0 - 2]), $$[$0], yy.locInfo(this._$)); + break; + case 29: + this.$ = yy.id($$[$0 - 1]); + break; + case 30: + this.$ = $$[$0]; + break; + case 31: + this.$ = $$[$0]; + break; + case 32: + this.$ = new yy.StringLiteral($$[$0], yy.locInfo(this._$)); + break; + case 33: + this.$ = new yy.NumberLiteral($$[$0], yy.locInfo(this._$)); + break; + case 34: + this.$ = new yy.BooleanLiteral($$[$0], yy.locInfo(this._$)); + break; + case 35: + this.$ = new yy.UndefinedLiteral(yy.locInfo(this._$)); + break; + case 36: + this.$ = new yy.NullLiteral(yy.locInfo(this._$)); + break; + case 37: + this.$ = $$[$0]; + break; + case 38: + this.$ = $$[$0]; + break; + case 39: + this.$ = yy.preparePath(true, $$[$0], this._$); + break; + case 40: + this.$ = yy.preparePath(false, $$[$0], this._$); + break; + case 41: + $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; + break; + case 42: + this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; + break; + case 43: + this.$ = []; + break; + case 44: + $$[$0 - 1].push($$[$0]); + break; + case 45: + this.$ = []; + break; + case 46: + $$[$0 - 1].push($$[$0]); + break; + case 53: + this.$ = []; + break; + case 54: + $$[$0 - 1].push($$[$0]); + break; + case 59: + this.$ = []; + break; + case 60: + $$[$0 - 1].push($$[$0]); + break; + case 65: + this.$ = []; + break; + case 66: + $$[$0 - 1].push($$[$0]); + break; + case 73: + this.$ = []; + break; + case 74: + $$[$0 - 1].push($$[$0]); + break; + case 77: + this.$ = []; + break; + case 78: + $$[$0 - 1].push($$[$0]); + break; + case 81: + this.$ = []; + break; + case 82: + $$[$0 - 1].push($$[$0]); + break; + case 85: + this.$ = []; + break; + case 86: + $$[$0 - 1].push($$[$0]); + break; + case 89: + this.$ = [$$[$0]]; + break; + case 90: + $$[$0 - 1].push($$[$0]); + break; + case 91: + this.$ = [$$[$0]]; + break; + case 92: + $$[$0 - 1].push($$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: [2, 43], 6: 3, 13: [2, 43], 14: [2, 43], 17: [2, 43], 27: [2, 43], 32: [2, 43], 46: [2, 43], 49: [2, 43], 53: [2, 43] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: [1, 11], 14: [1, 18], 15: 16, 17: [1, 21], 22: 14, 25: 15, 27: [1, 19], 32: [1, 20], 37: [2, 2], 42: [2, 2], 45: [2, 2], 46: [1, 12], 49: [1, 13], 53: [1, 17] }, { 1: [2, 1] }, { 5: [2, 44], 13: [2, 44], 14: [2, 44], 17: [2, 44], 27: [2, 44], 32: [2, 44], 37: [2, 44], 42: [2, 44], 45: [2, 44], 46: [2, 44], 49: [2, 44], 53: [2, 44] }, { 5: [2, 3], 13: [2, 3], 14: [2, 3], 17: [2, 3], 27: [2, 3], 32: [2, 3], 37: [2, 3], 42: [2, 3], 45: [2, 3], 46: [2, 3], 49: [2, 3], 53: [2, 3] }, { 5: [2, 4], 13: [2, 4], 14: [2, 4], 17: [2, 4], 27: [2, 4], 32: [2, 4], 37: [2, 4], 42: [2, 4], 45: [2, 4], 46: [2, 4], 49: [2, 4], 53: [2, 4] }, { 5: [2, 5], 13: [2, 5], 14: [2, 5], 17: [2, 5], 27: [2, 5], 32: [2, 5], 37: [2, 5], 42: [2, 5], 45: [2, 5], 46: [2, 5], 49: [2, 5], 53: [2, 5] }, { 5: [2, 6], 13: [2, 6], 14: [2, 6], 17: [2, 6], 27: [2, 6], 32: [2, 6], 37: [2, 6], 42: [2, 6], 45: [2, 6], 46: [2, 6], 49: [2, 6], 53: [2, 6] }, { 5: [2, 7], 13: [2, 7], 14: [2, 7], 17: [2, 7], 27: [2, 7], 32: [2, 7], 37: [2, 7], 42: [2, 7], 45: [2, 7], 46: [2, 7], 49: [2, 7], 53: [2, 7] }, { 5: [2, 8], 13: [2, 8], 14: [2, 8], 17: [2, 8], 27: [2, 8], 32: [2, 8], 37: [2, 8], 42: [2, 8], 45: [2, 8], 46: [2, 8], 49: [2, 8], 53: [2, 8] }, { 18: 22, 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 18: 33, 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 4: 34, 6: 3, 13: [2, 43], 14: [2, 43], 17: [2, 43], 27: [2, 43], 32: [2, 43], 37: [2, 43], 42: [2, 43], 45: [2, 43], 46: [2, 43], 49: [2, 43], 53: [2, 43] }, { 4: 35, 6: 3, 13: [2, 43], 14: [2, 43], 17: [2, 43], 27: [2, 43], 32: [2, 43], 42: [2, 43], 45: [2, 43], 46: [2, 43], 49: [2, 43], 53: [2, 43] }, { 12: 36, 14: [1, 18] }, { 18: 38, 54: 37, 58: 39, 59: [1, 40], 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 5: [2, 9], 13: [2, 9], 14: [2, 9], 16: [2, 9], 17: [2, 9], 27: [2, 9], 32: [2, 9], 37: [2, 9], 42: [2, 9], 45: [2, 9], 46: [2, 9], 49: [2, 9], 53: [2, 9] }, { 18: 41, 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 18: 42, 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 18: 43, 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 31: [2, 73], 47: 44, 59: [2, 73], 66: [2, 73], 74: [2, 73], 75: [2, 73], 76: [2, 73], 77: [2, 73], 78: [2, 73], 79: [2, 73] }, { 21: [2, 30], 31: [2, 30], 52: [2, 30], 59: [2, 30], 62: [2, 30], 66: [2, 30], 69: [2, 30], 74: [2, 30], 75: [2, 30], 76: [2, 30], 77: [2, 30], 78: [2, 30], 79: [2, 30] }, { 21: [2, 31], 31: [2, 31], 52: [2, 31], 59: [2, 31], 62: [2, 31], 66: [2, 31], 69: [2, 31], 74: [2, 31], 75: [2, 31], 76: [2, 31], 77: [2, 31], 78: [2, 31], 79: [2, 31] }, { 21: [2, 32], 31: [2, 32], 52: [2, 32], 59: [2, 32], 62: [2, 32], 66: [2, 32], 69: [2, 32], 74: [2, 32], 75: [2, 32], 76: [2, 32], 77: [2, 32], 78: [2, 32], 79: [2, 32] }, { 21: [2, 33], 31: [2, 33], 52: [2, 33], 59: [2, 33], 62: [2, 33], 66: [2, 33], 69: [2, 33], 74: [2, 33], 75: [2, 33], 76: [2, 33], 77: [2, 33], 78: [2, 33], 79: [2, 33] }, { 21: [2, 34], 31: [2, 34], 52: [2, 34], 59: [2, 34], 62: [2, 34], 66: [2, 34], 69: [2, 34], 74: [2, 34], 75: [2, 34], 76: [2, 34], 77: [2, 34], 78: [2, 34], 79: [2, 34] }, { 21: [2, 35], 31: [2, 35], 52: [2, 35], 59: [2, 35], 62: [2, 35], 66: [2, 35], 69: [2, 35], 74: [2, 35], 75: [2, 35], 76: [2, 35], 77: [2, 35], 78: [2, 35], 79: [2, 35] }, { 21: [2, 36], 31: [2, 36], 52: [2, 36], 59: [2, 36], 62: [2, 36], 66: [2, 36], 69: [2, 36], 74: [2, 36], 75: [2, 36], 76: [2, 36], 77: [2, 36], 78: [2, 36], 79: [2, 36] }, { 21: [2, 40], 31: [2, 40], 52: [2, 40], 59: [2, 40], 62: [2, 40], 66: [2, 40], 69: [2, 40], 74: [2, 40], 75: [2, 40], 76: [2, 40], 77: [2, 40], 78: [2, 40], 79: [2, 40], 81: [1, 45] }, { 66: [1, 32], 80: 46 }, { 21: [2, 42], 31: [2, 42], 52: [2, 42], 59: [2, 42], 62: [2, 42], 66: [2, 42], 69: [2, 42], 74: [2, 42], 75: [2, 42], 76: [2, 42], 77: [2, 42], 78: [2, 42], 79: [2, 42], 81: [2, 42] }, { 50: 47, 52: [2, 77], 59: [2, 77], 66: [2, 77], 74: [2, 77], 75: [2, 77], 76: [2, 77], 77: [2, 77], 78: [2, 77], 79: [2, 77] }, { 23: 48, 36: 50, 37: [1, 52], 41: 51, 42: [1, 53], 43: 49, 45: [2, 49] }, { 26: 54, 41: 55, 42: [1, 53], 45: [2, 51] }, { 16: [1, 56] }, { 31: [2, 81], 55: 57, 59: [2, 81], 66: [2, 81], 74: [2, 81], 75: [2, 81], 76: [2, 81], 77: [2, 81], 78: [2, 81], 79: [2, 81] }, { 31: [2, 37], 59: [2, 37], 66: [2, 37], 74: [2, 37], 75: [2, 37], 76: [2, 37], 77: [2, 37], 78: [2, 37], 79: [2, 37] }, { 31: [2, 38], 59: [2, 38], 66: [2, 38], 74: [2, 38], 75: [2, 38], 76: [2, 38], 77: [2, 38], 78: [2, 38], 79: [2, 38] }, { 18: 58, 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 28: 59, 31: [2, 53], 59: [2, 53], 66: [2, 53], 69: [2, 53], 74: [2, 53], 75: [2, 53], 76: [2, 53], 77: [2, 53], 78: [2, 53], 79: [2, 53] }, { 31: [2, 59], 33: 60, 59: [2, 59], 66: [2, 59], 69: [2, 59], 74: [2, 59], 75: [2, 59], 76: [2, 59], 77: [2, 59], 78: [2, 59], 79: [2, 59] }, { 19: 61, 21: [2, 45], 59: [2, 45], 66: [2, 45], 74: [2, 45], 75: [2, 45], 76: [2, 45], 77: [2, 45], 78: [2, 45], 79: [2, 45] }, { 18: 65, 31: [2, 75], 48: 62, 57: 63, 58: 66, 59: [1, 40], 63: 64, 64: 67, 65: 68, 66: [1, 69], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 66: [1, 70] }, { 21: [2, 39], 31: [2, 39], 52: [2, 39], 59: [2, 39], 62: [2, 39], 66: [2, 39], 69: [2, 39], 74: [2, 39], 75: [2, 39], 76: [2, 39], 77: [2, 39], 78: [2, 39], 79: [2, 39], 81: [1, 45] }, { 18: 65, 51: 71, 52: [2, 79], 57: 72, 58: 66, 59: [1, 40], 63: 73, 64: 67, 65: 68, 66: [1, 69], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 24: 74, 45: [1, 75] }, { 45: [2, 50] }, { 4: 76, 6: 3, 13: [2, 43], 14: [2, 43], 17: [2, 43], 27: [2, 43], 32: [2, 43], 37: [2, 43], 42: [2, 43], 45: [2, 43], 46: [2, 43], 49: [2, 43], 53: [2, 43] }, { 45: [2, 19] }, { 18: 77, 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 4: 78, 6: 3, 13: [2, 43], 14: [2, 43], 17: [2, 43], 27: [2, 43], 32: [2, 43], 45: [2, 43], 46: [2, 43], 49: [2, 43], 53: [2, 43] }, { 24: 79, 45: [1, 75] }, { 45: [2, 52] }, { 5: [2, 10], 13: [2, 10], 14: [2, 10], 17: [2, 10], 27: [2, 10], 32: [2, 10], 37: [2, 10], 42: [2, 10], 45: [2, 10], 46: [2, 10], 49: [2, 10], 53: [2, 10] }, { 18: 65, 31: [2, 83], 56: 80, 57: 81, 58: 66, 59: [1, 40], 63: 82, 64: 67, 65: 68, 66: [1, 69], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 59: [2, 85], 60: 83, 62: [2, 85], 66: [2, 85], 74: [2, 85], 75: [2, 85], 76: [2, 85], 77: [2, 85], 78: [2, 85], 79: [2, 85] }, { 18: 65, 29: 84, 31: [2, 55], 57: 85, 58: 66, 59: [1, 40], 63: 86, 64: 67, 65: 68, 66: [1, 69], 69: [2, 55], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 18: 65, 31: [2, 61], 34: 87, 57: 88, 58: 66, 59: [1, 40], 63: 89, 64: 67, 65: 68, 66: [1, 69], 69: [2, 61], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 18: 65, 20: 90, 21: [2, 47], 57: 91, 58: 66, 59: [1, 40], 63: 92, 64: 67, 65: 68, 66: [1, 69], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 31: [1, 93] }, { 31: [2, 74], 59: [2, 74], 66: [2, 74], 74: [2, 74], 75: [2, 74], 76: [2, 74], 77: [2, 74], 78: [2, 74], 79: [2, 74] }, { 31: [2, 76] }, { 21: [2, 24], 31: [2, 24], 52: [2, 24], 59: [2, 24], 62: [2, 24], 66: [2, 24], 69: [2, 24], 74: [2, 24], 75: [2, 24], 76: [2, 24], 77: [2, 24], 78: [2, 24], 79: [2, 24] }, { 21: [2, 25], 31: [2, 25], 52: [2, 25], 59: [2, 25], 62: [2, 25], 66: [2, 25], 69: [2, 25], 74: [2, 25], 75: [2, 25], 76: [2, 25], 77: [2, 25], 78: [2, 25], 79: [2, 25] }, { 21: [2, 27], 31: [2, 27], 52: [2, 27], 62: [2, 27], 65: 94, 66: [1, 95], 69: [2, 27] }, { 21: [2, 89], 31: [2, 89], 52: [2, 89], 62: [2, 89], 66: [2, 89], 69: [2, 89] }, { 21: [2, 42], 31: [2, 42], 52: [2, 42], 59: [2, 42], 62: [2, 42], 66: [2, 42], 67: [1, 96], 69: [2, 42], 74: [2, 42], 75: [2, 42], 76: [2, 42], 77: [2, 42], 78: [2, 42], 79: [2, 42], 81: [2, 42] }, { 21: [2, 41], 31: [2, 41], 52: [2, 41], 59: [2, 41], 62: [2, 41], 66: [2, 41], 69: [2, 41], 74: [2, 41], 75: [2, 41], 76: [2, 41], 77: [2, 41], 78: [2, 41], 79: [2, 41], 81: [2, 41] }, { 52: [1, 97] }, { 52: [2, 78], 59: [2, 78], 66: [2, 78], 74: [2, 78], 75: [2, 78], 76: [2, 78], 77: [2, 78], 78: [2, 78], 79: [2, 78] }, { 52: [2, 80] }, { 5: [2, 12], 13: [2, 12], 14: [2, 12], 17: [2, 12], 27: [2, 12], 32: [2, 12], 37: [2, 12], 42: [2, 12], 45: [2, 12], 46: [2, 12], 49: [2, 12], 53: [2, 12] }, { 18: 98, 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 36: 50, 37: [1, 52], 41: 51, 42: [1, 53], 43: 100, 44: 99, 45: [2, 71] }, { 31: [2, 65], 38: 101, 59: [2, 65], 66: [2, 65], 69: [2, 65], 74: [2, 65], 75: [2, 65], 76: [2, 65], 77: [2, 65], 78: [2, 65], 79: [2, 65] }, { 45: [2, 17] }, { 5: [2, 13], 13: [2, 13], 14: [2, 13], 17: [2, 13], 27: [2, 13], 32: [2, 13], 37: [2, 13], 42: [2, 13], 45: [2, 13], 46: [2, 13], 49: [2, 13], 53: [2, 13] }, { 31: [1, 102] }, { 31: [2, 82], 59: [2, 82], 66: [2, 82], 74: [2, 82], 75: [2, 82], 76: [2, 82], 77: [2, 82], 78: [2, 82], 79: [2, 82] }, { 31: [2, 84] }, { 18: 65, 57: 104, 58: 66, 59: [1, 40], 61: 103, 62: [2, 87], 63: 105, 64: 67, 65: 68, 66: [1, 69], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 30: 106, 31: [2, 57], 68: 107, 69: [1, 108] }, { 31: [2, 54], 59: [2, 54], 66: [2, 54], 69: [2, 54], 74: [2, 54], 75: [2, 54], 76: [2, 54], 77: [2, 54], 78: [2, 54], 79: [2, 54] }, { 31: [2, 56], 69: [2, 56] }, { 31: [2, 63], 35: 109, 68: 110, 69: [1, 108] }, { 31: [2, 60], 59: [2, 60], 66: [2, 60], 69: [2, 60], 74: [2, 60], 75: [2, 60], 76: [2, 60], 77: [2, 60], 78: [2, 60], 79: [2, 60] }, { 31: [2, 62], 69: [2, 62] }, { 21: [1, 111] }, { 21: [2, 46], 59: [2, 46], 66: [2, 46], 74: [2, 46], 75: [2, 46], 76: [2, 46], 77: [2, 46], 78: [2, 46], 79: [2, 46] }, { 21: [2, 48] }, { 5: [2, 21], 13: [2, 21], 14: [2, 21], 17: [2, 21], 27: [2, 21], 32: [2, 21], 37: [2, 21], 42: [2, 21], 45: [2, 21], 46: [2, 21], 49: [2, 21], 53: [2, 21] }, { 21: [2, 90], 31: [2, 90], 52: [2, 90], 62: [2, 90], 66: [2, 90], 69: [2, 90] }, { 67: [1, 96] }, { 18: 65, 57: 112, 58: 66, 59: [1, 40], 66: [1, 32], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 5: [2, 22], 13: [2, 22], 14: [2, 22], 17: [2, 22], 27: [2, 22], 32: [2, 22], 37: [2, 22], 42: [2, 22], 45: [2, 22], 46: [2, 22], 49: [2, 22], 53: [2, 22] }, { 31: [1, 113] }, { 45: [2, 18] }, { 45: [2, 72] }, { 18: 65, 31: [2, 67], 39: 114, 57: 115, 58: 66, 59: [1, 40], 63: 116, 64: 67, 65: 68, 66: [1, 69], 69: [2, 67], 72: 23, 73: 24, 74: [1, 25], 75: [1, 26], 76: [1, 27], 77: [1, 28], 78: [1, 29], 79: [1, 31], 80: 30 }, { 5: [2, 23], 13: [2, 23], 14: [2, 23], 17: [2, 23], 27: [2, 23], 32: [2, 23], 37: [2, 23], 42: [2, 23], 45: [2, 23], 46: [2, 23], 49: [2, 23], 53: [2, 23] }, { 62: [1, 117] }, { 59: [2, 86], 62: [2, 86], 66: [2, 86], 74: [2, 86], 75: [2, 86], 76: [2, 86], 77: [2, 86], 78: [2, 86], 79: [2, 86] }, { 62: [2, 88] }, { 31: [1, 118] }, { 31: [2, 58] }, { 66: [1, 120], 70: 119 }, { 31: [1, 121] }, { 31: [2, 64] }, { 14: [2, 11] }, { 21: [2, 28], 31: [2, 28], 52: [2, 28], 62: [2, 28], 66: [2, 28], 69: [2, 28] }, { 5: [2, 20], 13: [2, 20], 14: [2, 20], 17: [2, 20], 27: [2, 20], 32: [2, 20], 37: [2, 20], 42: [2, 20], 45: [2, 20], 46: [2, 20], 49: [2, 20], 53: [2, 20] }, { 31: [2, 69], 40: 122, 68: 123, 69: [1, 108] }, { 31: [2, 66], 59: [2, 66], 66: [2, 66], 69: [2, 66], 74: [2, 66], 75: [2, 66], 76: [2, 66], 77: [2, 66], 78: [2, 66], 79: [2, 66] }, { 31: [2, 68], 69: [2, 68] }, { 21: [2, 26], 31: [2, 26], 52: [2, 26], 59: [2, 26], 62: [2, 26], 66: [2, 26], 69: [2, 26], 74: [2, 26], 75: [2, 26], 76: [2, 26], 77: [2, 26], 78: [2, 26], 79: [2, 26] }, { 13: [2, 14], 14: [2, 14], 17: [2, 14], 27: [2, 14], 32: [2, 14], 37: [2, 14], 42: [2, 14], 45: [2, 14], 46: [2, 14], 49: [2, 14], 53: [2, 14] }, { 66: [1, 125], 71: [1, 124] }, { 66: [2, 91], 71: [2, 91] }, { 13: [2, 15], 14: [2, 15], 17: [2, 15], 27: [2, 15], 32: [2, 15], 42: [2, 15], 45: [2, 15], 46: [2, 15], 49: [2, 15], 53: [2, 15] }, { 31: [1, 126] }, { 31: [2, 70] }, { 31: [2, 29] }, { 66: [2, 92], 71: [2, 92] }, { 13: [2, 16], 14: [2, 16], 17: [2, 16], 27: [2, 16], 32: [2, 16], 37: [2, 16], 42: [2, 16], 45: [2, 16], 46: [2, 16], 49: [2, 16], 53: [2, 16] }], + defaultActions: { 4: [2, 1], 49: [2, 50], 51: [2, 19], 55: [2, 52], 64: [2, 76], 73: [2, 80], 78: [2, 17], 82: [2, 84], 92: [2, 48], 99: [2, 18], 100: [2, 72], 105: [2, 88], 107: [2, 58], 110: [2, 64], 111: [2, 11], 123: [2, 70], 124: [2, 29] }, + parseError: function parseError(str, hash) { + throw new Error(str); + }, + parse: function parse(input) { + var self = this, + stack = [0], + vstack = [null], + lstack = [], + table = this.table, + yytext = "", + yylineno = 0, + yyleng = 0, + recovering = 0, + TERROR = 2, + EOF = 1; + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + this.yy.parser = this; + if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + var ranges = this.lexer.options && this.lexer.options.ranges; + if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; + function popStack(n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + function lex() { + var token; + token = self.lexer.lex() || 1; + if (typeof token !== "number") { + token = self.symbols_[token] || token; + } + return token; + } + var symbol, + preErrorSymbol, + state, + action, + a, + r, + yyval = {}, + p, + len, + newState, + expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + if (!recovering) { + expected = []; + for (p in table[state]) if (this.terminals_[p] && p > 2) { + expected.push("'" + this.terminals_[p] + "'"); + } + if (this.lexer.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); + } + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) recovering--; + } else { + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; + if (ranges) { + yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; + } + r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + /* Jison generated lexer */ + var lexer = (function () { + var lexer = { EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput: function (input) { + this._input = input; + this._more = this._less = this.done = false; + 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 }; + if (this.options.ranges) this.yylloc.range = [0, 0]; + this.offset = 0; + return this; + }, + input: function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) this.yylloc.range[1]++; + + this._input = this._input.slice(1); + return ch; + }, + unput: function (ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); + //this.yyleng -= len; + this.offset -= len; + var oldLines = 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); + + if (lines.length - 1) this.yylineno -= lines.length - 1; + var r = this.yylloc.range; + + this.yylloc = { first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + return this; + }, + more: function () { + this._more = true; + return this; + }, + less: function (n) { + this.unput(this.match.slice(n)); + }, + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); + }, + upcomingInput: function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + showPosition: function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + next: function () { + if (this.done) { + return this.EOF; + } + if (!this._input) this.done = true; + + var token, match, tempMatch, index, col, lines; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (!this.options.flex) break; + } + } + if (match) { + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) this.yylineno += lines.length; + this.yylloc = { first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) this.done = false; + if (token) return token;else return; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); + } + }, + lex: function lex() { + var r = this.next(); + if (typeof r !== 'undefined') { + return r; + } else { + return this.lex(); + } + }, + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + popState: function popState() { + return this.conditionStack.pop(); + }, + _currentRules: function _currentRules() { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + }, + topState: function () { + return this.conditionStack[this.conditionStack.length - 2]; + }, + pushState: function begin(condition) { + this.begin(condition); + } }; + lexer.options = {}; + lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + + function strip(start, end) { + return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end); + } + + var YYSTATE = YY_START; + switch ($avoiding_name_collisions) { + case 0: + if (yy_.yytext.slice(-2) === "\\\\") { + strip(0, 1); + this.begin("mu"); + } else if (yy_.yytext.slice(-1) === "\\") { + strip(0, 1); + this.begin("emu"); + } else { + this.begin("mu"); + } + if (yy_.yytext) return 14; + + break; + case 1: + return 14; + break; + case 2: + this.popState(); + return 14; + + break; + case 3: + yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9); + this.popState(); + return 16; + + break; + case 4: + return 14; + break; + case 5: + this.popState(); + return 13; + + break; + case 6: + return 59; + break; + case 7: + return 62; + break; + case 8: + return 17; + break; + case 9: + this.popState(); + this.begin('raw'); + return 21; + + break; + case 10: + return 53; + break; + case 11: + return 27; + break; + case 12: + return 45; + break; + case 13: + this.popState();return 42; + break; + case 14: + this.popState();return 42; + break; + case 15: + return 32; + break; + case 16: + return 37; + break; + case 17: + return 49; + break; + case 18: + return 46; + break; + case 19: + this.unput(yy_.yytext); + this.popState(); + this.begin('com'); + + break; + case 20: + this.popState(); + return 13; + + break; + case 21: + return 46; + break; + case 22: + return 67; + break; + case 23: + return 66; + break; + case 24: + return 66; + break; + case 25: + return 81; + break; + case 26: + // ignore whitespace + break; + case 27: + this.popState();return 52; + break; + case 28: + this.popState();return 31; + break; + case 29: + yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 74; + break; + case 30: + yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 74; + break; + case 31: + return 79; + break; + case 32: + return 76; + break; + case 33: + return 76; + break; + case 34: + return 77; + break; + case 35: + return 78; + break; + case 36: + return 75; + break; + case 37: + return 69; + break; + case 38: + return 71; + break; + case 39: + return 66; + break; + case 40: + return 66; + break; + case 41: + return 'INVALID'; + break; + case 42: + return 5; + break; + } + }; + lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]*?(?=(\{\{\{\{\/)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[[^\]]*\])/, /^(?:.)/, /^(?:$)/]; + lexer.conditions = { "mu": { "rules": [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, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [5], "inclusive": false }, "raw": { "rules": [3, 4], "inclusive": false }, "INITIAL": { "rules": [0, 1, 42], "inclusive": true } }; + return lexer; + })(); + parser.lexer = lexer; + function Parser() { + this.yy = {}; + }Parser.prototype = parser;parser.Parser = Parser; + return new Parser(); + })();exports.default = handlebars; +}); +enifed('htmlbars-syntax/handlebars/compiler/visitor', ['exports', 'htmlbars-syntax/handlebars/exception', 'htmlbars-syntax/handlebars/compiler/ast'], function (exports, _htmlbarsSyntaxHandlebarsException, _htmlbarsSyntaxHandlebarsCompilerAst) { + 'use strict'; + + function Visitor() { + this.parents = []; + } + + Visitor.prototype = { + constructor: Visitor, + mutating: false, + + // Visits a given value. If mutating, will replace the value if necessary. + acceptKey: function (node, name) { + var value = this.accept(node[name]); + if (this.mutating) { + // Hacky sanity check: + if (value && (!value.type || !_htmlbarsSyntaxHandlebarsCompilerAst.default[value.type])) { + throw new _htmlbarsSyntaxHandlebarsException.default('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); + } + node[name] = value; + } + }, + + // Performs an accept operation with added sanity check to ensure + // required keys are not removed. + acceptRequired: function (node, name) { + this.acceptKey(node, name); + + if (!node[name]) { + throw new _htmlbarsSyntaxHandlebarsException.default(node.type + ' requires ' + name); + } + }, + + // Traverses a given array. If mutating, empty respnses will be removed + // for child elements. + acceptArray: function (array) { + for (var i = 0, l = array.length; i < l; i++) { + this.acceptKey(array, i); + + if (!array[i]) { + array.splice(i, 1); + i--; + l--; + } + } + }, + + accept: function (object) { + if (!object) { + return; + } + + if (this.current) { + this.parents.unshift(this.current); + } + this.current = object; + + var ret = this[object.type](object); + + this.current = this.parents.shift(); + + if (!this.mutating || ret) { + return ret; + } else if (ret !== false) { + return object; + } + }, + + Program: function (program) { + this.acceptArray(program.body); + }, + + MustacheStatement: function (mustache) { + this.acceptRequired(mustache, 'path'); + this.acceptArray(mustache.params); + this.acceptKey(mustache, 'hash'); + }, + + BlockStatement: function (block) { + this.acceptRequired(block, 'path'); + this.acceptArray(block.params); + this.acceptKey(block, 'hash'); + + this.acceptKey(block, 'program'); + this.acceptKey(block, 'inverse'); + }, + + PartialStatement: function (partial) { + this.acceptRequired(partial, 'name'); + this.acceptArray(partial.params); + this.acceptKey(partial, 'hash'); + }, + + ContentStatement: function () /* content */{}, + CommentStatement: function () /* comment */{}, + + SubExpression: function (sexpr) { + this.acceptRequired(sexpr, 'path'); + this.acceptArray(sexpr.params); + this.acceptKey(sexpr, 'hash'); + }, + + PathExpression: function () /* path */{}, + + StringLiteral: function () /* string */{}, + NumberLiteral: function () /* number */{}, + BooleanLiteral: function () /* bool */{}, + UndefinedLiteral: function () /* literal */{}, + NullLiteral: function () /* literal */{}, + + Hash: function (hash) { + this.acceptArray(hash.pairs); + }, + HashPair: function (pair) { + this.acceptRequired(pair, 'value'); + } + }; + + exports.default = Visitor; +}); +enifed('htmlbars-syntax/handlebars/compiler/whitespace-control', ['exports', 'htmlbars-syntax/handlebars/compiler/visitor'], function (exports, _htmlbarsSyntaxHandlebarsCompilerVisitor) { + 'use strict'; + + function WhitespaceControl() {} + WhitespaceControl.prototype = new _htmlbarsSyntaxHandlebarsCompilerVisitor.default(); + + WhitespaceControl.prototype.Program = function (program) { + var isRoot = !this.isRootSeen; + this.isRootSeen = true; + + var body = program.body; + for (var i = 0, l = body.length; i < l; i++) { + var current = body[i], + strip = this.accept(current); + + if (!strip) { + continue; + } + + var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), + _isNextWhitespace = isNextWhitespace(body, i, isRoot), + openStandalone = strip.openStandalone && _isPrevWhitespace, + closeStandalone = strip.closeStandalone && _isNextWhitespace, + inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; + + if (strip.close) { + omitRight(body, i, true); + } + if (strip.open) { + omitLeft(body, i, true); + } + + if (inlineStandalone) { + omitRight(body, i); + + if (omitLeft(body, i)) { + // If we are on a standalone node, save the indent info for partials + if (current.type === 'PartialStatement') { + // Pull out the whitespace from the final line + current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1]; + } + } + } + if (openStandalone) { + omitRight((current.program || current.inverse).body); + + // Strip out the previous content node if it's whitespace only + omitLeft(body, i); + } + if (closeStandalone) { + // Always strip the next node + omitRight(body, i); + + omitLeft((current.inverse || current.program).body); + } + } + + return program; + }; + WhitespaceControl.prototype.BlockStatement = function (block) { + this.accept(block.program); + this.accept(block.inverse); + + // Find the inverse program that is involed with whitespace stripping. + var program = block.program || block.inverse, + inverse = block.program && block.inverse, + firstInverse = inverse, + lastInverse = inverse; + + if (inverse && inverse.chained) { + firstInverse = inverse.body[0].program; + + // Walk the inverse chain to find the last inverse that is actually in the chain. + while (lastInverse.chained) { + lastInverse = lastInverse.body[lastInverse.body.length - 1].program; + } + } + + var strip = { + open: block.openStrip.open, + close: block.closeStrip.close, + + // Determine the standalone candiacy. Basically flag our content as being possibly standalone + // so our parent can determine if we actually are standalone + openStandalone: isNextWhitespace(program.body), + closeStandalone: isPrevWhitespace((firstInverse || program).body) + }; + + if (block.openStrip.close) { + omitRight(program.body, null, true); + } + + if (inverse) { + var inverseStrip = block.inverseStrip; + + if (inverseStrip.open) { + omitLeft(program.body, null, true); + } + + if (inverseStrip.close) { + omitRight(firstInverse.body, null, true); + } + if (block.closeStrip.open) { + omitLeft(lastInverse.body, null, true); + } + + // Find standalone else statments + if (isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) { + omitLeft(program.body); + omitRight(firstInverse.body); + } + } else if (block.closeStrip.open) { + omitLeft(program.body, null, true); + } + + return strip; + }; + + WhitespaceControl.prototype.MustacheStatement = function (mustache) { + return mustache.strip; + }; + + WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) { + /* istanbul ignore next */ + var strip = node.strip || {}; + return { + inlineStandalone: true, + open: strip.open, + close: strip.close + }; + }; + + function isPrevWhitespace(body, i, isRoot) { + if (i === undefined) { + i = body.length; + } + + // Nodes that end with newlines are considered whitespace (but are special + // cased for strip operations) + var prev = body[i - 1], + sibling = body[i - 2]; + if (!prev) { + return isRoot; + } + + if (prev.type === 'ContentStatement') { + return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original); + } + } + function isNextWhitespace(body, i, isRoot) { + if (i === undefined) { + i = -1; + } + + var next = body[i + 1], + sibling = body[i + 2]; + if (!next) { + return isRoot; + } + + if (next.type === 'ContentStatement') { + return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original); + } + } + + // Marks the node to the right of the position as omitted. + // I.e. {{foo}}' ' will mark the ' ' node as omitted. + // + // If i is undefined, then the first child will be marked as such. + // + // If mulitple is truthy then all whitespace will be stripped out until non-whitespace + // content is met. + function omitRight(body, i, multiple) { + var current = body[i == null ? 0 : i + 1]; + if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) { + return; + } + + var original = current.value; + current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ''); + current.rightStripped = current.value !== original; + } + + // Marks the node to the left of the position as omitted. + // I.e. ' '{{foo}} will mark the ' ' node as omitted. + // + // If i is undefined then the last child will be marked as such. + // + // If mulitple is truthy then all whitespace will be stripped out until non-whitespace + // content is met. + function omitLeft(body, i, multiple) { + var current = body[i == null ? body.length - 1 : i - 1]; + if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) { + return; + } + + // We omit the last node if it's whitespace only and not preceeded by a non-content node. + var original = current.value; + current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ''); + current.leftStripped = current.value !== original; + return current.leftStripped; + } + + exports.default = WhitespaceControl; +}); +enifed('htmlbars-syntax/handlebars/exception', ['exports'], function (exports) { + 'use strict'; + + var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; + + function Exception(message, node) { + var loc = node && node.loc, + line = undefined, + column = undefined; + if (loc) { + line = loc.start.line; + column = loc.start.column; + + message += ' - ' + line + ':' + column; + } + + var tmp = Error.prototype.constructor.call(this, message); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, Exception); + } + + if (loc) { + this.lineNumber = line; + this.column = column; + } + } + + Exception.prototype = new Error(); + + exports.default = Exception; +}); +enifed('htmlbars-syntax/handlebars/safe-string', ['exports'], function (exports) { + // Build out our basic SafeString type + 'use strict'; + + function SafeString(string) { + this.string = string; + } + + SafeString.prototype.toString = SafeString.prototype.toHTML = function () { + return '' + this.string; + }; + + exports.default = SafeString; +}); +enifed('htmlbars-syntax/handlebars/utils', ['exports'], function (exports) { + 'use strict'; + + exports.extend = extend; + exports.indexOf = indexOf; + exports.escapeExpression = escapeExpression; + exports.isEmpty = isEmpty; + exports.blockParams = blockParams; + exports.appendContextPath = appendContextPath; + var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + var badChars = /[&<>"'`]/g, + possible = /[&<>"'`]/; + + function escapeChar(chr) { + return escape[chr]; + } + + function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; + } + + var toString = Object.prototype.toString; + + exports.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + /*eslint-disable func-style, no-var */ + var isFunction = function (value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + /* istanbul ignore next */ + if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + var isFunction; + exports.isFunction = isFunction; + /*eslint-enable func-style, no-var */ + + /* istanbul ignore next */ + var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; + }; + + exports.isArray = isArray; + // Older IE versions do not directly support indexOf so we must implement our own, sadly. + + function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; + } + + function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + } + + function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + function blockParams(params, ids) { + params.path = ids; + return params; + } + + function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; + } +}); +enifed("htmlbars-syntax/parser/handlebars-node-visitors", ["exports", "htmlbars-syntax/builders", "htmlbars-syntax/utils"], function (exports, _htmlbarsSyntaxBuilders, _htmlbarsSyntaxUtils) { + "use strict"; + + exports.default = { + + Program: function (program) { + var body = []; + var node = _htmlbarsSyntaxBuilders.default.program(body, program.blockParams, program.loc); + var i, + l = program.body.length; + + this.elementStack.push(node); + + if (l === 0) { + return this.elementStack.pop(); + } + + for (i = 0; i < l; i++) { + this.acceptNode(program.body[i]); + } + + // Ensure that that the element stack is balanced properly. + var poppedNode = this.elementStack.pop(); + if (poppedNode !== node) { + throw new Error("Unclosed element `" + poppedNode.tag + "` (on line " + poppedNode.loc.start.line + ")."); + } + + return node; + }, + + BlockStatement: function (block) { + delete block.inverseStrip; + delete block.openString; + delete block.closeStrip; + + if (this.tokenizer.state === 'comment') { + this.appendToCommentData('{{' + this.sourceForMustache(block) + '}}'); + return; + } + + if (this.tokenizer.state !== 'comment' && this.tokenizer.state !== 'data' && this.tokenizer.state !== 'beforeData') { + throw new Error("A block may only be used inside an HTML element or another block."); + } + + block = acceptCommonNodes(this, block); + var program = block.program ? this.acceptNode(block.program) : null; + var inverse = block.inverse ? this.acceptNode(block.inverse) : null; + + var node = _htmlbarsSyntaxBuilders.default.block(block.path, block.params, block.hash, program, inverse, block.loc); + var parentProgram = this.currentElement(); + _htmlbarsSyntaxUtils.appendChild(parentProgram, node); + }, + + MustacheStatement: function (rawMustache) { + var tokenizer = this.tokenizer; + var path = rawMustache.path; + var params = rawMustache.params; + var hash = rawMustache.hash; + var escaped = rawMustache.escaped; + var loc = rawMustache.loc; + + var mustache = _htmlbarsSyntaxBuilders.default.mustache(path, params, hash, !escaped, loc); + + if (tokenizer.state === 'comment') { + this.appendToCommentData('{{' + this.sourceForMustache(mustache) + '}}'); + return; + } + + acceptCommonNodes(this, mustache); + + switch (tokenizer.state) { + // Tag helpers + case "tagName": + addElementModifier(this.currentNode, mustache); + tokenizer.state = "beforeAttributeName"; + break; + case "beforeAttributeName": + addElementModifier(this.currentNode, mustache); + break; + case "attributeName": + case "afterAttributeName": + this.beginAttributeValue(false); + this.finishAttributeValue(); + addElementModifier(this.currentNode, mustache); + tokenizer.state = "beforeAttributeName"; + break; + case "afterAttributeValueQuoted": + addElementModifier(this.currentNode, mustache); + tokenizer.state = "beforeAttributeName"; + break; + + // Attribute values + case "beforeAttributeValue": + appendDynamicAttributeValuePart(this.currentAttribute, mustache); + tokenizer.state = 'attributeValueUnquoted'; + break; + case "attributeValueDoubleQuoted": + case "attributeValueSingleQuoted": + case "attributeValueUnquoted": + appendDynamicAttributeValuePart(this.currentAttribute, mustache); + break; + + // TODO: Only append child when the tokenizer state makes + // sense to do so, otherwise throw an error. + default: + _htmlbarsSyntaxUtils.appendChild(this.currentElement(), mustache); + } + + return mustache; + }, + + ContentStatement: function (content) { + var changeLines = 0; + if (content.rightStripped) { + changeLines = leadingNewlineDifference(content.original, content.value); + } + + this.tokenizer.line = this.tokenizer.line + changeLines; + this.tokenizer.tokenizePart(content.value); + this.tokenizer.flushData(); + }, + + CommentStatement: function (comment) { + return comment; + }, + + PartialStatement: function (partial) { + _htmlbarsSyntaxUtils.appendChild(this.currentElement(), partial); + return partial; + }, + + SubExpression: function (sexpr) { + return acceptCommonNodes(this, sexpr); + }, + + PathExpression: function (path) { + delete path.data; + delete path.depth; + + return path; + }, + + Hash: function (hash) { + for (var i = 0; i < hash.pairs.length; i++) { + this.acceptNode(hash.pairs[i].value); + } + + return hash; + }, + + StringLiteral: function () {}, + BooleanLiteral: function () {}, + NumberLiteral: function () {}, + UndefinedLiteral: function () {}, + NullLiteral: function () {} + }; + + function leadingNewlineDifference(original, value) { + if (value === '') { + // if it is empty, just return the count of newlines + // in original + return original.split("\n").length - 1; + } + + // otherwise, return the number of newlines prior to + // `value` + var difference = original.split(value)[0]; + var lines = difference.split(/\n/); + + return lines.length - 1; + } + + function acceptCommonNodes(compiler, node) { + compiler.acceptNode(node.path); + + if (node.params) { + for (var i = 0; i < node.params.length; i++) { + compiler.acceptNode(node.params[i]); + } + } else { + node.params = []; + } + + if (node.hash) { + compiler.acceptNode(node.hash); + } else { + node.hash = _htmlbarsSyntaxBuilders.default.hash(); + } + + return node; + } + + function addElementModifier(element, mustache) { + var path = mustache.path; + var params = mustache.params; + var hash = mustache.hash; + var loc = mustache.loc; + + var modifier = _htmlbarsSyntaxBuilders.default.elementModifier(path, params, hash, loc); + element.modifiers.push(modifier); + } + + function appendDynamicAttributeValuePart(attribute, part) { + attribute.isDynamic = true; + attribute.parts.push(part); + } +}); +enifed("htmlbars-syntax/parser/tokenizer-event-handlers", ["exports", "htmlbars-util/void-tag-names", "htmlbars-syntax/builders", "htmlbars-syntax/utils"], function (exports, _htmlbarsUtilVoidTagNames, _htmlbarsSyntaxBuilders, _htmlbarsSyntaxUtils) { + "use strict"; + + exports.default = { + reset: function () { + this.currentNode = null; + }, + + // Comment + + beginComment: function () { + this.currentNode = _htmlbarsSyntaxBuilders.default.comment(""); + }, + + appendToCommentData: function (char) { + this.currentNode.value += char; + }, + + finishComment: function () { + _htmlbarsSyntaxUtils.appendChild(this.currentElement(), this.currentNode); + }, + + // Data + + beginData: function () { + this.currentNode = _htmlbarsSyntaxBuilders.default.text(); + }, + + appendToData: function (char) { + this.currentNode.chars += char; + }, + + finishData: function () { + _htmlbarsSyntaxUtils.appendChild(this.currentElement(), this.currentNode); + }, + + // Tags - basic + + beginStartTag: function () { + this.currentNode = { + type: 'StartTag', + name: "", + attributes: [], + modifiers: [], + selfClosing: false, + loc: null + }; + }, + + beginEndTag: function () { + this.currentNode = { + type: 'EndTag', + name: "", + attributes: [], + modifiers: [], + selfClosing: false, + loc: null + }; + }, + + finishTag: function () { + var _tokenizer = this.tokenizer; + var tagLine = _tokenizer.tagLine; + var tagColumn = _tokenizer.tagColumn; + var line = _tokenizer.line; + var column = _tokenizer.column; + + var tag = this.currentNode; + tag.loc = _htmlbarsSyntaxBuilders.default.loc(tagLine, tagColumn, line, column); + + if (tag.type === 'StartTag') { + this.finishStartTag(); + + if (_htmlbarsUtilVoidTagNames.default.hasOwnProperty(tag.name) || tag.selfClosing) { + this.finishEndTag(true); + } + } else if (tag.type === 'EndTag') { + this.finishEndTag(false); + } + }, + + finishStartTag: function () { + var _currentNode = this.currentNode; + var name = _currentNode.name; + var attributes = _currentNode.attributes; + var modifiers = _currentNode.modifiers; + + validateStartTag(this.currentNode, this.tokenizer); + + var loc = _htmlbarsSyntaxBuilders.default.loc(this.tokenizer.tagLine, this.tokenizer.tagColumn); + var element = _htmlbarsSyntaxBuilders.default.element(name, attributes, modifiers, [], loc); + this.elementStack.push(element); + }, + + finishEndTag: function (isVoid) { + var tag = this.currentNode; + + var element = this.elementStack.pop(); + var parent = this.currentElement(); + var disableComponentGeneration = this.options.disableComponentGeneration === true; + + validateEndTag(tag, element, isVoid); + + element.loc.end.line = this.tokenizer.line; + element.loc.end.column = this.tokenizer.column; + + if (disableComponentGeneration || cannotBeComponent(element.tag)) { + _htmlbarsSyntaxUtils.appendChild(parent, element); + } else { + var program = _htmlbarsSyntaxBuilders.default.program(element.children); + _htmlbarsSyntaxUtils.parseComponentBlockParams(element, program); + var component = _htmlbarsSyntaxBuilders.default.component(element.tag, element.attributes, program, element.loc); + _htmlbarsSyntaxUtils.appendChild(parent, component); + } + }, + + markTagAsSelfClosing: function () { + this.currentNode.selfClosing = true; + }, + + // Tags - name + + appendToTagName: function (char) { + this.currentNode.name += char; + }, + + // Tags - attributes + + beginAttribute: function () { + var tag = this.currentNode; + if (tag.type === 'EndTag') { + throw new Error("Invalid end tag: closing tag must not have attributes, " + ("in `" + tag.name + "` (on line " + this.tokenizer.line + ").")); + } + + this.currentAttribute = { + name: "", + parts: [], + isQuoted: false, + isDynamic: false + }; + }, + + appendToAttributeName: function (char) { + this.currentAttribute.name += char; + }, + + beginAttributeValue: function (isQuoted) { + this.currentAttribute.isQuoted = isQuoted; + }, + + appendToAttributeValue: function (char) { + var parts = this.currentAttribute.parts; + + if (typeof parts[parts.length - 1] === 'string') { + parts[parts.length - 1] += char; + } else { + parts.push(char); + } + }, + + finishAttributeValue: function () { + var _currentAttribute = this.currentAttribute; + var name = _currentAttribute.name; + var parts = _currentAttribute.parts; + var isQuoted = _currentAttribute.isQuoted; + var isDynamic = _currentAttribute.isDynamic; + + var value = assembleAttributeValue(parts, isQuoted, isDynamic, this.tokenizer.line); + + this.currentNode.attributes.push(_htmlbarsSyntaxBuilders.default.attr(name, value)); + } + }; + + function assembleAttributeValue(parts, isQuoted, isDynamic, line) { + if (isDynamic) { + if (isQuoted) { + return assembleConcatenatedValue(parts); + } else { + if (parts.length === 1 || parts.length === 2 && parts[1] === '/') { + return parts[0]; + } else { + throw new Error("An unquoted attribute value must be a string or a mustache, " + "preceeded by whitespace or a '=' character, and " + ("followed by whitespace, a '>' character or a '/>' (on line " + line + ")")); + } + } + } else { + return _htmlbarsSyntaxBuilders.default.text(parts.length > 0 ? parts[0] : ""); + } + } + + function assembleConcatenatedValue(parts) { + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + + if (typeof part === 'string') { + parts[i] = _htmlbarsSyntaxBuilders.default.string(parts[i]); + } else { + if (part.type === 'MustacheStatement') { + parts[i] = _htmlbarsSyntaxUtils.unwrapMustache(part); + } else { + throw new Error("Unsupported node in quoted attribute value: " + part.type); + } + } + } + + return _htmlbarsSyntaxBuilders.default.concat(parts); + } + + function cannotBeComponent(tagName) { + return tagName.indexOf("-") === -1 && tagName.indexOf(".") === -1; + } + + function validateStartTag(tag, tokenizer) { + // No support for ",""===t.firstChild.innerHTML}(s),c=s&&function(e){var t=e.createElement("div");return t.innerHTML="Test: Value","Test:"===t.childNodes[0].nodeValue&&" Value"===t.childNodes[2].nodeValue}(s),m=s&&function(e){var t,r,n=e.createElement("table");try{n.innerHTML=""}catch(i){}finally{r=0===n.childNodes.length}r&&(t={colgroup:["table"],table:[],tbody:["table"],tfoot:["table"],thead:["table"],tr:["table","tbody"]});var a=e.createElement("select");return a.innerHTML="",a.childNodes[0]||(t=t||{},t.select=[]),t}(s);o=l?function(e,r,i){return e=n(e,r),r=i.cloneNode(r,!1),t(r,e),r.childNodes}:function(e,t,r){return e=n(e,t),t=r.cloneNode(t,!1),t.innerHTML=e,t.childNodes};var h;h=m||c?function(e,t,n){var i=[],a=[];"string"==typeof e&&(e=e.replace(/(\s*)()(\s*)/g,function(e,t,r){return a.push(r),t}));var s;s=m[t.tagName.toLowerCase()]?r(e,t):o(e,t,n);var u,l,c,h,d=[];for(u=0;u0&&(p=n.document.createTextNode(v),f.parentNode.insertBefore(p,f)),g=a[u],g&&g.length>0&&(p=n.document.createTextNode(g),f.parentNode.insertBefore(p,f.nextSibling));return s}:o;var d;u?e.buildHTMLDOM=d=function(e,t,r){return i[t.tagName]?h(e,document.createElement("div"),r):h(e,t,r)}:e.buildHTMLDOM=d=h,e.buildHTMLDOM=d}),e("dom-helper/classes",["exports"],function(e){"use strict";function t(e){var t=e.getAttribute("class")||"";return""!==t&&" "!==t?t.split(" "):[]}function r(e,t){for(var r=0,n=e.length,i=0,a=t.length,o=new Array(a);n>r;r++)for(i=0;a>i;i++)if(t[i]===e[r]){o[i]=r;break}return o}function n(e,n){for(var i=t(e),a=r(i,n),o=!1,s=0,u=n.length;u>s;s++)void 0===a[s]&&(o=!0,i.push(n[s]));o&&e.setAttribute("class",i.length>0?i.join(" "):"")}function i(e,n){for(var i=t(e),a=r(n,i),o=!1,s=[],u=0,l=i.length;l>u;u++)void 0===a[u]?s.push(i[u]):o=!0;o&&e.setAttribute("class",s.length>0?s.join(" "):"")}var a,o,s="undefined"==typeof document?!1:document,u=s&&function(){var e=document.createElement("div");return e.classList?(e.classList.add("boo"),e.classList.add("boo","baz"),"boo baz"===e.className):!1}();u?(e.addClasses=a=function(e,t){e.classList?1===t.length?e.classList.add(t[0]):2===t.length?e.classList.add(t[0],t[1]):e.classList.add.apply(e.classList,t):n(e,t)},e.removeClasses=o=function(e,t){e.classList?1===t.length?e.classList.remove(t[0]):2===t.length?e.classList.remove(t[0],t[1]):e.classList.remove.apply(e.classList,t):i(e,t)}):(e.addClasses=a=n,e.removeClasses=o=i),e.addClasses=a,e.removeClasses=o}),e("dom-helper/prop",["exports"],function(e){"use strict";function t(e){return null===e||void 0===e}function r(e,t){var r,i;if(t in e)i=t,r="prop";else{var a=t.toLowerCase();a in e?(r="prop",i=a):(r="attr",i=t)}return"prop"!==r||"style"!==i.toLowerCase()&&!n(e.tagName,i)||(r="attr"),{normalized:i,type:r}}function n(e,t){var r=i[e.toUpperCase()];return r&&r[t.toLowerCase()]||!1}e.isAttrRemovalValue=t,e.normalizeProperty=r;var i={BUTTON:{type:!0,form:!0},INPUT:{list:!0,type:!0,form:!0,autocorrect:!0},SELECT:{form:!0},OPTION:{form:!0},TEXTAREA:{form:!0},LABEL:{form:!0},FIELDSET:{form:!0},LEGEND:{form:!0},OBJECT:{form:!0}}}),e("dom-helper",["exports","htmlbars-runtime/morph","morph-attr","dom-helper/build-html-dom","dom-helper/classes","dom-helper/prop"],function(e,t,r,n,i,a){"use strict";function o(e){return e&&e.namespaceURI===n.svgNamespace&&!n.svgHTMLIntegrationPoints[e.tagName]?n.svgNamespace:null}function s(e,t){if("TABLE"===t.tagName){var r=_.exec(e);if(r){var n=r[1];return"tr"===n||"col"===n}}}function u(e,t){var r=t.document.createElement("div");return r.innerHTML=""+e+"",r.firstChild.childNodes}function l(e,t,r){this.element=e,this.dom=t,this.namespace=r,this.guid="element"+w++,this._state=void 0,this.isDirty=!0}function c(e){if(this.document=e||document,!this.document)throw new Error("A document object must be passed to the DOMHelper, or available on the global scope");this.canClone=y,this.namespace=null,m(this)}function m(e){var t=d.call(e,"foobar:baz");if("foobar:"===t)e.protocolForURL=d;else if("object"==typeof URL)k=URL,e.protocolForURL=f;else{if("object"!=typeof module||"function"!=typeof module.require)throw new Error("DOM Helper could not find valid URL parsing mechanism");k=module.require("url"),e.protocolForURL=f}e.document.createRawHTMLSection&&(e.setMorphHTML=h)}function h(e,t){var r=this.document.createRawHTMLSection(t);e.setNode(r)}function d(e){return E||(E=this.document.createElement("a")),E.href=e,E.protocol}function f(e){var t=k.parse(e).protocol;return null===t?":":t}var p="undefined"==typeof document?!1:document,v=p&&function(e){var t=e.createElement("div");t.appendChild(e.createTextNode(""));var r=t.cloneNode(!0);return 0===r.childNodes.length}(p),g=p&&function(e){var t=e.createElement("input");t.setAttribute("checked","checked");var r=t.cloneNode(!1);return!r.checked}(p),b=p&&(p.createElementNS?function(e){var t=e.createElementNS(n.svgNamespace,"svg");return t.setAttribute("viewBox","0 0 100 100"),t.removeAttribute("viewBox"),!t.getAttribute("viewBox")}(p):!0),y=p&&function(e){var t=e.createElement("div");t.appendChild(e.createTextNode(" ")),t.appendChild(e.createTextNode(" "));var r=t.cloneNode(!0);return" "===r.childNodes[0].nodeValue}(p),_=/<([\w:]+)/,w=1;l.prototype.getState=function(){return this._state||(this._state={}),this._state},l.prototype.setState=function(e){return this._state=e},l.prototype.clear=function(){},l.prototype.destroy=function(){this.element=null,this.dom=null};var x=c.prototype;x.constructor=c,x.getElementById=function(e,t){return t=t||this.document,t.getElementById(e)},x.insertBefore=function(e,t,r){return e.insertBefore(t,r)},x.appendChild=function(e,t){return e.appendChild(t)};var C;C="undefined"!=typeof navigator&&navigator.userAgent.indexOf("PhantomJS")?function(e,t){return e[t]}:function(e,t){return e.item(t)},x.childAt=function(e,t){for(var r=e,n=0;nn;n++)r=r.nextSibling;return r},x.appendText=function(e,t){return e.appendChild(this.document.createTextNode(t))},x.setAttribute=function(e,t,r){e.setAttribute(t,String(r))},x.getAttribute=function(e,t){return e.getAttribute(t)},x.setAttributeNS=function(e,t,r,n){e.setAttributeNS(t,r,String(n))},x.getAttributeNS=function(e,t,r){return e.getAttributeNS(t,r)},b?x.removeAttribute=function(e,t){e.removeAttribute(t)}:x.removeAttribute=function(e,t){"svg"===e.tagName&&"viewBox"===t?e.setAttribute(t,null):e.removeAttribute(t)},x.setPropertyStrict=function(e,t,r){void 0===r&&(r=null),null!==r||"value"!==t&&"type"!==t&&"src"!==t||(r=""),e[t]=r},x.getPropertyStrict=function(e,t){return e[t]},x.setProperty=function(e,t,r,i){if(e.namespaceURI===n.svgNamespace)a.isAttrRemovalValue(r)?e.removeAttribute(t):i?e.setAttributeNS(i,t,r):e.setAttribute(t,r);else{var o=a.normalizeProperty(e,t),s=o.normalized,u=o.type;"prop"===u?e[s]=r:a.isAttrRemovalValue(r)?e.removeAttribute(t):i&&e.setAttributeNS?e.setAttributeNS(i,t,r):e.setAttribute(t,r)}},p&&p.createElementNS?(x.createElement=function(e,t){var r=this.namespace;return t&&(r="svg"===e?n.svgNamespace:o(t)), +r?this.document.createElementNS(r,e):this.document.createElement(e)},x.setAttributeNS=function(e,t,r,n){e.setAttributeNS(t,r,String(n))}):(x.createElement=function(e){return this.document.createElement(e)},x.setAttributeNS=function(e,t,r,n){e.setAttribute(r,String(n))}),x.addClasses=i.addClasses,x.removeClasses=i.removeClasses,x.setNamespace=function(e){this.namespace=e},x.detectNamespace=function(e){this.namespace=o(e)},x.createDocumentFragment=function(){return this.document.createDocumentFragment()},x.createTextNode=function(e){return this.document.createTextNode(e)},x.createComment=function(e){return this.document.createComment(e)},x.repairClonedNode=function(e,t,r){if(v&&t.length>0)for(var n=0,i=t.length;i>n;n++){var a=this.document.createTextNode(""),o=t[n],s=this.childAtIndex(e,o);s?e.insertBefore(a,s):e.appendChild(a)}g&&r&&e.setAttribute("checked","checked")},x.cloneNode=function(e,t){var r=e.cloneNode(!!t);return r},x.AttrMorphClass=r["default"],x.createAttrMorph=function(e,t,r){return this.AttrMorphClass.create(e,t,this,r)},x.ElementMorphClass=l,x.createElementMorph=function(e,t){return new this.ElementMorphClass(e,this,t)},x.createUnsafeAttrMorph=function(e,t,r){var n=this.createAttrMorph(e,t,r);return n.escaped=!1,n},x.MorphClass=t["default"],x.createMorph=function(e,t,r,n){if(n&&11===n.nodeType)throw new Error("Cannot pass a fragment as the contextual element to createMorph");!n&&e&&1===e.nodeType&&(n=e);var i=new this.MorphClass(this,n);return i.firstNode=t,i.lastNode=r,i},x.createFragmentMorph=function(e){if(e&&11===e.nodeType)throw new Error("Cannot pass a fragment as the contextual element to createMorph");var r=this.createDocumentFragment();return t["default"].create(this,e,r)},x.replaceContentWithMorph=function(e){var r=e.firstChild;if(r){var n=t["default"].attach(this,e,r,e.lastChild);return n.clear(),n}var i=this.createComment("");return this.appendChild(e,i),t["default"].create(this,e,i)},x.createUnsafeMorph=function(e,t,r,n){var i=this.createMorph(e,t,r,n);return i.parseTextAsHTML=!0,i},x.createMorphAt=function(e,t,r,n){var i=t===r,a=this.childAtIndex(e,t),o=i?a:this.childAtIndex(e,r);return this.createMorph(e,a,o,n)},x.createUnsafeMorphAt=function(e,t,r,n){var i=this.createMorphAt(e,t,r,n);return i.parseTextAsHTML=!0,i},x.insertMorphBefore=function(e,t,r){var n=this.document.createComment("");return e.insertBefore(n,t),this.createMorph(e,n,n,r)},x.appendMorph=function(e,t){var r=this.document.createComment("");return e.appendChild(r),this.createMorph(e,r,r,t)},x.insertBoundary=function(e,t){var r=null===t?null:this.childAtIndex(e,t);this.insertBefore(e,this.createTextNode(""),r)},x.setMorphHTML=function(e,t){e.setHTML(t)},x.parseHTML=function(e,t){var r;if(o(t)===n.svgNamespace)r=u(e,this);else{var i=n.buildHTMLDOM(e,t,this);if(s(e,t)){for(var a=i[0];a&&1!==a.nodeType;)a=a.nextSibling;r=a.childNodes}else r=i}var l=this.document.createDocumentFragment();if(r&&r.length>0){var c=r[0];for("SELECT"===t.tagName&&(c=c.nextSibling);c;){var m=c;c=c.nextSibling,l.appendChild(m)}}return l};var k,E;e["default"]=c}),e("ember/index",["exports","ember-metal","ember-runtime","ember-views","ember-routing","ember-application","ember-extension-support","ember-htmlbars","ember-routing-htmlbars","ember-routing-views","require","ember-runtime/system/lazy_load"],function(e,t,r,n,i,a,o,s,u,l,c,m){"use strict";c.has("ember-template-compiler")&&c["default"]("ember-template-compiler"),c.has("ember-testing")&&c["default"]("ember-testing"),m.runLoadHooks("Ember")}),e("ember-application/index",["exports","ember-metal/core","ember-metal/features","ember-runtime/system/lazy_load","ember-application/system/resolver","ember-application/system/application","ember-application/system/application-instance","ember-application/system/engine","ember-application/system/engine-instance"],function(e,t,r,n,i,a,o,s,u){"use strict";t["default"].Application=a["default"],t["default"].Resolver=i.Resolver,t["default"].DefaultResolver=i["default"],n.runLoadHooks("Ember.Application",a["default"])}),e("ember-application/system/application-instance",["exports","ember-metal/debug","ember-metal/features","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-metal/computed","ember-htmlbars/system/dom-helper","ember-runtime/mixins/registry_proxy","ember-metal-views/renderer","ember-metal/assign","ember-metal/environment","ember-runtime/ext/rsvp","ember-views/system/jquery","ember-application/system/engine-instance"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f){"use strict";var p=void 0,v=f["default"].extend({application:null,customEvents:null,rootElement:null,init:function(){this._super.apply(this,arguments);this.application;this.register("-application-instance:main",this,{instantiate:!1}),this._booted=!1},boot:function(){var e=this,t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];return this._bootPromise?this._bootPromise:(this._bootPromise=new h["default"].Promise(function(r){return r(e._bootSync(t))}),this._bootPromise)},_bootSync:function(e){if(this._booted)return this;e=new p(e);var t=this.__registry__;if(t.register("-environment:main",e.toEnvironment(),{instantiate:!1}),t.injection("view","_environment","-environment:main"),t.injection("route","_environment","-environment:main"),t.register("renderer:-dom",{create:function(){return new l["default"](new s["default"](e.document),e.isInteractive)}}),e.rootElement?this.rootElement=e.rootElement:this.rootElement=this.application.rootElement,e.location){var r=n.get(this,"router");i.set(r,"location",e.location)}return this.application.runInstanceInitializers(this),e.isInteractive&&this.setupEventDispatcher(),this._booted=!0,this},router:o.computed(function(){return this.lookup("router:main")}).readOnly(),didCreateRootView:function(e){e.appendTo(this.rootElement)},startRouting:function(){var e=n.get(this,"router");e.startRouting(),this._didSetupRouter=!0},setupRouter:function(){if(!this._didSetupRouter){this._didSetupRouter=!0;var e=n.get(this,"router");e.setupRouter()}},handleURL:function(e){var t=n.get(this,"router");return this.setupRouter(),t.handleURL(e)},setupEventDispatcher:function(){var e=this.lookup("event_dispatcher:main"),t=n.get(this.application,"customEvents"),r=n.get(this,"customEvents"),i=c["default"]({},t,r);return e.setup(i,this.rootElement),e}});v.reopen({getURL:function(){var e=n.get(this,"router");return n.get(e,"url")},visit:function(e){var t=this;this.setupRouter();var r=n.get(this,"router"),i=function(){return new h["default"].Promise(function(e){a["default"].next(null,e,t)})},o=function(e){if(e.error)throw e.error;if("TransitionAborted"===e.name&&r.router.activeTransition)return r.router.activeTransition.then(i,o);throw"TransitionAborted"===e.name?new Error(e.message):e};return n.get(r,"location").setURL(e),r.handleURL(e).then(i,o)}}),p=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.jQuery=d["default"],this.isInteractive=m["default"].hasDOM,void 0!==e.isBrowser?this.isBrowser=!!e.isBrowser:this.isBrowser=m["default"].hasDOM,this.isBrowser||(this.jQuery=null,this.isInteractive=!1,this.location="none"),void 0!==e.shouldRender?this.shouldRender=!!e.shouldRender:this.shouldRender=!0,this.shouldRender||(this.jQuery=null,this.isInteractive=!1),e.document?this.document=e.document:this.document="undefined"!=typeof document?document:null,e.rootElement&&(this.rootElement=e.rootElement),void 0!==e.location&&(this.location=e.location),void 0!==e.jQuery&&(this.jQuery=e.jQuery),void 0!==e.isInteractive&&(this.isInteractive=!!e.isInteractive)},p.prototype.toEnvironment=function(){var e=c["default"]({},m["default"]);return e.hasDOM=this.isBrowser,e.options=this,e},Object.defineProperty(v.prototype,"container",{configurable:!0,enumerable:!1,get:function(){var e=this;return{lookup:function(){return e.lookup.apply(e,arguments)}}}}),Object.defineProperty(v.prototype,"registry",{configurable:!0,enumerable:!1,get:function(){return u.buildFakeRegistryWithDeprecations(this,"ApplicationInstance")}}),e["default"]=v}),e("ember-application/system/application",["exports","ember-metal","ember-metal/debug","ember-metal/features","ember-metal/property_get","ember-runtime/system/lazy_load","ember-metal/run_loop","ember-runtime/controllers/controller","ember-metal-views/renderer","ember-htmlbars/system/dom-helper","ember-views/views/select","ember-routing-views/views/outlet","ember-views/views/view","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-routing/system/cache","ember-application/system/application-instance","ember-views/views/text_field","ember-views/views/text_area","ember-views/views/checkbox","ember-views/views/legacy_each_view","ember-routing-views/components/link-to","ember-routing/services/routing","ember-extension-support/container_debug_adapter","ember-runtime/mixins/registry_proxy","ember-metal/environment","ember-runtime/ext/rsvp","ember-application/system/engine"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b,y,_,w,x,C,k,E,O,N,A,S,T,P,R,M){"use strict";function L(){V=!1,F=!1}function D(){I||(I=!0,P["default"].hasDOM&&t["default"].libraries.registerCoreLibrary("jQuery",f["default"]().jquery))}function j(){if(t["default"].LOG_VERSION){t["default"].LOG_VERSION=!1;for(var e=t["default"].libraries._registry,r=e.map(function(e){return i.get(e,"name.length")}),n=Math.max.apply(this,r),a=0,o=e.length;o>a;a++){var s=e[a];new Array(n-s.name.length+1).join(" ")}}}e._resetLegacyAddonWarnings=L;var I=!1,V=!1,F=!1,H=M["default"].extend({_suppressDeferredDeprecation:!0,rootElement:"body",eventDispatcher:null,customEvents:null,autoboot:!0,_globalsMode:!0,init:function(){this._super.apply(this,arguments),this.$||(this.$=f["default"]),D(),j(),this._readinessDeferrals=1,this._booted=!1,this.autoboot=this._globalsMode=!!this.autoboot,this._globalsMode&&this._prepareForGlobalsMode(),this.autoboot&&this.waitForDOMReady()},buildInstance:function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];return e.base=this,e.application=this,x["default"].create(e)},_prepareForGlobalsMode:function(){this.Router=(this.Router||v["default"]).extend(),this._buildDeprecatedInstance()},_buildDeprecatedInstance:function(){var e=this.buildInstance();this.__deprecatedInstance__=e,this.__container__=e.__container__,h["default"].views=e.lookup("-view-registry:main")},waitForDOMReady:function(){!this.$||this.$.isReady?o["default"].schedule("actions",this,"domReady"):this.$().ready(o["default"].bind(this,"domReady"))},domReady:function(){this.isDestroyed||this._bootSync()},deferReadiness:function(){this._readinessDeferrals++},advanceReadiness:function(){this._readinessDeferrals--,0===this._readinessDeferrals&&o["default"].once(this,this.didBecomeReady)},boot:function(){if(this._bootPromise)return this._bootPromise;try{this._bootSync()}catch(e){}return this._bootPromise},_bootSync:function(){if(!this._booted){t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT&&!V&&(V=!0),t["default"].ENV._ENABLE_LEGACY_CONTROLLER_SUPPORT&&!F&&(F=!0);var e=this._bootResolver=new R["default"].defer;this._bootPromise=e.promise;try{this.runInitializers(),a.runLoadHooks("application",this),this.advanceReadiness()}catch(r){throw e.reject(r),r}}},reset:function(){function e(){o["default"](t,"destroy"),this._buildDeprecatedInstance(),o["default"].schedule("actions",this,"_bootSync")}var t=this.__deprecatedInstance__;this._readinessDeferrals=1,this._bootPromise=null,this._bootResolver=null,this._booted=!1,o["default"].join(this,e)},didBecomeReady:function(){try{if(t["default"].testing||(t["default"].Namespace.processAll(),t["default"].BOOTED=!0),this.autoboot){var e=void 0;e=this._globalsMode?this.__deprecatedInstance__:this.buildInstance(),e._bootSync(),this.ready(),e.startRouting()}this._bootResolver.resolve(this),this._booted=!0}catch(r){throw this._bootResolver.reject(r),r}},ready:function(){return this},willDestroy:function(){this._super.apply(this,arguments),t["default"].BOOTED=!1,this._booted=!1,this._bootPromise=null,this._bootResolver=null,a._loaded.application===this&&(a._loaded.application=void 0),this._globalsMode&&this.__deprecatedInstance__&&this.__deprecatedInstance__.destroy()}});Object.defineProperty(H.prototype,"registry",{configurable:!0,enumerable:!1,get:function(){return T.buildFakeRegistryWithDeprecations(this,"Application")}}),H.reopen({visit:function(e,t){var r=this;return this.boot().then(function(){return r.buildInstance().boot(t).then(function(t){return t.visit(e)})})}}),H.reopenClass({buildRegistry:function(e){var r=this._super.apply(this,arguments);return r.optionsForType("component",{singleton:!1}),r.optionsForType("view",{singleton:!1}),r.optionsForType("template",{instantiate:!1}),r.register("application:main",e,{instantiate:!1}),r.register("controller:basic",s["default"],{instantiate:!1}),r.register("renderer:-dom",{create:function(){return new u["default"](new l["default"])}}),r.injection("view","renderer","renderer:-dom"),t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT&&r.register("view:select",c["default"]),r.register("view:-outlet",m.OutletView),r.register("-view-registry:main",{create:function(){return{}}}),r.injection("view","_viewRegistry","-view-registry:main"),r.register("view:toplevel",h["default"].extend()),r.register("route:basic",p["default"],{instantiate:!1}),r.register("event_dispatcher:main",d["default"]),r.injection("router:main","namespace","application:main"),r.injection("view:-outlet","namespace","application:main"),r.register("location:auto",y["default"]),r.register("location:hash",g["default"]),r.register("location:history",b["default"]),r.register("location:none",_["default"]),r.injection("controller","target","router:main"),r.injection("controller","namespace","application:main"),r.register("-bucket-cache:main",w["default"]),r.injection("router","_bucketCache","-bucket-cache:main"),r.injection("route","_bucketCache","-bucket-cache:main"),r.injection("controller","_bucketCache","-bucket-cache:main"),r.injection("route","router","router:main"),r.register("component:-text-field",C["default"]),r.register("component:-text-area",k["default"]),r.register("component:-checkbox",E["default"]),r.register("view:-legacy-each",O["default"]),r.register("component:link-to",N["default"]),r.register("service:-routing",A["default"]),r.injection("service:-routing","router","router:main"),r.register("resolver-for-debugging:main",r.resolver,{instantiate:!1}),r.injection("container-debug-adapter:main","resolver","resolver-for-debugging:main"),r.injection("data-adapter:main","containerDebugAdapter","container-debug-adapter:main"),r.register("container-debug-adapter:main",S["default"]),r}}),e["default"]=H}),e("ember-application/system/engine-instance",["exports","ember-runtime/system/object","container/registry","ember-runtime/mixins/container_proxy","ember-runtime/mixins/registry_proxy","ember-metal/run_loop"],function(e,t,r,n,i,a){"use strict";var o=t["default"].extend(i["default"],n["default"],{base:null,init:function(){this._super.apply(this,arguments);var e=this.base;e||(e=this.application,this.base=e);var t=this.__registry__=new r["default"]({fallback:e.__registry__});this.__container__=t.container({owner:this})},unregister:function(e){this.__container__.reset(e),this._super.apply(this,arguments)},willDestroy:function(){this._super.apply(this,arguments),a["default"](this.__container__,"destroy")}});e["default"]=o}),e("ember-application/system/engine",["exports","ember-runtime/system/namespace","container/registry","ember-runtime/mixins/registry_proxy","dag-map","ember-metal/property_get","ember-metal/property_set","ember-metal/debug","ember-metal/utils","ember-metal/empty_object","ember-application/system/resolver","ember-application/system/engine-instance"],function(e,t,r,n,i,a,o,s,u,l,c,m){"use strict";function h(e){var t=[];for(var r in e)t.push(r);return t}function d(e){var t=e.get("Resolver")||c["default"];return t.create({namespace:e})}function f(e,t){return function(t){if(void 0!==this.superclass[e]&&this.superclass[e]===this[e]){var r={};r[e]=Object.create(this[e]),this.reopenClass(r)}this[e][t.name]=t}}var p=t["default"].extend(n["default"],{init:function(){this._super.apply(this,arguments),this.buildRegistry()},buildInstance:function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];return e.base=this,m["default"].create(e)},buildRegistry:function(){var e=this.__registry__=this.constructor.buildRegistry(this);return e},initializer:function(e){this.constructor.initializer(e)},instanceInitializer:function(e){this.constructor.instanceInitializer(e)},runInitializers:function(){var e=this;this._runInitializer("initializers",function(t,r){2===r.initialize.length?r.initialize(e.__registry__,e):r.initialize(e)})},runInstanceInitializers:function(e){this._runInitializer("instanceInitializers",function(t,r){r.initialize(e)})},_runInitializer:function(e,t){for(var r,n=a.get(this.constructor,e),o=h(n),s=new i["default"],u=0;u-1&&(i=i.replace(/\.(.)/g,function(e){return e.charAt(1).toUpperCase()})),n.indexOf("_")>-1&&(i=i.replace(/_(.)/g,function(e){return e.charAt(1).toUpperCase()})),n.indexOf("-")>-1&&(i=i.replace(/-(.)/g,function(e){return e.charAt(1).toUpperCase()})),r+":"+i}return e},resolve:function(e){var t,r=this.parseName(e),n=r.resolveMethodName;return this[n]&&(t=this[n](r)),t=t||this.resolveOther(r),r.root&&r.root.LOG_RESOLVER&&this._logLookup(t,r),t&&s["default"](t,r),t},parseName:function(e){return this._parseNameCache[e]||(this._parseNameCache[e]=this._parseName(e))},_parseName:function(e){var t=e.split(":"),i=t[0],o=t[1],s=o,u=r.get(this,"namespace"),l=u,c=s.lastIndexOf("/"),m=-1!==c?s.slice(0,c):null;if("template"!==i&&-1!==c){var h=s.split("/");s=h[h.length-1];var d=n.capitalize(h.slice(0,-1).join("."));l=a["default"].byName(d)}var f="main"===o?"Main":n.classify(i);if(!s||!i)throw new TypeError("Invalid fullName: `"+e+"`, must be of the form `type:name` ");return{fullName:e,type:i,fullNameWithoutType:o,dirname:m,name:s,root:l,resolveMethodName:"resolve"+f}},lookupDescription:function(e){var t,r=this.parseName(e);return"template"===r.type?"template at "+r.fullNameWithoutType.replace(/\./g,"/"):(t=r.root+"."+n.classify(r.name).replace(/\./g,""),"model"!==r.type&&(t+=n.classify(r.type)),t)},makeToString:function(e,t){return e.toString()},useRouterNaming:function(e){e.name=e.name.replace(/\./g,"_"),"basic"===e.name&&(e.name="")},resolveTemplate:function(e){var t=e.fullNameWithoutType.replace(/\./g,"/");return l.get(t)||l.get(n.decamelize(t))},resolveView:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveController:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveRoute:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveModel:function(e){var t=n.classify(e.name),i=r.get(e.root,t);return i?i:void 0},resolveHelper:function(e){return this.resolveOther(e)||o["default"][e.fullNameWithoutType]},resolveOther:function(e){var t=n.classify(e.name)+n.classify(e.type),i=r.get(e.root,t);return i?i:void 0},resolveMain:function(e){var t=n.classify(e.type);return r.get(e.root,t)},_logLookup:function(e,t){var r,n;r=e?"[✓]":"[ ]",n=t.fullName.length>60?".":new Array(60-t.fullName.length).join(".")},knownForType:function(e){for(var t=r.get(this,"namespace"),i=n.classify(e),a=new RegExp(i+"$"),o=u["default"](null),s=Object.keys(t),l=0,c=s.length;c>l;l++){var m=s[l];if(a.test(m)){var h=this.translateToContainerFullname(e,m);o[h]=!0}}return o},translateToContainerFullname:function(e,t){var r=n.classify(e),i=t.slice(0,-1*r.length),a=n.dasherize(i);return e+":"+a}})}),e("ember-application/utils/validate-type",["exports","ember-metal/debug"],function(e,t){"use strict";function r(e,t){var r=n[t.type];if(r){r[0],r[1],r[2]}}e["default"]=r;var n={route:["assert","isRouteFactory","Ember.Route"],component:["deprecate","isComponentFactory","Ember.Component"],view:["deprecate","isViewFactory","Ember.View"],service:["deprecate","isServiceFactory","Ember.Service"]}}),e("ember-extension-support/container_debug_adapter",["exports","ember-metal/core","ember-runtime/system/native_array","ember-runtime/utils","ember-runtime/system/string","ember-runtime/system/namespace","ember-runtime/system/object"],function(e,t,r,n,i,a,o){"use strict";e["default"]=o["default"].extend({resolver:null,canCatalogEntriesByType:function(e){return"model"===e||"template"===e?!1:!0},catalogEntriesByType:function(e){var o=r.A(a["default"].NAMESPACES),s=r.A(),u=new RegExp(i.classify(e)+"$");return o.forEach(function(e){if(e!==t["default"])for(var r in e)if(e.hasOwnProperty(r)&&u.test(r)){var a=e[r];"class"===n.typeOf(a)&&s.push(i.dasherize(r.replace(u,"")))}}),s}})}),e("ember-extension-support/data_adapter",["exports","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","container/owner","ember-runtime/mixins/array"],function(e,t,r,n,i,a,o,s,u,l){"use strict";e["default"]=a["default"].extend({init:function(){this._super.apply(this,arguments),this.releaseMethods=o.A()},containerDebugAdapter:void 0,attributeLimit:3,acceptsModelName:!0,releaseMethods:o.A(),getFilters:function(){return o.A()},watchModelTypes:function(e,t){var r,n=this,i=this.getModelTypes(),a=o.A();r=i.map(function(e){var r=e.klass,i=n.wrapModelType(r,e.name);return a.push(n.observeModelType(e.name,t)),i}),e(r);var s=function(){a.forEach(function(e){return e()}),n.releaseMethods.removeObject(s)};return this.releaseMethods.pushObject(s),s},_nameToClass:function(e){return"string"==typeof e&&(e=u.getOwner(this)._lookupFactory("model:"+e)),e},watchRecords:function(e,t,r,n){var i,a=this,s=o.A(),u=this._nameToClass(e),c=this.getRecords(u,e),m=function(e){r([e])},h=c.map(function(e){return s.push(a.observeRecord(e,m)),a.wrapRecord(e)}),d=function(e,r,i,o){for(var u=r;r+o>u;u++){var c=l.objectAt(e,u),h=a.wrapRecord(c);s.push(a.observeRecord(c,m)),t([h])}i&&n(r,i)},f={didChange:d,willChange:function(){return this}};return l.addArrayObserver(c,this,f),i=function(){s.forEach(function(e){e()}),l.removeArrayObserver(c,a,f),a.releaseMethods.removeObject(i)},t(h),this.releaseMethods.pushObject(i),i},willDestroy:function(){this._super.apply(this,arguments),this.releaseMethods.forEach(function(e){e()})},detect:function(e){return!1},columnsForType:function(e){return o.A()},observeModelType:function(e,t){var n=this,i=this._nameToClass(e),a=this.getRecords(i,e),o=function(){t([n.wrapModelType(i,e)])},s={didChange:function(){r["default"].scheduleOnce("actions",this,o)},willChange:function(){return this}};l.addArrayObserver(a,this,s);var u=function(){l.removeArrayObserver(a,n,s)};return u},wrapModelType:function(e,r){var n,i=this.getRecords(e,r);return n={name:r,count:t.get(i,"length"),columns:this.columnsForType(e),object:e}},getModelTypes:function(){var e,t=this,r=this.get("containerDebugAdapter");return e=r.canCatalogEntriesByType("model")?r.catalogEntriesByType("model"):this._getObjectsOnNamespaces(),e=o.A(e).map(function(e){return{klass:t._nameToClass(e),name:e}}),e=o.A(e).filter(function(e){return t.detect(e.klass)}),o.A(e)},_getObjectsOnNamespaces:function(){var e=this,t=o.A(i["default"].NAMESPACES),r=o.A();return t.forEach(function(t){for(var i in t)if(t.hasOwnProperty(i)&&e.detect(t[i])){var a=n.dasherize(i);t instanceof s["default"]||!t.toString()||(a=t+"/"+a),r.push(a)}}),r},getRecords:function(e){return o.A()},wrapRecord:function(e){var t={object:e};return t.columnValues=this.getRecordColumnValues(e),t.searchKeywords=this.getRecordKeywords(e),t.filterValues=this.getRecordFilterValues(e),t.color=this.getRecordColor(e),t},getRecordColumnValues:function(e){return{}},getRecordKeywords:function(e){return o.A()},getRecordFilterValues:function(e){return{}},getRecordColor:function(e){return null},observeRecord:function(e,t){return function(){}}})}),e("ember-extension-support/index",["exports","ember-metal/core","ember-extension-support/data_adapter","ember-extension-support/container_debug_adapter"],function(e,t,r,n){"use strict";t["default"].DataAdapter=r["default"],t["default"].ContainerDebugAdapter=n["default"]}),e("ember-htmlbars/compat",["exports","ember-metal/core","ember-htmlbars/utils/string"],function(e,t,r){"use strict";var n=t["default"].Handlebars=t["default"].Handlebars||{};n.SafeString=r.SafeString,n.Utils={escapeExpression:r.escapeExpression},e["default"]=n}),e("ember-htmlbars/env",["exports","ember-metal","ember-metal/environment","htmlbars-runtime","ember-metal/assign","ember-htmlbars/hooks/subexpr","ember-htmlbars/hooks/concat","ember-htmlbars/hooks/link-render-node","ember-htmlbars/hooks/create-fresh-scope","ember-htmlbars/hooks/bind-shadow-scope","ember-htmlbars/hooks/bind-self","ember-htmlbars/hooks/bind-scope","ember-htmlbars/hooks/bind-local","ember-htmlbars/hooks/bind-block","ember-htmlbars/hooks/update-self","ember-htmlbars/hooks/get-root","ember-htmlbars/hooks/get-child","ember-htmlbars/hooks/get-block","ember-htmlbars/hooks/get-value","ember-htmlbars/hooks/get-cell-or-value","ember-htmlbars/hooks/cleanup-render-node","ember-htmlbars/hooks/destroy-render-node","ember-htmlbars/hooks/did-render-node","ember-htmlbars/hooks/will-cleanup-tree","ember-htmlbars/hooks/did-cleanup-tree","ember-htmlbars/hooks/classify","ember-htmlbars/hooks/component","ember-htmlbars/hooks/lookup-helper","ember-htmlbars/hooks/has-helper","ember-htmlbars/hooks/invoke-helper","ember-htmlbars/hooks/element","ember-htmlbars/helpers","ember-htmlbars/keywords","ember-htmlbars/system/dom-helper","ember-htmlbars/keywords/debugger","ember-htmlbars/keywords/with","ember-htmlbars/keywords/outlet","ember-htmlbars/keywords/unbound","ember-htmlbars/keywords/view","ember-htmlbars/keywords/component","ember-htmlbars/keywords/element-component","ember-htmlbars/keywords/partial","ember-htmlbars/keywords/input","ember-htmlbars/keywords/textarea","ember-htmlbars/keywords/collection","ember-htmlbars/keywords/yield","ember-htmlbars/keywords/legacy-yield","ember-htmlbars/keywords/mut","ember-htmlbars/keywords/each","ember-htmlbars/keywords/readonly","ember-htmlbars/keywords/get"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b,y,_,w,x,C,k,E,O,N,A,S,T,P,R,M,L,D,j,I,V,F,H,B,U,z,q,W,K,G,Q,Y,$){"use strict";var J=i["default"]({},n.hooks);J.keywords=R["default"],i["default"](J,{linkRenderNode:s["default"],createFreshScope:u["default"],createChildScope:u.createChildScope,bindShadowScope:l["default"],bindSelf:c["default"],bindScope:m["default"],bindLocal:h["default"],bindBlock:d["default"],updateSelf:f["default"],getBlock:g["default"],getRoot:p["default"],getChild:v["default"],getValue:b["default"],getCellOrValue:y["default"],subexpr:a["default"],concat:o["default"],cleanupRenderNode:_["default"],destroyRenderNode:w["default"],willCleanupTree:C["default"],didCleanupTree:k["default"],didRenderNode:x["default"],classify:E["default"],component:O["default"],lookupHelper:N["default"],hasHelper:A["default"],invokeHelper:S["default"],element:T["default"]}),R.registerKeyword("debugger",L["default"]),R.registerKeyword("with",D["default"]),R.registerKeyword("outlet",j["default"]),R.registerKeyword("unbound",I["default"]),R.registerKeyword("component",F["default"]),R.registerKeyword("@element_component",H["default"]),R.registerKeyword("partial",B["default"]),R.registerKeyword("input",U["default"]),R.registerKeyword("textarea",z["default"]),R.registerKeyword("yield",W["default"]),R.registerKeyword("legacy-yield",K["default"]),R.registerKeyword("mut",G["default"]),R.registerKeyword("@mut",G.privateMut),R.registerKeyword("each",Q["default"]),R.registerKeyword("readonly",Y["default"]),R.registerKeyword("get",$["default"]),t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT&&(R.registerKeyword("collection",q["default"]),R.registerKeyword("view",V["default"])),e["default"]={hooks:J,helpers:P["default"],useFragmentCache:!0};var X=r["default"].hasDOM?new M["default"]:null;e.domHelper=X}),e("ember-htmlbars/glimmer-component",["exports","ember-views/views/core_view","ember-views/mixins/view_child_views_support","ember-views/mixins/view_state_support","ember-views/mixins/template_rendering_support","ember-views/mixins/class_names_support","ember-views/mixins/instrumentation_support","ember-views/mixins/aria_role_support","ember-views/mixins/view_support","ember-views/views/view"],function(e,t,r,n,i,a,o,s,u,l){"use strict";e["default"]=t["default"].extend(r["default"],n["default"],i["default"],a["default"],o["default"],s["default"],u["default"],{isComponent:!0,isGlimmerComponent:!0,init:function(){this._super.apply(this,arguments),this._viewRegistry=this._viewRegistry||l["default"].views}})}),e("ember-htmlbars/helper",["exports","ember-runtime/system/object"],function(e,t){"use strict";function r(e){return{isHelperInstance:!0,compute:e}}e.helper=r;var n=t["default"].extend({isHelperInstance:!0,recompute:function(){this._stream.notify()}});n.reopenClass({isHelperFactory:!0}),e["default"]=n}),e("ember-htmlbars/helpers/-concat",["exports"],function(e){"use strict";function t(e){return e.join("")}e["default"]=t}),e("ember-htmlbars/helpers/-html-safe",["exports","htmlbars-util/safe-string"],function(e,t){"use strict";function r(e){var r=e[0];return new t["default"](r)}e["default"]=r}),e("ember-htmlbars/helpers/-join-classes",["exports"],function(e){"use strict";function t(e){for(var t=[],r=0,n=e.length;n>r;r++){var i=e[r];i&&t.push(i)}return t.join(" ")}e["default"]=t}),e("ember-htmlbars/helpers/-legacy-each-with-controller",["exports","ember-metal/debug","ember-metal/property_get","ember-htmlbars/utils/normalize-self","ember-htmlbars/utils/decode-each-key"],function(e,t,r,n,i){"use strict";function a(e,t,a){var s=e[0],u=t.key;return s&&0!==r.get(s,"length")?void s.forEach(function(e,t){var r;0===a.template.arity&&(r=n["default"](e),r=o(r,!0));var s=i["default"](e,u,t);a.template.yieldItem(s,[e,t],r)}):void(a.inverse["yield"]&&a.inverse["yield"]())}function o(e,t){return{controller:e,hasBoundController:!0,self:e?e:void 0}}e["default"]=a;var s="Using the context switching form of {{each}} is deprecated. Please use the keyword form (`{{#each items as |item|}}`) instead.";e.deprecation=s}),e("ember-htmlbars/helpers/-legacy-each-with-keyword",["exports","ember-views/streams/should_display","ember-htmlbars/utils/decode-each-key"],function(e,t,r){"use strict";function n(e,n,a){var o=e[0],s=n.key,u=n["-legacy-keyword"];t["default"](o)?o.forEach(function(e,t){var n;u&&(n=i(n,u,e));var o=r["default"](e,s,t);a.template.yieldItem(o,[e,t],n)}):a.inverse["yield"]&&a.inverse["yield"](); +}function i(e,t,r){var n;return n={self:e},n[t]=r,n}e["default"]=n;var a="Using the context switching form of {{each}} is deprecated. Please use the keyword form (`{{#each items as |item|}}`) instead.";e.deprecation=a}),e("ember-htmlbars/helpers/-normalize-class",["exports","ember-runtime/system/string","ember-metal/path_cache"],function(e,t,r){"use strict";function n(e,n){var i=e[0],a=e[1],o=n.activeClass,s=n.inactiveClass;if(o||s)return a?o:s;if(a===!0){if(i&&r.isPath(i)){var u=i.split(".");i=u[u.length-1]}return t.dasherize(i)}return a!==!1&&null!=a?a:null}e["default"]=n}),e("ember-htmlbars/helpers/each-in",["exports","ember-views/streams/should_display"],function(e,t){"use strict";var r=function(e,r,n){var i,a,o,s=e[0];if(i=s?Object.keys(s):[],t["default"](i))for(o=0;o$/)})}),e("ember-htmlbars/hooks/concat",["exports","ember-metal/streams/utils"],function(e,t){"use strict";function r(e,r){return t.concat(r,"")}e["default"]=r}),e("ember-htmlbars/hooks/create-fresh-scope",["exports","ember-metal/streams/proxy-stream","ember-metal/empty_object"],function(e,t,r){"use strict";function n(e){this._self=void 0,this._blocks=void 0,this._component=void 0,this._view=void 0,this._attrs=void 0,this._locals=void 0,this._localPresent=void 0,this.overrideController=void 0,this.parent=e}function i(){return new n(s)}function a(e){return new n(e)}e["default"]=i,e.createChildScope=a;var o=n.prototype;o.getSelf=function(){return this._self||this.parent.getSelf()},o.bindSelf=function(e){this._self=e},o.updateSelf=function(e,r){var n=this._self;n?n.setSource(e):this._self=new t["default"](e,r)},o.getBlock=function(e){return this._blocks?this._blocks[e]||this.parent.getBlock(e):this.parent.getBlock(e)},o.hasBlock=function(e){return this._blocks?!(!this._blocks[e]&&!this.parent.hasBlock(e)):this.parent.hasBlock(e)},o.bindBlock=function(e,t){this._blocks||(this._blocks=new r["default"]),this._blocks[e]=t},o.getComponent=function(){return this._component||this.parent.getComponent()},o.bindComponent=function(e){this._component=e},o.getView=function(){return this._view||this.parent.getView()},o.bindView=function(e){this._view=e},o.getAttrs=function(){return this._attrs||this.parent.getAttrs()},o.bindAttrs=function(e){this._attrs=e},o.hasLocal=function(e){return this._localPresent?this._localPresent[e]||this.parent.hasLocal(e):this.parent.hasLocal(e)},o.hasOwnLocal=function(e){return this._localPresent&&this._localPresent[e]},o.getLocal=function(e){return this._localPresent&&this._localPresent[e]?this._locals[e]:this.parent.getLocal(e)},o.bindLocal=function(e,t){this._localPresent||(this._localPresent=new r["default"],this._locals=new r["default"]),this._localPresent[e]=!0,this._locals[e]=t};var s={_self:void 0,_blocks:void 0,_component:void 0,_view:void 0,_attrs:void 0,_locals:void 0,_localPresent:void 0,overrideController:void 0,getSelf:function(){return null},bindSelf:function(e){return null},updateSelf:function(e,t){return null},getBlock:function(e){return null},bindBlock:function(e,t){return null},hasBlock:function(e){return!1},getComponent:function(){return null},bindComponent:function(){return null},getView:function(){return null},bindView:function(e){return null},getAttrs:function(){return null},bindAttrs:function(e){return null},hasLocal:function(e){return!1},hasOwnLocal:function(e){return!1},getLocal:function(e){return null},bindLocal:function(e,t){return null}}}),e("ember-htmlbars/hooks/destroy-render-node",["exports"],function(e){"use strict";function t(e){e.emberView&&e.emberView.destroy();var t=e.streamUnsubscribers;if(t)for(var r=0,n=t.length;n>r;r++)t[r]()}e["default"]=t}),e("ember-htmlbars/hooks/did-cleanup-tree",["exports"],function(e){"use strict";function t(e){e.view.ownerView._destroyingSubtreeForView=null}e["default"]=t}),e("ember-htmlbars/hooks/did-render-node",["exports"],function(e){"use strict";function t(e,t){t.renderedNodes.add(e)}e["default"]=t}),e("ember-htmlbars/hooks/element",["exports","ember-htmlbars/system/lookup-helper","htmlbars-runtime/hooks","ember-htmlbars/system/invoke-helper"],function(e,t,r,n){"use strict";function i(e,i,a,o,s,u,l){if(!r.handleRedirect(e,i,a,o,s,u,null,null,l)){var c,m=t.findHelper(o,a.getSelf(),i);if(m){var h=n.buildHelperStream(m,s,u,{element:e.element},i,a,o);c=h.value()}else c=i.hooks.get(i,a,o);i.hooks.getValue(c)}}e["default"]=i}),e("ember-htmlbars/hooks/get-block",["exports"],function(e){"use strict";function t(e,t){return e.getBlock(t)}e["default"]=t}),e("ember-htmlbars/hooks/get-cell-or-value",["exports","ember-metal/streams/utils","ember-htmlbars/keywords/mut"],function(e,t,r){"use strict";function n(e){return e&&e[r.MUTABLE_REFERENCE]?e.cell():t.read(e)}e["default"]=n}),e("ember-htmlbars/hooks/get-child",["exports","ember-metal/streams/utils"],function(e,t){"use strict";function r(e,r){return t.isStream(e)?e.getKey(r):e[r]}e["default"]=r}),e("ember-htmlbars/hooks/get-root",["exports"],function(e){"use strict";function t(e,t){if("this"===t)return[e.getSelf()];if("hasBlock"===t)return[!!e.hasBlock("default")];if("hasBlockParams"===t){var n=e.getBlock("default");return[!!n&&n.arity]}return e.hasLocal(t)?[e.getLocal(t)]:[r(e,t)]}function r(e,t){if("attrs"===t){var r=e.getAttrs();if(r)return r}var n=e.getSelf()||e.getLocal("view");if(n)return n.getKey(t);var i=e.getAttrs();return i&&t in i?i[t]:void 0}e["default"]=t}),e("ember-htmlbars/hooks/get-value",["exports","ember-metal/streams/utils","ember-views/compat/attrs-proxy"],function(e,t,r){"use strict";function n(e){var n=t.read(e);return n&&n[r.MUTABLE_CELL]?n.value:n}e["default"]=n}),e("ember-htmlbars/hooks/has-helper",["exports","ember-htmlbars/system/lookup-helper"],function(e,t){"use strict";function r(e,r,n){if(e.helpers[n])return!0;var i=e.owner;if(t.validateLazyHelperName(n,i,e.hooks.keywords)){var a="helper:"+n;if(i.hasRegistration(a))return!0;var o={},s=e.meta&&e.meta.moduleName;if(s&&(o.source="template:"+s),i.hasRegistration(a,o))return!0}return!1}e["default"]=r}),e("ember-htmlbars/hooks/invoke-helper",["exports","ember-htmlbars/system/invoke-helper","ember-htmlbars/utils/subscribe"],function(e,t,r){"use strict";function n(e,n,i,a,o,s,u,l,c){var m=t.buildHelperStream(u,o,s,l,n,i);if(m.linkable){if(e){for(var h=!1,d=0,f=o.length;f>d;d++)h=!0,m.addDependency(o[d]);for(var p in s)h=!0,m.addDependency(s[p]);h&&r["default"](e,n,i,m)}return{link:!0,value:m}}return{value:m.value()}}e["default"]=n}),e("ember-htmlbars/hooks/link-render-node",["exports","ember-htmlbars/utils/subscribe","ember-runtime/utils","ember-metal/streams/utils","ember-htmlbars/system/lookup-helper","ember-htmlbars/keywords/closure-component"],function(e,t,r,n,i,a){"use strict";function o(e,r,n,o,m,h){if(e.streamUnsubscribers)return!0;var d=r.hooks.keywords[o];if(d&&d.link)d.link(e.getState(),m,h);else switch(o){case"unbound":return!0;case"unless":case"if":m[0]=u(m[0],l);break;case"each":m[0]=s(m[0]);break;case"with":m[0]=u(m[0],c)}if(i.CONTAINS_DOT_CACHE.get(o)){var f=r.hooks.get(r,n,o),p=f.value();if(a.isComponentCell(p)){var v=a.mergeInNewHash(p[a.COMPONENT_HASH],h);for(var g in v)t["default"](e,r,n,v[g])}}if(m&&m.length)for(var b=0;b0?t(o):!1:"boolean"==typeof u?u?t(o):!1:t(o)},"ShouldDisplay");return n.addDependency(o,i),n.addDependency(o,a),o}function l(e){return!!e}function c(e){return e}function m(e,t){return n.isStream(e)?e.getKey(t):e&&e[t]}e["default"]=o}),e("ember-htmlbars/hooks/lookup-helper",["exports","ember-htmlbars/system/lookup-helper"],function(e,t){"use strict";function r(e,r,n){return t["default"](n,r.getSelf(),e)}e["default"]=r}),e("ember-htmlbars/hooks/subexpr",["exports","ember-htmlbars/system/lookup-helper","ember-htmlbars/system/invoke-helper","ember-metal/streams/utils"],function(e,t,r,n){"use strict";function i(e,n,i,o,s){var u=e.hooks.keywords[i];if(u)return u(null,e,n,o,s,null,null);for(var l=a(o,s,i),c=t["default"](i,n.getSelf(),e),m=r.buildHelperStream(c,o,s,null,e,n,l),h=0,d=o.length;d>h;h++)m.addDependency(o[h]);for(var f in s)m.addDependency(s[f]);return m}function a(e,t,r){var n=o(e),i=s(t),a="("+r;return n&&(a+=" "+n),i&&(a+=" "+i),a+")"}function o(e){return n.labelsFor(e).join(" ")}function s(e){var t=[];for(var r in e)t.push(r+"="+n.labelFor(e[r]));return t.join(" ")}e["default"]=i,e.labelForSubexpr=a}),e("ember-htmlbars/hooks/update-self",["exports","ember-metal/debug","ember-metal/property_get"],function(e,t,r){"use strict";function n(e,t,n){var i=n;if(i&&i.hasBoundController){var a=i,o=a.controller;i=i.self,t.updateLocal("controller",o||i)}return i&&i.isView?(t.updateLocal("view",i),void t.updateSelf(r.get(i,"context"),"")):void t.updateSelf(i)}e["default"]=n}),e("ember-htmlbars/hooks/will-cleanup-tree",["exports"],function(e){"use strict";function t(e){var t=e.view;t.ownerView._destroyingSubtreeForView=t}e["default"]=t}),e("ember-htmlbars/index",["exports","ember-metal/core","ember-metal/features","ember-template-compiler","ember-htmlbars/system/make_bound_helper","ember-htmlbars/helpers","ember-htmlbars/helpers/if_unless","ember-htmlbars/helpers/with","ember-htmlbars/helpers/loc","ember-htmlbars/helpers/log","ember-htmlbars/helpers/each","ember-htmlbars/helpers/each-in","ember-htmlbars/helpers/-normalize-class","ember-htmlbars/helpers/-concat","ember-htmlbars/helpers/-join-classes","ember-htmlbars/helpers/-legacy-each-with-controller","ember-htmlbars/helpers/-legacy-each-with-keyword","ember-htmlbars/helpers/-html-safe","ember-htmlbars/helpers/hash","ember-htmlbars/system/dom-helper","ember-htmlbars/helper","ember-htmlbars/glimmer-component","ember-htmlbars/template_registry","ember-htmlbars/system/bootstrap","ember-htmlbars/compat"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b,y,_,w,x,C,k){"use strict";a.registerHelper("if",o.ifHelper),a.registerHelper("unless",o.unlessHelper),a.registerHelper("with",s["default"]),a.registerHelper("loc",u["default"]),a.registerHelper("log",l["default"]),a.registerHelper("each",c["default"]),a.registerHelper("each-in",m["default"]),a.registerHelper("-normalize-class",h["default"]),a.registerHelper("concat",d["default"]),a.registerHelper("-join-classes",f["default"]),a.registerHelper("-html-safe",g["default"]),a.registerHelper("hash",b["default"]),t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT&&(a.registerHelper("-legacy-each-with-controller",p["default"]),a.registerHelper("-legacy-each-with-keyword",v["default"])),t["default"].HTMLBars={template:n.template,compile:n.compile,precompile:n.precompile,makeBoundHelper:i["default"],registerPlugin:n.registerPlugin,DOMHelper:y["default"]},_["default"].helper=_.helper,t["default"].Helper=_["default"],Object.defineProperty(t["default"],"TEMPLATES",{configurable:!1,get:x.getTemplates,set:x.setTemplates})}),e("ember-htmlbars/keywords/closure-component",["exports","ember-metal/debug","ember-metal/is_none","ember-metal/symbol","ember-metal/streams/stream","ember-metal/empty_object","ember-metal/streams/utils","ember-htmlbars/hooks/subexpr","ember-metal/assign","ember-htmlbars/utils/extract-positional-params","ember-htmlbars/utils/lookup-component"],function(e,t,r,n,i,a,o,s,u,l,c){"use strict";function m(e,t,r){var n=t[0],i=t.slice(1),a=new k(e,n,i,r);return a.addDependency(n),i.forEach(function(e){return a.addDependency(e)}),Object.keys(r).forEach(function(e){return a.addDependency(r[e])}),a}function h(e,t,r,n,i){var s=o.read(t),l=u["default"](new a["default"],n);return d(s)?f(s,r,l):v(e,s,r,l)}function d(e){return e&&e[_]}function f(e,t,r){var n;return p(e,t,r),n={},n[w]=e[w],n[C]=b(e[C],r),n[x]=e[x],n[_]=!0,n}function p(e,t,r){var n=e[x];l.processPositionalParams(null,n,t,r)}function v(e,t,r,n){var i,a=g(e.owner,t);return l.processPositionalParams(null,a,r,n),i={},i[w]=t,i[C]=n,i[x]=a,i[_]=!0,i}function g(e,t){if(!t)return[];var r=c["default"](e,t),n=r.component;return n&&n.positionalParams?n.positionalParams:[]}function b(e,t){return u["default"]({},e,t)}e["default"]=m,e.isComponentCell=d,e.processPositionalParamsFromCell=p,e.mergeInNewHash=b;var y=n["default"]("COMPONENT_REFERENCE");e.COMPONENT_REFERENCE=y;var _=n["default"]("COMPONENT_CELL");e.COMPONENT_CELL=_;var w=n["default"]("COMPONENT_PATH");e.COMPONENT_PATH=w;var x=n["default"]("COMPONENT_POSITIONAL_PARAMS");e.COMPONENT_POSITIONAL_PARAMS=x;var C=n["default"]("COMPONENT_HASH");e.COMPONENT_HASH=C;var k=i["default"].extend({init:function(e,t,r,n){this._env=e,this._path=t,this._params=r,this._hash=n,this.label=s.labelForSubexpr([t].concat(r),n,"component"),this[y]=!0},compute:function(){return h(this._env,this._path,this._params,this._hash,this.label)}})}),e("ember-htmlbars/keywords/collection",["exports","ember-views/streams/utils","ember-views/views/collection_view","ember-htmlbars/node-managers/view-node-manager","ember-metal/assign"],function(e,t,r,n,i){"use strict";function a(e,n){var i;return i=e?t.readViewFactory(e,n):r["default"]}e["default"]={setupState:function(e,t,r,n,o){var s=t.hooks.getValue;return i["default"]({},e,{parentView:t.view,viewClassOrInstance:a(s(n[0]),t.owner)})},rerender:function(e,t,r,n,i,a,o,s){return Object.keys(i).length?e.getState().manager.rerender(t,i,s,!0):void 0},render:function(e,t,r,i,a,o,s,u){var l=e.getState(),c=l.parentView,m={component:l.viewClassOrInstance,layout:null};o&&(m.createOptions={_itemViewTemplate:o&&{raw:o},_itemViewInverse:s&&{raw:s}}),a.itemView&&(a.itemViewClass=a.itemView),a.emptyView&&(a.emptyViewClass=a.emptyView);var h=n["default"].create(e,t,a,m,c,null,r,o);l.manager=h,h.render(t,a,u)}}}),e("ember-htmlbars/keywords/component",["exports","htmlbars-runtime/hooks","ember-htmlbars/keywords/closure-component","ember-metal/features","ember-metal/empty_object","ember-metal/assign"],function(e,t,r,n,i,a){"use strict";e["default"]=function(e,n,o,s,u,l,c,m){if(!e)return r["default"](n,s,u);var h=a["default"](new i["default"],u);return t.keyword("@element_component",e,n,o,s,h,l,c,m),!0}}),e("ember-htmlbars/keywords/debugger",["exports","ember-metal/debug"],function(e,t){"use strict";function r(e,t,r){t.hooks.getValue(r.getLocal("view")),t.hooks.getValue(r.getSelf());return!0}e["default"]=r}),e("ember-htmlbars/keywords/each",["exports"],function(e){"use strict";function t(e,t,r,n,i,a,o,s){var u=t.hooks.getValue,l=i["-legacy-keyword"]&&u(i["-legacy-keyword"]),c=n[0]&&u(n[0]);return c&&c._isArrayController?(t.hooks.block(e,t,r,"-legacy-each-with-controller",n,i,a,o,s),!0):l?(t.hooks.block(e,t,r,"-legacy-each-with-keyword",n,i,a,o,s),!0):!1}e["default"]=t}),e("ember-htmlbars/keywords/element-component",["exports","ember-metal/assign","ember-htmlbars/keywords/closure-component","ember-htmlbars/utils/lookup-component","ember-htmlbars/utils/extract-positional-params"],function(e,t,r,n,i){"use strict";function a(e,t){var n=t.hooks.getValue(e);return r.isComponentCell(n)&&(n=n[r.COMPONENT_PATH]),n}function o(e,t,a,o,s,u,l,c){var m=o[0],h=o.slice(1),d=arguments.length<=8||void 0===arguments[8]?!1:arguments[8],f=e.getState(),p=f.componentPath;if(void 0!==p&&null!==p){if(m=t.hooks.getValue(m),d){var v=n["default"](t.owner,p),g=v.component;i["default"](null,g,h,s)}if(r.isComponentCell(m)){var b=t.hooks.getValue(m);r.processPositionalParamsFromCell(b,h,s),h=[],s=r.mergeInNewHash(b[r.COMPONENT_HASH],s)}var y={"default":u,inverse:l};t.hooks.component(e,t,a,p,h,s,y,c)}}e["default"]={setupState:function(e,r,n,i,o){var s=a(i[0],r);return t["default"]({},e,{componentPath:s,isComponentHelper:!0})},render:function(e){var t=e.getState();t.manager&&t.manager.destroy(),t.manager=null;for(var r=arguments.length,n=Array(r>1?r-1:0),i=1;r>i;i++)n[i-1]=arguments[i];o.apply(void 0,[e].concat(n))},rerender:o}}),e("ember-htmlbars/keywords/get",["exports","ember-metal/debug","ember-metal/streams/stream","ember-metal/streams/utils","ember-htmlbars/utils/subscribe","ember-metal/property_get","ember-metal/property_set","ember-metal/observer"],function(e,t,r,n,i,a,o,s){"use strict";function u(e,t){var r=e.label?e.label:"",n=t.label?t.label:"";return"(get "+r+" "+n+")"}function l(e,t){return n.isStream(t)?new m(e,t):e.get(t)}function c(e,t,r,n,a,o,s,u){if(null===e)return h(n);var l=void 0;return e.linkedResult?l=e.linkedResult:(l=h(n),i["default"](e,t,r,l),t.hooks.linkRenderNode(e,t,r,null,n,a),e.linkedResult=l),t.hooks.range(e,t,r,null,l,u),!0}var m=r["default"].extend({init:function(e,t){var r=u(e,t);this.label=r,this.path=r,this.sourceDep=this.addMutableDependency(e),this.keyDep=this.addMutableDependency(t),this.observedObject=null,this.observedKey=null},key:function(){var e=this.keyDep.getValue();return"string"==typeof e?e:void 0},compute:function(){var e=this.sourceDep.getValue(),t=this.key();return e&&t?a.get(e,t):void 0},setValue:function(e){var t=this.sourceDep.getValue(),r=this.key();t&&o.set(t,r,e)},_super$revalidate:r["default"].prototype.revalidate,revalidate:function(e){this._super$revalidate(e);var t=this.sourceDep.getValue(),r=this.key();(t!==this.observedObject||r!==this.observedKey)&&(this._clearObservedObject(),t&&"object"==typeof t&&r&&(s.addObserver(t,r,this,this.notify),this.observedObject=t,this.observedKey=r))},_clearObservedObject:function(){this.observedObject&&(s.removeObserver(this.observedObject,this.observedKey,this,this.notify),this.observedObject=null,this.observedKey=null)}}),h=function(e){var t=e[0],r=e[1],n=l(t,r);return n};e["default"]=c}),e("ember-htmlbars/keywords/input",["exports","ember-metal/debug","ember-metal/assign"],function(e,t,r){"use strict";e["default"]={setupState:function(e,t,a,o,s){var u=t.hooks.getValue(s.type),l=i[u]||n;return r["default"]({},e,{componentName:l})},render:function(e,t,r,n,i,a,o,s){t.hooks.component(e,t,r,e.getState().componentName,n,i,{"default":a,inverse:o},s)},rerender:function(){this.render.apply(this,arguments)}};var n="-text-field",i={checkbox:"-checkbox"}}),e("ember-htmlbars/keywords/legacy-yield",["exports","ember-metal/streams/proxy-stream"],function(e,t){"use strict";function r(e,r,n,i,a,o,s,u){var l=n,c=l.getBlock("default");return 0===c.arity?(a.controller&&(l=r.hooks.createChildScope(l),l.bindLocal("controller",new t["default"](a.controller,"controller")),l.overrideController=!0),c.invoke(r,[],i[0],e,l,u)):c.invoke(r,i,void 0,e,l,u),!0}e["default"]=r}),e("ember-htmlbars/keywords/mut",["exports","ember-metal/debug","ember-metal/symbol","ember-metal/streams/proxy-stream","ember-metal/streams/stream","ember-metal/streams/utils","ember-views/compat/attrs-proxy","ember-routing-htmlbars/keywords/closure-action"],function(e,t,r,n,i,a,o,s){"use strict";function u(e,t,r,n,i,a,o){if(null===e){var s=n[0];return c(t.hooks.getValue,s)}return!0}function l(e,t,r,n,i,a,o){if(null===e){var s=n[0];return c(t.hooks.getValue,s,!0)}return!0}function c(e,t,r){if(r&&!a.isStream(t)){var n=t;t=new f(n)}return t[h]?t:new d(t)}var m;e["default"]=u,e.privateMut=l;var h=r["default"]("MUTABLE_REFERENCE");e.MUTABLE_REFERENCE=h;var d=n["default"].extend((m={init:function(e){this.label="(mut "+e.label+")",this.path=e.path,this.sourceDep=this.addMutableDependency(e),this[h]=!0},cell:function(){var e=this,t=e.value();if(t&&t[s.ACTION])return t;var r={value:t,update:function(t){e.setValue(t)}};return r[o.MUTABLE_CELL]=!0,r}},m[s.INVOKE]=function(e){this.setValue(e)},m)),f=i["default"].extend({init:function(e){this.literal=e,this.label="(literal "+e+")"},compute:function(){return this.literal},setValue:function(e){this.literal=e,this.notify()}})}),e("ember-htmlbars/keywords/outlet",["exports","ember-metal/debug","ember-metal/property_get","ember-htmlbars/node-managers/view-node-manager","ember-htmlbars/templates/top-level-view","ember-metal/features"],function(e,t,r,n,i,a){"use strict";function o(e){return!e||!e.render.ViewClass&&!e.render.template}function s(e,t){if(!e&&!t)return!0;if(!e||!t)return!1;e=e.render,t=t.render;for(var r in e)if(e.hasOwnProperty(r)&&e[r]!==t[r]&&"name"!==r)return!1;return!0}i["default"].meta.revision="Ember@2.4.3",e["default"]={willRender:function(e,t){t.view.ownerView._outlets.push(e)},setupState:function(e,t,r,n,a){var o=t.outletState,s=t.hooks.getValue,u=s(n[0])||"main",l=o[u],c=l&&l.render;return!c||c.template||c.ViewClass||(c.template=i["default"]),{outletState:l,hasParentOutlet:t.hasParentOutlet,manager:e.manager}},childEnv:function(e,t){var r=e.outletState,n=r&&r.render,i=n&&n.template&&n.template.meta;return t.childWithOutletState(r&&r.outlets,!0,i)},isStable:function(e,t){return s(e.outletState,t.outletState)},isEmpty:function(e){return o(e.outletState)},render:function(e,t,i,a,o,s,u,l){var c=e.getState(),m=t.view,h=c.outletState,d=h.render,f=t.owner.lookup("application:main"),p=(r.get(f,"LOG_VIEW_LOOKUPS"),h.render.ViewClass);c.hasParentOutlet||p||(p=t.owner._lookupFactory("view:toplevel"));var v,g,b={};v?(g={component:v},b=d.attrs):(g={component:p,self:d.controller,createOptions:{controller:d.controller}},s=s||d.template&&d.template.raw),c.manager&&(c.manager.destroy(),c.manager=null);var y=n["default"].create(e,t,b,g,m,null,null,s);c.manager=y,y.render(t,o,l)}}}),e("ember-htmlbars/keywords/partial",["exports","ember-views/system/lookup_partial","htmlbars-runtime"],function(e,t,r){"use strict";e["default"]={setupState:function(e,t,r,n,i){return{partialName:t.hooks.getValue(n[0])}},render:function(e,n,i,a,o,s,u,l){var c=e.getState();if(!c.partialName)return!0;var m=t["default"](n,c.partialName);return m?void r.internal.hostBlock(e,n,i,m.raw,null,null,l,function(e){e.templates.template["yield"]()}):!0}}}),e("ember-htmlbars/keywords/readonly",["exports","ember-htmlbars/keywords/mut"],function(e,t){"use strict";function r(e,r,n,i,a,o,s){if(null===e){var u=i[0];return u&&u[t.MUTABLE_REFERENCE]?u.sourceDep.dependee:u}return!0}e["default"]=r}),e("ember-htmlbars/keywords/textarea",["exports"],function(e){"use strict";function t(e,t,r,n,i,a,o,s){return t.hooks.component(e,t,r,"-text-area",n,i,{"default":a,inverse:o},s),!0}e["default"]=t}),e("ember-htmlbars/keywords/unbound",["exports","ember-metal/debug","ember-metal/streams/stream","ember-metal/streams/utils"],function(e,t,r,n){"use strict";function i(e,t,r,n,i,o,s,u){if(null===e)return new a(n[0]);var l=void 0;return e.linkedResult?l=e.linkedResult:(l=new a(n[0]),e.linkedResult=l),t.hooks.range(e,t,r,null,l,u),!0}e["default"]=i;var a=r["default"].extend({init:function(e){this.label="(volatile "+e.label+")",this.source=e,this.addDependency(e)},value:function(){return n.read(this.source)},notify:function(){}})}),e("ember-htmlbars/keywords/view",["exports","ember-views/streams/utils","ember-views/views/view","ember-htmlbars/node-managers/view-node-manager"],function(e,t,r,n){"use strict";function i(e,n){var i;return i=e?t.readViewFactory(e,n):n?n._lookupFactory("view:toplevel"):r["default"]}function a(e,t,r){var n={};for(var i in e)i===t?n[r]=e[i]:n[i]=e[i];return n}e["default"]={setupState:function(e,t,r,n,a){var o=t.hooks.getValue,s=o(r.getSelf()),u=e.viewClassOrInstance;u||(u=i(o(n[0]),t.owner));var l=r.hasLocal("view")?null:o(r.getSelf());return{manager:e.manager,parentView:t.view,controller:l,targetObject:s,viewClassOrInstance:u}},rerender:function(e,t,r,n,i,a,o,s){return Object.keys(i).length?e.getState().manager.rerender(t,i,s,!0):void 0},render:function(e,t,r,i,o,s,u,l){o.tag&&(o=a(o,"tag","tagName")),o.classNameBindings&&(o.classNameBindings=o.classNameBindings.split(" "));var c=e.getState(),m=c.parentView,h={component:c.viewClassOrInstance,layout:null};h.createOptions={},c.controller&&(h.createOptions._controller=c.controller),c.targetObject&&(h.createOptions._targetObject=c.targetObject),c.manager&&(c.manager.destroy(),c.manager=null);var d=n["default"].create(e,t,o,h,m,null,r,s);c.manager=d,d.render(t,o,l)}}}),e("ember-htmlbars/keywords/with",["exports","ember-metal/debug","htmlbars-runtime"],function(e,t,r){"use strict";e["default"]={isStable:function(){return!0},isEmpty:function(e){return!1},render:function(e,t,n,i,a,o,s,u){r.internal.continueBlock(e,t,n,"with",i,a,o,s,u)},rerender:function(e,t,n,i,a,o,s,u){r.internal.continueBlock(e,t,n,"with",i,a,o,s,u)}}}),e("ember-htmlbars/keywords/yield",["exports"],function(e){"use strict";function t(e,t,r,n,i,a,o,s){var u=t.hooks.getValue(i.to)||"default",l=r.getBlock(u);return l&&l.invoke(t,n,i.self,e,r,s),!0}e["default"]=t}),e("ember-htmlbars/keywords",["exports","htmlbars-runtime"],function(e,t){"use strict";function r(e,t){n[e]=t}e.registerKeyword=r;var n=Object.create(t.hooks.keywords);e["default"]=n}),e("ember-htmlbars/morphs/attr-morph",["exports","ember-metal/debug","dom-helper","ember-metal/is_none"],function(e,t,r,n){"use strict";function i(e,t){}var a=r["default"].prototype.AttrMorphClass,o="Binding style attributes may introduce cross-site scripting vulnerabilities; please ensure that values being bound are properly escaped. For more information, including how to disable this warning, see http://emberjs.com/deprecations/v1.x/#toc_binding-style-attributes.";e.styleWarning=o;var s=a.prototype;s.didInit=function(){this.streamUnsubscribers=null},s.willSetContent=function(e){i(this,e)},e["default"]=a}),e("ember-htmlbars/morphs/morph",["exports","dom-helper","ember-metal/debug"],function(e,t,r){"use strict";function n(e,t){this.HTMLBarsMorph$constructor(e,t),this.emberView=null,this.emberToDestroy=null,this.streamUnsubscribers=null,this.guid=a++,this.shouldReceiveAttrs=!1}var i=t["default"].prototype.MorphClass,a=1,o=n.prototype=Object.create(i.prototype);o.HTMLBarsMorph$constructor=i,o.HTMLBarsMorph$clear=i.prototype.clear,o.addDestruction=function(e){this.emberToDestroy=this.emberToDestroy||[],this.emberToDestroy.push(e)},o.cleanup=function(){var e=this.emberView;if(e){var t=e.parentView;t&&e.ownerView._destroyingSubtreeForView===t&&t.removeChild(e)}var r=this.emberToDestroy;if(r){for(var n=0,i=r.length;i>n;n++)r[n].destroy();this.emberToDestroy=null}},o.didRender=function(e,t){e.renderedNodes.add(this)},e["default"]=n}),e("ember-htmlbars/node-managers/component-node-manager",["exports","ember-metal/debug","ember-views/system/build-component-template","ember-htmlbars/hooks/get-cell-or-value","ember-metal/property_get","ember-metal/property_set","ember-views/compat/attrs-proxy","ember-htmlbars/system/instrumentation-support","ember-views/components/component","ember-htmlbars/glimmer-component","ember-htmlbars/utils/extract-positional-params","ember-metal/symbol","container/owner","ember-htmlbars/hooks/get-value"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d){ +"use strict";function f(e,t,r,n,i,a,o){this.component=e,this.isAngleBracket=t,this.scope=r,this.renderNode=n,this.attrs=i,this.block=a,this.expectElement=o}function p(e,t,r,n,i){n?i.tagName=t:e.tagName&&(i.tagName=d["default"](e.tagName))}function v(e,t){e.id&&(t.elementId=d["default"](e.id)),e._defaultTagName&&(t._defaultTagName=d["default"](e._defaultTagName)),e.viewName&&(t.viewName=d["default"](e.viewName))}function g(e){for(var t=e;t;){if(1===t.nodeType)return t;t=e.nextSibling}}function b(e,t,r,n,i){var o=arguments.length<=5||void 0===arguments[5]?{}:arguments[5];t?(r.attrs=y(o),r._isAngleBracket=!0):w(o,r),h.setOwner(r,i.owner),r.renderer=r.parentView?r.parentView.renderer:i.owner.lookup("renderer:-dom"),r._viewRegistry=r.parentView?r.parentView._viewRegistry:i.owner.lookup("-view-registry:main");var s=e.create(r);return r.parentView&&(r.parentView.appendChild(s),r.viewName&&a.set(r.parentView,r.viewName,s)),s._renderNode=n,n.emberView=s,n.buildChildEnv=x,s}function y(e){var t={};for(var r in e)t[r]=n["default"](e[r]);return t}function _(e){var t={};for(var r in e)t[r]=d["default"](e[r]);return t}function w(e,t){var r={};for(var i in e){var a=n["default"](e[i]);r[i]=a,"attrs"!==i&&(a&&a[o.MUTABLE_CELL]&&(a=a.value),t[i]=a)}return t.attrs=r}function x(e,t){return t.childWithView(this.emberView)}e.createComponent=b,e.takeLegacySnapshot=_;var C=m["default"]("HAS_BLOCK");e.HAS_BLOCK=C,e["default"]=f,f.create=function(e,t,n){var a,o=n.tagName,s=n.params,m=n.attrs,h=n.parentView,g=n.parentScope,y=n.isAngleBracket,_=n.component,w=n.layout,x=n.templates;m=m||{},_=_||(y?l["default"]:u["default"]);var k=(a={parentView:h},a[C]=!!x["default"],a);p(m,o,_,y,k),v(m,k),g.hasLocal("controller")?k._controller=d["default"](g.getLocal("controller")):k._targetObject=d["default"](g.getSelf()),c["default"](e,_,s,m),_=b(_,y,k,e,t,m),w||(w=i.get(_,"layout"));var E=r["default"]({layout:w,component:_,isAngleBracket:y},m,{templates:x,scope:g});return new f(_,y,g,e,m,E.block,E.createdElement)},f.prototype.render=function(e,t){var r=this.component;return s.instrument(r,function(){var n=this.block&&this.block.template.meta,i=e.childWithView(r,n);i.renderer.componentWillRender(r),i.renderedViews.push(r.elementId),this.block&&this.block.invoke(i,[],void 0,this.renderNode,this.scope,t);var a=void 0;(this.expectElement||r.isGlimmerComponent)&&(a=this.renderNode.firstNode,a&&1!==a.nodeType&&(a=g(a))),i.destinedForDOM&&(i.renderer.didCreateElement(r,a),i.renderer.willInsertElement(r,a),i.lifecycleHooks.push({type:"didInsertElement",view:r}))},this)},f.prototype.rerender=function(e,t,r){var n=this.component;return s.instrument(n,function(){var i=e.childWithView(n),a=y(t);return n._renderNode.shouldReceiveAttrs&&(n._propagateAttrsToThis&&n._propagateAttrsToThis(_(t)),i.renderer.componentUpdateAttrs(n,a),n._renderNode.shouldReceiveAttrs=!1),i.renderer.componentWillUpdate(n,a),i.renderer.componentWillRender(n),i.renderedViews.push(n.elementId),this.block&&this.block.invoke(i,[],void 0,this.renderNode,this.scope,r),i.lifecycleHooks.push({type:"didUpdate",view:n}),i},this)},f.prototype.destroy=function(){var e=this.component;e._renderNode=null,e.destroy()}}),e("ember-htmlbars/node-managers/view-node-manager",["exports","ember-metal/assign","ember-metal/debug","ember-views/system/build-component-template","ember-metal/property_get","ember-metal/property_set","ember-metal/set_properties","ember-views/views/view","ember-views/compat/attrs-proxy","ember-htmlbars/hooks/get-cell-or-value","ember-htmlbars/system/instrumentation-support","ember-htmlbars/node-managers/component-node-manager","container/owner","ember-htmlbars/hooks/get-value"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d){"use strict";function f(e,t,r,n,i){this.component=e,this.scope=t,this.renderNode=r,this.block=n,this.expectElement=i}function p(e){return e.isComponent?null:i.get(e,"template")}function v(e,r,n,i,u){var l=arguments.length<=5||void 0===arguments[5]?{}:arguments[5],c=g(l),d=t["default"]({},r),f=s["default"].proto().controller,p="controller"in l||"controller"in d;if(!d.ownerView&&r.parentView&&(d.ownerView=r.parentView.ownerView),d.attrs=c,e.create){var v=e.proto();n&&t["default"](d,n),b(d,c);var y=u.owner;h.setOwner(d,y),d.renderer=r.parentView?r.parentView.renderer:y&&y.lookup("renderer:-dom"),d._viewRegistry=r.parentView?r.parentView._viewRegistry:y&&y.lookup("-view-registry:main"),(v.controller!==f||p)&&delete d._context,e=e.create(d)}else u.renderer.componentUpdateAttrs(e,c),o["default"](e,d),e._propagateAttrsToThis&&e._propagateAttrsToThis(m.takeLegacySnapshot(l));return r.parentView&&(r.parentView.appendChild(e),r.viewName&&a.set(r.parentView,r.viewName,e)),e._renderNode=i,i.emberView=e,e}function g(e){var t={};for(var r in e)t[r]=l["default"](e[r]);return t}function b(e,t){for(var r in t)if(t.hasOwnProperty(r)&&"attrs"!==r){var n=t[r];n&&n[u.MUTABLE_CELL]?e[r]=n.value:e[r]=n}return e}e.createOrUpdateComponent=v,e["default"]=f,f.create=function(e,t,r,a,o,s,u,l){var c,m={layout:a.layout};if(a.component){var h={parentView:o};if(r&&r.id&&(h.elementId=d["default"](r.id)),r&&r.tagName&&(h.tagName=d["default"](r.tagName)),r&&r._defaultTagName&&(h._defaultTagName=d["default"](r._defaultTagName)),r&&r.viewName&&(h.viewName=d["default"](r.viewName)),a.component.create&&u){var g=u.getSelf();g&&(h._context=d["default"](u.getSelf()))}a.self&&(h._context=d["default"](a.self)),c=m.component=v(a.component,h,a.createOptions,e,t,r);var b=i.get(c,"layout");b?m.layout=b:m.layout=p(c)||m.layout,e.emberView=c}var y=n["default"](m,r,{templates:{"default":l},scope:u,self:a.self});return new f(c,u,e,y.block,y.createdElement)},f.prototype.render=function(e,t,r){var n=this.component;return c.instrument(n,function(){var t=e;if(n)t=e.childWithView(n);else{var i=this.block&&this.block.template.meta;t=e.childWithMeta(i)}if(n&&(e.renderer.willRender(n),e.renderedViews.push(n.elementId)),this.block&&this.block.invoke(t,[],void 0,this.renderNode,this.scope,r),n){var a=this.expectElement&&this.renderNode.firstNode;e.destinedForDOM&&(e.renderer.didCreateElement(n,a),e.renderer.willInsertElement(n,a),e.lifecycleHooks.push({type:"didInsertElement",view:n}))}},this)},f.prototype.rerender=function(e,t,r){var n=this.component;return c.instrument(n,function(){var i=e;if(n){i=e.childWithView(n);var a=g(t);e.renderer.willUpdate(n,a),n._renderNode.shouldReceiveAttrs&&(n._propagateAttrsToThis&&n._propagateAttrsToThis(m.takeLegacySnapshot(t)),e.renderer.componentUpdateAttrs(n,a),n._renderNode.shouldReceiveAttrs=!1),e.renderer.willRender(n),e.renderedViews.push(n.elementId)}else{var o=this.block&&this.block.template.meta;i=e.childWithMeta(o)}return this.block&&this.block.invoke(i,[],void 0,this.renderNode,this.scope,r),i},this)},f.prototype.destroy=function(){this.component&&(this.component.destroy(),this.component=null)}}),e("ember-htmlbars/streams/built-in-helper",["exports","ember-metal/streams/stream","ember-htmlbars/streams/utils"],function(e,t,r){"use strict";var n=t["default"].extend({init:function(e,t,r,n,i,a,o){this.helper=e,this.params=t,this.templates=n,this.env=i,this.scope=a,this.hash=r,this.label=o},compute:function(){return this.helper(r.getArrayValues(this.params),r.getHashValues(this.hash),this.templates,this.env,this.scope)}});e["default"]=n}),e("ember-htmlbars/streams/helper-factory",["exports","ember-metal/streams/stream","ember-htmlbars/streams/utils"],function(e,t,r){"use strict";var n=t["default"].extend({init:function(e,t,r,n){this.helperFactory=e,this.params=t,this.hash=r,this.linkable=!0,this.helper=null,this.label=n},compute:function(){return this.helper||(this.helper=this.helperFactory.create({_stream:this})),this.helper.compute(r.getArrayValues(this.params),r.getHashValues(this.hash))},deactivate:function(){this.super$deactivate(),this.helper&&(this.helper.destroy(),this.helper=null)},super$deactivate:t["default"].prototype.deactivate});e["default"]=n}),e("ember-htmlbars/streams/helper-instance",["exports","ember-metal/streams/stream","ember-htmlbars/streams/utils"],function(e,t,r){"use strict";var n=t["default"].extend({init:function(e,t,r,n){this.helper=e,this.params=t,this.hash=r,this.linkable=!0,this.label=n},compute:function(){return this.helper.compute(r.getArrayValues(this.params),r.getHashValues(this.hash))}});e["default"]=n}),e("ember-htmlbars/streams/utils",["exports","ember-htmlbars/hooks/get-value"],function(e,t){"use strict";function r(e){for(var r=e.length,n=new Array(r),i=0;r>i;i++)n[i]=t["default"](e[i]);return n}function n(e){var r={};for(var n in e)r[n]=t["default"](e[n]);return r}e.getArrayValues=r,e.getHashValues=n}),e("ember-htmlbars/system/append-templated-view",["exports","ember-metal/debug","ember-metal/property_get","ember-views/views/view"],function(e,t,r,n){"use strict";function i(e,t,i,a){var o;o=n["default"].detectInstance(i)?i:i.proto();var s=!o.controller;return o.controller&&o.controller.isDescriptor&&(s=!0),!s||o.controllerBinding||a.controller||a.controllerBinding||(a._context=r.get(e,"context")),a._morph=t,e.appendChild(i,a)}e["default"]=i}),e("ember-htmlbars/system/bootstrap",["exports","ember-views/component_lookup","ember-views/system/jquery","ember-metal/error","ember-runtime/system/lazy_load","ember-template-compiler/system/compile","ember-metal/environment","ember-htmlbars/template_registry"],function(e,t,r,n,i,a,o,s){"use strict";function u(e){var t='script[type="text/x-handlebars"], script[type="text/x-raw-handlebars"]';r["default"](t,e).each(function(){var e,t,i=r["default"](this),o=i.attr("data-template-name")||i.attr("id")||"application";if("text/x-raw-handlebars"===i.attr("type")?(t=r["default"].proxy(Handlebars.compile,Handlebars),e=t(i.html())):e=a["default"](i.html(),{moduleName:o}),s.has(o))throw new n["default"]('Template named "'+o+'" already exists.');s.set(o,e),i.remove()})}function l(){u(r["default"](document))}function c(e){e.register("component-lookup:main",t["default"])}i.onLoad("Ember.Application",function(e){e.initializer({name:"domTemplates",initialize:o["default"].hasDOM?l:function(){}}),e.instanceInitializer({name:"registerComponentLookup",initialize:c})}),e["default"]=u}),e("ember-htmlbars/system/dom-helper",["exports","dom-helper","ember-htmlbars/morphs/morph","ember-htmlbars/morphs/attr-morph"],function(e,t,r,n){"use strict";function i(e){t["default"].call(this,e)}var a=i.prototype=Object.create(t["default"].prototype);a.MorphClass=r["default"],a.AttrMorphClass=n["default"],e["default"]=i}),e("ember-htmlbars/system/instrumentation-support",["exports","ember-metal/instrumentation"],function(e,t){"use strict";function r(e,r,n){var i,a,o,s;return t.subscribers.length?(i=e?e.instrumentName:"node",o={},e&&e.instrumentDetails(o),s=t._instrumentStart("render."+i,function(){return o}),a=r.call(n),s&&s(),a):r.call(n)}e.instrument=r}),e("ember-htmlbars/system/invoke-helper",["exports","ember-metal/debug","ember-htmlbars/streams/helper-instance","ember-htmlbars/streams/helper-factory","ember-htmlbars/streams/built-in-helper"],function(e,t,r,n,i){"use strict";function a(e,t,a,o,s,u,l){e.isHelperInstance||e.isHelperFactory;return e.isHelperFactory?new n["default"](e,t,a,l):e.isHelperInstance?new r["default"](e,t,a,l):(o=o||{template:{},inverse:{}},new i["default"](e,t,a,o,s,u,l))}e.buildHelperStream=a}),e("ember-htmlbars/system/lookup-helper",["exports","ember-metal/debug","ember-metal/cache"],function(e,t,r){"use strict";function n(e,t,r){return t&&!(e in r)}function i(e,t,r,i){var a=r.helpers[e];if(!a){var o=r.owner;if(n(e,o,r.hooks.keywords)){var s="helper:"+e,u=o.hasRegistration(s,i);u&&(a=o._lookupFactory(s,i))}}return a}function a(e,t,r){var n={},a=r.meta&&r.meta.moduleName;a&&(n.source="template:"+a);var o=i(e,t,r,n);return o?o:i(e,t,r)}function o(e,t,r){var n=a(e,t,r);return n}e.validateLazyHelperName=n,e.findHelper=a,e["default"]=o;var s=new r["default"](1e3,function(e){return-1!==e.indexOf("-")});e.CONTAINS_DASH_CACHE=s;var u=new r["default"](1e3,function(e){return-1!==e.indexOf(".")});e.CONTAINS_DOT_CACHE=u}),e("ember-htmlbars/system/make_bound_helper",["exports","ember-metal/debug","ember-htmlbars/helper"],function(e,t,r){"use strict";function n(e){return r.helper(e)}e["default"]=n}),e("ember-htmlbars/system/render-env",["exports","ember-htmlbars/env","ember-metal-views/renderer","container/owner"],function(e,t,r,n){"use strict";function i(e){this.lifecycleHooks=e.lifecycleHooks||[],this.renderedViews=e.renderedViews||[],this.renderedNodes=e.renderedNodes||new r.MorphSet,this.hasParentOutlet=e.hasParentOutlet||!1,this.view=e.view,this.outletState=e.outletState,this.owner=e.owner,this.renderer=e.renderer,this.dom=e.dom,this.meta=e.meta,this.hooks=t["default"].hooks,this.helpers=t["default"].helpers,this.useFragmentCache=t["default"].useFragmentCache,this.destinedForDOM=this.renderer._destinedForDOM}e["default"]=i,i.build=function(e,t){return new i({view:e,outletState:e.outletState,owner:n.getOwner(e),renderer:e.renderer,dom:e.renderer._dom,meta:t})},i.prototype.childWithMeta=function(e){return new i({view:this.view,outletState:this.outletState,owner:this.owner,renderer:this.renderer,dom:this.dom,lifecycleHooks:this.lifecycleHooks,renderedViews:this.renderedViews,renderedNodes:this.renderedNodes,hasParentOutlet:this.hasParentOutlet,meta:e})},i.prototype.childWithView=function(e){var t=arguments.length<=1||void 0===arguments[1]?this.meta:arguments[1];return new i({view:e,outletState:this.outletState,owner:this.owner,renderer:this.renderer,dom:this.dom,lifecycleHooks:this.lifecycleHooks,renderedViews:this.renderedViews,renderedNodes:this.renderedNodes,hasParentOutlet:this.hasParentOutlet,meta:t})},i.prototype.childWithOutletState=function(e){var t=arguments.length<=1||void 0===arguments[1]?this.hasParentOutlet:arguments[1],r=arguments.length<=2||void 0===arguments[2]?this.meta:arguments[2];return new i({view:this.view,outletState:e,owner:this.owner,renderer:this.renderer,dom:this.dom,lifecycleHooks:this.lifecycleHooks,renderedViews:this.renderedViews,renderedNodes:this.renderedNodes,hasParentOutlet:t,meta:r})}}),e("ember-htmlbars/system/render-view",["exports","ember-htmlbars/node-managers/view-node-manager","ember-htmlbars/system/render-env"],function(e,t,r){"use strict";function n(e,n,i){var a=n&&n.template&&n.template.meta,o=r["default"].build(e,a);e.env=o,t.createOrUpdateComponent(e,{},null,i,o);var s=new t["default"](e,null,i,n,""!==e.tagName);s.render(o,{})}e.renderHTMLBarsBlock=n}),e("ember-htmlbars/template_registry",["exports"],function(e){"use strict";function t(e){o=e}function r(){return o}function n(e){return o.hasOwnProperty(e)?o[e]:void 0}function i(e){return o.hasOwnProperty(e)}function a(e,t){return o[e]=t}e.setTemplates=t,e.getTemplates=r,e.get=n,e.has=i,e.set=a;var o={}}),e("ember-htmlbars/templates/component",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["content","yield",["loc",[null,[1,0],[1,9]]]]],locals:[],templates:[]}}())}),e("ember-htmlbars/templates/container-view",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){var e=function(){return{meta:{},isEmpty:!1,arity:1,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","view",[["get","childView",["loc",[null,[1,63],[1,72]]]]],[],["loc",[null,[1,56],[1,74]]]]],locals:["childView"],templates:[]}}(),t=function(){var e=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","view",[["get","view._emptyView",["loc",[null,[1,108],[1,123]]]]],["_defaultTagName",["get","view._emptyViewTagName",["loc",[null,[1,140],[1,162]]]]],["loc",[null,[1,101],[1,164]]]]],locals:[],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","if",[["get","view._emptyView",["loc",[null,[1,84],[1,99]]]]],[],0,null,["loc",[null,[1,74],[1,164]]]]],locals:[],templates:[e]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","each",[["get","view.childViews",["loc",[null,[1,8],[1,23]]]]],["key","elementId"],0,1,["loc",[null,[1,0],[1,173]]]]],locals:[],templates:[e,t]}}())}),e("ember-htmlbars/templates/empty",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){return{meta:{},isEmpty:!0,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment();return t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}())}),e("ember-htmlbars/templates/legacy-each",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){var e=function(){var e=function(){var e=function(){var e=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","legacy-yield",[["get","item",["loc",[null,[5,24],[5,28]]]]],[],["loc",[null,[5,8],[5,31]]]]],locals:[],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","view",[["get","attrs.itemViewClass",["loc",[null,[4,15],[4,34]]]]],["_defaultTagName",["get","view._itemTagName",["loc",[null,[4,51],[4,68]]]]],0,null,["loc",[null,[4,6],[6,17]]]]],locals:[],templates:[e]}}(),t=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","legacy-yield",[["get","item",["loc",[null,[8,22],[8,26]]]]],[],["loc",[null,[8,6],[8,29]]]]],locals:[],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","if",[["get","attrs.itemViewClass",["loc",[null,[3,11],[3,30]]]]],[],0,1,["loc",[null,[3,4],[9,13]]]]],locals:[],templates:[e,t]}}(),t=function(){var e=function(){var e=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","legacy-yield",[["get","item",["loc",[null,[13,24],[13,28]]]]],[],["loc",[null,[13,8],[13,31]]]]],locals:[],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","view",[["get","attrs.itemViewClass",["loc",[null,[12,15],[12,34]]]]],["controller",["get","item",["loc",[null,[12,46],[12,50]]]],"_defaultTagName",["get","view._itemTagName",["loc",[null,[12,67],[12,84]]]]],0,null,["loc",[null,[12,6],[14,17]]]]],locals:[],templates:[e]}}(),t=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","legacy-yield",[["get","item",["loc",[null,[16,22],[16,26]]]]],["controller",["get","item",["loc",[null,[16,38],[16,42]]]]],["loc",[null,[16,6],[16,45]]]]],locals:[],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","if",[["get","attrs.itemViewClass",["loc",[null,[11,11],[11,30]]]]],[],0,1,["loc",[null,[11,4],[17,13]]]]],locals:[],templates:[e,t]}}();return{meta:{},isEmpty:!1,arity:1,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","if",[["get","view.keyword",["loc",[null,[2,9],[2,21]]]]],[],0,1,["loc",[null,[2,2],[18,11]]]]],locals:["item"],templates:[e,t]}}(),t=function(){var e=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","view",[["get","view._emptyView",["loc",[null,[20,10],[20,25]]]]],["_defaultTagName",["get","view._itemTagName",["loc",[null,[20,42],[20,59]]]]],["loc",[null,[20,2],[20,62]]]]],locals:[],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","if",[["get","view._emptyView",["loc",[null,[19,11],[19,26]]]]],[],0,null,["loc",[null,[19,0],[21,0]]]]],locals:[],templates:[e]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","each",[["get","view._arrangedContent",["loc",[null,[1,9],[1,30]]]]],["-legacy-keyword",["get","view.keyword",["loc",[null,[1,47],[1,59]]]]],0,1,["loc",[null,[1,0],[21,11]]]]],locals:[],templates:[e,t]}}())}),e("ember-htmlbars/templates/link-to",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){var e=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["content","linkTitle",["loc",[null,[1,17],[1,30]]]]],locals:[],templates:[]}}(),t=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["content","yield",["loc",[null,[1,38],[1,47]]]]],locals:[],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","if",[["get","linkTitle",["loc",[null,[1,6],[1,15]]]]],[],0,1,["loc",[null,[1,0],[1,54]]]]],locals:[],templates:[e,t]}}())}),e("ember-htmlbars/templates/select-optgroup",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){var e=function(){return{meta:{},isEmpty:!1,arity:1,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","view",[["get","attrs.optionView",["loc",[null,[1,40],[1,56]]]]],["content",["get","item",["loc",[null,[1,65],[1,69]]]],"selection",["get","attrs.selection",["loc",[null,[1,80],[1,95]]]],"parentValue",["get","attrs.value",["loc",[null,[1,108],[1,119]]]],"multiple",["get","attrs.multiple",["loc",[null,[1,129],[1,143]]]],"optionLabelPath",["get","attrs.optionLabelPath",["loc",[null,[1,160],[1,181]]]],"optionValuePath",["get","attrs.optionValuePath",["loc",[null,[1,198],[1,219]]]]],["loc",[null,[1,33],[1,221]]]]],locals:["item"],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","each",[["get","attrs.content",["loc",[null,[1,8],[1,21]]]]],[],0,null,["loc",[null,[1,0],[1,230]]]]],locals:[],templates:[e]}}())}),e("ember-htmlbars/templates/select-option",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["content","view.label",["loc",[null,[1,0],[1,16]]]]],locals:[],templates:[]}}())}),e("ember-htmlbars/templates/select",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){var e=function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createElement("option");e.setAttribute(r,"value","");var n=e.createComment("");return e.appendChild(r,n),e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(e.childAt(t,[0]),0,0),n},statements:[["content","view.prompt",["loc",[null,[1,36],[1,51]]]]],locals:[],templates:[]}}(),t=function(){var e=function(){return{meta:{},isEmpty:!1,arity:1,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","view",[["get","view.groupView",["loc",[null,[1,142],[1,156]]]]],["content",["get","group.content",["loc",[null,[1,165],[1,178]]]],"label",["get","group.label",["loc",[null,[1,185],[1,196]]]],"selection",["get","view.selection",["loc",[null,[1,207],[1,221]]]],"value",["get","view.value",["loc",[null,[1,228],[1,238]]]],"multiple",["get","view.multiple",["loc",[null,[1,248],[1,261]]]],"optionLabelPath",["get","view.optionLabelPath",["loc",[null,[1,278],[1,298]]]],"optionValuePath",["get","view.optionValuePath",["loc",[null,[1,315],[1,335]]]],"optionView",["get","view.optionView",["loc",[null,[1,347],[1,362]]]]],["loc",[null,[1,135],[1,364]]]]],locals:["group"],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","each",[["get","view.groupedContent",["loc",[null,[1,103],[1,122]]]]],[],0,null,["loc",[null,[1,95],[1,373]]]]],locals:[],templates:[e]}}(),r=function(){var e=function(){return{meta:{},isEmpty:!1,arity:1,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["inline","view",[["get","view.optionView",["loc",[null,[1,420],[1,435]]]]],["content",["get","item",["loc",[null,[1,444],[1,448]]]],"selection",["get","view.selection",["loc",[null,[1,459],[1,473]]]],"parentValue",["get","view.value",["loc",[null,[1,486],[1,496]]]],"multiple",["get","view.multiple",["loc",[null,[1,506],[1,519]]]],"optionLabelPath",["get","view.optionLabelPath",["loc",[null,[1,536],[1,556]]]],"optionValuePath",["get","view.optionValuePath",["loc",[null,[1,573],[1,593]]]]],["loc",[null,[1,413],[1,595]]]]],locals:["item"],templates:[]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["block","each",[["get","view.content",["loc",[null,[1,389],[1,401]]]]],[],0,null,["loc",[null,[1,381],[1,604]]]]],locals:[],templates:[e]}}();return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");e.appendChild(t,r);var r=e.createComment("");e.appendChild(t,r);var r=e.createTextNode("\n");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(2);return n[0]=e.createMorphAt(t,0,0,r),n[1]=e.createMorphAt(t,1,1,r),e.insertBoundary(t,0),n},statements:[["block","if",[["get","view.prompt",["loc",[null,[1,6],[1,17]]]]],[],0,null,["loc",[null,[1,0],[1,67]]]],["block","if",[["get","view.optionGroupPath",["loc",[null,[1,73],[1,93]]]]],[],1,2,["loc",[null,[1,67],[1,611]]]]], +locals:[],templates:[e,t,r]}}())}),e("ember-htmlbars/templates/top-level-view",["exports","ember-template-compiler/system/template"],function(e,t){"use strict";e["default"]=t["default"](function(){return{meta:{},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),r=e.createComment("");return e.appendChild(t,r),t},buildRenderNodes:function(e,t,r){var n=new Array(1);return n[0]=e.createMorphAt(t,0,0,r),e.insertBoundary(t,0),e.insertBoundary(t,null),n},statements:[["content","outlet",["loc",[null,[1,0],[1,10]]]]],locals:[],templates:[]}}())}),e("ember-htmlbars/utils/decode-each-key",["exports","ember-metal/property_get","ember-metal/utils"],function(e,t,r){"use strict";function n(e){var t=void 0,n=typeof e;return t="string"===n||"number"===n?e:r.guidFor(e)}function i(e,r,i){var a;switch(r){case"@index":a=i;break;case"@identity":a=n(e);break;default:a=r?t.get(e,r):n(e)}return"number"==typeof a&&(a=String(a)),a}e["default"]=i}),e("ember-htmlbars/utils/extract-positional-params",["exports","ember-metal/debug","ember-metal/streams/stream","ember-metal/streams/utils"],function(e,t,r,n){"use strict";function i(e,t,r,n){var i=t.positionalParams;i&&a(e,i,r,n)}function a(e,t,r,n){var i="string"==typeof t;i?s(e,t,r,n):o(e,t,r,n)}function o(e,t,r,n){for(var i=Math.min(r.length,t.length),a=0;i>a;a++){var o=r[a];n[t[a]]=o}}function s(e,t,i,a){var o=t in a;if(0!==i.length||!o){var s=new r.Stream(function(){return n.readArray(i.slice(0))},"params");a[t]=s;for(var u=0;u1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];for(var i=0,a=r.length;a>i;i++){var o=r[i];if(o)for(var s=Object.keys(o),u=0,l=s.length;l>u;u++){var c=s[u];e[c]=o[c]}}return e}e["default"]=t}),e("ember-metal/binding",["exports","ember-metal/core","ember-metal/logger","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/observer","ember-metal/run_loop","ember-metal/path_cache"],function(e,t,r,n,i,a,o,s,u,l){"use strict";function c(e,r){return i.get(l.isGlobal(r)?t["default"].lookup:e,r)}function m(e,t){this._direction=void 0,this._from=t,this._to=e,this._readyToSync=void 0,this._oneWay=void 0}function h(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}function d(e,t,r){return new m(t,r).connect(e)}e.bind=d,t["default"].LOG_BINDINGS=!!t["default"].ENV.LOG_BINDINGS,m.prototype={copy:function(){var e=new m(this._to,this._from);return this._oneWay&&(e._oneWay=!0),e},from:function(e){return this._from=e,this},to:function(e){return this._to=e,this},oneWay:function(){return this._oneWay=!0,this},toString:function(){var e=this._oneWay?"[oneWay]":"";return"Ember.Binding<"+o.guidFor(this)+">("+this._from+" -> "+this._to+")"+e},connect:function(e){var t=this._from,r=this._to;return a.trySet(e,r,c(e,t)),s.addObserver(e,t,this,this.fromDidChange),this._oneWay||s.addObserver(e,r,this,this.toDidChange),this._readyToSync=!0,this},disconnect:function(e){var t=!this._oneWay;return s.removeObserver(e,this._from,this,this.fromDidChange),t&&s.removeObserver(e,this._to,this,this.toDidChange),this._readyToSync=!1,this},fromDidChange:function(e){this._scheduleSync(e,"fwd")},toDidChange:function(e){this._scheduleSync(e,"back")},_scheduleSync:function(e,t){var r=this._direction;void 0===r&&(u["default"].schedule("sync",this,this._sync,e),this._direction=t),"back"===r&&"fwd"===t&&(this._direction="fwd")},_sync:function(e){var n=t["default"].LOG_BINDINGS;if(!e.isDestroyed&&this._readyToSync){var o=this._direction,u=this._from,m=this._to;if(this._direction=void 0,"fwd"===o){var h=c(e,this._from);n&&r["default"].log(" ",this.toString(),"->",h,e),this._oneWay?a.trySet(e,m,h):s._suspendObserver(e,m,this,this.toDidChange,function(){a.trySet(e,m,h)})}else if("back"===o){var d=i.get(e,this._to);n&&r["default"].log(" ",this.toString(),"<-",d,e),s._suspendObserver(e,u,this,this.fromDidChange,function(){a.trySet(l.isGlobal(u)?t["default"].lookup:e,u,d)})}}}},h(m,{from:function(e){var t=this;return new t(void 0,e)},to:function(e){var t=this;return new t(e,void 0)}}),e.Binding=m,e.isGlobalPath=l.isGlobal}),e("ember-metal/cache",["exports","ember-metal/empty_object"],function(e,t){"use strict";function r(e,r){this.store=new t["default"],this.size=0,this.misses=0,this.hits=0,this.limit=e,this.func=r}e["default"]=r;var n=function(){};r.prototype={set:function(e,t){return this.limit>this.size&&(this.size++,void 0===t?this.store[e]=n:this.store[e]=t),t},get:function(e){var t=this.store[e];return void 0===t?(this.misses++,t=this.set(e,this.func(e))):t===n?(this.hits++,t=void 0):this.hits++,t},purge:function(){this.store=new t["default"],this.size=0,this.hits=0,this.misses=0}}}),e("ember-metal/chains",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/meta","ember-metal/watch_key","ember-metal/empty_object"],function(e,t,r,n,i,a){"use strict";function o(e){return e.match(g)[0]}function s(e){return e&&"object"==typeof e}function u(e){return!(s(e)&&e.isDescriptor&&e._volatile===!1)}function l(e){this.obj=e,this.chains=new a["default"]}function c(){if(0!==b.length){var e=b;b=[],e.forEach(function(e){return e[0].add(e[1])})}}function m(e){return new l(e)}function h(e,t,r){if(s(e)){var a=n.meta(e);a.writableChainWatchers(m).add(t,r),i.watchKey(e,t,a)}}function d(e,t,r){if(s(e)){var a=n.peekMeta(e);a&&a.readableChainWatchers()&&(a=n.meta(e),a.readableChainWatchers().remove(t,r),i.unwatchKey(e,t,a))}}function f(e,t,r){this._parent=e,this._key=t,this._watching=void 0===r,this._chains=void 0,this._object=void 0,this.count=0,this._value=r,this._paths={},this._watching&&(this._object=e.value(),this._object&&h(this._object,this._key,this))}function p(e,t){if(e){var i=n.peekMeta(e);if(!i||i.proto!==e){if(u(e[t]))return r.get(e,t);var a=i.readableCache();return a&&t in a?a[t]:void 0}}}function v(e){var t=n.peekMeta(e);if(t){t=n.meta(e);var r=t.readableChainWatchers();r&&r.revalidateAll(),t.readableChains()&&t.writableChains()}}e.flushPendingChains=c,e.finishChains=v;var g=/^([^\.]+)/;l.prototype={add:function(e,t){var r=this.chains[e];void 0===r?this.chains[e]=[t]:r.push(t)},remove:function(e,t){var r=this.chains[e];if(r)for(var n=0,i=r.length;i>n;n++)if(r[n]===t){r.splice(n,1);break}},has:function(e,t){var r=this.chains[e];if(r)for(var n=0,i=r.length;i>n;n++)if(r[n]===t)return!0;return!1},revalidateAll:function(){for(var e in this.chains)this.notify(e,!0,void 0)},revalidate:function(e){this.notify(e,!0,void 0)},notify:function(e,t,r){var n=this.chains[e];if(void 0!==n&&0!==n.length){var i=void 0;r&&(i=[]);for(var a=0,o=n.length;o>a;a++)n[a].notify(t,i);if(void 0!==r)for(var a=0,o=i.length;o>a;a+=2){var s=i[a],u=i[a+1];r(s,u)}}}};var b=[];f.prototype={value:function(){if(void 0===this._value&&this._watching){var e=this._parent.value();this._value=p(e,this._key)}return this._value},destroy:function(){if(this._watching){var e=this._object;e&&d(e,this._key,this),this._watching=!1}},copy:function(e){var t,r=new f(null,null,e),n=this._paths;for(t in n)n[t]<=0||r.add(t);return r},add:function(e){var t,n,i,a,s;if(s=this._paths,s[e]=(s[e]||0)+1,t=this.value(),n=r.normalizeTuple(t,e),n[0]&&n[0]===t)e=n[1],i=o(e),e=e.slice(i.length+1);else{if(!n[0])return b.push([this,e]),void(n.length=0);a=n[0],i=e.slice(0,0-(n[1].length+1)),e=n[1]}n.length=0,this.chain(i,e,a)},remove:function(e){var t,n,i,a,s;s=this._paths,s[e]>0&&s[e]--,t=this.value(),n=r.normalizeTuple(t,e),n[0]===t?(e=n[1],i=o(e),e=e.slice(i.length+1)):(a=n[0],i=e.slice(0,0-(n[1].length+1)),e=n[1]),n.length=0,this.unchain(i,e)},chain:function(e,t,r){var n,i=this._chains;void 0===i?i=this._chains=new a["default"]:n=i[e],void 0===n&&(n=i[e]=new f(this,e,r)),n.count++,t&&(e=o(t),t=t.slice(e.length+1),n.chain(e,t))},unchain:function(e,t){var r=this._chains,n=r[e];if(t&&t.length>1){var i=o(t),a=t.slice(i.length+1);n.unchain(i,a)}n.count--,n.count<=0&&(r[n._key]=void 0,n.destroy())},notify:function(e,t){if(e&&this._watching){var r=this._parent.value();r!==this._object&&(d(this._object,this._key,this),this._object=r,h(r,this._key,this)),this._value=void 0}var n,i=this._chains;if(i)for(var a in i)n=i[a],void 0!==n&&n.notify(e,t);t&&this._parent&&this._parent.populateAffected(this,this._key,1,t)},populateAffected:function(e,t,r,n){this._key&&(t=this._key+"."+t),this._parent?this._parent.populateAffected(this,t,r+1,n):(r>1&&n.push(this.value(),t),t="this."+t,this._paths[t]>0&&n.push(this.value(),t))}},e.removeChainWatcher=d,e.ChainNode=f}),e("ember-metal/computed",["exports","ember-metal/debug","ember-metal/property_set","ember-metal/utils","ember-metal/meta","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/dependent_keys"],function(e,t,r,n,i,a,o,s,u,l){"use strict";function c(){}function m(e,t){this.isDescriptor=!0,"function"==typeof e?this._getter=e:(this._getter=e.get,this._setter=e.set),this._dependentKeys=void 0,this._suspended=void 0,this._meta=void 0,this._volatile=!1,this._dependentKeys=t&&t.dependentKeys,this._readOnly=!1}function h(e){var t;arguments.length>1&&(t=[].slice.call(arguments),e=t.pop());var r=new m(e);return t&&r.property.apply(r,t),r}function d(e,t){var r=i.peekMeta(e),n=r&&r.source===e&&r.readableCache(),a=n&&n[t];return a===c?void 0:a}e["default"]=h;m.prototype=new s.Descriptor;var f=m.prototype;f["volatile"]=function(){return this._volatile=!0,this},f.readOnly=function(){return this._readOnly=!0,this},f.property=function(){var e,t=function(t){e.push(t)};e=[];for(var r=0,n=arguments.length;n>r;r++)a["default"](arguments[r],t);return this._dependentKeys=e,this},f.meta=function(e){return 0===arguments.length?this._meta||{}:(this._meta=e,this)},f.didChange=function(e,t){if(!this._volatile&&this._suspended!==e){var r=i.peekMeta(e);if(r&&r.source===e){var n=r.readableCache();n&&void 0!==n[t]&&(n[t]=void 0,l.removeDependentKeys(this,e,t,r))}}},f.get=function(e,t){if(this._volatile)return this._getter.call(e,t);var r=i.meta(e),n=r.writableCache(),a=n[t];if(a===c)return void 0;if(void 0!==a)return a;var o=this._getter.call(e,t);void 0===o?n[t]=c:n[t]=o;var s=r.readableChainWatchers();return s&&s.revalidate(t),l.addDependentKeys(this,e,t,r),o},f.set=function(e,t,r){return this._readOnly&&this._throwReadOnlyError(e,t),this._setter?this._volatile?this.volatileSet(e,t,r):this.setWithSuspend(e,t,r):this.clobberSet(e,t,r)},f._throwReadOnlyError=function(e,t){throw new o["default"]('Cannot set read-only property "'+t+'" on object: '+n.inspect(e))},f.clobberSet=function(e,t,n){var i=d(e,t);return s.defineProperty(e,t,null,i),r.set(e,t,n),n},f.volatileSet=function(e,t,r){return this._setter.call(e,t,r)},f.setWithSuspend=function(e,t,r){var n=this._suspended;this._suspended=e;try{return this._set(e,t,r)}finally{this._suspended=n}},f._set=function(e,t,r){var n=i.meta(e),a=n.writableCache(),o=!1,s=void 0;void 0!==a[t]&&(a[t]!==c&&(s=a[t]),o=!0);var m=this._setter.call(e,t,r,s);if(o&&s===m)return m;var h=n.peekWatching(t);return h&&u.propertyWillChange(e,t),o&&(a[t]=void 0),o||l.addDependentKeys(this,e,t,n),void 0===m?a[t]=c:a[t]=m,h&&u.propertyDidChange(e,t),m},f.teardown=function(e,t){if(!this._volatile){var r=i.meta(e),n=r.readableCache();n&&void 0!==n[t]&&(l.removeDependentKeys(this,e,t,r),n[t]=void 0)}},d.set=function(e,t,r){void 0===r?e[t]=c:e[t]=r},d.get=function(e,t){var r=e[t];return r===c?void 0:r},d.remove=function(e,t){e[t]=void 0},e.ComputedProperty=m,e.computed=h,e.cacheFor=d}),e("ember-metal/computed_macros",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/computed","ember-metal/is_empty","ember-metal/is_none","ember-metal/alias"],function(e,t,r,n,i,a,o,s){"use strict";function u(e,t){for(var n={},i=0;in;n++)r[n]=arguments[n];var a=i.computed(function(){return e.apply(this,[u(this,r)])});return a.property.apply(a,r)}}function c(e){return i.computed(e+".length",function(){return a["default"](r.get(this,e))})}function m(e){return i.computed(e+".length",function(){return!a["default"](r.get(this,e))})}function h(e){return i.computed(e,function(){return o["default"](r.get(this,e))})}function d(e){return i.computed(e,function(){return!r.get(this,e)})}function f(e){return i.computed(e,function(){return!!r.get(this,e)})}function p(e,t){return i.computed(e,function(){var n=r.get(this,e);return"string"==typeof n?t.test(n):!1})}function v(e,t){return i.computed(e,function(){return r.get(this,e)===t})}function g(e,t){return i.computed(e,function(){return r.get(this,e)>t})}function b(e,t){return i.computed(e,function(){return r.get(this,e)>=t})}function y(e,t){return i.computed(e,function(){return r.get(this,e)r;r++)t[r]=arguments[r];return t[t.length-1]},runInDebug:function(){},debugSeal:function(){}};e.debugFunctions=m}),e("ember-metal/dependent_keys",["exports","ember-metal/watching"],function(e,t){"no use strict";function r(e,r,n,i){var a,o,s,u=e._dependentKeys;if(u)for(a=0,o=u.length;o>a;a++)s=u[a],i.writeDeps(s,n,(i.peekDeps(s,n)||0)+1),t.watch(r,s,i)}function n(e,r,n,i){var a,o,s,u=e._dependentKeys;if(u)for(a=0,o=u.length;o>a;a++)s=u[a],i.writeDeps(s,n,(i.peekDeps(s,n)||0)-1),t.unwatch(r,s,i)}e.addDependentKeys=r,e.removeDependentKeys=n}),e("ember-metal/deprecate_property",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set"],function(e,t,r,n){"use strict";function i(e,t,i,a){function o(){}Object.defineProperty(e,t,{configurable:!0,enumerable:!1,set:function(e){o(),n.set(this,i,e)},get:function(){return o(),r.get(this,i)}})}e.deprecateProperty=i}),e("ember-metal/dictionary",["exports","ember-metal/empty_object"],function(e,t){"use strict";function r(e){var r;return r=null===e?new t["default"]:Object.create(e),r._dict=null,delete r._dict,r}e["default"]=r}),e("ember-metal/empty_object",["exports"],function(e){"use strict";function t(){}var r=Object.create(null,{constructor:{value:void 0,enumerable:!1,writable:!0}});t.prototype=r,e["default"]=t}),e("ember-metal/environment",["exports","ember-metal/core"],function(e,t){"use strict";var r,n="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof document.createElement&&!t["default"].ENV.disableBrowserEnvironment;r=n?{hasDOM:!0,isChrome:!!window.chrome&&!window.opera,isFirefox:"undefined"!=typeof InstallTrigger,isPhantom:!!window.callPhantom,location:window.location,history:window.history,userAgent:window.navigator.userAgent,global:window}:{hasDOM:!1,isChrome:!1,isFirefox:!1,isPhantom:!1,location:null,history:null,userAgent:"Lynx (textmode)",global:null},e["default"]=r}),e("ember-metal/error",["exports","ember-metal/core"],function(e,t){"use strict";function r(){var e=Error.apply(this,arguments);Error.captureStackTrace&&Error.captureStackTrace(this,t["default"].Error);for(var r=0;r=0;i-=3)if(t===e[i]&&r===e[i+1]){n=i;break}return n}function o(e,t,r){var i=n.peekMeta(e);if(i){for(var o=i.matchingListeners(t),s=[],u=o.length-3;u>=0;u-=3){var l=o[u],c=o[u+1],m=o[u+2],h=a(r,l,c);-1===h&&(r.push(l,c,m),s.push(l,c,m))}return s}}function s(e,t,r,a,o){a||"function"!=typeof r||(a=r,r=null);var s=0;o&&(s|=i.ONCE),n.meta(e).addToListeners(t,r,a,s),"function"==typeof e.didAddListener&&e.didAddListener(t,r,a)}function u(e,t,r,i){i||"function"!=typeof r||(i=r,r=null),n.meta(e).removeFromListeners(t,r,i,function(){"function"==typeof e.didRemoveListener&&e.didRemoveListener.apply(e,arguments)})}function l(e,t,r,n,i){return c(e,[t],r,n,i)}function c(e,t,r,i,a){return i||"function"!=typeof r||(i=r,r=null),n.meta(e).suspendListeners(t,r,i,a)}function m(e){return n.meta(e).watchedEvents()}function h(e,t,a,o){if(!o){var s=n.peekMeta(e);o=s&&s.matchingListeners(t)}if(o&&0!==o.length){for(var l=o.length-3;l>=0;l-=3){var c=o[l],m=o[l+1],h=o[l+2];m&&(h&i.SUSPENDED||(h&i.ONCE&&u(e,t,c,m),c||(c=e),"string"==typeof m?a?r.applyStr(c,m,a):c[m]():a?r.apply(c,m,a):m.call(c)))}return!0}}function d(e,t){var r=n.peekMeta(e);return r?r.matchingListeners(t).length>0:!1}function f(e,t){var r=[],i=n.peekMeta(e),a=i&&i.matchingListeners(t);if(!a)return r;for(var o=0,s=a.length;s>o;o+=3){var u=a[o],l=a[o+1];r.push([u,l])}return r}function p(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];var n=t.pop(),i=t;return n.__ember_listens__=i,n}e.accumulateListeners=o,e.addListener=s,e.removeListener=u,e.suspendListener=l,e.suspendListeners=c,e.watchedEvents=m,e.sendEvent=h,e.hasListeners=d,e.listenersFor=f,e.on=p}),e("ember-metal/expand_properties",["exports","ember-metal/error"],function(e,t){"use strict";function r(e,r){if(e.indexOf(" ")>-1)throw new t["default"]("Brace expanded properties cannot contain spaces, e.g. 'user.{firstName, lastName}' should be 'user.{firstName,lastName}'");if("string"==typeof e){var o=e.split(i),s=[o];o.forEach(function(e,t){e.indexOf(",")>=0&&(s=n(s,e.split(","),t))}),s.forEach(function(e){r(e.join("").replace(a,".[]"))})}else r(e.replace(a,".[]"))}function n(e,t,r){var n=[];return e.forEach(function(e){t.forEach(function(t){var i=e.slice(0);i[r]=t,n.push(i)})}),n}e["default"]=r;var i=/\{|\}/,a=/\.@each$/}),e("ember-metal/features",["exports","ember-metal/core","ember-metal/assign"],function(e,t,r){"use strict";function n(e){var r=i[e];return r===!0||r===!1||void 0===r?r:t["default"].ENV.ENABLE_OPTIONAL_FEATURES?!0:!1}e["default"]=n;var i=r["default"]({},t["default"].ENV.FEATURES);e.FEATURES=i}),e("ember-metal/get_properties",["exports","ember-metal/property_get"],function(e,t){"use strict";function r(e){var r={},n=arguments,i=1;2===arguments.length&&Array.isArray(arguments[1])&&(i=0,n=arguments[1]);for(var a=n.length;a>i;i++)r[n[i]]=t.get(e,n[i]);return r}e["default"]=r}),e("ember-metal/index",["exports","require","ember-metal/core","ember-metal/debug","ember-metal/features","ember-metal/assign","ember-metal/merge","ember-metal/instrumentation","ember-metal/utils","ember-metal/meta","ember-metal/error","ember-metal/cache","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/alias","ember-metal/computed_macros","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","ember-metal/is_present","backburner"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b,y,_,w,x,C,k,E,O,N,A,S,T,P,R,M,L,D,j,I,V,F){"use strict";N.computed.empty=S.empty,N.computed.notEmpty=S.notEmpty,N.computed.none=S.none,N.computed.not=S.not,N.computed.bool=S.bool,N.computed.match=S.match,N.computed.equal=S.equal,N.computed.gt=S.gt,N.computed.gte=S.gte,N.computed.lt=S.lt,N.computed.lte=S.lte,N.computed.alias=A["default"],N.computed.oneWay=S.oneWay,N.computed.reads=S.oneWay,N.computed.readOnly=S.readOnly,N.computed.defaultTo=S.defaultTo,N.computed.deprecatingAlias=S.deprecatingAlias,N.computed.and=S.and,N.computed.or=S.or,N.computed.any=S.any;var H=r["default"].Instrumentation={};H.instrument=s.instrument,H.subscribe=s.subscribe,H.unsubscribe=s.unsubscribe,H.reset=s.reset,r["default"].instrument=s.instrument,r["default"].subscribe=s.subscribe,r["default"]._Cache=m["default"],r["default"].generateGuid=u.generateGuid,r["default"].GUID_KEY=u.GUID_KEY,r["default"].platform={defineProperty:!0,hasPropertyAccessors:!0},r["default"].Error=c["default"],r["default"].guidFor=u.guidFor,r["default"].META_DESC=l.META_DESC,r["default"].meta=l.meta,r["default"].inspect=u.inspect,r["default"].tryCatchFinally=u.deprecatedTryCatchFinally,r["default"].makeArray=u.makeArray,r["default"].canInvoke=u.canInvoke,r["default"].tryInvoke=u.tryInvoke,r["default"].wrap=u.wrap,r["default"].apply=u.apply,r["default"].applyStr=u.applyStr,r["default"].uuid=u.uuid,r["default"].Logger=h["default"],r["default"].get=d.get,r["default"].getWithDefault=d.getWithDefault,r["default"].normalizeTuple=d.normalizeTuple,r["default"]._getPath=d._getPath,r["default"].on=f.on,r["default"].addListener=f.addListener,r["default"].removeListener=f.removeListener,r["default"]._suspendListener=f.suspendListener,r["default"]._suspendListeners=f.suspendListeners,r["default"].sendEvent=f.sendEvent,r["default"].hasListeners=f.hasListeners,r["default"].watchedEvents=f.watchedEvents,r["default"].listenersFor=f.listenersFor,r["default"].accumulateListeners=f.accumulateListeners,r["default"]._ObserverSet=p["default"],r["default"].propertyWillChange=v.propertyWillChange,r["default"].propertyDidChange=v.propertyDidChange,r["default"].overrideChains=v.overrideChains,r["default"].beginPropertyChanges=v.beginPropertyChanges,r["default"].endPropertyChanges=v.endPropertyChanges,r["default"].changeProperties=v.changeProperties,r["default"].defineProperty=g.defineProperty,r["default"].set=b.set,r["default"].trySet=b.trySet,r["default"].OrderedSet=y.OrderedSet,r["default"].Map=y.Map,r["default"].MapWithDefault=y.MapWithDefault,r["default"].getProperties=_["default"],r["default"].setProperties=w["default"],r["default"].watchKey=x.watchKey,r["default"].unwatchKey=x.unwatchKey,r["default"].flushPendingChains=C.flushPendingChains,r["default"].removeChainWatcher=C.removeChainWatcher,r["default"]._ChainNode=C.ChainNode,r["default"].finishChains=C.finishChains,r["default"].watchPath=k.watchPath,r["default"].unwatchPath=k.unwatchPath,r["default"].watch=E.watch,r["default"].isWatching=E.isWatching,r["default"].unwatch=E.unwatch,r["default"].rewatch=E.rewatch,r["default"].destroy=E.destroy,r["default"].expandProperties=O["default"],r["default"].ComputedProperty=N.ComputedProperty,r["default"].computed=N.computed,r["default"].cacheFor=N.cacheFor,r["default"].addObserver=T.addObserver,r["default"].observersFor=T.observersFor,r["default"].removeObserver=T.removeObserver,r["default"]._suspendObserver=T._suspendObserver,r["default"]._suspendObservers=T._suspendObservers,r["default"].IS_BINDING=P.IS_BINDING,r["default"].required=P.required,r["default"].aliasMethod=P.aliasMethod,r["default"].observer=P.observer,r["default"].immediateObserver=P._immediateObserver,r["default"].mixin=P.mixin,r["default"].Mixin=P.Mixin,r["default"].bind=R.bind,r["default"].Binding=R.Binding,r["default"].isGlobalPath=R.isGlobalPath,r["default"].run=M["default"],r["default"].Backburner=F["default"],r["default"]._Backburner=F["default"],r["default"].libraries=new L["default"],r["default"].libraries.registerCoreLibrary("Ember",r["default"].VERSION),r["default"].isNone=D["default"],r["default"].isEmpty=j["default"],r["default"].isBlank=I["default"],r["default"].isPresent=V["default"],r["default"].merge=o["default"],r["default"].FEATURES=i.FEATURES,r["default"].FEATURES.isEnabled=i["default"],r["default"].onerror=null,t.has("ember-debug")?t["default"]("ember-debug"):(r["default"].Debug={},r["default"].Debug.registerDeprecationHandler=function(){},r["default"].Debug.registerWarnHandler=function(){}),r["default"].create=n.deprecateFunc("Ember.create is deprecated in favor of Object.create",{id:"ember-metal.ember-create",until:"3.0.0"},Object.create),r["default"].keys=n.deprecateFunc("Ember.keys is deprecated in favor of Object.keys",{id:"ember-metal.ember.keys",until:"3.0.0"},Object.keys),e["default"]=r["default"]}),e("ember-metal/injected_property",["exports","ember-metal/debug","ember-metal/computed","ember-metal/alias","ember-metal/properties","container/owner"],function(e,t,r,n,i,a){"use strict";function o(e,t){this.type=e,this.name=t,this._super$Constructor(s),c.oneWay.call(this)}function s(e){var t=this[e],r=a.getOwner(this);return r.lookup(t.type+":"+(t.name||e))}o.prototype=Object.create(i.Descriptor.prototype);var u=o.prototype,l=r.ComputedProperty.prototype,c=n.AliasedProperty.prototype;u._super$Constructor=r.ComputedProperty,u.get=l.get,u.readOnly=l.readOnly,u.teardown=l.teardown,e["default"]=o}),e("ember-metal/instrumentation",["exports","ember-metal/core"],function(e,t){"use strict";function r(e,t,r,a){if(arguments.length<=3&&"function"==typeof t&&(a=r,r=t,t=void 0),0===u.length)return r.call(a);var o=t||{},s=i(e,function(){return o});return s?n(r,s,o,a):r.call(a)}function n(e,t,r,n){try{return e.call(n)}catch(i){return r.exception=i,r}finally{return t()}}function i(e,r){var n=l[e];if(n||(n=c(e)),0!==n.length){var i,a=r(),o=t["default"].STRUCTURED_PROFILE;o&&(i=e+": "+a.object,console.time(i));var s,u,h=n.length,d=new Array(h),f=m();for(s=0;h>s;s++)u=n[s],d[s]=u.before(e,f,a);return function(){var t,r,s,u=m();for(t=0,r=n.length;r>t;t++)s=n[t],s.after(e,u,a,d[t]);o&&console.timeEnd(i)}}}function a(e,t){for(var r,n=e.split("."),i=[],a=0,o=n.length;o>a;a++)r=n[a],"*"===r?i.push("[^\\.]*"):i.push(r);i=i.join("\\."),i+="(\\..*)?";var s={pattern:e,regex:new RegExp("^"+i+"$"),object:t};return u.push(s),l={},s}function o(e){for(var t,r=0,n=u.length;n>r;r++)u[r]===e&&(t=r);u.splice(t,1),l={}}function s(){u.length=0,l={}}e.instrument=r,e._instrumentStart=i, +e.subscribe=a,e.unsubscribe=o,e.reset=s;var u=[];e.subscribers=u;var l={},c=function(e){for(var t,r=[],n=0,i=u.length;i>n;n++)t=u[n],t.regex.test(e)&&r.push(t.object);return l[e]=r,r},m=function(){var e="undefined"!=typeof window?window.performance||{}:{},t=e.now||e.mozNow||e.webkitNow||e.msNow||e.oNow;return t?t.bind(e):function(){return+new Date}}()}),e("ember-metal/is_blank",["exports","ember-metal/is_empty"],function(e,t){"use strict";function r(e){return t["default"](e)||"string"==typeof e&&null===e.match(/\S/)}e["default"]=r}),e("ember-metal/is_empty",["exports","ember-metal/property_get","ember-metal/is_none"],function(e,t,r){"use strict";function n(e){var n=r["default"](e);if(n)return n;if("number"==typeof e.size)return!e.size;var i=typeof e;if("object"===i){var a=t.get(e,"size");if("number"==typeof a)return!a}if("number"==typeof e.length&&"function"!==i)return!e.length;if("object"===i){var o=t.get(e,"length");if("number"==typeof o)return!o}return!1}e["default"]=n}),e("ember-metal/is_none",["exports"],function(e){"use strict";function t(e){return null===e||void 0===e}e["default"]=t}),e("ember-metal/is_present",["exports","ember-metal/is_blank"],function(e,t){"use strict";function r(e){return!t["default"](e)}e["default"]=r}),e("ember-metal/libraries",["exports","ember-metal/debug","ember-metal/features"],function(e,t,r){"use strict";function n(){this._registry=[],this._coreLibIndex=0}n.prototype={constructor:n,_getLibraryByName:function(e){for(var t=this._registry,r=t.length,n=0;r>n;n++)if(t[n].name===e)return t[n]},register:function(e,t,r){var n=this._registry.length;this._getLibraryByName(e)||(r&&(n=this._coreLibIndex++),this._registry.splice(n,0,{name:e,version:t}))},registerCoreLibrary:function(e,t){this.register(e,t,!0)},deRegister:function(e){var t,r=this._getLibraryByName(e);r&&(t=this._registry.indexOf(r),this._registry.splice(t,1))}},e["default"]=n}),e("ember-metal/logger",["exports","ember-metal/core","ember-metal/error"],function(e,t,r){"use strict";function n(){return this}function i(e){var r,n;t["default"].imports.console?r=t["default"].imports.console:"undefined"!=typeof console&&(r=console);var i="object"==typeof r?r[e]:null;return i?"function"==typeof i.bind?(n=i.bind(r),n.displayName="console."+e,n):"function"==typeof i.apply?(n=function(){i.apply(r,arguments)},n.displayName="console."+e,n):function(){var e=Array.prototype.join.call(arguments,", ");i(e)}:void 0}function a(e,t){if(!e)try{throw new r["default"]("assertion failed: "+t)}catch(n){setTimeout(function(){throw n},0)}}e["default"]={log:i("log")||n,warn:i("warn")||n,error:i("error")||n,info:i("info")||n,debug:i("debug")||i("info")||n,assert:i("assert")||a}}),e("ember-metal/map",["exports","ember-metal/core","ember-metal/utils","ember-metal/empty_object"],function(e,t,r,n){"use strict";function i(e){throw new TypeError(Object.prototype.toString.call(e)+" is not a function")}function a(e){throw new TypeError("Constructor "+e+" requires 'new'")}function o(e){var t=new n["default"];for(var r in e)t[r]=e[r];return t}function s(e,t){var r=e._keys.copy(),n=o(e._values);return t._keys=r,t._values=n,t.size=e.size,t}function u(){this instanceof u?(this.clear(),this._silenceRemoveDeprecation=!1):a("OrderedSet")}function l(){this instanceof this.constructor?(this._keys=u.create(),this._keys._silenceRemoveDeprecation=!0,this._values=new n["default"],this.size=0):a("OrderedSet")}function c(e){this._super$constructor(),this.defaultValue=e.defaultValue}u.create=function(){var e=this;return new e},u.prototype={constructor:u,clear:function(){this.presenceSet=new n["default"],this.list=[],this.size=0},add:function(e,t){var n=t||r.guidFor(e),i=this.presenceSet,a=this.list;return i[n]!==!0&&(i[n]=!0,this.size=a.push(e)),this},"delete":function(e,t){var n=t||r.guidFor(e),i=this.presenceSet,a=this.list;if(i[n]===!0){delete i[n];var o=a.indexOf(e);return o>-1&&a.splice(o,1),this.size=a.length,!0}return!1},isEmpty:function(){return 0===this.size},has:function(e){if(0===this.size)return!1;var t=r.guidFor(e),n=this.presenceSet;return n[t]===!0},forEach:function(e){if("function"!=typeof e&&i(e),0!==this.size){var t,r=this.list,n=arguments.length;if(2===n)for(t=0;ta;a++)r=n[a],e[r]=t[r];return e}e["default"]=n}),e("ember-metal/meta",["exports","ember-metal/meta_listeners","ember-metal/empty_object"],function(e,t,r){"no use strict";function n(e,t){this._cache=void 0,this._weak=void 0,this._watching=void 0,this._mixins=void 0,this._bindings=void 0,this._values=void 0,this._deps=void 0,this._chainWatchers=void 0,this._chains=void 0,this.source=e,this.proto=void 0,this.parent=t,this._initializeListeners()}function i(e,t){var r=l(e),n=c(e);t.prototype["writable"+n]=function(){return this._getOrCreateOwnMap(r)},t.prototype["readable"+n]=function(){return this[r]}}function a(e,t){var n=l(e),i=c(e);t.prototype["write"+i]=function(e,t){var r=this._getOrCreateOwnMap(n);r[e]=t},t.prototype["peek"+i]=function(e){return this._findInherited(n,e)},t.prototype["forEach"+i]=function(e){for(var t=this,i=new r["default"];void 0!==t;){var a=t[n];if(a)for(var o in a)i[o]||(i[o]=!0,e(o,a[o]));t=t.parent}},t.prototype["clear"+i]=function(){this[n]=void 0},t.prototype["deleteFrom"+i]=function(e){delete this._getOrCreateOwnMap(n)[e]},t.prototype["hasIn"+i]=function(e){return void 0!==this._findInherited(n,e)}}function o(e,t){var n=l(e),i=c(e);t.prototype["write"+i]=function(e,t,i){var a=this._getOrCreateOwnMap(n),o=a[e];o||(o=a[e]=new r["default"]),o[t]=i},t.prototype["peek"+i]=function(e,t){for(var r=this;void 0!==r;){var i=r[n];if(i){var a=i[e];if(a&&void 0!==a[t])return a[t]}r=r.parent}},t.prototype["has"+i]=function(e){for(var t=this;void 0!==t;){if(t[n]&&t[n][e])return!0;t=t.parent}return!1},t.prototype["forEachIn"+i]=function(e,t){return this._forEachIn(n,e,t)}}function s(e,t){var r=l(e),n=c(e);t.prototype["writable"+n]=function(e){var t=this[r];return t||(t=this[r]=e(this.source)),t},t.prototype["readable"+n]=function(){return this[r]}}function u(e,t){var r=l(e),n=c(e);t.prototype["writable"+n]=function(e){var t=this[r];return t||(t=this.parent?this[r]=this.parent["writable"+n](e).copy(this.source):this[r]=e(this.source)),t},t.prototype["readable"+n]=function(){return this._getInherited(r)}}function l(e){return"_"+e}function c(e){return e.replace(/^\w/,function(e){return e.toUpperCase()})}function m(e){var t=h(e),r=void 0;if(t){if(t.source===e)return t;r=t}var i=new n(e,r);return _(e,i),i}function h(e){return e[v]}function d(e){"object"==typeof e[v]&&(e[v]=null)}e.meta=m,e.peekMeta=h,e.deleteMeta=d;var f={cache:i,weak:i,watching:a,mixins:a,bindings:a,values:a,deps:o,chainWatchers:s,chains:u},p=Object.keys(f),v="__ember_meta__";for(var g in t.protoMethods)n.prototype[g]=t.protoMethods[g];p.forEach(function(e){return f[e](e,n)}),n.prototype._getOrCreateOwnMap=function(e){var t=this[e];return t||(t=this[e]=new r["default"]),t},n.prototype._getInherited=function(e){for(var t=this;void 0!==t;){if(t[e])return t[e];t=t.parent}},n.prototype._findInherited=function(e,t){for(var r=this;void 0!==r;){var n=r[e];if(n){var i=n[t];if(void 0!==i)return i}r=r.parent}},n.prototype._forEachIn=function(e,t,n){for(var i=this,a=new r["default"],o=[];void 0!==i;){var s=i[e];if(s){var u=s[t];if(u)for(var l in u)a[l]||(a[l]=!0,o.push([l,u[l]]))}i=i.parent}for(var c=0;c=0;o-=4)if(a[o]===e&&(!r||a[o+1]===t&&a[o+2]===r)){if(i!==this)return this._finalizeListeners(),this.removeFromListeners(e,t,r);"function"==typeof n&&n(e,t,a[o+2]),a.splice(o,4)}if(i._listenersFinalized)break;i=i.parent}},matchingListeners:function(e){for(var r=this,i=[];r;){var a=r._listeners;if(a)for(var o=0;o=0;a-=3)i[a+1]===t&&i[a+2]===r&&-1!==e.indexOf(i[a])&&i.splice(a,3)}},watchedEvents:function(){for(var e=this,t={};e;){var r=e._listeners;if(r)for(var n=0;n=0||"concatenatedProperties"===t||"mergedProperties"===t?r=C(e,t,r,a):s&&s.indexOf(t)>=0?r=k(e,t,r,a):b(r)&&(r=x(e,t,r,a,i)),i[t]=void 0,a[t]=r}function O(e,t,r,n,i,a){function o(e){delete r[e],delete n[e]}for(var s,u,c,m,h,d,f=0,p=e.length;p>f;f++)if(s=e[f],u=y(t,s),u!==G)if(u){d=l.meta(i),i.willMergeMixin&&i.willMergeMixin(u),m=_("concatenatedProperties",u,n,i),h=_("mergedProperties",u,n,i);for(c in u)u.hasOwnProperty(c)&&(a.push(c),E(i,c,u[c],d,r,n,m,h));u.hasOwnProperty("toString")&&(i.toString=u.toString)}else s.mixins&&(O(s.mixins,t,r,n,i,a),s._without&&s._without.forEach(o))}function N(e,t,r,n){Q.test(t)&&n.writeBindings(t,r)}function A(e,t,r){var n=function(r){f._suspendObserver(e,t,null,i,function(){s.trySet(e,t,r.value())})},i=function(){r.setValue(o.get(e,t),n)};s.set(e,t,r.value()),f.addObserver(e,t,null,i),r.subscribe(n),void 0===e._streamBindingSubscriptions&&(e._streamBindingSubscriptions=new a["default"]),e._streamBindingSubscriptions[t]=n}function S(e,t){t.forEachBindings(function(t,r){if(r){var n=t.slice(0,-7);if(v.isStream(r))return void A(e,n,r);r instanceof d.Binding?(r=r.copy(),r.to(n)):r=new d.Binding(n,r),r.connect(e),e[t]=r}}),t.clearBindings()}function T(e,t){return S(e,t||l.meta(e)),e}function P(e,t,r,n,i){var a,o,s=t.methodName;return n[s]||i[s]?(a=i[s],t=n[s]):(o=e[s])&&null!==o&&"object"==typeof o&&o.isDescriptor?(t=o,a=void 0):(t=void 0,a=e[s]),{desc:t,value:a}}function R(e,t,r,n,i){var a=r[n];if(a)for(var o=0,s=a.length;s>o;o++)i(e,a[o],null,t)}function M(e,t,r){var n=e[t];"function"==typeof n&&(R(e,t,n,"__ember_observesBefore__",f._removeBeforeObserver),R(e,t,n,"__ember_observes__",f.removeObserver),R(e,t,n,"__ember_listens__",p.removeListener)),"function"==typeof r&&(R(e,t,r,"__ember_observesBefore__",f._addBeforeObserver),R(e,t,r,"__ember_observes__",f.addObserver),R(e,t,r,"__ember_listens__",p.addListener))}function L(e,t,r){var n,i,a,o={},s={},u=l.meta(e),c=[];e._super=g,O(t,u,o,s,e,c);for(var h=0,d=c.length;d>h;h++)if(n=c[h],"constructor"!==n&&s.hasOwnProperty(n)&&(a=o[n],i=s[n],a!==W)){for(;a&&a instanceof H;){var f=P(e,a,u,o,s);a=f.desc,i=f.value}(void 0!==a||void 0!==i)&&(M(e,n,i),N(e,n,i,u),m.defineProperty(e,n,a,i,u))}return r||T(e,u),e}function D(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];return L(e,r,!1),e}function j(e,t){this.properties=t;var r=e&&e.length;if(r>0){for(var n=new Array(r),i=0;r>i;i++){var a=e[i];a instanceof j?n[i]=a:n[i]=new j(void 0,a)}this.mixins=n}else this.mixins=void 0;this.ownerConstructor=void 0,this._without=void 0,this[u.GUID_KEY]=null,this[u.GUID_KEY+"_name"]=null}function I(e,t,r){var n=u.guidFor(e);if(r[n])return!1;if(r[n]=!0,e===t)return!0;for(var i=e.mixins,a=i?i.length:0;--a>=0;)if(I(i[a],t,r))return!0;return!1}function V(e,t,r){if(!r[u.guidFor(t)])if(r[u.guidFor(t)]=!0,t.properties)for(var n=Object.keys(t.properties),i=0;in;n++)t[n]=arguments[n];var i,a=t.slice(-1)[0],o=function(e){i.push(e)},s=t.slice(0,-1);"function"!=typeof a&&(a=t[0],s=t.slice(1)),i=[];for(var u=0;ue;e++){arguments[e]}return U.apply(this,arguments)}function q(){for(var e=arguments.length,r=Array(e),n=0;e>n;n++)r[n]=arguments[n];var i,a=r.slice(-1)[0],o=function(e){i.push(e)},s=r.slice(0,-1);"function"!=typeof a&&(a=r[0],s=r.slice(1)),i=[];for(var u=0;ui;i++)n[i]=arguments[i];return new e(n,void 0)};var Y=j.prototype;Y.reopen=function(){var e;this.properties?(e=new j(void 0,this.properties),this.properties=void 0,this.mixins=[e]):this.mixins||(this.mixins=[]);var t,r=arguments.length,n=this.mixins;for(t=0;r>t;t++)e=arguments[t],e instanceof j?n.push(e):n.push(new j(void 0,e));return this},Y.apply=function(e){return L(e,[this],!1)},Y.applyPartial=function(e){return L(e,[this],!0)},Y.toString=function(){return"(unknown mixin)"},Y.detect=function(e){if(!e)return!1;if(e instanceof j)return I(e,this,{});var t=l.peekMeta(e);return t?!!t.peekMixins(u.guidFor(this)):!1},Y.without=function(){for(var e=new j([this]),t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];return e._without=r,e},Y.keys=function(){var e={},t={};V(e,this,t);var r=Object.keys(e);return r},j.mixins=function(e){var t=l.peekMeta(e),r=[];return t?(t.forEachMixins(function(e,t){t.properties||r.push(t)}),r):r},e.REQUIRED=W=new m.Descriptor,W.toString=function(){return"(Required Property)"},H.prototype=new m.Descriptor,e.IS_BINDING=Q,e.Mixin=j,e.required=F,e.REQUIRED=W}),e("ember-metal/observer",["exports","ember-metal/watching","ember-metal/events"],function(e,t,r){"use strict";function n(e){return e+h}function i(e){return e+d}function a(e,i,a,o){return r.addListener(e,n(i),a,o),t.watch(e,i),this}function o(e,t){return r.listenersFor(e,n(t))}function s(e,i,a,o){return t.unwatch(e,i),r.removeListener(e,n(i),a,o),this}function u(e,n,a,o){return r.addListener(e,i(n),a,o),t.watch(e,n),this}function l(e,t,i,a,o){return r.suspendListener(e,n(t),i,a,o)}function c(e,t,i,a,o){var s=t.map(n);return r.suspendListeners(e,s,i,a,o)}function m(e,n,a,o){return t.unwatch(e,n),r.removeListener(e,i(n),a,o),this}e.addObserver=a,e.observersFor=o,e.removeObserver=s,e._addBeforeObserver=u,e._suspendObserver=l,e._suspendObservers=c,e._removeBeforeObserver=m;var h=":change",d=":before"}),e("ember-metal/observer_set",["exports","ember-metal/utils","ember-metal/events"],function(e,t,r){"use strict";function n(){this.clear()}e["default"]=n,n.prototype.add=function(e,r,n){var i,a=this.observerSet,o=this.observers,s=t.guidFor(e),u=a[s];return u||(a[s]=u={}),i=u[r],void 0===i&&(i=o.push({sender:e,keyName:r,eventName:n,listeners:[]})-1,u[r]=i),o[i].listeners},n.prototype.flush=function(){var e,t,n,i,a=this.observers;for(this.clear(),e=0,t=a.length;t>e;++e)n=a[e],i=n.sender,i.isDestroying||i.isDestroyed||r.sendEvent(i,n.eventName,[i,n.keyName],n.listeners)},n.prototype.clear=function(){this.observerSet={},this.observers=[]}}),e("ember-metal/path_cache",["exports","ember-metal/cache"],function(e,t){"use strict";function r(e){return m.get(e)}function n(e){return h.get(e)}function i(e){return d.get(e)}function a(e){return-1!==f.get(e)}function o(e){return p.get(e)}function s(e){return v.get(e)}e.isGlobal=r,e.isGlobalPath=n,e.hasThis=i,e.isPath=a,e.getFirstKey=o,e.getTailPath=s;var u=/^[A-Z$]/,l=/^[A-Z$].*[\.]/,c="this.",m=new t["default"](1e3,function(e){return u.test(e)}),h=new t["default"](1e3,function(e){return l.test(e)}),d=new t["default"](1e3,function(e){return 0===e.lastIndexOf(c,0)}),f=new t["default"](1e3,function(e){return e.indexOf(".")}),p=new t["default"](1e3,function(e){var t=f.get(e);return-1===t?e:e.slice(0,t)}),v=new t["default"](1e3,function(e){var t=f.get(e);return-1!==t?e.slice(t+1):void 0}),g={isGlobalCache:m,isGlobalPathCache:h,hasThisCache:d,firstDotIndexCache:f,firstKeyCache:p,tailPathCache:v};e.caches=g}),e("ember-metal/properties",["exports","ember-metal/debug","ember-metal/features","ember-metal/meta","ember-metal/property_events"],function(e,t,r,n,i){"use strict";function a(){this.isDescriptor=!0}function o(e){function t(e){}return t.isMandatorySetter=!0,t}function s(e){return function(){var t=this.__ember_meta__;return t&&t.peekValues(e)}}function u(e){function t(){var t=Object.getPrototypeOf(this);return t&&t[e]}return t.isInheritingGetter=!0,t}function l(e,t,r,o,s){var u,l,c,m;s||(s=n.meta(e));var h=s.peekWatching(t);return u=e[t],l=null!==u&&"object"==typeof u&&u.isDescriptor?u:void 0,c=void 0!==h&&h>0,l&&l.teardown(e,t),r instanceof a?(m=r,e[t]=m,r.setup&&r.setup(e,t)):null==r?(m=o,e[t]=o):(m=r,Object.defineProperty(e,t,r)),c&&i.overrideChains(e,t,s),e.didDefineProperty&&e.didDefineProperty(e,t,m),this}e.Descriptor=a,e.MANDATORY_SETTER_FUNCTION=o,e.DEFAULT_GETTER_FUNCTION=s,e.INHERITING_GETTER_FUNCTION=u,e.defineProperty=l;(function(){var e=Object.create(Object.prototype,{prop:{configurable:!0,value:1}});return Object.defineProperty(e,"prop",{configurable:!0,value:2}),2===e.prop})()}),e("ember-metal/property_events",["exports","ember-metal/utils","ember-metal/meta","ember-metal/events","ember-metal/observer_set","ember-metal/symbol"],function(e,t,r,n,i,a){"use strict";function o(e,t){var n=r.peekMeta(e),i=n&&n.peekWatching(t)>0||"length"===t,a=n&&n.proto,o=e[t],s=null!==o&&"object"==typeof o&&o.isDescriptor?o:void 0;i&&a!==e&&(s&&s.willChange&&s.willChange(e,t),u(e,t,n),m(e,t,n),g(e,t))}function s(e,t){var n=r.peekMeta(e),i=n&&n.peekWatching(t)>0||"length"===t,a=n&&n.proto,o=e[t],s=null!==o&&"object"==typeof o&&o.isDescriptor?o:void 0;a!==e&&(s&&s.didChange&&s.didChange(e,t),e[y]&&e[y](t),(i||"length"===t)&&(n&&n.hasDeps(t)&&l(e,t,n),h(e,t,n,!1),b(e,t)))}function u(e,t,r){if(!e.isDestroying&&r&&r.hasDeps(t)){var n=_,i=!n;i&&(n=_={}),c(o,e,t,n,r),i&&(_=null)}}function l(e,t,r){if(!e.isDestroying&&r&&r.hasDeps(t)){var n=w,i=!n;i&&(n=w={}),c(s,e,t,n,r),i&&(w=null)}}function c(e,r,n,i,a){var o,s,u=t.guidFor(r),l=i[u];l||(l=i[u]={}),l[n]||(l[n]=!0,a.forEachInDeps(n,function(t,n){n&&(o=r[t],s=null!==o&&"object"==typeof o&&o.isDescriptor?o:void 0,s&&s._suspended===r||e(r,t))}))}function m(e,t,r){var n=r.readableChainWatchers();n&&n.notify(t,!1,o)}function h(e,t,r){var n=r.readableChainWatchers();n&&n.notify(t,!0,s)}function d(e,t,r){var n=r.readableChainWatchers();n&&n.revalidate(t)}function f(){k++}function p(){k--,0>=k&&(x.clear(),C.flush())}function v(e,t){f();try{e.call(t)}finally{p.call(t)}}function g(e,t){if(!e.isDestroying){var r,i,a=t+":before";k?(r=x.add(e,t,a),i=n.accumulateListeners(e,a,r),n.sendEvent(e,a,[e,t],i)):n.sendEvent(e,a,[e,t])}}function b(e,t){if(!e.isDestroying){var r,i=t+":change";k?(r=C.add(e,t,i),n.accumulateListeners(e,i,r)):n.sendEvent(e,i,[e,t])}}var y=a["default"]("PROPERTY_DID_CHANGE");e.PROPERTY_DID_CHANGE=y;var _,w,x=new i["default"],C=new i["default"],k=0;e.propertyWillChange=o,e.propertyDidChange=s,e.overrideChains=d,e.beginPropertyChanges=f,e.endPropertyChanges=p,e.changeProperties=v}),e("ember-metal/property_get",["exports","ember-metal/core","ember-metal/debug","ember-metal/error","ember-metal/path_cache"],function(e,t,r,n,i){"use strict";function a(e,t){if(""===t)return e;var r,n=e[t],a=null!==n&&"object"==typeof n&&n.isDescriptor?n:void 0;return void 0===a&&i.isPath(t)?u(e,t):a?a.get(e,t):(r=n,void 0!==r||"object"!=typeof e||t in e||"function"!=typeof e.unknownProperty?r:e.unknownProperty(t))}function o(e,r){var n,o=i.hasThis(r),u=!o&&i.isGlobal(r);return e||u?(o&&(r=r.slice(5)),(!e||u)&&(e=t["default"].lookup),u&&i.isPath(r)&&(n=r.match(c)[0],e=a(e,n),r=r.slice(n.length+1)),s(r),[e,r]):[void 0,""]}function s(e){if(!e||0===e.length)throw new n["default"]("Object in path "+e+" could not be found or was destroyed.")}function u(e,t){var r,n,s,u,l;for(r=i.hasThis(t),(!e||r)&&(s=o(e,t),e=s[0],t=s[1],s.length=0),n=t.split("."),l=n.length,u=0;null!=e&&l>u;u++)if(e=a(e,n[u]),e&&e.isDestroyed)return void 0;return e}function l(e,t,r){var n=a(e,t);return void 0===n?r:n}e.get=a,e.normalizeTuple=o,e._getPath=u,e.getWithDefault=l;var c=/^([^\.]+)/;e["default"]=a}),e("ember-metal/property_set",["exports","ember-metal/debug","ember-metal/features","ember-metal/property_get","ember-metal/property_events","ember-metal/properties","ember-metal/error","ember-metal/path_cache","ember-metal/meta","ember-metal/utils"],function(e,t,r,n,i,a,o,s,u,l){"use strict";function c(e,t,r,n){var a,o,l;e&&(a=u.peekMeta(e),o=e[t],l=null!==o&&"object"==typeof o&&o.isDescriptor?o:void 0);var c,h;if(void 0===l&&s.isPath(t))return m(e,t,r,n);if(l)l.set(e,t,r);else{if(void 0!==r&&"object"==typeof e&&e[t]===r)return r;c="object"==typeof e&&!(t in e),c&&"function"==typeof e.setUnknownProperty?e.setUnknownProperty(t,r):a&&a.peekWatching(t)>0?(a.proto!==e&&(h=e[t]),r!==h&&(i.propertyWillChange(e,t),e[t]=r,i.propertyDidChange(e,t))):(e[t]=r,e[i.PROPERTY_DID_CHANGE]&&e[i.PROPERTY_DID_CHANGE](t))}return r}function m(e,t,r,i){var a;if(a=t.slice(t.lastIndexOf(".")+1),t=t===a?a:t.slice(0,t.length-(a.length+1)),"this"!==t&&(e=n._getPath(e,t)),!a||0===a.length)throw new o["default"]("Property set failed: You passed an empty path");if(!e){if(i)return;throw new o["default"]('Property set failed: object in path "'+t+'" could not be found or was destroyed.')}return c(e,a,r)}function h(e,t,r){return c(e,t,r,!0)}e.set=c,e.trySet=h}),e("ember-metal/replace",["exports"],function(e){"use strict";function t(e,t,r,i){for(var a,o,s=[].concat(i),u=[],l=6e4,c=t,m=r;s.length;)a=m>l?l:m,0>=a&&(a=0),o=s.splice(0,l),o=[c,a].concat(o),c+=l,m-=a,u=u.concat(n.apply(e,o));return u}function r(e,r,n,i){return e.replace?e.replace(r,n,i):t(e,r,n,i)}e._replace=t,e["default"]=r;var n=Array.prototype.splice}),e("ember-metal/run_loop",["exports","ember-metal/core","ember-metal/debug","ember-metal/utils","ember-metal/property_events","backburner"],function(e,t,r,n,i,a){"use strict";function o(e){u.currentRunLoop=e}function s(e,t){u.currentRunLoop=t}function u(){return c.run.apply(c,arguments)}function l(){!u.currentRunLoop}e["default"]=u;var c=new a["default"](["sync","actions","destroy"],{GUID_KEY:n.GUID_KEY,sync:{before:i.beginPropertyChanges,after:i.endPropertyChanges},defaultQueue:"actions",onBegin:o,onEnd:s,onErrorTarget:t["default"],onErrorMethod:"onerror"});u.join=function(){return c.join.apply(c,arguments)},u.bind=function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return function(){for(var e=arguments.length,r=Array(e),n=0;e>n;n++)r[n]=arguments[n];return u.join.apply(u,t.concat(r))}},u.backburner=c,u.currentRunLoop=null,u.queues=c.queueNames,u.begin=function(){c.begin()},u.end=function(){c.end()},u.schedule=function(){l(),c.schedule.apply(c,arguments)},u.hasScheduledTimers=function(){return c.hasTimers()},u.cancelTimers=function(){c.cancelTimers()},u.sync=function(){c.currentInstance&&c.currentInstance.queues.sync.flush()},u.later=function(){return c.later.apply(c,arguments)},u.once=function(){l();for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return t.unshift("actions"),c.scheduleOnce.apply(c,t)},u.scheduleOnce=function(){return l(),c.scheduleOnce.apply(c,arguments)},u.next=function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return t.push(1),c.later.apply(c,t)},u.cancel=function(e){return c.cancel(e)},u.debounce=function(){return c.debounce.apply(c,arguments)},u.throttle=function(){return c.throttle.apply(c,arguments)},u._addQueue=function(e,t){-1===u.queues.indexOf(e)&&u.queues.splice(u.queues.indexOf(t)+1,0,e)}}),e("ember-metal/set_properties",["exports","ember-metal/property_events","ember-metal/property_set"],function(e,t,r){"use strict";function n(e,n){return n&&"object"==typeof n?(t.changeProperties(function(){for(var t,i=Object.keys(n),a=0,o=i.length;o>a;a++)t=i[a],r.set(e,t,n[t])}),n):n}e["default"]=n}),e("ember-metal/streams/dependency",["exports","ember-metal/debug","ember-metal/assign","ember-metal/streams/utils"],function(e,t,r,n){"use strict";function i(e,t){this.next=null,this.prev=null,this.depender=e,this.dependee=t,this.unsubscription=null}r["default"](i.prototype,{subscribe:function(){this.unsubscription=n.subscribe(this.dependee,this.depender.notify,this.depender)},unsubscribe:function(){this.unsubscription&&(this.unsubscription(),this.unsubscription=null)},replace:function(e){return this.dependee!==e?(this.dependee=e,this.unsubscription&&(this.unsubscribe(),this.subscribe()),!0):!1},getValue:function(){return n.read(this.dependee)},setValue:function(e){return n.setValue(this.dependee,e)}}),e["default"]=i}),e("ember-metal/streams/key-stream",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/observer","ember-metal/streams/stream","ember-metal/streams/utils"],function(e,t,r,n,i,a,o){"use strict";function s(e,t){return e.label?e.label+"."+t:t}e["default"]=a["default"].extend({init:function(e,t){var r=s(e,t);this.path=r,this.observedObject=null,this.key=t,this.sourceDep=this.addMutableDependency(e),this.label=r},compute:function(){var e=this.sourceDep.getValue(),t=typeof e;return e&&"boolean"!==t?"object"===t?r.get(e,this.key):e[this.key]:void 0},setValue:function(e){var t=this.sourceDep.getValue();t&&n.set(t,this.key,e)},setSource:function(e){this.sourceDep.replace(e),this.notify()},_super$revalidate:a["default"].prototype.revalidate,revalidate:function(e){this._super$revalidate(e);var t=this.sourceDep.getValue();t!==this.observedObject&&(this._clearObservedObject(),t&&"object"==typeof t&&(i.addObserver(t,this.key,this,this.notify),this.observedObject=t))},_super$deactivate:a["default"].prototype.deactivate,_clearObservedObject:function(){this.observedObject&&(i.removeObserver(this.observedObject,this.key,this,this.notify),this.observedObject=null)},deactivate:function(){this._super$deactivate(),this._clearObservedObject()}})}),e("ember-metal/streams/proxy-stream",["exports","ember-runtime/system/object","ember-metal/streams/stream"],function(e,t,r){"use strict";var n=r["default"].extend({init:function(e,t){this.label=t,this.sourceDep=this.addMutableDependency(e)},compute:function(){return this.sourceDep.getValue()},setValue:function(e){this.sourceDep.setValue(e)},setSource:function(e){var r=this.sourceDep.replace(e);!r&&e instanceof t["default"]||this.notify()}});n.extend=r["default"].extend,e["default"]=n}),e("ember-metal/streams/stream",["exports","ember-metal/assign","ember-metal/debug","ember-metal/path_cache","ember-metal/observer","ember-metal/streams/utils","ember-metal/empty_object","ember-metal/streams/subscriber","ember-metal/streams/dependency","ember-metal/utils","require"],function(e,t,r,n,i,a,o,s,u,l,c){"use strict";function m(e){this._init(e)}function h(e,t,r){return a.isStream(e)?e:new t(e,r)}function d(e){return void 0===e?"(no label)":e}e.wrap=h;var f,p;m.prototype={isStream:!0,_init:function(e){this.label=d(e),this.isActive=!1,this.isDirty=!0,this.isDestroyed=!1,this.cache=void 0,this.children=void 0,this.subscriberHead=null,this.subscriberTail=null,this.dependencyHead=null,this.dependencyTail=null, +this.observedProxy=null,this.__ember_meta__=null,this[l.GUID_KEY]=null},_makeChildStream:function(e){return new(f=f||c["default"]("ember-metal/streams/key-stream")["default"])(this,e)},removeChild:function(e){delete this.children[e]},getKey:function(e){void 0===this.children&&(this.children=new o["default"]);var t=this.children[e];return void 0===t&&(t=this._makeChildStream(e),this.children[e]=t),t},get:function(e){var t=n.getFirstKey(e),r=n.getTailPath(e);void 0===this.children&&(this.children=new o["default"]);var i=this.children[t];return void 0===i&&(i=this._makeChildStream(t,e),this.children[t]=i),void 0===r?i:i.get(r)},value:function(){this.isActive||(this.isDirty=!0);var e=!1;return!this.isActive&&this.subscriberHead&&(this.activate(),e=!0),this.isDirty&&(this.isActive&&(e=!0),this.cache=this.compute(),this.isDirty=!1),e&&this.revalidate(this.cache),this.cache},addMutableDependency:function(e){var t=new u["default"](this,e);if(this.isActive&&t.subscribe(),null===this.dependencyHead)this.dependencyHead=this.dependencyTail=t;else{var r=this.dependencyTail;r.next=t,t.prev=r,this.dependencyTail=t}return t},addDependency:function(e){a.isStream(e)&&this.addMutableDependency(e)},subscribeDependencies:function(){for(var e=this.dependencyHead;e;){var t=e.next;e.subscribe(),e=t}},unsubscribeDependencies:function(){for(var e=this.dependencyHead;e;){var t=e.next;e.unsubscribe(),e=t}},maybeDeactivate:function(){!this.subscriberHead&&this.isActive&&(this.isActive=!1,this.unsubscribeDependencies(),this.deactivate())},activate:function(){this.isActive=!0,this.subscribeDependencies()},revalidate:function(e){e!==this.observedProxy&&(this._clearObservedProxy(),p=p||c["default"]("ember-runtime/mixins/-proxy")["default"],p.detect(e)&&(i.addObserver(e,"content",this,this.notify),this.observedProxy=e))},_clearObservedProxy:function(){this.observedProxy&&(i.removeObserver(this.observedProxy,"content",this,this.notify),this.observedProxy=null)},deactivate:function(){this._clearObservedProxy()},compute:function(){throw new Error("Stream error: compute not implemented")},setValue:function(){throw new Error("Stream error: setValue not implemented")},notify:function(){this.notifyExcept()},notifyExcept:function(e,t){this.isDirty||(this.isDirty=!0,this.notifySubscribers(e,t))},subscribe:function(e,t){var r=new s["default"](e,t,this);if(null===this.subscriberHead)this.subscriberHead=this.subscriberTail=r;else{var n=this.subscriberTail;n.next=r,r.prev=n,this.subscriberTail=r}var i=this;return function(e){r.removeFrom(i),e&&i.prune()}},prune:function(){null===this.subscriberHead&&this.destroy(!0)},unsubscribe:function(e,t){for(var r=this.subscriberHead;r;){var n=r.next;r.callback===e&&r.context===t&&r.removeFrom(this),r=n}},notifySubscribers:function(e,t){for(var r=this.subscriberHead;r;){var n=r.next,i=r.callback,a=r.context;r=n,(i!==e||a!==t)&&(void 0===a?i(this):i.call(a,this))}},destroy:function(e){if(!this.isDestroyed){this.isDestroyed=!0,this.subscriberHead=this.subscriberTail=null,this.maybeDeactivate();var t=this.dependencies;if(t)for(var r=0,n=t.length;n>r;r++)t[r](e);return!0}}},m.extend=function(e){var r=function(){this._init(),this.init.apply(this,arguments)};return r.prototype=Object.create(this.prototype),t["default"](r.prototype,e),r.extend=m.extend,r};var v=m.extend({init:function(e,t){this._compute=e,this.label=t},compute:function(){return this._compute()}});e["default"]=m,e.Stream=v}),e("ember-metal/streams/subscriber",["exports","ember-metal/assign"],function(e,t){"use strict";function r(e,t){this.next=null,this.prev=null,this.callback=e,this.context=t}t["default"](r.prototype,{removeFrom:function(e){var t=this.next,r=this.prev;r?r.next=t:e.subscriberHead=t,t?t.prev=r:e.subscriberTail=r,e.maybeDeactivate()}}),e["default"]=r}),e("ember-metal/streams/utils",["exports","ember-metal/debug","ember-metal/streams/stream"],function(e,t,r){"use strict";function n(e){return e&&e.isStream}function i(e,t,r){return e&&e.isStream?e.subscribe(t,r):void 0}function a(e,t,r){e&&e.isStream&&e.unsubscribe(t,r)}function o(e){return e&&e.isStream?e.value():e}function s(e){for(var t=e.length,r=new Array(t),n=0;t>n;n++)r[n]=o(e[n]);return r}function u(e){var t={};for(var r in e)t[r]=o(e[r]);return t}function l(e){for(var t=e.length,r=!1,i=0;t>i;i++)if(n(e[i])){r=!0;break}return r}function c(e){var t=!1;for(var r in e)if(n(e[r])){t=!0;break}return t}function m(e,t){var r=l(e);if(r){for(var n=new x(e,t),i=0,a=e.length;a>i;i++)g(n,e[i]);return n}return e.join(t)}function h(e){for(var t=[],r=0,n=e.length;n>r;r++){var i=e[r];t.push(f(i))}return t}function d(e){var t=[];for(var r in e)t.push(r+": "+p(e[r]));return t.length?"{ "+t.join(", ")+" }":"{}"}function f(e){if(n(e)){var t=e;return"function"==typeof t.label?t.label():t.label}return p(e)}function p(e){switch(typeof e){case"string":return'"'+e+'"';case"object":return"{ ... }";case"function":return"function() { ... }";default:return String(e)}}function v(e,t){var n=new r.Stream(function(){return e.value()||t.value()},function(){return f(e)+" || "+f(t)});return n.addDependency(e),n.addDependency(t),n}function g(e,t){n(e)&&e.addDependency(t)}function b(e,t,n){for(var i=new r.Stream(function(){var r=s(e);return t?t(r):r},function(){return n+"("+h(e)+")"}),a=0,o=e.length;o>a;a++)i.addDependency(e[a]);return i}function y(e,t,n){var i=new r.Stream(function(){var r=u(e);return t?t(r):r},function(){return n+"("+d(e)+")"});for(var a in e)i.addDependency(e[a]);return i}function _(e,t,i){if(n(e)){var a=new r.Stream(t,function(){return i+"("+f(e)+")"});return a.addDependency(e),a}return t()}function w(e,t){e&&e.isStream&&e.setValue(t)}e.isStream=n,e.subscribe=i,e.unsubscribe=a,e.read=o,e.readArray=s,e.readHash=u,e.scanArray=l,e.scanHash=c,e.concat=m,e.labelsFor=h,e.labelsForObject=d,e.labelFor=f,e.or=v,e.addDependency=g,e.zip=b,e.zipHash=y,e.chain=_,e.setValue=w;var x=r["default"].extend({init:function(e,t){this.array=e,this.separator=t,this.isConcat=!0},label:function(){var e=h(this.array);return"concat(["+e.join(", ")+"]; separator="+p(this.separator)+")"},compute:function(){return m(s(this.array),this.separator)}})}),e("ember-metal/symbol",["exports","ember-metal/utils"],function(e,t){"use strict";function r(e){return t.intern(e+" [id="+t.GUID_KEY+Math.floor(Math.random()*new Date)+"]")}e["default"]=r}),e("ember-metal/utils",["exports"],function(e){"no use strict";function t(){return++v}function r(e){var t={};t[e]=1;for(var r in t)if(r===e)return r;return e}function n(e,r){r||(r=g);var n=r+t();return e&&(null===e[_]?e[_]=n:(w.value=n,e.__defineNonEnumerable?e.__defineNonEnumerable(C):Object.defineProperty(e,_,w))),n}function i(e){if(e&&e[_])return e[_];if(void 0===e)return"(undefined)";if(null===e)return"(null)";var r,n=typeof e;switch(n){case"number":return r=b[e],r||(r=b[e]="nu"+e),r;case"string":return r=y[e],r||(r=y[e]="st"+t()),r;case"boolean":return e?"(true)":"(false)";default:return e===Object?"(Object)":e===Array?"(Array)":(r=g+t(),null===e[_]?e[_]=r:(w.value=r,e.__defineNonEnumerable?e.__defineNonEnumerable(C):Object.defineProperty(e,_,w)),r)}}function a(){}function o(e){return void 0===e.__hasSuper&&(e.__hasSuper=E(e)),e.__hasSuper}function s(e,t){return o(e)?!t.wrappedFunction&&o(t)?u(e,u(t,a)):u(e,t):e}function u(e,t){function r(){var r=this._super,n=arguments.length,i=void 0;switch(this._super=t,n){case 0:i=e.call(this);break;case 1:i=e.call(this,arguments[0]);break;case 2:i=e.call(this,arguments[0],arguments[1]);break;case 3:i=e.call(this,arguments[0],arguments[1],arguments[2]);break;case 4:i=e.call(this,arguments[0],arguments[1],arguments[2],arguments[3]);break;case 5:i=e.call(this,arguments[0],arguments[1],arguments[2],arguments[3],arguments[4]);break;default:for(var a=new Array(n),o=0;n>o;o++)a[o]=arguments[o];i=e.apply(this,a)}return this._super=r,i}return r.wrappedFunction=e,r.__ember_observes__=e.__ember_observes__,r.__ember_observesBefore__=e.__ember_observesBefore__,r.__ember_listens__=e.__ember_listens__,r}function l(e,t){return!(!e||"function"!=typeof e[t])}function c(e,t,r){return l(e,t)?r?f(e,t,r):f(e,t):void 0}function m(e){return null===e||void 0===e?[]:Array.isArray(e)?e:[e]}function h(e){if(null===e)return"null";if(void 0===e)return"undefined";if(Array.isArray(e))return"["+e+"]";var t=typeof e;if("object"!==t&&"symbol"!==t)return""+e;if("function"==typeof e.toString&&e.toString!==O)return e.toString();var r,n=[];for(var i in e)if(e.hasOwnProperty(i)){if(r=e[i],"toString"===r)continue;"function"==typeof r&&(r="function() { ... }"),r&&"function"!=typeof r.toString?n.push(i+": "+O.call(r)):n.push(i+": "+r)}return"{"+n.join(", ")+"}"}function d(e,t,r){var n=r&&r.length;if(!r||!n)return t.call(e);switch(n){case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2]);case 4:return t.call(e,r[0],r[1],r[2],r[3]);case 5:return t.call(e,r[0],r[1],r[2],r[3],r[4]);default:return t.apply(e,r)}}function f(e,t,r){var n=r&&r.length;if(!r||!n)return e[t]();switch(n){case 1:return e[t](r[0]);case 2:return e[t](r[0],r[1]);case 3:return e[t](r[0],r[1],r[2]);case 4:return e[t](r[0],r[1],r[2],r[3]);case 5:return e[t](r[0],r[1],r[2],r[3],r[4]);default:return e[t].apply(e,r)}}function p(e,t){for(var r=e;r;){var n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Object.getPrototypeOf(r)}return null}e.uuid=t,e.intern=r,e.generateGuid=n,e.guidFor=i,e.wrap=s,e.tryInvoke=c,e.makeArray=m,e.inspect=h,e.apply=d,e.applyStr=f,e.lookupDescriptor=p;var v=0,g="ember",b=[],y={},_=r("__ember"+ +new Date),w={writable:!0,configurable:!0,enumerable:!1,value:null};e.GUID_DESC=w;var x={configurable:!0,writable:!0,enumerable:!1,value:null},C={name:_,descriptor:x};e.GUID_KEY_PROPERTY=C;var k=/\.(_super|call\(this|apply\(this)/,E=function(){var e=function(){return this}.toString().indexOf("return this")>-1;return e?function(e){return k.test(e.toString())}:function(){return!0}}();e.checkHasSuper=E,a.__hasSuper=!1;var O=Object.prototype.toString;e.GUID_KEY=_,e.makeArray=m,e.canInvoke=l}),e("ember-metal/watch_key",["exports","ember-metal/features","ember-metal/meta","ember-metal/properties","ember-metal/utils"],function(e,t,r,n,i){"use strict";function a(e,t,n){if("length"!==t||!Array.isArray(e)){var i=n||r.meta(e);if(i.peekWatching(t))i.writeWatching(t,(i.peekWatching(t)||0)+1);else{i.writeWatching(t,1);var a=e[t],o=null!==a&&"object"==typeof a&&a.isDescriptor?a:void 0;o&&o.willWatch&&o.willWatch(e,t),"function"==typeof e.willWatchProperty&&e.willWatchProperty(t)}}}function o(e,t,n){var i=n||r.meta(e),a=i.peekWatching(t);if(1===a){i.writeWatching(t,0);var o=e[t],s=null!==o&&"object"==typeof o&&o.isDescriptor?o:void 0;s&&s.didUnwatch&&s.didUnwatch(e,t),"function"==typeof e.didUnwatchProperty&&e.didUnwatchProperty(t)}else a>1&&i.writeWatching(t,a-1)}e.watchKey=a,e.unwatchKey=o}),e("ember-metal/watch_path",["exports","ember-metal/meta","ember-metal/chains"],function(e,t,r){"use strict";function n(e,r){return(r||t.meta(e)).writableChains(i)}function i(e){return new r.ChainNode(null,null,e)}function a(e,r,i){if("length"!==r||!Array.isArray(e)){var a=i||t.meta(e),o=a.peekWatching(r)||0;o?a.writeWatching(r,o+1):(a.writeWatching(r,1),n(e,a).add(r))}}function o(e,r,i){var a=i||t.meta(e),o=a.peekWatching(r)||0;1===o?(a.writeWatching(r,0),n(e,a).remove(r)):o>1&&a.writeWatching(r,o-1)}e.watchPath=a,e.unwatchPath=o}),e("ember-metal/watching",["exports","ember-metal/chains","ember-metal/watch_key","ember-metal/watch_path","ember-metal/path_cache","ember-metal/meta"],function(e,t,r,n,i,a){"use strict";function o(e,t,a){"length"===t&&Array.isArray(e)||(i.isPath(t)?n.watchPath(e,t,a):r.watchKey(e,t,a))}function s(e,t){var r=a.peekMeta(e);return(r&&r.peekWatching(t))>0}function u(e,t){var r=a.peekMeta(e);return r&&r.peekWatching(t)||0}function l(e,t,a){"length"===t&&Array.isArray(e)||(i.isPath(t)?n.unwatchPath(e,t,a):r.unwatchKey(e,t,a))}function c(e){var r,n,i,o,s=a.peekMeta(e);if(s&&(a.deleteMeta(e),r=s.readableChains()))for(m.push(r);m.length>0;){if(r=m.pop(),n=r._chains)for(i in n)void 0!==n[i]&&m.push(n[i]);r._watching&&(o=r._object,o&&t.removeChainWatcher(o,r._key,r))}}e.isWatching=s,e.watcherCount=u,e.unwatch=l,e.destroy=c,e.watch=o,o.flushPending=t.flushPendingChains;var m=[]}),e("ember-metal/weak_map",["exports","ember-metal/debug","ember-metal/utils","ember-metal/meta"],function(e,t,r,n){"use strict";function i(){}function a(){this._id=r.GUID_KEY+o++}e["default"]=a;var o=0;a.prototype.get=function(e){var t=n.peekMeta(e);if(t){var r=t.readableWeak();if(r)return r[this._id]===i?void 0:r[this._id]}},a.prototype.set=function(e,t){return void 0===t&&(t=i),n.meta(e).writableWeak()[this._id]=t,this},a.prototype.has=function(e){var t=n.peekMeta(e);if(t){var r=t.readableWeak();if(r)return void 0!==r[this._id]}return!1},a.prototype["delete"]=function(e){return this.has(e)?(delete n.meta(e).writableWeak()[this._id],!0):!1}}),e("ember-metal-views/index",["exports","ember-metal-views/renderer"],function(e,t){"use strict";e.Renderer=t["default"]}),e("ember-metal-views/renderer",["exports","ember-metal/run_loop","ember-metal/property_get","ember-metal/property_set","ember-metal/assign","ember-metal/set_properties","ember-views/system/build-component-template","ember-metal/environment"],function(e,t,r,n,i,a,o,s){"use strict";function u(e,t){this._dom=e,this._destinedForDOM=void 0===t?s["default"].hasDOM:t}function l(){this.morphs=[]}e.MorphSet=l,u.prototype.prerenderTopLevelView=function(e,t){if("inDOM"===e._state)throw new Error("You cannot insert a View that has already been rendered");e.ownerView=t.emberView=e,e._renderNode=t;var n=r.get(e,"layout"),i=r.get(e,"template"),a={component:e,layout:n},s=o["default"](a,{},{self:e,templates:i?{"default":i.raw}:void 0}).block;e.renderBlock(s,t),e.lastResult=t.lastResult,this.clearRenderedViews(e.env)},u.prototype.renderTopLevelView=function(e,t){e._willInsert&&(e._willInsert=!1,this.prerenderTopLevelView(e,t),this.dispatchLifecycleHooks(e.env))},u.prototype.revalidateTopLevelView=function(e){e._renderNode.lastResult&&(e._renderNode.lastResult.revalidate(e.env),"inDOM"===e._state&&this.dispatchLifecycleHooks(e.env),this.clearRenderedViews(e.env))},u.prototype.dispatchLifecycleHooks=function(e){var t,r,n=e.view,i=e.lifecycleHooks;for(t=0;tt;t++)e[t].seen=!1;this.morphs=[]},u.prototype.clearRenderedViews=function(e){e.renderedNodes.clear(),e.renderedViews.length=0},u.prototype.appendTo=function(e,r){var n=this._dom.appendMorph(r);n.ownerNode=n,e._willInsert=!0,t["default"].schedule("render",this,this.renderTopLevelView,e,n)},u.prototype.replaceIn=function(e,r){var n=this._dom.replaceContentWithMorph(r);n.ownerNode=n,e._willInsert=!0,t["default"].scheduleOnce("render",this,this.renderTopLevelView,e,n)},u.prototype.createElement=function(e){var t=this._dom.createFragmentMorph();t.ownerNode=t,this.prerenderTopLevelView(e,t)},u.prototype.didCreateElement=function(e,t){t&&(e.element=t),e._transitionTo&&e._transitionTo("hasElement")},u.prototype.willInsertElement=function(e){e.trigger&&e.trigger("willInsertElement")},u.prototype.setAttrs=function(e,t){n.set(e,"attrs",t)},u.prototype.componentInitAttrs=function(e,t){e.trigger("didInitAttrs",{attrs:t}),e.trigger("didReceiveAttrs",{newAttrs:t})},u.prototype.didInsertElement=function(e){e._transitionTo&&e._transitionTo("inDOM"),e.trigger&&e.trigger("didInsertElement")},u.prototype.didUpdate=function(e){e.trigger&&e.trigger("didUpdate")},u.prototype.didRender=function(e){e.trigger&&e.trigger("didRender")},u.prototype.updateAttrs=function(e,t){this.setAttrs(e,t)},u.prototype.componentUpdateAttrs=function(e,t){var r=null;e.attrs?(r=i["default"]({},e.attrs),a["default"](e.attrs,t)):n.set(e,"attrs",t),e.trigger("didUpdateAttrs",{oldAttrs:r,newAttrs:t}),e.trigger("didReceiveAttrs",{oldAttrs:r,newAttrs:t})},u.prototype.willUpdate=function(e,t){e._willUpdate&&e._willUpdate(t)},u.prototype.componentWillUpdate=function(e){e.trigger("willUpdate")},u.prototype.willRender=function(e){e._willRender&&e._willRender()},u.prototype.componentWillRender=function(e){e.trigger("willRender")},u.prototype.remove=function(e,r){this.willDestroyElement(e),e._willRemoveElement=!0,t["default"].schedule("render",this,this.renderElementRemoval,e)},u.prototype.renderElementRemoval=function(e){e._willRemoveElement&&(e._willRemoveElement=!1,e._renderNode&&e.element&&e.element.parentNode&&e._renderNode.clear(),this.didDestroyElement(e))},u.prototype.willRemoveElement=function(){},u.prototype.willDestroyElement=function(e){e._willDestroyElement&&e._willDestroyElement(),e.trigger&&(e.trigger("willDestroyElement"),e.trigger("willClearRender")),e._transitionTo&&e._transitionTo("destroying")},u.prototype.didDestroyElement=function(e){e.element=null,"destroying"!==e._state&&e._transitionTo&&e._transitionTo("preRender"),e.trigger&&e.trigger("didDestroyElement")},e["default"]=u}),e("ember-routing/ext/controller",["exports","ember-metal/property_get","ember-runtime/mixins/controller"],function(e,t,r){"use strict";r["default"].reopen({concatenatedProperties:["queryParams"],queryParams:null,_qpDelegate:null,_qpChanged:function(e,r){var n=r.substr(0,r.length-3),i=e._qpDelegate,a=t.get(e,n);i(n,a)},transitionToRoute:function(){var e=t.get(this,"target"),r=e.transitionToRoute||e.transitionTo;return r.apply(e,arguments)},replaceRoute:function(){var e=t.get(this,"target"),r=e.replaceRoute||e.replaceWith;return r.apply(e,arguments)}}),e["default"]=r["default"]}),e("ember-routing/ext/run_loop",["exports","ember-metal/run_loop"],function(e,t){"use strict";t["default"]._addQueue("routerTransitions","actions")}),e("ember-routing/index",["exports","ember-metal/core","ember-routing/ext/run_loop","ember-routing/ext/controller","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/generate_controller","ember-routing/system/controller_for","ember-routing/system/dsl","ember-routing/system/router","ember-routing/system/route"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d){"use strict";t["default"].Location=i["default"],t["default"].AutoLocation=u["default"],t["default"].HashLocation=o["default"],t["default"].HistoryLocation=s["default"],t["default"].NoneLocation=a["default"],t["default"].controllerFor=c["default"],t["default"].generateControllerFactory=l.generateControllerFactory,t["default"].generateController=l["default"],t["default"].RouterDSL=m["default"],t["default"].Router=h["default"],t["default"].Route=d["default"],e["default"]=t["default"]}),e("ember-routing/location/api",["exports","ember-metal/debug","ember-metal/environment","ember-routing/location/util"],function(e,t,r,n){"use strict";e["default"]={create:function(e){var t=e&&e.implementation,r=this.implementations[t];return r.create.apply(r,arguments)},implementations:{},_location:r["default"].location,_getHash:function(){return n.getHash(this.location)}}}),e("ember-routing/location/auto_location",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","container/owner","ember-runtime/system/object","ember-metal/environment","ember-routing/location/util"],function(e,t,r,n,i,a,o,s,u){"use strict";function l(e){return function(){for(var t=r.get(this,"concreteImplementation"),n=arguments.length,a=Array(n),o=0;n>o;o++)a[o]=arguments[o];return i.tryInvoke(t,e,a)}}function c(e){var t=e.location,r=e.userAgent,n=e.history,i=e.documentMode,a=e.global,o=e.rootURL,s="none",l=!1,c=u.getFullPath(t);if(u.supportsHistory(r,n)){var d=m(o,t);if(c===d)return"history";"/#"===c.substr(0,2)?(n.replaceState({path:d},null,d),s="history"):(l=!0,u.replacePath(t,d))}else if(u.supportsHashChange(i,a)){var f=h(o,t);c===f||"/"===c&&"/#/"===f?s="hash":(l=!0,u.replacePath(t,f))}return l?!1:s}function m(e,t){var r,n,i=u.getPath(t),a=u.getHash(t),o=u.getQuery(t);i.indexOf(e);return"#/"===a.substr(0,2)?(n=a.substr(1).split("#"),r=n.shift(),"/"===i.slice(-1)&&(r=r.substr(1)),i=i+r+o,n.length&&(i+="#"+n.join("#"))):i=i+o+a,i}function h(e,t){var r=e,n=m(e,t),i=n.substr(e.length);return""!==i&&("/"!==i.charAt(0)&&(i="/"+i),r+="#"+i),r}e.getHistoryPath=m,e.getHashPath=h,e["default"]=o["default"].extend({location:s["default"].location,history:s["default"].history,global:s["default"].global,userAgent:s["default"].userAgent,cancelRouterSetup:!1,rootURL:"/",detect:function(){var e=this.rootURL,t=c({location:this.location,history:this.history,userAgent:this.userAgent,rootURL:e,documentMode:this.documentMode,global:this.global});t===!1&&(n.set(this,"cancelRouterSetup",!0),t="none");var r=a.getOwner(this).lookup("location:"+t);n.set(r,"rootURL",e),n.set(this,"concreteImplementation",r)},initState:l("initState"),getURL:l("getURL"),setURL:l("setURL"),replaceURL:l("replaceURL"),onUpdateURL:l("onUpdateURL"),formatURL:l("formatURL"),willDestroy:function(){var e=r.get(this,"concreteImplementation");e&&e.destroy()}})}),e("ember-routing/location/hash_location",["exports","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"],function(e,t,r,n,i,a,o,s){"use strict";e["default"]=a["default"].extend({implementation:"hash",init:function(){r.set(this,"location",t.get(this,"_location")||window.location)},getHash:o["default"]._getHash,getURL:function(){var e=this.getHash().substr(1),t=e;return"/"!==t.charAt(0)&&(t="/",e&&(t+="#"+e)),t},setURL:function(e){t.get(this,"location").hash=e,r.set(this,"lastSetURL",e)},replaceURL:function(e){t.get(this,"location").replace("#"+e),r.set(this,"lastSetURL",e)},onUpdateURL:function(e){var a=this,o=i.guidFor(this);s["default"](window).on("hashchange.ember-location-"+o,function(){n["default"](function(){var n=a.getURL();t.get(a,"lastSetURL")!==n&&(r.set(a,"lastSetURL",null),e(n))})})},formatURL:function(e){return"#"+e},willDestroy:function(){var e=i.guidFor(this);s["default"](window).off("hashchange.ember-location-"+e)}})}),e("ember-routing/location/history_location",["exports","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-runtime/system/object","ember-routing/location/api","ember-views/system/jquery"],function(e,t,r,n,i,a,o){"use strict";var s=!1;e["default"]=i["default"].extend({implementation:"history",init:function(){r.set(this,"location",t.get(this,"location")||window.location),r.set(this,"baseURL",o["default"]("base").attr("href")||"")},initState:function(){var e=t.get(this,"history")||window.history;r.set(this,"history",e),e&&"state"in e&&(this.supportsHistory=!0),this.replaceState(this.formatURL(this.getURL()))},rootURL:"/",getURL:function(){var e=t.get(this,"rootURL"),r=t.get(this,"location"),n=r.pathname,i=t.get(this,"baseURL");e=e.replace(/\/$/,""),i=i.replace(/\/$/,"");var a=n.replace(i,"").replace(e,""),o=r.search||"";return a+=o,a+=this.getHash()},setURL:function(e){var t=this.getState();e=this.formatURL(e),t&&t.path===e||this.pushState(e)},replaceURL:function(e){var t=this.getState();e=this.formatURL(e),t&&t.path===e||this.replaceState(e)},getState:function(){return this.supportsHistory?t.get(this,"history").state:this._historyState},pushState:function(e){var r={path:e};t.get(this,"history").pushState(r,null,e),this._historyState=r,this._previousURL=this.getURL()},replaceState:function(e){var r={path:e};t.get(this,"history").replaceState(r,null,e),this._historyState=r,this._previousURL=this.getURL()},onUpdateURL:function(e){var t=this,r=n.guidFor(this);o["default"](window).on("popstate.ember-location-"+r,function(r){(s||(s=!0,t.getURL()!==t._previousURL))&&e(t.getURL())})},formatURL:function(e){var r=t.get(this,"rootURL"),n=t.get(this,"baseURL");return""!==e?(r=r.replace(/\/$/,""),n=n.replace(/\/$/,"")):n.match(/^\//)&&r.match(/^\//)&&(n=n.replace(/\/$/,"")),n+r+e},willDestroy:function(){var e=n.guidFor(this);o["default"](window).off("popstate.ember-location-"+e)},getHash:a["default"]._getHash})}),e("ember-routing/location/none_location",["exports","ember-metal/property_get","ember-metal/property_set","ember-runtime/system/object"],function(e,t,r,n){"use strict";e["default"]=n["default"].extend({implementation:"none",path:"",getURL:function(){return t.get(this,"path")},setURL:function(e){r.set(this,"path",e)},onUpdateURL:function(e){this.updateCallback=e},handleURL:function(e){r.set(this,"path",e),this.updateCallback(e)},formatURL:function(e){return e}})}),e("ember-routing/location/util",["exports"],function(e){"use strict";function t(e){var t=e.pathname;return"/"!==t.charAt(0)&&(t="/"+t),t}function r(e){return e.search}function n(e){var t=e.href,r=t.indexOf("#");return-1===r?"":t.substr(r)}function i(e){return t(e)+r(e)+n(e)}function a(e){var t=e.origin;return t||(t=e.protocol+"//"+e.hostname,e.port&&(t+=":"+e.port)),t}function o(e,t){return"onhashchange"in t&&(void 0===e||e>7)}function s(e,t){return-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone")?!!(t&&"pushState"in t):!1}function u(e,t){e.replace(a(e)+t)}e.getPath=t,e.getQuery=r,e.getHash=n,e.getFullPath=i,e.getOrigin=a,e.supportsHashChange=o,e.supportsHistory=s,e.replacePath=u}),e("ember-routing/services/routing",["exports","ember-runtime/system/service","ember-metal/property_get","ember-metal/computed_macros","ember-routing/utils","ember-metal/assign"],function(e,t,r,n,i,a){"use strict";function o(e,t){for(var r=0,n=0,i=t.length;i>n&&(r+=t[n].names.length,t[n].handler!==e);n++);return r}e["default"]=t["default"].extend({router:null,targetState:n.readOnly("router.targetState"),currentState:n.readOnly("router.currentState"),currentRouteName:n.readOnly("router.currentRouteName"),currentPath:n.readOnly("router.currentPath"),availableRoutes:function(){return Object.keys(r.get(this,"router").router.recognizer.names)},hasRoute:function(e){return r.get(this,"router").hasRoute(e)},transitionTo:function(e,t,n,i){var a=r.get(this,"router"),o=a._doTransition(e,t,n);i&&o.method("replace")},normalizeQueryParams:function(e,t,n){var i=r.get(this,"router");i._prepareQueryParams(e,t,n)},generateURL:function(e,t,n){var o=r.get(this,"router");if(o.router){var s={};a["default"](s,n),this.normalizeQueryParams(e,t,s);var u=i.routeArgs(e,t,s);return o.generate.apply(o,u)}},isActiveForRoute:function(e,t,n,i,a){var s=r.get(this,"router"),u=s.router.recognizer.handlersFor(n),l=u[u.length-1].handler,c=o(n,u);return e.length>c&&(n=l),i.isActiveIntent(n,e,t,!a)}})}),e("ember-routing/system/cache",["exports","ember-runtime/system/object"],function(e,t){"use strict";e["default"]=t["default"].extend({init:function(){this.cache={}},has:function(e){return e in this.cache},stash:function(e,t,r){var n=this.cache[e];n||(n=this.cache[e]={}),n[t]=r},lookup:function(e,t,r){var n=this.cache;if(!(e in n))return r;var i=n[e];return t in i?i[t]:r},cache:null})}),e("ember-routing/system/controller_for",["exports"],function(e){"use strict";function t(e,t,r){return e.lookup("controller:"+t,r)}e["default"]=t}),e("ember-routing/system/dsl",["exports","ember-metal/debug"],function(e,t){"use strict";function r(e,t){this.parent=e,this.enableLoadingSubstates=t&&t.enableLoadingSubstates,this.matches=[],this.explicitIndex=void 0,this.options=t}function n(e){return e.parent&&"application"!==e.parent}function i(e,t,r){return n(e)&&r!==!0?e.parent+"."+t:t}function a(e,t,r,n){r=r||{};var a=i(e,t,r.resetNamespace);"string"!=typeof r.path&&(r.path="/"+t),e.push(r.path,a,n)}e["default"]=r,r.prototype={route:function(e,t,n){var o="/_unused_dummy_error_path_route_"+e+"/:error";if(2===arguments.length&&"function"==typeof t&&(n=t,t={}),1===arguments.length&&(t={}),this.enableLoadingSubstates&&(a(this,e+"_loading",{resetNamespace:t.resetNamespace}),a(this,e+"_error",{path:o})),n){var s=i(this,e,t.resetNamespace),u=new r(s,this.options);a(u,"loading"),a(u,"error",{path:o}),n.call(u),a(this,e,t,u.generate())}else a(this,e,t)},push:function(e,t,r){var n=t.split(".");(""===e||"/"===e||"index"===n[n.length-1])&&(this.explicitIndex=!0),this.matches.push([e,t,r])},resource:function(e,t,r){2===arguments.length&&"function"==typeof t&&(r=t,t={}),1===arguments.length&&(t={}),t.resetNamespace=!0,this.route(e,t,r)},generate:function(){var e=this.matches;return this.explicitIndex||this.route("index",{path:"/"}),function(t){for(var r=0,n=e.length;n>r;r++){var i=e[r];t(i[0]).to(i[1],i[2])}}}},r.map=function(e){var t=new r;return e.call(t),t}}),e("ember-routing/system/generate_controller",["exports","ember-metal/debug","ember-metal/property_get"],function(e,t,r){"use strict";function n(e,t,r){var n,i;return n=e._lookupFactory("controller:basic").extend({isGenerated:!0,toString:function(){return"(generated "+t+" controller)"}}),i="controller:"+t,e.register(i,n),n}function i(e,t,i){n(e,t,i);var a="controller:"+t,o=e.lookup(a);return r.get(o,"namespace.LOG_ACTIVE_GENERATION"),o}e.generateControllerFactory=n,e["default"]=i}),e("ember-routing/system/query_params",["exports","ember-runtime/system/object"],function(e,t){"use strict";e["default"]=t["default"].extend({isQueryParams:!0,values:null})}),e("ember-routing/system/route",["exports","ember-metal/core","ember-metal/debug","ember-metal/features","ember-metal/error","ember-metal/property_get","ember-metal/property_set","ember-metal/get_properties","ember-metal/is_none","ember-metal/computed","ember-metal/assign","ember-runtime/utils","ember-metal/run_loop","ember-runtime/copy","ember-runtime/system/string","ember-runtime/system/object","ember-runtime/system/native_array","ember-runtime/mixins/evented","ember-runtime/mixins/action_handler","ember-routing/system/generate_controller","ember-routing/utils","container/owner","ember-metal/is_empty"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b,y,_,w,x){"use strict";function C(){return this}function k(e){var t=E(e,e.router.router.state.handlerInfos,-1);return t&&t.handler}function E(e,t,r){if(t)for(var n,i=r||0,a=0,o=t.length;o>a;a++)if(n=t[a].handler,n===e)return t[a+i]}function O(e,t,r,n,o){var s,u,l,c,m=o&&o.controller,h=a.get(e.router,"namespace.LOG_VIEW_LOOKUPS"),d=o&&o.into&&o.into.replace(/\//g,"."),f=o&&o.outlet||"main",p=w.getOwner(e);if(n?(n=n.replace(/\//g,"."),s=n):(n=e.routeName,s=e.templateName||n),m||(m=t?p.lookup("controller:"+n)||e.controllerName||e.routeName:e.controllerName||p.lookup("controller:"+n)),"string"==typeof m){var v=m;if(m=p.lookup("controller:"+v),!m)throw new i["default"]("You passed `controller: '"+v+"'` into the `render` method, but no such controller could be found.")}if(o&&-1!==Object.keys(o).indexOf("outlet")&&"undefined"==typeof o.outlet)throw new i["default"]("You passed undefined as the outlet name.");o&&o.model&&m.set("model",o.model),u=o&&o.view||t&&n||e.viewName||n,l=p._lookupFactory("view:"+u),c=p.lookup("template:"+s);var g;d&&(g=k(e))&&d===k(e).routeName&&(d=void 0);var b={owner:p,into:d,outlet:f,name:n,controller:m,ViewClass:l,template:c},y=void 0;if(!l&&!c&&!y&&h);return b}function N(e,t){if(t.fullQueryParams)return t.fullQueryParams;t.fullQueryParams={},c["default"](t.fullQueryParams,t.queryParams);var r=t.handlerInfos[t.handlerInfos.length-1].name;return e._deserializeQueryParams(r,t.fullQueryParams),t.fullQueryParams}function A(e,t){t.queryParamsFor=t.queryParamsFor||{};var r=e.routeName;if(t.queryParamsFor[r])return t.queryParamsFor[r]; +for(var n=N(e.router,t),i=t.queryParamsFor[r]={},o=a.get(e,"_qp"),s=o.qps,u=0,l=s.length;l>u;++u){var c=s[u],m=c.prop in n;i[c.prop]=m?n[c.prop]:S(c.defaultValue)}return i}function S(e){return Array.isArray(e)?v.A(e.slice()):e}function T(e,t){var r,n={};r={defaultValue:!0,type:!0,scope:!0,as:!0};for(var i in e)if(e.hasOwnProperty(i)){var a={};c["default"](a,e[i]),c["default"](a,t[i]),n[i]=a,r[i]=!0}for(var o in t)if(t.hasOwnProperty(o)&&!r[o]){var s={};c["default"](s,t[o],e[o]),n[o]=s}return n}function P(e,t){t.forEach(function(t){e.addObserver(t+".[]",e,e._qpChanged)})}var R=Array.prototype.slice,M=p["default"].extend(b["default"],g["default"],{queryParams:{},_qp:l.computed(function(){var e,t,r=this,n=this.controllerName||this.routeName,i=w.getOwner(this)._lookupFactory("controller:"+n),o=a.get(this,"queryParams"),s=!!Object.keys(o).length;if(i){e=i.proto();var u=a.get(e,"queryParams"),l=_.normalizeControllerQueryParams(u);t=T(l,o)}else if(s){var c=y.generateControllerFactory(w.getOwner(this),n);e=c.proto(),t=o}var h=[],d={},f=[];for(var p in t)if(t.hasOwnProperty(p)&&"unknownProperty"!==p&&"_super"!==p){var g,b=t[p],x=b.scope||"model";"controller"===x&&(g=[]);var C=b.as||this.serializeQueryParamKey(p),k=a.get(e,p);Array.isArray(k)&&(k=v.A(k.slice()));var E=b.type||m.typeOf(k),O=this.serializeQueryParam(k,C,E),N=n+":"+p,A={undecoratedDefaultValue:a.get(e,p),defaultValue:k,serializedDefaultValue:O,serializedValue:O,type:E,urlKey:C,prop:p,scopedPropertyName:N,ctrl:n,route:this,parts:g,values:null,scope:x,prefix:""};d[p]=d[C]=d[N]=A,h.push(A),f.push(p)}return{qps:h,map:d,propertyNames:f,states:{inactive:function(e,t){var n=d[e];r._qpChanged(e,t,n)},active:function(e,t){var n=d[e];return r._qpChanged(e,t,n),r._activeQPChanged(d[e],t)},allowOverrides:function(e,t){var n=d[e];return r._qpChanged(e,t,n),r._updatingQPChanged(d[e])}}}}),_names:null,_stashNames:function(e,t){var r=e;if(!this._names){var n=this._names=r._names;n.length||(r=t,n=r&&r._names||[]);for(var i=a.get(this,"_qp.qps"),o=i.length,s=new Array(n.length),u=0,l=n.length;l>u;++u)s[u]=r.name+"."+n[u];for(var c=0;o>c;++c){var m=i[c];"model"===m.scope&&(m.parts=s),m.prefix=m.ctrl}}},_activeQPChanged:function(e,t){var r=this.router;r._activeQPChanged(e.scopedPropertyName,t)},_updatingQPChanged:function(e){var t=this.router;t._updatingQPChanged(e.urlKey)},mergedProperties:["queryParams"],paramsFor:function(e){var t=w.getOwner(this).lookup("route:"+e);if(!t)return{};var r=this.router.router.activeTransition,n=r?r.state:this.router.router.state,i={};return c["default"](i,n.params[e]),c["default"](i,A(t,n)),i},serializeQueryParamKey:function(e){return e},serializeQueryParam:function(e,t,r){return"array"===r?JSON.stringify(e):""+e},deserializeQueryParam:function(e,t,r){return"boolean"===r?"true"===e?!0:!1:"number"===r?Number(e).valueOf():"array"===r?v.A(JSON.parse(e)):e},_optionsForQueryParam:function(e){return a.get(this,"queryParams."+e.urlKey)||a.get(this,"queryParams."+e.prop)||{}},resetController:C,exit:function(){this.deactivate(),this.trigger("deactivate"),this.teardownViews()},_reset:function(e,t){var r=this.controller;r._qpDelegate=a.get(this,"_qp.states.inactive"),this.resetController(r,e,t)},enter:function(){this.connections=[],this.activate(),this.trigger("activate")},viewName:null,templateName:null,controllerName:null,actions:{queryParamsDidChange:function(e,t,r){for(var n=a.get(this,"_qp").map,i=Object.keys(e).concat(Object.keys(r)),o=0,s=i.length;s>o;++o){var u=n[i[o]];u&&a.get(this._optionsForQueryParam(u),"refreshModel")&&this.refresh()}return!0},finalizeQueryParamChange:function(e,t,r){if("application"!==this.routeName)return!0;if(r){var n,i=r.state.handlerInfos,s=this.router,u=s._queryParamsFor(i[i.length-1].name),l=s._qpUpdates;_.stashParamNames(s,i);for(var c=0,m=u.qps.length;m>c;++c){var h,d,f=u.qps[c],p=f.route,v=p.controller,g=f.urlKey in e&&f.urlKey;l&&f.urlKey in l?(h=a.get(v,f.prop),d=p.serializeQueryParam(h,f.urlKey,f.type)):g?(d=e[g],h=p.deserializeQueryParam(d,f.urlKey,f.type)):(d=f.serializedDefaultValue,h=S(f.defaultValue)),v._qpDelegate=a.get(p,"_qp.states.inactive");var b=d!==f.serializedValue;if(b){if(r.queryParamsOnly&&n!==!1){var y=p._optionsForQueryParam(f),w=a.get(y,"replace");w?n=!0:w===!1&&(n=!1)}o.set(v,f.prop,h)}f.serializedValue=d;var x=f.serializedDefaultValue===d;x||t.push({value:d,visible:!0,key:g||f.urlKey})}n&&r.method("replace"),u.qps.forEach(function(e){var t=a.get(e.route,"_qp"),r=e.route.controller;r._qpDelegate=a.get(t,"states.active")}),s._qpUpdates=null}}},deactivate:C,activate:C,transitionTo:function(e,t){var r=this.router;return r.transitionTo.apply(r,arguments)},intermediateTransitionTo:function(){var e=this.router;e.intermediateTransitionTo.apply(e,arguments)},refresh:function(){return this.router.router.refresh(this)},replaceWith:function(){var e=this.router;return e.replaceWith.apply(e,arguments)},send:function(){for(var e=arguments.length,r=Array(e),n=0;e>n;n++)r[n]=arguments[n];if(this.router&&this.router.router||!t["default"].testing){var i;(i=this.router).send.apply(i,r)}else{var a=r[0];r=R.call(r,1);var o=this.actions[a];if(o)return this.actions[a].apply(this,r)}},setup:function(e,t){var r,n=this.controllerName||this.routeName,i=this.controllerFor(n,!0);if(r=i?i:this.generateController(n,e),!this.controller){var s=a.get(this,"_qp.propertyNames");P(r,s),this.controller=r}var u=a.get(this,"_qp"),l=u.states;if(t){_.stashParamNames(this.router,t.state.handlerInfos);var c=t.params,m=u.propertyNames,h=this._bucketCache;m.forEach(function(e){var t=u.map[e];t.values=c;var n=_.calculateCacheKey(t.prefix,t.parts,t.values);if(h){var i=h.lookup(n,e,t.undecoratedDefaultValue);o.set(r,e,i)}})}if(r._qpDelegate=l.allowOverrides,t){var d=A(this,t.state);r.setProperties(d)}this.setupController(r,e,t),(!this._environment||this._environment.options.shouldRender)&&this.renderTemplate(r,e)},_qpChanged:function(e,t,r){if(r){var n=_.calculateCacheKey(r.prefix||"",r.parts,r.values),i=this._bucketCache;i&&i.stash(n,e,t)}},beforeModel:C,afterModel:C,redirect:C,contextDidChange:function(){this.currentModel=this.context},model:function(e,t){var r,n,i,o,s=a.get(this,"_qp.map");for(var u in e)"queryParams"===u||s&&u in s||((r=u.match(/^(.*)_id$/))&&(n=r[1],o=e[u]),i=!0);if(!n&&i)return d["default"](e);if(!n){if(t.resolveIndex<1)return;var l=t.state.handlerInfos[t.resolveIndex-1].context;return l}return this.findModel(n,o)},deserialize:function(e,t){return this.model(this.paramsFor(this.routeName),t)},findModel:function(){var e=a.get(this,"store");return e.find.apply(e,arguments)},store:l.computed(function(){var e=w.getOwner(this);this.routeName,a.get(this,"router.namespace");return{find:function(t,r){var n=e._lookupFactory("model:"+t);if(n)return n.find(r)}}}),serialize:function(e,t){if(!(t.length<1)&&e){var r=t[0],n={};return 1===t.length?r in e?n[r]=a.get(e,r):/_id$/.test(r)&&(n[r]=a.get(e,"id")):n=s["default"](e,t),n}},setupController:function(e,t,r){e&&void 0!==t&&o.set(e,"model",t)},controllerFor:function(e,t){var r,n=w.getOwner(this),i=n.lookup("route:"+e);return i&&i.controllerName&&(e=i.controllerName),r=n.lookup("controller:"+e)},generateController:function(e,t){var r=w.getOwner(this);return t=t||this.modelFor(e),y["default"](r,e,t)},modelFor:function(e){var t=w.getOwner(this).lookup("route:"+e),r=this.router?this.router.router.activeTransition:null;if(r){var n=t&&t.routeName||e;if(r.resolvedModels.hasOwnProperty(n))return r.resolvedModels[n]}return t&&t.currentModel},renderTemplate:function(e,t){this.render()},render:function(e,t){var r,n="string"==typeof e&&!!e,i=0===arguments.length||x["default"](arguments[0]);"object"!=typeof e||t?r=e:(r=this.routeName,t=e);var a=O(this,n,i,r,t);this.connections.push(a),h["default"].once(this.router,"_setOutlets")},disconnectOutlet:function(e){var t,r;if(e&&"string"!=typeof e){if(t=e.outlet,r=e.parentView,e&&-1!==Object.keys(e).indexOf("outlet")&&"undefined"==typeof e.outlet)throw new i["default"]("You passed undefined as the outlet name.")}else t=e;r=r&&r.replace(/\//g,"."),t=t||"main",this._disconnectOutlet(t,r);for(var n=0;n0&&(this.connections=[],h["default"].once(this.router,"_setOutlets"))}});b.deprecateUnderscoreActions(M),M.reopenClass({isRouteFactory:!0}),e["default"]=M}),e("ember-routing/system/router",["exports","ember-metal/logger","ember-metal/debug","ember-metal/error","ember-metal/property_get","ember-metal/property_set","ember-metal/properties","ember-metal/empty_object","ember-metal/computed","ember-metal/assign","ember-metal/run_loop","ember-runtime/system/object","ember-runtime/mixins/evented","ember-routing/system/dsl","ember-routing/location/api","ember-routing/utils","ember-metal/utils","ember-routing/system/router_state","container/owner","ember-metal/dictionary","router","router/transition"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b,y,_,w){"use strict";function x(){return this}function C(e,t,r){for(var n,i,a=t.state.handlerInfos,o=!1,s=a.length-1;s>=0;--s)if(n=a[s],i=n.handler,o){if(r(i,a[s+1].handler)!==!0)return!1}else e===i&&(o=!0);return!0}function k(e,r){var n,i=[];n=e&&"object"==typeof e&&"object"==typeof e.errorThrown?e.errorThrown:e,r&&i.push(r),n&&(n.message&&i.push(n.message),n.stack&&i.push(n.stack),"string"==typeof n&&i.push(n)),t["default"].error.apply(this,i)}function E(e,t,r){var n,i=e.router,a=t.routeName.split(".").pop(),o="application"===e.routeName?"":e.routeName+".";return n=o+a+"_"+r,O(i,n)?n:(n=o+r,O(i,n)?n:void 0)}function O(e,t){var r=b.getOwner(e);return e.hasRoute(t)&&(r.hasRegistration("template:"+t)||r.hasRegistration("route:"+t))}function N(e,t,r){var i=r.shift();if(!e){if(t)return;throw new n["default"]("Can't trigger action '"+i+"' 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 a,o,s=!1,u=e.length-1;u>=0;u--)if(a=e[u],o=a.handler,o.actions&&o.actions[i]){if(o.actions[i].apply(o,r)!==!0){if("error"===i){var l=v.guidFor(r[0]);o.router._markErrorAsHandled(l)}return}s=!0}if(F[i])return void F[i].apply(null,r);if(!s&&!t)throw new n["default"]("Nothing handled the action '"+i+"'. 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 A(e,t,r){for(var n=e.router,i=n.applyIntent(t,r),a=i.handlerInfos,o=i.params,s=0,u=a.length;u>s;++s){var l=a[s];l.isResolved||(l=l.becomeResolved(null,l.context)),o[l.name]=l.params}return i}function S(e){var t=e.router.currentHandlerInfos,r=V._routePath(t),n=t[t.length-1].name;a.set(e,"currentPath",r),a.set(e,"currentRouteName",n);var i=b.getOwner(e).lookup("controller:application");i&&("currentPath"in i||o.defineProperty(i,"currentPath"),a.set(i,"currentPath",r),"currentRouteName"in i||o.defineProperty(i,"currentRouteName"),a.set(i,"currentRouteName",n))}function T(e,t){var r=g["default"].create({emberRouter:t,routerJs:t.router,routerJsState:e.state});t.currentState||t.set("currentState",r),t.set("targetState",r),e.promise=e["catch"](function(e){var r=v.guidFor(e);if(!t._isErrorHandled(r))throw e;t._clearHandledError(r)})}function P(e){return"string"==typeof e&&(""===e||"/"===e.charAt(0))}function R(e,t,r,n){var i=e._queryParamsFor(t);for(var a in r)if(r.hasOwnProperty(a)){var o=r[a],s=i.map[a];s&&n(a,o,s)}}function M(e,t){if(e)for(var r=[e];r.length>0;){var n=r.shift();if(n.render.name===t)return n;var i=n.outlets;for(var a in i)r.push(i[a])}}function L(e,t,r){var n,i={render:r,outlets:new s["default"]};return n=r.into?M(e,r.into):t,n?a.set(n.outlets,r.outlet,i):r.into?D(e,r.into,i):e=i,{liveRoutes:e,ownState:i}}function D(e,t,r){e.outlets.__ember_orphans__||(e.outlets.__ember_orphans__={render:{name:"__ember_orphans__"},outlets:new s["default"]}),e.outlets.__ember_orphans__.outlets[t]=r,c["default"].schedule("afterRender",function(){})}function j(e,t,r){var n=M(e,r.routeName);return n?n:(t.outlets.main={render:{name:r.routeName,outlet:"main"},outlets:{}},t)}e.triggerEvent=N;var I=[].slice,V=m["default"].extend(h["default"],{location:"hash",rootURL:"/",_initRouterJs:function(){var e=this.router=new _["default"];e.triggerEvent=N,e._triggerWillChangeContext=x,e._triggerWillLeave=x;var r=this.constructor.dslCallbacks||[x],n=this._buildDSL();n.route("application",{path:"/",resetNamespace:!0,overrideNameAssertion:!0},function(){for(var e=0;en;n++)r[n]=arguments[n];if(P(r[0]))return this._doURLTransition("transitionTo",r[0]);var i=r[r.length-1];e=i&&i.hasOwnProperty("queryParams")?r.pop().queryParams:{};var a=r.shift();return this._doTransition(a,r,e)},intermediateTransitionTo:function(){var e;(e=this.router).intermediateTransitionTo.apply(e,arguments),S(this);var r=this.router.currentHandlerInfos;i.get(this,"namespace").LOG_TRANSITIONS&&t["default"].log("Intermediate-transitioned into '"+V._routePath(r)+"'")},replaceWith:function(){return this.transitionTo.apply(this,arguments).method("replace")},generate:function(){var e,t=(e=this.router).generate.apply(e,arguments);return this.location.formatURL(t)},isActive:function(e){var t=this.router;return t.isActive.apply(t,arguments)},isActiveIntent:function(e,t,r){return this.currentState.isActiveIntent(e,t,r)},send:function(e,t){var r;(r=this.router).trigger.apply(r,arguments)},hasRoute:function(e){return this.router.hasRoute(e)},reset:function(){this.router&&this.router.reset()},willDestroy:function(){this._toplevelView&&(this._toplevelView.destroy(),this._toplevelView=null),this._super.apply(this,arguments),this.reset()},_lookupActiveComponentNode:function(e){return this._activeViews[e]},_activeQPChanged:function(e,t){this._queuedQPChanges[e]=t,c["default"].once(this,this._fireQueryParamTransition)},_updatingQPChanged:function(e){this._qpUpdates||(this._qpUpdates={}),this._qpUpdates[e]=!0},_fireQueryParamTransition:function(){this.transitionTo({queryParams:this._queuedQPChanges}),this._resetQueuedQueryParameterChanges()},_connectActiveComponentNode:function(e,t){function r(){delete n[e]}var n=this._activeViews;this._activeViews[e]=t,t.renderNode.addDestruction({destroy:r})},_setupLocation:function(){var e=i.get(this,"location"),t=i.get(this,"rootURL"),r=b.getOwner(this);if("string"==typeof e&&r){var n=r.lookup("location:"+e);if("undefined"!=typeof n)e=a.set(this,"location",n);else{var o={implementation:e};e=a.set(this,"location",f["default"].create(o))}}null!==e&&"object"==typeof e&&(t&&a.set(e,"rootURL",t),"function"==typeof e.detect&&e.detect(),"function"==typeof e.initState&&e.initState())},_getHandlerFunction:function(){var e=this,t=new s["default"],r=b.getOwner(this),n=r._lookupFactory("route:basic");return function(a){var o="route:"+a,s=r.lookup(o);return t[a]?s:(t[a]=!0,s||(r.register(o,n.extend()),s=r.lookup(o),i.get(e,"namespace.LOG_ACTIVE_GENERATION")),s.routeName=a,s)}},_setupRouter:function(e,t){var r,n=this;e.getHandler=this._getHandlerFunction();var i=function(){t.setURL(r)};if(e.updateURL=function(e){r=e,c["default"].once(i)},t.replaceURL){var a=function(){t.replaceURL(r)};e.replaceURL=function(e){r=e,c["default"].once(a)}}e.didTransition=function(e){n.didTransition(e)},e.willTransition=function(e,t,r){n.willTransition(e,t,r)}},_serializeQueryParams:function(e,t){var r={};R(this,e,t,function(e,n,i){var a=i.urlKey;r[a]||(r[a]=[]),r[a].push({qp:i,value:n}),delete t[e]});for(var n in r){var i=r[n],a=i[0].qp;t[a.urlKey]=a.route.serializeQueryParam(i[0].value,a.urlKey,a.type)}},_deserializeQueryParams:function(e,t){R(this,e,t,function(e,r,n){delete t[e],t[n.prop]=n.route.deserializeQueryParam(r,n.urlKey,n.type)})},_pruneDefaultQueryParamValues:function(e,t){var r=this._queryParamsFor(e);for(var n in t){var i=r.map[n];i&&i.serializedDefaultValue===t[n]&&delete t[n]}},_doTransition:function(e,t,r){var n=e||p.getActiveTargetName(this.router),i={};l["default"](i,r),this._prepareQueryParams(n,t,i);var a=p.routeArgs(n,t,i),o=this.router.transitionTo.apply(this.router,a);return T(o,this),o},_prepareQueryParams:function(e,t,r){this._hydrateUnsuppliedQueryParams(e,t,r),this._serializeQueryParams(e,r),this._pruneDefaultQueryParamValues(e,r)},_queryParamsFor:function(e){if(this._qpCache[e])return this._qpCache[e];var t={},r=[];this._qpCache[e]={map:t,qps:r};for(var n=this.router,a=n.recognizer.handlersFor(e),o=0,s=a.length;s>o;++o){var u=a[o],c=n.getHandler(u.handler),m=i.get(c,"_qp");m&&(l["default"](t,m.map),r.push.apply(r,m.qps))}return{qps:r,map:t}},_hydrateUnsuppliedQueryParams:function(e,t,r){var n=A(this,e,t),a=n.handlerInfos,o=this._bucketCache;p.stashParamNames(this,a);for(var s=0,u=a.length;u>s;++s)for(var l=a[s].handler,c=i.get(l,"_qp"),m=0,h=c.qps.length;h>m;++m){var d=c.qps[m],f=d.prop in r&&d.prop||d.scopedPropertyName in r&&d.scopedPropertyName;if(f)f!==d.scopedPropertyName&&(r[d.scopedPropertyName]=r[f],delete r[f]);else{var v=p.calculateCacheKey(d.ctrl,d.parts,n.params);r[d.scopedPropertyName]=o.lookup(v,d.prop,d.defaultValue)}}},_scheduleLoadingEvent:function(e,t){this._cancelSlowTransitionTimer(),this._slowTransitionTimer=c["default"].scheduleOnce("routerTransitions",this,"_handleSlowTransition",e,t)},currentState:null,targetState:null,_handleSlowTransition:function(e,t){this.router.activeTransition&&(this.set("targetState",g["default"].create({emberRouter:this,routerJs:this.router,routerJsState:this.router.activeTransition.state})),e.trigger(!0,"loading",e,t))},_cancelSlowTransitionTimer:function(){this._slowTransitionTimer&&c["default"].cancel(this._slowTransitionTimer),this._slowTransitionTimer=null},_markErrorAsHandled:function(e){this._handledErrors[e]=!0},_isErrorHandled:function(e){return this._handledErrors[e]},_clearHandledError:function(e){delete this._handledErrors[e]}}),F={willResolveModel:function(e,t){t.router._scheduleLoadingEvent(e,t)},error:function(e,t,r){var n=r.router,i=C(r,t,function(t,r){var i=E(t,r,"error");return i?void n.intermediateTransitionTo(i,e):!0});return i&&O(r.router,"application_error")?void n.intermediateTransitionTo("application_error",e):void k(e,"Error while processing route: "+t.targetName)},loading:function(e,t){var r=t.router,n=C(t,e,function(t,n){var i=E(t,n,"loading");return i?void r.intermediateTransitionTo(i):e.pivotHandler!==t?!0:void 0});return n&&O(t.router,"application_loading")?void r.intermediateTransitionTo("application_loading"):void 0}};V.reopenClass({router:null,map:function(e){return this.dslCallbacks||(this.dslCallbacks=[],this.reopenClass({dslCallbacks:this.dslCallbacks})),this.dslCallbacks.push(e),this},_routePath:function(e){function t(e,t){for(var r=0,n=e.length;n>r;++r)if(e[r]!==t[r])return!1;return!0}for(var r,n,i,a=[],o=1,s=e.length;s>o;o++){for(r=e[o].name,n=r.split("."),i=I.call(a);i.length&&!t(i,n);)i.shift();a.push.apply(a,n.slice(i.length))}return a.join(".")}}),e["default"]=V}),e("ember-routing/system/router_state",["exports","ember-metal/is_empty","ember-runtime/system/object","ember-metal/assign"],function(e,t,r,n){"use strict";function i(e,t){var r;for(r in e)if(e.hasOwnProperty(r)&&e[r]!==t[r])return!1;for(r in t)if(t.hasOwnProperty(r)&&e[r]!==t[r])return!1;return!0}var a=Object.keys,o=r["default"].extend({emberRouter:null,routerJs:null,routerJsState:null,isActiveIntent:function(e,r,o,s){var u=this.routerJsState;if(!this.routerJs.isActiveIntent(e,r,null,u))return!1;var l=t["default"](a(o));if(s&&!l){var c={};return n["default"](c,o),this.emberRouter._prepareQueryParams(e,r,c),i(c,u.queryParams)}return!0}});e["default"]=o}),e("ember-routing/utils",["exports","ember-metal/assign","ember-metal/property_get"],function(e,t,r){"use strict";function n(e,t,r){var n=[];return"string"==typeof e&&n.push(""+e),n.push.apply(n,t),n.push({queryParams:r}),n}function i(e){var t=e.activeTransition?e.activeTransition.state.handlerInfos:e.state.handlerInfos;return t[t.length-1].name}function a(e,t){if(!t._namesStashed){for(var r=t[t.length-1].name,n=e.router.recognizer.handlersFor(r),i=null,a=0,o=t.length;o>a;++a){var s=t[a],u=n[a].names;u.length&&(i=s),s._names=u;var l=s.handler;l._stashNames(s,i)}t._namesStashed=!0}}function o(e,t){for(var r=e.split("."),n="",i=0,a=r.length;a>i;i++){var o=r.slice(0,i+1).join(".");if(0!==t.indexOf(o))break;n=o}return n}function s(e,t,n){for(var i=t||[],a="",s=0,u=i.length;u>s;++s){var l,m=i[s],h=o(e,m);if(n)if(h&&h in n){var d=0===m.indexOf(h)?m.substr(h.length+1):m;l=r.get(n[h],d)}else l=r.get(n,m);a+="::"+m+":"+l}return e+a.replace(c,"-")}function u(e){if(e._qpMap)return e._qpMap;for(var t=e._qpMap={},r=0,n=e.length;n>r;++r)l(e[r],t);return t}function l(e,r){var n,i=e;"string"==typeof i&&(n={},n[i]={as:null},i=n);for(var a in i){if(!i.hasOwnProperty(a))return;var o=i[a];"string"==typeof o&&(o={as:o}),n=r[a]||{as:null,scope:"model"},t["default"](n,o),r[a]=n}}e.routeArgs=n,e.getActiveTargetName=i,e.stashParamNames=a,e.calculateCacheKey=s,e.normalizeControllerQueryParams=u;var c=/\./g}),e("ember-routing-htmlbars/helpers/query-params",["exports","ember-metal/debug","ember-routing/system/query_params"],function(e,t,r){"use strict";function n(e,t){return r["default"].create({values:t})}e.queryParamsHelper=n}),e("ember-routing-htmlbars/index",["exports","ember-metal/core","ember-htmlbars/helpers","ember-htmlbars/keywords","ember-routing-htmlbars/helpers/query-params","ember-routing-htmlbars/keywords/action","ember-routing-htmlbars/keywords/element-action","ember-routing-htmlbars/keywords/render"],function(e,t,r,n,i,a,o,s){"use strict";r.registerHelper("query-params",i.queryParamsHelper),n.registerKeyword("action",a["default"]),n.registerKeyword("@element_action",o["default"]),n.registerKeyword("render",s["default"]),e["default"]=t["default"]}),e("ember-routing-htmlbars/keywords/action",["exports","htmlbars-runtime/hooks","ember-routing-htmlbars/keywords/closure-action"],function(e,t,r){"use strict";e["default"]=function(e,n,i,a,o,s,u,l){return e?(t.keyword("@element_action",e,n,i,a,o,s,u,l),!0):r["default"](e,n,i,a,o,s,u,l)}}),e("ember-routing-htmlbars/keywords/closure-action",["exports","ember-metal/streams/stream","ember-metal/streams/utils","ember-metal/symbol","ember-metal/property_get","ember-htmlbars/hooks/subexpr","ember-metal/error","ember-metal/run_loop"],function(e,t,r,n,i,a,o,s){"use strict";function u(e,n,i,s,u,m,h,d){var f=new t.Stream(function(){var e,t,n,a=s[0],m=r.readArray(s.slice(1,s.length));if(a[c])e=a,t=a[c];else{e=r.read(i.getSelf()),t=r.read(a);var h=typeof t;if("string"===h){var d=t;if(t=null,u.target&&(e=r.read(u.target)),e.actions&&(t=e.actions[d]),!t)throw new o["default"]("An action named '"+d+"' was not found in "+e+".")}else if("function"!==h)throw new o["default"]("An action could not be made for `"+a.label+"` in "+e+". Please confirm that you are using either a quoted action name (i.e. `(action '"+a.label+"')`) or a function available in "+e+".")}return u.value&&(n=r.read(u.value)),l(e,t,n,m)},function(){return a.labelForSubexpr(s,u,"action")});return s.forEach(f.addDependency,f),Object.keys(u).forEach(function(e){return f.addDependency(e)}),f}function l(e,t,r,n){var a;return a=n.length>0?function(){for(var a=n,o=arguments.length,u=Array(o),l=0;o>l;l++)u[l]=arguments[l];return u.length>0&&(a=n.concat(u)),r&&a.length>0&&(a[0]=i.get(a[0],r)),s["default"].join.apply(s["default"],[e,t].concat(a))}:function(){for(var n=arguments.length,a=Array(n),o=0;n>o;o++)a[o]=arguments[o];return r&&a.length>0&&(a[0]=i.get(a[0],r)),s["default"].join.apply(s["default"],[e,t].concat(a))},a[m]=!0,a}e["default"]=u;var c=n["default"]("INVOKE");e.INVOKE=c;var m=n["default"]("ACTION");e.ACTION=m}),e("ember-routing-htmlbars/keywords/element-action",["exports","ember-metal/debug","ember-metal/utils","ember-metal/streams/utils","ember-metal/run_loop","ember-views/streams/utils","ember-views/system/utils","ember-views/system/action_manager"],function(e,t,r,n,i,a,o,s){"use strict";function u(e,t){if("undefined"==typeof t){if(m.test(e.type))return o.isSimpleClick(e);t=""}if(t.indexOf("any")>=0)return!0;for(var r=0,n=c.length;n>r;r++)if(e[c[r]+"Key"]&&-1===t.indexOf(c[r]))return!1;return!0}e["default"]={setupState:function(e,t,r,n,i){for(var o=t.hooks.get,s=t.hooks.getValue,u=s(n[0]),l=[],c=1,m=n.length;m>c;c++)l.push(a.readUnwrappedModel(n[c]));var h;return h=i.target?s("string"==typeof i.target?o(t,r,i.target):i.target):s(r.getLocal("controller"))||s(r.getSelf()),{actionName:u,actionArgs:l,target:h}},isStable:function(e,t,r,n,i){return!0},render:function(e,t,n,i,a,o,s,u){var c=t.dom.getAttribute(e.element,"data-ember-action")||r.uuid();l.registerAction({actionId:c,node:e,eventName:a.on||"click",bubbles:a.bubbles,preventDefault:a.preventDefault,withKeyCode:a.withKeyCode,allowedKeys:a.allowedKeys}),e.cleanup=function(){l.unregisterAction(c)},t.dom.setAttribute(e.element,"data-ember-action",c)}};var l={};e.ActionHelper=l,l.registeredActions=s["default"].registeredActions,l.registerAction=function(e){var t=e.actionId,r=e.node,a=e.eventName,o=e.preventDefault,l=e.bubbles,c=e.allowedKeys,m=s["default"].registeredActions[t];return m||(m=s["default"].registeredActions[t]=[]),m.push({eventName:a,handler:function(e){if(!u(e,n.read(c)))return!0;n.read(o)!==!1&&e.preventDefault(),n.read(l)===!1&&e.stopPropagation();var t=r.getState(),a=t.target,s=t.actionName,m=t.actionArgs;i["default"](function(){return"function"==typeof s?void s.apply(a,m):void(a.send?a.send.apply(a,[s].concat(m)):a[s].apply(a,m))})}}),t},l.unregisterAction=function(e){delete s["default"].registeredActions[e]};var c=["alt","shift","meta","ctrl"],m=/^click|mouse|touch/}),e("ember-routing-htmlbars/keywords/render",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/empty_object","ember-metal/error","ember-metal/streams/utils","ember-runtime/system/string","ember-routing/system/generate_controller","ember-htmlbars/node-managers/view-node-manager"],function(e,t,r,n,i,a,o,s,u){"use strict";function l(e,t){var r=t.view.ownerView;if(r&&r.outletState){var i=r.outletState;if(i.main){var a=i.main.outlets.__ember_orphans__;if(a){var o=a.outlets[e];if(o){var s=new n["default"];return s[o.render.outlet]=o,o.wasUsed=!0,s}}}}}function c(e,t){if(!e&&!t)return!0;if(!e||!t)return!1;for(var r in e)if(!m(e[r],t[r]))return!1;return!0}function m(e,t){if(!e&&!t)return!0;if(!e||!t)return!1;e=e.render,t=t.render;for(var r in e)if(e.hasOwnProperty(r)&&e[r]!==t[r]&&"name"!==r)return!1;return!0}e["default"]={willRender:function(e,t){t.view.ownerView._outlets&&t.view.ownerView._outlets.push(e)},setupState:function(e,t,r,n,i){var a=n[0];return{parentView:t.view,manager:e.manager,controller:e.controller,childOutletState:l(a,t)}},childEnv:function(e,t){return t.childWithOutletState(e.childOutletState)},isStable:function(e,t){return c(e.childOutletState,t.childOutletState)},isEmpty:function(e){return!1},render:function(e,t,n,l,c,m,h,d){var f=e.getState(),p=l[0],v=l[1],g=t.owner,b=g.lookup("router:main");if(1===l.length);else if(2!==l.length)throw new i["default"]("You must pass a templateName to render");var y="template:"+p,_=g.lookup("view:"+p);_||(_=g.lookup("view:default"));var w=_&&!!r.get(_,"template");m||w||(m=g.lookup(y)),_&&(_.ownerView=t.view.ownerView);var x,C;c.controller?(x=c.controller,C="controller:"+x,delete c.controller):(x=p,C="controller:"+x);var k,E=a.read(n.getLocal("controller"));if(l.length>1){var O=g._lookupFactory(C)||s.generateControllerFactory(g,x);k=O.create({model:a.read(v),parentController:E,target:E}),e.addDestruction(k)}else k=g.lookup(C)||s["default"](g,x),k.setProperties({target:E,parentController:E});_&&_.set("controller",k),f.controller=k,c.viewName=o.camelize(p),m&&m.raw&&(m=m.raw);var N={layout:null,self:k};_&&(N.component=_);var A=u["default"].create(e,t,c,N,f.parentView,null,null,m);f.manager=A,b&&1===l.length&&b._connectActiveComponentNode(p,A),A.render(t,c,d)},rerender:function(e,t,r,n,i,o,s,u){if(n.length>1){var l=a.read(n[1]);e.getState().controller.set("model",l)}}}}),e("ember-routing-views/components/link-to",["exports","ember-metal/logger","ember-metal/debug","ember-metal/property_get","ember-metal/computed","ember-metal/computed_macros","ember-views/system/utils","ember-views/components/component","ember-runtime/inject","ember-runtime/system/service","ember-runtime/mixins/controller","ember-htmlbars/node-managers/component-node-manager","ember-htmlbars/templates/link-to"],function(e,t,r,n,i,a,o,s,u,l,c,m,h){"use strict";h["default"].meta.revision="Ember@2.4.3";var d=s["default"].extend({layout:h["default"],tagName:"a",currentWhen:a.deprecatingAlias("current-when",{id:"ember-routing-view.deprecated-current-when",until:"3.0.0"}),"current-when":null,title:null,rel:null,tabindex:null,target:null,activeClass:"active",loadingClass:"loading",disabledClass:"disabled",_isDisabled:!1,replace:!1,attributeBindings:["href","title","rel","tabindex","target"],classNameBindings:["active","loading","disabled","transitioningIn","transitioningOut"],eventName:"click",init:function(){ +this._super.apply(this,arguments);var e=n.get(this,"eventName");this.on(e,this,this._invoke)},_routing:u["default"].service("-routing"),disabled:i.computed({get:function(e,t){return!1},set:function(e,t){return void 0!==t&&this.set("_isDisabled",t),t?n.get(this,"disabledClass"):!1}}),_computeActive:function(e){if(n.get(this,"loading"))return!1;var t=n.get(this,"_routing"),r=n.get(this,"models"),i=n.get(this,"resolvedQueryParams"),a=n.get(this,"current-when"),o=!!a;a=a||n.get(this,"qualifiedRouteName"),a=a.split(" ");for(var s=0,u=a.length;u>s;s++)if(t.isActiveForRoute(r,i,a[s],e,o))return n.get(this,"activeClass");return!1},active:i.computed("attrs.params","_routing.currentState",function(){var e=n.get(this,"_routing.currentState");return e?this._computeActive(e):!1}),willBeActive:i.computed("_routing.targetState",function(){var e=n.get(this,"_routing"),t=n.get(e,"targetState");return n.get(e,"currentState")!==t?!!this._computeActive(t):void 0}),transitioningIn:i.computed("active","willBeActive",function(){var e=n.get(this,"willBeActive");return"undefined"==typeof e?!1:!n.get(this,"active")&&e&&"ember-transitioning-in"}),transitioningOut:i.computed("active","willBeActive",function(){var e=n.get(this,"willBeActive");return"undefined"==typeof e?!1:n.get(this,"active")&&!e&&"ember-transitioning-out"}),_invoke:function(e){if(!o.isSimpleClick(e))return!0;var r=n.get(this,"preventDefault"),i=n.get(this,"target");if(r!==!1&&(i&&"_self"!==i||e.preventDefault()),n.get(this,"bubbles")===!1&&e.stopPropagation(),n.get(this,"_isDisabled"))return!1;if(n.get(this,"loading"))return t["default"].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;if(i&&"_self"!==i)return!1;var a=n.get(this,"_routing"),s=n.get(this,"qualifiedRouteName"),u=n.get(this,"models"),l=n.get(this,"queryParams.values"),c=n.get(this,"replace");a.transitionTo(s,u,l,c)},queryParams:null,qualifiedRouteName:i.computed("targetRouteName","_routing.currentState",function(){var e=n.get(this,"params").slice(),t=e[e.length-1];t&&t.isQueryParams&&e.pop();var r=this[m.HAS_BLOCK]?0===e.length:1===e.length;return r?n.get(this,"_routing.currentRouteName"):n.get(this,"targetRouteName")}),resolvedQueryParams:i.computed("queryParams",function(){var e={},t=n.get(this,"queryParams");if(!t)return e;var r=t.values;for(var i in r)r.hasOwnProperty(i)&&(e[i]=r[i]);return e}),href:i.computed("models","qualifiedRouteName",function(){if("a"===n.get(this,"tagName")){var e=n.get(this,"qualifiedRouteName"),t=n.get(this,"models");if(n.get(this,"loading"))return n.get(this,"loadingHref");var r=n.get(this,"_routing"),i=n.get(this,"queryParams.values");return r.generateURL(e,t,i)}}),loading:i.computed("_modelsAreLoaded","qualifiedRouteName",function(){var e=n.get(this,"qualifiedRouteName"),t=n.get(this,"_modelsAreLoaded");return t&&null!=e?void 0:n.get(this,"loadingClass")}),_modelsAreLoaded:i.computed("models",function(){for(var e=n.get(this,"models"),t=0,r=e.length;r>t;t++)if(null==e[t])return!1;return!0}),_getModels:function(e){for(var t=e.length-1,r=new Array(t),n=0;t>n;n++){for(var i=e[n+1];c["default"].detect(i);)i=i.get("model");r[n]=i}return r},loadingHref:"#",willRender:function(){var e=void 0,t=n.get(this,"params").slice(),r=n.get(this,"disabledWhen");r&&this.set("disabled",r),this[m.HAS_BLOCK]||this.set("linkTitle",t.shift()),this.set("targetRouteName",t[0]);var i=t[t.length-1];e=i&&i.isQueryParams?t.pop():{},this.set("queryParams",e),t.length>1?this.set("models",this._getModels(t)):this.set("models",[])}});d.toString=function(){return"LinkComponent"},d.reopenClass({positionalParams:"params"}),e["default"]=d}),e("ember-routing-views/index",["exports","ember-metal/core","ember-routing-views/components/link-to","ember-routing-views/views/outlet"],function(e,t,r,n){"use strict";t["default"].LinkComponent=r["default"],t["default"].OutletView=n.OutletView,e["default"]=t["default"]}),e("ember-routing-views/views/outlet",["exports","ember-views/views/view","ember-htmlbars/templates/top-level-view"],function(e,t,r){"use strict";r["default"].meta.revision="Ember@2.4.3";var n=t["default"].extend({defaultTemplate:r["default"],init:function(){this._super(),this._outlets=[]},setOutletState:function(e){this.outletState={main:e},this.env&&(this.env.outletState=this.outletState),this.lastResult&&(this.dirtyOutlets(),this._outlets=[],this.scheduleRevalidate(null,null))},dirtyOutlets:function(){for(var e=0;e0)-(0>r)}function i(e,o){if(e===o)return 0;var s=t.typeOf(e),u=t.typeOf(o);if(r["default"]){if("instance"===s&&r["default"].detect(e)&&e.constructor.compare)return e.constructor.compare(e,o);if("instance"===u&&r["default"].detect(o)&&o.constructor.compare)return-1*o.constructor.compare(o,e)}var l=n(a[s],a[u]);if(0!==l)return l;switch(s){case"boolean":case"number":return n(e,o);case"string":return n(e.localeCompare(o),0);case"array":for(var c=e.length,m=o.length,h=Math.min(c,m),d=0;h>d;d++){var f=i(e[d],o[d]);if(0!==f)return f}return n(c,m);case"instance":return r["default"]&&r["default"].detect(e)?e.compare(e,o):0;case"date":return n(e.getTime(),o.getTime());default:return 0}}e["default"]=i;var a={undefined:0,"null":1,"boolean":2,number:3,string:4,array:5,object:6,instance:7,"function":8,"class":9,date:10}}),e("ember-runtime/computed/reduce_computed_macros",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/error","ember-metal/computed","ember-metal/observer","ember-runtime/compare","ember-runtime/utils","ember-runtime/system/native_array","ember-metal/is_none","ember-metal/get_properties","ember-metal/weak_map"],function(e,t,r,n,i,a,o,s,u,l,c,m){"use strict";function h(e,t,n){return i.computed(e+".[]",function(){var i=this,a=r.get(this,e);return null===a||"object"!=typeof a?n:a.reduce(function(e,r,n,a){return t.call(i,e,r,n,a)},n)}).readOnly()}function d(e,t){var n;return/@each/.test(e)?n=e.replace(/\.@each.*$/,""):(n=e,e+=".[]"),i.computed(e,function(){var e=r.get(this,n);return s.isArray(e)?u.A(t.call(this,e)):u.A()}).readOnly()}function f(e,t){var r=e.map(function(e){return e+".[]"});return r.push(function(){return u.A(t.call(this,e))}),i.computed.apply(this,r).readOnly()}function p(e){return h(e,function(e,t){return e+t},0)}function v(e){return h(e,function(e,t){return Math.max(e,t)},-(1/0))}function g(e){return h(e,function(e,t){return Math.min(e,t)},1/0)}function b(e,t){return d(e,function(e){return e.map(t,this)})}function y(e,t){return b(e+".@each."+t,function(e){return r.get(e,t)})}function _(e,t){return d(e,function(e){return e.filter(t,this)})}function w(e,t,n){var i;return i=2===arguments.length?function(e){return r.get(e,t)}:function(e){return r.get(e,t)===n},_(e+".@each."+t,i)}function x(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];return f(t,function(e){var t=this,n=u.A();return e.forEach(function(e){var i=r.get(t,e);s.isArray(i)&&i.forEach(function(e){-1===n.indexOf(e)&&n.push(e)})}),n})}function C(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];return f(t,function(e){var t=this,n=e.map(function(e){var n=r.get(t,e);return s.isArray(n)?n:[]}),i=n.pop().filter(function(e){for(var t=0;tr;r++)t[r]=arguments[r];return f(t,function(){var e=c["default"](this,t),r=u.A();for(var n in e)e.hasOwnProperty(n)&&(l["default"](e[n])?r.push(null):r.push(e[n]));return r})}function O(e,t){return"function"==typeof t?N(e,t):A(e,t)}function N(e,t){return d(e,function(e){var r=this;return e.slice().sort(function(e,n){return t.call(r,e,n)})})}function A(e,t){var n=new i.ComputedProperty(function(i){function o(){this.notifyPropertyChange(i)}var l=this,c="@this"===e,h=r.get(this,t),d=S(h),f=n._activeObserverMap||(n._activeObserverMap=new m["default"]),p=f.get(this);p&&p.forEach(function(e){a.removeObserver.apply(null,e)}),p=d.map(function(t){var r=t[0],n=c?"@each."+r:e+".@each."+r,i=[l,n,o];return a.addObserver.apply(null,i),i}),f.set(this,p);var v=c?this:r.get(this,e);return s.isArray(v)?T(v,d):u.A()});return n._activeObserverMap=void 0,n.property(t+".[]").readOnly()}function S(e){return e.map(function(e){var t=e.split(":"),r=t[0],n=t[1];return n=n||"asc",[r,n]})}function T(e,t){return u.A(e.slice().sort(function(e,n){for(var i=0;i=0)return a[s];if(Array.isArray(e)){if(o=e.slice(),t)for(s=o.length;--s>=0;)o[s]=i(o[s],t,r,a)}else if(n["default"]&&n["default"].detect(e))o=e.copy(t,r,a);else if(e instanceof Date)o=new Date(e.getTime());else{o={};for(u in e)Object.prototype.hasOwnProperty.call(e,u)&&"__"!==u.substring(0,2)&&(o[u]=t?i(e[u],t,r,a):e[u])}return t&&(r.push(e),a.push(o)),o}function a(e,t){return"object"!=typeof e||null===e?e:n["default"]&&n["default"].detect(e)?e.copy(t):i(e,t,t?[]:null,t?[]:null)}e["default"]=a}),e("ember-runtime/core",["exports"],function(e){"use strict"}),e("ember-runtime/ext/function",["exports","ember-metal/core","ember-metal/debug","ember-metal/computed","ember-metal/mixin"],function(e,t,r,n,i){"use strict";var a=Array.prototype.slice,o=Function.prototype;(t["default"].EXTEND_PROTOTYPES===!0||t["default"].EXTEND_PROTOTYPES.Function)&&(o.property=function(){var e=n.computed(this);return e.property.apply(e,arguments)},o.observes=function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return t.push(this),i.observer.apply(this,t)},o._observesImmediately=function(){return this.observes.apply(this,arguments)},o.observesImmediately=r.deprecateFunc("Function#observesImmediately is deprecated. Use Function#observes instead",{id:"ember-runtime.ext-function",until:"3.0.0"},o._observesImmediately),o.on=function(){var e=a.call(arguments);return this.__ember_listens__=e,this})}),e("ember-runtime/ext/rsvp",["exports","ember-metal/core","require","ember-metal/debug","ember-metal/logger","ember-metal/run_loop","rsvp"],function(e,t,r,n,i,a,o){"use strict";function s(e){var n;if(e&&e.errorThrown?(n=e.errorThrown,"string"==typeof n&&(n=new Error(n)),Object.defineProperty(n,"__reason_with_error_thrown__",{value:e,enumerable:!1})):n=e,(!n||"UnrecognizedURLError"!==n.name)&&n&&"TransitionAborted"!==n.name)if(t["default"].testing){if(!l&&r.has(c)&&(l=r["default"](c)["default"]),!l||!l.adapter)throw n;l.adapter.exception(n),i["default"].error(n.stack)}else t["default"].onerror?t["default"].onerror(n):i["default"].error(n.stack)}function u(e){a["default"].schedule(a["default"].queues[a["default"].queues.length-1],e)}e.onerrorDefault=s,e.after=u;var l,c="ember-testing/test",m=function(){t["default"].Test&&t["default"].Test.adapter&&t["default"].Test.adapter.asyncStart()},h=function(){t["default"].Test&&t["default"].Test.adapter&&t["default"].Test.adapter.asyncEnd()};o.configure("async",function(e,r){var n=!a["default"].currentRunLoop;t["default"].testing&&n&&m(),a["default"].backburner.schedule("actions",function(){t["default"].testing&&n&&h(),e(r)})}),o.on("error",s),o.configure("after",u),e["default"]=o}),e("ember-runtime/ext/string",["exports","ember-metal/core","ember-runtime/system/string"],function(e,t,r){"use strict";var n=String.prototype;(t["default"].EXTEND_PROTOTYPES===!0||t["default"].EXTEND_PROTOTYPES.String)&&(n.fmt=function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];return r.fmt(this,t)},n.w=function(){return r.w(this)},n.loc=function(){for(var e=arguments.length,t=Array(e),n=0;e>n;n++)t[n]=arguments[n];return r.loc(this,t)},n.camelize=function(){return r.camelize(this)},n.decamelize=function(){return r.decamelize(this)},n.dasherize=function(){return r.dasherize(this)},n.underscore=function(){return r.underscore(this)},n.classify=function(){return r.classify(this)},n.capitalize=function(){return r.capitalize(this)})}),e("ember-runtime/index",["exports","ember-metal","ember-runtime/is-equal","ember-runtime/compare","ember-runtime/copy","ember-runtime/inject","ember-runtime/system/namespace","ember-runtime/system/object","ember-runtime/system/container","ember-runtime/system/array_proxy","ember-runtime/system/object_proxy","ember-runtime/system/core_object","ember-runtime/system/native_array","ember-runtime/system/string","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/-proxy","ember-runtime/mixins/observable","ember-runtime/mixins/action_handler","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/computed/reduce_computed_macros","ember-runtime/controllers/controller","ember-runtime/mixins/controller","ember-runtime/system/service","ember-runtime/ext/rsvp","ember-runtime/ext/string","ember-runtime/ext/function","ember-runtime/utils","ember-metal/features","ember-runtime/mixins/registry_proxy","ember-runtime/mixins/container_proxy","ember-runtime/string_registry"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b,y,_,w,x,C,k,E,O,N,A,S,T,P,R,M,L,D,j,I,V,F){"use strict";t["default"].compare=n["default"],t["default"].copy=i["default"],t["default"].isEqual=r["default"],t["default"].inject=a["default"],t["default"].Array=p["default"],t["default"].Comparable=v["default"],t["default"].Copyable=g["default"],t["default"].Freezable=y.Freezable,t["default"].FROZEN_ERROR=y.FROZEN_ERROR,t["default"].MutableEnumerable=C["default"],t["default"].MutableArray=k["default"],t["default"].TargetActionSupport=E["default"],t["default"].Evented=O["default"],t["default"].PromiseProxyMixin=N["default"],t["default"].Observable=w["default"],t["default"].typeOf=D.typeOf,t["default"].isArray=D.isArray;var H=t["default"].computed;H.sum=A.sum,H.min=A.min,H.max=A.max,H.map=A.map,H.sort=A.sort,H.setDiff=A.setDiff,H.mapBy=A.mapBy,H.filter=A.filter,H.filterBy=A.filterBy,H.uniq=A.uniq,H.union=A.union,H.intersect=A.intersect,H.collect=A.collect,t["default"].String=d["default"],t["default"].Object=s["default"],t["default"].Container=u.Container,t["default"].Registry=u.Registry,t["default"].getOwner=u.getOwner,t["default"].setOwner=u.setOwner,t["default"]._RegistryProxyMixin=I["default"],t["default"]._ContainerProxyMixin=V["default"],t["default"].Namespace=o["default"],t["default"].Enumerable=b["default"],t["default"].ArrayProxy=l["default"],t["default"].ObjectProxy=c["default"],t["default"].ActionHandler=x["default"],t["default"].CoreObject=m["default"],t["default"].NativeArray=h["default"],t["default"].onLoad=f.onLoad,t["default"].runLoadHooks=f.runLoadHooks,t["default"].Controller=S["default"],t["default"].ControllerMixin=T["default"],t["default"].Service=P["default"],t["default"]._ProxyMixin=_["default"],t["default"].RSVP=R["default"],Object.defineProperty(t["default"],"STRINGS",{configurable:!1,get:F.getStrings,set:F.setStrings}),e["default"]=t["default"]}),e("ember-runtime/inject",["exports","ember-metal/debug","ember-metal/injected_property"],function(e,t,r){"use strict";function n(){}function i(e,t){o[e]=t,n[e]=function(t){return new r["default"](e,t)}}function a(e){var t,n,i,a,s,u=e.proto(),l=[];for(t in u)n=u[t],n instanceof r["default"]&&-1===l.indexOf(n.type)&&l.push(n.type);if(l.length)for(a=0,s=l.length;s>a;a++)i=o[l[a]],"function"==typeof i&&i(e);return!0}e["default"]=n,e.createInjectionHelper=i,e.validatePropertyInjections=a;var o={}}),e("ember-runtime/is-equal",["exports"],function(e){"use strict";function t(e,t){return e&&"function"==typeof e.isEqual?e.isEqual(t):e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():e===t}e["default"]=t}),e("ember-runtime/mixins/-proxy",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/meta","ember-metal/observer","ember-metal/property_events","ember-metal/computed","ember-metal/properties","ember-metal/mixin"],function(e,t,r,n,i,a,o,s,u,l){"use strict";function c(e,t){var r=t.slice(8);r in this||o.propertyWillChange(this,r)}function m(e,t){var r=t.slice(8);r in this||o.propertyDidChange(this,r)}e["default"]=l.Mixin.create({content:null,_contentDidChange:l.observer("content",function(){}),isTruthy:s.computed.bool("content"),_debugContainerKey:null,willWatchProperty:function(e){var t="content."+e;a._addBeforeObserver(this,t,null,c),a.addObserver(this,t,null,m)},didUnwatchProperty:function(e){var t="content."+e;a._removeBeforeObserver(this,t,null,c),a.removeObserver(this,t,null,m)},unknownProperty:function(e){var t=r.get(this,"content");return t?r.get(t,e):void 0},setUnknownProperty:function(e,t){var a=i.meta(this);if(a.proto===this)return u.defineProperty(this,e,null,t),t;var o=r.get(this,"content");return n.set(o,e,t)}})}),e("ember-runtime/mixins/action_handler",["exports","ember-metal/debug","ember-metal/mixin","ember-metal/property_get"],function(e,t,r,n){"use strict";function i(e){Object.defineProperty(e.prototype,"_actions",{configurable:!0,enumerable:!1,set:function(e){},get:function(){return n.get(this,"actions")}})}e.deprecateUnderscoreActions=i;var a=r.Mixin.create({mergedProperties:["actions"],send:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;t>i;i++)r[i-1]=arguments[i];var a;if(this.actions&&this.actions[e]){var o=this.actions[e].apply(this,r)===!0;if(!o)return}if(a=n.get(this,"target")){var s;(s=a).send.apply(s,arguments)}},willMergeMixin:function(e){e._actions&&(e.actions=e._actions,delete e._actions)}});e["default"]=a}),e("ember-runtime/mixins/array",["exports","ember-metal/core","ember-metal/property_get","ember-metal/computed","ember-metal/is_none","ember-runtime/mixins/enumerable","ember-metal/mixin","ember-metal/property_events","ember-metal/events","ember-runtime/system/each_proxy"],function(e,t,r,n,i,a,o,s,u,l){"use strict";function c(e,t,n,i,a){var o=n&&n.willChange||"arrayWillChange",u=n&&n.didChange||"arrayDidChange",l=r.get(e,"hasArrayObservers");return l===a&&s.propertyWillChange(e,"hasArrayObservers"),i(e,"@array:before",t,o),i(e,"@array:change",t,u),l===a&&s.propertyDidChange(e,"hasArrayObservers"),e}function m(e,t,r){return c(e,t,r,u.addListener,!1)}function h(e,t,r){return c(e,t,r,u.removeListener,!0)}function d(e,t){return e.objectAt?e.objectAt(t):e[t]}e.addArrayObserver=m,e.removeArrayObserver=h,e.objectAt=d,e["default"]=o.Mixin.create(a["default"],{length:null,objectAt:function(e){return 0>e||e>=r.get(this,"length")?void 0:r.get(this,e)},objectsAt:function(e){var t=this;return e.map(function(e){return d(t,e)})},nextObject:function(e){return d(this,e)},"[]":n.computed({get:function(e){return this},set:function(e,t){return this.replace(0,r.get(this,"length"),t),this}}),firstObject:n.computed(function(){return d(this,0)}),lastObject:n.computed(function(){return d(this,r.get(this,"length")-1)}),contains:function(e){return this.indexOf(e)>=0},slice:function(e,n){var a=t["default"].A(),o=r.get(this,"length");for(i["default"](e)&&(e=0),(i["default"](n)||n>o)&&(n=o),0>e&&(e=o+e),0>n&&(n=o+n);n>e;)a[a.length]=d(this,e++);return a},indexOf:function(e,t){var n,i=r.get(this,"length");for(void 0===t&&(t=0),0>t&&(t+=i),n=t;i>n;n++)if(d(this,n)===e)return n;return-1},lastIndexOf:function(e,t){var n,i=r.get(this,"length");for((void 0===t||t>=i)&&(t=i-1),0>t&&(t+=i),n=t;n>=0;n--)if(d(this,n)===e)return n;return-1},addArrayObserver:function(e,t){return m(this,e,t)},removeArrayObserver:function(e,t){return h(this,e,t)},hasArrayObservers:n.computed(function(){return u.hasListeners(this,"@array:change")||u.hasListeners(this,"@array:before")}),arrayContentWillChange:function(e,t,n){var i,a;if(void 0===e?(e=0,t=n=-1):(void 0===t&&(t=-1),void 0===n&&(n=-1)),this.__each&&this.__each.arrayWillChange(this,e,t,n),u.sendEvent(this,"@array:before",[this,e,t,n]),e>=0&&t>=0&&r.get(this,"hasEnumerableObservers")){i=[],a=e+t;for(var o=e;a>o;o++)i.push(d(this,o))}else i=t;return this.enumerableContentWillChange(i,n),this},arrayContentDidChange:function(e,t,i){var a,o;if(void 0===e?(e=0,t=i=-1):(void 0===t&&(t=-1),void 0===i&&(i=-1)),e>=0&&i>=0&&r.get(this,"hasEnumerableObservers")){a=[],o=e+i;for(var l=e;o>l;l++)a.push(d(this,l))}else a=i;this.enumerableContentDidChange(t,a),this.__each&&this.__each.arrayDidChange(this,e,t,i),u.sendEvent(this,"@array:change",[this,e,t,i]);var c=r.get(this,"length"),m=n.cacheFor(this,"firstObject"),h=n.cacheFor(this,"lastObject");return d(this,0)!==m&&(s.propertyWillChange(this,"firstObject"),s.propertyDidChange(this,"firstObject")),d(this,c-1)!==h&&(s.propertyWillChange(this,"lastObject"),s.propertyDidChange(this,"lastObject")),this},"@each":n.computed(function(){return this.__each||(this.__each=new l["default"](this)),this.__each})["volatile"]()})}),e("ember-runtime/mixins/comparable",["exports","ember-metal/mixin"],function(e,t){"use strict";e["default"]=t.Mixin.create({compare:null})}),e("ember-runtime/mixins/container_proxy",["exports","ember-metal/run_loop","ember-metal/debug","ember-metal/mixin"],function(e,t,r,n){"use strict";function i(e){return function(){var t;return(t=this.__container__)[e].apply(t,arguments)}}function a(e){var t={},r={lookup:"lookup",lookupFactory:"_lookupFactory"};for(var n in r)t[n]=o(e,n,r[n]);return t}function o(e,t,r){return function(){return e[t].apply(e,arguments)}}e.buildFakeContainerWithDeprecations=a,e["default"]=n.Mixin.create({__container__:null,ownerInjection:i("ownerInjection"),lookup:i("lookup"),_lookupFactory:i("lookupFactory"),willDestroy:function(){this._super.apply(this,arguments),this.__container__&&t["default"](this.__container__,"destroy")}})}),e("ember-runtime/mixins/controller",["exports","ember-metal/mixin","ember-metal/alias","ember-runtime/mixins/action_handler","ember-runtime/mixins/controller_content_model_alias_deprecation"],function(e,t,r,n,i){"use strict";e["default"]=t.Mixin.create(n["default"],i["default"],{isController:!0,target:null,parentController:null,store:null,model:null,content:r["default"]("model")})}),e("ember-runtime/mixins/controller_content_model_alias_deprecation",["exports","ember-metal/debug","ember-metal/mixin"],function(e,t,r){"use strict";e["default"]=r.Mixin.create({willMergeMixin:function(e){this._super.apply(this,arguments);var t=!!e.model;e.content&&!t&&(e.model=e.content,delete e.content)}})}),e("ember-runtime/mixins/copyable",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/mixin","ember-runtime/mixins/freezable","ember-metal/error"],function(e,t,r,n,i,a){"use strict";e["default"]=n.Mixin.create({copy:null,frozenCopy:function(){if(i.Freezable&&i.Freezable.detect(this))return r.get(this,"isFrozen")?this:this.copy().freeze();throw new a["default"](this+" does not support freezing")}})}),e("ember-runtime/mixins/enumerable",["exports","ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-metal/computed","ember-metal/property_events","ember-metal/events","ember-runtime/compare","require"],function(e,t,r,n,i,a,o,s,u){"use strict";function l(){return(d||(d=u["default"]("ember-runtime/system/native_array").A))()}function c(){return 0===f.length?{}:f.pop()}function m(e){return f.push(e),null}function h(e,r){function n(n){var a=t.get(n,e);return i?r===a:!!a}var i=2===arguments.length;return n}var d=void 0,f=[];e["default"]=n.Mixin.create({nextObject:null,firstObject:i.computed("[]",function(){if(0===t.get(this,"length"))return void 0;var e=c(),r=this.nextObject(0,null,e);return m(e),r}),lastObject:i.computed("[]",function(){var e=t.get(this,"length");if(0===e)return void 0;var r,n=c(),i=0,a=null;do a=r,r=this.nextObject(i++,a,n);while(void 0!==r);return m(n),a}),contains:function(e){var t=this.find(function(t){return t===e});return void 0!==t},forEach:function(e,r){if("function"!=typeof e)throw new TypeError;var n=c(),i=t.get(this,"length"),a=null;void 0===r&&(r=null);for(var o=0;i>o;o++){var s=this.nextObject(o,a,n);e.call(r,s,o,this),a=s}return a=null,n=m(n),this},getEach:n.aliasMethod("mapBy"),setEach:function(e,t){return this.forEach(function(n){r.set(n,e,t)})},map:function(e,t){var r=l();return this.forEach(function(n,i,a){r[i]=e.call(t,n,i,a)}),r},mapBy:function(e){return this.map(function(r){return t.get(r,e)})},filter:function(e,t){var r=l();return this.forEach(function(n,i,a){e.call(t,n,i,a)&&r.push(n)}),r},reject:function(e,t){return this.filter(function(){return!e.apply(t,arguments)})},filterBy:function(e,t){return this.filter(h.apply(this,arguments))},rejectBy:function(e,r){var n=function(n){return t.get(n,e)===r},i=function(r){return!!t.get(r,e)},a=2===arguments.length?n:i;return this.reject(a)},find:function(e,r){var n=t.get(this,"length");void 0===r&&(r=null);for(var i,a,o=c(),s=!1,u=null,l=0;n>l&&!s;l++)i=this.nextObject(l,u,o),(s=e.call(r,i,l,this))&&(a=i),u=i;return i=u=null,o=m(o),a},findBy:function(e,t){return this.find(h.apply(this,arguments))},every:function(e,t){return!this.find(function(r,n,i){return!e.call(t,r,n,i)})},isEvery:function(e,t){return this.every(h.apply(this,arguments))},any:function(e,r){var n,i,a=t.get(this,"length"),o=c(),s=!1,u=null;for(void 0===r&&(r=null),i=0;a>i&&!s;i++)n=this.nextObject(i,u,o),s=e.call(r,n,i,this),u=n;return n=u=null,o=m(o),s},isAny:function(e,t){return this.any(h.apply(this,arguments))},reduce:function(e,t,r){if("function"!=typeof e)throw new TypeError;var n=t;return this.forEach(function(t,i){n=e(n,t,i,this,r)},this),n},invoke:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];var i=l();return this.forEach(function(t,n){var a=t&&t[e];"function"==typeof a&&(i[n]=r?a.apply(t,r):t[e]())},this),i},toArray:function(){var e=l();return this.forEach(function(t,r){e[r]=t}),e},compact:function(){return this.filter(function(e){return null!=e})},without:function(e){if(!this.contains(e))return this;var t=l();return this.forEach(function(r){r!==e&&(t[t.length]=r)}),t},uniq:function(){var e=l();return this.forEach(function(t){e.indexOf(t)<0&&e.push(t)}),e},"[]":i.computed({get:function(e){return this}}),addEnumerableObserver:function(e,r){var n=r&&r.willChange||"enumerableWillChange",i=r&&r.didChange||"enumerableDidChange",s=t.get(this,"hasEnumerableObservers");return s||a.propertyWillChange(this,"hasEnumerableObservers"),o.addListener(this,"@enumerable:before",e,n),o.addListener(this,"@enumerable:change",e,i),s||a.propertyDidChange(this,"hasEnumerableObservers"),this},removeEnumerableObserver:function(e,r){var n=r&&r.willChange||"enumerableWillChange",i=r&&r.didChange||"enumerableDidChange",s=t.get(this,"hasEnumerableObservers");return s&&a.propertyWillChange(this,"hasEnumerableObservers"),o.removeListener(this,"@enumerable:before",e,n),o.removeListener(this,"@enumerable:change",e,i),s&&a.propertyDidChange(this,"hasEnumerableObservers"),this},hasEnumerableObservers:i.computed(function(){return o.hasListeners(this,"@enumerable:change")||o.hasListeners(this,"@enumerable:before")}),enumerableContentWillChange:function(e,r){var n,i,s;return n="number"==typeof e?e:e?t.get(e,"length"):e=-1,i="number"==typeof r?r:r?t.get(r,"length"):r=-1,s=0>i||0>n||i-n!==0,-1===e&&(e=null),-1===r&&(r=null),a.propertyWillChange(this,"[]"),s&&a.propertyWillChange(this,"length"),o.sendEvent(this,"@enumerable:before",[this,e,r]),this},enumerableContentDidChange:function(e,r){var n,i,s;return n="number"==typeof e?e:e?t.get(e,"length"):e=-1,i="number"==typeof r?r:r?t.get(r,"length"):r=-1,s=0>i||0>n||i-n!==0,-1===e&&(e=null),-1===r&&(r=null),o.sendEvent(this,"@enumerable:change",[this,e,r]),s&&a.propertyDidChange(this,"length"),a.propertyDidChange(this,"[]"),this},sortBy:function(){var e=arguments;return this.toArray().sort(function(r,n){for(var i=0;i1?t-1:0),i=1;t>i;i++)n[i-1]=arguments[i];r.sendEvent(this,e,n)},off:function(e,t,n){return r.removeListener(this,e,t,n),this},has:function(e){return r.hasListeners(this,e)}})}),e("ember-runtime/mixins/freezable",["exports","ember-metal/debug","ember-metal/mixin","ember-metal/property_get","ember-metal/property_set"],function(e,t,r,n,i){"use strict";var a=r.Mixin.create({init:function(){this._super.apply(this,arguments)},isFrozen:!1,freeze:function(){return n.get(this,"isFrozen")?this:(i.set(this,"isFrozen",!0),this)}});e.Freezable=a;var o="Frozen object cannot be modified.";e.FROZEN_ERROR=o}),e("ember-runtime/mixins/mutable_array",["exports","ember-metal/property_get","ember-metal/error","ember-metal/mixin","ember-runtime/mixins/array","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/enumerable"],function(e,t,r,n,i,a,o){"use strict";var s="Index out of range",u=[];e["default"]=n.Mixin.create(i["default"],a["default"],{replace:null,clear:function(){var e=t.get(this,"length");return 0===e?this:(this.replace(0,e,u),this)},insertAt:function(e,n){if(e>t.get(this,"length"))throw new r["default"](s);return this.replace(e,0,[n]),this},removeAt:function(e,n){if("number"==typeof e){if(0>e||e>=t.get(this,"length"))throw new r["default"](s);void 0===n&&(n=1),this.replace(e,n,u)}return this},pushObject:function(e){return this.insertAt(t.get(this,"length"),e),e},pushObjects:function(e){if(!o["default"].detect(e)&&!Array.isArray(e))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");return this.replace(t.get(this,"length"),0,e),this},popObject:function(){var e=t.get(this,"length");if(0===e)return null;var r=i.objectAt(this,e-1);return this.removeAt(e-1,1),r},shiftObject:function(){if(0===t.get(this,"length"))return null;var e=i.objectAt(this,0);return this.removeAt(0),e},unshiftObject:function(e){return this.insertAt(0,e),e},unshiftObjects:function(e){return this.replace(0,0,e),this},reverseObjects:function(){var e=t.get(this,"length");if(0===e)return this;var r=this.toArray().reverse();return this.replace(0,e,r),this},setObjects:function(e){if(0===e.length)return this.clear();var r=t.get(this,"length");return this.replace(0,r,e),this},removeObject:function(e){for(var r=t.get(this,"length")||0;--r>=0;){var n=i.objectAt(this,r);n===e&&this.removeAt(r)}return this},addObject:function(e){ +return this.contains(e)||this.pushObject(e),this}})}),e("ember-runtime/mixins/mutable_enumerable",["exports","ember-runtime/mixins/enumerable","ember-metal/mixin","ember-metal/property_events"],function(e,t,r,n){"use strict";e["default"]=r.Mixin.create(t["default"],{addObject:null,addObjects:function(e){var t=this;return n.beginPropertyChanges(this),e.forEach(function(e){return t.addObject(e)}),n.endPropertyChanges(this),this},removeObject:null,removeObjects:function(e){n.beginPropertyChanges(this);for(var t=e.length-1;t>=0;t--)this.removeObject(e[t]);return n.endPropertyChanges(this),this}})}),e("ember-runtime/mixins/observable",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","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"],function(e,t,r,n,i,a,o,s,u,l,c,m){"use strict";e["default"]=o.Mixin.create({get:function(e){return r.get(this,e)},getProperties:function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return i["default"].apply(null,[this].concat(t))},set:function(e,t){return n.set(this,e,t)},setProperties:function(e){return a["default"](this,e)},beginPropertyChanges:function(){return u.beginPropertyChanges(),this},endPropertyChanges:function(){return u.endPropertyChanges(),this},propertyWillChange:function(e){return u.propertyWillChange(this,e),this},propertyDidChange:function(e){return u.propertyDidChange(this,e),this},notifyPropertyChange:function(e){return this.propertyWillChange(e),this.propertyDidChange(e),this},addObserver:function(e,t,r){l.addObserver(this,e,t,r)},removeObserver:function(e,t,r){l.removeObserver(this,e,t,r)},hasObserverFor:function(e){return s.hasListeners(this,e+":change")},getWithDefault:function(e,t){return r.getWithDefault(this,e,t)},incrementProperty:function(e,t){return m["default"](t)&&(t=1),n.set(this,e,(parseFloat(r.get(this,e))||0)+t)},decrementProperty:function(e,t){return m["default"](t)&&(t=1),n.set(this,e,(r.get(this,e)||0)-t)},toggleProperty:function(e){return n.set(this,e,!r.get(this,e))},cacheFor:function(e){return c.cacheFor(this,e)},observersForKey:function(e){return l.observersFor(this,e)}})}),e("ember-runtime/mixins/promise_proxy",["exports","ember-metal/property_get","ember-metal/set_properties","ember-metal/computed","ember-metal/mixin","ember-metal/error"],function(e,t,r,n,i,a){"use strict";function o(e,t){return r["default"](e,{isFulfilled:!1,isRejected:!1}),t.then(function(t){return r["default"](e,{content:t,isFulfilled:!0}),t},function(t){throw r["default"](e,{reason:t,isRejected:!0}),t},"Ember: PromiseProxy")}function s(e){return function(){var r=t.get(this,"promise");return r[e].apply(r,arguments)}}var u=n.computed.not,l=n.computed.or;e["default"]=i.Mixin.create({reason:null,isPending:u("isSettled").readOnly(),isSettled:l("isRejected","isFulfilled").readOnly(),isRejected:!1,isFulfilled:!1,promise:n.computed({get:function(){throw new a["default"]("PromiseProxy's promise must be set")},set:function(e,t){return o(this,t)}}),then:s("then"),"catch":s("catch"),"finally":s("finally")})}),e("ember-runtime/mixins/registry_proxy",["exports","ember-metal/debug","ember-metal/mixin"],function(e,t,r){"use strict";function n(e){return function(){var t;return(t=this.__registry__)[e].apply(t,arguments)}}function i(e,t){var r={},n={resolve:"resolveRegistration",register:"register",unregister:"unregister",has:"hasRegistration",option:"registerOption",options:"registerOptions",getOptions:"registeredOptions",optionsForType:"registerOptionsForType",getOptionsForType:"registeredOptionsForType",injection:"inject"};for(var i in n)r[i]=a(e,t,i,n[i]);return r}function a(e,t,r,n){return function(){return e[n].apply(e,arguments)}}e.buildFakeRegistryWithDeprecations=i,e["default"]=r.Mixin.create({__registry__:null,resolveRegistration:n("resolve"),register:n("register"),unregister:n("unregister"),hasRegistration:n("has"),registerOption:n("option"),registeredOption:n("getOption"),registerOptions:n("options"),registeredOptions:n("getOptions"),registerOptionsForType:n("optionsForType"),registeredOptionsForType:n("getOptionsForType"),inject:n("injection")})}),e("ember-runtime/mixins/target_action_support",["exports","ember-metal/core","ember-metal/debug","ember-metal/property_get","ember-metal/mixin","ember-metal/computed"],function(e,t,r,n,i,a){"use strict";var o=i.Mixin.create({target:null,action:null,actionContext:null,targetObject:a.computed("target",function(){if(this._targetObject)return this._targetObject;var e=n.get(this,"target");if("string"==typeof e){var r=n.get(this,e);return void 0===r&&(r=n.get(t["default"].lookup,e)),r}return e}),actionContextObject:a.computed(function(){var e=n.get(this,"actionContext");if("string"==typeof e){var r=n.get(this,e);return void 0===r&&(r=n.get(t["default"].lookup,e)),r}return e}).property("actionContext"),triggerAction:function(e){function t(e,t){var r=[];return t&&r.push(t),r.concat(e)}e=e||{};var r=e.action||n.get(this,"action"),i=e.target||n.get(this,"targetObject"),a=e.actionContext;if("undefined"==typeof a&&(a=n.get(this,"actionContextObject")||this),i&&r){var o;return o=i.send?i.send.apply(i,t(a,r)):i[r].apply(i,t(a)),o!==!1&&(o=!0),o}return!1}});e["default"]=o}),e("ember-runtime/string_registry",["exports"],function(e){"use strict";function t(e){i=e}function r(){return i}function n(e){return i[e]}e.setStrings=t,e.getStrings=r,e.get=n;var i={}}),e("ember-runtime/system/application",["exports","ember-runtime/system/namespace"],function(e,t){"use strict";e["default"]=t["default"].extend()}),e("ember-runtime/system/array_proxy",["exports","ember-metal/debug","ember-metal/property_get","ember-runtime/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-metal/alias","ember-runtime/mixins/array"],function(e,t,r,n,i,a,o,s,u,l,c,m,h){"use strict";function d(){return this}var f="Index out of range",p=[],v=u["default"].extend(l["default"],{content:null,arrangedContent:m["default"]("content"),objectAtContent:function(e){return h.objectAt(r.get(this,"arrangedContent"),e)},replaceContent:function(e,t,n){r.get(this,"content").replace(e,t,n)},_contentWillChange:a._beforeObserver("content",function(){this._teardownContent()}),_teardownContent:function(){var e=r.get(this,"content");e&&h.removeArrayObserver(e,this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},contentArrayWillChange:d,contentArrayDidChange:d,_contentDidChange:a.observer("content",function(){r.get(this,"content");this._setupContent()}),_setupContent:function(){var e=r.get(this,"content");e&&h.addArrayObserver(e,this,{willChange:"contentArrayWillChange",didChange:"contentArrayDidChange"})},_arrangedContentWillChange:a._beforeObserver("arrangedContent",function(){var e=r.get(this,"arrangedContent"),t=e?r.get(e,"length"):0;this.arrangedContentArrayWillChange(this,0,t,void 0),this.arrangedContentWillChange(this),this._teardownArrangedContent(e)}),_arrangedContentDidChange:a.observer("arrangedContent",function(){var e=r.get(this,"arrangedContent"),t=e?r.get(e,"length"):0;this._setupArrangedContent(),this.arrangedContentDidChange(this),this.arrangedContentArrayDidChange(this,0,void 0,t)}),_setupArrangedContent:function(){var e=r.get(this,"arrangedContent");e&&h.addArrayObserver(e,this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},_teardownArrangedContent:function(){var e=r.get(this,"arrangedContent");e&&h.removeArrayObserver(e,this,{willChange:"arrangedContentArrayWillChange",didChange:"arrangedContentArrayDidChange"})},arrangedContentWillChange:d,arrangedContentDidChange:d,objectAt:function(e){return r.get(this,"content")&&this.objectAtContent(e)},length:i.computed(function(){var e=r.get(this,"arrangedContent");return e?r.get(e,"length"):0}),_replace:function(e,t,n){var i=r.get(this,"content");return i&&this.replaceContent(e,t,n),this},replace:function(){if(r.get(this,"arrangedContent")!==r.get(this,"content"))throw new s["default"]("Using replace on an arranged ArrayProxy is not allowed.");this._replace.apply(this,arguments)},_insertAt:function(e,t){if(e>r.get(this,"content.length"))throw new s["default"](f);return this._replace(e,0,[t]),this},insertAt:function(e,t){if(r.get(this,"arrangedContent")===r.get(this,"content"))return this._insertAt(e,t);throw new s["default"]("Using insertAt on an arranged ArrayProxy is not allowed.")},removeAt:function(e,t){if("number"==typeof e){var n,i=r.get(this,"content"),a=r.get(this,"arrangedContent"),u=[];if(0>e||e>=r.get(this,"length"))throw new s["default"](f);for(void 0===t&&(t=1),n=e;e+t>n;n++)u.push(i.indexOf(h.objectAt(a,n)));for(u.sort(function(e,t){return t-e}),o.beginPropertyChanges(),n=0;n0&&(e=[arguments[0]]),this.__defineNonEnumerable(a.GUID_KEY_PROPERTY);var i=o.meta(this),m=i.proto;if(i.proto=this,e){var h=e;e=null;for(var d=this.concatenatedProperties,f=this.mergedProperties,p=0,v=h.length;v>p;p++){var g=h[p];if("object"!=typeof g&&void 0!==g)throw new c["default"]("Ember.Object.create only accepts objects.");if(g)for(var b=Object.keys(g),y=0,_=b.length;_>y;y++){var w=b[y],x=g[w];l.IS_BINDING.test(w)&&i.writeBindings(w,x);var C=this[w],E=null!==C&&"object"==typeof C&&C.isDescriptor?C:void 0;if(d&&d.length>0&&d.indexOf(w)>=0){var O=this[w];x=O?"function"==typeof O.concat?O.concat(x):a.makeArray(O).concat(x):a.makeArray(x)}if(f&&f.length&&f.indexOf(w)>=0){var A=this[w];x=n["default"]({},A,x)}E?E.set(this,w,x):"function"!=typeof this.setUnknownProperty||w in this?this[w]=x:this.setUnknownProperty(w,x)}}}N(this,i);var S=arguments.length;if(0===S)this.init();else if(1===S)this.init(arguments[0]);else{for(var T=new Array(S),P=0;S>P;P++)T[P]=arguments[P];this.init.apply(this,T)}this[k](),i.proto=m,s.finishChains(this),u.sendEvent(this,"init")};return r.toString=l.Mixin.prototype.toString,r.willReopen=function(){t&&(r.PrototypeMixin=l.Mixin.create(r.PrototypeMixin)),t=!1},r._initProperties=function(t){e=t},r.proto=function(){var e=r.superclass;return e&&e.proto(),t||(t=!0,r.PrototypeMixin.applyPartial(r.prototype)),this.prototype},r}function x(e){return function(){return e}}var C,k=_["default"]("POST_INIT");e.POST_INIT=k;var E=v["default"].schedule,O=l.Mixin._apply,N=l.Mixin.finishPartial,A=l.Mixin.prototype.reopen,S=!1,T=w();T.toString=function(){return"Ember.CoreObject"},T.PrototypeMixin=l.Mixin.create((C={reopen:function(){for(var e=arguments.length,t=Array(e),r=0;e>r;r++)t[r]=arguments[r];return O(this,t,!0),this},init:function(){}},C[k]=function(){},C.__defineNonEnumerable=function(e){Object.defineProperty(this,e.name,e.descriptor)},C.concatenatedProperties=null,C.mergedProperties=null,C.isDestroyed=!1,C.isDestroying=!1,C.destroy=function(){return this.isDestroying?void 0:(this.isDestroying=!0,E("actions",this,this.willDestroy),E("destroy",this,this._scheduledDestroy),this)},C.willDestroy=b.K,C._scheduledDestroy=function(){this.isDestroyed||(g.destroy(this),this.isDestroyed=!0)},C.bind=function(e,t){return t instanceof d.Binding||(t=d.Binding.from(t)),t.to(e).connect(this),t},C.toString=function(){var e="function"==typeof this.toStringExtension,t=e?":"+this.toStringExtension():"",r="<"+this.constructor.toString()+":"+a.guidFor(this)+t+">";return this.toString=x(r),r},C)),T.PrototypeMixin.ownerConstructor=T,T.__super__=null;var P={ClassMixin:l.REQUIRED,PrototypeMixin:l.REQUIRED,isClass:!0,isMethod:!1,extend:function(){var e,t=w();return t.ClassMixin=l.Mixin.create(this.ClassMixin),t.PrototypeMixin=l.Mixin.create(this.PrototypeMixin),t.ClassMixin.ownerConstructor=t,t.PrototypeMixin.ownerConstructor=t,A.apply(t.PrototypeMixin,arguments),t.superclass=this,t.__super__=this.prototype,e=t.prototype=Object.create(this.prototype),e.constructor=t,a.generateGuid(e),o.meta(e).proto=e,t.ClassMixin.apply(t),t},create:function(){for(var e=this,t=arguments.length,r=Array(t),n=0;t>n;n++)r[n]=arguments[n];return r.length>0&&this._initProperties(r),new e},reopen:function(){return this.willReopen(),A.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return A.apply(this.ClassMixin,arguments),O(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;for(;e;){if(e===this)return!0;e=e.superclass}return!1},detectInstance:function(e){return e instanceof this},metaForProperty:function(e){var t=this.proto(),r=t[e],n=null!==r&&"object"==typeof r&&r.isDescriptor?r:void 0;return n._meta||{}},_computedProperties:f.computed(function(){S=!0;var e,t=this.proto(),r=[];for(var n in t)e=t[n],e&&e.isDescriptor&&r.push({name:n,meta:e._meta});return r}).readOnly(),eachComputedProperty:function(e,t){for(var r,n={},a=i.get(this,"_computedProperties"),o=0,s=a.length;s>o;o++)r=a[o],e.call(t||this,r.name,r.meta||n)}};P._lazyInjections=function(){var e,t,r={},n=this.proto();for(e in n)t=n[e],t instanceof p["default"]&&(r[e]=t.type+":"+(t.name||e));return r};var R=l.Mixin.create(P);R.ownerConstructor=T,T.ClassMixin=R,R.apply(T),T.reopen({didDefineProperty:function(e,t,r){if(S!==!1&&r instanceof f.ComputedProperty){var n=o.meta(this.constructor).readableCache();n&&void 0!==n._computedProperties&&(n._computedProperties=void 0)}}}),e["default"]=T}),e("ember-runtime/system/each_proxy",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/observer","ember-metal/property_events","ember-metal/empty_object","ember-runtime/mixins/array"],function(e,t,r,n,i,a,o){"use strict";function s(e){this._content=e,this._keys=void 0,this.__ember_meta__=null}function u(e,t,r,i,a){for(;--a>=i;){var s=o.objectAt(e,a);s&&(n._addBeforeObserver(s,t,r,"contentKeyWillChange"),n.addObserver(s,t,r,"contentKeyDidChange"))}}function l(e,t,r,i,a){for(;--a>=i;){var s=o.objectAt(e,a);s&&(n._removeBeforeObserver(s,t,r,"contentKeyWillChange"),n.removeObserver(s,t,r,"contentKeyDidChange"))}}s.prototype={__defineNonEnumerable:function(e){this[e.name]=e.descriptor.value},arrayWillChange:function(e,t,r,n){var a=this._keys,o=r>0?t+r:-1;for(var s in a)o>0&&l(e,s,this,t,o),i.propertyWillChange(this,s)},arrayDidChange:function(e,t,r,n){var a=this._keys,o=n>0?t+n:-1;for(var s in a)o>0&&u(e,s,this,t,o),i.propertyDidChange(this,s)},willWatchProperty:function(e){this.beginObservingContentKey(e)},didUnwatchProperty:function(e){this.stopObservingContentKey(e)},beginObservingContentKey:function(e){var t=this._keys;if(t||(t=this._keys=new a["default"]),t[e])t[e]++;else{t[e]=1;var n=this._content,i=r.get(n,"length");u(n,e,this,0,i)}},stopObservingContentKey:function(e){var t=this._keys;if(t&&t[e]>0&&--t[e]<=0){var n=this._content,i=r.get(n,"length");l(n,e,this,0,i)}},contentKeyWillChange:function(e,t){i.propertyWillChange(this,t)},contentKeyDidChange:function(e,t){i.propertyDidChange(this,t)}},e["default"]=s}),e("ember-runtime/system/lazy_load",["exports","ember-metal/core","ember-runtime/system/native_array"],function(e,t,r){"use strict";function n(e,t){var n=o[e];a[e]=a[e]||r.A(),a[e].pushObject(t),n&&t(n)}function i(e,t){if(o[e]=t,"object"==typeof window&&"function"==typeof window.dispatchEvent&&"function"==typeof CustomEvent){var r=new CustomEvent(e,{detail:t,name:e});window.dispatchEvent(r)}a[e]&&a[e].forEach(function(e){return e(t)})}e.onLoad=n,e.runLoadHooks=i;var a=t["default"].ENV.EMBER_LOAD_HOOKS||{},o={},s=o;e._loaded=s}),e("ember-runtime/system/namespace",["exports","ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/mixin","ember-runtime/system/object"],function(e,t,r,n,i,a){"use strict";function o(e,t,r){var i=e.length;f[e.join(".")]=t;for(var a in t)if(p.call(t,a)){var s=t[a];if(e[i]=a,s&&s.toString===c&&!s[g])s[g]=e.join(".");else if(s&&s.isNamespace){if(r[n.guidFor(s)])continue;r[n.guidFor(s)]=!0,o(e,s,r)}}e.length=i}function s(e,t){try{var r=e[t];return r&&r.isNamespace&&r}catch(n){}}function u(){var e,r=t["default"].lookup;if(!d.PROCESSED)for(var n in r)v.test(n)&&(!r.hasOwnProperty||r.hasOwnProperty(n))&&(e=s(r,n),e&&(e[g]=n))}function l(e){var t=e.superclass;return t?t[g]?t[g]:l(t):void 0}function c(){t["default"].BOOTED||this[g]||m();var e;if(this[g])e=this[g];else if(this._toString)e=this._toString;else{var r=l(this);e=r?"(subclass of "+r+")":"(unknown mixin)",this.toString=h(e)}return e}function m(){var e=!d.PROCESSED,r=t["default"].anyUnprocessedMixins;if(e&&(u(),d.PROCESSED=!0),e||r){for(var n,i=d.NAMESPACES,a=0,s=i.length;s>a;a++)n=i[a],o([n.toString()],n,{});t["default"].anyUnprocessedMixins=!1}}function h(e){return function(){return e}}var d=a["default"].extend({isNamespace:!0,init:function(){d.NAMESPACES.push(this),d.PROCESSED=!1},toString:function(){var e=r.get(this,"name")||r.get(this,"modulePrefix");return e?e:(u(),this[g])},nameClasses:function(){o([this.toString()],this,{})},destroy:function(){var e=d.NAMESPACES,r=this.toString();r&&(t["default"].lookup[r]=void 0,delete d.NAMESPACES_BY_ID[r]),e.splice(e.indexOf(this),1),this._super.apply(this,arguments)}});d.reopenClass({NAMESPACES:[t["default"]],NAMESPACES_BY_ID:{},PROCESSED:!1,processAll:m,byName:function(e){return t["default"].BOOTED||m(),f[e]}});var f=d.NAMESPACES_BY_ID,p={}.hasOwnProperty,v=/^[A-Z]/,g=t["default"].NAME_KEY=n.GUID_KEY+"_name";i.Mixin.prototype.toString=c,e["default"]=d}),e("ember-runtime/system/native_array",["exports","ember-metal/core","ember-metal/replace","ember-metal/property_get","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"],function(e,t,r,n,i,a,o,s,u,l,c){"use strict";var m=i.Mixin.create(o["default"],s["default"],u["default"],{get:function(e){return"length"===e?this.length:"number"==typeof e?this[e]:this._super(e)},objectAt:function(e){return this[e]},replace:function(e,t,i){if(this.isFrozen)throw l.FROZEN_ERROR;var a=i?n.get(i,"length"):0;return this.arrayContentWillChange(e,t,a),0===a?this.splice(e,t):r._replace(this,e,t,i),this.arrayContentDidChange(e,t,a),this},unknownProperty:function(e,t){var r;return void 0!==t&&void 0===r&&(r=this[e]=t),r},indexOf:Array.prototype.indexOf,lastIndexOf:Array.prototype.lastIndexOf,copy:function(e){return e?this.map(function(e){return c["default"](e,!0)}):this.slice()}}),h=["length"];m.keys().forEach(function(e){Array.prototype[e]&&h.push(e)}),e.NativeArray=m=m.without.apply(m,h);var d;t["default"].EXTEND_PROTOTYPES===!0||t["default"].EXTEND_PROTOTYPES.Array?(m.apply(Array.prototype),e.A=d=function(e){return e||[]}):e.A=d=function(e){return void 0===e&&(e=[]),a["default"].detect(e)?e:m.apply(e)},t["default"].A=d,e.A=d,e.NativeArray=m,e["default"]=m}),e("ember-runtime/system/object",["exports","ember-runtime/system/core_object","ember-runtime/mixins/observable"],function(e,t,r){"use strict";var n=t["default"].extend(r["default"]);n.toString=function(){return"Ember.Object"},e["default"]=n}),e("ember-runtime/system/object_proxy",["exports","ember-runtime/system/object","ember-runtime/mixins/-proxy"],function(e,t,r){"use strict";e["default"]=t["default"].extend(r["default"])}),e("ember-runtime/system/service",["exports","ember-runtime/system/object","ember-runtime/inject"],function(e,t,r){"use strict";r.createInjectionHelper("service");var n=t["default"].extend();n.reopenClass({isServiceFactory:!0}),e["default"]=n}),e("ember-runtime/system/string",["exports","ember-metal/debug","ember-metal/utils","ember-runtime/utils","ember-runtime/string_registry","ember-metal/cache"],function(e,t,r,n,i,a){"use strict";function o(e,t){var i=t;if(!n.isArray(i)||arguments.length>2){i=new Array(arguments.length-1);for(var a=1,o=arguments.length;o>a;a++)i[a-1]=arguments[a]}var s=0;return e.replace(/%@([0-9]+)?/g,function(e,t){return t=t?parseInt(t,10)-1:s++,e=i[t],null===e?"(null)":void 0===e?"":r.inspect(e)})}function s(e,t){return o.apply(void 0,arguments)}function u(e,t){return(!n.isArray(t)||arguments.length>2)&&(t=Array.prototype.slice.call(arguments,1)),e=i.get(e)||e,o(e,t)}function l(e){return e.split(/\s+/)}function c(e){return P.get(e)}function m(e){return g.get(e)}function h(e){return _.get(e)}function d(e){return k.get(e)}function f(e){return N.get(e)}function p(e){return S.get(e)}var v=/[ _]/g,g=new a["default"](1e3,function(e){return c(e).replace(v,"-")}),b=/(\-|\_|\.|\s)+(.)?/g,y=/(^|\/)([A-Z])/g,_=new a["default"](1e3,function(e){return e.replace(b,function(e,t,r){return r?r.toUpperCase():""}).replace(y,function(e,t,r){return e.toLowerCase()})}),w=/^(\-|_)+(.)?/,x=/(.)(\-|\_|\.|\s)+(.)?/g,C=/(^|\/|\.)([a-z])/g,k=new a["default"](1e3,function(e){for(var t=function(e,t,r){return r?"_"+r.toUpperCase():""},r=function(e,t,r,n){return t+(n?n.toUpperCase():"")},n=e.split("/"),i=0,a=n.length;a>i;i++)n[i]=n[i].replace(w,t).replace(x,r);return n.join("/").replace(C,function(e,t,r){return e.toUpperCase()})}),E=/([a-z\d])([A-Z]+)/g,O=/\-|\s+/g,N=new a["default"](1e3,function(e){return e.replace(E,"$1_$2").replace(O,"_").toLowerCase()}),A=/(^|\/)([a-z])/g,S=new a["default"](1e3,function(e){return e.replace(A,function(e,t,r){return e.toUpperCase()})}),T=/([a-z\d])([A-Z])/g,P=new a["default"](1e3,function(e){return e.replace(T,"$1_$2").toLowerCase()});e["default"]={fmt:s,loc:u,w:l,decamelize:c,dasherize:m,camelize:h,classify:d,underscore:f,capitalize:p},e.fmt=s,e.loc=u,e.w=l,e.decamelize=c,e.dasherize=m,e.camelize=h,e.classify=d,e.underscore=f,e.capitalize=p}),e("ember-runtime/utils",["exports","ember-runtime/mixins/array","ember-runtime/system/object"],function(e,t,r){"use strict";function n(e){if(!e||e.setInterval)return!1;if(Array.isArray(e))return!0;if(t["default"].detect(e))return!0;var r=i(e);return"array"===r?!0:void 0!==e.length&&"object"===r?!0:!1}function i(e){if(null===e)return"null";if(void 0===e)return"undefined";var t=a[o.call(e)]||"object";return"function"===t?r["default"].detect(e)&&(t="class"):"object"===t&&(e instanceof Error?t="error":e instanceof r["default"]?t="instance":e instanceof Date&&(t="date")),t}e.isArray=n,e.typeOf=i;var a={"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object"},o=Object.prototype.toString}),e("ember-template-compiler/compat/precompile",["exports","require","ember-template-compiler/system/compile_options"],function(e,t,r){"use strict";var n,i;e["default"]=function(e){if((!n||!i)&&t.has("htmlbars-compiler/compiler")){var a=t["default"]("htmlbars-compiler/compiler");n=a.compile,i=a.compileSpec}if(!n||!i)throw new Error("Cannot call `precompile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `precompile`.");var o=void 0===arguments[1]?!0:arguments[1],s=o?n:i;return s(e,r["default"]())}}),e("ember-template-compiler/compat",["exports","ember-metal/core","ember-template-compiler/compat/precompile","ember-template-compiler/system/compile","ember-template-compiler/system/template"],function(e,t,r,n,i){"use strict";var a=t["default"].Handlebars=t["default"].Handlebars||{};a.precompile=r["default"],a.compile=n["default"],a.template=i["default"]}),e("ember-template-compiler/index",["exports","ember-metal","ember-template-compiler/system/precompile","ember-template-compiler/system/compile","ember-template-compiler/system/template","ember-template-compiler/plugins","ember-template-compiler/plugins/transform-old-binding-syntax","ember-template-compiler/plugins/transform-old-class-binding-syntax","ember-template-compiler/plugins/transform-item-class","ember-template-compiler/plugins/transform-component-attrs-into-mut","ember-template-compiler/plugins/transform-component-curly-to-readonly","ember-template-compiler/plugins/transform-angle-bracket-components","ember-template-compiler/plugins/transform-input-on-to-onEvent","ember-template-compiler/plugins/transform-top-level-components","ember-template-compiler/plugins/transform-each-into-collection","ember-template-compiler/plugins/transform-unescaped-inline-link-to","ember-template-compiler/plugins/assert-no-view-and-controller-paths","ember-template-compiler/plugins/assert-no-view-helper","ember-template-compiler/compat"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b){"use strict";a.registerPlugin("ast",o["default"]),a.registerPlugin("ast",s["default"]),a.registerPlugin("ast",u["default"]),a.registerPlugin("ast",l["default"]),a.registerPlugin("ast",c["default"]),a.registerPlugin("ast",m["default"]),a.registerPlugin("ast",h["default"]),a.registerPlugin("ast",d["default"]),a.registerPlugin("ast",p["default"]),t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT?a.registerPlugin("ast",f["default"]):(a.registerPlugin("ast",v["default"]),a.registerPlugin("ast",g["default"])),e._Ember=t["default"],e.precompile=r["default"],e.compile=n["default"],e.template=i["default"],e.registerPlugin=a.registerPlugin}),e("ember-template-compiler/plugins/assert-no-view-and-controller-paths",["exports","ember-metal/core","ember-metal/debug","ember-template-compiler/system/calculate-location-display"],function(e,t,r,n){"use strict";function i(e){this.syntax=null,this.options=e||{}}function a(e,t,r){if(r&&r.pairs){var n,i,a,s;for(n=0,i=r.pairs.length;i>n;n++)a=r.pairs[n],s=a.value.params,o(e,a,s)}}function o(e,t,r){if(r){var n,i,a;for(n=0,i=r.length;i>n;n++)a=r[n],s(e,t,a)}}function s(e,t,r){}function u(e){return"MustacheStatement"===e.type||"BlockStatement"===e.type}i.prototype.transform=function(e){var t=new this.syntax.Walker,r=this.options&&this.options.moduleName;return t.visit(e,function(e){u(e)&&(s(r,e,e.path),o(r,e,e.params),a(r,e,e.hash))}),e},e["default"]=i}),e("ember-template-compiler/plugins/assert-no-view-helper",["exports","ember-metal/core","ember-metal/debug","ember-template-compiler/system/calculate-location-display"],function(e,t,r,n){"use strict";function i(e){this.syntax=null,this.options=e||{}}function a(e,t){var r=t.params.length&&t.params[0].value}function o(e){return("MustacheStatement"===e.type||"BlockStatement"===e.type)&&"view"===e.path.parts[0]}i.prototype.transform=function(e){if(t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT)return e;var r=new this.syntax.Walker,n=this.options&&this.options.moduleName;return r.visit(e,function(e){o(e)&&a(n,e)}),e},e["default"]=i}),e("ember-template-compiler/plugins/transform-angle-bracket-components",["exports"],function(e){"use strict";function t(){this.syntax=null}function r(e){return"ComponentNode"===e.type}t.prototype.transform=function(e){var t=new this.syntax.Walker;return t.visit(e,function(e){r(e)&&(e.tag="<"+e.tag+">")}),e},e["default"]=t}),e("ember-template-compiler/plugins/transform-component-attrs-into-mut",["exports"],function(e){"use strict";function t(){this.syntax=null}function r(e){return"BlockStatement"===e.type||"MustacheStatement"===e.type}function n(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r])}t.prototype.transform=function(e){var t=this.syntax.builders,i=new this.syntax.Walker;return i.visit(e,function(e){r(e)&&n(e.hash.pairs,function(e){var r=e.value;"PathExpression"===r.type&&(e.value=t.sexpr(t.path("@mut"),[e.value]))})}),e},e["default"]=t}),e("ember-template-compiler/plugins/transform-component-curly-to-readonly",["exports"],function(e){"use strict";function t(){this.syntax=null}function r(e){return"ComponentNode"===e.type}function n(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r])}t.prototype.transform=function(e){var t=this.syntax.builders,i=new this.syntax.Walker;return i.visit(e,function(e){r(e)&&n(e.attributes,function(e){"MustacheStatement"===e.value.type&&(e.value.params.length||e.value.hash.pairs.length||(e.value=t.mustache(t.path("readonly"),[e.value.path],null,!e.value.escape)))})}),e},e["default"]=t}),e("ember-template-compiler/plugins/transform-each-in-to-hash",["exports"],function(e){"use strict";function t(e){this.syntax=null,this.options=e||{}}t.prototype.transform=function(e){var t=this,r=new t.syntax.Walker,n=t.syntax.builders;return r.visit(e,function(e){if(t.validate(e)){if(e.program&&e.program.blockParams.length)throw new Error("You cannot use keyword (`{{each foo in bar}}`) and block params (`{{each bar as |foo|}}`) at the same time.");var r=e.sexpr.params.splice(0,2),i=r[0].original;e.sexpr.hash||(e.sexpr.hash=n.hash()),e.sexpr.hash.pairs.push(n.pair("keyword",n.string(i)))}}),e},t.prototype.validate=function(e){return("BlockStatement"===e.type||"MustacheStatement"===e.type)&&"each"===e.sexpr.path.original&&3===e.sexpr.params.length&&"PathExpression"===e.sexpr.params[1].type&&"in"===e.sexpr.params[1].original},e["default"]=t}),e("ember-template-compiler/plugins/transform-each-into-collection",["exports","ember-metal/debug","ember-template-compiler/system/calculate-location-display"],function(e,t,r){"use strict";function n(e){this.options=e,this.syntax=null}function i(e){return"BlockStatement"!==e.type&&"MustacheStatement"!==e.type||"each"!==e.path.original?!1:a(e.hash.pairs,function(e){var t=e.key;return"itemController"===t||"itemView"===t||"itemViewClass"===t||"tagName"===t||"emptyView"===t||"emptyViewClass"===t})}function a(e,t){for(var r=0,n=e.length;n>r;r++)if(t(e[r]))return e[r];return!1}e["default"]=n,n.prototype.transform=function(e){var t=this.options.moduleName,n=this.syntax.builders,a=new this.syntax.Walker;return a.visit(e,function(e){var a=i(e);if(a){var o=(r["default"](t,a.loc),e.params.shift());e.path=n.path("collection"),e.params.unshift(n.string("-legacy-each"));var s=n.pair("content",o);s.loc=o.loc,e.hash.pairs.push(s)}}),e}}),e("ember-template-compiler/plugins/transform-input-on-to-onEvent",["exports","ember-metal/debug","ember-template-compiler/system/calculate-location-display"],function(e,t,r){"use strict";function n(e){this.syntax=null,this.options=e||{}}function i(e,t){for(var r=0,n=e.pairs.length;n>r;r++){var i=e.pairs[r];if(i.key===t)return i}return!1}function a(e,t){for(var r=[],n=0,i=e.pairs.length;i>n;n++){ +var a=e.pairs[n];a!==t&&r.push(a)}e.pairs=r}n.prototype.transform=function(e){var t=this,n=t.syntax.builders,o=new t.syntax.Walker,s=t.options.moduleName;return o.visit(e,function(e){if(t.validate(e)){var o=i(e.hash,"action"),u=i(e.hash,"on"),l=i(e.hash,"onEvent"),c=u||l;r["default"](s,e.loc);if(c&&"StringLiteral"!==c.value.type)return void(c.key="onEvent");if(a(e.hash,c),a(e.hash,o),!o)return;c?c.key+'="'+c.value.value+'" ':"";c&&"keyPress"===c.value.value&&(c.value.value="key-press");(c?c.value.value:"enter")+'="'+o.value.original+'"';c||(c=n.pair("onEvent",n.string("enter"))),e.hash.pairs.push(n.pair(c.value.value,o.value))}}),e},n.prototype.validate=function(e){return"MustacheStatement"===e.type&&"input"===e.path.original&&(i(e.hash,"action")||i(e.hash,"on")||i(e.hash,"onEvent"))},e["default"]=n}),e("ember-template-compiler/plugins/transform-item-class",["exports"],function(e){"use strict";function t(){this.syntax=null}function r(e){return("BlockStatement"===e.type||"MustacheStatement"===e.type)&&"collection"===e.path.original}function n(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r])}e["default"]=t,t.prototype.transform=function(e){var t=this.syntax.builders,i=new this.syntax.Walker;return i.visit(e,function(e){r(e)&&n(e.hash.pairs,function(e){var r=e.key,n=e.value;if("itemClass"===r&&"StringLiteral"!==n.type){var i=n.original,a=[n],o=[t.string(i),t.path(i)];a.push(t.sexpr(t.string("-normalize-class"),o));var s=t.sexpr(t.string("if"),a);e.value=s}})}),e}}),e("ember-template-compiler/plugins/transform-old-binding-syntax",["exports","ember-metal/debug","ember-template-compiler/system/calculate-location-display"],function(e,t,r){"use strict";function n(e){this.syntax=null,this.options=e}function i(e){return"BlockStatement"===e.type||"MustacheStatement"===e.type}function a(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r])}e["default"]=n,n.prototype.transform=function(e){var t=this.options.moduleName,n=this.syntax.builders,o=new this.syntax.Walker;return o.visit(e,function(e){i(e)&&a(e.hash.pairs,function(e){var i=e.key,a=e.value;r["default"](t,e.loc);if("classBinding"!==i&&"Binding"===i.substr(-7)){var o=i.slice(0,-7);e.key=o,"StringLiteral"===a.type&&(e.value=n.path(a.original))}})}),e}}),e("ember-template-compiler/plugins/transform-old-class-binding-syntax",["exports"],function(e){"use strict";function t(e){this.syntax=null,this.options=e}function r(e,t,r){for(var n=0,i=e.length;i>n;n++){var a=e[n],o=a[0],s=a[1],u=a[2],l=void 0;if(""===o)l=r.string(s);else{var c=[r.path(o)];if(s)c.push(r.string(s));else{var m=[r.string(o),r.path(o)],h=r.hash();void 0!==s&&h.pairs.push(r.pair("activeClass",r.string(s))),void 0!==u&&h.pairs.push(r.pair("inactiveClass",r.string(u))),c.push(r.sexpr(r.string("-normalize-class"),m,h))}u&&c.push(r.string(u)),l=r.sexpr(r.string("if"),c)}t.push(l),t.push(r.string(" "))}}function n(e){return"BlockStatement"===e.type||"MustacheStatement"===e.type}function i(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r],r)}function a(e){for(var t=e.split(" "),r=0,n=t.length;n>r;r++)t[r]=t[r].split(":");return t}e["default"]=t,t.prototype.transform=function(e){var t=this.syntax.builders,o=new this.syntax.Walker;return o.visit(e,function(e){if(n(e)){var o=[],s=[],u=void 0;if(i(e.hash.pairs,function(e,t){var r=e.key;"classBinding"===r||"classNameBindings"===r?(s.push(t),o.push(e)):"class"===r&&(u=e)}),0!==o.length){var l=[];u?(l.push(u.value),l.push(t.string(" "))):(u=t.pair("class",null),e.hash.pairs.push(u)),i(s,function(t){e.hash.pairs.splice(t,1)}),i(o,function(e){var n=e.value,i=(e.loc,[]);if("StringLiteral"===n.type){var o=a(n.original);r(o,i,t),l.push.apply(l,i)}});var c=t.hash();u.value=t.sexpr(t.string("concat"),l,c)}}}),e}}),e("ember-template-compiler/plugins/transform-top-level-components",["exports","ember-metal/features"],function(e,t){"use strict";function r(){this.syntax=null}function n(e,t,r){var n=e.loc,i=e.body;if(n&&1===n.start.line&&0===n.start.column){for(var a=void 0,o=void 0,s=0,u=0,l=i.length;l>u;u++){var c=i[u];if("TextNode"!==c.type||!/^[\s]*$/.test(c.chars)){if(s++>0)return!1;("ComponentNode"===c.type||"ElementNode"===c.type)&&(a=c,o=u)}}a&&"ComponentNode"===a.type&&t(a)}}r.prototype.transform=function(e){var t=this.syntax.builders;return n(e,function(e){"ComponentNode"===e.type&&(e.tag="@"+e.tag,e.isStatic=!0)},function(e){var r=e.attributes.some(function(e){return e.value.escaped===!1});if(e.modifiers.length||r)return e;var n=t.program(e.children),i=t.component("@<"+e.tag+">",e.attributes,n,e.loc);return i.isStatic=!0,i}),e},e["default"]=r}),e("ember-template-compiler/plugins/transform-unescaped-inline-link-to",["exports"],function(e){"use strict";function t(e){this.options=e,this.syntax=null}function r(e){return"MustacheStatement"===e.type&&"link-to"===e.path.original&&!e.escaped}e["default"]=t,t.prototype.transform=function(e){var t=this.syntax.builders,n=new this.syntax.Walker;return n.visit(e,function(e){r(e)&&(e.escaped=!0,e.params[0]=t.sexpr(t.string("-html-safe"),[e.params[0]]))}),e}}),e("ember-template-compiler/plugins",["exports"],function(e){"use strict";function t(e,t){if(!r[e])throw new Error('Attempting to register "'+t+'" as "'+e+'" which is not a valid HTMLBars plugin type.');r[e].push(t)}e.registerPlugin=t;var r={ast:[]};e["default"]=r}),e("ember-template-compiler/system/calculate-location-display",["exports"],function(e){"use strict";function t(e,t){var r=t||{},n=r.start||{},i=n.column,a=n.line,o="";return e&&(o+="'"+e+"' "),void 0!==a&&void 0!==i&&(e&&(o+="@ "),o+="L"+a+":C"+i),o&&(o="("+o+") "),o}e["default"]=t}),e("ember-template-compiler/system/compile",["exports","require","ember-template-compiler/system/compile_options","ember-template-compiler/system/template"],function(e,t,r,n){"use strict";var i;e["default"]=function(e,a){if(!i&&t.has("htmlbars-compiler/compiler")&&(i=t["default"]("htmlbars-compiler/compiler").compile),!i)throw new Error("Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.");var o=i(e,r["default"](a));return n["default"](o)}}),e("ember-template-compiler/system/compile_options",["exports","ember-metal/features","ember-metal/assign","ember-template-compiler/plugins"],function(e,t,r,n){"use strict";function i(e){var t=e.loc,r=e.body;if(!t||1!==t.start.line||0!==t.start.column)return!1;for(var n=void 0,i=0,a={},o=0,s=r.length;s>o;o++){var u=r[o];"TextNode"===u.type&&/^[\s]*$/.test(u.chars)||(i++>0&&(a["multiple-nodes"]=!0),"ComponentNode"===u.type||"ElementNode"===u.type?n=u:a["wrong-type"]=!0)}if(0===i)return{name:"missing-wrapper",problems:["empty-body"]};var l=Object.keys(a);return l.length?{name:"missing-wrapper",problems:l}:"ComponentNode"===n.type?!1:n.modifiers.length?{name:"modifiers",modifiers:n.modifiers.map(function(e){return e.path.original})}:n.attributes.some(function(e){return!e.value.escaped})?{name:"triple-curlies"}:!1}e["default"]=function(e){var t=!0,a=void 0;a=e===!0?{}:r["default"]({},e),a.disableComponentGeneration=t;var o={ast:n["default"].ast.slice()};return a.plugins&&a.plugins.ast&&(o.ast=o.ast.concat(a.plugins.ast)),a.plugins=o,a.buildMeta=function(e){return{fragmentReason:i(e),revision:"Ember@2.4.3",loc:e.loc,moduleName:a.moduleName}},a}}),e("ember-template-compiler/system/precompile",["exports","require","ember-template-compiler/system/compile_options"],function(e,t,r){"use strict";var n;e["default"]=function(e,i){if(!n&&t.has("htmlbars-compiler/compiler")&&(n=t["default"]("htmlbars-compiler/compiler").compileSpec),!n)throw new Error("Cannot call `compileSpec` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compileSpec`.");return n(e,r["default"](i))}}),e("ember-template-compiler/system/template",["exports","htmlbars-runtime/hooks"],function(e,t){"use strict";e["default"]=function(e){return e.render||(e=t.wrap(e)),e.isTop=!0,e.isMethod=!1,e}}),e("ember-views/compat/attrs-proxy",["exports","ember-metal/mixin","ember-metal/symbol","ember-metal/property_events"],function(e,t,r,n){"use strict";function i(e){return"You tried to look up an attribute directly on the component. This is deprecated. Use attrs."+e+" instead."}function a(e){return e&&e[o]}e.deprecation=i;var o=r["default"]("MUTABLE_CELL");e.MUTABLE_CELL=o;var s={attrs:null,getAttr:function(e){var t=this.attrs;if(t)return this.getAttrFor(t,e)},getAttrFor:function(e,t){var r=e[t];return a(r)?r.value:r},setAttr:function(e,t){var r=this.attrs,n=r[e];if(!a(n))throw new Error("You can't update attrs."+e+", because it's not mutable");n.update(t)},_propagateAttrsToThis:function(e){this._isDispatchingAttrs=!0,this.setProperties(e),this._isDispatchingAttrs=!1}};s[n.PROPERTY_DID_CHANGE]=function(e){this._isAngleBracket||this._isDispatchingAttrs||this._currentState&&this._currentState.legacyPropertyDidChange(this,e)},e["default"]=t.Mixin.create(s)}),e("ember-views/compat/metamorph_view",["exports","ember-metal/debug","ember-views/views/view","ember-metal/mixin"],function(e,t,r,n){"use strict";var i=n.Mixin.create({tagName:"",__metamorphType:"Ember._Metamorph",instrumentName:"metamorph",init:function(){this._super.apply(this,arguments)}});e._Metamorph=i,e["default"]=r["default"].extend(i,{__metamorphType:"Ember._MetamorphView"})}),e("ember-views/component_lookup",["exports","ember-metal/core","ember-metal/debug","ember-runtime/system/object","ember-htmlbars/system/lookup-helper","container/owner"],function(e,t,r,n,i,a){"use strict";e["default"]=n["default"].extend({invalidName:function(e){return i.CONTAINS_DASH_CACHE.get(e)?void 0:!0},lookupFactory:function(e,r){r=r||a.getOwner(this);var n="component:"+e,i="template:components/"+e,o=r&&r.hasRegistration(i);o&&r.inject(n,"layout",i);var s=r._lookupFactory(n);return o||s?(s||(r.register(n,t["default"].Component),s=r._lookupFactory(n)),s):void 0},componentFor:function(e,t,r){if(!this.invalidName(e)){var n="component:"+e;return t._lookupFactory(n,r)}},layoutFor:function(e,t,r){if(!this.invalidName(e)){var n="template:components/"+e;return t.lookup(n,r)}}})}),e("ember-views/components/component",["exports","ember-metal/debug","ember-metal/environment","ember-runtime/mixins/target_action_support","ember-views/views/view","ember-metal/property_get","ember-metal/property_set","ember-metal/is_none","ember-metal/utils","ember-metal/computed","ember-views/compat/attrs-proxy","container/owner"],function(e,t,r,n,i,a,o,s,u,l,c,m){"use strict";function h(e,t){return t&&t[c.MUTABLE_CELL]&&(t=t.value),t}var d=i["default"].extend(n["default"],{isComponent:!0,controller:null,context:null,instrumentName:"component",instrumentDisplay:l.computed(function(){return this._debugContainerKey?"{{"+this._debugContainerKey.split(":")[1]+"}}":void 0}),init:function(){if(this._super.apply(this,arguments),o.set(this,"controller",this),o.set(this,"context",this),!this.layout&&this.layoutName&&m.getOwner(this)){var e=a.get(this,"layoutName");this.layout=this.templateForName(e)}this.defaultLayout&&!this.layout&&(this.layout=this.defaultLayout)},template:null,layoutName:null,layout:null,targetObject:l.computed("controller",function(e){if(this._targetObject)return this._targetObject;if(this._controller)return this._controller;var t=a.get(this,"parentView");return t?a.get(t,"controller"):null}),sendAction:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];var i;void 0===e&&(e="action"),i=a.get(this,"attrs."+e)||a.get(this,e),i=h(this,i),void 0!==i&&("function"==typeof i?i.apply(void 0,r):this.triggerAction({action:i,actionContext:r}))},send:function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;t>n;n++)r[n-1]=arguments[n];var i,o=this.actions&&this.actions[e];if(o){var s=o.apply(this,r)===!0;if(!s)return}if(i=a.get(this,"target")){var l;(l=i).send.apply(l,arguments)}else if(!o)throw new Error(u.inspect(this)+" had no action handler for: "+e)}});d.reopenClass({isComponentFactory:!0}),e["default"]=d}),e("ember-views/index",["exports","ember-runtime","ember-views/system/jquery","ember-views/system/utils","ember-views/system/ext","ember-views/views/states","ember-metal-views/renderer","ember-views/views/core_view","ember-views/views/view","ember-views/views/container_view","ember-views/views/collection_view","ember-views/components/component","ember-views/system/event_dispatcher","ember-views/mixins/view_target_action_support","ember-views/component_lookup","ember-views/views/checkbox","ember-views/mixins/text_support","ember-views/views/text_field","ember-views/views/text_area","ember-views/views/select","ember-views/compat/metamorph_view","ember-views/views/legacy_each_view"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g,b,y,_,w){"use strict";t["default"].$=r["default"],t["default"].ViewTargetActionSupport=d["default"];var x=t["default"].ViewUtils={};x.isSimpleClick=n.isSimpleClick,x.getViewClientRects=n.getViewClientRects,x.getViewBoundingClientRect=n.getViewBoundingClientRect,t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT&&(t["default"].CoreView=s.DeprecatedCoreView,t["default"].View=u.DeprecatedView,t["default"].View.states=a.states,t["default"].View.cloneStates=a.cloneStates,t["default"].View._Renderer=o["default"],t["default"].ContainerView=l.DeprecatedContainerView,t["default"].CollectionView=c["default"]),t["default"]._Renderer=o["default"],t["default"].Checkbox=p["default"],t["default"].TextField=g["default"],t["default"].TextArea=b["default"],t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT&&(t["default"].Select=y.Select),t["default"].SelectOption=y.SelectOption,t["default"].SelectOptgroup=y.SelectOptgroup,t["default"].TextSupport=v["default"],t["default"].ComponentLookup=f["default"],t["default"].Component=m["default"],t["default"].EventDispatcher=h["default"],t["default"].ENV._ENABLE_LEGACY_VIEW_SUPPORT&&(t["default"]._Metamorph=_._Metamorph,t["default"]._MetamorphView=_["default"],t["default"]._LegacyEachView=w["default"]),e["default"]=t["default"]}),e("ember-views/mixins/aria_role_support",["exports","ember-metal/mixin"],function(e,t){"use strict";e["default"]=t.Mixin.create({attributeBindings:["ariaRole:role"],ariaRole:null})}),e("ember-views/mixins/class_names_support",["exports","ember-metal/debug","ember-metal/mixin","ember-runtime/system/native_array"],function(e,t,r,n){"use strict";var i=[];e["default"]=r.Mixin.create({concatenatedProperties:["classNames","classNameBindings"],init:function(){this._super.apply(this,arguments),this.classNameBindings=n.A(this.classNameBindings.slice()),this.classNames=n.A(this.classNames.slice())},classNames:["ember-view"],classNameBindings:i})}),e("ember-views/mixins/empty_view_support",["exports","ember-metal/mixin","ember-views/views/view","ember-metal/property_get","ember-metal/property_set","ember-metal/computed"],function(e,t,r,n,i,a){"use strict";e["default"]=t.Mixin.create({emptyViewClass:r["default"],emptyView:null,_emptyView:a.computed("emptyView","attrs.emptyViewClass","emptyViewClass",function(){var e=n.get(this,"emptyView"),t=this.getAttr("emptyViewClass"),r=n.get(this,"emptyViewClass"),a=n.get(this,"_itemViewInverse"),o=e||t;if(a&&o){if(o.extend)return o.extend({template:a});i.set(o,"template",a)}else if(a&&r)return r.extend({template:a});return o})})}),e("ember-views/mixins/instrumentation_support",["exports","ember-metal/mixin","ember-metal/computed","ember-metal/property_get"],function(e,t,r,n){"use strict";var i=t.Mixin.create({instrumentDisplay:r.computed(function(){return this.helperName?"{{"+this.helperName+"}}":void 0}),instrumentName:"view",instrumentDetails:function(e){e.template=n.get(this,"templateName"),this._super(e)}});e["default"]=i}),e("ember-views/mixins/legacy_child_views_support",["exports","ember-metal/mixin","ember-metal/property_get","ember-metal/property_set","container/owner"],function(e,t,r,n,i){"use strict";e["default"]=t.Mixin.create({linkChild:function(e){e[i.OWNER]||i.setOwner(e,i.getOwner(this)),r.get(e,"parentView")!==this&&(n.set(e,"parentView",this),e.trigger("parentViewDidChange")),e.ownerView=this.ownerView},unlinkChild:function(e){n.set(e,"parentView",null),e.trigger("parentViewDidChange")}})}),e("ember-views/mixins/legacy_view_support",["exports","ember-metal/debug","ember-metal/mixin","ember-metal/property_get"],function(e,t,r,n){"use strict";var i=r.Mixin.create({beforeRender:function(e){},afterRender:function(e){},mutateChildViews:function(e){for(var t,r=n.get(this,"childViews"),i=r.length;--i>=0;)t=r[i],e(this,t,i);return this},removeAllChildren:function(){return this.mutateChildViews(function(e,t){e.removeChild(t)})},destroyAllChildren:function(){return this.mutateChildViews(function(e,t){t.destroy()})},nearestChildOf:function(e){for(var t=n.get(this,"parentView");t;){if(n.get(t,"parentView")instanceof e)return t;t=n.get(t,"parentView")}},nearestInstanceOf:function(e){for(var t=n.get(this,"parentView");t;){if(t instanceof e)return t;t=n.get(t,"parentView")}},_contextDidChange:r.observer("context",function(){this.rerender()})});e["default"]=i}),e("ember-views/mixins/template_rendering_support",["exports","ember-metal/mixin"],function(e,t){"use strict";var n,i=t.Mixin.create({renderBlock:function(e,t){return void 0===n&&(n=r("ember-htmlbars/system/render-view")),n.renderHTMLBarsBlock(this,e,t)}});e["default"]=i}),e("ember-views/mixins/text_support",["exports","ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-runtime/mixins/target_action_support"],function(e,t,r,n,i){"use strict";function a(e,r,n){var i=t.get(r,"attrs."+e)||t.get(r,e),a=t.get(r,"onEvent"),o=t.get(r,"value");(a===e||"keyPress"===a&&"key-press"===e)&&r.sendAction("action",o),r.sendAction(e,o),(i||a===e)&&(t.get(r,"bubbles")||n.stopPropagation())}var o={13:"insertNewline",27:"cancel"},s=n.Mixin.create(i["default"],{value:"",attributeBindings:["autocapitalize","autocorrect","autofocus","disabled","form","maxlength","placeholder","readonly","required","selectionDirection","spellcheck","tabindex","title"],placeholder:null,disabled:!1,maxlength:null,init:function(){this._super.apply(this,arguments),this.on("paste",this,this._elementValueDidChange),this.on("cut",this,this._elementValueDidChange),this.on("input",this,this._elementValueDidChange)},action:null,onEvent:"enter",bubbles:!1,interpretKeyEvents:function(e){var t=o,r=t[e.keyCode];return this._elementValueDidChange(),r?this[r](e):void 0},_elementValueDidChange:function(){r.set(this,"value",this.readDOMAttr("value"))},change:function(e){this._elementValueDidChange(e)},insertNewline:function(e){a("enter",this,e),a("insert-newline",this,e)},cancel:function(e){a("escape-press",this,e)},focusIn:function(e){a("focus-in",this,e)},focusOut:function(e){this._elementValueDidChange(e),a("focus-out",this,e)},keyPress:function(e){a("key-press",this,e)},keyUp:function(e){this.interpretKeyEvents(e),this.sendAction("key-up",t.get(this,"value"),e)},keyDown:function(e){this.sendAction("key-down",t.get(this,"value"),e)}});e["default"]=s}),e("ember-views/mixins/view_child_views_support",["exports","ember-metal/debug","ember-metal/mixin","ember-metal/property_get","ember-metal/property_set","ember-metal/set_properties","ember-runtime/system/native_array","container/owner"],function(e,t,r,n,i,a,o,s){"use strict";var u=[];e["default"]=r.Mixin.create({childViews:u,init:function(){this._super.apply(this,arguments),this.childViews=o.A(this.childViews.slice()),this.ownerView=this.ownerView||this},appendChild:function(e){this.linkChild(e),this.childViews.push(e)},destroyChild:function(e){e.destroy()},removeChild:function(e){if(!this.isDestroying){this.unlinkChild(e);var t=n.get(this,"childViews"),r=t.indexOf(e);return-1!==r&&t.splice(r,1),this}},createChildView:function(e,t){if(!e)throw new TypeError("createChildViews first argument must exist");var r=s.getOwner(this);if(e.isView&&e.parentView===this&&s.getOwner(e)===r)return e;var n,o=t||{};if(o.parentView=this,o.renderer=this.renderer,o._viewRegistry=this._viewRegistry,e.isViewFactory)s.setOwner(o,r),n=e.create(o),n.viewName&&i.set(this,n.viewName,n);else if("string"==typeof e){var u="view:"+e,l=r._lookupFactory(u);n=l.create(o)}else n=e,s.setOwner(o,r),a["default"](n,o);return this.linkChild(n),n},linkChild:function(e){e[s.OWNER]||s.setOwner(e,s.getOwner(this)),e.parentView=this,e.ownerView=this.ownerView},unlinkChild:function(e){e.parentView=null}})}),e("ember-views/mixins/view_context_support",["exports","ember-metal/mixin","ember-metal/computed","ember-metal/property_get","ember-metal/property_set","ember-views/mixins/legacy_view_support","ember-metal/events"],function(e,t,r,n,i,a,o){"use strict";var s=t.Mixin.create(a["default"],{context:r.computed({get:function(){return n.get(this,"_context")},set:function(e,t){return i.set(this,"_context",t),t}}),_context:r.computed({get:function(){var e,t;return(t=n.get(this,"controller"))?t:(e=this.parentView,e?n.get(e,"_context"):null)},set:function(e,t){return t}}),_controller:null,controller:r.computed({get:function(){return this._controller?this._controller:this.parentView?n.get(this.parentView,"controller"):null},set:function(e,t){return this._controller=t,t}}),_legacyControllerDidChange:t.observer("controller",function(){this.childViews.forEach(function(e){return e.notifyPropertyChange("controller")})}),_notifyControllerChange:o.on("parentViewDidChange",function(){this.notifyPropertyChange("controller")})});e["default"]=s}),e("ember-views/mixins/view_state_support",["exports","ember-metal/debug","ember-metal/mixin"],function(e,t,r){"use strict";var n=r.Mixin.create({transitionTo:function(e){this._transitionTo(e)},_transitionTo:function(e){var t=this._currentState,r=this._currentState=this._states[e];this._state=e,t&&t.exit&&t.exit(this),r.enter&&r.enter(this)}});e["default"]=n}),e("ember-views/mixins/view_support",["exports","ember-metal/debug","ember-metal/error","ember-metal/property_get","ember-metal/run_loop","ember-metal/observer","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-runtime/system/core_object","ember-metal/features","ember-metal/symbol","container/owner","ember-views/system/jquery"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d){"use strict";function f(){return this}var p,v=m["default"]("INIT_WAS_CALLED");e["default"]=u.Mixin.create((p={concatenatedProperties:["attributeBindings"],isView:!0,templateName:null,layoutName:null,template:s.computed({get:function(){var e=n.get(this,"templateName"),t=this.templateForName(e,"template");return t||n.get(this,"defaultTemplate")},set:function(e,t){return void 0!==t?t:n.get(this,e)}}),layout:s.computed({get:function(e){var t=n.get(this,"layoutName"),r=this.templateForName(t,"layout");return r||n.get(this,"defaultLayout")},set:function(e,t){return t}}),templateForName:function(e,t){if(e){var n=h.getOwner(this);if(!n)throw new r["default"]("Container was not found when looking up a views template. This is most likely due to manually instantiating an Ember.View. See: http://git.io/EKPpnA");return n.lookup("template:"+e)}},nearestOfType:function(e){for(var t=n.get(this,"parentView"),r=e instanceof u.Mixin?function(t){return e.detect(t)}:function(t){return e.detect(t.constructor)};t;){if(r(t))return t;t=n.get(t,"parentView")}},nearestWithProperty:function(e){for(var t=n.get(this,"parentView");t;){if(e in t)return t;t=n.get(t,"parentView")}},rerender:function(){return this._currentState.rerender(this)},element:null,$:function(e){return this._currentState.$(this,e)},forEachChildView:function(e){var t=this.childViews;if(!t)return this;var r,n,i=t.length;for(n=0;i>n;n++)r=t[n],e(r);return this},appendTo:function(e){var t=this._environment?this._environment.options.jQuery:d["default"];if(t){var r=t(e);this.renderer.appendTo(this,r[0])}else{var r=e;this.renderer.appendTo(this,r)}return this},renderToElement:function(e){e=e||"body";var t=this.renderer._dom.createElement(e);return this.renderer.appendTo(this,t),t},replaceIn:function(e){var t=d["default"](e);return this.renderer.replaceIn(this,t[0]),this},append:function(){return this.appendTo(document.body)},remove:function(){this.removedFromDOM||this.destroyElement(),this._willInsert=!1},elementId:null,findElementInParentElement:function(e){var t="#"+this.elementId;return d["default"](t)[0]||d["default"](t,e)[0]},createElement:function(){return this.element?this:(this.renderer.createElement(this),this)},willInsertElement:f,didInsertElement:f,willClearRender:f,destroyElement:function(){return this._currentState.destroyElement(this)},willDestroyElement:f,parentViewDidChange:f,tagName:null,readDOMAttr:function(e){var t=this._renderNode.childNodes.filter(function(t){return t.attrName===e})[0];return t?t.getContent():null},init:function(){this._super.apply(this,arguments),this.elementId||(this.elementId=o.guidFor(this)),this.scheduledRevalidation=!1,this[v]=!0}},p[l.POST_INIT]=function(){this._super.apply(this,arguments),this.renderer.componentInitAttrs(this,this.attrs||{})},p.__defineNonEnumerable=function(e){this[e.name]=e.descriptor.value},p.revalidate=function(){this.renderer.revalidateTopLevelView(this),this.scheduledRevalidation=!1},p.scheduleRevalidate=function(e,t,r){return e&&!this._dispatching&&this.env.renderedNodes.has(e)?void i["default"].scheduleOnce("render",this,this.revalidate):void((!this.scheduledRevalidation||this._dispatching)&&(this.scheduledRevalidation=!0,i["default"].scheduleOnce("render",this,this.revalidate)))},p.templateRenderer=null,p.removeFromParent=function(){var e=this.parentView;return this.remove(),e&&e.removeChild(this),this},p.destroy=function(){var e=this.parentView,t=this.viewName;return this._super.apply(this,arguments)?(t&&e&&e.set(t,null),this.lastResult&&this.lastResult.destroy(),this):void 0},p.handleEvent=function(e,t){return this._currentState.handleEvent(this,e,t)},p._register=function(){this._viewRegistry[this.elementId]=this},p._unregister=function(){delete this._viewRegistry[this.elementId]},p.registerObserver=function(e,t,r,n){if(n||"function"!=typeof r||(n=r,r=null),e&&"object"==typeof e){var i=this._wrapAsScheduled(n);a.addObserver(e,t,r,i),this.one("willClearRender",function(){a.removeObserver(e,t,r,i)})}},p._wrapAsScheduled=function(e){var t=this,r=function(){t._currentState.invokeObserver(this,e)},n=function(){i["default"].scheduleOnce("render",this,r)};return n},p))}),e("ember-views/mixins/view_target_action_support",["exports","ember-metal/mixin","ember-runtime/mixins/target_action_support","ember-metal/alias"],function(e,t,r,n){"use strict";e["default"]=t.Mixin.create(r["default"],{target:n["default"]("controller"),actionContext:n["default"]("context")})}),e("ember-views/mixins/visibility_support",["exports","ember-metal/mixin","ember-metal/property_get","ember-metal/run_loop"],function(e,t,r,n){"use strict";function i(){return this}var a=t.Mixin.create({isVisible:!0,becameVisible:i,becameHidden:i,_isVisibleDidChange:t.observer("isVisible",function(){this._isVisible!==r.get(this,"isVisible")&&n["default"].scheduleOnce("render",this,this._toggleVisibility)}),_toggleVisibility:function(){var e=this.$(),t=r.get(this,"isVisible");this._isVisible!==t&&(this._isVisible=t,e&&(e.toggle(t),this._isAncestorHidden()||(t?this._notifyBecameVisible():this._notifyBecameHidden())))},_notifyBecameVisible:function(){this.trigger("becameVisible"),this.forEachChildView(function(e){var t=r.get(e,"isVisible");(t||null===t)&&e._notifyBecameVisible()})},_notifyBecameHidden:function(){this.trigger("becameHidden"),this.forEachChildView(function(e){var t=r.get(e,"isVisible");(t||null===t)&&e._notifyBecameHidden()})},_isAncestorHidden:function(){for(var e=r.get(this,"parentView");e;){if(r.get(e,"isVisible")===!1)return!0;e=r.get(e,"parentView")}return!1}});e["default"]=a}),e("ember-views/streams/class_name_binding",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/utils","ember-metal/streams/utils","ember-runtime/system/string"],function(e,t,r,n,i,a){"use strict";function o(e){var t,r,n=e.split(":"),i=n[0],a="";return n.length>1&&(t=n[1],3===n.length&&(r=n[2]),a=":"+t,r&&(a+=":"+r)),{path:i,classNames:a,className:""===t?void 0:t,falsyClassName:r}}function s(e,t,i,o){if(n.isArray(t)&&(t=0!==r.get(t,"length")),i||o)return i&&t?i:o&&!t?o:null;if(t===!0){var s=e.split(".");return a.dasherize(s[s.length-1])}return t!==!1&&null!=t?t:null}function u(e,t,r){r=r||"";var n=o(t);if(""===n.path)return s(n.path,!0,n.className,n.falsyClassName);var a=e.getStream(r+n.path);return i.chain(a,function(){return s(n.path,i.read(a),n.className,n.falsyClassName)})}e.parsePropertyPath=o,e.classStringForValue=s,e.streamifyClassNameBinding=u}),e("ember-views/streams/should_display",["exports","ember-metal/debug","ember-metal/property_get","ember-runtime/utils","ember-metal/streams/stream","ember-metal/streams/utils"],function(e,t,r,n,i,a){"use strict";function o(e){if(a.isStream(e))return new s(e);var t=typeof e;if("boolean"===t)return e;if(t&&"object"===t&&null!==e){var i=r.get(e,"isTruthy");if("boolean"==typeof i)return i}return n.isArray(e)?0!==r.get(e,"length"):!!e}e["default"]=o;var s=i["default"].extend({init:function(e){var t=e.get("isTruthy");this.init(),this.predicate=e,this.isTruthy=t,this.lengthDep=null,this.addDependency(e),this.addDependency(t)},compute:function(){var e=a.read(this.isTruthy);return"boolean"==typeof e?e:this.lengthDep?0!==this.lengthDep.getValue():!!a.read(this.predicate)},revalidate:function(){n.isArray(a.read(this.predicate))?this.lengthDep||(this.lengthDep=this.addMutableDependency(this.predicate.get("length"))):this.lengthDep&&(this.lengthDep.destroy(),this.lengthDep=null)}})}),e("ember-views/streams/utils",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/streams/utils","ember-runtime/mixins/controller"],function(e,t,r,n,i){"use strict";function a(e,t){var r,i=n.read(e);return r="string"==typeof i?t._lookupFactory("view:"+i):i}function o(e,t){var r=n.read(e),i=t.lookup("component-lookup:main");return i.lookupFactory(r,t)}function s(e){if(n.isStream(e)){var t=e.value();if("controller"!==e.label)for(;i["default"].detect(t);)t=r.get(t,"model");return t}return e}e.readViewFactory=a,e.readComponentFactory=o,e.readUnwrappedModel=s}),e("ember-views/system/action_manager",["exports"],function(e){"use strict";function t(){}t.registeredActions={},e["default"]=t}),e("ember-views/system/build-component-template",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/assign","htmlbars-runtime","ember-htmlbars/hooks/get-value","ember-metal/streams/utils"],function(e,t,r,n,i,a,o){"use strict";function s(e,t,r){var n,a,o=e.component,s=e.tagName,u=e.layout,c=e.isAngleBracket,g=e.isComponentElement,b=e.outerAttrs;if(void 0===o&&(o=null),u&&u.raw){var _=h(r.templates,r.scope,r.self,o);n=d(u.raw,_,r.self,o,t),a=u.raw.meta}else r.templates&&r.templates["default"]&&(n=m(r.templates["default"],r.scope,r.self,o),a=r.templates["default"].meta);if(o&&!o._isAngleBracket||g)if(s=s||p(o),""!==s){g&&(t=l(t,b));var w=v(o,c,t),x=i.internal.manualElement(s,w);x.meta=a,n=f(x,n,o)}else y(o);return{createdElement:!!s,block:n}}function u(e,t,r){var n={};for(var a in t){var o=t[a];"string"==typeof o?n[a]=o:n[a]=["value",o]}var s=r.templates["default"],u=i.internal.manualElement(e,n,s.isEmpty);if(s.isEmpty)return c(u,{scope:r.scope});var l=c(r.templates["default"],r);return c(u,{yieldTo:l,scope:r.scope})}function l(e,t){var r=n["default"]({},e,t);return e["class"]&&t["class"]&&(r["class"]=["subexpr","-join-classes",[["value",e["class"]],["value",t["class"]]],[]]),r}function c(e,t){return i.internal.blockFor(i.render,e,t)}function m(e,t,r,n){return c(e,{scope:t,self:r,options:{view:n}})}function h(e,t,r,n){if(e){var i={};for(var a in e)if(e.hasOwnProperty(a)){var o=e[a];o&&(i[a]=m(e[a],t,r,n))}return i}}function d(e,t,r,n,i){return c(e,{yieldTo:t,self:r||n,options:{view:n,attrs:i}})}function f(e,t,r){return c(e,{yieldTo:t,self:r,options:{view:r}})}function p(e){var t=e.tagName;return null!==t&&"object"==typeof t&&t.isDescriptor&&(t=r.get(e,"tagName")),(null===t||void 0===t)&&(t=e._defaultTagName||"div"), +t}function v(e,t,n){var i,o,s={},u=e.attributeBindings,l=e.isComponent?"":"view.";if(n.id&&a["default"](n.id)?(s.id=a["default"](n.id),e.elementId=s.id):s.id=e.elementId,u)for(i=0,o=u.length;o>i;i++){var c,m,h=u[i],d=h.indexOf(":");if(-1!==d){var f=h.substring(0,d);c=h.substring(d+1),m=["get",""+l+f]}else n[h]?(c=h,m=["value",n[h]]):(c=h,m=["get",""+l+h]);s[c]=m}if(t)for(var p in n){var v=n[p];v&&("string"==typeof v||v.isConcat)&&(s[p]=["value",v])}n.tagName&&(e.tagName=n.tagName);var b=g(e,n,l);if(b&&(s["class"]=b),r.get(e,"isVisible")===!1){var y=["subexpr","-html-safe",["display: none;"],[]],_=s.style;_?s.style=["subexpr","concat",[_," ",y],[]]:s.style=y}return s}function g(e,t,n){var i,a,s=[],u=r.get(e,"classNames"),l=r.get(e,"classNameBindings");if(t["class"]&&(o.isStream(t["class"])?s.push(["subexpr","-normalize-class",[["value",t["class"].path],["value",t["class"]]],[]]):s.push(t["class"])),t.classBinding&&b(t.classBinding.split(" "),s,n),u)for(i=0,a=u.length;a>i;i++)s.push(u[i]);return l&&b(l,s,n),g.length?["subexpr","-join-classes",s,[]]:void 0}function b(e,t,r){var n,i;for(n=0,i=e.length;i>n;n++){var a=e[n],o=a.split(":"),s=o[0],u=o[1],l=o[2];if(""!==s){var c=""+r+s;t.push(["subexpr","-normalize-class",[["value",s],["get",c]],["activeClass",u,"inactiveClass",l]])}else t.push(u)}}function y(e){}e["default"]=s,e.buildHTMLTemplate=u}),e("ember-views/system/event_dispatcher",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/is_none","ember-metal/run_loop","ember-runtime/system/object","ember-views/system/jquery","ember-views/system/action_manager","ember-views/views/view","ember-metal/assign","container/owner","ember-metal/environment"],function(e,t,r,n,i,a,o,s,u,l,c,m,h){"use strict";var d="ember-application";e["default"]=o["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",canDispatchToEventManager:!0,init:function(){this._super()},setup:function(e,t){var a,o=this._finalEvents=c["default"]({},r.get(this,"events"),e);i["default"](t)||n.set(this,"rootElement",t),t=s["default"](r.get(this,"rootElement")),t.addClass(d);for(a in o)o.hasOwnProperty(a)&&this.setupHandler(t,a,o[a])},setupHandler:function(e,t,r){var n=this,i=m.getOwner(this),a=i&&i.lookup("-view-registry:main")||l["default"].views;null!==r&&(e.on(t+".ember",".ember-view",function(e,t){var i=a[this.id],o=!0,s=n.canDispatchToEventManager?n._findNearestEventManager(i,r):null;return s&&s!==t?o=n._dispatchEvent(s,e,r,i):i&&(o=n._bubbleEvent(i,e,r)),o}),e.on(t+".ember","[data-ember-action]",function(e){var t=s["default"](e.currentTarget).attr("data-ember-action"),n=u["default"].registeredActions[t];if(n)for(var i=0,a=n.length;a>i;i++){var o=n[i];if(o&&o.eventName===r)return o.handler(e)}}))},_findNearestEventManager:function(e,t){for(var n=null;e&&(n=r.get(e,"eventManager"),!n||!n[t]);)e=r.get(e,"parentView");return n},_dispatchEvent:function(e,t,r,n){var i=!0,o=e[r];return"function"==typeof o?(i=a["default"](e,o,t,n),t.stopPropagation()):i=this._bubbleEvent(n,t,r),i},_bubbleEvent:function(e,t,r){return e.handleEvent(r,t)},destroy:function(){var e=r.get(this,"rootElement");return s["default"](e).off(".ember","**").removeClass(d),this._super.apply(this,arguments)},toString:function(){return"(EventDispatcher)"}})}),e("ember-views/system/ext",["exports","ember-metal/run_loop"],function(e,t){"use strict";t["default"]._addQueue("render","actions"),t["default"]._addQueue("afterRender","render")}),e("ember-views/system/jquery",["exports","ember-metal/core","ember-metal/environment"],function(e,t,n){"use strict";var i;if(n["default"].hasDOM&&(i=t["default"].imports&&t["default"].imports.jQuery||a&&a.jQuery,i||"function"!=typeof r||(i=r("jquery")),i)){var o=["dragstart","drag","dragenter","dragleave","dragover","drop","dragend"];o.forEach(function(e){i.event.fixHooks[e]={props:["dataTransfer"]}})}e["default"]=i}),e("ember-views/system/lookup_partial",["exports","ember-metal/debug","ember-metal/error"],function(e,t,r){"use strict";function n(e,t){if(null!=t){var r=t.split("/"),n=r[r.length-1];r[r.length-1]="_"+n;var a=r.join("/"),o=i(e,a,t);return o}}function i(e,t,n){if(n){if(!e.owner)throw new r["default"]("Container was not found when looking up a views template. This is most likely due to manually instantiating an Ember.View. See: http://git.io/EKPpnA");return e.owner.lookup("template:"+t)||e.owner.lookup("template:"+n)}}e["default"]=n}),e("ember-views/system/platform",["exports","ember-metal/environment"],function(e,t){"use strict";var r=t["default"].hasDOM&&function(){var e=document.createElement("div"),t=document.createElement("input");return t.setAttribute("name","foo"),e.appendChild(t),!!e.innerHTML.match("foo")}();e.canSetNameOnInputs=r}),e("ember-views/system/utils",["exports"],function(e){"use strict";function t(e){var t=e.shiftKey||e.metaKey||e.altKey||e.ctrlKey,r=e.which>1;return!t&&!r}function r(e){var t=document.createRange();return t.setStartBefore(e._renderNode.firstNode),t.setEndAfter(e._renderNode.lastNode),t}function n(e){var t=r(e);return t.getClientRects()}function i(e){var t=r(e);return t.getBoundingClientRect()}e.isSimpleClick=t,e.getViewClientRects=n,e.getViewBoundingClientRect=i}),e("ember-views/views/checkbox",["exports","ember-metal/property_get","ember-metal/property_set","ember-views/components/component"],function(e,t,r,n){"use strict";e["default"]=n["default"].extend({instrumentDisplay:'{{input type="checkbox"}}',classNames:["ember-checkbox"],tagName:"input",attributeBindings:["type","checked","indeterminate","disabled","tabindex","name","autofocus","required","form"],type:"checkbox",checked:!1,disabled:!1,indeterminate:!1,didInsertElement:function(){this._super.apply(this,arguments),t.get(this,"element").indeterminate=!!t.get(this,"indeterminate")},change:function(){r.set(this,"checked",this.$().prop("checked"))}})}),e("ember-views/views/collection_view",["exports","ember-metal/core","ember-metal/debug","ember-views/views/container_view","ember-views/views/view","ember-runtime/mixins/array","ember-metal/property_get","ember-metal/property_set","ember-metal/computed","ember-metal/mixin","ember-views/streams/utils","ember-views/mixins/empty_view_support","container/owner"],function(e,t,r,n,i,a,o,s,u,l,c,m,h){"use strict";function d(e,t){var r={};for(var n in t)if("itemViewClass"!==n&&"itemController"!==n&&"itemClassBinding"!==n&&t.hasOwnProperty(n)){var i=n.match(/^item(.)(.*)$/);if(i){var a=i[1].toLowerCase()+i[2];"class"===a||"classNames"===a?r.classNames=[t[n]]:r[a]=t[n],delete t[n]}}return e&&(r.template=e),r}function f(){}var p=n["default"].extend(m["default"],{content:null,itemViewClass:i["default"],init:function(){var e=this._super.apply(this,arguments);return this._contentDidChange(),e},_contentDidChange:l.observer("content",function(){var e=this._prevContent;e&&a.removeArrayObserver(e,this);var t=e?o.get(e,"length"):0;this.arrayWillChange(e,0,t);var r=o.get(this,"content");r&&(this._prevContent=r,this._assertArrayLike(r),a.addArrayObserver(r,this)),t=r?o.get(r,"length"):0,this.arrayDidChange(r,0,null,t)}),_assertArrayLike:function(e){},destroy:function(){if(this._super.apply(this,arguments)){var e=o.get(this,"content");return e&&a.removeArrayObserver(e,this),this._createdEmptyView&&this._createdEmptyView.destroy(),this}},arrayWillChange:function(e,t,r){this.replace(t,r,[])},arrayDidChange:function(e,t,r,n){var i,s,u,l,m,d,f=[];if(l=e?o.get(e,"length"):0){for(d=this._itemViewProps||{},m=this.getAttr("itemViewClass")||o.get(this,"itemViewClass"),m=c.readViewFactory(m,h.getOwner(this)),u=t;t+n>u;u++)s=a.objectAt(e,u),d._context=this.keyword?this.get("context"):s,d.content=s,d.contentIndex=u,i=this.createChildView(m,d),f.push(i);this.replace(t,0,f)}},createChildView:function(e,t){var r=this._super(e,t),n=o.get(r,"tagName");return(null===n||void 0===n)&&(n=p.CONTAINER_MAP[o.get(this,"tagName")],s.set(r,"tagName",n)),r},_willRender:function(){var e=this.attrs,t=d(this._itemViewTemplate,e);this._itemViewProps=t;for(var r=o.get(this,"childViews"),n=0,i=r.length;i>n;n++)r[n].setProperties(t);"content"in e&&s.set(this,"content",this.getAttr("content")),"emptyView"in e&&s.set(this,"emptyView",this.getAttr("emptyView"))},_emptyViewTagName:u.computed("tagName",function(){var e=o.get(this,"tagName");return p.CONTAINER_MAP[e]||"div"})});p.CONTAINER_MAP={ul:"li",ol:"li",table:"tr",thead:"tr",tbody:"tr",tfoot:"tr",tr:"td",select:"option"};var v=p.CONTAINER_MAP;e.CONTAINER_MAP=v;var g=p.extend({init:function(){f(),this._super.apply(this,arguments)}});g.reopen=function(){return f(),p.reopen.apply(p,arguments),this},g.CONTAINER_MAP=v,e["default"]=p,e.DeprecatedCollectionView=g}),e("ember-views/views/container_view",["exports","ember-metal/core","ember-metal/debug","ember-runtime/mixins/mutable_array","ember-runtime/system/native_array","ember-views/views/view","ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-metal/events","ember-htmlbars/templates/container-view"],function(e,t,r,n,i,a,o,s,u,l,c){"use strict";function m(){}c["default"].meta.revision="Ember@2.4.3";var h=a["default"].extend(n["default"],{willWatchProperty:function(e){},init:function(){var e=this;this._super.apply(this,arguments),this._prevCurrentView=void 0;var t=o.get(this,"childViews"),r=this.childViews=i.A();t.forEach(function(t,n){var i;"string"==typeof t?(i=o.get(e,t),i=e.createChildView(i),s.set(e,t,i)):i=e.createChildView(t),r[n]=i});var n=o.get(this,"currentView");n&&(r.length||(r=this.childViews=i.A(this.childViews.slice())),r.push(this.createChildView(n))),s.set(this,"length",r.length)},appendChild:function(e){e.parentView!==this&&this.linkChild(e)},_currentViewDidChange:u.observer("currentView",function(){var e=this._prevCurrentView;e&&e.destroy();var t=o.get(this,"currentView");this._prevCurrentView=t,t&&this.pushObject(t)}),layout:c["default"],replace:function(e,t){var r=this,n=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],i=o.get(n,"length"),a=o.get(this,"childViews");this.arrayContentWillChange(e,t,i);var u=a.slice(e,e+t);return u.forEach(function(e){return r.unlinkChild(e)}),n.forEach(function(e){return r.linkChild(e)}),a.splice.apply(a,[e,t].concat(n)),this.notifyPropertyChange("childViews"),this.arrayContentDidChange(e,t,i),s.set(this,"length",a.length),this},objectAt:function(e){return this.childViews[e]},_triggerChildWillDestroyElement:l.on("willDestroyElement",function(){var e=this.childViews;if(e)for(var t=0;ti;i++)n[i-1]=arguments[i];return t.apply(this,n)}},has:function(e){return"function"===o.typeOf(this[e])||this._super(e)},destroy:function(){return this._super.apply(this,arguments)?(this._currentState.cleanup(this),!this.ownerView._destroyingSubtreeForView&&this._renderNode&&l.internal.clearMorph(this._renderNode,this.ownerView.env,!0),this):void 0},clearRenderedChildren:m,_transitionTo:m,destroyElement:m});a.deprecateUnderscoreActions(f),f.reopenClass({isViewFactory:!0});var p=f.extend({init:function(){this._super.apply(this,arguments)}});e.DeprecatedCoreView=p;var v;e["default"]=f}),e("ember-views/views/legacy_each_view",["exports","ember-htmlbars/templates/legacy-each","ember-metal/property_get","ember-metal/computed","ember-views/views/view","ember-views/views/collection_view","ember-views/mixins/empty_view_support"],function(e,t,r,n,i,a,o){"use strict";e["default"]=i["default"].extend(o["default"],{template:t["default"],tagName:"",_arrangedContent:n.computed("attrs.content",function(){return this.getAttr("content")}),_itemTagName:n.computed(function(){var e=r.get(this,"tagName");return a.CONTAINER_MAP[e]})})}),e("ember-views/views/select",["exports","ember-metal/replace","ember-metal/property_get","ember-metal/property_set","ember-views/views/view","ember-runtime/utils","ember-metal/is_none","ember-metal/computed","ember-runtime/system/native_array","ember-metal/mixin","ember-metal/properties","ember-htmlbars/templates/select","ember-htmlbars/templates/select-option","ember-htmlbars/templates/select-optgroup","ember-runtime/mixins/array"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f){"use strict";function p(e,t){return void 0===t?[]:t.map(function(t){return e.indexOf(t)})}var v=m["default"],g=i["default"].extend({instrumentDisplay:"Ember.SelectOption",tagName:"option",attributeBindings:["value","selected"],defaultTemplate:h["default"],content:null,_willRender:function(){this.labelPathDidChange(),this.valuePathDidChange()},selected:s.computed("attrs.content","attrs.selection",function(){var e=r.get(this,"value"),t=r.get(this,"attrs.selection");return r.get(this,"attrs.multiple")?t&&t.indexOf(e)>-1:e==r.get(this,"attrs.parentValue")}),labelPathDidChange:l.observer("attrs.optionLabelPath",function(){var e=r.get(this,"attrs.optionLabelPath");c.defineProperty(this,"label",s.computed.alias(e))}),valuePathDidChange:l.observer("attrs.optionValuePath",function(){var e=r.get(this,"attrs.optionValuePath");c.defineProperty(this,"value",s.computed.alias(e))})}),b=i["default"].extend({instrumentDisplay:"Ember.SelectOptgroup",tagName:"optgroup",defaultTemplate:d["default"],attributeBindings:["label"]}),y=i["default"].extend({instrumentDisplay:"Ember.Select",tagName:"select",classNames:["ember-select"],defaultTemplate:v,attributeBindings:["autofocus","autocomplete","disabled","form","multiple","name","required","size","tabindex"],multiple:!1,disabled:!1,required:!1,content:null,selection:null,value:s.computed("_valuePath","selection",{get:function(e){var t=r.get(this,"_valuePath");return t?r.get(this,"selection."+t):r.get(this,"selection")},set:function(e,t){return t}}),prompt:null,optionLabelPath:"content",optionValuePath:"content",optionGroupPath:null,groupView:b,groupedContent:s.computed("optionGroupPath","content.[]",function(){var e=r.get(this,"optionGroupPath"),t=u.A(),n=r.get(this,"content")||[];return n.forEach(function(n){var i=r.get(n,e);r.get(t,"lastObject.label")!==i&&t.pushObject({label:i,content:u.A()}),r.get(t,"lastObject.content").push(n)}),t}),optionView:g,_change:function(e){r.get(this,"multiple")?this._changeMultiple(e):this._changeSingle(e)},selectionDidChange:l.observer("selection.[]",function(){var e=r.get(this,"selection");if(r.get(this,"multiple")){if(!a.isArray(e))return void n.set(this,"selection",u.A([e]));this._selectionDidChangeMultiple()}else this._selectionDidChangeSingle()}),valueDidChange:l.observer("value",function(){var e,t=r.get(this,"content"),n=r.get(this,"value"),i=r.get(this,"optionValuePath").replace(/^content\.?/,""),a=i?r.get(this,"selection."+i):r.get(this,"selection");n!==a&&(e=t?t.find(function(e){return n===(i?r.get(e,i):e)}):null,this.set("selection",e))}),_setDefaults:function(){var e=r.get(this,"selection"),t=r.get(this,"value");o["default"](e)||this.selectionDidChange(),o["default"](t)||this.valueDidChange(),o["default"](e)&&this._change(!1)},_changeSingle:function(e){var t=this.get("value"),i=e!==!1?this.$()[0].selectedIndex:this._selectedIndex(t),a=r.get(this,"content"),o=r.get(this,"prompt");if(a&&r.get(a,"length")){if(o&&0===i)return void n.set(this,"selection",null);o&&(i-=1),n.set(this,"selection",f.objectAt(a,i))}},_selectedIndex:function(e){var t=arguments.length<=1||void 0===arguments[1]?0:arguments[1],n=r.get(this,"contentValues"),i=n.indexOf(e),a=r.get(this,"prompt");return a&&(i+=1),0>i&&(i=t),i},_changeMultiple:function(e){var i=e!==!1?this.$("option:selected"):[],o=r.get(this,"prompt"),s=o?1:0,u=r.get(this,"content"),l=r.get(this,"selection");if(u&&i){var c=i.map(function(){return this.index-s}),m=u.objectsAt([].slice.call(c));a.isArray(l)?t["default"](l,0,r.get(l,"length"),m):n.set(this,"selection",m)}},_selectionDidChangeSingle:function(){var e=r.get(this,"value"),t=this;e&&e.then?e.then(function(n){r.get(t,"value")===e&&t._setSelectedIndex(n)}):this._setSelectedIndex(e)},_setSelectedIndex:function(e){var t=r.get(this,"element");t&&(t.selectedIndex=this._selectedIndex(e,-1))},_valuePath:s.computed("optionValuePath",function(){var e=r.get(this,"optionValuePath");return e.replace(/^content\.?/,"")}),contentValues:s.computed("content.[]","_valuePath",function(){var e=r.get(this,"_valuePath"),t=r.get(this,"content")||[];return e?t.map(function(t){return r.get(t,e)}):t.slice()}),_selectionDidChangeMultiple:function(){var e,t=r.get(this,"content"),n=r.get(this,"selection"),i=t?p(t,n):[-1],a=r.get(this,"prompt"),o=a?1:0,s=this.$("option");s&&s.each(function(){e=this.index>-1?this.index-o:-1,this.selected=i.indexOf(e)>-1})},_willRender:function(){this._setDefaults()},init:function(){this._super.apply(this,arguments),this.on("change",this,this._change)}});e["default"]=y,e.Select=y,e.SelectOption=g,e.SelectOptgroup=b}),e("ember-views/views/states/default",["exports","ember-metal/error","ember-metal/property_get","ember-views/compat/attrs-proxy"],function(e,t,r,n){"use strict";e["default"]={appendChild:function(){throw new t["default"]("You can't use appendChild outside of the rendering process")},$:function(){return void 0},getElement:function(){return null},legacyPropertyDidChange:function(e,t){var i=e.attrs;if(i&&t in i){var a=i[t];if(a&&a[n.MUTABLE_CELL]){var o=r.get(e,t);if(o===a.value)return;a.update(o)}}},handleEvent:function(){return!0},cleanup:function(){},destroyElement:function(){},rerender:function(e){e.renderer.ensureViewNotRendering(e)},invokeObserver:function(){}}}),e("ember-views/views/states/destroying",["exports","ember-metal/assign","ember-views/views/states/default","ember-metal/error"],function(e,t,r,n){"use strict";var i=Object.create(r["default"]);t["default"](i,{appendChild:function(){throw new n["default"]("You can't call appendChild on a view being destroyed")},rerender:function(){throw new n["default"]("You can't call rerender on a view being destroyed")},destroyElement:function(){throw new n["default"]("You can't call destroyElement on a view being destroyed")}}),e["default"]=i}),e("ember-views/views/states/has_element",["exports","ember-views/views/states/default","ember-metal/assign","ember-views/system/jquery","ember-metal/run_loop","ember-metal/property_get","htmlbars-runtime"],function(e,t,r,n,i,a,o){"use strict";var s=Object.create(t["default"]);r["default"](s,{$:function(e,t){var r=e.element;return t?n["default"](t,r):n["default"](r)},getElement:function(e){var t=a.get(e,"parentView");return t&&(t=a.get(t,"element")),t?e.findElementInParentElement(t):n["default"]("#"+a.get(e,"elementId"))[0]},rerender:function(e){e.renderer.ensureViewNotRendering(e);var t=e._renderNode;t.isDirty=!0,o.internal.visitChildren(t.childNodes,function(e){e.getState().manager&&(e.shouldReceiveAttrs=!0),e.isDirty=!0}),t.ownerNode.emberView.scheduleRevalidate(t,e.toString(),"rerendering")},cleanup:function(e){e._currentState.destroyElement(e)},destroyElement:function(e){return e.renderer.remove(e,!1),e},handleEvent:function(e,t,r){return e.has(t)?i["default"].join(e,e.trigger,t,r):!0},invokeObserver:function(e,t){t.call(e)}}),e["default"]=s}),e("ember-views/views/states/in_dom",["exports","ember-metal/debug","ember-metal/assign","ember-metal/error","ember-metal/observer","ember-views/views/states/has_element"],function(e,t,r,n,i,a){"use strict";var o=Object.create(a["default"]);r["default"](o,{enter:function(e){""!==e.tagName&&e._register()},exit:function(e){e._unregister()}}),e["default"]=o}),e("ember-views/views/states/pre_render",["exports","ember-views/views/states/default","ember-metal/assign"],function(e,t,r){"use strict";var n=Object.create(t["default"]);r["default"](n,{legacyPropertyDidChange:function(e,t){}}),e["default"]=n}),e("ember-views/views/states",["exports","ember-metal/assign","ember-views/views/states/default","ember-views/views/states/pre_render","ember-views/views/states/has_element","ember-views/views/states/in_dom","ember-views/views/states/destroying"],function(e,t,r,n,i,a,o){"use strict";function s(e){var r={};r._default={},r.preRender=Object.create(r._default),r.destroying=Object.create(r._default),r.hasElement=Object.create(r._default),r.inDOM=Object.create(r.hasElement);for(var n in e)e.hasOwnProperty(n)&&t["default"](r[n],e[n]);return r}e.cloneStates=s;var u={_default:r["default"],preRender:n["default"],inDOM:a["default"],hasElement:i["default"],destroying:o["default"]};e.states=u}),e("ember-views/views/text_area",["exports","ember-views/components/component","ember-views/mixins/text_support"],function(e,t,r){"use strict";e["default"]=t["default"].extend(r["default"],{instrumentDisplay:"{{textarea}}",classNames:["ember-text-area"],tagName:"textarea",attributeBindings:["rows","cols","name","selectionEnd","selectionStart","wrap","lang","dir","value"],rows:null,cols:null})}),e("ember-views/views/text_field",["exports","ember-metal/computed","ember-metal/environment","ember-views/components/component","ember-views/mixins/text_support","ember-metal/empty_object"],function(e,t,r,n,i,a){"use strict";function o(e){if(e in u)return u[e];if(!r["default"].hasDOM)return u[e]=e,e;s||(s=document.createElement("input"));try{s.type=e}catch(t){}return u[e]=s.type===e}var s,u=new a["default"];e["default"]=n["default"].extend(i["default"],{instrumentDisplay:'{{input type="text"}}',classNames:["ember-text-field"],tagName:"input",attributeBindings:["accept","autocomplete","autosave","dir","formaction","formenctype","formmethod","formnovalidate","formtarget","height","inputmode","lang","list","max","min","multiple","name","pattern","size","step","type","value","width"],defaultLayout:null,value:"",type:t.computed({get:function(){return"text"},set:function(e,t){var r="text";return o(t)&&(r=t),r}}),size:null,pattern:null,min:null,max:null})}),e("ember-views/views/view",["exports","ember-metal/core","ember-metal/debug","ember-views/system/ext","ember-views/views/core_view","ember-views/mixins/view_context_support","ember-views/mixins/view_child_views_support","ember-views/mixins/legacy_child_views_support","ember-views/mixins/view_state_support","ember-views/mixins/template_rendering_support","ember-views/mixins/class_names_support","ember-views/mixins/legacy_view_support","ember-views/mixins/instrumentation_support","ember-views/mixins/aria_role_support","ember-views/mixins/visibility_support","ember-views/compat/attrs-proxy","ember-views/mixins/view_support","ember-metal/deprecate_property"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v,g){"use strict";function b(){}var y=i["default"].extend(a["default"],o["default"],s["default"],u["default"],l["default"],c["default"],m["default"],h["default"],f["default"],p["default"],d["default"],v["default"],{init:function(){this._super.apply(this,arguments),this._viewRegistry||(this._viewRegistry=y.views)},_classStringForProperty:function(e){return y._classStringForValue(e.path,e.stream.value(),e.className,e.falsyClassName)}});g.deprecateProperty(y.prototype,"currentState","_currentState",{id:"ember-view.current-state",until:"2.3.0",url:"http://emberjs.com/deprecations/v2.x/#toc_ember-component-currentstate"}),y.reopenClass({views:{},childViewsProperty:o.childViewsProperty});var _=y.extend({init:function(){b(),this._super.apply(this,arguments)}});_.reopen=function(){return b(),y.reopen.apply(y,arguments),this},e["default"]=y,e.ViewContextSupport=a["default"],e.ViewChildViewsSupport=o["default"],e.ViewStateSupport=u["default"],e.TemplateRenderingSupport=l["default"],e.ClassNamesSupport=c["default"],e.DeprecatedView=_}),e("htmlbars-runtime/expression-visitor",["exports"],function(e){"use strict";function t(e,t,r){for(var i=[],a=0,o=e.length;o>a;a++)i.push(n(e[a],t,r).value);return i}function r(e,t,r){for(var i={},a=0,o=e.length;o>a;a+=2){var s=e[a],u=e[a+1];i[s]=n(u,t,r).value}return i}function n(e,t,r){var n={value:null};return"object"!=typeof e||null===e?n.value=e:n.value=i(e,t,r),n}function i(e,t,r){switch(e[0]){case"value":return e[1];case"get":return a(e,t,r);case"subexpr":return o(e,t,r);case"concat":return s(e,t,r)}}function a(e,t,r){var n=e[1];return t.hooks.get(t,r,n)}function o(e,n,i){var a=e[1],o=e[2],s=e[3],u=t(o,n,i),l=r(s,n,i);return n.hooks.subexpr(n,i,a,u,l)}function s(e,r,n){var i=e[1],a=t(i,r,n);return r.hooks.concat(r,a)}e.acceptParams=t,e.acceptHash=r}),e("htmlbars-runtime/hooks",["exports","htmlbars-runtime/render","morph-range/morph-list","htmlbars-util/object-utils","htmlbars-util/morph-utils","htmlbars-util/template-utils"],function(e,t,r,n,i,a){"use strict";function o(e){return null===e?null:{meta:e.meta,arity:e.arity,raw:e,render:function(r,n,i,a){var o=n.hooks.createFreshScope(),s=i&&i.contextualElement,u=new t.RenderOptions(null,r,a,s);return t["default"](e,n,o,u)}}}function s(e,t,r,n,i,a){if(!e)return{};var o=u(e,t,r,n,i,a);return{meta:e.meta,arity:e.arity,"yield":o,yieldItem:l(e,t,r,n,i,a),raw:e,render:function(e,t){o(t,e)}}}function u(e,r,n,i,o,s){return function(u,l){o.morphToClear=null,i.morphList&&(a.clearMorphList(i.morphList,i,r),o.morphListToClear=null);var m=n;if(i.lastYielded&&c(e,i.lastYielded))return i.lastResult.revalidateWith(r,void 0,l,u,s);(void 0!==l||null===n||e.arity)&&(m=r.hooks.createChildScope(n)),i.lastYielded={self:l,template:e,shadowTemplate:null};var h=new t.RenderOptions(i,l,u);t["default"](e,r,m,h)}}function l(e,n,i,a,o,s){function l(e){for(var t=c;t.key!==e;)m[t.key]=t,t=t.nextMorph;return c=t.nextMorph,t}var c=null,m={},h=a.morphList;return h&&(c=h.firstChildMorph),function(h,d,f){if("string"!=typeof h)throw new Error("You must provide a string key when calling `yieldItem`; you provided "+h);o.morphListToClear=null,a.lastYielded=null;var p,v;a.morphList||(a.morphList=new r["default"],a.morphMap={},a.setMorphList(a.morphList)),p=a.morphList,v=a.morphMap;var g=o.handledMorphs,b=void 0;if(h in g){var y=o.collisions;void 0===y&&(y=o.collisions={});var _=0|y[h];y[h]=++_,b=h+"--z8mS2hvDW0A--"+_}else b=h;if(c&&c.key===b)u(e,n,i,c,o,s)(d,f),c=c.nextMorph,g[b]=c;else if(void 0!==v[b]){var w=v[b];b in m?p.insertBeforeMorph(w,c):l(b),g[w.key]=w,u(e,n,i,w,o,s)(d,f)}else{var x=t.createChildMorph(n.dom,a);x.key=b,v[b]=g[b]=x,p.insertBeforeMorph(x,c),u(e,n,i,x,o,s)(d,f)}o.morphListToPrune=p,a.childNodes=null}}function c(e,t){return!t.shadowTemplate&&e===t.template}function m(e,t,r,n,i,o){var u=i.lastResult?i:null,l=new a.RenderState(u,i.morphList||null);return{templates:{template:s(e,r,n,i,l,o),inverse:s(t,r,n,i,l,o)},renderState:l}}function h(e){return{arity:e.template.arity,"yield":e.template["yield"],yieldItem:e.template.yieldItem,yieldIn:e.template.yieldIn}}function d(e,t){return t?e.hooks.createChildScope(t):e.hooks.createFreshScope()}function f(){return{self:null,blocks:{},locals:{},localPresent:{}}}function p(e){return e.hooks.createFreshScope()}function v(e){var t=Object.create(e);return t.locals=Object.create(e.locals),t.localPresent=Object.create(e.localPresent),t.blocks=Object.create(e.blocks),t}function g(e,t,r){t.self=r}function b(e,t,r){e.hooks.bindSelf(e,t,r)}function y(e,t,r,n){t.localPresent[r]=!0,t.locals[r]=n}function _(e,t,r,n){e.hooks.bindLocal(e,t,r,n)}function w(e,t,r){var n=arguments.length<=3||void 0===arguments[3]?"default":arguments[3];t.blocks[n]=r}function x(e,t,r,n,i,a,o,s,u){E(e,t,r,n,i,a,o,s,u)||C(e,t,r,n,i,a,o,s,u)}function C(e,t,r,n,i,a,o,s,u){k(e,t,r,o,s,null,u,function(o){var s=t.hooks.lookupHelper(t,r,n);return t.hooks.invokeHelper(e,t,r,u,i,a,s,o.templates,h(o.templates))})}function k(e,t,r,n,i,o,s,u){var l=m(n,i,t,r,e,s);a.renderAndCleanup(e,t,l,o,u)}function E(e,t,r,n,i,a,o,s,u){if(!n)return!1;var l=t.hooks.classify(t,r,n);if(l){switch(l){case"component":t.hooks.component(e,t,r,n,i,a,{"default":o,inverse:s},u);break;case"inline":t.hooks.inline(e,t,r,n,i,a,u);break;case"block":t.hooks.block(e,t,r,n,i,a,o,s,u);break;default:throw new Error("Internal HTMLBars redirection to "+l+" not supported")}return!0}return O(n,e,t,r,i,a,o,s,u)?!0:!1}function O(e,t,r,o,s,u,l,c,m){var h=r.hooks.keywords[e];if(!h)return!1;if("function"==typeof h)return h(t,r,o,s,u,l,c,m);h.willRender&&h.willRender(t,r);var d,f;h.setupState&&(d=n.shallowCopy(t.getState()),f=t.setState(h.setupState(d,r,o,s,u))),h.childEnv&&(r=h.childEnv(t.getState(),r),t.buildChildEnv=h.childEnv);var p=!t.rendered;if(h.isEmpty){var v=h.isEmpty(t.getState(),r,o,s,u);if(v)return p||a.clearMorph(t,r,!1),!0}if(p)return h.render&&h.render(t,r,o,s,u,l,c,m),t.rendered=!0,!0;var g;if(g=h.isStable?h.isStable(d,f):N(d,f)){if(h.rerender){var b=h.rerender(t,r,o,s,u,l,c,m);r=b||r}return i.validateChildMorphs(r,t,m),!0}return a.clearMorph(t,r,!1),h.render?(h.render(t,r,o,s,u,l,c,m),t.rendered=!0,!0):void 0}function N(e,t){if(n.keyLength(e)!==n.keyLength(t))return!1;for(var r in e)if(e[r]!==t[r])return!1;return!0}function A(){}function S(e,t,r,n,a,o,s){if(!E(e,t,r,n,a,o,null,null,s)){var u=void 0,l=void 0;if(e.linkedResult)u=t.hooks.getValue(e.linkedResult),l=!0;else{var c=m(null,null,t,r,e),d=t.hooks.lookupHelper(t,r,n),f=t.hooks.invokeHelper(e,t,r,s,a,o,d,c.templates,h(c.templates));f&&f.link&&(e.linkedResult=f.value,i.linkParams(t,r,e,"@content-helper",[e.linkedResult],null)),f&&"value"in f&&(u=t.hooks.getValue(f.value),l=!0)}l&&(e.lastValue!==u&&e.setContent(u),e.lastValue=u)}}function T(e,t,r,n,i,a,o,s,u){O(e,t,r,n,i,a,o,s,u)}function P(e,t,r,n,i,a,o,s,u){var l=R(t,i),c=M(t,a);return{value:o.call(u,l,c,s)}}function R(e,t){for(var r=new Array(t.length),n=0,i=t.length;i>n;n++)r[n]=e.hooks.getCellOrValue(t[n]);return r}function M(e,t){var r={};for(var n in t)r[n]=e.hooks.getCellOrValue(t[n]);return r}function L(){return null}function D(e,t,r,n){var i=t.partials[n];return i.render(r.self,t,{}).fragment}function j(e,t,r,n,i,a){E(e,t,r,n,[],{},null,null,a)||(i=t.hooks.getValue(i),e.lastValue!==i&&e.setContent(i),e.lastValue=i)}function I(e,t,r,n,i,a,o){if(!E(e,t,r,n,i,a,null,null,o)){var s=t.hooks.lookupHelper(t,r,n);s&&t.hooks.invokeHelper(null,t,r,null,i,a,s,{element:e.element})}}function V(e,t,r,n,i){i=t.hooks.getValue(i),e.lastValue!==i&&e.setContent(i),e.lastValue=i}function F(e,t,r,n,i){var a=e.hooks.lookupHelper(e,t,r),o=e.hooks.invokeHelper(null,e,t,null,n,i,a,{});return o&&"value"in o?e.hooks.getValue(o.value):void 0; +}function H(e,t,r){if(""===r)return t.self;for(var n=r.split("."),i=e.hooks.getRoot(t,n[0])[0],a=1;an;n++)r+=e.hooks.getValue(t[n]);return r}function Q(e,r,n,i,a,o){var s=r.dom.createElement(i);for(var u in a)s.setAttribute(u,r.hooks.getValue(a[u]));var l=t["default"](o,r,n,{}).fragment;s.appendChild(l),e.setNode(s)}function Y(e,t,r){return void 0!==e.helpers[r]}function $(e,t,r){return e.helpers[r]}function J(){}function X(e,t){e.hooks.bindScope(e,t)}e.wrap=o,e.wrapForHelper=s,e.createScope=d,e.createFreshScope=f,e.bindShadowScope=p,e.createChildScope=v,e.bindSelf=g,e.updateSelf=b,e.bindLocal=y,e.updateLocal=_,e.bindBlock=w,e.block=x,e.continueBlock=C,e.hostBlock=k,e.handleRedirect=E,e.handleKeyword=O,e.linkRenderNode=A,e.inline=S,e.keyword=T,e.invokeHelper=P,e.classify=L,e.partial=D,e.range=j,e.element=I,e.attribute=V,e.subexpr=F,e.get=H,e.getRoot=B,e.getBlock=U,e.getChild=z,e.getValue=q,e.getCellOrValue=W,e.component=K,e.concat=G,e.hasHelper=Y,e.lookupHelper=$,e.bindScope=J,e.updateScope=X;var Z={partial:function(e,t,r,n){var i=t.hooks.partial(e,t,r,n[0]);return e.setContent(i),!0},"yield":function(e,t,r,n,i,a,o,s){var u=t.hooks.getValue(i.to)||"default",l=t.hooks.getBlock(r,u);return l&&l.invoke(t,n,i.self,e,r,s),!0},hasBlock:function(e,t,r,n){var i=t.hooks.getValue(n[0])||"default";return!!t.hooks.getBlock(r,i)},hasBlockParams:function(e,t,r,n){var i=t.hooks.getValue(n[0])||"default",a=t.hooks.getBlock(r,i);return!(!a||!a.arity)}};e.keywords=Z,e["default"]={bindLocal:y,bindSelf:g,bindScope:J,classify:L,component:K,concat:G,createFreshScope:f,getChild:z,getRoot:B,getBlock:U,getValue:q,getCellOrValue:W,keywords:Z,linkRenderNode:A,partial:D,subexpr:F,bindBlock:w,bindShadowScope:p,updateLocal:_,updateSelf:b,updateScope:X,createChildScope:v,hasHelper:Y,lookupHelper:$,invokeHelper:P,cleanupRenderNode:null,destroyRenderNode:null,willCleanupTree:null,didCleanupTree:null,willRenderNode:null,didRenderNode:null,attribute:V,block:x,createScope:d,element:I,get:H,inline:S,range:j,keyword:T}}),e("htmlbars-runtime/morph",["exports","morph-range"],function(e,t){"use strict";function r(e,t){this.super$constructor(e,t),this._state=void 0,this.ownerNode=null,this.isDirty=!1,this.isSubtreeDirty=!1,this.lastYielded=null,this.lastResult=null,this.lastValue=null,this.buildChildEnv=null,this.morphList=null,this.morphMap=null,this.key=null,this.linkedParams=null,this.linkedResult=null,this.childNodes=null,this.rendered=!1,this.guid="range"+n++,this.seen=!1}var n=1;r.empty=function(e,t){var n=new r(e,t);return n.clear(),n},r.create=function(e,t,n){var i=new r(e,t);return i.setNode(n),i},r.attach=function(e,t,n,i){var a=new r(e,t);return a.setRange(n,i),a};var i=r.prototype=Object.create(t["default"].prototype);i.constructor=r,i.super$constructor=t["default"],i.getState=function(){return this._state||(this._state={}),this._state},i.setState=function(e){return this._state=e},e["default"]=r}),e("htmlbars-runtime/node-visitor",["exports","htmlbars-util/morph-utils","htmlbars-runtime/expression-visitor"],function(e,t,r){"use strict";function n(e,n,i,a,o,s){return i.linkedParams?(o=i.linkedParams.params,s=i.linkedParams.hash):(o=o&&r.acceptParams(o,e,n),s=s&&r.acceptHash(s,e,n)),t.linkParams(e,n,i,a,o,s),[o,s]}function i(e,r,n,i){var a=r.isDirty,s=r.isSubtreeDirty,u=e;s&&(n=o),a||s?i(n):(r.buildChildEnv&&(u=r.buildChildEnv(r.getState(),u)),t.validateChildMorphs(u,r,n))}function a(e,t,r){return void 0!==e.hooks.keywords[r]||e.hooks.hasHelper(e,t,r)}var o={block:function(e,t,r,i,a,o){var s=e[1],u=e[2],l=e[3],c=e[4],m=e[5],h=n(r,i,t,s,u,l);t.isDirty=t.isSubtreeDirty=!1,r.hooks.block(t,r,i,s,h[0],h[1],null===c?null:a.templates[c],null===m?null:a.templates[m],o)},inline:function(e,t,r,i,a){var o=e[1],s=e[2],u=e[3],l=n(r,i,t,o,s,u);t.isDirty=t.isSubtreeDirty=!1,r.hooks.inline(t,r,i,o,l[0],l[1],a)},content:function(e,r,n,i,o){var s=e[1];if(r.isDirty=r.isSubtreeDirty=!1,a(n,i,s))return n.hooks.inline(r,n,i,s,[],{},o),void(r.linkedResult&&t.linkParams(n,i,r,"@content-helper",[r.linkedResult],null));var u=void 0;u=r.linkedParams?r.linkedParams.params:[n.hooks.get(n,i,s)],t.linkParams(n,i,r,"@range",u,null),n.hooks.range(r,n,i,s,u[0],o)},element:function(e,t,r,i,a){var o=e[1],s=e[2],u=e[3],l=n(r,i,t,o,s,u);t.isDirty=t.isSubtreeDirty=!1,r.hooks.element(t,r,i,o,l[0],l[1],a)},attribute:function(e,t,r,i){var a=e[1],o=e[2],s=n(r,i,t,"@attribute",[o],null);t.isDirty=t.isSubtreeDirty=!1,r.hooks.attribute(t,r,i,a,s[0][0])},component:function(e,t,r,i,a,o){var s=e[1],u=e[2],l=e[3],c=e[4],m=n(r,i,t,s,[],u),h={"default":a.templates[l],inverse:a.templates[c]};t.isDirty=t.isSubtreeDirty=!1,r.hooks.component(t,r,i,s,m[0],m[1],h,o)},attributes:function(e,t,r,n,i,a){var o=e[1];r.hooks.attributes(t,r,n,o,i,a)}};e.AlwaysDirtyVisitor=o,e["default"]={block:function(e,t,r,n,a,s){i(r,t,s,function(i){o.block(e,t,r,n,a,i)})},inline:function(e,t,r,n,a){i(r,t,a,function(i){o.inline(e,t,r,n,i)})},content:function(e,t,r,n,a){i(r,t,a,function(i){o.content(e,t,r,n,i)})},element:function(e,t,r,n,a,s){i(r,t,s,function(i){o.element(e,t,r,n,a,i)})},attribute:function(e,t,r,n,a){i(r,t,null,function(){o.attribute(e,t,r,n,a)})},component:function(e,t,r,n,a,s){i(r,t,s,function(i){o.component(e,t,r,n,a,i)})},attributes:function(e,t,r,n,i,a){o.attributes(e,t,r,n,i,a)}}}),e("htmlbars-runtime/render",["exports","htmlbars-util/morph-utils","htmlbars-runtime/node-visitor","htmlbars-runtime/morph","htmlbars-util/template-utils","htmlbars-util/void-tag-names"],function(e,t,r,n,i,a){"use strict";function o(e,t,r,n){var i,a=t.dom;n&&(n.renderNode?i=n.renderNode.contextualElement:n.contextualElement&&(i=n.contextualElement)),a.detectNamespace(i);var o=u.build(t,r,e,n,i);return o.render(),o}function s(e,t,r,n){this.renderNode=e||null,this.self=t,this.blockArguments=r||null,this.contextualElement=n||null}function u(e,t,r,n,i,a,o,s,u){this.root=n,this.fragment=o,this.nodes=a,this.template=s,this.statements=s.statements.slice(),this.env=e,this.scope=t,this.shouldSetContent=u,void 0!==r.self&&this.bindSelf(r.self),void 0!==r.blockArguments&&this.bindLocals(r.blockArguments),this.initializeNodes(i)}function l(e,t,r){var n=[];for(var i in t)"string"!=typeof t[i]&&n.push(["attribute",i,t[i]]);var o=r||a["default"][e];o||n.push(["content","yield"]);var s={arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(r){var n=r.createDocumentFragment();"svg"===e&&r.setNamespace(f);var i=r.createElement(e);for(var a in t)"string"==typeof t[a]&&r.setAttribute(i,a,t[a]);if(!o){var s=r.createComment("");r.appendChild(i,s)}return r.appendChild(n,i),n},buildRenderNodes:function(e,r){var n=e.childAt(r,[0]),i=[];for(var a in t)"string"!=typeof t[a]&&i.push(e.createAttrMorph(n,a));return o||i.push(e.createMorphAt(n,0,0)),i},statements:n,locals:[],templates:[]};return s}function c(e){var t=[];for(var r in e)"string"!=typeof e[r]&&t.push(["attribute",r,e[r]]);var n={arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(t){var r=this.element;"http://www.w3.org/2000/svg"===r.namespaceURI&&t.setNamespace(f);for(var n in e)"string"==typeof e[n]&&t.setAttribute(r,n,e[n]);return r},buildRenderNodes:function(t){var r=this.element,n=[];for(var i in e)"string"!=typeof e[i]&&n.push(t.createAttrMorph(r,i));return n},statements:t,locals:[],templates:[],element:null};return n}function m(e,t){e.ownerNode=t}function h(e,t,r){var i=n["default"].empty(e,r||t.contextualElement);return m(i,t.ownerNode),i}function d(e,t){var r,n=t.dom;return t.useFragmentCache&&n.canClone?(null===e.cachedFragment&&(r=e.buildFragment(n),e.hasRendered?e.cachedFragment=r:e.hasRendered=!0),e.cachedFragment&&(r=n.cloneNode(e.cachedFragment,!0))):r||(r=e.buildFragment(n)),r}e["default"]=o,e.RenderOptions=s,e.manualElement=l,e.attachAttributes=c,e.createChildMorph=h,e.getCachedFragment=d;var f="http://www.w3.org/2000/svg";u.build=function(e,r,n,a,o){var s,l,c,m=e.dom,h=d(n,e),f=n.buildRenderNodes(m,h,o);return a&&a.renderNode?(s=a.renderNode,l=s.ownerNode,c=!0):(s=m.createMorph(null,h.firstChild,h.lastChild,o),l=s,s.ownerNode=l,c=!1),s.childNodes&&t.visitChildren(s.childNodes,function(t){i.clearMorph(t,e,!0)}),s.childNodes=f,new u(e,r,a,s,l,f,h,n,c)},u.prototype.initializeNodes=function(e){for(var t=this.root.childNodes,r=0,n=t.length;n>r;r++)t[r].ownerNode=e},u.prototype.render=function(){this.root.lastResult=this,this.root.rendered=!0,this.populateNodes(r.AlwaysDirtyVisitor),this.shouldSetContent&&this.root.setContent&&this.root.setContent(this.fragment)},u.prototype.dirty=function(){t.visitChildren([this.root],function(e){e.isDirty=!0})},u.prototype.revalidate=function(e,t,n,i){this.revalidateWith(e,i,t,n,r["default"])},u.prototype.rerender=function(e,t,n,i){this.revalidateWith(e,i,t,n,r.AlwaysDirtyVisitor)},u.prototype.revalidateWith=function(e,t,r,n,i){void 0!==e&&(this.env=e),void 0!==t&&(this.scope=t),this.updateScope(),void 0!==r&&this.updateSelf(r),void 0!==n&&this.updateLocals(n),this.populateNodes(i)},u.prototype.destroy=function(){var e=this.root;i.clearMorph(e,this.env,!0)},u.prototype.populateNodes=function(e){var t,r,n=this.env,i=this.scope,a=this.template,o=this.nodes,s=this.statements;for(t=0,r=s.length;r>t;t++){var u=s[t],l=o[t];switch(n.hooks.willRenderNode&&n.hooks.willRenderNode(l,n,i),u[0]){case"block":e.block(u,l,n,i,a,e);break;case"inline":e.inline(u,l,n,i,e);break;case"content":e.content(u,l,n,i,e);break;case"element":e.element(u,l,n,i,a,e);break;case"attribute":e.attribute(u,l,n,i);break;case"component":e.component(u,l,n,i,a,e)}n.hooks.didRenderNode&&n.hooks.didRenderNode(l,n,i)}},u.prototype.bindScope=function(){this.env.hooks.bindScope(this.env,this.scope)},u.prototype.updateScope=function(){this.env.hooks.updateScope(this.env,this.scope)},u.prototype.bindSelf=function(e){this.env.hooks.bindSelf(this.env,this.scope,e)},u.prototype.updateSelf=function(e){this.env.hooks.updateSelf(this.env,this.scope,e)},u.prototype.bindLocals=function(e){for(var t=this.template.locals,r=0,n=t.length;n>r;r++)this.env.hooks.bindLocal(this.env,this.scope,t[r],e[r])},u.prototype.updateLocals=function(e){for(var t=this.template.locals,r=0,n=t.length;n>r;r++)this.env.hooks.updateLocal(this.env,this.scope,t[r],e[r])}}),e("htmlbars-runtime",["exports","htmlbars-runtime/hooks","htmlbars-runtime/render","htmlbars-util/morph-utils","htmlbars-util/template-utils"],function(e,t,r,n,i){"use strict";var a={blockFor:i.blockFor,manualElement:r.manualElement,hostBlock:t.hostBlock,continueBlock:t.continueBlock,hostYieldWithShadowTemplate:t.hostYieldWithShadowTemplate,visitChildren:n.visitChildren,validateChildMorphs:n.validateChildMorphs,clearMorph:i.clearMorph};e.hooks=t["default"],e.render=r["default"],e.internal=a}),e("htmlbars-util/array-utils",["exports"],function(e){"use strict";function t(e,t,r){var n,i;if(void 0===r)for(n=0,i=e.length;i>n;n++)t(e[n],n,e);else for(n=0,i=e.length;i>n;n++)t.call(r,e[n],n,e)}function r(e,t){var r,n,i=[];for(r=0,n=e.length;n>r;r++)i.push(t(e[r],r,e));return i}e.forEach=t,e.map=r;var n;n=Array.prototype.indexOf?function(e,t,r){return e.indexOf(t,r)}:function(e,t,r){void 0===r||null===r?r=0:0>r&&(r=Math.max(0,e.length+r));for(var n=r,i=e.length;i>n;n++)if(e[n]===t)return n;return-1};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};e.isArray=i;var a=n;e.indexOfArray=a}),e("htmlbars-util/handlebars/safe-string",["exports"],function(e){"use strict";function t(e){this.string=e}t.prototype.toString=t.prototype.toHTML=function(){return""+this.string},e["default"]=t}),e("htmlbars-util/handlebars/utils",["exports"],function(e){"use strict";function t(e){return u[e]}function r(e){for(var t=1;tr;r++)if(e[r]===t)return r;return-1}function i(e){if("string"!=typeof e){if(e&&e.toHTML)return e.toHTML();if(null==e)return"";if(!e)return e+"";e=""+e}return c.test(e)?e.replace(l,t):e}function a(e){return e||0===e?d(e)&&0===e.length?!0:!1:!0}function o(e,t){return e.path=t,e}function s(e,t){return(e?e+".":"")+t}e.extend=r,e.indexOf=n,e.escapeExpression=i,e.isEmpty=a,e.blockParams=o,e.appendContextPath=s;var u={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},l=/[&<>"'`]/g,c=/[&<>"'`]/,m=Object.prototype.toString;e.toString=m;var h=function(e){return"function"==typeof e};h(/x/)&&(e.isFunction=h=function(e){return"function"==typeof e&&"[object Function]"===m.call(e)});var h;e.isFunction=h;var d=Array.isArray||function(e){return e&&"object"==typeof e?"[object Array]"===m.call(e):!1};e.isArray=d}),e("htmlbars-util/morph-utils",["exports"],function(e){"use strict";function t(e,t){if(e&&0!==e.length)for(e=e.slice();e.length;){var r=e.pop();if(t(r),r.childNodes)e.push.apply(e,r.childNodes);else if(r.firstChildMorph)for(var n=r.firstChildMorph;n;)e.push(n),n=n.nextMorph;else if(r.morphList)for(var n=r.morphList.firstChildMorph;n;)e.push(n),n=n.nextMorph}}function r(e,t,n){var i=t.morphList;if(t.morphList)for(var a=i.firstChildMorph;a;){var o=a.nextMorph;r(e,a,n),a=o}else if(t.lastResult)t.lastResult.revalidateWith(e,void 0,void 0,void 0,n);else if(t.childNodes)for(var s=0,u=t.childNodes.length;u>s;s++)r(e,t.childNodes[s],n)}function n(e,t,r,n,i,a){r.linkedParams||e.hooks.linkRenderNode(r,e,t,n,i,a)&&(r.linkedParams={params:i,hash:a})}function i(e){if(console.group(e,e.isDirty),e.childNodes)a(e.childNodes,i);else if(e.firstChildMorph)for(var t=e.firstChildMorph;t;)i(t),t=t.nextMorph;else e.morphList&&i(e.morphList);console.groupEnd()}function a(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r])}e.visitChildren=t,e.validateChildMorphs=r,e.linkParams=n,e.dump=i}),e("htmlbars-util/namespaces",["exports"],function(e){"use strict";function t(e,t){if(t)return t;var n,i=e.indexOf(":");if(-1!==i){var a=e.slice(0,i);n=r[a]}return n||null}e.getAttrNamespace=t;var r={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"}}),e("htmlbars-util/object-utils",["exports"],function(e){"use strict";function t(e,t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r]);return e}function r(e){return t({},e)}function n(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[r]=!0);return t}function i(e){var t=0;for(var r in e)e.hasOwnProperty(r)&&t++;return t}e.merge=t,e.shallowCopy=r,e.keySet=n,e.keyLength=i}),e("htmlbars-util/quoting",["exports"],function(e){"use strict";function t(e){return e=e.replace(/\\/g,"\\\\"),e=e.replace(/"/g,'\\"'),e=e.replace(/\n/g,"\\n")}function r(e){return'"'+t(e)+'"'}function n(e){return"["+e+"]"}function i(e){return"{"+e.join(", ")+"}"}function a(e,t){for(var r="";t--;)r+=e;return r}e.hash=i,e.repeat=a,e.escapeString=t,e.string=r,e.array=n}),e("htmlbars-util/safe-string",["exports","htmlbars-util/handlebars/safe-string"],function(e,t){"use strict";e["default"]=t["default"]}),e("htmlbars-util/template-utils",["exports","htmlbars-util/morph-utils","htmlbars-runtime/render"],function(e,t,r){"use strict";function n(e,t){this.morphListToClear=t,this.morphListToPrune=null,this.handledMorphs={},this.collisions=void 0,this.morphToClear=e,this.shadowOptions=null}function i(e,t,r){this.render=e,this.template=t,this.blockOptions=r,this.arity=t.arity}function a(e,t,r){return new i(e,t,r)}function o(e,t,r){if(r)if(r instanceof i)e.hooks.bindBlock(e,t,r);else for(var n in r)r.hasOwnProperty(n)&&e.hooks.bindBlock(e,t,r[n],n)}function s(e,t,r,n,i){var a=r.renderState;a.collisions=void 0,a.shadowOptions=n;var o=i(r);if(!o||!o.handled){var s=e.morphMap,c=a.morphListToPrune;if(c)for(var m=a.handledMorphs,h=c.firstChildMorph;h;){var d=h.nextMorph;h.key in m||(s[h.key]=void 0,u(h,t,!0),h.destroy()),h=d}c=a.morphListToClear,c&&l(c,e,t);var f=a.morphToClear;f&&u(f,t)}}function u(e,r,n){function i(e){a&&a(e),o&&o(e)}var a=r.hooks.cleanupRenderNode,o=r.hooks.destroyRenderNode,s=r.hooks.willCleanupTree,u=r.hooks.didCleanupTree;s&&s(r,e,n),a&&a(e),n&&o&&o(e),t.visitChildren(e.childNodes,i),e.clear(),u&&u(r,e,n),e.lastResult=null,e.lastYielded=null,e.childNodes=null}function l(e,t,r){for(var n=e.firstChildMorph;n;){var i=n.nextMorph;t.morphMap[n.key]=void 0,u(n,r,!0),n.destroy(),n=i}e.clear(),t.morphList=null}e.RenderState=n,e.blockFor=a,e.renderAndCleanup=s,e.clearMorph=u,e.clearMorphList=l,i.prototype.invoke=function(e,t,r,n,i,a){n.lastResult?n.lastResult.revalidateWith(e,void 0,r,t,a):this._firstRender(e,t,r,n,i)},i.prototype._firstRender=function(e,t,i,a,u){var l={renderState:new n(a)},c=this.render,m=this.template,h=this.blockOptions.scope,d=h?e.hooks.createChildScope(h):e.hooks.createFreshScope();e.hooks.bindShadowScope(e,u,d,this.blockOptions.options),void 0!==i?e.hooks.bindSelf(e,d,i):void 0!==this.blockOptions.self&&e.hooks.bindSelf(e,d,this.blockOptions.self),o(e,d,this.blockOptions.yieldTo),s(a,e,l,null,function(){l.renderState.morphToClear=null;var n=new r.RenderOptions(a,void 0,t);c(m,e,d,n)})}}),e("htmlbars-util/void-tag-names",["exports","htmlbars-util/array-utils"],function(e,t){"use strict";var r="area base br col command embed hr img input keygen link meta param source track wbr",n={};t.forEach(r.split(" "),function(e){n[e]=!0}),e["default"]=n}),e("htmlbars-util",["exports","htmlbars-util/safe-string","htmlbars-util/handlebars/utils","htmlbars-util/namespaces","htmlbars-util/morph-utils"],function(e,t,r,n,i){"use strict";e.SafeString=t["default"],e.escapeExpression=r.escapeExpression,e.getAttrNamespace=n.getAttrNamespace,e.validateChildMorphs=i.validateChildMorphs,e.linkParams=i.linkParams,e.dump=i.dump}),e("morph-attr/sanitize-attribute-value",["exports"],function(e){"use strict";function t(e,t,s,u){var l;if(l=t?t.tagName.toUpperCase():null,u&&u.toHTML)return u.toHTML();if((null===l||n[l])&&a[s]){var c=e.protocolForURL(u);if(r[c]===!0)return"unsafe:"+u}return i[l]&&o[s]?"unsafe:"+u:u}e.sanitizeAttributeValue=t;var r={"javascript:":!0,"vbscript:":!0},n={A:!0,BODY:!0,LINK:!0,IMG:!0,IFRAME:!0,BASE:!0,FORM:!0},i={EMBED:!0},a={href:!0,src:!0,background:!0,action:!0};e.badAttributes=a;var o={src:!0}}),e("morph-attr",["exports","morph-attr/sanitize-attribute-value","dom-helper/prop","dom-helper/build-html-dom","htmlbars-util"],function(e,t,r,n,i){"use strict";function a(){return this.domHelper.getPropertyStrict(this.element,this.attrName)}function o(e){if(this._renderedInitially===!0||!r.isAttrRemovalValue(e)){var t=this.element,n=this.attrName;"value"===n&&"INPUT"===t.tagName&&t.value===e||this.domHelper.setPropertyStrict(t,n,e)}this._renderedInitially=!0}function s(){return this.domHelper.getAttribute(this.element,this.attrName)}function u(e){r.isAttrRemovalValue(e)?this.domHelper.removeAttribute(this.element,this.attrName):this.domHelper.setAttribute(this.element,this.attrName,e)}function l(){return this.domHelper.getAttributeNS(this.element,this.namespace,this.attrName)}function c(e){r.isAttrRemovalValue(e)?this.domHelper.removeAttribute(this.element,this.attrName):this.domHelper.setAttributeNS(this.element,this.namespace,this.attrName,e)}function m(e,t,i){var a=r.normalizeProperty(e,t),o=a.normalized,s=a.type;return e.namespaceURI===n.svgNamespace||"style"===t||"attr"===s?new p(e,o,i):new d(e,o,i)}function h(e,t,r){this.element=e,this.domHelper=r,this.attrName=t,this._state=void 0,this.isDirty=!1,this.isSubtreeDirty=!1,this.escaped=!0,this.lastValue=v,this.lastResult=null,this.lastYielded=null,this.childNodes=null,this.linkedParams=null,this.linkedResult=null,this.guid="attr"+g++,this.seen=!1,this.ownerNode=null,this.rendered=!1,this._renderedInitially=!1,this.namespace=void 0,this.didInit()}function d(e,t,r){this._$superAttrMorph(e,t,r)}function f(e,t,r,n){this._$superAttrMorph(e,t,r),this.namespace=n}function p(e,t,r){this._$superAttrMorph(e,t,r)}var v={unset:!0},g=1;h.create=function(e,t,r,n){var a=i.getAttrNamespace(t,n);return a?new f(e,t,r,a):m(e,t,r)},h.prototype.getState=function(){return this._state||(this._state={}),this._state},h.prototype.setState=function(e){return this._state=e},h.prototype.didInit=function(){},h.prototype.willSetContent=function(){},h.prototype.setContent=function(e){if(this.willSetContent(e),this.lastValue!==e)if(this.lastValue=e,this.escaped){var r=t.sanitizeAttributeValue(this.domHelper,this.element,this.attrName,e);this._update(r,this.namespace)}else this._update(e,this.namespace)},h.prototype.getContent=function(){var e=this.lastValue=this._get();return e},h.prototype.clear=function(){},h.prototype.destroy=function(){this.element=null,this.domHelper=null},h.prototype._$superAttrMorph=h,d.prototype=Object.create(h.prototype),d.prototype._update=o,d.prototype._get=a,f.prototype=Object.create(h.prototype),f.prototype._update=c,f.prototype._get=l,p.prototype=Object.create(h.prototype),p.prototype._update=u,p.prototype._get=s,e["default"]=h,e.sanitizeAttributeValue=t.sanitizeAttributeValue}),e("morph-range/morph-list",["exports","morph-range/utils"],function(e,t){"use strict";function r(){this.firstChildMorph=null,this.lastChildMorph=null,this.mountedMorph=null}var n=r.prototype;n.clear=function(){for(var e=this.firstChildMorph;e;){var t=e.nextMorph;e.previousMorph=null,e.nextMorph=null,e.parentMorphList=null,e=t}this.firstChildMorph=this.lastChildMorph=null},n.destroy=function(){},n.appendMorph=function(e){this.insertBeforeMorph(e,null)},n.insertBeforeMorph=function(e,r){if(null!==e.parentMorphList&&e.unlink(),r&&r.parentMorphList!==this)throw new Error("The morph before which the new morph is to be inserted is not a child of this morph.");var n=this.mountedMorph;if(n){var i=n.firstNode.parentNode,a=r?r.firstNode:n.lastNode.nextSibling;t.insertBefore(i,e.firstNode,e.lastNode,a),this.firstChildMorph||t.clear(this.mountedMorph.firstNode.parentNode,this.mountedMorph.firstNode,this.mountedMorph.lastNode)}e.parentMorphList=this;var o=r?r.previousMorph:this.lastChildMorph;o?(o.nextMorph=e,e.previousMorph=o):this.firstChildMorph=e,r?(r.previousMorph=e,e.nextMorph=r):this.lastChildMorph=e,this.firstChildMorph._syncFirstNode(),this.lastChildMorph._syncLastNode()},n.removeChildMorph=function(e){if(e.parentMorphList!==this)throw new Error("Cannot remove a morph from a parent it is not inside of");e.destroy()},e["default"]=r}),e("morph-range/morph-list.umd",["exports","morph-range/morph-list"],function(e,t){"use strict";!function(t,r){"function"==typeof define&&define.amd?define([],r):"object"==typeof e?module.exports=r():t.MorphList=r()}(void 0,function(){return t["default"]})}),e("morph-range/utils",["exports"],function(e){"use strict";function t(e,t,r){if(e){var n,i=t;do{if(n=i.nextSibling,e.removeChild(i),i===r)break;i=n}while(i)}}function r(e,t,r,n){var i,a=t;do{if(i=a.nextSibling,e.insertBefore(a,n),a===r)break;a=i}while(a)}e.clear=t,e.insertBefore=r}),e("morph-range",["exports","morph-range/utils"],function(e,t){"use strict";function r(e,t){this.domHelper=e,this.contextualElement=t,this.firstNode=null,this.lastNode=null,this.parseTextAsHTML=!1,this.parentMorphList=null,this.previousMorph=null,this.nextMorph=null}function n(e){var t,r=e.name;throw t=r?"Unsupported Content: Cannot bind to function `"+r+"`":"Unsupported Content: Cannot bind to function",new TypeError(t)}r.empty=function(e,t){var n=new r(e,t);return n.clear(),n},r.create=function(e,t,n){var i=new r(e,t);return i.setNode(n),i},r.attach=function(e,t,n,i){var a=new r(e,t);return a.setRange(n,i),a},r.prototype.setContent=function(e){if(null===e||void 0===e)return this.clear();var t=typeof e;switch(t){case"string":return this.parseTextAsHTML?this.domHelper.setMorphHTML(this,e):this.setText(e);case"object":if("number"==typeof e.nodeType)return this.setNode(e);if("function"==typeof e.toHTML)return this.setHTML(e.toHTML());if(this.parseTextAsHTML)return this.setHTML(e.toString());case"boolean":case"number":return this.setText(e.toString());case"function":n(e);default:throw new TypeError("unsupported content")}},r.prototype.clear=function(){var e=this.setNode(this.domHelper.createComment(""));return e},r.prototype.setText=function(e){var t=this.firstNode,r=this.lastNode;return t&&r===t&&3===t.nodeType?(t.nodeValue=e,t):this.setNode(e?this.domHelper.createTextNode(e):this.domHelper.createComment(""))},r.prototype.setNode=function(e){var t,r;switch(e.nodeType){case 3:t=e,r=e;break;case 11:t=e.firstChild,r=e.lastChild,null===t&&(t=this.domHelper.createComment(""),e.appendChild(t),r=t);break;default:t=e,r=e}return this.setRange(t,r),e},r.prototype.setRange=function(e,r){var n=this.firstNode;if(null!==n){var i=n.parentNode;null!==i&&(t.insertBefore(i,e,r,n),t.clear(i,n,this.lastNode))}this.firstNode=e,this.lastNode=r,this.parentMorphList&&(this._syncFirstNode(),this._syncLastNode())},r.prototype.destroy=function(){this.unlink();var e=this.firstNode,r=this.lastNode,n=e&&e.parentNode;this.firstNode=null,this.lastNode=null,t.clear(n,e,r)},r.prototype.unlink=function(){var e=this.parentMorphList,t=this.previousMorph,r=this.nextMorph;if(t?r?(t.nextMorph=r,r.previousMorph=t):(t.nextMorph=null,e.lastChildMorph=t):r?(r.previousMorph=null,e.firstChildMorph=r):e&&(e.lastChildMorph=e.firstChildMorph=null),this.parentMorphList=null,this.nextMorph=null,this.previousMorph=null,e&&e.mountedMorph){if(!e.firstChildMorph)return void e.mountedMorph.clear();e.firstChildMorph._syncFirstNode(),e.lastChildMorph._syncLastNode()}},r.prototype.setHTML=function(e){var t=this.domHelper.parseHTML(e,this.contextualElement);return this.setNode(t)},r.prototype.setMorphList=function(e){e.mountedMorph=this,this.clear();var t=this.firstNode;if(e.firstChildMorph){this.firstNode=e.firstChildMorph.firstNode,this.lastNode=e.lastChildMorph.lastNode;for(var r=e.firstChildMorph;r;){var n=r.nextMorph;r.insertBeforeNode(t,null),r=n}t.parentNode.removeChild(t)}},r.prototype._syncFirstNode=function(){for(var e,t=this;(e=t.parentMorphList)&&null!==e.mountedMorph&&t===e.firstChildMorph&&t.firstNode!==e.mountedMorph.firstNode;)e.mountedMorph.firstNode=t.firstNode,t=e.mountedMorph},r.prototype._syncLastNode=function(){for(var e,t=this;(e=t.parentMorphList)&&null!==e.mountedMorph&&t===e.lastChildMorph&&t.lastNode!==e.mountedMorph.lastNode;)e.mountedMorph.lastNode=t.lastNode,t=e.mountedMorph},r.prototype.insertBeforeNode=function(e,r){t.insertBefore(e,this.firstNode,this.lastNode,r)},r.prototype.appendToNode=function(e){t.insertBefore(e,this.firstNode,this.lastNode,null)},e["default"]=r}),e("route-recognizer/dsl",["exports"],function(e){"use strict";function t(e,t,r){this.path=e,this.matcher=t,this.delegate=r}function r(e){this.routes={},this.children={},this.target=e}function n(e,r,i){return function(a,o){var s=e+a;return o?void o(n(s,r,i)):new t(e+a,r,i)}}function i(e,t,r){for(var n=0,i=0,a=e.length;a>i;i++)n+=e[i].path.length;t=t.substr(n);var o={path:t,handler:r};e.push(o)}function a(e,t,r,n){var o=t.routes;for(var s in o)if(o.hasOwnProperty(s)){var u=e.slice();i(u,s,o[s]),t.children[s]?a(u,t.children[s],r,n):r.call(n,u)}}t.prototype={to:function(e,t){var r=this.delegate;if(r&&r.willAddRoute&&(e=r.willAddRoute(this.matcher.target,e)),this.matcher.add(this.path,e),t){if(0===t.length)throw new Error("You must have an argument in the function passed to `to`");this.matcher.addChild(this.path,e,t,this.delegate)}return this}},r.prototype={add:function(e,t){this.routes[e]=t},addChild:function(e,t,i,a){var o=new r(t);this.children[e]=o;var s=n(e,o,a);a&&a.contextEntered&&a.contextEntered(t,s),i(s)}},e["default"]=function(e,t){var i=new r;e(n("",i,this.delegate)),a([],i,function(e){t?t(this,e):this.add(e)},this)}}),e("route-recognizer",["exports","route-recognizer/dsl"],function(e,t){"use strict";function r(e){return"[object Array]"===Object.prototype.toString.call(e)}function n(e){this.string=e}function i(e){this.name=e}function a(e){this.name=e}function o(){}function s(e,t,r){"/"===e.charAt(0)&&(e=e.substr(1));for(var s=e.split("/"),u=[],l=0,c=s.length;c>l;l++){var m,h=s[l];(m=h.match(/^:([^\/]+)$/))?(u.push(new i(m[1])),t.push(m[1]),r.dynamics++):(m=h.match(/^\*([^\/]+)$/))?(u.push(new a(m[1])),t.push(m[1]),r.stars++):""===h?u.push(new o):(u.push(new n(h)),r.statics++)}return u}function u(e){this.charSpec=e,this.nextStates=[]}function l(e){return e.sort(function(e,t){if(e.types.stars!==t.types.stars)return e.types.stars-t.types.stars;if(e.types.stars){if(e.types.statics!==t.types.statics)return t.types.statics-e.types.statics;if(e.types.dynamics!==t.types.dynamics)return t.types.dynamics-e.types.dynamics}return e.types.dynamics!==t.types.dynamics?e.types.dynamics-t.types.dynamics:e.types.statics!==t.types.statics?t.types.statics-e.types.statics:0})}function c(e,t){for(var r=[],n=0,i=e.length;i>n;n++){var a=e[n];r=r.concat(a.match(t))}return r}function m(e){this.queryParams=e||{}}function h(e,t,r){for(var n=e.handlers,i=e.regex,a=t.match(i),o=1,s=new m(r),u=0,l=n.length;l>u;u++){for(var c=n[u],h=c.names,d={},f=0,p=h.length;p>f;f++)d[h[f]]=a[o++];s.push({handler:c.handler,params:d,isDynamic:!!h.length})}return s}function d(e,t){return t.eachChar(function(t){e=e.put(t)}),e}function f(e){return e=e.replace(/\+/gm,"%20"),decodeURIComponent(e)}var p=["/",".","*","+","?","|","(",")","[","]","{","}","\\"],v=new RegExp("(\\"+p.join("|\\")+")","g");n.prototype={eachChar:function(e){for(var t,r=this.string,n=0,i=r.length;i>n;n++)t=r.charAt(n),e({validChars:t})},regex:function(){return this.string.replace(v,"\\$1")},generate:function(){return this.string}},i.prototype={eachChar:function(e){e({invalidChars:"/",repeat:!0})},regex:function(){return"([^/]+)"},generate:function(e){return e[this.name]}},a.prototype={eachChar:function(e){e({invalidChars:"",repeat:!0})},regex:function(){return"(.+)"},generate:function(e){return e[this.name]}},o.prototype={eachChar:function(){},regex:function(){return""},generate:function(){return""}},u.prototype={get:function(e){for(var t=this.nextStates,r=0,n=t.length;n>r;r++){var i=t[r],a=i.charSpec.validChars===e.validChars;if(a=a&&i.charSpec.invalidChars===e.invalidChars)return i}},put:function(e){var t;return(t=this.get(e))?t:(t=new u(e),this.nextStates.push(t),e.repeat&&t.nextStates.push(t),t)},match:function(e){for(var t,r,n,i=this.nextStates,a=[],o=0,s=i.length;s>o;o++)t=i[o],r=t.charSpec,"undefined"!=typeof(n=r.validChars)?-1!==n.indexOf(e)&&a.push(t):"undefined"!=typeof(n=r.invalidChars)&&-1===n.indexOf(e)&&a.push(t);return a}};var g=Object.create||function(e){function t(){}return t.prototype=e,new t};m.prototype=g({splice:Array.prototype.splice,slice:Array.prototype.slice,push:Array.prototype.push,length:0,queryParams:null});var b=function(){this.rootState=new u,this.names={}};b.prototype={add:function(e,t){for(var r,n=this.rootState,i="^",a={statics:0,dynamics:0,stars:0},u=[],l=[],c=!0,m=0,h=e.length;h>m;m++){var f=e[m],p=[],v=s(f.path,p,a);l=l.concat(v);for(var g=0,b=v.length;b>g;g++){var y=v[g];y instanceof o||(c=!1,n=n.put({validChars:"/"}),i+="/",n=d(n,y),i+=y.regex())}var _={handler:f.handler,names:p};u.push(_)}c&&(n=n.put({validChars:"/"}),i+="/"),n.handlers=u,n.regex=new RegExp(i+"$"),n.types=a,(r=t&&t.as)&&(this.names[r]={segments:l,handlers:u})},handlersFor:function(e){var t=this.names[e],r=[];if(!t)throw new Error("There is no route named "+e);for(var n=0,i=t.handlers.length;i>n;n++)r.push(t.handlers[n]);return r},hasRoute:function(e){return!!this.names[e]},generate:function(e,t){var r=this.names[e],n="";if(!r)throw new Error("There is no route named "+e);for(var i=r.segments,a=0,s=i.length;s>a;a++){var u=i[a];u instanceof o||(n+="/",n+=u.generate(t))}return"/"!==n.charAt(0)&&(n="/"+n), +t&&t.queryParams&&(n+=this.generateQueryString(t.queryParams,r.handlers)),n},generateQueryString:function(e,t){var n=[],i=[];for(var a in e)e.hasOwnProperty(a)&&i.push(a);i.sort();for(var o=0,s=i.length;s>o;o++){a=i[o];var u=e[a];if(null!=u){var l=encodeURIComponent(a);if(r(u))for(var c=0,m=u.length;m>c;c++){var h=a+"[]="+encodeURIComponent(u[c]);n.push(h)}else l+="="+encodeURIComponent(u),n.push(l)}}return 0===n.length?"":"?"+n.join("&")},parseQueryString:function(e){for(var t=e.split("&"),r={},n=0;n2&&"[]"===o.slice(s-2)&&(u=!0,o=o.slice(0,s-2),r[o]||(r[o]=[])),i=a[1]?f(a[1]):""),u?r[o].push(i):r[o]=i}return r},recognize:function(e){var t,r,n,i,a=[this.rootState],o={},s=!1;if(i=e.indexOf("?"),-1!==i){var u=e.substr(i+1,e.length);e=e.substr(0,i),o=this.parseQueryString(u)}for(e=decodeURI(e),"/"!==e.charAt(0)&&(e="/"+e),t=e.length,t>1&&"/"===e.charAt(t-1)&&(e=e.substr(0,t-1),s=!0),r=0,n=e.length;n>r&&(a=c(a,e.charAt(r)),a.length);r++);var m=[];for(r=0,n=a.length;n>r;r++)a[r].handlers&&m.push(a[r]);a=l(m);var d=m[0];return d&&d.handlers?(s&&"(.+)$"===d.regex.source.slice(-5)&&(e+="/"),h(d,e,o)):void 0}},b.prototype.map=t["default"],b.VERSION="0.1.5",e["default"]=b}),e("router/handler-info/factory",["exports","router/handler-info/resolved-handler-info","router/handler-info/unresolved-handler-info-by-object","router/handler-info/unresolved-handler-info-by-param"],function(e,t,r,n){"use strict";function i(e,t){var r=i.klasses[e],n=new r(t||{});return n.factory=i,n}i.klasses={resolved:t["default"],param:n["default"],object:r["default"]},e["default"]=i}),e("router/handler-info/resolved-handler-info",["exports","router/handler-info","router/utils","rsvp/promise"],function(e,t,r,n){"use strict";var i=r.subclass(t["default"],{resolve:function(e,t){return t&&t.resolvedModels&&(t.resolvedModels[this.name]=this.context),n["default"].resolve(this,this.promiseLabel("Resolve"))},getUnresolved:function(){return this.factory("param",{name:this.name,handler:this.handler,params:this.params})},isResolved:!0});e["default"]=i}),e("router/handler-info/unresolved-handler-info-by-object",["exports","router/handler-info","router/utils","rsvp/promise"],function(e,t,r,n){"use strict";var i=r.subclass(t["default"],{getModel:function(e){return this.log(e,this.name+": resolving provided model"),n["default"].resolve(this.context)},initialize:function(e){this.names=e.names||[],this.context=e.context},serialize:function(e){var t=e||this.context,n=this.names,i=this.handler,a={};if(r.isParam(t))return a[n[0]]=t,a;if(i.serialize)return i.serialize(t,n);if(1===n.length){var o=n[0];return/_id$/.test(o)?a[o]=t.id:a[o]=t,a}}});e["default"]=i}),e("router/handler-info/unresolved-handler-info-by-param",["exports","router/handler-info","router/utils"],function(e,t,r){"use strict";var n=r.subclass(t["default"],{initialize:function(e){this.params=e.params||{}},getModel:function(e){var t=this.params;e&&e.queryParams&&(t={},r.merge(t,this.params),t.queryParams=e.queryParams);var n=this.handler,i=r.resolveHook(n,"deserialize")||r.resolveHook(n,"model");return this.runSharedModelHook(e,i,[t])}});e["default"]=n}),e("router/handler-info",["exports","router/utils","rsvp/promise"],function(e,t,r){"use strict";function n(e){var r=e||{};t.merge(this,r),this.initialize(r)}function i(e,t){if(!e^!t)return!1;if(!e)return!0;for(var r in e)if(e.hasOwnProperty(r)&&e[r]!==t[r])return!1;return!0}n.prototype={name:null,handler:null,params:null,context:null,factory:null,initialize:function(){},log:function(e,t){e.log&&e.log(this.name+": "+t)},promiseLabel:function(e){return t.promiseLabel("'"+this.name+"' "+e)},getUnresolved:function(){return this},serialize:function(){return this.params||{}},resolve:function(e,n){var i=t.bind(this,this.checkForAbort,e),a=t.bind(this,this.runBeforeModelHook,n),o=t.bind(this,this.getModel,n),s=t.bind(this,this.runAfterModelHook,n),u=t.bind(this,this.becomeResolved,n);return r["default"].resolve(void 0,this.promiseLabel("Start handler")).then(i,null,this.promiseLabel("Check for abort")).then(a,null,this.promiseLabel("Before model")).then(i,null,this.promiseLabel("Check if aborted during 'beforeModel' hook")).then(o,null,this.promiseLabel("Model")).then(i,null,this.promiseLabel("Check if aborted in 'model' hook")).then(s,null,this.promiseLabel("After model")).then(i,null,this.promiseLabel("Check if aborted in 'afterModel' hook")).then(u,null,this.promiseLabel("Become resolved"))},runBeforeModelHook:function(e){return e.trigger&&e.trigger(!0,"willResolveModel",e,this.handler),this.runSharedModelHook(e,"beforeModel",[])},runAfterModelHook:function(e,t){var r=this.name;return this.stashResolvedModel(e,t),this.runSharedModelHook(e,"afterModel",[t]).then(function(){return e.resolvedModels[r]},null,this.promiseLabel("Ignore fulfillment value and return model value"))},runSharedModelHook:function(e,n,i){this.log(e,"calling "+n+" hook"),this.queryParams&&i.push(this.queryParams),i.push(e);var a=t.applyHook(this.handler,n,i);return a&&a.isTransition&&(a=null),r["default"].resolve(a,this.promiseLabel("Resolve value returned from one of the model hooks"))},getModel:null,checkForAbort:function(e,t){return r["default"].resolve(e(),this.promiseLabel("Check for abort")).then(function(){return t},null,this.promiseLabel("Ignore fulfillment value and continue"))},stashResolvedModel:function(e,t){e.resolvedModels=e.resolvedModels||{},e.resolvedModels[this.name]=t},becomeResolved:function(e,t){var r=this.serialize(t);return e&&(this.stashResolvedModel(e,t),e.params=e.params||{},e.params[this.name]=r),this.factory("resolved",{context:t,name:this.name,handler:this.handler,params:r})},shouldSupercede:function(e){if(!e)return!0;var t=e.context===this.context;return e.name!==this.name||this.hasOwnProperty("context")&&!t||this.hasOwnProperty("params")&&!i(this.params,e.params)}},e["default"]=n}),e("router/router",["exports","route-recognizer","rsvp/promise","router/utils","router/transition-state","router/transition","router/transition-intent/named-transition-intent","router/transition-intent/url-transition-intent","router/handler-info"],function(e,t,r,n,i,a,o,s,u){"use strict";function l(e){var r=e||{};this.getHandler=r.getHandler||this.getHandler,this.updateURL=r.updateURL||this.updateURL,this.replaceURL=r.replaceURL||this.replaceURL,this.didTransition=r.didTransition||this.didTransition,this.willTransition=r.willTransition||this.willTransition,this.delegate=r.delegate||this.delegate,this.triggerEvent=r.triggerEvent||this.triggerEvent,this.log=r.log||this.log,this.recognizer=new t["default"],this.reset()}function c(e,t){var r,i=!!this.activeTransition,o=i?this.activeTransition.state:this.state,s=e.applyToState(o,this.recognizer,this.getHandler,t),u=n.getChangelist(o.queryParams,s.queryParams);return b(s.handlerInfos,o.handlerInfos)?u&&(r=this.queryParamsTransition(u,i,o,s))?r:this.activeTransition||new a.Transition(this):t?void h(this,s):(r=new a.Transition(this,e,s),this.activeTransition&&this.activeTransition.abort(),this.activeTransition=r,r.promise=r.promise.then(function(e){return v(r,e.state)},null,n.promiseLabel("Settle transition promise when transition is finalized")),i||_(this,s,r),m(this,s,u),r)}function m(e,t,r){r&&(e._changedQueryParams=r.all,n.trigger(e,t.handlerInfos,!0,["queryParamsDidChange",r.changed,r.all,r.removed]),e._changedQueryParams=null)}function h(e,t,r){var i,a,o,s=f(e.state,t);for(i=0,a=s.exited.length;a>i;i++)o=s.exited[i].handler,delete o.context,n.callHook(o,"reset",!0,r),n.callHook(o,"exit",r);var u=e.oldState=e.state;e.state=t;var l=e.currentHandlerInfos=s.unchanged.slice();try{for(i=0,a=s.reset.length;a>i;i++)o=s.reset[i].handler,n.callHook(o,"reset",!1,r);for(i=0,a=s.updatedContext.length;a>i;i++)d(l,s.updatedContext[i],!1,r);for(i=0,a=s.entered.length;a>i;i++)d(l,s.entered[i],!0,r)}catch(c){throw e.state=u,e.currentHandlerInfos=u.handlerInfos,c}e.state.queryParams=y(e,l,t.queryParams,r)}function d(e,t,r,i){var o=t.handler,s=t.context;if(r&&n.callHook(o,"enter",i),i&&i.isAborted)throw new a.TransitionAborted;if(o.context=s,n.callHook(o,"contextDidChange"),n.callHook(o,"setup",s,i),i&&i.isAborted)throw new a.TransitionAborted;return e.push(t),!0}function f(e,t){var r,n,i,a=e.handlerInfos,o=t.handlerInfos,s={updatedContext:[],exited:[],entered:[],unchanged:[]},u=!1;for(n=0,i=o.length;i>n;n++){var l=a[n],c=o[n];l&&l.handler===c.handler||(r=!0),r?(s.entered.push(c),l&&s.exited.unshift(l)):u||l.context!==c.context?(u=!0,s.updatedContext.push(c)):s.unchanged.push(l)}for(n=o.length,i=a.length;i>n;n++)s.exited.unshift(a[n]);return s.reset=s.updatedContext.slice(),s.reset.reverse(),s}function p(e,t,r){var i=e.urlMethod;if(i){for(var a=e.router,o=t.handlerInfos,s=o[o.length-1].name,u={},l=o.length-1;l>=0;--l){var c=o[l];n.merge(u,c.params),c.handler.inaccessibleByURL&&(i=null)}if(i){u.queryParams=e._visibleQueryParams||t.queryParams;var m=a.recognizer.generate(s,u);"replace"===i?a.replaceURL(m):a.updateURL(m)}}}function v(e,t){try{n.log(e.router,e.sequence,"Resolved all models on destination route; finalizing transition.");var i=e.router,o=t.handlerInfos;e.sequence;return h(i,t,e),e.isAborted?(i.state.handlerInfos=i.currentHandlerInfos,r["default"].reject(a.logAbort(e))):(p(e,t,e.intent.url),e.isActive=!1,i.activeTransition=null,n.trigger(i,i.currentHandlerInfos,!0,["didTransition"]),i.didTransition&&i.didTransition(i.currentHandlerInfos),n.log(i,e.sequence,"TRANSITION COMPLETE."),o[o.length-1].handler)}catch(s){if(!(s instanceof a.TransitionAborted)){var u=e.state.handlerInfos;e.trigger(!0,"error",s,e,u[u.length-1].handler),e.abort()}throw s}}function g(e,t,r){var i=t[0]||"/",a=t[t.length-1],u={};a&&a.hasOwnProperty("queryParams")&&(u=w.call(t).queryParams);var l;if(0===t.length){n.log(e,"Updating query params");var c=e.state.handlerInfos;l=new o["default"]({name:c[c.length-1].name,contexts:[],queryParams:u})}else"/"===i.charAt(0)?(n.log(e,"Attempting URL transition to "+i),l=new s["default"]({url:i})):(n.log(e,"Attempting transition to "+i),l=new o["default"]({name:t[0],contexts:n.slice.call(t,1),queryParams:u}));return e.transitionByIntent(l,r)}function b(e,t){if(e.length!==t.length)return!1;for(var r=0,n=e.length;n>r;++r)if(e[r]!==t[r])return!1;return!0}function y(e,t,r,i){for(var a in r)r.hasOwnProperty(a)&&null===r[a]&&delete r[a];var o=[];n.trigger(e,t,!0,["finalizeQueryParamChange",r,o,i]),i&&(i._visibleQueryParams={});for(var s={},u=0,l=o.length;l>u;++u){var c=o[u];s[c.key]=c.value,i&&c.visible!==!1&&(i._visibleQueryParams[c.key]=c.value)}return s}function _(e,t,r){var i,a,o,s,u,l,c=e.state.handlerInfos,m=[],h=null;for(s=c.length,o=0;s>o;o++){if(u=c[o],l=t.handlerInfos[o],!l||u.name!==l.name){h=o;break}l.isResolved||m.push(u)}null!==h&&(i=c.slice(h,s),a=function(e){for(var t=0,r=i.length;r>t;t++)if(i[t].name===e)return!0;return!1}),n.trigger(e,c,!0,["willTransition",r]),e.willTransition&&e.willTransition(c,t.handlerInfos,r)}var w=Array.prototype.pop;l.prototype={map:function(e){this.recognizer.delegate=this.delegate,this.recognizer.map(e,function(e,t){for(var r=t.length-1,n=!0;r>=0&&n;--r){var i=t[r];e.add(t,{as:i.handler}),n="/"===i.path||""===i.path||".index"===i.handler.slice(-6)}})},hasRoute:function(e){return this.recognizer.hasRoute(e)},getHandler:function(){},queryParamsTransition:function(e,t,r,i){var o=this;if(m(this,i,e),!t&&this.activeTransition)return this.activeTransition;var s=new a.Transition(this);return s.queryParamsOnly=!0,r.queryParams=y(this,i.handlerInfos,i.queryParams,s),s.promise=s.promise.then(function(e){return p(s,r,!0),o.didTransition&&o.didTransition(o.currentHandlerInfos),e},null,n.promiseLabel("Transition complete")),s},transitionByIntent:function(e,t){try{return c.apply(this,arguments)}catch(r){return new a.Transition(this,e,null,r)}},reset:function(){this.state&&n.forEach(this.state.handlerInfos.slice().reverse(),function(e){var t=e.handler;n.callHook(t,"exit")}),this.state=new i["default"],this.currentHandlerInfos=null},activeTransition:null,handleURL:function(e){var t=n.slice.call(arguments);return"/"!==e.charAt(0)&&(t[0]="/"+e),g(this,t).method(null)},updateURL:function(){throw new Error("updateURL is not implemented")},replaceURL:function(e){this.updateURL(e)},transitionTo:function(e){return g(this,arguments)},intermediateTransitionTo:function(e){return g(this,arguments,!0)},refresh:function(e){for(var t=this.activeTransition?this.activeTransition.state:this.state,r=t.handlerInfos,i={},a=0,s=r.length;s>a;++a){var u=r[a];i[u.name]=u.params||{}}n.log(this,"Starting a refresh transition");var l=new o["default"]({name:r[r.length-1].name,pivotHandler:e||r[0].handler,contexts:[],queryParams:this._changedQueryParams||t.queryParams||{}});return this.transitionByIntent(l,!1)},replaceWith:function(e){return g(this,arguments).method("replace")},generate:function(e){for(var t=n.extractQueryParams(n.slice.call(arguments,1)),r=t[0],i=t[1],a=new o["default"]({name:e,contexts:r}),s=a.applyToState(this.state,this.recognizer,this.getHandler),u={},l=0,c=s.handlerInfos.length;c>l;++l){var m=s.handlerInfos[l],h=m.serialize();n.merge(u,h)}return u.queryParams=i,this.recognizer.generate(e,u)},applyIntent:function(e,t){var r=new o["default"]({name:e,contexts:t}),n=this.activeTransition&&this.activeTransition.state||this.state;return r.applyToState(n,this.recognizer,this.getHandler)},isActiveIntent:function(e,t,r,a){var s,u,l=a||this.state,c=l.handlerInfos;if(!c.length)return!1;var m=c[c.length-1].name,h=this.recognizer.handlersFor(m),d=0;for(u=h.length;u>d&&(s=c[d],s.name!==e);++d);if(d===h.length)return!1;var f=new i["default"];f.handlerInfos=c.slice(0,d+1),h=h.slice(0,d+1);var p=new o["default"]({name:m,contexts:t}),v=p.applyToHandlers(f,h,this.getHandler,m,!0,!0),g=b(v.handlerInfos,f.handlerInfos);if(!r||!g)return g;var y={};n.merge(y,r);var _=l.queryParams;for(var w in _)_.hasOwnProperty(w)&&y.hasOwnProperty(w)&&(y[w]=_[w]);return g&&!n.getChangelist(y,r)},isActive:function(e){var t=n.extractQueryParams(n.slice.call(arguments,1));return this.isActiveIntent(e,t[0],t[1])},trigger:function(e){var t=n.slice.call(arguments);n.trigger(this,this.currentHandlerInfos,!1,t)},log:null},e["default"]=l}),e("router/transition-intent/named-transition-intent",["exports","router/transition-intent","router/transition-state","router/handler-info/factory","router/utils"],function(e,t,r,n,i){"use strict";e["default"]=i.subclass(t["default"],{name:null,pivotHandler:null,contexts:null,queryParams:null,initialize:function(e){this.name=e.name,this.pivotHandler=e.pivotHandler,this.contexts=e.contexts||[],this.queryParams=e.queryParams},applyToState:function(e,t,r,n){var a=i.extractQueryParams([this.name].concat(this.contexts)),o=a[0],s=(a[1],t.handlersFor(o[0])),u=s[s.length-1].handler;return this.applyToHandlers(e,s,r,u,n)},applyToHandlers:function(e,t,n,a,o,s){var u,l,c=new r["default"],m=this.contexts.slice(0),h=t.length;if(this.pivotHandler)for(u=0,l=t.length;l>u;++u)if(n(t[u].handler)===this.pivotHandler){h=u;break}!this.pivotHandler;for(u=t.length-1;u>=0;--u){var d=t[u],f=d.handler,p=n(f),v=e.handlerInfos[u],g=null;if(g=d.names.length>0?u>=h?this.createParamHandlerInfo(f,p,d.names,m,v):this.getHandlerInfoForDynamicSegment(f,p,d.names,m,v,a,u):this.createParamHandlerInfo(f,p,d.names,m,v),s){g=g.becomeResolved(null,g.context);var b=v&&v.context;d.names.length>0&&g.context===b&&(g.params=v&&v.params),g.context=b}var y=v;(u>=h||g.shouldSupercede(v))&&(h=Math.min(u,h),y=g),o&&!s&&(y=y.becomeResolved(null,y.context)),c.handlerInfos.unshift(y)}if(m.length>0)throw new Error("More context objects were passed than there are dynamic segments for the route: "+a);return o||this.invalidateChildren(c.handlerInfos,h),i.merge(c.queryParams,this.queryParams||{}),c},invalidateChildren:function(e,t){for(var r=t,n=e.length;n>r;++r){e[r];e[r]=e[r].getUnresolved()}},getHandlerInfoForDynamicSegment:function(e,t,r,a,o,s,u){var l;r.length;if(a.length>0){if(l=a[a.length-1],i.isParam(l))return this.createParamHandlerInfo(e,t,r,a,o);a.pop()}else{if(o&&o.name===e)return o;if(!this.preTransitionState)return o;var c=this.preTransitionState.handlerInfos[u];l=c&&c.context}return n["default"]("object",{name:e,handler:t,context:l,names:r})},createParamHandlerInfo:function(e,t,r,a,o){for(var s={},u=r.length;u--;){var l=o&&e===o.name&&o.params||{},c=a[a.length-1],m=r[u];if(i.isParam(c))s[m]=""+a.pop();else{if(!l.hasOwnProperty(m))throw new Error("You didn't provide enough string/numeric parameters to satisfy all of the dynamic segments for route "+e);s[m]=l[m]}}return n["default"]("param",{name:e,handler:t,params:s})}})}),e("router/transition-intent/url-transition-intent",["exports","router/transition-intent","router/transition-state","router/handler-info/factory","router/utils","router/unrecognized-url-error"],function(e,t,r,n,i,a){"use strict";e["default"]=i.subclass(t["default"],{url:null,initialize:function(e){this.url=e.url},applyToState:function(e,t,o){var s,u,l=new r["default"],c=t.recognize(this.url);if(!c)throw new a["default"](this.url);var m=!1;for(s=0,u=c.length;u>s;++s){var h=c[s],d=h.handler,f=o(d);if(f.inaccessibleByURL)throw new a["default"](this.url);var p=n["default"]("param",{name:d,handler:f,params:h.params}),v=e.handlerInfos[s];m||p.shouldSupercede(v)?(m=!0,l.handlerInfos[s]=p):l.handlerInfos[s]=v}return i.merge(l.queryParams,c.queryParams),l}})}),e("router/transition-intent",["exports","router/utils"],function(e,t){"use strict";function r(e){this.initialize(e),this.data=this.data||{}}r.prototype={initialize:null,applyToState:null},e["default"]=r}),e("router/transition-state",["exports","router/handler-info","router/utils","rsvp/promise"],function(e,t,r,n){"use strict";function i(e){this.handlerInfos=[],this.queryParams={},this.params={}}i.prototype={handlerInfos:null,queryParams:null,params:null,promiseLabel:function(e){var t="";return r.forEach(this.handlerInfos,function(e){""!==t&&(t+="."),t+=e.name}),r.promiseLabel("'"+t+"': "+e)},resolve:function(e,t){function i(){return n["default"].resolve(e(),l.promiseLabel("Check if should continue"))["catch"](function(e){return c=!0,n["default"].reject(e)},l.promiseLabel("Handle abort"))}function a(e){var r=l.handlerInfos,i=t.resolveIndex>=r.length?r.length-1:t.resolveIndex;return n["default"].reject({error:e,handlerWithError:l.handlerInfos[i].handler,wasAborted:c,state:l})}function o(e){var n=l.handlerInfos[t.resolveIndex].isResolved;if(l.handlerInfos[t.resolveIndex++]=e,!n){var a=e.handler;r.callHook(a,"redirect",e.context,t)}return i().then(s,null,l.promiseLabel("Resolve handler"))}function s(){if(t.resolveIndex===l.handlerInfos.length)return{error:null,state:l};var e=l.handlerInfos[t.resolveIndex];return e.resolve(i,t).then(o,null,l.promiseLabel("Proceed"))}var u=this.params;r.forEach(this.handlerInfos,function(e){u[e.name]=e.params||{}}),t=t||{},t.resolveIndex=0;var l=this,c=!1;return n["default"].resolve(null,this.promiseLabel("Start transition")).then(s,null,this.promiseLabel("Resolve handler"))["catch"](a,this.promiseLabel("Handle error"))}},e["default"]=i}),e("router/transition",["exports","rsvp/promise","router/handler-info","router/utils"],function(e,t,r,n){"use strict";function i(e,r,o,s){function u(){return l.isAborted?t["default"].reject(void 0,n.promiseLabel("Transition aborted - reject")):void 0}var l=this;if(this.state=o||e.state,this.intent=r,this.router=e,this.data=this.intent&&this.intent.data||{},this.resolvedModels={},this.queryParams={},s)return this.promise=t["default"].reject(s),void(this.error=s);if(o){this.params=o.params,this.queryParams=o.queryParams,this.handlerInfos=o.handlerInfos;var c=o.handlerInfos.length;c&&(this.targetName=o.handlerInfos[c-1].name);for(var m=0;c>m;++m){var h=o.handlerInfos[m];if(!h.isResolved)break;this.pivotHandler=h.handler}this.sequence=i.currentSequence++,this.promise=o.resolve(u,this)["catch"](function(e){return e.wasAborted||l.isAborted?t["default"].reject(a(l)):(l.trigger("error",e.error,l,e.handlerWithError),l.abort(),t["default"].reject(e.error))},n.promiseLabel("Handle Abort"))}else this.promise=t["default"].resolve(this.state),this.params={}}function a(e){return n.log(e.router,e.sequence,"detected abort."),new o}function o(e){this.message=e||"TransitionAborted",this.name="TransitionAborted"}i.currentSequence=0,i.prototype={targetName:null,urlMethod:"update",intent:null,params:null,pivotHandler:null,resolveIndex:0,handlerInfos:null,resolvedModels:null,isActive:!0,state:null,queryParamsOnly:!1,isTransition:!0,isExiting:function(e){for(var t=this.handlerInfos,r=0,n=t.length;n>r;++r){var i=t[r];if(i.name===e||i.handler===e)return!1}return!0},promise:null,data:null,then:function(e,t,r){return this.promise.then(e,t,r)},"catch":function(e,t){return this.promise["catch"](e,t)},"finally":function(e,t){return this.promise["finally"](e,t)},abort:function(){return this.isAborted?this:(n.log(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,this)},retry:function(){return this.abort(),this.router.transitionByIntent(this.intent,!1)},method:function(e){return this.urlMethod=e,this},trigger:function(e){var t=n.slice.call(arguments);"boolean"==typeof e?t.shift():e=!1,n.trigger(this.router,this.state.handlerInfos.slice(0,this.resolveIndex+1),e,t)},followRedirects:function(){var e=this.router;return this.promise["catch"](function(r){return e.activeTransition?e.activeTransition.followRedirects():t["default"].reject(r)})},toString:function(){return"Transition (sequence "+this.sequence+")"},log:function(e){n.log(this.router,this.sequence,e)}},i.prototype.send=i.prototype.trigger,e.Transition=i,e.logAbort=a,e.TransitionAborted=o}),e("router/unrecognized-url-error",["exports","router/utils"],function(e,t){"use strict";function r(e){this.message=e||"UnrecognizedURLError",this.name="UnrecognizedURLError",Error.call(this)}r.prototype=t.oCreate(Error.prototype),e["default"]=r}),e("router/utils",["exports"],function(e){"use strict";function t(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}function r(e){var t,r,n=e&&e.length;return n&&n>0&&e[n-1]&&e[n-1].hasOwnProperty("queryParams")?(r=e[n-1].queryParams,t=v.call(e,0,n-1),[t,r]):[e,null]}function n(e){for(var t in e)if("number"==typeof e[t])e[t]=""+e[t];else if(g(e[t]))for(var r=0,n=e[t].length;n>r;r++)e[t][r]=""+e[t][r]}function i(e,t,r){e.log&&(3===arguments.length?e.log("Transition #"+t+": "+r):(r=t,e.log(r)))}function a(e,t){var r=arguments;return function(n){var i=v.call(r,2);return i.push(n),t.apply(e,i)}}function o(e){return"string"==typeof e||e instanceof String||"number"==typeof e||e instanceof Number}function s(e,t){for(var r=0,n=e.length;n>r&&!1!==t(e[r]);r++);}function u(e,t,r,n){if(e.triggerEvent)return void e.triggerEvent(t,r,n);var i=n.shift();if(!t){if(r)return;throw new Error("Could not trigger event '"+i+"'. There are no active handlers")}for(var a=!1,o=t.length-1;o>=0;o--){var s=t[o],u=s.handler;if(u.events&&u.events[i]){if(u.events[i].apply(u,n)!==!0)return;a=!0}}if(!a&&!r)throw new Error("Nothing handled the event '"+i+"'.")}function l(e,r){var i,a={all:{},changed:{},removed:{}};t(a.all,r);var o=!1;n(e),n(r);for(i in e)e.hasOwnProperty(i)&&(r.hasOwnProperty(i)||(o=!0,a.removed[i]=e[i]));for(i in r)if(r.hasOwnProperty(i))if(g(e[i])&&g(r[i]))if(e[i].length!==r[i].length)a.changed[i]=r[i],o=!0;else for(var s=0,u=e[i].length;u>s;s++)e[i][s]!==r[i][s]&&(a.changed[i]=r[i],o=!0);else e[i]!==r[i]&&(a.changed[i]=r[i],o=!0);return o&&a}function c(e){return"Router: "+e}function m(e,r){function n(t){e.call(this,t||{})}return n.prototype=b(e.prototype),t(n.prototype,r),n}function h(e,t){if(e){var r="_"+t;return e[r]&&r||e[t]&&t}}function d(e,t,r,n){var i=h(e,t);return i&&e[i].call(e,r,n)}function f(e,t,r){var n=h(e,t);return n?0===r.length?e[n].call(e):1===r.length?e[n].call(e,r[0]):2===r.length?e[n].call(e,r[0],r[1]):e[n].apply(e,r):void 0}e.extractQueryParams=r,e.log=i,e.bind=a,e.forEach=s,e.trigger=u,e.getChangelist=l,e.promiseLabel=c,e.subclass=m;var p,v=Array.prototype.slice;p=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var g=p;e.isArray=g;var b=Object.create||function(e){function t(){}return t.prototype=e,new t};e.oCreate=b,e.merge=t,e.slice=v,e.isParam=o,e.coerceQueryParamsToString=n,e.callHook=d,e.resolveHook=h,e.applyHook=f}),e("router",["exports","router/router"],function(e,t){"use strict";e["default"]=t["default"]}),e("rsvp/-internal",["exports","rsvp/utils","rsvp/instrument","rsvp/config"],function(e,t,r,n){"use strict";function i(){return new TypeError("A promises callback cannot return that same promise.")}function a(){}function o(e){try{return e.then}catch(t){return k.error=t,k}}function s(e,t,r,n){try{e.call(t,r,n)}catch(i){return i}}function u(e,t,r){n.config.async(function(e){var n=!1,i=s(r,t,function(r){n||(n=!0,t!==r?m(e,r):d(e,r))},function(t){n||(n=!0,f(e,t))},"Settle: "+(e._label||" unknown promise"));!n&&i&&(n=!0,f(e,i))},e)}function l(e,t){t._state===x?d(e,t._result):t._state===C?(t._onError=null,f(e,t._result)):p(t,void 0,function(r){t!==r?m(e,r):d(e,r)},function(t){f(e,t)})}function c(e,r){if(r.constructor===e.constructor)l(e,r);else{var n=o(r);n===k?f(e,k.error):void 0===n?d(e,r):t.isFunction(n)?u(e,r,n):d(e,r)}}function m(e,r){e===r?d(e,r):t.objectOrFunction(r)?c(e,r):d(e,r)}function h(e){e._onError&&e._onError(e._result),v(e)}function d(e,t){e._state===w&&(e._result=t,e._state=x,0===e._subscribers.length?n.config.instrument&&r["default"]("fulfilled",e):n.config.async(v,e))}function f(e,t){e._state===w&&(e._state=C,e._result=t,n.config.async(h,e))}function p(e,t,r,i){var a=e._subscribers,o=a.length;e._onError=null,a[o]=t,a[o+x]=r,a[o+C]=i,0===o&&e._state&&n.config.async(v,e)}function v(e){var t=e._subscribers,i=e._state;if(n.config.instrument&&r["default"](i===x?"fulfilled":"rejected",e),0!==t.length){for(var a,o,s=e._result,u=0;ue;e+=2){var t=b[e],r=b[e+1];t(r),b[e]=void 0,b[e+1]=void 0}h=0}function l(){try{var e=r,t=e("vertx");return c=t.runOnLoop||t.runOnContext,i()}catch(n){return s()}}e["default"]=t;var c,m,h=0,d=({}.toString,"undefined"!=typeof window?window:void 0),f=d||{},p=f.MutationObserver||f.WebKitMutationObserver,v="undefined"==typeof window&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),g="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,b=new Array(1e3);m=v?n():p?a():g?o():void 0===d&&"function"==typeof r?l():s()}),e("rsvp/config",["exports","rsvp/events"],function(e,t){"use strict";function r(e,t){return"onerror"===e?void n.on("error",t):2!==arguments.length?n[e]:void(n[e]=t)}var n={instrument:!1};t["default"].mixin(n),e.config=n,e.configure=r}),e("rsvp/defer",["exports","rsvp/promise"],function(e,t){"use strict";function r(e){var r={};return r.promise=new t["default"](function(e,t){r.resolve=e,r.reject=t},e),r}e["default"]=r}),e("rsvp/enumerator",["exports","rsvp/utils","rsvp/-internal"],function(e,t,r){"use strict";function n(e,t,n){return e===r.FULFILLED?{state:"fulfilled",value:n}:{state:"rejected",reason:n}}function i(e,t,n,i){var a=this;a._instanceConstructor=e,a.promise=new e(r.noop,i),a._abortOnReject=n,a._validateInput(t)?(a._input=t,a.length=t.length,a._remaining=t.length,a._init(),0===a.length?r.fulfill(a.promise,a._result):(a.length=a.length||0,a._enumerate(),0===a._remaining&&r.fulfill(a.promise,a._result))):r.reject(a.promise,a._validationError())}e.makeSettledResult=n,e["default"]=i,i.prototype._validateInput=function(e){return t.isArray(e)},i.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},i.prototype._init=function(){this._result=new Array(this.length)},i.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,i=e._input,a=0;n._state===r.PENDING&&t>a;a++)e._eachEntry(i[a],a)},i.prototype._eachEntry=function(e,n){var i=this,a=i._instanceConstructor;t.isMaybeThenable(e)?e.constructor===a&&e._state!==r.PENDING?(e._onError=null,i._settledAt(e._state,n,e._result)):i._willSettleAt(a.resolve(e),n):(i._remaining--,i._result[n]=i._makeResult(r.FULFILLED,n,e))},i.prototype._settledAt=function(e,t,n){var i=this,a=i.promise;a._state===r.PENDING&&(i._remaining--,i._abortOnReject&&e===r.REJECTED?r.reject(a,n):i._result[t]=i._makeResult(e,t,n)),0===i._remaining&&r.fulfill(a,i._result)},i.prototype._makeResult=function(e,t,r){return r},i.prototype._willSettleAt=function(e,t){var n=this;r.subscribe(e,void 0,function(e){n._settledAt(r.FULFILLED,t,e)},function(e){n._settledAt(r.REJECTED,t,e)})}}),e("rsvp/events",["exports"],function(e){"use strict";function t(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r]===t)return r;return-1}function r(e){var t=e._promiseCallbacks;return t||(t=e._promiseCallbacks={}),t}e["default"]={mixin:function(e){return e.on=this.on,e.off=this.off,e.trigger=this.trigger,e._promiseCallbacks=void 0,e},on:function(e,n){if("function"!=typeof n)throw new TypeError("Callback must be a function");var i,a=r(this);i=a[e],i||(i=a[e]=[]),-1===t(i,n)&&i.push(n)},off:function(e,n){var i,a,o=r(this);return n?(i=o[e],a=t(i,n),void(-1!==a&&i.splice(a,1))):void(o[e]=[])},trigger:function(e,t){var n,i,a=r(this);if(n=a[e])for(var o=0;os;s++)o[s]=n(e[s]);return t["default"].all(o,i).then(function(t){for(var r=new Array(a),n=0,i=0;a>i;i++)t[i]&&(r[n]=e[i],n++);return r.length=n,r})})}e["default"]=n}),e("rsvp/hash-settled",["exports","rsvp/promise","rsvp/enumerator","rsvp/promise-hash","rsvp/utils"],function(e,t,r,n,i){"use strict";function a(e,t,r){this._superConstructor(e,t,!1,r)}function o(e,r){return new a(t["default"],e,r).promise; +}e["default"]=o,a.prototype=i.o_create(n["default"].prototype),a.prototype._superConstructor=r["default"],a.prototype._makeResult=r.makeSettledResult,a.prototype._validationError=function(){return new Error("hashSettled must be called with an object")}}),e("rsvp/hash",["exports","rsvp/promise","rsvp/promise-hash"],function(e,t,r){"use strict";function n(e,n){return new r["default"](t["default"],e,n).promise}e["default"]=n}),e("rsvp/instrument",["exports","rsvp/config","rsvp/utils"],function(e,t,r){"use strict";function n(){setTimeout(function(){for(var e,r=0;rs;s++)o[s]=n(e[s]);return t["default"].all(o,i)})}e["default"]=n}),e("rsvp/node",["exports","rsvp/promise","rsvp/-internal","rsvp/utils"],function(e,t,r,n){"use strict";function i(){this.value=void 0}function a(e){try{return e.then}catch(t){return f.value=t,f}}function o(e,t,r){try{e.apply(t,r)}catch(n){return f.value=n,f}}function s(e,t){for(var r,n,i={},a=e.length,o=new Array(a),s=0;a>s;s++)o[s]=e[s];for(n=0;nn;n++)r[n-1]=e[n];return r}function l(e,t){return{then:function(r,n){return e.call(t,r,n)}}}function c(e,i){var a=function(){for(var a,o=this,c=arguments.length,f=new Array(c+1),v=!1,g=0;c>g;++g){if(a=arguments[g],!v){if(v=d(a),v===p){var b=new t["default"](r.noop);return r.reject(b,p.value),b}v&&v!==!0&&(a=l(v,a))}f[g]=a}var y=new t["default"](r.noop);return f[c]=function(e,t){e?r.reject(y,e):void 0===i?r.resolve(y,t):i===!0?r.resolve(y,u(arguments)):n.isArray(i)?r.resolve(y,s(arguments,i)):r.resolve(y,t)},v?h(y,f,e,o):m(y,f,e,o)};return a.__proto__=e,a}function m(e,t,n,i){var a=o(n,i,t);return a===f&&r.reject(e,a.value),e}function h(e,n,i,a){return t["default"].all(n).then(function(t){var n=o(i,a,t);return n===f&&r.reject(e,n.value),e})}function d(e){return e&&"object"==typeof e?e.constructor===t["default"]?!0:a(e):!1}e["default"]=c;var f=new i,p=new i}),e("rsvp/platform",["exports"],function(e){"use strict";var t;if("object"==typeof self)t=self;else{if("object"!=typeof global)throw new Error("no global: `self` or `global` found");t=global}e["default"]=t}),e("rsvp/promise/all",["exports","rsvp/enumerator"],function(e,t){"use strict";function r(e,r){return new t["default"](this,e,!0,r).promise}e["default"]=r}),e("rsvp/promise/race",["exports","rsvp/utils","rsvp/-internal"],function(e,t,r){"use strict";function n(e,n){function i(e){r.resolve(s,e)}function a(e){r.reject(s,e)}var o=this,s=new o(r.noop,n);if(!t.isArray(e))return r.reject(s,new TypeError("You must pass an array to race.")),s;for(var u=e.length,l=0;s._state===r.PENDING&&u>l;l++)r.subscribe(o.resolve(e[l]),void 0,i,a);return s}e["default"]=n}),e("rsvp/promise/reject",["exports","rsvp/-internal"],function(e,t){"use strict";function r(e,r){var n=this,i=new n(t.noop,r);return t.reject(i,e),i}e["default"]=r}),e("rsvp/promise/resolve",["exports","rsvp/-internal"],function(e,t){"use strict";function r(e,r){var n=this;if(e&&"object"==typeof e&&e.constructor===n)return e;var i=new n(t.noop,r);return t.resolve(i,e),i}e["default"]=r}),e("rsvp/promise-hash",["exports","rsvp/enumerator","rsvp/-internal","rsvp/utils"],function(e,t,r,n){"use strict";function i(e,t,r){this._superConstructor(e,t,!0,r)}e["default"]=i,i.prototype=n.o_create(t["default"].prototype),i.prototype._superConstructor=t["default"],i.prototype._init=function(){this._result={}},i.prototype._validateInput=function(e){return e&&"object"==typeof e},i.prototype._validationError=function(){return new Error("Promise.hash must be called with an object")},i.prototype._enumerate=function(){var e=this,t=e.promise,n=e._input,i=[];for(var a in n)t._state===r.PENDING&&Object.prototype.hasOwnProperty.call(n,a)&&i.push({position:a,entry:n[a]});var o=i.length;e._remaining=o;for(var s,u=0;t._state===r.PENDING&&o>u;u++)s=i[u],e._eachEntry(s.entry,s.position)}}),e("rsvp/promise",["exports","rsvp/config","rsvp/instrument","rsvp/utils","rsvp/-internal","rsvp/promise/all","rsvp/promise/race","rsvp/promise/resolve","rsvp/promise/reject"],function(e,t,r,n,i,a,o,s,u){"use strict";function l(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function c(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function m(e,a){var o=this;o._id=d++,o._label=a,o._state=void 0,o._result=void 0,o._subscribers=[],t.config.instrument&&r["default"]("created",o),i.noop!==e&&(n.isFunction(e)||l(),o instanceof m||c(),i.initializePromise(o,e))}e["default"]=m;var h="rsvp_"+n.now()+"-",d=0;m.cast=s["default"],m.all=a["default"],m.race=o["default"],m.resolve=s["default"],m.reject=u["default"],m.prototype={constructor:m,_guidKey:h,_onError:function(e){var r=this;t.config.after(function(){r._onError&&t.config.trigger("error",e)})},then:function(e,n,a){var o=this,s=o._state;if(s===i.FULFILLED&&!e||s===i.REJECTED&&!n)return t.config.instrument&&r["default"]("chained",o,o),o;o._onError=null;var u=new o.constructor(i.noop,a),l=o._result;if(t.config.instrument&&r["default"]("chained",o,u),s){var c=arguments[s-1];t.config.async(function(){i.invokeCallback(s,u,c,l)})}else i.subscribe(o,u,e,n);return u},"catch":function(e,t){return this.then(void 0,e,t)},"finally":function(e,t){var r=this,n=r.constructor;return r.then(function(t){return n.resolve(e()).then(function(){return t})},function(t){return n.resolve(e()).then(function(){throw t})},t)}}}),e("rsvp/race",["exports","rsvp/promise"],function(e,t){"use strict";function r(e,r){return t["default"].race(e,r)}e["default"]=r}),e("rsvp/reject",["exports","rsvp/promise"],function(e,t){"use strict";function r(e,r){return t["default"].reject(e,r)}e["default"]=r}),e("rsvp/resolve",["exports","rsvp/promise"],function(e,t){"use strict";function r(e,r){return t["default"].resolve(e,r)}e["default"]=r}),e("rsvp/rethrow",["exports"],function(e){"use strict";function t(e){throw setTimeout(function(){throw e}),e}e["default"]=t}),e("rsvp/utils",["exports"],function(e){"use strict";function t(e){return"function"==typeof e||"object"==typeof e&&null!==e}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(){}e.objectOrFunction=t,e.isFunction=r,e.isMaybeThenable=n;var a;a=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var o=a;e.isArray=o;var s=Date.now||function(){return(new Date).getTime()};e.now=s;var u=Object.create||function(e){if(arguments.length>1)throw new Error("Second argument not supported");if("object"!=typeof e)throw new TypeError("Argument must be an object");return i.prototype=e,new i};e.o_create=u}),e("rsvp",["exports","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"],function(e,t,r,n,i,a,o,s,u,l,c,m,h,d,f,p,v){"use strict";function g(e,t){m.config.async(e,t)}function b(){m.config.on.apply(m.config,arguments)}function y(){m.config.off.apply(m.config,arguments)}m.config.async=v["default"],m.config.after=function(e){setTimeout(e,0)};var _=d["default"];if("undefined"!=typeof window&&"object"==typeof window.__PROMISE_INSTRUMENTATION__){var w=window.__PROMISE_INSTRUMENTATION__;m.configure("instrument",!0);for(var x in w)w.hasOwnProperty(x)&&b(x,w[x])}e.cast=_,e.Promise=t["default"],e.EventTarget=r["default"],e.all=i["default"],e.allSettled=a["default"],e.race=o["default"],e.hash=s["default"],e.hashSettled=u["default"],e.rethrow=l["default"],e.defer=c["default"],e.denodeify=n["default"],e.configure=m.configure,e.on=b,e.off=y,e.resolve=d["default"],e.reject=f["default"],e.async=g,e.map=h["default"],e.filter=p["default"]}),e("rsvp.umd",["exports","rsvp/platform","rsvp"],function(e,t,r){"use strict";var n={race:r.race,Promise:r.Promise,allSettled:r.allSettled,hash:r.hash,hashSettled:r.hashSettled,denodeify:r.denodeify,on:r.on,off:r.off,map:r.map,filter:r.filter,resolve:r.resolve,reject:r.reject,all:r.all,rethrow:r.rethrow,defer:r.defer,EventTarget:r.EventTarget,configure:r.configure,async:r.async};"function"==typeof define&&define.amd?define(function(){return n}):"undefined"!=typeof module&&module.exports?module.exports=n:"undefined"!=typeof t["default"]&&(t["default"].RSVP=n)}),e("vertex",["exports"],function(e){"use strict";function t(e){this.name=e,this.incoming={},this.incomingNames=[],this.hasOutgoing=!1,this.value=null}e["default"]=t}),e("visit",["exports"],function(e){"use strict";function t(e,r,n,i){var a,o=e.name,s=e.incoming,u=e.incomingNames,l=u.length;if(n||(n={}),i||(i=[]),!n.hasOwnProperty(o)){for(i.push(o),n[o]=!0,a=0;l>a;a++)t(s[u[a]],r,n,i);r(e,i),i.pop()}}e["default"]=t}),t("ember")}(); \ No newline at end of file diff --git a/connect-examples/v2/rails_payment/app/assets/javascripts/welcome.coffee b/connect-examples/v2/rails_payment/app/assets/javascripts/welcome.coffee new file mode 100644 index 000000000..24f83d18b --- /dev/null +++ b/connect-examples/v2/rails_payment/app/assets/javascripts/welcome.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/connect-examples/v2/rails_payment/app/assets/stylesheets/application.css b/connect-examples/v2/rails_payment/app/assets/stylesheets/application.css new file mode 100644 index 000000000..328023fc6 --- /dev/null +++ b/connect-examples/v2/rails_payment/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any styles + * defined in the other CSS/SCSS files in this directory. It is generally better to create a new + * file per style scope. + * + *= require welcome + *= require_self + */ diff --git a/connect-examples/v2/rails_payment/app/assets/stylesheets/bootstrap.css b/connect-examples/v2/rails_payment/app/assets/stylesheets/bootstrap.css new file mode 100644 index 000000000..42c79d6e4 --- /dev/null +++ b/connect-examples/v2/rails_payment/app/assets/stylesheets/bootstrap.css @@ -0,0 +1,6760 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/connect-examples/v2/rails_payment/app/assets/stylesheets/bootstrap.css.map b/connect-examples/v2/rails_payment/app/assets/stylesheets/bootstrap.css.map new file mode 100644 index 000000000..09f8cda78 --- /dev/null +++ b/connect-examples/v2/rails_payment/app/assets/stylesheets/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACG5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDDD;ACQD;EACE,UAAA;CDND;ACmBD;;;;;;;;;;;;;EAaE,eAAA;CDjBD;ACyBD;;;;EAIE,sBAAA;EACA,yBAAA;CDvBD;AC+BD;EACE,cAAA;EACA,UAAA;CD7BD;ACqCD;;EAEE,cAAA;CDnCD;AC6CD;EACE,8BAAA;CD3CD;ACmDD;;EAEE,WAAA;CDjDD;AC2DD;EACE,0BAAA;CDzDD;ACgED;;EAEE,kBAAA;CD9DD;ACqED;EACE,mBAAA;CDnED;AC2ED;EACE,eAAA;EACA,iBAAA;CDzED;ACgFD;EACE,iBAAA;EACA,YAAA;CD9ED;ACqFD;EACE,eAAA;CDnFD;AC0FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CDxFD;AC2FD;EACE,YAAA;CDzFD;AC4FD;EACE,gBAAA;CD1FD;ACoGD;EACE,UAAA;CDlGD;ACyGD;EACE,iBAAA;CDvGD;ACiHD;EACE,iBAAA;CD/GD;ACsHD;EACE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,UAAA;CDpHD;AC2HD;EACE,eAAA;CDzHD;ACgID;;;;EAIE,kCAAA;EACA,eAAA;CD9HD;ACgJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CD9ID;ACqJD;EACE,kBAAA;CDnJD;AC6JD;;EAEE,qBAAA;CD3JD;ACsKD;;;;EAIE,2BAAA;EACA,gBAAA;CDpKD;AC2KD;;EAEE,gBAAA;CDzKD;ACgLD;;EAEE,UAAA;EACA,WAAA;CD9KD;ACsLD;EACE,oBAAA;CDpLD;AC+LD;;EAEE,+BAAA;KAAA,4BAAA;UAAA,uBAAA;EACA,WAAA;CD7LD;ACsMD;;EAEE,aAAA;CDpMD;AC4MD;EACE,8BAAA;EACA,gCAAA;KAAA,6BAAA;UAAA,wBAAA;CD1MD;ACmND;;EAEE,yBAAA;CDjND;ACwND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDtND;AC8ND;EACE,UAAA;EACA,WAAA;CD5ND;ACmOD;EACE,eAAA;CDjOD;ACyOD;EACE,kBAAA;CDvOD;ACiPD;EACE,0BAAA;EACA,kBAAA;CD/OD;ACkPD;;EAEE,WAAA;CDhPD;AACD,qFAAqF;AElFrF;EA7FI;;;IAGI,mCAAA;IACA,uBAAA;IACA,oCAAA;YAAA,4BAAA;IACA,6BAAA;GFkLL;EE/KC;;IAEI,2BAAA;GFiLL;EE9KC;IACI,6BAAA;GFgLL;EE7KC;IACI,8BAAA;GF+KL;EE1KC;;IAEI,YAAA;GF4KL;EEzKC;;IAEI,uBAAA;IACA,yBAAA;GF2KL;EExKC;IACI,4BAAA;GF0KL;EEvKC;;IAEI,yBAAA;GFyKL;EEtKC;IACI,2BAAA;GFwKL;EErKC;;;IAGI,WAAA;IACA,UAAA;GFuKL;EEpKC;;IAEI,wBAAA;GFsKL;EEhKC;IACI,cAAA;GFkKL;EEhKC;;IAGQ,kCAAA;GFiKT;EE9JC;IACI,uBAAA;GFgKL;EE7JC;IACI,qCAAA;GF+JL;EEhKC;;IAKQ,kCAAA;GF+JT;EE5JC;;IAGQ,kCAAA;GF6JT;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,oBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,iBAAA;CH8O9C;AG7OmC;EAAW,iBAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIthCD;ECgEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AIxhCD;;EC6DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIthCD;EACE,gBAAA;EACA,8CAAA;CJwhCD;AIrhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;CJuhCD;AInhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJqhCD;AI/gCD;EACE,eAAA;EACA,sBAAA;CJihCD;AI/gCC;;EAEE,eAAA;EACA,2BAAA;CJihCH;AI9gCC;EErDA,qBAAA;EAEA,2CAAA;EACA,qBAAA;CNqkCD;AIxgCD;EACE,UAAA;CJ0gCD;AIpgCD;EACE,uBAAA;CJsgCD;AIlgCD;;;;;EGvEE,eAAA;EACA,gBAAA;EACA,aAAA;CPglCD;AItgCD;EACE,mBAAA;CJwgCD;AIlgCD;EACE,aAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EC6FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EEvLR,sBAAA;EACA,gBAAA;EACA,aAAA;CPgmCD;AIlgCD;EACE,mBAAA;CJogCD;AI9/BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJggCD;AIx/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJ0/BD;AIl/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJo/BH;AIz+BD;EACE,gBAAA;CJ2+BD;AQloCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR8oCD;AQnpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,oBAAA;EACA,eAAA;EACA,eAAA;CRoqCH;AQhqCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRqqCD;AQzqCD;;;;;;;;;;;;EAQI,eAAA;CR+qCH;AQ5qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRirCD;AQrrCD;;;;;;;;;;;;EAQI,eAAA;CR2rCH;AQvrCD;;EAAU,gBAAA;CR2rCT;AQ1rCD;;EAAU,gBAAA;CR8rCT;AQ7rCD;;EAAU,gBAAA;CRisCT;AQhsCD;;EAAU,gBAAA;CRosCT;AQnsCD;;EAAU,gBAAA;CRusCT;AQtsCD;;EAAU,gBAAA;CR0sCT;AQpsCD;EACE,iBAAA;CRssCD;AQnsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRqsCD;AQhsCD;EAwOA;IA1OI,gBAAA;GRssCD;CACF;AQ9rCD;;EAEE,eAAA;CRgsCD;AQ7rCD;;EAEE,0BAAA;EACA,cAAA;CR+rCD;AQ3rCD;EAAuB,iBAAA;CR8rCtB;AQ7rCD;EAAuB,kBAAA;CRgsCtB;AQ/rCD;EAAuB,mBAAA;CRksCtB;AQjsCD;EAAuB,oBAAA;CRosCtB;AQnsCD;EAAuB,oBAAA;CRssCtB;AQnsCD;EAAuB,0BAAA;CRssCtB;AQrsCD;EAAuB,0BAAA;CRwsCtB;AQvsCD;EAAuB,2BAAA;CR0sCtB;AQvsCD;EACE,eAAA;CRysCD;AQvsCD;ECrGE,eAAA;CT+yCD;AS9yCC;;EAEE,eAAA;CTgzCH;AQ3sCD;ECxGE,eAAA;CTszCD;ASrzCC;;EAEE,eAAA;CTuzCH;AQ/sCD;EC3GE,eAAA;CT6zCD;AS5zCC;;EAEE,eAAA;CT8zCH;AQntCD;EC9GE,eAAA;CTo0CD;ASn0CC;;EAEE,eAAA;CTq0CH;AQvtCD;ECjHE,eAAA;CT20CD;AS10CC;;EAEE,eAAA;CT40CH;AQvtCD;EAGE,YAAA;EE3HA,0BAAA;CVm1CD;AUl1CC;;EAEE,0BAAA;CVo1CH;AQztCD;EE9HE,0BAAA;CV01CD;AUz1CC;;EAEE,0BAAA;CV21CH;AQ7tCD;EEjIE,0BAAA;CVi2CD;AUh2CC;;EAEE,0BAAA;CVk2CH;AQjuCD;EEpIE,0BAAA;CVw2CD;AUv2CC;;EAEE,0BAAA;CVy2CH;AQruCD;EEvIE,0BAAA;CV+2CD;AU92CC;;EAEE,0BAAA;CVg3CH;AQpuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRsuCD;AQ9tCD;;EAEE,cAAA;EACA,oBAAA;CRguCD;AQnuCD;;;;EAMI,iBAAA;CRmuCH;AQ5tCD;EACE,gBAAA;EACA,iBAAA;CR8tCD;AQ1tCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR6tCD;AQ/tCD;EAKI,sBAAA;EACA,kBAAA;EACA,mBAAA;CR6tCH;AQxtCD;EACE,cAAA;EACA,oBAAA;CR0tCD;AQxtCD;;EAEE,wBAAA;CR0tCD;AQxtCD;EACE,kBAAA;CR0tCD;AQxtCD;EACE,eAAA;CR0tCD;AQjsCD;EA6EA;IAvFM,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGtNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXs6CC;EQ9nCH;IAhFM,mBAAA;GRitCH;CACF;AQxsCD;;EAGE,aAAA;EACA,kCAAA;CRysCD;AQvsCD;EACE,eAAA;EA9IqB,0BAAA;CRw1CtB;AQrsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRusCD;AQlsCG;;;EACE,iBAAA;CRssCL;AQhtCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRksCH;AQhsCG;;;EACE,uBAAA;CRosCL;AQ5rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,gCAAA;EACA,eAAA;EACA,kBAAA;CR8rCD;AQxrCG;;;;;;EAAW,YAAA;CRgsCd;AQ/rCG;;;;;;EACE,uBAAA;CRssCL;AQhsCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRksCD;AYx+CD;;;;EAIE,+DAAA;CZ0+CD;AYt+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZw+CD;AYp+CD;EACE,iBAAA;EACA,eAAA;EACA,YAAA;EACA,uBAAA;EACA,mBAAA;EACA,uDAAA;UAAA,+CAAA;CZs+CD;AY5+CD;EASI,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,yBAAA;UAAA,iBAAA;CZs+CH;AYj+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,sBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;CZm+CD;AY9+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZk+CH;AY79CD;EACE,kBAAA;EACA,mBAAA;CZ+9CD;AazhDD;ECHE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;Cd+hDD;AazhDC;EAqEF;IAvEI,aAAA;Gb+hDD;CACF;Aa3hDC;EAkEF;IApEI,aAAA;GbiiDD;CACF;Aa7hDD;EA+DA;IAjEI,cAAA;GbmiDD;CACF;Aa1hDD;ECvBE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;CdojDD;AavhDD;ECvBE,mBAAA;EACA,oBAAA;CdijDD;AejjDG;EACE,mBAAA;EAEA,gBAAA;EAEA,mBAAA;EACA,oBAAA;CfijDL;AejiDG;EACE,YAAA;CfmiDL;Ae5hDC;EACE,YAAA;Cf8hDH;Ae/hDC;EACE,oBAAA;CfiiDH;AeliDC;EACE,oBAAA;CfoiDH;AeriDC;EACE,WAAA;CfuiDH;AexiDC;EACE,oBAAA;Cf0iDH;Ae3iDC;EACE,oBAAA;Cf6iDH;Ae9iDC;EACE,WAAA;CfgjDH;AejjDC;EACE,oBAAA;CfmjDH;AepjDC;EACE,oBAAA;CfsjDH;AevjDC;EACE,WAAA;CfyjDH;Ae1jDC;EACE,oBAAA;Cf4jDH;Ae7jDC;EACE,mBAAA;Cf+jDH;AejjDC;EACE,YAAA;CfmjDH;AepjDC;EACE,oBAAA;CfsjDH;AevjDC;EACE,oBAAA;CfyjDH;Ae1jDC;EACE,WAAA;Cf4jDH;Ae7jDC;EACE,oBAAA;Cf+jDH;AehkDC;EACE,oBAAA;CfkkDH;AenkDC;EACE,WAAA;CfqkDH;AetkDC;EACE,oBAAA;CfwkDH;AezkDC;EACE,oBAAA;Cf2kDH;Ae5kDC;EACE,WAAA;Cf8kDH;Ae/kDC;EACE,oBAAA;CfilDH;AellDC;EACE,mBAAA;CfolDH;AehlDC;EACE,YAAA;CfklDH;AelmDC;EACE,WAAA;CfomDH;AermDC;EACE,mBAAA;CfumDH;AexmDC;EACE,mBAAA;Cf0mDH;Ae3mDC;EACE,UAAA;Cf6mDH;Ae9mDC;EACE,mBAAA;CfgnDH;AejnDC;EACE,mBAAA;CfmnDH;AepnDC;EACE,UAAA;CfsnDH;AevnDC;EACE,mBAAA;CfynDH;Ae1nDC;EACE,mBAAA;Cf4nDH;Ae7nDC;EACE,UAAA;Cf+nDH;AehoDC;EACE,mBAAA;CfkoDH;AenoDC;EACE,kBAAA;CfqoDH;AejoDC;EACE,WAAA;CfmoDH;AernDC;EACE,kBAAA;CfunDH;AexnDC;EACE,0BAAA;Cf0nDH;Ae3nDC;EACE,0BAAA;Cf6nDH;Ae9nDC;EACE,iBAAA;CfgoDH;AejoDC;EACE,0BAAA;CfmoDH;AepoDC;EACE,0BAAA;CfsoDH;AevoDC;EACE,iBAAA;CfyoDH;Ae1oDC;EACE,0BAAA;Cf4oDH;Ae7oDC;EACE,0BAAA;Cf+oDH;AehpDC;EACE,iBAAA;CfkpDH;AenpDC;EACE,0BAAA;CfqpDH;AetpDC;EACE,yBAAA;CfwpDH;AezpDC;EACE,gBAAA;Cf2pDH;Aa3pDD;EElCI;IACE,YAAA;GfgsDH;EezrDD;IACE,YAAA;Gf2rDD;Ee5rDD;IACE,oBAAA;Gf8rDD;Ee/rDD;IACE,oBAAA;GfisDD;EelsDD;IACE,WAAA;GfosDD;EersDD;IACE,oBAAA;GfusDD;EexsDD;IACE,oBAAA;Gf0sDD;Ee3sDD;IACE,WAAA;Gf6sDD;Ee9sDD;IACE,oBAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,WAAA;GfstDD;EevtDD;IACE,oBAAA;GfytDD;Ee1tDD;IACE,mBAAA;Gf4tDD;Ee9sDD;IACE,YAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,oBAAA;GfstDD;EevtDD;IACE,WAAA;GfytDD;Ee1tDD;IACE,oBAAA;Gf4tDD;Ee7tDD;IACE,oBAAA;Gf+tDD;EehuDD;IACE,WAAA;GfkuDD;EenuDD;IACE,oBAAA;GfquDD;EetuDD;IACE,oBAAA;GfwuDD;EezuDD;IACE,WAAA;Gf2uDD;Ee5uDD;IACE,oBAAA;Gf8uDD;Ee/uDD;IACE,mBAAA;GfivDD;Ee7uDD;IACE,YAAA;Gf+uDD;Ee/vDD;IACE,WAAA;GfiwDD;EelwDD;IACE,mBAAA;GfowDD;EerwDD;IACE,mBAAA;GfuwDD;EexwDD;IACE,UAAA;Gf0wDD;Ee3wDD;IACE,mBAAA;Gf6wDD;Ee9wDD;IACE,mBAAA;GfgxDD;EejxDD;IACE,UAAA;GfmxDD;EepxDD;IACE,mBAAA;GfsxDD;EevxDD;IACE,mBAAA;GfyxDD;Ee1xDD;IACE,UAAA;Gf4xDD;Ee7xDD;IACE,mBAAA;Gf+xDD;EehyDD;IACE,kBAAA;GfkyDD;Ee9xDD;IACE,WAAA;GfgyDD;EelxDD;IACE,kBAAA;GfoxDD;EerxDD;IACE,0BAAA;GfuxDD;EexxDD;IACE,0BAAA;Gf0xDD;Ee3xDD;IACE,iBAAA;Gf6xDD;Ee9xDD;IACE,0BAAA;GfgyDD;EejyDD;IACE,0BAAA;GfmyDD;EepyDD;IACE,iBAAA;GfsyDD;EevyDD;IACE,0BAAA;GfyyDD;Ee1yDD;IACE,0BAAA;Gf4yDD;Ee7yDD;IACE,iBAAA;Gf+yDD;EehzDD;IACE,0BAAA;GfkzDD;EenzDD;IACE,yBAAA;GfqzDD;EetzDD;IACE,gBAAA;GfwzDD;CACF;AahzDD;EE3CI;IACE,YAAA;Gf81DH;Eev1DD;IACE,YAAA;Gfy1DD;Ee11DD;IACE,oBAAA;Gf41DD;Ee71DD;IACE,oBAAA;Gf+1DD;Eeh2DD;IACE,WAAA;Gfk2DD;Een2DD;IACE,oBAAA;Gfq2DD;Eet2DD;IACE,oBAAA;Gfw2DD;Eez2DD;IACE,WAAA;Gf22DD;Ee52DD;IACE,oBAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,WAAA;Gfo3DD;Eer3DD;IACE,oBAAA;Gfu3DD;Eex3DD;IACE,mBAAA;Gf03DD;Ee52DD;IACE,YAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,oBAAA;Gfo3DD;Eer3DD;IACE,WAAA;Gfu3DD;Eex3DD;IACE,oBAAA;Gf03DD;Ee33DD;IACE,oBAAA;Gf63DD;Ee93DD;IACE,WAAA;Gfg4DD;Eej4DD;IACE,oBAAA;Gfm4DD;Eep4DD;IACE,oBAAA;Gfs4DD;Eev4DD;IACE,WAAA;Gfy4DD;Ee14DD;IACE,oBAAA;Gf44DD;Ee74DD;IACE,mBAAA;Gf+4DD;Ee34DD;IACE,YAAA;Gf64DD;Ee75DD;IACE,WAAA;Gf+5DD;Eeh6DD;IACE,mBAAA;Gfk6DD;Een6DD;IACE,mBAAA;Gfq6DD;Eet6DD;IACE,UAAA;Gfw6DD;Eez6DD;IACE,mBAAA;Gf26DD;Ee56DD;IACE,mBAAA;Gf86DD;Ee/6DD;IACE,UAAA;Gfi7DD;Eel7DD;IACE,mBAAA;Gfo7DD;Eer7DD;IACE,mBAAA;Gfu7DD;Eex7DD;IACE,UAAA;Gf07DD;Ee37DD;IACE,mBAAA;Gf67DD;Ee97DD;IACE,kBAAA;Gfg8DD;Ee57DD;IACE,WAAA;Gf87DD;Eeh7DD;IACE,kBAAA;Gfk7DD;Een7DD;IACE,0BAAA;Gfq7DD;Eet7DD;IACE,0BAAA;Gfw7DD;Eez7DD;IACE,iBAAA;Gf27DD;Ee57DD;IACE,0BAAA;Gf87DD;Ee/7DD;IACE,0BAAA;Gfi8DD;Eel8DD;IACE,iBAAA;Gfo8DD;Eer8DD;IACE,0BAAA;Gfu8DD;Eex8DD;IACE,0BAAA;Gf08DD;Ee38DD;IACE,iBAAA;Gf68DD;Ee98DD;IACE,0BAAA;Gfg9DD;Eej9DD;IACE,yBAAA;Gfm9DD;Eep9DD;IACE,gBAAA;Gfs9DD;CACF;Aa38DD;EE9CI;IACE,YAAA;Gf4/DH;Eer/DD;IACE,YAAA;Gfu/DD;Eex/DD;IACE,oBAAA;Gf0/DD;Ee3/DD;IACE,oBAAA;Gf6/DD;Ee9/DD;IACE,WAAA;GfggED;EejgED;IACE,oBAAA;GfmgED;EepgED;IACE,oBAAA;GfsgED;EevgED;IACE,WAAA;GfygED;Ee1gED;IACE,oBAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,WAAA;GfkhED;EenhED;IACE,oBAAA;GfqhED;EethED;IACE,mBAAA;GfwhED;Ee1gED;IACE,YAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,oBAAA;GfkhED;EenhED;IACE,WAAA;GfqhED;EethED;IACE,oBAAA;GfwhED;EezhED;IACE,oBAAA;Gf2hED;Ee5hED;IACE,WAAA;Gf8hED;Ee/hED;IACE,oBAAA;GfiiED;EeliED;IACE,oBAAA;GfoiED;EeriED;IACE,WAAA;GfuiED;EexiED;IACE,oBAAA;Gf0iED;Ee3iED;IACE,mBAAA;Gf6iED;EeziED;IACE,YAAA;Gf2iED;Ee3jED;IACE,WAAA;Gf6jED;Ee9jED;IACE,mBAAA;GfgkED;EejkED;IACE,mBAAA;GfmkED;EepkED;IACE,UAAA;GfskED;EevkED;IACE,mBAAA;GfykED;Ee1kED;IACE,mBAAA;Gf4kED;Ee7kED;IACE,UAAA;Gf+kED;EehlED;IACE,mBAAA;GfklED;EenlED;IACE,mBAAA;GfqlED;EetlED;IACE,UAAA;GfwlED;EezlED;IACE,mBAAA;Gf2lED;Ee5lED;IACE,kBAAA;Gf8lED;Ee1lED;IACE,WAAA;Gf4lED;Ee9kED;IACE,kBAAA;GfglED;EejlED;IACE,0BAAA;GfmlED;EeplED;IACE,0BAAA;GfslED;EevlED;IACE,iBAAA;GfylED;Ee1lED;IACE,0BAAA;Gf4lED;Ee7lED;IACE,0BAAA;Gf+lED;EehmED;IACE,iBAAA;GfkmED;EenmED;IACE,0BAAA;GfqmED;EetmED;IACE,0BAAA;GfwmED;EezmED;IACE,iBAAA;Gf2mED;Ee5mED;IACE,0BAAA;Gf8mED;Ee/mED;IACE,yBAAA;GfinED;EelnED;IACE,gBAAA;GfonED;CACF;AgBxrED;EACE,8BAAA;ChB0rED;AgBxrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChB0rED;AgBxrED;EACE,iBAAA;ChB0rED;AgBprED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBsrED;AgBzrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,2BAAA;ChBsrEP;AgBpsED;EAoBI,uBAAA;EACA,8BAAA;ChBmrEH;AgBxsED;;;;;;EA8BQ,cAAA;ChBkrEP;AgBhtED;EAoCI,2BAAA;ChB+qEH;AgBntED;EAyCI,uBAAA;ChB6qEH;AgBtqED;;;;;;EAOQ,aAAA;ChBuqEP;AgB5pED;EACE,uBAAA;ChB8pED;AgB/pED;;;;;;EAQQ,uBAAA;ChB+pEP;AgBvqED;;EAeM,yBAAA;ChB4pEL;AgBlpED;EAEI,0BAAA;ChBmpEH;AgB1oED;EAEI,0BAAA;ChB2oEH;AgBloED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBooED;AgB/nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBkoEL;AiB9wEC;;;;;;;;;;;;EAOI,0BAAA;CjBqxEL;AiB/wEC;;;;;EAMI,0BAAA;CjBgxEL;AiBnyEC;;;;;;;;;;;;EAOI,0BAAA;CjB0yEL;AiBpyEC;;;;;EAMI,0BAAA;CjBqyEL;AiBxzEC;;;;;;;;;;;;EAOI,0BAAA;CjB+zEL;AiBzzEC;;;;;EAMI,0BAAA;CjB0zEL;AiB70EC;;;;;;;;;;;;EAOI,0BAAA;CjBo1EL;AiB90EC;;;;;EAMI,0BAAA;CjB+0EL;AiBl2EC;;;;;;;;;;;;EAOI,0BAAA;CjBy2EL;AiBn2EC;;;;;EAMI,0BAAA;CjBo2EL;AgBltED;EACE,iBAAA;EACA,kBAAA;ChBotED;AgBvpED;EACA;IA3DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,uBAAA;GhBqtED;EgB9pEH;IAnDM,iBAAA;GhBotEH;EgBjqEH;;;;;;IA1CY,oBAAA;GhBmtET;EgBzqEH;IAlCM,UAAA;GhB8sEH;EgB5qEH;;;;;;IAzBY,eAAA;GhB6sET;EgBprEH;;;;;;IArBY,gBAAA;GhBitET;EgB5rEH;;;;IARY,iBAAA;GhB0sET;CACF;AkBp6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBm6ED;AkBh6ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBk6ED;AkB/5ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBi6ED;AkBt5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL63ET;AkBt5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBw5ED;AkBr5ED;EACE,eAAA;ClBu5ED;AkBn5ED;EACE,eAAA;EACA,YAAA;ClBq5ED;AkBj5ED;;EAEE,aAAA;ClBm5ED;AkB/4ED;;;EZvEE,qBAAA;EAEA,2CAAA;EACA,qBAAA;CN09ED;AkB/4ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClBi5ED;AkBv3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CL0zET;AmBl8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CL27ET;AK15EC;EACE,YAAA;EACA,WAAA;CL45EH;AK15EC;EAA0B,YAAA;CL65E3B;AK55EC;EAAgC,YAAA;CL+5EjC;AkBn4EC;EACE,UAAA;EACA,8BAAA;ClBq4EH;AkB73EC;;;EAGE,0BAAA;EACA,WAAA;ClB+3EH;AkB53EC;;EAEE,oBAAA;ClB83EH;AkB13EC;EACE,aAAA;ClB43EH;AkBh3ED;EACE,yBAAA;ClBk3ED;AkB10ED;EAtBI;;;;IACE,kBAAA;GlBs2EH;EkBn2EC;;;;;;;;IAEE,kBAAA;GlB22EH;EkBx2EC;;;;;;;;IAEE,kBAAA;GlBg3EH;CACF;AkBt2ED;EACE,oBAAA;ClBw2ED;AkBh2ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBk2ED;AkBv2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBm2EH;AkBh2ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBk2ED;AkB/1ED;;EAEE,iBAAA;ClBi2ED;AkB71ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClB+1ED;AkB71ED;;EAEE,cAAA;EACA,kBAAA;ClB+1ED;AkBt1EC;;;;;;EAGE,oBAAA;ClB21EH;AkBr1EC;;;;EAEE,oBAAA;ClBy1EH;AkBn1EC;;;;EAGI,oBAAA;ClBs1EL;AkB30ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClB20ED;AkBz0EC;;EAEE,gBAAA;EACA,iBAAA;ClB20EH;AkB9zED;ECnQE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBokFD;AmBlkFC;EACE,aAAA;EACA,kBAAA;CnBokFH;AmBjkFC;;EAEE,aAAA;CnBmkFH;AkB10ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClB20EH;AkBj1ED;EASI,aAAA;EACA,kBAAA;ClB20EH;AkBr1ED;;EAcI,aAAA;ClB20EH;AkBz1ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClB20EH;AkBv0ED;EC/RE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBymFD;AmBvmFC;EACE,aAAA;EACA,kBAAA;CnBymFH;AmBtmFC;;EAEE,aAAA;CnBwmFH;AkBn1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBo1EH;AkB11ED;EASI,aAAA;EACA,kBAAA;ClBo1EH;AkB91ED;;EAcI,aAAA;ClBo1EH;AkBl2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBo1EH;AkB30ED;EAEE,mBAAA;ClB40ED;AkB90ED;EAMI,sBAAA;ClB20EH;AkBv0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClBy0ED;AkBv0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBy0ED;AkBv0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBy0ED;AkBr0ED;;;;;;;;;;EC1ZI,eAAA;CnB2uFH;AkBj1ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CL4rFT;AmB1uFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CLisFT;AkB31ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnB0uFH;AkBh2ED;ECtYI,eAAA;CnByuFH;AkBh2ED;;;;;;;;;;EC7ZI,eAAA;CnBywFH;AkB52ED;ECzZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CL0tFT;AmBxwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL+tFT;AkBt3ED;EC/YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBwwFH;AkB33ED;ECzYI,eAAA;CnBuwFH;AkB33ED;;;;;;;;;;EChaI,eAAA;CnBuyFH;AkBv4ED;EC5ZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwvFT;AmBtyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6vFT;AkBj5ED;EClZI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBsyFH;AkBt5ED;EC5YI,eAAA;CnBqyFH;AkBl5EC;EACE,UAAA;ClBo5EH;AkBl5EC;EACE,OAAA;ClBo5EH;AkB14ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB44ED;AkBzzED;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB23EH;EkBvvEH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBy3EH;EkB5vEH;IAxHM,sBAAA;GlBu3EH;EkB/vEH;IApHM,sBAAA;IACA,uBAAA;GlBs3EH;EkBnwEH;;;IA9GQ,YAAA;GlBs3EL;EkBxwEH;IAxGM,YAAA;GlBm3EH;EkB3wEH;IApGM,iBAAA;IACA,uBAAA;GlBk3EH;EkB/wEH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB+2EH;EkBtxEH;;IAtFQ,gBAAA;GlBg3EL;EkB1xEH;;IAjFM,mBAAA;IACA,eAAA;GlB+2EH;EkB/xEH;IA3EM,OAAA;GlB62EH;CACF;AkBn2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClBg2EH;AkB32ED;;EAiBI,iBAAA;ClB81EH;AkB/2ED;EJthBE,mBAAA;EACA,oBAAA;Cdw4FD;AkB50EC;EAyBF;IAnCM,kBAAA;IACA,iBAAA;IACA,iBAAA;GlB01EH;CACF;AkB13ED;EAwCI,YAAA;ClBq1EH;AkBv0EC;EAUF;IAdQ,kBAAA;IACA,gBAAA;GlB+0EL;CACF;AkBr0EC;EAEF;IANQ,iBAAA;IACA,gBAAA;GlB60EL;CACF;AoBt6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC0CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB+JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CLiuFT;AoBz6FG;;;;;;EdrBF,qBAAA;EAEA,2CAAA;EACA,qBAAA;CNq8FD;AoB76FC;;;EAGE,YAAA;EACA,sBAAA;CpB+6FH;AoB56FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLo5FT;AoB56FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CL65FT;AoB56FG;;EAEE,qBAAA;CpB86FL;AoBr6FD;EC3DE,YAAA;EACA,uBAAA;EACA,mBAAA;CrBm+FD;AqBj+FC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBm+FP;AqBj+FC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBm+FP;AqBj+FC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBm+FP;AqBj+FG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBy+FT;AqBt+FC;;;EAGE,uBAAA;CrBw+FH;AqBn+FG;;;;;;;;;EAGE,uBAAA;EACI,mBAAA;CrB2+FT;AoB19FD;ECZI,YAAA;EACA,uBAAA;CrBy+FH;AoB39FD;EC9DE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB4hGD;AqB1hGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB4hGP;AqB1hGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB4hGP;AqB1hGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB4hGP;AqB1hGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBkiGT;AqB/hGC;;;EAGE,uBAAA;CrBiiGH;AqB5hGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBoiGT;AoBhhGD;ECfI,eAAA;EACA,uBAAA;CrBkiGH;AoBhhGD;EClEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBqlGD;AqBnlGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBqlGP;AqBnlGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBqlGP;AqBnlGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBqlGP;AqBnlGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2lGT;AqBxlGC;;;EAGE,uBAAA;CrB0lGH;AqBrlGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB6lGT;AoBrkGD;ECnBI,eAAA;EACA,uBAAA;CrB2lGH;AoBrkGD;ECtEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB8oGD;AqB5oGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB8oGP;AqB5oGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB8oGP;AqB5oGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB8oGP;AqB5oGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBopGT;AqBjpGC;;;EAGE,uBAAA;CrBmpGH;AqB9oGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBspGT;AoB1nGD;ECvBI,eAAA;EACA,uBAAA;CrBopGH;AoB1nGD;EC1EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBusGD;AqBrsGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBusGP;AqBrsGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBusGP;AqBrsGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBusGP;AqBrsGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6sGT;AqB1sGC;;;EAGE,uBAAA;CrB4sGH;AqBvsGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB+sGT;AoB/qGD;EC3BI,eAAA;EACA,uBAAA;CrB6sGH;AoB/qGD;EC9EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBgwGD;AqB9vGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBgwGP;AqB9vGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBgwGP;AqB9vGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBgwGP;AqB9vGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBswGT;AqBnwGC;;;EAGE,uBAAA;CrBqwGH;AqBhwGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBwwGT;AoBpuGD;EC/BI,eAAA;EACA,uBAAA;CrBswGH;AoB/tGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpBiuGD;AoB/tGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLqwGT;AoBhuGC;;;;EAIE,0BAAA;CpBkuGH;AoBhuGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpBkuGH;AoB9tGG;;;;EAEE,eAAA;EACA,sBAAA;CpBkuGL;AoBztGD;;ECxEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBqyGD;AoB5tGD;;EC5EE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrB4yGD;AoB/tGD;;EChFE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBmzGD;AoB9tGD;EACE,eAAA;EACA,YAAA;CpBguGD;AoB5tGD;EACE,gBAAA;CpB8tGD;AoBvtGC;;;EACE,YAAA;CpB2tGH;AuBr3GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLosGT;AuBx3GC;EACE,WAAA;CvB03GH;AuBt3GD;EACE,cAAA;CvBw3GD;AuBt3GC;EAAY,eAAA;CvBy3Gb;AuBx3GC;EAAY,mBAAA;CvB23Gb;AuB13GC;EAAY,yBAAA;CvB63Gb;AuB13GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CL8sGT;AwBx5GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxB05GD;AwBt5GD;;EAEE,mBAAA;CxBw5GD;AwBp5GD;EACE,WAAA;CxBs5GD;AwBl5GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBq5GD;AwBh5GC;EACE,SAAA;EACA,WAAA;CxBk5GH;AwB36GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBu8GD;AwBj7GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBi5GH;AwB34GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB64GH;AwBv4GC;;;EAGE,YAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxBy4GH;AwBh4GC;;;EAGE,eAAA;CxBk4GH;AwB93GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxBg4GH;AwB33GD;EAGI,eAAA;CxB23GH;AwB93GD;EAQI,WAAA;CxBy3GH;AwBj3GD;EACE,WAAA;EACA,SAAA;CxBm3GD;AwB32GD;EACE,QAAA;EACA,YAAA;CxB62GD;AwBz2GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB22GD;AwBv2GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxBy2GD;AwBr2GD;EACE,SAAA;EACA,WAAA;CxBu2GD;AwB/1GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxB+1GH;AwBt2GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxB+1GH;AwB10GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB65GC;EwB11GD;IA1DA,QAAA;IACA,YAAA;GxBu5GC;CACF;A2BviHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3ByiHD;A2B7iHD;;EAMI,mBAAA;EACA,YAAA;C3B2iHH;A2BziHG;;;;;;;;EAIE,WAAA;C3B+iHL;A2BziHD;;;;EAKI,kBAAA;C3B0iHH;A2BriHD;EACE,kBAAA;C3BuiHD;A2BxiHD;;;EAOI,YAAA;C3BsiHH;A2B7iHD;;;EAYI,iBAAA;C3BsiHH;A2BliHD;EACE,iBAAA;C3BoiHD;A2BhiHD;EACE,eAAA;C3BkiHD;A2BjiHC;EClDA,8BAAA;EACG,2BAAA;C5BslHJ;A2BhiHD;;EC/CE,6BAAA;EACG,0BAAA;C5BmlHJ;A2B/hHD;EACE,YAAA;C3BiiHD;A2B/hHD;EACE,iBAAA;C3BiiHD;A2B/hHD;;ECnEE,8BAAA;EACG,2BAAA;C5BsmHJ;A2B9hHD;ECjEE,6BAAA;EACG,0BAAA;C5BkmHJ;A2B7hHD;;EAEE,WAAA;C3B+hHD;A2B9gHD;EACE,kBAAA;EACA,mBAAA;C3BghHD;A2B9gHD;EACE,mBAAA;EACA,oBAAA;C3BghHD;A2B3gHD;EtB/CE,yDAAA;EACQ,iDAAA;CL6jHT;A2B3gHC;EtBnDA,yBAAA;EACQ,iBAAA;CLikHT;A2BxgHD;EACE,eAAA;C3B0gHD;A2BvgHD;EACE,wBAAA;EACA,uBAAA;C3BygHD;A2BtgHD;EACE,wBAAA;C3BwgHD;A2BjgHD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3BkgHH;A2BzgHD;EAcM,YAAA;C3B8/GL;A2B5gHD;;;;EAsBI,iBAAA;EACA,eAAA;C3B4/GH;A2Bv/GC;EACE,iBAAA;C3By/GH;A2Bv/GC;EC3KA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5B+pHF;A2Bz/GC;EC/KA,2BAAA;EACC,0BAAA;EAOD,gCAAA;EACC,+BAAA;C5BqqHF;A2B1/GD;EACE,iBAAA;C3B4/GD;A2B1/GD;;EC/KE,8BAAA;EACC,6BAAA;C5B6qHF;A2Bz/GD;EC7LE,2BAAA;EACC,0BAAA;C5ByrHF;A2Br/GD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3Bu/GD;A2B3/GD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3Bw/GH;A2BjgHD;EAYI,YAAA;C3Bw/GH;A2BpgHD;EAgBI,WAAA;C3Bu/GH;A2Bt+GD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3Bu+GL;A6BjtHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BmtHD;A6BhtHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7BktHH;A6B3tHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7B0sHH;A6BxsHG;EACE,WAAA;C7B0sHL;A6BhsHD;;;EV0BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnB2qHD;AmBzqHC;;;EACE,aAAA;EACA,kBAAA;CnB6qHH;AmB1qHC;;;;;;EAEE,aAAA;CnBgrHH;A6BltHD;;;EVqBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBksHD;AmBhsHC;;;EACE,aAAA;EACA,kBAAA;CnBosHH;AmBjsHC;;;;;;EAEE,aAAA;CnBusHH;A6BhuHD;;;EAGE,oBAAA;C7BkuHD;A6BhuHC;;;EACE,iBAAA;C7BouHH;A6BhuHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7BkuHD;A6B7tHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;C7B+tHD;A6B5tHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B8tHH;A6B5tHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B8tHH;A6BlvHD;;EA0BI,cAAA;C7B4tHH;A6BvtHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;C5Bo0HJ;A6BxtHD;EACE,gBAAA;C7B0tHD;A6BxtHD;;;;;;;EDxGE,6BAAA;EACG,0BAAA;C5By0HJ;A6BztHD;EACE,eAAA;C7B2tHD;A6BttHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BstHD;A6B3tHD;EAUI,mBAAA;C7BotHH;A6B9tHD;EAYM,kBAAA;C7BqtHL;A6BltHG;;;EAGE,WAAA;C7BotHL;A6B/sHC;;EAGI,mBAAA;C7BgtHL;A6B7sHC;;EAGI,WAAA;EACA,kBAAA;C7B8sHL;A8B72HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B+2HD;A8Bl3HD;EAOI,mBAAA;EACA,eAAA;C9B82HH;A8Bt3HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B82HL;A8B72HK;;EAEE,sBAAA;EACA,0BAAA;C9B+2HP;A8B12HG;EACE,eAAA;C9B42HL;A8B12HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9B42HP;A8Br2HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bu2HL;A8Bh5HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBs5HD;A8Bt5HD;EA0DI,gBAAA;C9B+1HH;A8Bt1HD;EACE,8BAAA;C9Bw1HD;A8Bz1HD;EAGI,YAAA;EAEA,oBAAA;C9Bw1HH;A8B71HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bu1HL;A8Bt1HK;EACE,mCAAA;C9Bw1HP;A8Bl1HK;;;EAGE,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,iCAAA;EACA,gBAAA;C9Bo1HP;A8B/0HC;EAqDA,YAAA;EA8BA,iBAAA;C9BgwHD;A8Bn1HC;EAwDE,YAAA;C9B8xHH;A8Bt1HC;EA0DI,mBAAA;EACA,mBAAA;C9B+xHL;A8B11HC;EAgEE,UAAA;EACA,WAAA;C9B6xHH;A8BjxHD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9B4xHH;E8B5tHH;IA9DQ,iBAAA;G9B6xHL;CACF;A8Bv2HC;EAuFE,gBAAA;EACA,mBAAA;C9BmxHH;A8B32HC;;;EA8FE,uBAAA;C9BkxHH;A8BpwHD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9BixHH;E8B9uHH;;;IA9BM,0BAAA;G9BixHH;CACF;A8Bl3HD;EAEI,YAAA;C9Bm3HH;A8Br3HD;EAMM,mBAAA;C9Bk3HL;A8Bx3HD;EASM,iBAAA;C9Bk3HL;A8B72HK;;;EAGE,YAAA;EACA,0BAAA;C9B+2HP;A8Bv2HD;EAEI,YAAA;C9Bw2HH;A8B12HD;EAIM,gBAAA;EACA,eAAA;C9By2HL;A8B71HD;EACE,YAAA;C9B+1HD;A8Bh2HD;EAII,YAAA;C9B+1HH;A8Bn2HD;EAMM,mBAAA;EACA,mBAAA;C9Bg2HL;A8Bv2HD;EAYI,UAAA;EACA,WAAA;C9B81HH;A8Bl1HD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9B61HH;E8B7xHH;IA9DQ,iBAAA;G9B81HL;CACF;A8Bt1HD;EACE,iBAAA;C9Bw1HD;A8Bz1HD;EAKI,gBAAA;EACA,mBAAA;C9Bu1HH;A8B71HD;;;EAYI,uBAAA;C9Bs1HH;A8Bx0HD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9Bq1HH;E8BlzHH;;;IA9BM,0BAAA;G9Bq1HH;CACF;A8B50HD;EAEI,cAAA;C9B60HH;A8B/0HD;EAKI,eAAA;C9B60HH;A8Bp0HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5BijIF;A+B3iID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B6iID;A+BriID;EA8nBA;IAhoBI,mBAAA;G/B2iID;CACF;A+B5hID;EAgnBA;IAlnBI,YAAA;G/BkiID;CACF;A+BphID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BqhID;A+BnhIC;EACE,iBAAA;C/BqhIH;A+Bz/HD;EA6jBA;IArlBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BqhID;E+BnhIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BqhIH;E+BlhIC;IACE,oBAAA;G/BohIH;E+B/gIC;;;IAGE,gBAAA;IACA,iBAAA;G/BihIH;CACF;A+B7gID;;EAGI,kBAAA;C/B8gIH;A+BzgIC;EAmjBF;;IArjBM,kBAAA;G/BghIH;CACF;A+BvgID;;;;EAII,oBAAA;EACA,mBAAA;C/BygIH;A+BngIC;EAgiBF;;;;IAniBM,gBAAA;IACA,eAAA;G/B6gIH;CACF;A+BjgID;EACE,cAAA;EACA,sBAAA;C/BmgID;A+B9/HD;EA8gBA;IAhhBI,iBAAA;G/BogID;CACF;A+BhgID;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/BkgID;A+B5/HD;EAggBA;;IAlgBI,iBAAA;G/BmgID;CACF;A+BjgID;EACE,OAAA;EACA,sBAAA;C/BmgID;A+BjgID;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BmgID;A+B7/HD;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B+/HD;A+B7/HC;;EAEE,sBAAA;C/B+/HH;A+BxgID;EAaI,eAAA;C/B8/HH;A+Br/HD;EALI;;IAEE,mBAAA;G/B6/HH;CACF;A+Bn/HD;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/Bs/HD;A+Bl/HC;EACE,WAAA;C/Bo/HH;A+BlgID;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/Bk/HH;A+BxgID;EAyBI,gBAAA;C/Bk/HH;A+B5+HD;EAqbA;IAvbI,cAAA;G/Bk/HD;CACF;A+Bz+HD;EACE,oBAAA;C/B2+HD;A+B5+HD;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/B2+HH;A+B/8HC;EA2YF;IAjaM,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/By+HH;E+B9kHH;;IAxZQ,2BAAA;G/B0+HL;E+BllHH;IArZQ,kBAAA;G/B0+HL;E+Bz+HK;;IAEE,uBAAA;G/B2+HP;CACF;A+Bz9HD;EA+XA;IA1YI,YAAA;IACA,UAAA;G/Bw+HD;E+B/lHH;IAtYM,YAAA;G/Bw+HH;E+BlmHH;IApYQ,kBAAA;IACA,qBAAA;G/By+HL;CACF;A+B99HD;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC+vID;AkBzuHD;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlB2yHH;EkBvqHH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlByyHH;EkB5qHH;IAxHM,sBAAA;GlBuyHH;EkB/qHH;IApHM,sBAAA;IACA,uBAAA;GlBsyHH;EkBnrHH;;;IA9GQ,YAAA;GlBsyHL;EkBxrHH;IAxGM,YAAA;GlBmyHH;EkB3rHH;IApGM,iBAAA;IACA,uBAAA;GlBkyHH;EkB/rHH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB+xHH;EkBtsHH;;IAtFQ,gBAAA;GlBgyHL;EkB1sHH;;IAjFM,mBAAA;IACA,eAAA;GlB+xHH;EkB/sHH;IA3EM,OAAA;GlB6xHH;CACF;A+BvgIC;EAmWF;IAzWM,mBAAA;G/BihIH;E+B/gIG;IACE,iBAAA;G/BihIL;CACF;A+BhgID;EAoVA;IA5VI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLswIP;CACF;A+BtgID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B60IF;A+BtgID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5B40IF;A+BlgID;EChVE,gBAAA;EACA,mBAAA;ChCq1ID;A+BngIC;ECnVA,iBAAA;EACA,oBAAA;ChCy1ID;A+BpgIC;ECtVA,iBAAA;EACA,oBAAA;ChC61ID;A+B9/HD;EChWE,iBAAA;EACA,oBAAA;ChCi2ID;A+B1/HD;EAsSA;IA1SI,YAAA;IACA,kBAAA;IACA,mBAAA;G/BkgID;CACF;A+Br+HD;EAhBE;IExWA,uBAAA;GjCi2IC;E+Bx/HD;IE5WA,wBAAA;IF8WE,oBAAA;G/B0/HD;E+B5/HD;IAKI,gBAAA;G/B0/HH;CACF;A+Bj/HD;EACE,0BAAA;EACA,sBAAA;C/Bm/HD;A+Br/HD;EAKI,YAAA;C/Bm/HH;A+Bl/HG;;EAEE,eAAA;EACA,8BAAA;C/Bo/HL;A+B7/HD;EAcI,YAAA;C/Bk/HH;A+BhgID;EAmBM,YAAA;C/Bg/HL;A+B9+HK;;EAEE,YAAA;EACA,8BAAA;C/Bg/HP;A+B5+HK;;;EAGE,YAAA;EACA,0BAAA;C/B8+HP;A+B1+HK;;;EAGE,YAAA;EACA,8BAAA;C/B4+HP;A+BphID;EA8CI,mBAAA;C/By+HH;A+Bx+HG;;EAEE,uBAAA;C/B0+HL;A+B3hID;EAoDM,uBAAA;C/B0+HL;A+B9hID;;EA0DI,sBAAA;C/Bw+HH;A+Bj+HK;;;EAGE,0BAAA;EACA,YAAA;C/Bm+HP;A+Bl8HC;EAoKF;IA7LU,YAAA;G/B+9HP;E+B99HO;;IAEE,YAAA;IACA,8BAAA;G/Bg+HT;E+B59HO;;;IAGE,YAAA;IACA,0BAAA;G/B89HT;E+B19HO;;;IAGE,YAAA;IACA,8BAAA;G/B49HT;CACF;A+B9jID;EA8GI,YAAA;C/Bm9HH;A+Bl9HG;EACE,YAAA;C/Bo9HL;A+BpkID;EAqHI,YAAA;C/Bk9HH;A+Bj9HG;;EAEE,YAAA;C/Bm9HL;A+B/8HK;;;;EAEE,YAAA;C/Bm9HP;A+B38HD;EACE,uBAAA;EACA,sBAAA;C/B68HD;A+B/8HD;EAKI,eAAA;C/B68HH;A+B58HG;;EAEE,YAAA;EACA,8BAAA;C/B88HL;A+Bv9HD;EAcI,eAAA;C/B48HH;A+B19HD;EAmBM,eAAA;C/B08HL;A+Bx8HK;;EAEE,YAAA;EACA,8BAAA;C/B08HP;A+Bt8HK;;;EAGE,YAAA;EACA,0BAAA;C/Bw8HP;A+Bp8HK;;;EAGE,YAAA;EACA,8BAAA;C/Bs8HP;A+B9+HD;EA+CI,mBAAA;C/Bk8HH;A+Bj8HG;;EAEE,uBAAA;C/Bm8HL;A+Br/HD;EAqDM,uBAAA;C/Bm8HL;A+Bx/HD;;EA2DI,sBAAA;C/Bi8HH;A+B37HK;;;EAGE,0BAAA;EACA,YAAA;C/B67HP;A+Bt5HC;EAwBF;IAvDU,sBAAA;G/By7HP;E+Bl4HH;IApDU,0BAAA;G/By7HP;E+Br4HH;IAjDU,eAAA;G/By7HP;E+Bx7HO;;IAEE,YAAA;IACA,8BAAA;G/B07HT;E+Bt7HO;;;IAGE,YAAA;IACA,0BAAA;G/Bw7HT;E+Bp7HO;;;IAGE,YAAA;IACA,8BAAA;G/Bs7HT;CACF;A+B9hID;EA+GI,eAAA;C/Bk7HH;A+Bj7HG;EACE,YAAA;C/Bm7HL;A+BpiID;EAsHI,eAAA;C/Bi7HH;A+Bh7HG;;EAEE,YAAA;C/Bk7HL;A+B96HK;;;;EAEE,YAAA;C/Bk7HP;AkC5jJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC8jJD;AkCnkJD;EAQI,sBAAA;ClC8jJH;AkCtkJD;EAWM,kBAAA;EACA,eAAA;EACA,YAAA;ClC8jJL;AkC3kJD;EAkBI,eAAA;ClC4jJH;AmChlJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnCklJD;AmCtlJD;EAOI,gBAAA;CnCklJH;AmCzlJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,kBAAA;CnCmlJL;AmCjlJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B8lJJ;AmChlJG;;EPvBF,gCAAA;EACG,6BAAA;C5B2mJJ;AmC3kJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CnC+kJL;AmCzkJG;;;;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC8kJL;AmCroJD;;;;;;EAkEM,eAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;CnC2kJL;AmClkJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpCipJL;AoC/oJG;;ERKF,+BAAA;EACG,4BAAA;C5B8oJJ;AoC9oJG;;ERTF,gCAAA;EACG,6BAAA;C5B2pJJ;AmC7kJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpCiqJL;AoC/pJG;;ERKF,+BAAA;EACG,4BAAA;C5B8pJJ;AoC9pJG;;ERTF,gCAAA;EACG,6BAAA;C5B2qJJ;AqC9qJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrCgrJD;AqCprJD;EAOI,gBAAA;CrCgrJH;AqCvrJD;;EAUM,sBAAA;EACA,kBAAA;EACA,uBAAA;EACA,uBAAA;EACA,oBAAA;CrCirJL;AqC/rJD;;EAmBM,sBAAA;EACA,0BAAA;CrCgrJL;AqCpsJD;;EA2BM,aAAA;CrC6qJL;AqCxsJD;;EAkCM,YAAA;CrC0qJL;AqC5sJD;;;;EA2CM,eAAA;EACA,uBAAA;EACA,oBAAA;CrCuqJL;AsCrtJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCutJD;AsCntJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CtCqtJL;AsChtJC;EACE,cAAA;CtCktJH;AsC9sJC;EACE,mBAAA;EACA,UAAA;CtCgtJH;AsCzsJD;ECtCE,0BAAA;CvCkvJD;AuC/uJG;;EAEE,0BAAA;CvCivJL;AsC5sJD;EC1CE,0BAAA;CvCyvJD;AuCtvJG;;EAEE,0BAAA;CvCwvJL;AsC/sJD;EC9CE,0BAAA;CvCgwJD;AuC7vJG;;EAEE,0BAAA;CvC+vJL;AsCltJD;EClDE,0BAAA;CvCuwJD;AuCpwJG;;EAEE,0BAAA;CvCswJL;AsCrtJD;ECtDE,0BAAA;CvC8wJD;AuC3wJG;;EAEE,0BAAA;CvC6wJL;AsCxtJD;EC1DE,0BAAA;CvCqxJD;AuClxJG;;EAEE,0BAAA;CvCoxJL;AwCtxJD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCwxJD;AwCrxJC;EACE,cAAA;CxCuxJH;AwCnxJC;EACE,mBAAA;EACA,UAAA;CxCqxJH;AwClxJC;;EAEE,OAAA;EACA,iBAAA;CxCoxJH;AwC/wJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CxCixJL;AwC5wJC;;EAEE,eAAA;EACA,uBAAA;CxC8wJH;AwC3wJC;EACE,aAAA;CxC6wJH;AwC1wJC;EACE,kBAAA;CxC4wJH;AwCzwJC;EACE,iBAAA;CxC2wJH;AyCr0JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCu0JD;AyC50JD;;EASI,eAAA;CzCu0JH;AyCh1JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCs0JH;AyCr1JD;EAmBI,0BAAA;CzCq0JH;AyCl0JC;;EAEE,mBAAA;EACA,mBAAA;EACA,oBAAA;CzCo0JH;AyC91JD;EA8BI,gBAAA;CzCm0JH;AyCjzJD;EACA;IAfI,kBAAA;IACA,qBAAA;GzCm0JD;EyCj0JC;;IAEE,mBAAA;IACA,oBAAA;GzCm0JH;EyC1zJH;;IAJM,gBAAA;GzCk0JH;CACF;A0C/2JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CLisJT;A0C33JD;;EAaI,kBAAA;EACA,mBAAA;C1Ck3JH;A0C92JC;;;EAGE,sBAAA;C1Cg3JH;A0Cr4JD;EA0BI,aAAA;EACA,eAAA;C1C82JH;A2Cv4JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Cy4JD;A2C74JD;EAQI,cAAA;EAEA,eAAA;C3Cu4JH;A2Cj5JD;EAeI,kBAAA;C3Cq4JH;A2Cp5JD;;EAqBI,iBAAA;C3Cm4JH;A2Cx5JD;EAyBI,gBAAA;C3Ck4JH;A2C13JD;;EAEE,oBAAA;C3C43JD;A2C93JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3C43JH;A2Cp3JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C86JD;A2Cz3JD;EClDI,0BAAA;C5C86JH;A2C53JD;EC/CI,eAAA;C5C86JH;A2C33JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cy7JD;A2Ch4JD;ECtDI,0BAAA;C5Cy7JH;A2Cn4JD;ECnDI,eAAA;C5Cy7JH;A2Cl4JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Co8JD;A2Cv4JD;EC1DI,0BAAA;C5Co8JH;A2C14JD;ECvDI,eAAA;C5Co8JH;A2Cz4JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C+8JD;A2C94JD;EC9DI,0BAAA;C5C+8JH;A2Cj5JD;EC3DI,eAAA;C5C+8JH;A6Cj9JD;EACE;IAAQ,4BAAA;G7Co9JP;E6Cn9JD;IAAQ,yBAAA;G7Cs9JP;CACF;A6Cn9JD;EACE;IAAQ,4BAAA;G7Cs9JP;E6Cr9JD;IAAQ,yBAAA;G7Cw9JP;CACF;A6C39JD;EACE;IAAQ,4BAAA;G7Cs9JP;E6Cr9JD;IAAQ,yBAAA;G7Cw9JP;CACF;A6Cj9JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CL86JT;A6Ch9JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CLk0JT;A6C78JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7Ci9JD;A6C18JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CL0/JT;A6Cv8JD;EErEE,0BAAA;C/C+gKD;A+C5gKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C+9JH;A6C38JD;EEzEE,0BAAA;C/CuhKD;A+CphKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Cu+JH;A6C/8JD;EE7EE,0BAAA;C/C+hKD;A+C5hKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C++JH;A6Cn9JD;EEjFE,0BAAA;C/CuiKD;A+CpiKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Cu/JH;AgD/iKD;EAEE,iBAAA;ChDgjKD;AgD9iKC;EACE,cAAA;ChDgjKH;AgD5iKD;;EAEE,QAAA;EACA,iBAAA;ChD8iKD;AgD3iKD;EACE,eAAA;ChD6iKD;AgD1iKD;EACE,eAAA;ChD4iKD;AgDziKC;EACE,gBAAA;ChD2iKH;AgDviKD;;EAEE,mBAAA;ChDyiKD;AgDtiKD;;EAEE,oBAAA;ChDwiKD;AgDriKD;;;EAGE,oBAAA;EACA,oBAAA;ChDuiKD;AgDpiKD;EACE,uBAAA;ChDsiKD;AgDniKD;EACE,uBAAA;ChDqiKD;AgDjiKD;EACE,cAAA;EACA,mBAAA;ChDmiKD;AgD7hKD;EACE,gBAAA;EACA,iBAAA;ChD+hKD;AiDtlKD;EAEE,oBAAA;EACA,gBAAA;CjDulKD;AiD/kKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,uBAAA;EACA,uBAAA;CjDglKD;AiD7kKC;ErB3BA,6BAAA;EACC,4BAAA;C5B2mKF;AiD9kKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BwmKF;AiDvkKD;;EAEE,YAAA;CjDykKD;AiD3kKD;;EAKI,YAAA;CjD0kKH;AiDtkKC;;;;EAEE,sBAAA;EACA,YAAA;EACA,0BAAA;CjD0kKH;AiDtkKD;EACE,YAAA;EACA,iBAAA;CjDwkKD;AiDnkKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDqkKH;AiD1kKC;;;EASI,eAAA;CjDskKL;AiD/kKC;;;EAYI,eAAA;CjDwkKL;AiDnkKC;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;CjDqkKH;AiD3kKC;;;;;;;;;EAYI,eAAA;CjD0kKL;AiDtlKC;;;EAeI,eAAA;CjD4kKL;AkD9qKC;EACE,eAAA;EACA,0BAAA;ClDgrKH;AkD9qKG;;EAEE,eAAA;ClDgrKL;AkDlrKG;;EAKI,eAAA;ClDirKP;AkD9qKK;;;;EAEE,eAAA;EACA,0BAAA;ClDkrKP;AkDhrKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDqrKP;AkD3sKC;EACE,eAAA;EACA,0BAAA;ClD6sKH;AkD3sKG;;EAEE,eAAA;ClD6sKL;AkD/sKG;;EAKI,eAAA;ClD8sKP;AkD3sKK;;;;EAEE,eAAA;EACA,0BAAA;ClD+sKP;AkD7sKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDktKP;AkDxuKC;EACE,eAAA;EACA,0BAAA;ClD0uKH;AkDxuKG;;EAEE,eAAA;ClD0uKL;AkD5uKG;;EAKI,eAAA;ClD2uKP;AkDxuKK;;;;EAEE,eAAA;EACA,0BAAA;ClD4uKP;AkD1uKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD+uKP;AkDrwKC;EACE,eAAA;EACA,0BAAA;ClDuwKH;AkDrwKG;;EAEE,eAAA;ClDuwKL;AkDzwKG;;EAKI,eAAA;ClDwwKP;AkDrwKK;;;;EAEE,eAAA;EACA,0BAAA;ClDywKP;AkDvwKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD4wKP;AiD3qKD;EACE,cAAA;EACA,mBAAA;CjD6qKD;AiD3qKD;EACE,iBAAA;EACA,iBAAA;CjD6qKD;AmDvyKD;EACE,oBAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CLgvKT;AmDtyKD;EACE,cAAA;CnDwyKD;AmDnyKD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5B0zKF;AmDzyKD;EAMI,eAAA;CnDsyKH;AmDjyKD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnDmyKD;AmDvyKD;;;;;EAWI,eAAA;CnDmyKH;AmD9xKD;EACE,mBAAA;EACA,0BAAA;EACA,2BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5By0KF;AmDxxKD;;EAGI,iBAAA;CnDyxKH;AmD5xKD;;EAMM,oBAAA;EACA,iBAAA;CnD0xKL;AmDtxKG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5Bg2KF;AmDpxKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5B81KF;AmD7yKD;EvB1DE,2BAAA;EACC,0BAAA;C5B02KF;AmDhxKD;EAEI,oBAAA;CnDixKH;AmD9wKD;EACE,oBAAA;CnDgxKD;AmDxwKD;;;EAII,iBAAA;CnDywKH;AmD7wKD;;;EAOM,mBAAA;EACA,oBAAA;CnD2wKL;AmDnxKD;;EvBzGE,6BAAA;EACC,4BAAA;C5Bg4KF;AmDxxKD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnD2wKP;AmD/xKD;;;;;;;;EAwBU,4BAAA;CnDixKT;AmDzyKD;;;;;;;;EA4BU,6BAAA;CnDuxKT;AmDnzKD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bw5KF;AmDxzKD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDqxKP;AmD/zKD;;;;;;;;EA8CU,+BAAA;CnD2xKT;AmDz0KD;;;;;;;;EAkDU,gCAAA;CnDiyKT;AmDn1KD;;;;EA2DI,2BAAA;CnD8xKH;AmDz1KD;;EA+DI,cAAA;CnD8xKH;AmD71KD;;EAmEI,UAAA;CnD8xKH;AmDj2KD;;;;;;;;;;;;EA0EU,eAAA;CnDqyKT;AmD/2KD;;;;;;;;;;;;EA8EU,gBAAA;CnD+yKT;AmD73KD;;;;;;;;EAuFU,iBAAA;CnDgzKT;AmDv4KD;;;;;;;;EAgGU,iBAAA;CnDizKT;AmDj5KD;EAsGI,UAAA;EACA,iBAAA;CnD8yKH;AmDpyKD;EACE,oBAAA;CnDsyKD;AmDvyKD;EAKI,iBAAA;EACA,mBAAA;CnDqyKH;AmD3yKD;EASM,gBAAA;CnDqyKL;AmD9yKD;EAcI,iBAAA;CnDmyKH;AmDjzKD;;EAkBM,2BAAA;CnDmyKL;AmDrzKD;EAuBI,cAAA;CnDiyKH;AmDxzKD;EAyBM,8BAAA;CnDkyKL;AmD3xKD;EC1PE,mBAAA;CpDwhLD;AoDthLC;EACE,eAAA;EACA,0BAAA;EACA,mBAAA;CpDwhLH;AoD3hLC;EAMI,uBAAA;CpDwhLL;AoD9hLC;EASI,eAAA;EACA,0BAAA;CpDwhLL;AoDrhLC;EAEI,0BAAA;CpDshLL;AmD1yKD;EC7PE,sBAAA;CpD0iLD;AoDxiLC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CpD0iLH;AoD7iLC;EAMI,0BAAA;CpD0iLL;AoDhjLC;EASI,eAAA;EACA,uBAAA;CpD0iLL;AoDviLC;EAEI,6BAAA;CpDwiLL;AmDzzKD;EChQE,sBAAA;CpD4jLD;AoD1jLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD4jLH;AoD/jLC;EAMI,0BAAA;CpD4jLL;AoDlkLC;EASI,eAAA;EACA,0BAAA;CpD4jLL;AoDzjLC;EAEI,6BAAA;CpD0jLL;AmDx0KD;ECnQE,sBAAA;CpD8kLD;AoD5kLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD8kLH;AoDjlLC;EAMI,0BAAA;CpD8kLL;AoDplLC;EASI,eAAA;EACA,0BAAA;CpD8kLL;AoD3kLC;EAEI,6BAAA;CpD4kLL;AmDv1KD;ECtQE,sBAAA;CpDgmLD;AoD9lLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDgmLH;AoDnmLC;EAMI,0BAAA;CpDgmLL;AoDtmLC;EASI,eAAA;EACA,0BAAA;CpDgmLL;AoD7lLC;EAEI,6BAAA;CpD8lLL;AmDt2KD;ECzQE,sBAAA;CpDknLD;AoDhnLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDknLH;AoDrnLC;EAMI,0BAAA;CpDknLL;AoDxnLC;EASI,eAAA;EACA,0BAAA;CpDknLL;AoD/mLC;EAEI,6BAAA;CpDgnLL;AqDhoLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrDkoLD;AqDvoLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrDkoLH;AqD7nLD;EACE,uBAAA;CrD+nLD;AqD3nLD;EACE,oBAAA;CrD6nLD;AsDxpLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CLmmLT;AsDlqLD;EASI,mBAAA;EACA,kCAAA;CtD4pLH;AsDvpLD;EACE,cAAA;EACA,mBAAA;CtDypLD;AsDvpLD;EACE,aAAA;EACA,mBAAA;CtDypLD;AuD/qLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,0BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBwrLD;AuDhrLC;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtBgsLD;AuD5qLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvD8qLH;AwDnsLD;EACE,iBAAA;CxDqsLD;AwDjsLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxDgsLD;AwD7rLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CLghLT;AwDnsLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CL2lLT;AwDvsLD;EACE,mBAAA;EACA,iBAAA;CxDysLD;AwDrsLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDusLD;AwDnsLD;EACE,mBAAA;EACA,uBAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDqsLD;AwDjsLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,uBAAA;CxDmsLD;AwDjsLC;ElCrEA,WAAA;EAGA,yBAAA;CtBuwLD;AwDpsLC;ElCtEA,aAAA;EAGA,0BAAA;CtB2wLD;AwDnsLD;EACE,cAAA;EACA,iCAAA;CxDqsLD;AwDjsLD;EACE,iBAAA;CxDmsLD;AwD/rLD;EACE,UAAA;EACA,wBAAA;CxDisLD;AwD5rLD;EACE,mBAAA;EACA,cAAA;CxD8rLD;AwD1rLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxD4rLD;AwD/rLD;EAQI,iBAAA;EACA,iBAAA;CxD0rLH;AwDnsLD;EAaI,kBAAA;CxDyrLH;AwDtsLD;EAiBI,eAAA;CxDwrLH;AwDnrLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDqrLD;AwDnqLD;EAZE;IACE,aAAA;IACA,kBAAA;GxDkrLD;EwDhrLD;InDvEA,kDAAA;IACQ,0CAAA;GL0vLP;EwD/qLD;IAAY,aAAA;GxDkrLX;CACF;AwD7qLD;EAFE;IAAY,aAAA;GxDmrLX;CACF;AyDl0LD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBy1LD;AyD90LC;EnCdA,aAAA;EAGA,0BAAA;CtB61LD;AyDj1LC;EAAW,iBAAA;EAAmB,eAAA;CzDq1L/B;AyDp1LC;EAAW,iBAAA;EAAmB,eAAA;CzDw1L/B;AyDv1LC;EAAW,gBAAA;EAAmB,eAAA;CzD21L/B;AyD11LC;EAAW,kBAAA;EAAmB,eAAA;CzD81L/B;AyD11LD;EACE,iBAAA;EACA,iBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,mBAAA;CzD41LD;AyDx1LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzD01LD;AyDt1LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;CzDw1LH;AyDt1LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDw1LH;AyDt1LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDw1LH;AyDt1LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,yBAAA;CzDw1LH;AyDt1LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,wBAAA;CzDw1LH;AyDt1LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDw1LH;AyDt1LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDw1LH;AyDt1LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDw1LH;A2Dr7LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,uBAAA;EACA,qCAAA;UAAA,6BAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLq5LT;A2Dh8LC;EAAY,kBAAA;C3Dm8Lb;A2Dl8LC;EAAY,kBAAA;C3Dq8Lb;A2Dp8LC;EAAY,iBAAA;C3Du8Lb;A2Dt8LC;EAAY,mBAAA;C3Dy8Lb;A2Dt8LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Dw8LD;A2Dr8LD;EACE,kBAAA;C3Du8LD;A2D/7LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3Di8LH;A2D97LD;EACE,mBAAA;C3Dg8LD;A2D97LD;EACE,mBAAA;EACA,YAAA;C3Dg8LD;A2D57LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D87LH;A2D77LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,uBAAA;C3D+7LL;A2D57LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D87LH;A2D77LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;C3D+7LL;A2D57LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D87LH;A2D77LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,0BAAA;C3D+7LL;A2D37LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3D67LH;A2D57LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,wBAAA;EACA,cAAA;C3D87LL;A4DvjMD;EACE,mBAAA;C5DyjMD;A4DtjMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DwjMD;A4D3jMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CL44LT;A4DlkMD;;EAcM,eAAA;C5DwjML;A4D9hMC;EA4NF;IvD3DE,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GLi7LP;E4D5jMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D+jML;E4D7jMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5DgkML;E4D9jMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5DikML;CACF;A4DvmMD;;;EA6CI,eAAA;C5D+jMH;A4D5mMD;EAiDI,QAAA;C5D8jMH;A4D/mMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5D6jMH;A4DrnMD;EA4DI,WAAA;C5D4jMH;A4DxnMD;EA+DI,YAAA;C5D4jMH;A4D3nMD;;EAmEI,QAAA;C5D4jMH;A4D/nMD;EAuEI,YAAA;C5D2jMH;A4DloMD;EA0EI,WAAA;C5D2jMH;A4DnjMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;EACA,mCAAA;C5DsjMD;A4DjjMC;EdnGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CupMH;A4DrjMC;EACE,WAAA;EACA,SAAA;EdxGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CgqMH;A4DvjMC;;EAEE,WAAA;EACA,YAAA;EACA,sBAAA;EtCvHF,aAAA;EAGA,0BAAA;CtB+qMD;A4DzlMD;;;;EAuCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DwjMH;A4DnmMD;;EA+CI,UAAA;EACA,mBAAA;C5DwjMH;A4DxmMD;;EAoDI,WAAA;EACA,oBAAA;C5DwjMH;A4D7mMD;;EAyDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DwjMH;A4DnjMG;EACE,iBAAA;C5DqjML;A4DjjMG;EACE,iBAAA;C5DmjML;A4DziMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5D2iMD;A4DpjMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5DiiMH;A4DhkMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;C5DiiMH;A4D1hMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;C5D4hMD;A4D3hMC;EACE,kBAAA;C5D6hMH;A4Dp/LD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DshMH;E4D9hMD;;IAYI,mBAAA;G5DshMH;E4DliMD;;IAgBI,oBAAA;G5DshMH;E4DjhMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5DmhMD;E4D/gMD;IACE,aAAA;G5DihMD;CACF;A6DhxMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7DgzMH;A6D9yMC;;;;;;;;;;;;;;;;EACE,YAAA;C7D+zMH;AiCv0MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9Dk1MD;AiCz0MD;EACE,wBAAA;CjC20MD;AiCz0MD;EACE,uBAAA;CjC20MD;AiCn0MD;EACE,yBAAA;CjCq0MD;AiCn0MD;EACE,0BAAA;CjCq0MD;AiCn0MD;EACE,mBAAA;CjCq0MD;AiCn0MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/D+1MD;AiCj0MD;EACE,yBAAA;CjCm0MD;AiC5zMD;EACE,gBAAA;CjC8zMD;AgE/1MD;EACE,oBAAA;ChEi2MD;AgE31MD;;;;ECdE,yBAAA;CjE+2MD;AgE11MD;;;;;;;;;;;;EAYE,yBAAA;ChE41MD;AgEr1MD;EA6IA;IC7LE,0BAAA;GjEy4MC;EiEx4MD;IAAU,0BAAA;GjE24MT;EiE14MD;IAAU,8BAAA;GjE64MT;EiE54MD;;IACU,+BAAA;GjE+4MT;CACF;AgE/1MD;EAwIA;IA1II,0BAAA;GhEq2MD;CACF;AgE/1MD;EAmIA;IArII,2BAAA;GhEq2MD;CACF;AgE/1MD;EA8HA;IAhII,iCAAA;GhEq2MD;CACF;AgE91MD;EAwHA;IC7LE,0BAAA;GjEu6MC;EiEt6MD;IAAU,0BAAA;GjEy6MT;EiEx6MD;IAAU,8BAAA;GjE26MT;EiE16MD;;IACU,+BAAA;GjE66MT;CACF;AgEx2MD;EAmHA;IArHI,0BAAA;GhE82MD;CACF;AgEx2MD;EA8GA;IAhHI,2BAAA;GhE82MD;CACF;AgEx2MD;EAyGA;IA3GI,iCAAA;GhE82MD;CACF;AgEv2MD;EAmGA;IC7LE,0BAAA;GjEq8MC;EiEp8MD;IAAU,0BAAA;GjEu8MT;EiEt8MD;IAAU,8BAAA;GjEy8MT;EiEx8MD;;IACU,+BAAA;GjE28MT;CACF;AgEj3MD;EA8FA;IAhGI,0BAAA;GhEu3MD;CACF;AgEj3MD;EAyFA;IA3FI,2BAAA;GhEu3MD;CACF;AgEj3MD;EAoFA;IAtFI,iCAAA;GhEu3MD;CACF;AgEh3MD;EA8EA;IC7LE,0BAAA;GjEm+MC;EiEl+MD;IAAU,0BAAA;GjEq+MT;EiEp+MD;IAAU,8BAAA;GjEu+MT;EiEt+MD;;IACU,+BAAA;GjEy+MT;CACF;AgE13MD;EAyEA;IA3EI,0BAAA;GhEg4MD;CACF;AgE13MD;EAoEA;IAtEI,2BAAA;GhEg4MD;CACF;AgE13MD;EA+DA;IAjEI,iCAAA;GhEg4MD;CACF;AgEz3MD;EAyDA;ICrLE,yBAAA;GjEy/MC;CACF;AgEz3MD;EAoDA;ICrLE,yBAAA;GjE8/MC;CACF;AgEz3MD;EA+CA;ICrLE,yBAAA;GjEmgNC;CACF;AgEz3MD;EA0CA;ICrLE,yBAAA;GjEwgNC;CACF;AgEt3MD;ECnJE,yBAAA;CjE4gND;AgEn3MD;EA4BA;IC7LE,0BAAA;GjEwhNC;EiEvhND;IAAU,0BAAA;GjE0hNT;EiEzhND;IAAU,8BAAA;GjE4hNT;EiE3hND;;IACU,+BAAA;GjE8hNT;CACF;AgEj4MD;EACE,yBAAA;ChEm4MD;AgE93MD;EAqBA;IAvBI,0BAAA;GhEo4MD;CACF;AgEl4MD;EACE,yBAAA;ChEo4MD;AgE/3MD;EAcA;IAhBI,2BAAA;GhEq4MD;CACF;AgEn4MD;EACE,yBAAA;ChEq4MD;AgEh4MD;EAOA;IATI,iCAAA;GhEs4MD;CACF;AgE/3MD;EACA;ICrLE,yBAAA;GjEujNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n \n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on