Bug 1405371 - Part 1: Update the Speedometer benchmark to WebKit r222778; r=ted
authorEhsan Akhgari <ehsan@mozilla.com>
Tue, 03 Oct 2017 11:57:05 -0400
changeset 384953 881688d7d7fc04c547840cf75a60235f56ba722e
parent 384952 fd25b77ff072fccbca48da9699286e663dc9635c
child 384954 162593bda5e167bea16b28637e85cc9d23f19c7c
push id32636
push userarchaeopteryx@coole-files.de
push dateSat, 07 Oct 2017 08:46:47 +0000
treeherdermozilla-central@6b0491f83229 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersted
bugs1405371
milestone58.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1405371 - Part 1: Update the Speedometer benchmark to WebKit r222778; r=ted
third_party/speedometer/InteractiveRunner.html
third_party/speedometer/README_MOZILLA
third_party/speedometer/index.html
third_party/speedometer/resources/benchmark-runner.js
third_party/speedometer/resources/main.js
third_party/speedometer/resources/tests.js
third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/assets/css/todomvc-app.css
third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/index.html
third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/inline.28efc571905d42a672b0.bundle.js
third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/inline.3b7f8ce2e6bc2f77dd83.bundle.js
third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/main.c82799edffc751aa6590.bundle.js
third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/main.f1c5d33a6950c335064d.bundle.js
third_party/speedometer/resources/todomvc/architecture-examples/angular/src/assets/css/todomvc-app.css
third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-app-css/index.css
third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-app-css/package.json
third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-common/base.js
third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-common/package.json
third_party/speedometer/resources/todomvc/architecture-examples/angularjs/package-lock.json
third_party/speedometer/resources/todomvc/architecture-examples/angularjs/package.json
third_party/speedometer/resources/todomvc/architecture-examples/angularjs/todomvc-index.html
third_party/speedometer/resources/todomvc/architecture-examples/backbone/js/app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/assets/todomvc.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/assets/vendor.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/assets/vendor.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/crossdomain.xml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/robots.txt
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.bowerrc
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.editorconfig
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.ember-cli
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.gitignore
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.jshintrc
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.travis.yml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.watchmanconfig
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/README.md
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/components/todo-item.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/components/todo-list.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/controllers/active.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/controllers/application.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/controllers/completed.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/helpers/gt.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/helpers/pluralize.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/instance-initializers/global.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/resolver.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/router.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/routes/application.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/services/memory.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/services/repo.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/active.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/application.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/completed.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/components/todo-item.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/components/todo-list.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/index.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/bower.json
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/config/environment.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/ember-cli-build.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/package.json
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/public/crossdomain.xml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/public/robots.txt
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/testem.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/.jshintrc
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/helpers/destroy-app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/helpers/module-for-acceptance.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/helpers/resolver.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/helpers/start-app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/test-helper.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/vendor/base.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/vendor/index.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/testem.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/tests/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.bowerrc
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.editorconfig
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.ember-cli
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.gitignore
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.jshintrc
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/README.md
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/components/todo-item.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/components/todo-list.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/controllers/active.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/controllers/application.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/controllers/completed.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/helpers/gt.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/helpers/pluralize.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/resolver.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/router.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/routes/application.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/services/memory.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/services/repo.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/styles/.gitkeep
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/active.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/application.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/completed.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/components/todo-item.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/components/todo-list.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/index.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/assets/todomvc.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/assets/vendor.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/assets/vendor.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/bower.json
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/config/environment.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/crossdomain.xml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/assets/todomvc-5d3e8eb3d5b3740a33185edcb11eeb57.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/assets/vendor-820919567eb7bd4d9fac358a90a5aac4.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/assets/vendor-a45c44bc56b4692cca4a96b6916c0fde.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/crossdomain.xml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/robots.txt
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/ember-cli-build.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/package-lock.json
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/package.json
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/public/crossdomain.xml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/public/robots.txt
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/robots.txt
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.bowerrc
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.editorconfig
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.ember-cli
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.gitignore
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.jshintrc
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.travis.yml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.watchmanconfig
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/README.md
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/components/todo-item.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/components/todo-list.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/active.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/application.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/completed.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/helpers/gt.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/helpers/pluralize.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/resolver.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/router.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/routes/application.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/services/memory.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/services/repo.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/active.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/application.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/completed.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/components/todo-item.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/components/todo-list.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/index.hbs
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/bower.json
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/config/environment.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/assets/todomvc-7601ffca6150ed633f0f333fe76bfaf2.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/assets/vendor-7b5c98520910afa58d74e05ec86cd873.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/assets/vendor-820919567eb7bd4d9fac358a90a5aac4.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/crossdomain.xml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/robots.txt
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/ember-cli-build.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/package-lock.json
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/package.json
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/public/crossdomain.xml
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/public/robots.txt
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/testem.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/destroy-app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/module-for-acceptance.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/resolver.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/start-app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/test-helper.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/vendor/base.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/vendor/index.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/testem.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/helpers/destroy-app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/helpers/module-for-acceptance.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/helpers/resolver.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/helpers/start-app.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/index.html
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/test-helper.js
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/vendor/base.css
third_party/speedometer/resources/todomvc/architecture-examples/emberjs/vendor/index.css
third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-app-css/index.css
third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-app-css/package.json
third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-common/base.js
third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-common/package.json
third_party/speedometer/resources/todomvc/architecture-examples/inferno/package.json
third_party/speedometer/resources/todomvc/architecture-examples/jquery/index.html
third_party/speedometer/resources/todomvc/architecture-examples/jquery/js/app.js
third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-app-css/index.css
third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-app-css/package.json
third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-common/base.js
third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-common/package.json
third_party/speedometer/resources/todomvc/architecture-examples/jquery/package.json
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/asset-manifest.json
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/index.html
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/service-worker.js
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/css/main.21111742.css
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/css/main.21111742.css.map
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/css/main.f04a7319.css
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/css/main.f04a7319.css.map
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/js/main.18b409e1.js
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/js/main.18b409e1.js.map
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/js/main.69cd9655.js
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/js/main.69cd9655.js.map
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/package-lock.json
third_party/speedometer/resources/todomvc/architecture-examples/react-redux/package.json
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/build.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/check-versions.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/dev-client.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/dev-server.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/utils.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/vue-loader.conf.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/webpack.base.conf.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/webpack.dev.conf.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/webpack.prod.conf.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/build/webpack.test.conf.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/index.html
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/css/app.5b47040a23ec3fcb78037de398c53557.css
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/css/app.5b47040a23ec3fcb78037de398c53557.css.map
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/css/app.dca4292ab322c1e7d51534e72981032e.css
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/css/app.dca4292ab322c1e7d51534e72981032e.css.map
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/app.d6ed8935438f44e9843a.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/app.d6ed8935438f44e9843a.js.map
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/app.e6c010d57d53537f4ad2.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/app.e6c010d57d53537f4ad2.js.map
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/manifest.a307c7f9a5da5dc72bb5.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/manifest.a307c7f9a5da5dc72bb5.js.map
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/manifest.aa9978aa96ee948f2a4c.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/manifest.aa9978aa96ee948f2a4c.js.map
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/vendor.2e4e9e528664fa796d3a.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/vendor.2e4e9e528664fa796d3a.js.map
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/vendor.e7008001a8bed009bbf1.js
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/dist/static/js/vendor.e7008001a8bed009bbf1.js.map
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/package-lock.json
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/package.json
third_party/speedometer/resources/todomvc/architecture-examples/vuejs-cli/src/components/todo.css
third_party/speedometer/resources/todomvc/dependency-examples/flight/flight/app/templates/stats.html
third_party/speedometer/resources/todomvc/dependency-examples/flight/flight/index.html
third_party/speedometer/resources/todomvc/dependency-examples/flight/flight/node_modules/todomvc-app-css/index.css
third_party/speedometer/resources/todomvc/dependency-examples/flight/flight/node_modules/todomvc-app-css/package.json
third_party/speedometer/resources/todomvc/dependency-examples/flight/flight/node_modules/todomvc-common/base.js
third_party/speedometer/resources/todomvc/dependency-examples/flight/flight/node_modules/todomvc-common/package.json
third_party/speedometer/resources/todomvc/dependency-examples/flight/flight/package.json
third_party/speedometer/resources/todomvc/functional-prog-examples/elm/node_modules/todomvc-app-css/index.css
third_party/speedometer/resources/todomvc/functional-prog-examples/elm/node_modules/todomvc-common/base.js
third_party/speedometer/resources/todomvc/functional-prog-examples/elm/package.json
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.app.71bb1f671e4e65604d05.js
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.app.71bb1f671e4e65604d05.js.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.app.930ad8b83126862d7445.js
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.app.930ad8b83126862d7445.js.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.manifest.2102040c9a6e04cc046e.js
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.manifest.2102040c9a6e04cc046e.js.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.manifest.e81199b00da2921d9c94.js
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.manifest.e81199b00da2921d9c94.js.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.vendor.577c6bc09319b27fed34.js
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.vendor.577c6bc09319b27fed34.js.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.vendor.b16cc08e016d07886f5f.js
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.vendor.b16cc08e016d07886f5f.js.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/index.html
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/styles.app.71bb1f671e4e65604d05.css
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/styles.app.71bb1f671e4e65604d05.css.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/styles.app.930ad8b83126862d7445.css
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/styles.app.930ad8b83126862d7445.css.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/styles.vendor.577c6bc09319b27fed34.css
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/styles.vendor.577c6bc09319b27fed34.css.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/styles.vendor.b16cc08e016d07886f5f.css
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/styles.vendor.b16cc08e016d07886f5f.css.map
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/package-lock.json
third_party/speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/package.json
third_party/speedometer/resources/todomvc/vanilla-examples/es2015/node_modules/todomvc-app-css/index.css
third_party/speedometer/resources/todomvc/vanilla-examples/es2015/node_modules/todomvc-app-css/package.json
third_party/speedometer/resources/todomvc/vanilla-examples/es2015/node_modules/todomvc-app-css/readme.md
third_party/speedometer/resources/todomvc/vanilla-examples/es2015/node_modules/todomvc-common/base.js
third_party/speedometer/resources/todomvc/vanilla-examples/es2015/node_modules/todomvc-common/package.json
third_party/speedometer/resources/todomvc/vanilla-examples/es2015/node_modules/todomvc-common/readme.md
third_party/speedometer/resources/todomvc/vanilla-examples/es2015/package.json
third_party/speedometer/resources/todomvc/vanilla-examples/vanillajs/node_modules/todomvc-app-css/index.css
third_party/speedometer/resources/todomvc/vanilla-examples/vanillajs/node_modules/todomvc-common/base.js
third_party/speedometer/resources/todomvc/vanilla-examples/vanillajs/package.json
--- a/third_party/speedometer/InteractiveRunner.html
+++ b/third_party/speedometer/InteractiveRunner.html
@@ -136,17 +136,20 @@ function startTest() {
                     var testResults = suiteResults.tests[testName];
                     for (var subtestName in testResults.tests) {
                         results += suiteName + ' : ' + testName + ' : ' + subtestName
                             + ': ' + testResults.tests[subtestName] + ' ms\n';
                     }
                 }
                 results += suiteName + ' : ' + suiteResults.total + ' ms\n';
             }
+            results += 'Arithmetic Mean : ' + measuredValues.mean  + ' ms\n';
+            results += 'Geometric Mean : ' + measuredValues.geomean  + ' ms\n';
             results += 'Total : ' + measuredValues.total + ' ms\n';
+            results += 'Score : ' + measuredValues.score + ' rpm\n';
 
             if (!results)
                 return;
 
             var pre = document.createElement('pre');
             document.body.appendChild(pre);
             pre.textContent = results;
         }
--- a/third_party/speedometer/README_MOZILLA
+++ b/third_party/speedometer/README_MOZILLA
@@ -1,13 +1,13 @@
 The source from this directory was copied from the
 PerformanceTests/Speedometer directory of the Webkit repository
 at: https://svn.webkit.org/repository/webkit/trunk
 
-The SVN revision used was: 221009
+The SVN revision used was: 222778
 
 The contents of this directory are intended for use to "train" the
 profile guided optimization (PGO) of Firefox and for benchmarking
 scenarios. The files inside this directory are not intended to ship
 with Firefox or any other product. If files inside this directory
 are useful for other purposes (e.g. JavaScript libraries), consumers
 should vendor those files separately, as it is not appropriate to pull
 in components of Speedometer for use outside of Speedometer.
--- a/third_party/speedometer/index.html
+++ b/third_party/speedometer/index.html
@@ -5,17 +5,17 @@
     <title>Speedometer 1.0</title>
     <link rel="stylesheet" href="resources/main.css">
     <script src="resources/main.js" defer></script>
     <script src="resources/benchmark-runner.js" defer></script>
     <script src="resources/benchmark-report.js" defer></script>
     <script src="../resources/statistics.js" defer></script>
     <script src="resources/tests.js" defer></script>
 </head>
-<body onload="startTest()">
+<body>
 <main>
     <a id="logo-link" href="javascript:showHome()"><img id="logo" src="resources/logo.png"></a>
 
     <section id="home" class="selected">
         <p>
             Speedometer is a browser benchmark that measures the responsiveness of Web applications.
             It uses demo web applications to simulate user actions such as adding to-do items.
         </p>
--- a/third_party/speedometer/resources/benchmark-runner.js
+++ b/third_party/speedometer/resources/benchmark-runner.js
@@ -189,30 +189,29 @@ BenchmarkState.prototype.prepareCurrentS
     }
     frame.src = 'resources/' + suite.url;
     return promise;
 }
 
 BenchmarkRunner.prototype.step = function (state) {
     if (!state) {
         state = new BenchmarkState(this._suites);
-        this._measuredValues = {tests: {}, total: 0};
+        this._measuredValues = {tests: {}, total: 0, mean: NaN, geomean: NaN, score: NaN};
     }
 
     var suite = state.currentSuite();
     if (!suite) {
         this._finalize();
         var promise = new SimplePromise;
         promise.resolve();
         return promise;
     }
 
     if (state.isFirstTest()) {
         this._removeFrame();
-        this._masuredValuesForCurrentSuite = {};
         var self = this;
         return state.prepareCurrentSuite(this, this._appendFrame()).then(function (prepareReturnValue) {
             self._prepareReturnValue = prepareReturnValue;
             return self._runTestAndRecordResults(state);
         });
     }
 
     return this._runTestAndRecordResults(state);
@@ -255,29 +254,46 @@ BenchmarkRunner.prototype._runTestAndRec
     var self = this;
     setTimeout(function () {
         self._runTest(suite, test, self._prepareReturnValue, function (syncTime, asyncTime) {
             var suiteResults = self._measuredValues.tests[suite.name] || {tests:{}, total: 0};
             var total = syncTime + asyncTime;
             self._measuredValues.tests[suite.name] = suiteResults;
             suiteResults.tests[test.name] = {tests: {'Sync': syncTime, 'Async': asyncTime}, total: total};
             suiteResults.total += total;
-            self._measuredValues.total += total;
 
             if (self._client && self._client.didRunTest)
                 self._client.didRunTest(suite, test);
 
             state.next();
             promise.resolve(state);
         });
     }, 0);
     return promise;
 }
 
 BenchmarkRunner.prototype._finalize = function () {
     this._removeFrame();
 
-    if (this._client && this._client.didRunSuites)
+    if (this._client && this._client.didRunSuites) {
+        var product = 1;
+        var values = [];
+        for (var suiteName in this._measuredValues.tests) {
+            var suiteTotal = this._measuredValues.tests[suiteName].total;
+            product *= suiteTotal;
+            values.push(suiteTotal);
+        }
+
+        values.sort(function (a, b) { return a - b }); // Avoid the loss of significance for the sum.
+        var total = values.reduce(function (a, b) { return a + b });
+        var geomean = Math.pow(product, 1 / values.length);
+
+        var correctionFactor = 3; // This factor makes the test score look reasonably fit within 0 to 140.
+        this._measuredValues.total = total;
+        this._measuredValues.mean = total / values.length;
+        this._measuredValues.geomean = geomean;
+        this._measuredValues.score = 60 * 1000 / geomean / correctionFactor;
         this._client.didRunSuites(this._measuredValues);
+    }
 
     if (this._runNextIteration)
         this._runNextIteration();
 }
--- a/third_party/speedometer/resources/main.js
+++ b/third_party/speedometer/resources/main.js
@@ -1,75 +1,75 @@
 window.benchmarkClient = {
     displayUnit: 'runs/min',
     iterationCount: 10,
-    testsCount: null,
+    stepCount: null,
     suitesCount: null,
-    _timeValues: [],
+    _measuredValuesList: [],
     _finishedTestCount: 0,
     _progressCompleted: null,
     willAddTestFrame: function (frame) {
         var main = document.querySelector('main');
         var style = getComputedStyle(main);
         frame.style.left = main.offsetLeft + parseInt(style.borderLeftWidth) + parseInt(style.paddingLeft) + 'px';
         frame.style.top = main.offsetTop + parseInt(style.borderTopWidth) + parseInt(style.paddingTop) + 'px';
     },
     willRunTest: function (suite, test) {
-        document.getElementById('info').textContent = suite.name + ' ( ' + this._finishedTestCount + ' / ' + this.testsCount + ' )';
+        document.getElementById('info').textContent = suite.name + ' ( ' + this._finishedTestCount + ' / ' + this.stepCount + ' )';
     },
     didRunTest: function () {
         this._finishedTestCount++;
-        this._progressCompleted.style.width = (this._finishedTestCount * 100 / this.testsCount) + '%';
+        this._progressCompleted.style.width = (this._finishedTestCount * 100 / this.stepCount) + '%';
     },
     didRunSuites: function (measuredValues) {
-        this._timeValues.push(measuredValues.total);
+        this._measuredValuesList.push(measuredValues);
     },
     willStartFirstIteration: function () {
-        this._timeValues = [];
+        this._measuredValuesList = [];
         this._finishedTestCount = 0;
         this._progressCompleted = document.getElementById('progress-completed');
         document.getElementById('logo-link').onclick = function (event) { event.preventDefault(); return false; }
     },
     didFinishLastIteration: function () {
         document.getElementById('logo-link').onclick = null;
 
-        var results = this._computeResults(this._timeValues, this.displayUnit);
+        var results = this._computeResults(this._measuredValuesList, this.displayUnit);
 
         this._updateGaugeNeedle(results.mean);
         document.getElementById('result-number').textContent = results.formattedMean;
         if (results.formattedDelta)
             document.getElementById('confidence-number').textContent = '\u00b1 ' + results.formattedDelta;
 
         this._populateDetailedResults(results.formattedValues);
         document.getElementById('results-with-statistics').textContent = results.formattedMeanAndDelta;
 
         if (this.displayUnit == 'ms') {
             document.getElementById('show-summary').style.display = 'none';
             showResultDetails();
         } else
             showResultsSummary();
     },
-    _computeResults: function (timeValues, displayUnit) {
+    _computeResults: function (measuredValuesList, displayUnit) {
         var suitesCount = this.suitesCount;
-        function totalTimeInDisplayUnit(time) {
+        function valueForUnit(measuredValues) {
             if (displayUnit == 'ms')
-                return time;
-            return computeScore(time);
+                return measuredValues.geomean;
+            return measuredValues.score;
         }
 
         function sigFigFromPercentDelta(percentDelta) {
             return Math.ceil(-Math.log(percentDelta)/Math.log(10)) + 3;
         }
 
         function toSigFigPrecision(number, sigFig) {
             var nonDecimalDigitCount = number < 1 ? 0 : (Math.floor(Math.log(number)/Math.log(10)) + 1);
             return number.toPrecision(Math.max(nonDecimalDigitCount, Math.min(6, sigFig)));
         }
 
-        var values = timeValues.map(totalTimeInDisplayUnit);
+        var values = measuredValuesList.map(valueForUnit);
         var sum = values.reduce(function (a, b) { return a + b; }, 0);
         var arithmeticMean = sum / values.length;
         var meanSigFig = 4;
         var formattedDelta;
         var formattedPercentDelta;
         if (window.Statistics) {
             var delta = Statistics.confidenceIntervalDelta(0.95, values.length, sum, Statistics.squareSum(values));
             if (!isNaN(delta)) {
@@ -78,18 +78,18 @@ window.benchmarkClient = {
                 formattedDelta = toSigFigPrecision(delta, 2);
                 formattedPercentDelta = toSigFigPrecision(percentDelta, 2) + '%';
             }
         }
 
         var formattedMean = toSigFigPrecision(arithmeticMean, Math.max(meanSigFig, 3));
 
         return {
-            formattedValues: timeValues.map(function (time) {
-                return toSigFigPrecision(totalTimeInDisplayUnit(time), 4) + ' ' + displayUnit;
+            formattedValues: values.map(function (value) {
+                return toSigFigPrecision(value, 4) + ' ' + displayUnit;
             }),
             mean: arithmeticMean,
             formattedMean: formattedMean,
             formattedDelta: formattedDelta,
             formattedMeanAndDelta: formattedMean + (formattedDelta ? ' \xb1 ' + formattedDelta + ' (' + formattedPercentDelta + ')' : ''),
         };
     },
     _addDetailedResultsRow: function (table, iterationNumber, value) {
@@ -191,29 +191,25 @@ function startBenchmark() {
                     return false;
                 }
                 break;
             }
         }
     }
 
     var enabledSuites = Suites.filter(function (suite) { return !suite.disabled; });
-    var totalSubtestCount = enabledSuites.reduce(function (testsCount, suite) { return testsCount + suite.tests.length; }, 0);
-    benchmarkClient.testsCount = benchmarkClient.iterationCount * totalSubtestCount;
+    var totalSubtestsCount = enabledSuites.reduce(function (testsCount, suite) { return testsCount + suite.tests.length; }, 0);
+    benchmarkClient.stepCount = benchmarkClient.iterationCount * totalSubtestsCount;
     benchmarkClient.suitesCount = enabledSuites.length;
     var runner = new BenchmarkRunner(Suites, benchmarkClient);
     runner.runMultipleIterations(benchmarkClient.iterationCount);
 
     return true;
 }
 
-function computeScore(time) {
-    return 60 * 1000 * benchmarkClient.suitesCount / time;
-}
-
 function showSection(sectionIdentifier, pushState) {
     var currentSectionElement = document.querySelector('section.selected');
     console.assert(currentSectionElement);
 
     var newSectionElement = document.getElementById(sectionIdentifier);
     console.assert(newSectionElement);
 
     currentSectionElement.classList.remove('selected');
--- a/third_party/speedometer/resources/tests.js
+++ b/third_party/speedometer/resources/tests.js
@@ -161,17 +161,46 @@ Suites.push({
             for (var i = 0; i < deleteButtons.length; i++)
                 deleteButtons[i].click();
         }),
     ]
 });
 
 Suites.push({
     name: 'EmberJS-TodoMVC',
-    url: 'todomvc/architecture-examples/emberjs/index.html',
+    url: 'todomvc/architecture-examples/emberjs/dist/index.html',
+    prepare: function (runner, contentWindow, contentDocument) {
+        return runner.waitForElement('#new-todo').then(function (element) {
+            element.focus();
+            return element;
+        });
+    },
+    tests: [
+        new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
+            for (var i = 0; i < numberOfItemsToAdd; i++) {
+                newTodo.value = 'Something to do ' + i;
+                triggerEnter(newTodo, 'keydown');
+            }
+        }),
+        new BenchmarkTestStep('CompletingAllItems', function (params, contentWindow, contentDocument) {
+            var checkboxes = contentDocument.querySelectorAll('.toggle');
+            for (var i = 0; i < checkboxes.length; i++)
+                checkboxes[i].click();
+        }),
+        new BenchmarkTestStep('DeletingItems', function (params, contentWindow, contentDocument) {
+            var deleteButtons = contentDocument.querySelectorAll('.destroy');
+            for (var i = 0; i < deleteButtons.length; i++)
+                deleteButtons[i].click();
+        }),
+    ]
+});
+
+Suites.push({
+    name: 'EmberJS-Debug-TodoMVC',
+    url: 'todomvc/architecture-examples/emberjs-debug/index.html',
     prepare: function (runner, contentWindow, contentDocument) {
         return runner.waitForElement('#new-todo').then(function (element) {
             element.focus();
             return element;
         });
     },
     tests: [
         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
@@ -193,36 +222,37 @@ Suites.push({
     ]
 });
 
 Suites.push({
     name: 'BackboneJS-TodoMVC',
     url: 'todomvc/architecture-examples/backbone/index.html',
     prepare: function (runner, contentWindow, contentDocument) {
     contentWindow.Backbone.sync = function () {}
-        return runner.waitForElement('.new-todo').then(function (element) {
-            element.focus();
-            return element;
+        return runner.waitForElement('#appIsReady').then(function (element) {
+            var newTodo = contentDocument.querySelector('.new-todo');
+            newTodo.focus();
+            return newTodo;
         });
     },
     tests: [
         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
             for (var i = 0; i < numberOfItemsToAdd; i++) {
                 newTodo.value = 'Something to do ' + i;
                 triggerEnter(newTodo, 'keypress');
             }
         }),
         new BenchmarkTestStep('CompletingAllItems', function (newTodo, contentWindow, contentDocument) {
             var checkboxes = contentDocument.querySelectorAll('.toggle');
-            for (var i = 0; i < checkboxes.length; i++)
+            for (var i = 0; i < numberOfItemsToAdd; i++)
                 checkboxes[i].click();
         }),
         new BenchmarkTestStep('DeletingAllItems', function (newTodo, contentWindow, contentDocument) {
             var deleteButtons = contentDocument.querySelectorAll('.destroy');
-            for (var i = 0; i < deleteButtons.length; i++)
+            for (var i = 0; i < numberOfItemsToAdd; i++)
                 deleteButtons[i].click();
         }),
     ]
 });
 
 Suites.push({
     name: 'AngularJS-TodoMVC',
     url: 'todomvc/architecture-examples/angularjs/index.html',
@@ -321,19 +351,20 @@ Suites.push({
         }),
     ]
 });
 
 Suites.push({
     name: 'jQuery-TodoMVC',
     url: 'todomvc/architecture-examples/jquery/index.html',
     prepare: function (runner, contentWindow, contentDocument) {
-        return runner.waitForElement('#new-todo').then(function (element) {
-            element.focus();
-            return element;
+        return runner.waitForElement('#appIsReady').then(function (element) {
+            var newTodo = contentDocument.getElementById('new-todo');
+            newTodo.focus();
+            return newTodo;
         });
     },
     tests: [
         new BenchmarkTestStep('Adding' + numberOfItemsToAdd + 'Items', function (newTodo, contentWindow, contentDocument) {
             for (var i = 0; i < numberOfItemsToAdd; i++) {
                 newTodo.value = 'Something to do ' + i;
                 triggerEnter(newTodo, 'keyup');
             }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/assets/css/todomvc-app.css
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/assets/css/todomvc-app.css
@@ -107,38 +107,42 @@ body {
 }
 
 .main {
     position: relative;
     z-index: 2;
     border-top: 1px solid #e6e6e6;
 }
 
-label[for='toggle-all'] {
-    display: none;
+.toggle-all {
+    text-align: center;
+    border: none; /* Mobile Safari */
+    opacity: 0;
+    position: absolute;
 }
 
-.toggle-all {
-    position: absolute;
-    top: -55px;
-    left: -12px;
+.toggle-all + label {
     width: 60px;
     height: 34px;
-    text-align: center;
-    border: none; /* Mobile Safari */
+    font-size: 0;
+    position: absolute;
+    top: -52px;
+    left: -13px;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
 }
 
-.toggle-all:before {
+.toggle-all + label:before {
     content: '❯';
     font-size: 22px;
     color: #e6e6e6;
     padding: 10px 27px 10px 27px;
 }
 
-.toggle-all:checked:before {
+.toggle-all:checked + label:before {
     color: #737373;
 }
 
 .todo-list {
     margin: 0;
     padding: 0;
     list-style: none;
 }
@@ -178,28 +182,37 @@ label[for='toggle-all'] {
     top: 0;
     bottom: 0;
     margin: auto 0;
     border: none; /* Mobile Safari */
     -webkit-appearance: none;
     appearance: none;
 }
 
-.todo-list li .toggle:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>');
+.todo-list li .toggle {
+    opacity: 0;
 }
 
-.todo-list li .toggle:checked:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>');
+.todo-list li .toggle + label {
+    /*
+        Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+        IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+    */
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
+    background-repeat: no-repeat;
+    background-position: center left;
+}
+
+.todo-list li .toggle:checked + label {
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
 }
 
 .todo-list li label {
     word-break: break-all;
-    padding: 15px 60px 15px 15px;
-    margin-left: 45px;
+    padding: 15px 15px 15px 60px;
     display: block;
     line-height: 1.2;
     transition: color 0.4s;
 }
 
 .todo-list li.completed label {
     color: #d9d9d9;
     text-decoration: line-through;
@@ -345,23 +358,16 @@ html .clear-completed:active {
     .toggle-all,
     .todo-list li .toggle {
         background: none;
     }
 
     .todo-list li .toggle {
         height: 40px;
     }
-
-    .toggle-all {
-        -webkit-transform: rotate(90deg);
-        transform: rotate(90deg);
-        -webkit-appearance: none;
-        appearance: none;
-    }
 }
 
 @media (max-width: 430px) {
     .footer {
         height: 50px;
     }
 
     .filters {
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/index.html
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/index.html
@@ -6,10 +6,10 @@
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link rel="icon" type="image/x-icon" href="favicon.ico">
   <link rel="stylesheet" href="assets/css/todomvc-common.css">
   <link rel="stylesheet" href="assets/css/todomvc-app.css">
 <link href="styles.d41d8cd98f00b204e980.bundle.css" rel="stylesheet"/></head>
 <body>
   <app-root>Loading...</app-root>
   <!-- Credits: Addy Osmani -->
-<script type="text/javascript" src="inline.28efc571905d42a672b0.bundle.js"></script><script type="text/javascript" src="polyfills.3a2aed82a0c9b24e6585.bundle.js"></script><script type="text/javascript" src="vendor.9a296bbc1909830a9106.bundle.js"></script><script type="text/javascript" src="main.c82799edffc751aa6590.bundle.js"></script></body>
+<script type="text/javascript" src="inline.3b7f8ce2e6bc2f77dd83.bundle.js"></script><script type="text/javascript" src="polyfills.3a2aed82a0c9b24e6585.bundle.js"></script><script type="text/javascript" src="vendor.9a296bbc1909830a9106.bundle.js"></script><script type="text/javascript" src="main.f1c5d33a6950c335064d.bundle.js"></script></body>
 </html>
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/inline.28efc571905d42a672b0.bundle.js
+++ /dev/null
@@ -1,1 +0,0 @@
-!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var u,i,f,l=0,s=[];l<t.length;l++)i=t[l],o[i]&&s.push(o[i][0]),o[i]=0;for(u in c)Object.prototype.hasOwnProperty.call(c,u)&&(e[u]=c[u]);for(n&&n(t,c,a);s.length;)s.shift()();if(a)for(l=0;l<a.length;l++)f=r(r.s=a[l]);return f};var t={},o={4:0};r.e=function(e){function n(){c.onerror=c.onload=null,clearTimeout(a);var r=o[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}if(0===o[e])return Promise.resolve();if(o[e])return o[e][2];var t=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,r.nc&&c.setAttribute("nonce",r.nc),c.src=r.p+""+e+"."+{0:"3a2aed82a0c9b24e6585",1:"c82799edffc751aa6590",2:"a63205ae4b55b180b58c"}[e]+".chunk.js";var a=setTimeout(n,12e4);c.onerror=c.onload=n;var u=new Promise(function(r,n){o[e]=[r,n]});return o[e][2]=u,t.appendChild(c),u},r.m=e,r.c=t,r.i=function(e){return e},r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/inline.3b7f8ce2e6bc2f77dd83.bundle.js
@@ -0,0 +1,1 @@
+!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var u,i,f,l=0,s=[];l<t.length;l++)i=t[l],o[i]&&s.push(o[i][0]),o[i]=0;for(u in c)Object.prototype.hasOwnProperty.call(c,u)&&(e[u]=c[u]);for(n&&n(t,c,a);s.length;)s.shift()();if(a)for(l=0;l<a.length;l++)f=r(r.s=a[l]);return f};var t={},o={4:0};r.e=function(e){function n(){c.onerror=c.onload=null,clearTimeout(a);var r=o[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),o[e]=void 0)}if(0===o[e])return Promise.resolve();if(o[e])return o[e][2];var t=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,r.nc&&c.setAttribute("nonce",r.nc),c.src=r.p+""+e+"."+{0:"3a2aed82a0c9b24e6585",1:"f1c5d33a6950c335064d",2:"a63205ae4b55b180b58c"}[e]+".chunk.js";var a=setTimeout(n,12e4);c.onerror=c.onload=n;var u=new Promise(function(r,n){o[e]=[r,n]});return o[e][2]=u,t.appendChild(c),u},r.m=e,r.c=t,r.i=function(e){return e},r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
rename from third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/main.c82799edffc751aa6590.bundle.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/angular/dist/main.f1c5d33a6950c335064d.bundle.js
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angular/src/assets/css/todomvc-app.css
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angular/src/assets/css/todomvc-app.css
@@ -107,38 +107,42 @@ body {
 }
 
 .main {
     position: relative;
     z-index: 2;
     border-top: 1px solid #e6e6e6;
 }
 
-label[for='toggle-all'] {
-    display: none;
+.toggle-all {
+    text-align: center;
+    border: none; /* Mobile Safari */
+    opacity: 0;
+    position: absolute;
 }
 
-.toggle-all {
-    position: absolute;
-    top: -55px;
-    left: -12px;
+.toggle-all + label {
     width: 60px;
     height: 34px;
-    text-align: center;
-    border: none; /* Mobile Safari */
+    font-size: 0;
+    position: absolute;
+    top: -52px;
+    left: -13px;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
 }
 
-.toggle-all:before {
+.toggle-all + label:before {
     content: '❯';
     font-size: 22px;
     color: #e6e6e6;
     padding: 10px 27px 10px 27px;
 }
 
-.toggle-all:checked:before {
+.toggle-all:checked + label:before {
     color: #737373;
 }
 
 .todo-list {
     margin: 0;
     padding: 0;
     list-style: none;
 }
@@ -178,28 +182,37 @@ label[for='toggle-all'] {
     top: 0;
     bottom: 0;
     margin: auto 0;
     border: none; /* Mobile Safari */
     -webkit-appearance: none;
     appearance: none;
 }
 
-.todo-list li .toggle:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>');
+.todo-list li .toggle {
+    opacity: 0;
 }
 
-.todo-list li .toggle:checked:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>');
+.todo-list li .toggle + label {
+    /*
+        Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+        IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+    */
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
+    background-repeat: no-repeat;
+    background-position: center left;
+}
+
+.todo-list li .toggle:checked + label {
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
 }
 
 .todo-list li label {
     word-break: break-all;
-    padding: 15px 60px 15px 15px;
-    margin-left: 45px;
+    padding: 15px 15px 15px 60px;
     display: block;
     line-height: 1.2;
     transition: color 0.4s;
 }
 
 .todo-list li.completed label {
     color: #d9d9d9;
     text-decoration: line-through;
@@ -345,23 +358,16 @@ html .clear-completed:active {
     .toggle-all,
     .todo-list li .toggle {
         background: none;
     }
 
     .todo-list li .toggle {
         height: 40px;
     }
-
-    .toggle-all {
-        -webkit-transform: rotate(90deg);
-        transform: rotate(90deg);
-        -webkit-appearance: none;
-        appearance: none;
-    }
 }
 
 @media (max-width: 430px) {
     .footer {
         height: 50px;
     }
 
     .filters {
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-app-css/index.css
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-app-css/index.css
@@ -12,367 +12,365 @@ button {
     font-size: 100%;
     vertical-align: baseline;
     font-family: inherit;
     font-weight: inherit;
     color: inherit;
     -webkit-appearance: none;
     appearance: none;
     -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
 }
 
 body {
     font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
     line-height: 1.4em;
     background: #f5f5f5;
     color: #4d4d4d;
     min-width: 230px;
     max-width: 550px;
     margin: 0 auto;
     -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
     font-weight: 300;
 }
 
-button,
-input[type="checkbox"] {
-    outline: none;
+:focus {
+    outline: 0;
 }
 
 .hidden {
     display: none;
 }
 
-#todoapp {
+.todoapp {
     background: #fff;
     margin: 130px 0 40px 0;
     position: relative;
     box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),
                 0 25px 50px 0 rgba(0, 0, 0, 0.1);
 }
 
-#todoapp input::-webkit-input-placeholder {
+.todoapp input::-webkit-input-placeholder {
     font-style: italic;
     font-weight: 300;
     color: #e6e6e6;
 }
 
-#todoapp input::-moz-placeholder {
+.todoapp input::-moz-placeholder {
     font-style: italic;
     font-weight: 300;
     color: #e6e6e6;
 }
 
-#todoapp input::input-placeholder {
+.todoapp input::input-placeholder {
     font-style: italic;
     font-weight: 300;
     color: #e6e6e6;
 }
 
-#todoapp h1 {
+.todoapp h1 {
     position: absolute;
     top: -155px;
     width: 100%;
     font-size: 100px;
     font-weight: 100;
     text-align: center;
     color: rgba(175, 47, 47, 0.15);
     -webkit-text-rendering: optimizeLegibility;
     -moz-text-rendering: optimizeLegibility;
     text-rendering: optimizeLegibility;
 }
 
-#new-todo,
+.new-todo,
 .edit {
     position: relative;
     margin: 0;
     width: 100%;
     font-size: 24px;
     font-family: inherit;
     font-weight: inherit;
     line-height: 1.4em;
     border: 0;
-    outline: none;
     color: inherit;
     padding: 6px;
     border: 1px solid #999;
     box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
     box-sizing: border-box;
     -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
 }
 
-#new-todo {
+.new-todo {
     padding: 16px 16px 16px 60px;
     border: none;
     background: rgba(0, 0, 0, 0.003);
     box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);
 }
 
-#main {
+.main {
     position: relative;
     z-index: 2;
     border-top: 1px solid #e6e6e6;
 }
 
-label[for='toggle-all'] {
-    display: none;
+.toggle-all {
+    text-align: center;
+    border: none; /* Mobile Safari */
+    opacity: 0;
+    position: absolute;
 }
 
-#toggle-all {
-    position: absolute;
-    top: -55px;
-    left: -12px;
+.toggle-all + label {
     width: 60px;
     height: 34px;
-    text-align: center;
-    border: none; /* Mobile Safari */
+    font-size: 0;
+    position: absolute;
+    top: -52px;
+    left: -13px;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
 }
 
-#toggle-all:before {
+.toggle-all + label:before {
     content: '❯';
     font-size: 22px;
     color: #e6e6e6;
     padding: 10px 27px 10px 27px;
 }
 
-#toggle-all:checked:before {
+.toggle-all:checked + label:before {
     color: #737373;
 }
 
-#todo-list {
+.todo-list {
     margin: 0;
     padding: 0;
     list-style: none;
 }
 
-#todo-list li {
+.todo-list li {
     position: relative;
     font-size: 24px;
     border-bottom: 1px solid #ededed;
 }
 
-#todo-list li:last-child {
+.todo-list li:last-child {
     border-bottom: none;
 }
 
-#todo-list li.editing {
+.todo-list li.editing {
     border-bottom: none;
     padding: 0;
 }
 
-#todo-list li.editing .edit {
+.todo-list li.editing .edit {
     display: block;
     width: 506px;
-    padding: 13px 17px 12px 17px;
+    padding: 12px 16px;
     margin: 0 0 0 43px;
 }
 
-#todo-list li.editing .view {
+.todo-list li.editing .view {
     display: none;
 }
 
-#todo-list li .toggle {
+.todo-list li .toggle {
     text-align: center;
     width: 40px;
     /* auto, since non-WebKit browsers doesn't support input styling */
     height: auto;
     position: absolute;
     top: 0;
     bottom: 0;
     margin: auto 0;
     border: none; /* Mobile Safari */
     -webkit-appearance: none;
     appearance: none;
 }
 
-#todo-list li .toggle:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>');
+.todo-list li .toggle {
+    opacity: 0;
 }
 
-#todo-list li .toggle:checked:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>');
+.todo-list li .toggle + label {
+    /*
+        Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+        IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+    */
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
+    background-repeat: no-repeat;
+    background-position: center left;
 }
 
-#todo-list li label {
-    white-space: pre;
-    word-break: break-word;
-    padding: 15px 60px 15px 15px;
-    margin-left: 45px;
+.todo-list li .toggle:checked + label {
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
+}
+
+.todo-list li label {
+    word-break: break-all;
+    padding: 15px 15px 15px 60px;
     display: block;
     line-height: 1.2;
     transition: color 0.4s;
 }
 
-#todo-list li.completed label {
+.todo-list li.completed label {
     color: #d9d9d9;
     text-decoration: line-through;
 }
 
-#todo-list li .destroy {
+.todo-list li .destroy {
     display: none;
     position: absolute;
     top: 0;
     right: 10px;
     bottom: 0;
     width: 40px;
     height: 40px;
     margin: auto 0;
     font-size: 30px;
     color: #cc9a9a;
     margin-bottom: 11px;
     transition: color 0.2s ease-out;
 }
 
-#todo-list li .destroy:hover {
+.todo-list li .destroy:hover {
     color: #af5b5e;
 }
 
-#todo-list li .destroy:after {
+.todo-list li .destroy:after {
     content: '×';
 }
 
-#todo-list li:hover .destroy {
+.todo-list li:hover .destroy {
     display: block;
 }
 
-#todo-list li .edit {
+.todo-list li .edit {
     display: none;
 }
 
-#todo-list li.editing:last-child {
+.todo-list li.editing:last-child {
     margin-bottom: -1px;
 }
 
-#footer {
+.footer {
     color: #777;
     padding: 10px 15px;
     height: 20px;
     text-align: center;
     border-top: 1px solid #e6e6e6;
 }
 
-#footer:before {
+.footer:before {
     content: '';
     position: absolute;
     right: 0;
     bottom: 0;
     left: 0;
     height: 50px;
     overflow: hidden;
     box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),
                 0 8px 0 -3px #f6f6f6,
                 0 9px 1px -3px rgba(0, 0, 0, 0.2),
                 0 16px 0 -6px #f6f6f6,
                 0 17px 2px -6px rgba(0, 0, 0, 0.2);
 }
 
-#todo-count {
+.todo-count {
     float: left;
     text-align: left;
 }
 
-#todo-count strong {
+.todo-count strong {
     font-weight: 300;
 }
 
-#filters {
+.filters {
     margin: 0;
     padding: 0;
     list-style: none;
     position: absolute;
     right: 0;
     left: 0;
 }
 
-#filters li {
+.filters li {
     display: inline;
 }
 
-#filters li a {
+.filters li a {
     color: inherit;
     margin: 3px;
     padding: 3px 7px;
     text-decoration: none;
     border: 1px solid transparent;
     border-radius: 3px;
 }
 
-#filters li a.selected,
-#filters li a:hover {
+.filters li a:hover {
     border-color: rgba(175, 47, 47, 0.1);
 }
 
-#filters li a.selected {
+.filters li a.selected {
     border-color: rgba(175, 47, 47, 0.2);
 }
 
-#clear-completed,
-html #clear-completed:active {
+.clear-completed,
+html .clear-completed:active {
     float: right;
     position: relative;
     line-height: 20px;
     text-decoration: none;
     cursor: pointer;
-    position: relative;
 }
 
-#clear-completed:hover {
+.clear-completed:hover {
     text-decoration: underline;
 }
 
-#info {
+.info {
     margin: 65px auto 0;
     color: #bfbfbf;
     font-size: 10px;
     text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
     text-align: center;
 }
 
-#info p {
+.info p {
     line-height: 1;
 }
 
-#info a {
+.info a {
     color: inherit;
     text-decoration: none;
     font-weight: 400;
 }
 
-#info a:hover {
+.info a:hover {
     text-decoration: underline;
 }
 
 /*
     Hack to remove background from Mobile Safari.
     Can't use it globally since it destroys checkboxes in Firefox
 */
 @media screen and (-webkit-min-device-pixel-ratio:0) {
-    #toggle-all,
-    #todo-list li .toggle {
+    .toggle-all,
+    .todo-list li .toggle {
         background: none;
     }
 
-    #todo-list li .toggle {
+    .todo-list li .toggle {
         height: 40px;
     }
-
-    #toggle-all {
-        -webkit-transform: rotate(90deg);
-        transform: rotate(90deg);
-        -webkit-appearance: none;
-        appearance: none;
-    }
 }
 
 @media (max-width: 430px) {
-    #footer {
+    .footer {
         height: 50px;
     }
 
-    #filters {
+    .filters {
         bottom: 10px;
     }
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-app-css/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-app-css/package.json
@@ -1,32 +1,32 @@
 {
-  "_from": "todomvc-app-css@^1.0.1",
-  "_id": "todomvc-app-css@1.0.4",
+  "_from": "todomvc-app-css@^2.1.0",
+  "_id": "todomvc-app-css@2.1.0",
   "_inBundle": false,
-  "_integrity": "sha1-0lKSeabaW++wa1XAwyTF/P2U1lY=",
+  "_integrity": "sha1-tvJxbTOa+i5feZNH0qSLBTliQqU=",
   "_location": "/todomvc-app-css",
   "_phantomChildren": {},
   "_requested": {
     "type": "range",
     "registry": true,
-    "raw": "todomvc-app-css@^1.0.1",
+    "raw": "todomvc-app-css@^2.1.0",
     "name": "todomvc-app-css",
     "escapedName": "todomvc-app-css",
-    "rawSpec": "^1.0.1",
+    "rawSpec": "^2.1.0",
     "saveSpec": null,
-    "fetchSpec": "^1.0.1"
+    "fetchSpec": "^2.1.0"
   },
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-1.0.4.tgz",
-  "_shasum": "d2529279a6da5befb06b55c0c324c5fcfd94d656",
-  "_spec": "todomvc-app-css@^1.0.1",
-  "_where": "/Users/mathiasb/projects/WebKit-Git/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs",
+  "_resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-2.1.0.tgz",
+  "_shasum": "b6f2716d339afa2e5f799347d2a48b05396242a5",
+  "_spec": "todomvc-app-css@^2.1.0",
+  "_where": "/Users/mathiasb/projects/WebKit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
     "url": "sindresorhus.com"
   },
   "bugs": {
     "url": "https://github.com/tastejs/todomvc-app-css/issues"
   },
@@ -48,10 +48,11 @@
     "stylesheet"
   ],
   "license": "CC-BY-4.0",
   "name": "todomvc-app-css",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/tastejs/todomvc-app-css.git"
   },
-  "version": "1.0.4"
+  "style": "index.css",
+  "version": "2.1.0"
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-common/base.js
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-common/base.js
@@ -16,17 +16,17 @@
                     for (var key in iterable) {
                         if (object[key] == null) {
                             object[key] = iterable[key];
                         }
                     }
                 }
             }
             return object;
-        }
+        };
 
         // By default, Underscore uses ERB-style template delimiters, change the
         // following template settings to use alternative delimiters.
         _.templateSettings = {
             evaluate    : /<%([\s\S]+?)%>/g,
             interpolate : /<%=([\s\S]+?)%>/g,
             escape      : /<%-([\s\S]+?)%>/g
         };
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-common/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/node_modules/todomvc-common/package.json
@@ -1,32 +1,32 @@
 {
-  "_from": "todomvc-common@^1.0.0",
-  "_id": "todomvc-common@1.0.3",
+  "_from": "todomvc-common@^1.0.4",
+  "_id": "todomvc-common@1.0.4",
   "_inBundle": false,
-  "_integrity": "sha1-y6GGgQnKpAG5COv3d5TMEBS3SHM=",
+  "_integrity": "sha512-AA0Z4exovEqubhbZCrzzn9roVT4zvOncS319p2zIc4CsNe5B9TLL7Sei1NIV6d+WrgR5rOi+y0I9Y6GE7xgNOw==",
   "_location": "/todomvc-common",
   "_phantomChildren": {},
   "_requested": {
     "type": "range",
     "registry": true,
-    "raw": "todomvc-common@^1.0.0",
+    "raw": "todomvc-common@^1.0.4",
     "name": "todomvc-common",
     "escapedName": "todomvc-common",
-    "rawSpec": "^1.0.0",
+    "rawSpec": "^1.0.4",
     "saveSpec": null,
-    "fetchSpec": "^1.0.0"
+    "fetchSpec": "^1.0.4"
   },
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.3.tgz",
-  "_shasum": "cba1868109caa401b908ebf77794cc1014b74873",
-  "_spec": "todomvc-common@^1.0.0",
-  "_where": "/Users/mathiasb/projects/WebKit-Git/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs",
+  "_resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.4.tgz",
+  "_shasum": "23099af886c2f0525bfd4537e078f12d0074309e",
+  "_spec": "todomvc-common@^1.0.4",
+  "_where": "/Users/mathiasb/projects/WebKit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/angularjs",
   "author": {
     "name": "TasteJS"
   },
   "bugs": {
     "url": "https://github.com/tastejs/todomvc-common/issues"
   },
   "bundleDependencies": false,
   "deprecated": false,
@@ -45,10 +45,10 @@
   "license": "MIT",
   "main": "base.js",
   "name": "todomvc-common",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/tastejs/todomvc-common.git"
   },
   "style": "base.css",
-  "version": "1.0.3"
+  "version": "1.0.4"
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/package-lock.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/package-lock.json
@@ -13,19 +13,19 @@
       "integrity": "sha1-0ecSqwGvpdLsZJ9eRxZzpwTyvkA="
     },
     "angular-route": {
       "version": "1.6.5",
       "resolved": "https://registry.npmjs.org/angular-route/-/angular-route-1.6.5.tgz",
       "integrity": "sha1-r0VZMpn1WHTQJhAYrbEVIKOBfSo="
     },
     "todomvc-app-css": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-1.0.4.tgz",
-      "integrity": "sha1-0lKSeabaW++wa1XAwyTF/P2U1lY="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-2.1.0.tgz",
+      "integrity": "sha1-tvJxbTOa+i5feZNH0qSLBTliQqU="
     },
     "todomvc-common": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.3.tgz",
-      "integrity": "sha1-y6GGgQnKpAG5COv3d5TMEBS3SHM="
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.4.tgz",
+      "integrity": "sha512-AA0Z4exovEqubhbZCrzzn9roVT4zvOncS319p2zIc4CsNe5B9TLL7Sei1NIV6d+WrgR5rOi+y0I9Y6GE7xgNOw=="
     }
   }
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/package.json
@@ -2,12 +2,12 @@
   "private": true,
   "scripts": {
     "test": "karma start test/config/karma.conf.js"
   },
   "dependencies": {
     "angular": "1.6.5",
     "angular-resource": "1.6.5",
     "angular-route": "1.6.5",
-    "todomvc-app-css": "^1.0.1",
-    "todomvc-common": "^1.0.0"
+    "todomvc-app-css": "^2.1.0",
+    "todomvc-common": "^1.0.4"
   }
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/todomvc-index.html
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/angularjs/todomvc-index.html
@@ -1,52 +1,52 @@
-<section id="todoapp">
+<section id="todoapp" class="todoapp">
     <header id="header">
         <h1>todos</h1>
-        <form id="todo-form" ng-submit="addTodo()">
-            <input id="new-todo" placeholder="What needs to be done?" ng-model="newTodo" ng-disabled="saving" autofocus>
+        <form id="todo-form" class="todo-form" ng-submit="addTodo()">
+            <input id="new-todo" class="new-todo" placeholder="What needs to be done?" ng-model="newTodo" ng-disabled="saving" autofocus>
         </form>
     </header>
-    <section id="main" ng-show="todos.length" ng-cloak>
-        <input id="toggle-all" type="checkbox" ng-model="allChecked" ng-click="markAll(allChecked)">
+    <section id="main" class="main" ng-show="todos.length" ng-cloak>
+        <input id="toggle-all" class="toggle-all" type="checkbox" ng-model="allChecked" ng-click="markAll(allChecked)">
         <label for="toggle-all">Mark all as complete</label>
-        <ul id="todo-list">
+        <ul id="todo-list" class="todo-list">
             <li ng-repeat="todo in todos | filter:statusFilter track by $index" ng-class="{completed: todo.completed, editing: todo == editedTodo}">
                 <div class="view">
                     <input class="toggle" type="checkbox" ng-model="todo.completed" ng-change="toggleCompleted(todo)">
                     <label ng-dblclick="editTodo(todo)">{{todo.title}}</label>
                     <button class="destroy" ng-click="removeTodo(todo)"></button>
                 </div>
                 <form ng-submit="saveEdits(todo, 'submit')">
                     <input class="edit" ng-trim="false" ng-model="todo.title" todo-escape="revertEdits(todo)" ng-blur="saveEdits(todo, 'blur')"
                         todo-focus="todo == editedTodo">
                 </form>
             </li>
         </ul>
     </section>
-    <footer id="footer" ng-show="todos.length" ng-cloak>
-        <span id="todo-count"><strong>{{remainingCount}}</strong>
-                        <ng-pluralize count="remainingCount" when="{ one: 'item left', other: 'items left' }"></ng-pluralize>
-                    </span>
-        <ul id="filters">
+    <footer id="footer" class="footer" ng-show="todos.length" ng-cloak>
+        <span id="todo-count" class="todo-count"><strong>{{remainingCount}}</strong>
+            <ng-pluralize count="remainingCount" when="{ one: 'item left', other: 'items left' }"></ng-pluralize>
+        </span>
+        <ul id="filters" class="filters">
             <li>
                 <a ng-class="{selected: status == ''} " href="#/">All</a>
             </li>
             <li>
                 <a ng-class="{selected: status == 'active'}" href="#/active">Active</a>
             </li>
             <li>
                 <a ng-class="{selected: status == 'completed'}" href="#/completed">Completed</a>
             </li>
         </ul>
-        <button id="clear-completed" ng-click="clearCompletedTodos()" ng-show="completedCount">Clear completed</button>
+        <button id="clear-completed" class="clear-completed" ng-click="clearCompletedTodos()" ng-show="completedCount">Clear completed</button>
     </footer>
 </section>
-<footer id="info">
+<footer id="info" class="info">
     <p>Double-click to edit a todo</p>
     <p>Credits:
-        <a href="http://twitter.com/cburgdorf">Christoph Burgdorf</a>,
+        <a href="https://twitter.com/cburgdorf">Christoph Burgdorf</a>,
         <a href="http://ericbidelman.com">Eric Bidelman</a>,
         <a href="http://jacobmumm.com">Jacob Mumm</a> and
         <a href="http://blog.igorminar.com">Igor Minar</a>
     </p>
     <p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
-</footer>
\ No newline at end of file
+</footer>
--- a/third_party/speedometer/resources/todomvc/architecture-examples/backbone/js/app.js
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/backbone/js/app.js
@@ -4,9 +4,13 @@ var app = app || {};
 var ENTER_KEY = 13;
 var ESC_KEY = 27;
 
 $(function () {
     'use strict';
 
     // kick things off by creating the `App`
     window.appView = new app.AppView();
+
+    var dummyNodeToNotifyAppIsReady = document.createElement('div');
+    dummyNodeToNotifyAppIsReady.id = 'appIsReady';
+    document.body.appendChild(dummyNodeToNotifyAppIsReady);
 });
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/assets/todomvc.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/assets/todomvc.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/assets/vendor.css
@@ -0,0 +1,376 @@
+html,
+body {
+    margin: 0;
+    padding: 0;
+}
+
+button {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    background: none;
+    font-size: 100%;
+    vertical-align: baseline;
+    font-family: inherit;
+    font-weight: inherit;
+    color: inherit;
+    -webkit-appearance: none;
+    appearance: none;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+body {
+    font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
+    line-height: 1.4em;
+    background: #f5f5f5;
+    color: #4d4d4d;
+    min-width: 230px;
+    max-width: 550px;
+    margin: 0 auto;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    font-weight: 300;
+}
+
+:focus {
+    outline: 0;
+}
+
+.hidden {
+    display: none;
+}
+
+#todoapp {
+    background: #fff;
+    margin: 130px 0 40px 0;
+    position: relative;
+    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),
+                0 25px 50px 0 rgba(0, 0, 0, 0.1);
+}
+
+#todoapp input::-webkit-input-placeholder {
+    font-style: italic;
+    font-weight: 300;
+    color: #e6e6e6;
+}
+
+#todoapp input::-moz-placeholder {
+    font-style: italic;
+    font-weight: 300;
+    color: #e6e6e6;
+}
+
+#todoapp input::input-placeholder {
+    font-style: italic;
+    font-weight: 300;
+    color: #e6e6e6;
+}
+
+#todoapp h1 {
+    position: absolute;
+    top: -155px;
+    width: 100%;
+    font-size: 100px;
+    font-weight: 100;
+    text-align: center;
+    color: rgba(175, 47, 47, 0.15);
+    -webkit-text-rendering: optimizeLegibility;
+    -moz-text-rendering: optimizeLegibility;
+    text-rendering: optimizeLegibility;
+}
+
+#new-todo,
+.edit {
+    position: relative;
+    margin: 0;
+    width: 100%;
+    font-size: 24px;
+    font-family: inherit;
+    font-weight: inherit;
+    line-height: 1.4em;
+    border: 0;
+    color: inherit;
+    padding: 6px;
+    border: 1px solid #999;
+    box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
+    box-sizing: border-box;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+#new-todo {
+    padding: 16px 16px 16px 60px;
+    border: none;
+    background: rgba(0, 0, 0, 0.003);
+    box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);
+}
+
+#main {
+    position: relative;
+    z-index: 2;
+    border-top: 1px solid #e6e6e6;
+}
+
+#toggle-all {
+    text-align: center;
+    border: none; /* Mobile Safari */
+    opacity: 0;
+    position: absolute;
+}
+
+#toggle-all + label {
+    width: 60px;
+    height: 34px;
+    font-size: 0;
+    position: absolute;
+    top: -52px;
+    left: -13px;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+}
+
+#toggle-all + label:before {
+    content: '❯';
+    font-size: 22px;
+    color: #e6e6e6;
+    padding: 10px 27px 10px 27px;
+}
+
+#toggle-all:checked + label:before {
+    color: #737373;
+}
+
+#todo-list {
+    margin: 0;
+    padding: 0;
+    list-style: none;
+}
+
+#todo-list li {
+    position: relative;
+    font-size: 24px;
+    border-bottom: 1px solid #ededed;
+}
+
+#todo-list li:last-child {
+    border-bottom: none;
+}
+
+#todo-list li.editing {
+    border-bottom: none;
+    padding: 0;
+}
+
+#todo-list li.editing .edit {
+    display: block;
+    width: 506px;
+    padding: 12px 16px;
+    margin: 0 0 0 43px;
+}
+
+#todo-list li.editing .view {
+    display: none;
+}
+
+#todo-list li .toggle {
+    text-align: center;
+    width: 40px;
+    /* auto, since non-WebKit browsers doesn't support input styling */
+    height: auto;
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    margin: auto 0;
+    border: none; /* Mobile Safari */
+    -webkit-appearance: none;
+    appearance: none;
+}
+
+#todo-list li .toggle {
+    opacity: 0;
+}
+
+#todo-list li .toggle + label {
+    /*
+        Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+        IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+    */
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
+    background-repeat: no-repeat;
+    background-position: center left;
+}
+
+#todo-list li .toggle:checked + label {
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
+}
+
+#todo-list li label {
+    word-break: break-all;
+    padding: 15px 15px 15px 60px;
+    display: block;
+    line-height: 1.2;
+    transition: color 0.4s;
+}
+
+#todo-list li.completed label {
+    color: #d9d9d9;
+    text-decoration: line-through;
+}
+
+#todo-list li .destroy {
+    display: none;
+    position: absolute;
+    top: 0;
+    right: 10px;
+    bottom: 0;
+    width: 40px;
+    height: 40px;
+    margin: auto 0;
+    font-size: 30px;
+    color: #cc9a9a;
+    margin-bottom: 11px;
+    transition: color 0.2s ease-out;
+}
+
+#todo-list li .destroy:hover {
+    color: #af5b5e;
+}
+
+#todo-list li .destroy:after {
+    content: '×';
+}
+
+#todo-list li:hover .destroy {
+    display: block;
+}
+
+#todo-list li .edit {
+    display: none;
+}
+
+#todo-list li.editing:last-child {
+    margin-bottom: -1px;
+}
+
+#footer {
+    color: #777;
+    padding: 10px 15px;
+    height: 20px;
+    text-align: center;
+    border-top: 1px solid #e6e6e6;
+}
+
+#footer:before {
+    content: '';
+    position: absolute;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    height: 50px;
+    overflow: hidden;
+    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),
+                0 8px 0 -3px #f6f6f6,
+                0 9px 1px -3px rgba(0, 0, 0, 0.2),
+                0 16px 0 -6px #f6f6f6,
+                0 17px 2px -6px rgba(0, 0, 0, 0.2);
+}
+
+#todo-count {
+    float: left;
+    text-align: left;
+}
+
+#todo-count strong {
+    font-weight: 300;
+}
+
+#filters {
+    margin: 0;
+    padding: 0;
+    list-style: none;
+    position: absolute;
+    right: 0;
+    left: 0;
+}
+
+#filters li {
+    display: inline;
+}
+
+#filters li a {
+    color: inherit;
+    margin: 3px;
+    padding: 3px 7px;
+    text-decoration: none;
+    border: 1px solid transparent;
+    border-radius: 3px;
+}
+
+#filters li a:hover {
+    border-color: rgba(175, 47, 47, 0.1);
+}
+
+#filters li a.selected {
+    border-color: rgba(175, 47, 47, 0.2);
+}
+
+#clear-completed,
+html #clear-completed:active {
+    float: right;
+    position: relative;
+    line-height: 20px;
+    text-decoration: none;
+    cursor: pointer;
+}
+
+#clear-completed:hover {
+    text-decoration: underline;
+}
+
+#info {
+    margin: 65px auto 0;
+    color: #bfbfbf;
+    font-size: 10px;
+    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+    text-align: center;
+}
+
+#info p {
+    line-height: 1;
+}
+
+#info a {
+    color: inherit;
+    text-decoration: none;
+    font-weight: 400;
+}
+
+#info a:hover {
+    text-decoration: underline;
+}
+
+/*
+    Hack to remove background from Mobile Safari.
+    Can't use it globally since it destroys checkboxes in Firefox
+*/
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+    #toggle-all,
+    #todo-list li .toggle {
+        background: none;
+    }
+
+    #todo-list li .toggle {
+        height: 40px;
+    }
+}
+
+@media (max-width: 430px) {
+    #footer {
+        height: 50px;
+    }
+
+    #filters {
+        bottom: 10px;
+    }
+}
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/assets/vendor.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/assets/vendor.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/crossdomain.xml
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/crossdomain.xml
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/index.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Todomvc</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+   
+<meta name="todomvc/config/environment" content="%7B%22modulePrefix%22%3A%22todomvc%22%2C%22environment%22%3A%22development%22%2C%22locationType%22%3A%22none%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%7D%2C%22APP%22%3A%7B%22name%22%3A%22todomvc%22%2C%22version%22%3A%220.0.0%202c3f8158%22%7D%2C%22exportApplicationGlobal%22%3Atrue%7D" />
+
+    <link rel="stylesheet" href="assets/vendor.css">
+
+    
+  </head>
+  <body>
+    
+
+    <script src="assets/vendor.js"></script>
+    <script src="assets/todomvc.js"></script>
+
+    
+  </body>
+</html>
\ No newline at end of file
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/robots.txt
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/robots.txt
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.bowerrc
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.bowerrc
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.editorconfig
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.editorconfig
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.ember-cli
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.ember-cli
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.gitignore
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.gitignore
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.jshintrc
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.jshintrc
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.travis.yml
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.travis.yml
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.watchmanconfig
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/.watchmanconfig
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/README.md
@@ -0,0 +1,15 @@
+# Ember.js TodoMVC Example using Ember CLI
+
+> A framework for creating ambitious web applications.
+
+> _[Ember.js - emberjs.com](http://emberjs.com)_
+> _[Ember CLI - ember-cli.com](http://ember-cli.com)_
+
+## Note for people updating this app.
+
+The `index.html` and the `assets` folder in the parent folder as simlinks into the items with the
+same names inside `dist`. The `dist` folder has to be checked in git and built for production.
+
+To work on this comment `<base href="/examples/ember-cli/index.html" />` in the `app/index.html`
+and uncommented it back before doing the production build.
+
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/app.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/app.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/components/todo-item.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/components/todo-item.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/components/todo-list.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/components/todo-list.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/active.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/controllers/active.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/application.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/controllers/application.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/completed.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/controllers/completed.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/helpers/gt.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/helpers/gt.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/helpers/pluralize.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/helpers/pluralize.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/index.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Todomvc</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    {{content-for "head"}}
+
+    <link rel="stylesheet" href="assets/vendor.css">
+    <link rel="stylesheet" href="assets/todomvc.css">
+
+    {{content-for "head-footer"}}
+  </head>
+  <body>
+    {{content-for "body"}}
+
+    <script src="assets/vendor.js"></script>
+    <script src="assets/todomvc.js"></script>
+
+    {{content-for "body-footer"}}
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/instance-initializers/global.js
@@ -0,0 +1,10 @@
+// app/instance-initializers/global.js
+
+export function initialize(application) {
+  window.App = application;  // or window.Whatever
+}
+
+export default {
+  name: 'global',
+  initialize: initialize
+};
\ No newline at end of file
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/resolver.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/resolver.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/router.js
@@ -0,0 +1,13 @@
+import Ember from 'ember';
+import config from './config/environment';
+
+const Router = Ember.Router.extend({
+    location: config.locationType
+});
+
+Router.map(function () {
+    this.route('active');
+    this.route('completed');
+});
+
+export default Router;
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/routes/application.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/routes/application.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/services/memory.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/services/memory.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/services/repo.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/services/repo.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/active.hbs
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/active.hbs
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/application.hbs
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/application.hbs
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/completed.hbs
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/completed.hbs
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/components/todo-item.hbs
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/components/todo-item.hbs
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/components/todo-list.hbs
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/components/todo-list.hbs
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/index.hbs
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/app/templates/index.hbs
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/bower.json
@@ -0,0 +1,9 @@
+{
+  "name": "todomvc",
+  "dependencies": {
+    "ember": "~2.6.0",
+    "ember-cli-shims": "0.1.1",
+    "ember-cli-test-loader": "0.2.2",
+    "ember-qunit-notifications": "0.1.0"
+  }
+}
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/config/environment.js
@@ -0,0 +1,47 @@
+/* jshint node: true */
+
+module.exports = function (environment) {
+    var ENV = {
+        modulePrefix: 'todomvc',
+        environment: environment,
+        baseURL: null,
+        locationType: 'auto',
+        EmberENV: {
+            FEATURES: {
+                // Here you can enable experimental features on an ember canary build
+                // e.g. 'with-controller': true
+            }
+        },
+
+        APP: {
+            // Here you can pass flags/options to your application instance
+            // when it is created
+        }
+    };
+
+    // if (environment === 'development') {
+    //  ENV.APP.LOG_RESOLVER = true;
+    //  ENV.APP.LOG_ACTIVE_GENERATION = true;
+    //  ENV.APP.LOG_TRANSITIONS = true;
+    //  ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
+    //  ENV.APP.LOG_VIEW_LOOKUPS = true;
+    // }
+
+    if (environment === 'test') {
+        // Testem prefers this...
+        ENV.baseURL = '/';
+        ENV.locationType = 'none';
+
+        // keep test console output quieter
+        ENV.APP.LOG_ACTIVE_GENERATION = false;
+        ENV.APP.LOG_VIEW_LOOKUPS = false;
+
+        ENV.APP.rootElement = '#ember-testing';
+    }
+
+    // if (environment === 'production') {
+
+    // }
+
+    return ENV;
+};
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/ember-cli-build.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/ember-cli-build.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/package.json
@@ -0,0 +1,42 @@
+{
+  "name": "todomvc",
+  "version": "0.0.0",
+  "description": "Small description for todomvc goes here",
+  "private": true,
+  "directories": {
+    "doc": "doc",
+    "test": "tests"
+  },
+  "scripts": {
+    "build": "ember build",
+    "start": "ember server",
+    "test": "ember test"
+  },
+  "repository": "",
+  "engines": {
+    "node": ">= 0.10.0"
+  },
+  "author": "",
+  "license": "MIT",
+  "devDependencies": {
+    "broccoli-asset-rev": "^2.4.2",
+    "ember-ajax": "0.7.1",
+    "ember-cli": "2.5.0",
+    "ember-cli-app-version": "^1.0.0",
+    "ember-cli-babel": "^5.1.6",
+    "ember-cli-dependency-checker": "^1.2.0",
+    "ember-cli-htmlbars": "^1.0.3",
+    "ember-cli-htmlbars-inline-precompile": "^0.3.1",
+    "ember-cli-inject-live-reload": "^1.4.0",
+    "ember-cli-jshint": "^1.0.0",
+    "ember-cli-qunit": "^1.4.0",
+    "ember-cli-release": "0.2.8",
+    "ember-cli-sri": "^2.1.0",
+    "ember-cli-uglify": "^1.2.0",
+    "ember-export-application-global": "^1.0.5",
+    "ember-inflector": "1.9.4",
+    "ember-load-initializers": "^0.5.1",
+    "ember-resolver": "^2.0.3",
+    "loader.js": "^4.0.1"
+  }
+}
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/crossdomain.xml
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/public/crossdomain.xml
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/robots.txt
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/public/robots.txt
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/testem.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/testem.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/.jshintrc
@@ -0,0 +1,52 @@
+{
+  "predef": [
+    "document",
+    "window",
+    "location",
+    "setTimeout",
+    "$",
+    "-Promise",
+    "define",
+    "console",
+    "visit",
+    "exists",
+    "fillIn",
+    "click",
+    "keyEvent",
+    "triggerEvent",
+    "find",
+    "findWithAssert",
+    "wait",
+    "DS",
+    "andThen",
+    "currentURL",
+    "currentPath",
+    "currentRouteName"
+  ],
+  "node": false,
+  "browser": false,
+  "boss": true,
+  "curly": true,
+  "debug": false,
+  "devel": false,
+  "eqeqeq": true,
+  "evil": true,
+  "forin": false,
+  "immed": false,
+  "laxbreak": false,
+  "newcap": true,
+  "noarg": true,
+  "noempty": false,
+  "nonew": false,
+  "nomen": false,
+  "onevar": false,
+  "plusplus": false,
+  "regexp": false,
+  "undef": true,
+  "sub": true,
+  "strict": false,
+  "white": false,
+  "eqnull": true,
+  "esnext": true,
+  "unused": true
+}
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/destroy-app.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/helpers/destroy-app.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/helpers/module-for-acceptance.js
@@ -0,0 +1,22 @@
+import { module } from 'qunit';
+import startApp from '../helpers/start-app';
+import destroyApp from '../helpers/destroy-app';
+
+export default function (name, options = {}) {
+    module(name, {
+        beforeEach() {
+            this.application = startApp();
+
+            if (options.beforeEach) {
+                options.beforeEach.apply(this, arguments);
+            }
+        },
+
+        afterEach() {
+            if (options.afterEach) {
+                options.afterEach.apply(this, arguments);
+            }
+            destroyApp(this.application);
+        }
+    });
+}
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/resolver.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/helpers/resolver.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/helpers/start-app.js
@@ -0,0 +1,18 @@
+import Ember from 'ember';
+import Application from '../../app';
+import config from '../../config/environment';
+
+export default function startApp(attrs) {
+    let application;
+
+    let attributes = Ember.merge({}, config.APP);
+    attributes = Ember.merge(attributes, attrs); // use defaults, but you can override;
+
+    Ember.run(() => {
+        application = Application.create(attributes);
+        application.setupForTesting();
+        application.injectTestHelpers();
+    });
+
+    return application;
+}
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/index.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Todomvc Tests</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+
+    {{content-for "head"}}
+    {{content-for "test-head"}}
+
+    <link rel="stylesheet" href="assets/vendor.css">
+    <link rel="stylesheet" href="assets/todomvc.css">
+    <link rel="stylesheet" href="assets/test-support.css">
+
+    {{content-for "head-footer"}}
+    {{content-for "test-head-footer"}}
+  </head>
+  <body>
+    {{content-for "body"}}
+    {{content-for "test-body"}}
+
+    <script src="testem.js" integrity=""></script>
+    <script src="assets/vendor.js"></script>
+    <script src="assets/test-support.js"></script>
+    <script src="assets/todomvc.js"></script>
+    <script src="assets/tests.js"></script>
+    <script src="assets/test-loader.js"></script>
+
+    {{content-for "body-footer"}}
+    {{content-for "test-body-footer"}}
+  </body>
+</html>
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/test-helper.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/tests/test-helper.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/vendor/base.css
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/vendor/base.css
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/vendor/index.css
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/source/vendor/index.css
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/testem.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/testem.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/index.html
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs-debug/tests/index.html
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.bowerrc
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.bowerrc
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.editorconfig
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.editorconfig
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.ember-cli
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.ember-cli
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.gitignore
@@ -0,0 +1,18 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+# /dist
+/dist/assets/.gitkeep
+/tmp
+
+# dependencies
+/node_modules
+/bower_components
+
+# misc
+/.sass-cache
+/connect.lock
+/coverage/*
+/libpeerconnection.log
+npm-debug.log
+testem.log
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/.jshintrc
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/.jshintrc
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/README.md
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/README.md
@@ -1,3 +1,8 @@
 # Speedometer 2.0: Ember.js TodoMVC example
 
-See `source/README.md`.
+## Test locally
+
+1. `npm install && bower install`
+2. `npm run build`
+3. Run a local server from the `dist` directory. (You could use [`npm i -g http-server`](https://github.com/indexzero/http-server).)
+4. Open the URL pointing to the local server in your web browser of choice.
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/app.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/app.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/components/todo-item.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/components/todo-item.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/components/todo-list.js
@@ -0,0 +1,28 @@
+import Ember from 'ember';
+
+export default Ember.Component.extend({
+    repo: Ember.inject.service(),
+    tagName: 'section',
+    elementId: 'main',
+    classNames: ['main'],
+    canToggle: true,
+    allCompleted: Ember.computed('todos.@each.completed', function () {
+        return this.get('todos').isEvery('completed');
+    }),
+
+    actions: {
+        enableToggle() {
+            this.set('canToggle', true);
+        },
+
+        disableToggle() {
+            this.set('canToggle', false);
+        },
+
+        toggleAll() {
+            let allCompleted = this.get('allCompleted');
+            this.get('todos').forEach(todo => Ember.set(todo, 'completed', !allCompleted));
+            this.get('repo').persist();
+        }
+    }
+});
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/active.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/controllers/active.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/application.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/controllers/application.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/controllers/completed.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/controllers/completed.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/helpers/gt.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/helpers/gt.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/helpers/pluralize.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/helpers/pluralize.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/index.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Ember.js TodoMVC example</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    {{content-for "head"}}
+    <link rel="stylesheet" href="{{rootURL}}assets/vendor.css">
+    {{content-for "head-footer"}}
+  </head>
+  <body>
+    {{content-for "body"}}
+    <script src="{{rootURL}}assets/vendor.js"></script>
+    <script src="{{rootURL}}assets/todomvc.js"></script>
+    {{content-for "body-footer"}}
+  </body>
+</html>
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/resolver.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/resolver.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/router.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/router.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/routes/application.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/routes/application.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/services/memory.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/services/memory.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/services/repo.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/services/repo.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/styles/.gitkeep
@@ -0,0 +1,2 @@
+# This file ensures the `app/styles` directory is included in the repository.
+# Without that directory present, the Ember TodoMVC example fails to build.
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/active.hbs
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/active.hbs
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/application.hbs
@@ -0,0 +1,29 @@
+<section id="todoapp" class="todoapp">
+  <header id="header" class="header">
+    <h1>todos</h1>
+    <input type="text" id="new-todo" class="new-todo" onkeydown={{action 'createTodo'}} placeholder="What needs to be done?" autofocus>
+  </header>
+    {{outlet}}
+    {{#if (gt model.length 0)}}
+      <footer id="footer" class="footer">
+        <span id="todo-count" class="todo-count"><strong>{{remaining.length}}</strong> {{pluralize 'item' remaining.length}} left</span>
+        <ul id="filters" class="filters">
+          <li>{{#link-to "index" activeClass="selected"}}All{{/link-to}}</li>
+          <li>{{#link-to "active" activeClass="selected"}}Active{{/link-to}}</li>
+          <li>{{#link-to "completed" activeClass="selected"}}Completed{{/link-to}}</li>
+        </ul>
+        {{#if completed.length}}
+          <button id="clear-completed" class="clear-completed" onclick={{action 'clearCompleted'}}>Clear completed</button>
+        {{/if}}
+      </footer>
+    {{/if}}
+</section>
+<footer id="info" class="info">
+  <p>Double-click to edit a todo</p>
+  <p>
+    Created by
+    <a href="http://github.com/cibernox">Miguel Camba</a>,
+    <a href="http://github.com/addyosmani">Addy Osmani</a>
+  </p>
+  <p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
+</footer>
\ No newline at end of file
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/completed.hbs
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/completed.hbs
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/components/todo-item.hbs
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/components/todo-item.hbs
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/components/todo-list.hbs
@@ -0,0 +1,10 @@
+{{#if todos.length}}
+  {{#if canToggle}}
+    <input type="checkbox" id="toggle-all" class="toggle-all" checked={{allCompleted}} onchange={{action 'toggleAll'}}>
+  {{/if}}
+  <ul id="todo-list" class="todo-list">
+    {{#each todos as |todo|}}
+      {{todo-item todo=todo onStartEdit=(action 'disableToggle') onEndEdit=(action 'enableToggle')}}
+    {{/each}}
+  </ul>
+{{/if}}
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/templates/index.hbs
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/app/templates/index.hbs
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/assets/vendor.css
+++ /dev/null
@@ -1,521 +0,0 @@
-hr {
-    margin: 20px 0;
-    border: 0;
-    border-top: 1px dashed #c5c5c5;
-    border-bottom: 1px dashed #f7f7f7;
-}
-
-.learn a {
-    font-weight: normal;
-    text-decoration: none;
-    color: #b83f45;
-}
-
-.learn a:hover {
-    text-decoration: underline;
-    color: #787e7e;
-}
-
-.learn h3,
-.learn h4,
-.learn h5 {
-    margin: 10px 0;
-    font-weight: 500;
-    line-height: 1.2;
-    color: #000;
-}
-
-.learn h3 {
-    font-size: 24px;
-}
-
-.learn h4 {
-    font-size: 18px;
-}
-
-.learn h5 {
-    margin-bottom: 0;
-    font-size: 14px;
-}
-
-.learn ul {
-    padding: 0;
-    margin: 0 0 30px 25px;
-}
-
-.learn li {
-    line-height: 20px;
-}
-
-.learn p {
-    font-size: 15px;
-    font-weight: 300;
-    line-height: 1.3;
-    margin-top: 0;
-    margin-bottom: 0;
-}
-
-#issue-count {
-    display: none;
-}
-
-.quote {
-    border: none;
-    margin: 20px 0 60px 0;
-}
-
-.quote p {
-    font-style: italic;
-}
-
-.quote p:before {
-    content: '“';
-    font-size: 50px;
-    opacity: .15;
-    position: absolute;
-    top: -20px;
-    left: 3px;
-}
-
-.quote p:after {
-    content: '”';
-    font-size: 50px;
-    opacity: .15;
-    position: absolute;
-    bottom: -42px;
-    right: 3px;
-}
-
-.quote footer {
-    position: absolute;
-    bottom: -40px;
-    right: 0;
-}
-
-.quote footer img {
-    border-radius: 3px;
-}
-
-.quote footer a {
-    margin-left: 5px;
-    vertical-align: middle;
-}
-
-.speech-bubble {
-    position: relative;
-    padding: 10px;
-    background: rgba(0, 0, 0, .04);
-    border-radius: 5px;
-}
-
-.speech-bubble:after {
-    content: '';
-    position: absolute;
-    top: 100%;
-    right: 30px;
-    border: 13px solid transparent;
-    border-top-color: rgba(0, 0, 0, .04);
-}
-
-.learn-bar > .learn {
-    position: absolute;
-    width: 272px;
-    top: 8px;
-    left: -300px;
-    padding: 10px;
-    border-radius: 5px;
-    background-color: rgba(255, 255, 255, .6);
-    transition-property: left;
-    transition-duration: 500ms;
-}
-
-@media (min-width: 899px) {
-    .learn-bar {
-        width: auto;
-        padding-left: 300px;
-    }
-
-    .learn-bar > .learn {
-        left: 8px;
-    }
-}
-
-html,
-body {
-    margin: 0;
-    padding: 0;
-}
-
-button {
-    margin: 0;
-    padding: 0;
-    border: 0;
-    background: none;
-    font-size: 100%;
-    vertical-align: baseline;
-    font-family: inherit;
-    font-weight: inherit;
-    color: inherit;
-    -webkit-appearance: none;
-    appearance: none;
-    -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
-}
-
-body {
-    font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
-    line-height: 1.4em;
-    background: #f5f5f5;
-    color: #4d4d4d;
-    min-width: 230px;
-    max-width: 550px;
-    margin: 0 auto;
-    -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
-    font-weight: 300;
-}
-
-button,
-input[type="checkbox"] {
-    outline: none;
-}
-
-.hidden {
-    display: none;
-}
-
-#todoapp {
-    background: #fff;
-    margin: 130px 0 40px 0;
-    position: relative;
-    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),
-                0 25px 50px 0 rgba(0, 0, 0, 0.1);
-}
-
-#todoapp input::-webkit-input-placeholder {
-    font-style: italic;
-    font-weight: 300;
-    color: #e6e6e6;
-}
-
-#todoapp input::-moz-placeholder {
-    font-style: italic;
-    font-weight: 300;
-    color: #e6e6e6;
-}
-
-#todoapp input::input-placeholder {
-    font-style: italic;
-    font-weight: 300;
-    color: #e6e6e6;
-}
-
-#todoapp h1 {
-    position: absolute;
-    top: -155px;
-    width: 100%;
-    font-size: 100px;
-    font-weight: 100;
-    text-align: center;
-    color: rgba(175, 47, 47, 0.15);
-    -webkit-text-rendering: optimizeLegibility;
-    -moz-text-rendering: optimizeLegibility;
-    text-rendering: optimizeLegibility;
-}
-
-#new-todo,
-.edit {
-    position: relative;
-    margin: 0;
-    width: 100%;
-    font-size: 24px;
-    font-family: inherit;
-    font-weight: inherit;
-    line-height: 1.4em;
-    border: 0;
-    outline: none;
-    color: inherit;
-    padding: 6px;
-    border: 1px solid #999;
-    box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
-    box-sizing: border-box;
-    -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
-}
-
-#new-todo {
-    padding: 16px 16px 16px 60px;
-    border: none;
-    background: rgba(0, 0, 0, 0.003);
-    box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);
-}
-
-#main {
-    position: relative;
-    z-index: 2;
-    border-top: 1px solid #e6e6e6;
-}
-
-label[for='toggle-all'] {
-    display: none;
-}
-
-#toggle-all {
-    position: absolute;
-    top: -55px;
-    left: -12px;
-    width: 60px;
-    height: 34px;
-    text-align: center;
-    border: none; /* Mobile Safari */
-}
-
-#toggle-all:before {
-    content: '❯';
-    font-size: 22px;
-    color: #e6e6e6;
-    padding: 10px 27px 10px 27px;
-}
-
-#toggle-all:checked:before {
-    color: #737373;
-}
-
-#todo-list {
-    margin: 0;
-    padding: 0;
-    list-style: none;
-}
-
-#todo-list li {
-    position: relative;
-    font-size: 24px;
-    border-bottom: 1px solid #ededed;
-}
-
-#todo-list li:last-child {
-    border-bottom: none;
-}
-
-#todo-list li.editing {
-    border-bottom: none;
-    padding: 0;
-}
-
-#todo-list li.editing .edit {
-    display: block;
-    width: 506px;
-    padding: 13px 17px 12px 17px;
-    margin: 0 0 0 43px;
-}
-
-#todo-list li.editing .view {
-    display: none;
-}
-
-#todo-list li .toggle {
-    text-align: center;
-    width: 40px;
-    /* auto, since non-WebKit browsers doesn't support input styling */
-    height: auto;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    margin: auto 0;
-    border: none; /* Mobile Safari */
-    -webkit-appearance: none;
-    appearance: none;
-}
-
-#todo-list li .toggle:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>');
-}
-
-#todo-list li .toggle:checked:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>');
-}
-
-#todo-list li label {
-    white-space: pre;
-    word-break: break-word;
-    padding: 15px 60px 15px 15px;
-    margin-left: 45px;
-    display: block;
-    line-height: 1.2;
-    transition: color 0.4s;
-}
-
-#todo-list li.completed label {
-    color: #d9d9d9;
-    text-decoration: line-through;
-}
-
-#todo-list li .destroy {
-    display: none;
-    position: absolute;
-    top: 0;
-    right: 10px;
-    bottom: 0;
-    width: 40px;
-    height: 40px;
-    margin: auto 0;
-    font-size: 30px;
-    color: #cc9a9a;
-    margin-bottom: 11px;
-    transition: color 0.2s ease-out;
-}
-
-#todo-list li .destroy:hover {
-    color: #af5b5e;
-}
-
-#todo-list li .destroy:after {
-    content: '×';
-}
-
-#todo-list li:hover .destroy {
-    display: block;
-}
-
-#todo-list li .edit {
-    display: none;
-}
-
-#todo-list li.editing:last-child {
-    margin-bottom: -1px;
-}
-
-#footer {
-    color: #777;
-    padding: 10px 15px;
-    height: 20px;
-    text-align: center;
-    border-top: 1px solid #e6e6e6;
-}
-
-#footer:before {
-    content: '';
-    position: absolute;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    height: 50px;
-    overflow: hidden;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),
-                0 8px 0 -3px #f6f6f6,
-                0 9px 1px -3px rgba(0, 0, 0, 0.2),
-                0 16px 0 -6px #f6f6f6,
-                0 17px 2px -6px rgba(0, 0, 0, 0.2);
-}
-
-#todo-count {
-    float: left;
-    text-align: left;
-}
-
-#todo-count strong {
-    font-weight: 300;
-}
-
-#filters {
-    margin: 0;
-    padding: 0;
-    list-style: none;
-    position: absolute;
-    right: 0;
-    left: 0;
-}
-
-#filters li {
-    display: inline;
-}
-
-#filters li a {
-    color: inherit;
-    margin: 3px;
-    padding: 3px 7px;
-    text-decoration: none;
-    border: 1px solid transparent;
-    border-radius: 3px;
-}
-
-#filters li a.selected,
-#filters li a:hover {
-    border-color: rgba(175, 47, 47, 0.1);
-}
-
-#filters li a.selected {
-    border-color: rgba(175, 47, 47, 0.2);
-}
-
-#clear-completed,
-html #clear-completed:active {
-    float: right;
-    position: relative;
-    line-height: 20px;
-    text-decoration: none;
-    cursor: pointer;
-    position: relative;
-}
-
-#clear-completed:hover {
-    text-decoration: underline;
-}
-
-#info {
-    margin: 65px auto 0;
-    color: #bfbfbf;
-    font-size: 10px;
-    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-    text-align: center;
-}
-
-#info p {
-    line-height: 1;
-}
-
-#info a {
-    color: inherit;
-    text-decoration: none;
-    font-weight: 400;
-}
-
-#info a:hover {
-    text-decoration: underline;
-}
-
-/*
-    Hack to remove background from Mobile Safari.
-    Can't use it globally since it destroys checkboxes in Firefox
-*/
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-    #toggle-all,
-    #todo-list li .toggle {
-        background: none;
-    }
-
-    #todo-list li .toggle {
-        height: 40px;
-    }
-
-    #toggle-all {
-        -webkit-transform: rotate(90deg);
-        transform: rotate(90deg);
-        -webkit-appearance: none;
-        appearance: none;
-    }
-}
-
-@media (max-width: 430px) {
-    #footer {
-        height: 50px;
-    }
-
-    #filters {
-        bottom: 10px;
-    }
-}
-
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/bower.json
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/bower.json
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/config/environment.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/config/environment.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/assets/todomvc-5d3e8eb3d5b3740a33185edcb11eeb57.js
@@ -0,0 +1,30 @@
+"use strict"
+define("todomvc/app",["exports","ember","todomvc/resolver","ember-load-initializers","todomvc/config/environment"],function(e,t,o,n,l){var i=void 0
+t.default.MODEL_FACTORY_INJECTIONS=!0,i=t.default.Application.extend({modulePrefix:l.default.modulePrefix,podModulePrefix:l.default.podModulePrefix,Resolver:o.default}),(0,n.default)(i,l.default.modulePrefix),e.default=i}),define("todomvc/components/todo-item",["exports","ember"],function(e,t){e.default=t.default.Component.extend({repo:t.default.inject.service(),tagName:"li",editing:!1,classNameBindings:["todo.completed","editing"],actions:{startEditing:function(){this.get("onStartEdit")(),this.set("editing",!0),t.default.run.scheduleOnce("afterRender",this,"focusInput")},doneEditing:function(e){this.get("editing")&&(t.default.isBlank(e)?this.send("removeTodo"):(this.set("todo.title",e.trim()),this.set("editing",!1),this.get("onEndEdit")()))},handleKeydown:function(e){13===e.keyCode?e.target.blur():27===e.keyCode&&this.set("editing",!1)},toggleCompleted:function(e){var o=this.get("todo")
+t.default.set(o,"completed",e.target.checked),this.get("repo").persist()},removeTodo:function(){this.get("repo").delete(this.get("todo"))}},focusInput:function(){this.element.querySelector("input.edit").focus()}})}),define("todomvc/components/todo-list",["exports","ember"],function(e,t){e.default=t.default.Component.extend({repo:t.default.inject.service(),tagName:"section",elementId:"main",classNames:["main"],canToggle:!0,allCompleted:t.default.computed("todos.@each.completed",function(){return this.get("todos").isEvery("completed")}),actions:{enableToggle:function(){this.set("canToggle",!0)},disableToggle:function(){this.set("canToggle",!1)},toggleAll:function(){var e=this.get("allCompleted")
+this.get("todos").forEach(function(o){return t.default.set(o,"completed",!e)}),this.get("repo").persist()}}})}),define("todomvc/controllers/active",["exports","ember"],function(e,t){e.default=t.default.Controller.extend({todos:t.default.computed.filterBy("model","completed",!1)})}),define("todomvc/controllers/application",["exports","ember"],function(e,t){e.default=t.default.Controller.extend({repo:t.default.inject.service(),remaining:t.default.computed.filterBy("model","completed",!1),completed:t.default.computed.filterBy("model","completed"),actions:{createTodo:function(e){13!==e.keyCode||t.default.isBlank(e.target.value)||(this.get("repo").add({title:e.target.value.trim(),completed:!1}),e.target.value="")},clearCompleted:function(){this.get("model").removeObjects(this.get("completed")),this.get("repo").persist()}}})}),define("todomvc/controllers/completed",["exports","ember"],function(e,t){e.default=t.default.Controller.extend({todos:t.default.computed.filterBy("model","completed",!0)})}),define("todomvc/helpers/app-version",["exports","ember","todomvc/config/environment","ember-cli-app-version/utils/regexp"],function(e,t,o,n){function l(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1]
+return t.hideSha?i.match(n.versionRegExp)[0]:t.hideVersion?i.match(n.shaRegExp)[0]:i}e.appVersion=l
+var i=o.default.APP.version
+e.default=t.default.Helper.helper(l)}),define("todomvc/helpers/gt",["exports","ember"],function(e,t){function o(e){var t=n(e,2)
+return t[0]>t[1]}var n=function(){function e(e,t){var o=[],n=!0,l=!1,i=void 0
+try{for(var a,d=e[Symbol.iterator]();!(n=(a=d.next()).done)&&(o.push(a.value),!t||o.length!==t);n=!0);}catch(e){l=!0,i=e}finally{try{!n&&d.return&&d.return()}finally{if(l)throw i}}return o}return function(t,o){if(Array.isArray(t))return t
+if(Symbol.iterator in Object(t))return e(t,o)
+throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()
+e.gt=o,e.default=t.default.Helper.helper(o)}),define("todomvc/helpers/pluralize",["exports","ember","ember-inflector"],function(e,t,o){function n(e){var t=l(e,2),n=t[0]
+return 1===t[1]?n:(0,o.pluralize)(n)}var l=function(){function e(e,t){var o=[],n=!0,l=!1,i=void 0
+try{for(var a,d=e[Symbol.iterator]();!(n=(a=d.next()).done)&&(o.push(a.value),!t||o.length!==t);n=!0);}catch(e){l=!0,i=e}finally{try{!n&&d.return&&d.return()}finally{if(l)throw i}}return o}return function(t,o){if(Array.isArray(t))return t
+if(Symbol.iterator in Object(t))return e(t,o)
+throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()
+e.pluralizeHelper=n,e.default=t.default.Helper.helper(n)}),define("todomvc/helpers/singularize",["exports","ember-inflector/lib/helpers/singularize"],function(e,t){e.default=t.default}),define("todomvc/initializers/app-version",["exports","ember-cli-app-version/initializer-factory","todomvc/config/environment"],function(e,t,o){var n=o.default.APP,l=n.name,i=n.version
+e.default={name:"App Version",initialize:(0,t.default)(l,i)}}),define("todomvc/initializers/container-debug-adapter",["exports","ember-resolver/container-debug-adapter"],function(e,t){e.default={name:"container-debug-adapter",initialize:function(){var e=arguments[1]||arguments[0]
+e.register("container-debug-adapter:main",t.default),e.inject("container-debug-adapter:main","namespace","application:main")}}}),define("todomvc/initializers/export-application-global",["exports","ember","todomvc/config/environment"],function(e,t,o){function n(){var e=arguments[1]||arguments[0]
+if(!1!==o.default.exportApplicationGlobal){var n
+if("undefined"!=typeof window)n=window
+else if("undefined"!=typeof global)n=global
+else{if("undefined"==typeof self)return
+n=self}var l,i=o.default.exportApplicationGlobal
+l="string"==typeof i?i:t.default.String.classify(o.default.modulePrefix),n[l]||(n[l]=e,e.reopen({willDestroy:function(){this._super.apply(this,arguments),delete n[l]}}))}}e.initialize=n,e.default={name:"export-application-global",initialize:n}}),define("todomvc/resolver",["exports","ember-resolver"],function(e,t){e.default=t.default}),define("todomvc/router",["exports","ember","todomvc/config/environment"],function(e,t,o){var n=t.default.Router.extend({location:o.default.locationType,rootURL:o.default.rootURL})
+n.map(function(){this.route("active"),this.route("completed")}),e.default=n}),define("todomvc/routes/application",["exports","ember"],function(e,t){e.default=t.default.Route.extend({repo:t.default.inject.service(),model:function(){return this.get("repo").findAll()}})}),define("todomvc/services/ajax",["exports","ember-ajax/services/ajax"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("todomvc/services/memory",["exports"],function(e){(function(e){var t={},o={}
+t.length=0,t.getItem=function(e){return o[e]||null},t.setItem=function(e,n){void 0===n?t.removeItem(e):(o.hasOwnProperty(e)||t.length++,o[e]=""+n)},t.removeItem=function(e){o.hasOwnProperty(e)&&(delete o[e],t.length--)},t.key=function(e){return Object.keys(o)[e]||null},t.clear=function(){o={},t.length=0},e.localStorageMemory=t})(window)}),define("todomvc/services/repo",["exports","ember","todomvc/services/memory"],function(e,t,o){e.default=t.default.Service.extend({lastId:0,data:null,findAll:function(){return this.get("data")||this.set("data",JSON.parse(window.localStorageMemory.getItem("todos")||"[]"))},add:function(e){var t=Object.assign({id:this.incrementProperty("lastId")},e)
+return this.get("data").pushObject(t),this.persist(),t},delete:function(e){this.get("data").removeObject(e),this.persist()},persist:function(){window.localStorageMemory.setItem("todos",JSON.stringify(this.get("data")))}})}),define("todomvc/templates/active",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"aAsc4Lt8",block:'{"statements":[[1,[33,["todo-list"],null,[["todos"],[[28,["todos"]]]]],false]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/active.hbs"}})}),define("todomvc/templates/application",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"LO5Br/dD",block:'{"statements":[[11,"section",[]],[15,"id","todoapp"],[15,"class","todoapp"],[13],[0,"\\n  "],[11,"header",[]],[15,"id","header"],[15,"class","header"],[13],[0,"\\n    "],[11,"h1",[]],[13],[0,"todos"],[14],[0,"\\n    "],[11,"input",[]],[15,"type","text"],[15,"id","new-todo"],[15,"class","new-todo"],[16,"onkeydown",[33,["action"],[[28,[null]],"createTodo"],null],null],[15,"placeholder","What needs to be done?"],[15,"autofocus",""],[13],[14],[0,"\\n  "],[14],[0,"\\n    "],[1,[26,["outlet"]],false],[0,"\\n"],[6,["if"],[[33,["gt"],[[28,["model","length"]],0],null]],null,{"statements":[[0,"      "],[11,"footer",[]],[15,"id","footer"],[15,"class","footer"],[13],[0,"\\n        "],[11,"span",[]],[15,"id","todo-count"],[15,"class","todo-count"],[13],[11,"strong",[]],[13],[1,[28,["remaining","length"]],false],[14],[0," "],[1,[33,["pluralize"],["item",[28,["remaining","length"]]],null],false],[0," left"],[14],[0,"\\n        "],[11,"ul",[]],[15,"id","filters"],[15,"class","filters"],[13],[0,"\\n          "],[11,"li",[]],[13],[6,["link-to"],["index"],[["activeClass"],["selected"]],{"statements":[[0,"All"]],"locals":[]},null],[14],[0,"\\n          "],[11,"li",[]],[13],[6,["link-to"],["active"],[["activeClass"],["selected"]],{"statements":[[0,"Active"]],"locals":[]},null],[14],[0,"\\n          "],[11,"li",[]],[13],[6,["link-to"],["completed"],[["activeClass"],["selected"]],{"statements":[[0,"Completed"]],"locals":[]},null],[14],[0,"\\n        "],[14],[0,"\\n"],[6,["if"],[[28,["completed","length"]]],null,{"statements":[[0,"          "],[11,"button",[]],[15,"id","clear-completed"],[15,"class","clear-completed"],[16,"onclick",[33,["action"],[[28,[null]],"clearCompleted"],null],null],[13],[0,"Clear completed"],[14],[0,"\\n"]],"locals":[]},null],[0,"      "],[14],[0,"\\n"]],"locals":[]},null],[14],[0,"\\n"],[11,"footer",[]],[15,"id","info"],[15,"class","info"],[13],[0,"\\n  "],[11,"p",[]],[13],[0,"Double-click to edit a todo"],[14],[0,"\\n  "],[11,"p",[]],[13],[0,"\\n    Created by\\n    "],[11,"a",[]],[15,"href","http://github.com/cibernox"],[13],[0,"Miguel Camba"],[14],[0,",\\n    "],[11,"a",[]],[15,"href","http://github.com/addyosmani"],[13],[0,"Addy Osmani"],[14],[0,"\\n  "],[14],[0,"\\n  "],[11,"p",[]],[13],[0,"Part of "],[11,"a",[]],[15,"href","http://todomvc.com"],[13],[0,"TodoMVC"],[14],[14],[0,"\\n"],[14]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/application.hbs"}})}),define("todomvc/templates/completed",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"F4la9wtb",block:'{"statements":[[1,[33,["todo-list"],null,[["todos"],[[28,["todos"]]]]],false]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/completed.hbs"}})}),define("todomvc/templates/components/todo-item",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"dQ3+cK5E",block:'{"statements":[[11,"div",[]],[15,"class","view"],[13],[0,"\\n  "],[11,"input",[]],[15,"type","checkbox"],[15,"class","toggle"],[16,"checked",[28,["todo","completed"]],null],[16,"onchange",[33,["action"],[[28,[null]],"toggleCompleted"],null],null],[13],[14],[0,"\\n  "],[11,"label",[]],[16,"ondblclick",[33,["action"],[[28,[null]],"startEditing"],null],null],[13],[1,[28,["todo","title"]],false],[14],[0,"\\n  "],[11,"button",[]],[16,"onclick",[33,["action"],[[28,[null]],"removeTodo"],null],null],[15,"class","destroy"],[13],[14],[0,"\\n"],[14],[0,"\\n"],[11,"input",[]],[15,"type","text"],[15,"class","edit"],[16,"value",[28,["todo","title"]],null],[16,"onblur",[33,["action"],[[28,[null]],"doneEditing"],[["value"],["target.value"]]],null],[16,"onkeydown",[33,["action"],[[28,[null]],"handleKeydown"],null],null],[15,"autofocus",""],[13],[14]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/components/todo-item.hbs"}})}),define("todomvc/templates/components/todo-list",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"UPycDhZO",block:'{"statements":[[6,["if"],[[28,["todos","length"]]],null,{"statements":[[6,["if"],[[28,["canToggle"]]],null,{"statements":[[0,"    "],[11,"input",[]],[15,"type","checkbox"],[15,"id","toggle-all"],[15,"class","toggle-all"],[16,"checked",[26,["allCompleted"]],null],[16,"onchange",[33,["action"],[[28,[null]],"toggleAll"],null],null],[13],[14],[0,"\\n"]],"locals":[]},null],[0,"  "],[11,"ul",[]],[15,"id","todo-list"],[15,"class","todo-list"],[13],[0,"\\n"],[6,["each"],[[28,["todos"]]],null,{"statements":[[0,"      "],[1,[33,["todo-item"],null,[["todo","onStartEdit","onEndEdit"],[[28,["todo"]],[33,["action"],[[28,[null]],"disableToggle"],null],[33,["action"],[[28,[null]],"enableToggle"],null]]]],false],[0,"\\n"]],"locals":["todo"]},null],[0,"  "],[14],[0,"\\n"]],"locals":[]},null]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/components/todo-list.hbs"}})}),define("todomvc/templates/index",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"hBadNIpo",block:'{"statements":[[6,["if"],[[28,["model","length"]]],null,{"statements":[[0,"  "],[1,[33,["todo-list"],null,[["todos"],[[28,["model"]]]]],false],[0,"\\n"]],"locals":[]},null]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/index.hbs"}})}),define("todomvc/config/environment",["ember"],function(e){try{var t="todomvc/config/environment",o=document.querySelector('meta[name="'+t+'"]').getAttribute("content"),n=JSON.parse(unescape(o)),l={default:n}
+return Object.defineProperty(l,"__esModule",{value:!0}),l}catch(e){throw new Error('Could not read config from meta tag with name "'+t+'".')}}),runningTests||require("todomvc/app").default.create({name:"todomvc",version:"0.0.0+bc37752f"})
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/assets/vendor-820919567eb7bd4d9fac358a90a5aac4.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/assets/vendor-820919567eb7bd4d9fac358a90a5aac4.js
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/assets/vendor-a45c44bc56b4692cca4a96b6916c0fde.css
@@ -0,0 +1,1 @@
+#issue-count,.hidden{display:none}.edit,.new-todo,body,button{-moz-osx-font-smoothing:grayscale}.footer,.todoapp h1,.toggle-all{text-align:center}hr{margin:20px 0;border:0;border-top:1px dashed #c5c5c5;border-bottom:1px dashed #f7f7f7}.learn a{font-weight:400;text-decoration:none;color:#b83f45}.learn a:hover{text-decoration:underline;color:#787e7e}.learn h3,.learn h4,.learn h5{margin:10px 0;font-weight:500;line-height:1.2;color:#000}.learn h3{font-size:24px}.learn h4{font-size:18px}.learn h5{margin-bottom:0;font-size:14px}.learn ul{padding:0;margin:0 0 30px 25px}.learn li{line-height:20px}.learn p{font-size:15px;font-weight:300;line-height:1.3;margin-top:0;margin-bottom:0}.quote p:after,.quote p:before{font-size:50px;opacity:.15;position:absolute}.quote{border:none;margin:20px 0 60px}.quote p{font-style:italic}.quote p:before{content:'“';top:-20px;left:3px}.quote p:after{content:'”';bottom:-42px;right:3px}.quote footer{position:absolute;bottom:-40px;right:0}.quote footer img{border-radius:3px}.quote footer a{margin-left:5px;vertical-align:middle}.speech-bubble{position:relative;padding:10px;background:rgba(0,0,0,.04);border-radius:5px}.speech-bubble:after{content:'';position:absolute;top:100%;right:30px;border:13px solid transparent;border-top-color:rgba(0,0,0,.04)}.learn-bar>.learn{position:absolute;width:272px;top:8px;left:-300px;padding:10px;border-radius:5px;background-color:rgba(255,255,255,.6);transition-property:left;transition-duration:.5s}@media (min-width:899px){.learn-bar{width:auto;padding-left:300px}.learn-bar>.learn{left:8px}}body,button,html{margin:0;padding:0}button{border:0;background:0 0;font-size:100%;vertical-align:baseline;font-family:inherit;font-weight:inherit;color:inherit;-webkit-appearance:none;appearance:none;-webkit-font-smoothing:antialiased}body{font:14px 'Helvetica Neue',Helvetica,Arial,sans-serif;line-height:1.4em;background:#f5f5f5;color:#4d4d4d;min-width:230px;max-width:550px;margin:0 auto;-webkit-font-smoothing:antialiased;font-weight:300}:focus{outline:0}.todoapp{background:#fff;margin:130px 0 40px;position:relative;box-shadow:0 2px 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1)}.todoapp input::-webkit-input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp input::-moz-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp input::input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp h1{position:absolute;top:-155px;width:100%;font-size:100px;font-weight:100;color:rgba(175,47,47,.15);-webkit-text-rendering:optimizeLegibility;-moz-text-rendering:optimizeLegibility;text-rendering:optimizeLegibility}.edit,.new-todo{position:relative;margin:0;width:100%;font-size:24px;font-family:inherit;font-weight:inherit;line-height:1.4em;color:inherit;padding:6px;border:1px solid #999;box-shadow:inset 0 -1px 5px 0 rgba(0,0,0,.2);box-sizing:border-box;-webkit-font-smoothing:antialiased}.new-todo{padding:16px 16px 16px 60px;border:none;background:rgba(0,0,0,.003);box-shadow:inset 0 -2px 1px rgba(0,0,0,.03)}.main{position:relative;z-index:2;border-top:1px solid #e6e6e6}.toggle-all{border:none;opacity:0;position:absolute}.toggle-all+label{width:60px;height:34px;font-size:0;position:absolute;top:-52px;left:-13px;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.toggle-all+label:before{content:'❯';font-size:22px;color:#e6e6e6;padding:10px 27px}.toggle-all:checked+label:before{color:#737373}.todo-list{margin:0;padding:0;list-style:none}.todo-list li{position:relative;font-size:24px;border-bottom:1px solid #ededed}.todo-list li:last-child{border-bottom:none}.todo-list li.editing{border-bottom:none;padding:0}.todo-list li.editing .edit{display:block;width:506px;padding:12px 16px;margin:0 0 0 43px}.todo-list li.editing .view{display:none}.todo-list li .toggle{text-align:center;width:40px;height:auto;position:absolute;top:0;bottom:0;margin:auto 0;border:none;-webkit-appearance:none;appearance:none;opacity:0}.todo-list li .toggle+label{background-image:url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E);background-repeat:no-repeat;background-position:center left}.todo-list li .toggle:checked+label{background-image:url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E)}.todo-list li label{word-break:break-all;padding:15px 15px 15px 60px;display:block;line-height:1.2;transition:color .4s}.todo-list li.completed label{color:#d9d9d9;text-decoration:line-through}.todo-list li .destroy{display:none;position:absolute;top:0;right:10px;bottom:0;width:40px;height:40px;margin:auto 0 11px;font-size:30px;color:#cc9a9a;transition:color .2s ease-out}.filters,.footer:before{position:absolute;right:0;left:0}.todo-list li .destroy:hover{color:#af5b5e}.todo-list li .destroy:after{content:'×'}.todo-list li:hover .destroy{display:block}.todo-list li .edit{display:none}.todo-list li.editing:last-child{margin-bottom:-1px}.footer{color:#777;padding:10px 15px;height:20px;border-top:1px solid #e6e6e6}.footer:before{content:'';bottom:0;height:50px;overflow:hidden;box-shadow:0 1px 1px rgba(0,0,0,.2),0 8px 0 -3px #f6f6f6,0 9px 1px -3px rgba(0,0,0,.2),0 16px 0 -6px #f6f6f6,0 17px 2px -6px rgba(0,0,0,.2)}.todo-count{float:left;text-align:left}.todo-count strong{font-weight:300}.filters{margin:0;padding:0;list-style:none}.filters li{display:inline}.filters li a{color:inherit;margin:3px;padding:3px 7px;text-decoration:none;border:1px solid transparent;border-radius:3px}.filters li a:hover{border-color:rgba(175,47,47,.1)}.filters li a.selected{border-color:rgba(175,47,47,.2)}.clear-completed,html .clear-completed:active{float:right;position:relative;line-height:20px;text-decoration:none;cursor:pointer}.clear-completed:hover{text-decoration:underline}.info{margin:65px auto 0;color:#bfbfbf;font-size:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);text-align:center}.info p{line-height:1}.info a{color:inherit;text-decoration:none;font-weight:400}.info a:hover{text-decoration:underline}@media screen and (-webkit-min-device-pixel-ratio:0){.todo-list li .toggle,.toggle-all{background:0 0}.todo-list li .toggle{height:40px}}@media (max-width:430px){.footer{height:50px}.filters{bottom:10px}}
\ No newline at end of file
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/public/crossdomain.xml
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/crossdomain.xml
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/index.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Ember.js TodoMVC example</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    
+<meta name="todomvc/config/environment" content="%7B%22modulePrefix%22%3A%22todomvc%22%2C%22environment%22%3A%22production%22%2C%22baseURL%22%3Anull%2C%22locationType%22%3A%22hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%7D%7D%2C%22APP%22%3A%7B%22name%22%3A%22todomvc%22%2C%22version%22%3A%220.0.0+bc37752f%22%7D%2C%22exportApplicationGlobal%22%3Afalse%7D" />
+    <link rel="stylesheet" href="assets/vendor-a45c44bc56b4692cca4a96b6916c0fde.css" integrity="sha256-wri71NgRSS8Ri2MYmuencXvYL+yQDweqc4LX9yrCstw= sha512-Quz1uKZ8tcCIvB9safdsFiWlRSunJyK+8elapH+Mx4qLx2+1CzYOAbjpaQDpmlMttL+Nra1P361yZrIyRhPDDA==" >
+    
+  </head>
+  <body>
+    
+    <script src="assets/vendor-820919567eb7bd4d9fac358a90a5aac4.js" integrity="sha256-BZHBbf1U21+kgPYmoIK7gLkqHu88v5cwEVFfwUPXojs= sha512-2YWrAbR45p8fk3/y4Qhbok/KUfLE/v6yMSUqIWncTmWqfJbyJj0+AiTkJL03k0oPUMZbFYyQx9SuL6XoXp4sgg==" ></script>
+    <script src="assets/todomvc-5d3e8eb3d5b3740a33185edcb11eeb57.js" integrity="sha256-TlR3MSC0+pEW7ypWHo2KbKJ8aGi7ebK3AAyXVdGlGJk= sha512-VrNV9WfIGB3sR8fm1qhLQwIISD4AQbarc5PqrKAddfNg+eNY/NynTA3N/eW0SHWQtOmNxSMOtP+aZlKfLi3r2A==" ></script>
+    
+  </body>
+</html>
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/public/robots.txt
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/dist/robots.txt
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/ember-cli-build.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/ember-cli-build.js
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>Ember.js TodoMVC example</title>
-    <meta name="description" content="">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <meta name="todomvc/config/environment" content="%7B%22modulePrefix%22%3A%22todomvc%22%2C%22environment%22%3A%22development%22%2C%22baseURL%22%3Anull%2C%22locationType%22%3A%22hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%7D%7D%2C%22APP%22%3A%7B%22name%22%3A%22todomvc%22%2C%22version%22%3A%220.0.0+32a851f1%22%7D%2C%22exportApplicationGlobal%22%3Atrue%7D" />
-    <link rel="stylesheet" href="assets/vendor.css">
-    <link rel="stylesheet" href="assets/todomvc.css">
-  </head>
-  <body>
-    <script src="assets/vendor.js"></script>
-    <script src="assets/todomvc.js"></script>
-  </body>
-</html>
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/package-lock.json
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/package-lock.json
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/package.json
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/package.json
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/crossdomain.xml
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/public/crossdomain.xml
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/robots.txt
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/public/robots.txt
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Speedometer 2.0: Ember.js TodoMVC example
-
-## Test locally
-
-1. `npm install && bower install`
-2. `npm run build`
-3. Run a local server from the `dist` directory. (You could use [`npm i -g http-server`](https://github.com/indexzero/http-server).)
-4. Open the URL pointing to the local server in your web browser of choice.
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/app/index.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>Ember.js TodoMVC example</title>
-    <meta name="description" content="">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    {{content-for "head"}}
-    <link rel="stylesheet" href="{{rootURL}}assets/vendor.css">
-    <link rel="stylesheet" href="{{rootURL}}assets/todomvc.css">
-    {{content-for "head-footer"}}
-  </head>
-  <body>
-    {{content-for "body"}}
-    <script src="{{rootURL}}assets/vendor.js"></script>
-    <script src="{{rootURL}}assets/todomvc.js"></script>
-    {{content-for "body-footer"}}
-  </body>
-</html>
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/assets/todomvc-7601ffca6150ed633f0f333fe76bfaf2.js
+++ /dev/null
@@ -1,30 +0,0 @@
-"use strict"
-define("todomvc/app",["exports","ember","todomvc/resolver","ember-load-initializers","todomvc/config/environment"],function(e,t,o,n,l){var i=void 0
-t.default.MODEL_FACTORY_INJECTIONS=!0,i=t.default.Application.extend({modulePrefix:l.default.modulePrefix,podModulePrefix:l.default.podModulePrefix,Resolver:o.default}),(0,n.default)(i,l.default.modulePrefix),e.default=i}),define("todomvc/components/todo-item",["exports","ember"],function(e,t){e.default=t.default.Component.extend({repo:t.default.inject.service(),tagName:"li",editing:!1,classNameBindings:["todo.completed","editing"],actions:{startEditing:function(){this.get("onStartEdit")(),this.set("editing",!0),t.default.run.scheduleOnce("afterRender",this,"focusInput")},doneEditing:function(e){this.get("editing")&&(t.default.isBlank(e)?this.send("removeTodo"):(this.set("todo.title",e.trim()),this.set("editing",!1),this.get("onEndEdit")()))},handleKeydown:function(e){13===e.keyCode?e.target.blur():27===e.keyCode&&this.set("editing",!1)},toggleCompleted:function(e){var o=this.get("todo")
-t.default.set(o,"completed",e.target.checked),this.get("repo").persist()},removeTodo:function(){this.get("repo").delete(this.get("todo"))}},focusInput:function(){this.element.querySelector("input.edit").focus()}})}),define("todomvc/components/todo-list",["exports","ember"],function(e,t){e.default=t.default.Component.extend({repo:t.default.inject.service(),tagName:"section",elementId:"main",canToggle:!0,allCompleted:t.default.computed("todos.@each.completed",function(){return this.get("todos").isEvery("completed")}),actions:{enableToggle:function(){this.set("canToggle",!0)},disableToggle:function(){this.set("canToggle",!1)},toggleAll:function(){var e=this.get("allCompleted")
-this.get("todos").forEach(function(o){return t.default.set(o,"completed",!e)}),this.get("repo").persist()}}})}),define("todomvc/controllers/active",["exports","ember"],function(e,t){e.default=t.default.Controller.extend({todos:t.default.computed.filterBy("model","completed",!1)})}),define("todomvc/controllers/application",["exports","ember"],function(e,t){e.default=t.default.Controller.extend({repo:t.default.inject.service(),remaining:t.default.computed.filterBy("model","completed",!1),completed:t.default.computed.filterBy("model","completed"),actions:{createTodo:function(e){13!==e.keyCode||t.default.isBlank(e.target.value)||(this.get("repo").add({title:e.target.value.trim(),completed:!1}),e.target.value="")},clearCompleted:function(){this.get("model").removeObjects(this.get("completed")),this.get("repo").persist()}}})}),define("todomvc/controllers/completed",["exports","ember"],function(e,t){e.default=t.default.Controller.extend({todos:t.default.computed.filterBy("model","completed",!0)})}),define("todomvc/helpers/app-version",["exports","ember","todomvc/config/environment","ember-cli-app-version/utils/regexp"],function(e,t,o,n){function l(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1]
-return t.hideSha?i.match(n.versionRegExp)[0]:t.hideVersion?i.match(n.shaRegExp)[0]:i}e.appVersion=l
-var i=o.default.APP.version
-e.default=t.default.Helper.helper(l)}),define("todomvc/helpers/gt",["exports","ember"],function(e,t){function o(e){var t=n(e,2)
-return t[0]>t[1]}var n=function(){function e(e,t){var o=[],n=!0,l=!1,i=void 0
-try{for(var a,d=e[Symbol.iterator]();!(n=(a=d.next()).done)&&(o.push(a.value),!t||o.length!==t);n=!0);}catch(e){l=!0,i=e}finally{try{!n&&d.return&&d.return()}finally{if(l)throw i}}return o}return function(t,o){if(Array.isArray(t))return t
-if(Symbol.iterator in Object(t))return e(t,o)
-throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()
-e.gt=o,e.default=t.default.Helper.helper(o)}),define("todomvc/helpers/pluralize",["exports","ember","ember-inflector"],function(e,t,o){function n(e){var t=l(e,2),n=t[0]
-return 1===t[1]?n:(0,o.pluralize)(n)}var l=function(){function e(e,t){var o=[],n=!0,l=!1,i=void 0
-try{for(var a,d=e[Symbol.iterator]();!(n=(a=d.next()).done)&&(o.push(a.value),!t||o.length!==t);n=!0);}catch(e){l=!0,i=e}finally{try{!n&&d.return&&d.return()}finally{if(l)throw i}}return o}return function(t,o){if(Array.isArray(t))return t
-if(Symbol.iterator in Object(t))return e(t,o)
-throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()
-e.pluralizeHelper=n,e.default=t.default.Helper.helper(n)}),define("todomvc/helpers/singularize",["exports","ember-inflector/lib/helpers/singularize"],function(e,t){e.default=t.default}),define("todomvc/initializers/app-version",["exports","ember-cli-app-version/initializer-factory","todomvc/config/environment"],function(e,t,o){var n=o.default.APP,l=n.name,i=n.version
-e.default={name:"App Version",initialize:(0,t.default)(l,i)}}),define("todomvc/initializers/container-debug-adapter",["exports","ember-resolver/container-debug-adapter"],function(e,t){e.default={name:"container-debug-adapter",initialize:function(){var e=arguments[1]||arguments[0]
-e.register("container-debug-adapter:main",t.default),e.inject("container-debug-adapter:main","namespace","application:main")}}}),define("todomvc/initializers/export-application-global",["exports","ember","todomvc/config/environment"],function(e,t,o){function n(){var e=arguments[1]||arguments[0]
-if(!1!==o.default.exportApplicationGlobal){var n
-if("undefined"!=typeof window)n=window
-else if("undefined"!=typeof global)n=global
-else{if("undefined"==typeof self)return
-n=self}var l,i=o.default.exportApplicationGlobal
-l="string"==typeof i?i:t.default.String.classify(o.default.modulePrefix),n[l]||(n[l]=e,e.reopen({willDestroy:function(){this._super.apply(this,arguments),delete n[l]}}))}}e.initialize=n,e.default={name:"export-application-global",initialize:n}}),define("todomvc/resolver",["exports","ember-resolver"],function(e,t){e.default=t.default}),define("todomvc/router",["exports","ember","todomvc/config/environment"],function(e,t,o){var n=t.default.Router.extend({location:o.default.locationType,rootURL:o.default.rootURL})
-n.map(function(){this.route("active"),this.route("completed")}),e.default=n}),define("todomvc/routes/application",["exports","ember"],function(e,t){e.default=t.default.Route.extend({repo:t.default.inject.service(),model:function(){return this.get("repo").findAll()}})}),define("todomvc/services/ajax",["exports","ember-ajax/services/ajax"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("todomvc/services/memory",["exports"],function(e){(function(e){var t={},o={}
-t.length=0,t.getItem=function(e){return o[e]||null},t.setItem=function(e,n){void 0===n?t.removeItem(e):(o.hasOwnProperty(e)||t.length++,o[e]=""+n)},t.removeItem=function(e){o.hasOwnProperty(e)&&(delete o[e],t.length--)},t.key=function(e){return Object.keys(o)[e]||null},t.clear=function(){o={},t.length=0},e.localStorageMemory=t})(window)}),define("todomvc/services/repo",["exports","ember","todomvc/services/memory"],function(e,t,o){e.default=t.default.Service.extend({lastId:0,data:null,findAll:function(){return this.get("data")||this.set("data",JSON.parse(window.localStorageMemory.getItem("todos")||"[]"))},add:function(e){var t=Object.assign({id:this.incrementProperty("lastId")},e)
-return this.get("data").pushObject(t),this.persist(),t},delete:function(e){this.get("data").removeObject(e),this.persist()},persist:function(){window.localStorageMemory.setItem("todos",JSON.stringify(this.get("data")))}})}),define("todomvc/templates/active",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"aAsc4Lt8",block:'{"statements":[[1,[33,["todo-list"],null,[["todos"],[[28,["todos"]]]]],false]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/active.hbs"}})}),define("todomvc/templates/application",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"BYnyz5ON",block:'{"statements":[[11,"section",[]],[15,"id","todoapp"],[13],[0,"\\n  "],[11,"header",[]],[15,"id","header"],[13],[0,"\\n    "],[11,"h1",[]],[13],[0,"todos"],[14],[0,"\\n    "],[11,"input",[]],[15,"type","text"],[15,"id","new-todo"],[16,"onkeydown",[33,["action"],[[28,[null]],"createTodo"],null],null],[15,"placeholder","What needs to be done?"],[15,"autofocus",""],[13],[14],[0,"\\n  "],[14],[0,"\\n    "],[1,[26,["outlet"]],false],[0,"\\n"],[6,["if"],[[33,["gt"],[[28,["model","length"]],0],null]],null,{"statements":[[0,"      "],[11,"footer",[]],[15,"id","footer"],[13],[0,"\\n        "],[11,"span",[]],[15,"id","todo-count"],[13],[11,"strong",[]],[13],[1,[28,["remaining","length"]],false],[14],[0," "],[1,[33,["pluralize"],["item",[28,["remaining","length"]]],null],false],[0," left"],[14],[0,"\\n        "],[11,"ul",[]],[15,"id","filters"],[13],[0,"\\n          "],[11,"li",[]],[13],[6,["link-to"],["index"],[["activeClass"],["selected"]],{"statements":[[0,"All"]],"locals":[]},null],[14],[0,"\\n          "],[11,"li",[]],[13],[6,["link-to"],["active"],[["activeClass"],["selected"]],{"statements":[[0,"Active"]],"locals":[]},null],[14],[0,"\\n          "],[11,"li",[]],[13],[6,["link-to"],["completed"],[["activeClass"],["selected"]],{"statements":[[0,"Completed"]],"locals":[]},null],[14],[0,"\\n        "],[14],[0,"\\n"],[6,["if"],[[28,["completed","length"]]],null,{"statements":[[0,"          "],[11,"button",[]],[15,"id","clear-completed"],[16,"onclick",[33,["action"],[[28,[null]],"clearCompleted"],null],null],[13],[0,"Clear completed"],[14],[0,"\\n"]],"locals":[]},null],[0,"      "],[14],[0,"\\n"]],"locals":[]},null],[14],[0,"\\n"],[11,"footer",[]],[15,"id","info"],[13],[0,"\\n  "],[11,"p",[]],[13],[0,"Double-click to edit a todo"],[14],[0,"\\n  "],[11,"p",[]],[13],[0,"\\n    Created by\\n    "],[11,"a",[]],[15,"href","http://github.com/cibernox"],[13],[0,"Miguel Camba"],[14],[0,",\\n    "],[11,"a",[]],[15,"href","http://github.com/addyosmani"],[13],[0,"Addy Osmani"],[14],[0,"\\n  "],[14],[0,"\\n  "],[11,"p",[]],[13],[0,"Part of "],[11,"a",[]],[15,"href","http://todomvc.com"],[13],[0,"TodoMVC"],[14],[14],[0,"\\n"],[14]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/application.hbs"}})}),define("todomvc/templates/completed",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"F4la9wtb",block:'{"statements":[[1,[33,["todo-list"],null,[["todos"],[[28,["todos"]]]]],false]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/completed.hbs"}})}),define("todomvc/templates/components/todo-item",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"dQ3+cK5E",block:'{"statements":[[11,"div",[]],[15,"class","view"],[13],[0,"\\n  "],[11,"input",[]],[15,"type","checkbox"],[15,"class","toggle"],[16,"checked",[28,["todo","completed"]],null],[16,"onchange",[33,["action"],[[28,[null]],"toggleCompleted"],null],null],[13],[14],[0,"\\n  "],[11,"label",[]],[16,"ondblclick",[33,["action"],[[28,[null]],"startEditing"],null],null],[13],[1,[28,["todo","title"]],false],[14],[0,"\\n  "],[11,"button",[]],[16,"onclick",[33,["action"],[[28,[null]],"removeTodo"],null],null],[15,"class","destroy"],[13],[14],[0,"\\n"],[14],[0,"\\n"],[11,"input",[]],[15,"type","text"],[15,"class","edit"],[16,"value",[28,["todo","title"]],null],[16,"onblur",[33,["action"],[[28,[null]],"doneEditing"],[["value"],["target.value"]]],null],[16,"onkeydown",[33,["action"],[[28,[null]],"handleKeydown"],null],null],[15,"autofocus",""],[13],[14]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/components/todo-item.hbs"}})}),define("todomvc/templates/components/todo-list",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"XGmWWD63",block:'{"statements":[[6,["if"],[[28,["todos","length"]]],null,{"statements":[[6,["if"],[[28,["canToggle"]]],null,{"statements":[[0,"    "],[11,"input",[]],[15,"type","checkbox"],[15,"id","toggle-all"],[16,"checked",[26,["allCompleted"]],null],[16,"onchange",[33,["action"],[[28,[null]],"toggleAll"],null],null],[13],[14],[0,"\\n"]],"locals":[]},null],[0,"  "],[11,"ul",[]],[15,"id","todo-list"],[15,"class","todo-list"],[13],[0,"\\n"],[6,["each"],[[28,["todos"]]],null,{"statements":[[0,"      "],[1,[33,["todo-item"],null,[["todo","onStartEdit","onEndEdit"],[[28,["todo"]],[33,["action"],[[28,[null]],"disableToggle"],null],[33,["action"],[[28,[null]],"enableToggle"],null]]]],false],[0,"\\n"]],"locals":["todo"]},null],[0,"  "],[14],[0,"\\n"]],"locals":[]},null]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/components/todo-list.hbs"}})}),define("todomvc/templates/index",["exports"],function(e){e.default=Ember.HTMLBars.template({id:"hBadNIpo",block:'{"statements":[[6,["if"],[[28,["model","length"]]],null,{"statements":[[0,"  "],[1,[33,["todo-list"],null,[["todos"],[[28,["model"]]]]],false],[0,"\\n"]],"locals":[]},null]],"locals":[],"named":[],"yields":[],"hasPartials":false}',meta:{moduleName:"todomvc/templates/index.hbs"}})}),define("todomvc/config/environment",["ember"],function(e){try{var t="todomvc/config/environment",o=document.querySelector('meta[name="'+t+'"]').getAttribute("content"),n=JSON.parse(unescape(o)),l={default:n}
-return Object.defineProperty(l,"__esModule",{value:!0}),l}catch(e){throw new Error('Could not read config from meta tag with name "'+t+'".')}}),runningTests||require("todomvc/app").default.create({name:"todomvc",version:"0.0.0+164d27e2"})
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/assets/vendor-7b5c98520910afa58d74e05ec86cd873.css
+++ /dev/null
@@ -1,1 +0,0 @@
-#issue-count,.hidden,label[for=toggle-all]{display:none}#footer,#info,#todoapp h1,#toggle-all{text-align:center}hr{margin:20px 0;border:0;border-top:1px dashed #c5c5c5;border-bottom:1px dashed #f7f7f7}.learn a{font-weight:400;text-decoration:none;color:#b83f45}.learn a:hover{text-decoration:underline;color:#787e7e}.learn h3,.learn h4,.learn h5{margin:10px 0;font-weight:500;line-height:1.2;color:#000}.learn h3{font-size:24px}.learn h4{font-size:18px}.learn h5{margin-bottom:0;font-size:14px}.learn ul{padding:0;margin:0 0 30px 25px}.learn li{line-height:20px}.learn p{font-size:15px;font-weight:300;line-height:1.3;margin-top:0;margin-bottom:0}.quote p:after,.quote p:before{font-size:50px;opacity:.15;position:absolute}.quote{border:none;margin:20px 0 60px}.quote p{font-style:italic}.quote p:before{content:'“';top:-20px;left:3px}.quote p:after{content:'”';bottom:-42px;right:3px}.quote footer{position:absolute;bottom:-40px;right:0}.quote footer img{border-radius:3px}.quote footer a{margin-left:5px;vertical-align:middle}.speech-bubble{position:relative;padding:10px;background:rgba(0,0,0,.04);border-radius:5px}.speech-bubble:after{content:'';position:absolute;top:100%;right:30px;border:13px solid transparent;border-top-color:rgba(0,0,0,.04)}.learn-bar>.learn{position:absolute;width:272px;top:8px;left:-300px;padding:10px;border-radius:5px;background-color:rgba(255,255,255,.6);transition-property:left;transition-duration:.5s}#main,#new-todo,#todo-list li,#todoapp,.edit{position:relative}@media (min-width:899px){.learn-bar{width:auto;padding-left:300px}.learn-bar>.learn{left:8px}}body,button,html{padding:0;margin:0}button{border:0;background:0 0;font-size:100%;vertical-align:baseline;font-family:inherit;font-weight:inherit;color:inherit;-webkit-appearance:none;appearance:none;-webkit-font-smoothing:antialiased;-moz-font-smoothing:antialiased;font-smoothing:antialiased}body{font:14px 'Helvetica Neue',Helvetica,Arial,sans-serif;line-height:1.4em;background:#f5f5f5;color:#4d4d4d;min-width:230px;max-width:550px;margin:0 auto;-webkit-font-smoothing:antialiased;-moz-font-smoothing:antialiased;font-smoothing:antialiased;font-weight:300}button,input[type=checkbox]{outline:0}#todoapp{background:#fff;margin:130px 0 40px;box-shadow:0 2px 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1)}#todoapp input::-webkit-input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}#todoapp input::-moz-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}#todoapp input::input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}#todoapp h1{position:absolute;top:-155px;width:100%;font-size:100px;font-weight:100;color:rgba(175,47,47,.15);-webkit-text-rendering:optimizeLegibility;-moz-text-rendering:optimizeLegibility;text-rendering:optimizeLegibility}#new-todo,.edit{margin:0;width:100%;font-size:24px;font-family:inherit;font-weight:inherit;line-height:1.4em;outline:0;color:inherit;padding:6px;border:1px solid #999;box-shadow:inset 0 -1px 5px 0 rgba(0,0,0,.2);box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-font-smoothing:antialiased;font-smoothing:antialiased}#new-todo{padding:16px 16px 16px 60px;border:none;background:rgba(0,0,0,.003);box-shadow:inset 0 -2px 1px rgba(0,0,0,.03)}#main{z-index:2;border-top:1px solid #e6e6e6}#toggle-all{position:absolute;top:-55px;left:-12px;width:60px;height:34px;border:none}#toggle-all:before{content:'❯';font-size:22px;color:#e6e6e6;padding:10px 27px}#toggle-all:checked:before{color:#737373}#todo-list{margin:0;padding:0;list-style:none}#todo-list li{font-size:24px;border-bottom:1px solid #ededed}#todo-list li:last-child{border-bottom:none}#todo-list li.editing{border-bottom:none;padding:0}#todo-list li.editing .edit{display:block;width:506px;padding:13px 17px 12px;margin:0 0 0 43px}#todo-list li.editing .view{display:none}#todo-list li .toggle{text-align:center;width:40px;height:auto;position:absolute;top:0;bottom:0;margin:auto 0;border:none;-webkit-appearance:none;appearance:none}#todo-list li .toggle:after{content:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>')}#todo-list li .toggle:checked:after{content:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>')}#todo-list li label{white-space:pre;word-break:break-word;padding:15px 60px 15px 15px;margin-left:45px;display:block;line-height:1.2;transition:color .4s}#todo-list li.completed label{color:#d9d9d9;text-decoration:line-through}#todo-list li .destroy{display:none;position:absolute;top:0;right:10px;bottom:0;width:40px;height:40px;margin:auto 0 11px;font-size:30px;color:#cc9a9a;transition:color .2s ease-out}#filters,#footer:before{position:absolute;right:0;left:0}#todo-list li .destroy:hover{color:#af5b5e}#filters li a,#info a{color:inherit;text-decoration:none}#todo-list li .destroy:after{content:'×'}#todo-list li:hover .destroy{display:block}#todo-list li .edit{display:none}#todo-list li.editing:last-child{margin-bottom:-1px}#footer{color:#777;padding:10px 15px;height:20px;border-top:1px solid #e6e6e6}#footer:before{content:'';bottom:0;height:50px;overflow:hidden;box-shadow:0 1px 1px rgba(0,0,0,.2),0 8px 0 -3px #f6f6f6,0 9px 1px -3px rgba(0,0,0,.2),0 16px 0 -6px #f6f6f6,0 17px 2px -6px rgba(0,0,0,.2)}#todo-count{float:left;text-align:left}#todo-count strong{font-weight:300}#filters{margin:0;padding:0;list-style:none}#filters li{display:inline}#filters li a{margin:3px;padding:3px 7px;border:1px solid transparent;border-radius:3px}#filters li a.selected,#filters li a:hover{border-color:rgba(175,47,47,.1)}#filters li a.selected{border-color:rgba(175,47,47,.2)}#clear-completed,html #clear-completed:active{float:right;line-height:20px;text-decoration:none;cursor:pointer;position:relative}#clear-completed:hover,#info a:hover{text-decoration:underline}#info{margin:65px auto 0;color:#bfbfbf;font-size:10px;text-shadow:0 1px 0 rgba(255,255,255,.5)}#info p{line-height:1}#info a{font-weight:400}@media screen and (-webkit-min-device-pixel-ratio:0){#todo-list li .toggle,#toggle-all{background:0 0}#todo-list li .toggle{height:40px}#toggle-all{-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-appearance:none;appearance:none}}@media (max-width:430px){#footer{height:50px}#filters{bottom:10px}}
\ No newline at end of file
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/index.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>Ember.js TodoMVC example</title>
-    <meta name="description" content="">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    
-<meta name="todomvc/config/environment" content="%7B%22modulePrefix%22%3A%22todomvc%22%2C%22environment%22%3A%22production%22%2C%22baseURL%22%3Anull%2C%22locationType%22%3A%22hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%7D%7D%2C%22APP%22%3A%7B%22name%22%3A%22todomvc%22%2C%22version%22%3A%220.0.0+164d27e2%22%7D%2C%22exportApplicationGlobal%22%3Afalse%7D" />
-    <link rel="stylesheet" href="assets/vendor-7b5c98520910afa58d74e05ec86cd873.css" integrity="sha256-bsagGHduhay9QPLUFpddcZFq7Kmr2ScM3VKnWhdX8oM= sha512-eNsGN2aLecWPvoqNVH8oXK8o/IJ7rO5ti0zgS8lF8LiwmKUHdEIuFduwcDL1VLAt2r+3YjgDzoSNYK6c57pJzw==" >
-    <link rel="stylesheet" href="assets/todomvc-d41d8cd98f00b204e9800998ecf8427e.css" integrity="sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==" >
-    
-  </head>
-  <body>
-    
-    <script src="assets/vendor-820919567eb7bd4d9fac358a90a5aac4.js" integrity="sha256-BZHBbf1U21+kgPYmoIK7gLkqHu88v5cwEVFfwUPXojs= sha512-2YWrAbR45p8fk3/y4Qhbok/KUfLE/v6yMSUqIWncTmWqfJbyJj0+AiTkJL03k0oPUMZbFYyQx9SuL6XoXp4sgg==" ></script>
-    <script src="assets/todomvc-7601ffca6150ed633f0f333fe76bfaf2.js" integrity="sha256-J9SBPSVPiTlDzBrAevEqRvNz3E++u7jNErZ79EDgR3g= sha512-8QtnoWm6aXdKWOIsnuqQwaU575TkOmagUJS66bIqqZzwM8aUduM6DHlrbTsopZ9M5ok9NLqhKsafEXHWQP0cXg==" ></script>
-    
-  </body>
-</html>
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/index.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>Todomvc Tests</title>
-    <meta name="description" content="">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-
-    {{content-for "head"}}
-    {{content-for "test-head"}}
-
-    <link rel="stylesheet" href="{{rootURL}}assets/vendor.css">
-    <link rel="stylesheet" href="{{rootURL}}assets/todomvc.css">
-    <link rel="stylesheet" href="{{rootURL}}assets/test-support.css">
-
-    {{content-for "head-footer"}}
-    {{content-for "test-head-footer"}}
-  </head>
-  <body>
-    {{content-for "body"}}
-    {{content-for "test-body"}}
-
-    <script src="/testem.js" integrity=""></script>
-    <script src="{{rootURL}}assets/vendor.js"></script>
-    <script src="{{rootURL}}assets/test-support.js"></script>
-    <script src="{{rootURL}}assets/todomvc.js"></script>
-    <script src="{{rootURL}}assets/tests.js"></script>
-
-    {{content-for "body-footer"}}
-    {{content-for "test-body-footer"}}
-  </body>
-</html>
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/testem.js
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/testem.js
@@ -1,19 +1,13 @@
-/**
- * This is dummy file that exists for the sole purpose
- * of allowing tests to run directly in the browser as
- * well as by Testem.
- *
- * Testem is configured to run tests directly against
- * the test build of index.html, which requires a
- * snippet to load the testem.js file:
- *   <script src="/testem.js"></script>
- * This has to go before the qunit framework and app
- * tests are loaded.
- *
- * Testem internally supplies this file. However, if you
- * run the tests directly in the browser (localhost:8000/tests),
- * this file does not exist.
- *
- * Hence the purpose of this fake file. This file is served
- * directly from the express server to satisify the script load.
- */
+/*jshint node:true*/
+module.exports = {
+    framework: 'qunit',
+    test_page: 'tests/index.html?hidepassed',
+    disable_watching: true,
+    launch_in_ci: [
+        'PhantomJS'
+    ],
+    launch_in_dev: [
+        'PhantomJS',
+        'Chrome'
+    ]
+};
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/destroy-app.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/helpers/destroy-app.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/module-for-acceptance.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/helpers/module-for-acceptance.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/resolver.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/helpers/resolver.js
rename from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/helpers/start-app.js
rename to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/helpers/start-app.js
--- a/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/index.html
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/index.html
@@ -2,40 +2,32 @@
 <html>
   <head>
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <title>Todomvc Tests</title>
     <meta name="description" content="">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <base href="/" />
-<meta name="todomvc/config/environment" content="%7B%22modulePrefix%22%3A%22todomvc%22%2C%22environment%22%3A%22test%22%2C%22baseURL%22%3A%22/%22%2C%22locationType%22%3A%22none%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%7D%2C%22APP%22%3A%7B%22LOG_ACTIVE_GENERATION%22%3Afalse%2C%22LOG_VIEW_LOOKUPS%22%3Afalse%2C%22rootElement%22%3A%22%23ember-testing%22%2C%22name%22%3A%22todomvc%22%2C%22version%22%3A%220.0.0+%22%7D%2C%22exportApplicationGlobal%22%3Atrue%7D" />
-    
+    {{content-for "head"}}
+    {{content-for "test-head"}}
 
-    <link rel="stylesheet" href="assets/vendor.css">
-    <link rel="stylesheet" href="assets/todomvc.css">
-    <link rel="stylesheet" href="assets/test-support.css">
+    <link rel="stylesheet" href="{{rootURL}}assets/vendor.css">
+    <link rel="stylesheet" href="{{rootURL}}assets/todomvc.css">
+    <link rel="stylesheet" href="{{rootURL}}assets/test-support.css">
 
-    
-    
+    {{content-for "head-footer"}}
+    {{content-for "test-head-footer"}}
   </head>
   <body>
-    
-    <div id="qunit"></div>
-<div id="qunit-fixture"></div>
-
-<div id="ember-testing-container">
-  <div id="ember-testing"></div>
-</div>
-
+    {{content-for "body"}}
+    {{content-for "test-body"}}
 
-    <script src="testem.js" integrity=""></script>
-    <script src="assets/vendor.js"></script>
-    <script src="assets/test-support.js"></script>
-    <script src="assets/todomvc.js"></script>
-    <script src="assets/tests.js"></script>
-    <script src="assets/test-loader.js"></script>
+    <script src="/testem.js" integrity=""></script>
+    <script src="{{rootURL}}assets/vendor.js"></script>
+    <script src="{{rootURL}}assets/test-support.js"></script>
+    <script src="{{rootURL}}assets/todomvc.js"></script>
+    <script src="{{rootURL}}assets/tests.js"></script>
 
-    
-    <script>Ember.assert('The tests file was not loaded. Make sure your tests index.html includes "assets/tests.js".', EmberENV.TESTS_FILE_LOADED);</script>
+    {{content-for "body-footer"}}
+    {{content-for "test-body-footer"}}
   </body>
 </html>
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/tests/test-helper.js
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/tests/test-helper.js
copy from third_party/speedometer/resources/todomvc/architecture-examples/emberjs/source/vendor/base.css
copy to third_party/speedometer/resources/todomvc/architecture-examples/emberjs/vendor/base.css
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/emberjs/vendor/index.css
@@ -0,0 +1,376 @@
+html,
+body {
+    margin: 0;
+    padding: 0;
+}
+
+button {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    background: none;
+    font-size: 100%;
+    vertical-align: baseline;
+    font-family: inherit;
+    font-weight: inherit;
+    color: inherit;
+    -webkit-appearance: none;
+    appearance: none;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+body {
+    font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
+    line-height: 1.4em;
+    background: #f5f5f5;
+    color: #4d4d4d;
+    min-width: 230px;
+    max-width: 550px;
+    margin: 0 auto;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    font-weight: 300;
+}
+
+:focus {
+    outline: 0;
+}
+
+.hidden {
+    display: none;
+}
+
+.todoapp {
+    background: #fff;
+    margin: 130px 0 40px 0;
+    position: relative;
+    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),
+                0 25px 50px 0 rgba(0, 0, 0, 0.1);
+}
+
+.todoapp input::-webkit-input-placeholder {
+    font-style: italic;
+    font-weight: 300;
+    color: #e6e6e6;
+}
+
+.todoapp input::-moz-placeholder {
+    font-style: italic;
+    font-weight: 300;
+    color: #e6e6e6;
+}
+
+.todoapp input::input-placeholder {
+    font-style: italic;
+    font-weight: 300;
+    color: #e6e6e6;
+}
+
+.todoapp h1 {
+    position: absolute;
+    top: -155px;
+    width: 100%;
+    font-size: 100px;
+    font-weight: 100;
+    text-align: center;
+    color: rgba(175, 47, 47, 0.15);
+    -webkit-text-rendering: optimizeLegibility;
+    -moz-text-rendering: optimizeLegibility;
+    text-rendering: optimizeLegibility;
+}
+
+.new-todo,
+.edit {
+    position: relative;
+    margin: 0;
+    width: 100%;
+    font-size: 24px;
+    font-family: inherit;
+    font-weight: inherit;
+    line-height: 1.4em;
+    border: 0;
+    color: inherit;
+    padding: 6px;
+    border: 1px solid #999;
+    box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
+    box-sizing: border-box;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+.new-todo {
+    padding: 16px 16px 16px 60px;
+    border: none;
+    background: rgba(0, 0, 0, 0.003);
+    box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);
+}
+
+.main {
+    position: relative;
+    z-index: 2;
+    border-top: 1px solid #e6e6e6;
+}
+
+.toggle-all {
+    text-align: center;
+    border: none; /* Mobile Safari */
+    opacity: 0;
+    position: absolute;
+}
+
+.toggle-all + label {
+    width: 60px;
+    height: 34px;
+    font-size: 0;
+    position: absolute;
+    top: -52px;
+    left: -13px;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+}
+
+.toggle-all + label:before {
+    content: '❯';
+    font-size: 22px;
+    color: #e6e6e6;
+    padding: 10px 27px 10px 27px;
+}
+
+.toggle-all:checked + label:before {
+    color: #737373;
+}
+
+.todo-list {
+    margin: 0;
+    padding: 0;
+    list-style: none;
+}
+
+.todo-list li {
+    position: relative;
+    font-size: 24px;
+    border-bottom: 1px solid #ededed;
+}
+
+.todo-list li:last-child {
+    border-bottom: none;
+}
+
+.todo-list li.editing {
+    border-bottom: none;
+    padding: 0;
+}
+
+.todo-list li.editing .edit {
+    display: block;
+    width: 506px;
+    padding: 12px 16px;
+    margin: 0 0 0 43px;
+}
+
+.todo-list li.editing .view {
+    display: none;
+}
+
+.todo-list li .toggle {
+    text-align: center;
+    width: 40px;
+    /* auto, since non-WebKit browsers doesn't support input styling */
+    height: auto;
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    margin: auto 0;
+    border: none; /* Mobile Safari */
+    -webkit-appearance: none;
+    appearance: none;
+}
+
+.todo-list li .toggle {
+    opacity: 0;
+}
+
+.todo-list li .toggle + label {
+    /*
+        Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+        IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+    */
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
+    background-repeat: no-repeat;
+    background-position: center left;
+}
+
+.todo-list li .toggle:checked + label {
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
+}
+
+.todo-list li label {
+    word-break: break-all;
+    padding: 15px 15px 15px 60px;
+    display: block;
+    line-height: 1.2;
+    transition: color 0.4s;
+}
+
+.todo-list li.completed label {
+    color: #d9d9d9;
+    text-decoration: line-through;
+}
+
+.todo-list li .destroy {
+    display: none;
+    position: absolute;
+    top: 0;
+    right: 10px;
+    bottom: 0;
+    width: 40px;
+    height: 40px;
+    margin: auto 0;
+    font-size: 30px;
+    color: #cc9a9a;
+    margin-bottom: 11px;
+    transition: color 0.2s ease-out;
+}
+
+.todo-list li .destroy:hover {
+    color: #af5b5e;
+}
+
+.todo-list li .destroy:after {
+    content: '×';
+}
+
+.todo-list li:hover .destroy {
+    display: block;
+}
+
+.todo-list li .edit {
+    display: none;
+}
+
+.todo-list li.editing:last-child {
+    margin-bottom: -1px;
+}
+
+.footer {
+    color: #777;
+    padding: 10px 15px;
+    height: 20px;
+    text-align: center;
+    border-top: 1px solid #e6e6e6;
+}
+
+.footer:before {
+    content: '';
+    position: absolute;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    height: 50px;
+    overflow: hidden;
+    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),
+                0 8px 0 -3px #f6f6f6,
+                0 9px 1px -3px rgba(0, 0, 0, 0.2),
+                0 16px 0 -6px #f6f6f6,
+                0 17px 2px -6px rgba(0, 0, 0, 0.2);
+}
+
+.todo-count {
+    float: left;
+    text-align: left;
+}
+
+.todo-count strong {
+    font-weight: 300;
+}
+
+.filters {
+    margin: 0;
+    padding: 0;
+    list-style: none;
+    position: absolute;
+    right: 0;
+    left: 0;
+}
+
+.filters li {
+    display: inline;
+}
+
+.filters li a {
+    color: inherit;
+    margin: 3px;
+    padding: 3px 7px;
+    text-decoration: none;
+    border: 1px solid transparent;
+    border-radius: 3px;
+}
+
+.filters li a:hover {
+    border-color: rgba(175, 47, 47, 0.1);
+}
+
+.filters li a.selected {
+    border-color: rgba(175, 47, 47, 0.2);
+}
+
+.clear-completed,
+html .clear-completed:active {
+    float: right;
+    position: relative;
+    line-height: 20px;
+    text-decoration: none;
+    cursor: pointer;
+}
+
+.clear-completed:hover {
+    text-decoration: underline;
+}
+
+.info {
+    margin: 65px auto 0;
+    color: #bfbfbf;
+    font-size: 10px;
+    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+    text-align: center;
+}
+
+.info p {
+    line-height: 1;
+}
+
+.info a {
+    color: inherit;
+    text-decoration: none;
+    font-weight: 400;
+}
+
+.info a:hover {
+    text-decoration: underline;
+}
+
+/*
+    Hack to remove background from Mobile Safari.
+    Can't use it globally since it destroys checkboxes in Firefox
+*/
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+    .toggle-all,
+    .todo-list li .toggle {
+        background: none;
+    }
+
+    .todo-list li .toggle {
+        height: 40px;
+    }
+}
+
+@media (max-width: 430px) {
+    .footer {
+        height: 50px;
+    }
+
+    .filters {
+        bottom: 10px;
+    }
+}
--- a/third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-app-css/index.css
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-app-css/index.css
@@ -107,38 +107,42 @@ body {
 }
 
 .main {
     position: relative;
     z-index: 2;
     border-top: 1px solid #e6e6e6;
 }
 
-label[for='toggle-all'] {
-    display: none;
+.toggle-all {
+    text-align: center;
+    border: none; /* Mobile Safari */
+    opacity: 0;
+    position: absolute;
 }
 
-.toggle-all {
-    position: absolute;
-    top: -55px;
-    left: -12px;
+.toggle-all + label {
     width: 60px;
     height: 34px;
-    text-align: center;
-    border: none; /* Mobile Safari */
+    font-size: 0;
+    position: absolute;
+    top: -52px;
+    left: -13px;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
 }
 
-.toggle-all:before {
+.toggle-all + label:before {
     content: '❯';
     font-size: 22px;
     color: #e6e6e6;
     padding: 10px 27px 10px 27px;
 }
 
-.toggle-all:checked:before {
+.toggle-all:checked + label:before {
     color: #737373;
 }
 
 .todo-list {
     margin: 0;
     padding: 0;
     list-style: none;
 }
@@ -178,28 +182,37 @@ label[for='toggle-all'] {
     top: 0;
     bottom: 0;
     margin: auto 0;
     border: none; /* Mobile Safari */
     -webkit-appearance: none;
     appearance: none;
 }
 
-.todo-list li .toggle:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>');
+.todo-list li .toggle {
+    opacity: 0;
 }
 
-.todo-list li .toggle:checked:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>');
+.todo-list li .toggle + label {
+    /*
+        Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+        IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+    */
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
+    background-repeat: no-repeat;
+    background-position: center left;
+}
+
+.todo-list li .toggle:checked + label {
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
 }
 
 .todo-list li label {
     word-break: break-all;
-    padding: 15px 60px 15px 15px;
-    margin-left: 45px;
+    padding: 15px 15px 15px 60px;
     display: block;
     line-height: 1.2;
     transition: color 0.4s;
 }
 
 .todo-list li.completed label {
     color: #d9d9d9;
     text-decoration: line-through;
@@ -345,23 +358,16 @@ html .clear-completed:active {
     .toggle-all,
     .todo-list li .toggle {
         background: none;
     }
 
     .todo-list li .toggle {
         height: 40px;
     }
-
-    .toggle-all {
-        -webkit-transform: rotate(90deg);
-        transform: rotate(90deg);
-        -webkit-appearance: none;
-        appearance: none;
-    }
 }
 
 @media (max-width: 430px) {
     .footer {
         height: 50px;
     }
 
     .filters {
--- a/third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-app-css/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-app-css/package.json
@@ -1,26 +1,59 @@
 {
-  "name": "todomvc-app-css",
-  "style": "index.css",
-  "version": "2.0.6",
-  "description": "CSS for TodoMVC apps",
-  "license": "CC-BY-4.0",
-  "repository": "tastejs/todomvc-app-css",
+  "_from": "todomvc-app-css@^2.1.0",
+  "_id": "todomvc-app-css@2.1.0",
+  "_inBundle": false,
+  "_integrity": "sha1-tvJxbTOa+i5feZNH0qSLBTliQqU=",
+  "_location": "/todomvc-app-css",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "todomvc-app-css@^2.1.0",
+    "name": "todomvc-app-css",
+    "escapedName": "todomvc-app-css",
+    "rawSpec": "^2.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.1.0"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-2.1.0.tgz",
+  "_shasum": "b6f2716d339afa2e5f799347d2a48b05396242a5",
+  "_spec": "todomvc-app-css@^2.1.0",
+  "_where": "/Users/mathiasb/projects/WebKit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/inferno",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
     "url": "sindresorhus.com"
   },
+  "bugs": {
+    "url": "https://github.com/tastejs/todomvc-app-css/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "CSS for TodoMVC apps",
   "files": [
     "index.css"
   ],
+  "homepage": "https://github.com/tastejs/todomvc-app-css#readme",
   "keywords": [
     "todomvc",
     "tastejs",
     "app",
     "todo",
     "template",
     "css",
     "style",
     "stylesheet"
-  ]
+  ],
+  "license": "CC-BY-4.0",
+  "name": "todomvc-app-css",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/tastejs/todomvc-app-css.git"
+  },
+  "style": "index.css",
+  "version": "2.1.0"
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-common/base.js
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-common/base.js
@@ -16,17 +16,17 @@
                     for (var key in iterable) {
                         if (object[key] == null) {
                             object[key] = iterable[key];
                         }
                     }
                 }
             }
             return object;
-        }
+        };
 
         // By default, Underscore uses ERB-style template delimiters, change the
         // following template settings to use alternative delimiters.
         _.templateSettings = {
             evaluate    : /<%([\s\S]+?)%>/g,
             interpolate : /<%=([\s\S]+?)%>/g,
             escape      : /<%-([\s\S]+?)%>/g
         };
--- a/third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-common/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/inferno/node_modules/todomvc-common/package.json
@@ -1,20 +1,55 @@
 {
-  "name": "todomvc-common",
-  "version": "1.0.3",
+  "_from": "todomvc-common@^1.0.4",
+  "_id": "todomvc-common@1.0.4",
+  "_inBundle": false,
+  "_integrity": "sha512-AA0Z4exovEqubhbZCrzzn9roVT4zvOncS319p2zIc4CsNe5B9TLL7Sei1NIV6d+WrgR5rOi+y0I9Y6GE7xgNOw==",
+  "_location": "/todomvc-common",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "todomvc-common@^1.0.4",
+    "name": "todomvc-common",
+    "escapedName": "todomvc-common",
+    "rawSpec": "^1.0.4",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.4"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.4.tgz",
+  "_shasum": "23099af886c2f0525bfd4537e078f12d0074309e",
+  "_spec": "todomvc-common@^1.0.4",
+  "_where": "/Users/mathiasb/projects/WebKit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/inferno",
+  "author": {
+    "name": "TasteJS"
+  },
+  "bugs": {
+    "url": "https://github.com/tastejs/todomvc-common/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
   "description": "Common TodoMVC utilities used by our apps",
-  "license": "MIT",
-  "repository": "tastejs/todomvc-common",
-  "author": "TasteJS",
-  "main": "base.js",
-  "style": "base.css",
   "files": [
     "base.js",
     "base.css"
   ],
+  "homepage": "https://github.com/tastejs/todomvc-common#readme",
   "keywords": [
     "todomvc",
     "tastejs",
     "util",
     "utilities"
-  ]
+  ],
+  "license": "MIT",
+  "main": "base.js",
+  "name": "todomvc-common",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/tastejs/todomvc-common.git"
+  },
+  "style": "base.css",
+  "version": "1.0.4"
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/inferno/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/inferno/package.json
@@ -3,18 +3,18 @@
   "scripts": {
     "dev": "webpack-dev-server",
     "build": "webpack -p",
     "test": "cd test && npm test"
   },
   "dependencies": {
     "inferno": "beta32",
     "inferno-component": "beta32",
-    "todomvc-app-css": "^2.0.0",
-    "todomvc-common": "^1.0.0"
+    "todomvc-app-css": "^2.1.0",
+    "todomvc-common": "^1.0.4"
   },
   "devDependencies": {
     "babel-core": "^6.5.2",
     "babel-loader": "^6.2.1",
     "babel-plugin-inferno": "beta13",
     "babel-preset-es2015": "^6.5.0",
     "babel-preset-es2015-loose": "^7.0.0",
     "babel-preset-stage-0": "^6.5.0",
--- a/third_party/speedometer/resources/todomvc/architecture-examples/jquery/index.html
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/jquery/index.html
@@ -3,29 +3,29 @@
     <head>
         <meta charset="utf-8">
         <title>jQuery • TodoMVC</title>
         <link rel="stylesheet" href="node_modules/todomvc-common/base.css">
         <link rel="stylesheet" href="node_modules/todomvc-app-css/index.css">
         <link rel="stylesheet" href="css/app.css">
     </head>
     <body>
-        <section id="todoapp">
-            <header id="header">
+        <section id="todoapp" class="todoapp">
+            <header id="header" class="header">
                 <h1>todos</h1>
-                <input id="new-todo" placeholder="What needs to be done?" autofocus>
+                <input id="new-todo" class="new-todo" placeholder="What needs to be done?" autofocus>
             </header>
-            <section id="main">
-                <input id="toggle-all" type="checkbox">
+            <section id="main" class="main">
+                <input id="toggle-all" class="toggle-all" type="checkbox">
                 <label for="toggle-all">Mark all as complete</label>
-                <ul id="todo-list"></ul>
+                <ul id="todo-list" class="todo-list"></ul>
             </section>
-            <footer id="footer"></footer>
+            <footer id="footer" class="footer"></footer>
         </section>
-        <footer id="info">
+        <footer id="info" class="info">
             <p>Double-click to edit a todo</p>
             <p>Created by <a href="http://sindresorhus.com">Sindre Sorhus</a></p>
             <p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
         </footer>
         <script id="todo-template" type="text/x-handlebars-template">
             {{#this}}
             <li {{#if completed}}class="completed"{{/if}} data-id="{{id}}">
                 <div class="view">
@@ -33,18 +33,18 @@
                     <label>{{title}}</label>
                     <button class="destroy"></button>
                 </div>
                 <input class="edit" value="{{title}}">
             </li>
         {{/this}}
         </script>
         <script id="footer-template" type="text/x-handlebars-template">
-            <span id="todo-count"><strong>{{activeTodoCount}}</strong> {{activeTodoWord}} left</span>
-            <ul id="filters">
+            <span id="todo-count" class="todo-count"><strong>{{activeTodoCount}}</strong> {{activeTodoWord}} left</span>
+            <ul id="filters" class="filters">
                 <li>
                     <a {{#eq filter 'all'}}class="selected"{{/eq}} href="#/all">All</a>
                 </li>
                 <li>
                     <a {{#eq filter 'active'}}class="selected"{{/eq}}href="#/active">Active</a>
                 </li>
                 <li>
                     <a {{#eq filter 'completed'}}class="selected"{{/eq}}href="#/completed">Completed</a>
--- a/third_party/speedometer/resources/todomvc/architecture-examples/jquery/js/app.js
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/jquery/js/app.js
@@ -41,16 +41,20 @@ jQuery(function ($) {
             this.bindEvents();
 
             new Router({
                 '/:filter': function (filter) {
                     this.filter = filter;
                     this.render();
                 }.bind(this)
             }).init('/all');
+
+            var dummyNodeToNotifyAppIsReady = document.createElement('div');
+            dummyNodeToNotifyAppIsReady.id = 'appIsReady';
+            document.body.appendChild(dummyNodeToNotifyAppIsReady);
         },
         bindEvents: function () {
             $('#new-todo').on('keyup', this.create.bind(this));
             $('#toggle-all').on('change', this.toggleAll.bind(this));
             $('#footer').on('click', '#clear-completed', this.destroyCompleted.bind(this));
             $('#todo-list')
                 .on('change', '.toggle', this.toggle.bind(this))
                 .on('dblclick', 'label', this.edit.bind(this))
--- a/third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-app-css/index.css
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-app-css/index.css
@@ -12,367 +12,365 @@ button {
     font-size: 100%;
     vertical-align: baseline;
     font-family: inherit;
     font-weight: inherit;
     color: inherit;
     -webkit-appearance: none;
     appearance: none;
     -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
 }
 
 body {
     font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
     line-height: 1.4em;
     background: #f5f5f5;
     color: #4d4d4d;
     min-width: 230px;
     max-width: 550px;
     margin: 0 auto;
     -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
     font-weight: 300;
 }
 
-button,
-input[type="checkbox"] {
-    outline: none;
+:focus {
+    outline: 0;
 }
 
 .hidden {
     display: none;
 }
 
-#todoapp {
+.todoapp {
     background: #fff;
     margin: 130px 0 40px 0;
     position: relative;
     box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),
                 0 25px 50px 0 rgba(0, 0, 0, 0.1);
 }
 
-#todoapp input::-webkit-input-placeholder {
+.todoapp input::-webkit-input-placeholder {
     font-style: italic;
     font-weight: 300;
     color: #e6e6e6;
 }
 
-#todoapp input::-moz-placeholder {
+.todoapp input::-moz-placeholder {
     font-style: italic;
     font-weight: 300;
     color: #e6e6e6;
 }
 
-#todoapp input::input-placeholder {
+.todoapp input::input-placeholder {
     font-style: italic;
     font-weight: 300;
     color: #e6e6e6;
 }
 
-#todoapp h1 {
+.todoapp h1 {
     position: absolute;
     top: -155px;
     width: 100%;
     font-size: 100px;
     font-weight: 100;
     text-align: center;
     color: rgba(175, 47, 47, 0.15);
     -webkit-text-rendering: optimizeLegibility;
     -moz-text-rendering: optimizeLegibility;
     text-rendering: optimizeLegibility;
 }
 
-#new-todo,
+.new-todo,
 .edit {
     position: relative;
     margin: 0;
     width: 100%;
     font-size: 24px;
     font-family: inherit;
     font-weight: inherit;
     line-height: 1.4em;
     border: 0;
-    outline: none;
     color: inherit;
     padding: 6px;
     border: 1px solid #999;
     box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
     box-sizing: border-box;
     -webkit-font-smoothing: antialiased;
-    -moz-font-smoothing: antialiased;
-    font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
 }
 
-#new-todo {
+.new-todo {
     padding: 16px 16px 16px 60px;
     border: none;
     background: rgba(0, 0, 0, 0.003);
     box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);
 }
 
-#main {
+.main {
     position: relative;
     z-index: 2;
     border-top: 1px solid #e6e6e6;
 }
 
-label[for='toggle-all'] {
-    display: none;
+.toggle-all {
+    text-align: center;
+    border: none; /* Mobile Safari */
+    opacity: 0;
+    position: absolute;
 }
 
-#toggle-all {
-    position: absolute;
-    top: -55px;
-    left: -12px;
+.toggle-all + label {
     width: 60px;
     height: 34px;
-    text-align: center;
-    border: none; /* Mobile Safari */
+    font-size: 0;
+    position: absolute;
+    top: -52px;
+    left: -13px;
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
 }
 
-#toggle-all:before {
+.toggle-all + label:before {
     content: '❯';
     font-size: 22px;
     color: #e6e6e6;
     padding: 10px 27px 10px 27px;
 }
 
-#toggle-all:checked:before {
+.toggle-all:checked + label:before {
     color: #737373;
 }
 
-#todo-list {
+.todo-list {
     margin: 0;
     padding: 0;
     list-style: none;
 }
 
-#todo-list li {
+.todo-list li {
     position: relative;
     font-size: 24px;
     border-bottom: 1px solid #ededed;
 }
 
-#todo-list li:last-child {
+.todo-list li:last-child {
     border-bottom: none;
 }
 
-#todo-list li.editing {
+.todo-list li.editing {
     border-bottom: none;
     padding: 0;
 }
 
-#todo-list li.editing .edit {
+.todo-list li.editing .edit {
     display: block;
     width: 506px;
-    padding: 13px 17px 12px 17px;
+    padding: 12px 16px;
     margin: 0 0 0 43px;
 }
 
-#todo-list li.editing .view {
+.todo-list li.editing .view {
     display: none;
 }
 
-#todo-list li .toggle {
+.todo-list li .toggle {
     text-align: center;
     width: 40px;
     /* auto, since non-WebKit browsers doesn't support input styling */
     height: auto;
     position: absolute;
     top: 0;
     bottom: 0;
     margin: auto 0;
     border: none; /* Mobile Safari */
     -webkit-appearance: none;
     appearance: none;
 }
 
-#todo-list li .toggle:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#ededed" stroke-width="3"/></svg>');
+.todo-list li .toggle {
+    opacity: 0;
 }
 
-#todo-list li .toggle:checked:after {
-    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="-10 -18 100 135"><circle cx="50" cy="50" r="50" fill="none" stroke="#bddad5" stroke-width="3"/><path fill="#5dc2af" d="M72 25L42 71 27 56l-4 4 20 20 34-52z"/></svg>');
+.todo-list li .toggle + label {
+    /*
+        Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+        IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+    */
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
+    background-repeat: no-repeat;
+    background-position: center left;
 }
 
-#todo-list li label {
-    white-space: pre;
-    word-break: break-word;
-    padding: 15px 60px 15px 15px;
-    margin-left: 45px;
+.todo-list li .toggle:checked + label {
+    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
+}
+
+.todo-list li label {
+    word-break: break-all;
+    padding: 15px 15px 15px 60px;
     display: block;
     line-height: 1.2;
     transition: color 0.4s;
 }
 
-#todo-list li.completed label {
+.todo-list li.completed label {
     color: #d9d9d9;
     text-decoration: line-through;
 }
 
-#todo-list li .destroy {
+.todo-list li .destroy {
     display: none;
     position: absolute;
     top: 0;
     right: 10px;
     bottom: 0;
     width: 40px;
     height: 40px;
     margin: auto 0;
     font-size: 30px;
     color: #cc9a9a;
     margin-bottom: 11px;
     transition: color 0.2s ease-out;
 }
 
-#todo-list li .destroy:hover {
+.todo-list li .destroy:hover {
     color: #af5b5e;
 }
 
-#todo-list li .destroy:after {
+.todo-list li .destroy:after {
     content: '×';
 }
 
-#todo-list li:hover .destroy {
+.todo-list li:hover .destroy {
     display: block;
 }
 
-#todo-list li .edit {
+.todo-list li .edit {
     display: none;
 }
 
-#todo-list li.editing:last-child {
+.todo-list li.editing:last-child {
     margin-bottom: -1px;
 }
 
-#footer {
+.footer {
     color: #777;
     padding: 10px 15px;
     height: 20px;
     text-align: center;
     border-top: 1px solid #e6e6e6;
 }
 
-#footer:before {
+.footer:before {
     content: '';
     position: absolute;
     right: 0;
     bottom: 0;
     left: 0;
     height: 50px;
     overflow: hidden;
     box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),
                 0 8px 0 -3px #f6f6f6,
                 0 9px 1px -3px rgba(0, 0, 0, 0.2),
                 0 16px 0 -6px #f6f6f6,
                 0 17px 2px -6px rgba(0, 0, 0, 0.2);
 }
 
-#todo-count {
+.todo-count {
     float: left;
     text-align: left;
 }
 
-#todo-count strong {
+.todo-count strong {
     font-weight: 300;
 }
 
-#filters {
+.filters {
     margin: 0;
     padding: 0;
     list-style: none;
     position: absolute;
     right: 0;
     left: 0;
 }
 
-#filters li {
+.filters li {
     display: inline;
 }
 
-#filters li a {
+.filters li a {
     color: inherit;
     margin: 3px;
     padding: 3px 7px;
     text-decoration: none;
     border: 1px solid transparent;
     border-radius: 3px;
 }
 
-#filters li a.selected,
-#filters li a:hover {
+.filters li a:hover {
     border-color: rgba(175, 47, 47, 0.1);
 }
 
-#filters li a.selected {
+.filters li a.selected {
     border-color: rgba(175, 47, 47, 0.2);
 }
 
-#clear-completed,
-html #clear-completed:active {
+.clear-completed,
+html .clear-completed:active {
     float: right;
     position: relative;
     line-height: 20px;
     text-decoration: none;
     cursor: pointer;
-    position: relative;
 }
 
-#clear-completed:hover {
+.clear-completed:hover {
     text-decoration: underline;
 }
 
-#info {
+.info {
     margin: 65px auto 0;
     color: #bfbfbf;
     font-size: 10px;
     text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
     text-align: center;
 }
 
-#info p {
+.info p {
     line-height: 1;
 }
 
-#info a {
+.info a {
     color: inherit;
     text-decoration: none;
     font-weight: 400;
 }
 
-#info a:hover {
+.info a:hover {
     text-decoration: underline;
 }
 
 /*
     Hack to remove background from Mobile Safari.
     Can't use it globally since it destroys checkboxes in Firefox
 */
 @media screen and (-webkit-min-device-pixel-ratio:0) {
-    #toggle-all,
-    #todo-list li .toggle {
+    .toggle-all,
+    .todo-list li .toggle {
         background: none;
     }
 
-    #todo-list li .toggle {
+    .todo-list li .toggle {
         height: 40px;
     }
-
-    #toggle-all {
-        -webkit-transform: rotate(90deg);
-        transform: rotate(90deg);
-        -webkit-appearance: none;
-        appearance: none;
-    }
 }
 
 @media (max-width: 430px) {
-    #footer {
+    .footer {
         height: 50px;
     }
 
-    #filters {
+    .filters {
         bottom: 10px;
     }
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-app-css/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-app-css/package.json
@@ -1,103 +1,58 @@
 {
-  "_args": [
-    [
-      {
-        "raw": "todomvc-app-css@~1.0.1",
-        "scope": null,
-        "escapedName": "todomvc-app-css",
-        "name": "todomvc-app-css",
-        "rawSpec": "~1.0.1",
-        "spec": ">=1.0.1 <1.1.0",
-        "type": "range"
-      },
-      "/Users/addyo/projects/speedometer/resources/todomvc/architecture-examples/jquery"
-    ]
-  ],
-  "_from": "todomvc-app-css@>=1.0.1 <1.1.0",
-  "_id": "todomvc-app-css@1.0.4",
-  "_inCache": true,
+  "_from": "todomvc-app-css@^2.1.0",
+  "_id": "todomvc-app-css@2.1.0",
+  "_inBundle": false,
+  "_integrity": "sha1-tvJxbTOa+i5feZNH0qSLBTliQqU=",
   "_location": "/todomvc-app-css",
-  "_nodeVersion": "0.12.0",
-  "_npmUser": {
-    "name": "sindresorhus",
-    "email": "sindresorhus@gmail.com"
-  },
-  "_npmVersion": "2.5.1",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "todomvc-app-css@~1.0.1",
-    "scope": null,
-    "escapedName": "todomvc-app-css",
+    "type": "range",
+    "registry": true,
+    "raw": "todomvc-app-css@^2.1.0",
     "name": "todomvc-app-css",
-    "rawSpec": "~1.0.1",
-    "spec": ">=1.0.1 <1.1.0",
-    "type": "range"
+    "escapedName": "todomvc-app-css",
+    "rawSpec": "^2.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.1.0"
   },
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-1.0.4.tgz",
-  "_shasum": "d2529279a6da5befb06b55c0c324c5fcfd94d656",
-  "_shrinkwrap": null,
-  "_spec": "todomvc-app-css@~1.0.1",
-  "_where": "/Users/addyo/projects/speedometer/resources/todomvc/architecture-examples/jquery",
+  "_resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-2.1.0.tgz",
+  "_shasum": "b6f2716d339afa2e5f799347d2a48b05396242a5",
+  "_spec": "todomvc-app-css@^2.1.0",
+  "_where": "/Users/mathiasb/projects/WebKit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/jquery",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
     "url": "sindresorhus.com"
   },
   "bugs": {
     "url": "https://github.com/tastejs/todomvc-app-css/issues"
   },
-  "dependencies": {},
+  "bundleDependencies": false,
+  "deprecated": false,
   "description": "CSS for TodoMVC apps",
-  "devDependencies": {},
-  "directories": {},
-  "dist": {
-    "shasum": "d2529279a6da5befb06b55c0c324c5fcfd94d656",
-    "tarball": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-1.0.4.tgz"
-  },
   "files": [
     "index.css"
   ],
-  "gitHead": "1e4e38884a35193eaf1808a5ba44421832867184",
-  "homepage": "https://github.com/tastejs/todomvc-app-css",
+  "homepage": "https://github.com/tastejs/todomvc-app-css#readme",
   "keywords": [
     "todomvc",
     "tastejs",
     "app",
     "todo",
     "template",
     "css",
     "style",
     "stylesheet"
   ],
   "license": "CC-BY-4.0",
-  "maintainers": [
-    {
-      "name": "sindresorhus",
-      "email": "sindresorhus@gmail.com"
-    },
-    {
-      "name": "addyosmani",
-      "email": "addyosmani@gmail.com"
-    },
-    {
-      "name": "passy",
-      "email": "phartig@rdrei.net"
-    },
-    {
-      "name": "stephenplusplus",
-      "email": "sawchuk@gmail.com"
-    }
-  ],
   "name": "todomvc-app-css",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/tastejs/todomvc-app-css.git"
   },
-  "scripts": {},
-  "version": "1.0.4"
+  "style": "index.css",
+  "version": "2.1.0"
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-common/base.js
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-common/base.js
@@ -16,17 +16,17 @@
                     for (var key in iterable) {
                         if (object[key] == null) {
                             object[key] = iterable[key];
                         }
                     }
                 }
             }
             return object;
-        }
+        };
 
         // By default, Underscore uses ERB-style template delimiters, change the
         // following template settings to use alternative delimiters.
         _.templateSettings = {
             evaluate    : /<%([\s\S]+?)%>/g,
             interpolate : /<%=([\s\S]+?)%>/g,
             escape      : /<%-([\s\S]+?)%>/g
         };
--- a/third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-common/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/jquery/node_modules/todomvc-common/package.json
@@ -1,104 +1,54 @@
 {
-  "_args": [
-    [
-      {
-        "raw": "todomvc-common@~1.0.1",
-        "scope": null,
-        "escapedName": "todomvc-common",
-        "name": "todomvc-common",
-        "rawSpec": "~1.0.1",
-        "spec": ">=1.0.1 <1.1.0",
-        "type": "range"
-      },
-      "/Users/addyo/projects/speedometer/resources/todomvc/architecture-examples/jquery"
-    ]
-  ],
-  "_from": "todomvc-common@>=1.0.1 <1.1.0",
-  "_id": "todomvc-common@1.0.3",
-  "_inCache": true,
+  "_from": "todomvc-common@^1.0.4",
+  "_id": "todomvc-common@1.0.4",
+  "_inBundle": false,
+  "_integrity": "sha512-AA0Z4exovEqubhbZCrzzn9roVT4zvOncS319p2zIc4CsNe5B9TLL7Sei1NIV6d+WrgR5rOi+y0I9Y6GE7xgNOw==",
   "_location": "/todomvc-common",
-  "_nodeVersion": "7.1.0",
-  "_npmOperationalInternal": {
-    "host": "packages-18-east.internal.npmjs.com",
-    "tmp": "tmp/todomvc-common-1.0.3.tgz_1479276361227_0.51124880136922"
-  },
-  "_npmUser": {
-    "name": "sindresorhus",
-    "email": "sindresorhus@gmail.com"
-  },
-  "_npmVersion": "3.10.9",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "todomvc-common@~1.0.1",
-    "scope": null,
-    "escapedName": "todomvc-common",
+    "type": "range",
+    "registry": true,
+    "raw": "todomvc-common@^1.0.4",
     "name": "todomvc-common",
-    "rawSpec": "~1.0.1",
-    "spec": ">=1.0.1 <1.1.0",
-    "type": "range"
+    "escapedName": "todomvc-common",
+    "rawSpec": "^1.0.4",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.4"
   },
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.3.tgz",
-  "_shasum": "cba1868109caa401b908ebf77794cc1014b74873",
-  "_shrinkwrap": null,
-  "_spec": "todomvc-common@~1.0.1",
-  "_where": "/Users/addyo/projects/speedometer/resources/todomvc/architecture-examples/jquery",
+  "_resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.4.tgz",
+  "_shasum": "23099af886c2f0525bfd4537e078f12d0074309e",
+  "_spec": "todomvc-common@^1.0.4",
+  "_where": "/Users/mathiasb/projects/WebKit/PerformanceTests/Speedometer/resources/todomvc/architecture-examples/jquery",
   "author": {
     "name": "TasteJS"
   },
   "bugs": {
     "url": "https://github.com/tastejs/todomvc-common/issues"
   },
-  "dependencies": {},
+  "bundleDependencies": false,
+  "deprecated": false,
   "description": "Common TodoMVC utilities used by our apps",
-  "devDependencies": {},
-  "directories": {},
-  "dist": {
-    "shasum": "cba1868109caa401b908ebf77794cc1014b74873",
-    "tarball": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.3.tgz"
-  },
   "files": [
     "base.js",
     "base.css"
   ],
-  "gitHead": "e7425bafb9561d766b769844810e0496734ffe8c",
   "homepage": "https://github.com/tastejs/todomvc-common#readme",
   "keywords": [
     "todomvc",
     "tastejs",
     "util",
     "utilities"
   ],
   "license": "MIT",
   "main": "base.js",
-  "maintainers": [
-    {
-      "name": "sindresorhus",
-      "email": "sindresorhus@gmail.com"
-    },
-    {
-      "name": "addyosmani",
-      "email": "addyosmani@gmail.com"
-    },
-    {
-      "name": "passy",
-      "email": "phartig@rdrei.net"
-    },
-    {
-      "name": "stephenplusplus",
-      "email": "sawchuk@gmail.com"
-    }
-  ],
   "name": "todomvc-common",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/tastejs/todomvc-common.git"
   },
-  "scripts": {},
   "style": "base.css",
-  "version": "1.0.3"
+  "version": "1.0.4"
 }
--- a/third_party/speedometer/resources/todomvc/architecture-examples/jquery/package.json
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/jquery/package.json
@@ -1,10 +1,10 @@
 {
   "private": true,
   "dependencies": {
     "director": "~1.2.2",
     "handlebars": "^4.0.6",
     "jquery": "^3.1.1",
-    "todomvc-app-css": "~1.0.1",
-    "todomvc-common": "~1.0.1"
+    "todomvc-app-css": "^2.1.0",
+    "todomvc-common": "^1.0.4"
   }
 }
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/asset-manifest.json
@@ -0,0 +1,6 @@
+{
+  "main.css": "static/css/main.21111742.css",
+  "main.css.map": "static/css/main.21111742.css.map",
+  "main.js": "static/js/main.18b409e1.js",
+  "main.js.map": "static/js/main.18b409e1.js.map"
+}
\ No newline at end of file
--- a/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/index.html
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/index.html
@@ -1,1 +1,1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>React Redux TodoMVC example</title><link href="./static/css/main.f04a7319.css" rel="stylesheet"></head><body><div class="todoapp" id="root"></div><script type="text/javascript" src="./static/js/main.69cd9655.js"></script></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>React Redux TodoMVC example</title><link href="./static/css/main.21111742.css" rel="stylesheet"></head><body><div class="todoapp" id="root"></div><script type="text/javascript" src="./static/js/main.18b409e1.js"></script></body></html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/service-worker.js
@@ -0,0 +1,1 @@
+"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}var precacheConfig=[["./index.html","70e95a3f3a1d1cbd333b8544580c4130"],["./static/css/main.21111742.css","fec2811be103da4460c67500f37bb3fb"],["./static/js/main.18b409e1.js","bc76e5d850c48a3ae24784e335ef0b0e"]],cacheName="sw-precache-v3-sw-precache-webpack-plugin-"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,r){var a=new URL(e);return r&&a.pathname.match(r)||(a.search+=(a.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),a.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.hash="",n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],r=new URL(t,self.location),a=createCacheKey(r,hashParamName,n,/\.\w{8}\./);return[r.toString(),a]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var r=new Request(n,{credentials:"same-origin"});return fetch(r).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);(t=urlsToCacheKeys.has(n))||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));!t&&"navigate"===e.request.mode&&isPathWhitelisted(["^(?!\\/__).*"],e.request.url)&&(n=new URL("./index.html",self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}});
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/css/main.21111742.css
@@ -0,0 +1,2 @@
+body,button,html{margin:0;padding:0}button{border:0;background:none;font-size:100%;vertical-align:baseline;font-family:inherit;font-weight:inherit;color:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-font-smoothing:antialiased}body,button{-moz-osx-font-smoothing:grayscale}body{font:14px Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.4em;background:#f5f5f5;color:#4d4d4d;min-width:230px;max-width:550px;margin:0 auto;-webkit-font-smoothing:antialiased;font-weight:300}:focus{outline:0}.hidden{display:none}.todoapp{background:#fff;margin:130px 0 40px;position:relative;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1)}.todoapp input::-webkit-input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp input::-moz-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp input::input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp h1{position:absolute;top:-155px;width:100%;font-size:100px;font-weight:100;text-align:center;color:rgba(175,47,47,.15);-webkit-text-rendering:optimizeLegibility;-moz-text-rendering:optimizeLegibility;text-rendering:optimizeLegibility}.edit,.new-todo{position:relative;margin:0;width:100%;font-size:24px;font-family:inherit;font-weight:inherit;line-height:1.4em;border:0;color:inherit;padding:6px;border:1px solid #999;-webkit-box-shadow:inset 0 -1px 5px 0 rgba(0,0,0,.2);box-shadow:inset 0 -1px 5px 0 rgba(0,0,0,.2);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.new-todo{padding:16px 16px 16px 60px;border:none;background:rgba(0,0,0,.003);-webkit-box-shadow:inset 0 -2px 1px rgba(0,0,0,.03);box-shadow:inset 0 -2px 1px rgba(0,0,0,.03)}.main{position:relative;z-index:2;border-top:1px solid #e6e6e6}.toggle-all{text-align:center;border:none;opacity:0;position:absolute}.toggle-all+label{width:60px;height:34px;font-size:0;position:absolute;top:-52px;left:-13px;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.toggle-all+label:before{content:"\276F";font-size:22px;color:#e6e6e6;padding:10px 27px}.toggle-all:checked+label:before{color:#737373}.todo-list{margin:0;padding:0;list-style:none}.todo-list li{position:relative;font-size:24px;border-bottom:1px solid #ededed}.todo-list li:last-child{border-bottom:none}.todo-list li.editing{border-bottom:none;padding:0}.todo-list li.editing .edit{display:block;width:506px;padding:12px 16px;margin:0 0 0 43px}.todo-list li.editing .view{display:none}.todo-list li .toggle{text-align:center;width:40px;height:auto;position:absolute;top:0;bottom:0;margin:auto 0;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0}.todo-list li .toggle+label{background-image:url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:0}.todo-list li .toggle:checked+label{background-image:url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E")}.todo-list li label{word-break:break-all;padding:15px 15px 15px 60px;display:block;line-height:1.2;-webkit-transition:color .4s;-o-transition:color .4s;transition:color .4s}.todo-list li.completed label{color:#d9d9d9;text-decoration:line-through}.todo-list li .destroy{display:none;position:absolute;top:0;right:10px;bottom:0;width:40px;height:40px;margin:auto 0;font-size:30px;color:#cc9a9a;margin-bottom:11px;-webkit-transition:color .2s ease-out;-o-transition:color .2s ease-out;transition:color .2s ease-out}.todo-list li .destroy:hover{color:#af5b5e}.todo-list li .destroy:after{content:"\D7"}.todo-list li:hover .destroy{display:block}.todo-list li .edit{display:none}.todo-list li.editing:last-child{margin-bottom:-1px}.footer{color:#777;padding:10px 15px;height:20px;text-align:center;border-top:1px solid #e6e6e6}.footer:before{content:"";position:absolute;right:0;bottom:0;left:0;height:50px;overflow:hidden;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.2),0 8px 0 -3px #f6f6f6,0 9px 1px -3px rgba(0,0,0,.2),0 16px 0 -6px #f6f6f6,0 17px 2px -6px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2),0 8px 0 -3px #f6f6f6,0 9px 1px -3px rgba(0,0,0,.2),0 16px 0 -6px #f6f6f6,0 17px 2px -6px rgba(0,0,0,.2)}.todo-count{float:left;text-align:left}.todo-count strong{font-weight:300}.filters{margin:0;padding:0;list-style:none;position:absolute;right:0;left:0}.filters li{display:inline}.filters li a{color:inherit;margin:3px;padding:3px 7px;text-decoration:none;border:1px solid transparent;border-radius:3px}.filters li a:hover{border-color:rgba(175,47,47,.1)}.filters li a.selected{border-color:rgba(175,47,47,.2)}.clear-completed,html .clear-completed:active{float:right;position:relative;line-height:20px;text-decoration:none;cursor:pointer}.clear-completed:hover{text-decoration:underline}.info{margin:65px auto 0;color:#bfbfbf;font-size:10px;text-shadow:0 1px 0 hsla(0,0%,100%,.5);text-align:center}.info p{line-height:1}.info a{color:inherit;text-decoration:none;font-weight:400}.info a:hover{text-decoration:underline}@media screen and (-webkit-min-device-pixel-ratio:0){.todo-list li .toggle,.toggle-all{background:none}.todo-list li .toggle{height:40px}}@media (max-width:430px){.footer{height:50px}.filters{bottom:10px}}
+/*# sourceMappingURL=main.21111742.css.map*/
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/css/main.21111742.css.map
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../node_modules/todomvc-app-css/index.css"],"names":[],"mappings":"AAMA,iBAJC,SACA,SAAW,CAkBX,OAZA,SACA,gBACA,eACA,wBACA,oBACA,oBACA,cACA,wBACA,qBACK,gBACL,kCAAoC,CAIrC,YAHC,iCAAmC,CAcnC,KAVA,oDACA,kBACA,mBACA,cACA,gBACA,gBACA,cACA,mCAEA,eAAiB,CAGlB,OACC,SAAW,CAGZ,QACC,YAAc,CAGf,SACC,gBACA,oBACA,kBACA,2EAEQ,kEACqC,CAG9C,0CACC,kBACA,gBACA,aAAe,CAGhB,iCACC,kBACA,gBACA,aAAe,CAGhB,kCACC,kBACA,gBACA,aAAe,CAGhB,YACC,kBACA,WACA,WACA,gBACA,gBACA,kBACA,0BACA,0CACA,uCACA,iCAAmC,CAGpC,gBAEC,kBACA,SACA,WACA,eACA,oBACA,oBACA,kBACA,SACA,cACA,YACA,sBACA,qDACQ,6CACR,8BACQ,sBACR,mCACA,iCAAmC,CAGpC,UACC,4BACA,YACA,4BACA,oDACQ,2CAA8C,CAGvD,MACC,kBACA,UACA,4BAA8B,CAG/B,YACC,kBACA,YACA,UACA,iBAAmB,CAGpB,kBACC,WACA,YACA,YACA,kBACA,UACA,WACA,gCACA,4BACI,uBAAyB,CAG9B,yBACC,gBACA,eACA,cACA,iBAA6B,CAG9B,iCACC,aAAe,CAGhB,WACC,SACA,UACA,eAAiB,CAGlB,cACC,kBACA,eACA,+BAAiC,CAGlC,yBACC,kBAAoB,CAGrB,sBACC,mBACA,SAAW,CAGZ,4BACC,cACA,YACA,kBACA,iBAAmB,CAGpB,4BACC,YAAc,CAGf,sBACC,kBACA,WAEA,YACA,kBACA,MACA,SACA,cACA,YACA,wBACA,qBACK,gBAIL,SAAW,CAGZ,4BAKC,oUACA,4BACA,qBAAiC,CAGlC,oCACC,waAA0a,CAG3a,oBACC,qBACA,4BACA,cACA,gBACA,6BACA,wBACA,oBAAuB,CAGxB,8BACC,cACA,4BAA8B,CAG/B,uBACC,aACA,kBACA,MACA,WACA,SACA,WACA,YACA,cACA,eACA,cACA,mBACA,sCACA,iCACA,6BAAgC,CAGjC,6BACC,aAAe,CAGhB,6BACC,aAAa,CAGd,6BACC,aAAe,CAGhB,oBACC,YAAc,CAGf,iCACC,kBAAoB,CAGrB,QACC,WACA,kBACA,YACA,kBACA,4BAA8B,CAG/B,eACC,WACA,kBACA,QACA,SACA,OACA,YACA,gBACA,oJAKQ,2IAIuC,CAGhD,YACC,WACA,eAAiB,CAGlB,mBACC,eAAiB,CAGlB,SACC,SACA,UACA,gBACA,kBACA,QACA,MAAQ,CAGT,YACC,cAAgB,CAGjB,cACC,cACA,WACA,gBACA,qBACA,6BACA,iBAAmB,CAGpB,oBACC,+BAAqC,CAGtC,uBACC,+BAAqC,CAGtC,8CAEC,YACA,kBACA,iBACA,qBACA,cAAgB,CAGjB,uBACC,yBAA2B,CAG5B,MACC,mBACA,cACA,eACA,uCACA,iBAAmB,CAGpB,QACC,aAAe,CAGhB,QACC,cACA,qBACA,eAAiB,CAGlB,cACC,yBAA2B,CAO5B,qDACC,kCAEC,eAAiB,CAGlB,sBACC,WAAa,CACb,CAGF,yBACC,QACC,WAAa,CAGd,SACC,WAAa,CACb","file":"static/css/main.21111742.css","sourcesContent":["html,\nbody {\n\tmargin: 0;\n\tpadding: 0;\n}\n\nbutton {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tbackground: none;\n\tfont-size: 100%;\n\tvertical-align: baseline;\n\tfont-family: inherit;\n\tfont-weight: inherit;\n\tcolor: inherit;\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\t     appearance: none;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nbody {\n\tfont: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;\n\tline-height: 1.4em;\n\tbackground: #f5f5f5;\n\tcolor: #4d4d4d;\n\tmin-width: 230px;\n\tmax-width: 550px;\n\tmargin: 0 auto;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n\tfont-weight: 300;\n}\n\n:focus {\n\toutline: 0;\n}\n\n.hidden {\n\tdisplay: none;\n}\n\n.todoapp {\n\tbackground: #fff;\n\tmargin: 130px 0 40px 0;\n\tposition: relative;\n\t-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),\n\t            0 25px 50px 0 rgba(0, 0, 0, 0.1);\n\t        box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2),\n\t            0 25px 50px 0 rgba(0, 0, 0, 0.1);\n}\n\n.todoapp input::-webkit-input-placeholder {\n\tfont-style: italic;\n\tfont-weight: 300;\n\tcolor: #e6e6e6;\n}\n\n.todoapp input::-moz-placeholder {\n\tfont-style: italic;\n\tfont-weight: 300;\n\tcolor: #e6e6e6;\n}\n\n.todoapp input::input-placeholder {\n\tfont-style: italic;\n\tfont-weight: 300;\n\tcolor: #e6e6e6;\n}\n\n.todoapp h1 {\n\tposition: absolute;\n\ttop: -155px;\n\twidth: 100%;\n\tfont-size: 100px;\n\tfont-weight: 100;\n\ttext-align: center;\n\tcolor: rgba(175, 47, 47, 0.15);\n\t-webkit-text-rendering: optimizeLegibility;\n\t-moz-text-rendering: optimizeLegibility;\n\ttext-rendering: optimizeLegibility;\n}\n\n.new-todo,\n.edit {\n\tposition: relative;\n\tmargin: 0;\n\twidth: 100%;\n\tfont-size: 24px;\n\tfont-family: inherit;\n\tfont-weight: inherit;\n\tline-height: 1.4em;\n\tborder: 0;\n\tcolor: inherit;\n\tpadding: 6px;\n\tborder: 1px solid #999;\n\t-webkit-box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);\n\t        box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);\n\t-webkit-box-sizing: border-box;\n\t        box-sizing: border-box;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\n.new-todo {\n\tpadding: 16px 16px 16px 60px;\n\tborder: none;\n\tbackground: rgba(0, 0, 0, 0.003);\n\t-webkit-box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);\n\t        box-shadow: inset 0 -2px 1px rgba(0,0,0,0.03);\n}\n\n.main {\n\tposition: relative;\n\tz-index: 2;\n\tborder-top: 1px solid #e6e6e6;\n}\n\n.toggle-all {\n\ttext-align: center;\n\tborder: none; /* Mobile Safari */\n\topacity: 0;\n\tposition: absolute;\n}\n\n.toggle-all + label {\n\twidth: 60px;\n\theight: 34px;\n\tfont-size: 0;\n\tposition: absolute;\n\ttop: -52px;\n\tleft: -13px;\n\t-webkit-transform: rotate(90deg);\n\t-ms-transform: rotate(90deg);\n\t    transform: rotate(90deg);\n}\n\n.toggle-all + label:before {\n\tcontent: '❯';\n\tfont-size: 22px;\n\tcolor: #e6e6e6;\n\tpadding: 10px 27px 10px 27px;\n}\n\n.toggle-all:checked + label:before {\n\tcolor: #737373;\n}\n\n.todo-list {\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.todo-list li {\n\tposition: relative;\n\tfont-size: 24px;\n\tborder-bottom: 1px solid #ededed;\n}\n\n.todo-list li:last-child {\n\tborder-bottom: none;\n}\n\n.todo-list li.editing {\n\tborder-bottom: none;\n\tpadding: 0;\n}\n\n.todo-list li.editing .edit {\n\tdisplay: block;\n\twidth: 506px;\n\tpadding: 12px 16px;\n\tmargin: 0 0 0 43px;\n}\n\n.todo-list li.editing .view {\n\tdisplay: none;\n}\n\n.todo-list li .toggle {\n\ttext-align: center;\n\twidth: 40px;\n\t/* auto, since non-WebKit browsers doesn't support input styling */\n\theight: auto;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tmargin: auto 0;\n\tborder: none; /* Mobile Safari */\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\t     appearance: none;\n}\n\n.todo-list li .toggle {\n\topacity: 0;\n}\n\n.todo-list li .toggle + label {\n\t/*\n\t\tFirefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433\n\t\tIE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/\n\t*/\n\tbackground-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');\n\tbackground-repeat: no-repeat;\n\tbackground-position: center left;\n}\n\n.todo-list li .toggle:checked + label {\n\tbackground-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');\n}\n\n.todo-list li label {\n\tword-break: break-all;\n\tpadding: 15px 15px 15px 60px;\n\tdisplay: block;\n\tline-height: 1.2;\n\t-webkit-transition: color 0.4s;\n\t-o-transition: color 0.4s;\n\ttransition: color 0.4s;\n}\n\n.todo-list li.completed label {\n\tcolor: #d9d9d9;\n\ttext-decoration: line-through;\n}\n\n.todo-list li .destroy {\n\tdisplay: none;\n\tposition: absolute;\n\ttop: 0;\n\tright: 10px;\n\tbottom: 0;\n\twidth: 40px;\n\theight: 40px;\n\tmargin: auto 0;\n\tfont-size: 30px;\n\tcolor: #cc9a9a;\n\tmargin-bottom: 11px;\n\t-webkit-transition: color 0.2s ease-out;\n\t-o-transition: color 0.2s ease-out;\n\ttransition: color 0.2s ease-out;\n}\n\n.todo-list li .destroy:hover {\n\tcolor: #af5b5e;\n}\n\n.todo-list li .destroy:after {\n\tcontent: '×';\n}\n\n.todo-list li:hover .destroy {\n\tdisplay: block;\n}\n\n.todo-list li .edit {\n\tdisplay: none;\n}\n\n.todo-list li.editing:last-child {\n\tmargin-bottom: -1px;\n}\n\n.footer {\n\tcolor: #777;\n\tpadding: 10px 15px;\n\theight: 20px;\n\ttext-align: center;\n\tborder-top: 1px solid #e6e6e6;\n}\n\n.footer:before {\n\tcontent: '';\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\theight: 50px;\n\toverflow: hidden;\n\t-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),\n\t            0 8px 0 -3px #f6f6f6,\n\t            0 9px 1px -3px rgba(0, 0, 0, 0.2),\n\t            0 16px 0 -6px #f6f6f6,\n\t            0 17px 2px -6px rgba(0, 0, 0, 0.2);\n\t        box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2),\n\t            0 8px 0 -3px #f6f6f6,\n\t            0 9px 1px -3px rgba(0, 0, 0, 0.2),\n\t            0 16px 0 -6px #f6f6f6,\n\t            0 17px 2px -6px rgba(0, 0, 0, 0.2);\n}\n\n.todo-count {\n\tfloat: left;\n\ttext-align: left;\n}\n\n.todo-count strong {\n\tfont-weight: 300;\n}\n\n.filters {\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n\tposition: absolute;\n\tright: 0;\n\tleft: 0;\n}\n\n.filters li {\n\tdisplay: inline;\n}\n\n.filters li a {\n\tcolor: inherit;\n\tmargin: 3px;\n\tpadding: 3px 7px;\n\ttext-decoration: none;\n\tborder: 1px solid transparent;\n\tborder-radius: 3px;\n}\n\n.filters li a:hover {\n\tborder-color: rgba(175, 47, 47, 0.1);\n}\n\n.filters li a.selected {\n\tborder-color: rgba(175, 47, 47, 0.2);\n}\n\n.clear-completed,\nhtml .clear-completed:active {\n\tfloat: right;\n\tposition: relative;\n\tline-height: 20px;\n\ttext-decoration: none;\n\tcursor: pointer;\n}\n\n.clear-completed:hover {\n\ttext-decoration: underline;\n}\n\n.info {\n\tmargin: 65px auto 0;\n\tcolor: #bfbfbf;\n\tfont-size: 10px;\n\ttext-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n\ttext-align: center;\n}\n\n.info p {\n\tline-height: 1;\n}\n\n.info a {\n\tcolor: inherit;\n\ttext-decoration: none;\n\tfont-weight: 400;\n}\n\n.info a:hover {\n\ttext-decoration: underline;\n}\n\n/*\n\tHack to remove background from Mobile Safari.\n\tCan't use it globally since it destroys checkboxes in Firefox\n*/\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n\t.toggle-all,\n\t.todo-list li .toggle {\n\t\tbackground: none;\n\t}\n\n\t.todo-list li .toggle {\n\t\theight: 40px;\n\t}\n}\n\n@media (max-width: 430px) {\n\t.footer {\n\t\theight: 50px;\n\t}\n\n\t.filters {\n\t\tbottom: 10px;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/todomvc-app-css/index.css"],"sourceRoot":""}
\ No newline at end of file
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/css/main.f04a7319.css
+++ /dev/null
@@ -1,2 +0,0 @@
-body,button,html{margin:0;padding:0}button{border:0;background:none;font-size:100%;vertical-align:baseline;font-family:inherit;font-weight:inherit;color:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-font-smoothing:antialiased}body,button{-moz-osx-font-smoothing:grayscale}body{font:14px Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.4em;background:#f5f5f5;color:#4d4d4d;min-width:230px;max-width:550px;margin:0 auto;-webkit-font-smoothing:antialiased;font-weight:300}:focus{outline:0}.hidden{display:none}.todoapp{background:#fff;margin:130px 0 40px;position:relative;box-shadow:0 2px 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1)}.todoapp input::-webkit-input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp input::-moz-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp input::input-placeholder{font-style:italic;font-weight:300;color:#e6e6e6}.todoapp h1{position:absolute;top:-155px;width:100%;font-size:100px;font-weight:100;text-align:center;color:rgba(175,47,47,.15);-webkit-text-rendering:optimizeLegibility;-moz-text-rendering:optimizeLegibility;text-rendering:optimizeLegibility}.edit,.new-todo{position:relative;margin:0;width:100%;font-size:24px;font-family:inherit;font-weight:inherit;line-height:1.4em;border:0;color:inherit;padding:6px;border:1px solid #999;box-shadow:inset 0 -1px 5px 0 rgba(0,0,0,.2);box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.new-todo{padding:16px 16px 16px 60px;border:none;background:rgba(0,0,0,.003);box-shadow:inset 0 -2px 1px rgba(0,0,0,.03)}.main{position:relative;z-index:2;border-top:1px solid #e6e6e6}.toggle-all{text-align:center;border:none;opacity:0;position:absolute}.toggle-all+label{width:60px;height:34px;font-size:0;position:absolute;top:-52px;left:-13px;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.toggle-all+label:before{content:'\276F';font-size:22px;color:#e6e6e6;padding:10px 27px}.toggle-all:checked+label:before{color:#737373}.todo-list{margin:0;padding:0;list-style:none}.todo-list li{position:relative;font-size:24px;border-bottom:1px solid #ededed}.todo-list li:last-child{border-bottom:none}.todo-list li.editing{border-bottom:none;padding:0}.todo-list li.editing .edit{display:block;width:506px;padding:12px 16px;margin:0 0 0 43px}.todo-list li.editing .view{display:none}.todo-list li .toggle{text-align:center;width:40px;height:auto;position:absolute;top:0;bottom:0;margin:auto 0;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0}.todo-list li .toggle+label{background-image:url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');background-repeat:no-repeat;background-position:0}.todo-list li .toggle:checked+label{background-image:url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E')}.todo-list li label{word-break:break-all;padding:15px 15px 15px 60px;display:block;line-height:1.2;-webkit-transition:color .4s;transition:color .4s}.todo-list li.completed label{color:#d9d9d9;text-decoration:line-through}.todo-list li .destroy{display:none;position:absolute;top:0;right:10px;bottom:0;width:40px;height:40px;margin:auto 0;font-size:30px;color:#cc9a9a;margin-bottom:11px;-webkit-transition:color .2s ease-out;transition:color .2s ease-out}.todo-list li .destroy:hover{color:#af5b5e}.todo-list li .destroy:after{content:'\D7'}.todo-list li:hover .destroy{display:block}.todo-list li .edit{display:none}.todo-list li.editing:last-child{margin-bottom:-1px}.footer{color:#777;padding:10px 15px;height:20px;text-align:center;border-top:1px solid #e6e6e6}.footer:before{content:'';position:absolute;right:0;bottom:0;left:0;height:50px;overflow:hidden;box-shadow:0 1px 1px rgba(0,0,0,.2),0 8px 0 -3px #f6f6f6,0 9px 1px -3px rgba(0,0,0,.2),0 16px 0 -6px #f6f6f6,0 17px 2px -6px rgba(0,0,0,.2)}.todo-count{float:left;text-align:left}.todo-count strong{font-weight:300}.filters{margin:0;padding:0;list-style:none;position:absolute;right:0;left:0}.filters li{display:inline}.filters li a{color:inherit;margin:3px;padding:3px 7px;text-decoration:none;border:1px solid transparent;border-radius:3px}.filters li a:hover{border-color:rgba(175,47,47,.1)}.filters li a.selected{border-color:rgba(175,47,47,.2)}.clear-completed,html .clear-completed:active{float:right;position:relative;line-height:20px;text-decoration:none;cursor:pointer}.clear-completed:hover{text-decoration:underline}.info{margin:65px auto 0;color:#bfbfbf;font-size:10px;text-shadow:0 1px 0 hsla(0,0%,100%,.5);text-align:center}.info p{line-height:1}.info a{color:inherit;text-decoration:none;font-weight:400}.info a:hover{text-decoration:underline}@media screen and (-webkit-min-device-pixel-ratio:0){.todo-list li .toggle,.toggle-all{background:none}.todo-list li .toggle{height:40px}}@media (max-width:430px){.footer{height:50px}.filters{bottom:10px}}
-/*# sourceMappingURL=main.f04a7319.css.map*/
\ No newline at end of file
deleted file mode 100644
--- a/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/css/main.f04a7319.css.map
+++ /dev/null
@@ -1,1 +0,0 @@
-{"version":3,"sources":[],"names":[],"mappings":"","file":"static/css/main.f04a7319.css","sourceRoot":""}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/third_party/speedometer/resources/todomvc/architecture-examples/react-redux/dist/static/js/main.18b409e1.js
@@ -0,0 +1,2 @@
+!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="./",t(t.s=97)}([function(e,t,n){"use strict";function r(e,t,n,r,i,a,u,s){if(o(t),!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,i,a,u,s],p=0;c=new Error(t.replace(/%s/g,function(){return l[p++]})),c.name="Invariant Violation"}throw c.framesToPop=1,c}}var o=function(e){};e.exports=r},function(e,t,n){"use strict";var r=n(6),o=r;e.exports=o},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="Minified React error #"+e+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);n+=" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.";var o=new Error(n);throw o.name="Invariant Violation",o.framesToPop=1,o}e.exports=r},function(e,t,n){"use strict";function r(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,u,s=r(e),c=1;c<arguments.length;c++){n=Object(arguments[c]);for(var l in n)i.call(n,l)&&(s[l]=n[l]);if(o){u=o(n);for(var p=0;p<u.length;p++)a.call(n,u[p])&&(s[u[p]]=n[u[p]])}}return s}},function(e,t,n){"use strict";function r(e,t){return 1===e.nodeType&&e.getAttribute(h)===String(t)||8===e.nodeType&&e.nodeValue===" react-text: "+t+" "||8===e.nodeType&&e.nodeValue===" react-empty: "+t+" "}function o(e){for(var t;t=e._renderedComponent;)e=t;return e}function i(e,t){var n=o(e);n._hostNode=t,t[v]=n}function a(e){var t=e._hostNode;t&&(delete t[v],e._hostNode=null)}function u(e,t){if(!(e._flags&m.hasCachedChildNodes)){var n=e._renderedChildren,a=t.firstChild;e:for(var u in n)if(n.hasOwnProperty(u)){var s=n[u],c=o(s)._domID;if(0!==c){for(;null!==a;a=a.nextSibling)if(r(a,c)){i(s,a);continue e}p("32",c)}}e._flags|=m.hasCachedChildNodes}}function s(e){if(e[v])return e[v];for(var t=[];!e[v];){if(t.push(e),!e.parentNode)return null;e=e.parentNode}for(var n,r;e&&(r=e[v]);e=t.pop())n=r,t.length&&u(r,e);return n}function c(e){var t=s(e);return null!=t&&t._hostNode===e?t:null}function l(e){if(void 0===e._hostNode&&p("33"),e._hostNode)return e._hostNode;for(var t=[];!e._hostNode;)t.push(e),e._hostParent||p("34"),e=e._hostParent;for(;t.length;e=t.pop())u(e,e._hostNode);return e._hostNode}var p=n(2),f=n(15),d=n(58),h=(n(0),f.ID_ATTRIBUTE_NAME),m=d,v="__reactInternalInstance$"+Math.random().toString(36).slice(2),y={getClosestInstanceFromNode:s,getInstanceFromNode:c,getNodeFromInstance:l,precacheChildNodes:u,precacheNode:i,uncacheNode:a};e.exports=y},function(e,t,n){"use strict";var r=!("undefined"===typeof window||!window.document||!window.document.createElement),o={canUseDOM:r,canUseWorkers:"undefined"!==typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};e.exports=o},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";var r=null;e.exports={debugTool:r}},function(e,t,n){"use strict";function r(){O.ReactReconcileTransaction&&C||l("123")}function o(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=f.getPooled(),this.reconcileTransaction=O.ReactReconcileTransaction.getPooled(!0)}function i(e,t,n,o,i,a){return r(),C.batchedUpdates(e,t,n,o,i,a)}function a(e,t){return e._mountOrder-t._mountOrder}function u(e){var t=e.dirtyComponentsLength;t!==y.length&&l("124",t,y.length),y.sort(a),g++;for(var n=0;n<t;n++){var r=y[n],o=r._pendingCallbacks;r._pendingCallbacks=null;var i;if(h.logTopLevelRenders){var u=r;r._currentElement.type.isReactTopLevelWrapper&&(u=r._renderedComponent),i="React update: "+u.getName(),console.time(i)}if(m.performUpdateIfNecessary(r,e.reconcileTransaction,g),i&&console.timeEnd(i),o)for(var s=0;s<o.length;s++)e.callbackQueue.enqueue(o[s],r.getPublicInstance())}}function s(e){if(r(),!C.isBatchingUpdates)return void C.batchedUpdates(s,e);y.push(e),null==e._updateBatchNumber&&(e._updateBatchNumber=g+1)}function c(e,t){C.isBatchingUpdates||l("125"),b.enqueue(e,t),_=!0}var l=n(2),p=n(3),f=n(62),d=n(12),h=n(63),m=n(16),v=n(24),y=(n(0),[]),g=0,b=f.getPooled(),_=!1,C=null,w={initialize:function(){this.dirtyComponentsLength=y.length},close:function(){this.dirtyComponentsLength!==y.length?(y.splice(0,this.dirtyComponentsLength),T()):y.length=0}},E={initialize:function(){this.callbackQueue.reset()},close:function(){this.callbackQueue.notifyAll()}},x=[w,E];p(o.prototype,v,{getTransactionWrappers:function(){return x},destructor:function(){this.dirtyComponentsLength=null,f.release(this.callbackQueue),this.callbackQueue=null,O.ReactReconcileTransaction.release(this.reconcileTransaction),this.reconcileTransaction=null},perform:function(e,t,n){return v.perform.call(this,this.reconcileTransaction.perform,this.reconcileTransaction,e,t,n)}}),d.addPoolingTo(o);var T=function(){for(;y.length||_;){if(y.length){var e=o.getPooled();e.perform(u,null,e),o.release(e)}if(_){_=!1;var t=b;b=f.getPooled(),t.notifyAll(),f.release(t)}}},P={injectReconcileTransaction:function(e){e||l("126"),O.ReactReconcileTransaction=e},injectBatchingStrategy:function(e){e||l("127"),"function"!==typeof e.batchedUpdates&&l("128"),"boolean"!==typeof e.isBatchingUpdates&&l("129"),C=e}},O={ReactReconcileTransaction:null,batchedUpdates:i,enqueueUpdate:s,flushBatchedUpdates:T,injection:P,asap:c};e.exports=O},function(e,t,n){"use strict";e.exports=n(13)},function(e,t,n){"use strict";var r={current:null};e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n;var o=this.constructor.Interface;for(var i in o)if(o.hasOwnProperty(i)){var u=o[i];u?this[i]=u(n):"target"===i?this.target=r:this[i]=n[i]}var s=null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue;return this.isDefaultPrevented=s?a.thatReturnsTrue:a.thatReturnsFalse,this.isPropagationStopped=a.thatReturnsFalse,this}var o=n(3),i=n(12),a=n(6),u=(n(1),["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"]),s={type:null,target:null,currentTarget:a.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};o(r.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=a.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=a.thatReturnsTrue)},persist:function(){this.isPersistent=a.thatReturnsTrue},isPersistent:a.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;for(var n=0;n<u.length;n++)this[u[n]]=null}}),r.Interface=s,r.augmentClass=function(e,t){var n=this,r=function(){};r.prototype=n.prototype;var a=new r;o(a,e.prototype),e.prototype=a,e.prototype.constructor=e,e.Interface=o({},n.Interface,t),e.augmentClass=n.augmentClass,i.addPoolingTo(e,i.fourArgumentPooler)},i.addPoolingTo(r,i.fourArgumentPooler),e.exports=r},function(e,t,n){"use strict";var r=n(2),o=(n(0),function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)}),i=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},a=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},u=function(e,t,n,r){var o=this;if(o.instancePool.length){var i=o.instancePool.pop();return o.call(i,e,t,n,r),i}return new o(e,t,n,r)},s=function(e){var t=this;e instanceof t||r("25"),e.destructor(),t.instancePool.length<t.poolSize&&t.instancePool.push(e)},c=o,l=function(e,t){var n=e;return n.instancePool=[],n.getPooled=t||c,n.poolSize||(n.poolSize=10),n.release=s,n},p={addPoolingTo:l,oneArgumentPooler:o,twoArgumentPooler:i,threeArgumentPooler:a,fourArgumentPooler:u};e.exports=p},function(e,t,n){"use strict";var r=n(3),o=n(52),i=n(105),a=n(110),u=n(14),s=n(111),c=n(114),l=n(115),p=n(117),f=u.createElement,d=u.createFactory,h=u.cloneElement,m=r,v=function(e){return e},y={Children:{map:i.map,forEach:i.forEach,count:i.count,toArray:i.toArray,only:p},Component:o.Component,PureComponent:o.PureComponent,createElement:f,cloneElement:h,isValidElement:u.isValidElement,PropTypes:s,createClass:l,createFactory:d,createMixin:v,DOM:a,version:c,__spread:m};e.exports=y},function(e,t,n){"use strict";function r(e){return void 0!==e.ref}function o(e){return void 0!==e.key}var i=n(3),a=n(10),u=(n(1),n(54),Object.prototype.hasOwnProperty),s=n(55),c={key:!0,ref:!0,__self:!0,__source:!0},l=function(e,t,n,r,o,i,a){var u={$$typeof:s,type:e,key:t,ref:n,props:a,_owner:i};return u};l.createElement=function(e,t,n){var i,s={},p=null,f=null;if(null!=t){r(t)&&(f=t.ref),o(t)&&(p=""+t.key),void 0===t.__self?null:t.__self,void 0===t.__source?null:t.__source;for(i in t)u.call(t,i)&&!c.hasOwnProperty(i)&&(s[i]=t[i])}var d=arguments.length-2;if(1===d)s.children=n;else if(d>1){for(var h=Array(d),m=0;m<d;m++)h[m]=arguments[m+2];s.children=h}if(e&&e.defaultProps){var v=e.defaultProps;for(i in v)void 0===s[i]&&(s[i]=v[i])}return l(e,p,f,0,0,a.current,s)},l.createFactory=function(e){var t=l.createElement.bind(null,e);return t.type=e,t},l.cloneAndReplaceKey=function(e,t){return l(e.type,t,e.ref,e._self,e._source,e._owner,e.props)},l.cloneElement=function(e,t,n){var s,p=i({},e.props),f=e.key,d=e.ref,h=(e._self,e._source,e._owner);if(null!=t){r(t)&&(d=t.ref,h=a.current),o(t)&&(f=""+t.key);var m;e.type&&e.type.defaultProps&&(m=e.type.defaultProps);for(s in t)u.call(t,s)&&!c.hasOwnProperty(s)&&(void 0===t[s]&&void 0!==m?p[s]=m[s]:p[s]=t[s])}var v=arguments.length-2;if(1===v)p.children=n;else if(v>1){for(var y=Array(v),g=0;g<v;g++)y[g]=arguments[g+2];p.children=y}return l(e.type,f,d,0,0,h,p)},l.isValidElement=function(e){return"object"===typeof e&&null!==e&&e.$$typeof===s},e.exports=l},function(e,t,n){"use strict";function r(e,t){return(e&t)===t}var o=n(2),i=(n(0),{MUST_USE_PROPERTY:1,HAS_BOOLEAN_VALUE:4,HAS_NUMERIC_VALUE:8,HAS_POSITIVE_NUMERIC_VALUE:24,HAS_OVERLOADED_BOOLEAN_VALUE:32,injectDOMPropertyConfig:function(e){var t=i,n=e.Properties||{},a=e.DOMAttributeNamespaces||{},s=e.DOMAttributeNames||{},c=e.DOMPropertyNames||{},l=e.DOMMutationMethods||{};e.isCustomAttribute&&u._isCustomAttributeFunctions.push(e.isCustomAttribute);for(var p in n){u.properties.hasOwnProperty(p)&&o("48",p);var f=p.toLowerCase(),d=n[p],h={attributeName:f,attributeNamespace:null,propertyName:p,mutationMethod:null,mustUseProperty:r(d,t.MUST_USE_PROPERTY),hasBooleanValue:r(d,t.HAS_BOOLEAN_VALUE),hasNumericValue:r(d,t.HAS_NUMERIC_VALUE),hasPositiveNumericValue:r(d,t.HAS_POSITIVE_NUMERIC_VALUE),hasOverloadedBooleanValue:r(d,t.HAS_OVERLOADED_BOOLEAN_VALUE)};if(h.hasBooleanValue+h.hasNumericValue+h.hasOverloadedBooleanValue<=1||o("50",p),s.hasOwnProperty(p)){var m=s[p];h.attributeName=m}a.hasOwnProperty(p)&&(h.attributeNamespace=a[p]),c.hasOwnProperty(p)&&(h.propertyName=c[p]),l.hasOwnProperty(p)&&(h.mutationMethod=l[p]),u.properties[p]=h}}}),a=":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",u={ID_ATTRIBUTE_NAME:"data-reactid",ROOT_ATTRIBUTE_NAME:"data-reactroot",ATTRIBUTE_NAME_START_CHAR:a,ATTRIBUTE_NAME_CHAR:a+"\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040",properties:{},getPossibleStandardName:null,_isCustomAttributeFunctions:[],isCustomAttribute:function(e){for(var t=0;t<u._isCustomAttributeFunctions.length;t++){if((0,u._isCustomAttributeFunctions[t])(e))return!0}return!1},injection:i};e.exports=u},function(e,t,n){"use strict";function r(){o.attachRefs(this,this._currentElement)}var o=n(127),i=(n(7),n(1),{mountComponent:function(e,t,n,o,i,a){var u=e.mountComponent(t,n,o,i,a);return e._currentElement&&null!=e._currentElement.ref&&t.getReactMountReady().enqueue(r,e),u},getHostNode:function(e){return e.getHostNode()},unmountComponent:function(e,t){o.detachRefs(e,e._currentElement),e.unmountComponent(t)},receiveComponent:function(e,t,n,i){var a=e._currentElement;if(t!==a||i!==e._context){var u=o.shouldUpdateRefs(a,t);u&&o.detachRefs(e,a),e.receiveComponent(t,n,i),u&&e._currentElement&&null!=e._currentElement.ref&&n.getReactMountReady().enqueue(r,e)}},performUpdateIfNecessary:function(e,t,n){e._updateBatchNumber===n&&e.performUpdateIfNecessary(t)}});e.exports=i},function(e,t,n){"use strict";function r(e){if(h){var t=e.node,n=e.children;if(n.length)for(var r=0;r<n.length;r++)m(t,n[r],null);else null!=e.html?p(t,e.html):null!=e.text&&d(t,e.text)}}function o(e,t){e.parentNode.replaceChild(t.node,e),r(t)}function i(e,t){h?e.children.push(t):e.node.appendChild(t.node)}function a(e,t){h?e.html=t:p(e.node,t)}function u(e,t){h?e.text=t:d(e.node,t)}function s(){return this.node.nodeName}function c(e){return{node:e,children:[],html:null,text:null,toString:s}}var l=n(38),p=n(26),f=n(39),d=n(67),h="undefined"!==typeof document&&"number"===typeof document.documentMode||"undefined"!==typeof navigator&&"string"===typeof navigator.userAgent&&/\bEdge\/\d/.test(navigator.userAgent),m=f(function(e,t,n){11===t.node.nodeType||1===t.node.nodeType&&"object"===t.node.nodeName.toLowerCase()&&(null==t.node.namespaceURI||t.node.namespaceURI===l.html)?(r(t),e.insertBefore(t.node,n)):(e.insertBefore(t.node,n),r(t))});c.insertTreeBefore=m,c.replaceChildWithTree=o,c.queueChild=i,c.queueHTML=a,c.queueText=u,e.exports=c},function(e,t,n){"use strict";function r(e){for(var t=arguments.length-1,n="Minified React error #"+e+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);n+=" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.";var o=new Error(n);throw o.name="Invariant Violation",o.framesToPop=1,o}e.exports=r},function(e,t,n){"use strict";function r(e,t,n){var r=t.dispatchConfig.phasedRegistrationNames[n];return y(e,r)}function o(e,t,n){var o=r(e,n,t);o&&(n._dispatchListeners=m(n._dispatchListeners,o),n._dispatchInstances=m(n._dispatchInstances,e))}function i(e){e&&e.dispatchConfig.phasedRegistrationNames&&h.traverseTwoPhase(e._targetInst,o,e)}function a(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst,n=t?h.getParentInstance(t):null;h.traverseTwoPhase(n,o,e)}}function u(e,t,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,o=y(e,r);o&&(n._dispatchListeners=m(n._dispatchListeners,o),n._dispatchInstances=m(n._dispatchInstances,e))}}function s(e){e&&e.dispatchConfig.registrationName&&u(e._targetInst,null,e)}function c(e){v(e,i)}function l(e){v(e,a)}function p(e,t,n,r){h.traverseEnterLeave(n,r,u,e,t)}function f(e){v(e,s)}var d=n(20),h=n(32),m=n(59),v=n(60),y=(n(1),d.getListener),g={accumulateTwoPhaseDispatches:c,accumulateTwoPhaseDispatchesSkipTarget:l,accumulateDirectDispatches:f,accumulateEnterLeaveDispatches:p};e.exports=g},function(e,t,n){"use strict";function r(e){return"button"===e||"input"===e||"select"===e||"textarea"===e}function o(e,t,n){switch(e){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":return!(!n.disabled||!r(t));default:return!1}}var i=n(2),a=n(31),u=n(32),s=n(33),c=n(59),l=n(60),p=(n(0),{}),f=null,d=function(e,t){e&&(u.executeDispatchesInOrder(e,t),e.isPersistent()||e.constructor.release(e))},h=function(e){return d(e,!0)},m=function(e){return d(e,!1)},v=function(e){return"."+e._rootNodeID},y={injection:{injectEventPluginOrder:a.injectEventPluginOrder,injectEventPluginsByName:a.injectEventPluginsByName},putListener:function(e,t,n){"function"!==typeof n&&i("94",t,typeof n);var r=v(e);(p[t]||(p[t]={}))[r]=n;var o=a.registrationNameModules[t];o&&o.didPutListener&&o.didPutListener(e,t,n)},getListener:function(e,t){var n=p[t];if(o(t,e._currentElement.type,e._currentElement.props))return null;var r=v(e);return n&&n[r]},deleteListener:function(e,t){var n=a.registrationNameModules[t];n&&n.willDeleteListener&&n.willDeleteListener(e,t);var r=p[t];if(r){delete r[v(e)]}},deleteAllListeners:function(e){var t=v(e);for(var n in p)if(p.hasOwnProperty(n)&&p[n][t]){var r=a.registrationNameModules[n];r&&r.willDeleteListener&&r.willDeleteListener(e,n),delete p[n][t]}},extractEvents:function(e,t,n,r){for(var o,i=a.plugins,u=0;u<i.length;u++){var s=i[u];if(s){var l=s.extractEvents(e,t,n,r);l&&(o=c(o,l))}}return o},enqueueEvents:function(e){e&&(f=c(f,e))},processEventQueue:function(e){var t=f;f=null,e?l(t,h):l(t,m),f&&i("95"),s.rethrowCaughtError()},__purge:function(){p={}},__getListenerBank:function(){return p}};e.exports=y},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(11),i=n(34),a={view:function(e){if(e.view)return e.view;var t=i(e);if(t.window===t)return t;var n=t.ownerDocument;return n?n.defaultView||n.parentWindow:window},detail:function(e){return e.detail||0}};o.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";var r={remove:function(e){e._reactInternalInstance=void 0},get:function(e){return e._reactInternalInstance},has:function(e){return void 0!==e._reactInternalInstance},set:function(e,t){e._reactInternalInstance=t}};e.exports=r},function(e,t,n){"use strict";var r={};e.exports=r},function(e,t,n){"use strict";var r=n(2),o=(n(0),{}),i={reinitializeTransaction:function(){this.transactionWrappers=this.getTransactionWrappers(),this.wrapperInitData?this.wrapperInitData.length=0:this.wrapperInitData=[],this._isInTransaction=!1},_isInTransaction:!1,getTransactionWrappers:null,isInTransaction:function(){return!!this._isInTransaction},perform:function(e,t,n,o,i,a,u,s){this.isInTransaction()&&r("27");var c,l;try{this._isInTransaction=!0,c=!0,this.initializeAll(0),l=e.call(t,n,o,i,a,u,s),c=!1}finally{try{if(c)try{this.closeAll(0)}catch(e){}else this.closeAll(0)}finally{this._isInTransaction=!1}}return l},initializeAll:function(e){for(var t=this.transactionWrappers,n=e;n<t.length;n++){var r=t[n];try{this.wrapperInitData[n]=o,this.wrapperInitData[n]=r.initialize?r.initialize.call(this):null}finally{if(this.wrapperInitData[n]===o)try{this.initializeAll(n+1)}catch(e){}}}},closeAll:function(e){this.isInTransaction()||r("28");for(var t=this.transactionWrappers,n=e;n<t.length;n++){var i,a=t[n],u=this.wrapperInitData[n];try{i=!0,u!==o&&a.close&&a.close.call(this,u),i=!1}finally{if(i)try{this.closeAll(n+1)}catch(e){}}}this.wrapperInitData.length=0}};e.exports=i},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(21),i=n(66),a=n(36),u={screenX:null,screenY:null,clientX:null,clientY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:a,button:function(e){var t=e.button;return"which"in e?t:2===t?2:4===t?1:0},buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},pageX:function(e){return"pageX"in e?e.pageX:e.clientX+i.currentScrollLeft},pageY:function(e){return"pageY"in e?e.pageY:e.clientY+i.currentScrollTop}};o.augmentClass(r,u),e.exports=r},function(e,t,n){"use strict";var r,o=n(5),i=n(38),a=/^[ \r\n\t\f]/,u=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,s=n(39),c=s(function(e,t){if(e.namespaceURI!==i.svg||"innerHTML"in e)e.innerHTML=t;else{r=r||document.createElement("div"),r.innerHTML="<svg>"+t+"</svg>";for(var n=r.firstChild;n.firstChild;)e.appendChild(n.firstChild)}});if(o.canUseDOM){var l=document.createElement("div");l.innerHTML=" ",""===l.innerHTML&&(c=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),a.test(t)||"<"===t[0]&&u.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),l=null}e.exports=c},function(e,t,n){"use strict";function r(e){var t=""+e,n=i.exec(t);if(!n)return t;var r,o="",a=0,u=0;for(a=n.index;a<t.length;a++){switch(t.charCodeAt(a)){case 34:r="&quot;";break;case 38:r="&amp;";break;case 39:r="&#x27;";break;case 60:r="&lt;";break;case 62:r="&gt;";break;default:continue}u!==a&&(o+=t.substring(u,a)),u=a+1,o+=r}return u!==a?o+t.substring(u,a):o}function o(e){return"boolean"===typeof e||"number"===typeof e?""+e:r(e)}var i=/["'&<>]/;e.exports=o},function(e,t,n){"use strict";function r(e){return Object.prototype.hasOwnProperty.call(e,m)||(e[m]=d++,p[e[m]]={}),p[e[m]]}var o,i=n(3),a=n(31),u=n(148),s=n(66),c=n(149),l=n(35),p={},f=!1,d=0,h={topAbort:"abort",topAnimationEnd:c("animationend")||"animationend",topAnimationIteration:c("animationiteration")||"animationiteration",topAnimationStart:c("animationstart")||"animationstart",topBlur:"blur",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topTransitionEnd:c("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},m="_reactListenersID"+String(Math.random()).slice(2),v=i({},u,{ReactEventListener:null,injection:{injectReactEventListener:function(e){e.setHandleTopLevel(v.handleTopLevel),v.ReactEventListener=e}},setEnabled:function(e){v.ReactEventListener&&v.ReactEventListener.setEnabled(e)},isEnabled:function(){return!(!v.ReactEventListener||!v.ReactEventListener.isEnabled())},listenTo:function(e,t){for(var n=t,o=r(n),i=a.registrationNameDependencies[e],u=0;u<i.length;u++){var s=i[u];o.hasOwnProperty(s)&&o[s]||("topWheel"===s?l("wheel")?v.ReactEventListener.trapBubbledEvent("topWheel","wheel",n):l("mousewheel")?v.ReactEventListener.trapBubbledEvent("topWheel","mousewheel",n):v.ReactEventListener.trapBubbledEvent("topWheel","DOMMouseScroll",n):"topScroll"===s?l("scroll",!0)?v.ReactEventListener.trapCapturedEvent("topScroll","scroll",n):v.ReactEventListener.trapBubbledEvent("topScroll","scroll",v.ReactEventListener.WINDOW_HANDLE):"topFocus"===s||"topBlur"===s?(l("focus",!0)?(v.ReactEventListener.trapCapturedEvent("topFocus","focus",n),v.ReactEventListener.trapCapturedEvent("topBlur","blur",n)):l("focusin")&&(v.ReactEventListener.trapBubbledEvent("topFocus","focusin",n),v.ReactEventListener.trapBubbledEvent("topBlur","focusout",n)),o.topBlur=!0,o.topFocus=!0):h.hasOwnProperty(s)&&v.ReactEventListener.trapBubbledEvent(s,h[s],n),o[s]=!0)}},trapBubbledEvent:function(e,t,n){return v.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return v.ReactEventListener.trapCapturedEvent(e,t,n)},supportsEventPageXY:function(){if(!document.createEvent)return!1;var e=document.createEvent("MouseEvent");return null!=e&&"pageX"in e},ensureScrollValueMonitoring:function(){if(void 0===o&&(o=v.supportsEventPageXY()),!o&&!f){var e=s.refreshScrollValues;v.ReactEventListener.monitorScrollValue(e),f=!0}}});e.exports=v},function(e,t,n){"use strict";var r=n(84),o=n(207),i=n(208);n(209),n(87),n(86);n.d(t,"c",function(){return r.b}),n.d(t,"b",function(){return o.a}),n.d(t,"a",function(){return i.a})},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"===typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";function r(){if(u)for(var e in s){var t=s[e],n=u.indexOf(e);if(n>-1||a("96",e),!c.plugins[n]){t.extractEvents||a("97",e),c.plugins[n]=t;var r=t.eventTypes;for(var i in r)o(r[i],t,i)||a("98",i,e)}}}function o(e,t,n){c.eventNameDispatchConfigs.hasOwnProperty(n)&&a("99",n),c.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var u=r[o];i(u,t,n)}return!0}return!!e.registrationName&&(i(e.registrationName,t,n),!0)}function i(e,t,n){c.registrationNameModules[e]&&a("100",e),c.registrationNameModules[e]=t,c.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var a=n(2),u=(n(0),null),s={},c={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(e){u&&a("101"),u=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];s.hasOwnProperty(n)&&s[n]===o||(s[n]&&a("102",n),s[n]=o,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return c.registrationNameModules[t.registrationName]||null;if(void 0!==t.phasedRegistrationNames){var n=t.phasedRegistrationNames;for(var r in n)if(n.hasOwnProperty(r)){var o=c.registrationNameModules[n[r]];if(o)return o}}return null},_resetEventPlugins:function(){u=null;for(var e in s)s.hasOwnProperty(e)&&delete s[e];c.plugins.length=0;var t=c.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=c.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};e.exports=c},function(e,t,n){"use strict";function r(e){return"topMouseUp"===e||"topTouchEnd"===e||"topTouchCancel"===e}function o(e){return"topMouseMove"===e||"topTouchMove"===e}function i(e){return"topMouseDown"===e||"topTouchStart"===e}function a(e,t,n,r){var o=e.type||"unknown-event";e.currentTarget=y.getNodeFromInstance(r),t?m.invokeGuardedCallbackWithCatch(o,n,e):m.invokeGuardedCallback(o,n,e),e.currentTarget=null}function u(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;o<n.length&&!e.isPropagationStopped();o++)a(e,t,n[o],r[o]);else n&&a(e,t,n,r);e._dispatchListeners=null,e._dispatchInstances=null}function s(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t)){for(var r=0;r<t.length&&!e.isPropagationStopped();r++)if(t[r](e,n[r]))return n[r]}else if(t&&t(e,n))return n;return null}function c(e){var t=s(e);return e._dispatchInstances=null,e._dispatchListeners=null,t}function l(e){var t=e._dispatchListeners,n=e._dispatchInstances;Array.isArray(t)&&h("103"),e.currentTarget=t?y.getNodeFromInstance(n):null;var r=t?t(e):null;return e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,r}function p(e){return!!e._dispatchListeners}var f,d,h=n(2),m=n(33),v=(n(0),n(1),{injectComponentTree:function(e){f=e},injectTreeTraversal:function(e){d=e}}),y={isEndish:r,isMoveish:o,isStartish:i,executeDirectDispatch:l,executeDispatchesInOrder:u,executeDispatchesInOrderStopAtTrue:c,hasDispatches:p,getInstanceFromNode:function(e){return f.getInstanceFromNode(e)},getNodeFromInstance:function(e){return f.getNodeFromInstance(e)},isAncestor:function(e,t){return d.isAncestor(e,t)},getLowestCommonAncestor:function(e,t){return d.getLowestCommonAncestor(e,t)},getParentInstance:function(e){return d.getParentInstance(e)},traverseTwoPhase:function(e,t,n){return d.traverseTwoPhase(e,t,n)},traverseEnterLeave:function(e,t,n,r,o){return d.traverseEnterLeave(e,t,n,r,o)},injection:v};e.exports=y},function(e,t,n){"use strict";function r(e,t,n){try{t(n)}catch(e){null===o&&(o=e)}}var o=null,i={invokeGuardedCallback:r,invokeGuardedCallbackWithCatch:r,rethrowCaughtError:function(){if(o){var e=o;throw o=null,e}}};e.exports=i},function(e,t,n){"use strict";function r(e){var t=e.target||e.srcElement||window;return t.correspondingUseElement&&(t=t.correspondingUseElement),3===t.nodeType?t.parentNode:t}e.exports=r},function(e,t,n){"use strict";function r(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var a=document.createElement("div");a.setAttribute(n,"return;"),r="function"===typeof a[n]}return!r&&o&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var o,i=n(5);i.canUseDOM&&(o=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),e.exports=r},function(e,t,n){"use strict";function r(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=i[e];return!!r&&!!n[r]}function o(e){return r}var i={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};e.exports=o},function(e,t,n){"use strict";function r(e,t){return Array.isArray(t)&&(t=t[1]),t?t.nextSibling:e.firstChild}function o(e,t,n){l.insertTreeBefore(e,t,n)}function i(e,t,n){Array.isArray(t)?u(e,t[0],t[1],n):m(e,t,n)}function a(e,t){if(Array.isArray(t)){var n=t[1];t=t[0],s(e,t,n),e.removeChild(n)}e.removeChild(t)}function u(e,t,n,r){for(var o=t;;){var i=o.nextSibling;if(m(e,o,r),o===n)break;o=i}}function s(e,t,n){for(;;){var r=t.nextSibling;if(r===n)break;e.removeChild(r)}}function c(e,t,n){var r=e.parentNode,o=e.nextSibling;o===t?n&&m(r,document.createTextNode(n),o):n?(h(o,n),s(r,o,t)):s(r,e,t)}var l=n(17),p=n(133),f=(n(4),n(7),n(39)),d=n(26),h=n(67),m=f(function(e,t,n){e.insertBefore(t,n)}),v=p.dangerouslyReplaceNodeWithMarkup,y={dangerouslyReplaceNodeWithMarkup:v,replaceDelimitedText:c,processUpdates:function(e,t){for(var n=0;n<t.length;n++){var u=t[n];switch(u.type){case"INSERT_MARKUP":o(e,u.content,r(e,u.afterNode));break;case"MOVE_EXISTING":i(e,u.fromNode,r(e,u.afterNode));break;case"SET_MARKUP":d(e,u.content);break;case"TEXT_CONTENT":h(e,u.content);break;case"REMOVE_NODE":a(e,u.fromNode)}}}};e.exports=y},function(e,t,n){"use strict";var r={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};e.exports=r},function(e,t,n){"use strict";var r=function(e){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e};e.exports=r},function(e,t,n){"use strict";function r(e){null!=e.checkedLink&&null!=e.valueLink&&u("87")}function o(e){r(e),(null!=e.value||null!=e.onChange)&&u("88")}function i(e){r(e),(null!=e.checked||null!=e.onChange)&&u("89")}function a(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}var u=n(2),s=n(151),c=n(56),l=n(13),p=c(l.isValidElement),f=(n(0),n(1),{button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0}),d={value:function(e,t,n){return!e[t]||f[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:p.func},h={},m={checkPropTypes:function(e,t,n){for(var r in d){if(d.hasOwnProperty(r))var o=d[r](t,r,e,"prop",null,s);if(o instanceof Error&&!(o.message in h)){h[o.message]=!0;a(n)}}},getValue:function(e){return e.valueLink?(o(e),e.valueLink.value):e.value},getChecked:function(e){return e.checkedLink?(i(e),e.checkedLink.value):e.checked},executeOnChange:function(e,t){return e.valueLink?(o(e),e.valueLink.requestChange(t.target.value)):e.checkedLink?(i(e),e.checkedLink.requestChange(t.target.checked)):e.onChange?e.onChange.call(void 0,t):void 0}};e.exports=m},function(e,t,n){"use strict";var r=n(2),o=(n(0),!1),i={replaceNodeWithMarkup:null,processChildrenUpdates:null,injection:{injectEnvironment:function(e){o&&r("104"),i.replaceNodeWithMarkup=e.replaceNodeWithMarkup,i.processChildrenUpdates=e.processChildrenUpdates,o=!0}}};e.exports=i},function(e,t,n){"use strict";function r(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var a=0;a<n.length;a++)if(!i.call(t,n[a])||!r(e[n[a]],t[n[a]]))return!1;return!0}var i=Object.prototype.hasOwnProperty;e.exports=o},function(e,t,n){"use strict";function r(e,t){var n=null===e||!1===e,r=null===t||!1===t;if(n||r)return n===r;var o=typeof e,i=typeof t;return"string"===o||"number"===o?"string"===i||"number"===i:"object"===i&&e.type===t.type&&e.key===t.key}e.exports=r},function(e,t,n){"use strict";function r(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}function o(e){var t=/(=0|=2)/g,n={"=0":"=","=2":":"};return(""+("."===e[0]&&"$"===e[1]?e.substring(2):e.substring(1))).replace(t,function(e){return n[e]})}var i={escape:r,unescape:o};e.exports=i},function(e,t,n){"use strict";function r(e){s.enqueueUpdate(e)}function o(e){var t=typeof e;if("object"!==t)return t;var n=e.constructor&&e.constructor.name||t,r=Object.keys(e);return r.length>0&&r.length<20?n+" (keys: "+r.join(", ")+")":n}function i(e,t){var n=u.get(e);if(!n){return null}return n}var a=n(2),u=(n(10),n(22)),s=(n(7),n(8)),c=(n(0),n(1),{isMounted:function(e){var t=u.get(e);return!!t&&!!t._renderedComponent},enqueueCallback:function(e,t,n){c.validateCallback(t,n);var o=i(e);if(!o)return null;o._pendingCallbacks?o._pendingCallbacks.push(t):o._pendingCallbacks=[t],r(o)},enqueueCallbackInternal:function(e,t){e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],r(e)},enqueueForceUpdate:function(e){var t=i(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,r(t))},enqueueReplaceState:function(e,t,n){var o=i(e,"replaceState");o&&(o._pendingStateQueue=[t],o._pendingReplaceState=!0,void 0!==n&&null!==n&&(c.validateCallback(n,"replaceState"),o._pendingCallbacks?o._pendingCallbacks.push(n):o._pendingCallbacks=[n]),r(o))},enqueueSetState:function(e,t){var n=i(e,"setState");if(n){(n._pendingStateQueue||(n._pendingStateQueue=[])).push(t),r(n)}},enqueueElementInternal:function(e,t,n){e._pendingElement=t,e._context=n,r(e)},validateCallback:function(e,t){e&&"function"!==typeof e&&a("122",t,o(e))}});e.exports=c},function(e,t,n){"use strict";var r=(n(3),n(6)),o=(n(1),r);e.exports=o},function(e,t,n){"use strict";function r(e){var t,n=e.keyCode;return"charCode"in e?0===(t=e.charCode)&&13===n&&(t=13):t=n,t>=32||13===t?t:0}e.exports=r},function(e,t,n){"use strict";function r(e){if(!Object(a.a)(e)||Object(o.a)(e)!=u)return!1;var t=Object(i.a)(e);if(null===t)return!0;var n=p.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&l.call(n)==f}var o=n(195),i=n(200),a=n(202),u="[object Object]",s=Function.prototype,c=Object.prototype,l=s.toString,p=c.hasOwnProperty,f=l.call(Object);t.a=r},function(e,t,n){"use strict";function r(e){"undefined"!==typeof console&&"function"===typeof console.error&&console.error(e);try{throw new Error(e)}catch(e){}}t.a=r},function(e,t,n){var r,o;!function(){"use strict";function n(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof r;if("string"===o||"number"===o)e.push(r);else if(Array.isArray(r))e.push(n.apply(null,r));else if("object"===o)for(var a in r)i.call(r,a)&&r[a]&&e.push(a)}}return e.join(" ")}var i={}.hasOwnProperty;"undefined"!==typeof e&&e.exports?e.exports=n:(r=[],void 0!==(o=function(){return n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";function r(){}function o(e){try{return e.then}catch(e){return y=e,g}}function i(e,t){try{return e(t)}catch(e){return y=e,g}}function a(e,t,n){try{e(t,n)}catch(e){return y=e,g}}function u(e){if("object"!==typeof this)throw new TypeError("Promises must be constructed via new");if("function"!==typeof e)throw new TypeError("Promise constructor's argument is not a function");this._75=0,this._83=0,this._18=null,this._38=null,e!==r&&m(e,this)}function s(e,t,n){return new e.constructor(function(o,i){var a=new u(r);a.then(o,i),c(e,new h(t,n,a))})}function c(e,t){for(;3===e._83;)e=e._18;if(u._47&&u._47(e),0===e._83)return 0===e._75?(e._75=1,void(e._38=t)):1===e._75?(e._75=2,void(e._38=[e._38,t])):void e._38.push(t);l(e,t)}function l(e,t){v(function(){var n=1===e._83?t.onFulfilled:t.onRejected;if(null===n)return void(1===e._83?p(t.promise,e._18):f(t.promise,e._18));var r=i(n,e._18);r===g?f(t.promise,y):p(t.promise,r)})}function p(e,t){if(t===e)return f(e,new TypeError("A promise cannot be resolved with itself."));if(t&&("object"===typeof t||"function"===typeof t)){var n=o(t);if(n===g)return f(e,y);if(n===e.then&&t instanceof u)return e._83=3,e._18=t,void d(e);if("function"===typeof n)return void m(n.bind(t),e)}e._83=1,e._18=t,d(e)}function f(e,t){e._83=2,e._18=t,u._71&&u._71(e,t),d(e)}function d(e){if(1===e._75&&(c(e,e._38),e._38=null),2===e._75){for(var t=0;t<e._38.length;t++)c(e,e._38[t]);e._38=null}}function h(e,t,n){this.onFulfilled="function"===typeof e?e:null,this.onRejected="function"===typeof t?t:null,this.promise=n}function m(e,t){var n=!1,r=a(e,function(e){n||(n=!0,p(t,e))},function(e){n||(n=!0,f(t,e))});n||r!==g||(n=!0,f(t,y))}var v=n(100),y=null,g={};e.exports=u,u._47=null,u._71=null,u._44=r,u.prototype.then=function(e,t){if(this.constructor!==u)return s(this,e,t);var n=new u(r);return c(this,new h(e,t,n)),n}},function(e,t,n){"use strict";function r(e,t,n){this.props=e,this.context=t,this.refs=c,this.updater=n||s}function o(e,t,n){this.props=e,this.context=t,this.refs=c,this.updater=n||s}function i(){}var a=n(18),u=n(3),s=n(53),c=(n(54),n(23));n(0),n(104);r.prototype.isReactComponent={},r.prototype.setState=function(e,t){"object"!==typeof e&&"function"!==typeof e&&null!=e&&a("85"),this.updater.enqueueSetState(this,e),t&&this.updater.enqueueCallback(this,t,"setState")},r.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this),e&&this.updater.enqueueCallback(this,e,"forceUpdate")};i.prototype=r.prototype,o.prototype=new i,o.prototype.constructor=o,u(o.prototype,r.prototype),o.prototype.isPureReactComponent=!0,e.exports={Component:r,PureComponent:o}},function(e,t,n){"use strict";var r=(n(1),{isMounted:function(e){return!1},enqueueCallback:function(e,t){},enqueueForceUpdate:function(e){},enqueueReplaceState:function(e,t){},enqueueSetState:function(e,t){}});e.exports=r},function(e,t,n){"use strict";var r=!1;e.exports=r},function(e,t,n){"use strict";var r="function"===typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103;e.exports=r},function(e,t,n){"use strict";var r=n(112);e.exports=function(e){return r(e,!1)}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";var r={hasCachedChildNodes:1};e.exports=r},function(e,t,n){"use strict";function r(e,t){return null==t&&o("30"),null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}var o=n(2);n(0);e.exports=r},function(e,t,n){"use strict";function r(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}e.exports=r},function(e,t,n){"use strict";function r(){return!i&&o.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}var o=n(5),i=null;e.exports=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=n(2),i=n(12),a=(n(0),function(){function e(t){r(this,e),this._callbacks=null,this._contexts=null,this._arg=t}return e.prototype.enqueue=function(e,t){this._callbacks=this._callbacks||[],this._callbacks.push(e),this._contexts=this._contexts||[],this._contexts.push(t)},e.prototype.notifyAll=function(){var e=this._callbacks,t=this._contexts,n=this._arg;if(e&&t){e.length!==t.length&&o("24"),this._callbacks=null,this._contexts=null;for(var r=0;r<e.length;r++)e[r].call(t[r],n);e.length=0,t.length=0}},e.prototype.checkpoint=function(){return this._callbacks?this._callbacks.length:0},e.prototype.rollback=function(e){this._callbacks&&this._contexts&&(this._callbacks.length=e,this._contexts.length=e)},e.prototype.reset=function(){this._callbacks=null,this._contexts=null},e.prototype.destructor=function(){this.reset()},e}());e.exports=i.addPoolingTo(a)},function(e,t,n){"use strict";var r={logTopLevelRenders:!1};e.exports=r},function(e,t,n){"use strict";function r(e){var t=e.type,n=e.nodeName;return n&&"input"===n.toLowerCase()&&("checkbox"===t||"radio"===t)}function o(e){return e._wrapperState.valueTracker}function i(e,t){e._wrapperState.valueTracker=t}function a(e){delete e._wrapperState.valueTracker}function u(e){var t;return e&&(t=r(e)?""+e.checked:e.value),t}var s=n(4),c={_getTrackerFromNode:function(e){return o(s.getInstanceFromNode(e))},track:function(e){if(!o(e)){var t=s.getNodeFromInstance(e),n=r(t)?"checked":"value",u=Object.getOwnPropertyDescriptor(t.constructor.prototype,n),c=""+t[n];t.hasOwnProperty(n)||"function"!==typeof u.get||"function"!==typeof u.set||(Object.defineProperty(t,n,{enumerable:u.enumerable,configurable:!0,get:function(){return u.get.call(this)},set:function(e){c=""+e,u.set.call(this,e)}}),i(e,{getValue:function(){return c},setValue:function(e){c=""+e},stopTracking:function(){a(e),delete t[n]}}))}},updateValueIfChanged:function(e){if(!e)return!1;var t=o(e);if(!t)return c.track(e),!0;var n=t.getValue(),r=u(s.getNodeFromInstance(e));return r!==n&&(t.setValue(r),!0)},stopTracking:function(e){var t=o(e);t&&t.stopTracking()}};e.exports=c},function(e,t,n){"use strict";function r(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!o[e.type]:"textarea"===t}var o={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};e.exports=r},function(e,t,n){"use strict";var r={currentScrollLeft:0,currentScrollTop:0,refreshScrollValues:function(e){r.currentScrollLeft=e.x,r.currentScrollTop=e.y}};e.exports=r},function(e,t,n){"use strict";var r=n(5),o=n(27),i=n(26),a=function(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t};r.canUseDOM&&("textContent"in document.documentElement||(a=function(e,t){if(3===e.nodeType)return void(e.nodeValue=t);i(e,o(t))})),e.exports=a},function(e,t,n){"use strict";function r(e){try{e.focus()}catch(e){}}e.exports=r},function(e,t,n){"use strict";function r(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var o={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},i=["Webkit","ms","Moz","O"];Object.keys(o).forEach(function(e){i.forEach(function(t){o[r(t,e)]=o[e]})});var a={background:{backgroundAttachment:!0,backgroundColor:!0,backgroundImage:!0,backgroundPositionX:!0,backgroundPositionY:!0,backgroundRepeat:!0},backgroundPosition:{backgroundPositionX:!0,backgroundPositionY:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0},outline:{outlineWidth:!0,outlineStyle:!0,outlineColor:!0}},u={isUnitlessNumber:o,shorthandPropertyExpansions:a};e.exports=u},function(e,t,n){"use strict";function r(e){return!!c.hasOwnProperty(e)||!s.hasOwnProperty(e)&&(u.test(e)?(c[e]=!0,!0):(s[e]=!0,!1))}function o(e,t){return null==t||e.hasBooleanValue&&!t||e.hasNumericValue&&isNaN(t)||e.hasPositiveNumericValue&&t<1||e.hasOverloadedBooleanValue&&!1===t}var i=n(15),a=(n(4),n(7),n(147)),u=(n(1),new RegExp("^["+i.ATTRIBUTE_NAME_START_CHAR+"]["+i.ATTRIBUTE_NAME_CHAR+"]*$")),s={},c={},l={createMarkupForID:function(e){return i.ID_ATTRIBUTE_NAME+"="+a(e)},setAttributeForID:function(e,t){e.setAttribute(i.ID_ATTRIBUTE_NAME,t)},createMarkupForRoot:function(){return i.ROOT_ATTRIBUTE_NAME+'=""'},setAttributeForRoot:function(e){e.setAttribute(i.ROOT_ATTRIBUTE_NAME,"")},createMarkupForProperty:function(e,t){var n=i.properties.hasOwnProperty(e)?i.properties[e]:null;if(n){if(o(n,t))return"";var r=n.attributeName;return n.hasBooleanValue||n.hasOverloadedBooleanValue&&!0===t?r+'=""':r+"="+a(t)}return i.isCustomAttribute(e)?null==t?"":e+"="+a(t):null},createMarkupForCustomAttribute:function(e,t){return r(e)&&null!=t?e+"="+a(t):""},setValueForProperty:function(e,t,n){var r=i.properties.hasOwnProperty(t)?i.properties[t]:null;if(r){var a=r.mutationMethod;if(a)a(e,n);else{if(o(r,n))return void this.deleteValueForProperty(e,t);if(r.mustUseProperty)e[r.propertyName]=n;else{var u=r.attributeName,s=r.attributeNamespace;s?e.setAttributeNS(s,u,""+n):r.hasBooleanValue||r.hasOverloadedBooleanValue&&!0===n?e.setAttribute(u,""):e.setAttribute(u,""+n)}}}else if(i.isCustomAttribute(t))return void l.setValueForAttribute(e,t,n)},setValueForAttribute:function(e,t,n){if(r(t)){null==n?e.removeAttribute(t):e.setAttribute(t,""+n)}},deleteValueForAttribute:function(e,t){e.removeAttribute(t)},deleteValueForProperty:function(e,t){var n=i.properties.hasOwnProperty(t)?i.properties[t]:null;if(n){var r=n.mutationMethod;if(r)r(e,void 0);else if(n.mustUseProperty){var o=n.propertyName;n.hasBooleanValue?e[o]=!1:e[o]=""}else e.removeAttribute(n.attributeName)}else i.isCustomAttribute(t)&&e.removeAttribute(t)}};e.exports=l},function(e,t,n){"use strict";function r(){if(this._rootNodeID&&this._wrapperState.pendingUpdate){this._wrapperState.pendingUpdate=!1;var e=this._currentElement.props,t=u.getValue(e);null!=t&&o(this,Boolean(e.multiple),t)}}function o(e,t,n){var r,o,i=s.getNodeFromInstance(e).options;if(t){for(r={},o=0;o<n.length;o++)r[""+n[o]]=!0;for(o=0;o<i.length;o++){var a=r.hasOwnProperty(i[o].value);i[o].selected!==a&&(i[o].selected=a)}}else{for(r=""+n,o=0;o<i.length;o++)if(i[o].value===r)return void(i[o].selected=!0);i.length&&(i[0].selected=!0)}}function i(e){var t=this._currentElement.props,n=u.executeOnChange(t,e);return this._rootNodeID&&(this._wrapperState.pendingUpdate=!0),c.asap(r,this),n}var a=n(3),u=n(40),s=n(4),c=n(8),l=(n(1),!1),p={getHostProps:function(e,t){return a({},t,{onChange:e._wrapperState.onChange,value:void 0})},mountWrapper:function(e,t){var n=u.getValue(t);e._wrapperState={pendingUpdate:!1,initialValue:null!=n?n:t.defaultValue,listeners:null,onChange:i.bind(e),wasMultiple:Boolean(t.multiple)},void 0===t.value||void 0===t.defaultValue||l||(l=!0)},getSelectValueContext:function(e){return e._wrapperState.initialValue},postUpdateWrapper:function(e){var t=e._currentElement.props;e._wrapperState.initialValue=void 0;var n=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=Boolean(t.multiple);var r=u.getValue(t);null!=r?(e._wrapperState.pendingUpdate=!1,o(e,Boolean(t.multiple),r)):n!==Boolean(t.multiple)&&(null!=t.defaultValue?o(e,Boolean(t.multiple),t.defaultValue):o(e,Boolean(t.multiple),t.multiple?[]:""))}};e.exports=p},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(l===setTimeout)return setTimeout(e,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(e,0);try{return l(e,0)}catch(t){try{return l.call(null,e,0)}catch(t){return l.call(this,e,0)}}}function i(e){if(p===clearTimeout)return clearTimeout(e);if((p===r||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function a(){m&&d&&(m=!1,d.length?h=d.concat(h):v=-1,h.length&&u())}function u(){if(!m){var e=o(a);m=!0;for(var t=h.length;t;){for(d=h,h=[];++v<t;)d&&d[v].run();v=-1,t=h.length}d=null,m=!1,i(e)}}function s(e,t){this.fun=e,this.array=t}function c(){}var l,p,f=e.exports={};!function(){try{l="function"===typeof setTimeout?setTimeout:n}catch(e){l=n}try{p="function"===typeof clearTimeout?clearTimeout:r}catch(e){p=r}}();var d,h=[],m=!1,v=-1;f.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];h.push(new s(e,t)),1!==h.length||m||o(u)},s.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=c,f.addListener=c,f.once=c,f.off=c,f.removeListener=c,f.removeAllListeners=c,f.emit=c,f.prependListener=c,f.prependOnceListener=c,f.listeners=function(e){return[]},f.binding=function(e){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(e){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},function(e,t,n){"use strict";function r(e){if(e){var t=e.getName();if(t)return" Check the render method of `"+t+"`."}return""}function o(e){return"function"===typeof e&&"undefined"!==typeof e.prototype&&"function"===typeof e.prototype.mountComponent&&"function"===typeof e.prototype.receiveComponent}function i(e,t){var n;if(null===e||!1===e)n=c.create(i);else if("object"===typeof e){var u=e,s=u.type;if("function"!==typeof s&&"string"!==typeof s){var f="";f+=r(u._owner),a("130",null==s?s:typeof s,f)}"string"===typeof u.type?n=l.createInternalComponent(u):o(u.type)?(n=new u.type(u),n.getHostNode||(n.getHostNode=n.getNativeNode)):n=new p(u)}else"string"===typeof e||"number"===typeof e?n=l.createInstanceForText(e):a("131",typeof e);return n._mountIndex=0,n._mountImage=null,n}var a=n(2),u=n(3),s=n(156),c=n(75),l=n(76),p=(n(157),n(0),n(1),function(e){this.construct(e)});u(p.prototype,s,{_instantiateReactComponent:i}),e.exports=i},function(e,t,n){"use strict";var r=n(2),o=n(13),i=(n(0),{HOST:0,COMPOSITE:1,EMPTY:2,getType:function(e){return null===e||!1===e?i.EMPTY:o.isValidElement(e)?"function"===typeof e.type?i.COMPOSITE:i.HOST:void r("26",e)}});e.exports=i},function(e,t,n){"use strict";var r,o={injectEmptyComponentFactory:function(e){r=e}},i={create:function(e){return r(e)}};i.injection=o,e.exports=i},function(e,t,n){"use strict";function r(e){return u||a("111",e.type),new u(e)}function o(e){return new s(e)}function i(e){return e instanceof s}var a=n(2),u=(n(0),null),s=null,c={injectGenericComponentClass:function(e){u=e},injectTextComponentClass:function(e){s=e}},l={createInternalComponent:r,createInstanceForText:o,isTextComponent:i,injection:c};e.exports=l},function(e,t,n){"use strict";function r(e,t){return e&&"object"===typeof e&&null!=e.key?c.escape(e.key):t.toString(36)}function o(e,t,n,i){var f=typeof e;if("undefined"!==f&&"boolean"!==f||(e=null),null===e||"string"===f||"number"===f||"object"===f&&e.$$typeof===u)return n(i,e,""===t?l+r(e,0):t),1;var d,h,m=0,v=""===t?l:t+p;if(Array.isArray(e))for(var y=0;y<e.length;y++)d=e[y],h=v+r(d,y),m+=o(d,h,n,i);else{var g=s(e);if(g){var b,_=g.call(e);if(g!==e.entries)for(var C=0;!(b=_.next()).done;)d=b.value,h=v+r(d,C++),m+=o(d,h,n,i);else for(;!(b=_.next()).done;){var w=b.value;w&&(d=w[1],h=v+c.escape(w[0])+p+r(d,0),m+=o(d,h,n,i))}}else if("object"===f){var E="",x=String(e);a("31","[object Object]"===x?"object with keys {"+Object.keys(e).join(", ")+"}":x,E)}}return m}function i(e,t,n){return null==e?0:o(e,"",t,n)}var a=n(2),u=(n(10),n(158)),s=n(159),c=(n(0),n(44)),l=(n(1),"."),p=":";e.exports=i},function(e,t,n){"use strict";function r(e){var t=Function.prototype.toString,n=Object.prototype.hasOwnProperty,r=RegExp("^"+t.call(n).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");try{var o=t.call(e);return r.test(o)}catch(e){return!1}}function o(e){var t=c(e);if(t){var n=t.childIDs;l(e),n.forEach(o)}}function i(e,t,n){return"\n    in "+(e||"Unknown")+(t?" (at "+t.fileName.replace(/^.*[\\\/]/,"")+":"+t.lineNumber+")":n?" (created by "+n+")":"")}function a(e){return null==e?"#empty":"string"===typeof e||"number"===typeof e?"#text":"string"===typeof e.type?e.type:e.type.displayName||e.type.name||"Unknown"}function u(e){var t,n=T.getDisplayName(e),r=T.getElement(e),o=T.getOwnerID(e);return o&&(t=T.getDisplayName(o)),i(n,r&&r._source,t)}var s,c,l,p,f,d,h,m=n(18),v=n(10),y=(n(0),n(1),"function"===typeof Array.from&&"function"===typeof Map&&r(Map)&&null!=Map.prototype&&"function"===typeof Map.prototype.keys&&r(Map.prototype.keys)&&"function"===typeof Set&&r(Set)&&null!=Set.prototype&&"function"===typeof Set.prototype.keys&&r(Set.prototype.keys));if(y){var g=new Map,b=new Set;s=function(e,t){g.set(e,t)},c=function(e){return g.get(e)},l=function(e){g.delete(e)},p=function(){return Array.from(g.keys())},f=function(e){b.add(e)},d=function(e){b.delete(e)},h=function(){return Array.from(b.keys())}}else{var _={},C={},w=function(e){return"."+e},E=function(e){return parseInt(e.substr(1),10)};s=function(e,t){var n=w(e);_[n]=t},c=function(e){var t=w(e);return _[t]},l=function(e){var t=w(e);delete _[t]},p=function(){return Object.keys(_).map(E)},f=function(e){var t=w(e);C[t]=!0},d=function(e){var t=w(e);delete C[t]},h=function(){return Object.keys(C).map(E)}}var x=[],T={onSetChildren:function(e,t){var n=c(e);n||m("144"),n.childIDs=t;for(var r=0;r<t.length;r++){var o=t[r],i=c(o);i||m("140"),null==i.childIDs&&"object"===typeof i.element&&null!=i.element&&m("141"),i.isMounted||m("71"),null==i.parentID&&(i.parentID=e),i.parentID!==e&&m("142",o,i.parentID,e)}},onBeforeMountComponent:function(e,t,n){s(e,{element:t,parentID:n,text:null,childIDs:[],isMounted:!1,updateCount:0})},onBeforeUpdateComponent:function(e,t){var n=c(e);n&&n.isMounted&&(n.element=t)},onMountComponent:function(e){var t=c(e);t||m("144"),t.isMounted=!0,0===t.parentID&&f(e)},onUpdateComponent:function(e){var t=c(e);t&&t.isMounted&&t.updateCount++},onUnmountComponent:function(e){var t=c(e);if(t){t.isMounted=!1;0===t.parentID&&d(e)}x.push(e)},purgeUnmountedComponents:function(){if(!T._preventPurging){for(var e=0;e<x.length;e++){o(x[e])}x.length=0}},isMounted:function(e){var t=c(e);return!!t&&t.isMounted},getCurrentStackAddendum:function(e){var t="";if(e){var n=a(e),r=e._owner;t+=i(n,e._source,r&&r.getName())}var o=v.current,u=o&&o._debugID;return t+=T.getStackAddendumByID(u)},getStackAddendumByID:function(e){for(var t="";e;)t+=u(e),e=T.getParentID(e);return t},getChildIDs:function(e){var t=c(e);return t?t.childIDs:[]},getDisplayName:function(e){var t=T.getElement(e);return t?a(t):null},getElement:function(e){var t=c(e);return t?t.element:null},getOwnerID:function(e){var t=T.getElement(e);return t&&t._owner?t._owner._debugID:null},getParentID:function(e){var t=c(e);return t?t.parentID:null},getSource:function(e){var t=c(e),n=t?t.element:null;return null!=n?n._source:null},getText:function(e){var t=T.getElement(e);return"string"===typeof t?t:"number"===typeof t?""+t:null},getUpdateCount:function(e){var t=c(e);return t?t.updateCount:0},getRootIDs:h,getRegisteredIDs:p,pushNonStandardWarningStack:function(e,t){if("function"===typeof console.reactStack){var n=[],r=v.current,o=r&&r._debugID;try{for(e&&n.push({name:o?T.getDisplayName(o):null,fileName:t?t.fileName:null,lineNumber:t?t.lineNumber:null});o;){var i=T.getElement(o),a=T.getParentID(o),u=T.getOwnerID(o),s=u?T.getDisplayName(u):null,c=i&&i._source;n.push({name:s,fileName:c?c.fileName:null,lineNumber:c?c.lineNumber:null}),o=a}}catch(e){}console.reactStack(n)}},popNonStandardWarningStack:function(){"function"===typeof console.reactStackEnd&&console.reactStackEnd()}};e.exports=T},function(e,t,n){"use strict";var r=n(6),o={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0},capture:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!0),{remove:function(){e.removeEventListener(t,n,!0)}}):{remove:r}},registerDefault:function(){}};e.exports=o},function(e,t,n){"use strict";function r(e){return i(document.documentElement,e)}var o=n(171),i=n(173),a=n(68),u=n(81),s={hasSelectionCapabilities:function(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&"text"===e.type||"textarea"===t||"true"===e.contentEditable)},getSelectionInformation:function(){var e=u();return{focusedElem:e,selectionRange:s.hasSelectionCapabilities(e)?s.getSelection(e):null}},restoreSelection:function(e){var t=u(),n=e.focusedElem,o=e.selectionRange;t!==n&&r(n)&&(s.hasSelectionCapabilities(n)&&s.setSelection(n,o),a(n))},getSelection:function(e){var t;if("selectionStart"in e)t={start:e.selectionStart,end:e.selectionEnd};else if(document.selection&&e.nodeName&&"input"===e.nodeName.toLowerCase()){var n=document.selection.createRange();n.parentElement()===e&&(t={start:-n.moveStart("character",-e.value.length),end:-n.moveEnd("character",-e.value.length)})}else t=o.getOffsets(e);return t||{start:0,end:0}},setSelection:function(e,t){var n=t.start,r=t.end;if(void 0===r&&(r=n),"selectionStart"in e)e.selectionStart=n,e.selectionEnd=Math.min(r,e.value.length);else if(document.selection&&e.nodeName&&"input"===e.nodeName.toLowerCase()){var i=e.createTextRange();i.collapse(!0),i.moveStart("character",n),i.moveEnd("character",r-n),i.select()}else o.setOffsets(e,t)}};e.exports=s},function(e,t,n){"use strict";function r(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}e.exports=r},function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;r<n;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.length?-1:n}function o(e){return e?e.nodeType===A?e.documentElement:e.firstChild:null}function i(e){return e.getAttribute&&e.getAttribute(I)||""}function a(e,t,n,r,o){var i;if(C.logTopLevelRenders){var a=e._currentElement.props.child,u=a.type;i="React mount: "+("string"===typeof u?u:u.displayName||u.name),console.time(i)}var s=x.mountComponent(e,n,null,b(e,t),o,0);i&&console.timeEnd(i),e._renderedComponent._topLevelWrapper=e,F._mountImageIntoNode(s,t,e,r,n)}function u(e,t,n,r){var o=P.ReactReconcileTransaction.getPooled(!n&&_.useCreateElement);o.perform(a,null,e,t,o,n,r),P.ReactReconcileTransaction.release(o)}function s(e,t,n){for(x.unmountComponent(e,n),t.nodeType===A&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)}function c(e){var t=o(e);if(t){var n=g.getInstanceFromNode(t);return!(!n||!n._hostParent)}}function l(e){return!(!e||e.nodeType!==R&&e.nodeType!==A&&e.nodeType!==D)}function p(e){var t=o(e),n=t&&g.getInstanceFromNode(t);return n&&!n._hostParent?n:null}function f(e){var t=p(e);return t?t._hostContainerInfo._topLevelWrapper:null}var d=n(2),h=n(17),m=n(15),v=n(13),y=n(28),g=(n(10),n(4)),b=n(188),_=n(189),C=n(63),w=n(22),E=(n(7),n(190)),x=n(16),T=n(45),P=n(8),O=n(23),k=n(73),S=(n(0),n(26)),N=n(43),I=(n(1),m.ID_ATTRIBUTE_NAME),M=m.ROOT_ATTRIBUTE_NAME,R=1,A=9,D=11,j={},U=1,L=function(){this.rootID=U++};L.prototype.isReactComponent={},L.prototype.render=function(){return this.props.child},L.isReactTopLevelWrapper=!0;var F={TopLevelWrapper:L,_instancesByReactRootID:j,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r,o){return F.scrollMonitor(r,function(){T.enqueueElementInternal(e,t,n),o&&T.enqueueCallbackInternal(e,o)}),e},_renderNewRootComponent:function(e,t,n,r){l(t)||d("37"),y.ensureScrollValueMonitoring();var o=k(e,!1);P.batchedUpdates(u,o,t,n,r);var i=o._instance.rootID;return j[i]=o,o},renderSubtreeIntoContainer:function(e,t,n,r){return null!=e&&w.has(e)||d("38"),F._renderSubtreeIntoContainer(e,t,n,r)},_renderSubtreeIntoContainer:function(e,t,n,r){T.validateCallback(r,"ReactDOM.render"),v.isValidElement(t)||d("39","string"===typeof t?" Instead of passing a string like 'div', pass React.createElement('div') or <div />.":"function"===typeof t?" Instead of passing a class like Foo, pass React.createElement(Foo) or <Foo />.":null!=t&&void 0!==t.props?" This may be caused by unintentionally loading two independent copies of React.":"");var a,u=v.createElement(L,{child:t});if(e){var s=w.get(e);a=s._processChildContext(s._context)}else a=O;var l=f(n);if(l){var p=l._currentElement,h=p.props.child;if(N(h,t)){var m=l._renderedComponent.getPublicInstance(),y=r&&function(){r.call(m)};return F._updateRootComponent(l,u,a,n,y),m}F.unmountComponentAtNode(n)}var g=o(n),b=g&&!!i(g),_=c(n),C=b&&!l&&!_,E=F._renderNewRootComponent(u,n,C,a)._renderedComponent.getPublicInstance();return r&&r.call(E),E},render:function(e,t,n){return F._renderSubtreeIntoContainer(null,e,t,n)},unmountComponentAtNode:function(e){l(e)||d("40");var t=f(e);if(!t){c(e),1===e.nodeType&&e.hasAttribute(M);return!1}return delete j[t._instance.rootID],P.batchedUpdates(s,t,e,!1),!0},_mountImageIntoNode:function(e,t,n,i,a){if(l(t)||d("41"),i){var u=o(t);if(E.canReuseMarkup(e,u))return void g.precacheNode(n,u);var s=u.getAttribute(E.CHECKSUM_ATTR_NAME);u.removeAttribute(E.CHECKSUM_ATTR_NAME);var c=u.outerHTML;u.setAttribute(E.CHECKSUM_ATTR_NAME,s);var p=e,f=r(p,c),m=" (client) "+p.substring(f-20,f+20)+"\n (server) "+c.substring(f-20,f+20);t.nodeType===A&&d("42",m)}if(t.nodeType===A&&d("43"),a.useCreateElement){for(;t.lastChild;)t.removeChild(t.lastChild);h.insertTreeBefore(t,e,null)}else S(t,e),g.precacheNode(n,t.firstChild)}};e.exports=F},function(e,t,n){"use strict";function r(e){for(var t;(t=e._renderedNodeType)===o.COMPOSITE;)e=e._renderedComponent;return t===o.HOST?e._renderedComponent:t===o.EMPTY?null:void 0}var o=n(74);e.exports=r},function(e,t,n){"use strict";function r(e,t,n){function i(){y===v&&(y=v.slice())}function s(){return m}function c(e){if("function"!==typeof e)throw new Error("Expected listener to be a function.");var t=!0;return i(),y.push(e),function(){if(t){t=!1,i();var n=y.indexOf(e);y.splice(n,1)}}}function l(e){if(!Object(o.a)(e))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if("undefined"===typeof e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(g)throw new Error("Reducers may not dispatch actions.");try{g=!0,m=h(m,e)}finally{g=!1}for(var t=v=y,n=0;n<t.length;n++){(0,t[n])()}return e}function p(e){if("function"!==typeof e)throw new Error("Expected the nextReducer to be a function.");h=e,l({type:u.INIT})}function f(){var e,t=c;return e={subscribe:function(e){function n(){e.next&&e.next(s())}if("object"!==typeof e)throw new TypeError("Expected the observer to be an object.");return n(),{unsubscribe:t(n)}}},e[a.a]=function(){return this},e}var d;if("function"===typeof t&&"undefined"===typeof n&&(n=t,t=void 0),"undefined"!==typeof n){if("function"!==typeof n)throw new Error("Expected the enhancer to be a function.");return n(r)(e,t)}if("function"!==typeof e)throw new Error("Expected the reducer to be a function.");var h=e,m=t,v=[],y=v,g=!1;return l({type:u.INIT}),d={dispatch:l,subscribe:c,getState:s,replaceReducer:p},d[a.a]=f,d}n.d(t,"a",function(){return u}),t.b=r;var o=n(48),i=n(203),a=n.n(i),u={INIT:"@@redux/INIT"}},function(e,t,n){"use strict";var r=n(196),o=r.a.Symbol;t.a=o},function(e,t,n){"use strict"},function(e,t,n){"use strict";function r(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce(function(e,t){return function(){return e(t.apply(void 0,arguments))}})}t.a=r},function(e,t,n){"use strict";var r=n(210),o=(n(91),n(215));n.d(t,"a",function(){return r.a}),n.d(t,"b",function(){return o.a})},function(e,t,n){e.exports=n(211)()},function(e,t,n){"use strict";n.d(t,"b",function(){return i}),n.d(t,"a",function(){return a});var r=n(89),o=n.n(r),i=o.a.shape({trySubscribe:o.a.func.isRequired,tryUnsubscribe:o.a.func.isRequired,notifyNestedSubs:o.a.func.isRequired,isSubscribed:o.a.func.isRequired}),a=o.a.shape({subscribe:o.a.func.isRequired,dispatch:o.a.func.isRequired,getState:o.a.func.isRequired})},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function i(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function u(){}function s(e,t){var n={run:function(r){try{var o=e(t.getState(),r);(o!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=o,n.error=null)}catch(e){n.shouldComponentUpdate=!0,n.error=e}}};return n}function c(e){var t,n,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},l=c.getDisplayName,f=void 0===l?function(e){return"ConnectAdvanced("+e+")"}:l,_=c.methodName,C=void 0===_?"connectAdvanced":_,w=c.renderCountProp,E=void 0===w?void 0:w,x=c.shouldHandleStateChanges,T=void 0===x||x,P=c.storeKey,O=void 0===P?"store":P,k=c.withRef,S=void 0!==k&&k,N=a(c,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef"]),I=O+"Subscription",M=g++,R=(t={},t[O]=v.a,t[I]=v.b,t),A=(n={},n[I]=v.b,n);return function(t){d()("function"==typeof t,"You must pass a component to the function returned by connect. Instead received "+JSON.stringify(t));var n=t.displayName||t.name||"Component",a=f(n),c=y({},N,{getDisplayName:f,methodName:C,renderCountProp:E,shouldHandleStateChanges:T,storeKey:O,withRef:S,displayName:a,wrappedComponentName:n,WrappedComponent:t}),l=function(n){function l(e,t){r(this,l);var i=o(this,n.call(this,e,t));return i.version=M,i.state={},i.renderCount=0,i.store=e[O]||t[O],i.propsMode=Boolean(e[O]),i.setWrappedInstance=i.setWrappedInstance.bind(i),d()(i.store,'Could not find "'+O+'" in either the context or props of "'+a+'". Either wrap the root component in a <Provider>, or explicitly pass "'+O+'" as a prop to "'+a+'".'),i.initSelector(),i.initSubscription(),i}return i(l,n),l.prototype.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return e={},e[I]=t||this.context[I],e},l.prototype.componentDidMount=function(){T&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},l.prototype.componentWillReceiveProps=function(e){this.selector.run(e)},l.prototype.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},l.prototype.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=u,this.store=null,this.selector.run=u,this.selector.shouldComponentUpdate=!1},l.prototype.getWrappedInstance=function(){return d()(S,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+C+"() call."),this.wrappedInstance},l.prototype.setWrappedInstance=function(e){this.wrappedInstance=e},l.prototype.initSelector=function(){var t=e(this.store.dispatch,c);this.selector=s(t,this.store),this.selector.run(this.props)},l.prototype.initSubscription=function(){if(T){var e=(this.propsMode?this.props:this.context)[I];this.subscription=new m.a(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},l.prototype.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(b)):this.notifyNestedSubs()},l.prototype.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},l.prototype.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},l.prototype.addExtraProps=function(e){if(!S&&!E&&(!this.propsMode||!this.subscription))return e;var t=y({},e);return S&&(t.ref=this.setWrappedInstance),E&&(t[E]=this.renderCount++),this.propsMode&&this.subscription&&(t[I]=this.subscription),t},l.prototype.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return Object(h.createElement)(t,this.addExtraProps(e.props))},l}(h.Component);return l.WrappedComponent=t,l.displayName=a,l.childContextTypes=A,l.contextTypes=R,l.propTypes=R,p()(l,t)}}t.a=c;var l=n(212),p=n.n(l),f=n(213),d=n.n(f),h=n(9),m=(n.n(h),n(214)),v=n(90),y=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},g=0,b={}},function(e,t,n){"use strict";function r(e){return function(t,n){function r(){return o}var o=e(t,n);return r.dependsOnOwnProps=!1,r}}function o(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function i(e,t){return function(t,n){var r=(n.displayName,function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e)});return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=o(e);var i=r(t,n);return"function"===typeof i&&(r.mapToProps=i,r.dependsOnOwnProps=o(i),i=r(t,n)),i},r}}t.a=r,t.b=i;n(93)},function(e,t,n){"use strict";n(48),n(49)},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function i(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(9),u=n.n(a),s=n(50),c=n.n(s),l=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),p=function(e){function t(){var e,n,i,a;r(this,t);for(var u=arguments.length,s=Array(u),c=0;c<u;c++)s[c]=arguments[c];return n=i=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(s))),i.state={text:i.props.text||""},i.handleSubmit=function(e){var t=e.target.value.trim();13===e.which&&(i.props.onSave(t),i.props.newTodo&&i.setState({text:""}))},i.handleChange=function(e){i.setState({text:e.target.value})},i.handleBlur=function(e){i.props.newTodo||i.props.onSave(e.target.value)},a=n,o(i,a)}return i(t,e),l(t,[{key:"render",value:function(){return u.a.createElement("input",{className:c()({edit:this.props.editing,"new-todo":this.props.newTodo}),type:"text",placeholder:this.props.placeholder,autoFocus:"true",value:this.state.text,onBlur:this.handleBlur,onChange:this.handleChange,onKeyDown:this.handleSubmit})}}]),t}(a.Component);p.propTypes={onSave:a.PropTypes.func.isRequired,text:a.PropTypes.string,placeholder:a.PropTypes.string,editing:a.PropTypes.bool,newTodo:a.PropTypes.bool},t.a=p},function(e,t,n){"use strict";n.d(t,"b",function(){return r}),n.d(t,"c",function(){return o}),n.d(t,"a",function(){return i});var r="show_all",o="show_completed",i="show_active"},function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"e",function(){return o}),n.d(t,"f",function(){return i}),n.d(t,"d",function(){return a}),n.d(t,"c",function(){return u}),n.d(t,"b",function(){return s});var r="ADD_TODO",o="DELETE_TODO",i="EDIT_TODO",a="COMPLETE_TODO",u="COMPLETE_ALL",s="CLEAR_COMPLETED"},function(e,t,n){n(98),e.exports=n(103)},function(e,t,n){"use strict";"undefined"===typeof Promise&&(n(99).enable(),window.Promise=n(101)),n(102),Object.assign=n(3)},function(e,t,n){"use strict";function r(){c=!1,u._47=null,u._71=null}function o(e){function t(t){(e.allRejections||a(p[t].error,e.whitelist||s))&&(p[t].displayId=l++,e.onUnhandled?(p[t].logged=!0,e.onUnhandled(p[t].displayId,p[t].error)):(p[t].logged=!0,i(p[t].displayId,p[t].error)))}function n(t){p[t].logged&&(e.onHandled?e.onHandled(p[t].displayId,p[t].error):p[t].onUnhandled||(console.warn("Promise Rejection Handled (id: "+p[t].displayId+"):"),console.warn('  This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id '+p[t].displayId+".")))}e=e||{},c&&r(),c=!0;var o=0,l=0,p={};u._47=function(e){2===e._83&&p[e._56]&&(p[e._56].logged?n(e._56):clearTimeout(p[e._56].timeout),delete p[e._56])},u._71=function(e,n){0===e._75&&(e._56=o++,p[e._56]={displayId:null,error:n,timeout:setTimeout(t.bind(null,e._56),a(n,s)?100:2e3),logged:!1})}}function i(e,t){console.warn("Possible Unhandled Promise Rejection (id: "+e+"):"),((t&&(t.stack||t))+"").split("\n").forEach(function(e){console.warn("  "+e)})}function a(e,t){return t.some(function(t){return e instanceof t})}var u=n(51),s=[ReferenceError,TypeError,RangeError],c=!1;t.disable=r,t.enable=o},function(e,t,n){"use strict";(function(t){function n(e){a.length||(i(),u=!0),a[a.length]=e}function r(){for(;s<a.length;){var e=s;if(s+=1,a[e].call(),s>c){for(var t=0,n=a.length-s;t<n;t++)a[t]=a[t+s];a.length-=s,s=0}}a.length=0,s=0,u=!1}function o(e){return function(){function t(){clearTimeout(n),clearInterval(r),e()}var n=setTimeout(t,0),r=setInterval(t,50)}}e.exports=n;var i,a=[],u=!1,s=0,c=1024,l="undefined"!==typeof t?t:self,p=l.MutationObserver||l.WebKitMutationObserver;i="function"===typeof p?function(e){var t=1,n=new p(e),r=document.createTextNode("");return n.observe(r,{characterData:!0}),function(){t=-t,r.data=t}}(r):o(r),n.requestFlush=i,n.makeRequestCallFromTimer=o}).call(t,n(30))},function(e,t,n){"use strict";function r(e){var t=new o(o._44);return t._83=1,t._18=e,t}var o=n(51);e.exports=o;var i=r(!0),a=r(!1),u=r(null),s=r(void 0),c=r(0),l=r("");o.resolve=function(e){if(e instanceof o)return e;if(null===e)return u;if(void 0===e)return s;if(!0===e)return i;if(!1===e)return a;if(0===e)return c;if(""===e)return l;if("object"===typeof e||"function"===typeof e)try{var t=e.then;if("function"===typeof t)return new o(t.bind(e))}catch(e){return new o(function(t,n){n(e)})}return r(e)},o.all=function(e){var t=Array.prototype.slice.call(e);return new o(function(e,n){function r(a,u){if(u&&("object"===typeof u||"function"===typeof u)){if(u instanceof o&&u.then===o.prototype.then){for(;3===u._83;)u=u._18;return 1===u._83?r(a,u._18):(2===u._83&&n(u._18),void u.then(function(e){r(a,e)},n))}var s=u.then;if("function"===typeof s){return void new o(s.bind(u)).then(function(e){r(a,e)},n)}}t[a]=u,0===--i&&e(t)}if(0===t.length)return e([]);for(var i=t.length,a=0;a<t.length;a++)r(a,t[a])})},o.reject=function(e){return new o(function(t,n){n(e)})},o.race=function(e){return new o(function(t,n){e.forEach(function(e){o.resolve(e).then(t,n)})})},o.prototype.catch=function(e){return this.then(null,e)}},function(e,t){!function(e){"use strict";function t(e){if("string"!==typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function n(e){return"string"!==typeof e&&(e=String(e)),e}function r(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return y.iterable&&(t[Symbol.iterator]=function(){return t}),t}function o(e){this.map={},e instanceof o?e.forEach(function(e,t){this.append(t,e)},this):Array.isArray(e)?e.forEach(function(e){this.append(e[0],e[1])},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function i(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function a(e){return new Promise(function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}})}function u(e){var t=new FileReader,n=a(t);return t.readAsArrayBuffer(e),n}function s(e){var t=new FileReader,n=a(t);return t.readAsText(e),n}function c(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}function l(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function p(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,e)if("string"===typeof e)this._bodyText=e;else if(y.blob&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(y.formData&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(y.searchParams&&URLSearchParams.prototype.isPrototypeOf(e))this._bodyText=e.toString();else if(y.arrayBuffer&&y.blob&&b(e))this._bodyArrayBuffer=l(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!y.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(e)&&!_(e))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=l(e)}else this._bodyText="";this.headers.get("content-type")||("string"===typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):y.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},y.blob&&(this.blob=function(){var e=i(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?i(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(u)}),this.text=function(){var e=i(this);if(e)return e;if(this._bodyBlob)return s(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(c(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},y.formData&&(this.formData=function(){return this.text().then(h)}),this.json=function(){return this.text().then(JSON.parse)},this}function f(e){var t=e.toUpperCase();return C.indexOf(t)>-1?t:e}function d(e,t){t=t||{};var n=t.body;if(e instanceof d){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new o(e.headers)),this.method=e.method,this.mode=e.mode,n||null==e._bodyInit||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new o(t.headers)),this.method=f(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function h(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}}),t}function m(e){var t=new o;return e.split(/\r?\n/).forEach(function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}}),t}function v(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new o(t.headers),this.url=t.url||"",this._initBody(e)}if(!e.fetch){var y={searchParams:"URLSearchParams"in e,iterable:"Symbol"in e&&"iterator"in Symbol,blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e};if(y.arrayBuffer)var g=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],b=function(e){return e&&DataView.prototype.isPrototypeOf(e)},_=ArrayBuffer.isView||function(e){return e&&g.indexOf(Object.prototype.toString.call(e))>-1};o.prototype.append=function(e,r){e=t(e),r=n(r);var o=this.map[e];this.map[e]=o?o+","+r:r},o.prototype.delete=function(e){delete this.map[t(e)]},o.prototype.get=function(e){return e=t(e),this.has(e)?this.map[e]:null},o.prototype.has=function(e){return this.map.hasOwnProperty(t(e))},o.prototype.set=function(e,r){this.map[t(e)]=n(r)},o.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},o.prototype.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),r(e)},o.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),r(e)},o.prototype.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),r(e)},y.iterable&&(o.prototype[Symbol.iterator]=o.prototype.entries);var C=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];d.prototype.clone=function(){return new d(this,{body:this._bodyInit})},p.call(d.prototype),p.call(v.prototype),v.prototype.clone=function(){return new v(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},v.error=function(){var e=new v(null,{status:0,statusText:""});return e.type="error",e};var w=[301,302,303,307,308];v.redirect=function(e,t){if(-1===w.indexOf(t))throw new RangeError("Invalid status code");return new v(null,{status:t,headers:{location:e}})},e.Headers=o,e.Request=d,e.Response=v,e.fetch=function(e,t){return new Promise(function(n,r){var o=new d(e,t),i=new XMLHttpRequest;i.onload=function(){var e={status:i.status,statusText:i.statusText,headers:m(i.getAllResponseHeaders()||"")};e.url="responseURL"in i?i.responseURL:e.headers.get("X-Request-URL");var t="response"in i?i.response:i.responseText;n(new v(t,e))},i.onerror=function(){r(new TypeError("Network request failed"))},i.ontimeout=function(){r(new TypeError("Network request failed"))},i.open(o.method,o.url,!0),"include"===o.credentials&&(i.withCredentials=!0),"responseType"in i&&y.blob&&(i.responseType="blob"),o.headers.forEach(function(e,t){i.setRequestHeader(t,e)}),i.send("undefined"===typeof o._bodyInit?null:o._bodyInit)})},e.fetch.polyfill=!0}}("undefined"!==typeof self?self:this)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(9),o=n.n(r),i=n(118),a=(n.n(i),n(29)),u=n(88),s=n(222),c=n(228),l=n(230),p=(n.n(l),Object(a.c)(c.a));Object(i.render)(o.a.createElement(u.a,{store:p},o.a.createElement(s.a,null)),document.getElementById("root"))},function(e,t,n){"use strict";var r=function(){};e.exports=r},function(e,t,n){"use strict";function r(e){return(""+e).replace(_,"$&/")}function o(e,t){this.func=e,this.context=t,this.count=0}function i(e,t,n){var r=e.func,o=e.context;r.call(o,t,e.count++)}function a(e,t,n){if(null==e)return e;var r=o.getPooled(t,n);y(e,i,r),o.release(r)}function u(e,t,n,r){this.result=e,this.keyPrefix=t,this.func=n,this.context=r,this.count=0}function s(e,t,n){var o=e.result,i=e.keyPrefix,a=e.func,u=e.context,s=a.call(u,t,e.count++);Array.isArray(s)?c(s,o,n,v.thatReturnsArgument):null!=s&&(m.isValidElement(s)&&(s=m.cloneAndReplaceKey(s,i+(!s.key||t&&t.key===s.key?"":r(s.key)+"/")+n)),o.push(s))}function c(e,t,n,o,i){var a="";null!=n&&(a=r(n)+"/");var c=u.getPooled(t,a,o,i);y(e,s,c),u.release(c)}function l(e,t,n){if(null==e)return e;var r=[];return c(e,r,null,t,n),r}function p(e,t,n){return null}function f(e,t){return y(e,p,null)}function d(e){var t=[];return c(e,t,null,v.thatReturnsArgument),t}var h=n(106),m=n(14),v=n(6),y=n(107),g=h.twoArgumentPooler,b=h.fourArgumentPooler,_=/\/+/g;o.prototype.destructor=function(){this.func=null,this.context=null,this.count=0},h.addPoolingTo(o,g),u.prototype.destructor=function(){this.result=null,this.keyPrefix=null,this.func=null,this.context=null,this.count=0},h.addPoolingTo(u,b);var C={forEach:a,map:l,mapIntoWithKeyPrefixInternal:c,count:f,toArray:d};e.exports=C},function(e,t,n){"use strict";var r=n(18),o=(n(0),function(e){var t=this;if(t.instancePool.length){var n=t.instancePool.pop();return t.call(n,e),n}return new t(e)}),i=function(e,t){var n=this;if(n.instancePool.length){var r=n.instancePool.pop();return n.call(r,e,t),r}return new n(e,t)},a=function(e,t,n){var r=this;if(r.instancePool.length){var o=r.instancePool.pop();return r.call(o,e,t,n),o}return new r(e,t,n)},u=function(e,t,n,r){var o=this;if(o.instancePool.length){var i=o.instancePool.pop();return o.call(i,e,t,n,r),i}return new o(e,t,n,r)},s=function(e){var t=this;e instanceof t||r("25"),e.destructor(),t.instancePool.length<t.poolSize&&t.instancePool.push(e)},c=o,l=function(e,t){var n=e;return n.instancePool=[],n.getPooled=t||c,n.poolSize||(n.poolSize=10),n.release=s,n},p={addPoolingTo:l,oneArgumentPooler:o,twoArgumentPooler:i,threeArgumentPooler:a,fourArgumentPooler:u};e.exports=p},function(e,t,n){"use strict";function r(e,t){return e&&"object"===typeof e&&null!=e.key?c.escape(e.key):t.toString(36)}function o(e,t,n,i){var f=typeof e;if("undefined"!==f&&"boolean"!==f||(e=null),null===e||"string"===f||"number"===f||"object"===f&&e.$$typeof===u)return n(i,e,""===t?l+r(e,0):t),1;var d,h,m=0,v=""===t?l:t+p;if(Array.isArray(e))for(var y=0;y<e.length;y++)d=e[y],h=v+r(d,y),m+=o(d,h,n,i);else{var g=s(e);if(g){var b,_=g.call(e);if(g!==e.entries)for(var C=0;!(b=_.next()).done;)d=b.value,h=v+r(d,C++),m+=o(d,h,n,i);else for(;!(b=_.next()).done;){var w=b.value;w&&(d=w[1],h=v+c.escape(w[0])+p+r(d,0),m+=o(d,h,n,i))}}else if("object"===f){var E="",x=String(e);a("31","[object Object]"===x?"object with keys {"+Object.keys(e).join(", ")+"}":x,E)}}return m}function i(e,t,n){return null==e?0:o(e,"",t,n)}var a=n(18),u=(n(10),n(55)),s=n(108),c=(n(0),n(109)),l=(n(1),"."),p=":";e.exports=i},function(e,t,n){"use strict";function r(e){var t=e&&(o&&e[o]||e[i]);if("function"===typeof t)return t}var o="function"===typeof Symbol&&Symbol.iterator,i="@@iterator";e.exports=r},function(e,t,n){"use strict";function r(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}function o(e){var t=/(=0|=2)/g,n={"=0":"=","=2":":"};return(""+("."===e[0]&&"$"===e[1]?e.substring(2):e.substring(1))).replace(t,function(e){return n[e]})}var i={escape:r,unescape:o};e.exports=i},function(e,t,n){"use strict";var r=n(14),o=r.createFactory,i={a:o("a"),abbr:o("abbr"),address:o("address"),area:o("area"),article:o("article"),aside:o("aside"),audio:o("audio"),b:o("b"),base:o("base"),bdi:o("bdi"),bdo:o("bdo"),big:o("big"),blockquote:o("blockquote"),body:o("body"),br:o("br"),button:o("button"),canvas:o("canvas"),caption:o("caption"),cite:o("cite"),code:o("code"),col:o("col"),colgroup:o("colgroup"),data:o("data"),datalist:o("datalist"),dd:o("dd"),del:o("del"),details:o("details"),dfn:o("dfn"),dialog:o("dialog"),div:o("div"),dl:o("dl"),dt:o("dt"),em:o("em"),embed:o("embed"),fieldset:o("fieldset"),figcaption:o("figcaption"),figure:o("figure"),footer:o("footer"),form:o("form"),h1:o("h1"),h2:o("h2"),h3:o("h3"),h4:o("h4"),h5:o("h5"),h6:o("h6"),head:o("head"),header:o("header"),hgroup:o("hgroup"),hr:o("hr"),html:o("html"),i:o("i"),iframe:o("iframe"),img:o("img"),input:o("input"),ins:o("ins"),kbd:o("kbd"),keygen:o("keygen"),label:o("label"),legend:o("legend"),li:o("li"),link:o("link"),main:o("main"),map:o("map"),mark:o("mark"),menu:o("menu"),menuitem:o("menuitem"),meta:o("meta"),meter:o("meter"),nav:o("nav"),noscript:o("noscript"),object:o("object"),ol:o("ol"),optgroup:o("optgroup"),option:o("option"),output:o("output"),p:o("p"),param:o("param"),picture:o("picture"),pre:o("pre"),progress:o("progress"),q:o("q"),rp:o("rp"),rt:o("rt"),ruby:o("ruby"),s:o("s"),samp:o("samp"),script:o("script"),section:o("section"),select:o("select"),small:o("small"),source:o("source"),span:o("span"),strong:o("strong"),style:o("style"),sub:o("sub"),summary:o("summary"),sup:o("sup"),table:o("table"),tbody:o("tbody"),td:o("td"),textarea:o("textarea"),tfoot:o("tfoot"),th:o("th"),thead:o("thead"),time:o("time"),title:o("title"),tr:o("tr"),track:o("track"),u:o("u"),ul:o("ul"),var:o("var"),video:o("video"),wbr:o("wbr"),circle:o("circle"),clipPath:o("clipPath"),defs:o("defs"),ellipse:o("ellipse"),g:o("g"),image:o("image"),line:o("line"),linearGradient:o("linearGradient"),mask:o("mask"),path:o("path"),pattern:o("pattern"),polygon:o("polygon"),polyline:o("polyline"),radialGradient:o("radialGradient"),rect:o("rect"),stop:o("stop"),svg:o("svg"),text:o("text"),tspan:o("tspan")};e.exports=i},function(e,t,n){"use strict";var r=n(14),o=r.isValidElement,i=n(56);e.exports=i(o)},function(e,t,n){"use strict";var r=n(6),o=n(0),i=n(1),a=n(57),u=n(113);e.exports=function(e,t){function n(e){var t=e&&(x&&e[x]||e[T]);if("function"===typeof t)return t}function s(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function c(e){this.message=e,this.stack=""}function l(e){function n(n,r,i,u,s,l,p){if(u=u||P,l=l||i,p!==a)if(t)o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");else;return null==r[i]?n?new c(null===r[i]?"The "+s+" `"+l+"` is marked as required in `"+u+"`, but its value is `null`.":"The "+s+" `"+l+"` is marked as required in `"+u+"`, but its value is `undefined`."):null:e(r,i,u,s,l)}var r=n.bind(null,!1);return r.isRequired=n.bind(null,!0),r}function p(e){function t(t,n,r,o,i,a){var u=t[n];if(_(u)!==e)return new c("Invalid "+o+" `"+i+"` of type `"+C(u)+"` supplied to `"+r+"`, expected `"+e+"`.");return null}return l(t)}function f(e){function t(t,n,r,o,i){if("function"!==typeof e)return new c("Property `"+i+"` of component `"+r+"` has invalid PropType notation inside arrayOf.");var u=t[n];if(!Array.isArray(u)){return new c("Invalid "+o+" `"+i+"` of type `"+_(u)+"` supplied to `"+r+"`, expected an array.")}for(var s=0;s<u.length;s++){var l=e(u,s,r,o,i+"["+s+"]",a);if(l instanceof Error)return l}return null}return l(t)}function d(e){function t(t,n,r,o,i){if(!(t[n]instanceof e)){var a=e.name||P;return new c("Invalid "+o+" `"+i+"` of type `"+E(t[n])+"` supplied to `"+r+"`, expected instance of `"+a+"`.")}return null}return l(t)}function h(e){function t(t,n,r,o,i){for(var a=t[n],u=0;u<e.length;u++)if(s(a,e[u]))return null;return new c("Invalid "+o+" `"+i+"` of value `"+a+"` supplied to `"+r+"`, expected one of "+JSON.stringify(e)+".")}return Array.isArray(e)?l(t):r.thatReturnsNull}function m(e){function t(t,n,r,o,i){if("function"!==typeof e)return new c("Property `"+i+"` of component `"+r+"` has invalid PropType notation inside objectOf.");var u=t[n],s=_(u);if("object"!==s)return new c("Invalid "+o+" `"+i+"` of type `"+s+"` supplied to `"+r+"`, expected an object.");for(var l in u)if(u.hasOwnProperty(l)){var p=e(u,l,r,o,i+"."+l,a);if(p instanceof Error)return p}return null}return l(t)}function v(e){function t(t,n,r,o,i){for(var u=0;u<e.length;u++){if(null==(0,e[u])(t,n,r,o,i,a))return null}return new c("Invalid "+o+" `"+i+"` supplied to `"+r+"`.")}if(!Array.isArray(e))return r.thatReturnsNull;for(var n=0;n<e.length;n++){var o=e[n];if("function"!==typeof o)return i(!1,"Invalid argument supplid to oneOfType. Expected an array of check functions, but received %s at index %s.",w(o),n),r.thatReturnsNull}return l(t)}function y(e){function t(t,n,r,o,i){var u=t[n],s=_(u);if("object"!==s)return new c("Invalid "+o+" `"+i+"` of type `"+s+"` supplied to `"+r+"`, expected `object`.");for(var l in e){var p=e[l];if(p){var f=p(u,l,r,o,i+"."+l,a);if(f)return f}}return null}return l(t)}function g(t){switch(typeof t){case"number":case"string":case"undefined":return!0;case"boolean":return!t;case"object":if(Array.isArray(t))return t.every(g);if(null===t||e(t))return!0;var r=n(t);if(!r)return!1;var o,i=r.call(t);if(r!==t.entries){for(;!(o=i.next()).done;)if(!g(o.value))return!1}else for(;!(o=i.next()).done;){var a=o.value;if(a&&!g(a[1]))return!1}return!0;default:return!1}}function b(e,t){return"symbol"===e||("Symbol"===t["@@toStringTag"]||"function"===typeof Symbol&&t instanceof Symbol)}function _(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":b(t,e)?"symbol":t}function C(e){if("undefined"===typeof e||null===e)return""+e;var t=_(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}function w(e){var t=C(e);switch(t){case"array":case"object":return"an "+t;case"boolean":case"date":case"regexp":return"a "+t;default:return t}}function E(e){return e.constructor&&e.constructor.name?e.constructor.name:P}var x="function"===typeof Symbol&&Symbol.iterator,T="@@iterator",P="<<anonymous>>",O={array:p("array"),bool:p("boolean"),func:p("function"),number:p("number"),object:p("object"),string:p("string"),symbol:p("symbol"),any:function(){return l(r.thatReturnsNull)}(),arrayOf:f,element:function(){function t(t,n,r,o,i){var a=t[n];if(!e(a)){return new c("Invalid "+o+" `"+i+"` of type `"+_(a)+"` supplied to `"+r+"`, expected a single ReactElement.")}return null}return l(t)}(),instanceOf:d,node:function(){function e(e,t,n,r,o){return g(e[t])?null:new c("Invalid "+r+" `"+o+"` supplied to `"+n+"`, expected a ReactNode.")}return l(e)}(),objectOf:m,oneOf:h,oneOfType:v,shape:y};return c.prototype=Error.prototype,O.checkPropTypes=u,O.PropTypes=O,O}},function(e,t,n){"use strict";function r(e,t,n,r,o){}e.exports=r},function(e,t,n){"use strict";e.exports="15.6.1"},function(e,t,n){"use strict";var r=n(52),o=r.Component,i=n(14),a=i.isValidElement,u=n(53),s=n(116);e.exports=s(o,a,u)},function(e,t,n){"use strict";function r(e){return e}function o(e,t,n){function o(e,t){var n=g.hasOwnProperty(t)?g[t]:null;w.hasOwnProperty(t)&&u("OVERRIDE_BASE"===n,"ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.",t),e&&u("DEFINE_MANY"===n||"DEFINE_MANY_MERGED"===n,"ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",t)}function c(e,n){if(n){u("function"!==typeof n,"ReactClass: You're attempting to use a component class or function as a mixin. Instead, just use a regular object."),u(!t(n),"ReactClass: You're attempting to use a component as a mixin. Instead, just use a regular object.");var r=e.prototype,i=r.__reactAutoBindPairs;n.hasOwnProperty(s)&&b.mixins(e,n.mixins);for(var a in n)if(n.hasOwnProperty(a)&&a!==s){var c=n[a],l=r.hasOwnProperty(a);if(o(l,a),b.hasOwnProperty(a))b[a](e,c);else{var p=g.hasOwnProperty(a),h="function"===typeof c,m=h&&!p&&!l&&!1!==n.autobind;if(m)i.push(a,c),r[a]=c;else if(l){var v=g[a];u(p&&("DEFINE_MANY_MERGED"===v||"DEFINE_MANY"===v),"ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.",v,a),"DEFINE_MANY_MERGED"===v?r[a]=f(r[a],c):"DEFINE_MANY"===v&&(r[a]=d(r[a],c))}else r[a]=c}}}else;}function l(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in b;u(!o,'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.',n);var i=n in e;u(!i,"ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",n),e[n]=r}}}function p(e,t){u(e&&t&&"object"===typeof e&&"object"===typeof t,"mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.");for(var n in t)t.hasOwnProperty(n)&&(u(void 0===e[n],"mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.",n),e[n]=t[n]);return e}function f(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);if(null==n)return r;if(null==r)return n;var o={};return p(o,n),p(o,r),o}}function d(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function h(e,t){var n=t.bind(e);return n}function m(e){for(var t=e.__reactAutoBindPairs,n=0;n<t.length;n+=2){var r=t[n],o=t[n+1];e[r]=h(e,o)}}function v(e){var t=r(function(e,r,o){this.__reactAutoBindPairs.length&&m(this),this.props=e,this.context=r,this.refs=a,this.updater=o||n,this.state=null;var i=this.getInitialState?this.getInitialState():null;u("object"===typeof i&&!Array.isArray(i),"%s.getInitialState(): must return an object or null",t.displayName||"ReactCompositeComponent"),this.state=i});t.prototype=new E,t.prototype.constructor=t,t.prototype.__reactAutoBindPairs=[],y.forEach(c.bind(null,t)),c(t,_),c(t,e),c(t,C),t.getDefaultProps&&(t.defaultProps=t.getDefaultProps()),u(t.prototype.render,"createClass(...): Class specification must implement a `render` method.");for(var o in g)t.prototype[o]||(t.prototype[o]=null);return t}var y=[],g={mixins:"DEFINE_MANY",statics:"DEFINE_MANY",propTypes:"DEFINE_MANY",contextTypes:"DEFINE_MANY",childContextTypes:"DEFINE_MANY",getDefaultProps:"DEFINE_MANY_MERGED",getInitialState:"DEFINE_MANY_MERGED",getChildContext:"DEFINE_MANY_MERGED",render:"DEFINE_ONCE",componentWillMount:"DEFINE_MANY",componentDidMount:"DEFINE_MANY",componentWillReceiveProps:"DEFINE_MANY",shouldComponentUpdate:"DEFINE_ONCE",componentWillUpdate:"DEFINE_MANY",componentDidUpdate:"DEFINE_MANY",componentWillUnmount:"DEFINE_MANY",updateComponent:"OVERRIDE_BASE"},b={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n<t.length;n++)c(e,t[n])},childContextTypes:function(e,t){e.childContextTypes=i({},e.childContextTypes,t)},contextTypes:function(e,t){e.contextTypes=i({},e.contextTypes,t)},getDefaultProps:function(e,t){e.getDefaultProps?e.getDefaultProps=f(e.getDefaultProps,t):e.getDefaultProps=t},propTypes:function(e,t){e.propTypes=i({},e.propTypes,t)},statics:function(e,t){l(e,t)},autobind:function(){}},_={componentDidMount:function(){this.__isMounted=!0}},C={componentWillUnmount:function(){this.__isMounted=!1}},w={replaceState:function(e,t){this.updater.enqueueReplaceState(this,e,t)},isMounted:function(){return!!this.__isMounted}},E=function(){};return i(E.prototype,e.prototype,w),v}var i=n(3),a=n(23),u=n(0),s="mixins";e.exports=o},function(e,t,n){"use strict";function r(e){return i.isValidElement(e)||o("143"),e}var o=n(18),i=n(14);n(0);e.exports=r},function(e,t,n){"use strict";e.exports=n(119)},function(e,t,n){"use strict";var r=n(4),o=n(120),i=n(82),a=n(16),u=n(8),s=n(192),c=n(193),l=n(83),p=n(194);n(1);o.inject();var f={findDOMNode:c,render:i.render,unmountComponentAtNode:i.unmountComponentAtNode,version:s,unstable_batchedUpdates:u.batchedUpdates,unstable_renderSubtreeIntoContainer:p};"undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ComponentTree:{getClosestInstanceFromNode:r.getClosestInstanceFromNode,getNodeFromInstance:function(e){return e._renderedComponent&&(e=l(e)),e?r.getNodeFromInstance(e):null}},Mount:i,Reconciler:a});e.exports=f},function(e,t,n){"use strict";function r(){E||(E=!0,g.EventEmitter.injectReactEventListener(y),g.EventPluginHub.injectEventPluginOrder(u),g.EventPluginUtils.injectComponentTree(f),g.EventPluginUtils.injectTreeTraversal(h),g.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:w,EnterLeaveEventPlugin:s,ChangeEventPlugin:a,SelectEventPlugin:C,BeforeInputEventPlugin:i}),g.HostComponent.injectGenericComponentClass(p),g.HostComponent.injectTextComponentClass(m),g.DOMProperty.injectDOMPropertyConfig(o),g.DOMProperty.injectDOMPropertyConfig(c),g.DOMProperty.injectDOMPropertyConfig(_),g.EmptyComponent.injectEmptyComponentFactory(function(e){return new d(e)}),g.Updates.injectReconcileTransaction(b),g.Updates.injectBatchingStrategy(v),g.Component.injectEnvironment(l))}var o=n(121),i=n(122),a=n(126),u=n(129),s=n(130),c=n(131),l=n(132),p=n(138),f=n(4),d=n(163),h=n(164),m=n(165),v=n(166),y=n(167),g=n(169),b=n(170),_=n(176),C=n(177),w=n(178),E=!1;e.exports={inject:r}},function(e,t,n){"use strict";var r={Properties:{"aria-current":0,"aria-details":0,"aria-disabled":0,"aria-hidden":0,"aria-invalid":0,"aria-keyshortcuts":0,"aria-label":0,"aria-roledescription":0,"aria-autocomplete":0,"aria-checked":0,"aria-expanded":0,"aria-haspopup":0,"aria-level":0,"aria-modal":0,"aria-multiline":0,"aria-multiselectable":0,"aria-orientation":0,"aria-placeholder":0,"aria-pressed":0,"aria-readonly":0,"aria-required":0,"aria-selected":0,"aria-sort":0,"aria-valuemax":0,"aria-valuemin":0,"aria-valuenow":0,"aria-valuetext":0,"aria-atomic":0,"aria-busy":0,"aria-live":0,"aria-relevant":0,"aria-dropeffect":0,"aria-grabbed":0,"aria-activedescendant":0,"aria-colcount":0,"aria-colindex":0,"aria-colspan":0,"aria-controls":0,"aria-describedby":0,"aria-errormessage":0,"aria-flowto":0,"aria-labelledby":0,"aria-owns":0,"aria-posinset":0,"aria-rowcount":0,"aria-rowindex":0,"aria-rowspan":0,"aria-setsize":0},DOMAttributeNames:{},DOMPropertyNames:{}};e.exports=r},function(e,t,n){"use strict";function r(e){return(e.ctrlKey||e.altKey||e.metaKey)&&!(e.ctrlKey&&e.altKey)}function o(e){switch(e){case"topCompositionStart":return T.compositionStart;case"topCompositionEnd":return T.compositionEnd;case"topCompositionUpdate":return T.compositionUpdate}}function i(e,t){return"topKeyDown"===e&&t.keyCode===g}function a(e,t){switch(e){case"topKeyUp":return-1!==y.indexOf(t.keyCode);case"topKeyDown":return t.keyCode!==g;case"topKeyPress":case"topMouseDown":case"topBlur":return!0;default:return!1}}function u(e){var t=e.detail;return"object"===typeof t&&"data"in t?t.data:null}function s(e,t,n,r){var s,c;if(b?s=o(e):O?a(e,n)&&(s=T.compositionEnd):i(e,n)&&(s=T.compositionStart),!s)return null;w&&(O||s!==T.compositionStart?s===T.compositionEnd&&O&&(c=O.getData()):O=h.getPooled(r));var l=m.getPooled(s,t,n,r);if(c)l.data=c;else{var p=u(n);null!==p&&(l.data=p)}return f.accumulateTwoPhaseDispatches(l),l}function c(e,t){switch(e){case"topCompositionEnd":return u(t);case"topKeyPress":return t.which!==E?null:(P=!0,x);case"topTextInput":var n=t.data;return n===x&&P?null:n;default:return null}}function l(e,t){if(O){if("topCompositionEnd"===e||!b&&a(e,t)){var n=O.getData();return h.release(O),O=null,n}return null}switch(e){case"topPaste":return null;case"topKeyPress":return t.which&&!r(t)?String.fromCharCode(t.which):null;case"topCompositionEnd":return w?null:t.data;default:return null}}function p(e,t,n,r){var o;if(!(o=C?c(e,n):l(e,n)))return null;var i=v.getPooled(T.beforeInput,t,n,r);return i.data=o,f.accumulateTwoPhaseDispatches(i),i}var f=n(19),d=n(5),h=n(123),m=n(124),v=n(125),y=[9,13,27,32],g=229,b=d.canUseDOM&&"CompositionEvent"in window,_=null;d.canUseDOM&&"documentMode"in document&&(_=document.documentMode);var C=d.canUseDOM&&"TextEvent"in window&&!_&&!function(){var e=window.opera;return"object"===typeof e&&"function"===typeof e.version&&parseInt(e.version(),10)<=12}(),w=d.canUseDOM&&(!b||_&&_>8&&_<=11),E=32,x=String.fromCharCode(E),T={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:["topBlur","topCompositionEnd","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:["topBlur","topCompositionStart","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:["topBlur","topCompositionUpdate","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]}},P=!1,O=null,k={eventTypes:T,extractEvents:function(e,t,n,r){return[s(e,t,n,r),p(e,t,n,r)]}};e.exports=k},function(e,t,n){"use strict";function r(e){this._root=e,this._startText=this.getText(),this._fallbackText=null}var o=n(3),i=n(12),a=n(61);o(r.prototype,{destructor:function(){this._root=null,this._startText=null,this._fallbackText=null},getText:function(){return"value"in this._root?this._root.value:this._root[a()]},getData:function(){if(this._fallbackText)return this._fallbackText;var e,t,n=this._startText,r=n.length,o=this.getText(),i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var a=r-e;for(t=1;t<=a&&n[r-t]===o[i-t];t++);var u=t>1?1-t:void 0;return this._fallbackText=o.slice(e,u),this._fallbackText}}),i.addPoolingTo(r),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(11),i={data:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return o.call(this,e,t,n,r)}var o=n(11),i={data:null};o.augmentClass(r,i),e.exports=r},function(e,t,n){"use strict";function r(e,t,n){var r=P.getPooled(I.change,e,t,n);return r.type="change",w.accumulateTwoPhaseDispatches(r),r}function o(e){var t=e.nodeName&&e.nodeName.toLowerCase();return"select"===t||"input"===t&&"file"===e.type}function i(e){var t=r(R,e,k(e));T.batchedUpdates(a,t)}function a(e){C.enqueueEvents(e),C.processEventQueue(!1)}function u(e,t){M=e,R=t,M.attachEvent("onchange",i)}function s(){M&&(M.detachEvent("onchange",i),M=null,R=null)}function c(e,t){var n=O.updateValueIfChanged(e),r=!0===t.simulated&&j._allowSimulatedPassThrough;if(n||r)return e}function l(e,t){if("topChange"===e)return t}function p(e,t,n){"topFocus"===e?(s(),u(t,n)):"topBlur"===e&&s()}function f(e,t){M=e,R=t,M.attachEvent("onpropertychange",h)}function d(){M&&(M.detachEvent("onpropertychange",h),M=null,R=null)}function h(e){"value"===e.propertyName&&c(R,e)&&i(e)}function m(e,t,n){"topFocus"===e?(d(),f(t,n)):"topBlur"===e&&d()}function v(e,t,n){if("topSelectionChange"===e||"topKeyUp"===e||"topKeyDown"===e)return c(R,n)}function y(e){var t=e.nodeName;return t&&"input"===t.toLowerCase()&&("checkbox"===e.type||"radio"===e.type)}function g(e,t,n){if("topClick"===e)return c(t,n)}function b(e,t,n){if("topInput"===e||"topChange"===e)return c(t,n)}function _(e,t){if(null!=e){var n=e._wrapperState||t._wrapperState;if(n&&n.controlled&&"number"===t.type){var r=""+t.value;t.getAttribute("value")!==r&&t.setAttribute("value",r)}}}var C=n(20),w=n(19),E=n(5),x=n(4),T=n(8),P=n(11),O=n(64),k=n(34),S=n(35),N=n(65),I={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:["topBlur","topChange","topClick","topFocus","topInput","topKeyDown","topKeyUp","topSelectionChange"]}},M=null,R=null,A=!1;E.canUseDOM&&(A=S("change")&&(!document.documentMode||document.documentMode>8));var D=!1;E.canUseDOM&&(D=S("input")&&(!("documentMode"in document)||document.documentMode>9));var j={eventTypes:I,_allowSimulatedPassThrough:!0,_isInputEventSupported:D,extractEvents:function(e,t,n,i){var a,u,s=t?x.getNodeFromInstance(t):window;if(o(s)?A?a=l:u=p:N(s)?D?a=b:(a=v,u=m):y(s)&&(a=g),a){var c=a(e,t,n);if(c){return r(c,n,i)}}u&&u(e,s,t),"topBlur"===e&&_(t,s)}};e.exports=j},function(e,t,n){"use strict";function r(e,t,n){"function"===typeof e?e(t.getPublicInstance()):i.addComponentAsRefTo(t,e,n)}function o(e,t,n){"function"===typeof e?e(null):i.removeComponentAsRefFrom(t,e,n)}var i=n(128),a={};a.attachRefs=function(e,t){if(null!==t&&"object"===typeof t){var n=t.ref;null!=n&&r(n,e,t._owner)}},a.shouldUpdateRefs=function(e,t){var n=null,r=null;null!==e&&"object"===typeof e&&(n=e.ref,r=e._owner);var o=null,i=null;return null!==t&&"object"===typeof t&&(o=t.ref,i=t._owner),n!==o||"string"===typeof o&&i!==r},a.detachRefs=function(e,t){if(null!==t&&"object"===typeof t){var n=t.ref;null!=n&&o(n,e,t._owner)}},e.exports=a},function(e,t,n){"use strict";function r(e){return!(!e||"function"!==typeof e.attachRef||"function"!==typeof e.detachRef)}var o=n(2),i=(n(0),{addComponentAsRefTo:function(e,t,n){r(n)||o("119"),n.attachRef(t,e)},removeComponentAsRefFrom:function(e,t,n){r(n)||o("120");var i=n.getPublicInstance();i&&i.refs[t]===e.getPublicInstance()&&n.detachRef(t)}});e.exports=i},function(e,t,n){"use strict";var r=["ResponderEventPlugin","SimpleEventPlugin","TapEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin"];e.exports=r},function(e,t,n){"use strict";var r=n(19),o=n(4),i=n(25),a={mouseEnter:{registrationName:"onMouseEnter",dependencies:["topMouseOut","topMouseOver"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["topMouseOut","topMouseOver"]}},u={eventTypes:a,extractEvents:function(e,t,n,u){if("topMouseOver"===e&&(n.relatedTarget||n.fromElement))return null;if("topMouseOut"!==e&&"topMouseOver"!==e)return null;var s;if(u.window===u)s=u;else{var c=u.ownerDocument;s=c?c.defaultView||c.parentWindow:window}var l,p;if("topMouseOut"===e){l=t;var f=n.relatedTarget||n.toElement;p=f?o.getClosestInstanceFromNode(f):null}else l=null,p=t;if(l===p)return null;var d=null==l?s:o.getNodeFromInstance(l),h=null==p?s:o.getNodeFromInstance(p),m=i.getPooled(a.mouseLeave,l,n,u);m.type="mouseleave",m.target=d,m.relatedTarget=h;var v=i.getPooled(a.mouseEnter,p,n,u);return v.type="mouseenter",v.target=h,v.relatedTarget=d,r.accumulateEnterLeaveDispatches(m,v,l,p),[m,v]}};e.exports=u},function(e,t,n){"use strict";var r=n(15),o=r.injection.MUST_USE_PROPERTY,i=r.injection.HAS_BOOLEAN_VALUE,a=r.injection.HAS_NUMERIC_VALUE,u=r.injection.HAS_POSITIVE_NUMERIC_VALUE,s=r.injection.HAS_OVERLOADED_BOOLEAN_VALUE,c={isCustomAttribute:RegExp.prototype.test.bind(new RegExp("^(data|aria)-["+r.ATTRIBUTE_NAME_CHAR+"]*$")),Properties:{accept:0,acceptCharset:0,accessKey:0,action:0,allowFullScreen:i,allowTransparency:0,alt:0,as:0,async:i,autoComplete:0,autoPlay:i,capture:i,cellPadding:0,cellSpacing:0,charSet:0,challenge:0,checked:o|i,cite:0,classID:0,className:0,cols:u,colSpan:0,content:0,contentEditable:0,contextMenu:0,controls:i,coords:0,crossOrigin:0,data:0,dateTime:0,default:i,defer:i,dir:0,disabled:i,download:s,draggable:0,encType:0,form:0,formAction:0,formEncType:0,formMethod:0,formNoValidate:i,formTarget:0,frameBorder:0,headers:0,height:0,hidden:i,high:0,href:0,hrefLang:0,htmlFor:0,httpEquiv:0,icon:0,id:0,inputMode:0,integrity:0,is:0,keyParams:0,keyType:0,kind:0,label:0,lang:0,list:0,loop:i,low:0,manifest:0,marginHeight:0,marginWidth:0,max:0,maxLength:0,media:0,mediaGroup:0,method:0,min:0,minLength:0,multiple:o|i,muted:o|i,name:0,nonce:0,noValidate:i,open:i,optimum:0,pattern:0,placeholder:0,playsInline:i,poster:0,preload:0,profile:0,radioGroup:0,readOnly:i,referrerPolicy:0,rel:0,required:i,reversed:i,role:0,rows:u,rowSpan:a,sandbox:0,scope:0,scoped:i,scrolling:0,seamless:i,selected:o|i,shape:0,size:u,sizes:0,span:u,spellCheck:0,src:0,srcDoc:0,srcLang:0,srcSet:0,start:a,step:0,style:0,summary:0,tabIndex:0,target:0,title:0,type:0,useMap:0,value:0,width:0,wmode:0,wrap:0,about:0,datatype:0,inlist:0,prefix:0,property:0,resource:0,typeof:0,vocab:0,autoCapitalize:0,autoCorrect:0,autoSave:0,color:0,itemProp:0,itemScope:i,itemType:0,itemID:0,itemRef:0,results:0,security:0,unselectable:0},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{},DOMMutationMethods:{value:function(e,t){if(null==t)return e.removeAttribute("value");"number"!==e.type||!1===e.hasAttribute("value")?e.setAttribute("value",""+t):e.validity&&!e.validity.badInput&&e.ownerDocument.activeElement!==e&&e.setAttribute("value",""+t)}}};e.exports=c},function(e,t,n){"use strict";var r=n(37),o=n(137),i={processChildrenUpdates:o.dangerouslyProcessChildrenUpdates,replaceNodeWithMarkup:r.dangerouslyReplaceNodeWithMarkup};e.exports=i},function(e,t,n){"use strict";var r=n(2),o=n(17),i=n(5),a=n(134),u=n(6),s=(n(0),{dangerouslyReplaceNodeWithMarkup:function(e,t){if(i.canUseDOM||r("56"),t||r("57"),"HTML"===e.nodeName&&r("58"),"string"===typeof t){var n=a(t,u)[0];e.parentNode.replaceChild(n,e)}else o.replaceChildWithTree(e,t)}});e.exports=s},function(e,t,n){"use strict";function r(e){var t=e.match(l);return t&&t[1].toLowerCase()}function o(e,t){var n=c;c||s(!1);var o=r(e),i=o&&u(o);if(i){n.innerHTML=i[1]+e+i[2];for(var l=i[0];l--;)n=n.lastChild}else n.innerHTML=e;var p=n.getElementsByTagName("script");p.length&&(t||s(!1),a(p).forEach(t));for(var f=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return f}var i=n(5),a=n(135),u=n(136),s=n(0),c=i.canUseDOM?document.createElement("div"):null,l=/^\s*<(\w+)/;e.exports=o},function(e,t,n){"use strict";function r(e){var t=e.length;if((Array.isArray(e)||"object"!==typeof e&&"function"!==typeof e)&&a(!1),"number"!==typeof t&&a(!1),0===t||t-1 in e||a(!1),"function"===typeof e.callee&&a(!1),e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(e){}for(var n=Array(t),r=0;r<t;r++)n[r]=e[r];return n}function o(e){return!!e&&("object"==typeof e||"function"==typeof e)&&"length"in e&&!("setInterval"in e)&&"number"!=typeof e.nodeType&&(Array.isArray(e)||"callee"in e||"item"in e)}function i(e){return o(e)?Array.isArray(e)?e.slice():r(e):[e]}var a=n(0);e.exports=i},function(e,t,n){"use strict";function r(e){return a||i(!1),f.hasOwnProperty(e)||(e="*"),u.hasOwnProperty(e)||(a.innerHTML="*"===e?"<link />":"<"+e+"></"+e+">",u[e]=!a.firstChild),u[e]?f[e]:null}var o=n(5),i=n(0),a=o.canUseDOM?document.createElement("div"):null,u={},s=[1,'<select multiple="true">',"</select>"],c=[1,"<table>","</table>"],l=[3,"<table><tbody><tr>","</tr></tbody></table>"],p=[1,'<svg xmlns="http://www.w3.org/2000/svg">',"</svg>"],f={"*":[1,"?<div>","</div>"],area:[1,"<map>","</map>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],legend:[1,"<fieldset>","</fieldset>"],param:[1,"<object>","</object>"],tr:[2,"<table><tbody>","</tbody></table>"],optgroup:s,option:s,caption:c,colgroup:c,tbody:c,tfoot:c,thead:c,td:l,th:l};["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"].forEach(function(e){f[e]=p,u[e]=!0}),e.exports=r},function(e,t,n){"use strict";var r=n(37),o=n(4),i={dangerouslyProcessChildrenUpdates:function(e,t){var n=o.getNodeFromInstance(e);r.processUpdates(n,t)}};e.exports=i},function(e,t,n){"use strict";function r(e){if(e){var t=e._currentElement._owner||null;if(t){var n=t.getName();if(n)return" This DOM node was rendered by `"+n+"`."}}return""}function o(e,t){t&&(X[e._tag]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&v("137",e._tag,e._currentElement._owner?" Check the render method of "+e._currentElement._owner.getName()+".":""),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&v("60"),"object"===typeof t.dangerouslySetInnerHTML&&W in t.dangerouslySetInnerHTML||v("61")),null!=t.style&&"object"!==typeof t.style&&v("62",r(e)))}function i(e,t,n,r){if(!(r instanceof A)){var o=e._hostContainerInfo,i=o._node&&o._node.nodeType===K,u=i?o._node:o._ownerDocument;B(t,u),r.getReactMountReady().enqueue(a,{inst:e,registrationName:t,listener:n})}}function a(){var e=this;x.putListener(e.inst,e.registrationName,e.listener)}function u(){var e=this;S.postMountWrapper(e)}function s(){var e=this;M.postMountWrapper(e)}function c(){var e=this;N.postMountWrapper(e)}function l(){j.track(this)}function p(){var e=this;e._rootNodeID||v("63");var t=F(e);switch(t||v("64"),e._tag){case"iframe":case"object":e._wrapperState.listeners=[P.trapBubbledEvent("topLoad","load",t)];break;case"video":case"audio":e._wrapperState.listeners=[];for(var n in Y)Y.hasOwnProperty(n)&&e._wrapperState.listeners.push(P.trapBubbledEvent(n,Y[n],t));break;case"source":e._wrapperState.listeners=[P.trapBubbledEvent("topError","error",t)];break;case"img":e._wrapperState.listeners=[P.trapBubbledEvent("topError","error",t),P.trapBubbledEvent("topLoad","load",t)];break;case"form":e._wrapperState.listeners=[P.trapBubbledEvent("topReset","reset",t),P.trapBubbledEvent("topSubmit","submit",t)];break;case"input":case"select":case"textarea":e._wrapperState.listeners=[P.trapBubbledEvent("topInvalid","invalid",t)]}}function f(){I.postUpdateWrapper(this)}function d(e){Z.call($,e)||(Q.test(e)||v("65",e),$[e]=!0)}function h(e,t){return e.indexOf("-")>=0||null!=t.is}function m(e){var t=e.type;d(t),this._currentElement=e,this._tag=t.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var v=n(2),y=n(3),g=n(139),b=n(140),_=n(17),C=n(38),w=n(15),E=n(70),x=n(20),T=n(31),P=n(28),O=n(58),k=n(4),S=n(150),N=n(152),I=n(71),M=n(153),R=(n(7),n(154)),A=n(161),D=(n(6),n(27)),j=(n(0),n(35),n(42),n(64)),U=(n(46),n(1),O),L=x.deleteListener,F=k.getNodeFromInstance,B=P.listenTo,V=T.registrationNameModules,q={string:!0,number:!0},W="__html",H={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},K=11,Y={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},z={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},G={listing:!0,pre:!0,textarea:!0},X=y({menuitem:!0},z),Q=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,$={},Z={}.hasOwnProperty,J=1;m.displayName="ReactDOMComponent",m.Mixin={mountComponent:function(e,t,n,r){this._rootNodeID=J++,this._domID=n._idCounter++,this._hostParent=t,this._hostContainerInfo=n;var i=this._currentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":this._wrapperState={listeners:null},e.getReactMountReady().enqueue(p,this);break;case"input":S.mountWrapper(this,i,t),i=S.getHostProps(this,i),e.getReactMountReady().enqueue(l,this),e.getReactMountReady().enqueue(p,this);b