[
  {
    "path": ".babelrc",
    "content": "{\n\t\"presets\": [\n\t\t[\"env\", {\n\t\t\t\"modules\": false\n\t\t}]\n\t],\n\t\"plugins\": [\"external-helpers\"]\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "# .editorconfig\nroot = true\n\n[*]\nindent_style = tab\nindent_size = 4\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "#### Your system information\n\n* VelocityJS version: \n* Browser: \n* Operating System: \n\n#### Checklist\n\n* Is this an issue with *code*?: [Yes/No]\n* Is this an issue with *documentation*?: [Yes/No]\n* Have you reproduced this in other browsers?: [Yes/No]\n* Have you checked for updates?: [Yes/No]\n* Have you checked for similar open issues?: [Yes/No]\n\n> Please remember that this is an issue tracker, support requests should be posted on StackOverflow - see CONTRIBUTING.md\n\n#### Please describe your issue in as much detail as possible:\nDescribe what you _expected_ should happen and what _did_ happen.\n\n#### Steps for reproducing this issue (code):\n\n1. \n2. \n3. \n\n#### JSFiddle example showing issue in action (code):\n\n> Go to https://jsfiddle.net/Rycochet/mqv9L27u/ - click the \"Fork\" button at the top, create the example and copy the new URL back here.\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "#### Checklist\n\n* Have you linked to relevant open issues?: [Yes/No]\n* I agree for this to be covered by the Velocity [license](https://github.com/julianshapiro/velocity/blob/master/LICENSE.md)?: [Yes/No]\n\n#### Please describe this Pull Request in as much detail as possible:\nDescribe what the _old behaviour_ was, and what the _new behaviour_ is.\n\n#### People who contributed to this change:\n"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules\n/.vscode\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "### Changelog\n\nAll notable changes to this project will be documented in this file. Dates are displayed in UTC.\n\nGenerated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).\n\n#### [v2.0.5](https://github.com/julianshapiro/velocity/compare/v2.0.3...v2.0.5)\n\n> 10 June 2018\n\n- Grab Promise in a try/catch [`#875`](https://github.com/julianshapiro/velocity/issues/875)\n- Get default duration if none set in arguments [`#874`](https://github.com/julianshapiro/velocity/issues/874)\n- Caching is disabled for scrollTop/Left so don't loop [`#866`](https://github.com/julianshapiro/velocity/issues/866)\n- Expose Velocity().promise for use in Promise.all() etc [`#868`](https://github.com/julianshapiro/velocity/issues/868)\n- Consistent getPropertyValue for width / height [`#860`](https://github.com/julianshapiro/velocity/issues/860) [`#861`](https://github.com/julianshapiro/velocity/issues/861)\n- Lock down some publicly accessible structures [`acb2bd5`](https://github.com/julianshapiro/velocity/commit/acb2bd548d9b51cbc3cec2649a2720fee3cac4f3)\n- Add Stagger and Drag options back - available for all animations [`6b961de`](https://github.com/julianshapiro/velocity/commit/6b961de4c80f723b6ef9ced13d93e06d9d426736)\n- Ensure default delay, fix \"pattern\" error, create callback for options to use [`2bdd7c1`](https://github.com/julianshapiro/velocity/commit/2bdd7c1994b3e23bd314495722ae37356ac088e2)\n\n#### [v2.0.3](https://github.com/julianshapiro/velocity/compare/v2.0.2...v2.0.3)\n\n> 27 May 2018\n\n- Refactor as ES6 to build on RollupJS [`#873`](https://github.com/julianshapiro/velocity/pull/873)\n- Polyfill for Object.assign [`#855`](https://github.com/julianshapiro/velocity/issues/855)\n- Fix package-lock.json [`9092f18`](https://github.com/julianshapiro/velocity/commit/9092f1870569fc58d7c6b087dc22c23dfa5098a0)\n- Version 2.0.3 [`a263bb8`](https://github.com/julianshapiro/velocity/commit/a263bb8489930f58aa0bf79b3a8193e9a566d857)\n- Update CDN links in readme [`c17a6a3`](https://github.com/julianshapiro/velocity/commit/c17a6a341cfaee405515bdedd5993853de2bca51)\n\n#### [v2.0.2](https://github.com/julianshapiro/velocity/compare/v2.0.1...v2.0.2)\n\n> 4 March 2018\n\n- The correct name for the requireJS package is \"velocity-animate\" [`#768`](https://github.com/julianshapiro/velocity/issues/768)\n- Fixes and updates in preparation for new sequence code [`#849`](https://github.com/julianshapiro/velocity/issues/849) [`#845`](https://github.com/julianshapiro/velocity/issues/845) [`#839`](https://github.com/julianshapiro/velocity/issues/839)\n- Make note of load order and extending other libraries [`#828`](https://github.com/julianshapiro/velocity/issues/828)\n- Shortcut for Object.create(null), Fix unit adding for some css styles and move into normalization code. [`794d15c`](https://github.com/julianshapiro/velocity/commit/794d15c977c4d8c253ae7a8a4905670d66ca63ec)\n- Version 2.0.2-beta [`30ee65e`](https://github.com/julianshapiro/velocity/commit/30ee65ec047b440842ba0e6ae75dd48223547007)\n- Highlighted the documentation for V2 [`007e977`](https://github.com/julianshapiro/velocity/commit/007e977cb1fc3025f42c16f9cf05de19b9da294d)\n\n#### [v2.0.1](https://github.com/julianshapiro/velocity/compare/v2.0.0...v2.0.1)\n\n> 11 February 2018\n\n- Version 2.0.1 [`24bf716`](https://github.com/julianshapiro/velocity/commit/24bf716fd10ef322e284d505a186f7b4f097a932)\n- Optimise \"reverse\" command, make use of built-in reverse flag [`4d39bfa`](https://github.com/julianshapiro/velocity/commit/4d39bfae9ed5c03ee8b7c06ea75275b506ff99cd)\n- Update package dependencies [`58f640c`](https://github.com/julianshapiro/velocity/commit/58f640c4ab8297b2c536132ee32dd2dad5b2beb3)\n\n### [v2.0.0](https://github.com/julianshapiro/velocity/compare/v1.5.1...v2.0.0)\n\n> 1 February 2018\n\n- Add a legacy readme, make sure we're using the latest Typescript, make sure npm's package-lock.json is included [`5182912`](https://github.com/julianshapiro/velocity/commit/5182912d93efb3b8a8b13019549d8d04546982f0)\n- Comment updates and and changes doc [`e26106a`](https://github.com/julianshapiro/velocity/commit/e26106ad6aedb0224fb322ccc6735710eef4f4fb)\n- While documenting realised that the timeStart argument to a progress callback is now too different, and that the activeCall argument was not listed in the typedef file. [`69c7e44`](https://github.com/julianshapiro/velocity/commit/69c7e44808fa8413cbf711caa83b808af47c56cb)\n\n#### [v1.5.1](https://github.com/julianshapiro/velocity/compare/v1.5.0...v1.5.1)\n\n> 6 January 2018\n\n- Fix crash on queue stop [`#830`](https://github.com/julianshapiro/velocity/pull/830)\n- Update jsDelivr links [`#799`](https://github.com/julianshapiro/velocity/pull/799)\n- Add \"window\" to access to the 'navigator' property [`#803`](https://github.com/julianshapiro/velocity/pull/803)\n- Correct the initialization of the variable \"firstTick\" in the tick handler [`#827`](https://github.com/julianshapiro/velocity/pull/827)\n- Add support for global fps limiting [`#818`](https://github.com/julianshapiro/velocity/pull/818)\n- Release 1.5.1 [`6dd28a2`](https://github.com/julianshapiro/velocity/commit/6dd28a2a6b7ec87257bb8e5b54a3355bd766e027)\n- Update tick.ts [`ed4634b`](https://github.com/julianshapiro/velocity/commit/ed4634b9241d3d76b8472af964992b5d9e4e9a15)\n- Update tick.ts [`ff6a8c5`](https://github.com/julianshapiro/velocity/commit/ff6a8c522e3cdc70cb7049d2c41a80dcffb1b08b)\n\n#### [v1.5.0](https://github.com/julianshapiro/velocity/compare/v1.4.3...v1.5.0)\n\n> 18 March 2017\n\n- Fix 2 issues breaking IE8 compatibility [`#764`](https://github.com/julianshapiro/velocity/pull/764)\n- Prevent console.log error in IE9 or less [`#756`](https://github.com/julianshapiro/velocity/pull/756)\n- IE9 sometimes checks again window which can have length 0 [`#757`](https://github.com/julianshapiro/velocity/pull/757)\n- Fix performance.now() polyfill [`#763`](https://github.com/julianshapiro/velocity/pull/763)\n- Code cleanup, add [].includes() shim, fix JSHint warnings [`4184d8e`](https://github.com/julianshapiro/velocity/commit/4184d8e757038bdc0f1e7449c847728ddbe7674b)\n- Release 1.5.0 [`9f4aacd`](https://github.com/julianshapiro/velocity/commit/9f4aacdacd9eff5a4abbd5154b8d367dcda2f047)\n- Update CDN links [`c8eb3e6`](https://github.com/julianshapiro/velocity/commit/c8eb3e6cd60f93fe251b33f5e6cd657d5973a490)\n\n#### [v1.4.3](https://github.com/julianshapiro/velocity/compare/v1.4.2...v1.4.3)\n\n> 16 February 2017\n\n- Typo cloned->clone, Fixes #749 [`#749`](https://github.com/julianshapiro/velocity/issues/749)\n- Release 1.4.3 [`8c3d003`](https://github.com/julianshapiro/velocity/commit/8c3d003e0e893597c7f91528ad2cff732f249c57)\n- Allow auto-parameters to support negative numbers (literally just missing a \"-\" in the RegExp) [`465e84c`](https://github.com/julianshapiro/velocity/commit/465e84c99cc0ab262b57ec0e491190213ba184e0)\n\n#### [v1.4.2](https://github.com/julianshapiro/velocity/compare/v1.4.1...v1.4.2)\n\n> 30 January 2017\n\n- Fix IE8 lacking hasOwnProperty on window.performance. Fixes #738 [`#739`](https://github.com/julianshapiro/velocity/pull/739)\n- IE8 can't [].slice.call(NodeList) etc, Fixes #742 [`#742`](https://github.com/julianshapiro/velocity/issues/742)\n- Release 1.4.2 [`d2cdefd`](https://github.com/julianshapiro/velocity/commit/d2cdefd8c2f7763f45e027910eed14bb091add78)\n\n#### [v1.4.1](https://github.com/julianshapiro/velocity/compare/v1.4.0...v1.4.1)\n\n> 17 December 2016\n\n- Allow .isWrappped() to handle nodeLists and more wrapped types. FORM has a length and is not wrapped, so disallow Nodes [`#723`](https://github.com/julianshapiro/velocity/issues/723)\n- Share remaining duration between all remaining parts of an effect, allow 0 duration. [`#726`](https://github.com/julianshapiro/velocity/issues/726)\n- Fix for \"0\" in an auto-parameter value [`0ee450d`](https://github.com/julianshapiro/velocity/commit/0ee450df15b8b3c248f3911733e6b40a55357c1a)\n- Release v1.4.1 [`e745208`](https://github.com/julianshapiro/velocity/commit/e745208c390a4a2d444b9441ced8115698a704bd)\n- Make version numbers link to changelog [`4b6beab`](https://github.com/julianshapiro/velocity/commit/4b6beabf20ff463de8934b7956d238ab16ff754d)\n\n#### [v1.4.0](https://github.com/julianshapiro/velocity/compare/v1.3.2...v1.4.0)\n\n> 4 December 2016\n\n- Update version numbers in README [`#731`](https://github.com/julianshapiro/velocity/pull/731)\n- Pause and Resume commands implemented and tested. [`#718`](https://github.com/julianshapiro/velocity/pull/718)\n- Select correct ticker function during initialization [`#725`](https://github.com/julianshapiro/velocity/pull/725)\n- Add pause/resume, disable global test as it breaks other tests. Cleanup test code slightly. [`#718`](https://github.com/julianshapiro/velocity/issues/718)\n- Auto parameters now accept unit changes and any colour names. [`d81e17a`](https://github.com/julianshapiro/velocity/commit/d81e17a63c6c83b72409f437eb1de29fc379a2d1)\n- Update README.md [`170c4f5`](https://github.com/julianshapiro/velocity/commit/170c4f5a70961bee175a2eafd32174a069a4ff8b)\n- v1.4.0 - CDN links TODO when updated [`139de8b`](https://github.com/julianshapiro/velocity/commit/139de8b51e7a94cf69a1005354476a61112bd832)\n\n#### [v1.3.2](https://github.com/julianshapiro/velocity/compare/v1.3.1...v1.3.2)\n\n> 21 November 2016\n\n- Fixed incorrect usage of nodeType [`#720`](https://github.com/julianshapiro/velocity/pull/720)\n- lost `var` definition [`#713`](https://github.com/julianshapiro/velocity/pull/713)\n- Use window.document [`#710`](https://github.com/julianshapiro/velocity/pull/710)\n- Fix typo [`#712`](https://github.com/julianshapiro/velocity/pull/712)\n- Add editorconfig. See #706 for more. [`#707`](https://github.com/julianshapiro/velocity/pull/707)\n- Improving Readme, fix #704 [`#705`](https://github.com/julianshapiro/velocity/pull/705)\n- Allow Velocity(document.querySelector(\"div\"), ...) and similar calls (not specific checking for jQuery / Zepto wrapped) [`#714`](https://github.com/julianshapiro/velocity/issues/714)\n- Add Auto-parameterised start and end values #697 [`#677`](https://github.com/julianshapiro/velocity/issues/677) [`#459`](https://github.com/julianshapiro/velocity/issues/459) [`#562`](https://github.com/julianshapiro/velocity/issues/562) [`#388`](https://github.com/julianshapiro/velocity/issues/388) [`#263`](https://github.com/julianshapiro/velocity/issues/263)\n- Allow a value function to return a forcefeeding array. [`#639`](https://github.com/julianshapiro/velocity/issues/639)\n- Ensure being and complete are called correctly for slide/fade effects [`#460`](https://github.com/julianshapiro/velocity/issues/460)\n- Don't split out *-color properties when the start and end are functions [`#660`](https://github.com/julianshapiro/velocity/issues/660)\n- Add inner / outer + Width / Height to get and set - handles box-sizing correctly [`#485`](https://github.com/julianshapiro/velocity/issues/485)\n- Whitelist \"loop\" for RegisterEffect [`#654`](https://github.com/julianshapiro/velocity/issues/654) [`#655`](https://github.com/julianshapiro/velocity/issues/655)\n- Release v1.3.2 [`fbb5540`](https://github.com/julianshapiro/velocity/commit/fbb554026a8ad2c1069a8de55f13c4930b02ecdd)\n- Fixes after #720 - more bad code that didn't work, plus optimisations and minification [`b0c6c3c`](https://github.com/julianshapiro/velocity/commit/b0c6c3c05063c4501818897b71f1c1a7737d5fb4)\n- Update CONTRIBUTING.md [`f22ec01`](https://github.com/julianshapiro/velocity/commit/f22ec01bc11e114daab7d314af2fc7478794c379)\n\n#### [v1.3.1](https://github.com/julianshapiro/velocity/compare/v1.3.0...v1.3.1)\n\n> 21 September 2016\n\n- Add hasOwnProperty() checks for badly extended Object prototype [`#541`](https://github.com/julianshapiro/velocity/issues/541)\n- Update README.md [`631232f`](https://github.com/julianshapiro/velocity/commit/631232f892591d0e11a7130058505561d886bd84)\n- Release v1.3.1 [`e4bc3f1`](https://github.com/julianshapiro/velocity/commit/e4bc3f1010ce78482f85288e66080a4f8e968476)\n- Somehow missed updating the version numbers [`9731478`](https://github.com/julianshapiro/velocity/commit/9731478e101db5d6ac8b74910b993176dfaff7ce)\n\n#### [v1.3.0](https://github.com/julianshapiro/velocity/compare/v1.2.3...v1.3.0)\n\n> 13 August 2016\n\n- Fix durations set to 0 being ignored with Velocity UI [`#483`](https://github.com/julianshapiro/velocity/pull/483)\n- Fix animateParentHeight height calc when border-box [`#504`](https://github.com/julianshapiro/velocity/pull/504)\n- Update README.md [`#615`](https://github.com/julianshapiro/velocity/pull/615)\n- Fix severe hangs in tick() when overflowing 10,000 call compaction limit [`#523`](https://github.com/julianshapiro/velocity/pull/523)\n- forgot to bump actual version to 1.2.3 [`#600`](https://github.com/julianshapiro/velocity/pull/600)\n- Remove jQuery dependency from package.json and bower.json  [`#618`](https://github.com/julianshapiro/velocity/pull/618)\n- Cleanup cache properly [`#646`](https://github.com/julianshapiro/velocity/pull/646)\n- Correctly handle \"html style\" property names [`#666`](https://github.com/julianshapiro/velocity/pull/666)\n- Fix to Issue #675 [`#676`](https://github.com/julianshapiro/velocity/pull/676)\n- Potential fix for: Uncaught TypeError: Cannot read property 'tweensCo… [`#690`](https://github.com/julianshapiro/velocity/pull/690)\n- Code cleanup (formatting and semi-colon use) [`efe5795`](https://github.com/julianshapiro/velocity/commit/efe57951d9a6d20d32358a02c52027b55f3dacbb)\n- Add Gruntfile, strict mode, fixes for jshint - shouldn't break anything, but test properly [`c3b9f01`](https://github.com/julianshapiro/velocity/commit/c3b9f017b30e1979f7a4892c52625034b3f36f41)\n- Allow infinite loop on counterclockwise rotateZ and any 360 degree loop [`64c8f1e`](https://github.com/julianshapiro/velocity/commit/64c8f1e1fa69df2275650dbb89934574e9f1be60)\n\n#### [v1.2.3](https://github.com/julianshapiro/velocity/compare/v1.2.2...v1.2.3)\n\n> 26 September 2015\n\n- Fix BrowserStack link. [`#472`](https://github.com/julianshapiro/velocity/pull/472)\n- \"finishAll\" functionality [`d9cd60b`](https://github.com/julianshapiro/velocity/commit/d9cd60bc0c026adff6303869934bb58fc832e82f)\n- Merging/building finishAll & versions bump [`f28c610`](https://github.com/julianshapiro/velocity/commit/f28c610da721048abee0be4f88a5d32d71ae8ea4)\n- Update README.md [`2a952e2`](https://github.com/julianshapiro/velocity/commit/2a952e2201f0373147780e50ae446bc42ea541c5)\n\n#### [v1.2.2](https://github.com/julianshapiro/velocity/compare/v1.2.1...v1.2.2)\n\n> 17 February 2015\n\n- UI Pack Fixes [`#413`](https://github.com/julianshapiro/velocity/issues/413) [`#421`](https://github.com/julianshapiro/velocity/issues/421) [`#435`](https://github.com/julianshapiro/velocity/issues/435) [`#415`](https://github.com/julianshapiro/velocity/issues/415) [`#407`](https://github.com/julianshapiro/velocity/issues/407)\n- 5.0.3: Fix for e/p/o shorthands [`#410`](https://github.com/julianshapiro/velocity/issues/410)\n- publishing velocity tests [`cc07cbd`](https://github.com/julianshapiro/velocity/commit/cc07cbdd05ef6bf2b8c91b5a9c093a391e8d0ef8)\n- Update README.md [`69e5793`](https://github.com/julianshapiro/velocity/commit/69e579357ebdad864790e89ba0ee5af87b70be99)\n- Update README.md [`0b701fe`](https://github.com/julianshapiro/velocity/commit/0b701fe0b218b787b7e677b4aa790c015f572eac)\n\n#### [v1.2.1](https://github.com/julianshapiro/velocity/compare/v1.2.0...v1.2.1)\n\n> 5 January 2015\n\n- 5.0.2: Fix for E/P/O shorthands. [`2fd2efb`](https://github.com/julianshapiro/velocity/commit/2fd2efb5de95570d9d5797b2d21f8c5e026e1af6)\n- Update README.md [`c412909`](https://github.com/julianshapiro/velocity/commit/c412909952428758e820b985495b4220fda65129)\n- Update README.md [`cda7496`](https://github.com/julianshapiro/velocity/commit/cda7496818c793cbfc15797d7dee333323f6ef8f)\n\n#### [v1.2.0](https://github.com/julianshapiro/velocity/compare/v1.1.0...v1.2.0)\n\n> 5 January 2015\n\n- Allow any version of jquery, don't need to specify github repo [`#338`](https://github.com/julianshapiro/velocity/pull/338)\n- 1.2.0 [`#293`](https://github.com/julianshapiro/velocity/issues/293) [`#368`](https://github.com/julianshapiro/velocity/issues/368) [`#396`](https://github.com/julianshapiro/velocity/issues/396) [`#343`](https://github.com/julianshapiro/velocity/issues/343) [`#321`](https://github.com/julianshapiro/velocity/issues/321) [`#352`](https://github.com/julianshapiro/velocity/issues/352) [`#317`](https://github.com/julianshapiro/velocity/issues/317) [`#324`](https://github.com/julianshapiro/velocity/issues/324) [`#371`](https://github.com/julianshapiro/velocity/issues/371)\n- Update README.md [`79821c8`](https://github.com/julianshapiro/velocity/commit/79821c8ac8a34daddaa65bdf9c482348d39ef892)\n- Update README.md [`279b340`](https://github.com/julianshapiro/velocity/commit/279b340f3536b8ae46431ed21848887d8f42f4c5)\n- Update README.md [`e8f1121`](https://github.com/julianshapiro/velocity/commit/e8f11212af378ecd2351abbc3087d6f72cd210ee)\n\n#### [v1.1.0](https://github.com/julianshapiro/velocity/compare/v1.0.0...v1.1.0)\n\n> 18 September 2014\n\n- 5.0.0 [`#288`](https://github.com/julianshapiro/velocity/issues/288)\n- 1.1.0 [`#292`](https://github.com/julianshapiro/velocity/issues/292) [`#285`](https://github.com/julianshapiro/velocity/issues/285) [`#275`](https://github.com/julianshapiro/velocity/issues/275) [`#299`](https://github.com/julianshapiro/velocity/issues/299)\n- 5.0.0 [`#248`](https://github.com/julianshapiro/velocity/issues/248) [`#296`](https://github.com/julianshapiro/velocity/issues/296)\n- Update README.md [`42af632`](https://github.com/julianshapiro/velocity/commit/42af632533d7e416f10301d6a599e3872b18e221)\n- Update bower.json [`e917431`](https://github.com/julianshapiro/velocity/commit/e917431f20f96977f9c1b95488e7e90388e7d659)\n- Update package.json [`e2f1075`](https://github.com/julianshapiro/velocity/commit/e2f1075b9df469873ba9ca2d00134eddd376fa84)\n\n### [v1.0.0](https://github.com/julianshapiro/velocity/compare/v0.11.9...v1.0.0)\n\n> 28 August 2014\n\n- 4.1.4 [`#272`](https://github.com/julianshapiro/velocity/issues/272)\n- display: flex prefixing [`#273`](https://github.com/julianshapiro/velocity/issues/273)\n- Callbacks receive arrays. [`#270`](https://github.com/julianshapiro/velocity/issues/270)\n- Update README.md [`04c68ca`](https://github.com/julianshapiro/velocity/commit/04c68cab3a58eda15b2804ed63c935a8f29db493)\n- Update README.md [`a12f5a4`](https://github.com/julianshapiro/velocity/commit/a12f5a4f48a6c86d3479978d8aeb442b53f21675)\n- Update README.md [`5db45e6`](https://github.com/julianshapiro/velocity/commit/5db45e6c5d340b5d68c614ba9a26fe115d6cf6e0)\n\n#### [v0.11.9](https://github.com/julianshapiro/velocity/compare/v0.11.8...v0.11.9)\n\n> 24 August 2014\n\n- 0.11.9 [`#260`](https://github.com/julianshapiro/velocity/issues/260) [`#265`](https://github.com/julianshapiro/velocity/issues/265) [`#262`](https://github.com/julianshapiro/velocity/issues/262)\n- Add examples for requirejs/r.js projects. [`49f0ae9`](https://github.com/julianshapiro/velocity/commit/49f0ae9a92f8b5e1ab485ca541df431fb6f59228)\n- Fix AMD support. Tested with both builds, optimised and unoptimised. [`3295176`](https://github.com/julianshapiro/velocity/commit/3295176e15c0a19924c8f5d292a2d6c0e7abc289)\n- Update README.md [`e7f4004`](https://github.com/julianshapiro/velocity/commit/e7f400467af9ce9deb60d63426769c5315e4fb85)\n\n#### [v0.11.8](https://github.com/julianshapiro/velocity/compare/v0.11.7...v0.11.8)\n\n> 23 August 2014\n\n- 0.11.8 [`#257`](https://github.com/julianshapiro/velocity/issues/257) [`#260`](https://github.com/julianshapiro/velocity/issues/260) [`#184`](https://github.com/julianshapiro/velocity/issues/184) [`#262`](https://github.com/julianshapiro/velocity/issues/262)\n- Update README.md [`94885bd`](https://github.com/julianshapiro/velocity/commit/94885bdfb6403f38047e9bfcf432f0efbd9d176e)\n- Update README.md [`d9b6aa5`](https://github.com/julianshapiro/velocity/commit/d9b6aa5cd0f2f994d4a161a1aec55df39447c921)\n- Update README.md [`b8a19b2`](https://github.com/julianshapiro/velocity/commit/b8a19b23d390ef60a9c33bdb3d839db5644cbbb7)\n\n#### [v0.11.7](https://github.com/julianshapiro/velocity/compare/v0.11.6...v0.11.7)\n\n> 20 August 2014\n\n- jQuery-free public beta [`a50ef4b`](https://github.com/julianshapiro/velocity/commit/a50ef4b1af6fb6138478854a1064ff5daf4bcc85)\n- Create .gitignore [`31d3f26`](https://github.com/julianshapiro/velocity/commit/31d3f26bb7565be6d57f733c96b4c631a749bc07)\n- Update README.md [`8ed430e`](https://github.com/julianshapiro/velocity/commit/8ed430e906239ed412f242f94e98cb0607c27cfc)\n\n#### [v0.11.6](https://github.com/julianshapiro/velocity/compare/v0.11.5...v0.11.6)\n\n> 18 August 2014\n\n- Utility function w/ sequences fix [`#247`](https://github.com/julianshapiro/velocity/issues/247) [`#249`](https://github.com/julianshapiro/velocity/issues/249) [`#208`](https://github.com/julianshapiro/velocity/issues/208)\n- Update README.md [`3a8e7a4`](https://github.com/julianshapiro/velocity/commit/3a8e7a4cbedc1e4763a4f1d8f749a793e116c40a)\n- Update README.md [`052c0fe`](https://github.com/julianshapiro/velocity/commit/052c0fec21c7b8d458365f723fce3799e80d5d10)\n- Update README.md [`b2f77c1`](https://github.com/julianshapiro/velocity/commit/b2f77c1c07c2ae5a08a3b6b7fc2216f0dbc28982)\n\n#### [v0.11.5](https://github.com/julianshapiro/velocity/compare/v0.11.2...v0.11.5)\n\n> 15 August 2014\n\n- Update README.md [`#243`](https://github.com/julianshapiro/velocity/pull/243)\n- Prevent transform auto-removal [`#224`](https://github.com/julianshapiro/velocity/issues/224)\n- Bug fixes [`#232`](https://github.com/julianshapiro/velocity/issues/232) [`#238`](https://github.com/julianshapiro/velocity/issues/238) [`#239`](https://github.com/julianshapiro/velocity/issues/239) [`#237`](https://github.com/julianshapiro/velocity/issues/237) [`#246`](https://github.com/julianshapiro/velocity/issues/246)\n- Update README.md [`cb9745b`](https://github.com/julianshapiro/velocity/commit/cb9745b4c6cbfda50e68317674c1d0075daf2923)\n- Update README.md [`03109eb`](https://github.com/julianshapiro/velocity/commit/03109eb67066ea2d7a2af643f791ccaafced8c7d)\n- Update README.md [`31c42b7`](https://github.com/julianshapiro/velocity/commit/31c42b71637775908de65cdb401def98a5524251)\n\n#### [v0.11.2](https://github.com/julianshapiro/velocity/compare/v0.11.1...v0.11.2)\n\n> 12 August 2014\n\n- Update CONTRIBUTING.md [`257b81f`](https://github.com/julianshapiro/velocity/commit/257b81f7cedccf28f02e05b15992195ef17e73dc)\n- Update CONTRIBUTING.md [`d5af523`](https://github.com/julianshapiro/velocity/commit/d5af5234682a0c2cb1d9d04901a0c1a8d6e2830c)\n- Update README.md [`eb4c350`](https://github.com/julianshapiro/velocity/commit/eb4c3509a5d12d6cbf7d9ef86dc5e3d79d339a0a)\n\n#### [v0.11.1](https://github.com/julianshapiro/velocity/compare/v0.11.0...v0.11.1)\n\n> 11 August 2014\n\n- 0.11.1: Big Performance Boost [`#178`](https://github.com/julianshapiro/velocity/issues/178) [`#223`](https://github.com/julianshapiro/velocity/issues/223)\n- Update README.md [`edf8c5c`](https://github.com/julianshapiro/velocity/commit/edf8c5cdadd5185f75a213cb53957584665936eb)\n- Update README.md [`6d875c1`](https://github.com/julianshapiro/velocity/commit/6d875c13d48144f1821fb20e98fa7d87ca70dfec)\n- Update README.md [`f483765`](https://github.com/julianshapiro/velocity/commit/f48376517f604599cec076ca974122b189aa582a)\n\n#### [v0.11.0](https://github.com/julianshapiro/velocity/compare/v0.10.1...v0.11.0)\n\n> 10 August 2014\n\n- 0.11.0 [`#229`](https://github.com/julianshapiro/velocity/issues/229)\n- Future shim support [`8959193`](https://github.com/julianshapiro/velocity/commit/89591937d611901309c5835159be336e0123efee)\n- Update README.md [`1d1ec13`](https://github.com/julianshapiro/velocity/commit/1d1ec13585d46cb9a6303e257d1024acf3526a43)\n- Module loader clarification [`f926248`](https://github.com/julianshapiro/velocity/commit/f92624866f7726a5fc03379026e7f14b856b80a1)\n\n#### [v0.10.1](https://github.com/julianshapiro/velocity/compare/v0.10.0...v0.10.1)\n\n> 4 August 2014\n\n- 0.10.1 [`#215`](https://github.com/julianshapiro/velocity/issues/215)\n- Update README.md [`ce76483`](https://github.com/julianshapiro/velocity/commit/ce76483e9b7bf4568124e0e99316f63dc028fcb0)\n- Update README.md [`9f2fe91`](https://github.com/julianshapiro/velocity/commit/9f2fe91d1382169d283c5d23bc8a939b49f4c78a)\n\n#### [v0.10.0](https://github.com/julianshapiro/velocity/compare/v0.9.0...v0.10.0)\n\n> 30 July 2014\n\n- Infinite looping [`#175`](https://github.com/julianshapiro/velocity/issues/175) [`#207`](https://github.com/julianshapiro/velocity/issues/207)\n- Update README.md [`f9be38d`](https://github.com/julianshapiro/velocity/commit/f9be38d8bd03fa1a1e62cbde1fa760a8b7686b41)\n- Update README.md [`22a014f`](https://github.com/julianshapiro/velocity/commit/22a014f0e84e59afc52309b2c8ca148300158269)\n- Update README.md [`eb48d87`](https://github.com/julianshapiro/velocity/commit/eb48d87640b5a8fc422603050b807bc71e8b2ac3)\n\n#### [v0.9.0](https://github.com/julianshapiro/velocity/compare/v0.8.0...v0.9.0)\n\n> 23 July 2014\n\n- Upgrades [`#194`](https://github.com/julianshapiro/velocity/issues/194) [`#179`](https://github.com/julianshapiro/velocity/issues/179) [`#183`](https://github.com/julianshapiro/velocity/issues/183) [`#196`](https://github.com/julianshapiro/velocity/issues/196) [`#199`](https://github.com/julianshapiro/velocity/issues/199) [`#201`](https://github.com/julianshapiro/velocity/issues/201) [`#181`](https://github.com/julianshapiro/velocity/issues/181) [`#202`](https://github.com/julianshapiro/velocity/issues/202)\n- Version Update [`69e3758`](https://github.com/julianshapiro/velocity/commit/69e375896ec50ef315af5c7e9bf2252fbeacba23)\n- Update CONTRIBUTING.md [`36e9d55`](https://github.com/julianshapiro/velocity/commit/36e9d55d37200b7b70745aa2970cfacf0ee49537)\n- Update README.md [`6f403e1`](https://github.com/julianshapiro/velocity/commit/6f403e1c3b7ea7be4b3badd79976376615b35269)\n\n#### [v0.8.0](https://github.com/julianshapiro/velocity/compare/v0.7.0...v0.8.0)\n\n> 16 July 2014\n\n- 0.8.0 [`#181`](https://github.com/julianshapiro/velocity/issues/181) [`#182`](https://github.com/julianshapiro/velocity/issues/182) [`#177`](https://github.com/julianshapiro/velocity/issues/177) [`#176`](https://github.com/julianshapiro/velocity/issues/176) [`#159`](https://github.com/julianshapiro/velocity/issues/159)\n- Update README.md [`467e1f3`](https://github.com/julianshapiro/velocity/commit/467e1f31d7d8da814214eaadbf78ba43adcfbce9)\n- Update README.md [`7bbd156`](https://github.com/julianshapiro/velocity/commit/7bbd1567a9792272bf929b3343589d383ff39c40)\n- Update README.md [`ca4097c`](https://github.com/julianshapiro/velocity/commit/ca4097c2dd2c5bbb6e69803767f81e14cfc4f76d)\n\n#### [v0.7.0](https://github.com/julianshapiro/velocity/compare/v0.6.0...v0.7.0)\n\n> 13 July 2014\n\n- :animating and transform value removal [`#172`](https://github.com/julianshapiro/velocity/issues/172) [`#155`](https://github.com/julianshapiro/velocity/issues/155)\n- Ability to transition inline elements [`#173`](https://github.com/julianshapiro/velocity/issues/173)\n- Update README.md [`e88a4eb`](https://github.com/julianshapiro/velocity/commit/e88a4ebf8c007521aa789c5f32516e9ceedc5cd8)\n- Update README.md [`0e8e7b0`](https://github.com/julianshapiro/velocity/commit/0e8e7b0ea422c2f5a147e6cfc787122ffd732819)\n- Update README.md [`178de4c`](https://github.com/julianshapiro/velocity/commit/178de4c8234914765c927e95343c2c572ca129f7)\n\n#### [v0.6.0](https://github.com/julianshapiro/velocity/compare/v0.5.3...v0.6.0)\n\n> 11 July 2014\n\n- Visibility Toggling [`#9`](https://github.com/julianshapiro/velocity/issues/9) [`#164`](https://github.com/julianshapiro/velocity/issues/164) [`#163`](https://github.com/julianshapiro/velocity/issues/163) [`#162`](https://github.com/julianshapiro/velocity/issues/162)\n- Include minified files. [`#166`](https://github.com/julianshapiro/velocity/issues/166)\n- Include minified UI Pack in repo [`e172be3`](https://github.com/julianshapiro/velocity/commit/e172be326f4817cbef095fd97502eba88bb97efe)\n- Update README.md [`edb0023`](https://github.com/julianshapiro/velocity/commit/edb0023dc729c3edd46a93bef493698c97839727)\n\n#### [v0.5.3](https://github.com/julianshapiro/velocity/compare/v0.5.2...v0.5.3)\n\n> 10 July 2014\n\n- display:none w/ height & width [`#121`](https://github.com/julianshapiro/velocity/issues/121)\n- Update README.md [`600b13f`](https://github.com/julianshapiro/velocity/commit/600b13f03863351490679e7ccf26c93f95116161)\n- Update README.md [`90354a0`](https://github.com/julianshapiro/velocity/commit/90354a09a897e0c707faa614cd50022d44d97bce)\n\n#### [v0.5.2](https://github.com/julianshapiro/velocity/compare/v0.5.1...v0.5.2)\n\n> 10 July 2014\n\n- Revert \"Default display toggling\" [`160e12d`](https://github.com/julianshapiro/velocity/commit/160e12de08132dba4cd91613ef7e380d5def1004)\n- Display toggling fix [`ed5a9c3`](https://github.com/julianshapiro/velocity/commit/ed5a9c3ec9fa8eaecd18a6c34f18db232db11c27)\n- Update README.md [`745d80e`](https://github.com/julianshapiro/velocity/commit/745d80ea7c7b30ce27338c2b326da0c18c5d35ba)\n\n#### [v0.5.1](https://github.com/julianshapiro/velocity/compare/v0.5.0...v0.5.1)\n\n> 10 July 2014\n\n- Default display toggling [`#146`](https://github.com/julianshapiro/velocity/issues/146) [`#157`](https://github.com/julianshapiro/velocity/issues/157)\n- animateParentHeight Fix [`53f2d03`](https://github.com/julianshapiro/velocity/commit/53f2d03ed2e02032ab58156251eab572321d4a73)\n- Update README.md [`946ed3f`](https://github.com/julianshapiro/velocity/commit/946ed3fe7610b4d9e3d62bd19e3116c1d61d0da3)\n- Update README.md [`8c8b913`](https://github.com/julianshapiro/velocity/commit/8c8b913cb0144a21d3f78e2a9d3bd9e1cc8d15a9)\n\n#### [v0.5.0](https://github.com/julianshapiro/velocity/compare/v0.4.1...v0.5.0)\n\n> 8 July 2014\n\n- Promises Support [`#153`](https://github.com/julianshapiro/velocity/issues/153) [`#110`](https://github.com/julianshapiro/velocity/issues/110) [`#143`](https://github.com/julianshapiro/velocity/issues/143) [`#95`](https://github.com/julianshapiro/velocity/issues/95) [`#156`](https://github.com/julianshapiro/velocity/issues/156)\n- Promises Support [`8933ab4`](https://github.com/julianshapiro/velocity/commit/8933ab40e7536d5b46b9faa786b4b77ee631e84a)\n- JSON version updates [`3e1ec95`](https://github.com/julianshapiro/velocity/commit/3e1ec955349d2da172f6d1a772dc9834b64671f4)\n- Version update [`92cc9d7`](https://github.com/julianshapiro/velocity/commit/92cc9d7c499186fbc446e6a5b8cc9f25c8ad97dd)\n\n#### [v0.4.1](https://github.com/julianshapiro/velocity/compare/v0.4.0...v0.4.1)\n\n> 3 July 2014\n\n- Custom Effects + Improvements [`#132`](https://github.com/julianshapiro/velocity/issues/132) [`#129`](https://github.com/julianshapiro/velocity/issues/129) [`#94`](https://github.com/julianshapiro/velocity/issues/94) [`#136`](https://github.com/julianshapiro/velocity/issues/136)\n- Implemented Promises support [`6334862`](https://github.com/julianshapiro/velocity/commit/6334862af6c75cf5ea3e9337ac3f372cbfe92895)\n- Changed rejecting on stop with resolving [`66f521c`](https://github.com/julianshapiro/velocity/commit/66f521ca75c00d2426171c0e5a86c3c8ef462324)\n- Update README.md [`893cd9d`](https://github.com/julianshapiro/velocity/commit/893cd9d17c87df43b2aae695f57097471f615ebe)\n\n#### [v0.4.0](https://github.com/julianshapiro/velocity/compare/v0.3.0...v0.4.0)\n\n> 1 July 2014\n\n- 3D SVG Support [`#137`](https://github.com/julianshapiro/velocity/issues/137) [`#134`](https://github.com/julianshapiro/velocity/issues/134) [`#139`](https://github.com/julianshapiro/velocity/issues/139)\n- fix #134 unhandled console.log in IE [`#134`](https://github.com/julianshapiro/velocity/issues/134)\n- Comment Modifications [`#133`](https://github.com/julianshapiro/velocity/issues/133)\n- Update README.md [`4e89b84`](https://github.com/julianshapiro/velocity/commit/4e89b84029f566c13f128f6dc29702e3eec345f1)\n- Update CONTRIBUTING.md [`4df3e0a`](https://github.com/julianshapiro/velocity/commit/4df3e0a7e4c22764ea74c9212b056e64a4c06286)\n- Update CONTRIBUTING.md [`28d29f2`](https://github.com/julianshapiro/velocity/commit/28d29f282a08039c963629b0c8e74d5c829de3c0)\n\n#### [v0.3.0](https://github.com/julianshapiro/velocity/compare/v0.2.1...v0.3.0)\n\n> 28 June 2014\n\n- SVG Animation Support [`#74`](https://github.com/julianshapiro/velocity/issues/74)\n- Update README.md [`637bf59`](https://github.com/julianshapiro/velocity/commit/637bf59397e7d2c931c27ce0b46bffe070ec9286)\n- Update README.md [`56cce96`](https://github.com/julianshapiro/velocity/commit/56cce966622fb1aafaa5c417491602fadf2843f2)\n- Update README.md [`b70ac06`](https://github.com/julianshapiro/velocity/commit/b70ac064522746ed0b1f7a783f234b71ddcd4201)\n\n#### [v0.2.1](https://github.com/julianshapiro/velocity/compare/v0.2.0...v0.2.1)\n\n> 20 June 2014\n\n- Prevent errors in older jQuery versions. [`#118`](https://github.com/julianshapiro/velocity/issues/118)\n- Update README.md [`cd1da99`](https://github.com/julianshapiro/velocity/commit/cd1da99495de9de9605f1d87fc268fb2510d2bc6)\n\n#### [v0.2.0](https://github.com/julianshapiro/velocity/compare/v0.1.0...v0.2.0)\n\n> 19 June 2014\n\n- Step Easing [`#108`](https://github.com/julianshapiro/velocity/issues/108)\n- Container Check Update [`9262bc4`](https://github.com/julianshapiro/velocity/commit/9262bc4c279921efa711c963fae0f73490374760)\n- Version bump [`385af39`](https://github.com/julianshapiro/velocity/commit/385af39af218b548628019bdd05e7e8edf4cbdf1)\n- Update README.md [`71e6e00`](https://github.com/julianshapiro/velocity/commit/71e6e00c37b75e36d754fc0c783789c00d6edf21)\n\n#### [v0.1.0](https://github.com/julianshapiro/velocity/compare/v0.0.23...v0.1.0)\n\n> 15 June 2014\n\n- Immediate Stopping [`#70`](https://github.com/julianshapiro/velocity/issues/70)\n- Update README.md [`1187ad5`](https://github.com/julianshapiro/velocity/commit/1187ad515f6579833ba40f39d8396938527363f2)\n- Update README.md [`e2702f7`](https://github.com/julianshapiro/velocity/commit/e2702f73fe3a94cc1d674035d4156eba10ad3585)\n- Update README.md [`5022869`](https://github.com/julianshapiro/velocity/commit/5022869dd20ace8ffe1e45355164156ec5a77f13)\n\n#### [v0.0.23](https://github.com/julianshapiro/velocity/compare/v0.0.22...v0.0.23)\n\n> 13 June 2014\n\n- + SO link for help [`#107`](https://github.com/julianshapiro/velocity/pull/107)\n- Add option to set a custom display value on complete. [`#103`](https://github.com/julianshapiro/velocity/pull/103)\n- Closes #109. [`#109`](https://github.com/julianshapiro/velocity/issues/109)\n- Update README.md [`af5714d`](https://github.com/julianshapiro/velocity/commit/af5714def7b9c0e073464d5e7bf6c0396d144efb)\n- Update README.md [`956d75f`](https://github.com/julianshapiro/velocity/commit/956d75f869b32a6d10ae962227617f68cc7d6b98)\n- Update README.md [`420940e`](https://github.com/julianshapiro/velocity/commit/420940e5e5ea4808bc01b0c8ee4c4cdd4ceb6710)\n\n#### [v0.0.22](https://github.com/julianshapiro/velocity/compare/v0.0.21...v0.0.22)\n\n> 5 June 2014\n\n- Closes #76. [`#76`](https://github.com/julianshapiro/velocity/issues/76)\n\n#### [v0.0.21](https://github.com/julianshapiro/velocity/compare/v0.0.20...v0.0.21)\n\n> 5 June 2014\n\n- Closes #97. [`#97`](https://github.com/julianshapiro/velocity/issues/97)\n- Fixed an issue with the AMD/CommonJS definition not working when jQuery/Zepto is also used. [`73ea312`](https://github.com/julianshapiro/velocity/commit/73ea312aa85b3e2478ff754e22eb6e91a81a15af)\n- RequireJS Optimizer Fix [`1c9826d`](https://github.com/julianshapiro/velocity/commit/1c9826d57f884ab3b903c1b0f79e026858773b9d)\n- Update README.md [`7e5624b`](https://github.com/julianshapiro/velocity/commit/7e5624b683e6ef161aecc94185321ca84cdb62a7)\n\n#### [v0.0.20](https://github.com/julianshapiro/velocity/compare/v0.0.19...v0.0.20)\n\n> 3 June 2014\n\n- Closes #16. Android fixes. [`#16`](https://github.com/julianshapiro/velocity/issues/16)\n- Update README.md [`d6091c4`](https://github.com/julianshapiro/velocity/commit/d6091c4f34600c13353ea4b2099978c1c8f397d2)\n- Update README.md [`4440591`](https://github.com/julianshapiro/velocity/commit/44405914feb3e56cd443f50a08cfda660b4d3e31)\n- Update README.md [`e1b0842`](https://github.com/julianshapiro/velocity/commit/e1b08425cef239365ae87dea3d1c32b138895b01)\n\n#### [v0.0.19](https://github.com/julianshapiro/velocity/compare/v0.0.18...v0.0.19)\n\n> 3 June 2014\n\n- Firefox Syntax Fix [`6d95175`](https://github.com/julianshapiro/velocity/commit/6d95175f4b483941dd5b53bc90648a71fc4a2e6e)\n- Update package.json [`241b0de`](https://github.com/julianshapiro/velocity/commit/241b0de9f451658ec64e497247289a380159d391)\n- Update README.md [`a638153`](https://github.com/julianshapiro/velocity/commit/a63815377959d2de8ea484a62fa5d76aaeeb9447)\n\n#### [v0.0.18](https://github.com/julianshapiro/velocity/compare/v0.0.16...v0.0.18)\n\n> 1 June 2014\n\n- Closes #76. [`#76`](https://github.com/julianshapiro/velocity/issues/76)\n- Update README.md [`7aee230`](https://github.com/julianshapiro/velocity/commit/7aee23011457083601c9db7e8673cde9df78e25f)\n- Update README.md [`013ec2d`](https://github.com/julianshapiro/velocity/commit/013ec2dbdccc9d60b5a979acda2c3e80981b4f6b)\n- Update README.md [`7ea2088`](https://github.com/julianshapiro/velocity/commit/7ea20889015cc35251d42ce4f0d96150e213237f)\n\n#### [v0.0.16](https://github.com/julianshapiro/velocity/compare/v0.0.15...v0.0.16)\n\n> 30 May 2014\n\n- Closes #88, #90 [`#88`](https://github.com/julianshapiro/velocity/issues/88)\n- Support Notes [`43a0efd`](https://github.com/julianshapiro/velocity/commit/43a0efdcc9972e02d243da05c6c542172ac0996d)\n- Update README.md [`a507081`](https://github.com/julianshapiro/velocity/commit/a507081c4829507abf6a6bd7797227d22468c7c5)\n- Update README.md [`6cb4a06`](https://github.com/julianshapiro/velocity/commit/6cb4a0665dde69ce0625aada285e4cfba91f081b)\n\n#### [v0.0.15](https://github.com/julianshapiro/velocity/compare/v0.0.14...v0.0.15)\n\n> 27 May 2014\n\n- Update README.md [`09749e5`](https://github.com/julianshapiro/velocity/commit/09749e57b75e1d00c066e71d7789e97e6b6a8844)\n\n#### [v0.0.14](https://github.com/julianshapiro/velocity/compare/v0.0.13...v0.0.14)\n\n> 23 May 2014\n\n- Version Updates [`0365563`](https://github.com/julianshapiro/velocity/commit/036556305c969746bcce6eb5d24808c111f74c76)\n- Spring Physics for Element Sets Bug Fix [`7167288`](https://github.com/julianshapiro/velocity/commit/7167288d2617e5e7bd8b81db275a201176f97580)\n- Minified [`6aff975`](https://github.com/julianshapiro/velocity/commit/6aff97506fb8fae11cee06e23c2284ba4a57882c)\n\n#### [v0.0.13](https://github.com/julianshapiro/velocity/compare/v0.0.12...v0.0.13)\n\n> 21 May 2014\n\n- Spring Physics [`d620394`](https://github.com/julianshapiro/velocity/commit/d62039420565dd1fbce2523064ac9dd3592b95ae)\n- Update README.md [`b361178`](https://github.com/julianshapiro/velocity/commit/b361178d7403effa1c5e65da86d235e8120a734e)\n- Update README.md [`5c24e97`](https://github.com/julianshapiro/velocity/commit/5c24e977bc5a9e9dc588304cc242873b9cbbe5b6)\n\n#### [v0.0.12](https://github.com/julianshapiro/velocity/compare/v0.0.10...v0.0.12)\n\n> 19 May 2014\n\n- Closes #72. [`#72`](https://github.com/julianshapiro/velocity/issues/72)\n- Closes #65 and #73. [`#65`](https://github.com/julianshapiro/velocity/issues/65)\n- Update README.md [`f445d1b`](https://github.com/julianshapiro/velocity/commit/f445d1b05eaad80fead72a83906eee999dd4c086)\n\n#### [v0.0.10](https://github.com/julianshapiro/velocity/compare/v0.0.9...v0.0.10)\n\n> 14 May 2014\n\n- Fixes #59. Fixes #2. Closes #55. [`#59`](https://github.com/julianshapiro/velocity/issues/59) [`#2`](https://github.com/julianshapiro/velocity/issues/2) [`#55`](https://github.com/julianshapiro/velocity/issues/55)\n- Update README.md [`871bb94`](https://github.com/julianshapiro/velocity/commit/871bb94466cbaffa247086b825e4d966d0886bb3)\n- Update README.md [`b186cbe`](https://github.com/julianshapiro/velocity/commit/b186cbea6925757896952cdee50d53fd82a09515)\n- Update README.md [`fa76d46`](https://github.com/julianshapiro/velocity/commit/fa76d46a0802ea1f1545d1c519f58645134128da)\n\n#### [v0.0.9](https://github.com/julianshapiro/velocity/compare/v0.0.1...v0.0.9)\n\n> 12 May 2014\n\n- Back to the latest version [`#4`](https://github.com/julianshapiro/velocity/pull/4)\n- Remove dependency on jQuery $.easing object [`#48`](https://github.com/julianshapiro/velocity/issues/48)\n- Temporary jQuery-Less File Removal [`b33a9c5`](https://github.com/julianshapiro/velocity/commit/b33a9c591d3142e7fd96d3f3354878e82ce7c11a)\n- Performance Boost + Framework Prep [`4ee968b`](https://github.com/julianshapiro/velocity/commit/4ee968b1d2b37f6c5685fd130e171b92dfcf0370)\n- Performance Boost + Framework Prep [`be98b76`](https://github.com/julianshapiro/velocity/commit/be98b760d225adad1536a7cbfd4f2707b82595c8)\n\n#### v0.0.1\n\n> 6 May 2014\n\n- Updated bower.json, addition of component.json [`#33`](https://github.com/julianshapiro/velocity/pull/33)\n- Getting back in sync [`#3`](https://github.com/julianshapiro/velocity/pull/3)\n- Contained Element Scrolling Support [`#2`](https://github.com/julianshapiro/velocity/pull/2)\n- Back to the latest version [`#1`](https://github.com/julianshapiro/velocity/pull/1)\n- Support for custom user sequences. Thanks to @jeffmicklos and @nmussy. [`#22`](https://github.com/julianshapiro/velocity/pull/22)\n- Added optional CDN support [`#19`](https://github.com/julianshapiro/velocity/pull/19)\n- Contained Element Scrolling Support [`#26`](https://github.com/julianshapiro/velocity/issues/26)\n- non-camelCased Property Support, bower.json [`#27`](https://github.com/julianshapiro/velocity/issues/27)\n- Remove Forced Class Extraction [`#17`](https://github.com/julianshapiro/velocity/issues/17)\n- Fixes #11 [`#11`](https://github.com/julianshapiro/velocity/issues/11)\n- Fixes #1 [`#1`](https://github.com/julianshapiro/velocity/issues/1)\n- Update README.md [`0e226cb`](https://github.com/julianshapiro/velocity/commit/0e226cbe559460ef81b9f87c902aea94d8149842)\n- Update README.md [`4c9bd3e`](https://github.com/julianshapiro/velocity/commit/4c9bd3e7e6de29bb79da110461f53a06b38a2a13)\n- Sequence Fixes and Packaged Sequences [`e8ad8e4`](https://github.com/julianshapiro/velocity/commit/e8ad8e47879b7755b063a3368754aac482b08bbc)\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at rycochet@rycochet.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "**Contributing**\n\n- Make sure you're using the latest version of Velocity before reporting a bug.\n\n- If you are asking for help please use [StackOverflow](https://stackoverflow.com/questions/tagged/velocity.js), as the issue tracker is for bugs and suggestions.\n\n- Unless you're reporting an obvious bug that can be immediately recreated by anyone, please **create a demo** with the minimum amount of code necessary to reproduce your bug. You can use [this template](https://jsfiddle.net/Rycochet/mqv9L27u/), which already has Velocity and jQuery included (jQuery is not required by Velocity, it is included for ease of examples).\n\n- Pull Requests for fixes and new features are often accepted, but feel free to open an issue first if you're unsure of the reception. All code submitted becomes part of VelocityJS and gets covered by its [license](https://github.com/julianshapiro/velocity/blob/master/LICENSE.md).\n\n- Please check the [wiki](https://github.com/julianshapiro/velocity/wiki).\n\n"
  },
  {
    "path": "LICENSE.md",
    "content": "The MIT License\n\nCopyright (c) 2014 Julian Shapiro\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "﻿# Velocity beta\n\n[![npm](https://img.shields.io/npm/v/velocity-animate.svg)](https://www.npmjs.com/package/velocity-animate) [![npm (tag)](https://img.shields.io/npm/v/velocity-animate/beta.svg)](https://www.npmjs.com/package/velocity-animate) [![cdnjs version](https://img.shields.io/cdnjs/v/velocity.svg)](https://cdnjs.com/libraries/velocity) [![npm downloads](https://img.shields.io/npm/dm/velocity-animate.svg)](https://www.npmjs.com/package/velocity-animate) [![jsdelivr downloads](https://data.jsdelivr.com/v1/package/npm/velocity-animate/badge)](https://www.jsdelivr.com/package/npm/velocity-animate)\n\n## NPM: `npm install velocity-animate@beta`\n\n## Docs\n[https://github.com/julianshapiro/velocity/wiki](https://github.com/julianshapiro/velocity/wiki)\n\n# IMPORTANT: The velocityjs.org documentation refers to V1, not V2 beta - use the wiki for latest documentation!\n\n## News\nWhatsApp, Tumblr, Windows, Samsung, Uber, and thousands of other companies rely on Velocity. Visit [Libscore.com](http://libscore.com/#$.Velocity) to see which sites use Velocity on their homepage.\n\n## React Plugin\nAnnouncement: https://fabric.io/blog/introducing-the-velocityreact-library<br>\nRepo: https://github.com/twitter-fabric/velocity-react<br>\nNPM: https://www.npmjs.com/package/velocity-react\n\n## Quickstart\n### Velocity (CDN, choose one of them):\n```html\n<script src=\"//cdn.jsdelivr.net/npm/velocity-animate@2.0/velocity.min.js\"></script>\n<script src=\"//cdnjs.cloudflare.com/ajax/libs/velocity/2.0.6/velocity.min.js\"></script>\n```\n\n### Velocity UI pack (CDN, choose one of them):\n```html\n<script src=\"//cdn.jsdelivr.net/npm/velocity-animate@2.0/velocity.ui.min.js\"></script>\n<script src=\"//cdnjs.cloudflare.com/ajax/libs/velocity/2.0.6/velocity.ui.min.js\"></script>\n```\n\n> Please note that JSDelivr can automatically supply the latest release, while CloudFlare needs to ask for a specific version.\n\n### Package managers:\n_npm:_ `npm install velocity-animate@beta`\n\n### Automagic chaining:\n\nIf using the `.velocity(...)` chained function in libraries such as jQuery or Zepto you need to ensure that Velocity is loaded after them. If you wish to add it to anything loaded afterwards then look at the [Velocity.patch()](https://github.com/julianshapiro/velocity/wiki/Advanced---Patch) method.\n\n## Questions or Problems?\nAsk on [StackOverflow](http://stackoverflow.com/tags/velocity.js) (make sure you add the `[velocity.js]` and the `[javascript]` or `[typescript]` tags).\n\n## Updates\n- **[2.0](https://github.com/julianshapiro/velocity/compare/1.5.0...2.0.6)**: Typescript update and complete refactoring.\n- **[1.5](https://github.com/julianshapiro/velocity/compare/1.4.0...1.5.0)**: Bugfixes, IE9 compatibility fixes.\n- **[1.4](https://github.com/julianshapiro/velocity/compare/1.3.0...1.4.0)**: Pause / Resume (per element or global).<br>\nForcefed string animation (just have matching number spaces) including unit conversions and colour names (ie `background:[\"rgba(red,0.1)\", \"blue\"]`).\nHigh resolution timers (animations should be slightly smoother).<br>\nVarious fixes including ticker (loading Velocity in a background window) and color handling.\n- **[1.3](https://github.com/julianshapiro/velocity/compare/1.2.0...1.3.0)**: Code cleanup - no breaking changes known.\n- **[1.2](https://github.com/julianshapiro/velocity/compare/1.1.0...1.2.0)**: [Custom tweens](http://VelocityJS.org/#progress). [Custom easings](http://VelocityJS.org/#easing). [\"Finish\" command](http://VelocityJS.org/#finish).\n- **[1.0](https://github.com/julianshapiro/velocity/compare/0.1.0...1.0.0)**: File name changed to `velocity.js`. Read [VelocityJS.org/#dependencies](http://VelocityJS.org/#dependencies).\n- **0.1**: `stop` now stops animations *immediately* (instead of only clearing the remainder of the animation queue). No other backwards-incompatible changes were made.\n\n## Learn\n- **Motion design**: [smashingmagazine.com/2014/06/18/faster-ui-animations-with-velocity-js](http://smashingmagazine.com/2014/06/18/faster-ui-animations-with-velocity-js)\n- **Animating without jQuery**: [smashingmagazine.com/2014/09/04/animating-without-jquery](http://www.smashingmagazine.com/2014/09/04/animating-without-jquery/)\n- **Performance comparisons**: [davidwalsh.name/css-js-animation](http://davidwalsh.name/css-js-animation)\n- **Workflow**: [css-tricks.com/improving-ui-animation-workflow-velocity-js](http://css-tricks.com/improving-ui-animation-workflow-velocity-js)\n\n## Comparisons\n- **CSS transitions** are meant for simple interface flourishes.\n- **jQuery's $.animate()** is slow and poorly-equipped for motion design.\n- **Velocity** is a fast, feature-rich standalone alternative to jQuery's $.animate().\n\n## License\n[MIT License](LICENSE.md). © Julian Shapiro (http://twitter.com/julian).\n\n## Sponsors\n\n[![Kiss My Button](https://presskit.kissmybutton.gr/logos/kissmybutton-logo-small.png)](https://kissmybutton.gr)  sponsors Velocity's development.\n\n[![BrowserStack](https://raw.githubusercontent.com/julianshapiro/velocity/master/.github/browserstack-logo-182x96.png)](https://browserstack.com/)  provides browser testing services for Velocity.\n"
  },
  {
    "path": "V2_CHANGES.md",
    "content": "﻿# Major Changes in Velocity V2\n\n* APIs for extending Velocity - see the various register* commands in the wiki.\n* Chaining - Chaining is awesome, use it. Chained commands are designed to operate on the chained animation, not on the elements within it.\n* Colors - All web colors are supported internally.\n* Delay - You can pass a negative number to start inside the animation rather than just having a delay before it.\n* Display - This is a property, no longer an option.\n* Loop - This no longer copies the animation call, it calls it multiple times.\n* Per-element - Animations are now copied per-element, and not one a one-animation-per-array basis as in other libraries (and old Velocity v1).\n* Repeat - This is almost identical to loop, but only runs one way.\n* RequireJS - The namespace is now \"velocity-animate\" for consistency with the NPMjs project name.\n* Reverse - Now reverses the last animation at time of adding, not when playing.\n* Scroll - It is now a property, though it's preferred to use scrollTop and scrollLeft. (Working, but not happy with internal code - the API will not change again.)\n* Sequences - rewritten and completely incompatible with previous versions.\n* Speed - You can control the speed of the animation playback.\n* Styles - Use `element.velocity(\"style\", \"propertyName\"[, value])`, the old .Hook has gone.\n* SVG - All SVG attributes are supported internally, though they must be placed on the correct type of element.\n* Sync - You can now de-sync animations so they start immediately per-element, rather than waiting for all to be ready.\n* Transforms - Use these directly within CSS, don't try the old shortcuts as they don't exist.\n* UI-Pack - Now only contains animations, all code is in the core Velocity now.\n* Visibility - This is a property, no longer an option.\n"
  },
  {
    "path": "babel.config.js",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Babel config.\n */\n\nmodule.exports = {\n    \"presets\": [\n        [\n            \"@babel/preset-env\",\n            {\n                \"modules\": false\n            }\n        ],\n        \"@babel/preset-typescript\"\n    ],\n    \"plugins\": [\n        [\n            \"@babel/plugin-proposal-optional-chaining\",\n            {\n                \"loose\": true\n            }\n        ],\n        \"@babel/plugin-external-helpers\"\n    ]\n};\n"
  },
  {
    "path": "bower.json",
    "content": "{\n  \"name\": \"velocity\",\n  \"homepage\": \"http://velocityjs.org\",\n  \"authors\": [\n    { \"name\" : \"Julian Shapiro\",\n      \"homepage\" : \"http://julian.com/\"\n    },\n    {\n      \"name\": \"Ryc O'Chet\",\n      \"url\": \"https://github.com/Rycochet\"\n    }\n  ],\n  \"description\": \"Accelerated JavaScript animation.\",\n  \"main\": [ \"./velocity.js\", \"./velocity.ui.js\"],\n  \"keywords\": [\n    \"animation\",\n    \"jquery\",\n    \"animate\",\n    \"lightweight\",\n    \"smooth\",\n    \"ui\",\n    \"velocity.js\",\n    \"velocityjs\",\n    \"javascript\"\n  ],\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \"*.json\",\n    \"!/bower.json\",\n    \"LICENSE\",\n    \"*.md\"\n  ],\n  \"repository\" :\n  {\n    \"type\" : \"git\",\n    \"url\" : \"http://github.com/julianshapiro/velocity.git\"\n  }\n}\n"
  },
  {
    "path": "docs.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test.html",
    "content": "<!DOCTYPE html>\n<!-- saved from url=(0035)https://greensock.com/js/speed.html -->\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n\n        <title>GreenSock Animation Platform (GSAP) Speed Test</title>\n        <meta name=\"viewport\" content=\"width=620, maximum-scale=1, user-scalable=false\"/>\n        <link href=\"./GreenSock Animation Platform (GSAP) Speed Test_files/css\" rel=\"stylesheet\" type=\"text/css\"/>\n\n        <link rel=\"shortcut icon\" type=\"image/ico\" href=\"https://greensock.com/forums/favicon.ico\"/>\n        <style type=\"text/css\">\n\n            html, body {\n                overflow:hidden;\n            }\n            body {\n                background-color:#000000;\n                margin:0px;\n                padding:0px;\n                color:#CCCCCC;\n                font-family: Signika Negative, Asap, sans-serif;\n                font-weight: 300;\n                font-size: 17px;\n                line-height: 150%;\n            }\n            h1 {\n                font-family: Signika Negative, Asap, sans-serif;\n                font-weight: 300;\n                font-size:48px;\n                margin: 10px 0 0 0;\n                padding: 0;\n                line-height:115%;\n            }\n            a, a:hover, a:visited {\n                color:#71B200;\n            }\n            #footer {\n                position:fixed;\n                bottom:0px;\n                background-color:#555;\n                left:0px;\n                width:100%;\n                padding:10px 10px 10px 5px;\n                z-index:1000;\n            }\n            #fps {\n                float:right;\n                background-color:#CCC;\n                padding:6px;\n                margin-right:14px;\n                color:#CC0000;\n                border-radius: 5px;\n                border-color:#000000;\n                border-style:solid;\n                border-width:1px;\n                font-size:24px;\n            }\n            #start {\n                width:100px;\n            }\n            #footer form li {\n                display:block;\n                float:left;\n                margin:10px 5px 5px 5px;\n            }\n            #instructions {\n                width:70%;\n                margin-left:15%;\n                padding-top:50px;\n                padding-bottom:60px;\n                opacity:0;\n            }\n            #container {\n                position:absolute;\n                top:0;\n                left:0;\n                width:100%;\n                height:100%;\n                overflow:hidden;\n                z-index:-100;\n            }\n        </style>\n    </head>\n\n    <body>\n        <div id=\"footer\">\n            <div id=\"fps\" style=\"background-color: rgb(204, 204, 204); color: rgb(204, 0, 0); border-color: rgb(0, 0, 0); border-width: 1px; padding-bottom: 6px; padding-top: 6px;\">28.5 fps</div>\n            <form id=\"form\">\n                <li>\n                    Dots:\n                    <select id=\"dotQuantity\" size=\"1\">\n                        <option value=\"1\">1</option>\n                        <option value=\"25\">25</option>\n                        <option value=\"50\">50</option>\n                        <option value=\"100\">100</option>\n                        <option value=\"200\">200</option>\n                        <option value=\"300\">300</option>\n                        <option value=\"400\">400</option>\n                        <option value=\"500\" selected=\"selected\">500</option>\n                        <option value=\"750\">750</option>\n                        <option value=\"1000\">1000</option>\n                        <option value=\"1250\">1250</option>\n                        <option value=\"1500\">1500</option>\n                        <option value=\"2000\">2000</option>\n                        <option value=\"2500\">2500</option>\n                        <option value=\"3000\">3000</option>\n                    </select>\n                </li>\n                <li style=\"display:none\">\n                    Duration:\n                    <select id=\"duration\" size=\"1\">\n                        <option value=\"0.5\">0.5 seconds</option>\n                        <option value=\"0.75\" selected=\"selected\">0.75 seconds</option>\n                        <option value=\"1\">1 second</option>\n                        <option value=\"5\">5 seconds</option>\n                    </select>\n                </li>\n                <li>\n                    Engine:\n                    <select id=\"engine\" size=\"1\">\n                        <option value=\"jquery\">jQuery 3</option>\n                        <option value=\"gsap\">GSAP</option>\n                        <option value=\"jqueryGSAP\">jquery.gsap.js plugin</option>\n                        <option value=\"anime\">anime</option>\n                        <option value=\"mootools\">MooTools</option>\n                        <option value=\"dojo\">Dojo</option>\n                        <option value=\"tweenjs\">TweenJS</option>\n                        <option value=\"webanimations\" class=\"webanimations\">Web Animations</option>\n                        <option value=\"zepto\">Zepto</option>\n                        <option value=\"velocity\" selected=\"selected\">Velocity</option>\n                        <option value=\"gsap\">----------</option>\n                        <option value=\"gsaptransform\">GSAP (translate/scale)</option>\n                        <option value=\"zeptotransform\">Zepto (translate/scale)</option>\n                        <option value=\"animetransform\">anime (translate/scale)</option>\n                        <option value=\"webanimationstransform\" class=\"webanimations\">Web Animations (translate/scale)</option>\n                    </select>\n                </li>\n                <li>\n                    <button id=\"start\" type=\"button\" value=\"test\" style=\"line-height:150%;\"> START </button>\n                </li>\n            </form>\n        </div>\n\n        <div id=\"instructions\" style=\"opacity: 1; visibility: inherit;\">\n            <h1>HTML5 Animation Speed Test</h1>\n            <p>Stress test the performance of various common JavaScript libraries and\n                compare them with GSAP (<a href=\"http://greensock.com/gsap-js/\">GreenSock Animation Platform</a>). This test does <strong>not</strong> use a canvas element\n                (although it certainly could) - it simply animates the left, top,\n                width, and height css properties of standard image elements. There are also versions of the GSAP, Zepto, anime, and Web Animations tests that use transforms (\"translate/scale\") instead so that you can compare performance.\n                The goal was to be extremely fair and use the same code for everything except the actual animation. No tricks.\n                Look at the source for yourself or run your own tests to confirm.</p>\n            <p>Choose the number of dots you'd like to animate and then choose the\n                engine and click the \"START\" button below. Watch the <strong>fps</strong> in the lower right\n                (higher is better - it reflects how many times the main thread updated over the past 1 second).\n                As more dots are animated, you'll see the performance gap widen. Try to push things until the fps drops below 30fps. When the\n                CPU isn't breaking a sweat, fps should hover around 100fps in most modern browsers.</p>\n            <p>Note: Zepto uses CSS3 transitions which won't work in some browsers (like IE9). Also beware that some browsers incorrectly fire requestAnimationFrame events even when the browser clearly isn't updating the screen and/or they handle JS in a different thread, thus 10fps transitions may inaccurately report in JS as running at 50fps. So focus on the actual animation of the starfield and how smooth it is (or isn't). </p>\n        </div>\n\n        <div id=\"container\"></div>\n\n        <script src=\"../velocity.js\"></script>\n        <!--<script src=\"https://cdn.jsdelivr.net/velocity/1.5.0/velocity.min.js\"></script>-->\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/web-animations-basic.min.js.download\"></script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/jquery-3.0.0.min.js.download\" type=\"text/javascript\"></script>\n        <script type=\"text/javascript\" src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/CSSPlugin.min.js.download\"></script>\n        <script type=\"text/javascript\" src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/jquery.gsap.min.js.download\"></script>\n        <script type=\"text/javascript\" src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/TweenLite.min.js.download\"></script>\n        <script type=\"text/javascript\" src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/mootools-core-1.4.5-full-compat-yc.js.download\"></script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/dojo.js.download\"></script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/easing.js.download\"></script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/easeljs-0.4.2.min.js.download\"></script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/tweenjs-0.2.0.min.js.download\"></script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/CSSPlugin.js.download\"></script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/Ease.js.download\"></script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/zepto.min.js.download\"></script>\n        <script>define = null; //anime doesn't define itself properly unless we do this.</script>\n        <script src=\"./GreenSock Animation Platform (GSAP) Speed Test_files/anime.min.js.download\"></script>\n        <script language=\"JavaScript\" type=\"text/javascript\">\n            jQuery(function() {\n\n                var fps = document.getElementById(\"fps\"),\n                        button = document.getElementById(\"start\"),\n                        dotQtyInput = document.getElementById(\"dotQuantity\"),\n                        durInput = document.getElementById(\"duration\"),\n                        engineInput = document.getElementById(\"engine\"),\n                        instructions = document.getElementById(\"instructions\"),\n                        container = document.getElementById(\"container\"),\n                        ticker = TweenLite.ticker,\n                        inProgress = false,\n                        tests = {},\n                        size, centerX, centerY, dots, rawDots, currentTest, startTime, startFrame, prevUpdate, duration, startingCSS, fpsActive;\n\n                /**\n                 * The goal of this test is to compare how various animation engines perform under pressure, taking relatively common\n                 * animation tasks and running a lot of them at once to see raw performance. The goal is NOT to figure out the most\n                 * efficient way to move dots in a starfield pattern.\n                 *\n                 * The same code runs everything except the actual tweens themselves. Every test in the \"test\"\n                 * object has 4 properties:\n                 *\n                 *         - milliseconds [boolean] - true if the duration should be defined in milliseconds\n                 *\n                 *         - wrapDot [function] - when each dot <img> is created, it is passed to the wrapDot() method\n                 *                                and whatever is returned gets stored in the array of dots to tween. This\n                 *                                is useful to improve performance of things like jQuery because\n                 *                                instead of passing the dom element to the tween() method (which would require\n                 *                                jQuery to then query the dom and wrap the element in an engine-specific object\n                 *                                before calling animate() on it), a native object can be used. Basically it lets you\n                 *                                cache the dot's wrapper for better performance.\n                 *\n                 *         - tween [function] - This is the core of the whole test. tween() is called for each dot, and the dot is\n                 *                              passed as a parameter. The tween() function should set the dot's cssText to the\n                 *                              startingCSS value (which just places the dot in the middle of the screen and sets its\n                 *                              width/height to 1px) and then after a random delay between 0 and the duration of the tween,\n                 *                              it should tween the dot at a random angle, altering the left/top values accordingly as\n                 *                              well as the width/height to 32px. Then, after the tween is done, it should call the tween()\n                 *                              method again for that dot. So the same dot will just continuously tween outward from the\n                 *                              center at random angles and at random delay values.\n                 *\n                 *         - stop [function] - This function is called when the user stops the test. The dot is passed as a parameter.\n                 *                             The function should immediately stop/kill the tween(s) of that dot (or all dots - that's fine too).\n                 *\n                 * I don't claim to be an expert at the various other tweening engines out there, so if there are optimizations\n                 * that could be made to make them run better, please let me know. I tried to keep things as fair as possible.\n                 *\n                 * Also, if anyone knows how to make a more accurate fps counter that works well with transitions, let me know - currently\n                 * several browsers incorrectly dispatch requestAnimationFrame events even when the screen isn't being refreshed, giving\n                 * an artificially high frame rate readout. And some browers don't repaint the screen each time all the elements' styles\n                 * are updated, thus motion can appear a bit jerky even when the fps counter says you're getting a good frame rate.\n                 **/\n\n\n                //Velocity\n                tests.velocity = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return [dot];\n                    },\n                    tween: function(dot) {\n                        //dot.style.position = \"absolute\";\n                        //\"position:absolute; left:\" + centerX + \"px; top:\" + centerY + \"px; width:\" + size + \"; height:\" + size + \";\";\n                        dot[0].style.cssText = startingCSS;\n                        var angle = Math.random() * Math.PI * 2;\n                        Velocity(dot, {\n                            left: [Math.cos(angle) * radius + centerX, centerX],\n                            top: [Math.sin(angle) * radius + centerY, centerY],\n                            width: [\"32px\", size],\n                            height: [\"32px\", size]\n                        }, {\n                            duration: duration,\n                            delay: Math.random() * duration,\n                            easing: \"easeInCubic\",\n                            complete: tests.velocity.tween\n                        });\n                    },\n                    stop: function(dot) {\n                        Velocity(dot, \"stop\");\n                    },\n                    nativeSize: false\n                };\n\n                //jQuery\n                tests.jquery = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return jQuery(dot); //wrap the dot in a jQuery object in order to perform better (that way, we don't need to query the dom each time we tween - we can just call animate() directly on the jQuery object)\n                    },\n                    tween: function(dot) {\n                        dot[0].style.cssText = startingCSS;\n                        var angle = Math.random() * Math.PI * 2;\n                        dot.delay(Math.random() * duration).animate({\n                            left: Math.cos(angle) * radius + centerX,\n                            top: Math.sin(angle) * radius + centerY,\n                            width: 32,\n                            height: 32}, duration, \"cubicIn\", function() {\n                            tests.jquery.tween(dot)\n                        });\n                    },\n                    stop: function(dot) {\n                        dot.stop(true);\n                    },\n                    nativeSize: false\n                };\n\n                //jquery.gsap.js plugin\n                tests.jqueryGSAP = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return jQuery(dot); //wrap the dot in a jQuery object in order to perform better (that way, we don't need to query the dom each time we tween - we can just call animate() directly on the jQuery object)\n                    },\n                    tween: function(dot) {\n                        dot[0].style.cssText = startingCSS;\n                        var angle = Math.random() * Math.PI * 2;\n                        dot.animate({left: Math.cos(angle) * radius + centerX,\n                            top: Math.sin(angle) * radius + centerY,\n                            width: 32,\n                            height: 32,\n                            delay: Math.random() * duration / 1000}, duration, \"easeInCubic\", function() {\n                            tests.jqueryGSAP.tween(dot)\n                        });\n                    },\n                    stop: function(dot) {\n                        dot.stop(true);\n                    },\n                    nativeSize: false\n                };\n\n\n                //GSAP (TweenLite) top/left/width/height\n                tests.gsap = {\n                    milliseconds: false,\n                    wrapDot: function(dot) {\n                        return dot; //no wrapping necessary\n                    },\n                    tween: function(dot) {\n                        var angle = Math.random() * Math.PI * 2;\n                        dot.style.cssText = startingCSS;\n                        TweenLite.to(dot, duration, {css: {left: Math.cos(angle) * radius + centerX,\n                                top: Math.sin(angle) * radius + centerY,\n                                width: 32,\n                                height: 32},\n                            delay: Math.random() * duration,\n                            ease: Cubic.easeIn,\n                            overwrite: \"none\",\n                            onComplete: tests.gsap.tween,\n                            onCompleteParams: [dot]});\n                    },\n                    stop: function(dot) {\n                        TweenLite.killTweensOf(dot);\n                    },\n                    nativeSize: false\n                };\n\n                //GSAP (TweenLite) translateX/translateY/scale\n                tests.gsaptransform = {\n                    milliseconds: false,\n                    wrapDot: function(dot) {\n                        return dot; //no wrapping necessary\n                    },\n                    tween: function(dot) {\n                        TweenLite.set(dot, {css: {x: 0, y: 0, scale: 0.06, force3d: true}});\n                        var angle = Math.random() * Math.PI * 2;\n                        TweenLite.to(dot, duration, {css: {x: (Math.cos(angle) * radius),\n                                y: (Math.sin(angle) * radius),\n                                scaleX: 2,\n                                scaleY: 2},\n                            delay: Math.random() * duration,\n                            ease: Cubic.easeIn,\n                            overwrite: \"none\",\n                            onComplete: tests.gsaptransform.tween,\n                            onCompleteParams: [dot]});\n                    },\n                    stop: function(dot) {\n                        TweenLite.killTweensOf(dot);\n                    },\n                    nativeSize: true\n                };\n\n\n                //Anime top/left/width/height\n                tests.anime = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return dot; //no wrapping necessary\n                    },\n                    tween: function(dot) {\n                        var angle = Math.random() * Math.PI * 2;\n                        dot.style.cssText = startingCSS;\n                        anime({targets: dot, duration: duration,\n                            left: Math.cos(angle) * radius + centerX,\n                            top: Math.sin(angle) * radius + centerY,\n                            width: 32,\n                            height: 32,\n                            delay: Math.random() * duration,\n                            easing: \"easeInCubic\",\n                            complete: function() {\n                                tests.anime.tween(dot);\n                            }});\n                    },\n                    stop: function(dot) {\n                        anime.remove(dot);\n                    },\n                    nativeSize: false\n                };\n\n                //Anime transforms\n                tests.animetransform = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return dot; //no wrapping necessary\n                    },\n                    tween: function(dot) {\n                        dot.style.cssText = \"position:absolute; top:\" + centerY + \"px; left:\" + centerX + \"px; transform: none;\";\n                        //anime({targets:dot, position:\"absolute\", top:centerY, left:centerX, translateX:0, translateY:0, scale:1, duration:0}); //zero-duration animations don't seem to work. Had to set cssText instead (above).\n                        var angle = Math.random() * Math.PI * 2;\n                        anime({targets: dot, duration: duration,\n                            translateX: (Math.cos(angle) * radius),\n                            translateY: (Math.sin(angle) * radius),\n                            scale: 32,\n                            delay: Math.random() * duration,\n                            easing: \"easeInCubic\",\n                            complete: function() {\n                                tests.animetransform.tween(dot);\n                            }});\n                    },\n                    stop: function(dot) {\n                        anime.remove(dot);\n                    },\n                    nativeSize: false\n                };\n\n\n                //Web Animations\n                tests.webanimations = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return dot; //no wrapping necessary\n                    },\n                    tween: function(dot) {\n                        dot.style.cssText = startingCSS;\n                        var angle = Math.random() * Math.PI * 2,\n                                delay = Math.random() * duration,\n                                anim = dot.anim = dot.animate([{left: centerX + \"px\", top: centerY + \"px\", width: \"1px\", height: \"1px\"}, {\n                                        left: (Math.cos(angle) * radius + centerX) + \"px\",\n                                        top: (Math.sin(angle) * radius + centerY) + \"px\",\n                                        width: \"32px\",\n                                        height: \"32px\"\n                                    }], {duration: duration, delay: delay, fill: \"forwards\", easing: \"cubic-bezier(0.550, 0.055, 0.675, 0.190)\"});\n                        //anim.play();\n                        anim.onfinish = function() {\n                            tests.webanimations.tween(dot);\n                        };\n                    },\n                    stop: function(dot) {\n                        dot.anim.onfinish = null; //otherwise it'll call the onfinish when cancelled, and the loop will continue.\n                        dot.anim.cancel();\n                    },\n                    nativeSize: false\n                };\n\n                //Web Animations (transforms)\n                tests.webanimationstransform = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return dot; //no wrapping necessary\n                    },\n                    tween: function(dot) {\n                        dot.style.cssText = startingCSS;\n                        var angle = Math.random() * Math.PI * 2,\n                                delay = Math.random() * duration,\n                                anim = dot.anim = dot.animate([{transform: \"translate(0px, 0px) scale(1)\", left: centerX + \"px\", top: centerY + \"px\"}, {\n                                        transform: \"translate(\" + (Math.cos(angle) * radius) + \"px, \" + (Math.sin(angle) * radius) + \"px) scale(32)\", left: centerX + \"px\", top: centerY + \"px\"\n                                    }], {duration: duration, delay: delay, fill: \"forwards\", easing: \"cubic-bezier(0.550, 0.055, 0.675, 0.190)\"});\n                        //anim.play();\n                        anim.onfinish = function() {\n                            tests.webanimationstransform.tween(dot);\n                        };\n                    },\n                    stop: function(dot) {\n                        dot.anim.onfinish = null; //otherwise it'll call the onfinish when cancelled, and the loop will continue.\n                        dot.anim.cancel();\n                    },\n                    nativeSize: false\n                };\n\n                //MooTools\n                tests.mootools = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        var m = new Fx.Morph(dot, {duration: duration, transition: Fx.Transitions.Cubic.easeIn, onComplete: function() {\n                                tests.mootools.tween(m);\n                            }});\n                        return m;\n                    },\n                    tween: function(dot) {\n                        dot.element.style.cssText = startingCSS;\n                        var angle = Math.random() * Math.PI * 2;\n                        setTimeout(function() {\n                            if (inProgress)\n                                dot.start({//I couldn't find a way to delay a Morph, so setTimeout was my only option. If anyone knows a better way, please let me know.\n                                    left: Math.cos(angle) * radius + centerX + \"px\",\n                                    top: Math.sin(angle) * radius + centerY + \"px\",\n                                    width: \"32px\",\n                                    height: \"32px\"});\n                        }, Math.random() * duration);\n                    },\n                    stop: function(dot) {\n                        dot.cancel();\n                    },\n                    nativeSize: false\n                };\n\n\n                //Dojo\n                tests.dojo = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return {dot: dot, anim: null}; //must record the animation instance so that we can stop() it later\n                    },\n                    tween: function(dot) {\n                        dot.dot.style.cssText = startingCSS;\n                        var angle = Math.random() * Math.PI * 2;\n                        dot.anim = dojo.animateProperty({node: dot.dot,\n                            properties: {\n                                left: Math.cos(angle) * radius + centerX,\n                                top: Math.sin(angle) * radius + centerY,\n                                width: 32,\n                                height: 32},\n                            easing: dojo.fx.easing.cubicIn,\n                            delay: Math.random() * duration,\n                            duration: duration}).play();\n                        dot.anim.onEnd = function() {\n                            tests.dojo.tween(dot);\n                        }\n                    },\n                    stop: function(dot) {\n                        dot.anim.stop();\n                    },\n                    nativeSize: false\n                };\n\n                //TweenJS\n                CSSPlugin.install();\n                Ticker.setFPS(100); //ensures that TweenJS refreshes at the same rate as GSAP for maximum smoothness\n                tests.tweenjs = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return dot; //no wrapping necessary\n                    },\n                    tween: function(dot) {\n                        dot.style.cssText = startingCSS;\n                        var angle = Math.random() * Math.PI * 2;\n                        Tween.get(dot).wait(Math.random() * duration).to({\n                            left: Math.cos(angle) * radius + centerX,\n                            top: Math.sin(angle) * radius + centerY,\n                            width: 32,\n                            height: 32\n                        }, duration, Ease.cubicIn).call(tests.tweenjs.tween, [dot]);\n                    },\n                    stop: function(dot) {\n                        Tween.removeTweens(dot);\n                    },\n                    nativeSize: false\n                };\n\n                //Zepto using top/left/width/height (css transitions)\n                tests.zepto = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return Zepto(dot); //wrap the dot in a jQuery object in order to perform better (that way, we don't need to query the dom each time we tween - we can just call animate() directly on the jQuery object)\n                    },\n                    tween: function(dot) {\n                        dot[0].style.cssText = startingCSS;\n                        //Zepto's delay feature performs TERRIBLY under pressure, so we use a setTimeout() instead to improve performance.\n                        setTimeout(function() {\n                            if (!dot.isKilled) { //Zepto doesn't have a feature that allows us to kill tweens, so we simply set our own \"isKilled\" property to true when the tween is supposed to be killed and then stop the recursion thereafter which gives us a somewhat similar effect.\n                                var angle = Math.random() * Math.PI * 2;\n                                dot.animate({left: Math.cos(angle) * radius + centerX,\n                                    top: Math.sin(angle) * radius + centerY,\n                                    width: 32,\n                                    height: 32}, duration, \"cubic-bezier(0.550, 0.055, 0.675, 0.190)\", function() {\n                                    tests.zepto.tween(dot)\n                                });\n                            }\n                        }, duration * Math.random());\n                    },\n                    stop: function(dot) {\n                        dot.isKilled = true;\n                    },\n                    nativeSize: false\n                };\n\n                //Zepto using translateX/translateY/scale (css transitions)\n                tests.zeptotransform = {\n                    milliseconds: true,\n                    wrapDot: function(dot) {\n                        return Zepto(dot); //wrap the dot in a jQuery object in order to perform better (that way, we don't need to query the dom each time we tween - we can just call animate() directly on the jQuery object)\n                    },\n                    tween: function(dot) {\n                        //I couldn't just set the css() reliably with Zepto (it failed), so I was forced to use a zero-duration animate() call. It's fair, though, because we actually do a zero-duration tween for TweenLite too.\n                        dot.animate({translateX: \"0px\", translateY: \"0px\", rotateY: \"0rad\", rotateX: \"0rad\", scale: \"0.06,0.06\"}, 0);\n                        //Zepto's delay feature performs TERRIBLY under pressure, so we use a setTimeout() instead to improve performance.\n                        setTimeout(function() {\n                            if (!dot.isKilled) { //Zepto doesn't have a feature that allows us to kill tweens, so we simply set our own \"isKilled\" property to true when the tween is supposed to be killed and then stop the recursion thereafter which gives us a somewhat similar effect.\n                                var angle = Math.random() * Math.PI * 2;\n                                dot.animate({translateX: (Math.cos(angle) * radius) + \"px\",\n                                    translateY: (Math.sin(angle) * radius) + \"px\",\n                                    scale: \"2,2\",\n                                    delay: duration * Math.random()}, duration, \"cubic-bezier(0.550, 0.055, 0.675, 0.190)\", function() {\n                                    tests.zeptotransform.tween(dot)\n                                });\n                            }\n                        }, duration * Math.random());\n                    },\n                    stop: function(dot) {\n                        dot.isKilled = true;\n                    },\n                    nativeSize: true\n                };\n\n\n\n                function toggleTest() {\n                    inProgress = !inProgress;\n                    var i;\n                    if (inProgress) {\n\n                        currentTest = tests[engineInput.value];\n                        size = (currentTest.nativeSize ? \"16px\" : \"1px\");\n                        centerX = jQuery(window).width() / 2;\n                        centerY = (jQuery(window).height() / 2) - 30;\n                        startingCSS = \"position:absolute; left:\" + centerX + \"px; top:\" + centerY + \"px; width:\" + size + \"; height:\" + size + \";\";\n                        radius = Math.sqrt(centerX * centerX + centerY * centerY);\n                        duration = Number(durInput.value);\n                        if (currentTest.milliseconds) {\n                            duration *= 1000;\n                        }\n\n                        if (jQuery.gsap) {\n                            jQuery.gsap.enabled((engineInput.value === \"jqueryGSAP\"));\n                        }\n\n                        createDots();\n                        i = dots.length;\n                        while (--i > -1) {\n                            currentTest.tween(dots[i]);\n                        }\n\n                        startTime = prevUpdate = ticker.time;\n                        startFrame = ticker.frame;\n                        //ticker.addEventListener(\"tick\", updateFPS, this);\n\n                        dotQtyInput.disabled = engineInput.disabled = true;\n\n                        //adjust the fps style and fade out the instructions\n                        button.innerHTML = \" STOP \";\n                        fps.innerHTML = \"-- fps\";\n                        fps.style.backgroundColor = \"#FFFFFF\";\n                        fps.style.borderColor = fps.style.color = \"#FF0000\";\n                        fps.style.borderWidth = \"3px\";\n                        fps.style.paddingTop = fps.style.paddingBottom = \"4px\";\n                        TweenLite.to(instructions, 0.7, {css: {autoAlpha: 0}, overwrite: \"all\"});\n                        TweenLite.delayedCall(1, activateFPS); //wait a little bit to allow the dots to fill the screen before starting to report the FPS\n\n                    } else {\n                        //adjust the fps style and fade in the instructions\n                        //ticker.removeEventListener(\"tick\", updateFPS);\n                        fps.style.backgroundColor = \"#CCCCCC\";\n                        fps.style.color = \"#CC0000\";\n                        fps.style.borderColor = \"#000000\";\n                        fps.style.borderWidth = \"1px\";\n                        fps.style.paddingTop = fps.style.paddingBottom = \"6px\";\n                        button.innerHTML = \" START \";\n                        TweenLite.to(instructions, 0.7, {css: {autoAlpha: 1}, delay: 0.2});\n\n                        dotQtyInput.disabled = engineInput.disabled = false;\n\n                        //stop the tweens and remove the dots.\n                        i = dots.length;\n                        while (--i > -1) {\n                            currentTest.stop(dots[i]);\n                            container.removeChild(rawDots[i]); //removes dot(s)\n                        }\n                        dots = null;\n                        rawDots = null;\n                        fpsActive = false;\n                        TweenLite.killTweensOf(activateFPS);\n                        clearInterval(fpsIntervalID);\n                    }\n                }\n\n                function createDots() {\n                    var i = Number(dotQtyInput.value), dot;\n                    dots = [];\n                    rawDots = [];\n                    while (--i > -1) {\n                        dot = document.createElement(\"img\");\n                        dot.src = \"img/dot.png\";\n                        dot.width = 1;\n                        dot.height = 1;\n                        dot.id = \"dot\" + i;\n                        dot.style.cssText = startingCSS;\n                        container.appendChild(dot);\n                        rawDots.push(dot);\n                        dots.push(currentTest.wrapDot(dot));\n                    }\n                }\n\n                jQuery(\"#start\").click(toggleTest);\n                jQuery(\"#dotQuantity,#duration,#engine\").change(function(e) {\n                    if (inProgress) {\n                        toggleTest();\n                        toggleTest();\n                    }\n                });\n                jQuery.easing.cubicIn = $.easing.cubicIn = function(p, n, firstNum, diff) { //we need to add the standard CubicIn ease to jQuery\n                    return firstNum + p * p * p * diff;\n                }\n                //jQuery.fx.interval = 10; //ensures that jQuery refreshes at roughly 100fps like GSAP, TweenJS, and most of the others to be more even/fair.\n                TweenLite.to(instructions, 0, {css: {opacity: 0}, immediateRender: true});\n                TweenLite.to(instructions, 0.7, {css: {opacity: 1}, delay: 0.25});\n\n                if (typeof (document.getElementById(\"start\").animate) !== \"function\") { //if the browser doesn't support WAAPI natively, remove it from the list.\n                    jQuery(\".webanimations\").remove();\n                }\n\n                function activateFPS() {\n                    fpsActive = true;\n                    frames = 0;\n                    lastUpdate = getTime();\n                    fpsIntervalID = setInterval(updateFPS, 10);\n                }\n\n                var getTime = Date.now || function() {\n                    return new Date().getTime();\n                },\n                        lastUpdate, frames, fpsIntervalID;\n\n                function updateFPS() {\n                    frames++;\n                    var elapsed = getTime() - lastUpdate;\n                    if (fpsActive && elapsed > 1000) {\n                        fps.innerHTML = Number(frames / elapsed * 1000).toFixed(1) + \" fps\";\n                        lastUpdate += elapsed;\n                        frames = 0;\n                    }\n                }\n\n\n            });\n\n        </script>\n\n\n    </body></html>\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/CSSPlugin.js.download",
    "content": "/*\n* CSSPlugin by Grant Skinner. Mar 7, 2011\n* Visit http://easeljs.com/ for documentation, updates and examples.\n*\n*\n* Copyright (c) 2010 Grant Skinner\n*\n* Permission is hereby granted, free of charge, to any person\n* obtaining a copy of this software and associated documentation\n* files (the \"Software\"), to deal in the Software without\n* restriction, including without limitation the rights to use,\n* copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the\n* Software is furnished to do so, subject to the following\n* conditions:\n*\n* The above copyright notice and this permission notice shall be\n* included in all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n* OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n/**\n * The Tween Javascript library provides a retained graphics mode for canvas\n * including a full, hierarchical display list, a core interaction model, and\n * helper classes to make working with Canvas much easier.\n * @module TweenJS\n **/\n\n(function(window) {\n/**\n * A plugin to help TweenJS tween CSS properties.\n * @class CSSPlugin\n * @constructor\n * @protected\n **/\nvar CSSPlugin = function() {\n  throw(\"CSSPlugin cannot be instantiated.\")\n}\nvar p = CSSPlugin.prototype;\n\n// static interface:\n    /**\n     * Defines the default suffix map for CSS tweens. This can be overridden on a per tween basis by specifying a\n     * cssSuffixMap value for the individual tween. The object maps CSS property names to the suffix to use when\n     * reading or setting those properties. For example a map in the form {top:\"px\"} specifies that when tweening\n     * the \"top\" CSS property, it should use the \"px\" suffix (ex. target.style.top = \"20.5px\"). This only applies\n     * to tweens with the \"css\" config property set to true.\n     * @property cssSuffixMap\n     * @type Object\n     * @static\n     **/\n    CSSPlugin.cssSuffixMap = {top:\"px\",left:\"px\",bottom:\"px\",right:\"px\",width:\"px\",height:\"px\",opacity:\"\"};\n\n    CSSPlugin.priority = -100; // very low priority, should run last\n\n    /**\n     * Install the plugin\n     * @method install\n     * @protected\n     **/\n    CSSPlugin.install = function() {\n        var arr = [], map = CSSPlugin.cssSuffixMap;\n        for (var n in map) { arr.push(n); }\n        Tween.installPlugin(CSSPlugin, arr);\n    }\n\n    /**\n     * Initialize the plugin\n     * @method init\n     * @protected\n     **/\n    CSSPlugin.init = function(tween, prop, value) {\n        var sfx0,sfx1,style,map = CSSPlugin.cssSuffixMap;\n        if ((sfx0 = map[prop]) == null || !(style = tween._target.style)) { return value; }\n        var str = style[prop];\n        if (!str) { return 0; } // no style set.\n        var i = str.length-sfx0.length;\n        if ((sfx1 = str.substr(i)) != sfx0) {\n            throw(\"CSSPlugin Error: Suffixes do not match. (\"+sfx0+\":\"+sfx1+\")\");\n        } else {\n            return parseInt(str.substr(0,i));\n        }\n    }\n\n    /**\n     * Apply the plugin properties on a tween\n     * @method tween\n     * @protected\n     **/\n    CSSPlugin.tween = function(tween, prop, value, startValues, endValues, ratio, position, end) {\n        var style,map = CSSPlugin.cssSuffixMap;\n        if (map[prop] == null || !(style = tween._target.style)) { return value; }\n        style[prop] = value+map[prop];\n        return value;\n    }\n\n// public properties:\n\n// private properties:\n\n// constructor:\n\n// public methods:\n\n\n// private methods:\n\nwindow.CSSPlugin = CSSPlugin;\n}(window));\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/CSSPlugin.min.js.download",
    "content": "/*!\n * VERSION: 1.19.0\n * DATE: 2016-07-14\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2016, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\nvar _gsScope=\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){\"use strict\";_gsScope._gsDefine(\"plugins.CSSPlugin\",[\"plugins.TweenPlugin\",\"TweenLite\"],function(a,b){var c,d,e,f,g=function(){a.call(this,\"css\"),this._overwriteProps.length=0,this.setRatio=g.prototype.setRatio},h=_gsScope._gsDefine.globals,i={},j=g.prototype=new a(\"css\");j.constructor=g,g.version=\"1.19.0\",g.API=2,g.defaultTransformPerspective=0,g.defaultSkewType=\"compensated\",g.defaultSmoothOrigin=!0,j=\"px\",g.suffixMap={top:j,right:j,bottom:j,left:j,width:j,height:j,fontSize:j,padding:j,margin:j,perspective:j,lineHeight:\"\"};var k,l,m,n,o,p,q,r,s=/(?:\\-|\\.|\\b)(\\d|\\.|e\\-)+/g,t=/(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,u=/(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b)/gi,v=/(?![+-]?\\d*\\.?\\d+|[+-]|e[+-]\\d+)[^0-9]/g,w=/(?:\\d|\\-|\\+|=|#|\\.)*/g,x=/opacity *= *([^)]*)/i,y=/opacity:([^;]*)/i,z=/alpha\\(opacity *=.+?\\)/i,A=/^(rgb|hsl)/,B=/([A-Z])/g,C=/-([a-z])/gi,D=/(^(?:url\\(\\\"|url\\())|(?:(\\\"\\))$|\\)$)/gi,E=function(a,b){return b.toUpperCase()},F=/(?:Left|Right|Width)/i,G=/(M11|M12|M21|M22)=[\\d\\-\\.e]+/gi,H=/progid\\:DXImageTransform\\.Microsoft\\.Matrix\\(.+?\\)/i,I=/,(?=[^\\)]*(?:\\(|$))/gi,J=/[\\s,\\(]/i,K=Math.PI/180,L=180/Math.PI,M={},N=document,O=function(a){return N.createElementNS?N.createElementNS(\"http://www.w3.org/1999/xhtml\",a):N.createElement(a)},P=O(\"div\"),Q=O(\"img\"),R=g._internals={_specialProps:i},S=navigator.userAgent,T=function(){var a=S.indexOf(\"Android\"),b=O(\"a\");return m=-1!==S.indexOf(\"Safari\")&&-1===S.indexOf(\"Chrome\")&&(-1===a||Number(S.substr(a+8,1))>3),o=m&&Number(S.substr(S.indexOf(\"Version/\")+8,1))<6,n=-1!==S.indexOf(\"Firefox\"),(/MSIE ([0-9]{1,}[\\.0-9]{0,})/.exec(S)||/Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/.exec(S))&&(p=parseFloat(RegExp.$1)),b?(b.style.cssText=\"top:1px;opacity:.55;\",/^0.55/.test(b.style.opacity)):!1}(),U=function(a){return x.test(\"string\"==typeof a?a:(a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?parseFloat(RegExp.$1)/100:1},V=function(a){window.console&&console.log(a)},W=\"\",X=\"\",Y=function(a,b){b=b||P;var c,d,e=b.style;if(void 0!==e[a])return a;for(a=a.charAt(0).toUpperCase()+a.substr(1),c=[\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"],d=5;--d>-1&&void 0===e[c[d]+a];);return d>=0?(X=3===d?\"ms\":c[d],W=\"-\"+X.toLowerCase()+\"-\",X+a):null},Z=N.defaultView?N.defaultView.getComputedStyle:function(){},$=g.getStyle=function(a,b,c,d,e){var f;return T||\"opacity\"!==b?(!d&&a.style[b]?f=a.style[b]:(c=c||Z(a))?f=c[b]||c.getPropertyValue(b)||c.getPropertyValue(b.replace(B,\"-$1\").toLowerCase()):a.currentStyle&&(f=a.currentStyle[b]),null==e||f&&\"none\"!==f&&\"auto\"!==f&&\"auto auto\"!==f?f:e):U(a)},_=R.convertToPixels=function(a,c,d,e,f){if(\"px\"===e||!e)return d;if(\"auto\"===e||!d)return 0;var h,i,j,k=F.test(c),l=a,m=P.style,n=0>d,o=1===d;if(n&&(d=-d),o&&(d*=100),\"%\"===e&&-1!==c.indexOf(\"border\"))h=d/100*(k?a.clientWidth:a.clientHeight);else{if(m.cssText=\"border:0 solid red;position:\"+$(a,\"position\")+\";line-height:0;\",\"%\"!==e&&l.appendChild&&\"v\"!==e.charAt(0)&&\"rem\"!==e)m[k?\"borderLeftWidth\":\"borderTopWidth\"]=d+e;else{if(l=a.parentNode||N.body,i=l._gsCache,j=b.ticker.frame,i&&k&&i.time===j)return i.width*d/100;m[k?\"width\":\"height\"]=d+e}l.appendChild(P),h=parseFloat(P[k?\"offsetWidth\":\"offsetHeight\"]),l.removeChild(P),k&&\"%\"===e&&g.cacheWidths!==!1&&(i=l._gsCache=l._gsCache||{},i.time=j,i.width=h/d*100),0!==h||f||(h=_(a,c,d,e,!0))}return o&&(h/=100),n?-h:h},aa=R.calculateOffset=function(a,b,c){if(\"absolute\"!==$(a,\"position\",c))return 0;var d=\"left\"===b?\"Left\":\"Top\",e=$(a,\"margin\"+d,c);return a[\"offset\"+d]-(_(a,b,parseFloat(e),e.replace(w,\"\"))||0)},ba=function(a,b){var c,d,e,f={};if(b=b||Z(a,null))if(c=b.length)for(;--c>-1;)e=b[c],(-1===e.indexOf(\"-transform\")||Ca===e)&&(f[e.replace(C,E)]=b.getPropertyValue(e));else for(c in b)(-1===c.indexOf(\"Transform\")||Ba===c)&&(f[c]=b[c]);else if(b=a.currentStyle||a.style)for(c in b)\"string\"==typeof c&&void 0===f[c]&&(f[c.replace(C,E)]=b[c]);return T||(f.opacity=U(a)),d=Pa(a,b,!1),f.rotation=d.rotation,f.skewX=d.skewX,f.scaleX=d.scaleX,f.scaleY=d.scaleY,f.x=d.x,f.y=d.y,Ea&&(f.z=d.z,f.rotationX=d.rotationX,f.rotationY=d.rotationY,f.scaleZ=d.scaleZ),f.filters&&delete f.filters,f},ca=function(a,b,c,d,e){var f,g,h,i={},j=a.style;for(g in c)\"cssText\"!==g&&\"length\"!==g&&isNaN(g)&&(b[g]!==(f=c[g])||e&&e[g])&&-1===g.indexOf(\"Origin\")&&(\"number\"==typeof f||\"string\"==typeof f)&&(i[g]=\"auto\"!==f||\"left\"!==g&&\"top\"!==g?\"\"!==f&&\"auto\"!==f&&\"none\"!==f||\"string\"!=typeof b[g]||\"\"===b[g].replace(v,\"\")?f:0:aa(a,g),void 0!==j[g]&&(h=new ra(j,g,j[g],h)));if(d)for(g in d)\"className\"!==g&&(i[g]=d[g]);return{difs:i,firstMPT:h}},da={width:[\"Left\",\"Right\"],height:[\"Top\",\"Bottom\"]},ea=[\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],fa=function(a,b,c){if(\"svg\"===(a.nodeName+\"\").toLowerCase())return(c||Z(a))[b]||0;if(a.getBBox&&Ma(a))return a.getBBox()[b]||0;var d=parseFloat(\"width\"===b?a.offsetWidth:a.offsetHeight),e=da[b],f=e.length;for(c=c||Z(a,null);--f>-1;)d-=parseFloat($(a,\"padding\"+e[f],c,!0))||0,d-=parseFloat($(a,\"border\"+e[f]+\"Width\",c,!0))||0;return d},ga=function(a,b){if(\"contain\"===a||\"auto\"===a||\"auto auto\"===a)return a+\" \";(null==a||\"\"===a)&&(a=\"0 0\");var c,d=a.split(\" \"),e=-1!==a.indexOf(\"left\")?\"0%\":-1!==a.indexOf(\"right\")?\"100%\":d[0],f=-1!==a.indexOf(\"top\")?\"0%\":-1!==a.indexOf(\"bottom\")?\"100%\":d[1];if(d.length>3&&!b){for(d=a.split(\", \").join(\",\").split(\",\"),a=[],c=0;c<d.length;c++)a.push(ga(d[c]));return a.join(\",\")}return null==f?f=\"center\"===e?\"50%\":\"0\":\"center\"===f&&(f=\"50%\"),(\"center\"===e||isNaN(parseFloat(e))&&-1===(e+\"\").indexOf(\"=\"))&&(e=\"50%\"),a=e+\" \"+f+(d.length>2?\" \"+d[2]:\"\"),b&&(b.oxp=-1!==e.indexOf(\"%\"),b.oyp=-1!==f.indexOf(\"%\"),b.oxr=\"=\"===e.charAt(1),b.oyr=\"=\"===f.charAt(1),b.ox=parseFloat(e.replace(v,\"\")),b.oy=parseFloat(f.replace(v,\"\")),b.v=a),b||a},ha=function(a,b){return\"function\"==typeof a&&(a=a(r,q)),\"string\"==typeof a&&\"=\"===a.charAt(1)?parseInt(a.charAt(0)+\"1\",10)*parseFloat(a.substr(2)):parseFloat(a)-parseFloat(b)||0},ia=function(a,b){return\"function\"==typeof a&&(a=a(r,q)),null==a?b:\"string\"==typeof a&&\"=\"===a.charAt(1)?parseInt(a.charAt(0)+\"1\",10)*parseFloat(a.substr(2))+b:parseFloat(a)||0},ja=function(a,b,c,d){var e,f,g,h,i,j=1e-6;return\"function\"==typeof a&&(a=a(r,q)),null==a?h=b:\"number\"==typeof a?h=a:(e=360,f=a.split(\"_\"),i=\"=\"===a.charAt(1),g=(i?parseInt(a.charAt(0)+\"1\",10)*parseFloat(f[0].substr(2)):parseFloat(f[0]))*(-1===a.indexOf(\"rad\")?1:L)-(i?0:b),f.length&&(d&&(d[c]=b+g),-1!==a.indexOf(\"short\")&&(g%=e,g!==g%(e/2)&&(g=0>g?g+e:g-e)),-1!==a.indexOf(\"_cw\")&&0>g?g=(g+9999999999*e)%e-(g/e|0)*e:-1!==a.indexOf(\"ccw\")&&g>0&&(g=(g-9999999999*e)%e-(g/e|0)*e)),h=b+g),j>h&&h>-j&&(h=0),h},ka={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},la=function(a,b,c){return a=0>a?a+1:a>1?a-1:a,255*(1>6*a?b+(c-b)*a*6:.5>a?c:2>3*a?b+(c-b)*(2/3-a)*6:b)+.5|0},ma=g.parseColor=function(a,b){var c,d,e,f,g,h,i,j,k,l,m;if(a)if(\"number\"==typeof a)c=[a>>16,a>>8&255,255&a];else{if(\",\"===a.charAt(a.length-1)&&(a=a.substr(0,a.length-1)),ka[a])c=ka[a];else if(\"#\"===a.charAt(0))4===a.length&&(d=a.charAt(1),e=a.charAt(2),f=a.charAt(3),a=\"#\"+d+d+e+e+f+f),a=parseInt(a.substr(1),16),c=[a>>16,a>>8&255,255&a];else if(\"hsl\"===a.substr(0,3))if(c=m=a.match(s),b){if(-1!==a.indexOf(\"=\"))return a.match(t)}else g=Number(c[0])%360/360,h=Number(c[1])/100,i=Number(c[2])/100,e=.5>=i?i*(h+1):i+h-i*h,d=2*i-e,c.length>3&&(c[3]=Number(a[3])),c[0]=la(g+1/3,d,e),c[1]=la(g,d,e),c[2]=la(g-1/3,d,e);else c=a.match(s)||ka.transparent;c[0]=Number(c[0]),c[1]=Number(c[1]),c[2]=Number(c[2]),c.length>3&&(c[3]=Number(c[3]))}else c=ka.black;return b&&!m&&(d=c[0]/255,e=c[1]/255,f=c[2]/255,j=Math.max(d,e,f),k=Math.min(d,e,f),i=(j+k)/2,j===k?g=h=0:(l=j-k,h=i>.5?l/(2-j-k):l/(j+k),g=j===d?(e-f)/l+(f>e?6:0):j===e?(f-d)/l+2:(d-e)/l+4,g*=60),c[0]=g+.5|0,c[1]=100*h+.5|0,c[2]=100*i+.5|0),c},na=function(a,b){var c,d,e,f=a.match(oa)||[],g=0,h=f.length?\"\":a;for(c=0;c<f.length;c++)d=f[c],e=a.substr(g,a.indexOf(d,g)-g),g+=e.length+d.length,d=ma(d,b),3===d.length&&d.push(1),h+=e+(b?\"hsla(\"+d[0]+\",\"+d[1]+\"%,\"+d[2]+\"%,\"+d[3]:\"rgba(\"+d.join(\",\"))+\")\";return h+a.substr(g)},oa=\"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\";for(j in ka)oa+=\"|\"+j+\"\\\\b\";oa=new RegExp(oa+\")\",\"gi\"),g.colorStringFilter=function(a){var b,c=a[0]+a[1];oa.test(c)&&(b=-1!==c.indexOf(\"hsl(\")||-1!==c.indexOf(\"hsla(\"),a[0]=na(a[0],b),a[1]=na(a[1],b)),oa.lastIndex=0},b.defaultStringFilter||(b.defaultStringFilter=g.colorStringFilter);var pa=function(a,b,c,d){if(null==a)return function(a){return a};var e,f=b?(a.match(oa)||[\"\"])[0]:\"\",g=a.split(f).join(\"\").match(u)||[],h=a.substr(0,a.indexOf(g[0])),i=\")\"===a.charAt(a.length-1)?\")\":\"\",j=-1!==a.indexOf(\" \")?\" \":\",\",k=g.length,l=k>0?g[0].replace(s,\"\"):\"\";return k?e=b?function(a){var b,m,n,o;if(\"number\"==typeof a)a+=l;else if(d&&I.test(a)){for(o=a.replace(I,\"|\").split(\"|\"),n=0;n<o.length;n++)o[n]=e(o[n]);return o.join(\",\")}if(b=(a.match(oa)||[f])[0],m=a.split(b).join(\"\").match(u)||[],n=m.length,k>n--)for(;++n<k;)m[n]=c?m[(n-1)/2|0]:g[n];return h+m.join(j)+j+b+i+(-1!==a.indexOf(\"inset\")?\" inset\":\"\")}:function(a){var b,f,m;if(\"number\"==typeof a)a+=l;else if(d&&I.test(a)){for(f=a.replace(I,\"|\").split(\"|\"),m=0;m<f.length;m++)f[m]=e(f[m]);return f.join(\",\")}if(b=a.match(u)||[],m=b.length,k>m--)for(;++m<k;)b[m]=c?b[(m-1)/2|0]:g[m];return h+b.join(j)+i}:function(a){return a}},qa=function(a){return a=a.split(\",\"),function(b,c,d,e,f,g,h){var i,j=(c+\"\").split(\" \");for(h={},i=0;4>i;i++)h[a[i]]=j[i]=j[i]||j[(i-1)/2>>0];return e.parse(b,h,f,g)}},ra=(R._setPluginRatio=function(a){this.plugin.setRatio(a);for(var b,c,d,e,f,g=this.data,h=g.proxy,i=g.firstMPT,j=1e-6;i;)b=h[i.v],i.r?b=Math.round(b):j>b&&b>-j&&(b=0),i.t[i.p]=b,i=i._next;if(g.autoRotate&&(g.autoRotate.rotation=g.mod?g.mod(h.rotation,this.t):h.rotation),1===a||0===a)for(i=g.firstMPT,f=1===a?\"e\":\"b\";i;){if(c=i.t,c.type){if(1===c.type){for(e=c.xs0+c.s+c.xs1,d=1;d<c.l;d++)e+=c[\"xn\"+d]+c[\"xs\"+(d+1)];c[f]=e}}else c[f]=c.s+c.xs0;i=i._next}},function(a,b,c,d,e){this.t=a,this.p=b,this.v=c,this.r=e,d&&(d._prev=this,this._next=d)}),sa=(R._parseToProxy=function(a,b,c,d,e,f){var g,h,i,j,k,l=d,m={},n={},o=c._transform,p=M;for(c._transform=null,M=b,d=k=c.parse(a,b,d,e),M=p,f&&(c._transform=o,l&&(l._prev=null,l._prev&&(l._prev._next=null)));d&&d!==l;){if(d.type<=1&&(h=d.p,n[h]=d.s+d.c,m[h]=d.s,f||(j=new ra(d,\"s\",h,j,d.r),d.c=0),1===d.type))for(g=d.l;--g>0;)i=\"xn\"+g,h=d.p+\"_\"+i,n[h]=d.data[i],m[h]=d[i],f||(j=new ra(d,i,h,j,d.rxp[i]));d=d._next}return{proxy:m,end:n,firstMPT:j,pt:k}},R.CSSPropTween=function(a,b,d,e,g,h,i,j,k,l,m){this.t=a,this.p=b,this.s=d,this.c=e,this.n=i||b,a instanceof sa||f.push(this.n),this.r=j,this.type=h||0,k&&(this.pr=k,c=!0),this.b=void 0===l?d:l,this.e=void 0===m?d+e:m,g&&(this._next=g,g._prev=this)}),ta=function(a,b,c,d,e,f){var g=new sa(a,b,c,d-c,e,-1,f);return g.b=c,g.e=g.xs0=d,g},ua=g.parseComplex=function(a,b,c,d,e,f,h,i,j,l){c=c||f||\"\",\"function\"==typeof d&&(d=d(r,q)),h=new sa(a,b,0,0,h,l?2:1,null,!1,i,c,d),d+=\"\",e&&oa.test(d+c)&&(d=[c,d],g.colorStringFilter(d),c=d[0],d=d[1]);var m,n,o,p,u,v,w,x,y,z,A,B,C,D=c.split(\", \").join(\",\").split(\" \"),E=d.split(\", \").join(\",\").split(\" \"),F=D.length,G=k!==!1;for((-1!==d.indexOf(\",\")||-1!==c.indexOf(\",\"))&&(D=D.join(\" \").replace(I,\", \").split(\" \"),E=E.join(\" \").replace(I,\", \").split(\" \"),F=D.length),F!==E.length&&(D=(f||\"\").split(\" \"),F=D.length),h.plugin=j,h.setRatio=l,oa.lastIndex=0,m=0;F>m;m++)if(p=D[m],u=E[m],x=parseFloat(p),x||0===x)h.appendXtra(\"\",x,ha(u,x),u.replace(t,\"\"),G&&-1!==u.indexOf(\"px\"),!0);else if(e&&oa.test(p))B=u.indexOf(\")\")+1,B=\")\"+(B?u.substr(B):\"\"),C=-1!==u.indexOf(\"hsl\")&&T,p=ma(p,C),u=ma(u,C),y=p.length+u.length>6,y&&!T&&0===u[3]?(h[\"xs\"+h.l]+=h.l?\" transparent\":\"transparent\",h.e=h.e.split(E[m]).join(\"transparent\")):(T||(y=!1),C?h.appendXtra(y?\"hsla(\":\"hsl(\",p[0],ha(u[0],p[0]),\",\",!1,!0).appendXtra(\"\",p[1],ha(u[1],p[1]),\"%,\",!1).appendXtra(\"\",p[2],ha(u[2],p[2]),y?\"%,\":\"%\"+B,!1):h.appendXtra(y?\"rgba(\":\"rgb(\",p[0],u[0]-p[0],\",\",!0,!0).appendXtra(\"\",p[1],u[1]-p[1],\",\",!0).appendXtra(\"\",p[2],u[2]-p[2],y?\",\":B,!0),y&&(p=p.length<4?1:p[3],h.appendXtra(\"\",p,(u.length<4?1:u[3])-p,B,!1))),oa.lastIndex=0;else if(v=p.match(s)){if(w=u.match(t),!w||w.length!==v.length)return h;for(o=0,n=0;n<v.length;n++)A=v[n],z=p.indexOf(A,o),h.appendXtra(p.substr(o,z-o),Number(A),ha(w[n],A),\"\",G&&\"px\"===p.substr(z+A.length,2),0===n),o=z+A.length;h[\"xs\"+h.l]+=p.substr(o)}else h[\"xs\"+h.l]+=h.l||h[\"xs\"+h.l]?\" \"+u:u;if(-1!==d.indexOf(\"=\")&&h.data){for(B=h.xs0+h.data.s,m=1;m<h.l;m++)B+=h[\"xs\"+m]+h.data[\"xn\"+m];h.e=B+h[\"xs\"+m]}return h.l||(h.type=-1,h.xs0=h.e),h.xfirst||h},va=9;for(j=sa.prototype,j.l=j.pr=0;--va>0;)j[\"xn\"+va]=0,j[\"xs\"+va]=\"\";j.xs0=\"\",j._next=j._prev=j.xfirst=j.data=j.plugin=j.setRatio=j.rxp=null,j.appendXtra=function(a,b,c,d,e,f){var g=this,h=g.l;return g[\"xs\"+h]+=f&&(h||g[\"xs\"+h])?\" \"+a:a||\"\",c||0===h||g.plugin?(g.l++,g.type=g.setRatio?2:1,g[\"xs\"+g.l]=d||\"\",h>0?(g.data[\"xn\"+h]=b+c,g.rxp[\"xn\"+h]=e,g[\"xn\"+h]=b,g.plugin||(g.xfirst=new sa(g,\"xn\"+h,b,c,g.xfirst||g,0,g.n,e,g.pr),g.xfirst.xs0=0),g):(g.data={s:b+c},g.rxp={},g.s=b,g.c=c,g.r=e,g)):(g[\"xs\"+h]+=b+(d||\"\"),g)};var wa=function(a,b){b=b||{},this.p=b.prefix?Y(a)||a:a,i[a]=i[this.p]=this,this.format=b.formatter||pa(b.defaultValue,b.color,b.collapsible,b.multi),b.parser&&(this.parse=b.parser),this.clrs=b.color,this.multi=b.multi,this.keyword=b.keyword,this.dflt=b.defaultValue,this.pr=b.priority||0},xa=R._registerComplexSpecialProp=function(a,b,c){\"object\"!=typeof b&&(b={parser:c});var d,e,f=a.split(\",\"),g=b.defaultValue;for(c=c||[g],d=0;d<f.length;d++)b.prefix=0===d&&b.prefix,b.defaultValue=c[d]||g,e=new wa(f[d],b)},ya=R._registerPluginProp=function(a){if(!i[a]){var b=a.charAt(0).toUpperCase()+a.substr(1)+\"Plugin\";xa(a,{parser:function(a,c,d,e,f,g,j){var k=h.com.greensock.plugins[b];return k?(k._cssRegister(),i[d].parse(a,c,d,e,f,g,j)):(V(\"Error: \"+b+\" js file not loaded.\"),f)}})}};j=wa.prototype,j.parseComplex=function(a,b,c,d,e,f){var g,h,i,j,k,l,m=this.keyword;if(this.multi&&(I.test(c)||I.test(b)?(h=b.replace(I,\"|\").split(\"|\"),i=c.replace(I,\"|\").split(\"|\")):m&&(h=[b],i=[c])),i){for(j=i.length>h.length?i.length:h.length,g=0;j>g;g++)b=h[g]=h[g]||this.dflt,c=i[g]=i[g]||this.dflt,m&&(k=b.indexOf(m),l=c.indexOf(m),k!==l&&(-1===l?h[g]=h[g].split(m).join(\"\"):-1===k&&(h[g]+=\" \"+m)));b=h.join(\", \"),c=i.join(\", \")}return ua(a,this.p,b,c,this.clrs,this.dflt,d,this.pr,e,f)},j.parse=function(a,b,c,d,f,g,h){return this.parseComplex(a.style,this.format($(a,this.p,e,!1,this.dflt)),this.format(b),f,g)},g.registerSpecialProp=function(a,b,c){xa(a,{parser:function(a,d,e,f,g,h,i){var j=new sa(a,e,0,0,g,2,e,!1,c);return j.plugin=h,j.setRatio=b(a,d,f._tween,e),j},priority:c})},g.useSVGTransformAttr=m||n;var za,Aa=\"scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent\".split(\",\"),Ba=Y(\"transform\"),Ca=W+\"transform\",Da=Y(\"transformOrigin\"),Ea=null!==Y(\"perspective\"),Fa=R.Transform=function(){this.perspective=parseFloat(g.defaultTransformPerspective)||0,this.force3D=g.defaultForce3D!==!1&&Ea?g.defaultForce3D||\"auto\":!1},Ga=window.SVGElement,Ha=function(a,b,c){var d,e=N.createElementNS(\"http://www.w3.org/2000/svg\",a),f=/([a-z])([A-Z])/g;for(d in c)e.setAttributeNS(null,d.replace(f,\"$1-$2\").toLowerCase(),c[d]);return b.appendChild(e),e},Ia=N.documentElement,Ja=function(){var a,b,c,d=p||/Android/i.test(S)&&!window.chrome;return N.createElementNS&&!d&&(a=Ha(\"svg\",Ia),b=Ha(\"rect\",a,{width:100,height:50,x:100}),c=b.getBoundingClientRect().width,b.style[Da]=\"50% 50%\",b.style[Ba]=\"scaleX(0.5)\",d=c===b.getBoundingClientRect().width&&!(n&&Ea),Ia.removeChild(a)),d}(),Ka=function(a,b,c,d,e,f){var h,i,j,k,l,m,n,o,p,q,r,s,t,u,v=a._gsTransform,w=Oa(a,!0);v&&(t=v.xOrigin,u=v.yOrigin),(!d||(h=d.split(\" \")).length<2)&&(n=a.getBBox(),b=ga(b).split(\" \"),h=[(-1!==b[0].indexOf(\"%\")?parseFloat(b[0])/100*n.width:parseFloat(b[0]))+n.x,(-1!==b[1].indexOf(\"%\")?parseFloat(b[1])/100*n.height:parseFloat(b[1]))+n.y]),c.xOrigin=k=parseFloat(h[0]),c.yOrigin=l=parseFloat(h[1]),d&&w!==Na&&(m=w[0],n=w[1],o=w[2],p=w[3],q=w[4],r=w[5],s=m*p-n*o,i=k*(p/s)+l*(-o/s)+(o*r-p*q)/s,j=k*(-n/s)+l*(m/s)-(m*r-n*q)/s,k=c.xOrigin=h[0]=i,l=c.yOrigin=h[1]=j),v&&(f&&(c.xOffset=v.xOffset,c.yOffset=v.yOffset,v=c),e||e!==!1&&g.defaultSmoothOrigin!==!1?(i=k-t,j=l-u,v.xOffset+=i*w[0]+j*w[2]-i,v.yOffset+=i*w[1]+j*w[3]-j):v.xOffset=v.yOffset=0),f||a.setAttribute(\"data-svg-origin\",h.join(\" \"))},La=function(a){try{return a.getBBox()}catch(a){}},Ma=function(a){return!!(Ga&&a.getBBox&&a.getCTM&&La(a)&&(!a.parentNode||a.parentNode.getBBox&&a.parentNode.getCTM))},Na=[1,0,0,1,0,0],Oa=function(a,b){var c,d,e,f,g,h,i=a._gsTransform||new Fa,j=1e5,k=a.style;if(Ba?d=$(a,Ca,null,!0):a.currentStyle&&(d=a.currentStyle.filter.match(G),d=d&&4===d.length?[d[0].substr(4),Number(d[2].substr(4)),Number(d[1].substr(4)),d[3].substr(4),i.x||0,i.y||0].join(\",\"):\"\"),c=!d||\"none\"===d||\"matrix(1, 0, 0, 1, 0, 0)\"===d,c&&Ba&&((h=\"none\"===Z(a).display)||!a.parentNode)&&(h&&(f=k.display,k.display=\"block\"),a.parentNode||(g=1,Ia.appendChild(a)),d=$(a,Ca,null,!0),c=!d||\"none\"===d||\"matrix(1, 0, 0, 1, 0, 0)\"===d,f?k.display=f:h&&Ta(k,\"display\"),g&&Ia.removeChild(a)),(i.svg||a.getBBox&&Ma(a))&&(c&&-1!==(k[Ba]+\"\").indexOf(\"matrix\")&&(d=k[Ba],c=0),e=a.getAttribute(\"transform\"),c&&e&&(-1!==e.indexOf(\"matrix\")?(d=e,c=0):-1!==e.indexOf(\"translate\")&&(d=\"matrix(1,0,0,1,\"+e.match(/(?:\\-|\\b)[\\d\\-\\.e]+\\b/gi).join(\",\")+\")\",c=0))),c)return Na;for(e=(d||\"\").match(s)||[],va=e.length;--va>-1;)f=Number(e[va]),e[va]=(g=f-(f|=0))?(g*j+(0>g?-.5:.5)|0)/j+f:f;return b&&e.length>6?[e[0],e[1],e[4],e[5],e[12],e[13]]:e},Pa=R.getTransform=function(a,c,d,e){if(a._gsTransform&&d&&!e)return a._gsTransform;var f,h,i,j,k,l,m=d?a._gsTransform||new Fa:new Fa,n=m.scaleX<0,o=2e-5,p=1e5,q=Ea?parseFloat($(a,Da,c,!1,\"0 0 0\").split(\" \")[2])||m.zOrigin||0:0,r=parseFloat(g.defaultTransformPerspective)||0;if(m.svg=!(!a.getBBox||!Ma(a)),m.svg&&(Ka(a,$(a,Da,c,!1,\"50% 50%\")+\"\",m,a.getAttribute(\"data-svg-origin\")),za=g.useSVGTransformAttr||Ja),f=Oa(a),f!==Na){if(16===f.length){var s,t,u,v,w,x=f[0],y=f[1],z=f[2],A=f[3],B=f[4],C=f[5],D=f[6],E=f[7],F=f[8],G=f[9],H=f[10],I=f[12],J=f[13],K=f[14],M=f[11],N=Math.atan2(D,H);m.zOrigin&&(K=-m.zOrigin,I=F*K-f[12],J=G*K-f[13],K=H*K+m.zOrigin-f[14]),m.rotationX=N*L,N&&(v=Math.cos(-N),w=Math.sin(-N),s=B*v+F*w,t=C*v+G*w,u=D*v+H*w,F=B*-w+F*v,G=C*-w+G*v,H=D*-w+H*v,M=E*-w+M*v,B=s,C=t,D=u),N=Math.atan2(-z,H),m.rotationY=N*L,N&&(v=Math.cos(-N),w=Math.sin(-N),s=x*v-F*w,t=y*v-G*w,u=z*v-H*w,G=y*w+G*v,H=z*w+H*v,M=A*w+M*v,x=s,y=t,z=u),N=Math.atan2(y,x),m.rotation=N*L,N&&(v=Math.cos(-N),w=Math.sin(-N),x=x*v+B*w,t=y*v+C*w,C=y*-w+C*v,D=z*-w+D*v,y=t),m.rotationX&&Math.abs(m.rotationX)+Math.abs(m.rotation)>359.9&&(m.rotationX=m.rotation=0,m.rotationY=180-m.rotationY),m.scaleX=(Math.sqrt(x*x+y*y)*p+.5|0)/p,m.scaleY=(Math.sqrt(C*C+G*G)*p+.5|0)/p,m.scaleZ=(Math.sqrt(D*D+H*H)*p+.5|0)/p,m.rotationX||m.rotationY?m.skewX=0:(m.skewX=B||C?Math.atan2(B,C)*L+m.rotation:m.skewX||0,Math.abs(m.skewX)>90&&Math.abs(m.skewX)<270&&(n?(m.scaleX*=-1,m.skewX+=m.rotation<=0?180:-180,m.rotation+=m.rotation<=0?180:-180):(m.scaleY*=-1,m.skewX+=m.skewX<=0?180:-180))),m.perspective=M?1/(0>M?-M:M):0,m.x=I,m.y=J,m.z=K,m.svg&&(m.x-=m.xOrigin-(m.xOrigin*x-m.yOrigin*B),m.y-=m.yOrigin-(m.yOrigin*y-m.xOrigin*C))}else if(!Ea||e||!f.length||m.x!==f[4]||m.y!==f[5]||!m.rotationX&&!m.rotationY){var O=f.length>=6,P=O?f[0]:1,Q=f[1]||0,R=f[2]||0,S=O?f[3]:1;m.x=f[4]||0,m.y=f[5]||0,i=Math.sqrt(P*P+Q*Q),j=Math.sqrt(S*S+R*R),k=P||Q?Math.atan2(Q,P)*L:m.rotation||0,l=R||S?Math.atan2(R,S)*L+k:m.skewX||0,Math.abs(l)>90&&Math.abs(l)<270&&(n?(i*=-1,l+=0>=k?180:-180,k+=0>=k?180:-180):(j*=-1,l+=0>=l?180:-180)),m.scaleX=i,m.scaleY=j,m.rotation=k,m.skewX=l,Ea&&(m.rotationX=m.rotationY=m.z=0,m.perspective=r,m.scaleZ=1),m.svg&&(m.x-=m.xOrigin-(m.xOrigin*P+m.yOrigin*R),m.y-=m.yOrigin-(m.xOrigin*Q+m.yOrigin*S))}m.zOrigin=q;for(h in m)m[h]<o&&m[h]>-o&&(m[h]=0)}return d&&(a._gsTransform=m,m.svg&&(za&&a.style[Ba]?b.delayedCall(.001,function(){Ta(a.style,Ba)}):!za&&a.getAttribute(\"transform\")&&b.delayedCall(.001,function(){a.removeAttribute(\"transform\")}))),m},Qa=function(a){var b,c,d=this.data,e=-d.rotation*K,f=e+d.skewX*K,g=1e5,h=(Math.cos(e)*d.scaleX*g|0)/g,i=(Math.sin(e)*d.scaleX*g|0)/g,j=(Math.sin(f)*-d.scaleY*g|0)/g,k=(Math.cos(f)*d.scaleY*g|0)/g,l=this.t.style,m=this.t.currentStyle;if(m){c=i,i=-j,j=-c,b=m.filter,l.filter=\"\";var n,o,q=this.t.offsetWidth,r=this.t.offsetHeight,s=\"absolute\"!==m.position,t=\"progid:DXImageTransform.Microsoft.Matrix(M11=\"+h+\", M12=\"+i+\", M21=\"+j+\", M22=\"+k,u=d.x+q*d.xPercent/100,v=d.y+r*d.yPercent/100;if(null!=d.ox&&(n=(d.oxp?q*d.ox*.01:d.ox)-q/2,o=(d.oyp?r*d.oy*.01:d.oy)-r/2,u+=n-(n*h+o*i),v+=o-(n*j+o*k)),s?(n=q/2,o=r/2,t+=\", Dx=\"+(n-(n*h+o*i)+u)+\", Dy=\"+(o-(n*j+o*k)+v)+\")\"):t+=\", sizingMethod='auto expand')\",-1!==b.indexOf(\"DXImageTransform.Microsoft.Matrix(\")?l.filter=b.replace(H,t):l.filter=t+\" \"+b,(0===a||1===a)&&1===h&&0===i&&0===j&&1===k&&(s&&-1===t.indexOf(\"Dx=0, Dy=0\")||x.test(b)&&100!==parseFloat(RegExp.$1)||-1===b.indexOf(b.indexOf(\"Alpha\"))&&l.removeAttribute(\"filter\")),!s){var y,z,A,B=8>p?1:-1;for(n=d.ieOffsetX||0,o=d.ieOffsetY||0,d.ieOffsetX=Math.round((q-((0>h?-h:h)*q+(0>i?-i:i)*r))/2+u),d.ieOffsetY=Math.round((r-((0>k?-k:k)*r+(0>j?-j:j)*q))/2+v),va=0;4>va;va++)z=ea[va],y=m[z],c=-1!==y.indexOf(\"px\")?parseFloat(y):_(this.t,z,parseFloat(y),y.replace(w,\"\"))||0,A=c!==d[z]?2>va?-d.ieOffsetX:-d.ieOffsetY:2>va?n-d.ieOffsetX:o-d.ieOffsetY,l[z]=(d[z]=Math.round(c-A*(0===va||2===va?1:B)))+\"px\"}}},Ra=R.set3DTransformRatio=R.setTransformRatio=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,o,p,q,r,s,t,u,v,w,x,y,z=this.data,A=this.t.style,B=z.rotation,C=z.rotationX,D=z.rotationY,E=z.scaleX,F=z.scaleY,G=z.scaleZ,H=z.x,I=z.y,J=z.z,L=z.svg,M=z.perspective,N=z.force3D;if(((1===a||0===a)&&\"auto\"===N&&(this.tween._totalTime===this.tween._totalDuration||!this.tween._totalTime)||!N)&&!J&&!M&&!D&&!C&&1===G||za&&L||!Ea)return void(B||z.skewX||L?(B*=K,x=z.skewX*K,y=1e5,b=Math.cos(B)*E,e=Math.sin(B)*E,c=Math.sin(B-x)*-F,f=Math.cos(B-x)*F,x&&\"simple\"===z.skewType&&(s=Math.tan(x-z.skewY*K),s=Math.sqrt(1+s*s),c*=s,f*=s,z.skewY&&(s=Math.tan(z.skewY*K),s=Math.sqrt(1+s*s),b*=s,e*=s)),L&&(H+=z.xOrigin-(z.xOrigin*b+z.yOrigin*c)+z.xOffset,I+=z.yOrigin-(z.xOrigin*e+z.yOrigin*f)+z.yOffset,za&&(z.xPercent||z.yPercent)&&(p=this.t.getBBox(),H+=.01*z.xPercent*p.width,I+=.01*z.yPercent*p.height),p=1e-6,p>H&&H>-p&&(H=0),p>I&&I>-p&&(I=0)),u=(b*y|0)/y+\",\"+(e*y|0)/y+\",\"+(c*y|0)/y+\",\"+(f*y|0)/y+\",\"+H+\",\"+I+\")\",L&&za?this.t.setAttribute(\"transform\",\"matrix(\"+u):A[Ba]=(z.xPercent||z.yPercent?\"translate(\"+z.xPercent+\"%,\"+z.yPercent+\"%) matrix(\":\"matrix(\")+u):A[Ba]=(z.xPercent||z.yPercent?\"translate(\"+z.xPercent+\"%,\"+z.yPercent+\"%) matrix(\":\"matrix(\")+E+\",0,0,\"+F+\",\"+H+\",\"+I+\")\");if(n&&(p=1e-4,p>E&&E>-p&&(E=G=2e-5),p>F&&F>-p&&(F=G=2e-5),!M||z.z||z.rotationX||z.rotationY||(M=0)),B||z.skewX)B*=K,q=b=Math.cos(B),r=e=Math.sin(B),z.skewX&&(B-=z.skewX*K,q=Math.cos(B),r=Math.sin(B),\"simple\"===z.skewType&&(s=Math.tan((z.skewX-z.skewY)*K),s=Math.sqrt(1+s*s),q*=s,r*=s,z.skewY&&(s=Math.tan(z.skewY*K),s=Math.sqrt(1+s*s),b*=s,e*=s))),c=-r,f=q;else{if(!(D||C||1!==G||M||L))return void(A[Ba]=(z.xPercent||z.yPercent?\"translate(\"+z.xPercent+\"%,\"+z.yPercent+\"%) translate3d(\":\"translate3d(\")+H+\"px,\"+I+\"px,\"+J+\"px)\"+(1!==E||1!==F?\" scale(\"+E+\",\"+F+\")\":\"\"));b=f=1,c=e=0}j=1,d=g=h=i=k=l=0,m=M?-1/M:0,o=z.zOrigin,p=1e-6,v=\",\",w=\"0\",B=D*K,B&&(q=Math.cos(B),r=Math.sin(B),h=-r,k=m*-r,d=b*r,g=e*r,j=q,m*=q,b*=q,e*=q),B=C*K,B&&(q=Math.cos(B),r=Math.sin(B),s=c*q+d*r,t=f*q+g*r,i=j*r,l=m*r,d=c*-r+d*q,g=f*-r+g*q,j*=q,m*=q,c=s,f=t),1!==G&&(d*=G,g*=G,j*=G,m*=G),1!==F&&(c*=F,f*=F,i*=F,l*=F),1!==E&&(b*=E,e*=E,h*=E,k*=E),(o||L)&&(o&&(H+=d*-o,I+=g*-o,J+=j*-o+o),L&&(H+=z.xOrigin-(z.xOrigin*b+z.yOrigin*c)+z.xOffset,I+=z.yOrigin-(z.xOrigin*e+z.yOrigin*f)+z.yOffset),p>H&&H>-p&&(H=w),p>I&&I>-p&&(I=w),p>J&&J>-p&&(J=0)),u=z.xPercent||z.yPercent?\"translate(\"+z.xPercent+\"%,\"+z.yPercent+\"%) matrix3d(\":\"matrix3d(\",u+=(p>b&&b>-p?w:b)+v+(p>e&&e>-p?w:e)+v+(p>h&&h>-p?w:h),u+=v+(p>k&&k>-p?w:k)+v+(p>c&&c>-p?w:c)+v+(p>f&&f>-p?w:f),C||D||1!==G?(u+=v+(p>i&&i>-p?w:i)+v+(p>l&&l>-p?w:l)+v+(p>d&&d>-p?w:d),u+=v+(p>g&&g>-p?w:g)+v+(p>j&&j>-p?w:j)+v+(p>m&&m>-p?w:m)+v):u+=\",0,0,0,0,1,0,\",u+=H+v+I+v+J+v+(M?1+-J/M:1)+\")\",A[Ba]=u};j=Fa.prototype,j.x=j.y=j.z=j.skewX=j.skewY=j.rotation=j.rotationX=j.rotationY=j.zOrigin=j.xPercent=j.yPercent=j.xOffset=j.yOffset=0,j.scaleX=j.scaleY=j.scaleZ=1,xa(\"transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin\",{parser:function(a,b,c,d,f,h,i){if(d._lastParsedTransform===i)return f;d._lastParsedTransform=i;var j;\"function\"==typeof i[c]&&(j=i[c],i[c]=b);var k,l,m,n,o,p,s,t,u,v=a._gsTransform,w=a.style,x=1e-6,y=Aa.length,z=i,A={},B=\"transformOrigin\",C=Pa(a,e,!0,z.parseTransform),D=z.transform&&(\"function\"==typeof z.transform?z.transform(r,q):z.transform);if(d._transform=C,D&&\"string\"==typeof D&&Ba)l=P.style,l[Ba]=D,l.display=\"block\",l.position=\"absolute\",N.body.appendChild(P),k=Pa(P,null,!1),C.svg&&(p=C.xOrigin,s=C.yOrigin,k.x-=C.xOffset,k.y-=C.yOffset,(z.transformOrigin||z.svgOrigin)&&(D={},Ka(a,ga(z.transformOrigin),D,z.svgOrigin,z.smoothOrigin,!0),p=D.xOrigin,s=D.yOrigin,k.x-=D.xOffset-C.xOffset,k.y-=D.yOffset-C.yOffset),(p||s)&&(t=Oa(P,!0),k.x-=p-(p*t[0]+s*t[2]),k.y-=s-(p*t[1]+s*t[3]))),N.body.removeChild(P),k.perspective||(k.perspective=C.perspective),null!=z.xPercent&&(k.xPercent=ia(z.xPercent,C.xPercent)),null!=z.yPercent&&(k.yPercent=ia(z.yPercent,C.yPercent));else if(\"object\"==typeof z){if(k={scaleX:ia(null!=z.scaleX?z.scaleX:z.scale,C.scaleX),scaleY:ia(null!=z.scaleY?z.scaleY:z.scale,C.scaleY),scaleZ:ia(z.scaleZ,C.scaleZ),x:ia(z.x,C.x),y:ia(z.y,C.y),z:ia(z.z,C.z),xPercent:ia(z.xPercent,C.xPercent),yPercent:ia(z.yPercent,C.yPercent),perspective:ia(z.transformPerspective,C.perspective)},o=z.directionalRotation,null!=o)if(\"object\"==typeof o)for(l in o)z[l]=o[l];else z.rotation=o;\"string\"==typeof z.x&&-1!==z.x.indexOf(\"%\")&&(k.x=0,k.xPercent=ia(z.x,C.xPercent)),\"string\"==typeof z.y&&-1!==z.y.indexOf(\"%\")&&(k.y=0,k.yPercent=ia(z.y,C.yPercent)),k.rotation=ja(\"rotation\"in z?z.rotation:\"shortRotation\"in z?z.shortRotation+\"_short\":\"rotationZ\"in z?z.rotationZ:C.rotation-C.skewY,C.rotation-C.skewY,\"rotation\",A),Ea&&(k.rotationX=ja(\"rotationX\"in z?z.rotationX:\"shortRotationX\"in z?z.shortRotationX+\"_short\":C.rotationX||0,C.rotationX,\"rotationX\",A),k.rotationY=ja(\"rotationY\"in z?z.rotationY:\"shortRotationY\"in z?z.shortRotationY+\"_short\":C.rotationY||0,C.rotationY,\"rotationY\",A)),k.skewX=ja(z.skewX,C.skewX-C.skewY),(k.skewY=ja(z.skewY,C.skewY))&&(k.skewX+=k.skewY,k.rotation+=k.skewY)}for(Ea&&null!=z.force3D&&(C.force3D=z.force3D,n=!0),C.skewType=z.skewType||C.skewType||g.defaultSkewType,m=C.force3D||C.z||C.rotationX||C.rotationY||k.z||k.rotationX||k.rotationY||k.perspective,m||null==z.scale||(k.scaleZ=1);--y>-1;)u=Aa[y],D=k[u]-C[u],(D>x||-x>D||null!=z[u]||null!=M[u])&&(n=!0,f=new sa(C,u,C[u],D,f),u in A&&(f.e=A[u]),f.xs0=0,f.plugin=h,d._overwriteProps.push(f.n));return D=z.transformOrigin,C.svg&&(D||z.svgOrigin)&&(p=C.xOffset,s=C.yOffset,Ka(a,ga(D),k,z.svgOrigin,z.smoothOrigin),f=ta(C,\"xOrigin\",(v?C:k).xOrigin,k.xOrigin,f,B),f=ta(C,\"yOrigin\",(v?C:k).yOrigin,k.yOrigin,f,B),(p!==C.xOffset||s!==C.yOffset)&&(f=ta(C,\"xOffset\",v?p:C.xOffset,C.xOffset,f,B),f=ta(C,\"yOffset\",v?s:C.yOffset,C.yOffset,f,B)),D=za?null:\"0px 0px\"),(D||Ea&&m&&C.zOrigin)&&(Ba?(n=!0,u=Da,D=(D||$(a,u,e,!1,\"50% 50%\"))+\"\",f=new sa(w,u,0,0,f,-1,B),f.b=w[u],f.plugin=h,Ea?(l=C.zOrigin,D=D.split(\" \"),C.zOrigin=(D.length>2&&(0===l||\"0px\"!==D[2])?parseFloat(D[2]):l)||0,f.xs0=f.e=D[0]+\" \"+(D[1]||\"50%\")+\" 0px\",f=new sa(C,\"zOrigin\",0,0,f,-1,f.n),f.b=l,f.xs0=f.e=C.zOrigin):f.xs0=f.e=D):ga(D+\"\",C)),n&&(d._transformType=C.svg&&za||!m&&3!==this._transformType?2:3),j&&(i[c]=j),f},prefix:!0}),xa(\"boxShadow\",{defaultValue:\"0px 0px 0px 0px #999\",prefix:!0,color:!0,multi:!0,keyword:\"inset\"}),xa(\"borderRadius\",{defaultValue:\"0px\",parser:function(a,b,c,f,g,h){b=this.format(b);var i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y=[\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],z=a.style;for(q=parseFloat(a.offsetWidth),r=parseFloat(a.offsetHeight),i=b.split(\" \"),j=0;j<y.length;j++)this.p.indexOf(\"border\")&&(y[j]=Y(y[j])),m=l=$(a,y[j],e,!1,\"0px\"),-1!==m.indexOf(\" \")&&(l=m.split(\" \"),m=l[0],l=l[1]),n=k=i[j],o=parseFloat(m),t=m.substr((o+\"\").length),u=\"=\"===n.charAt(1),u?(p=parseInt(n.charAt(0)+\"1\",10),n=n.substr(2),p*=parseFloat(n),s=n.substr((p+\"\").length-(0>p?1:0))||\"\"):(p=parseFloat(n),s=n.substr((p+\"\").length)),\"\"===s&&(s=d[c]||t),s!==t&&(v=_(a,\"borderLeft\",o,t),w=_(a,\"borderTop\",o,t),\"%\"===s?(m=v/q*100+\"%\",l=w/r*100+\"%\"):\"em\"===s?(x=_(a,\"borderLeft\",1,\"em\"),m=v/x+\"em\",l=w/x+\"em\"):(m=v+\"px\",l=w+\"px\"),u&&(n=parseFloat(m)+p+s,k=parseFloat(l)+p+s)),g=ua(z,y[j],m+\" \"+l,n+\" \"+k,!1,\"0px\",g);return g},prefix:!0,formatter:pa(\"0px 0px 0px 0px\",!1,!0)}),xa(\"borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius\",{defaultValue:\"0px\",parser:function(a,b,c,d,f,g){return ua(a.style,c,this.format($(a,c,e,!1,\"0px 0px\")),this.format(b),!1,\"0px\",f)},prefix:!0,formatter:pa(\"0px 0px\",!1,!0)}),xa(\"backgroundPosition\",{defaultValue:\"0 0\",parser:function(a,b,c,d,f,g){var h,i,j,k,l,m,n=\"background-position\",o=e||Z(a,null),q=this.format((o?p?o.getPropertyValue(n+\"-x\")+\" \"+o.getPropertyValue(n+\"-y\"):o.getPropertyValue(n):a.currentStyle.backgroundPositionX+\" \"+a.currentStyle.backgroundPositionY)||\"0 0\"),r=this.format(b);if(-1!==q.indexOf(\"%\")!=(-1!==r.indexOf(\"%\"))&&r.split(\",\").length<2&&(m=$(a,\"backgroundImage\").replace(D,\"\"),m&&\"none\"!==m)){for(h=q.split(\" \"),i=r.split(\" \"),Q.setAttribute(\"src\",m),j=2;--j>-1;)q=h[j],k=-1!==q.indexOf(\"%\"),k!==(-1!==i[j].indexOf(\"%\"))&&(l=0===j?a.offsetWidth-Q.width:a.offsetHeight-Q.height,h[j]=k?parseFloat(q)/100*l+\"px\":parseFloat(q)/l*100+\"%\");q=h.join(\" \")}return this.parseComplex(a.style,q,r,f,g)},formatter:ga}),xa(\"backgroundSize\",{defaultValue:\"0 0\",formatter:function(a){return a+=\"\",ga(-1===a.indexOf(\" \")?a+\" \"+a:a)}}),xa(\"perspective\",{defaultValue:\"0px\",prefix:!0}),xa(\"perspectiveOrigin\",{defaultValue:\"50% 50%\",prefix:!0}),xa(\"transformStyle\",{prefix:!0}),xa(\"backfaceVisibility\",{prefix:!0}),xa(\"userSelect\",{prefix:!0}),xa(\"margin\",{parser:qa(\"marginTop,marginRight,marginBottom,marginLeft\")}),xa(\"padding\",{parser:qa(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")}),xa(\"clip\",{defaultValue:\"rect(0px,0px,0px,0px)\",parser:function(a,b,c,d,f,g){var h,i,j;return 9>p?(i=a.currentStyle,j=8>p?\" \":\",\",h=\"rect(\"+i.clipTop+j+i.clipRight+j+i.clipBottom+j+i.clipLeft+\")\",b=this.format(b).split(\",\").join(j)):(h=this.format($(a,this.p,e,!1,this.dflt)),b=this.format(b)),this.parseComplex(a.style,h,b,f,g)}}),xa(\"textShadow\",{defaultValue:\"0px 0px 0px #999\",color:!0,multi:!0}),xa(\"autoRound,strictUnits\",{parser:function(a,b,c,d,e){return e}}),xa(\"border\",{defaultValue:\"0px solid #000\",parser:function(a,b,c,d,f,g){var h=$(a,\"borderTopWidth\",e,!1,\"0px\"),i=this.format(b).split(\" \"),j=i[0].replace(w,\"\");return\"px\"!==j&&(h=parseFloat(h)/_(a,\"borderTopWidth\",1,j)+j),this.parseComplex(a.style,this.format(h+\" \"+$(a,\"borderTopStyle\",e,!1,\"solid\")+\" \"+$(a,\"borderTopColor\",e,!1,\"#000\")),i.join(\" \"),f,g)},color:!0,formatter:function(a){var b=a.split(\" \");return b[0]+\" \"+(b[1]||\"solid\")+\" \"+(a.match(oa)||[\"#000\"])[0]}}),xa(\"borderWidth\",{\nparser:qa(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}),xa(\"float,cssFloat,styleFloat\",{parser:function(a,b,c,d,e,f){var g=a.style,h=\"cssFloat\"in g?\"cssFloat\":\"styleFloat\";return new sa(g,h,0,0,e,-1,c,!1,0,g[h],b)}});var Sa=function(a){var b,c=this.t,d=c.filter||$(this.data,\"filter\")||\"\",e=this.s+this.c*a|0;100===e&&(-1===d.indexOf(\"atrix(\")&&-1===d.indexOf(\"radient(\")&&-1===d.indexOf(\"oader(\")?(c.removeAttribute(\"filter\"),b=!$(this.data,\"filter\")):(c.filter=d.replace(z,\"\"),b=!0)),b||(this.xn1&&(c.filter=d=d||\"alpha(opacity=\"+e+\")\"),-1===d.indexOf(\"pacity\")?0===e&&this.xn1||(c.filter=d+\" alpha(opacity=\"+e+\")\"):c.filter=d.replace(x,\"opacity=\"+e))};xa(\"opacity,alpha,autoAlpha\",{defaultValue:\"1\",parser:function(a,b,c,d,f,g){var h=parseFloat($(a,\"opacity\",e,!1,\"1\")),i=a.style,j=\"autoAlpha\"===c;return\"string\"==typeof b&&\"=\"===b.charAt(1)&&(b=(\"-\"===b.charAt(0)?-1:1)*parseFloat(b.substr(2))+h),j&&1===h&&\"hidden\"===$(a,\"visibility\",e)&&0!==b&&(h=0),T?f=new sa(i,\"opacity\",h,b-h,f):(f=new sa(i,\"opacity\",100*h,100*(b-h),f),f.xn1=j?1:0,i.zoom=1,f.type=2,f.b=\"alpha(opacity=\"+f.s+\")\",f.e=\"alpha(opacity=\"+(f.s+f.c)+\")\",f.data=a,f.plugin=g,f.setRatio=Sa),j&&(f=new sa(i,\"visibility\",0,0,f,-1,null,!1,0,0!==h?\"inherit\":\"hidden\",0===b?\"hidden\":\"inherit\"),f.xs0=\"inherit\",d._overwriteProps.push(f.n),d._overwriteProps.push(c)),f}});var Ta=function(a,b){b&&(a.removeProperty?((\"ms\"===b.substr(0,2)||\"webkit\"===b.substr(0,6))&&(b=\"-\"+b),a.removeProperty(b.replace(B,\"-$1\").toLowerCase())):a.removeAttribute(b))},Ua=function(a){if(this.t._gsClassPT=this,1===a||0===a){this.t.setAttribute(\"class\",0===a?this.b:this.e);for(var b=this.data,c=this.t.style;b;)b.v?c[b.p]=b.v:Ta(c,b.p),b=b._next;1===a&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute(\"class\")!==this.e&&this.t.setAttribute(\"class\",this.e)};xa(\"className\",{parser:function(a,b,d,f,g,h,i){var j,k,l,m,n,o=a.getAttribute(\"class\")||\"\",p=a.style.cssText;if(g=f._classNamePT=new sa(a,d,0,0,g,2),g.setRatio=Ua,g.pr=-11,c=!0,g.b=o,k=ba(a,e),l=a._gsClassPT){for(m={},n=l.data;n;)m[n.p]=1,n=n._next;l.setRatio(1)}return a._gsClassPT=g,g.e=\"=\"!==b.charAt(1)?b:o.replace(new RegExp(\"(?:\\\\s|^)\"+b.substr(2)+\"(?![\\\\w-])\"),\"\")+(\"+\"===b.charAt(0)?\" \"+b.substr(2):\"\"),a.setAttribute(\"class\",g.e),j=ca(a,k,ba(a),i,m),a.setAttribute(\"class\",o),g.data=j.firstMPT,a.style.cssText=p,g=g.xfirst=f.parse(a,j.difs,g,h)}});var Va=function(a){if((1===a||0===a)&&this.data._totalTime===this.data._totalDuration&&\"isFromStart\"!==this.data.data){var b,c,d,e,f,g=this.t.style,h=i.transform.parse;if(\"all\"===this.e)g.cssText=\"\",e=!0;else for(b=this.e.split(\" \").join(\"\").split(\",\"),d=b.length;--d>-1;)c=b[d],i[c]&&(i[c].parse===h?e=!0:c=\"transformOrigin\"===c?Da:i[c].p),Ta(g,c);e&&(Ta(g,Ba),f=this.t._gsTransform,f&&(f.svg&&(this.t.removeAttribute(\"data-svg-origin\"),this.t.removeAttribute(\"transform\")),delete this.t._gsTransform))}};for(xa(\"clearProps\",{parser:function(a,b,d,e,f){return f=new sa(a,d,0,0,f,2),f.setRatio=Va,f.e=b,f.pr=-10,f.data=e._tween,c=!0,f}}),j=\"bezier,throwProps,physicsProps,physics2D\".split(\",\"),va=j.length;va--;)ya(j[va]);j=g.prototype,j._firstPT=j._lastParsedTransform=j._transform=null,j._onInitTween=function(a,b,h,j){if(!a.nodeType)return!1;this._target=q=a,this._tween=h,this._vars=b,r=j,k=b.autoRound,c=!1,d=b.suffixMap||g.suffixMap,e=Z(a,\"\"),f=this._overwriteProps;var n,p,s,t,u,v,w,x,z,A=a.style;if(l&&\"\"===A.zIndex&&(n=$(a,\"zIndex\",e),(\"auto\"===n||\"\"===n)&&this._addLazySet(A,\"zIndex\",0)),\"string\"==typeof b&&(t=A.cssText,n=ba(a,e),A.cssText=t+\";\"+b,n=ca(a,n,ba(a)).difs,!T&&y.test(b)&&(n.opacity=parseFloat(RegExp.$1)),b=n,A.cssText=t),b.className?this._firstPT=p=i.className.parse(a,b.className,\"className\",this,null,null,b):this._firstPT=p=this.parse(a,b,null),this._transformType){for(z=3===this._transformType,Ba?m&&(l=!0,\"\"===A.zIndex&&(w=$(a,\"zIndex\",e),(\"auto\"===w||\"\"===w)&&this._addLazySet(A,\"zIndex\",0)),o&&this._addLazySet(A,\"WebkitBackfaceVisibility\",this._vars.WebkitBackfaceVisibility||(z?\"visible\":\"hidden\"))):A.zoom=1,s=p;s&&s._next;)s=s._next;x=new sa(a,\"transform\",0,0,null,2),this._linkCSSP(x,null,s),x.setRatio=Ba?Ra:Qa,x.data=this._transform||Pa(a,e,!0),x.tween=h,x.pr=-1,f.pop()}if(c){for(;p;){for(v=p._next,s=t;s&&s.pr>p.pr;)s=s._next;(p._prev=s?s._prev:u)?p._prev._next=p:t=p,(p._next=s)?s._prev=p:u=p,p=v}this._firstPT=t}return!0},j.parse=function(a,b,c,f){var g,h,j,l,m,n,o,p,s,t,u=a.style;for(g in b)n=b[g],\"function\"==typeof n&&(n=n(r,q)),h=i[g],h?c=h.parse(a,n,g,this,c,f,b):(m=$(a,g,e)+\"\",s=\"string\"==typeof n,\"color\"===g||\"fill\"===g||\"stroke\"===g||-1!==g.indexOf(\"Color\")||s&&A.test(n)?(s||(n=ma(n),n=(n.length>3?\"rgba(\":\"rgb(\")+n.join(\",\")+\")\"),c=ua(u,g,m,n,!0,\"transparent\",c,0,f)):s&&J.test(n)?c=ua(u,g,m,n,!0,null,c,0,f):(j=parseFloat(m),o=j||0===j?m.substr((j+\"\").length):\"\",(\"\"===m||\"auto\"===m)&&(\"width\"===g||\"height\"===g?(j=fa(a,g,e),o=\"px\"):\"left\"===g||\"top\"===g?(j=aa(a,g,e),o=\"px\"):(j=\"opacity\"!==g?0:1,o=\"\")),t=s&&\"=\"===n.charAt(1),t?(l=parseInt(n.charAt(0)+\"1\",10),n=n.substr(2),l*=parseFloat(n),p=n.replace(w,\"\")):(l=parseFloat(n),p=s?n.replace(w,\"\"):\"\"),\"\"===p&&(p=g in d?d[g]:o),n=l||0===l?(t?l+j:l)+p:b[g],o!==p&&\"\"!==p&&(l||0===l)&&j&&(j=_(a,g,j,o),\"%\"===p?(j/=_(a,g,100,\"%\")/100,b.strictUnits!==!0&&(m=j+\"%\")):\"em\"===p||\"rem\"===p||\"vw\"===p||\"vh\"===p?j/=_(a,g,1,p):\"px\"!==p&&(l=_(a,g,l,p),p=\"px\"),t&&(l||0===l)&&(n=l+j+p)),t&&(l+=j),!j&&0!==j||!l&&0!==l?void 0!==u[g]&&(n||n+\"\"!=\"NaN\"&&null!=n)?(c=new sa(u,g,l||j||0,0,c,-1,g,!1,0,m,n),c.xs0=\"none\"!==n||\"display\"!==g&&-1===g.indexOf(\"Style\")?n:m):V(\"invalid \"+g+\" tween value: \"+b[g]):(c=new sa(u,g,j,l-j,c,0,g,k!==!1&&(\"px\"===p||\"zIndex\"===g),0,m,n),c.xs0=p))),f&&c&&!c.plugin&&(c.plugin=f);return c},j.setRatio=function(a){var b,c,d,e=this._firstPT,f=1e-6;if(1!==a||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(a||this._tween._time!==this._tween._duration&&0!==this._tween._time||this._tween._rawPrevTime===-1e-6)for(;e;){if(b=e.c*a+e.s,e.r?b=Math.round(b):f>b&&b>-f&&(b=0),e.type)if(1===e.type)if(d=e.l,2===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2;else if(3===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3;else if(4===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3+e.xn3+e.xs4;else if(5===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3+e.xn3+e.xs4+e.xn4+e.xs5;else{for(c=e.xs0+b+e.xs1,d=1;d<e.l;d++)c+=e[\"xn\"+d]+e[\"xs\"+(d+1)];e.t[e.p]=c}else-1===e.type?e.t[e.p]=e.xs0:e.setRatio&&e.setRatio(a);else e.t[e.p]=b+e.xs0;e=e._next}else for(;e;)2!==e.type?e.t[e.p]=e.b:e.setRatio(a),e=e._next;else for(;e;){if(2!==e.type)if(e.r&&-1!==e.type)if(b=Math.round(e.s+e.c),e.type){if(1===e.type){for(d=e.l,c=e.xs0+b+e.xs1,d=1;d<e.l;d++)c+=e[\"xn\"+d]+e[\"xs\"+(d+1)];e.t[e.p]=c}}else e.t[e.p]=b+e.xs0;else e.t[e.p]=e.e;else e.setRatio(a);e=e._next}},j._enableTransforms=function(a){this._transform=this._transform||Pa(this._target,e,!0),this._transformType=this._transform.svg&&za||!a&&3!==this._transformType?2:3};var Wa=function(a){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)};j._addLazySet=function(a,b,c){var d=this._firstPT=new sa(a,b,0,0,this._firstPT,2);d.e=c,d.setRatio=Wa,d.data=this},j._linkCSSP=function(a,b,c,d){return a&&(b&&(b._prev=a),a._next&&(a._next._prev=a._prev),a._prev?a._prev._next=a._next:this._firstPT===a&&(this._firstPT=a._next,d=!0),c?c._next=a:d||null!==this._firstPT||(this._firstPT=a),a._next=b,a._prev=c),a},j._mod=function(a){for(var b=this._firstPT;b;)\"function\"==typeof a[b.p]&&a[b.p]===Math.round&&(b.r=1),b=b._next},j._kill=function(b){var c,d,e,f=b;if(b.autoAlpha||b.alpha){f={};for(d in b)f[d]=b[d];f.opacity=1,f.autoAlpha&&(f.visibility=1)}for(b.className&&(c=this._classNamePT)&&(e=c.xfirst,e&&e._prev?this._linkCSSP(e._prev,c._next,e._prev._prev):e===this._firstPT&&(this._firstPT=c._next),c._next&&this._linkCSSP(c._next,c._next._next,e._prev),this._classNamePT=null),c=this._firstPT;c;)c.plugin&&c.plugin!==d&&c.plugin._kill&&(c.plugin._kill(b),d=c.plugin),c=c._next;return a.prototype._kill.call(this,f)};var Xa=function(a,b,c){var d,e,f,g;if(a.slice)for(e=a.length;--e>-1;)Xa(a[e],b,c);else for(d=a.childNodes,e=d.length;--e>-1;)f=d[e],g=f.type,f.style&&(b.push(ba(f)),c&&c.push(f)),1!==g&&9!==g&&11!==g||!f.childNodes.length||Xa(f,b,c)};return g.cascadeTo=function(a,c,d){var e,f,g,h,i=b.to(a,c,d),j=[i],k=[],l=[],m=[],n=b._internals.reservedProps;for(a=i._targets||i.target,Xa(a,k,m),i.render(c,!0,!0),Xa(a,l),i.render(0,!0,!0),i._enabled(!0),e=m.length;--e>-1;)if(f=ca(m[e],k[e],l[e]),f.firstMPT){f=f.difs;for(g in d)n[g]&&(f[g]=d[g]);h={};for(g in f)h[g]=k[e][g];j.push(b.fromTo(m[e],c,h,f))}return j},a.activate([g]),g},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(a){\"use strict\";var b=function(){return(_gsScope.GreenSockGlobals||_gsScope)[a]};\"function\"==typeof define&&define.amd?define([\"TweenLite\"],b):\"undefined\"!=typeof module&&module.exports&&(require(\"../TweenLite.js\"),module.exports=b())}(\"CSSPlugin\");"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/Ease.js.download",
    "content": "/*\n* Ease by Grant Skinner. Oct 27, 2011\n* Visit http://easeljs.com/ for documentation, updates and examples.\n*\n* Equations derived from work by Robert Penner.\n*\n* Copyright (c) 2011 Grant Skinner\n*\n* Permission is hereby granted, free of charge, to any person\n* obtaining a copy of this software and associated documentation\n* files (the \"Software\"), to deal in the Software without\n* restriction, including without limitation the rights to use,\n* copy, modify, merge, publish, distribute, sublicense, and/or sell\n* copies of the Software, and to permit persons to whom the\n* Software is furnished to do so, subject to the following\n* conditions:\n*\n* The above copyright notice and this permission notice shall be\n* included in all copies or substantial portions of the Software.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n* OTHER DEALINGS IN THE SOFTWARE.\n*/\n\n/**\n* The Tween Javascript library provides a retained graphics mode for canvas\n* including a full, hierarchical display list, a core interaction model, and\n* helper classes to make working with Canvas much easier.\n* @module TweenJS\n**/\n\n\n(function(window) {\n\n// constructor:\n/**\n * The Ease class provides a collection of easing functions for use with TweenJS.\n * It does not use the standard 4 param easing signature. Instead it uses a single param\n * which indicates the current linear ratio (0 to 1) of the tween.<br/>\n * <br/>\n * Most methods on Ease can be passed directly as easing functions:<br/>\n * Tween.get(target).to({x:100}, 500, Ease.linear);<br/>\n * <br/>\n * However, methods beginning with \"get\" will return an easing function based on parameter values:<br/>\n * Tween.get(target).to({y:200}, 500, Ease.getPowIn(2.2));<br/>\n * <br/>\n * Equations derived from work by Robert Penner.\n * @class Ease\n * @static\n **/\nvar Ease = function() {\n    throw \"Ease cannot be instantiated.\";\n}\n\n// public static methods:\n    /**\n     * @method linear\n     * @static\n     **/\n    Ease.linear = function(t) { return t; }\n\n    /**\n     * Identical to linear.\n     * @method none\n     * @static\n     **/\n    Ease.none = Ease.linear;\n\n    /**\n     * Mimics the simple -100 to 100 easing in Flash Pro.\n     * @method get\n     * @param amount A value from -1 (ease in) to 1 (ease out) indicating the strength and direction of the ease.\n     * @static\n     **/\n    Ease.get = function(amount) {\n        if (amount < -1) { amount = -1; }\n        if (amount > 1) { amount = 1; }\n        return function(t) {\n            if (amount==0) { return t; }\n            if (amount<0) { return t*(t*-amount+1+amount); }\n            return t*((2-t)*amount+(1-amount));\n        }\n    }\n\n    /**\n     * Configurable exponential ease.\n     * @method getPowIn\n     * @param pow The exponent to use (ex. 3 would return a cubic ease).\n     * @static\n     **/\n    Ease.getPowIn = function(pow) {\n        return function(t) {\n            return Math.pow(t,pow);\n        }\n    }\n\n\n    /**\n     * Configurable exponential ease.\n     * @method getPowOut\n     * @param pow The exponent to use (ex. 3 would return a cubic ease).\n     * @static\n     **/\n    Ease.getPowOut = function(pow) {\n        return function(t) {\n            return 1-Math.pow(1-t,pow);\n        }\n    }\n\n\n    /**\n     * Configurable exponential ease.\n     * @method getPowInOut\n     * @param pow The exponent to use (ex. 3 would return a cubic ease).\n     * @static\n     **/\n    Ease.getPowInOut = function(pow) {\n        return function(t) {\n            if ((t*=2)<1) return 0.5*Math.pow(t,pow);\n            return 1-0.5*Math.abs(Math.pow(2-t,pow));\n        }\n    }\n\n\n    /**\n     * @method quadIn\n     * @static\n     **/\n    Ease.quadIn = Ease.getPowIn(2);\n    /**\n     * @method quadOut\n     * @static\n     **/\n    Ease.quadOut = Ease.getPowOut(2);\n    /**\n     * @method quadInOut\n     * @static\n     **/\n    Ease.quadInOut = Ease.getPowInOut(2);\n\n\n    /**\n     * @method cubicIn\n     * @static\n     **/\n    Ease.cubicIn = Ease.getPowIn(3);\n    /**\n     * @method cubicOut\n     * @static\n     **/\n    Ease.cubicOut = Ease.getPowOut(3);\n    /**\n     * @method cubicInOut\n     * @static\n     **/\n    Ease.cubicInOut = Ease.getPowInOut(3);\n\n\n    /**\n     * @method quartIn\n     * @static\n     **/\n    Ease.quartIn = Ease.getPowIn(4);\n    /**\n     * @method quartOut\n     * @static\n     **/\n    Ease.quartOut = Ease.getPowOut(4);\n    /**\n     * @method quartInOut\n     * @static\n     **/\n    Ease.quartInOut = Ease.getPowInOut(4);\n\n\n    /**\n     * @method quintIn\n     * @static\n     **/\n    Ease.quintIn = Ease.getPowIn(5);\n    /**\n     * @method quintOut\n     * @static\n     **/\n    Ease.quintOut = Ease.getPowOut(5);\n    /**\n     * @method quintInOut\n     * @static\n     **/\n    Ease.quintInOut = Ease.getPowInOut(5);\n\n\n    /**\n     * @method sineIn\n     * @static\n     **/\n    Ease.sineIn = function(t) {\n        return 1-Math.cos(t*Math.PI/2);\n    }\n\n    /**\n     * @method sineOut\n     * @static\n     **/\n    Ease.sineOut = function(t) {\n        return Math.sin(t*Math.PI/2);\n    }\n\n    /**\n     * @method sineInOut\n     * @static\n     **/\n    Ease.sineInOut = function(t) {\n        return -0.5*(Math.cos(Math.PI*t) - 1)\n    }\n\n\n    /**\n     * Configurable \"back in\" ease.\n     * @method getBackIn\n     * @param amount The strength of the ease.\n     * @static\n     **/\n    Ease.getBackIn = function(amount) {\n        return function(t) {\n            return t*t*((amount+1)*t-amount);\n        }\n    }\n    /**\n     * @method backIn\n     * @static\n     **/\n    Ease.backIn = Ease.getBackIn(1.7);\n\n    /**\n     * Configurable \"back out\" ease.\n     * @method getBackOut\n     * @param amount The strength of the ease.\n     * @static\n     **/\n    Ease.getBackOut = function(amount) {\n        return function(t) {\n            return (--t*t*((amount+1)*t + amount) + 1);\n        }\n    }\n    /**\n     * @method backOut\n     * @static\n     **/\n    Ease.backOut = Ease.getBackOut(1.7);\n\n    /**\n     * Configurable \"back in out\" ease.\n     * @method getBackInOut\n     * @param amount The strength of the ease.\n     * @static\n     **/\n    Ease.getBackInOut = function(amount) {\n        amount*=1.525;\n        return function(t) {\n            if ((t*=2)<1) return 0.5*(t*t*((amount+1)*t-amount));\n            return 0.5*((t-=2)*t*((amount+1)*t+amount)+2);\n        }\n    }\n    /**\n     * @method backInOut\n     * @static\n     **/\n    Ease.backInOut = Ease.getBackInOut(1.7);\n\n\n    /**\n     * @method circIn\n     * @static\n     **/\n    Ease.circIn = function(t) {\n        return -(Math.sqrt(1-t*t)- 1);\n    }\n\n    /**\n     * @method circOut\n     * @static\n     **/\n    Ease.circOut = function(t) {\n        return Math.sqrt(1-(--t)*t);\n    }\n\n    /**\n     * @method circInOut\n     * @static\n     **/\n    Ease.circInOut = function(t) {\n        if ((t*=2) < 1) return -0.5*(Math.sqrt(1-t*t)-1);\n        return 0.5*(Math.sqrt(1-(t-=2)*t)+1);\n    }\n\n    /**\n     * @method bounceIn\n     * @static\n     **/\n    Ease.bounceIn = function(t) {\n        return 1-Ease.bounceOut(1-t);\n    }\n\n    /**\n     * @method bounceOut\n     * @static\n     **/\n    Ease.bounceOut = function(t) {\n        if (t < 1/2.75) {\n            return (7.5625*t*t);\n        } else if (t < 2/2.75) {\n            return (7.5625*(t-=1.5/2.75)*t+0.75);\n        } else if (t < 2.5/2.75) {\n            return (7.5625*(t-=2.25/2.75)*t+0.9375);\n        } else {\n            return (7.5625*(t-=2.625/2.75)*t +0.984375);\n        }\n    }\n\n    /**\n     * @method bounceInOut\n     * @static\n     **/\n    Ease.bounceInOut = function(t) {\n        if (t<0.5) return Ease.bounceIn (t*2) * .5;\n        return Ease.bounceOut(t*2-1)*0.5+0.5;\n    }\n\n\n    /**\n     * Configurable elastic ease.\n     * @method getElasticIn\n     * @param amplitude\n     * @param period\n     * @static\n     **/\n    Ease.getElasticIn = function(amplitude,period) {\n        var pi2 = Math.PI*2;\n        return function(t) {\n            if (t==0 || t==1) return t;\n            var s = period/pi2*Math.asin(1/amplitude);\n            return -(amplitude*Math.pow(2,10*(t-=1))*Math.sin((t-s)*pi2/period));\n        }\n    }\n    /**\n     * @method elasticIn\n     * @static\n     **/\n    Ease.elasticIn = Ease.getElasticIn(1,0.3);\n\n    /**\n     * Configurable elastic ease.\n     * @method getElasticOut\n     * @param amplitude\n     * @param period\n     * @static\n     **/\n    Ease.getElasticOut = function(amplitude,period) {\n        var pi2 = Math.PI*2;\n        return function(t) {\n            if (t==0 || t==1) return t;\n            var s = period/pi2 * Math.asin(1/amplitude);\n            return (amplitude*Math.pow(2,-10*t)*Math.sin((t-s)*pi2/period )+1);\n        }\n    }\n    /**\n     * @method elasticOut\n     * @static\n     **/\n    Ease.elasticOut = Ease.getElasticOut(1,0.3);\n\n    /**\n     * Configurable elastic ease.\n     * @method getElasticInOut\n     * @param amplitude\n     * @param period\n     * @static\n     **/\n    Ease.getElasticInOut = function(amplitude,period) {\n        var pi2 = Math.PI*2;\n        return function(t) {\n            var s = period/pi2 * Math.asin(1/amplitude);\n            if ((t*=2)<1) return -0.5*(amplitude*Math.pow(2,10*(t-=1))*Math.sin( (t-s)*pi2/period ));\n            return amplitude*Math.pow(2,-10*(t-=1))*Math.sin((t-s)*pi2/period)*0.5+1;\n        }\n    }\n    /**\n     * @method elasticInOut\n     * @static\n     **/\n    Ease.elasticInOut = Ease.getElasticInOut(1,0.3*1.5);\n\nwindow.Ease = Ease;\n}(window));\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/TweenLite.min.js.download",
    "content": "/*!\n * VERSION: 1.19.0\n * DATE: 2016-07-16\n * UPDATES AND DOCS AT: http://greensock.com\n *\n * @license Copyright (c) 2008-2016, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n * \n * @author: Jack Doyle, jack@greensock.com\n */\n!function(a,b){\"use strict\";var c={},d=a.GreenSockGlobals=a.GreenSockGlobals||a;if(!d.TweenLite){var e,f,g,h,i,j=function(a){var b,c=a.split(\".\"),e=d;for(b=0;b<c.length;b++)e[c[b]]=e=e[c[b]]||{};return e},k=j(\"com.greensock\"),l=1e-10,m=function(a){var b,c=[],d=a.length;for(b=0;b!==d;c.push(a[b++]));return c},n=function(){},o=function(){var a=Object.prototype.toString,b=a.call([]);return function(c){return null!=c&&(c instanceof Array||\"object\"==typeof c&&!!c.push&&a.call(c)===b)}}(),p={},q=function(e,f,g,h){this.sc=p[e]?p[e].sc:[],p[e]=this,this.gsClass=null,this.func=g;var i=[];this.check=function(k){for(var l,m,n,o,r,s=f.length,t=s;--s>-1;)(l=p[f[s]]||new q(f[s],[])).gsClass?(i[s]=l.gsClass,t--):k&&l.sc.push(this);if(0===t&&g){if(m=(\"com.greensock.\"+e).split(\".\"),n=m.pop(),o=j(m.join(\".\"))[n]=this.gsClass=g.apply(g,i),h)if(d[n]=c[n]=o,r=\"undefined\"!=typeof module&&module.exports,!r&&\"function\"==typeof define&&define.amd)define((a.GreenSockAMDPath?a.GreenSockAMDPath+\"/\":\"\")+e.split(\".\").pop(),[],function(){return o});else if(r)if(e===b){module.exports=c[b]=o;for(s in c)o[s]=c[s]}else c[b]&&(c[b][n]=o);for(s=0;s<this.sc.length;s++)this.sc[s].check()}},this.check(!0)},r=a._gsDefine=function(a,b,c,d){return new q(a,b,c,d)},s=k._class=function(a,b,c){return b=b||function(){},r(a,[],function(){return b},c),b};r.globals=d;var t=[0,0,1,1],u=s(\"easing.Ease\",function(a,b,c,d){this._func=a,this._type=c||0,this._power=d||0,this._params=b?t.concat(b):t},!0),v=u.map={},w=u.register=function(a,b,c,d){for(var e,f,g,h,i=b.split(\",\"),j=i.length,l=(c||\"easeIn,easeOut,easeInOut\").split(\",\");--j>-1;)for(f=i[j],e=d?s(\"easing.\"+f,null,!0):k.easing[f]||{},g=l.length;--g>-1;)h=l[g],v[f+\".\"+h]=v[h+f]=e[h]=a.getRatio?a:a[h]||new a};for(g=u.prototype,g._calcEnd=!1,g.getRatio=function(a){if(this._func)return this._params[0]=a,this._func.apply(null,this._params);var b=this._type,c=this._power,d=1===b?1-a:2===b?a:.5>a?2*a:2*(1-a);return 1===c?d*=d:2===c?d*=d*d:3===c?d*=d*d*d:4===c&&(d*=d*d*d*d),1===b?1-d:2===b?d:.5>a?d/2:1-d/2},e=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"],f=e.length;--f>-1;)g=e[f]+\",Power\"+f,w(new u(null,null,1,f),g,\"easeOut\",!0),w(new u(null,null,2,f),g,\"easeIn\"+(0===f?\",easeNone\":\"\")),w(new u(null,null,3,f),g,\"easeInOut\");v.linear=k.easing.Linear.easeIn,v.swing=k.easing.Quad.easeInOut;var x=s(\"events.EventDispatcher\",function(a){this._listeners={},this._eventTarget=a||this});g=x.prototype,g.addEventListener=function(a,b,c,d,e){e=e||0;var f,g,j=this._listeners[a],k=0;for(this!==h||i||h.wake(),null==j&&(this._listeners[a]=j=[]),g=j.length;--g>-1;)f=j[g],f.c===b&&f.s===c?j.splice(g,1):0===k&&f.pr<e&&(k=g+1);j.splice(k,0,{c:b,s:c,up:d,pr:e})},g.removeEventListener=function(a,b){var c,d=this._listeners[a];if(d)for(c=d.length;--c>-1;)if(d[c].c===b)return void d.splice(c,1)},g.dispatchEvent=function(a){var b,c,d,e=this._listeners[a];if(e)for(b=e.length,b>1&&(e=e.slice(0)),c=this._eventTarget;--b>-1;)d=e[b],d&&(d.up?d.c.call(d.s||c,{type:a,target:c}):d.c.call(d.s||c))};var y=a.requestAnimationFrame,z=a.cancelAnimationFrame,A=Date.now||function(){return(new Date).getTime()},B=A();for(e=[\"ms\",\"moz\",\"webkit\",\"o\"],f=e.length;--f>-1&&!y;)y=a[e[f]+\"RequestAnimationFrame\"],z=a[e[f]+\"CancelAnimationFrame\"]||a[e[f]+\"CancelRequestAnimationFrame\"];s(\"Ticker\",function(a,b){var c,d,e,f,g,j=this,k=A(),m=b!==!1&&y?\"auto\":!1,o=500,p=33,q=\"tick\",r=function(a){var b,h,i=A()-B;i>o&&(k+=i-p),B+=i,j.time=(B-k)/1e3,b=j.time-g,(!c||b>0||a===!0)&&(j.frame++,g+=b+(b>=f?.004:f-b),h=!0),a!==!0&&(e=d(r)),h&&j.dispatchEvent(q)};x.call(j),j.time=j.frame=0,j.tick=function(){r(!0)},j.lagSmoothing=function(a,b){o=a||1/l,p=Math.min(b,o,0)},j.sleep=function(){null!=e&&(m&&z?z(e):clearTimeout(e),d=n,e=null,j===h&&(i=!1))},j.wake=function(a){null!==e?j.sleep():a?k+=-B+(B=A()):j.frame>10&&(B=A()-o+5),d=0===c?n:m&&y?y:function(a){return setTimeout(a,1e3*(g-j.time)+1|0)},j===h&&(i=!0),r(2)},j.fps=function(a){return arguments.length?(c=a,f=1/(c||60),g=this.time+f,void j.wake()):c},j.useRAF=function(a){return arguments.length?(j.sleep(),m=a,void j.fps(c)):m},j.fps(a),setTimeout(function(){\"auto\"===m&&j.frame<5&&\"hidden\"!==document.visibilityState&&j.useRAF(!1)},1500)}),g=k.Ticker.prototype=new k.events.EventDispatcher,g.constructor=k.Ticker;var C=s(\"core.Animation\",function(a,b){if(this.vars=b=b||{},this._duration=this._totalDuration=a||0,this._delay=Number(b.delay)||0,this._timeScale=1,this._active=b.immediateRender===!0,this.data=b.data,this._reversed=b.reversed===!0,V){i||h.wake();var c=this.vars.useFrames?U:V;c.add(this,c._time),this.vars.paused&&this.paused(!0)}});h=C.ticker=new k.Ticker,g=C.prototype,g._dirty=g._gc=g._initted=g._paused=!1,g._totalTime=g._time=0,g._rawPrevTime=-1,g._next=g._last=g._onUpdate=g._timeline=g.timeline=null,g._paused=!1;var D=function(){i&&A()-B>2e3&&h.wake(),setTimeout(D,2e3)};D(),g.play=function(a,b){return null!=a&&this.seek(a,b),this.reversed(!1).paused(!1)},g.pause=function(a,b){return null!=a&&this.seek(a,b),this.paused(!0)},g.resume=function(a,b){return null!=a&&this.seek(a,b),this.paused(!1)},g.seek=function(a,b){return this.totalTime(Number(a),b!==!1)},g.restart=function(a,b){return this.reversed(!1).paused(!1).totalTime(a?-this._delay:0,b!==!1,!0)},g.reverse=function(a,b){return null!=a&&this.seek(a||this.totalDuration(),b),this.reversed(!0).paused(!1)},g.render=function(a,b,c){},g.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,(this._gc||!this.timeline)&&this._enabled(!0),this},g.isActive=function(){var a,b=this._timeline,c=this._startTime;return!b||!this._gc&&!this._paused&&b.isActive()&&(a=b.rawTime())>=c&&a<c+this.totalDuration()/this._timeScale},g._enabled=function(a,b){return i||h.wake(),this._gc=!a,this._active=this.isActive(),b!==!0&&(a&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!a&&this.timeline&&this._timeline._remove(this,!0)),!1},g._kill=function(a,b){return this._enabled(!1,!1)},g.kill=function(a,b){return this._kill(a,b),this},g._uncache=function(a){for(var b=a?this:this.timeline;b;)b._dirty=!0,b=b.timeline;return this},g._swapSelfInParams=function(a){for(var b=a.length,c=a.concat();--b>-1;)\"{self}\"===a[b]&&(c[b]=this);return c},g._callback=function(a){var b=this.vars,c=b[a],d=b[a+\"Params\"],e=b[a+\"Scope\"]||b.callbackScope||this,f=d?d.length:0;switch(f){case 0:c.call(e);break;case 1:c.call(e,d[0]);break;case 2:c.call(e,d[0],d[1]);break;default:c.apply(e,d)}},g.eventCallback=function(a,b,c,d){if(\"on\"===(a||\"\").substr(0,2)){var e=this.vars;if(1===arguments.length)return e[a];null==b?delete e[a]:(e[a]=b,e[a+\"Params\"]=o(c)&&-1!==c.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(c):c,e[a+\"Scope\"]=d),\"onUpdate\"===a&&(this._onUpdate=b)}return this},g.delay=function(a){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+a-this._delay),this._delay=a,this):this._delay},g.duration=function(a){return arguments.length?(this._duration=this._totalDuration=a,this._uncache(!0),this._timeline.smoothChildTiming&&this._time>0&&this._time<this._duration&&0!==a&&this.totalTime(this._totalTime*(a/this._duration),!0),this):(this._dirty=!1,this._duration)},g.totalDuration=function(a){return this._dirty=!1,arguments.length?this.duration(a):this._totalDuration},g.time=function(a,b){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(a>this._duration?this._duration:a,b)):this._time},g.totalTime=function(a,b,c){if(i||h.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(0>a&&!c&&(a+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var d=this._totalDuration,e=this._timeline;if(a>d&&!c&&(a=d),this._startTime=(this._paused?this._pauseTime:e._time)-(this._reversed?d-a:a)/this._timeScale,e._dirty||this._uncache(!1),e._timeline)for(;e._timeline;)e._timeline._time!==(e._startTime+e._totalTime)/e._timeScale&&e.totalTime(e._totalTime,!0),e=e._timeline}this._gc&&this._enabled(!0,!1),(this._totalTime!==a||0===this._duration)&&(I.length&&X(),this.render(a,b,!1),I.length&&X())}return this},g.progress=g.totalProgress=function(a,b){var c=this.duration();return arguments.length?this.totalTime(c*a,b):c?this._time/c:this.ratio},g.startTime=function(a){return arguments.length?(a!==this._startTime&&(this._startTime=a,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,a-this._delay)),this):this._startTime},g.endTime=function(a){return this._startTime+(0!=a?this.totalDuration():this.duration())/this._timeScale},g.timeScale=function(a){if(!arguments.length)return this._timeScale;if(a=a||l,this._timeline&&this._timeline.smoothChildTiming){var b=this._pauseTime,c=b||0===b?b:this._timeline.totalTime();this._startTime=c-(c-this._startTime)*this._timeScale/a}return this._timeScale=a,this._uncache(!1)},g.reversed=function(a){return arguments.length?(a!=this._reversed&&(this._reversed=a,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},g.paused=function(a){if(!arguments.length)return this._paused;var b,c,d=this._timeline;return a!=this._paused&&d&&(i||a||h.wake(),b=d.rawTime(),c=b-this._pauseTime,!a&&d.smoothChildTiming&&(this._startTime+=c,this._uncache(!1)),this._pauseTime=a?b:null,this._paused=a,this._active=this.isActive(),!a&&0!==c&&this._initted&&this.duration()&&(b=d.smoothChildTiming?this._totalTime:(b-this._startTime)/this._timeScale,this.render(b,b===this._totalTime,!0))),this._gc&&!a&&this._enabled(!0,!1),this};var E=s(\"core.SimpleTimeline\",function(a){C.call(this,0,a),this.autoRemoveChildren=this.smoothChildTiming=!0});g=E.prototype=new C,g.constructor=E,g.kill()._gc=!1,g._first=g._last=g._recent=null,g._sortChildren=!1,g.add=g.insert=function(a,b,c,d){var e,f;if(a._startTime=Number(b||0)+a._delay,a._paused&&this!==a._timeline&&(a._pauseTime=a._startTime+(this.rawTime()-a._startTime)/a._timeScale),a.timeline&&a.timeline._remove(a,!0),a.timeline=a._timeline=this,a._gc&&a._enabled(!0,!0),e=this._last,this._sortChildren)for(f=a._startTime;e&&e._startTime>f;)e=e._prev;return e?(a._next=e._next,e._next=a):(a._next=this._first,this._first=a),a._next?a._next._prev=a:this._last=a,a._prev=e,this._recent=a,this._timeline&&this._uncache(!0),this},g._remove=function(a,b){return a.timeline===this&&(b||a._enabled(!1,!0),a._prev?a._prev._next=a._next:this._first===a&&(this._first=a._next),a._next?a._next._prev=a._prev:this._last===a&&(this._last=a._prev),a._next=a._prev=a.timeline=null,a===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},g.render=function(a,b,c){var d,e=this._first;for(this._totalTime=this._time=this._rawPrevTime=a;e;)d=e._next,(e._active||a>=e._startTime&&!e._paused)&&(e._reversed?e.render((e._dirty?e.totalDuration():e._totalDuration)-(a-e._startTime)*e._timeScale,b,c):e.render((a-e._startTime)*e._timeScale,b,c)),e=d},g.rawTime=function(){return i||h.wake(),this._totalTime};var F=s(\"TweenLite\",function(b,c,d){if(C.call(this,c,d),this.render=F.prototype.render,null==b)throw\"Cannot tween a null target.\";this.target=b=\"string\"!=typeof b?b:F.selector(b)||b;var e,f,g,h=b.jquery||b.length&&b!==a&&b[0]&&(b[0]===a||b[0].nodeType&&b[0].style&&!b.nodeType),i=this.vars.overwrite;if(this._overwrite=i=null==i?T[F.defaultOverwrite]:\"number\"==typeof i?i>>0:T[i],(h||b instanceof Array||b.push&&o(b))&&\"number\"!=typeof b[0])for(this._targets=g=m(b),this._propLookup=[],this._siblings=[],e=0;e<g.length;e++)f=g[e],f?\"string\"!=typeof f?f.length&&f!==a&&f[0]&&(f[0]===a||f[0].nodeType&&f[0].style&&!f.nodeType)?(g.splice(e--,1),this._targets=g=g.concat(m(f))):(this._siblings[e]=Y(f,this,!1),1===i&&this._siblings[e].length>1&&$(f,this,null,1,this._siblings[e])):(f=g[e--]=F.selector(f),\"string\"==typeof f&&g.splice(e+1,1)):g.splice(e--,1);else this._propLookup={},this._siblings=Y(b,this,!1),1===i&&this._siblings.length>1&&$(b,this,null,1,this._siblings);(this.vars.immediateRender||0===c&&0===this._delay&&this.vars.immediateRender!==!1)&&(this._time=-l,this.render(Math.min(0,-this._delay)))},!0),G=function(b){return b&&b.length&&b!==a&&b[0]&&(b[0]===a||b[0].nodeType&&b[0].style&&!b.nodeType)},H=function(a,b){var c,d={};for(c in a)S[c]||c in b&&\"transform\"!==c&&\"x\"!==c&&\"y\"!==c&&\"width\"!==c&&\"height\"!==c&&\"className\"!==c&&\"border\"!==c||!(!P[c]||P[c]&&P[c]._autoCSS)||(d[c]=a[c],delete a[c]);a.css=d};g=F.prototype=new C,g.constructor=F,g.kill()._gc=!1,g.ratio=0,g._firstPT=g._targets=g._overwrittenProps=g._startAt=null,g._notifyPluginsOfEnabled=g._lazy=!1,F.version=\"1.19.0\",F.defaultEase=g._ease=new u(null,null,1,1),F.defaultOverwrite=\"auto\",F.ticker=h,F.autoSleep=120,F.lagSmoothing=function(a,b){h.lagSmoothing(a,b)},F.selector=a.$||a.jQuery||function(b){var c=a.$||a.jQuery;return c?(F.selector=c,c(b)):\"undefined\"==typeof document?b:document.querySelectorAll?document.querySelectorAll(b):document.getElementById(\"#\"===b.charAt(0)?b.substr(1):b)};var I=[],J={},K=/(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi,L=function(a){for(var b,c=this._firstPT,d=1e-6;c;)b=c.blob?a?this.join(\"\"):this.start:c.c*a+c.s,c.m?b=c.m(b,this._target||c.t):d>b&&b>-d&&(b=0),c.f?c.fp?c.t[c.p](c.fp,b):c.t[c.p](b):c.t[c.p]=b,c=c._next},M=function(a,b,c,d){var e,f,g,h,i,j,k,l=[a,b],m=0,n=\"\",o=0;for(l.start=a,c&&(c(l),a=l[0],b=l[1]),l.length=0,e=a.match(K)||[],f=b.match(K)||[],d&&(d._next=null,d.blob=1,l._firstPT=l._applyPT=d),i=f.length,h=0;i>h;h++)k=f[h],j=b.substr(m,b.indexOf(k,m)-m),n+=j||!h?j:\",\",m+=j.length,o?o=(o+1)%5:\"rgba(\"===j.substr(-5)&&(o=1),k===e[h]||e.length<=h?n+=k:(n&&(l.push(n),n=\"\"),g=parseFloat(e[h]),l.push(g),l._firstPT={_next:l._firstPT,t:l,p:l.length-1,s:g,c:(\"=\"===k.charAt(1)?parseInt(k.charAt(0)+\"1\",10)*parseFloat(k.substr(2)):parseFloat(k)-g)||0,f:0,m:o&&4>o?Math.round:0}),m+=k.length;return n+=b.substr(m),n&&l.push(n),l.setRatio=L,l},N=function(a,b,c,d,e,f,g,h,i){\"function\"==typeof d&&(d=d(i||0,a));var j,k,l=\"get\"===c?a[b]:c,m=typeof a[b],n=\"string\"==typeof d&&\"=\"===d.charAt(1),o={t:a,p:b,s:l,f:\"function\"===m,pg:0,n:e||b,m:f?\"function\"==typeof f?f:Math.round:0,pr:0,c:n?parseInt(d.charAt(0)+\"1\",10)*parseFloat(d.substr(2)):parseFloat(d)-l||0};return\"number\"!==m&&(\"function\"===m&&\"get\"===c&&(k=b.indexOf(\"set\")||\"function\"!=typeof a[\"get\"+b.substr(3)]?b:\"get\"+b.substr(3),o.s=l=g?a[k](g):a[k]()),\"string\"==typeof l&&(g||isNaN(l))?(o.fp=g,j=M(l,d,h||F.defaultStringFilter,o),o={t:j,p:\"setRatio\",s:0,c:1,f:2,pg:0,n:e||b,pr:0,m:0}):n||(o.s=parseFloat(l),o.c=parseFloat(d)-o.s||0)),o.c?((o._next=this._firstPT)&&(o._next._prev=o),this._firstPT=o,o):void 0},O=F._internals={isArray:o,isSelector:G,lazyTweens:I,blobDif:M},P=F._plugins={},Q=O.tweenLookup={},R=0,S=O.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1},T={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,\"true\":1,\"false\":0},U=C._rootFramesTimeline=new E,V=C._rootTimeline=new E,W=30,X=O.lazyRender=function(){var a,b=I.length;for(J={};--b>-1;)a=I[b],a&&a._lazy!==!1&&(a.render(a._lazy[0],a._lazy[1],!0),a._lazy=!1);I.length=0};V._startTime=h.time,U._startTime=h.frame,V._active=U._active=!0,setTimeout(X,1),C._updateRoot=F.render=function(){var a,b,c;if(I.length&&X(),V.render((h.time-V._startTime)*V._timeScale,!1,!1),U.render((h.frame-U._startTime)*U._timeScale,!1,!1),I.length&&X(),h.frame>=W){W=h.frame+(parseInt(F.autoSleep,10)||120);for(c in Q){for(b=Q[c].tweens,a=b.length;--a>-1;)b[a]._gc&&b.splice(a,1);0===b.length&&delete Q[c]}if(c=V._first,(!c||c._paused)&&F.autoSleep&&!U._first&&1===h._listeners.tick.length){for(;c&&c._paused;)c=c._next;c||h.sleep()}}},h.addEventListener(\"tick\",C._updateRoot);var Y=function(a,b,c){var d,e,f=a._gsTweenID;if(Q[f||(a._gsTweenID=f=\"t\"+R++)]||(Q[f]={target:a,tweens:[]}),b&&(d=Q[f].tweens,d[e=d.length]=b,c))for(;--e>-1;)d[e]===b&&d.splice(e,1);return Q[f].tweens},Z=function(a,b,c,d){var e,f,g=a.vars.onOverwrite;return g&&(e=g(a,b,c,d)),g=F.onOverwrite,g&&(f=g(a,b,c,d)),e!==!1&&f!==!1},$=function(a,b,c,d,e){var f,g,h,i;if(1===d||d>=4){for(i=e.length,f=0;i>f;f++)if((h=e[f])!==b)h._gc||h._kill(null,a,b)&&(g=!0);else if(5===d)break;return g}var j,k=b._startTime+l,m=[],n=0,o=0===b._duration;for(f=e.length;--f>-1;)(h=e[f])===b||h._gc||h._paused||(h._timeline!==b._timeline?(j=j||_(b,0,o),0===_(h,j,o)&&(m[n++]=h)):h._startTime<=k&&h._startTime+h.totalDuration()/h._timeScale>k&&((o||!h._initted)&&k-h._startTime<=2e-10||(m[n++]=h)));for(f=n;--f>-1;)if(h=m[f],2===d&&h._kill(c,a,b)&&(g=!0),2!==d||!h._firstPT&&h._initted){if(2!==d&&!Z(h,b))continue;h._enabled(!1,!1)&&(g=!0)}return g},_=function(a,b,c){for(var d=a._timeline,e=d._timeScale,f=a._startTime;d._timeline;){if(f+=d._startTime,e*=d._timeScale,d._paused)return-100;d=d._timeline}return f/=e,f>b?f-b:c&&f===b||!a._initted&&2*l>f-b?l:(f+=a.totalDuration()/a._timeScale/e)>b+l?0:f-b-l};g._init=function(){var a,b,c,d,e,f,g=this.vars,h=this._overwrittenProps,i=this._duration,j=!!g.immediateRender,k=g.ease;if(g.startAt){this._startAt&&(this._startAt.render(-1,!0),this._startAt.kill()),e={};for(d in g.startAt)e[d]=g.startAt[d];if(e.overwrite=!1,e.immediateRender=!0,e.lazy=j&&g.lazy!==!1,e.startAt=e.delay=null,this._startAt=F.to(this.target,0,e),j)if(this._time>0)this._startAt=null;else if(0!==i)return}else if(g.runBackwards&&0!==i)if(this._startAt)this._startAt.render(-1,!0),this._startAt.kill(),this._startAt=null;else{0!==this._time&&(j=!1),c={};for(d in g)S[d]&&\"autoCSS\"!==d||(c[d]=g[d]);if(c.overwrite=0,c.data=\"isFromStart\",c.lazy=j&&g.lazy!==!1,c.immediateRender=j,this._startAt=F.to(this.target,0,c),j){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=k=k?k instanceof u?k:\"function\"==typeof k?new u(k,g.easeParams):v[k]||F.defaultEase:F.defaultEase,g.easeParams instanceof Array&&k.config&&(this._ease=k.config.apply(k,g.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(f=this._targets.length,a=0;f>a;a++)this._initProps(this._targets[a],this._propLookup[a]={},this._siblings[a],h?h[a]:null,a)&&(b=!0);else b=this._initProps(this.target,this._propLookup,this._siblings,h,0);if(b&&F._onPluginEvent(\"_onInitAllProps\",this),h&&(this._firstPT||\"function\"!=typeof this.target&&this._enabled(!1,!1)),g.runBackwards)for(c=this._firstPT;c;)c.s+=c.c,c.c=-c.c,c=c._next;this._onUpdate=g.onUpdate,this._initted=!0},g._initProps=function(b,c,d,e,f){var g,h,i,j,k,l;if(null==b)return!1;J[b._gsTweenID]&&X(),this.vars.css||b.style&&b!==a&&b.nodeType&&P.css&&this.vars.autoCSS!==!1&&H(this.vars,b);for(g in this.vars)if(l=this.vars[g],S[g])l&&(l instanceof Array||l.push&&o(l))&&-1!==l.join(\"\").indexOf(\"{self}\")&&(this.vars[g]=l=this._swapSelfInParams(l,this));else if(P[g]&&(j=new P[g])._onInitTween(b,this.vars[g],this,f)){for(this._firstPT=k={_next:this._firstPT,t:j,p:\"setRatio\",s:0,c:1,f:1,n:g,pg:1,pr:j._priority,m:0},h=j._overwriteProps.length;--h>-1;)c[j._overwriteProps[h]]=this._firstPT;(j._priority||j._onInitAllProps)&&(i=!0),(j._onDisable||j._onEnable)&&(this._notifyPluginsOfEnabled=!0),k._next&&(k._next._prev=k)}else c[g]=N.call(this,b,g,\"get\",l,g,0,null,this.vars.stringFilter,f);return e&&this._kill(e,b)?this._initProps(b,c,d,e,f):this._overwrite>1&&this._firstPT&&d.length>1&&$(b,this,c,this._overwrite,d)?(this._kill(c,b),this._initProps(b,c,d,e,f)):(this._firstPT&&(this.vars.lazy!==!1&&this._duration||this.vars.lazy&&!this._duration)&&(J[b._gsTweenID]=!0),i)},g.render=function(a,b,c){var d,e,f,g,h=this._time,i=this._duration,j=this._rawPrevTime;if(a>=i-1e-7)this._totalTime=this._time=i,this.ratio=this._ease._calcEnd?this._ease.getRatio(1):1,this._reversed||(d=!0,e=\"onComplete\",c=c||this._timeline.autoRemoveChildren),0===i&&(this._initted||!this.vars.lazy||c)&&(this._startTime===this._timeline._duration&&(a=0),(0>j||0>=a&&a>=-1e-7||j===l&&\"isPause\"!==this.data)&&j!==a&&(c=!0,j>l&&(e=\"onReverseComplete\")),this._rawPrevTime=g=!b||a||j===a?a:l);else if(1e-7>a)this._totalTime=this._time=0,this.ratio=this._ease._calcEnd?this._ease.getRatio(0):0,(0!==h||0===i&&j>0)&&(e=\"onReverseComplete\",d=this._reversed),0>a&&(this._active=!1,0===i&&(this._initted||!this.vars.lazy||c)&&(j>=0&&(j!==l||\"isPause\"!==this.data)&&(c=!0),this._rawPrevTime=g=!b||a||j===a?a:l)),this._initted||(c=!0);else if(this._totalTime=this._time=a,this._easeType){var k=a/i,m=this._easeType,n=this._easePower;(1===m||3===m&&k>=.5)&&(k=1-k),3===m&&(k*=2),1===n?k*=k:2===n?k*=k*k:3===n?k*=k*k*k:4===n&&(k*=k*k*k*k),1===m?this.ratio=1-k:2===m?this.ratio=k:.5>a/i?this.ratio=k/2:this.ratio=1-k/2}else this.ratio=this._ease.getRatio(a/i);if(this._time!==h||c){if(!this._initted){if(this._init(),!this._initted||this._gc)return;if(!c&&this._firstPT&&(this.vars.lazy!==!1&&this._duration||this.vars.lazy&&!this._duration))return this._time=this._totalTime=h,this._rawPrevTime=j,I.push(this),void(this._lazy=[a,b]);this._time&&!d?this.ratio=this._ease.getRatio(this._time/i):d&&this._ease._calcEnd&&(this.ratio=this._ease.getRatio(0===this._time?0:1))}for(this._lazy!==!1&&(this._lazy=!1),this._active||!this._paused&&this._time!==h&&a>=0&&(this._active=!0),0===h&&(this._startAt&&(a>=0?this._startAt.render(a,b,c):e||(e=\"_dummyGS\")),this.vars.onStart&&(0!==this._time||0===i)&&(b||this._callback(\"onStart\"))),f=this._firstPT;f;)f.f?f.t[f.p](f.c*this.ratio+f.s):f.t[f.p]=f.c*this.ratio+f.s,f=f._next;this._onUpdate&&(0>a&&this._startAt&&a!==-1e-4&&this._startAt.render(a,b,c),b||(this._time!==h||d||c)&&this._callback(\"onUpdate\")),e&&(!this._gc||c)&&(0>a&&this._startAt&&!this._onUpdate&&a!==-1e-4&&this._startAt.render(a,b,c),d&&(this._timeline.autoRemoveChildren&&this._enabled(!1,!1),this._active=!1),!b&&this.vars[e]&&this._callback(e),0===i&&this._rawPrevTime===l&&g!==l&&(this._rawPrevTime=0))}},g._kill=function(a,b,c){if(\"all\"===a&&(a=null),null==a&&(null==b||b===this.target))return this._lazy=!1,this._enabled(!1,!1);b=\"string\"!=typeof b?b||this._targets||this.target:F.selector(b)||b;var d,e,f,g,h,i,j,k,l,m=c&&this._time&&c._startTime===this._startTime&&this._timeline===c._timeline;if((o(b)||G(b))&&\"number\"!=typeof b[0])for(d=b.length;--d>-1;)this._kill(a,b[d],c)&&(i=!0);else{if(this._targets){for(d=this._targets.length;--d>-1;)if(b===this._targets[d]){h=this._propLookup[d]||{},this._overwrittenProps=this._overwrittenProps||[],e=this._overwrittenProps[d]=a?this._overwrittenProps[d]||{}:\"all\";break}}else{if(b!==this.target)return!1;h=this._propLookup,e=this._overwrittenProps=a?this._overwrittenProps||{}:\"all\"}if(h){if(j=a||h,k=a!==e&&\"all\"!==e&&a!==h&&(\"object\"!=typeof a||!a._tempKill),c&&(F.onOverwrite||this.vars.onOverwrite)){for(f in j)h[f]&&(l||(l=[]),l.push(f));if((l||!a)&&!Z(this,c,b,l))return!1}for(f in j)(g=h[f])&&(m&&(g.f?g.t[g.p](g.s):g.t[g.p]=g.s,i=!0),g.pg&&g.t._kill(j)&&(i=!0),g.pg&&0!==g.t._overwriteProps.length||(g._prev?g._prev._next=g._next:g===this._firstPT&&(this._firstPT=g._next),g._next&&(g._next._prev=g._prev),g._next=g._prev=null),delete h[f]),k&&(e[f]=1);!this._firstPT&&this._initted&&this._enabled(!1,!1)}}return i},g.invalidate=function(){return this._notifyPluginsOfEnabled&&F._onPluginEvent(\"_onDisable\",this),this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],C.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-l,this.render(Math.min(0,-this._delay))),this},g._enabled=function(a,b){if(i||h.wake(),a&&this._gc){var c,d=this._targets;if(d)for(c=d.length;--c>-1;)this._siblings[c]=Y(d[c],this,!0);else this._siblings=Y(this.target,this,!0)}return C.prototype._enabled.call(this,a,b),this._notifyPluginsOfEnabled&&this._firstPT?F._onPluginEvent(a?\"_onEnable\":\"_onDisable\",this):!1},F.to=function(a,b,c){return new F(a,b,c)},F.from=function(a,b,c){return c.runBackwards=!0,c.immediateRender=0!=c.immediateRender,new F(a,b,c)},F.fromTo=function(a,b,c,d){return d.startAt=c,d.immediateRender=0!=d.immediateRender&&0!=c.immediateRender,new F(a,b,d)},F.delayedCall=function(a,b,c,d,e){return new F(b,0,{delay:a,onComplete:b,onCompleteParams:c,callbackScope:d,onReverseComplete:b,onReverseCompleteParams:c,immediateRender:!1,lazy:!1,useFrames:e,overwrite:0})},F.set=function(a,b){return new F(a,0,b)},F.getTweensOf=function(a,b){if(null==a)return[];a=\"string\"!=typeof a?a:F.selector(a)||a;var c,d,e,f;if((o(a)||G(a))&&\"number\"!=typeof a[0]){for(c=a.length,d=[];--c>-1;)d=d.concat(F.getTweensOf(a[c],b));for(c=d.length;--c>-1;)for(f=d[c],e=c;--e>-1;)f===d[e]&&d.splice(c,1)}else for(d=Y(a).concat(),c=d.length;--c>-1;)(d[c]._gc||b&&!d[c].isActive())&&d.splice(c,1);return d},F.killTweensOf=F.killDelayedCallsTo=function(a,b,c){\"object\"==typeof b&&(c=b,b=!1);for(var d=F.getTweensOf(a,b),e=d.length;--e>-1;)d[e]._kill(c,a)};var aa=s(\"plugins.TweenPlugin\",function(a,b){this._overwriteProps=(a||\"\").split(\",\"),this._propName=this._overwriteProps[0],this._priority=b||0,this._super=aa.prototype},!0);if(g=aa.prototype,aa.version=\"1.19.0\",aa.API=2,g._firstPT=null,g._addTween=N,g.setRatio=L,g._kill=function(a){var b,c=this._overwriteProps,d=this._firstPT;if(null!=a[this._propName])this._overwriteProps=[];else for(b=c.length;--b>-1;)null!=a[c[b]]&&c.splice(b,1);for(;d;)null!=a[d.n]&&(d._next&&(d._next._prev=d._prev),d._prev?(d._prev._next=d._next,d._prev=null):this._firstPT===d&&(this._firstPT=d._next)),d=d._next;return!1},g._mod=g._roundProps=function(a){for(var b,c=this._firstPT;c;)b=a[this._propName]||null!=c.n&&a[c.n.split(this._propName+\"_\").join(\"\")],b&&\"function\"==typeof b&&(2===c.f?c.t._applyPT.m=b:c.m=b),c=c._next},F._onPluginEvent=function(a,b){var c,d,e,f,g,h=b._firstPT;if(\"_onInitAllProps\"===a){for(;h;){for(g=h._next,d=e;d&&d.pr>h.pr;)d=d._next;(h._prev=d?d._prev:f)?h._prev._next=h:e=h,(h._next=d)?d._prev=h:f=h,h=g}h=b._firstPT=e}for(;h;)h.pg&&\"function\"==typeof h.t[a]&&h.t[a]()&&(c=!0),h=h._next;return c},aa.activate=function(a){for(var b=a.length;--b>-1;)a[b].API===aa.API&&(P[(new a[b])._propName]=a[b]);return!0},r.plugin=function(a){if(!(a&&a.propName&&a.init&&a.API))throw\"illegal plugin definition.\";var b,c=a.propName,d=a.priority||0,e=a.overwriteProps,f={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_mod\",mod:\"_mod\",initAll:\"_onInitAllProps\"},g=s(\"plugins.\"+c.charAt(0).toUpperCase()+c.substr(1)+\"Plugin\",function(){aa.call(this,c,d),this._overwriteProps=e||[]},a.global===!0),h=g.prototype=new aa(c);h.constructor=g,g.API=a.API;for(b in f)\"function\"==typeof a[b]&&(h[f[b]]=a[b]);return g.version=a.version,aa.activate([g]),g},e=a._gsQueue){for(f=0;f<e.length;f++)e[f]();for(g in p)p[g].func||a.console.log(\"GSAP encountered missing dependency: \"+g)}i=!1}}(\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:this||window,\"TweenLite\");"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/anime.min.js.download",
    "content": "/*\n * Anime v1.0.0\n * http://anime-js.com\n * Javascript animation engine\n * Copyright (c) 2016 Julian Garnier\n * http://juliangarnier.com\n * Released under the MIT license\n */\n(function(r,n){\"function\"===typeof define&&define.amd?define([],n):\"object\"===typeof module&&module.exports?module.exports=n():r.anime=n()})(this,function(){var r={duration:1E3,delay:0,loop:!1,autoplay:!0,direction:\"normal\",easing:\"easeOutElastic\",elasticity:400,round:!1,begin:void 0,update:void 0,complete:void 0},n=\"translateX translateY translateZ rotate rotateX rotateY rotateZ scale scaleX scaleY scaleZ skewX skewY\".split(\" \"),e=function(){return{array:function(a){return Array.isArray(a)},object:function(a){return-1<\nObject.prototype.toString.call(a).indexOf(\"Object\")},html:function(a){return a instanceof NodeList||a instanceof HTMLCollection},node:function(a){return a.nodeType},svg:function(a){return a instanceof SVGElement},number:function(a){return!isNaN(parseInt(a))},string:function(a){return\"string\"===typeof a},func:function(a){return\"function\"===typeof a},undef:function(a){return\"undefined\"===typeof a},\"null\":function(a){return\"null\"===typeof a},hex:function(a){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a)},\nrgb:function(a){return/^rgb/.test(a)},rgba:function(a){return/^rgba/.test(a)},hsl:function(a){return/^hsl/.test(a)},color:function(a){return e.hex(a)||e.rgb(a)||e.rgba(a)||e.hsl(a)}}}(),z=function(){var a={},b={Sine:function(a){return 1-Math.cos(a*Math.PI/2)},Circ:function(a){return 1-Math.sqrt(1-a*a)},Elastic:function(a,b){if(0===a||1===a)return a;var f=1-Math.min(b,998)/1E3,h=a/1-1;return-(Math.pow(2,10*h)*Math.sin(2*(h-f/(2*Math.PI)*Math.asin(1))*Math.PI/f))},Back:function(a){return a*a*(3*a-2)},\nBounce:function(a){for(var b,f=4;a<((b=Math.pow(2,--f))-1)/11;);return 1/Math.pow(4,3-f)-7.5625*Math.pow((3*b-2)/22-a,2)}};[\"Quad\",\"Cubic\",\"Quart\",\"Quint\",\"Expo\"].forEach(function(a,d){b[a]=function(a){return Math.pow(a,d+2)}});Object.keys(b).forEach(function(c){var d=b[c];a[\"easeIn\"+c]=d;a[\"easeOut\"+c]=function(a,b){return 1-d(1-a,b)};a[\"easeInOut\"+c]=function(a,b){return.5>a?d(2*a,b)/2:1-d(-2*a+2,b)/2}});a.linear=function(a){return a};return a}(),u=function(a){return e.string(a)?a:a+\"\"},A=function(a){return a.replace(/([a-z])([A-Z])/g,\n\"$1-$2\").toLowerCase()},B=function(a){if(e.color(a))return!1;try{return document.querySelectorAll(a)}catch(b){return!1}},v=function(a){return a.reduce(function(a,c){return a.concat(e.array(c)?v(c):c)},[])},p=function(a){if(e.array(a))return a;e.string(a)&&(a=B(a)||a);return e.html(a)?[].slice.call(a):[a]},C=function(a,b){return a.some(function(a){return a===b})},N=function(a,b){var c={};a.forEach(function(a){var f=JSON.stringify(b.map(function(b){return a[b]}));c[f]=c[f]||[];c[f].push(a)});return Object.keys(c).map(function(a){return c[a]})},\nD=function(a){return a.filter(function(a,c,d){return d.indexOf(a)===c})},w=function(a){var b={},c;for(c in a)b[c]=a[c];return b},t=function(a,b){for(var c in b)a[c]=e.undef(a[c])?b[c]:a[c];return a},O=function(a){a=a.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,function(a,b,c,e){return b+b+c+c+e+e});var b=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(a);a=parseInt(b[1],16);var c=parseInt(b[2],16),b=parseInt(b[3],16);return\"rgb(\"+a+\",\"+c+\",\"+b+\")\"},P=function(a){a=/hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(a);\nvar b=parseInt(a[1])/360,c=parseInt(a[2])/100,d=parseInt(a[3])/100;a=function(a,b,c){0>c&&(c+=1);1<c&&--c;return c<1/6?a+6*(b-a)*c:.5>c?b:c<2/3?a+(b-a)*(2/3-c)*6:a};if(0==c)c=d=b=d;else var f=.5>d?d*(1+c):d+c-d*c,h=2*d-f,c=a(h,f,b+1/3),d=a(h,f,b),b=a(h,f,b-1/3);return\"rgb(\"+255*c+\",\"+255*d+\",\"+255*b+\")\"},k=function(a){return/([\\+\\-]?[0-9|auto\\.]+)(%|px|pt|em|rem|in|cm|mm|ex|pc|vw|vh|deg)?/.exec(a)[2]},E=function(a,b,c){return k(b)?b:-1<a.indexOf(\"translate\")?k(c)?b+k(c):b+\"px\":-1<a.indexOf(\"rotate\")||\n-1<a.indexOf(\"skew\")?b+\"deg\":b},F=function(a,b){if((e.node(a)||e.svg(a))&&C(n,b))return\"transform\";if((e.node(a)||e.svg(a))&&\"transform\"!==b&&x(a,b))return\"css\";if((e.node(a)||e.svg(a))&&(a.getAttribute(b)||a[b]))return\"attribute\";if(!e[\"null\"](a[b])&&!e.undef(a[b]))return\"object\"},x=function(a,b){return getComputedStyle(a).getPropertyValue(A(b))},Q=function(a,b){var c=-1<b.indexOf(\"scale\")?1:0,d=a.style.transform;if(!d)return c;for(var f=/(\\w+)\\((.+?)\\)/g,h=[],e=[],q=[];h=f.exec(d);)e.push(h[1]),\nq.push(h[2]);d=q.filter(function(a,c){return e[c]===b});return d.length?d[0]:c},G=function(a,b){switch(F(a,b)){case \"transform\":return Q(a,b);case \"css\":return x(a,b);case \"attribute\":return a.getAttribute(b)}return a[b]||0},H=function(a,b,c){if(e.color(b))return b=e.rgb(b)||e.rgba(b)?b:e.hex(b)?O(b):e.hsl(b)?P(b):void 0,b;if(k(b))return b;a=k(a.to)?k(a.to):k(a.from);!a&&c&&(a=k(c));return a?b+a:b},I=function(a){var b=/-?\\d*\\.?\\d+/g;return{original:a,numbers:u(a).match(b)?u(a).match(b).map(Number):\n[0],strings:u(a).split(b)}},R=function(a,b,c){return b.reduce(function(b,f,e){f=f?f:c[e-1];return b+a[e-1]+f})},S=function(a){a=a?v(e.array(a)?a.map(p):p(a)):[];return a.map(function(a,c){return{target:a,id:c}})},T=function(a,b){var c=[],d;for(d in a)if(!r.hasOwnProperty(d)&&\"targets\"!==d){var f=e.object(a[d])?w(a[d]):{value:a[d]};f.name=d;c.push(t(f,b))}return c},J=function(a,b,c,d){\"transform\"===c?(c=a+\"(\"+E(a,b.from,b.to)+\")\",b=a+\"(\"+E(a,b.to)+\")\"):(a=\"css\"===c?x(d,a):void 0,c=H(b,b.from,a),b=\nH(b,b.to,a));return{from:I(c),to:I(b)}},U=function(a,b){var c=[];a.forEach(function(d,f){var h=d.target;return b.forEach(function(b){var q=F(h,b.name);if(q){var k;k=b.name;var g=b.value,g=p(e.func(g)?g(h,f):g);k={from:1<g.length?g[0]:G(h,k),to:1<g.length?g[1]:g[0]};g=w(b);g.animatables=d;g.type=q;g.from=J(b.name,k,g.type,h).from;g.to=J(b.name,k,g.type,h).to;g.round=e.color(k.from)||g.round?1:0;g.delay=(e.func(g.delay)?g.delay(h,f,a.length):g.delay)/l.speed;g.duration=(e.func(g.duration)?g.duration(h,\nf,a.length):g.duration)/l.speed;c.push(g)}})});return c},V=function(a,b){var c=U(a,b);return N(c,[\"name\",\"from\",\"to\",\"delay\",\"duration\"]).map(function(a){var b=w(a[0]);b.animatables=a.map(function(a){return a.animatables});b.totalDuration=b.delay+b.duration;return b})},y=function(a,b){a.tweens.forEach(function(c){var d=c.from,f=a.duration-(c.delay+c.duration);c.from=c.to;c.to=d;b&&(c.delay=f)});a.reversed=a.reversed?!1:!0},K=function(a){var b=[],c=[];a.tweens.forEach(function(a){if(\"css\"===a.type||\n\"transform\"===a.type)b.push(\"css\"===a.type?A(a.name):\"transform\"),a.animatables.forEach(function(a){c.push(a.target)})});return{properties:D(b).join(\", \"),elements:D(c)}},W=function(a){var b=K(a);b.elements.forEach(function(a){a.style.willChange=b.properties})},X=function(a){K(a).elements.forEach(function(a){a.style.removeProperty(\"will-change\")})},Y=function(a,b){var c=a.path,d=a.value*b,f=function(f){f=f||0;return c.getPointAtLength(1<b?a.value+f:d+f)},e=f(),k=f(-1),f=f(1);switch(a.name){case \"translateX\":return e.x;\ncase \"translateY\":return e.y;case \"rotate\":return 180*Math.atan2(f.y-k.y,f.x-k.x)/Math.PI}},Z=function(a,b){var c=Math.min(Math.max(b-a.delay,0),a.duration)/a.duration,d=a.to.numbers.map(function(b,d){var e=a.from.numbers[d],k=z[a.easing](c,a.elasticity),e=a.path?Y(a,k):e+k*(b-e);return e=a.round?Math.round(e*a.round)/a.round:e});return R(d,a.to.strings,a.from.strings)},L=function(a,b){var c=void 0;a.time=Math.min(b,a.duration);a.progress=a.time/a.duration*100;a.tweens.forEach(function(a){a.currentValue=\nZ(a,b);var d=a.currentValue;a.animatables.forEach(function(b){var e=b.id;switch(a.type){case \"css\":b.target.style[a.name]=d;break;case \"attribute\":b.target.setAttribute(a.name,d);break;case \"object\":b.target[a.name]=d;break;case \"transform\":c||(c={}),c[e]||(c[e]=[]),c[e].push(d)}})});if(c)for(var d in c)a.animatables[d].target.style.transform=c[d].join(\" \");a.settings.update&&a.settings.update(a)},M=function(a){var b={};b.animatables=S(a.targets);b.settings=t(a,r);b.properties=T(a,b.settings);b.tweens=\nV(b.animatables,b.properties);b.duration=b.tweens.length?Math.max.apply(Math,b.tweens.map(function(a){return a.totalDuration})):a.duration/l.speed;b.time=0;b.progress=0;b.running=!1;b.ended=!1;return b},m=[],l=function(a){var b=M(a),c={tick:function(){if(b.running){b.ended=!1;c.now=+new Date;c.current=c.last+c.now-c.start;L(b,c.current);var a=b.settings;a.begin&&c.current>=a.delay&&(a.begin(b),a.begin=void 0);c.current>=b.duration?(a.loop?(c.start=+new Date,\"alternate\"===a.direction&&y(b,!0),e.number(a.loop)&&\na.loop--,c.raf=requestAnimationFrame(c.tick)):(b.ended=!0,a.complete&&a.complete(b),b.pause()),c.last=0):c.raf=requestAnimationFrame(c.tick)}}};b.seek=function(a){L(b,a/100*b.duration)};b.pause=function(){b.running=!1;cancelAnimationFrame(c.raf);X(b);var a=m.indexOf(b);-1<a&&m.splice(a,1)};b.play=function(a){a&&(b=t(M(t(a,b.settings)),b));b.pause();b.running=!0;c.start=+new Date;c.last=b.ended?0:b.time;a=b.settings;\"reverse\"===a.direction&&y(b);\"alternate\"!==a.direction||a.loop||(a.loop=1);W(b);m.push(b);\nc.raf=requestAnimationFrame(c.tick)};b.restart=function(){b.reversed&&y(b);b.pause();b.seek(0);b.play()};b.settings.autoplay&&b.play();return b};l.speed=1;l.list=m;l.remove=function(a){a=v(e.array(a)?a.map(p):p(a));for(var b=m.length-1;0<=b;b--)for(var c=m[b],d=c.tweens.length-1;0<=d;d--)for(var f=c.tweens[d],h=f.animatables.length-1;0<=h;h--)C(a,f.animatables[h].target)&&(f.animatables.splice(h,1),f.animatables.length||c.tweens.splice(d,1),c.tweens.length||c.pause())};l.easings=z;l.getValue=G;l.path=\nfunction(a){a=e.string(a)?B(a)[0]:a;return{path:a,value:a.getTotalLength()}};l.random=function(a,b){return Math.floor(Math.random()*(b-a+1))+a};return l});"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/css",
    "content": "/* latin-ext */\n@font-face {\n  font-family: 'Signika Negative';\n  font-style: normal;\n  font-weight: 300;\n  src: local('Signika Negative Light'), local('SignikaNegative-Light'), url(https://fonts.gstatic.com/s/signikanegative/v6/q5TOjIw4CenPw6C-TW06FlQm6jw9jd4_TLOgXPl3aMI.woff2) format('woff2');\n  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Signika Negative';\n  font-style: normal;\n  font-weight: 300;\n  src: local('Signika Negative Light'), local('SignikaNegative-Light'), url(https://fonts.gstatic.com/s/signikanegative/v6/q5TOjIw4CenPw6C-TW06FpYOZfD05paxOum1Eorz4ao.woff2) format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Signika Negative';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Signika Negative Regular'), local('SignikaNegative-Regular'), url(https://fonts.gstatic.com/s/signikanegative/v6/Z-Q1hzbY8uAo3TpTyPFMXcRUv4UNzckW6WBp2csADjc.woff2) format('woff2');\n  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Signika Negative';\n  font-style: normal;\n  font-weight: 400;\n  src: local('Signika Negative Regular'), local('SignikaNegative-Regular'), url(https://fonts.gstatic.com/s/signikanegative/v6/Z-Q1hzbY8uAo3TpTyPFMXeDvvFXM8xWgng_3Cf56FV0.woff2) format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n/* latin-ext */\n@font-face {\n  font-family: 'Signika Negative';\n  font-style: normal;\n  font-weight: 700;\n  src: local('Signika Negative Bold'), local('SignikaNegative-Bold'), url(https://fonts.gstatic.com/s/signikanegative/v6/q5TOjIw4CenPw6C-TW06FjICD6nLJtCPDEbD0_mhtO0.woff2) format('woff2');\n  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n  font-family: 'Signika Negative';\n  font-style: normal;\n  font-weight: 700;\n  src: local('Signika Negative Bold'), local('SignikaNegative-Bold'), url(https://fonts.gstatic.com/s/signikanegative/v6/q5TOjIw4CenPw6C-TW06FuQ6_Aau4Cy11rcU9CM9cFc.woff2) format('woff2');\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/dojo.js.download",
    "content": "/*\n    Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.\n    Available via Academic Free License >= 2.1 OR the modified BSD license.\n    see: http://dojotoolkit.org/license for details\n*/\n\n/*\n    This is an optimized version of Dojo, built for deployment and not for\n    development. To get sources and documentation, please visit:\n\n        http://dojotoolkit.org\n*/\n\n//>>built\n(function(_1,_2){var _3=function(){},_4=function(it){for(var p in it){return 0;}return 1;},_5={}.toString,_6=function(it){return _5.call(it)==\"[object Function]\";},_7=function(it){return _5.call(it)==\"[object String]\";},_8=function(it){return _5.call(it)==\"[object Array]\";},_9=function(_a,_b){if(_a){for(var i=0;i<_a.length;){_b(_a[i++]);}}},_c=function(_d,_e){for(var p in _e){_d[p]=_e[p];}return _d;},_f=function(_10,_11){return _c(new Error(_10),{src:\"dojoLoader\",info:_11});},_12=1,uid=function(){return \"_\"+_12++;},req=function(_13,_14,_15){return _16(_13,_14,_15,0,req);},_17=this,doc=_17.document,_18=doc&&doc.createElement(\"DiV\"),has=req.has=function(_19){return _6(_1a[_19])?(_1a[_19]=_1a[_19](_17,doc,_18)):_1a[_19];},_1a=has.cache=_2.hasCache;has.add=function(_1b,_1c,now,_1d){(_1a[_1b]===undefined||_1d)&&(_1a[_1b]=_1c);return now&&has(_1b);};false&&has.add(\"host-node\",typeof process==\"object\"&&/node(\\.exe)?$/.test(process.execPath));if(0){require(\"./_base/configNode.js\").config(_2);_2.loaderPatch.nodeRequire=require;}false&&has.add(\"host-rhino\",typeof load==\"function\"&&(typeof Packages==\"function\"||typeof Packages==\"object\"));if(0){for(var _1e=_1.baseUrl||\".\",arg,_1f=this.arguments,i=0;i<_1f.length;){arg=(_1f[i++]+\"\").split(\"=\");if(arg[0]==\"baseUrl\"){_1e=arg[1];break;}}load(_1e+\"/_base/configRhino.js\");rhinoDojoConfig(_2,_1e,_1f);}for(var p in _1.has){has.add(p,_1.has[p],0,1);}var _20=1,_21=2,_22=3,_23=4,_24=5;if(0){_20=\"requested\";_21=\"arrived\";_22=\"not-a-module\";_23=\"executing\";_24=\"executed\";}var _25=0,_26=\"sync\",xd=\"xd\",_27=[],_28=0,_29=_3,_2a=_3,_2b;if(1){req.isXdUrl=_3;req.initSyncLoader=function(_2c,_2d,_2e){if(!_28){_28=_2c;_29=_2d;_2a=_2e;}return {sync:_26,xd:xd,arrived:_21,nonmodule:_22,executing:_23,executed:_24,syncExecStack:_27,modules:_2f,execQ:_30,getModule:_31,injectModule:_32,setArrived:_33,signal:_34,finishExec:_35,execModule:_36,dojoRequirePlugin:_28,getLegacyMode:function(){return _25;},holdIdle:function(){_74++;},releaseIdle:function(){_37();}};};if(1){var _38=location.protocol,_39=location.host,_3a=!_39;req.isXdUrl=function(url){if(_3a||/^\\./.test(url)){return false;}if(/^\\/\\//.test(url)){return true;}var _3b=url.match(/^([^\\/\\:]+\\:)\\/\\/([^\\/]+)/);return _3b&&(_3b[1]!=_38||_3b[2]!=_39);};true||has.add(\"dojo-xhr-factory\",1);has.add(\"dojo-force-activex-xhr\",1&&!doc.addEventListener&&window.location.protocol==\"file:\");has.add(\"native-xhr\",typeof XMLHttpRequest!=\"undefined\");if(has(\"native-xhr\")&&!has(\"dojo-force-activex-xhr\")){_2b=function(){return new XMLHttpRequest();};}else{for(var _3c=[\"Msxml2.XMLHTTP\",\"Microsoft.XMLHTTP\",\"Msxml2.XMLHTTP.4.0\"],_3d,i=0;i<3;){try{_3d=_3c[i++];if(new ActiveXObject(_3d)){break;}}catch(e){}}_2b=function(){return new ActiveXObject(_3d);};}req.getXhr=_2b;has.add(\"dojo-gettext-api\",1);req.getText=function(url,_3e,_3f){var xhr=_2b();xhr.open(\"GET\",_40(url),false);xhr.send(null);if(xhr.status==200||(!location.host&&!xhr.status)){if(_3f){_3f(xhr.responseText,_3e);}}else{throw _f(\"xhrFailed\",xhr.status);}return xhr.responseText;};}}else{req.async=1;}var _41=new Function(\"__text\",\"return eval(__text);\");req.eval=function(_42,_43){return _41(_42+\"\\r\\n////@ sourceURL=\"+_43);};var _44={},_45=\"error\",_34=req.signal=function(_46,_47){var _48=_44[_46];_9(_48&&_48.slice(0),function(_49){_49.apply(null,_8(_47)?_47:[_47]);});},on=req.on=function(_4a,_4b){var _4c=_44[_4a]||(_44[_4a]=[]);_4c.push(_4b);return {remove:function(){for(var i=0;i<_4c.length;i++){if(_4c[i]===_4b){_4c.splice(i,1);return;}}}};};var _4d=[],_4e={},_4f=[],_50={},_51={},_52=[],_2f={},_53=\"\",_54={},_55={},_56={};if(1){var _57=function(_58){for(var p in _55){var _59=p.match(/^url\\:(.+)/);if(_59){_54[_5a(_59[1],_58)]=_55[p];}else{if(p!=\"*noref\"){_54[_5b(p,_58).mid]=_55[p];}}}_55={};},_5c=function(map,_5d,_5e){_5d.splice(0,_5d.length);var p,i,_5f,_60=0;for(p in map){_5d.push([p,map[p]]);if(map[p]==_5e){_60=p;}}_5d.sort(function(lhs,rhs){return rhs[0].length-lhs[0].length;});for(i=0;i<_5d.length;){_5f=_5d[i++];_5f[2]=new RegExp(\"^\"+_5f[0].replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g,function(c){return \"\\\\\"+c;})+\"(/|$)\");_5f[3]=_5f[0].length+1;}return _60;},_61=function(_62,_63){var _64=_62.name;if(!_64){_64=_62;_62={name:_64};}_62=_c({main:\"main\",mapProg:[]},_62);_62.location=(_63||\"\")+(_62.location?_62.location:_64);_62.reverseName=_5c(_62.packageMap,_62.mapProg,_64);if(!_62.main.indexOf(\"./\")){_62.main=_62.main.substring(2);}_c(_4e,_62.paths);_50[_64]=_62;_51[_64]=_64;},_65=function(_66,_67){for(var p in _66){if(p==\"waitSeconds\"){req.waitms=(_66[p]||0)*1000;}if(p==\"cacheBust\"){_53=_66[p]?(_7(_66[p])?_66[p]:(new Date()).getTime()+\"\"):\"\";}if(p==\"baseUrl\"||p==\"combo\"){req[p]=_66[p];}if(1&&p==\"async\"){var _68=_66[p];req.legacyMode=_25=(_7(_68)&&/sync|legacyAsync/.test(_68)?_68:(!_68?\"sync\":false));req.async=!_25;}if(_66[p]!==_1a){req.rawConfig[p]=_66[p];p!=\"has\"&&has.add(\"config-\"+p,_66[p],0,_67);}}if(!req.baseUrl){req.baseUrl=\"./\";}if(!/\\/$/.test(req.baseUrl)){req.baseUrl+=\"/\";}for(p in _66.has){has.add(p,_66.has[p],0,_67);}_9(_66.packages,_61);for(_1e in _66.packagePaths){_9(_66.packagePaths[_1e],function(_69){_61(_69,_1e+\"/\");});}_5c(_c(_4e,_66.paths),_4f);_9(_66.aliases,function(_6a){if(_7(_6a[0])){_6a[0]=new RegExp(\"^\"+_6a[0].replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g,function(c){return \"\\\\\"+c;})+\"$\");}_4d.push(_6a);});_5c(_c(_51,_66.packageMap),_52);if(_66.cache){_57();_55=_66.cache;if(_66.cache[\"*noref\"]){_57();}}_34(\"config\",[_66,req.rawConfig]);};if(has(\"dojo-cdn\")||1){for(var _6b,src,_6c,_6d=doc.getElementsByTagName(\"script\"),i=0;i<_6d.length&&!_6c;i++){if((src=_6d[i].getAttribute(\"src\"))&&(_6c=src.match(/(.*)\\/?dojo\\.js(\\W|$)/i))){_1.baseUrl=_6b=_1.baseUrl||_2.baseUrl||_6c[1];src=(_6d[i].getAttribute(\"data-dojo-config\")||_6d[i].getAttribute(\"djConfig\"));if(src){_56=req.eval(\"({ \"+src+\" })\",\"data-dojo-config\");}if(0){var _6e=_6d[i].getAttribute(\"data-main\");if(_6e){_56.deps=_56.deps||[_6e];}}}}}if(0){try{if(window.parent!=window&&window.parent.require){var doh=window.parent.require(\"doh\");doh&&_c(_56,doh.testConfig);}}catch(e){}}req.rawConfig={};_65(_2,1);_65(_1,1);_65(_56,1);if(has(\"dojo-cdn\")){_50.dojo.location=_6b;_50.dijit.location=_6b+\"../dijit/\";_50.dojox.location=_6b+\"../dojox/\";}}else{_4e=_2.paths;_4f=_2.pathsMapProg;_50=_2.packs;_4d=_2.aliases;_51=_2.packageMap;_52=_2.packageMapProg;_2f=_2.modules;_54=_2.cache;_53=_2.cacheBust;req.rawConfig=_2;}if(0){req.combo=req.combo||{add:_3};var _6f=0,_70=[],_71=null;}var _72=function(_73){_74++;_9(_73.deps,_32);if(0&&_6f&&!_71){_71=setTimeout(function(){_6f=0;_71=null;req.combo.done(function(_75,url){var _76=function(){_77(0,_75);_78();};_70.push(_75);_79=_75;req.injectUrl(url,_76,_75);_79=0;},req);},0);}_37();},_16=function(a1,a2,a3,_7a,_7b){var _7c,_7d;if(_7(a1)){_7c=_31(a1,_7a,true);if(_7c&&_7c.executed){return _7c.result;}throw _f(\"undefinedModule\",a1);}if(!_8(a1)){_65(a1);a1=a2;a2=a3;}if(_8(a1)){if(!a1.length){a2&&a2();}else{_7d=\"require*\"+uid();for(var mid,_7e=[],i=0;i<a1.length;){mid=a1[i++];if(mid in {exports:1,module:1}){throw _f(\"illegalModuleId\",mid);}_7e.push(_31(mid,_7a));}_7c=_c(_7f(\"\",_7d,0,\"\"),{injected:_21,deps:_7e,def:a2||_3,require:_7a?_7a.require:req});_2f[_7c.mid]=_7c;_72(_7c);var _80=_74&&req.async;_74++;_36(_7c,_80);_37();if(!_7c.executed){_30.push(_7c);}_78();}}return _7b;},_81=function(_82){if(!_82){return req;}var _83=_82.require;if(!_83){_83=function(a1,a2,a3){return _16(a1,a2,a3,_82,_83);};_82.require=_c(_83,req);_83.module=_82;_83.toUrl=function(_84){return _5a(_84,_82);};_83.toAbsMid=function(mid){return _af(mid,_82);};if(0){_83.undef=function(mid){req.undef(mid,_82);};}}return _83;},_30=[],_85=[],_86={},_87=function(_88){_88.injected=_20;_86[_88.mid]=1;if(_88.url){_86[_88.url]=_88.pack||1;}},_33=function(_89){_89.injected=_21;delete _86[_89.mid];if(_89.url){delete _86[_89.url];}if(_4(_86)){_8a();1&&_25==xd&&(_25=_26);}},_8b=req.idle=function(){return !_85.length&&_4(_86)&&!_30.length&&!_74;},_8c=function(_8d,map){for(var i=0;i<map.length;i++){if(map[i][2].test(_8d)){return map[i];}}return 0;},_8e=function(_8f){var _90=[],_91,_92;_8f=_8f.replace(/\\\\/g,\"/\").split(\"/\");while(_8f.length){_91=_8f.shift();if(_91==\"..\"&&_90.length&&_92!=\"..\"){_90.pop();_92=_90[_90.length-1];}else{if(_91!=\".\"){_90.push(_92=_91);}}}return _90.join(\"/\");},_7f=function(pid,mid,_93,url,_94){if(1){var xd=req.isXdUrl(url);return {pid:pid,mid:mid,pack:_93,url:url,executed:0,def:0,isXd:xd,isAmd:!!(xd||(_50[pid]&&_50[pid].isAmd)),cacheId:_94};}else{return {pid:pid,mid:mid,pack:_93,url:url,executed:0,def:0,cacheId:_94};}},_95=function(mid,_96,_97,_98,_99,_9a,_9b,_9c){var pid,_9d,_9e,_9f,_a0,_a1,url,_a2,_a3,_a4,_a5=0;_a4=mid;_a3=/^\\./.test(mid);if(/(^\\/)|(\\:)|(\\.js$)/.test(mid)||(_a3&&!_96)){return _7f(0,mid,0,mid);}else{mid=_8e(_a3?(_96.mid+\"/../\"+mid):mid);if(/^\\./.test(mid)){throw _f(\"irrationalPath\",mid);}_9f=_96&&_96.pack&&_96.pack.mapProg;_a0=(_9f&&_8c(mid,_9f))||_8c(mid,_9a);if(_a0){pid=_a0[1];mid=mid.substring(_a0[3]);_9d=_97[pid];if(!mid){mid=_9d.main;}_9e=mid;_a5=_9d.reverseName+\"/\"+mid;mid=pid+\"/\"+mid;}else{pid=\"\";}var _a6=0,_a7=0;_9(_4d,function(_a8){var _a9=mid.match(_a8[0]);if(_a9&&_a9.length>_a6){_a7=_6(_a8[1])?mid.replace(_a8[0],_a8[1]):_a8[1];}});if(_a7){return _95(_a7,0,_97,_98,_99,_9a,_9b,_9c);}_a2=_98[mid];if(_a2){return _9c?_7f(_a2.pid,_a2.mid,_a2.pack,_a2.url,_a5):_98[mid];}}_a0=_8c(mid,_9b);if(_a0){url=_a0[1]+mid.substring(_a0[3]-1);}else{if(pid){url=_9d.location+\"/\"+_9e;}else{if(has(\"config-tlmSiblingOfDojo\")){url=\"../\"+mid;}else{url=mid;}}}if(!(/(^\\/)|(\\:)/.test(url))){url=_99+url;}url+=\".js\";return _7f(pid,mid,_9d,_8e(url),_a5);},_5b=function(mid,_aa){return _95(mid,_aa,_50,_2f,req.baseUrl,_52,_4f);},_ab=function(_ac,_ad,_ae){return _ac.normalize?_ac.normalize(_ad,function(mid){return _af(mid,_ae);}):_af(_ad,_ae);},_b0=0,_31=function(mid,_b1,_b2){var _b3,_b4,_b5,_b6;_b3=mid.match(/^(.+?)\\!(.*)$/);if(_b3){_b4=_31(_b3[1],_b1,_b2);if(1&&_25==_26&&!_b4.executed){_32(_b4);if(_b4.injected===_21&&!_b4.executed){_74++;_36(_b4);_37();}if(_b4.executed){_b7(_b4);}else{_30.unshift(_b4);}}if(_b4.executed===_24&&!_b4.load){_b7(_b4);}if(_b4.load){_b5=_ab(_b4,_b3[2],_b1);mid=(_b4.mid+\"!\"+(_b4.dynamic?++_b0+\"!\":\"\")+_b5);}else{_b5=_b3[2];mid=_b4.mid+\"!\"+(++_b0)+\"!waitingForPlugin\";}_b6={plugin:_b4,mid:mid,req:_81(_b1),prid:_b5};}else{_b6=_5b(mid,_b1);}return _2f[_b6.mid]||(!_b2&&(_2f[_b6.mid]=_b6));},_af=req.toAbsMid=function(mid,_b8){return _5b(mid,_b8).mid;},_5a=req.toUrl=function(_b9,_ba){var _bb=_b9.match(/(.+)(\\.[^\\/\\.]+?)$/),_bc=(_bb&&_bb[1])||_b9,ext=(_bb&&_bb[2])||\"\",_bd=_5b(_bc,_ba),url=_bd.url;url=typeof _bd.pid==\"string\"?url.substring(0,url.length-3):url;return _40(url+ext);},_be={injected:_21,executed:_24,def:_22,result:_22},_bf=function(mid){return _2f[mid]=_c({mid:mid},_be);},_c0=_bf(\"require\"),_c1=_bf(\"exports\"),_c2=_bf(\"module\"),_c3=function(_c4,_c5){req.trace(\"loader-run-factory\",[_c4.mid]);var _c6=_c4.def,_c7;1&&_27.unshift(_c4);if(has(\"config-dojo-loader-catches\")){try{_c7=_6(_c6)?_c6.apply(null,_c5):_c6;}catch(e){_34(_45,_c4.result=_f(\"factoryThrew\",[_c4,e]));}}else{_c7=_6(_c6)?_c6.apply(null,_c5):_c6;}_c4.result=_c7===undefined&&_c4.cjs?_c4.cjs.exports:_c7;1&&_27.shift(_c4);},_c8={},_c9=0,_b7=function(_ca){var _cb=_ca.result;_ca.dynamic=_cb.dynamic;_ca.normalize=_cb.normalize;_ca.load=_cb.load;return _ca;},_cc=function(_cd){var map={};_9(_cd.loadQ,function(_ce){var _cf=_ce.mid,_d0=_ab(_cd,_ce.prid,_ce.req.module),mid=_cd.dynamic?_ce.mid.replace(/waitingForPlugin$/,_d0):(_cd.mid+\"!\"+_d0),_d1=_c(_c({},_ce),{mid:mid,prid:_d0,injected:0});if(!_2f[mid]){_e2(_2f[mid]=_d1);}map[_ce.mid]=_2f[mid];_33(_ce);delete _2f[_ce.mid];});_cd.loadQ=0;var _d2=function(_d3){for(var _d4,_d5=_d3.deps||[],i=0;i<_d5.length;i++){_d4=map[_d5[i].mid];if(_d4){_d5[i]=_d4;}}};for(var p in _2f){_d2(_2f[p]);}_9(_30,_d2);},_35=function(_d6){req.trace(\"loader-finish-exec\",[_d6.mid]);_d6.executed=_24;_d6.defOrder=_c9++;1&&_9(_d6.provides,function(cb){cb();});if(_d6.loadQ){_b7(_d6);_cc(_d6);}for(i=0;i<_30.length;){if(_30[i]===_d6){_30.splice(i,1);}else{i++;}}},_d7=[],_36=function(_d8,_d9){if(_d8.executed===_23){req.trace(\"loader-circular-dependency\",[_d7.concat(mid).join(\"->\")]);return (!_d8.def||_d9)?_c8:(_d8.cjs&&_d8.cjs.exports);}if(!_d8.executed){if(!_d8.def){return _c8;}var mid=_d8.mid,_da=_d8.deps||[],arg,_db,_dc=[],i=0;if(0){_d7.push(mid);req.trace(\"loader-exec-module\",[\"exec\",_d7.length,mid]);}_d8.executed=_23;while(i<_da.length){arg=_da[i++];_db=((arg===_c0)?_81(_d8):((arg===_c1)?_d8.cjs.exports:((arg===_c2)?_d8.cjs:_36(arg,_d9))));if(_db===_c8){_d8.executed=0;req.trace(\"loader-exec-module\",[\"abort\",mid]);0&&_d7.pop();return _c8;}_dc.push(_db);}_c3(_d8,_dc);_35(_d8);}0&&_d7.pop();return _d8.result;},_74=0,_78=function(){if(_74){return;}_74++;_29();for(var _dd,_de,i=0;i<_30.length;){_dd=_c9;_de=_30[i];_36(_de);if(_dd!=_c9){_29();i=0;}else{i++;}}_37();},_37=function(){_74--;if(_8b()){_34(\"idle\",[]);}};if(0){req.undef=function(_df,_e0){var _e1=_31(_df,_e0);_33(_e1);delete _2f[_e1.mid];};}if(1){if(has(\"dojo-loader-eval-hint-url\")===undefined){has.add(\"dojo-loader-eval-hint-url\",1);}var _40=function(url){url+=\"\";return url+(_53?((/\\?/.test(url)?\"&\":\"?\")+_53):\"\");},_e2=function(_e3){var _e4=_e3.plugin;if(_e4.executed===_24&&!_e4.load){_b7(_e4);}var _e5=function(def){_e3.result=def;_33(_e3);_35(_e3);_78();};_87(_e3);if(_e4.load){_e4.load(_e3.prid,_e3.req,_e5);}else{if(_e4.loadQ){_e4.loadQ.push(_e3);}else{_30.unshift(_e4);_32(_e4);if(_e4.load){_e4.load(_e3.prid,_e3.req,_e5);}else{_e4.loadQ=[_e3];}}}},_e6=0,_79=0,_e7=0,_e8=function(_e9,_ea){_e7=1;if(has(\"config-dojo-loader-catches\")){try{if(_e9===_e6){_e6.call(null);}else{req.eval(_e9,has(\"dojo-loader-eval-hint-url\")?_ea.url:_ea.mid);}}catch(e){_34(_45,_f(\"evalModuleThrew\",_ea));}}else{if(_e9===_e6){_e6.call(null);}else{req.eval(_e9,has(\"dojo-loader-eval-hint-url\")?_ea.url:_ea.mid);}}_e7=0;},_32=function(_eb){var mid=_eb.mid,url=_eb.url;if(_eb.executed||_eb.injected||_86[mid]||(_eb.url&&((_eb.pack&&_86[_eb.url]===_eb.pack)||_86[_eb.url]==1))){return;}if(0){var _ec=0;if(_eb.plugin&&_eb.plugin.isCombo){req.combo.add(_eb.plugin.mid,_eb.prid,0,req);_ec=1;}else{if(!_eb.plugin){_ec=req.combo.add(0,_eb.mid,_eb.url,req);}}if(_ec){_87(_eb);_6f=1;return;}}if(_eb.plugin){_e2(_eb);return;}_87(_eb);var _ed=function(){_77(_eb);if(_eb.injected!==_21){_33(_eb);_c(_eb,_be);}if(1&&_25){!_27.length&&_78();}else{_78();}};_e6=_54[mid]||_54[_eb.cacheId];if(_e6){req.trace(\"loader-inject\",[\"cache\",_eb.mid,url]);_e8(_e6,_eb);_ed();return;}if(1&&_25){if(_eb.isXd){_25==_26&&(_25=xd);}else{if(_eb.isAmd&&_25!=_26){}else{var _ee=function(_ef){if(_25==_26){_27.unshift(_eb);_e8(_ef,_eb);_27.shift();_77(_eb);if(!_eb.cjs){_33(_eb);_35(_eb);}if(_eb.finish){var _f0=mid+\"*finish\",_f1=_eb.finish;delete _eb.finish;def(_f0,[\"dojo\",(\"dojo/require!\"+_f1.join(\",\")).replace(/\\./g,\"/\")],function(_f2){_9(_f1,function(mid){_f2.require(mid);});});_30.unshift(_31(_f0));}_ed();}else{_ef=_2a(_eb,_ef);if(_ef){_e8(_ef,_eb);_ed();}else{_79=_eb;req.injectUrl(_40(url),_ed,_eb);_79=0;}}};req.trace(\"loader-inject\",[\"xhr\",_eb.mid,url,_25!=_26]);if(has(\"config-dojo-loader-catches\")){try{req.getText(url,_25!=_26,_ee);}catch(e){_34(_45,_f(\"xhrInjectFailed\",[_eb,e]));}}else{req.getText(url,_25!=_26,_ee);}return;}}}req.trace(\"loader-inject\",[\"script\",_eb.mid,url]);_79=_eb;req.injectUrl(_40(url),_ed,_eb);_79=0;},_f3=function(_f4,_f5,def){req.trace(\"loader-define-module\",[_f4.mid,_f5]);if(0&&_f4.plugin&&_f4.plugin.isCombo){_f4.result=_6(def)?def():def;_33(_f4);_35(_f4);return _f4;}var mid=_f4.mid;if(_f4.injected===_21){_34(_45,_f(\"multipleDefine\",_f4));return _f4;}_c(_f4,{deps:_f5,def:def,cjs:{id:_f4.mid,uri:_f4.url,exports:(_f4.result={}),setExports:function(_f6){_f4.cjs.exports=_f6;}}});for(var i=0;i<_f5.length;i++){_f5[i]=_31(_f5[i],_f4);}if(1&&_25&&!_86[mid]){_72(_f4);_30.push(_f4);_78();}_33(_f4);if(!_6(def)&&!_f5.length){_f4.result=def;_35(_f4);}return _f4;},_77=function(_f7,_f8){_57(_f7);var _f9=[],_fa,_fb;while(_85.length){_fb=_85.shift();_f8&&(_fb[0]=_f8.shift());_fa=_fb[0]&&_31(_fb[0])||_f7;_f9.push(_f3(_fa,_fb[1],_fb[2]));}_9(_f9,_72);};}var _fc=0,_8a=_3,_fd=_3;if(1){_8a=function(){_fc&&clearTimeout(_fc);_fc=0;},_fd=function(){_8a();req.waitms&&(_fc=setTimeout(function(){_8a();_34(_45,_f(\"timeout\",_86));},req.waitms));};}if(1){has.add(\"ie-event-behavior\",doc.attachEvent&&(typeof opera===\"undefined\"||opera.toString()!=\"[object Opera]\"));}if(1&&(1||1)){var _fe=function(_ff,_100,_101,_102){if(!has(\"ie-event-behavior\")){_ff.addEventListener(_100,_102,false);return function(){_ff.removeEventListener(_100,_102,false);};}else{_ff.attachEvent(_101,_102);return function(){_ff.detachEvent(_101,_102);};}},_103=_fe(window,\"load\",\"onload\",function(){req.pageLoaded=1;doc.readyState!=\"complete\"&&(doc.readyState=\"complete\");_103();});if(1){var _104=doc.getElementsByTagName(\"script\")[0],_105=_104.parentNode;req.injectUrl=function(url,_106,_107){_fd();var node=_107.node=doc.createElement(\"script\"),_108=function(e){e=e||window.event;var node=e.target||e.srcElement;if(e.type===\"load\"||/complete|loaded/.test(node.readyState)){_109();_106&&_106();}},_109=_fe(node,\"load\",\"onreadystatechange\",_108);node.type=\"text/javascript\";node.charset=\"utf-8\";node.src=url;_105.insertBefore(node,_104);return node;};}}if(1){req.log=function(){try{for(var i=0;i<arguments.length;i++){}}catch(e){}};}else{req.log=_3;}if(0){var _10a=req.trace=function(_10b,args){if(_10a.on&&_10a.group[_10b]){_34(\"trace\",[_10b,args]);for(var arg,dump=[],text=\"trace:\"+_10b+(args.length?(\":\"+args[0]):\"\"),i=1;i<args.length;){arg=args[i++];if(_7(arg)){text+=\", \"+arg;}else{dump.push(arg);}}req.log(text);dump.length&&dump.push(\".\");req.log.apply(req,dump);}};_c(_10a,{on:1,group:{},set:function(_10c,_10d){if(_7(_10c)){_10a.group[_10c]=_10d;}else{_c(_10a.group,_10c);}}});_10a.set(_c(_c(_c({},_2.trace),_1.trace),_56.trace));on(\"config\",function(_10e){_10e.trace&&_10a.set(_10e.trace);});}else{req.trace=_3;}var def=function(mid,_10f,_110){var _111=arguments.length,args=0,_112=[\"require\",\"exports\",\"module\"];if(0){if(_111==1&&_6(mid)){_10f=[];mid.toString().replace(/(\\/\\*([\\s\\S]*?)\\*\\/|\\/\\/(.*)$)/mg,\"\").replace(/require\\([\"']([\\w\\!\\-_\\.\\/]+)[\"']\\)/g,function(_113,dep){_10f.push(dep);});args=[0,_112.concat(_10f),mid];}}if(!args){args=_111==1?[0,_112,mid]:(_111==2?(_8(mid)?[0,mid,_10f]:(_6(_10f)?[mid,_112,_10f]:[mid,[],_10f])):[mid,_10f,_110]);}req.trace(\"loader-define\",args.slice(0,2));var _114=args[0]&&_31(args[0]),_115;if(_114&&!_86[_114.mid]){_72(_f3(_114,args[1],args[2]));}else{if(!has(\"ie-event-behavior\")||!1||_e7){_85.push(args);}else{_114=_114||_79;if(!_114){for(mid in _86){_115=_2f[mid];if(_115&&_115.node&&_115.node.readyState===\"interactive\"){_114=_115;break;}}if(0&&!_114){for(var i=0;i<_70.length;i++){_114=_70[i];if(_114.node&&_114.node.readyState===\"interactive\"){break;}_114=0;}}}if(0&&_8(_114)){_72(_f3(_31(_114.shift()),args[1],args[2]));if(!_114.length){_70.splice(i,1);}}else{if(_114){_57(_114);_72(_f3(_114,args[1],args[2]));}else{_34(_45,_f(\"ieDefineFailed\",args[0]));}}_78();}}};def.amd={vendor:\"dojotoolkit.org\"};if(0){req.def=def;}_c(_c(req,_2.loaderPatch),_1.loaderPatch);on(_45,function(arg){try{console.error(arg);if(arg instanceof Error){for(var p in arg){}}}catch(e){}});_c(req,{uid:uid,cache:_54,packs:_50});if(0){_c(req,{paths:_4e,aliases:_4d,packageMap:_51,modules:_2f,legacyMode:_25,execQ:_30,defQ:_85,waiting:_86,pathsMapProg:_4f,packageMapProg:_52,listenerQueues:_44,computeMapProg:_5c,runMapProg:_8c,compactPath:_8e,getModuleInfo:_95});}if(_17.define){if(1){_34(_45,_f(\"defineAlreadyDefined\",0));}}else{_17.define=def;_17.require=req;}if(0&&req.combo&&req.combo.plugins){var _116=req.combo.plugins,_117;for(_117 in _116){_c(_c(_31(_117),_116[_117]),{isCombo:1,executed:\"executed\",load:1});}}if(1){var _118=_2.deps||_1.deps||_56.deps,_119=_2.callback||_1.callback||_56.callback;req.boot=(_118||_119)?[_118||[],_119]:0;}if(!1){!req.async&&req([\"dojo\"]);req.boot&&req.apply(null,req.boot);}})(this.dojoConfig||this.djConfig||this.require||{},{async:\"legacyAsync\",hasCache:{\"config-selectorEngine\":\"acme\",\"config-tlmSiblingOfDojo\":1,\"dojo-built\":1,\"dojo-cdn\":1,\"dojo-loader\":1,dom:1,\"host-browser\":1},packages:[{location:\"../dijit\",name:\"dijit\"},{location:\"../dojox\",name:\"dojox\"},{location:\".\",name:\"dojo\"}]});require({cache:{\"dojo/_base/fx\":function(){define([\"./kernel\",\"./lang\",\"../Evented\",\"./Color\",\"./connect\",\"./sniff\",\"../dom\",\"../dom-style\"],function(dojo,lang,_11a,_11b,_11c,has,dom,_11d){var _11e=lang.mixin;dojo._Line=function(_11f,end){this.start=_11f;this.end=end;};dojo._Line.prototype.getValue=function(n){return ((this.end-this.start)*n)+this.start;};dojo.Animation=function(args){_11e(this,args);if(lang.isArray(this.curve)){this.curve=new dojo._Line(this.curve[0],this.curve[1]);}};dojo.Animation.prototype=new _11a();dojo._Animation=dojo.Animation;lang.extend(dojo.Animation,{duration:350,repeat:0,rate:20,_percent:0,_startRepeatCount:0,_getStep:function(){var _120=this._percent,_121=this.easing;return _121?_121(_120):_120;},_fire:function(evt,args){var a=args||[];if(this[evt]){if(dojo.config.debugAtAllCosts){this[evt].apply(this,a);}else{try{this[evt].apply(this,a);}catch(e){console.error(\"exception in animation handler for:\",evt);console.error(e);}}}return this;},play:function(_122,_123){var _124=this;if(_124._delayTimer){_124._clearTimer();}if(_123){_124._stopTimer();_124._active=_124._paused=false;_124._percent=0;}else{if(_124._active&&!_124._paused){return _124;}}_124._fire(\"beforeBegin\",[_124.node]);var de=_122||_124.delay,_125=lang.hitch(_124,\"_play\",_123);if(de>0){_124._delayTimer=setTimeout(_125,de);return _124;}_125();return _124;},_play:function(_126){var _127=this;if(_127._delayTimer){_127._clearTimer();}_127._startTime=new Date().valueOf();if(_127._paused){_127._startTime-=_127.duration*_127._percent;}_127._active=true;_127._paused=false;var _128=_127.curve.getValue(_127._getStep());if(!_127._percent){if(!_127._startRepeatCount){_127._startRepeatCount=_127.repeat;}_127._fire(\"onBegin\",[_128]);}_127._fire(\"onPlay\",[_128]);_127._cycle();return _127;},pause:function(){var _129=this;if(_129._delayTimer){_129._clearTimer();}_129._stopTimer();if(!_129._active){return _129;}_129._paused=true;_129._fire(\"onPause\",[_129.curve.getValue(_129._getStep())]);return _129;},gotoPercent:function(_12a,_12b){var _12c=this;_12c._stopTimer();_12c._active=_12c._paused=true;_12c._percent=_12a;if(_12b){_12c.play();}return _12c;},stop:function(_12d){var _12e=this;if(_12e._delayTimer){_12e._clearTimer();}if(!_12e._timer){return _12e;}_12e._stopTimer();if(_12d){_12e._percent=1;}_12e._fire(\"onStop\",[_12e.curve.getValue(_12e._getStep())]);_12e._active=_12e._paused=false;return _12e;},status:function(){if(this._active){return this._paused?\"paused\":\"playing\";}return \"stopped\";},_cycle:function(){var _12f=this;if(_12f._active){var curr=new Date().valueOf();var step=(curr-_12f._startTime)/(_12f.duration);if(step>=1){step=1;}_12f._percent=step;if(_12f.easing){step=_12f.easing(step);}_12f._fire(\"onAnimate\",[_12f.curve.getValue(step)]);if(_12f._percent<1){_12f._startTimer();}else{_12f._active=false;if(_12f.repeat>0){_12f.repeat--;_12f.play(null,true);}else{if(_12f.repeat==-1){_12f.play(null,true);}else{if(_12f._startRepeatCount){_12f.repeat=_12f._startRepeatCount;_12f._startRepeatCount=0;}}}_12f._percent=0;_12f._fire(\"onEnd\",[_12f.node]);!_12f.repeat&&_12f._stopTimer();}}return _12f;},_clearTimer:function(){clearTimeout(this._delayTimer);delete this._delayTimer;}});var ctr=0,_130=null,_131={run:function(){}};lang.extend(dojo.Animation,{_startTimer:function(){if(!this._timer){this._timer=_11c.connect(_131,\"run\",this,\"_cycle\");ctr++;}if(!_130){_130=setInterval(lang.hitch(_131,\"run\"),this.rate);}},_stopTimer:function(){if(this._timer){_11c.disconnect(this._timer);this._timer=null;ctr--;}if(ctr<=0){clearInterval(_130);_130=null;ctr=0;}}});var _132=has(\"ie\")?function(node){var ns=node.style;if(!ns.width.length&&_11d.get(node,\"width\")==\"auto\"){ns.width=\"auto\";}}:function(){};dojo._fade=function(args){args.node=dom.byId(args.node);var _133=_11e({properties:{}},args),_134=(_133.properties.opacity={});_134.start=!(\"start\" in _133)?function(){return +_11d.get(_133.node,\"opacity\")||0;}:_133.start;_134.end=_133.end;var anim=dojo.animateProperty(_133);_11c.connect(anim,\"beforeBegin\",lang.partial(_132,_133.node));return anim;};dojo.fadeIn=function(args){return dojo._fade(_11e({end:1},args));};dojo.fadeOut=function(args){return dojo._fade(_11e({end:0},args));};dojo._defaultEasing=function(n){return 0.5+((Math.sin((n+1.5)*Math.PI))/2);};var _135=function(_136){this._properties=_136;for(var p in _136){var prop=_136[p];if(prop.start instanceof _11b){prop.tempColor=new _11b();}}};_135.prototype.getValue=function(r){var ret={};for(var p in this._properties){var prop=this._properties[p],_137=prop.start;if(_137 instanceof _11b){ret[p]=_11b.blendColors(_137,prop.end,r,prop.tempColor).toCss();}else{if(!lang.isArray(_137)){ret[p]=((prop.end-_137)*r)+_137+(p!=\"opacity\"?prop.units||\"px\":0);}}}return ret;};dojo.animateProperty=function(args){var n=args.node=dom.byId(args.node);if(!args.easing){args.easing=dojo._defaultEasing;}var anim=new dojo.Animation(args);_11c.connect(anim,\"beforeBegin\",anim,function(){var pm={};for(var p in this.properties){if(p==\"width\"||p==\"height\"){this.node.display=\"block\";}var prop=this.properties[p];if(lang.isFunction(prop)){prop=prop(n);}prop=pm[p]=_11e({},(lang.isObject(prop)?prop:{end:prop}));if(lang.isFunction(prop.start)){prop.start=prop.start(n);}if(lang.isFunction(prop.end)){prop.end=prop.end(n);}var _138=(p.toLowerCase().indexOf(\"color\")>=0);function _139(node,p){var v={height:node.offsetHeight,width:node.offsetWidth}[p];if(v!==undefined){return v;}v=_11d.get(node,p);return (p==\"opacity\")?+v:(_138?v:parseFloat(v));};if(!(\"end\" in prop)){prop.end=_139(n,p);}else{if(!(\"start\" in prop)){prop.start=_139(n,p);}}if(_138){prop.start=new _11b(prop.start);prop.end=new _11b(prop.end);}else{prop.start=(p==\"opacity\")?+prop.start:parseFloat(prop.start);}}this.curve=new _135(pm);});_11c.connect(anim,\"onAnimate\",lang.hitch(_11d,\"set\",anim.node));return anim;};dojo.anim=function(node,_13a,_13b,_13c,_13d,_13e){return dojo.animateProperty({node:node,duration:_13b||dojo.Animation.prototype.duration,properties:_13a,easing:_13c,onEnd:_13d}).play(_13e||0);};return {_Line:dojo._Line,Animation:dojo.Animation,_fade:dojo._fade,fadeIn:dojo.fadeIn,fadeOut:dojo.fadeOut,_defaultEasing:dojo._defaultEasing,animateProperty:dojo.animateProperty,anim:dojo.anim};});},\"dojo/dom-form\":function(){define([\"./_base/lang\",\"./dom\",\"./io-query\",\"./json\"],function(lang,dom,ioq,json){function _13f(obj,name,_140){if(_140===null){return;}var val=obj[name];if(typeof val==\"string\"){obj[name]=[val,_140];}else{if(lang.isArray(val)){val.push(_140);}else{obj[name]=_140;}}};var _141=\"file|submit|image|reset|button\";var form={fieldToObject:function fieldToObject(_142){var ret=null;_142=dom.byId(_142);if(_142){var _143=_142.name,type=(_142.type||\"\").toLowerCase();if(_143&&type&&!_142.disabled){if(type==\"radio\"||type==\"checkbox\"){if(_142.checked){ret=_142.value;}}else{if(_142.multiple){ret=[];var _144=[_142.firstChild];while(_144.length){for(var node=_144.pop();node;node=node.nextSibling){if(node.nodeType==1&&node.tagName.toLowerCase()==\"option\"){if(node.selected){ret.push(node.value);}}else{if(node.nextSibling){_144.push(node.nextSibling);}if(node.firstChild){_144.push(node.firstChild);}break;}}}}else{ret=_142.value;}}}}return ret;},toObject:function formToObject(_145){var ret={},_146=dom.byId(_145).elements;for(var i=0,l=_146.length;i<l;++i){var item=_146[i],_147=item.name,type=(item.type||\"\").toLowerCase();if(_147&&type&&_141.indexOf(type)<0&&!item.disabled){_13f(ret,_147,form.fieldToObject(item));if(type==\"image\"){ret[_147+\".x\"]=ret[_147+\".y\"]=ret[_147].x=ret[_147].y=0;}}}return ret;},toQuery:function formToQuery(_148){return ioq.objectToQuery(form.toObject(_148));},toJson:function formToJson(_149,_14a){return json.stringify(form.toObject(_149),null,_14a?4:0);}};return form;});},\"dojo/i18n\":function(){define([\"./_base/kernel\",\"require\",\"./has\",\"./_base/array\",\"./_base/config\",\"./_base/lang\",\"./_base/xhr\"],function(dojo,_14b,has,_14c,_14d,lang,xhr){var _14e=dojo.i18n={},_14f=/(^.*(^|\\/)nls)(\\/|$)([^\\/]*)\\/?([^\\/]*)/,_150=function(root,_151,_152,_153){for(var _154=[_152+_153],_155=_151.split(\"-\"),_156=\"\",i=0;i<_155.length;i++){_156+=(_156?\"-\":\"\")+_155[i];if(!root||root[_156]){_154.push(_152+_156+\"/\"+_153);}}return _154;},_157={},_158=dojo.getL10nName=function(_159,_15a,_15b){_15b=_15b?_15b.toLowerCase():dojo.locale;_159=\"dojo/i18n!\"+_159.replace(/\\./g,\"/\");_15a=_15a.replace(/\\./g,\"/\");return (/root/i.test(_15b))?(_159+\"/nls/\"+_15a):(_159+\"/nls/\"+_15b+\"/\"+_15a);},_15c=function(_15d,_15e,_15f,_160,_161,load){_15d([_15e],function(root){var _162=_157[_15e+\"/\"]=lang.clone(root.root),_163=_150(!root._v1x&&root,_161,_15f,_160);_15d(_163,function(){for(var i=1;i<_163.length;i++){_157[_163[i]]=_162=lang.mixin(lang.clone(_162),arguments[i]);}var _164=_15e+\"/\"+_161;_157[_164]=_162;load&&load(lang.delegate(_162));});});},_165=function(id,_166){var _167=_14f.exec(id),_168=_167[1];return /^\\./.test(_168)?_166(_168)+\"/\"+id.substring(_168.length):id;},_169=function(){},load=function(id,_16a,load){var _16b=_14f.exec(id),_16c=_16b[1]+\"/\",_16d=_16b[5]||_16b[4],_16e=_16c+_16d,_16f=(_16b[5]&&_16b[4]),_170=_16f||dojo.locale,_171=_16e+\"/\"+_170;if(_16f){_169(_171);if(_157[_171]){load(_157[_171]);}else{_15c(_16a,_16e,_16c,_16d,_170,load);}return;}var _172=_14d.extraLocale||[];_172=lang.isArray(_172)?_172:[_172];_172.push(_170);var _173=_172.length,_174;_14c.forEach(_172,function(_175){_15c(_16a,_16e,_16c,_16d,_175,function(_176){if(_175==_170){_174=_176;}if(!--_173){load(_174);}});});};if(has(\"dojo-unit-tests\")){var _177=_14e.unitTests=[];}true||has.add(\"dojo-v1x-i18n-Api\",1);if(1){var _178={},_179=new Function(\"bundle, __evalError\",\"var __amdResult, define = function(x){__amdResult= x;};\"+\"return [(function(){\"+\"try{eval(arguments[0]);}catch(e){}\"+\"if(__amdResult)return 0;\"+\"try{return eval('('+arguments[0]+')');}\"+\"catch(e){__evalError.e = e; return __evalError;}\"+\"})(arguments[0]) , __amdResult];\"),_17a=function(url,_17b,_17c){if(_17b===_178){console.error(\"failed to evaluate i18n bundle; url=\"+url,_178.e);return {};}return _17b?(/nls\\/[^\\/]+\\/[^\\/]+$/.test(url)?_17b:{root:_17b,_v1x:1}):_17c;},_17d=function(deps,_17e){var _17f=[];_14c.forEach(deps,function(mid){var url=_14b.toUrl(mid+\".js\");if(_157[url]){_17f.push(_157[url]);}else{try{var _180=_14b(mid);if(_180){_17f.push(_180);return;}}catch(e){}xhr.get({url:url,sync:true,load:function(text){var _181=_179(text,_178);_17f.push(_157[url]=_17a(url,_181[0],_181[1]));},error:function(){_17f.push(_157[url]={});}});}});_17e&&_17e.apply(null,_17f);},_182=_14e.normalizeLocale=function(_183){var _184=_183?_183.toLowerCase():dojo.locale;if(_184==\"root\"){_184=\"ROOT\";}return _184;},_185=function(_186,func){var _187=_186.split(\"-\");while(_187.length){if(func(_187.join(\"-\"))){return true;}_187.pop();}return func(\"ROOT\");};_169=function(_188){for(var _189=_188.split(\"/\"),_18a=dojo.global[_189[0]],i=1;_18a&&i<_189.length;_18a=_18a[_189[i++]]){}if(_18a){_157[_188]=_18a;}};_14e.getLocalization=function(_18b,_18c,_18d){var _18e,_18f=_158(_18b,_18c,_18d).substring(10);load(_18f,(1&&!_14b.isXdUrl(_14b.toUrl(_18f+\".js\"))?_17d:_14b),function(_190){_18e=_190;});return _18e;};_14e._preloadLocalizations=function(_191,_192){function _193(_194){_194=_182(_194);_185(_194,function(loc){for(var i=0;i<_192.length;i++){if(_192[i]==loc){_17d([_191.replace(/\\./g,\"/\")+\"_\"+loc]);return true;}}return false;});};_193();var _195=dojo.config.extraLocale||[];for(var i=0;i<_195.length;i++){_193(_195[i]);}};if(has(\"dojo-unit-tests\")){_177.push(function(doh){doh.register(\"tests.i18n.unit\",function(t){var _196;_196=_179(\"{prop:1}\",_178);t.is({prop:1},_196[0]);t.is(undefined,_196[1]);_196=_179(\"({prop:1})\",_178);t.is({prop:1},_196[0]);t.is(undefined,_196[1]);_196=_179(\"{'prop-x':1}\",_178);t.is({\"prop-x\":1},_196[0]);t.is(undefined,_196[1]);_196=_179(\"({'prop-x':1})\",_178);t.is({\"prop-x\":1},_196[0]);t.is(undefined,_196[1]);_196=_179(\"define({'prop-x':1})\",_178);t.is(0,_196[0]);t.is({\"prop-x\":1},_196[1]);_196=_179(\"define({'prop-x':1});\",_178);t.is(0,_196[0]);t.is({\"prop-x\":1},_196[1]);_196=_179(\"this is total nonsense and should throw an error\",_178);t.is(_178,_196[0]);t.is(undefined,_196[1]);t.is({},_17a(\"some/url\",_196[0],_196[1]));});});}}return lang.mixin(_14e,{dynamic:true,normalize:_165,load:load,cache:function(mid,_197){_157[mid]=_197;}});});},\"dojo/_base/html\":function(){define(\"dojo/_base/html\",[\"./kernel\",\"../dom\",\"../dom-style\",\"../dom-attr\",\"../dom-prop\",\"../dom-class\",\"../dom-construct\",\"../dom-geometry\"],function(dojo,dom,_198,attr,prop,cls,ctr,geom){dojo.byId=dom.byId;dojo.isDescendant=dom.isDescendant;dojo.setSelectable=dom.setSelectable;dojo.getAttr=attr.get;dojo.setAttr=attr.set;dojo.hasAttr=attr.has;dojo.removeAttr=attr.remove;dojo.getNodeProp=attr.getNodeProp;dojo.attr=function(node,name,_199){if(arguments.length==2){return attr[typeof name==\"string\"?\"get\":\"set\"](node,name);}return attr.set(node,name,_199);};dojo.hasClass=cls.contains;dojo.addClass=cls.add;dojo.removeClass=cls.remove;dojo.toggleClass=cls.toggle;dojo.replaceClass=cls.replace;dojo._toDom=dojo.toDom=ctr.toDom;dojo.place=ctr.place;dojo.create=ctr.create;dojo.empty=function(node){ctr.empty(node);};dojo._destroyElement=dojo.destroy=function(node){ctr.destroy(node);};dojo._getPadExtents=dojo.getPadExtents=geom.getPadExtents;dojo._getBorderExtents=dojo.getBorderExtents=geom.getBorderExtents;dojo._getPadBorderExtents=dojo.getPadBorderExtents=geom.getPadBorderExtents;dojo._getMarginExtents=dojo.getMarginExtents=geom.getMarginExtents;dojo._getMarginSize=dojo.getMarginSize=geom.getMarginSize;dojo._getMarginBox=dojo.getMarginBox=geom.getMarginBox;dojo.setMarginBox=geom.setMarginBox;dojo._getContentBox=dojo.getContentBox=geom.getContentBox;dojo.setContentSize=geom.setContentSize;dojo._isBodyLtr=dojo.isBodyLtr=geom.isBodyLtr;dojo._docScroll=dojo.docScroll=geom.docScroll;dojo._getIeDocumentElementOffset=dojo.getIeDocumentElementOffset=geom.getIeDocumentElementOffset;dojo._fixIeBiDiScrollLeft=dojo.fixIeBiDiScrollLeft=geom.fixIeBiDiScrollLeft;dojo.position=geom.position;dojo.marginBox=function marginBox(node,box){return box?geom.setMarginBox(node,box):geom.getMarginBox(node);};dojo.contentBox=function contentBox(node,box){return box?geom.setContentSize(node,box):geom.getContentBox(node);};dojo.coords=function(node,_19a){dojo.deprecated(\"dojo.coords()\",\"Use dojo.position() or dojo.marginBox().\");node=dom.byId(node);var s=_198.getComputedStyle(node),mb=geom.getMarginBox(node,s);var abs=geom.position(node,_19a);mb.x=abs.x;mb.y=abs.y;return mb;};dojo.getProp=prop.get;dojo.setProp=prop.set;dojo.prop=function(node,name,_19b){if(arguments.length==2){return prop[typeof name==\"string\"?\"get\":\"set\"](node,name);}return prop.set(node,name,_19b);};dojo.getStyle=_198.get;dojo.setStyle=_198.set;dojo.getComputedStyle=_198.getComputedStyle;dojo.__toPixelValue=dojo.toPixelValue=_198.toPixelValue;dojo.style=function(node,name,_19c){switch(arguments.length){case 1:return _198.get(node);case 2:return _198[typeof name==\"string\"?\"get\":\"set\"](node,name);}return _198.set(node,name,_19c);};return dojo;});},\"dojo/_base/kernel\":function(){define([\"../has\",\"./config\",\"require\",\"module\"],function(has,_19d,_19e,_19f){var i,p,_1a0={},_1a1={},dojo={config:_19d,global:this,dijit:_1a0,dojox:_1a1};var _1a2={dojo:[\"dojo\",dojo],dijit:[\"dijit\",_1a0],dojox:[\"dojox\",_1a1]},_1a3=(_19e.packs&&_19e.packs[_19f.id.match(/[^\\/]+/)[0]].packageMap)||{},item;for(p in _1a3){if(_1a2[p]){_1a2[p][0]=_1a3[p];}else{_1a2[p]=[_1a3[p],{}];}}for(p in _1a2){item=_1a2[p];item[1]._scopeName=item[0];if(!_19d.noGlobals){this[item[0]]=item[1];}}dojo.scopeMap=_1a2;dojo.baseUrl=dojo.config.baseUrl=_19e.baseUrl;dojo.isAsync=!1||_19e.async;dojo.locale=_19d.locale;var rev=\"$Rev: 27913 $\".match(/\\d+/);dojo.version={major:1,minor:7,patch:2,flag:\"\",revision:rev?+rev[0]:NaN,toString:function(){var v=dojo.version;return v.major+\".\"+v.minor+\".\"+v.patch+v.flag+\" (\"+v.revision+\")\";}};true||has.add(\"extend-dojo\",1);dojo.eval=function(_1a4){};(Function(\"d\",\"d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}\"))(dojo);if(0){dojo.exit=function(_1a5){quit(_1a5);};}else{dojo.exit=function(){};}true||has.add(\"dojo-guarantee-console\",1);if(1){typeof console!=\"undefined\"||(console={});var cn=[\"assert\",\"count\",\"debug\",\"dir\",\"dirxml\",\"error\",\"group\",\"groupEnd\",\"info\",\"profile\",\"profileEnd\",\"time\",\"timeEnd\",\"trace\",\"warn\",\"log\"];var tn;i=0;while((tn=cn[i++])){if(!console[tn]){(function(){var tcn=tn+\"\";console[tcn]=(\"log\" in console)?function(){var a=Array.apply({},arguments);a.unshift(tcn+\":\");console[\"log\"](a.join(\" \"));}:function(){};console[tcn]._fake=true;})();}}}has.add(\"dojo-debug-messages\",!!_19d.isDebug);if(has(\"dojo-debug-messages\")){dojo.deprecated=function(_1a6,_1a7,_1a8){var _1a9=\"DEPRECATED: \"+_1a6;if(_1a7){_1a9+=\" \"+_1a7;}if(_1a8){_1a9+=\" -- will be removed in version: \"+_1a8;}console.warn(_1a9);};dojo.experimental=function(_1aa,_1ab){var _1ac=\"EXPERIMENTAL: \"+_1aa+\" -- APIs subject to change without notice.\";if(_1ab){_1ac+=\" \"+_1ab;}console.warn(_1ac);};}else{dojo.deprecated=dojo.experimental=function(){};}true||has.add(\"dojo-modulePaths\",1);if(1){if(_19d.modulePaths){dojo.deprecated(\"dojo.modulePaths\",\"use paths configuration\");var _1ad={};for(p in _19d.modulePaths){_1ad[p.replace(/\\./g,\"/\")]=_19d.modulePaths[p];}_19e({paths:_1ad});}}true||has.add(\"dojo-moduleUrl\",1);if(1){dojo.moduleUrl=function(_1ae,url){dojo.deprecated(\"dojo.moduleUrl()\",\"use require.toUrl\",\"2.0\");var _1af=null;if(_1ae){_1af=_19e.toUrl(_1ae.replace(/\\./g,\"/\")+(url?(\"/\"+url):\"\")+\"/*.*\").replace(/\\/\\*\\.\\*/,\"\")+(url?\"\":\"/\");}return _1af;};}dojo._hasResource={};return dojo;});},\"dojo/io-query\":function(){define([\"./_base/lang\"],function(lang){var _1b0={};function _1b1(map){var enc=encodeURIComponent,_1b2=[];for(var name in map){var _1b3=map[name];if(_1b3!=_1b0[name]){var _1b4=enc(name)+\"=\";if(lang.isArray(_1b3)){for(var i=0,l=_1b3.length;i<l;++i){_1b2.push(_1b4+enc(_1b3[i]));}}else{_1b2.push(_1b4+enc(_1b3));}}}return _1b2.join(\"&\");};function _1b5(str){var dec=decodeURIComponent,qp=str.split(\"&\"),ret={},name,val;for(var i=0,l=qp.length,item;i<l;++i){item=qp[i];if(item.length){var s=item.indexOf(\"=\");if(s<0){name=dec(item);val=\"\";}else{name=dec(item.slice(0,s));val=dec(item.slice(s+1));}if(typeof ret[name]==\"string\"){ret[name]=[ret[name]];}if(lang.isArray(ret[name])){ret[name].push(val);}else{ret[name]=val;}}}return ret;};return {objectToQuery:_1b1,queryToObject:_1b5};});},\"dojo/_base/Deferred\":function(){define([\"./kernel\",\"./lang\"],function(dojo,lang){var _1b6=function(){};var _1b7=Object.freeze||function(){};dojo.Deferred=function(_1b8){var _1b9,_1ba,_1bb,head,_1bc;var _1bd=(this.promise={});function _1be(_1bf){if(_1ba){throw new Error(\"This deferred has already been resolved\");}_1b9=_1bf;_1ba=true;_1c0();};function _1c0(){var _1c1;while(!_1c1&&_1bc){var _1c2=_1bc;_1bc=_1bc.next;if((_1c1=(_1c2.progress==_1b6))){_1ba=false;}var func=(_1bb?_1c2.error:_1c2.resolved);if(func){try{var _1c3=func(_1b9);if(_1c3&&typeof _1c3.then===\"function\"){_1c3.then(lang.hitch(_1c2.deferred,\"resolve\"),lang.hitch(_1c2.deferred,\"reject\"),lang.hitch(_1c2.deferred,\"progress\"));continue;}var _1c4=_1c1&&_1c3===undefined;if(_1c1&&!_1c4){_1bb=_1c3 instanceof Error;}_1c2.deferred[_1c4&&_1bb?\"reject\":\"resolve\"](_1c4?_1b9:_1c3);}catch(e){_1c2.deferred.reject(e);}}else{if(_1bb){_1c2.deferred.reject(_1b9);}else{_1c2.deferred.resolve(_1b9);}}}};this.resolve=this.callback=function(_1c5){this.fired=0;this.results=[_1c5,null];_1be(_1c5);};this.reject=this.errback=function(_1c6){_1bb=true;this.fired=1;_1be(_1c6);this.results=[null,_1c6];if(!_1c6||_1c6.log!==false){(dojo.config.deferredOnError||function(x){console.error(x);})(_1c6);}};this.progress=function(_1c7){var _1c8=_1bc;while(_1c8){var _1c9=_1c8.progress;_1c9&&_1c9(_1c7);_1c8=_1c8.next;}};this.addCallbacks=function(_1ca,_1cb){this.then(_1ca,_1cb,_1b6);return this;};_1bd.then=this.then=function(_1cc,_1cd,_1ce){var _1cf=_1ce==_1b6?this:new dojo.Deferred(_1bd.cancel);var _1d0={resolved:_1cc,error:_1cd,progress:_1ce,deferred:_1cf};if(_1bc){head=head.next=_1d0;}else{_1bc=head=_1d0;}if(_1ba){_1c0();}return _1cf.promise;};var _1d1=this;_1bd.cancel=this.cancel=function(){if(!_1ba){var _1d2=_1b8&&_1b8(_1d1);if(!_1ba){if(!(_1d2 instanceof Error)){_1d2=new Error(_1d2);}_1d2.log=false;_1d1.reject(_1d2);}}};_1b7(_1bd);};lang.extend(dojo.Deferred,{addCallback:function(_1d3){return this.addCallbacks(lang.hitch.apply(dojo,arguments));},addErrback:function(_1d4){return this.addCallbacks(null,lang.hitch.apply(dojo,arguments));},addBoth:function(_1d5){var _1d6=lang.hitch.apply(dojo,arguments);return this.addCallbacks(_1d6,_1d6);},fired:-1});dojo.Deferred.when=dojo.when=function(_1d7,_1d8,_1d9,_1da){if(_1d7&&typeof _1d7.then===\"function\"){return _1d7.then(_1d8,_1d9,_1da);}return _1d8?_1d8(_1d7):_1d7;};return dojo.Deferred;});},\"dojo/NodeList-dom\":function(){define([\"./_base/kernel\",\"./query\",\"./_base/array\",\"./_base/lang\",\"./dom-class\",\"./dom-construct\",\"./dom-geometry\",\"./dom-attr\",\"./dom-style\"],function(dojo,_1db,_1dc,lang,_1dd,_1de,_1df,_1e0,_1e1){var _1e2=function(a){return a.length==1&&(typeof a[0]==\"string\");};var _1e3=function(node){var p=node.parentNode;if(p){p.removeChild(node);}};var _1e4=_1db.NodeList,awc=_1e4._adaptWithCondition,aafe=_1e4._adaptAsForEach,aam=_1e4._adaptAsMap;function _1e5(_1e6){return function(node,name,_1e7){if(arguments.length==2){return _1e6[typeof name==\"string\"?\"get\":\"set\"](node,name);}return _1e6.set(node,name,_1e7);};};lang.extend(_1e4,{_normalize:function(_1e8,_1e9){var _1ea=_1e8.parse===true;if(typeof _1e8.template==\"string\"){var _1eb=_1e8.templateFunc||(dojo.string&&dojo.string.substitute);_1e8=_1eb?_1eb(_1e8.template,_1e8):_1e8;}var type=(typeof _1e8);if(type==\"string\"||type==\"number\"){_1e8=_1de.toDom(_1e8,(_1e9&&_1e9.ownerDocument));if(_1e8.nodeType==11){_1e8=lang._toArray(_1e8.childNodes);}else{_1e8=[_1e8];}}else{if(!lang.isArrayLike(_1e8)){_1e8=[_1e8];}else{if(!lang.isArray(_1e8)){_1e8=lang._toArray(_1e8);}}}if(_1ea){_1e8._runParse=true;}return _1e8;},_cloneNode:function(node){return node.cloneNode(true);},_place:function(ary,_1ec,_1ed,_1ee){if(_1ec.nodeType!=1&&_1ed==\"only\"){return;}var _1ef=_1ec,_1f0;var _1f1=ary.length;for(var i=_1f1-1;i>=0;i--){var node=(_1ee?this._cloneNode(ary[i]):ary[i]);if(ary._runParse&&dojo.parser&&dojo.parser.parse){if(!_1f0){_1f0=_1ef.ownerDocument.createElement(\"div\");}_1f0.appendChild(node);dojo.parser.parse(_1f0);node=_1f0.firstChild;while(_1f0.firstChild){_1f0.removeChild(_1f0.firstChild);}}if(i==_1f1-1){_1de.place(node,_1ef,_1ed);}else{_1ef.parentNode.insertBefore(node,_1ef);}_1ef=node;}},attr:awc(_1e5(_1e0),_1e2),style:awc(_1e5(_1e1),_1e2),addClass:aafe(_1dd.add),removeClass:aafe(_1dd.remove),replaceClass:aafe(_1dd.replace),toggleClass:aafe(_1dd.toggle),empty:aafe(_1de.empty),removeAttr:aafe(_1e0.remove),position:aam(_1df.position),marginBox:aam(_1df.getMarginBox),place:function(_1f2,_1f3){var item=_1db(_1f2)[0];return this.forEach(function(node){_1de.place(node,item,_1f3);});},orphan:function(_1f4){return (_1f4?_1db._filterResult(this,_1f4):this).forEach(_1e3);},adopt:function(_1f5,_1f6){return _1db(_1f5).place(this[0],_1f6)._stash(this);},query:function(_1f7){if(!_1f7){return this;}var ret=new _1e4;this.map(function(node){_1db(_1f7,node).forEach(function(_1f8){if(_1f8!==undefined){ret.push(_1f8);}});});return ret._stash(this);},filter:function(_1f9){var a=arguments,_1fa=this,_1fb=0;if(typeof _1f9==\"string\"){_1fa=_1db._filterResult(this,a[0]);if(a.length==1){return _1fa._stash(this);}_1fb=1;}return this._wrap(_1dc.filter(_1fa,a[_1fb],a[_1fb+1]),this);},addContent:function(_1fc,_1fd){_1fc=this._normalize(_1fc,this[0]);for(var i=0,node;(node=this[i]);i++){this._place(_1fc,node,_1fd,i>0);}return this;}});return _1e4;});},\"dojo/query\":function(){define([\"./_base/kernel\",\"./has\",\"./dom\",\"./on\",\"./_base/array\",\"./_base/lang\",\"./selector/_loader\",\"./selector/_loader!default\"],function(dojo,has,dom,on,_1fe,lang,_1ff,_200){\"use strict\";has.add(\"array-extensible\",function(){return lang.delegate([],{length:1}).length==1&&!has(\"bug-for-in-skips-shadowed\");});var ap=Array.prototype,aps=ap.slice,apc=ap.concat,_201=_1fe.forEach;var tnl=function(a,_202,_203){var _204=new (_203||this._NodeListCtor||nl)(a);return _202?_204._stash(_202):_204;};var _205=function(f,a,o){a=[0].concat(aps.call(a,0));o=o||dojo.global;return function(node){a[0]=node;return f.apply(o,a);};};var _206=function(f,o){return function(){this.forEach(_205(f,arguments,o));return this;};};var _207=function(f,o){return function(){return this.map(_205(f,arguments,o));};};var _208=function(f,o){return function(){return this.filter(_205(f,arguments,o));};};var _209=function(f,g,o){return function(){var a=arguments,body=_205(f,a,o);if(g.call(o||dojo.global,a)){return this.map(body);}this.forEach(body);return this;};};var _20a=function(_20b){var _20c=this instanceof nl&&has(\"array-extensible\");if(typeof _20b==\"number\"){_20b=Array(_20b);}var _20d=(_20b&&\"length\" in _20b)?_20b:arguments;if(_20c||!_20d.sort){var _20e=_20c?this:[],l=_20e.length=_20d.length;for(var i=0;i<l;i++){_20e[i]=_20d[i];}if(_20c){return _20e;}_20d=_20e;}lang._mixin(_20d,nlp);_20d._NodeListCtor=function(_20f){return nl(_20f);};return _20d;};var nl=_20a,nlp=nl.prototype=has(\"array-extensible\")?[]:{};nl._wrap=nlp._wrap=tnl;nl._adaptAsMap=_207;nl._adaptAsForEach=_206;nl._adaptAsFilter=_208;nl._adaptWithCondition=_209;_201([\"slice\",\"splice\"],function(name){var f=ap[name];nlp[name]=function(){return this._wrap(f.apply(this,arguments),name==\"slice\"?this:null);};});_201([\"indexOf\",\"lastIndexOf\",\"every\",\"some\"],function(name){var f=_1fe[name];nlp[name]=function(){return f.apply(dojo,[this].concat(aps.call(arguments,0)));};});lang.extend(_20a,{constructor:nl,_NodeListCtor:nl,toString:function(){return this.join(\",\");},_stash:function(_210){this._parent=_210;return this;},on:function(_211,_212){var _213=this.map(function(node){return on(node,_211,_212);});_213.remove=function(){for(var i=0;i<_213.length;i++){_213[i].remove();}};return _213;},end:function(){if(this._parent){return this._parent;}else{return new this._NodeListCtor(0);}},concat:function(item){var t=lang.isArray(this)?this:aps.call(this,0),m=_1fe.map(arguments,function(a){return a&&!lang.isArray(a)&&(typeof _20a!=\"undefined\"&&a.constructor===_20a||a.constructor===this._NodeListCtor)?aps.call(a,0):a;});return this._wrap(apc.apply(t,m),this);},map:function(func,obj){return this._wrap(_1fe.map(this,func,obj),this);},forEach:function(_214,_215){_201(this,_214,_215);return this;},filter:function(_216){var a=arguments,_217=this,_218=0;if(typeof _216==\"string\"){_217=_219._filterResult(this,a[0]);if(a.length==1){return _217._stash(this);}_218=1;}return this._wrap(_1fe.filter(_217,a[_218],a[_218+1]),this);},instantiate:function(_21a,_21b){var c=lang.isFunction(_21a)?_21a:lang.getObject(_21a);_21b=_21b||{};return this.forEach(function(node){new c(_21b,node);});},at:function(){var t=new this._NodeListCtor(0);_201(arguments,function(i){if(i<0){i=this.length+i;}if(this[i]){t.push(this[i]);}},this);return t._stash(this);}});function _21c(_21d,_21e){var _21f=function(_220,root){if(typeof root==\"string\"){root=dom.byId(root);if(!root){return new _21e([]);}}var _221=typeof _220==\"string\"?_21d(_220,root):_220.orphan?_220:[_220];if(_221.orphan){return _221;}return new _21e(_221);};_21f.matches=_21d.match||function(node,_222,root){return _21f.filter([node],_222,root).length>0;};_21f.filter=_21d.filter||function(_223,_224,root){return _21f(_224,root).filter(function(node){return _1fe.indexOf(_223,node)>-1;});};if(typeof _21d!=\"function\"){var _225=_21d.search;_21d=function(_226,root){return _225(root||document,_226);};}return _21f;};var _219=_21c(_200,_20a);dojo.query=_21c(_200,function(_227){return _20a(_227);});_219.load=function(id,_228,_229,_22a){_1ff.load(id,_228,function(_22b){_229(_21c(_22b,_20a));});};dojo._filterQueryResult=_219._filterResult=function(_22c,_22d,root){return new _20a(_219.filter(_22c,_22d,root));};dojo.NodeList=_219.NodeList=_20a;return _219;});},\"dojo/has\":function(){define([\"require\"],function(_22e){var has=_22e.has||function(){};if(!1){var _22f=typeof window!=\"undefined\"&&typeof location!=\"undefined\"&&typeof document!=\"undefined\"&&window.location==location&&window.document==document,_230=this,doc=_22f&&document,_231=doc&&doc.createElement(\"DiV\"),_232={};has=function(name){return typeof _232[name]==\"function\"?(_232[name]=_232[name](_230,doc,_231)):_232[name];};has.cache=_232;has.add=function(name,test,now,_233){(typeof _232[name]==\"undefined\"||_233)&&(_232[name]=test);return now&&has(name);};true||has.add(\"host-browser\",_22f);true||has.add(\"dom\",_22f);true||has.add(\"dojo-dom-ready-api\",1);true||has.add(\"dojo-sniff\",1);}if(1){var _234=navigator.userAgent;has.add(\"dom-addeventlistener\",!!document.addEventListener);has.add(\"touch\",\"ontouchstart\" in document);has.add(\"device-width\",screen.availWidth||innerWidth);has.add(\"agent-ios\",!!_234.match(/iPhone|iP[ao]d/));has.add(\"agent-android\",_234.indexOf(\"android\")>1);}has.clearElement=function(_235){_235.innerHTML=\"\";return _235;};has.normalize=function(id,_236){var _237=id.match(/[\\?:]|[^:\\?]*/g),i=0,get=function(skip){var term=_237[i++];if(term==\":\"){return 0;}else{if(_237[i++]==\"?\"){if(!skip&&has(term)){return get();}else{get(true);return get(skip);}}return term||0;}};id=get();return id&&_236(id);};has.load=function(id,_238,_239){if(id){_238([id],_239);}else{_239();}};return has;});},\"dojo/_base/loader\":function(){define([\"./kernel\",\"../has\",\"require\",\"module\",\"./json\",\"./lang\",\"./array\"],function(dojo,has,_23a,_23b,json,lang,_23c){if(!1){console.error(\"cannot load the Dojo v1.x loader with a foreign loader\");return 0;}var _23d=function(id){return {src:_23b.id,id:id};},_23e=function(name){return name.replace(/\\./g,\"/\");},_23f=/\\/\\/>>built/,_240=[],_241=[],_242=function(mid,_243,_244){_240.push(_244);_23c.forEach(mid.split(\",\"),function(mid){var _245=_246(mid,_243.module);_241.push(_245);_247(_245);});_248();},_249,_24a=function(m){if(_249[m.mid]||/loadInit\\!/.test(m.mid)){return true;}_249[m.mid]=1;if(m.injected!==_24b&&!m.executed){return false;}for(var deps=m.deps||[],i=0;i<deps.length;i++){if(!_24a(deps[i])){return false;}}return true;},_248=function(){_249={};_241=_23c.filter(_241,function(_24c){return !_24a(_24c);});if(!_241.length){_24e.holdIdle();var _24d=_240;_240=[];_23c.forEach(_24d,function(cb){cb(1);});_24e.releaseIdle();}},_24f=function(mid,_250,_251){_250([mid],function(_252){_250(_252.names,function(){for(var _253=\"\",args=[],i=0;i<arguments.length;i++){_253+=\"var \"+_252.names[i]+\"= arguments[\"+i+\"]; \";args.push(arguments[i]);}eval(_253);var _254=_250.module,deps=[],hold={},_255=[],p,_256={provide:function(_257){_257=_23e(_257);var _258=_246(_257,_254);if(_258!==_254){_27d(_258);}},require:function(_259,_25a){_259=_23e(_259);_25a&&(_246(_259,_254).result=_277);_255.push(_259);},requireLocalization:function(_25b,_25c,_25d){deps.length||(deps=[\"dojo/i18n\"]);_25d=(_25d||dojo.locale).toLowerCase();_25b=_23e(_25b)+\"/nls/\"+(/root/i.test(_25d)?\"\":_25d+\"/\")+_23e(_25c);if(_246(_25b,_254).isXd){deps.push(\"dojo/i18n!\"+_25b);}},loadInit:function(f){f();}};try{for(p in _256){hold[p]=dojo[p];dojo[p]=_256[p];}_252.def.apply(null,args);}catch(e){_27e(\"error\",[_23d(\"failedDojoLoadInit\"),e]);}finally{for(p in _256){dojo[p]=hold[p];}}_255.length&&deps.push(\"dojo/require!\"+_255.join(\",\"));_240.push(_251);_23c.forEach(_255,function(mid){var _25e=_246(mid,_250.module);_241.push(_25e);_247(_25e);});_248();});});},_25f=function(text,_260,_261){var _262=/\\(|\\)/g,_263=1,_264;_262.lastIndex=_260;while((_264=_262.exec(text))){if(_264[0]==\")\"){_263-=1;}else{_263+=1;}if(_263==0){break;}}if(_263!=0){throw \"unmatched paren around character \"+_262.lastIndex+\" in: \"+text;}return [dojo.trim(text.substring(_261,_262.lastIndex))+\";\\n\",_262.lastIndex];},_265=/(\\/\\*([\\s\\S]*?)\\*\\/|\\/\\/(.*)$)/mg,_266=/(^|\\s)dojo\\.(loadInit|require|provide|requireLocalization|requireIf|requireAfterIf|platformRequire)\\s*\\(/mg,_267=/(^|\\s)(require|define)\\s*\\(/m,_268=function(text,_269){var _26a,_26b,_26c,_26d,_26e=[],_26f=[],_270=[];_269=_269||text.replace(_265,function(_271){_266.lastIndex=_267.lastIndex=0;return (_266.test(_271)||_267.test(_271))?\"\":_271;});while((_26a=_266.exec(_269))){_26b=_266.lastIndex;_26c=_26b-_26a[0].length;_26d=_25f(_269,_26b,_26c);if(_26a[2]==\"loadInit\"){_26e.push(_26d[0]);}else{_26f.push(_26d[0]);}_266.lastIndex=_26d[1];}_270=_26e.concat(_26f);if(_270.length||!_267.test(_269)){return [text.replace(/(^|\\s)dojo\\.loadInit\\s*\\(/g,\"\\n0 && dojo.loadInit(\"),_270.join(\"\"),_270];}else{return 0;}},_272=function(_273,text){var _274,id,_275=[],_276=[];if(_23f.test(text)||!(_274=_268(text))){return 0;}id=_273.mid+\"-*loadInit\";for(var p in _246(\"dojo\",_273).result.scopeMap){_275.push(p);_276.push(\"\\\"\"+p+\"\\\"\");}return \"// xdomain rewrite of \"+_273.path+\"\\n\"+\"define('\"+id+\"',{\\n\"+\"\\tnames:\"+dojo.toJson(_275)+\",\\n\"+\"\\tdef:function(\"+_275.join(\",\")+\"){\"+_274[1]+\"}\"+\"});\\n\\n\"+\"define(\"+dojo.toJson(_275.concat([\"dojo/loadInit!\"+id]))+\", function(\"+_275.join(\",\")+\"){\\n\"+_274[0]+\"});\";},_24e=_23a.initSyncLoader(_242,_248,_272),sync=_24e.sync,xd=_24e.xd,_24b=_24e.arrived,_277=_24e.nonmodule,_278=_24e.executing,_279=_24e.executed,_27a=_24e.syncExecStack,_27b=_24e.modules,_27c=_24e.execQ,_246=_24e.getModule,_247=_24e.injectModule,_27d=_24e.setArrived,_27e=_24e.signal,_27f=_24e.finishExec,_280=_24e.execModule,_281=_24e.getLegacyMode;dojo.provide=function(mid){var _282=_27a[0],_283=lang.mixin(_246(_23e(mid),_23a.module),{executed:_278,result:lang.getObject(mid,true)});_27d(_283);if(_282){(_282.provides||(_282.provides=[])).push(function(){_283.result=lang.getObject(mid);delete _283.provides;_283.executed!==_279&&_27f(_283);});}return _283.result;};has.add(\"config-publishRequireResult\",1,0,0);dojo.require=function(_284,_285){function _286(mid,_287){var _288=_246(_23e(mid),_23a.module);if(_27a.length&&_27a[0].finish){_27a[0].finish.push(mid);return undefined;}if(_288.executed){return _288.result;}_287&&(_288.result=_277);var _289=_281();_247(_288);_289=_281();if(_288.executed!==_279&&_288.injected===_24b){_24e.holdIdle();_280(_288);_24e.releaseIdle();}if(_288.executed){return _288.result;}if(_289==sync){if(_288.cjs){_27c.unshift(_288);}else{_27a.length&&(_27a[0].finish=[mid]);}}else{_27c.push(_288);}return undefined;};var _28a=_286(_284,_285);if(has(\"config-publishRequireResult\")&&!lang.exists(_284)&&_28a!==undefined){lang.setObject(_284,_28a);}return _28a;};dojo.loadInit=function(f){f();};dojo.registerModulePath=function(_28b,_28c){var _28d={};_28d[_28b.replace(/\\./g,\"/\")]=_28c;_23a({paths:_28d});};dojo.platformRequire=function(_28e){var _28f=(_28e.common||[]).concat(_28e[dojo._name]||_28e[\"default\"]||[]),temp;while(_28f.length){if(lang.isArray(temp=_28f.shift())){dojo.require.apply(dojo,temp);}else{dojo.require(temp);}}};dojo.requireIf=dojo.requireAfterIf=function(_290,_291,_292){if(_290){dojo.require(_291,_292);}};dojo.requireLocalization=function(_293,_294,_295){_23a([\"../i18n\"],function(i18n){i18n.getLocalization(_293,_294,_295);});};return {extractLegacyApiApplications:_268,require:_24e.dojoRequirePlugin,loadInit:_24f};});},\"dojo/json\":function(){define([\"./has\"],function(has){\"use strict\";var _296=typeof JSON!=\"undefined\";has.add(\"json-parse\",_296);has.add(\"json-stringify\",_296&&JSON.stringify({a:0},function(k,v){return v||1;})==\"{\\\"a\\\":1}\");if(has(\"json-stringify\")){return JSON;}else{var _297=function(str){return (\"\\\"\"+str.replace(/([\"\\\\])/g,\"\\\\$1\")+\"\\\"\").replace(/[\\f]/g,\"\\\\f\").replace(/[\\b]/g,\"\\\\b\").replace(/[\\n]/g,\"\\\\n\").replace(/[\\t]/g,\"\\\\t\").replace(/[\\r]/g,\"\\\\r\");};return {parse:has(\"json-parse\")?JSON.parse:function(str,_298){if(_298&&!/^([\\s\\[\\{]*(?:\"(?:\\\\.|[^\"])+\"|-?\\d[\\d\\.]*(?:[Ee][+-]?\\d+)?|null|true|false|)[\\s\\]\\}]*(?:,|:|$))+$/.test(str)){throw new SyntaxError(\"Invalid characters in JSON\");}return eval(\"(\"+str+\")\");},stringify:function(_299,_29a,_29b){var _29c;if(typeof _29a==\"string\"){_29b=_29a;_29a=null;}function _29d(it,_29e,key){if(_29a){it=_29a(key,it);}var val,_29f=typeof it;if(_29f==\"number\"){return isFinite(it)?it+\"\":\"null\";}if(_29f==\"boolean\"){return it+\"\";}if(it===null){return \"null\";}if(typeof it==\"string\"){return _297(it);}if(_29f==\"function\"||_29f==\"undefined\"){return _29c;}if(typeof it.toJSON==\"function\"){return _29d(it.toJSON(key),_29e,key);}if(it instanceof Date){return \"\\\"{FullYear}-{Month+}-{Date}T{Hours}:{Minutes}:{Seconds}Z\\\"\".replace(/\\{(\\w+)(\\+)?\\}/g,function(t,prop,plus){var num=it[\"getUTC\"+prop]()+(plus?1:0);return num<10?\"0\"+num:num;});}if(it.valueOf()!==it){return _29d(it.valueOf(),_29e,key);}var _2a0=_29b?(_29e+_29b):\"\";var sep=_29b?\" \":\"\";var _2a1=_29b?\"\\n\":\"\";if(it instanceof Array){var itl=it.length,res=[];for(key=0;key<itl;key++){var obj=it[key];val=_29d(obj,_2a0,key);if(typeof val!=\"string\"){val=\"null\";}res.push(_2a1+_2a0+val);}return \"[\"+res.join(\",\")+_2a1+_29e+\"]\";}var _2a2=[];for(key in it){var _2a3;if(typeof key==\"number\"){_2a3=\"\\\"\"+key+\"\\\"\";}else{if(typeof key==\"string\"){_2a3=_297(key);}else{continue;}}val=_29d(it[key],_2a0,key);if(typeof val!=\"string\"){continue;}_2a2.push(_2a1+_2a0+_2a3+\":\"+sep+val);}return \"{\"+_2a2.join(\",\")+_2a1+_29e+\"}\";};return _29d(_299,\"\",\"\");}};}});},\"dojo/_base/declare\":function(){define([\"./kernel\",\"../has\",\"./lang\"],function(dojo,has,lang){var mix=lang.mixin,op=Object.prototype,opts=op.toString,xtor=new Function,_2a4=0,_2a5=\"constructor\";function err(msg,cls){throw new Error(\"declare\"+(cls?\" \"+cls:\"\")+\": \"+msg);};function _2a6(_2a7,_2a8){var _2a9=[],_2aa=[{cls:0,refs:[]}],_2ab={},_2ac=1,l=_2a7.length,i=0,j,lin,base,top,_2ad,rec,name,refs;for(;i<l;++i){base=_2a7[i];if(!base){err(\"mixin #\"+i+\" is unknown. Did you use dojo.require to pull it in?\",_2a8);}else{if(opts.call(base)!=\"[object Function]\"){err(\"mixin #\"+i+\" is not a callable constructor.\",_2a8);}}lin=base._meta?base._meta.bases:[base];top=0;for(j=lin.length-1;j>=0;--j){_2ad=lin[j].prototype;if(!_2ad.hasOwnProperty(\"declaredClass\")){_2ad.declaredClass=\"uniqName_\"+(_2a4++);}name=_2ad.declaredClass;if(!_2ab.hasOwnProperty(name)){_2ab[name]={count:0,refs:[],cls:lin[j]};++_2ac;}rec=_2ab[name];if(top&&top!==rec){rec.refs.push(top);++top.count;}top=rec;}++top.count;_2aa[0].refs.push(top);}while(_2aa.length){top=_2aa.pop();_2a9.push(top.cls);--_2ac;while(refs=top.refs,refs.length==1){top=refs[0];if(!top||--top.count){top=0;break;}_2a9.push(top.cls);--_2ac;}if(top){for(i=0,l=refs.length;i<l;++i){top=refs[i];if(!--top.count){_2aa.push(top);}}}}if(_2ac){err(\"can't build consistent linearization\",_2a8);}base=_2a7[0];_2a9[0]=base?base._meta&&base===_2a9[_2a9.length-base._meta.bases.length]?base._meta.bases.length:1:0;return _2a9;};function _2ae(args,a,f){var name,_2af,_2b0,_2b1,meta,base,_2b2,opf,pos,_2b3=this._inherited=this._inherited||{};if(typeof args==\"string\"){name=args;args=a;a=f;}f=0;_2b1=args.callee;name=name||_2b1.nom;if(!name){err(\"can't deduce a name to call inherited()\",this.declaredClass);}meta=this.constructor._meta;_2b0=meta.bases;pos=_2b3.p;if(name!=_2a5){if(_2b3.c!==_2b1){pos=0;base=_2b0[0];meta=base._meta;if(meta.hidden[name]!==_2b1){_2af=meta.chains;if(_2af&&typeof _2af[name]==\"string\"){err(\"calling chained method with inherited: \"+name,this.declaredClass);}do{meta=base._meta;_2b2=base.prototype;if(meta&&(_2b2[name]===_2b1&&_2b2.hasOwnProperty(name)||meta.hidden[name]===_2b1)){break;}}while(base=_2b0[++pos]);pos=base?pos:-1;}}base=_2b0[++pos];if(base){_2b2=base.prototype;if(base._meta&&_2b2.hasOwnProperty(name)){f=_2b2[name];}else{opf=op[name];do{_2b2=base.prototype;f=_2b2[name];if(f&&(base._meta?_2b2.hasOwnProperty(name):f!==opf)){break;}}while(base=_2b0[++pos]);}}f=base&&f||op[name];}else{if(_2b3.c!==_2b1){pos=0;meta=_2b0[0]._meta;if(meta&&meta.ctor!==_2b1){_2af=meta.chains;if(!_2af||_2af.constructor!==\"manual\"){err(\"calling chained constructor with inherited\",this.declaredClass);}while(base=_2b0[++pos]){meta=base._meta;if(meta&&meta.ctor===_2b1){break;}}pos=base?pos:-1;}}while(base=_2b0[++pos]){meta=base._meta;f=meta?meta.ctor:base;if(f){break;}}f=base&&f;}_2b3.c=f;_2b3.p=pos;if(f){return a===true?f:f.apply(this,a||args);}};function _2b4(name,args){if(typeof name==\"string\"){return this.__inherited(name,args,true);}return this.__inherited(name,true);};function _2b5(args,a1,a2){var f=this.getInherited(args,a1);if(f){return f.apply(this,a2||a1||args);}};var _2b6=dojo.config.isDebug?_2b5:_2ae;function _2b7(cls){var _2b8=this.constructor._meta.bases;for(var i=0,l=_2b8.length;i<l;++i){if(_2b8[i]===cls){return true;}}return this instanceof cls;};function _2b9(_2ba,_2bb){for(var name in _2bb){if(name!=_2a5&&_2bb.hasOwnProperty(name)){_2ba[name]=_2bb[name];}}if(has(\"bug-for-in-skips-shadowed\")){for(var _2bc=lang._extraNames,i=_2bc.length;i;){name=_2bc[--i];if(name!=_2a5&&_2bb.hasOwnProperty(name)){_2ba[name]=_2bb[name];}}}};function _2bd(_2be,_2bf){var name,t;for(name in _2bf){t=_2bf[name];if((t!==op[name]||!(name in op))&&name!=_2a5){if(opts.call(t)==\"[object Function]\"){t.nom=name;}_2be[name]=t;}}if(has(\"bug-for-in-skips-shadowed\")){for(var _2c0=lang._extraNames,i=_2c0.length;i;){name=_2c0[--i];t=_2bf[name];if((t!==op[name]||!(name in op))&&name!=_2a5){if(opts.call(t)==\"[object Function]\"){t.nom=name;}_2be[name]=t;}}}return _2be;};function _2c1(_2c2){_2c3.safeMixin(this.prototype,_2c2);return this;};function _2c4(_2c5,_2c6){return function(){var a=arguments,args=a,a0=a[0],f,i,m,l=_2c5.length,_2c7;if(!(this instanceof a.callee)){return _2c8(a);}if(_2c6&&(a0&&a0.preamble||this.preamble)){_2c7=new Array(_2c5.length);_2c7[0]=a;for(i=0;;){a0=a[0];if(a0){f=a0.preamble;if(f){a=f.apply(this,a)||a;}}f=_2c5[i].prototype;f=f.hasOwnProperty(\"preamble\")&&f.preamble;if(f){a=f.apply(this,a)||a;}if(++i==l){break;}_2c7[i]=a;}}for(i=l-1;i>=0;--i){f=_2c5[i];m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,_2c7?_2c7[i]:a);}}f=this.postscript;if(f){f.apply(this,args);}};};function _2c9(ctor,_2ca){return function(){var a=arguments,t=a,a0=a[0],f;if(!(this instanceof a.callee)){return _2c8(a);}if(_2ca){if(a0){f=a0.preamble;if(f){t=f.apply(this,t)||t;}}f=this.preamble;if(f){f.apply(this,t);}}if(ctor){ctor.apply(this,a);}f=this.postscript;if(f){f.apply(this,a);}};};function _2cb(_2cc){return function(){var a=arguments,i=0,f,m;if(!(this instanceof a.callee)){return _2c8(a);}for(;f=_2cc[i];++i){m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,a);break;}}f=this.postscript;if(f){f.apply(this,a);}};};function _2cd(name,_2ce,_2cf){return function(){var b,m,f,i=0,step=1;if(_2cf){i=_2ce.length-1;step=-1;}for(;b=_2ce[i];i+=step){m=b._meta;f=(m?m.hidden:b.prototype)[name];if(f){f.apply(this,arguments);}}};};function _2d0(ctor){xtor.prototype=ctor.prototype;var t=new xtor;xtor.prototype=null;return t;};function _2c8(args){var ctor=args.callee,t=_2d0(ctor);ctor.apply(t,args);return t;};function _2c3(_2d1,_2d2,_2d3){if(typeof _2d1!=\"string\"){_2d3=_2d2;_2d2=_2d1;_2d1=\"\";}_2d3=_2d3||{};var _2d4,i,t,ctor,name,_2d5,_2d6,_2d7=1,_2d8=_2d2;if(opts.call(_2d2)==\"[object Array]\"){_2d5=_2a6(_2d2,_2d1);t=_2d5[0];_2d7=_2d5.length-t;_2d2=_2d5[_2d7];}else{_2d5=[0];if(_2d2){if(opts.call(_2d2)==\"[object Function]\"){t=_2d2._meta;_2d5=_2d5.concat(t?t.bases:_2d2);}else{err(\"base class is not a callable constructor.\",_2d1);}}else{if(_2d2!==null){err(\"unknown base class. Did you use dojo.require to pull it in?\",_2d1);}}}if(_2d2){for(i=_2d7-1;;--i){_2d4=_2d0(_2d2);if(!i){break;}t=_2d5[i];(t._meta?_2b9:mix)(_2d4,t.prototype);ctor=new Function;ctor.superclass=_2d2;ctor.prototype=_2d4;_2d2=_2d4.constructor=ctor;}}else{_2d4={};}_2c3.safeMixin(_2d4,_2d3);t=_2d3.constructor;if(t!==op.constructor){t.nom=_2a5;_2d4.constructor=t;}for(i=_2d7-1;i;--i){t=_2d5[i]._meta;if(t&&t.chains){_2d6=mix(_2d6||{},t.chains);}}if(_2d4[\"-chains-\"]){_2d6=mix(_2d6||{},_2d4[\"-chains-\"]);}t=!_2d6||!_2d6.hasOwnProperty(_2a5);_2d5[0]=ctor=(_2d6&&_2d6.constructor===\"manual\")?_2cb(_2d5):(_2d5.length==1?_2c9(_2d3.constructor,t):_2c4(_2d5,t));ctor._meta={bases:_2d5,hidden:_2d3,chains:_2d6,parents:_2d8,ctor:_2d3.constructor};ctor.superclass=_2d2&&_2d2.prototype;ctor.extend=_2c1;ctor.prototype=_2d4;_2d4.constructor=ctor;_2d4.getInherited=_2b4;_2d4.isInstanceOf=_2b7;_2d4.inherited=_2b6;_2d4.__inherited=_2ae;if(_2d1){_2d4.declaredClass=_2d1;lang.setObject(_2d1,ctor);}if(_2d6){for(name in _2d6){if(_2d4[name]&&typeof _2d6[name]==\"string\"&&name!=_2a5){t=_2d4[name]=_2cd(name,_2d5,_2d6[name]===\"after\");t.nom=name;}}}return ctor;};dojo.safeMixin=_2c3.safeMixin=_2bd;dojo.declare=_2c3;return _2c3;});},\"dojo/dom\":function(){define([\"./_base/sniff\",\"./_base/lang\",\"./_base/window\"],function(has,lang,win){try{document.execCommand(\"BackgroundImageCache\",false,true);}catch(e){}var dom={};if(has(\"ie\")){dom.byId=function(id,doc){if(typeof id!=\"string\"){return id;}var _2d9=doc||win.doc,te=id&&_2d9.getElementById(id);if(te&&(te.attributes.id.value==id||te.id==id)){return te;}else{var eles=_2d9.all[id];if(!eles||eles.nodeName){eles=[eles];}var i=0;while((te=eles[i++])){if((te.attributes&&te.attributes.id&&te.attributes.id.value==id)||te.id==id){return te;}}}};}else{dom.byId=function(id,doc){return ((typeof id==\"string\")?(doc||win.doc).getElementById(id):id)||null;};}dom.isDescendant=function(node,_2da){try{node=dom.byId(node);_2da=dom.byId(_2da);while(node){if(node==_2da){return true;}node=node.parentNode;}}catch(e){}return false;};dom.setSelectable=function(node,_2db){node=dom.byId(node);if(has(\"mozilla\")){node.style.MozUserSelect=_2db?\"\":\"none\";}else{if(has(\"khtml\")||has(\"webkit\")){node.style.KhtmlUserSelect=_2db?\"auto\":\"none\";}else{if(has(\"ie\")){var v=(node.unselectable=_2db?\"\":\"on\"),cs=node.getElementsByTagName(\"*\"),i=0,l=cs.length;for(;i<l;++i){cs.item(i).unselectable=v;}}}}};return dom;});},\"dojo/_base/browser\":function(){if(require.has){require.has.add(\"config-selectorEngine\",\"acme\");}define([\"../ready\",\"./kernel\",\"./connect\",\"./unload\",\"./window\",\"./event\",\"./html\",\"./NodeList\",\"../query\",\"./xhr\",\"./fx\"],function(dojo){return dojo;});},\"dojo/selector/acme\":function(){define([\"../_base/kernel\",\"../has\",\"../dom\",\"../_base/sniff\",\"../_base/array\",\"../_base/lang\",\"../_base/window\"],function(dojo,has,dom){var trim=dojo.trim;var each=dojo.forEach;var _2dc=function(){return dojo.doc;};var _2dd=((dojo.isWebKit||dojo.isMozilla)&&((_2dc().compatMode)==\"BackCompat\"));var _2de=\">~+\";var _2df=false;var _2e0=function(){return true;};var _2e1=function(_2e2){if(_2de.indexOf(_2e2.slice(-1))>=0){_2e2+=\" * \";}else{_2e2+=\" \";}var ts=function(s,e){return trim(_2e2.slice(s,e));};var _2e3=[];var _2e4=-1,_2e5=-1,_2e6=-1,_2e7=-1,_2e8=-1,inId=-1,_2e9=-1,lc=\"\",cc=\"\",_2ea;var x=0,ql=_2e2.length,_2eb=null,_2ec=null;var _2ed=function(){if(_2e9>=0){var tv=(_2e9==x)?null:ts(_2e9,x);_2eb[(_2de.indexOf(tv)<0)?\"tag\":\"oper\"]=tv;_2e9=-1;}};var _2ee=function(){if(inId>=0){_2eb.id=ts(inId,x).replace(/\\\\/g,\"\");inId=-1;}};var _2ef=function(){if(_2e8>=0){_2eb.classes.push(ts(_2e8+1,x).replace(/\\\\/g,\"\"));_2e8=-1;}};var _2f0=function(){_2ee();_2ed();_2ef();};var _2f1=function(){_2f0();if(_2e7>=0){_2eb.pseudos.push({name:ts(_2e7+1,x)});}_2eb.loops=(_2eb.pseudos.length||_2eb.attrs.length||_2eb.classes.length);_2eb.oquery=_2eb.query=ts(_2ea,x);_2eb.otag=_2eb.tag=(_2eb[\"oper\"])?null:(_2eb.tag||\"*\");if(_2eb.tag){_2eb.tag=_2eb.tag.toUpperCase();}if(_2e3.length&&(_2e3[_2e3.length-1].oper)){_2eb.infixOper=_2e3.pop();_2eb.query=_2eb.infixOper.query+\" \"+_2eb.query;}_2e3.push(_2eb);_2eb=null;};for(;lc=cc,cc=_2e2.charAt(x),x<ql;x++){if(lc==\"\\\\\"){continue;}if(!_2eb){_2ea=x;_2eb={query:null,pseudos:[],attrs:[],classes:[],tag:null,oper:null,id:null,getTag:function(){return (_2df)?this.otag:this.tag;}};_2e9=x;}if(_2e4>=0){if(cc==\"]\"){if(!_2ec.attr){_2ec.attr=ts(_2e4+1,x);}else{_2ec.matchFor=ts((_2e6||_2e4+1),x);}var cmf=_2ec.matchFor;if(cmf){if((cmf.charAt(0)==\"\\\"\")||(cmf.charAt(0)==\"'\")){_2ec.matchFor=cmf.slice(1,-1);}}_2eb.attrs.push(_2ec);_2ec=null;_2e4=_2e6=-1;}else{if(cc==\"=\"){var _2f2=(\"|~^$*\".indexOf(lc)>=0)?lc:\"\";_2ec.type=_2f2+cc;_2ec.attr=ts(_2e4+1,x-_2f2.length);_2e6=x+1;}}}else{if(_2e5>=0){if(cc==\")\"){if(_2e7>=0){_2ec.value=ts(_2e5+1,x);}_2e7=_2e5=-1;}}else{if(cc==\"#\"){_2f0();inId=x+1;}else{if(cc==\".\"){_2f0();_2e8=x;}else{if(cc==\":\"){_2f0();_2e7=x;}else{if(cc==\"[\"){_2f0();_2e4=x;_2ec={};}else{if(cc==\"(\"){if(_2e7>=0){_2ec={name:ts(_2e7+1,x),value:null};_2eb.pseudos.push(_2ec);}_2e5=x;}else{if((cc==\" \")&&(lc!=cc)){_2f1();}}}}}}}}}return _2e3;};var _2f3=function(_2f4,_2f5){if(!_2f4){return _2f5;}if(!_2f5){return _2f4;}return function(){return _2f4.apply(window,arguments)&&_2f5.apply(window,arguments);};};var _2f6=function(i,arr){var r=arr||[];if(i){r.push(i);}return r;};var _2f7=function(n){return (1==n.nodeType);};var _2f8=\"\";var _2f9=function(elem,attr){if(!elem){return _2f8;}if(attr==\"class\"){return elem.className||_2f8;}if(attr==\"for\"){return elem.htmlFor||_2f8;}if(attr==\"style\"){return elem.style.cssText||_2f8;}return (_2df?elem.getAttribute(attr):elem.getAttribute(attr,2))||_2f8;};var _2fa={\"*=\":function(attr,_2fb){return function(elem){return (_2f9(elem,attr).indexOf(_2fb)>=0);};},\"^=\":function(attr,_2fc){return function(elem){return (_2f9(elem,attr).indexOf(_2fc)==0);};},\"$=\":function(attr,_2fd){return function(elem){var ea=\" \"+_2f9(elem,attr);return (ea.lastIndexOf(_2fd)==(ea.length-_2fd.length));};},\"~=\":function(attr,_2fe){var tval=\" \"+_2fe+\" \";return function(elem){var ea=\" \"+_2f9(elem,attr)+\" \";return (ea.indexOf(tval)>=0);};},\"|=\":function(attr,_2ff){var _300=_2ff+\"-\";return function(elem){var ea=_2f9(elem,attr);return ((ea==_2ff)||(ea.indexOf(_300)==0));};},\"=\":function(attr,_301){return function(elem){return (_2f9(elem,attr)==_301);};}};var _302=(typeof _2dc().firstChild.nextElementSibling==\"undefined\");var _303=!_302?\"nextElementSibling\":\"nextSibling\";var _304=!_302?\"previousElementSibling\":\"previousSibling\";var _305=(_302?_2f7:_2e0);var _306=function(node){while(node=node[_304]){if(_305(node)){return false;}}return true;};var _307=function(node){while(node=node[_303]){if(_305(node)){return false;}}return true;};var _308=function(node){var root=node.parentNode;var i=0,tret=root.children||root.childNodes,ci=(node[\"_i\"]||-1),cl=(root[\"_l\"]||-1);if(!tret){return -1;}var l=tret.length;if(cl==l&&ci>=0&&cl>=0){return ci;}root[\"_l\"]=l;ci=-1;for(var te=root[\"firstElementChild\"]||root[\"firstChild\"];te;te=te[_303]){if(_305(te)){te[\"_i\"]=++i;if(node===te){ci=i;}}}return ci;};var _309=function(elem){return !((_308(elem))%2);};var _30a=function(elem){return ((_308(elem))%2);};var _30b={\"checked\":function(name,_30c){return function(elem){return !!(\"checked\" in elem?elem.checked:elem.selected);};},\"first-child\":function(){return _306;},\"last-child\":function(){return _307;},\"only-child\":function(name,_30d){return function(node){return _306(node)&&_307(node);};},\"empty\":function(name,_30e){return function(elem){var cn=elem.childNodes;var cnl=elem.childNodes.length;for(var x=cnl-1;x>=0;x--){var nt=cn[x].nodeType;if((nt===1)||(nt==3)){return false;}}return true;};},\"contains\":function(name,_30f){var cz=_30f.charAt(0);if(cz==\"\\\"\"||cz==\"'\"){_30f=_30f.slice(1,-1);}return function(elem){return (elem.innerHTML.indexOf(_30f)>=0);};},\"not\":function(name,_310){var p=_2e1(_310)[0];var _311={el:1};if(p.tag!=\"*\"){_311.tag=1;}if(!p.classes.length){_311.classes=1;}var ntf=_312(p,_311);return function(elem){return (!ntf(elem));};},\"nth-child\":function(name,_313){var pi=parseInt;if(_313==\"odd\"){return _30a;}else{if(_313==\"even\"){return _309;}}if(_313.indexOf(\"n\")!=-1){var _314=_313.split(\"n\",2);var pred=_314[0]?((_314[0]==\"-\")?-1:pi(_314[0])):1;var idx=_314[1]?pi(_314[1]):0;var lb=0,ub=-1;if(pred>0){if(idx<0){idx=(idx%pred)&&(pred+(idx%pred));}else{if(idx>0){if(idx>=pred){lb=idx-idx%pred;}idx=idx%pred;}}}else{if(pred<0){pred*=-1;if(idx>0){ub=idx;idx=idx%pred;}}}if(pred>0){return function(elem){var i=_308(elem);return (i>=lb)&&(ub<0||i<=ub)&&((i%pred)==idx);};}else{_313=idx;}}var _315=pi(_313);return function(elem){return (_308(elem)==_315);};}};var _316=(dojo.isIE&&(dojo.isIE<9||dojo.isQuirks))?function(cond){var clc=cond.toLowerCase();if(clc==\"class\"){cond=\"className\";}return function(elem){return (_2df?elem.getAttribute(cond):elem[cond]||elem[clc]);};}:function(cond){return function(elem){return (elem&&elem.getAttribute&&elem.hasAttribute(cond));};};var _312=function(_317,_318){if(!_317){return _2e0;}_318=_318||{};var ff=null;if(!(\"el\" in _318)){ff=_2f3(ff,_2f7);}if(!(\"tag\" in _318)){if(_317.tag!=\"*\"){ff=_2f3(ff,function(elem){return (elem&&(elem.tagName==_317.getTag()));});}}if(!(\"classes\" in _318)){each(_317.classes,function(_319,idx,arr){var re=new RegExp(\"(?:^|\\\\s)\"+_319+\"(?:\\\\s|$)\");ff=_2f3(ff,function(elem){return re.test(elem.className);});ff.count=idx;});}if(!(\"pseudos\" in _318)){each(_317.pseudos,function(_31a){var pn=_31a.name;if(_30b[pn]){ff=_2f3(ff,_30b[pn](pn,_31a.value));}});}if(!(\"attrs\" in _318)){each(_317.attrs,function(attr){var _31b;var a=attr.attr;if(attr.type&&_2fa[attr.type]){_31b=_2fa[attr.type](a,attr.matchFor);}else{if(a.length){_31b=_316(a);}}if(_31b){ff=_2f3(ff,_31b);}});}if(!(\"id\" in _318)){if(_317.id){ff=_2f3(ff,function(elem){return (!!elem&&(elem.id==_317.id));});}}if(!ff){if(!(\"default\" in _318)){ff=_2e0;}}return ff;};var _31c=function(_31d){return function(node,ret,bag){while(node=node[_303]){if(_302&&(!_2f7(node))){continue;}if((!bag||_31e(node,bag))&&_31d(node)){ret.push(node);}break;}return ret;};};var _31f=function(_320){return function(root,ret,bag){var te=root[_303];while(te){if(_305(te)){if(bag&&!_31e(te,bag)){break;}if(_320(te)){ret.push(te);}}te=te[_303];}return ret;};};var _321=function(_322){_322=_322||_2e0;return function(root,ret,bag){var te,x=0,tret=root.children||root.childNodes;while(te=tret[x++]){if(_305(te)&&(!bag||_31e(te,bag))&&(_322(te,x))){ret.push(te);}}return ret;};};var _323=function(node,root){var pn=node.parentNode;while(pn){if(pn==root){break;}pn=pn.parentNode;}return !!pn;};var _324={};var _325=function(_326){var _327=_324[_326.query];if(_327){return _327;}var io=_326.infixOper;var oper=(io?io.oper:\"\");var _328=_312(_326,{el:1});var qt=_326.tag;var _329=(\"*\"==qt);var ecs=_2dc()[\"getElementsByClassName\"];if(!oper){if(_326.id){_328=(!_326.loops&&_329)?_2e0:_312(_326,{el:1,id:1});_327=function(root,arr){var te=dom.byId(_326.id,(root.ownerDocument||root));if(!te||!_328(te)){return;}if(9==root.nodeType){return _2f6(te,arr);}else{if(_323(te,root)){return _2f6(te,arr);}}};}else{if(ecs&&/\\{\\s*\\[native code\\]\\s*\\}/.test(String(ecs))&&_326.classes.length&&!_2dd){_328=_312(_326,{el:1,classes:1,id:1});var _32a=_326.classes.join(\" \");_327=function(root,arr,bag){var ret=_2f6(0,arr),te,x=0;var tret=root.getElementsByClassName(_32a);while((te=tret[x++])){if(_328(te,root)&&_31e(te,bag)){ret.push(te);}}return ret;};}else{if(!_329&&!_326.loops){_327=function(root,arr,bag){var ret=_2f6(0,arr),te,x=0;var tret=root.getElementsByTagName(_326.getTag());while((te=tret[x++])){if(_31e(te,bag)){ret.push(te);}}return ret;};}else{_328=_312(_326,{el:1,tag:1,id:1});_327=function(root,arr,bag){var ret=_2f6(0,arr),te,x=0;var tret=root.getElementsByTagName(_326.getTag());while((te=tret[x++])){if(_328(te,root)&&_31e(te,bag)){ret.push(te);}}return ret;};}}}}else{var _32b={el:1};if(_329){_32b.tag=1;}_328=_312(_326,_32b);if(\"+\"==oper){_327=_31c(_328);}else{if(\"~\"==oper){_327=_31f(_328);}else{if(\">\"==oper){_327=_321(_328);}}}}return _324[_326.query]=_327;};var _32c=function(root,_32d){var _32e=_2f6(root),qp,x,te,qpl=_32d.length,bag,ret;for(var i=0;i<qpl;i++){ret=[];qp=_32d[i];x=_32e.length-1;if(x>0){bag={};ret.nozip=true;}var gef=_325(qp);for(var j=0;(te=_32e[j]);j++){gef(te,ret,bag);}if(!ret.length){break;}_32e=ret;}return ret;};var _32f={},_330={};var _331=function(_332){var _333=_2e1(trim(_332));if(_333.length==1){var tef=_325(_333[0]);return function(root){var r=tef(root,[]);if(r){r.nozip=true;}return r;};}return function(root){return _32c(root,_333);};};var nua=navigator.userAgent;var wk=\"WebKit/\";var _334=(dojo.isWebKit&&(nua.indexOf(wk)>0)&&(parseFloat(nua.split(wk)[1])>528));var _335=dojo.isIE?\"commentStrip\":\"nozip\";var qsa=\"querySelectorAll\";var _336=(!!_2dc()[qsa]&&(!dojo.isSafari||(dojo.isSafari>3.1)||_334));var _337=/n\\+\\d|([^ ])?([>~+])([^ =])?/g;var _338=function(_339,pre,ch,post){return ch?(pre?pre+\" \":\"\")+ch+(post?\" \"+post:\"\"):_339;};var _33a=function(_33b,_33c){_33b=_33b.replace(_337,_338);if(_336){var _33d=_330[_33b];if(_33d&&!_33c){return _33d;}}var _33e=_32f[_33b];if(_33e){return _33e;}var qcz=_33b.charAt(0);var _33f=(-1==_33b.indexOf(\" \"));if((_33b.indexOf(\"#\")>=0)&&(_33f)){_33c=true;}var _340=(_336&&(!_33c)&&(_2de.indexOf(qcz)==-1)&&(!dojo.isIE||(_33b.indexOf(\":\")==-1))&&(!(_2dd&&(_33b.indexOf(\".\")>=0)))&&(_33b.indexOf(\":contains\")==-1)&&(_33b.indexOf(\":checked\")==-1)&&(_33b.indexOf(\"|=\")==-1));if(_340){var tq=(_2de.indexOf(_33b.charAt(_33b.length-1))>=0)?(_33b+\" *\"):_33b;return _330[_33b]=function(root){try{if(!((9==root.nodeType)||_33f)){throw \"\";}var r=root[qsa](tq);r[_335]=true;return r;}catch(e){return _33a(_33b,true)(root);}};}else{var _341=_33b.split(/\\s*,\\s*/);return _32f[_33b]=((_341.length<2)?_331(_33b):function(root){var _342=0,ret=[],tp;while((tp=_341[_342++])){ret=ret.concat(_331(tp)(root));}return ret;});}};var _343=0;var _344=dojo.isIE?function(node){if(_2df){return (node.getAttribute(\"_uid\")||node.setAttribute(\"_uid\",++_343)||_343);}else{return node.uniqueID;}}:function(node){return (node._uid||(node._uid=++_343));};var _31e=function(node,bag){if(!bag){return 1;}var id=_344(node);if(!bag[id]){return bag[id]=1;}return 0;};var _345=\"_zipIdx\";var _346=function(arr){if(arr&&arr.nozip){return arr;}var ret=[];if(!arr||!arr.length){return ret;}if(arr[0]){ret.push(arr[0]);}if(arr.length<2){return ret;}_343++;if(dojo.isIE&&_2df){var _347=_343+\"\";arr[0].setAttribute(_345,_347);for(var x=1,te;te=arr[x];x++){if(arr[x].getAttribute(_345)!=_347){ret.push(te);}te.setAttribute(_345,_347);}}else{if(dojo.isIE&&arr.commentStrip){try{for(var x=1,te;te=arr[x];x++){if(_2f7(te)){ret.push(te);}}}catch(e){}}else{if(arr[0]){arr[0][_345]=_343;}for(var x=1,te;te=arr[x];x++){if(arr[x][_345]!=_343){ret.push(te);}te[_345]=_343;}}}return ret;};var _348=function(_349,root){root=root||_2dc();var od=root.ownerDocument||root.documentElement;_2df=(root.contentType&&root.contentType==\"application/xml\")||(dojo.isOpera&&(root.doctype||od.toString()==\"[object XMLDocument]\"))||(!!od)&&(dojo.isIE?od.xml:(root.xmlVersion||od.xmlVersion));var r=_33a(_349)(root);if(r&&r.nozip){return r;}return _346(r);};_348.filter=function(_34a,_34b,root){var _34c=[],_34d=_2e1(_34b),_34e=(_34d.length==1&&!/[^\\w#\\.]/.test(_34b))?_312(_34d[0]):function(node){return dojo.query(_34b,root).indexOf(node)!=-1;};for(var x=0,te;te=_34a[x];x++){if(_34e(te)){_34c.push(te);}}return _34c;};return _348;});},\"dojo/dom-style\":function(){define(\"dojo/dom-style\",[\"./_base/sniff\",\"./dom\"],function(has,dom){var _34f,_350={};if(has(\"webkit\")){_34f=function(node){var s;if(node.nodeType==1){var dv=node.ownerDocument.defaultView;s=dv.getComputedStyle(node,null);if(!s&&node.style){node.style.display=\"\";s=dv.getComputedStyle(node,null);}}return s||{};};}else{if(has(\"ie\")&&(has(\"ie\")<9||has(\"quirks\"))){_34f=function(node){return node.nodeType==1?node.currentStyle:{};};}else{_34f=function(node){return node.nodeType==1?node.ownerDocument.defaultView.getComputedStyle(node,null):{};};}}_350.getComputedStyle=_34f;var _351;if(!has(\"ie\")){_351=function(_352,_353){return parseFloat(_353)||0;};}else{_351=function(_354,_355){if(!_355){return 0;}if(_355==\"medium\"){return 4;}if(_355.slice&&_355.slice(-2)==\"px\"){return parseFloat(_355);}var s=_354.style,rs=_354.runtimeStyle,cs=_354.currentStyle,_356=s.left,_357=rs.left;rs.left=cs.left;try{s.left=_355;_355=s.pixelLeft;}catch(e){_355=0;}s.left=_356;rs.left=_357;return _355;};}_350.toPixelValue=_351;var astr=\"DXImageTransform.Microsoft.Alpha\";var af=function(n,f){try{return n.filters.item(astr);}catch(e){return f?{}:null;}};var _358=has(\"ie\")<9||(has(\"ie\")&&has(\"quirks\"))?function(node){try{return af(node).Opacity/100;}catch(e){return 1;}}:function(node){return _34f(node).opacity;};var _359=has(\"ie\")<9||(has(\"ie\")&&has(\"quirks\"))?function(node,_35a){var ov=_35a*100,_35b=_35a==1;node.style.zoom=_35b?\"\":1;if(!af(node)){if(_35b){return _35a;}node.style.filter+=\" progid:\"+astr+\"(Opacity=\"+ov+\")\";}else{af(node,1).Opacity=ov;}af(node,1).Enabled=!_35b;if(node.tagName.toLowerCase()==\"tr\"){for(var td=node.firstChild;td;td=td.nextSibling){if(td.tagName.toLowerCase()==\"td\"){_359(td,_35a);}}}return _35a;}:function(node,_35c){return node.style.opacity=_35c;};var _35d={left:true,top:true};var _35e=/margin|padding|width|height|max|min|offset/;function _35f(node,type,_360){type=type.toLowerCase();if(has(\"ie\")){if(_360==\"auto\"){if(type==\"height\"){return node.offsetHeight;}if(type==\"width\"){return node.offsetWidth;}}if(type==\"fontweight\"){switch(_360){case 700:return \"bold\";case 400:default:return \"normal\";}}}if(!(type in _35d)){_35d[type]=_35e.test(type);}return _35d[type]?_351(node,_360):_360;};var _361=has(\"ie\")?\"styleFloat\":\"cssFloat\",_362={\"cssFloat\":_361,\"styleFloat\":_361,\"float\":_361};_350.get=function getStyle(node,name){var n=dom.byId(node),l=arguments.length,op=(name==\"opacity\");if(l==2&&op){return _358(n);}name=_362[name]||name;var s=_350.getComputedStyle(n);return (l==1)?s:_35f(n,name,s[name]||n.style[name]);};_350.set=function setStyle(node,name,_363){var n=dom.byId(node),l=arguments.length,op=(name==\"opacity\");name=_362[name]||name;if(l==3){return op?_359(n,_363):n.style[name]=_363;}for(var x in name){_350.set(node,x,name[x]);}return _350.getComputedStyle(n);};return _350;});},\"dojo/dom-geometry\":function(){define([\"./_base/sniff\",\"./_base/window\",\"./dom\",\"./dom-style\"],function(has,win,dom,_364){var geom={};geom.boxModel=\"content-box\";if(has(\"ie\")){geom.boxModel=document.compatMode==\"BackCompat\"?\"border-box\":\"content-box\";}geom.getPadExtents=function getPadExtents(node,_365){node=dom.byId(node);var s=_365||_364.getComputedStyle(node),px=_364.toPixelValue,l=px(node,s.paddingLeft),t=px(node,s.paddingTop),r=px(node,s.paddingRight),b=px(node,s.paddingBottom);return {l:l,t:t,r:r,b:b,w:l+r,h:t+b};};var none=\"none\";geom.getBorderExtents=function getBorderExtents(node,_366){node=dom.byId(node);var px=_364.toPixelValue,s=_366||_364.getComputedStyle(node),l=s.borderLeftStyle!=none?px(node,s.borderLeftWidth):0,t=s.borderTopStyle!=none?px(node,s.borderTopWidth):0,r=s.borderRightStyle!=none?px(node,s.borderRightWidth):0,b=s.borderBottomStyle!=none?px(node,s.borderBottomWidth):0;return {l:l,t:t,r:r,b:b,w:l+r,h:t+b};};geom.getPadBorderExtents=function getPadBorderExtents(node,_367){node=dom.byId(node);var s=_367||_364.getComputedStyle(node),p=geom.getPadExtents(node,s),b=geom.getBorderExtents(node,s);return {l:p.l+b.l,t:p.t+b.t,r:p.r+b.r,b:p.b+b.b,w:p.w+b.w,h:p.h+b.h};};geom.getMarginExtents=function getMarginExtents(node,_368){node=dom.byId(node);var s=_368||_364.getComputedStyle(node),px=_364.toPixelValue,l=px(node,s.marginLeft),t=px(node,s.marginTop),r=px(node,s.marginRight),b=px(node,s.marginBottom);if(has(\"webkit\")&&(s.position!=\"absolute\")){r=l;}return {l:l,t:t,r:r,b:b,w:l+r,h:t+b};};geom.getMarginBox=function getMarginBox(node,_369){node=dom.byId(node);var s=_369||_364.getComputedStyle(node),me=geom.getMarginExtents(node,s),l=node.offsetLeft-me.l,t=node.offsetTop-me.t,p=node.parentNode,px=_364.toPixelValue,pcs;if(has(\"mozilla\")){var sl=parseFloat(s.left),st=parseFloat(s.top);if(!isNaN(sl)&&!isNaN(st)){l=sl,t=st;}else{if(p&&p.style){pcs=_364.getComputedStyle(p);if(pcs.overflow!=\"visible\"){l+=pcs.borderLeftStyle!=none?px(node,pcs.borderLeftWidth):0;t+=pcs.borderTopStyle!=none?px(node,pcs.borderTopWidth):0;}}}}else{if(has(\"opera\")||(has(\"ie\")==8&&!has(\"quirks\"))){if(p){pcs=_364.getComputedStyle(p);l-=pcs.borderLeftStyle!=none?px(node,pcs.borderLeftWidth):0;t-=pcs.borderTopStyle!=none?px(node,pcs.borderTopWidth):0;}}}return {l:l,t:t,w:node.offsetWidth+me.w,h:node.offsetHeight+me.h};};geom.getContentBox=function getContentBox(node,_36a){node=dom.byId(node);var s=_36a||_364.getComputedStyle(node),w=node.clientWidth,h,pe=geom.getPadExtents(node,s),be=geom.getBorderExtents(node,s);if(!w){w=node.offsetWidth;h=node.offsetHeight;}else{h=node.clientHeight;be.w=be.h=0;}if(has(\"opera\")){pe.l+=be.l;pe.t+=be.t;}return {l:pe.l,t:pe.t,w:w-pe.w-be.w,h:h-pe.h-be.h};};function _36b(node,l,t,w,h,u){u=u||\"px\";var s=node.style;if(!isNaN(l)){s.left=l+u;}if(!isNaN(t)){s.top=t+u;}if(w>=0){s.width=w+u;}if(h>=0){s.height=h+u;}};function _36c(node){return node.tagName.toLowerCase()==\"button\"||node.tagName.toLowerCase()==\"input\"&&(node.getAttribute(\"type\")||\"\").toLowerCase()==\"button\";};function _36d(node){return geom.boxModel==\"border-box\"||node.tagName.toLowerCase()==\"table\"||_36c(node);};geom.setContentSize=function setContentSize(node,box,_36e){node=dom.byId(node);var w=box.w,h=box.h;if(_36d(node)){var pb=geom.getPadBorderExtents(node,_36e);if(w>=0){w+=pb.w;}if(h>=0){h+=pb.h;}}_36b(node,NaN,NaN,w,h);};var _36f={l:0,t:0,w:0,h:0};geom.setMarginBox=function setMarginBox(node,box,_370){node=dom.byId(node);var s=_370||_364.getComputedStyle(node),w=box.w,h=box.h,pb=_36d(node)?_36f:geom.getPadBorderExtents(node,s),mb=geom.getMarginExtents(node,s);if(has(\"webkit\")){if(_36c(node)){var ns=node.style;if(w>=0&&!ns.width){ns.width=\"4px\";}if(h>=0&&!ns.height){ns.height=\"4px\";}}}if(w>=0){w=Math.max(w-pb.w-mb.w,0);}if(h>=0){h=Math.max(h-pb.h-mb.h,0);}_36b(node,box.l,box.t,w,h);};geom.isBodyLtr=function isBodyLtr(){return (win.body().dir||win.doc.documentElement.dir||\"ltr\").toLowerCase()==\"ltr\";};geom.docScroll=function docScroll(){var node=win.doc.parentWindow||win.doc.defaultView;return \"pageXOffset\" in node?{x:node.pageXOffset,y:node.pageYOffset}:(node=has(\"quirks\")?win.body():win.doc.documentElement,{x:geom.fixIeBiDiScrollLeft(node.scrollLeft||0),y:node.scrollTop||0});};geom.getIeDocumentElementOffset=function getIeDocumentElementOffset(){var de=win.doc.documentElement;if(has(\"ie\")<8){var r=de.getBoundingClientRect(),l=r.left,t=r.top;if(has(\"ie\")<7){l+=de.clientLeft;t+=de.clientTop;}return {x:l<0?0:l,y:t<0?0:t};}else{return {x:0,y:0};}};geom.fixIeBiDiScrollLeft=function fixIeBiDiScrollLeft(_371){var ie=has(\"ie\");if(ie&&!geom.isBodyLtr()){var qk=has(\"quirks\"),de=qk?win.body():win.doc.documentElement;if(ie==6&&!qk&&win.global.frameElement&&de.scrollHeight>de.clientHeight){_371+=de.clientLeft;}return (ie<8||qk)?(_371+de.clientWidth-de.scrollWidth):-_371;}return _371;};geom.position=function(node,_372){node=dom.byId(node);var db=win.body(),dh=db.parentNode,ret=node.getBoundingClientRect();ret={x:ret.left,y:ret.top,w:ret.right-ret.left,h:ret.bottom-ret.top};if(has(\"ie\")){var _373=geom.getIeDocumentElementOffset();ret.x-=_373.x+(has(\"quirks\")?db.clientLeft+db.offsetLeft:0);ret.y-=_373.y+(has(\"quirks\")?db.clientTop+db.offsetTop:0);}else{if(has(\"ff\")==3){var cs=_364.getComputedStyle(dh),px=_364.toPixelValue;ret.x-=px(dh,cs.marginLeft)+px(dh,cs.borderLeftWidth);ret.y-=px(dh,cs.marginTop)+px(dh,cs.borderTopWidth);}}if(_372){var _374=geom.docScroll();ret.x+=_374.x;ret.y+=_374.y;}return ret;};geom.getMarginSize=function getMarginSize(node,_375){node=dom.byId(node);var me=geom.getMarginExtents(node,_375||_364.getComputedStyle(node));var size=node.getBoundingClientRect();return {w:(size.right-size.left)+me.w,h:(size.bottom-size.top)+me.h};};geom.normalizeEvent=function(_376){if(!(\"layerX\" in _376)){_376.layerX=_376.offsetX;_376.layerY=_376.offsetY;}if(!has(\"dom-addeventlistener\")){var se=_376.target;var doc=(se&&se.ownerDocument)||document;var _377=has(\"quirks\")?doc.body:doc.documentElement;var _378=geom.getIeDocumentElementOffset();_376.pageX=_376.clientX+geom.fixIeBiDiScrollLeft(_377.scrollLeft||0)-_378.x;_376.pageY=_376.clientY+(_377.scrollTop||0)-_378.y;}};return geom;});},\"dojo/dom-prop\":function(){define([\"exports\",\"./_base/kernel\",\"./_base/sniff\",\"./_base/lang\",\"./dom\",\"./dom-style\",\"./dom-construct\",\"./_base/connect\"],function(_379,dojo,has,lang,dom,_37a,ctr,conn){var _37b={},_37c=0,_37d=dojo._scopeName+\"attrid\";var _37e={col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1};_379.names={\"class\":\"className\",\"for\":\"htmlFor\",tabindex:\"tabIndex\",readonly:\"readOnly\",colspan:\"colSpan\",frameborder:\"frameBorder\",rowspan:\"rowSpan\",valuetype:\"valueType\"};_379.get=function getProp(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_37f=_379.names[lc]||name;return node[_37f];};_379.set=function setProp(node,name,_380){node=dom.byId(node);var l=arguments.length;if(l==2&&typeof name!=\"string\"){for(var x in name){_379.set(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_381=_379.names[lc]||name;if(_381==\"style\"&&typeof _380!=\"string\"){_37a.style(node,_380);return node;}if(_381==\"innerHTML\"){if(has(\"ie\")&&node.tagName.toLowerCase() in _37e){ctr.empty(node);node.appendChild(ctr.toDom(_380,node.ownerDocument));}else{node[_381]=_380;}return node;}if(lang.isFunction(_380)){var _382=node[_37d];if(!_382){_382=_37c++;node[_37d]=_382;}if(!_37b[_382]){_37b[_382]={};}var h=_37b[_382][_381];if(h){conn.disconnect(h);}else{try{delete node[_381];}catch(e){}}if(_380){_37b[_382][_381]=conn.connect(node,_381,_380);}else{node[_381]=null;}return node;}node[_381]=_380;return node;};});},\"dojo/dom-attr\":function(){define([\"exports\",\"./_base/sniff\",\"./_base/lang\",\"./dom\",\"./dom-style\",\"./dom-prop\"],function(_383,has,lang,dom,_384,prop){var _385={innerHTML:1,className:1,htmlFor:has(\"ie\"),value:1},_386={classname:\"class\",htmlfor:\"for\",tabindex:\"tabIndex\",readonly:\"readOnly\"};function _387(node,name){var attr=node.getAttributeNode&&node.getAttributeNode(name);return attr&&attr.specified;};_383.has=function hasAttr(node,name){var lc=name.toLowerCase();return _385[prop.names[lc]||name]||_387(dom.byId(node),_386[lc]||name);};_383.get=function getAttr(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_388=prop.names[lc]||name,_389=_385[_388];value=node[_388];if(_389&&typeof value!=\"undefined\"){return value;}if(_388!=\"href\"&&(typeof value==\"boolean\"||lang.isFunction(value))){return value;}var _38a=_386[lc]||name;return _387(node,_38a)?node.getAttribute(_38a):null;};_383.set=function setAttr(node,name,_38b){node=dom.byId(node);if(arguments.length==2){for(var x in name){_383.set(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_38c=prop.names[lc]||name,_38d=_385[_38c];if(_38c==\"style\"&&typeof _38b!=\"string\"){_384.set(node,_38b);return node;}if(_38d||typeof _38b==\"boolean\"||lang.isFunction(_38b)){return prop.set(node,name,_38b);}node.setAttribute(_386[lc]||name,_38b);return node;};_383.remove=function removeAttr(node,name){dom.byId(node).removeAttribute(_386[name.toLowerCase()]||name);};_383.getNodeProp=function getNodeProp(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_38e=prop.names[lc]||name;if((_38e in node)&&_38e!=\"href\"){return node[_38e];}var _38f=_386[lc]||name;return _387(node,_38f)?node.getAttribute(_38f):null;};});},\"dojo/dom-construct\":function(){define([\"exports\",\"./_base/kernel\",\"./_base/sniff\",\"./_base/window\",\"./dom\",\"./dom-attr\",\"./on\"],function(_390,dojo,has,win,dom,attr,on){var _391={option:[\"select\"],tbody:[\"table\"],thead:[\"table\"],tfoot:[\"table\"],tr:[\"table\",\"tbody\"],td:[\"table\",\"tbody\",\"tr\"],th:[\"table\",\"thead\",\"tr\"],legend:[\"fieldset\"],caption:[\"table\"],colgroup:[\"table\"],col:[\"table\",\"colgroup\"],li:[\"ul\"]},_392=/<\\s*([\\w\\:]+)/,_393={},_394=0,_395=\"__\"+dojo._scopeName+\"ToDomId\";for(var _396 in _391){if(_391.hasOwnProperty(_396)){var tw=_391[_396];tw.pre=_396==\"option\"?\"<select multiple=\\\"multiple\\\">\":\"<\"+tw.join(\"><\")+\">\";tw.post=\"</\"+tw.reverse().join(\"></\")+\">\";}}function _397(node,ref){var _398=ref.parentNode;if(_398){_398.insertBefore(node,ref);}};function _399(node,ref){var _39a=ref.parentNode;if(_39a){if(_39a.lastChild==ref){_39a.appendChild(node);}else{_39a.insertBefore(node,ref.nextSibling);}}};var _39b=null,_39c;on(window,\"unload\",function(){_39b=null;});_390.toDom=function toDom(frag,doc){doc=doc||win.doc;var _39d=doc[_395];if(!_39d){doc[_395]=_39d=++_394+\"\";_393[_39d]=doc.createElement(\"div\");}frag+=\"\";var _39e=frag.match(_392),tag=_39e?_39e[1].toLowerCase():\"\",_39f=_393[_39d],wrap,i,fc,df;if(_39e&&_391[tag]){wrap=_391[tag];_39f.innerHTML=wrap.pre+frag+wrap.post;for(i=wrap.length;i;--i){_39f=_39f.firstChild;}}else{_39f.innerHTML=frag;}if(_39f.childNodes.length==1){return _39f.removeChild(_39f.firstChild);}df=doc.createDocumentFragment();while(fc=_39f.firstChild){df.appendChild(fc);}return df;};_390.place=function place(node,_3a0,_3a1){_3a0=dom.byId(_3a0);if(typeof node==\"string\"){node=/^\\s*</.test(node)?_390.toDom(node,_3a0.ownerDocument):dom.byId(node);}if(typeof _3a1==\"number\"){var cn=_3a0.childNodes;if(!cn.length||cn.length<=_3a1){_3a0.appendChild(node);}else{_397(node,cn[_3a1<0?0:_3a1]);}}else{switch(_3a1){case \"before\":_397(node,_3a0);break;case \"after\":_399(node,_3a0);break;case \"replace\":_3a0.parentNode.replaceChild(node,_3a0);break;case \"only\":_390.empty(_3a0);_3a0.appendChild(node);break;case \"first\":if(_3a0.firstChild){_397(node,_3a0.firstChild);break;}default:_3a0.appendChild(node);}}return node;};_390.create=function create(tag,_3a2,_3a3,pos){var doc=win.doc;if(_3a3){_3a3=dom.byId(_3a3);doc=_3a3.ownerDocument;}if(typeof tag==\"string\"){tag=doc.createElement(tag);}if(_3a2){attr.set(tag,_3a2);}if(_3a3){_390.place(tag,_3a3,pos);}return tag;};_390.empty=has(\"ie\")?function(node){node=dom.byId(node);for(var c;c=node.lastChild;){_390.destroy(c);}}:function(node){dom.byId(node).innerHTML=\"\";};_390.destroy=function destroy(node){node=dom.byId(node);try{var doc=node.ownerDocument;if(!_39b||_39c!=doc){_39b=doc.createElement(\"div\");_39c=doc;}_39b.appendChild(node.parentNode?node.parentNode.removeChild(node):node);_39b.innerHTML=\"\";}catch(e){}};});},\"dojo/text\":function(){define([\"./_base/kernel\",\"require\",\"./has\",\"./_base/xhr\"],function(dojo,_3a4,has,xhr){var _3a5;if(1){_3a5=function(url,sync,load){xhr(\"GET\",{url:url,sync:!!sync,load:load});};}else{if(_3a4.getText){_3a5=_3a4.getText;}else{console.error(\"dojo/text plugin failed to load because loader does not support getText\");}}var _3a6={},_3a7=function(text){if(text){text=text.replace(/^\\s*<\\?xml(\\s)+version=[\\'\\\"](\\d)*.(\\d)*[\\'\\\"](\\s)*\\?>/im,\"\");var _3a8=text.match(/<body[^>]*>\\s*([\\s\\S]+)\\s*<\\/body>/im);if(_3a8){text=_3a8[1];}}else{text=\"\";}return text;},_3a9={},_3aa={},_3ab={dynamic:true,normalize:function(id,_3ac){var _3ad=id.split(\"!\"),url=_3ad[0];return (/^\\./.test(url)?_3ac(url):url)+(_3ad[1]?\"!\"+_3ad[1]:\"\");},load:function(id,_3ae,load){var _3af=id.split(\"!\"),_3b0=_3af.length>1,_3b1=_3af[0],url=_3ae.toUrl(_3af[0]),text=_3a9,_3b2=function(text){load(_3b0?_3a7(text):text);};if(_3b1 in _3a6){text=_3a6[_3b1];}else{if(url in _3ae.cache){text=_3ae.cache[url];}else{if(url in _3a6){text=_3a6[url];}}}if(text===_3a9){if(_3aa[url]){_3aa[url].push(_3b2);}else{var _3b3=_3aa[url]=[_3b2];_3a5(url,!_3ae.async,function(text){_3a6[_3b1]=_3a6[url]=text;for(var i=0;i<_3b3.length;){_3b3[i++](text);}delete _3aa[url];});}}else{_3b2(text);}}};dojo.cache=function(_3b4,url,_3b5){var key;if(typeof _3b4==\"string\"){if(/\\//.test(_3b4)){key=_3b4;_3b5=url;}else{key=_3a4.toUrl(_3b4.replace(/\\./g,\"/\")+(url?(\"/\"+url):\"\"));}}else{key=_3b4+\"\";_3b5=url;}var val=(_3b5!=undefined&&typeof _3b5!=\"string\")?_3b5.value:_3b5,_3b6=_3b5&&_3b5.sanitize;if(typeof val==\"string\"){_3a6[key]=val;return _3b6?_3a7(val):val;}else{if(val===null){delete _3a6[key];return null;}else{if(!(key in _3a6)){_3a5(key,true,function(text){_3a6[key]=text;});}return _3b6?_3a7(_3a6[key]):_3a6[key];}}};return _3ab;});},\"dojo/keys\":function(){define(\"dojo/keys\",[\"./_base/kernel\",\"./_base/sniff\"],function(dojo,has){return dojo.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:has(\"safari\")?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,UP_DPAD:175,DOWN_DPAD:176,LEFT_DPAD:177,RIGHT_DPAD:178,copyKey:has(\"mac\")&&!has(\"air\")?(has(\"safari\")?91:224):17};});},\"dojo/domReady\":function(){define([\"./has\"],function(has){var _3b7=this,doc=document,_3b8={\"loaded\":1,\"complete\":1},_3b9=typeof doc.readyState!=\"string\",_3ba=!!_3b8[doc.readyState];if(_3b9){doc.readyState=\"loading\";}if(!_3ba){var _3bb=[],_3bc=[],_3bd=function(evt){evt=evt||_3b7.event;if(_3ba||(evt.type==\"readystatechange\"&&!_3b8[doc.readyState])){return;}_3ba=1;if(_3b9){doc.readyState=\"complete\";}while(_3bb.length){(_3bb.shift())();}},on=function(node,_3be){node.addEventListener(_3be,_3bd,false);_3bb.push(function(){node.removeEventListener(_3be,_3bd,false);});};if(!has(\"dom-addeventlistener\")){on=function(node,_3bf){_3bf=\"on\"+_3bf;node.attachEvent(_3bf,_3bd);_3bb.push(function(){node.detachEvent(_3bf,_3bd);});};var div=doc.createElement(\"div\");try{if(div.doScroll&&_3b7.frameElement===null){_3bc.push(function(){try{div.doScroll(\"left\");return 1;}catch(e){}});}}catch(e){}}on(doc,\"DOMContentLoaded\");on(_3b7,\"load\");if(\"onreadystatechange\" in doc){on(doc,\"readystatechange\");}else{if(!_3b9){_3bc.push(function(){return _3b8[doc.readyState];});}}if(_3bc.length){var _3c0=function(){if(_3ba){return;}var i=_3bc.length;while(i--){if(_3bc[i]()){_3bd(\"poller\");return;}}setTimeout(_3c0,30);};_3c0();}}function _3c1(_3c2){if(_3ba){_3c2(1);}else{_3bb.push(_3c2);}};_3c1.load=function(id,req,load){_3c1(load);};return _3c1;});},\"dojo/_base/lang\":function(){define(\"dojo/_base/lang\",[\"./kernel\",\"../has\",\"./sniff\"],function(dojo,has){has.add(\"bug-for-in-skips-shadowed\",function(){for(var i in {toString:1}){return 0;}return 1;});var _3c3=has(\"bug-for-in-skips-shadowed\")?\"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor\".split(\".\"):[],_3c4=_3c3.length,_3c5=function(dest,_3c6,_3c7){var name,s,i,_3c8={};for(name in _3c6){s=_3c6[name];if(!(name in dest)||(dest[name]!==s&&(!(name in _3c8)||_3c8[name]!==s))){dest[name]=_3c7?_3c7(s):s;}}if(has(\"bug-for-in-skips-shadowed\")){if(_3c6){for(i=0;i<_3c4;++i){name=_3c3[i];s=_3c6[name];if(!(name in dest)||(dest[name]!==s&&(!(name in _3c8)||_3c8[name]!==s))){dest[name]=_3c7?_3c7(s):s;}}}}return dest;},_3c9=function(dest,_3ca){if(!dest){dest={};}for(var i=1,l=arguments.length;i<l;i++){lang._mixin(dest,arguments[i]);}return dest;},_3cb=function(_3cc,_3cd,_3ce){var p,i=0,_3cf=dojo.global;if(!_3ce){if(!_3cc.length){return _3cf;}else{p=_3cc[i++];try{_3ce=dojo.scopeMap[p]&&dojo.scopeMap[p][1];}catch(e){}_3ce=_3ce||(p in _3cf?_3cf[p]:(_3cd?_3cf[p]={}:undefined));}}while(_3ce&&(p=_3cc[i++])){_3ce=(p in _3ce?_3ce[p]:(_3cd?_3ce[p]={}:undefined));}return _3ce;},_3d0=function(name,_3d1,_3d2){var _3d3=name.split(\".\"),p=_3d3.pop(),obj=_3cb(_3d3,true,_3d2);return obj&&p?(obj[p]=_3d1):undefined;},_3d4=function(name,_3d5,_3d6){return _3cb(name.split(\".\"),_3d5,_3d6);},_3d7=function(name,obj){return lang.getObject(name,false,obj)!==undefined;},opts=Object.prototype.toString,_3d8=function(it){return (typeof it==\"string\"||it instanceof String);},_3d9=function(it){return it&&(it instanceof Array||typeof it==\"array\");},_3da=function(it){return opts.call(it)===\"[object Function]\";},_3db=function(it){return it!==undefined&&(it===null||typeof it==\"object\"||lang.isArray(it)||lang.isFunction(it));},_3dc=function(it){return it&&it!==undefined&&!lang.isString(it)&&!lang.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()==\"form\")&&(lang.isArray(it)||isFinite(it.length));},_3dd=function(it){return it&&!lang.isFunction(it)&&/\\{\\s*\\[native code\\]\\s*\\}/.test(String(it));},_3de=function(_3df,_3e0){for(var i=1,l=arguments.length;i<l;i++){lang._mixin(_3df.prototype,arguments[i]);}return _3df;},_3e1=function(_3e2,_3e3){var pre=_3e4(arguments,2);var _3e5=lang.isString(_3e3);return function(){var args=_3e4(arguments);var f=_3e5?(_3e2||dojo.global)[_3e3]:_3e3;return f&&f.apply(_3e2||this,pre.concat(args));};},_3e6=function(_3e7,_3e8){if(arguments.length>2){return lang._hitchArgs.apply(dojo,arguments);}if(!_3e8){_3e8=_3e7;_3e7=null;}if(lang.isString(_3e8)){_3e7=_3e7||dojo.global;if(!_3e7[_3e8]){throw ([\"dojo.hitch: scope[\\\"\",_3e8,\"\\\"] is null (scope=\\\"\",_3e7,\"\\\")\"].join(\"\"));}return function(){return _3e7[_3e8].apply(_3e7,arguments||[]);};}return !_3e7?_3e8:function(){return _3e8.apply(_3e7,arguments||[]);};},_3e9=(function(){function TMP(){};return function(obj,_3ea){TMP.prototype=obj;var tmp=new TMP();TMP.prototype=null;if(_3ea){lang._mixin(tmp,_3ea);}return tmp;};})(),_3eb=function(obj,_3ec,_3ed){return (_3ed||[]).concat(Array.prototype.slice.call(obj,_3ec||0));},_3e4=has(\"ie\")?(function(){function slow(obj,_3ee,_3ef){var arr=_3ef||[];for(var x=_3ee||0;x<obj.length;x++){arr.push(obj[x]);}return arr;};return function(obj){return ((obj.item)?slow:_3eb).apply(this,arguments);};})():_3eb,_3f0=function(_3f1){var arr=[null];return lang.hitch.apply(dojo,arr.concat(lang._toArray(arguments)));},_3f2=function(src){if(!src||typeof src!=\"object\"||lang.isFunction(src)){return src;}if(src.nodeType&&\"cloneNode\" in src){return src.cloneNode(true);}if(src instanceof Date){return new Date(src.getTime());}if(src instanceof RegExp){return new RegExp(src);}var r,i,l;if(lang.isArray(src)){r=[];for(i=0,l=src.length;i<l;++i){if(i in src){r.push(_3f2(src[i]));}}}else{r=src.constructor?new src.constructor():{};}return lang._mixin(r,src,_3f2);},trim=String.prototype.trim?function(str){return str.trim();}:function(str){return str.replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\");},_3f3=/\\{([^\\}]+)\\}/g,_3f4=function(tmpl,map,_3f5){return tmpl.replace(_3f5||_3f3,lang.isFunction(map)?map:function(_3f6,k){return _3d4(k,false,map);});},lang={_extraNames:_3c3,_mixin:_3c5,mixin:_3c9,setObject:_3d0,getObject:_3d4,exists:_3d7,isString:_3d8,isArray:_3d9,isFunction:_3da,isObject:_3db,isArrayLike:_3dc,isAlien:_3dd,extend:_3de,_hitchArgs:_3e1,hitch:_3e6,delegate:_3e9,_toArray:_3e4,partial:_3f0,clone:_3f2,trim:trim,replace:_3f4};1&&_3c9(dojo,lang);return lang;});},\"dojo/Evented\":function(){define(\"dojo/Evented\",[\"./aspect\",\"./on\"],function(_3f7,on){\"use strict\";var _3f8=_3f7.after;function _3f9(){};_3f9.prototype={on:function(type,_3fa){return on.parse(this,type,_3fa,function(_3fb,type){return _3f8(_3fb,\"on\"+type,_3fa,true);});},emit:function(type,_3fc){var args=[this];args.push.apply(args,arguments);return on.emit.apply(on,args);}};return _3f9;});},\"dojo/mouse\":function(){define(\"dojo/mouse\",[\"./_base/kernel\",\"./on\",\"./has\",\"./dom\",\"./_base/window\"],function(dojo,on,has,dom,win){has.add(\"dom-quirks\",win.doc&&win.doc.compatMode==\"BackCompat\");has.add(\"events-mouseenter\",win.doc&&\"onmouseenter\" in win.doc.createElement(\"div\"));var _3fd;if(has(\"dom-quirks\")||!has(\"dom-addeventlistener\")){_3fd={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,_3fe){return e.button&_3fe;},isLeft:function(e){return e.button&1;},isMiddle:function(e){return e.button&4;},isRight:function(e){return e.button&2;}};}else{_3fd={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,_3ff){return e.button==_3ff;},isLeft:function(e){return e.button==0;},isMiddle:function(e){return e.button==1;},isRight:function(e){return e.button==2;}};}dojo.mouseButtons=_3fd;function _400(type,_401){var _402=function(node,_403){return on(node,type,function(evt){if(!dom.isDescendant(evt.relatedTarget,_401?evt.target:node)){return _403.call(this,evt);}});};if(!_401){_402.bubble=_400(type,true);}return _402;};return {enter:_400(\"mouseover\"),leave:_400(\"mouseout\"),isLeft:_3fd.isLeft,isMiddle:_3fd.isMiddle,isRight:_3fd.isRight};});},\"dojo/topic\":function(){define(\"dojo/topic\",[\"./Evented\"],function(_404){var hub=new _404;return {publish:function(_405,_406){return hub.emit.apply(hub,arguments);},subscribe:function(_407,_408){return hub.on.apply(hub,arguments);}};});},\"dojo/_base/xhr\":function(){define(\"dojo/_base/xhr\",[\"./kernel\",\"./sniff\",\"require\",\"../io-query\",\"../dom\",\"../dom-form\",\"./Deferred\",\"./json\",\"./lang\",\"./array\",\"../on\"],function(dojo,has,_409,ioq,dom,_40a,_40b,json,lang,_40c,on){has.add(\"native-xhr\",function(){return typeof XMLHttpRequest!==\"undefined\";});if(1){dojo._xhrObj=_409.getXhr;}else{if(has(\"native-xhr\")){dojo._xhrObj=function(){try{return new XMLHttpRequest();}catch(e){throw new Error(\"XMLHTTP not available: \"+e);}};}else{for(var _40d=[\"Msxml2.XMLHTTP\",\"Microsoft.XMLHTTP\",\"Msxml2.XMLHTTP.4.0\"],_40e,i=0;i<3;){try{_40e=_40d[i++];if(new ActiveXObject(_40e)){break;}}catch(e){}}dojo._xhrObj=function(){return new ActiveXObject(_40e);};}}var cfg=dojo.config;dojo.objectToQuery=ioq.objectToQuery;dojo.queryToObject=ioq.queryToObject;dojo.fieldToObject=_40a.fieldToObject;dojo.formToObject=_40a.toObject;dojo.formToQuery=_40a.toQuery;dojo.formToJson=_40a.toJson;dojo._blockAsync=false;var _40f=dojo._contentHandlers=dojo.contentHandlers={\"text\":function(xhr){return xhr.responseText;},\"json\":function(xhr){return json.fromJson(xhr.responseText||null);},\"json-comment-filtered\":function(xhr){if(!dojo.config.useCommentedJson){console.warn(\"Consider using the standard mimetype:application/json.\"+\" json-commenting can introduce security issues. To\"+\" decrease the chances of hijacking, use the standard the 'json' handler and\"+\" prefix your json with: {}&&\\n\"+\"Use djConfig.useCommentedJson=true to turn off this message.\");}var _410=xhr.responseText;var _411=_410.indexOf(\"/*\");var _412=_410.lastIndexOf(\"*/\");if(_411==-1||_412==-1){throw new Error(\"JSON was not comment filtered\");}return json.fromJson(_410.substring(_411+2,_412));},\"javascript\":function(xhr){return dojo.eval(xhr.responseText);},\"xml\":function(xhr){var _413=xhr.responseXML;if(has(\"ie\")){if((!_413||!_413.documentElement)){var ms=function(n){return \"MSXML\"+n+\".DOMDocument\";};var dp=[\"Microsoft.XMLDOM\",ms(6),ms(4),ms(3),ms(2)];_40c.some(dp,function(p){try{var dom=new ActiveXObject(p);dom.async=false;dom.loadXML(xhr.responseText);_413=dom;}catch(e){return false;}return true;});}}return _413;},\"json-comment-optional\":function(xhr){if(xhr.responseText&&/^[^{\\[]*\\/\\*/.test(xhr.responseText)){return _40f[\"json-comment-filtered\"](xhr);}else{return _40f[\"json\"](xhr);}}};dojo._ioSetArgs=function(args,_414,_415,_416){var _417={args:args,url:args.url};var _418=null;if(args.form){var form=dom.byId(args.form);var _419=form.getAttributeNode(\"action\");_417.url=_417.url||(_419?_419.value:null);_418=_40a.toObject(form);}var _41a=[{}];if(_418){_41a.push(_418);}if(args.content){_41a.push(args.content);}if(args.preventCache){_41a.push({\"dojo.preventCache\":new Date().valueOf()});}_417.query=ioq.objectToQuery(lang.mixin.apply(null,_41a));_417.handleAs=args.handleAs||\"text\";var d=new _40b(_414);d.addCallbacks(_415,function(_41b){return _416(_41b,d);});var ld=args.load;if(ld&&lang.isFunction(ld)){d.addCallback(function(_41c){return ld.call(args,_41c,_417);});}var err=args.error;if(err&&lang.isFunction(err)){d.addErrback(function(_41d){return err.call(args,_41d,_417);});}var _41e=args.handle;if(_41e&&lang.isFunction(_41e)){d.addBoth(function(_41f){return _41e.call(args,_41f,_417);});}if(cfg.ioPublish&&dojo.publish&&_417.args.ioPublish!==false){d.addCallbacks(function(res){dojo.publish(\"/dojo/io/load\",[d,res]);return res;},function(res){dojo.publish(\"/dojo/io/error\",[d,res]);return res;});d.addBoth(function(res){dojo.publish(\"/dojo/io/done\",[d,res]);return res;});}d.ioArgs=_417;return d;};var _420=function(dfd){dfd.canceled=true;var xhr=dfd.ioArgs.xhr;var _421=typeof xhr.abort;if(_421==\"function\"||_421==\"object\"||_421==\"unknown\"){xhr.abort();}var err=dfd.ioArgs.error;if(!err){err=new Error(\"xhr cancelled\");err.dojoType=\"cancel\";}return err;};var _422=function(dfd){var ret=_40f[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);return ret===undefined?null:ret;};var _423=function(_424,dfd){if(!dfd.ioArgs.args.failOk){console.error(_424);}return _424;};var _425=null;var _426=[];var _427=0;var _428=function(dfd){if(_427<=0){_427=0;if(cfg.ioPublish&&dojo.publish&&(!dfd||dfd&&dfd.ioArgs.args.ioPublish!==false)){dojo.publish(\"/dojo/io/stop\");}}};var _429=function(){var now=(new Date()).getTime();if(!dojo._blockAsync){for(var i=0,tif;i<_426.length&&(tif=_426[i]);i++){var dfd=tif.dfd;var func=function(){if(!dfd||dfd.canceled||!tif.validCheck(dfd)){_426.splice(i--,1);_427-=1;}else{if(tif.ioCheck(dfd)){_426.splice(i--,1);tif.resHandle(dfd);_427-=1;}else{if(dfd.startTime){if(dfd.startTime+(dfd.ioArgs.args.timeout||0)<now){_426.splice(i--,1);var err=new Error(\"timeout exceeded\");err.dojoType=\"timeout\";dfd.errback(err);dfd.cancel();_427-=1;}}}}};if(dojo.config.debugAtAllCosts){func.call(this);}else{func.call(this);}}}_428(dfd);if(!_426.length){clearInterval(_425);_425=null;}};dojo._ioCancelAll=function(){try{_40c.forEach(_426,function(i){try{i.dfd.cancel();}catch(e){}});}catch(e){}};if(has(\"ie\")){on(window,\"unload\",dojo._ioCancelAll);}dojo._ioNotifyStart=function(dfd){if(cfg.ioPublish&&dojo.publish&&dfd.ioArgs.args.ioPublish!==false){if(!_427){dojo.publish(\"/dojo/io/start\");}_427+=1;dojo.publish(\"/dojo/io/send\",[dfd]);}};dojo._ioWatch=function(dfd,_42a,_42b,_42c){var args=dfd.ioArgs.args;if(args.timeout){dfd.startTime=(new Date()).getTime();}_426.push({dfd:dfd,validCheck:_42a,ioCheck:_42b,resHandle:_42c});if(!_425){_425=setInterval(_429,50);}if(args.sync){_429();}};var _42d=\"application/x-www-form-urlencoded\";var _42e=function(dfd){return dfd.ioArgs.xhr.readyState;};var _42f=function(dfd){return 4==dfd.ioArgs.xhr.readyState;};var _430=function(dfd){var xhr=dfd.ioArgs.xhr;if(dojo._isDocumentOk(xhr)){dfd.callback(dfd);}else{var err=new Error(\"Unable to load \"+dfd.ioArgs.url+\" status:\"+xhr.status);err.status=xhr.status;err.responseText=xhr.responseText;err.xhr=xhr;dfd.errback(err);}};dojo._ioAddQueryToUrl=function(_431){if(_431.query.length){_431.url+=(_431.url.indexOf(\"?\")==-1?\"?\":\"&\")+_431.query;_431.query=null;}};dojo.xhr=function(_432,args,_433){var dfd=dojo._ioSetArgs(args,_420,_422,_423);var _434=dfd.ioArgs;var xhr=_434.xhr=dojo._xhrObj(_434.args);if(!xhr){dfd.cancel();return dfd;}if(\"postData\" in args){_434.query=args.postData;}else{if(\"putData\" in args){_434.query=args.putData;}else{if(\"rawBody\" in args){_434.query=args.rawBody;}else{if((arguments.length>2&&!_433)||\"POST|PUT\".indexOf(_432.toUpperCase())==-1){dojo._ioAddQueryToUrl(_434);}}}}xhr.open(_432,_434.url,args.sync!==true,args.user||undefined,args.password||undefined);if(args.headers){for(var hdr in args.headers){if(hdr.toLowerCase()===\"content-type\"&&!args.contentType){args.contentType=args.headers[hdr];}else{if(args.headers[hdr]){xhr.setRequestHeader(hdr,args.headers[hdr]);}}}}if(args.contentType!==false){xhr.setRequestHeader(\"Content-Type\",args.contentType||_42d);}if(!args.headers||!(\"X-Requested-With\" in args.headers)){xhr.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");}dojo._ioNotifyStart(dfd);if(dojo.config.debugAtAllCosts){xhr.send(_434.query);}else{try{xhr.send(_434.query);}catch(e){_434.error=e;dfd.cancel();}}dojo._ioWatch(dfd,_42e,_42f,_430);xhr=null;return dfd;};dojo.xhrGet=function(args){return dojo.xhr(\"GET\",args);};dojo.rawXhrPost=dojo.xhrPost=function(args){return dojo.xhr(\"POST\",args,true);};dojo.rawXhrPut=dojo.xhrPut=function(args){return dojo.xhr(\"PUT\",args,true);};dojo.xhrDelete=function(args){return dojo.xhr(\"DELETE\",args);};dojo._isDocumentOk=function(http){var stat=http.status||0;stat=(stat>=200&&stat<300)||stat==304||stat==1223||!stat;return stat;};dojo._getText=function(url){var _435;dojo.xhrGet({url:url,sync:true,load:function(text){_435=text;}});return _435;};lang.mixin(dojo.xhr,{_xhrObj:dojo._xhrObj,fieldToObject:_40a.fieldToObject,formToObject:_40a.toObject,objectToQuery:ioq.objectToQuery,formToQuery:_40a.toQuery,formToJson:_40a.toJson,queryToObject:ioq.queryToObject,contentHandlers:_40f,_ioSetArgs:dojo._ioSetArgs,_ioCancelAll:dojo._ioCancelAll,_ioNotifyStart:dojo._ioNotifyStart,_ioWatch:dojo._ioWatch,_ioAddQueryToUrl:dojo._ioAddQueryToUrl,_isDocumentOk:dojo._isDocumentOk,_getText:dojo._getText,get:dojo.xhrGet,post:dojo.xhrPost,put:dojo.xhrPut,del:dojo.xhrDelete});return dojo.xhr;});},\"dojo/_base/unload\":function(){define([\"./kernel\",\"./connect\"],function(dojo,_436){var win=window;dojo.addOnWindowUnload=function(obj,_437){if(!dojo.windowUnloaded){_436.connect(win,\"unload\",(dojo.windowUnloaded=function(){}));}_436.connect(win,\"unload\",obj,_437);};dojo.addOnUnload=function(obj,_438){_436.connect(win,\"beforeunload\",obj,_438);};return {addOnWindowUnload:dojo.addOnWindowUnload,addOnUnload:dojo.addOnUnload};});},\"dojo/loadInit\":function(){define(\"dojo/loadInit\",[\"./_base/loader\"],function(_439){return {dynamic:0,normalize:function(id){return id;},load:_439.loadInit};});},\"dojo/_base/NodeList\":function(){define(\"dojo/_base/NodeList\",[\"./kernel\",\"../query\",\"./array\",\"./html\",\"../NodeList-dom\"],function(dojo,_43a,_43b){var _43c=_43a.NodeList;var nlp=_43c.prototype;nlp.connect=_43c._adaptAsForEach(function(){return dojo.connect.apply(this,arguments);});nlp.coords=_43c._adaptAsMap(dojo.coords);_43c.events=[\"blur\",\"focus\",\"change\",\"click\",\"error\",\"keydown\",\"keypress\",\"keyup\",\"load\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseout\",\"mouseover\",\"mouseup\",\"submit\"];_43b.forEach(_43c.events,function(evt){var _43d=\"on\"+evt;nlp[_43d]=function(a,b){return this.connect(_43d,a,b);};});dojo.NodeList=_43c;return dojo.NodeList;});},\"dojo/_base/Color\":function(){define([\"./kernel\",\"./lang\",\"./array\",\"./config\"],function(dojo,lang,_43e,_43f){var _440=dojo.Color=function(_441){if(_441){this.setColor(_441);}};_440.named={\"black\":[0,0,0],\"silver\":[192,192,192],\"gray\":[128,128,128],\"white\":[255,255,255],\"maroon\":[128,0,0],\"red\":[255,0,0],\"purple\":[128,0,128],\"fuchsia\":[255,0,255],\"green\":[0,128,0],\"lime\":[0,255,0],\"olive\":[128,128,0],\"yellow\":[255,255,0],\"navy\":[0,0,128],\"blue\":[0,0,255],\"teal\":[0,128,128],\"aqua\":[0,255,255],\"transparent\":_43f.transparentColor||[0,0,0,0]};lang.extend(_440,{r:255,g:255,b:255,a:1,_set:function(r,g,b,a){var t=this;t.r=r;t.g=g;t.b=b;t.a=a;},setColor:function(_442){if(lang.isString(_442)){_440.fromString(_442,this);}else{if(lang.isArray(_442)){_440.fromArray(_442,this);}else{this._set(_442.r,_442.g,_442.b,_442.a);if(!(_442 instanceof _440)){this.sanitize();}}}return this;},sanitize:function(){return this;},toRgb:function(){var t=this;return [t.r,t.g,t.b];},toRgba:function(){var t=this;return [t.r,t.g,t.b,t.a];},toHex:function(){var arr=_43e.map([\"r\",\"g\",\"b\"],function(x){var s=this[x].toString(16);return s.length<2?\"0\"+s:s;},this);return \"#\"+arr.join(\"\");},toCss:function(_443){var t=this,rgb=t.r+\", \"+t.g+\", \"+t.b;return (_443?\"rgba(\"+rgb+\", \"+t.a:\"rgb(\"+rgb)+\")\";},toString:function(){return this.toCss(true);}});_440.blendColors=dojo.blendColors=function(_444,end,_445,obj){var t=obj||new _440();_43e.forEach([\"r\",\"g\",\"b\",\"a\"],function(x){t[x]=_444[x]+(end[x]-_444[x])*_445;if(x!=\"a\"){t[x]=Math.round(t[x]);}});return t.sanitize();};_440.fromRgb=dojo.colorFromRgb=function(_446,obj){var m=_446.toLowerCase().match(/^rgba?\\(([\\s\\.,0-9]+)\\)/);return m&&_440.fromArray(m[1].split(/\\s*,\\s*/),obj);};_440.fromHex=dojo.colorFromHex=function(_447,obj){var t=obj||new _440(),bits=(_447.length==4)?4:8,mask=(1<<bits)-1;_447=Number(\"0x\"+_447.substr(1));if(isNaN(_447)){return null;}_43e.forEach([\"b\",\"g\",\"r\"],function(x){var c=_447&mask;_447>>=bits;t[x]=bits==4?17*c:c;});t.a=1;return t;};_440.fromArray=dojo.colorFromArray=function(a,obj){var t=obj||new _440();t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));if(isNaN(t.a)){t.a=1;}return t.sanitize();};_440.fromString=dojo.colorFromString=function(str,obj){var a=_440.named[str];return a&&_440.fromArray(a,obj)||_440.fromRgb(str,obj)||_440.fromHex(str,obj);};return _440;});},\"dojo/selector/_loader\":function(){define([\"../has\",\"require\"],function(has,_448){\"use strict\";var _449=document.createElement(\"div\");has.add(\"dom-qsa2.1\",!!_449.querySelectorAll);has.add(\"dom-qsa3\",function(){try{_449.innerHTML=\"<p class='TEST'></p>\";return _449.querySelectorAll(\".TEST:empty\").length==1;}catch(e){}});var _44a;var acme=\"./acme\",lite=\"./lite\";return {load:function(id,_44b,_44c,_44d){var req=_448;id=id==\"default\"?has(\"config-selectorEngine\")||\"css3\":id;id=id==\"css2\"||id==\"lite\"?lite:id==\"css2.1\"?has(\"dom-qsa2.1\")?lite:acme:id==\"css3\"?has(\"dom-qsa3\")?lite:acme:id==\"acme\"?acme:(req=_44b)&&id;if(id.charAt(id.length-1)==\"?\"){id=id.substring(0,id.length-1);var _44e=true;}if(_44e&&(has(\"dom-compliant-qsa\")||_44a)){return _44c(_44a);}req([id],function(_44f){if(id!=\"./lite\"){_44a=_44f;}_44c(_44f);});}};});},\"dojo/on\":function(){define([\"./has!dom-addeventlistener?:./aspect\",\"./_base/kernel\",\"./has\"],function(_450,dojo,has){\"use strict\";if(1){var _451=window.ScriptEngineMajorVersion;has.add(\"jscript\",_451&&(_451()+ScriptEngineMinorVersion()/10));has.add(\"event-orientationchange\",has(\"touch\")&&!has(\"android\"));}var on=function(_452,type,_453,_454){if(_452.on){return _452.on(type,_453);}return on.parse(_452,type,_453,_455,_454,this);};on.pausable=function(_456,type,_457,_458){var _459;var _45a=on(_456,type,function(){if(!_459){return _457.apply(this,arguments);}},_458);_45a.pause=function(){_459=true;};_45a.resume=function(){_459=false;};return _45a;};on.once=function(_45b,type,_45c,_45d){var _45e=on(_45b,type,function(){_45e.remove();return _45c.apply(this,arguments);});return _45e;};on.parse=function(_45f,type,_460,_461,_462,_463){if(type.call){return type.call(_463,_45f,_460);}if(type.indexOf(\",\")>-1){var _464=type.split(/\\s*,\\s*/);var _465=[];var i=0;var _466;while(_466=_464[i++]){_465.push(_461(_45f,_466,_460,_462,_463));}_465.remove=function(){for(var i=0;i<_465.length;i++){_465[i].remove();}};return _465;}return _461(_45f,type,_460,_462,_463);};var _467=/^touch/;function _455(_468,type,_469,_46a,_46b){var _46c=type.match(/(.*):(.*)/);if(_46c){type=_46c[2];_46c=_46c[1];return on.selector(_46c,type).call(_46b,_468,_469);}if(has(\"touch\")){if(_467.test(type)){_469=_46d(_469);}if(!has(\"event-orientationchange\")&&(type==\"orientationchange\")){type=\"resize\";_468=window;_469=_46d(_469);}}if(_468.addEventListener){var _46e=type in _46f;_468.addEventListener(_46e?_46f[type]:type,_469,_46e);return {remove:function(){_468.removeEventListener(type,_469,_46e);}};}type=\"on\"+type;if(_470&&_468.attachEvent){return _470(_468,type,_469);}throw new Error(\"Target must be an event emitter\");};on.selector=function(_471,_472,_473){return function(_474,_475){var _476=this;var _477=_472.bubble;if(_477){_472=_477;}else{if(_473!==false){_473=true;}}return on(_474,_472,function(_478){var _479=_478.target;_476=_476&&_476.matches?_476:dojo.query;while(!_476.matches(_479,_471,_474)){if(_479==_474||!_473||!(_479=_479.parentNode)){return;}}return _475.call(_479,_478);});};};function _47a(){this.cancelable=false;};function _47b(){this.bubbles=false;};var _47c=[].slice,_47d=on.emit=function(_47e,type,_47f){var args=_47c.call(arguments,2);var _480=\"on\"+type;if(\"parentNode\" in _47e){var _481=args[0]={};for(var i in _47f){_481[i]=_47f[i];}_481.preventDefault=_47a;_481.stopPropagation=_47b;_481.target=_47e;_481.type=type;_47f=_481;}do{_47e[_480]&&_47e[_480].apply(_47e,args);}while(_47f&&_47f.bubbles&&(_47e=_47e.parentNode));return _47f&&_47f.cancelable&&_47f;};var _46f={};if(has(\"dom-addeventlistener\")){_46f={focusin:\"focus\",focusout:\"blur\"};if(has(\"opera\")){_46f.keydown=\"keypress\";}on.emit=function(_482,type,_483){if(_482.dispatchEvent&&document.createEvent){var _484=document.createEvent(\"HTMLEvents\");_484.initEvent(type,!!_483.bubbles,!!_483.cancelable);for(var i in _483){var _485=_483[i];if(!(i in _484)){_484[i]=_483[i];}}return _482.dispatchEvent(_484)&&_484;}return _47d.apply(on,arguments);};}else{on._fixEvent=function(evt,_486){if(!evt){var w=_486&&(_486.ownerDocument||_486.document||_486).parentWindow||window;evt=w.event;}if(!evt){return (evt);}if(!evt.target){evt.target=evt.srcElement;evt.currentTarget=(_486||evt.srcElement);if(evt.type==\"mouseover\"){evt.relatedTarget=evt.fromElement;}if(evt.type==\"mouseout\"){evt.relatedTarget=evt.toElement;}if(!evt.stopPropagation){evt.stopPropagation=_487;evt.preventDefault=_488;}switch(evt.type){case \"keypress\":var c=(\"charCode\" in evt?evt.charCode:evt.keyCode);if(c==10){c=0;evt.keyCode=13;}else{if(c==13||c==27){c=0;}else{if(c==3){c=99;}}}evt.charCode=c;_489(evt);break;}}return evt;};var _48a=function(_48b){this.handle=_48b;};_48a.prototype.remove=function(){delete _dojoIEListeners_[this.handle];};var _48c=function(_48d){return function(evt){evt=on._fixEvent(evt,this);return _48d.call(this,evt);};};var _470=function(_48e,type,_48f){_48f=_48c(_48f);if(((_48e.ownerDocument?_48e.ownerDocument.parentWindow:_48e.parentWindow||_48e.window||window)!=top||has(\"jscript\")<5.8)&&!has(\"config-_allow_leaks\")){if(typeof _dojoIEListeners_==\"undefined\"){_dojoIEListeners_=[];}var _490=_48e[type];if(!_490||!_490.listeners){var _491=_490;_48e[type]=_490=Function(\"event\",\"var callee = arguments.callee; for(var i = 0; i<callee.listeners.length; i++){var listener = _dojoIEListeners_[callee.listeners[i]]; if(listener){listener.call(this,event);}}\");_490.listeners=[];_490.global=this;if(_491){_490.listeners.push(_dojoIEListeners_.push(_491)-1);}}var _492;_490.listeners.push(_492=(_490.global._dojoIEListeners_.push(_48f)-1));return new _48a(_492);}return _450.after(_48e,type,_48f,true);};var _489=function(evt){evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):\"\";evt.charOrCode=evt.keyChar||evt.keyCode;};var _487=function(){this.cancelBubble=true;};var _488=on._preventDefault=function(){this.bubbledKeyCode=this.keyCode;if(this.ctrlKey){try{this.keyCode=0;}catch(e){}}this.returnValue=false;};}if(has(\"touch\")){var _493=function(){};var _494=window.orientation;var _46d=function(_495){return function(_496){var _497=_496.corrected;if(!_497){var type=_496.type;try{delete _496.type;}catch(e){}if(_496.type){_493.prototype=_496;var _497=new _493;_497.preventDefault=function(){_496.preventDefault();};_497.stopPropagation=function(){_496.stopPropagation();};}else{_497=_496;_497.type=type;}_496.corrected=_497;if(type==\"resize\"){if(_494==window.orientation){return null;}_494=window.orientation;_497.type=\"orientationchange\";return _495.call(this,_497);}if(!(\"rotation\" in _497)){_497.rotation=0;_497.scale=1;}var _498=_497.changedTouches[0];for(var i in _498){delete _497[i];_497[i]=_498[i];}}return _495.call(this,_497);};};}return on;});},\"dojo/_base/sniff\":function(){define([\"./kernel\",\"../has\"],function(dojo,has){if(!1){return has;}dojo.isBrowser=true,dojo._name=\"browser\";var _499=has.add,n=navigator,dua=n.userAgent,dav=n.appVersion,tv=parseFloat(dav),_49a,_49b,_49c,_49d,_49e,_49f,_4a0,_4a1,_4a2,isIE,isFF,_4a3,_4a4,_4a5,_4a6;if(dua.indexOf(\"AdobeAIR\")>=0){_49b=1;}_49c=(dav.indexOf(\"Konqueror\")>=0)?tv:0;_49d=parseFloat(dua.split(\"WebKit/\")[1])||undefined;_49e=parseFloat(dua.split(\"Chrome/\")[1])||undefined;_49f=dav.indexOf(\"Macintosh\")>=0;_4a4=/iPhone|iPod|iPad/.test(dua);_4a5=parseFloat(dua.split(\"Android \")[1])||undefined;_4a6=typeof opera!=\"undefined\"&&opera.wiiremote;var _4a7=Math.max(dav.indexOf(\"WebKit\"),dav.indexOf(\"Safari\"),0);if(_4a7&&!_49e){_4a0=parseFloat(dav.split(\"Version/\")[1]);if(!_4a0||parseFloat(dav.substr(_4a7+7))<=419.3){_4a0=2;}}if(!has(\"dojo-webkit\")){if(dua.indexOf(\"Opera\")>=0){_49a=tv;if(_49a>=9.8){_49a=parseFloat(dua.split(\"Version/\")[1])||tv;}}if(dua.indexOf(\"Gecko\")>=0&&!_49c&&!_49d){_4a1=_4a2=tv;}if(_4a2){isFF=parseFloat(dua.split(\"Firefox/\")[1]||dua.split(\"Minefield/\")[1])||undefined;}if(document.all&&!_49a){isIE=parseFloat(dav.split(\"MSIE \")[1])||undefined;var mode=document.documentMode;if(mode&&mode!=5&&Math.floor(isIE)!=mode){isIE=mode;}}}_4a3=document.compatMode==\"BackCompat\";_499(\"opera\",dojo.isOpera=_49a);_499(\"air\",dojo.isAIR=_49b);_499(\"khtml\",dojo.isKhtml=_49c);_499(\"webkit\",dojo.isWebKit=_49d);_499(\"chrome\",dojo.isChrome=_49e);_499(\"mac\",dojo.isMac=_49f);_499(\"safari\",dojo.isSafari=_4a0);_499(\"mozilla\",dojo.isMozilla=dojo.isMoz=_4a1);_499(\"ie\",dojo.isIE=isIE);_499(\"ff\",dojo.isFF=isFF);_499(\"quirks\",dojo.isQuirks=_4a3);_499(\"ios\",dojo.isIos=_4a4);_499(\"android\",dojo.isAndroid=_4a5);dojo.locale=dojo.locale||(isIE?n.userLanguage:n.language).toLowerCase();return has;});},\"dojo/_base/array\":function(){define([\"./kernel\",\"../has\",\"./lang\"],function(dojo,has,lang){var _4a8={},u,_4a9;function _4aa(){_4a8={};};function _4ab(fn){return _4a8[fn]=new Function(\"item\",\"index\",\"array\",fn);};function _4ac(some){var _4ad=!some;return function(a,fn,o){var i=0,l=a&&a.length||0,_4ae;if(l&&typeof a==\"string\"){a=a.split(\"\");}if(typeof fn==\"string\"){fn=_4a8[fn]||_4ab(fn);}if(o){for(;i<l;++i){_4ae=!fn.call(o,a[i],i,a);if(some^_4ae){return !_4ae;}}}else{for(;i<l;++i){_4ae=!fn(a[i],i,a);if(some^_4ae){return !_4ae;}}}return _4ad;};};function _4af(up){var _4b0=1,_4b1=0,_4b2=0;if(!up){_4b0=_4b1=_4b2=-1;}return function(a,x,from,last){if(last&&_4b0>0){return _4a9.lastIndexOf(a,x,from);}var l=a&&a.length||0,end=up?l+_4b2:_4b1,i;if(from===u){i=up?_4b1:l+_4b2;}else{if(from<0){i=l+from;if(i<0){i=_4b1;}}else{i=from>=l?l+_4b2:from;}}if(l&&typeof a==\"string\"){a=a.split(\"\");}for(;i!=end;i+=_4b0){if(a[i]==x){return i;}}return -1;};};function _4b3(a,fn,o){var i=0,l=a&&a.length||0;if(l&&typeof a==\"string\"){a=a.split(\"\");}if(typeof fn==\"string\"){fn=_4a8[fn]||_4ab(fn);}if(o){for(;i<l;++i){fn.call(o,a[i],i,a);}}else{for(;i<l;++i){fn(a[i],i,a);}}};function map(a,fn,o,Ctr){var i=0,l=a&&a.length||0,out=new (Ctr||Array)(l);if(l&&typeof a==\"string\"){a=a.split(\"\");}if(typeof fn==\"string\"){fn=_4a8[fn]||_4ab(fn);}if(o){for(;i<l;++i){out[i]=fn.call(o,a[i],i,a);}}else{for(;i<l;++i){out[i]=fn(a[i],i,a);}}return out;};function _4b4(a,fn,o){var i=0,l=a&&a.length||0,out=[],_4b5;if(l&&typeof a==\"string\"){a=a.split(\"\");}if(typeof fn==\"string\"){fn=_4a8[fn]||_4ab(fn);}if(o){for(;i<l;++i){_4b5=a[i];if(fn.call(o,_4b5,i,a)){out.push(_4b5);}}}else{for(;i<l;++i){_4b5=a[i];if(fn(_4b5,i,a)){out.push(_4b5);}}}return out;};_4a9={every:_4ac(false),some:_4ac(true),indexOf:_4af(true),lastIndexOf:_4af(false),forEach:_4b3,map:map,filter:_4b4,clearCache:_4aa};1&&lang.mixin(dojo,_4a9);return _4a9;});},\"dojo/_base/json\":function(){define([\"./kernel\",\"../json\"],function(dojo,json){dojo.fromJson=function(js){return eval(\"(\"+js+\")\");};dojo._escapeString=json.stringify;dojo.toJsonIndentStr=\"\\t\";dojo.toJson=function(it,_4b6){return json.stringify(it,function(key,_4b7){if(_4b7){var tf=_4b7.__json__||_4b7.json;if(typeof tf==\"function\"){return tf.call(_4b7);}}return _4b7;},_4b6&&dojo.toJsonIndentStr);};return dojo;});},\"dojo/_base/window\":function(){define(\"dojo/_base/window\",[\"./kernel\",\"../has\",\"./sniff\"],function(dojo,has){dojo.doc=this[\"document\"]||null;dojo.body=function(){return dojo.doc.body||dojo.doc.getElementsByTagName(\"body\")[0];};dojo.setContext=function(_4b8,_4b9){dojo.global=ret.global=_4b8;dojo.doc=ret.doc=_4b9;};dojo.withGlobal=function(_4ba,_4bb,_4bc,_4bd){var _4be=dojo.global;try{dojo.global=ret.global=_4ba;return dojo.withDoc.call(null,_4ba.document,_4bb,_4bc,_4bd);}finally{dojo.global=ret.global=_4be;}};dojo.withDoc=function(_4bf,_4c0,_4c1,_4c2){var _4c3=dojo.doc,oldQ=dojo.isQuirks,_4c4=dojo.isIE,isIE,mode,pwin;try{dojo.doc=ret.doc=_4bf;dojo.isQuirks=has.add(\"quirks\",dojo.doc.compatMode==\"BackCompat\",true,true);if(has(\"ie\")){if((pwin=_4bf.parentWindow)&&pwin.navigator){isIE=parseFloat(pwin.navigator.appVersion.split(\"MSIE \")[1])||undefined;mode=_4bf.documentMode;if(mode&&mode!=5&&Math.floor(isIE)!=mode){isIE=mode;}dojo.isIE=has.add(\"ie\",isIE,true,true);}}if(_4c1&&typeof _4c0==\"string\"){_4c0=_4c1[_4c0];}return _4c0.apply(_4c1,_4c2||[]);}finally{dojo.doc=ret.doc=_4c3;dojo.isQuirks=has.add(\"quirks\",oldQ,true,true);dojo.isIE=has.add(\"ie\",_4c4,true,true);}};var ret={global:dojo.global,doc:dojo.doc,body:dojo.body,setContext:dojo.setContext,withGlobal:dojo.withGlobal,withDoc:dojo.withDoc};return ret;});},\"dojo/dom-class\":function(){define([\"./_base/lang\",\"./_base/array\",\"./dom\"],function(lang,_4c5,dom){var _4c6=\"className\";var cls,_4c7=/\\s+/,a1=[\"\"];function _4c8(s){if(typeof s==\"string\"||s instanceof String){if(s&&!_4c7.test(s)){a1[0]=s;return a1;}var a=s.split(_4c7);if(a.length&&!a[0]){a.shift();}if(a.length&&!a[a.length-1]){a.pop();}return a;}if(!s){return [];}return _4c5.filter(s,function(x){return x;});};var _4c9={};cls={contains:function containsClass(node,_4ca){return ((\" \"+dom.byId(node)[_4c6]+\" \").indexOf(\" \"+_4ca+\" \")>=0);},add:function addClass(node,_4cb){node=dom.byId(node);_4cb=_4c8(_4cb);var cls=node[_4c6],_4cc;cls=cls?\" \"+cls+\" \":\" \";_4cc=cls.length;for(var i=0,len=_4cb.length,c;i<len;++i){c=_4cb[i];if(c&&cls.indexOf(\" \"+c+\" \")<0){cls+=c+\" \";}}if(_4cc<cls.length){node[_4c6]=cls.substr(1,cls.length-2);}},remove:function removeClass(node,_4cd){node=dom.byId(node);var cls;if(_4cd!==undefined){_4cd=_4c8(_4cd);cls=\" \"+node[_4c6]+\" \";for(var i=0,len=_4cd.length;i<len;++i){cls=cls.replace(\" \"+_4cd[i]+\" \",\" \");}cls=lang.trim(cls);}else{cls=\"\";}if(node[_4c6]!=cls){node[_4c6]=cls;}},replace:function replaceClass(node,_4ce,_4cf){node=dom.byId(node);_4c9[_4c6]=node[_4c6];cls.remove(_4c9,_4cf);cls.add(_4c9,_4ce);if(node[_4c6]!==_4c9[_4c6]){node[_4c6]=_4c9[_4c6];}},toggle:function toggleClass(node,_4d0,_4d1){node=dom.byId(node);if(_4d1===undefined){_4d0=_4c8(_4d0);for(var i=0,len=_4d0.length,c;i<len;++i){c=_4d0[i];cls[cls.contains(node,c)?\"remove\":\"add\"](node,c);}}else{cls[_4d1?\"add\":\"remove\"](node,_4d0);}return _4d1;}};return cls;});},\"dojo/_base/config\":function(){define([\"../has\",\"require\"],function(has,_4d2){var _4d3={};if(1){var src=_4d2.rawConfig,p;for(p in src){_4d3[p]=src[p];}}else{var _4d4=function(_4d5,_4d6,_4d7){for(p in _4d5){p!=\"has\"&&has.add(_4d6+p,_4d5[p],0,_4d7);}};_4d3=1?_4d2.rawConfig:this.dojoConfig||this.djConfig||{};_4d4(_4d3,\"config\",1);_4d4(_4d3.has,\"\",1);}return _4d3;});},\"dojo/_base/event\":function(){define(\"dojo/_base/event\",[\"./kernel\",\"../on\",\"../has\",\"../dom-geometry\"],function(dojo,on,has,dom){if(on._fixEvent){var _4d8=on._fixEvent;on._fixEvent=function(evt,se){evt=_4d8(evt,se);if(evt){dom.normalizeEvent(evt);}return evt;};}dojo.fixEvent=function(evt,_4d9){if(on._fixEvent){return on._fixEvent(evt,_4d9);}return evt;};dojo.stopEvent=function(evt){if(has(\"dom-addeventlistener\")||(evt&&evt.preventDefault)){evt.preventDefault();evt.stopPropagation();}else{evt=evt||window.event;evt.cancelBubble=true;on._preventDefault.call(evt);}};return {fix:dojo.fixEvent,stop:dojo.stopEvent};});},\"dojo/main\":function(){define([\"./_base/kernel\",\"./has\",\"require\",\"./_base/sniff\",\"./_base/lang\",\"./_base/array\",\"./ready\",\"./_base/declare\",\"./_base/connect\",\"./_base/Deferred\",\"./_base/json\",\"./_base/Color\",\"./has!dojo-firebug?./_firebug/firebug\",\"./_base/browser\",\"./_base/loader\"],function(dojo,has,_4da,_4db,lang,_4dc,_4dd){if(dojo.config.isDebug){_4da([\"./_firebug/firebug\"]);}true||has.add(\"dojo-config-require\",1);if(1){var deps=dojo.config.require;if(deps){deps=_4dc.map(lang.isArray(deps)?deps:[deps],function(item){return item.replace(/\\./g,\"/\");});if(dojo.isAsync){_4da(deps);}else{_4dd(1,function(){_4da(deps);});}}}return dojo;});},\"dojo/ready\":function(){define(\"dojo/ready\",[\"./_base/kernel\",\"./has\",\"require\",\"./domReady\",\"./_base/lang\"],function(dojo,has,_4de,_4df,lang){var _4e0=0,_4e1,_4e2=[],_4e3=0,_4e4=function(){_4e0=1;dojo._postLoad=dojo.config.afterOnLoad=true;if(_4e2.length){_4e1(_4e5);}},_4e5=function(){if(_4e0&&!_4e3&&_4e2.length){_4e3=1;var f=_4e2.shift();try{f();}finally{_4e3=0;}_4e3=0;if(_4e2.length){_4e1(_4e5);}}};if(1){_4de.on(\"idle\",_4e5);_4e1=function(){if(_4de.idle()){_4e5();}};}else{_4e1=function(){_4de.ready(_4e5);};}var _4e6=dojo.ready=dojo.addOnLoad=function(_4e7,_4e8,_4e9){var _4ea=lang._toArray(arguments);if(typeof _4e7!=\"number\"){_4e9=_4e8;_4e8=_4e7;_4e7=1000;}else{_4ea.shift();}_4e9=_4e9?lang.hitch.apply(dojo,_4ea):function(){_4e8();};_4e9.priority=_4e7;for(var i=0;i<_4e2.length&&_4e7>=_4e2[i].priority;i++){}_4e2.splice(i,0,_4e9);_4e1();};true||has.add(\"dojo-config-addOnLoad\",1);if(1){var dca=dojo.config.addOnLoad;if(dca){_4e6[(lang.isArray(dca)?\"apply\":\"call\")](dojo,dca);}}if(1&&dojo.config.parseOnLoad&&!dojo.isAsync){_4e6(99,function(){if(!dojo.parser){dojo.deprecated(\"Add explicit require(['dojo/parser']);\",\"\",\"2.0\");_4de([\"dojo/parser\"]);}});}if(1){_4df(_4e4);}else{_4e4();}return _4e6;});},\"dojo/aspect\":function(){define(\"dojo/aspect\",[],function(){\"use strict\";var _4eb=0;function _4ec(_4ed,type,_4ee,_4ef){var _4f0=_4ed[type];var _4f1=type==\"around\";var _4f2;if(_4f1){var _4f3=_4ee(function(){return _4f0.advice(this,arguments);});_4f2={remove:function(){_4f2.cancelled=true;},advice:function(_4f4,args){return _4f2.cancelled?_4f0.advice(_4f4,args):_4f3.apply(_4f4,args);}};}else{_4f2={remove:function(){var _4f5=_4f2.previous;var next=_4f2.next;if(!next&&!_4f5){delete _4ed[type];}else{if(_4f5){_4f5.next=next;}else{_4ed[type]=next;}if(next){next.previous=_4f5;}}},id:_4eb++,advice:_4ee,receiveArguments:_4ef};}if(_4f0&&!_4f1){if(type==\"after\"){var next=_4f0;while(next){_4f0=next;next=next.next;}_4f0.next=_4f2;_4f2.previous=_4f0;}else{if(type==\"before\"){_4ed[type]=_4f2;_4f2.next=_4f0;_4f0.previous=_4f2;}}}else{_4ed[type]=_4f2;}return _4f2;};function _4f6(type){return function(_4f7,_4f8,_4f9,_4fa){var _4fb=_4f7[_4f8],_4fc;if(!_4fb||_4fb.target!=_4f7){_4f7[_4f8]=_4fc=function(){var _4fd=_4eb;var args=arguments;var _4fe=_4fc.before;while(_4fe){args=_4fe.advice.apply(this,args)||args;_4fe=_4fe.next;}if(_4fc.around){var _4ff=_4fc.around.advice(this,args);}var _500=_4fc.after;while(_500&&_500.id<_4fd){_4ff=_500.receiveArguments?_500.advice.apply(this,args)||_4ff:_500.advice.call(this,_4ff);_500=_500.next;}return _4ff;};if(_4fb){_4fc.around={advice:function(_501,args){return _4fb.apply(_501,args);}};}_4fc.target=_4f7;}var _502=_4ec((_4fc||_4fb),type,_4f9,_4fa);_4f9=null;return _502;};};return {before:_4f6(\"before\"),around:_4f6(\"around\"),after:_4f6(\"after\")};});},\"dojo/_base/connect\":function(){define([\"./kernel\",\"../on\",\"../topic\",\"../aspect\",\"./event\",\"../mouse\",\"./sniff\",\"./lang\",\"../keys\"],function(_503,on,hub,_504,_505,_506,has,lang){has.add(\"events-keypress-typed\",function(){var _507={charCode:0};try{_507=document.createEvent(\"KeyboardEvent\");(_507.initKeyboardEvent||_507.initKeyEvent).call(_507,\"keypress\",true,true,null,false,false,false,false,9,3);}catch(e){}return _507.charCode==0&&!has(\"opera\");});function _508(obj,_509,_50a,_50b,_50c){_50b=lang.hitch(_50a,_50b);if(!obj||!(obj.addEventListener||obj.attachEvent)){return _504.after(obj||_503.global,_509,_50b,true);}if(typeof _509==\"string\"&&_509.substring(0,2)==\"on\"){_509=_509.substring(2);}if(!obj){obj=_503.global;}if(!_50c){switch(_509){case \"keypress\":_509=_50d;break;case \"mouseenter\":_509=_506.enter;break;case \"mouseleave\":_509=_506.leave;break;}}return on(obj,_509,_50b,_50c);};var _50e={106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39,229:113};var _50f=has(\"mac\")?\"metaKey\":\"ctrlKey\";var _510=function(evt,_511){var faux=lang.mixin({},evt,_511);_512(faux);faux.preventDefault=function(){evt.preventDefault();};faux.stopPropagation=function(){evt.stopPropagation();};return faux;};function _512(evt){evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):\"\";evt.charOrCode=evt.keyChar||evt.keyCode;};var _50d;if(has(\"events-keypress-typed\")){var _513=function(e,code){try{return (e.keyCode=code);}catch(e){return 0;}};_50d=function(_514,_515){var _516=on(_514,\"keydown\",function(evt){var k=evt.keyCode;var _517=(k!=13||(has(\"ie\")>=9&&!has(\"quirks\")))&&k!=32&&(k!=27||!has(\"ie\"))&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222)&&k!=229;if(_517||evt.ctrlKey){var c=_517?0:k;if(evt.ctrlKey){if(k==3||k==13){return _515.call(evt.currentTarget,evt);}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=_50e[c]||c;}}}}var faux=_510(evt,{type:\"keypress\",faux:true,charCode:c});_515.call(evt.currentTarget,faux);if(has(\"ie\")){_513(evt,faux.keyCode);}}});var _518=on(_514,\"keypress\",function(evt){var c=evt.charCode;c=c>=32?c:0;evt=_510(evt,{charCode:c,faux:true});return _515.call(this,evt);});return {remove:function(){_516.remove();_518.remove();}};};}else{if(has(\"opera\")){_50d=function(_519,_51a){return on(_519,\"keypress\",function(evt){var c=evt.which;if(c==3){c=99;}c=c<32&&!evt.shiftKey?0:c;if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){c+=32;}return _51a.call(this,_510(evt,{charCode:c}));});};}else{_50d=function(_51b,_51c){return on(_51b,\"keypress\",function(evt){_512(evt);return _51c.call(this,evt);});};}}var _51d={_keypress:_50d,connect:function(obj,_51e,_51f,_520,_521){var a=arguments,args=[],i=0;args.push(typeof a[0]==\"string\"?null:a[i++],a[i++]);var a1=a[i+1];args.push(typeof a1==\"string\"||typeof a1==\"function\"?a[i++]:null,a[i++]);for(var l=a.length;i<l;i++){args.push(a[i]);}return _508.apply(this,args);},disconnect:function(_522){if(_522){_522.remove();}},subscribe:function(_523,_524,_525){return hub.subscribe(_523,lang.hitch(_524,_525));},publish:function(_526,args){return hub.publish.apply(hub,[_526].concat(args));},connectPublisher:function(_527,obj,_528){var pf=function(){_51d.publish(_527,arguments);};return _528?_51d.connect(obj,_528,pf):_51d.connect(obj,pf);},isCopyKey:function(e){return e[_50f];}};_51d.unsubscribe=_51d.disconnect;1&&lang.mixin(_503,_51d);return _51d;});}}});(function(){var _529=this.require;_529({cache:{}});!_529.async&&_529([\"dojo\"]);_529.boot&&_529.apply(null,_529.boot);})();\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/easeljs-0.4.2.min.js.download",
    "content": "/*\n* EaselJS\n* Visit http://createjs.com/ for documentation, updates and examples.\n*\n* Copyright (c) 2011 gskinner.com, inc.\n* \n* Distributed under the terms of the MIT license.\n* http://www.opensource.org/licenses/mit-license.html\n*\n* This notice shall be included in all copies or substantial portions of the Software.\n*/\n(function(j){var c=function(){throw\"UID cannot be instantiated\";};c._nextID=0;c.get=function(){return c._nextID++};j.UID=c})(window);(function(j){var c=function(){throw\"Ticker cannot be instantiated.\";};c.useRAF=null;c.animationTarget=null;c._listeners=null;c._pauseable=null;c._paused=false;c._inited=false;c._startTime=0;c._pausedTime=0;c._ticks=0;c._pausedTickers=0;c._interval=50;c._lastTime=0;c._times=null;c._tickTimes=null;c._rafActive=false;c._timeoutID=null;c.addListener=function(a,b){a!=null&&(c._inited||c.init(),c.removeListener(a),c._pauseable[c._listeners.length]=b==null?true:b,c._listeners.push(a))};c.init=function(){c._inited=\ntrue;c._times=[];c._tickTimes=[];c._pauseable=[];c._listeners=[];c._times.push(c._lastTime=c._startTime=c._getTime());c.setInterval(c._interval)};c.removeListener=function(a){c._listeners!=null&&(a=c._listeners.indexOf(a),a!=-1&&(c._listeners.splice(a,1),c._pauseable.splice(a,1)))};c.removeAllListeners=function(){c._listeners=[];c._pauseable=[]};c.setInterval=function(a){c._interval=a;c._inited&&c._setupTick()};c.getInterval=function(){return c._interval};c.setFPS=function(a){c.setInterval(1E3/a)};\nc.getFPS=function(){return 1E3/c._interval};c.getMeasuredFPS=function(a){if(c._times.length<2)return-1;a==null&&(a=c.getFPS()|0);a=Math.min(c._times.length-1,a);return 1E3/((c._times[0]-c._times[a])/a)};c.setPaused=function(a){c._paused=a};c.getPaused=function(){return c._paused};c.getTime=function(a){return c._getTime()-c._startTime-(a?c._pausedTime:0)};c.getTicks=function(a){return c._ticks-(a?c._pausedTickers:0)};c._handleAF=function(a){c._rafActive=false;c._setupTick();a-c._lastTime>=c._interval-\n1&&c._tick()};c._handleTimeout=function(){c.timeoutID=null;c._setupTick();c._tick()};c._setupTick=function(){if(!(c._rafActive||c.timeoutID!=null)){if(c.useRAF){var a=j.requestAnimationFrame||j.webkitRequestAnimationFrame||j.mozRequestAnimationFrame||j.oRequestAnimationFrame||j.msRequestAnimationFrame;if(a){a(c._handleAF,c.animationTarget);c._rafActive=true;return}}c.timeoutID=setTimeout(c._handleTimeout,c._interval)}};c._tick=function(){c._ticks++;var a=c._getTime(),b=a-c._lastTime,p=c._paused;p&&\n(c._pausedTickers++,c._pausedTime+=b);c._lastTime=a;for(var h=c._pauseable,e=c._listeners.slice(),d=e?e.length:0,f=0;f<d;f++){var g=e[f];g==null||p&&h[f]||(g.tick?g.tick(b,p):g instanceof Function&&g(b,p))}for(c._tickTimes.unshift(c._getTime()-a);c._tickTimes.length>100;)c._tickTimes.pop();for(c._times.unshift(a);c._times.length>100;)c._times.pop()};c._getTime=function(){return(new Date).getTime()};j.Ticker=c})(window);(function(j){var c=function(b,a,h,c,d){this.initialize(b,a,h,c,d)},a=c.prototype;a.stageX=0;a.stageY=0;a.type=null;a.nativeEvent=null;a.onMouseMove=null;a.onMouseUp=null;a.target=null;a.initialize=function(b,a,h,c,d){this.type=b;this.stageX=a;this.stageY=h;this.target=c;this.nativeEvent=d};a.clone=function(){return new c(this.type,this.stageX,this.stageY,this.target,this.nativeEvent)};a.toString=function(){return\"[MouseEvent (type=\"+this.type+\" stageX=\"+this.stageX+\" stageY=\"+this.stageY+\")]\"};j.MouseEvent=\nc})(window);(function(j){var c=function(b,a,h,c,d,f){this.initialize(b,a,h,c,d,f)},a=c.prototype;c.identity=null;c.DEG_TO_RAD=Math.PI/180;a.a=1;a.b=0;a.c=0;a.d=1;a.tx=0;a.ty=0;a.alpha=1;a.shadow=null;a.compositeOperation=null;a.initialize=function(b,a,h,c,d,f){if(b!=null)this.a=b;this.b=a||0;this.c=h||0;if(c!=null)this.d=c;this.tx=d||0;this.ty=f||0};a.prepend=function(b,a,h,c,d,f){var g=this.tx;if(b!=1||a!=0||h!=0||c!=1){var k=this.a,i=this.c;this.a=k*b+this.b*h;this.b=k*a+this.b*c;this.c=i*b+this.d*h;this.d=\ni*a+this.d*c}this.tx=g*b+this.ty*h+d;this.ty=g*a+this.ty*c+f};a.append=function(b,a,h,c,d,f){var g=this.a,k=this.b,i=this.c,l=this.d;this.a=b*g+a*i;this.b=b*k+a*l;this.c=h*g+c*i;this.d=h*k+c*l;this.tx=d*g+f*i+this.tx;this.ty=d*k+f*l+this.ty};a.prependMatrix=function(b){this.prepend(b.a,b.b,b.c,b.d,b.tx,b.ty);this.prependProperties(b.alpha,b.shadow,b.compositeOperation)};a.appendMatrix=function(b){this.append(b.a,b.b,b.c,b.d,b.tx,b.ty);this.appendProperties(b.alpha,b.shadow,b.compositeOperation)};\na.prependTransform=function(b,a,h,e,d,f,g,k,i){if(d%360)var l=d*c.DEG_TO_RAD,d=Math.cos(l),l=Math.sin(l);else d=1,l=0;if(k||i)this.tx-=k,this.ty-=i;f||g?(f*=c.DEG_TO_RAD,g*=c.DEG_TO_RAD,this.prepend(d*h,l*h,-l*e,d*e,0,0),this.prepend(Math.cos(g),Math.sin(g),-Math.sin(f),Math.cos(f),b,a)):this.prepend(d*h,l*h,-l*e,d*e,b,a)};a.appendTransform=function(b,a,h,e,d,f,g,k,i){if(d%360)var l=d*c.DEG_TO_RAD,d=Math.cos(l),l=Math.sin(l);else d=1,l=0;f||g?(f*=c.DEG_TO_RAD,g*=c.DEG_TO_RAD,this.append(Math.cos(g),\nMath.sin(g),-Math.sin(f),Math.cos(f),b,a),this.append(d*h,l*h,-l*e,d*e,0,0)):this.append(d*h,l*h,-l*e,d*e,b,a);if(k||i)this.tx-=k*this.a+i*this.c,this.ty-=k*this.b+i*this.d};a.rotate=function(b){var a=Math.cos(b),b=Math.sin(b),h=this.a,c=this.c,d=this.tx;this.a=h*a-this.b*b;this.b=h*b+this.b*a;this.c=c*a-this.d*b;this.d=c*b+this.d*a;this.tx=d*a-this.ty*b;this.ty=d*b+this.ty*a};a.skew=function(b,a){b*=c.DEG_TO_RAD;a*=c.DEG_TO_RAD;this.append(Math.cos(a),Math.sin(a),-Math.sin(b),Math.cos(b),0,0)};a.scale=\nfunction(b,a){this.a*=b;this.d*=a;this.tx*=b;this.ty*=a};a.translate=function(b,a){this.tx+=b;this.ty+=a};a.identity=function(){this.alpha=this.a=this.d=1;this.b=this.c=this.tx=this.ty=0;this.shadow=this.compositeOperation=null};a.invert=function(){var b=this.a,a=this.b,h=this.c,c=this.d,d=this.tx,f=b*c-a*h;this.a=c/f;this.b=-a/f;this.c=-h/f;this.d=b/f;this.tx=(h*this.ty-c*d)/f;this.ty=-(b*this.ty-a*d)/f};a.isIdentity=function(){return this.tx==0&&this.ty==0&&this.a==1&&this.b==0&&this.c==0&&this.d==\n1};a.decompose=function(b){b==null&&(b={});b.x=this.tx;b.y=this.ty;b.scaleX=Math.sqrt(this.a*this.a+this.b*this.b);b.scaleY=Math.sqrt(this.c*this.c+this.d*this.d);var a=Math.atan2(-this.c,this.d),h=Math.atan2(this.b,this.a);a==h?(b.rotation=h/c.DEG_TO_RAD,this.a<0&&this.d>=0&&(b.rotation+=b.rotation<=0?180:-180),b.skewX=b.skewY=0):(b.skewX=a/c.DEG_TO_RAD,b.skewY=h/c.DEG_TO_RAD);return b};a.reinitialize=function(b,a,h,c,d,f,g,k,i){this.initialize(b,a,h,c,d,f);this.alpha=g||1;this.shadow=k;this.compositeOperation=\ni;return this};a.appendProperties=function(b,a,h){this.alpha*=b;this.shadow=a||this.shadow;this.compositeOperation=h||this.compositeOperation};a.prependProperties=function(b,a,h){this.alpha*=b;this.shadow=this.shadow||a;this.compositeOperation=this.compositeOperation||h};a.clone=function(){var b=new c(this.a,this.b,this.c,this.d,this.tx,this.ty);b.shadow=this.shadow;b.alpha=this.alpha;b.compositeOperation=this.compositeOperation;return b};a.toString=function(){return\"[Matrix2D (a=\"+this.a+\" b=\"+this.b+\n\" c=\"+this.c+\" d=\"+this.d+\" tx=\"+this.tx+\" ty=\"+this.ty+\")]\"};c.identity=new c(1,0,0,1,0,0);j.Matrix2D=c})(window);(function(j){var c=function(b,a){this.initialize(b,a)},a=c.prototype;a.x=0;a.y=0;a.initialize=function(b,a){this.x=b==null?0:b;this.y=a==null?0:a};a.clone=function(){return new c(this.x,this.y)};a.toString=function(){return\"[Point (x=\"+this.x+\" y=\"+this.y+\")]\"};j.Point=c})(window);(function(j){var c=function(b,a,h,c){this.initialize(b,a,h,c)},a=c.prototype;a.x=0;a.y=0;a.width=0;a.height=0;a.initialize=function(b,a,c,e){this.x=b==null?0:b;this.y=a==null?0:a;this.width=c==null?0:c;this.height=e==null?0:e};a.clone=function(){return new c(this.x,this.y,this.width,this.height)};a.toString=function(){return\"[Rectangle (x=\"+this.x+\" y=\"+this.y+\" width=\"+this.width+\" height=\"+this.height+\")]\"};j.Rectangle=c})(window);(function(j){var c=function(b,a,c,e){this.initialize(b,a,c,e)},a=c.prototype;c.identity=null;a.color=null;a.offsetX=0;a.offsetY=0;a.blur=0;a.initialize=function(b,a,c,e){this.color=b;this.offsetX=a;this.offsetY=c;this.blur=e};a.toString=function(){return\"[Shadow]\"};a.clone=function(){return new c(this.color,this.offsetX,this.offsetY,this.blur)};c.identity=new c(\"transparent\",0,0,0);j.Shadow=c})(window);(function(j){var c=function(b){this.initialize(b)},a=c.prototype;a.complete=true;a.onComplete=null;a._animations=null;a._frames=null;a._images=null;a._data=null;a._loadCount=0;a._frameHeight=0;a._frameWidth=0;a._numFrames=0;a._regX=0;a._regY=0;a.initialize=function(b){var a,c,e;if(b!=null){if(b.images&&(c=b.images.length)>0){e=this._images=[];for(a=0;a<c;a++){var d=b.images[a];if(!(d instanceof Image)){var f=d,d=new Image;d.src=f}e.push(d);if(!d.getContext&&!d.complete)this._loadCount++,this.complete=\nfalse,function(b){d.onload=function(){b._handleImageLoad()}}(this)}}if(b.frames!=null)if(b.frames instanceof Array){this._frames=[];e=b.frames;for(a=0,c=e.length;a<c;a++)f=e[a],this._frames.push({image:this._images[f[4]?f[4]:0],rect:new Rectangle(f[0],f[1],f[2],f[3]),regX:f[5]||0,regY:f[6]||0})}else c=b.frames,this._frameWidth=c.width,this._frameHeight=c.height,this._regX=c.regX||0,this._regY=c.regY||0,this._numFrames=c.count,this._loadCount==0&&this._calculateFrames();if((c=b.animations)!=null){this._animations=\n[];this._data={};for(var g in c){b={name:g};f=c[g];if(isNaN(f))if(f instanceof Array){b.frequency=f[3];b.next=f[2];e=b.frames=[];for(a=f[0];a<=f[1];a++)e.push(a)}else b.frequency=f.frequency,b.next=f.next,e=b.frames=f.frames.slice(0);else e=b.frames=[f];b.next=e.length<2||b.next==false?null:b.next==null||b.next==true?g:b.next;if(!b.frequency)b.frequency=1;this._animations.push(g);this._data[g]=b}}}};a.getNumFrames=function(b){return b==null?this._frames?this._frames.length:this._numFrames:(b=this._data[b],\nb==null?0:b.frames.length)};a.getAnimations=function(){return this._animations.slice(0)};a.getAnimation=function(b){return this._data[b]};a.getFrame=function(b){return this.complete&&this._frames&&(frame=this._frames[b])?frame:null};a.toString=function(){return\"[SpriteSheet]\"};a.clone=function(){var b=new c;b.complete=this.complete;b._animations=this._animations;b._frames=this._frames;b._images=this._images;b._data=this._data;b._frameHeight=this._frameHeight;b._frameWidth=this._frameWidth;b._numFrames=\nthis._numFrames;b._loadCount=this._loadCount;return b};a._handleImageLoad=function(){if(--this._loadCount==0)this._calculateFrames(),this.complete=true,this.onComplete&&this.onComplete()};a._calculateFrames=function(){if(!(this._frames||this._frameWidth==0)){this._frames=[];for(var b=0,a=this._frameWidth,c=this._frameHeight,e=0,d=this._images;e<d.length;e++){for(var f=d[e],g=(f.width+1)/a|0,k=(f.height+1)/c|0,k=this._numFrames>0?Math.min(this._numFrames-b,g*k):g*k,i=0;i<k;i++)this._frames.push({image:f,\nrect:new Rectangle(i%g*a,(i/g|0)*c,a,c),regX:this._regX,regY:this._regY});b+=k}this._numFrames=b}};j.SpriteSheet=c})(window);(function(j){function c(b,a){this.f=b;this.params=a}c.prototype.exec=function(b){this.f.apply(b,this.params)};var a=function(){this.initialize()},b=a.prototype;a.getRGB=function(b,a,c,d){b!=null&&c==null&&(d=a,c=b&255,a=b>>8&255,b=b>>16&255);return d==null?\"rgb(\"+b+\",\"+a+\",\"+c+\")\":\"rgba(\"+b+\",\"+a+\",\"+c+\",\"+d+\")\"};a.getHSL=function(b,a,c,d){return d==null?\"hsl(\"+b%360+\",\"+a+\"%,\"+c+\"%)\":\"hsla(\"+b%360+\",\"+a+\"%,\"+c+\"%,\"+d+\")\"};a.BASE_64={A:0,B:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,J:9,K:10,L:11,M:12,N:13,O:14,\nP:15,Q:16,R:17,S:18,T:19,U:20,V:21,W:22,X:23,Y:24,Z:25,a:26,b:27,c:28,d:29,e:30,f:31,g:32,h:33,i:34,j:35,k:36,l:37,m:38,n:39,o:40,p:41,q:42,r:43,s:44,t:45,u:46,v:47,w:48,x:49,y:50,z:51,0:52,1:53,2:54,3:55,4:56,5:57,6:58,7:59,8:60,9:61,\"+\":62,\"/\":63};a.STROKE_CAPS_MAP=[\"butt\",\"round\",\"square\"];a.STROKE_JOINTS_MAP=[\"miter\",\"round\",\"bevel\"];a._ctx=document.createElement(\"canvas\").getContext(\"2d\");a.beginCmd=new c(a._ctx.beginPath,[]);a.fillCmd=new c(a._ctx.fill,[]);a.strokeCmd=new c(a._ctx.stroke,[]);\nb._strokeInstructions=null;b._strokeStyleInstructions=null;b._fillInstructions=null;b._instructions=null;b._oldInstructions=null;b._activeInstructions=null;b._active=false;b._dirty=false;b.initialize=function(){this.clear();this._ctx=a._ctx};b.draw=function(b){this._dirty&&this._updateInstructions();for(var a=this._instructions,c=0,d=a.length;c<d;c++)a[c].exec(b)};b.moveTo=function(b,a){this._activeInstructions.push(new c(this._ctx.moveTo,[b,a]));return this};b.lineTo=function(b,a){this._dirty=this._active=\ntrue;this._activeInstructions.push(new c(this._ctx.lineTo,[b,a]));return this};b.arcTo=function(b,a,e,d,f){this._dirty=this._active=true;this._activeInstructions.push(new c(this._ctx.arcTo,[b,a,e,d,f]));return this};b.arc=function(b,a,e,d,f,g){this._dirty=this._active=true;g==null&&(g=false);this._activeInstructions.push(new c(this._ctx.arc,[b,a,e,d,f,g]));return this};b.quadraticCurveTo=function(b,a,e,d){this._dirty=this._active=true;this._activeInstructions.push(new c(this._ctx.quadraticCurveTo,\n[b,a,e,d]));return this};b.bezierCurveTo=function(b,a,e,d,f,g){this._dirty=this._active=true;this._activeInstructions.push(new c(this._ctx.bezierCurveTo,[b,a,e,d,f,g]));return this};b.rect=function(b,a,e,d){this._dirty=this._active=true;this._activeInstructions.push(new c(this._ctx.rect,[b,a,e,d]));return this};b.closePath=function(){if(this._active)this._dirty=true,this._activeInstructions.push(new c(this._ctx.closePath,[]));return this};b.clear=function(){this._instructions=[];this._oldInstructions=\n[];this._activeInstructions=[];this._strokeStyleInstructions=this._strokeInstructions=this._fillInstructions=null;this._active=this._dirty=false;return this};b.beginFill=function(b){this._active&&this._newPath();this._fillInstructions=b?[new c(this._setProp,[\"fillStyle\",b])]:null;return this};b.beginLinearGradientFill=function(b,a,e,d,f,g){this._active&&this._newPath();e=this._ctx.createLinearGradient(e,d,f,g);d=0;for(f=b.length;d<f;d++)e.addColorStop(a[d],b[d]);this._fillInstructions=[new c(this._setProp,\n[\"fillStyle\",e])];return this};b.beginRadialGradientFill=function(b,a,e,d,f,g,k,i){this._active&&this._newPath();e=this._ctx.createRadialGradient(e,d,f,g,k,i);d=0;for(f=b.length;d<f;d++)e.addColorStop(a[d],b[d]);this._fillInstructions=[new c(this._setProp,[\"fillStyle\",e])];return this};b.beginBitmapFill=function(b,a){this._active&&this._newPath();var e=this._ctx.createPattern(b,a||\"\");this._fillInstructions=[new c(this._setProp,[\"fillStyle\",e])];return this};b.endFill=function(){this.beginFill();\nreturn this};b.setStrokeStyle=function(b,h,e,d){this._active&&this._newPath();this._strokeStyleInstructions=[new c(this._setProp,[\"lineWidth\",b==null?\"1\":b]),new c(this._setProp,[\"lineCap\",h==null?\"butt\":isNaN(h)?h:a.STROKE_CAPS_MAP[h]]),new c(this._setProp,[\"lineJoin\",e==null?\"miter\":isNaN(e)?e:a.STROKE_JOINTS_MAP[e]]),new c(this._setProp,[\"miterLimit\",d==null?\"10\":d])];return this};b.beginStroke=function(b){this._active&&this._newPath();this._strokeInstructions=b?[new c(this._setProp,[\"strokeStyle\",\nb])]:null;return this};b.beginLinearGradientStroke=function(b,a,e,d,f,g){this._active&&this._newPath();e=this._ctx.createLinearGradient(e,d,f,g);d=0;for(f=b.length;d<f;d++)e.addColorStop(a[d],b[d]);this._strokeInstructions=[new c(this._setProp,[\"strokeStyle\",e])];return this};b.beginRadialGradientStroke=function(b,a,e,d,f,g,k,i){this._active&&this._newPath();e=this._ctx.createRadialGradient(e,d,f,g,k,i);d=0;for(f=b.length;d<f;d++)e.addColorStop(a[d],b[d]);this._strokeInstructions=[new c(this._setProp,\n[\"strokeStyle\",e])];return this};b.beginBitmapStroke=function(b,a){this._active&&this._newPath();var e=this._ctx.createPattern(b,a||\"\");this._strokeInstructions=[new c(this._setProp,[\"strokeStyle\",e])];return this};b.endStroke=function(){this.beginStroke();return this};b.curveTo=b.quadraticCurveTo;b.drawRect=b.rect;b.drawRoundRect=function(b,a,c,d,f){this.drawRoundRectComplex(b,a,c,d,f,f,f,f);return this};b.drawRoundRectComplex=function(b,a,e,d,f,g,k,i){this._dirty=this._active=true;var l=Math.PI,\nj=this._ctx.arc,m=this._ctx.lineTo;this._activeInstructions.push(new c(this._ctx.moveTo,[b+f,a]),new c(m,[b+e-g,a]),g>=0?new c(j,[b+e-g,a+g,g,-l/2,0]):new c(j,[b+e,a,-g,l,l/2,true]),new c(m,[b+e,a+d-k]),i>=0?new c(j,[b+e-k,a+d-k,k,0,l/2]):new c(j,[b+e,a+d,-k,-l/2,l,true]),new c(m,[b+i,a+d]),i>=0?new c(j,[b+i,a+d-i,i,l/2,l]):new c(j,[b,a+d,-i,0,-l/2,true]),new c(m,[b,a+f]),f>=0?new c(j,[b+f,a+f,f,l,-l/2]):new c(j,[b,a,-f,l/2,0,true]));return this};b.drawCircle=function(b,a,c){this.arc(b,a,c,0,Math.PI*\n2);return this};b.drawEllipse=function(b,a,e,d){this._dirty=this._active=true;var f=e/2*0.5522848,g=d/2*0.5522848,k=b+e,i=a+d,e=b+e/2,d=a+d/2;this._activeInstructions.push(new c(this._ctx.moveTo,[b,d]),new c(this._ctx.bezierCurveTo,[b,d-g,e-f,a,e,a]),new c(this._ctx.bezierCurveTo,[e+f,a,k,d-g,k,d]),new c(this._ctx.bezierCurveTo,[k,d+g,e+f,i,e,i]),new c(this._ctx.bezierCurveTo,[e-f,i,b,d+g,b,d]));return this};b.drawPolyStar=function(b,a,e,d,f,g){this._dirty=this._active=true;f==null&&(f=0);f=1-f;g==\nnull?g=0:g/=180/Math.PI;var k=Math.PI/d;this._activeInstructions.push(new c(this._ctx.moveTo,[b+Math.cos(g)*e,a+Math.sin(g)*e]));for(var i=0;i<d;i++)g+=k,f!=1&&this._activeInstructions.push(new c(this._ctx.lineTo,[b+Math.cos(g)*e*f,a+Math.sin(g)*e*f])),g+=k,this._activeInstructions.push(new c(this._ctx.lineTo,[b+Math.cos(g)*e,a+Math.sin(g)*e]));return this};b.p=b.decodePath=function(b){for(var c=[this.moveTo,this.lineTo,this.quadraticCurveTo,this.bezierCurveTo],e=[2,2,4,6],d=0,f=b.length,g=[],k=0,\ni=0,l=a.BASE_64;d<f;){var j=l[b.charAt(d)],m=j>>3,q=c[m];if(!q||j&3)throw\"bad path data\";var r=e[m];m||(k=i=0);g.length=0;d++;j=(j>>2&1)+2;for(m=0;m<r;m++){var n=l[b.charAt(d)],s=n>>5?-1:1,n=(n&31)<<6|l[b.charAt(d+1)];j==3&&(n=n<<6|l[b.charAt(d+2)]);n=s*n/10;m%2?k=n+=k:i=n+=i;g[m]=n;d+=j}q.apply(this,g)}return this};b.clone=function(){var b=new a;b._instructions=this._instructions.slice();b._activeInstructions=this._activeInstructions.slice();b._oldInstructions=this._oldInstructions.slice();if(this._fillInstructions)b._fillInstructions=\nthis._fillInstructions.slice();if(this._strokeInstructions)b._strokeInstructions=this._strokeInstructions.slice();if(this._strokeStyleInstructions)b._strokeStyleInstructions=this._strokeStyleInstructions.slice();b._active=this._active;b._dirty=this._dirty;return b};b.toString=function(){return\"[Graphics]\"};b.mt=b.moveTo;b.lt=b.lineTo;b.at=b.arcTo;b.bt=b.bezierCurveTo;b.qt=b.quadraticCurveTo;b.a=b.arc;b.r=b.rect;b.cp=b.closePath;b.c=b.clear;b.f=b.beginFill;b.lf=b.beginLinearGradientFill;b.rf=b.beginRadialGradientFill;\nb.bf=b.beginBitmapFill;b.ef=b.endFill;b.ss=b.setStrokeStyle;b.s=b.beginStroke;b.ls=b.beginLinearGradientStroke;b.rs=b.beginRadialGradientStroke;b.bs=b.beginBitmapStroke;b.es=b.endStroke;b.dr=b.drawRect;b.rr=b.drawRoundRect;b.rc=b.drawRoundRectComplex;b.dc=b.drawCircle;b.de=b.drawEllipse;b.dp=b.drawPolyStar;b._updateInstructions=function(){this._instructions=this._oldInstructions.slice();this._instructions.push(a.beginCmd);this._fillInstructions&&this._instructions.push.apply(this._instructions,this._fillInstructions);\nthis._strokeInstructions&&(this._instructions.push.apply(this._instructions,this._strokeInstructions),this._strokeStyleInstructions&&this._instructions.push.apply(this._instructions,this._strokeStyleInstructions));this._instructions.push.apply(this._instructions,this._activeInstructions);this._fillInstructions&&this._instructions.push(a.fillCmd);this._strokeInstructions&&this._instructions.push(a.strokeCmd)};b._newPath=function(){this._dirty&&this._updateInstructions();this._oldInstructions=this._instructions;\nthis._activeInstructions=[];this._active=this._dirty=false};b._setProp=function(b,a){this[b]=a};j.Graphics=a})(window);(function(j){var c=function(){this.initialize()},a=c.prototype;c.suppressCrossDomainErrors=false;c._hitTestCanvas=document.createElement(\"canvas\");c._hitTestCanvas.width=c._hitTestCanvas.height=1;c._hitTestContext=c._hitTestCanvas.getContext(\"2d\");c._nextCacheID=1;a.alpha=1;a.cacheCanvas=null;a.id=-1;a.mouseEnabled=true;a.name=null;a.parent=null;a.regX=0;a.regY=0;a.rotation=0;a.scaleX=1;a.scaleY=1;a.skewX=0;a.skewY=0;a.shadow=null;a.visible=true;a.x=0;a.y=0;a.compositeOperation=null;a.snapToPixel=\nfalse;a.onPress=null;a.onClick=null;a.onDoubleClick=null;a.onMouseOver=null;a.onMouseOut=null;a.onTick=null;a.filters=null;a.cacheID=0;a._cacheOffsetX=0;a._cacheOffsetY=0;a._cacheDataURLID=0;a._cacheDataURL=null;a._matrix=null;a.initialize=function(){this.id=UID.get();this._matrix=new Matrix2D};a.isVisible=function(){return this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0};a.draw=function(b,a){if(a||!this.cacheCanvas)return false;b.drawImage(this.cacheCanvas,this._cacheOffsetX,this._cacheOffsetY);\nreturn true};a.cache=function(b,a,h,e){var d=this.cacheCanvas;if(d==null)d=this.cacheCanvas=document.createElement(\"canvas\");var f=d.getContext(\"2d\");d.width=h;d.height=e;f.setTransform(1,0,0,1,-b,-a);f.clearRect(b,a,d.width,d.height);this.draw(f,true,this._matrix.reinitialize(1,0,0,1,-b,-a));this._cacheOffsetX=b;this._cacheOffsetY=a;this._applyFilters();this.cacheID=c._nextCacheID++};a.updateCache=function(b){var a=this.cacheCanvas,h=this._cacheOffsetX,e=this._cacheOffsetY;if(a==null)throw\"cache() must be called before updateCache()\";\nvar d=a.getContext(\"2d\");d.setTransform(1,0,0,1,-h,-e);b?d.globalCompositeOperation=b:d.clearRect(h,e,a.width,a.height);this.draw(d,true);if(b)d.globalCompositeOperation=\"source-over\";this._applyFilters();this.cacheID=c._nextCacheID++};a.uncache=function(){this._cacheDataURL=this.cacheCanvas=null;this.cacheID=this._cacheOffsetX=this._cacheOffsetY=0};a.getCacheDataURL=function(){if(!this.cacheCanvas)return null;if(this.cacheID!=this._cacheDataURLID)this._cacheDataURL=this.cacheCanvas.toDataURL();return this._cacheDataURL};\na.getStage=function(){for(var b=this;b.parent;)b=b.parent;return b instanceof Stage?b:null};a.localToGlobal=function(b,a){var c=this.getConcatenatedMatrix(this._matrix);if(c==null)return null;c.append(1,0,0,1,b,a);return new Point(c.tx,c.ty)};a.globalToLocal=function(b,a){var c=this.getConcatenatedMatrix(this._matrix);if(c==null)return null;c.invert();c.append(1,0,0,1,b,a);return new Point(c.tx,c.ty)};a.localToLocal=function(b,a,c){b=this.localToGlobal(b,a);return c.globalToLocal(b.x,b.y)};a.setTransform=\nfunction(b,a,c,e,d,f,g,k,i){this.x=b||0;this.y=a||0;this.scaleX=c==null?1:c;this.scaleY=e==null?1:e;this.rotation=d||0;this.skewX=f||0;this.skewY=g||0;this.regX=k||0;this.regY=i||0};a.getConcatenatedMatrix=function(b){b?b.identity():b=new Matrix2D;for(var a=this;a!=null;)b.prependTransform(a.x,a.y,a.scaleX,a.scaleY,a.rotation,a.skewX,a.skewY,a.regX,a.regY),b.prependProperties(a.alpha,a.shadow,a.compositeOperation),a=a.parent;return b};a.hitTest=function(b,a){var h=c._hitTestContext,e=c._hitTestCanvas;\nh.setTransform(1,0,0,1,-b,-a);this.draw(h);h=this._testHit(h);e.width=0;e.width=1;return h};a.clone=function(){var b=new c;this.cloneProps(b);return b};a.toString=function(){return\"[DisplayObject (name=\"+this.name+\")]\"};a.cloneProps=function(b){b.alpha=this.alpha;b.name=this.name;b.regX=this.regX;b.regY=this.regY;b.rotation=this.rotation;b.scaleX=this.scaleX;b.scaleY=this.scaleY;b.shadow=this.shadow;b.skewX=this.skewX;b.skewY=this.skewY;b.visible=this.visible;b.x=this.x;b.y=this.y;b.mouseEnabled=\nthis.mouseEnabled;b.compositeOperation=this.compositeOperation;if(this.cacheCanvas)b.cacheCanvas=this.cacheCanvas.cloneNode(true),b.cacheCanvas.getContext(\"2d\").putImageData(this.cacheCanvas.getContext(\"2d\").getImageData(0,0,this.cacheCanvas.width,this.cacheCanvas.height),0,0)};a.applyShadow=function(b,a){a=a||Shadow.identity;b.shadowColor=a.color;b.shadowOffsetX=a.offsetX;b.shadowOffsetY=a.offsetY;b.shadowBlur=a.blur};a._tick=function(b){if(this.onTick)this.onTick(b)};a._testHit=function(b){try{var a=\nb.getImageData(0,0,1,1).data[3]>1}catch(h){if(!c.suppressCrossDomainErrors)throw\"An error has occured. This is most likely due to security restrictions on reading canvas pixel data with local or cross-domain images.\";}return a};a._applyFilters=function(){if(this.filters&&this.filters.length!=0&&this.cacheCanvas)for(var b=this.filters.length,a=this.cacheCanvas.getContext(\"2d\"),c=this.cacheCanvas.width,e=this.cacheCanvas.height,d=0;d<b;d++)this.filters[d].applyFilter(a,0,0,c,e)};j.DisplayObject=c})(window);(function(j){var c=function(){this.initialize()},a=c.prototype=new DisplayObject;a.children=null;a.DisplayObject_initialize=a.initialize;a.initialize=function(){this.DisplayObject_initialize();this.children=[]};a.isVisible=function(){return this.visible&&this.alpha>0&&this.children.length&&this.scaleX!=0&&this.scaleY!=0};a.DisplayObject_draw=a.draw;a.draw=function(b,a,h){var e=Stage._snapToPixelEnabled;if(this.DisplayObject_draw(b,a))return true;for(var h=h||this._matrix.reinitialize(1,0,0,1,0,0,\nthis.alpha,this.shadow,this.compositeOperation),a=this.children.length,d=this.children.slice(0),f=0;f<a;f++){var g=d[f];if(g.isVisible()){var k=false,i=g._matrix.reinitialize(h.a,h.b,h.c,h.d,h.tx,h.ty,h.alpha,h.shadow,h.compositeOperation);i.appendTransform(g.x,g.y,g.scaleX,g.scaleY,g.rotation,g.skewX,g.skewY,g.regX,g.regY);i.appendProperties(g.alpha,g.shadow,g.compositeOperation);if(!(g instanceof c&&g.cacheCanvas==null))e&&g.snapToPixel&&i.a==1&&i.b==0&&i.c==0&&i.d==1?b.setTransform(i.a,i.b,i.c,\ni.d,i.tx+0.5|0,i.ty+0.5|0):b.setTransform(i.a,i.b,i.c,i.d,i.tx,i.ty),b.globalAlpha=i.alpha,b.globalCompositeOperation=i.compositeOperation||\"source-over\",(k=i.shadow)&&this.applyShadow(b,k);g.draw(b,false,i);k&&this.applyShadow(b)}}return true};a.addChild=function(b){if(b==null)return b;var a=arguments.length;if(a>1){for(var c=0;c<a;c++)this.addChild(arguments[c]);return arguments[a-1]}b.parent&&b.parent.removeChild(b);b.parent=this;this.children.push(b);return b};a.addChildAt=function(b,a){var c=\narguments.length;if(c>2){for(var a=arguments[e-1],e=0;e<c-1;e++)this.addChildAt(arguments[e],a+e);return arguments[c-2]}b.parent&&b.parent.removeChild(b);b.parent=this;this.children.splice(a,0,b);return b};a.removeChild=function(b){var a=arguments.length;if(a>1){for(var c=true,e=0;e<a;e++)c=c&&this.removeChild(arguments[e]);return c}return this.removeChildAt(this.children.indexOf(b))};a.removeChildAt=function(b){var a=arguments.length;if(a>1){for(var c=[],e=0;e<a;e++)c[e]=arguments[e];c.sort(function(b,\na){return a-b});for(var d=true,e=0;e<a;e++)d=d&&this.removeChildAt(c[e]);return d}if(b<0||b>this.children.length-1)return false;a=this.children[b];if(a!=null)a.parent=null;this.children.splice(b,1);return true};a.removeAllChildren=function(){for(var b=this.children;b.length;)b.pop().parent=null};a.getChildAt=function(b){return this.children[b]};a.sortChildren=function(b){this.children.sort(b)};a.getChildIndex=function(b){return this.children.indexOf(b)};a.getNumChildren=function(){return this.children.length};\na.swapChildrenAt=function(b,a){var c=this.children,e=c[b],d=c[a];e&&d&&(c[b]=d,c[a]=e)};a.swapChildren=function(b,a){for(var c=this.children,e,d,f=0,g=c.length;f<g;f++)if(c[f]==b&&(e=f),c[f]==a&&(d=f),e!=null&&d!=null)break;f!=g&&(c[e]=a,c[d]=b)};a.setChildIndex=function(b,a){for(var c=this.children,e=0,d=c.length;e<d;e++)if(c[e]==b)break;e==d||a<0||a>d||e==a||(c.splice(a,1),a<e&&e--,c.splice(b,e,0))};a.contains=function(b){for(;b;){if(b==this)return true;b=b.parent}return false};a.hitTest=function(b,\na){return this.getObjectUnderPoint(b,a)!=null};a.getObjectsUnderPoint=function(b,a){var c=[],e=this.localToGlobal(b,a);this._getObjectsUnderPoint(e.x,e.y,c);return c};a.getObjectUnderPoint=function(b,a){var c=this.localToGlobal(b,a);return this._getObjectsUnderPoint(c.x,c.y)};a.clone=function(b){var a=new c;this.cloneProps(a);if(b)for(var h=a.children=[],e=0,d=this.children.length;e<d;e++){var f=this.children[e].clone(b);f.parent=a;h.push(f)}return a};a.toString=function(){return\"[Container (name=\"+\nthis.name+\")]\"};a._tick=function(b){for(var a=this.children.length-1;a>=0;a--){var c=this.children[a];c._tick&&c._tick(b)}if(this.onTick)this.onTick(b)};a._getObjectsUnderPoint=function(b,a,h,e){var d=DisplayObject._hitTestContext,f=DisplayObject._hitTestCanvas,g=this._matrix,k=e&1&&(this.onPress||this.onClick||this.onDoubleClick)||e&2&&(this.onMouseOver||this.onMouseOut);if(this.cacheCanvas)if(this.getConcatenatedMatrix(g),d.setTransform(g.a,g.b,g.c,g.d,g.tx-b,g.ty-a),d.globalAlpha=g.alpha,this.draw(d),\nthis._testHit(d)){if(f.width=0,f.width=1,k)return this}else return null;for(var i=this.children.length-1;i>=0;i--){var l=this.children[i];if(l.isVisible()&&l.mouseEnabled)if(l instanceof c)if(k){if(l=l._getObjectsUnderPoint(b,a))return this}else{if(l=l._getObjectsUnderPoint(b,a,h,e),!h&&l)return l}else if(!e||k||e&1&&(l.onPress||l.onClick||l.onDoubleClick)||e&2&&(l.onMouseOver||l.onMouseOut))if(l.getConcatenatedMatrix(g),d.setTransform(g.a,g.b,g.c,g.d,g.tx-b,g.ty-a),d.globalAlpha=g.alpha,l.draw(d),\nthis._testHit(d))if(f.width=0,f.width=1,k)return this;else if(h)h.push(l);else return l}return null};j.Container=c})(window);(function(j){var c=function(b){this.initialize(b)},a=c.prototype=new Container;c._snapToPixelEnabled=false;a.autoClear=true;a.canvas=null;a.mouseX=null;a.mouseY=null;a.onMouseMove=null;a.onMouseUp=null;a.onMouseDown=null;a.snapToPixelEnabled=false;a.mouseInBounds=false;a.tickOnUpdate=true;a._activeMouseEvent=null;a._activeMouseTarget=null;a._mouseOverIntervalID=null;a._mouseOverX=0;a._mouseOverY=0;a._mouseOverTarget=null;a.Container_initialize=a.initialize;a.initialize=function(b){this.Container_initialize();\nthis.canvas=b instanceof HTMLCanvasElement?b:document.getElementById(b);this._enableMouseEvents(true)};a.update=function(b){if(this.canvas)this.autoClear&&this.clear(),c._snapToPixelEnabled=this.snapToPixelEnabled,this.tickOnUpdate&&this._tick(b),this.draw(this.canvas.getContext(\"2d\"),false,this.getConcatenatedMatrix(this._matrix))};a.tick=a.update;a.clear=function(){if(this.canvas){var b=this.canvas.getContext(\"2d\");b.setTransform(1,0,0,1,0,0);b.clearRect(0,0,this.canvas.width,this.canvas.height)}};\na.toDataURL=function(b,a){a||(a=\"image/png\");var c=this.canvas.getContext(\"2d\"),e=this.canvas.width,d=this.canvas.height,f;if(b){f=c.getImageData(0,0,e,d);var g=c.globalCompositeOperation;c.globalCompositeOperation=\"destination-over\";c.fillStyle=b;c.fillRect(0,0,e,d)}var k=this.canvas.toDataURL(a);if(b)c.clearRect(0,0,e,d),c.putImageData(f,0,0),c.globalCompositeOperation=g;return k};a.enableMouseOver=function(b){if(this._mouseOverIntervalID)clearInterval(this._mouseOverIntervalID),this._mouseOverIntervalID=\nnull;if(b==null)b=20;else if(b<=0)return;var a=this;this._mouseOverIntervalID=setInterval(function(){a._testMouseOver()},1E3/Math.min(50,b));this._mouseOverX=NaN;this._mouseOverTarget=null};a.clone=function(){var b=new c(null);this.cloneProps(b);return b};a.toString=function(){return\"[Stage (name=\"+this.name+\")]\"};a._enableMouseEvents=function(){var b=this,a=j.addEventListener?j:document;a.addEventListener(\"mouseup\",function(a){b._handleMouseUp(a)},false);a.addEventListener(\"mousemove\",function(a){b._handleMouseMove(a)},\nfalse);a.addEventListener(\"dblclick\",function(a){b._handleDoubleClick(a)},false);this.canvas&&this.canvas.addEventListener(\"mousedown\",function(a){b._handleMouseDown(a)},false)};a._handleMouseMove=function(b){if(this.canvas){if(!b)b=j.event;var a=this.mouseInBounds;this._updateMousePosition(b.pageX,b.pageY);if(a||this.mouseInBounds){b=new MouseEvent(\"onMouseMove\",this.mouseX,this.mouseY,this,b);if(this.onMouseMove)this.onMouseMove(b);if(this._activeMouseEvent&&this._activeMouseEvent.onMouseMove)this._activeMouseEvent.onMouseMove(b)}}else this.mouseX=\nthis.mouseY=null};a._updateMousePosition=function(b,a){var c=this.canvas;do b-=c.offsetLeft,a-=c.offsetTop;while(c=c.offsetParent);if(this.mouseInBounds=b>=0&&a>=0&&b<this.canvas.width&&a<this.canvas.height)this.mouseX=b,this.mouseY=a};a._handleMouseUp=function(b){var a=new MouseEvent(\"onMouseUp\",this.mouseX,this.mouseY,this,b);if(this.onMouseUp)this.onMouseUp(a);if(this._activeMouseEvent&&this._activeMouseEvent.onMouseUp)this._activeMouseEvent.onMouseUp(a);if(this._activeMouseTarget&&this._activeMouseTarget.onClick&&\nthis._getObjectsUnderPoint(this.mouseX,this.mouseY,null,true,this._mouseOverIntervalID?3:1)==this._activeMouseTarget)this._activeMouseTarget.onClick(new MouseEvent(\"onClick\",this.mouseX,this.mouseY,this._activeMouseTarget,b));this._activeMouseEvent=this._activeMouseTarget=null};a._handleMouseDown=function(b){if(this.onMouseDown)this.onMouseDown(new MouseEvent(\"onMouseDown\",this.mouseX,this.mouseY,this,b));var a=this._getObjectsUnderPoint(this.mouseX,this.mouseY,null,this._mouseOverIntervalID?3:1);\nif(a){if(a.onPress instanceof Function&&(b=new MouseEvent(\"onPress\",this.mouseX,this.mouseY,a,b),a.onPress(b),b.onMouseMove||b.onMouseUp))this._activeMouseEvent=b;this._activeMouseTarget=a}};a._testMouseOver=function(){if(!(this.mouseX==this._mouseOverX&&this.mouseY==this._mouseOverY&&this.mouseInBounds)){var b=null;if(this.mouseInBounds)b=this._getObjectsUnderPoint(this.mouseX,this.mouseY,null,3),this._mouseOverX=this.mouseX,this._mouseOverY=this.mouseY;if(this._mouseOverTarget!=b){if(this._mouseOverTarget&&\nthis._mouseOverTarget.onMouseOut)this._mouseOverTarget.onMouseOut(new MouseEvent(\"onMouseOut\",this.mouseX,this.mouseY,this._mouseOverTarget));if(b&&b.onMouseOver)b.onMouseOver(new MouseEvent(\"onMouseOver\",this.mouseX,this.mouseY,b));this._mouseOverTarget=b}}};a._handleDoubleClick=function(b){if(this.onDoubleClick)this.onDoubleClick(new MouseEvent(\"onDoubleClick\",this.mouseX,this.mouseY,this,b));var a=this._getObjectsUnderPoint(this.mouseX,this.mouseY,null,this._mouseOverIntervalID?3:1);if(a&&a.onDoubleClick instanceof\nFunction)a.onDoubleClick(new MouseEvent(\"onPress\",this.mouseX,this.mouseY,a,b))};j.Stage=c})(window);(function(j){var c=function(b){this.initialize(b)},a=c.prototype=new DisplayObject;a.image=null;a.snapToPixel=true;a.sourceRect=null;a.DisplayObject_initialize=a.initialize;a.initialize=function(b){this.DisplayObject_initialize();typeof b==\"string\"?(this.image=new Image,this.image.src=b):this.image=b};a.isVisible=function(){return this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0&&this.image&&(this.image.complete||this.image.getContext||this.image.readyState>=2)};a.DisplayObject_draw=a.draw;\na.draw=function(b,a){if(this.DisplayObject_draw(b,a))return true;var c=this.sourceRect;c?b.drawImage(this.image,c.x,c.y,c.width,c.height,0,0,c.width,c.height):b.drawImage(this.image,0,0);return true};a.clone=function(){var b=new c(this.image);this.cloneProps(b);return b};a.toString=function(){return\"[Bitmap (name=\"+this.name+\")]\"};j.Bitmap=c})(window);(function(j){var c=function(b){this.initialize(b)},a=c.prototype=new DisplayObject;a.onAnimationEnd=null;a.currentFrame=-1;a.currentAnimation=null;a.paused=true;a.spriteSheet=null;a.snapToPixel=true;a.offset=0;a.currentAnimationFrame=0;a._advanceCount=0;a._animation=null;a.DisplayObject_initialize=a.initialize;a.initialize=function(b){this.DisplayObject_initialize();this.spriteSheet=b};a.isVisible=function(){return this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0&&this.spriteSheet.complete&&\nthis.currentFrame>=0};a.DisplayObject_draw=a.draw;a.draw=function(b,a){if(this.DisplayObject_draw(b,a))return true;this._normalizeFrame();var c=this.spriteSheet.getFrame(this.currentFrame);if(c!=null){var e=c.rect;b.drawImage(c.image,e.x,e.y,e.width,e.height,-c.regX,-c.regY,e.width,e.height);return true}};a.play=function(){this.paused=false};a.stop=function(){this.paused=true};a.gotoAndPlay=function(b){this.paused=false;this._goto(b)};a.gotoAndStop=function(b){this.paused=true;this._goto(b)};a.advance=\nfunction(){this._animation?this.currentAnimationFrame++:this.currentFrame++;this._normalizeFrame()};a.clone=function(){var b=new c(this.spriteSheet);this.cloneProps(b);return b};a.toString=function(){return\"[BitmapAnimation (name=\"+this.name+\")]\"};a._tick=function(b){var a=this._animation?this._animation.frequency:1;!this.paused&&(++this._advanceCount+this.offset)%a==0&&this.advance();if(this.onTick)this.onTick(b)};a._normalizeFrame=function(){var b=this._animation;if(b)if(this.currentAnimationFrame>=\nb.frames.length){if(b.next?this._goto(b.next):(this.paused=true,this.currentAnimationFrame=b.frames.length-1,this.currentFrame=b.frames[this.currentAnimationFrame]),this.onAnimationEnd)this.onAnimationEnd(this,b.name)}else this.currentFrame=b.frames[this.currentAnimationFrame];else if(this.currentFrame>=this.spriteSheet.getNumFrames()&&(this.currentFrame=0,this.onAnimationEnd))this.onAnimationEnd(this,null)};a.DisplayObject_cloneProps=a.cloneProps;a.cloneProps=function(b){this.DisplayObject_cloneProps(b);\nb.onAnimationEnd=this.onAnimationEnd;b.currentFrame=this.currentFrame;b.currentAnimation=this.currentAnimation;b.paused=this.paused;b.offset=this.offset;b._animation=this._animation;b.currentAnimationFrame=this.currentAnimationFrame};a._goto=function(b){if(isNaN(b)){var a=this.spriteSheet.getAnimation(b);if(a)this.currentAnimationFrame=0,this._animation=a,this.currentAnimation=b,this._normalizeFrame()}else this.currentAnimation=this._animation=null,this.currentFrame=b};j.BitmapAnimation=c})(window);(function(j){var c=function(b){this.initialize(b)},a=c.prototype=new DisplayObject;a.graphics=null;a.DisplayObject_initialize=a.initialize;a.initialize=function(b){this.DisplayObject_initialize();this.graphics=b?b:new Graphics};a.isVisible=function(){return this.visible&&this.alpha>0&&this.scaleX!=0&&this.scaleY!=0&&this.graphics};a.DisplayObject_draw=a.draw;a.draw=function(b,a){if(this.DisplayObject_draw(b,a))return true;this.graphics.draw(b);return true};a.clone=function(b){b=new c(b&&this.graphics?\nthis.graphics.clone():this.graphics);this.cloneProps(b);return b};a.toString=function(){return\"[Shape (name=\"+this.name+\")]\"};j.Shape=c})(window);(function(j){var c=function(b,a,c){this.initialize(b,a,c)},a=c.prototype=new DisplayObject;c._workingContext=document.createElement(\"canvas\").getContext(\"2d\");a.text=\"\";a.font=null;a.color=null;a.textAlign=null;a.textBaseline=null;a.maxWidth=null;a.outline=false;a.lineHeight=null;a.lineWidth=null;a.DisplayObject_initialize=a.initialize;a.initialize=function(b,a,c){this.DisplayObject_initialize();this.text=b;this.font=a;this.color=c?c:\"#000\"};a.isVisible=function(){return Boolean(this.visible&&this.alpha>\n0&&this.scaleX!=0&&this.scaleY!=0&&this.text!=null&&this.text!=\"\")};a.DisplayObject_draw=a.draw;a.draw=function(b,a){if(this.DisplayObject_draw(b,a))return true;this.outline?b.strokeStyle=this.color:b.fillStyle=this.color;b.font=this.font;b.textAlign=this.textAlign?this.textAlign:\"start\";b.textBaseline=this.textBaseline?this.textBaseline:\"alphabetic\";for(var c=String(this.text).split(/(?:\\r\\n|\\r|\\n)/),e=this.lineHeight==null?this.getMeasuredLineHeight():this.lineHeight,d=0,f=0,g=c.length;f<g;f++){var k=\nb.measureText(c[f]).width;if(this.lineWidth==null||k<this.lineWidth)this._drawTextLine(b,c[f],d);else{for(var k=c[f].split(/(\\s)/),i=k[0],l=1,j=k.length;l<j;l+=2)b.measureText(i+k[l]+k[l+1]).width>this.lineWidth?(this._drawTextLine(b,i,d),d+=e,i=k[l+1]):i+=k[l]+k[l+1];this._drawTextLine(b,i,d)}d+=e}return true};a.getMeasuredWidth=function(){return this._getWorkingContext().measureText(this.text).width};a.getMeasuredLineHeight=function(){return this._getWorkingContext().measureText(\"M\").width*1.2};\na.clone=function(){var b=new c(this.text,this.font,this.color);this.cloneProps(b);return b};a.toString=function(){return\"[Text (text=\"+(this.text.length>20?this.text.substr(0,17)+\"...\":this.text)+\")]\"};a.DisplayObject_cloneProps=a.cloneProps;a.cloneProps=function(b){this.DisplayObject_cloneProps(b);b.textAlign=this.textAlign;b.textBaseline=this.textBaseline;b.maxWidth=this.maxWidth;b.outline=this.outline;b.lineHeight=this.lineHeight;b.lineWidth=this.lineWidth};a._getWorkingContext=function(){var b=\nc._workingContext;b.font=this.font;b.textAlign=this.textAlign?this.textAlign:\"start\";b.textBaseline=this.textBaseline?this.textBaseline:\"alphabetic\";return b};a._drawTextLine=function(b,a,c){this.outline?b.strokeText(a,0,c,this.maxWidth):b.fillText(a,0,c,this.maxWidth||65535)};j.Text=c})(window);(function(j){var c=function(){throw\"SpriteSheetUtils cannot be instantiated\";};c._workingCanvas=document.createElement(\"canvas\");c._workingContext=c._workingCanvas.getContext(\"2d\");c.addFlippedFrames=function(a,b,j,h){if(b||j||h){var e=0;b&&c._flip(a,++e,true,false);j&&c._flip(a,++e,false,true);h&&c._flip(a,++e,true,true)}};c.extractFrame=function(a,b){isNaN(b)&&(b=a.getAnimation(b).frames[0]);var j=a.getFrame(b);if(!j)return null;var h=j.rect,e=c._workingCanvas;e.width=h.width;e.height=h.height;\nc._workingContext.drawImage(j.image,h.x,h.y,h.width,h.height,0,0,h.width,h.height);j=new Image;j.src=e.toDataURL(\"image/png\");return j};c._flip=function(a,b,j,h){for(var e=a._images,d=c._workingCanvas,f=c._workingContext,g=e.length/b,k=0;k<g;k++){var i=e[k];i.__tmp=k;d.width=i.width;d.height=i.height;f.setTransform(j?-1:1,0,0,h?-1:1,j?i.width:0,h?i.height:0);f.drawImage(i,0,0);var l=new Image;l.src=d.toDataURL(\"image/png\");l.width=i.width;l.height=i.height;e.push(l)}f=a._frames;d=f.length/b;for(k=\n0;k<d;k++){var i=f[k],o=i.rect.clone(),l=e[i.image.__tmp+g*b],m={image:l,rect:o,regX:i.regX,regY:i.regY};if(j)o.x=l.width-o.x-o.width,m.regX=o.width-i.regX;if(h)o.y=l.height-o.y-o.height,m.regY=o.height-i.regY;f.push(m)}j=\"_\"+(j?\"h\":\"\")+(h?\"v\":\"\");h=a._animations;a=a._data;e=h.length/b;for(k=0;k<e;k++){f=h[k];i=a[f];g={name:f+j,frequency:i.frequency,next:i.next,frames:[]};i.next&&(g.next+=j);f=i.frames;i=0;for(l=f.length;i<l;i++)g.frames.push(f[i]+d*b);a[g.name]=g;h.push(g.name)}};j.SpriteSheetUtils=\nc})(window);(function(j){var c=function(b){this.initialize(b)},a=c.prototype=new DisplayObject;a.htmlElement=null;a._style=null;a.DisplayObject_initialize=a.initialize;a.initialize=function(b){typeof b==\"string\"&&(b=document.getElementById(b));this.DisplayObject_initialize();this.mouseEnabled=false;if(this.htmlElement=b)this._style=b.style,this._style.position=\"absolute\",this._style.transformOrigin=this._style.webkitTransformOrigin=this._style.msTransformOrigin=this._style.MozTransformOrigin=\"0% 0%\"};a.isVisible=\nfunction(){return this.htmlElement!=null};a.draw=function(){if(this.htmlElement!=null){var b=this._matrix,a=this.htmlElement;a.style.opacity=\"\"+b.alpha;a.style.visibility=this.visible?\"visible\":\"hidden\";a.style.transform=a.style.webkitTransform=a.style.oTransform=a.style.msTransform=[\"matrix(\"+b.a,b.b,b.c,b.d,b.tx,b.ty+\")\"].join(\",\");a.style.MozTransform=[\"matrix(\"+b.a,b.b,b.c,b.d,b.tx+\"px\",b.ty+\"px)\"].join(\",\");return true}};a.cache=function(){};a.uncache=function(){};a.updateCache=function(){};\na.hitTest=function(){};a.localToGlobal=function(){};a.globalToLocal=function(){};a.localToLocal=function(){};a.clone=function(){var a=new c;this.cloneProps(a);return a};a.toString=function(){return\"[DOMElement (name=\"+this.name+\")]\"};a._tick=function(a){if(this.htmlElement!=null&&(this.htmlElement.style.visibility=\"hidden\",this.onTick))this.onTick(a)};j.DOMElement=c})(window);(function(j){var c=function(){this.initialize()},a=c.prototype;a.initialize=function(){};a.getBounds=function(){return new Rectangle(0,0,0,0)};a.applyFilter=function(){};a.toString=function(){return\"[Filter]\"};a.clone=function(){return new c};j.Filter=c})(window);(function(j){var c=function(){throw\"Touch cannot be instantiated\";};c.isSupported=function(){return\"ontouchstart\"in j};c.enable=function(a){if(a!=null&&c.isSupported())a._primaryTouchId=-1,a._handleTouchMoveListener=null,a.canvas.addEventListener(\"touchstart\",function(b){c._handleTouchStart(a,b)},false),document.addEventListener(\"touchend\",function(b){c._handleTouchEnd(a,b)},false)};c._handleTouchStart=function(a,b){b.preventDefault();if(a._primaryTouchId==-1){a._handleTouchMoveListener=a._handleTouchMoveListener||\nfunction(b){c._handleTouchMove(a,b)};document.addEventListener(\"touchmove\",a._handleTouchMoveListener,false);var j=b.changedTouches[0];a._primaryTouchId=j.identifier;a._updateMousePosition(j.pageX,j.pageY);a._handleMouseDown(j)}};c._handleTouchMove=function(a,b){var j=c._findPrimaryTouch(a,b.changedTouches);j&&a._handleMouseMove(j)};c._handleTouchEnd=function(a,b){var j=c._findPrimaryTouch(a,b.changedTouches);if(j)a._primaryTouchId=-1,a._handleMouseUp(j),document.removeEventListener(\"touchmove\",a._handleTouchMoveListener),\na._handleTouchMoveListener=null};c._findPrimaryTouch=function(a,b){for(var c=b.length,h=0;h<c;h++){var e=b[h];if(e.identifier==a._primaryTouchId)return e}return null};j.Touch=c})(window);\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/easing.js.download",
    "content": "/*\n    Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.\n    Available via Academic Free License >= 2.1 OR the modified BSD license.\n    see: http://dojotoolkit.org/license for details\n*/\n\n//>>built\ndefine(\"dojo/fx/easing\",[\"../_base/lang\"],function(_1){var _2={linear:function(n){return n;},quadIn:function(n){return Math.pow(n,2);},quadOut:function(n){return n*(n-2)*-1;},quadInOut:function(n){n=n*2;if(n<1){return Math.pow(n,2)/2;}return -1*((--n)*(n-2)-1)/2;},cubicIn:function(n){return Math.pow(n,3);},cubicOut:function(n){return Math.pow(n-1,3)+1;},cubicInOut:function(n){n=n*2;if(n<1){return Math.pow(n,3)/2;}n-=2;return (Math.pow(n,3)+2)/2;},quartIn:function(n){return Math.pow(n,4);},quartOut:function(n){return -1*(Math.pow(n-1,4)-1);},quartInOut:function(n){n=n*2;if(n<1){return Math.pow(n,4)/2;}n-=2;return -1/2*(Math.pow(n,4)-2);},quintIn:function(n){return Math.pow(n,5);},quintOut:function(n){return Math.pow(n-1,5)+1;},quintInOut:function(n){n=n*2;if(n<1){return Math.pow(n,5)/2;}n-=2;return (Math.pow(n,5)+2)/2;},sineIn:function(n){return -1*Math.cos(n*(Math.PI/2))+1;},sineOut:function(n){return Math.sin(n*(Math.PI/2));},sineInOut:function(n){return -1*(Math.cos(Math.PI*n)-1)/2;},expoIn:function(n){return (n==0)?0:Math.pow(2,10*(n-1));},expoOut:function(n){return (n==1)?1:(-1*Math.pow(2,-10*n)+1);},expoInOut:function(n){if(n==0){return 0;}if(n==1){return 1;}n=n*2;if(n<1){return Math.pow(2,10*(n-1))/2;}--n;return (-1*Math.pow(2,-10*n)+2)/2;},circIn:function(n){return -1*(Math.sqrt(1-Math.pow(n,2))-1);},circOut:function(n){n=n-1;return Math.sqrt(1-Math.pow(n,2));},circInOut:function(n){n=n*2;if(n<1){return -1/2*(Math.sqrt(1-Math.pow(n,2))-1);}n-=2;return 1/2*(Math.sqrt(1-Math.pow(n,2))+1);},backIn:function(n){var s=1.70158;return Math.pow(n,2)*((s+1)*n-s);},backOut:function(n){n=n-1;var s=1.70158;return Math.pow(n,2)*((s+1)*n+s)+1;},backInOut:function(n){var s=1.70158*1.525;n=n*2;if(n<1){return (Math.pow(n,2)*((s+1)*n-s))/2;}n-=2;return (Math.pow(n,2)*((s+1)*n+s)+2)/2;},elasticIn:function(n){if(n==0||n==1){return n;}var p=0.3;var s=p/4;n=n-1;return -1*Math.pow(2,10*n)*Math.sin((n-s)*(2*Math.PI)/p);},elasticOut:function(n){if(n==0||n==1){return n;}var p=0.3;var s=p/4;return Math.pow(2,-10*n)*Math.sin((n-s)*(2*Math.PI)/p)+1;},elasticInOut:function(n){if(n==0){return 0;}n=n*2;if(n==2){return 1;}var p=0.3*1.5;var s=p/4;if(n<1){n-=1;return -0.5*(Math.pow(2,10*n)*Math.sin((n-s)*(2*Math.PI)/p));}n-=1;return 0.5*(Math.pow(2,-10*n)*Math.sin((n-s)*(2*Math.PI)/p))+1;},bounceIn:function(n){return (1-_2.bounceOut(1-n));},bounceOut:function(n){var s=7.5625;var p=2.75;var l;if(n<(1/p)){l=s*Math.pow(n,2);}else{if(n<(2/p)){n-=(1.5/p);l=s*Math.pow(n,2)+0.75;}else{if(n<(2.5/p)){n-=(2.25/p);l=s*Math.pow(n,2)+0.9375;}else{n-=(2.625/p);l=s*Math.pow(n,2)+0.984375;}}}return l;},bounceInOut:function(n){if(n<0.5){return _2.bounceIn(n*2)/2;}return (_2.bounceOut(n*2-1)/2)+0.5;}};_1.setObject(\"dojo.fx.easing\",_2);return _2;});\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/jquery-3.0.0.min.js.download",
    "content": "/*! jQuery v3.0.0 | (c) jQuery Foundation | jquery.org/license */\n!function(a,b){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error(\"jQuery requires a window with a document\");return b(a)}:b(a)}(\"undefined\"!=typeof window?window:this,function(a,b){\"use strict\";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement(\"script\");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q=\"3.0.0\",r=function(a,b){return new r.fn.init(a,b)},s=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for(\"boolean\"==typeof g&&(j=g,g=arguments[h]||{},h++),\"object\"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:\"jQuery\"+(q+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return\"function\"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return(\"number\"===b||\"string\"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return a&&\"[object Object]\"===k.call(a)?(b=e(a))?(c=l.call(b,\"constructor\")&&b.constructor,\"function\"==typeof c&&m.call(c)===n):!0:!1},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?j[k.call(a)]||\"object\":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,\"ms-\").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?\"\":(a+\"\").replace(s,\"\")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,\"string\"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;d>f;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;return\"string\"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a)?(d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e):void 0},now:Date.now,support:o}),\"function\"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(a,b){j[\"[object \"+b+\"]\"]=b.toLowerCase()});function w(a){var b=!!a&&\"length\"in a&&a.length,c=r.type(a);return\"function\"===c||r.isWindow(a)?!1:\"array\"===c||0===b||\"number\"==typeof b&&b>0&&b-1 in a}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=\"sizzle\"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},J=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",K=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",L=\"(?:\\\\\\\\.|[\\\\w-]|[^\\x00-\\\\xa0])+\",M=\"\\\\[\"+K+\"*(\"+L+\")(?:\"+K+\"*([*^$|!~]?=)\"+K+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+L+\"))|)\"+K+\"*\\\\]\",N=\":(\"+L+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+M+\")*)|.*)\\\\)|)\",O=new RegExp(K+\"+\",\"g\"),P=new RegExp(\"^\"+K+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+K+\"+$\",\"g\"),Q=new RegExp(\"^\"+K+\"*,\"+K+\"*\"),R=new RegExp(\"^\"+K+\"*([>+~]|\"+K+\")\"+K+\"*\"),S=new RegExp(\"=\"+K+\"*([^\\\\]'\\\"]*?)\"+K+\"*\\\\]\",\"g\"),T=new RegExp(N),U=new RegExp(\"^\"+L+\"$\"),V={ID:new RegExp(\"^#(\"+L+\")\"),CLASS:new RegExp(\"^\\\\.(\"+L+\")\"),TAG:new RegExp(\"^(\"+L+\"|[*])\"),ATTR:new RegExp(\"^\"+M),PSEUDO:new RegExp(\"^\"+N),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+K+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+K+\"*(?:([+-]|)\"+K+\"*(\\\\d+)|))\"+K+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+J+\")$\",\"i\"),needsContext:new RegExp(\"^\"+K+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+K+\"*((?:-\\\\d)?\\\\d*)\"+K+\"*\\\\)|)(?=[^-]|$)\",\"i\")},W=/^(?:input|select|textarea|button)$/i,X=/^h\\d$/i,Y=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,$=/[+~]/,_=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+K+\"?|(\"+K+\")|.)\",\"ig\"),aa=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g,ca=function(a,b){return b?\"\\x00\"===a?\"\\ufffd\":a.slice(0,-1)+\"\\\\\"+a.charCodeAt(a.length-1).toString(16)+\" \":\"\\\\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:\"parentNode\",next:\"legend\"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],\"string\"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+\" \"]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if(\"object\"!==b.nodeName.toLowerCase()){(k=b.getAttribute(\"id\"))?k=k.replace(ba,ca):b.setAttribute(\"id\",k=u),o=g(a),h=o.length;while(h--)o[h]=\"#\"+k+\" \"+sa(o[h]);r=o.join(\",\"),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute(\"id\")}}}return i(a.replace(P,\"$1\"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+\" \")>d.cacheLength&&delete b[a.shift()],b[c+\" \"]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement(\"fieldset\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split(\"|\"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function oa(a){return function(b){return\"label\"in b&&b.disabled===a||\"form\"in b&&b.disabled===a||\"form\"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&(\"label\"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&\"undefined\"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?\"HTML\"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener(\"unload\",da,!1):e.attachEvent&&e.attachEvent(\"onunload\",da)),c.attributes=ja(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute(\"id\")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c=\"undefined\"!=typeof a.getAttributeNode&&a.getAttributeNode(\"id\");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return\"undefined\"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return\"undefined\"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML=\"<a id='\"+u+\"'></a><select id='\"+u+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",a.querySelectorAll(\"[msallowcapture^='']\").length&&q.push(\"[*^$]=\"+K+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\"[selected]\").length||q.push(\"\\\\[\"+K+\"*(?:value|\"+J+\")\"),a.querySelectorAll(\"[id~=\"+u+\"-]\").length||q.push(\"~=\"),a.querySelectorAll(\":checked\").length||q.push(\":checked\"),a.querySelectorAll(\"a#\"+u+\"+*\").length||q.push(\".#.+[+~]\")}),ja(function(a){a.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var b=n.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"name\",\"D\"),a.querySelectorAll(\"[name=d]\").length&&q.push(\"name\"+K+\"*[*^$|!~]?=\"),2!==a.querySelectorAll(\":enabled\").length&&q.push(\":enabled\",\":disabled\"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(\":disabled\").length&&q.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),q.push(\",.*:\")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,\"*\"),s.call(a,\"[s!='']:x\"),r.push(\"!=\",N)}),q=q.length&&new RegExp(q.join(\"|\")),r=r.length&&new RegExp(r.join(\"|\")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,\"='$1']\"),c.matchesSelector&&p&&!A[b+\" \"]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+\"\").replace(ba,ca)},ga.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c=\"\",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||\"\").replace(_,aa),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||\"\":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(\")\",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+\" \"];return b||(b=new RegExp(\"(^|\"+K+\")\"+a+\"(\"+K+\"|$)\"))&&y(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||\"undefined\"!=typeof a.getAttribute&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?\"!=\"===b:b?(e+=\"\",\"=\"===b?e===c:\"!=\"===b?e!==c:\"^=\"===b?c&&0===e.indexOf(c):\"*=\"===b?c&&e.indexOf(c)>-1:\"$=\"===b?c&&e.slice(-c.length)===c:\"~=\"===b?(\" \"+e.replace(O,\" \")+\" \").indexOf(c)>-1:\"|=\"===b?e===c||e.slice(0,c.length+1)===c+\"-\":!1):!0}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error(\"unsupported pseudo: \"+a);return e[u]?e(b):e.length>1?(c=[a,a,\"\",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,\"$1\"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||\"\")||ga.error(\"unsupported lang: \"+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||\"text\"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[0>c?c+b:c]}),even:pa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+\" \"];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P,\" \")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d=\"\";c>b;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&\"parentNode\"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||\"*\",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[\" \"],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:\" \"===a[i-2].type?\"*\":\"\"})).replace(P,\"$1\"),c,e>i&&ya(a.slice(i,e)),f>e&&ya(a=a.slice(e)),f>e&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s=\"0\",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG(\"*\",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+\" \"];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n=\"function\"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&\"ID\"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split(\"\").sort(B).join(\"\")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement(\"fieldset\"))}),ja(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||ka(\"type|href|height|width\",function(a,b,c){return c?void 0:a.getAttribute(b,\"type\"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||ka(\"value\",function(a,b,c){return c||\"input\"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute(\"disabled\")})||ka(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[\":\"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i,C=/^.[^:#\\[\\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if(\"string\"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if(\"string\"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;d>b;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;d>b;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,\"string\"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,\"string\"==typeof a){if(e=\"<\"===a[0]&&\">\"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g=\"string\"!=typeof a&&r(a);if(!A.test(a))for(;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?\"string\"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,\"parentNode\")},parentsUntil:function(a,b,c){return y(a,\"parentNode\",c)},next:function(a){return J(a,\"nextSibling\")},prev:function(a){return J(a,\"previousSibling\")},nextAll:function(a){return y(a,\"nextSibling\")},prevAll:function(a){return y(a,\"previousSibling\")},nextUntil:function(a,b,c){return y(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return y(a,\"previousSibling\",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a=\"string\"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:\"\")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&\"string\"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c=\"\",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=\"\"),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[[\"notify\",\"progress\",r.Callbacks(\"memory\"),r.Callbacks(\"memory\"),2],[\"resolve\",\"done\",r.Callbacks(\"once memory\"),r.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",r.Callbacks(\"once memory\"),r.Callbacks(\"once memory\"),1,\"rejected\"]],d=\"pending\",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},\"catch\":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+\"With\"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(f>b)){if(a=d.apply(h,i),a===c.promise())throw new TypeError(\"Thenable self-resolution\");j=a&&(\"object\"==typeof a||\"function\"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+\"With\"](this===f?void 0:this,arguments),this},f[b[0]+\"With\"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(1>=b&&(O(a,g.done(h(c)).resolve,g.reject),\"pending\"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn(\"jQuery.Deferred exception: \"+b.message,b.stack,c)};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener(\"DOMContentLoaded\",R),a.removeEventListener(\"load\",R),r.ready()}\"complete\"===d.readyState||\"loading\"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener(\"DOMContentLoaded\",R),a.addEventListener(\"load\",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if(\"object\"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){\nreturn j.call(r(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if(\"string\"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&\"string\"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d=\"data-\"+b.replace(Y,\"-$&\").toLowerCase(),c=a.getAttribute(d),\"string\"==typeof c){try{c=\"true\"===c?!0:\"false\"===c?!1:\"null\"===c?null:+c+\"\"===c?+c:X.test(c)?JSON.parse(c):c}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,\"hasDataAttrs\"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf(\"data-\")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,\"hasDataAttrs\",!0)}return e}return\"object\"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;return a?(b=(b||\"fx\")+\"queue\",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||\"fx\";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks(\"once memory\").add(function(){V.remove(a,[b+\"queue\",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return\"string\"!=typeof a&&(b=a,a=\"fx\",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};\"string\"!=typeof a&&(b=a,a=void 0),a=a||\"fx\";while(g--)c=V.get(f[g],a+\"queueHooks\"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var $=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,_=new RegExp(\"^(?:([+-])=|)(\"+$+\")([a-z%]*)$\",\"i\"),aa=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ba=function(a,b){return a=b||a,\"none\"===a.style.display||\"\"===a.style.display&&r.contains(a.ownerDocument,a)&&\"none\"===r.css(a,\"display\")},ca=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function da(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,\"\")},i=h(),j=c&&c[3]||(r.cssNumber[b]?\"\":\"px\"),k=(r.cssNumber[b]||\"px\"!==j&&+i)&&_.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||\".5\",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ea={};function fa(a){var b,c=a.ownerDocument,d=a.nodeName,e=ea[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,\"display\"),b.parentNode.removeChild(b),\"none\"===e&&(e=\"block\"),ea[d]=e,e)}function ga(a,b){for(var c,d,e=[],f=0,g=a.length;g>f;f++)d=a[f],d.style&&(c=d.style.display,b?(\"none\"===c&&(e[f]=V.get(d,\"display\")||null,e[f]||(d.style.display=\"\")),\"\"===d.style.display&&ba(d)&&(e[f]=fa(d))):\"none\"!==c&&(e[f]=\"none\",V.set(d,\"display\",c)));for(f=0;g>f;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ga(this,!0)},hide:function(){return ga(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){ba(this)?r(this).show():r(this).hide()})}});var ha=/^(?:checkbox|radio)$/i,ia=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,ja=/^$|\\/(?:java|ecma)script/i,ka={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c=\"undefined\"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||\"*\"):\"undefined\"!=typeof a.querySelectorAll?a.querySelectorAll(b||\"*\"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;d>c;c++)V.set(a[c],\"globalEval\",!b||V.get(b[c],\"globalEval\"))}var na=/<|&#?\\w+;/;function oa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;o>n;n++)if(f=a[n],f||0===f)if(\"object\"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(na.test(f)){g=g||l.appendChild(b.createElement(\"div\")),h=(ia.exec(f)||[\"\",\"\"])[1].toLowerCase(),i=ka[h]||ka._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=\"\"}else m.push(b.createTextNode(f));l.textContent=\"\",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),\"script\"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||\"\")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement(\"div\")),c=d.createElement(\"input\");c.setAttribute(\"type\",\"radio\"),c.setAttribute(\"checked\",\"checked\"),c.setAttribute(\"name\",\"t\"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML=\"<textarea>x</textarea>\",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if(\"object\"==typeof b){\"string\"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&(\"string\"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return\"undefined\"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||\"\").match(K)||[\"\"],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(\".\")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||\"\").match(K)||[\"\"],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp(\"(^|\\\\.)\"+o.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&(\"**\"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,\"handle events\")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,\"events\")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(\"click\"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||\"click\"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+\" \",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){return this.originalEvent?b(this.originalEvent):void 0}:function(){return this.originalEvent?this.originalEvent[a]:void 0},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==va()&&this.focus?(this.focus(),!1):void 0},delegateType:\"focusin\"},blur:{trigger:function(){return this===va()&&this.blur?(this.blur(),!1):void 0},delegateType:\"focusout\"},click:{trigger:function(){return\"checkbox\"===this.type&&this.click&&r.nodeName(this,\"input\")?(this.click(),!1):void 0},_default:function(a){return r.nodeName(a.target,\"a\")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ta:ua,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:ua,isPropagationStopped:ua,isImmediatePropagationStopped:ua,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ta,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ta,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ta,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&qa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ra.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return wa(this,a,b,c,d)},one:function(a,b,c,d){return wa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+\".\"+d.namespace:d.origType,d.selector,d.handler),this;if(\"object\"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&\"function\"!=typeof b||(c=b,b=void 0),c===!1&&(c=ua),this.each(function(){r.event.remove(this,a,c,b)})}});var xa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,ya=/<script|<style|<link/i,za=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Aa=/^true\\/(.*)/,Ba=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Ca(a,b){return r.nodeName(a,\"table\")&&r.nodeName(11!==b.nodeType?b:b.firstChild,\"tr\")?a.getElementsByTagName(\"tbody\")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute(\"type\"))+\"/\"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ga(a,b){var c=b.nodeName.toLowerCase();\"input\"===c&&ha.test(a.type)?b.checked=a.checked:\"input\"!==c&&\"textarea\"!==c||(b.defaultValue=a.defaultValue)}function Ha(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&\"string\"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,\"script\"),Da),i=h.length;m>l;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,la(j,\"script\"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ea),l=0;i>l;l++)j=h[l],ja.test(j.type||\"\")&&!V.access(j,\"globalEval\")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ba,\"\"),k))}return a}function Ia(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(la(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&ma(la(d,\"script\")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(xa,\"<$1></$2>\")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;e>d;d++)Ga(f[d],g[d]);if(b)if(c)for(f=f||la(a),g=g||la(h),d=0,e=f.length;e>d;d++)Fa(f[d],g[d]);else Fa(a,h);return g=la(h,\"script\"),g.length>0&&ma(g,!i&&la(a,\"script\")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent=\"\");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if(\"string\"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(la(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(la(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ja=/^margin/,Ka=new RegExp(\"^(\"+$+\")(?!px)[a-z%]+$\",\"i\"),La=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText=\"box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",i.innerHTML=\"\",pa.appendChild(h);var b=a.getComputedStyle(i);c=\"1%\"!==b.top,g=\"2px\"===b.marginLeft,e=\"4px\"===b.width,i.style.marginRight=\"50%\",f=\"4px\"===b.marginRight,pa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement(\"div\"),i=d.createElement(\"div\");i.style&&(i.style.backgroundClip=\"content-box\",i.cloneNode(!0).style.backgroundClip=\"\",o.clearCloneStyle=\"content-box\"===i.style.backgroundClip,h.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Ma(a,b,c){var d,e,f,g,h=a.style;return c=c||La(a),c&&(g=c.getPropertyValue(b)||c[b],\"\"!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ka.test(g)&&Ja.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+\"\":g}function Na(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Oa=/^(none|table(?!-c[ea]).+)/,Pa={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Qa={letterSpacing:\"0\",fontWeight:\"400\"},Ra=[\"Webkit\",\"Moz\",\"ms\"],Sa=d.createElement(\"div\").style;function Ta(a){if(a in Sa)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ra.length;while(c--)if(a=Ra[c]+b,a in Sa)return a}function Ua(a,b,c){var d=_.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||\"px\"):b}function Va(a,b,c,d,e){for(var f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0,g=0;4>f;f+=2)\"margin\"===c&&(g+=r.css(a,c+aa[f],!0,e)),d?(\"content\"===c&&(g-=r.css(a,\"padding\"+aa[f],!0,e)),\"margin\"!==c&&(g-=r.css(a,\"border\"+aa[f]+\"Width\",!0,e))):(g+=r.css(a,\"padding\"+aa[f],!0,e),\"padding\"!==c&&(g+=r.css(a,\"border\"+aa[f]+\"Width\",!0,e)));return g}function Wa(a,b,c){var d,e=!0,f=La(a),g=\"border-box\"===r.css(a,\"boxSizing\",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),0>=d||null==d){if(d=Ma(a,b,f),(0>d||null==d)&&(d=a.style[b]),Ka.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Va(a,b,c||(g?\"border\":\"content\"),e,f)+\"px\"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ma(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":\"cssFloat\"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&\"get\"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,\"string\"===f&&(e=_.exec(c))&&e[1]&&(c=da(a,b,e),f=\"number\"),null!=c&&c===c&&(\"number\"===f&&(c+=e&&e[3]||(r.cssNumber[h]?\"\":\"px\")),o.clearCloneStyle||\"\"!==c||0!==b.indexOf(\"background\")||(i[b]=\"inherit\"),g&&\"set\"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&\"get\"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ma(a,b,d)),\"normal\"===e&&b in Qa&&(e=Qa[b]),\"\"===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each([\"height\",\"width\"],function(a,b){r.cssHooks[b]={get:function(a,c,d){return c?!Oa.test(r.css(a,\"display\"))||a.getClientRects().length&&a.getBoundingClientRect().width?Wa(a,b,d):ca(a,Pa,function(){return Wa(a,b,d)}):void 0},set:function(a,c,d){var e,f=d&&La(a),g=d&&Va(a,b,d,\"border-box\"===r.css(a,\"boxSizing\",!1,f),f);return g&&(e=_.exec(c))&&\"px\"!==(e[3]||\"px\")&&(a.style[b]=c,c=r.css(a,b)),Ua(a,c,g)}}}),r.cssHooks.marginLeft=Na(o.reliableMarginLeft,function(a,b){return b?(parseFloat(Ma(a,\"marginLeft\"))||a.getBoundingClientRect().left-ca(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+\"px\":void 0}),r.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];4>d;d++)e[a+aa[d]+b]=f[d]||f[d-2]||f[0];return e}},Ja.test(a)||(r.cssHooks[a+b].set=Ua)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=La(a),e=b.length;e>g;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?\"\":\"px\")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,\"\"),b&&\"auto\"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:\"swing\"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=aa[d],e[\"margin\"+c]=e[\"padding\"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners[\"*\"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function eb(a,b,c){var d,e,f,g,h,i,j,k,l=\"width\"in b||\"height\"in b,m=this,n={},o=a.style,p=a.nodeType&&ba(a),q=V.get(a,\"fxshow\");c.queue||(g=r._queueHooks(a,\"fx\"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,\"fx\").length||g.empty.fire()})}));for(d in b)if(e=b[d],$a.test(e)){if(delete b[d],f=f||\"toggle\"===e,e===(p?\"hide\":\"show\")){if(\"show\"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=V.get(a,\"display\")),k=r.css(a,\"display\"),\"none\"===k&&(j?k=j:(ga([a],!0),j=a.style.display||j,k=r.css(a,\"display\"),ga([a]))),(\"inline\"===k||\"inline-block\"===k&&null!=j)&&\"none\"===r.css(a,\"float\")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j=\"none\"===k?\"\":k)),o.display=\"inline-block\")),c.overflow&&(o.overflow=\"hidden\",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?\"hidden\"in q&&(p=q.hidden):q=V.access(a,\"fxshow\",{display:j}),f&&(q.hidden=!p),p&&ga([a],!0),m.done(function(){p||ga([a]),V.remove(a,\"fxshow\");for(d in n)r.style(a,d,n[d])})),i=db(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function fb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],r.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&\"expand\"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function gb(a,b,c){var d,e,f=0,g=gb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||bb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||bb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(fb(k,j.opts.specialEasing);g>f;f++)if(d=gb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,db,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}r.Animation=r.extend(gb,{tweeners:{\"*\":[function(a,b){var c=this.createTween(a,b);return da(c.elem,a,_.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=[\"*\"]):a=a.match(K);for(var c,d=0,e=a.length;e>d;d++)c=a[d],gb.tweeners[c]=gb.tweeners[c]||[],gb.tweeners[c].unshift(b)},prefilters:[eb],prefilter:function(a,b){b?gb.prefilters.unshift(a):gb.prefilters.push(a)}}),r.speed=function(a,b,c){var e=a&&\"object\"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off||d.hidden?e.duration=0:e.duration=\"number\"==typeof e.duration?e.duration:e.duration in r.fx.speeds?r.fx.speeds[e.duration]:r.fx.speeds._default,null!=e.queue&&e.queue!==!0||(e.queue=\"fx\"),e.old=e.complete,e.complete=function(){r.isFunction(e.old)&&e.old.call(this),e.queue&&r.dequeue(this,e.queue)},e},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(ba).css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=gb(this,r.extend({},a),f);(e||V.get(this,\"finish\"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return\"string\"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||\"fx\",[]),this.each(function(){var b=!0,e=null!=a&&a+\"queueHooks\",f=r.timers,g=V.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&_a.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||\"fx\"),this.each(function(){var b,c=V.get(this),d=c[a+\"queue\"],e=c[a+\"queueHooks\"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each([\"toggle\",\"show\",\"hide\"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||\"boolean\"==typeof a?c.apply(this,arguments):this.animate(cb(b,!0),a,d,e)}}),r.each({slideDown:cb(\"show\"),slideUp:cb(\"hide\"),slideToggle:cb(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(Ya=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),Ya=void 0},r.fx.timer=function(a){r.timers.push(a),a()?r.fx.start():r.timers.pop()},r.fx.interval=13,r.fx.start=function(){Za||(Za=a.requestAnimationFrame?a.requestAnimationFrame(ab):a.setInterval(r.fx.tick,r.fx.interval))},r.fx.stop=function(){a.cancelAnimationFrame?a.cancelAnimationFrame(Za):a.clearInterval(Za),Za=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||\"fx\",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement(\"input\"),b=d.createElement(\"select\"),c=b.appendChild(d.createElement(\"option\"));a.type=\"checkbox\",o.checkOn=\"\"!==a.value,o.optSelected=c.selected,a=d.createElement(\"input\"),a.value=\"t\",a.type=\"radio\",o.radioValue=\"t\"===a.value}();var hb,ib=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return\"undefined\"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+\"\"),c):e&&\"get\"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&\"radio\"===b&&r.nodeName(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c);\n}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&\"get\"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,\"tabindex\");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\\t\\r\\n\\f]/g;function mb(a){return a.getAttribute&&a.getAttribute(\"class\")||\"\"}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if(\"string\"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(\" \"+e+\" \").replace(lb,\" \")){g=0;while(f=b[g++])d.indexOf(\" \"+f+\" \")<0&&(d+=f+\" \");h=r.trim(d),e!==h&&c.setAttribute(\"class\",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(\" \"+e+\" \").replace(lb,\" \")){g=0;while(f=b[g++])while(d.indexOf(\" \"+f+\" \")>-1)d=d.replace(\" \"+f+\" \",\" \");h=r.trim(d),e!==h&&c.setAttribute(\"class\",h)}}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if(\"string\"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&\"boolean\"!==c||(b=mb(this),b&&V.set(this,\"__className__\",b),this.setAttribute&&this.setAttribute(\"class\",b||a===!1?\"\":V.get(this,\"__className__\")||\"\"))})},hasClass:function(a){var b,c,d=0;b=\" \"+a+\" \";while(c=this[d++])if(1===c.nodeType&&(\" \"+mb(c)+\" \").replace(lb,\" \").indexOf(b)>-1)return!0;return!1}});var nb=/\\r/g,ob=/[\\x20\\t\\r\\n\\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e=\"\":\"number\"==typeof e?e+=\"\":r.isArray(e)&&(e=r.map(e,function(a){return null==a?\"\":a+\"\"})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&\"set\"in b&&void 0!==b.set(this,e,\"value\")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&\"get\"in b&&void 0!==(c=b.get(e,\"value\"))?c:(c=e.value,\"string\"==typeof c?c.replace(nb,\"\"):null==c?\"\":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,\"value\");return null!=b?b:r.trim(r.text(a)).replace(ob,\" \")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f=\"select-one\"===a.type,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,\"optgroup\"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each([\"radio\",\"checkbox\"],function(){r.valHooks[this]={set:function(a,b){return r.isArray(b)?a.checked=r.inArray(r(a).val(),b)>-1:void 0}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,\"type\")?b.type:b,q=l.call(b,\"namespace\")?b.namespace.split(\".\"):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(\".\")>-1&&(q=p.split(\".\"),p=q.shift(),q.sort()),k=p.indexOf(\":\")<0&&\"on\"+p,b=b[r.expando]?b:new r.Event(p,\"object\"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join(\".\"),b.rnamespace=b.namespace?new RegExp(\"(^|\\\\.)\"+q.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,\"events\")||{})[b.type]&&V.get(h,\"handle\"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?r.event.trigger(a,b,c,!0):void 0}}),r.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin=\"onfocusin\"in a,o.focusin||r.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\\?/;r.parseXML=function(b){var c;if(!b||\"string\"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,\"text/xml\")}catch(d){c=void 0}return c&&!c.getElementsByTagName(\"parsererror\").length||r.error(\"Invalid XML: \"+b),c};var tb=/\\[\\]$/,ub=/\\r?\\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+\"[\"+(\"object\"==typeof e&&null!=e?b:\"\")+\"]\",e,c,d)});else if(c||\"object\"!==r.type(b))d(a,b);else for(e in b)xb(a+\"[\"+e+\"]\",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(null==c?\"\":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join(\"&\")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,\"elements\");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(\":disabled\")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,\"\\r\\n\")}}):{name:b.name,value:c.replace(ub,\"\\r\\n\")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\\/\\//,Fb={},Gb={},Hb=\"*/\".concat(\"*\"),Ib=d.createElement(\"a\");Ib.href=qb.href;function Jb(a){return function(b,c){\"string\"!=typeof b&&(c=b,b=\"*\");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])\"+\"===d[0]?(d=d.slice(1)||\"*\",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return\"string\"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e[\"*\"]&&g(\"*\")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while(\"*\"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader(\"Content-Type\"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+\" \"+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(\"*\"===f)f=i;else if(\"*\"!==i&&i!==f){if(g=j[i+\" \"+f]||j[\"* \"+f],!g)for(e in j)if(h=e.split(\" \"),h[1]===f&&(g=j[i+\" \"+h[0]]||j[\"* \"+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a[\"throws\"])b=g(b);else try{b=g(b)}catch(l){return{state:\"parsererror\",error:g?l:\"No conversion from \"+i+\" to \"+f}}}return{state:\"success\",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:\"GET\",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Hb,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){\"object\"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks(\"once memory\"),u=o.statusCode||{},v={},w={},x=\"canceled\",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+\"\").replace(Eb,qb.protocol+\"//\"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||\"*\").toLowerCase().match(K)||[\"\"],null==o.crossDomain){j=d.createElement(\"a\");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+\"//\"+Ib.host!=j.protocol+\"//\"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&\"string\"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger(\"ajaxStart\"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,\"\"),o.hasContent?o.data&&o.processData&&0===(o.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(o.data=o.data.replace(yb,\"+\")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?\"&\":\"?\")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,\"\"),n=(sb.test(f)?\"&\":\"?\")+\"_=\"+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader(\"If-Modified-Since\",r.lastModified[f]),r.etag[f]&&y.setRequestHeader(\"If-None-Match\",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader(\"Content-Type\",o.contentType),y.setRequestHeader(\"Accept\",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+(\"*\"!==o.dataTypes[0]?\", \"+Hb+\"; q=0.01\":\"\"):o.accepts[\"*\"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x=\"abort\",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger(\"ajaxSend\",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort(\"timeout\")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,\"No Transport\");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||\"\",y.readyState=b>0?4:0,j=b>=200&&300>b||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader(\"Last-Modified\"),w&&(r.lastModified[f]=w),w=y.getResponseHeader(\"etag\"),w&&(r.etag[f]=w)),204===b||\"HEAD\"===o.type?x=\"nocontent\":304===b?x=\"notmodified\":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x=\"error\",0>b&&(b=0))),y.status=b,y.statusText=(c||x)+\"\",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?\"ajaxSuccess\":\"ajaxError\",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger(\"ajaxComplete\",[y,o]),--r.active||r.event.trigger(\"ajaxStop\")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,\"json\")},getScript:function(a,b){return r.get(a,void 0,b,\"script\")}}),r.each([\"get\",\"post\"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not(\"body\").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&\"withCredentials\"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;return o.cors||Pb&&!b.crossDomain?{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,\"abort\"===a?h.abort():\"error\"===a?\"number\"!=typeof h.status?f(0,\"error\"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,\"text\"!==(h.responseType||\"text\")||\"string\"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c(\"error\"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c(\"abort\");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}:void 0}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter(\"script\",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\")}),r.ajaxTransport(\"script\",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(\"<script>\").prop({charset:a.scriptCharset,src:a.url}).on(\"load error\",c=function(a){b.remove(),c=null,a&&f(\"error\"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Qb=[],Rb=/(=)\\?(?=&|$)|\\?\\?/;r.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var a=Qb.pop()||r.expando+\"_\"+rb++;return this[a]=!0,a}}),r.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Rb.test(b.url)?\"url\":\"string\"==typeof b.data&&0===(b.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Rb.test(b.data)&&\"data\");return h||\"jsonp\"===b.dataTypes[0]?(e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Rb,\"$1\"+e):b.jsonp!==!1&&(b.url+=(sb.test(b.url)?\"&\":\"?\")+b.jsonp+\"=\"+e),b.converters[\"script json\"]=function(){return g||r.error(e+\" was not called\"),g[0]},b.dataTypes[0]=\"json\",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Qb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),\"script\"):void 0}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument(\"\").body;return a.innerHTML=\"<form></form><form></form>\",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if(\"string\"!=typeof a)return[];\"boolean\"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(\"\"),e=b.createElement(\"base\"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=B.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=oa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(\" \");return h>-1&&(d=r.trim(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&\"object\"==typeof b&&(e=\"POST\"),g.length>0&&r.ajax({url:a,type:e||\"GET\",dataType:\"html\",data:b}).done(function(a){f=arguments,g.html(d?r(\"<div>\").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length};function Sb(a){return r.isWindow(a)?a:9===a.nodeType&&a.defaultView}r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,\"position\"),l=r(a),m={};\"static\"===k&&(a.style.position=\"relative\"),h=l.offset(),f=r.css(a,\"top\"),i=r.css(a,\"left\"),j=(\"absolute\"===k||\"fixed\"===k)&&(f+i).indexOf(\"auto\")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),\"using\"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=Sb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return\"fixed\"===r.css(c,\"position\")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),r.nodeName(a[0],\"html\")||(d=a.offset()),d={top:d.top+r.css(a[0],\"borderTopWidth\",!0),left:d.left+r.css(a[0],\"borderLeftWidth\",!0)}),{top:b.top-d.top-r.css(c,\"marginTop\",!0),left:b.left-d.left-r.css(c,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&\"static\"===r.css(a,\"position\"))a=a.offsetParent;return a||pa})}}),r.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,b){var c=\"pageYOffset\"===b;r.fn[a]=function(d){return S(this,function(a,d,e){var f=Sb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each([\"top\",\"left\"],function(a,b){r.cssHooks[b]=Na(o.pixelPosition,function(a,c){return c?(c=Ma(a,b),Ka.test(c)?r(a).position()[b]+\"px\":c):void 0})}),r.each({Height:\"height\",Width:\"width\"},function(a,b){r.each({padding:\"inner\"+a,content:b,\"\":\"outer\"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||\"boolean\"!=typeof e),h=c||(e===!0||f===!0?\"margin\":\"border\");return S(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf(\"outer\")?b[\"inner\"+a]:b.document.documentElement[\"client\"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body[\"scroll\"+a],f[\"scroll\"+a],b.body[\"offset\"+a],f[\"offset\"+a],f[\"client\"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,\"**\"):this.off(b,a||\"**\",c)}}),r.parseJSON=JSON.parse,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return r});var Tb=a.jQuery,Ub=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Ub),b&&a.jQuery===r&&(a.jQuery=Tb),r},b||(a.jQuery=a.$=r),r});\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/jquery.gsap.min.js.download",
    "content": "/*!\n * VERSION: 0.1.12\n * DATE: 2015-08-11\n * UPDATES AND DOCS AT: http://greensock.com/jquery-gsap-plugin/\n *\n * Requires TweenLite version 1.8.0 or higher and CSSPlugin.\n *\n * @license Copyright (c) 2013-2016, GreenSock. All rights reserved.\n * This work is subject to the terms at http://greensock.com/standard-license or for\n * Club GreenSock members, the software agreement that was issued with your membership.\n *\n * @author: Jack Doyle, jack@greensock.com\n */\n!function(a){\"use strict\";var b,c,d,e=a.fn.animate,f=a.fn.stop,g=!0,h=function(a){var b,c={};for(b in a)c[b]=a[b];return c},i={overwrite:1,delay:1,useFrames:1,runBackwards:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,autoCSS:1},j=\",scrollTop,scrollLeft,show,hide,toggle,\",k=j,l=function(a,b){for(var c in i)i[c]&&void 0!==a[c]&&(b[c]=a[c])},m=function(a){return function(b){return a.getRatio(b)}},n={},o=function(){var e,f,g,h=window.GreenSockGlobals||window;if(b=h.TweenMax||h.TweenLite,b&&(e=(b.version+\".0.0\").split(\".\"),f=!(Number(e[0])>0&&Number(e[1])>7),h=h.com.greensock,c=h.plugins.CSSPlugin,n=h.easing.Ease.map||{}),!b||!c||f)return b=null,void(!d&&window.console&&(window.console.log(\"The jquery.gsap.js plugin requires the TweenMax (or at least TweenLite and CSSPlugin) JavaScript file(s).\"+(f?\" Version \"+e.join(\".\")+\" is too old.\":\"\")),d=!0));if(a.easing){for(g in n)a.easing[g]=m(n[g]);o=!1}};a.fn.animate=function(d,f,i,j){if(d=d||{},o&&(o(),!b||!c))return e.call(this,d,f,i,j);if(!g||d.skipGSAP===!0||\"object\"==typeof f&&\"function\"==typeof f.step)return e.call(this,d,f,i,j);var m,p,q,r,s=a.speed(f,i,j),t={ease:n[s.easing]||(s.easing===!1?n.linear:n.swing)},u=this,v=\"object\"==typeof f?f.specialEasing:null;for(p in d){if(m=d[p],m instanceof Array&&n[m[1]]&&(v=v||{},v[p]=m[1],m=m[0]),\"show\"===m||\"hide\"===m||\"toggle\"===m||-1!==k.indexOf(p)&&-1!==k.indexOf(\",\"+p+\",\"))return e.call(this,d,f,i,j);t[-1===p.indexOf(\"-\")?p:a.camelCase(p)]=m}if(v){t=h(t),r=[];for(p in v)m=r[r.length]={},l(t,m),m.ease=n[v[p]]||t.ease,-1!==p.indexOf(\"-\")&&(p=a.camelCase(p)),m[p]=t[p],delete t[p];0===r.length&&(r=null)}return q=function(c){var d,e=h(t);if(r)for(d=r.length;--d>-1;)b.to(this,a.fx.off?0:s.duration/1e3,r[d]);e.onComplete=function(){c?c():s.old&&a(this).each(s.old)},b.to(this,a.fx.off?0:s.duration/1e3,e)},s.queue!==!1?(u.queue(s.queue,q),\"function\"==typeof s.old&&a(u[u.length-1]).queue(s.queue,function(a){s.old.call(u),a()})):q.call(u),u},a.fn.stop=function(a,c){if(f.call(this,a,c),b){if(c)for(var d,e=b.getTweensOf(this),g=e.length;--g>-1;)d=e[g].totalTime()/e[g].totalDuration(),d>0&&1>d&&e[g].seek(e[g].totalDuration());b.killTweensOf(this)}return this},a.gsap={enabled:function(a){g=a},version:\"0.1.12\",legacyProps:function(a){k=j+a+\",\"}}}(jQuery);"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/mootools-core-1.4.5-full-compat-yc.js.download",
    "content": "/*\n---\nMooTools: the javascript framework\n\nweb build:\n - http://mootools.net/core/76bf47062d6c1983d66ce47ad66aa0e0\n\npackager build:\n - packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Delegation Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff\n\ncopyrights:\n  - [MooTools](http://mootools.net)\n\nlicenses:\n  - [MIT License](http://mootools.net/license.txt)\n...\n*/\n\n(function(){this.MooTools={version:\"1.4.5\",build:\"ab8ea8824dc3b24b6666867a2c4ed58ebb762cf0\"};var e=this.typeOf=function(i){if(i==null){return\"null\";}if(i.$family!=null){return i.$family();\n}if(i.nodeName){if(i.nodeType==1){return\"element\";}if(i.nodeType==3){return(/\\S/).test(i.nodeValue)?\"textnode\":\"whitespace\";}}else{if(typeof i.length==\"number\"){if(i.callee){return\"arguments\";\n}if(\"item\" in i){return\"collection\";}}}return typeof i;};var u=this.instanceOf=function(w,i){if(w==null){return false;}var v=w.$constructor||w.constructor;\nwhile(v){if(v===i){return true;}v=v.parent;}if(!w.hasOwnProperty){return false;}return w instanceof i;};var f=this.Function;var r=true;for(var q in {toString:1}){r=null;\n}if(r){r=[\"hasOwnProperty\",\"valueOf\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"constructor\"];}f.prototype.overloadSetter=function(v){var i=this;\nreturn function(x,w){if(x==null){return this;}if(v||typeof x!=\"string\"){for(var y in x){i.call(this,y,x[y]);}if(r){for(var z=r.length;z--;){y=r[z];if(x.hasOwnProperty(y)){i.call(this,y,x[y]);\n}}}}else{i.call(this,x,w);}return this;};};f.prototype.overloadGetter=function(v){var i=this;return function(x){var y,w;if(typeof x!=\"string\"){y=x;}else{if(arguments.length>1){y=arguments;\n}else{if(v){y=[x];}}}if(y){w={};for(var z=0;z<y.length;z++){w[y[z]]=i.call(this,y[z]);}}else{w=i.call(this,x);}return w;};};f.prototype.extend=function(i,v){this[i]=v;\n}.overloadSetter();f.prototype.implement=function(i,v){this.prototype[i]=v;}.overloadSetter();var o=Array.prototype.slice;f.from=function(i){return(e(i)==\"function\")?i:function(){return i;\n};};Array.from=function(i){if(i==null){return[];}return(k.isEnumerable(i)&&typeof i!=\"string\")?(e(i)==\"array\")?i:o.call(i):[i];};Number.from=function(v){var i=parseFloat(v);\nreturn isFinite(i)?i:null;};String.from=function(i){return i+\"\";};f.implement({hide:function(){this.$hidden=true;return this;},protect:function(){this.$protected=true;\nreturn this;}});var k=this.Type=function(x,w){if(x){var v=x.toLowerCase();var i=function(y){return(e(y)==v);};k[\"is\"+x]=i;if(w!=null){w.prototype.$family=(function(){return v;\n}).hide();w.type=i;}}if(w==null){return null;}w.extend(this);w.$constructor=k;w.prototype.$constructor=w;return w;};var p=Object.prototype.toString;k.isEnumerable=function(i){return(i!=null&&typeof i.length==\"number\"&&p.call(i)!=\"[object Function]\");\n};var b={};var d=function(i){var v=e(i.prototype);return b[v]||(b[v]=[]);};var h=function(w,A){if(A&&A.$hidden){return;}var v=d(this);for(var x=0;x<v.length;\nx++){var z=v[x];if(e(z)==\"type\"){h.call(z,w,A);}else{z.call(this,w,A);}}var y=this.prototype[w];if(y==null||!y.$protected){this.prototype[w]=A;}if(this[w]==null&&e(A)==\"function\"){t.call(this,w,function(i){return A.apply(i,o.call(arguments,1));\n});}};var t=function(i,w){if(w&&w.$hidden){return;}var v=this[i];if(v==null||!v.$protected){this[i]=w;}};k.implement({implement:h.overloadSetter(),extend:t.overloadSetter(),alias:function(i,v){h.call(this,i,this.prototype[v]);\n}.overloadSetter(),mirror:function(i){d(this).push(i);return this;}});new k(\"Type\",k);var c=function(v,A,y){var x=(A!=Object),E=A.prototype;if(x){A=new k(v,A);\n}for(var B=0,z=y.length;B<z;B++){var F=y[B],D=A[F],C=E[F];if(D){D.protect();}if(x&&C){A.implement(F,C.protect());}}if(x){var w=E.propertyIsEnumerable(y[0]);\nA.forEachMethod=function(J){if(!w){for(var I=0,G=y.length;I<G;I++){J.call(E,E[y[I]],y[I]);}}for(var H in E){J.call(E,E[H],H);}};}return c;};c(\"String\",String,[\"charAt\",\"charCodeAt\",\"concat\",\"indexOf\",\"lastIndexOf\",\"match\",\"quote\",\"replace\",\"search\",\"slice\",\"split\",\"substr\",\"substring\",\"trim\",\"toLowerCase\",\"toUpperCase\"])(\"Array\",Array,[\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\",\"concat\",\"join\",\"slice\",\"indexOf\",\"lastIndexOf\",\"filter\",\"forEach\",\"every\",\"map\",\"some\",\"reduce\",\"reduceRight\"])(\"Number\",Number,[\"toExponential\",\"toFixed\",\"toLocaleString\",\"toPrecision\"])(\"Function\",f,[\"apply\",\"call\",\"bind\"])(\"RegExp\",RegExp,[\"exec\",\"test\"])(\"Object\",Object,[\"create\",\"defineProperty\",\"defineProperties\",\"keys\",\"getPrototypeOf\",\"getOwnPropertyDescriptor\",\"getOwnPropertyNames\",\"preventExtensions\",\"isExtensible\",\"seal\",\"isSealed\",\"freeze\",\"isFrozen\"])(\"Date\",Date,[\"now\"]);\nObject.extend=t.overloadSetter();Date.extend(\"now\",function(){return +(new Date);});new k(\"Boolean\",Boolean);Number.prototype.$family=function(){return isFinite(this)?\"number\":\"null\";\n}.hide();Number.extend(\"random\",function(v,i){return Math.floor(Math.random()*(i-v+1)+v);});var l=Object.prototype.hasOwnProperty;Object.extend(\"forEach\",function(i,w,x){for(var v in i){if(l.call(i,v)){w.call(x,i[v],v,i);\n}}});Object.each=Object.forEach;Array.implement({forEach:function(x,y){for(var w=0,v=this.length;w<v;w++){if(w in this){x.call(y,this[w],w,this);}}},each:function(i,v){Array.forEach(this,i,v);\nreturn this;}});var s=function(i){switch(e(i)){case\"array\":return i.clone();case\"object\":return Object.clone(i);default:return i;}};Array.implement(\"clone\",function(){var v=this.length,w=new Array(v);\nwhile(v--){w[v]=s(this[v]);}return w;});var a=function(v,i,w){switch(e(w)){case\"object\":if(e(v[i])==\"object\"){Object.merge(v[i],w);}else{v[i]=Object.clone(w);\n}break;case\"array\":v[i]=w.clone();break;default:v[i]=w;}return v;};Object.extend({merge:function(C,y,x){if(e(y)==\"string\"){return a(C,y,x);}for(var B=1,w=arguments.length;\nB<w;B++){var z=arguments[B];for(var A in z){a(C,A,z[A]);}}return C;},clone:function(i){var w={};for(var v in i){w[v]=s(i[v]);}return w;},append:function(z){for(var y=1,w=arguments.length;\ny<w;y++){var v=arguments[y]||{};for(var x in v){z[x]=v[x];}}return z;}});[\"Object\",\"WhiteSpace\",\"TextNode\",\"Collection\",\"Arguments\"].each(function(i){new k(i);\n});var j=Date.now();String.extend(\"uniqueID\",function(){return(j++).toString(36);});var g=this.Hash=new k(\"Hash\",function(i){if(e(i)==\"hash\"){i=Object.clone(i.getClean());\n}for(var v in i){this[v]=i[v];}return this;});g.implement({forEach:function(i,v){Object.forEach(this,i,v);},getClean:function(){var v={};for(var i in this){if(this.hasOwnProperty(i)){v[i]=this[i];\n}}return v;},getLength:function(){var v=0;for(var i in this){if(this.hasOwnProperty(i)){v++;}}return v;}});g.alias(\"each\",\"forEach\");Object.type=k.isObject;\nvar n=this.Native=function(i){return new k(i.name,i.initialize);};n.type=k.type;n.implement=function(x,v){for(var w=0;w<x.length;w++){x[w].implement(v);\n}return n;};var m=Array.type;Array.type=function(i){return u(i,Array)||m(i);};this.$A=function(i){return Array.from(i).slice();};this.$arguments=function(v){return function(){return arguments[v];\n};};this.$chk=function(i){return !!(i||i===0);};this.$clear=function(i){clearTimeout(i);clearInterval(i);return null;};this.$defined=function(i){return(i!=null);\n};this.$each=function(w,v,x){var i=e(w);((i==\"arguments\"||i==\"collection\"||i==\"array\"||i==\"elements\")?Array:Object).each(w,v,x);};this.$empty=function(){};\nthis.$extend=function(v,i){return Object.append(v,i);};this.$H=function(i){return new g(i);};this.$merge=function(){var i=Array.slice(arguments);i.unshift({});\nreturn Object.merge.apply(null,i);};this.$lambda=f.from;this.$mixin=Object.merge;this.$random=Number.random;this.$splat=Array.from;this.$time=Date.now;\nthis.$type=function(i){var v=e(i);if(v==\"elements\"){return\"array\";}return(v==\"null\")?false:v;};this.$unlink=function(i){switch(e(i)){case\"object\":return Object.clone(i);\ncase\"array\":return Array.clone(i);case\"hash\":return new g(i);default:return i;}};})();Array.implement({every:function(c,d){for(var b=0,a=this.length>>>0;\nb<a;b++){if((b in this)&&!c.call(d,this[b],b,this)){return false;}}return true;},filter:function(d,f){var c=[];for(var e,b=0,a=this.length>>>0;b<a;b++){if(b in this){e=this[b];\nif(d.call(f,e,b,this)){c.push(e);}}}return c;},indexOf:function(c,d){var b=this.length>>>0;for(var a=(d<0)?Math.max(0,b+d):d||0;a<b;a++){if(this[a]===c){return a;\n}}return -1;},map:function(c,e){var d=this.length>>>0,b=Array(d);for(var a=0;a<d;a++){if(a in this){b[a]=c.call(e,this[a],a,this);}}return b;},some:function(c,d){for(var b=0,a=this.length>>>0;\nb<a;b++){if((b in this)&&c.call(d,this[b],b,this)){return true;}}return false;},clean:function(){return this.filter(function(a){return a!=null;});},invoke:function(a){var b=Array.slice(arguments,1);\nreturn this.map(function(c){return c[a].apply(c,b);});},associate:function(c){var d={},b=Math.min(this.length,c.length);for(var a=0;a<b;a++){d[c[a]]=this[a];\n}return d;},link:function(c){var a={};for(var e=0,b=this.length;e<b;e++){for(var d in c){if(c[d](this[e])){a[d]=this[e];delete c[d];break;}}}return a;},contains:function(a,b){return this.indexOf(a,b)!=-1;\n},append:function(a){this.push.apply(this,a);return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[Number.random(0,this.length-1)]:null;\n},include:function(a){if(!this.contains(a)){this.push(a);}return this;},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b]);}return this;\n},erase:function(b){for(var a=this.length;a--;){if(this[a]===b){this.splice(a,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var d=[];\nfor(var b=0,a=this.length;b<a;b++){var c=typeOf(this[b]);if(c==\"null\"){continue;}d=d.concat((c==\"array\"||c==\"collection\"||c==\"arguments\"||instanceOf(this[b],Array))?Array.flatten(this[b]):this[b]);\n}return d;},pick:function(){for(var b=0,a=this.length;b<a;b++){if(this[b]!=null){return this[b];}}return null;},hexToRgb:function(b){if(this.length!=3){return null;\n}var a=this.map(function(c){if(c.length==1){c+=c;}return c.toInt(16);});return(b)?a:\"rgb(\"+a+\")\";},rgbToHex:function(d){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!d){return\"transparent\";\n}var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);b.push((c.length==1)?\"0\"+c:c);}return(d)?b:\"#\"+b.join(\"\");}});Array.alias(\"extend\",\"append\");\nvar $pick=function(){return Array.from(arguments).pick();};String.implement({test:function(a,b){return((typeOf(a)==\"regexp\")?a:new RegExp(\"\"+a,b)).test(this);\n},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:String(this).indexOf(a)>-1;},trim:function(){return String(this).replace(/^\\s+|\\s+$/g,\"\");\n},clean:function(){return String(this).replace(/\\s+/g,\" \").trim();},camelCase:function(){return String(this).replace(/-\\D/g,function(a){return a.charAt(1).toUpperCase();\n});},hyphenate:function(){return String(this).replace(/[A-Z]/g,function(a){return(\"-\"+a.charAt(0).toLowerCase());});},capitalize:function(){return String(this).replace(/\\b[a-z]/g,function(a){return a.toUpperCase();\n});},escapeRegExp:function(){return String(this).replace(/([-.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\");},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);\n},hexToRgb:function(b){var a=String(this).match(/^#?(\\w{1,2})(\\w{1,2})(\\w{1,2})$/);return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=String(this).match(/\\d{1,3}/g);\nreturn(a)?a.rgbToHex(b):null;},substitute:function(a,b){return String(this).replace(b||(/\\\\?\\{([^{}]+)\\}/g),function(d,c){if(d.charAt(0)==\"\\\\\"){return d.slice(1);\n}return(a[c]!=null)?a[c]:\"\";});}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this));},round:function(a){a=Math.pow(10,a||0).toFixed(a<0?-a:0);\nreturn Math.round(this*a)/a;},times:function(b,c){for(var a=0;a<this;a++){b.call(c,a,this);}},toFloat:function(){return parseFloat(this);},toInt:function(a){return parseInt(this,a||10);\n}});Number.alias(\"each\",\"times\");(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat(Array.from(arguments)));\n};}});Number.implement(a);})([\"abs\",\"acos\",\"asin\",\"atan\",\"atan2\",\"ceil\",\"cos\",\"exp\",\"floor\",\"log\",\"max\",\"min\",\"pow\",\"sin\",\"sqrt\",\"tan\"]);Function.extend({attempt:function(){for(var b=0,a=arguments.length;\nb<a;b++){try{return arguments[b]();}catch(c){}}return null;}});Function.implement({attempt:function(a,c){try{return this.apply(c,Array.from(a));}catch(b){}return null;\n},bind:function(e){var a=this,b=arguments.length>1?Array.slice(arguments,1):null,d=function(){};var c=function(){var g=e,h=arguments.length;if(this instanceof c){d.prototype=a.prototype;\ng=new d;}var f=(!b&&!h)?a.call(g):a.apply(g,b&&h?b.concat(Array.slice(arguments)):b||arguments);return g==e?f:g;};return c;},pass:function(b,c){var a=this;\nif(b!=null){b=Array.from(b);}return function(){return a.apply(c,b||arguments);};},delay:function(b,c,a){return setTimeout(this.pass((a==null?[]:a),c),b);\n},periodical:function(c,b,a){return setInterval(this.pass((a==null?[]:a),b),c);}});delete Function.prototype.bind;Function.implement({create:function(b){var a=this;\nb=b||{};return function(d){var c=b.arguments;c=(c!=null)?Array.from(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c);}var e=function(){return a.apply(b.bind||null,c);\n};if(b.delay){return setTimeout(e,b.delay);}if(b.periodical){return setInterval(e,b.periodical);}if(b.attempt){return Function.attempt(e);}return e();};\n},bind:function(c,b){var a=this;if(b!=null){b=Array.from(b);}return function(){return a.apply(c,b||arguments);};},bindWithEvent:function(c,b){var a=this;\nif(b!=null){b=Array.from(b);}return function(d){return a.apply(c,(b==null)?arguments:[d].concat(b));};},run:function(a,b){return this.apply(b,Array.from(a));\n}});if(Object.create==Function.prototype.create){Object.create=null;}var $try=Function.attempt;(function(){var a=Object.prototype.hasOwnProperty;Object.extend({subset:function(d,g){var f={};\nfor(var e=0,b=g.length;e<b;e++){var c=g[e];if(c in d){f[c]=d[c];}}return f;},map:function(b,e,f){var d={};for(var c in b){if(a.call(b,c)){d[c]=e.call(f,b[c],c,b);\n}}return d;},filter:function(b,e,g){var d={};for(var c in b){var f=b[c];if(a.call(b,c)&&e.call(g,f,c,b)){d[c]=f;}}return d;},every:function(b,d,e){for(var c in b){if(a.call(b,c)&&!d.call(e,b[c],c)){return false;\n}}return true;},some:function(b,d,e){for(var c in b){if(a.call(b,c)&&d.call(e,b[c],c)){return true;}}return false;},keys:function(b){var d=[];for(var c in b){if(a.call(b,c)){d.push(c);\n}}return d;},values:function(c){var b=[];for(var d in c){if(a.call(c,d)){b.push(c[d]);}}return b;},getLength:function(b){return Object.keys(b).length;},keyOf:function(b,d){for(var c in b){if(a.call(b,c)&&b[c]===d){return c;\n}}return null;},contains:function(b,c){return Object.keyOf(b,c)!=null;},toQueryString:function(b,c){var d=[];Object.each(b,function(h,g){if(c){g=c+\"[\"+g+\"]\";\n}var f;switch(typeOf(h)){case\"object\":f=Object.toQueryString(h,g);break;case\"array\":var e={};h.each(function(k,j){e[j]=k;});f=Object.toQueryString(e,g);\nbreak;default:f=g+\"=\"+encodeURIComponent(h);}if(h!=null){d.push(f);}});return d.join(\"&\");}});})();Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(a){return Object.keyOf(this,a);\n},hasValue:function(a){return Object.contains(this,a);},extend:function(a){Hash.each(a||{},function(c,b){Hash.set(this,b,c);},this);return this;},combine:function(a){Hash.each(a||{},function(c,b){Hash.include(this,b,c);\n},this);return this;},erase:function(a){if(this.hasOwnProperty(a)){delete this[a];}return this;},get:function(a){return(this.hasOwnProperty(a))?this[a]:null;\n},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b;}return this;},empty:function(){Hash.each(this,function(b,a){delete this[a];},this);\nreturn this;},include:function(a,b){if(this[a]==null){this[a]=b;}return this;},map:function(a,b){return new Hash(Object.map(this,a,b));},filter:function(a,b){return new Hash(Object.filter(this,a,b));\n},every:function(a,b){return Object.every(this,a,b);},some:function(a,b){return Object.some(this,a,b);},getKeys:function(){return Object.keys(this);},getValues:function(){return Object.values(this);\n},toQueryString:function(a){return Object.toQueryString(this,a);}});Hash.extend=Object.append;Hash.alias({indexOf:\"keyOf\",contains:\"hasValue\"});(function(){var k=this.document;\nvar h=k.window=this;var a=navigator.userAgent.toLowerCase(),b=navigator.platform.toLowerCase(),i=a.match(/(opera|ie|firefox|chrome|version)[\\s\\/:]([\\w\\d\\.]+)?.*?(safari|version[\\s\\/:]([\\w\\d\\.]+)|$)/)||[null,\"unknown\",0],f=i[1]==\"ie\"&&k.documentMode;\nvar o=this.Browser={extend:Function.prototype.extend,name:(i[1]==\"version\")?i[3]:i[1],version:f||parseFloat((i[1]==\"opera\"&&i[4])?i[4]:i[2]),Platform:{name:a.match(/ip(?:ad|od|hone)/)?\"ios\":(a.match(/(?:webos|android)/)||b.match(/mac|win|linux/)||[\"other\"])[0]},Features:{xpath:!!(k.evaluate),air:!!(h.runtime),query:!!(k.querySelector),json:!!(h.JSON)},Plugins:{}};\no[o.name]=true;o[o.name+parseInt(o.version,10)]=true;o.Platform[o.Platform.name]=true;o.Request=(function(){var q=function(){return new XMLHttpRequest();\n};var p=function(){return new ActiveXObject(\"MSXML2.XMLHTTP\");};var e=function(){return new ActiveXObject(\"Microsoft.XMLHTTP\");};return Function.attempt(function(){q();\nreturn q;},function(){p();return p;},function(){e();return e;});})();o.Features.xhr=!!(o.Request);var j=(Function.attempt(function(){return navigator.plugins[\"Shockwave Flash\"].description;\n},function(){return new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable(\"$version\");})||\"0 r0\").match(/\\d+/g);o.Plugins.Flash={version:Number(j[0]||\"0.\"+j[1])||0,build:Number(j[2])||0};\no.exec=function(p){if(!p){return p;}if(h.execScript){h.execScript(p);}else{var e=k.createElement(\"script\");e.setAttribute(\"type\",\"text/javascript\");e.text=p;\nk.head.appendChild(e);k.head.removeChild(e);}return p;};String.implement(\"stripScripts\",function(p){var e=\"\";var q=this.replace(/<script[^>]*>([\\s\\S]*?)<\\/script>/gi,function(r,s){e+=s+\"\\n\";\nreturn\"\";});if(p===true){o.exec(e);}else{if(typeOf(p)==\"function\"){p(e,q);}}return q;});o.extend({Document:this.Document,Window:this.Window,Element:this.Element,Event:this.Event});\nthis.Window=this.$constructor=new Type(\"Window\",function(){});this.$family=Function.from(\"window\").hide();Window.mirror(function(e,p){h[e]=p;});this.Document=k.$constructor=new Type(\"Document\",function(){});\nk.$family=Function.from(\"document\").hide();Document.mirror(function(e,p){k[e]=p;});k.html=k.documentElement;if(!k.head){k.head=k.getElementsByTagName(\"head\")[0];\n}if(k.execCommand){try{k.execCommand(\"BackgroundImageCache\",false,true);}catch(g){}}if(this.attachEvent&&!this.addEventListener){var c=function(){this.detachEvent(\"onunload\",c);\nk.head=k.html=k.window=null;};this.attachEvent(\"onunload\",c);}var m=Array.from;try{m(k.html.childNodes);}catch(g){Array.from=function(p){if(typeof p!=\"string\"&&Type.isEnumerable(p)&&typeOf(p)!=\"array\"){var e=p.length,q=new Array(e);\nwhile(e--){q[e]=p[e];}return q;}return m(p);};var l=Array.prototype,n=l.slice;[\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\",\"concat\",\"join\",\"slice\"].each(function(e){var p=l[e];\nArray[e]=function(q){return p.apply(Array.from(q),n.call(arguments,1));};});}if(o.Platform.ios){o.Platform.ipod=true;}o.Engine={};var d=function(p,e){o.Engine.name=p;\no.Engine[p+e]=true;o.Engine.version=e;};if(o.ie){o.Engine.trident=true;switch(o.version){case 6:d(\"trident\",4);break;case 7:d(\"trident\",5);break;case 8:d(\"trident\",6);\n}}if(o.firefox){o.Engine.gecko=true;if(o.version>=3){d(\"gecko\",19);}else{d(\"gecko\",18);}}if(o.safari||o.chrome){o.Engine.webkit=true;switch(o.version){case 2:d(\"webkit\",419);\nbreak;case 3:d(\"webkit\",420);break;case 4:d(\"webkit\",525);}}if(o.opera){o.Engine.presto=true;if(o.version>=9.6){d(\"presto\",960);}else{if(o.version>=9.5){d(\"presto\",950);\n}else{d(\"presto\",925);}}}if(o.name==\"unknown\"){switch((a.match(/(?:webkit|khtml|gecko)/)||[])[0]){case\"webkit\":case\"khtml\":o.Engine.webkit=true;break;case\"gecko\":o.Engine.gecko=true;\n}}this.$exec=o.exec;})();(function(){var b={};var a=this.DOMEvent=new Type(\"DOMEvent\",function(c,g){if(!g){g=window;}c=c||g.event;if(c.$extended){return c;\n}this.event=c;this.$extended=true;this.shift=c.shiftKey;this.control=c.ctrlKey;this.alt=c.altKey;this.meta=c.metaKey;var i=this.type=c.type;var h=c.target||c.srcElement;\nwhile(h&&h.nodeType==3){h=h.parentNode;}this.target=document.id(h);if(i.indexOf(\"key\")==0){var d=this.code=(c.which||c.keyCode);this.key=b[d]||Object.keyOf(Event.Keys,d);\nif(i==\"keydown\"){if(d>111&&d<124){this.key=\"f\"+(d-111);}else{if(d>95&&d<106){this.key=d-96;}}}if(this.key==null){this.key=String.fromCharCode(d).toLowerCase();\n}}else{if(i==\"click\"||i==\"dblclick\"||i==\"contextmenu\"||i==\"DOMMouseScroll\"||i.indexOf(\"mouse\")==0){var j=g.document;j=(!j.compatMode||j.compatMode==\"CSS1Compat\")?j.html:j.body;\nthis.page={x:(c.pageX!=null)?c.pageX:c.clientX+j.scrollLeft,y:(c.pageY!=null)?c.pageY:c.clientY+j.scrollTop};this.client={x:(c.pageX!=null)?c.pageX-g.pageXOffset:c.clientX,y:(c.pageY!=null)?c.pageY-g.pageYOffset:c.clientY};\nif(i==\"DOMMouseScroll\"||i==\"mousewheel\"){this.wheel=(c.wheelDelta)?c.wheelDelta/120:-(c.detail||0)/3;}this.rightClick=(c.which==3||c.button==2);if(i==\"mouseover\"||i==\"mouseout\"){var k=c.relatedTarget||c[(i==\"mouseover\"?\"from\":\"to\")+\"Element\"];\nwhile(k&&k.nodeType==3){k=k.parentNode;}this.relatedTarget=document.id(k);}}else{if(i.indexOf(\"touch\")==0||i.indexOf(\"gesture\")==0){this.rotation=c.rotation;\nthis.scale=c.scale;this.targetTouches=c.targetTouches;this.changedTouches=c.changedTouches;var f=this.touches=c.touches;if(f&&f[0]){var e=f[0];this.page={x:e.pageX,y:e.pageY};\nthis.client={x:e.clientX,y:e.clientY};}}}}if(!this.client){this.client={};}if(!this.page){this.page={};}});a.implement({stop:function(){return this.preventDefault().stopPropagation();\n},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();\n}else{this.event.returnValue=false;}return this;}});a.defineKey=function(d,c){b[d]=c;return this;};a.defineKeys=a.defineKey.overloadSetter(true);a.defineKeys({\"38\":\"up\",\"40\":\"down\",\"37\":\"left\",\"39\":\"right\",\"27\":\"esc\",\"32\":\"space\",\"8\":\"backspace\",\"9\":\"tab\",\"46\":\"delete\",\"13\":\"enter\"});\n})();var Event=DOMEvent;Event.Keys={};Event.Keys=new Hash(Event.Keys);(function(){var a=this.Class=new Type(\"Class\",function(h){if(instanceOf(h,Function)){h={initialize:h};\n}var g=function(){e(this);if(g.$prototyping){return this;}this.$caller=null;var i=(this.initialize)?this.initialize.apply(this,arguments):this;this.$caller=this.caller=null;\nreturn i;}.extend(this).implement(h);g.$constructor=a;g.prototype.$constructor=g;g.prototype.parent=c;return g;});var c=function(){if(!this.$caller){throw new Error('The method \"parent\" cannot be called.');\n}var g=this.$caller.$name,h=this.$caller.$owner.parent,i=(h)?h.prototype[g]:null;if(!i){throw new Error('The method \"'+g+'\" has no parent.');}return i.apply(this,arguments);\n};var e=function(g){for(var h in g){var j=g[h];switch(typeOf(j)){case\"object\":var i=function(){};i.prototype=j;g[h]=e(new i);break;case\"array\":g[h]=j.clone();\nbreak;}}return g;};var b=function(g,h,j){if(j.$origin){j=j.$origin;}var i=function(){if(j.$protected&&this.$caller==null){throw new Error('The method \"'+h+'\" cannot be called.');\n}var l=this.caller,m=this.$caller;this.caller=m;this.$caller=i;var k=j.apply(this,arguments);this.$caller=m;this.caller=l;return k;}.extend({$owner:g,$origin:j,$name:h});\nreturn i;};var f=function(h,i,g){if(a.Mutators.hasOwnProperty(h)){i=a.Mutators[h].call(this,i);if(i==null){return this;}}if(typeOf(i)==\"function\"){if(i.$hidden){return this;\n}this.prototype[h]=(g)?i:b(this,h,i);}else{Object.merge(this.prototype,h,i);}return this;};var d=function(g){g.$prototyping=true;var h=new g;delete g.$prototyping;\nreturn h;};a.implement(\"implement\",f.overloadSetter());a.Mutators={Extends:function(g){this.parent=g;this.prototype=d(g);},Implements:function(g){Array.from(g).each(function(j){var h=new j;\nfor(var i in h){f.call(this,i,h[i],true);}},this);}};})();(function(){this.Chain=new Class({$chain:[],chain:function(){this.$chain.append(Array.flatten(arguments));\nreturn this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){this.$chain.empty();\nreturn this;}});var a=function(b){return b.replace(/^on([A-Z])/,function(c,d){return d.toLowerCase();});};this.Events=new Class({$events:{},addEvent:function(d,c,b){d=a(d);\nif(c==$empty){return this;}this.$events[d]=(this.$events[d]||[]).include(c);if(b){c.internal=true;}return this;},addEvents:function(b){for(var c in b){this.addEvent(c,b[c]);\n}return this;},fireEvent:function(e,c,b){e=a(e);var d=this.$events[e];if(!d){return this;}c=Array.from(c);d.each(function(f){if(b){f.delay(b,this,c);}else{f.apply(this,c);\n}},this);return this;},removeEvent:function(e,d){e=a(e);var c=this.$events[e];if(c&&!d.internal){var b=c.indexOf(d);if(b!=-1){delete c[b];}}return this;\n},removeEvents:function(d){var e;if(typeOf(d)==\"object\"){for(e in d){this.removeEvent(e,d[e]);}return this;}if(d){d=a(d);}for(e in this.$events){if(d&&d!=e){continue;\n}var c=this.$events[e];for(var b=c.length;b--;){if(b in c){this.removeEvent(e,c[b]);}}}return this;}});this.Options=new Class({setOptions:function(){var b=this.options=Object.merge.apply(null,[{},this.options].append(arguments));\nif(this.addEvent){for(var c in b){if(typeOf(b[c])!=\"function\"||!(/^on[A-Z]/).test(c)){continue;}this.addEvent(c,b[c]);delete b[c];}}return this;}});})();\n(function(){var k,n,l,g,a={},c={},m=/\\\\/g;var e=function(q,p){if(q==null){return null;}if(q.Slick===true){return q;}q=(\"\"+q).replace(/^\\s+|\\s+$/g,\"\");g=!!p;\nvar o=(g)?c:a;if(o[q]){return o[q];}k={Slick:true,expressions:[],raw:q,reverse:function(){return e(this.raw,true);}};n=-1;while(q!=(q=q.replace(j,b))){}k.length=k.expressions.length;\nreturn o[k.raw]=(g)?h(k):k;};var i=function(o){if(o===\"!\"){return\" \";}else{if(o===\" \"){return\"!\";}else{if((/^!/).test(o)){return o.replace(/^!/,\"\");}else{return\"!\"+o;\n}}}};var h=function(u){var r=u.expressions;for(var p=0;p<r.length;p++){var t=r[p];var q={parts:[],tag:\"*\",combinator:i(t[0].combinator)};for(var o=0;o<t.length;\no++){var s=t[o];if(!s.reverseCombinator){s.reverseCombinator=\" \";}s.combinator=s.reverseCombinator;delete s.reverseCombinator;}t.reverse().push(q);}return u;\n};var f=function(o){return o.replace(/[-[\\]{}()*+?.\\\\^$|,#\\s]/g,function(p){return\"\\\\\"+p;});};var j=new RegExp(\"^(?:\\\\s*(,)\\\\s*|\\\\s*(<combinator>+)\\\\s*|(\\\\s+)|(<unicode>+|\\\\*)|\\\\#(<unicode>+)|\\\\.(<unicode>+)|\\\\[\\\\s*(<unicode1>+)(?:\\\\s*([*^$!~|]?=)(?:\\\\s*(?:([\\\"']?)(.*?)\\\\9)))?\\\\s*\\\\](?!\\\\])|(:+)(<unicode>+)(?:\\\\((?:(?:([\\\"'])([^\\\\13]*)\\\\13)|((?:\\\\([^)]+\\\\)|[^()]*)+))\\\\))?)\".replace(/<combinator>/,\"[\"+f(\">+~`!@$%^&={}\\\\;</\")+\"]\").replace(/<unicode>/g,\"(?:[\\\\w\\\\u00a1-\\\\uFFFF-]|\\\\\\\\[^\\\\s0-9a-f])\").replace(/<unicode1>/g,\"(?:[:\\\\w\\\\u00a1-\\\\uFFFF-]|\\\\\\\\[^\\\\s0-9a-f])\"));\nfunction b(x,s,D,z,r,C,q,B,A,y,u,F,G,v,p,w){if(s||n===-1){k.expressions[++n]=[];l=-1;if(s){return\"\";}}if(D||z||l===-1){D=D||\" \";var t=k.expressions[n];\nif(g&&t[l]){t[l].reverseCombinator=i(D);}t[++l]={combinator:D,tag:\"*\"};}var o=k.expressions[n][l];if(r){o.tag=r.replace(m,\"\");}else{if(C){o.id=C.replace(m,\"\");\n}else{if(q){q=q.replace(m,\"\");if(!o.classList){o.classList=[];}if(!o.classes){o.classes=[];}o.classList.push(q);o.classes.push({value:q,regexp:new RegExp(\"(^|\\\\s)\"+f(q)+\"(\\\\s|$)\")});\n}else{if(G){w=w||p;w=w?w.replace(m,\"\"):null;if(!o.pseudos){o.pseudos=[];}o.pseudos.push({key:G.replace(m,\"\"),value:w,type:F.length==1?\"class\":\"element\"});\n}else{if(B){B=B.replace(m,\"\");u=(u||\"\").replace(m,\"\");var E,H;switch(A){case\"^=\":H=new RegExp(\"^\"+f(u));break;case\"$=\":H=new RegExp(f(u)+\"$\");break;case\"~=\":H=new RegExp(\"(^|\\\\s)\"+f(u)+\"(\\\\s|$)\");\nbreak;case\"|=\":H=new RegExp(\"^\"+f(u)+\"(-|$)\");break;case\"=\":E=function(I){return u==I;};break;case\"*=\":E=function(I){return I&&I.indexOf(u)>-1;};break;\ncase\"!=\":E=function(I){return u!=I;};break;default:E=function(I){return !!I;};}if(u==\"\"&&(/^[*$^]=$/).test(A)){E=function(){return false;};}if(!E){E=function(I){return I&&H.test(I);\n};}if(!o.attributes){o.attributes=[];}o.attributes.push({key:B,operator:A,value:u,test:E});}}}}}return\"\";}var d=(this.Slick||{});d.parse=function(o){return e(o);\n};d.escapeRegExp=f;if(!this.Slick){this.Slick=d;}}).apply((typeof exports!=\"undefined\")?exports:this);(function(){var k={},m={},d=Object.prototype.toString;\nk.isNativeCode=function(c){return(/\\{\\s*\\[native code\\]\\s*\\}/).test(\"\"+c);};k.isXML=function(c){return(!!c.xmlVersion)||(!!c.xml)||(d.call(c)==\"[object XMLDocument]\")||(c.nodeType==9&&c.documentElement.nodeName!=\"HTML\");\n};k.setDocument=function(w){var p=w.nodeType;if(p==9){}else{if(p){w=w.ownerDocument;}else{if(w.navigator){w=w.document;}else{return;}}}if(this.document===w){return;\n}this.document=w;var A=w.documentElement,o=this.getUIDXML(A),s=m[o],r;if(s){for(r in s){this[r]=s[r];}return;}s=m[o]={};s.root=A;s.isXMLDocument=this.isXML(w);\ns.brokenStarGEBTN=s.starSelectsClosedQSA=s.idGetsName=s.brokenMixedCaseQSA=s.brokenGEBCN=s.brokenCheckedQSA=s.brokenEmptyAttributeQSA=s.isHTMLDocument=s.nativeMatchesSelector=false;\nvar q,u,y,z,t;var x,v=\"slick_uniqueid\";var c=w.createElement(\"div\");var n=w.body||w.getElementsByTagName(\"body\")[0]||A;n.appendChild(c);try{c.innerHTML='<a id=\"'+v+'\"></a>';\ns.isHTMLDocument=!!w.getElementById(v);}catch(C){}if(s.isHTMLDocument){c.style.display=\"none\";c.appendChild(w.createComment(\"\"));u=(c.getElementsByTagName(\"*\").length>1);\ntry{c.innerHTML=\"foo</foo>\";x=c.getElementsByTagName(\"*\");q=(x&&!!x.length&&x[0].nodeName.charAt(0)==\"/\");}catch(C){}s.brokenStarGEBTN=u||q;try{c.innerHTML='<a name=\"'+v+'\"></a><b id=\"'+v+'\"></b>';\ns.idGetsName=w.getElementById(v)===c.firstChild;}catch(C){}if(c.getElementsByClassName){try{c.innerHTML='<a class=\"f\"></a><a class=\"b\"></a>';c.getElementsByClassName(\"b\").length;\nc.firstChild.className=\"b\";z=(c.getElementsByClassName(\"b\").length!=2);}catch(C){}try{c.innerHTML='<a class=\"a\"></a><a class=\"f b a\"></a>';y=(c.getElementsByClassName(\"a\").length!=2);\n}catch(C){}s.brokenGEBCN=z||y;}if(c.querySelectorAll){try{c.innerHTML=\"foo</foo>\";x=c.querySelectorAll(\"*\");s.starSelectsClosedQSA=(x&&!!x.length&&x[0].nodeName.charAt(0)==\"/\");\n}catch(C){}try{c.innerHTML='<a class=\"MiX\"></a>';s.brokenMixedCaseQSA=!c.querySelectorAll(\".MiX\").length;}catch(C){}try{c.innerHTML='<select><option selected=\"selected\">a</option></select>';\ns.brokenCheckedQSA=(c.querySelectorAll(\":checked\").length==0);}catch(C){}try{c.innerHTML='<a class=\"\"></a>';s.brokenEmptyAttributeQSA=(c.querySelectorAll('[class*=\"\"]').length!=0);\n}catch(C){}}try{c.innerHTML='<form action=\"s\"><input id=\"action\"/></form>';t=(c.firstChild.getAttribute(\"action\")!=\"s\");}catch(C){}s.nativeMatchesSelector=A.matchesSelector||A.mozMatchesSelector||A.webkitMatchesSelector;\nif(s.nativeMatchesSelector){try{s.nativeMatchesSelector.call(A,\":slick\");s.nativeMatchesSelector=null;}catch(C){}}}try{A.slick_expando=1;delete A.slick_expando;\ns.getUID=this.getUIDHTML;}catch(C){s.getUID=this.getUIDXML;}n.removeChild(c);c=x=n=null;s.getAttribute=(s.isHTMLDocument&&t)?function(G,E){var H=this.attributeGetters[E];\nif(H){return H.call(G);}var F=G.getAttributeNode(E);return(F)?F.nodeValue:null;}:function(F,E){var G=this.attributeGetters[E];return(G)?G.call(F):F.getAttribute(E);\n};s.hasAttribute=(A&&this.isNativeCode(A.hasAttribute))?function(F,E){return F.hasAttribute(E);}:function(F,E){F=F.getAttributeNode(E);return !!(F&&(F.specified||F.nodeValue));\n};var D=A&&this.isNativeCode(A.contains),B=w&&this.isNativeCode(w.contains);s.contains=(D&&B)?function(E,F){return E.contains(F);}:(D&&!B)?function(E,F){return E===F||((E===w)?w.documentElement:E).contains(F);\n}:(A&&A.compareDocumentPosition)?function(E,F){return E===F||!!(E.compareDocumentPosition(F)&16);}:function(E,F){if(F){do{if(F===E){return true;}}while((F=F.parentNode));\n}return false;};s.documentSorter=(A.compareDocumentPosition)?function(F,E){if(!F.compareDocumentPosition||!E.compareDocumentPosition){return 0;}return F.compareDocumentPosition(E)&4?-1:F===E?0:1;\n}:(\"sourceIndex\" in A)?function(F,E){if(!F.sourceIndex||!E.sourceIndex){return 0;}return F.sourceIndex-E.sourceIndex;}:(w.createRange)?function(H,F){if(!H.ownerDocument||!F.ownerDocument){return 0;\n}var G=H.ownerDocument.createRange(),E=F.ownerDocument.createRange();G.setStart(H,0);G.setEnd(H,0);E.setStart(F,0);E.setEnd(F,0);return G.compareBoundaryPoints(Range.START_TO_END,E);\n}:null;A=null;for(r in s){this[r]=s[r];}};var f=/^([#.]?)((?:[\\w-]+|\\*))$/,h=/\\[.+[*$^]=(?:\"\"|'')?\\]/,g={};k.search=function(U,z,H,s){var p=this.found=(s)?null:(H||[]);\nif(!U){return p;}else{if(U.navigator){U=U.document;}else{if(!U.nodeType){return p;}}}var F,O,V=this.uniques={},I=!!(H&&H.length),y=(U.nodeType==9);if(this.document!==(y?U:U.ownerDocument)){this.setDocument(U);\n}if(I){for(O=p.length;O--;){V[this.getUID(p[O])]=true;}}if(typeof z==\"string\"){var r=z.match(f);simpleSelectors:if(r){var u=r[1],v=r[2],A,E;if(!u){if(v==\"*\"&&this.brokenStarGEBTN){break simpleSelectors;\n}E=U.getElementsByTagName(v);if(s){return E[0]||null;}for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}else{if(u==\"#\"){if(!this.isHTMLDocument||!y){break simpleSelectors;\n}A=U.getElementById(v);if(!A){return p;}if(this.idGetsName&&A.getAttributeNode(\"id\").nodeValue!=v){break simpleSelectors;}if(s){return A||null;}if(!(I&&V[this.getUID(A)])){p.push(A);\n}}else{if(u==\".\"){if(!this.isHTMLDocument||((!U.getElementsByClassName||this.brokenGEBCN)&&U.querySelectorAll)){break simpleSelectors;}if(U.getElementsByClassName&&!this.brokenGEBCN){E=U.getElementsByClassName(v);\nif(s){return E[0]||null;}for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}else{var T=new RegExp(\"(^|\\\\s)\"+e.escapeRegExp(v)+\"(\\\\s|$)\");E=U.getElementsByTagName(\"*\");\nfor(O=0;A=E[O++];){className=A.className;if(!(className&&T.test(className))){continue;}if(s){return A;}if(!(I&&V[this.getUID(A)])){p.push(A);}}}}}}if(I){this.sort(p);\n}return(s)?null:p;}querySelector:if(U.querySelectorAll){if(!this.isHTMLDocument||g[z]||this.brokenMixedCaseQSA||(this.brokenCheckedQSA&&z.indexOf(\":checked\")>-1)||(this.brokenEmptyAttributeQSA&&h.test(z))||(!y&&z.indexOf(\",\")>-1)||e.disableQSA){break querySelector;\n}var S=z,x=U;if(!y){var C=x.getAttribute(\"id\"),t=\"slickid__\";x.setAttribute(\"id\",t);S=\"#\"+t+\" \"+S;U=x.parentNode;}try{if(s){return U.querySelector(S)||null;\n}else{E=U.querySelectorAll(S);}}catch(Q){g[z]=1;break querySelector;}finally{if(!y){if(C){x.setAttribute(\"id\",C);}else{x.removeAttribute(\"id\");}U=x;}}if(this.starSelectsClosedQSA){for(O=0;\nA=E[O++];){if(A.nodeName>\"@\"&&!(I&&V[this.getUID(A)])){p.push(A);}}}else{for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}if(I){this.sort(p);\n}return p;}F=this.Slick.parse(z);if(!F.length){return p;}}else{if(z==null){return p;}else{if(z.Slick){F=z;}else{if(this.contains(U.documentElement||U,z)){(p)?p.push(z):p=z;\nreturn p;}else{return p;}}}}this.posNTH={};this.posNTHLast={};this.posNTHType={};this.posNTHTypeLast={};this.push=(!I&&(s||(F.length==1&&F.expressions[0].length==1)))?this.pushArray:this.pushUID;\nif(p==null){p=[];}var M,L,K;var B,J,D,c,q,G,W;var N,P,o,w,R=F.expressions;search:for(O=0;(P=R[O]);O++){for(M=0;(o=P[M]);M++){B=\"combinator:\"+o.combinator;\nif(!this[B]){continue search;}J=(this.isXMLDocument)?o.tag:o.tag.toUpperCase();D=o.id;c=o.classList;q=o.classes;G=o.attributes;W=o.pseudos;w=(M===(P.length-1));\nthis.bitUniques={};if(w){this.uniques=V;this.found=p;}else{this.uniques={};this.found=[];}if(M===0){this[B](U,J,D,q,G,W,c);if(s&&w&&p.length){break search;\n}}else{if(s&&w){for(L=0,K=N.length;L<K;L++){this[B](N[L],J,D,q,G,W,c);if(p.length){break search;}}}else{for(L=0,K=N.length;L<K;L++){this[B](N[L],J,D,q,G,W,c);\n}}}N=this.found;}}if(I||(F.expressions.length>1)){this.sort(p);}return(s)?(p[0]||null):p;};k.uidx=1;k.uidk=\"slick-uniqueid\";k.getUIDXML=function(n){var c=n.getAttribute(this.uidk);\nif(!c){c=this.uidx++;n.setAttribute(this.uidk,c);}return c;};k.getUIDHTML=function(c){return c.uniqueNumber||(c.uniqueNumber=this.uidx++);};k.sort=function(c){if(!this.documentSorter){return c;\n}c.sort(this.documentSorter);return c;};k.cacheNTH={};k.matchNTH=/^([+-]?\\d*)?([a-z]+)?([+-]\\d+)?$/;k.parseNTHArgument=function(q){var o=q.match(this.matchNTH);\nif(!o){return false;}var p=o[2]||false;var n=o[1]||1;if(n==\"-\"){n=-1;}var c=+o[3]||0;o=(p==\"n\")?{a:n,b:c}:(p==\"odd\")?{a:2,b:1}:(p==\"even\")?{a:2,b:0}:{a:0,b:n};\nreturn(this.cacheNTH[q]=o);};k.createNTHPseudo=function(p,n,c,o){return function(s,q){var u=this.getUID(s);if(!this[c][u]){var A=s.parentNode;if(!A){return false;\n}var r=A[p],t=1;if(o){var z=s.nodeName;do{if(r.nodeName!=z){continue;}this[c][this.getUID(r)]=t++;}while((r=r[n]));}else{do{if(r.nodeType!=1){continue;\n}this[c][this.getUID(r)]=t++;}while((r=r[n]));}}q=q||\"n\";var v=this.cacheNTH[q]||this.parseNTHArgument(q);if(!v){return false;}var y=v.a,x=v.b,w=this[c][u];\nif(y==0){return x==w;}if(y>0){if(w<x){return false;}}else{if(x<w){return false;}}return((w-x)%y)==0;};};k.pushArray=function(p,c,r,o,n,q){if(this.matchSelector(p,c,r,o,n,q)){this.found.push(p);\n}};k.pushUID=function(q,c,s,p,n,r){var o=this.getUID(q);if(!this.uniques[o]&&this.matchSelector(q,c,s,p,n,r)){this.uniques[o]=true;this.found.push(q);}};\nk.matchNode=function(n,o){if(this.isHTMLDocument&&this.nativeMatchesSelector){try{return this.nativeMatchesSelector.call(n,o.replace(/\\[([^=]+)=\\s*([^'\"\\]]+?)\\s*\\]/g,'[$1=\"$2\"]'));\n}catch(u){}}var t=this.Slick.parse(o);if(!t){return true;}var r=t.expressions,s=0,q;for(q=0;(currentExpression=r[q]);q++){if(currentExpression.length==1){var p=currentExpression[0];\nif(this.matchSelector(n,(this.isXMLDocument)?p.tag:p.tag.toUpperCase(),p.id,p.classes,p.attributes,p.pseudos)){return true;}s++;}}if(s==t.length){return false;\n}var c=this.search(this.document,t),v;for(q=0;v=c[q++];){if(v===n){return true;}}return false;};k.matchPseudo=function(q,c,p){var n=\"pseudo:\"+c;if(this[n]){return this[n](q,p);\n}var o=this.getAttribute(q,c);return(p)?p==o:!!o;};k.matchSelector=function(o,v,c,p,q,s){if(v){var t=(this.isXMLDocument)?o.nodeName:o.nodeName.toUpperCase();\nif(v==\"*\"){if(t<\"@\"){return false;}}else{if(t!=v){return false;}}}if(c&&o.getAttribute(\"id\")!=c){return false;}var r,n,u;if(p){for(r=p.length;r--;){u=this.getAttribute(o,\"class\");\nif(!(u&&p[r].regexp.test(u))){return false;}}}if(q){for(r=q.length;r--;){n=q[r];if(n.operator?!n.test(this.getAttribute(o,n.key)):!this.hasAttribute(o,n.key)){return false;\n}}}if(s){for(r=s.length;r--;){n=s[r];if(!this.matchPseudo(o,n.key,n.value)){return false;}}}return true;};var j={\" \":function(q,w,n,r,s,u,p){var t,v,o;\nif(this.isHTMLDocument){getById:if(n){v=this.document.getElementById(n);if((!v&&q.all)||(this.idGetsName&&v&&v.getAttributeNode(\"id\").nodeValue!=n)){o=q.all[n];\nif(!o){return;}if(!o[0]){o=[o];}for(t=0;v=o[t++];){var c=v.getAttributeNode(\"id\");if(c&&c.nodeValue==n){this.push(v,w,null,r,s,u);break;}}return;}if(!v){if(this.contains(this.root,q)){return;\n}else{break getById;}}else{if(this.document!==q&&!this.contains(q,v)){return;}}this.push(v,w,null,r,s,u);return;}getByClass:if(r&&q.getElementsByClassName&&!this.brokenGEBCN){o=q.getElementsByClassName(p.join(\" \"));\nif(!(o&&o.length)){break getByClass;}for(t=0;v=o[t++];){this.push(v,w,n,null,s,u);}return;}}getByTag:{o=q.getElementsByTagName(w);if(!(o&&o.length)){break getByTag;\n}if(!this.brokenStarGEBTN){w=null;}for(t=0;v=o[t++];){this.push(v,w,n,r,s,u);}}},\">\":function(p,c,r,o,n,q){if((p=p.firstChild)){do{if(p.nodeType==1){this.push(p,c,r,o,n,q);\n}}while((p=p.nextSibling));}},\"+\":function(p,c,r,o,n,q){while((p=p.nextSibling)){if(p.nodeType==1){this.push(p,c,r,o,n,q);break;}}},\"^\":function(p,c,r,o,n,q){p=p.firstChild;\nif(p){if(p.nodeType==1){this.push(p,c,r,o,n,q);}else{this[\"combinator:+\"](p,c,r,o,n,q);}}},\"~\":function(q,c,s,p,n,r){while((q=q.nextSibling)){if(q.nodeType!=1){continue;\n}var o=this.getUID(q);if(this.bitUniques[o]){break;}this.bitUniques[o]=true;this.push(q,c,s,p,n,r);}},\"++\":function(p,c,r,o,n,q){this[\"combinator:+\"](p,c,r,o,n,q);\nthis[\"combinator:!+\"](p,c,r,o,n,q);},\"~~\":function(p,c,r,o,n,q){this[\"combinator:~\"](p,c,r,o,n,q);this[\"combinator:!~\"](p,c,r,o,n,q);},\"!\":function(p,c,r,o,n,q){while((p=p.parentNode)){if(p!==this.document){this.push(p,c,r,o,n,q);\n}}},\"!>\":function(p,c,r,o,n,q){p=p.parentNode;if(p!==this.document){this.push(p,c,r,o,n,q);}},\"!+\":function(p,c,r,o,n,q){while((p=p.previousSibling)){if(p.nodeType==1){this.push(p,c,r,o,n,q);\nbreak;}}},\"!^\":function(p,c,r,o,n,q){p=p.lastChild;if(p){if(p.nodeType==1){this.push(p,c,r,o,n,q);}else{this[\"combinator:!+\"](p,c,r,o,n,q);}}},\"!~\":function(q,c,s,p,n,r){while((q=q.previousSibling)){if(q.nodeType!=1){continue;\n}var o=this.getUID(q);if(this.bitUniques[o]){break;}this.bitUniques[o]=true;this.push(q,c,s,p,n,r);}}};for(var i in j){k[\"combinator:\"+i]=j[i];}var l={empty:function(c){var n=c.firstChild;\nreturn !(n&&n.nodeType==1)&&!(c.innerText||c.textContent||\"\").length;},not:function(c,n){return !this.matchNode(c,n);},contains:function(c,n){return(c.innerText||c.textContent||\"\").indexOf(n)>-1;\n},\"first-child\":function(c){while((c=c.previousSibling)){if(c.nodeType==1){return false;}}return true;},\"last-child\":function(c){while((c=c.nextSibling)){if(c.nodeType==1){return false;\n}}return true;},\"only-child\":function(o){var n=o;while((n=n.previousSibling)){if(n.nodeType==1){return false;}}var c=o;while((c=c.nextSibling)){if(c.nodeType==1){return false;\n}}return true;},\"nth-child\":k.createNTHPseudo(\"firstChild\",\"nextSibling\",\"posNTH\"),\"nth-last-child\":k.createNTHPseudo(\"lastChild\",\"previousSibling\",\"posNTHLast\"),\"nth-of-type\":k.createNTHPseudo(\"firstChild\",\"nextSibling\",\"posNTHType\",true),\"nth-last-of-type\":k.createNTHPseudo(\"lastChild\",\"previousSibling\",\"posNTHTypeLast\",true),index:function(n,c){return this[\"pseudo:nth-child\"](n,\"\"+(c+1));\n},even:function(c){return this[\"pseudo:nth-child\"](c,\"2n\");},odd:function(c){return this[\"pseudo:nth-child\"](c,\"2n+1\");},\"first-of-type\":function(c){var n=c.nodeName;\nwhile((c=c.previousSibling)){if(c.nodeName==n){return false;}}return true;},\"last-of-type\":function(c){var n=c.nodeName;while((c=c.nextSibling)){if(c.nodeName==n){return false;\n}}return true;},\"only-of-type\":function(o){var n=o,p=o.nodeName;while((n=n.previousSibling)){if(n.nodeName==p){return false;}}var c=o;while((c=c.nextSibling)){if(c.nodeName==p){return false;\n}}return true;},enabled:function(c){return !c.disabled;},disabled:function(c){return c.disabled;},checked:function(c){return c.checked||c.selected;},focus:function(c){return this.isHTMLDocument&&this.document.activeElement===c&&(c.href||c.type||this.hasAttribute(c,\"tabindex\"));\n},root:function(c){return(c===this.root);},selected:function(c){return c.selected;}};for(var b in l){k[\"pseudo:\"+b]=l[b];}var a=k.attributeGetters={\"for\":function(){return(\"htmlFor\" in this)?this.htmlFor:this.getAttribute(\"for\");\n},href:function(){return(\"href\" in this)?this.getAttribute(\"href\",2):this.getAttribute(\"href\");},style:function(){return(this.style)?this.style.cssText:this.getAttribute(\"style\");\n},tabindex:function(){var c=this.getAttributeNode(\"tabindex\");return(c&&c.specified)?c.nodeValue:null;},type:function(){return this.getAttribute(\"type\");\n},maxlength:function(){var c=this.getAttributeNode(\"maxLength\");return(c&&c.specified)?c.nodeValue:null;}};a.MAXLENGTH=a.maxLength=a.maxlength;var e=k.Slick=(this.Slick||{});\ne.version=\"1.1.7\";e.search=function(n,o,c){return k.search(n,o,c);};e.find=function(c,n){return k.search(c,n,null,true);};e.contains=function(c,n){k.setDocument(c);\nreturn k.contains(c,n);};e.getAttribute=function(n,c){k.setDocument(n);return k.getAttribute(n,c);};e.hasAttribute=function(n,c){k.setDocument(n);return k.hasAttribute(n,c);\n};e.match=function(n,c){if(!(n&&c)){return false;}if(!c||c===n){return true;}k.setDocument(n);return k.matchNode(n,c);};e.defineAttributeGetter=function(c,n){k.attributeGetters[c]=n;\nreturn this;};e.lookupAttributeGetter=function(c){return k.attributeGetters[c];};e.definePseudo=function(c,n){k[\"pseudo:\"+c]=function(p,o){return n.call(p,o);\n};return this;};e.lookupPseudo=function(c){var n=k[\"pseudo:\"+c];if(n){return function(o){return n.call(this,o);};}return null;};e.override=function(n,c){k.override(n,c);\nreturn this;};e.isXML=k.isXML;e.uidOf=function(c){return k.getUIDHTML(c);};if(!this.Slick){this.Slick=e;}}).apply((typeof exports!=\"undefined\")?exports:this);\nvar Element=function(b,g){var h=Element.Constructors[b];if(h){return h(g);}if(typeof b!=\"string\"){return document.id(b).set(g);}if(!g){g={};}if(!(/^[\\w-]+$/).test(b)){var e=Slick.parse(b).expressions[0][0];\nb=(e.tag==\"*\")?\"div\":e.tag;if(e.id&&g.id==null){g.id=e.id;}var d=e.attributes;if(d){for(var a,f=0,c=d.length;f<c;f++){a=d[f];if(g[a.key]!=null){continue;\n}if(a.value!=null&&a.operator==\"=\"){g[a.key]=a.value;}else{if(!a.value&&!a.operator){g[a.key]=true;}}}}if(e.classList&&g[\"class\"]==null){g[\"class\"]=e.classList.join(\" \");\n}}return document.newElement(b,g);};if(Browser.Element){Element.prototype=Browser.Element.prototype;Element.prototype._fireEvent=(function(a){return function(b,c){return a.call(this,b,c);\n};})(Element.prototype.fireEvent);}new Type(\"Element\",Element).mirror(function(a){if(Array.prototype[a]){return;}var b={};b[a]=function(){var h=[],e=arguments,j=true;\nfor(var g=0,d=this.length;g<d;g++){var f=this[g],c=h[g]=f[a].apply(f,e);j=(j&&typeOf(c)==\"element\");}return(j)?new Elements(h):h;};Elements.implement(b);\n});if(!Browser.Element){Element.parent=Object;Element.Prototype={\"$constructor\":Element,\"$family\":Function.from(\"element\").hide()};Element.mirror(function(a,b){Element.Prototype[a]=b;\n});}Element.Constructors={};Element.Constructors=new Hash;var IFrame=new Type(\"IFrame\",function(){var e=Array.link(arguments,{properties:Type.isObject,iframe:function(f){return(f!=null);\n}});var c=e.properties||{},b;if(e.iframe){b=document.id(e.iframe);}var d=c.onload||function(){};delete c.onload;c.id=c.name=[c.id,c.name,b?(b.id||b.name):\"IFrame_\"+String.uniqueID()].pick();\nb=new Element(b||\"iframe\",c);var a=function(){d.call(b.contentWindow);};if(window.frames[c.id]){a();}else{b.addListener(\"load\",a);}return b;});var Elements=this.Elements=function(a){if(a&&a.length){var e={},d;\nfor(var c=0;d=a[c++];){var b=Slick.uidOf(d);if(!e[b]){e[b]=true;this.push(d);}}}};Elements.prototype={length:0};Elements.parent=Array;new Type(\"Elements\",Elements).implement({filter:function(a,b){if(!a){return this;\n}return new Elements(Array.filter(this,(typeOf(a)==\"string\")?function(c){return c.match(a);}:a,b));}.protect(),push:function(){var d=this.length;for(var b=0,a=arguments.length;\nb<a;b++){var c=document.id(arguments[b]);if(c){this[d++]=c;}}return(this.length=d);}.protect(),unshift:function(){var b=[];for(var c=0,a=arguments.length;\nc<a;c++){var d=document.id(arguments[c]);if(d){b.push(d);}}return Array.prototype.unshift.apply(this,b);}.protect(),concat:function(){var b=new Elements(this);\nfor(var c=0,a=arguments.length;c<a;c++){var d=arguments[c];if(Type.isEnumerable(d)){b.append(d);}else{b.push(d);}}return b;}.protect(),append:function(c){for(var b=0,a=c.length;\nb<a;b++){this.push(c[b]);}return this;}.protect(),empty:function(){while(this.length){delete this[--this.length];}return this;}.protect()});Elements.alias(\"extend\",\"append\");\n(function(){var f=Array.prototype.splice,a={\"0\":0,\"1\":1,length:2};f.call(a,1,1);if(a[1]==1){Elements.implement(\"splice\",function(){var g=this.length;var e=f.apply(this,arguments);\nwhile(g>=this.length){delete this[g--];}return e;}.protect());}Array.forEachMethod(function(g,e){Elements.implement(e,g);});Array.mirror(Elements);var d;\ntry{d=(document.createElement(\"<input name=x>\").name==\"x\");}catch(b){}var c=function(e){return(\"\"+e).replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\");};Document.implement({newElement:function(e,g){if(g&&g.checked!=null){g.defaultChecked=g.checked;\n}if(d&&g){e=\"<\"+e;if(g.name){e+=' name=\"'+c(g.name)+'\"';}if(g.type){e+=' type=\"'+c(g.type)+'\"';}e+=\">\";delete g.name;delete g.type;}return this.id(this.createElement(e)).set(g);\n}});})();(function(){Slick.uidOf(window);Slick.uidOf(document);Document.implement({newTextNode:function(e){return this.createTextNode(e);},getDocument:function(){return this;\n},getWindow:function(){return this.window;},id:(function(){var e={string:function(E,D,l){E=Slick.find(l,\"#\"+E.replace(/(\\W)/g,\"\\\\$1\"));return(E)?e.element(E,D):null;\n},element:function(D,E){Slick.uidOf(D);if(!E&&!D.$family&&!(/^(?:object|embed)$/i).test(D.tagName)){var l=D.fireEvent;D._fireEvent=function(F,G){return l(F,G);\n};Object.append(D,Element.Prototype);}return D;},object:function(D,E,l){if(D.toElement){return e.element(D.toElement(l),E);}return null;}};e.textnode=e.whitespace=e.window=e.document=function(l){return l;\n};return function(D,F,E){if(D&&D.$family&&D.uniqueNumber){return D;}var l=typeOf(D);return(e[l])?e[l](D,F,E||document):null;};})()});if(window.$==null){Window.implement(\"$\",function(e,l){return document.id(e,l,this.document);\n});}Window.implement({getDocument:function(){return this.document;},getWindow:function(){return this;}});[Document,Element].invoke(\"implement\",{getElements:function(e){return Slick.search(this,e,new Elements);\n},getElement:function(e){return document.id(Slick.find(this,e));}});var m={contains:function(e){return Slick.contains(this,e);}};if(!document.contains){Document.implement(m);\n}if(!document.createElement(\"div\").contains){Element.implement(m);}Element.implement(\"hasChild\",function(e){return this!==e&&this.contains(e);});(function(l,E,e){this.Selectors={};\nvar F=this.Selectors.Pseudo=new Hash();var D=function(){for(var G in F){if(F.hasOwnProperty(G)){Slick.definePseudo(G,F[G]);delete F[G];}}};Slick.search=function(H,I,G){D();\nreturn l.call(this,H,I,G);};Slick.find=function(G,H){D();return E.call(this,G,H);};Slick.match=function(H,G){D();return e.call(this,H,G);};})(Slick.search,Slick.find,Slick.match);\nvar r=function(E,D){if(!E){return D;}E=Object.clone(Slick.parse(E));var l=E.expressions;for(var e=l.length;e--;){l[e][0].combinator=D;}return E;};Object.forEach({getNext:\"~\",getPrevious:\"!~\",getParent:\"!\"},function(e,l){Element.implement(l,function(D){return this.getElement(r(D,e));\n});});Object.forEach({getAllNext:\"~\",getAllPrevious:\"!~\",getSiblings:\"~~\",getChildren:\">\",getParents:\"!\"},function(e,l){Element.implement(l,function(D){return this.getElements(r(D,e));\n});});Element.implement({getFirst:function(e){return document.id(Slick.search(this,r(e,\">\"))[0]);},getLast:function(e){return document.id(Slick.search(this,r(e,\">\")).getLast());\n},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument;},getElementById:function(e){return document.id(Slick.find(this,\"#\"+(\"\"+e).replace(/(\\W)/g,\"\\\\$1\")));\n},match:function(e){return !e||Slick.match(this,e);}});if(window.$$==null){Window.implement(\"$$\",function(e){var H=new Elements;if(arguments.length==1&&typeof e==\"string\"){return Slick.search(this.document,e,H);\n}var E=Array.flatten(arguments);for(var F=0,D=E.length;F<D;F++){var G=E[F];switch(typeOf(G)){case\"element\":H.push(G);break;case\"string\":Slick.search(this.document,G,H);\n}}return H;});}if(window.$$==null){Window.implement(\"$$\",function(e){if(arguments.length==1){if(typeof e==\"string\"){return Slick.search(this.document,e,new Elements);\n}else{if(Type.isEnumerable(e)){return new Elements(e);}}}return new Elements(arguments);});}var w={before:function(l,e){var D=e.parentNode;if(D){D.insertBefore(l,e);\n}},after:function(l,e){var D=e.parentNode;if(D){D.insertBefore(l,e.nextSibling);}},bottom:function(l,e){e.appendChild(l);},top:function(l,e){e.insertBefore(l,e.firstChild);\n}};w.inside=w.bottom;Object.each(w,function(l,D){D=D.capitalize();var e={};e[\"inject\"+D]=function(E){l(this,document.id(E,true));return this;};e[\"grab\"+D]=function(E){l(document.id(E,true),this);\nreturn this;};Element.implement(e);});var j={},d={};var k={};Array.forEach([\"type\",\"value\",\"defaultValue\",\"accessKey\",\"cellPadding\",\"cellSpacing\",\"colSpan\",\"frameBorder\",\"rowSpan\",\"tabIndex\",\"useMap\"],function(e){k[e.toLowerCase()]=e;\n});k.html=\"innerHTML\";k.text=(document.createElement(\"div\").textContent==null)?\"innerText\":\"textContent\";Object.forEach(k,function(l,e){d[e]=function(D,E){D[l]=E;\n};j[e]=function(D){return D[l];};});var x=[\"compact\",\"nowrap\",\"ismap\",\"declare\",\"noshade\",\"checked\",\"disabled\",\"readOnly\",\"multiple\",\"selected\",\"noresize\",\"defer\",\"defaultChecked\",\"autofocus\",\"controls\",\"autoplay\",\"loop\"];\nvar h={};Array.forEach(x,function(e){var l=e.toLowerCase();h[l]=e;d[l]=function(D,E){D[e]=!!E;};j[l]=function(D){return !!D[e];};});Object.append(d,{\"class\":function(e,l){(\"className\" in e)?e.className=(l||\"\"):e.setAttribute(\"class\",l);\n},\"for\":function(e,l){(\"htmlFor\" in e)?e.htmlFor=l:e.setAttribute(\"for\",l);},style:function(e,l){(e.style)?e.style.cssText=l:e.setAttribute(\"style\",l);\n},value:function(e,l){e.value=(l!=null)?l:\"\";}});j[\"class\"]=function(e){return(\"className\" in e)?e.className||null:e.getAttribute(\"class\");};var f=document.createElement(\"button\");\ntry{f.type=\"button\";}catch(z){}if(f.type!=\"button\"){d.type=function(e,l){e.setAttribute(\"type\",l);};}f=null;var p=document.createElement(\"input\");p.value=\"t\";\np.type=\"submit\";if(p.value!=\"t\"){d.type=function(l,e){var D=l.value;l.type=e;l.value=D;};}p=null;var q=(function(e){e.random=\"attribute\";return(e.getAttribute(\"random\")==\"attribute\");\n})(document.createElement(\"div\"));Element.implement({setProperty:function(l,D){var E=d[l.toLowerCase()];if(E){E(this,D);}else{if(q){var e=this.retrieve(\"$attributeWhiteList\",{});\n}if(D==null){this.removeAttribute(l);if(q){delete e[l];}}else{this.setAttribute(l,\"\"+D);if(q){e[l]=true;}}}return this;},setProperties:function(e){for(var l in e){this.setProperty(l,e[l]);\n}return this;},getProperty:function(F){var D=j[F.toLowerCase()];if(D){return D(this);}if(q){var l=this.getAttributeNode(F),E=this.retrieve(\"$attributeWhiteList\",{});\nif(!l){return null;}if(l.expando&&!E[F]){var G=this.outerHTML;if(G.substr(0,G.search(/\\/?['\"]?>(?![^<]*<['\"])/)).indexOf(F)<0){return null;}E[F]=true;}}var e=Slick.getAttribute(this,F);\nreturn(!e&&!Slick.hasAttribute(this,F))?null:e;},getProperties:function(){var e=Array.from(arguments);return e.map(this.getProperty,this).associate(e);\n},removeProperty:function(e){return this.setProperty(e,null);},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;},set:function(D,l){var e=Element.Properties[D];\n(e&&e.set)?e.set.call(this,l):this.setProperty(D,l);}.overloadSetter(),get:function(l){var e=Element.Properties[l];return(e&&e.get)?e.get.apply(this):this.getProperty(l);\n}.overloadGetter(),erase:function(l){var e=Element.Properties[l];(e&&e.erase)?e.erase.apply(this):this.removeProperty(l);return this;},hasClass:function(e){return this.className.clean().contains(e,\" \");\n},addClass:function(e){if(!this.hasClass(e)){this.className=(this.className+\" \"+e).clean();}return this;},removeClass:function(e){this.className=this.className.replace(new RegExp(\"(^|\\\\s)\"+e+\"(?:\\\\s|$)\"),\"$1\");\nreturn this;},toggleClass:function(e,l){if(l==null){l=!this.hasClass(e);}return(l)?this.addClass(e):this.removeClass(e);},adopt:function(){var E=this,e,G=Array.flatten(arguments),F=G.length;\nif(F>1){E=e=document.createDocumentFragment();}for(var D=0;D<F;D++){var l=document.id(G[D],true);if(l){E.appendChild(l);}}if(e){this.appendChild(e);}return this;\n},appendText:function(l,e){return this.grab(this.getDocument().newTextNode(l),e);},grab:function(l,e){w[e||\"bottom\"](document.id(l,true),this);return this;\n},inject:function(l,e){w[e||\"bottom\"](this,document.id(l,true));return this;},replaces:function(e){e=document.id(e,true);e.parentNode.replaceChild(this,e);\nreturn this;},wraps:function(l,e){l=document.id(l,true);return this.replaces(l).grab(l,e);},getSelected:function(){this.selectedIndex;return new Elements(Array.from(this.options).filter(function(e){return e.selected;\n}));},toQueryString:function(){var e=[];this.getElements(\"input, select, textarea\").each(function(D){var l=D.type;if(!D.name||D.disabled||l==\"submit\"||l==\"reset\"||l==\"file\"||l==\"image\"){return;\n}var E=(D.get(\"tag\")==\"select\")?D.getSelected().map(function(F){return document.id(F).get(\"value\");}):((l==\"radio\"||l==\"checkbox\")&&!D.checked)?null:D.get(\"value\");\nArray.from(E).each(function(F){if(typeof F!=\"undefined\"){e.push(encodeURIComponent(D.name)+\"=\"+encodeURIComponent(F));}});});return e.join(\"&\");}});var i={},A={};\nvar B=function(e){return(A[e]||(A[e]={}));};var v=function(l){var e=l.uniqueNumber;if(l.removeEvents){l.removeEvents();}if(l.clearAttributes){l.clearAttributes();\n}if(e!=null){delete i[e];delete A[e];}return l;};var C={input:\"checked\",option:\"selected\",textarea:\"value\"};Element.implement({destroy:function(){var e=v(this).getElementsByTagName(\"*\");\nArray.each(e,v);Element.dispose(this);return null;},empty:function(){Array.from(this.childNodes).each(Element.dispose);return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;\n},clone:function(G,E){G=G!==false;var L=this.cloneNode(G),D=[L],F=[this],J;if(G){D.append(Array.from(L.getElementsByTagName(\"*\")));F.append(Array.from(this.getElementsByTagName(\"*\")));\n}for(J=D.length;J--;){var H=D[J],K=F[J];if(!E){H.removeAttribute(\"id\");}if(H.clearAttributes){H.clearAttributes();H.mergeAttributes(K);H.removeAttribute(\"uniqueNumber\");\nif(H.options){var O=H.options,e=K.options;for(var I=O.length;I--;){O[I].selected=e[I].selected;}}}var l=C[K.tagName.toLowerCase()];if(l&&K[l]){H[l]=K[l];\n}}if(Browser.ie){var M=L.getElementsByTagName(\"object\"),N=this.getElementsByTagName(\"object\");for(J=M.length;J--;){M[J].outerHTML=N[J].outerHTML;}}return document.id(L);\n}});[Element,Window,Document].invoke(\"implement\",{addListener:function(E,D){if(E==\"unload\"){var e=D,l=this;D=function(){l.removeListener(\"unload\",D);e();\n};}else{i[Slick.uidOf(this)]=this;}if(this.addEventListener){this.addEventListener(E,D,!!arguments[2]);}else{this.attachEvent(\"on\"+E,D);}return this;},removeListener:function(l,e){if(this.removeEventListener){this.removeEventListener(l,e,!!arguments[2]);\n}else{this.detachEvent(\"on\"+l,e);}return this;},retrieve:function(l,e){var E=B(Slick.uidOf(this)),D=E[l];if(e!=null&&D==null){D=E[l]=e;}return D!=null?D:null;\n},store:function(l,e){var D=B(Slick.uidOf(this));D[l]=e;return this;},eliminate:function(e){var l=B(Slick.uidOf(this));delete l[e];return this;}});if(window.attachEvent&&!window.addEventListener){window.addListener(\"unload\",function(){Object.each(i,v);\nif(window.CollectGarbage){CollectGarbage();}});}Element.Properties={};Element.Properties=new Hash;Element.Properties.style={set:function(e){this.style.cssText=e;\n},get:function(){return this.style.cssText;},erase:function(){this.style.cssText=\"\";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();\n}};Element.Properties.html={set:function(e){if(e==null){e=\"\";}else{if(typeOf(e)==\"array\"){e=e.join(\"\");}}this.innerHTML=e;},erase:function(){this.innerHTML=\"\";\n}};var t=document.createElement(\"div\");t.innerHTML=\"<nav></nav>\";var a=(t.childNodes.length==1);if(!a){var s=\"abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video\".split(\" \"),b=document.createDocumentFragment(),u=s.length;\nwhile(u--){b.createElement(s[u]);}}t=null;var g=Function.attempt(function(){var e=document.createElement(\"table\");e.innerHTML=\"<tr><td></td></tr>\";return true;\n});var c=document.createElement(\"tr\"),o=\"<td></td>\";c.innerHTML=o;var y=(c.innerHTML==o);c=null;if(!g||!y||!a){Element.Properties.html.set=(function(l){var e={table:[1,\"<table>\",\"</table>\"],select:[1,\"<select>\",\"</select>\"],tbody:[2,\"<table><tbody>\",\"</tbody></table>\"],tr:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"]};\ne.thead=e.tfoot=e.tbody;return function(D){var E=e[this.get(\"tag\")];if(!E&&!a){E=[0,\"\",\"\"];}if(!E){return l.call(this,D);}var H=E[0],G=document.createElement(\"div\"),F=G;\nif(!a){b.appendChild(G);}G.innerHTML=[E[1],D,E[2]].flatten().join(\"\");while(H--){F=F.firstChild;}this.empty().adopt(F.childNodes);if(!a){b.removeChild(G);\n}G=null;};})(Element.Properties.html.set);}var n=document.createElement(\"form\");n.innerHTML=\"<select><option>s</option></select>\";if(n.firstChild.value!=\"s\"){Element.Properties.value={set:function(G){var l=this.get(\"tag\");\nif(l!=\"select\"){return this.setProperty(\"value\",G);}var D=this.getElements(\"option\");for(var E=0;E<D.length;E++){var F=D[E],e=F.getAttributeNode(\"value\"),H=(e&&e.specified)?F.value:F.get(\"text\");\nif(H==G){return F.selected=true;}}},get:function(){var D=this,l=D.get(\"tag\");if(l!=\"select\"&&l!=\"option\"){return this.getProperty(\"value\");}if(l==\"select\"&&!(D=D.getSelected()[0])){return\"\";\n}var e=D.getAttributeNode(\"value\");return(e&&e.specified)?D.value:D.get(\"text\");}};}n=null;if(document.createElement(\"div\").getAttributeNode(\"id\")){Element.Properties.id={set:function(e){this.id=this.getAttributeNode(\"id\").value=e;\n},get:function(){return this.id||null;},erase:function(){this.id=this.getAttributeNode(\"id\").value=\"\";}};}})();(function(){var i=document.html;var d=document.createElement(\"div\");\nd.style.color=\"red\";d.style.color=null;var c=d.style.color==\"red\";d=null;Element.Properties.styles={set:function(k){this.setStyles(k);}};var h=(i.style.opacity!=null),e=(i.style.filter!=null),j=/alpha\\(opacity=([\\d.]+)\\)/i;\nvar a=function(l,k){l.store(\"$opacity\",k);l.style.visibility=k>0||k==null?\"visible\":\"hidden\";};var f=(h?function(l,k){l.style.opacity=k;}:(e?function(l,k){var n=l.style;\nif(!l.currentStyle||!l.currentStyle.hasLayout){n.zoom=1;}if(k==null||k==1){k=\"\";}else{k=\"alpha(opacity=\"+(k*100).limit(0,100).round()+\")\";}var m=n.filter||l.getComputedStyle(\"filter\")||\"\";\nn.filter=j.test(m)?m.replace(j,k):m+k;if(!n.filter){n.removeAttribute(\"filter\");}}:a));var g=(h?function(l){var k=l.style.opacity||l.getComputedStyle(\"opacity\");\nreturn(k==\"\")?1:k.toFloat();}:(e?function(l){var m=(l.style.filter||l.getComputedStyle(\"filter\")),k;if(m){k=m.match(j);}return(k==null||m==null)?1:(k[1]/100);\n}:function(l){var k=l.retrieve(\"$opacity\");if(k==null){k=(l.style.visibility==\"hidden\"?0:1);}return k;}));var b=(i.style.cssFloat==null)?\"styleFloat\":\"cssFloat\";\nElement.implement({getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()];}var l=Element.getDocument(this).defaultView,k=l?l.getComputedStyle(this,null):null;\nreturn(k)?k.getPropertyValue((m==b)?\"float\":m.hyphenate()):null;},setStyle:function(l,k){if(l==\"opacity\"){if(k!=null){k=parseFloat(k);}f(this,k);return this;\n}l=(l==\"float\"?b:l).camelCase();if(typeOf(k)!=\"string\"){var m=(Element.Styles[l]||\"@\").split(\" \");k=Array.from(k).map(function(o,n){if(!m[n]){return\"\";\n}return(typeOf(o)==\"number\")?m[n].replace(\"@\",Math.round(o)):o;}).join(\" \");}else{if(k==String(Number(k))){k=Math.round(k);}}this.style[l]=k;if((k==\"\"||k==null)&&c&&this.style.removeAttribute){this.style.removeAttribute(l);\n}return this;},getStyle:function(q){if(q==\"opacity\"){return g(this);}q=(q==\"float\"?b:q).camelCase();var k=this.style[q];if(!k||q==\"zIndex\"){k=[];for(var p in Element.ShortStyles){if(q!=p){continue;\n}for(var o in Element.ShortStyles[p]){k.push(this.getStyle(o));}return k.join(\" \");}k=this.getComputedStyle(q);}if(k){k=String(k);var m=k.match(/rgba?\\([\\d\\s,]+\\)/);\nif(m){k=k.replace(m[0],m[0].rgbToHex());}}if(Browser.opera||Browser.ie){if((/^(height|width)$/).test(q)&&!(/px$/.test(k))){var l=(q==\"width\")?[\"left\",\"right\"]:[\"top\",\"bottom\"],n=0;\nl.each(function(r){n+=this.getStyle(\"border-\"+r+\"-width\").toInt()+this.getStyle(\"padding-\"+r).toInt();},this);return this[\"offset\"+q.capitalize()]-n+\"px\";\n}if(Browser.ie&&(/^border(.+)Width|margin|padding/).test(q)&&isNaN(parseFloat(k))){return\"0px\";}}return k;},setStyles:function(l){for(var k in l){this.setStyle(k,l[k]);\n}return this;},getStyles:function(){var k={};Array.flatten(arguments).each(function(l){k[l]=this.getStyle(l);},this);return k;}});Element.Styles={left:\"@px\",top:\"@px\",bottom:\"@px\",right:\"@px\",width:\"@px\",height:\"@px\",maxWidth:\"@px\",maxHeight:\"@px\",minWidth:\"@px\",minHeight:\"@px\",backgroundColor:\"rgb(@, @, @)\",backgroundPosition:\"@px @px\",color:\"rgb(@, @, @)\",fontSize:\"@px\",letterSpacing:\"@px\",lineHeight:\"@px\",clip:\"rect(@px @px @px @px)\",margin:\"@px @px @px @px\",padding:\"@px @px @px @px\",border:\"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)\",borderWidth:\"@px @px @px @px\",borderStyle:\"@ @ @ @\",borderColor:\"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)\",zIndex:\"@\",zoom:\"@\",fontWeight:\"@\",textIndent:\"@px\",opacity:\"@\"};\nElement.implement({setOpacity:function(k){f(this,k);return this;},getOpacity:function(){return g(this);}});Element.Properties.opacity={set:function(k){f(this,k);\na(this,k);},get:function(){return g(this);}};Element.Styles=new Hash(Element.Styles);Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};\n[\"Top\",\"Right\",\"Bottom\",\"Left\"].each(function(q){var p=Element.ShortStyles;var l=Element.Styles;[\"margin\",\"padding\"].each(function(r){var s=r+q;p[r][s]=l[s]=\"@px\";\n});var o=\"border\"+q;p.border[o]=l[o]=\"@px @ rgb(@, @, @)\";var n=o+\"Width\",k=o+\"Style\",m=o+\"Color\";p[o]={};p.borderWidth[n]=p[o][n]=l[n]=\"@px\";p.borderStyle[k]=p[o][k]=l[k]=\"@\";\np.borderColor[m]=p[o][m]=l[m]=\"rgb(@, @, @)\";});})();(function(){Element.Properties.events={set:function(b){this.addEvents(b);}};[Element,Window,Document].invoke(\"implement\",{addEvent:function(f,h){var i=this.retrieve(\"events\",{});\nif(!i[f]){i[f]={keys:[],values:[]};}if(i[f].keys.contains(h)){return this;}i[f].keys.push(h);var g=f,b=Element.Events[f],d=h,j=this;if(b){if(b.onAdd){b.onAdd.call(this,h,f);\n}if(b.condition){d=function(k){if(b.condition.call(this,k,f)){return h.call(this,k);}return true;};}if(b.base){g=Function.from(b.base).call(this,f);}}var e=function(){return h.call(j);\n};var c=Element.NativeEvents[g];if(c){if(c==2){e=function(k){k=new DOMEvent(k,j.getWindow());if(d.call(j,k)===false){k.stop();}};}this.addListener(g,e,arguments[2]);\n}i[f].values.push(e);return this;},removeEvent:function(e,d){var c=this.retrieve(\"events\");if(!c||!c[e]){return this;}var h=c[e];var b=h.keys.indexOf(d);\nif(b==-1){return this;}var g=h.values[b];delete h.keys[b];delete h.values[b];var f=Element.Events[e];if(f){if(f.onRemove){f.onRemove.call(this,d,e);}if(f.base){e=Function.from(f.base).call(this,e);\n}}return(Element.NativeEvents[e])?this.removeListener(e,g,arguments[2]):this;},addEvents:function(b){for(var c in b){this.addEvent(c,b[c]);}return this;\n},removeEvents:function(b){var d;if(typeOf(b)==\"object\"){for(d in b){this.removeEvent(d,b[d]);}return this;}var c=this.retrieve(\"events\");if(!c){return this;\n}if(!b){for(d in c){this.removeEvents(d);}this.eliminate(\"events\");}else{if(c[b]){c[b].keys.each(function(e){this.removeEvent(b,e);},this);delete c[b];\n}}return this;},fireEvent:function(e,c,b){var d=this.retrieve(\"events\");if(!d||!d[e]){return this;}c=Array.from(c);d[e].keys.each(function(f){if(b){f.delay(b,this,c);\n}else{f.apply(this,c);}},this);return this;},cloneEvents:function(e,d){e=document.id(e);var c=e.retrieve(\"events\");if(!c){return this;}if(!d){for(var b in c){this.cloneEvents(e,b);\n}}else{if(c[d]){c[d].keys.each(function(f){this.addEvent(d,f);},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,orientationchange:2,touchstart:2,touchmove:2,touchend:2,touchcancel:2,gesturestart:2,gesturechange:2,gestureend:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,paste:2,input:2,load:2,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};\nElement.Events={mousewheel:{base:(Browser.firefox)?\"DOMMouseScroll\":\"mousewheel\"}};if(\"onmouseenter\" in document.documentElement){Element.NativeEvents.mouseenter=Element.NativeEvents.mouseleave=2;\n}else{var a=function(b){var c=b.relatedTarget;if(c==null){return true;}if(!c){return false;}return(c!=this&&c.prefix!=\"xul\"&&typeOf(this)!=\"document\"&&!this.contains(c));\n};Element.Events.mouseenter={base:\"mouseover\",condition:a};Element.Events.mouseleave={base:\"mouseout\",condition:a};}if(!window.addEventListener){Element.NativeEvents.propertychange=2;\nElement.Events.change={base:function(){var b=this.type;return(this.get(\"tag\")==\"input\"&&(b==\"radio\"||b==\"checkbox\"))?\"propertychange\":\"change\";},condition:function(b){return this.type!=\"radio\"||(b.event.propertyName==\"checked\"&&this.checked);\n}};}Element.Events=new Hash(Element.Events);})();(function(){var c=!!window.addEventListener;Element.NativeEvents.focusin=Element.NativeEvents.focusout=2;\nvar k=function(l,m,n,o,p){while(p&&p!=l){if(m(p,o)){return n.call(p,o,p);}p=document.id(p.parentNode);}};var a={mouseenter:{base:\"mouseover\"},mouseleave:{base:\"mouseout\"},focus:{base:\"focus\"+(c?\"\":\"in\"),capture:true},blur:{base:c?\"blur\":\"focusout\",capture:true}};\nvar b=\"$delegation:\";var i=function(l){return{base:\"focusin\",remove:function(m,o){var p=m.retrieve(b+l+\"listeners\",{})[o];if(p&&p.forms){for(var n=p.forms.length;\nn--;){p.forms[n].removeEvent(l,p.fns[n]);}}},listen:function(x,r,v,n,t,s){var o=(t.get(\"tag\")==\"form\")?t:n.target.getParent(\"form\");if(!o){return;}var u=x.retrieve(b+l+\"listeners\",{}),p=u[s]||{forms:[],fns:[]},m=p.forms,w=p.fns;\nif(m.indexOf(o)!=-1){return;}m.push(o);var q=function(y){k(x,r,v,y,t);};o.addEvent(l,q);w.push(q);u[s]=p;x.store(b+l+\"listeners\",u);}};};var d=function(l){return{base:\"focusin\",listen:function(m,n,p,q,r){var o={blur:function(){this.removeEvents(o);\n}};o[l]=function(s){k(m,n,p,s,r);};q.target.addEvents(o);}};};if(!c){Object.append(a,{submit:i(\"submit\"),reset:i(\"reset\"),change:d(\"change\"),select:d(\"select\")});\n}var h=Element.prototype,f=h.addEvent,j=h.removeEvent;var e=function(l,m){return function(r,q,n){if(r.indexOf(\":relay\")==-1){return l.call(this,r,q,n);\n}var o=Slick.parse(r).expressions[0][0];if(o.pseudos[0].key!=\"relay\"){return l.call(this,r,q,n);}var p=o.tag;o.pseudos.slice(1).each(function(s){p+=\":\"+s.key+(s.value?\"(\"+s.value+\")\":\"\");\n});l.call(this,r,q);return m.call(this,p,o.pseudos[0].value,q);};};var g={addEvent:function(v,q,x){var t=this.retrieve(\"$delegates\",{}),r=t[v];if(r){for(var y in r){if(r[y].fn==x&&r[y].match==q){return this;\n}}}var p=v,u=q,o=x,n=a[v]||{};v=n.base||p;q=function(B){return Slick.match(B,u);};var w=Element.Events[p];if(w&&w.condition){var l=q,m=w.condition;q=function(C,B){return l(C,B)&&m.call(C,B,v);\n};}var z=this,s=String.uniqueID();var A=n.listen?function(B,C){if(!C&&B&&B.target){C=B.target;}if(C){n.listen(z,q,x,B,C,s);}}:function(B,C){if(!C&&B&&B.target){C=B.target;\n}if(C){k(z,q,x,B,C);}};if(!r){r={};}r[s]={match:u,fn:o,delegator:A};t[p]=r;return f.call(this,v,A,n.capture);},removeEvent:function(r,n,t,u){var q=this.retrieve(\"$delegates\",{}),p=q[r];\nif(!p){return this;}if(u){var m=r,w=p[u].delegator,l=a[r]||{};r=l.base||m;if(l.remove){l.remove(this,u);}delete p[u];q[m]=p;return j.call(this,r,w);}var o,v;\nif(t){for(o in p){v=p[o];if(v.match==n&&v.fn==t){return g.removeEvent.call(this,r,n,t,o);}}}else{for(o in p){v=p[o];if(v.match==n){g.removeEvent.call(this,r,n,v.fn,o);\n}}}return this;}};[Element,Window,Document].invoke(\"implement\",{addEvent:e(f,g.addEvent),removeEvent:e(j,g.removeEvent)});})();(function(){var h=document.createElement(\"div\"),e=document.createElement(\"div\");\nh.style.height=\"0\";h.appendChild(e);var d=(e.offsetParent===h);h=e=null;var l=function(m){return k(m,\"position\")!=\"static\"||a(m);};var i=function(m){return l(m)||(/^(?:table|td|th)$/i).test(m.tagName);\n};Element.implement({scrollTo:function(m,n){if(a(this)){this.getWindow().scrollTo(m,n);}else{this.scrollLeft=m;this.scrollTop=n;}return this;},getSize:function(){if(a(this)){return this.getWindow().getSize();\n}return{x:this.offsetWidth,y:this.offsetHeight};},getScrollSize:function(){if(a(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight};\n},getScroll:function(){if(a(this)){return this.getWindow().getScroll();}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var n=this.parentNode,m={x:0,y:0};\nwhile(n&&!a(n)){m.x+=n.scrollLeft;m.y+=n.scrollTop;n=n.parentNode;}return m;},getOffsetParent:d?function(){var m=this;if(a(m)||k(m,\"position\")==\"fixed\"){return null;\n}var n=(k(m,\"position\")==\"static\")?i:l;while((m=m.parentNode)){if(n(m)){return m;}}return null;}:function(){var m=this;if(a(m)||k(m,\"position\")==\"fixed\"){return null;\n}try{return m.offsetParent;}catch(n){}return null;},getOffsets:function(){if(this.getBoundingClientRect&&!Browser.Platform.ios){var r=this.getBoundingClientRect(),o=document.id(this.getDocument().documentElement),q=o.getScroll(),t=this.getScrolls(),s=(k(this,\"position\")==\"fixed\");\nreturn{x:r.left.toInt()+t.x+((s)?0:q.x)-o.clientLeft,y:r.top.toInt()+t.y+((s)?0:q.y)-o.clientTop};}var n=this,m={x:0,y:0};if(a(this)){return m;}while(n&&!a(n)){m.x+=n.offsetLeft;\nm.y+=n.offsetTop;if(Browser.firefox){if(!c(n)){m.x+=b(n);m.y+=g(n);}var p=n.parentNode;if(p&&k(p,\"overflow\")!=\"visible\"){m.x+=b(p);m.y+=g(p);}}else{if(n!=this&&Browser.safari){m.x+=b(n);\nm.y+=g(n);}}n=n.offsetParent;}if(Browser.firefox&&!c(this)){m.x-=b(this);m.y-=g(this);}return m;},getPosition:function(p){var q=this.getOffsets(),n=this.getScrolls();\nvar m={x:q.x-n.x,y:q.y-n.y};if(p&&(p=document.id(p))){var o=p.getPosition();return{x:m.x-o.x-b(p),y:m.y-o.y-g(p)};}return m;},getCoordinates:function(o){if(a(this)){return this.getWindow().getCoordinates();\n}var m=this.getPosition(o),n=this.getSize();var p={left:m.x,top:m.y,width:n.x,height:n.y};p.right=p.left+p.width;p.bottom=p.top+p.height;return p;},computePosition:function(m){return{left:m.x-j(this,\"margin-left\"),top:m.y-j(this,\"margin-top\")};\n},setPosition:function(m){return this.setStyles(this.computePosition(m));}});[Document,Window].invoke(\"implement\",{getSize:function(){var m=f(this);return{x:m.clientWidth,y:m.clientHeight};\n},getScroll:function(){var n=this.getWindow(),m=f(this);return{x:n.pageXOffset||m.scrollLeft,y:n.pageYOffset||m.scrollTop};},getScrollSize:function(){var o=f(this),n=this.getSize(),m=this.getDocument().body;\nreturn{x:Math.max(o.scrollWidth,m.scrollWidth,n.x),y:Math.max(o.scrollHeight,m.scrollHeight,n.y)};},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var m=this.getSize();\nreturn{top:0,left:0,bottom:m.y,right:m.x,height:m.y,width:m.x};}});var k=Element.getComputedStyle;function j(m,n){return k(m,n).toInt()||0;}function c(m){return k(m,\"-moz-box-sizing\")==\"border-box\";\n}function g(m){return j(m,\"border-top-width\");}function b(m){return j(m,\"border-left-width\");}function a(m){return(/^(?:body|html)$/i).test(m.tagName);\n}function f(m){var n=m.getDocument();return(!n.compatMode||n.compatMode==\"CSS1Compat\")?n.html:n.body;}})();Element.alias({position:\"setPosition\"});[Window,Document,Element].invoke(\"implement\",{getHeight:function(){return this.getSize().y;\n},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;},getScrollLeft:function(){return this.getScroll().x;\n},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;},getTop:function(){return this.getPosition().y;\n},getLeft:function(){return this.getPosition().x;}});(function(){var f=this.Fx=new Class({Implements:[Chain,Events,Options],options:{fps:60,unit:false,duration:500,frames:null,frameSkip:true,link:\"ignore\"},initialize:function(g){this.subject=this.subject||this;\nthis.setOptions(g);},getTransition:function(){return function(g){return -(Math.cos(Math.PI*g)-1)/2;};},step:function(g){if(this.options.frameSkip){var h=(this.time!=null)?(g-this.time):0,i=h/this.frameInterval;\nthis.time=g;this.frame+=i;}else{this.frame++;}if(this.frame<this.frames){var j=this.transition(this.frame/this.frames);this.set(this.compute(this.from,this.to,j));\n}else{this.frame=this.frames;this.set(this.compute(this.from,this.to,1));this.stop();}},set:function(g){return g;},compute:function(i,h,g){return f.compute(i,h,g);\n},check:function(){if(!this.isRunning()){return true;}switch(this.options.link){case\"cancel\":this.cancel();return true;case\"chain\":this.chain(this.caller.pass(arguments,this));\nreturn false;}return false;},start:function(k,j){if(!this.check(k,j)){return this;}this.from=k;this.to=j;this.frame=(this.options.frameSkip)?0:-1;this.time=null;\nthis.transition=this.getTransition();var i=this.options.frames,h=this.options.fps,g=this.options.duration;this.duration=f.Durations[g]||g.toInt();this.frameInterval=1000/h;\nthis.frames=i||Math.round(this.duration/this.frameInterval);this.fireEvent(\"start\",this.subject);b.call(this,h);return this;},stop:function(){if(this.isRunning()){this.time=null;\nd.call(this,this.options.fps);if(this.frames==this.frame){this.fireEvent(\"complete\",this.subject);if(!this.callChain()){this.fireEvent(\"chainComplete\",this.subject);\n}}else{this.fireEvent(\"stop\",this.subject);}}return this;},cancel:function(){if(this.isRunning()){this.time=null;d.call(this,this.options.fps);this.frame=this.frames;\nthis.fireEvent(\"cancel\",this.subject).clearChain();}return this;},pause:function(){if(this.isRunning()){this.time=null;d.call(this,this.options.fps);}return this;\n},resume:function(){if((this.frame<this.frames)&&!this.isRunning()){b.call(this,this.options.fps);}return this;},isRunning:function(){var g=e[this.options.fps];\nreturn g&&g.contains(this);}});f.compute=function(i,h,g){return(h-i)*g+i;};f.Durations={\"short\":250,normal:500,\"long\":1000};var e={},c={};var a=function(){var h=Date.now();\nfor(var j=this.length;j--;){var g=this[j];if(g){g.step(h);}}};var b=function(h){var g=e[h]||(e[h]=[]);g.push(this);if(!c[h]){c[h]=a.periodical(Math.round(1000/h),g);\n}};var d=function(h){var g=e[h];if(g){g.erase(this);if(!g.length&&c[h]){delete e[h];c[h]=clearInterval(c[h]);}}};})();Fx.CSS=new Class({Extends:Fx,prepare:function(b,e,a){a=Array.from(a);\nvar h=a[0],g=a[1];if(g==null){g=h;h=b.getStyle(e);var c=this.options.unit;if(c&&h.slice(-c.length)!=c&&parseFloat(h)!=0){b.setStyle(e,g+c);var d=b.getComputedStyle(e);\nif(!(/px$/.test(d))){d=b.style[(\"pixel-\"+e).camelCase()];if(d==null){var f=b.style.left;b.style.left=g+c;d=b.style.pixelLeft;b.style.left=f;}}h=(g||1)/(parseFloat(d)||1)*(parseFloat(h)||0);\nb.setStyle(e,h+c);}}return{from:this.parse(h),to:this.parse(g)};},parse:function(a){a=Function.from(a)();a=(typeof a==\"string\")?a.split(\" \"):Array.from(a);\nreturn a.map(function(c){c=String(c);var b=false;Object.each(Fx.CSS.Parsers,function(f,e){if(b){return;}var d=f.parse(c);if(d||d===0){b={value:d,parser:f};\n}});b=b||{value:c,parser:Fx.CSS.Parsers.String};return b;});},compute:function(d,c,b){var a=[];(Math.min(d.length,c.length)).times(function(e){a.push({value:d[e].parser.compute(d[e].value,c[e].value,b),parser:d[e].parser});\n});a.$family=Function.from(\"fx:css:value\");return a;},serve:function(c,b){if(typeOf(c)!=\"fx:css:value\"){c=this.parse(c);}var a=[];c.each(function(d){a=a.concat(d.parser.serve(d.value,b));\n});return a;},render:function(a,d,c,b){a.setStyle(d,this.serve(c,b));},search:function(a){if(Fx.CSS.Cache[a]){return Fx.CSS.Cache[a];}var c={},b=new RegExp(\"^\"+a.escapeRegExp()+\"$\");\nArray.each(document.styleSheets,function(f,e){var d=f.href;if(d&&d.contains(\"://\")&&!d.contains(document.domain)){return;}var g=f.rules||f.cssRules;Array.each(g,function(k,h){if(!k.style){return;\n}var j=(k.selectorText)?k.selectorText.replace(/^\\w+/,function(i){return i.toLowerCase();}):null;if(!j||!b.test(j)){return;}Object.each(Element.Styles,function(l,i){if(!k.style[i]||Element.ShortStyles[i]){return;\n}l=String(k.style[i]);c[i]=((/^rgb/).test(l))?l.rgbToHex():l;});});});return Fx.CSS.Cache[a]=c;}});Fx.CSS.Cache={};Fx.CSS.Parsers={Color:{parse:function(a){if(a.match(/^#[0-9a-f]{3,6}$/i)){return a.hexToRgb(true);\n}return((a=a.match(/(\\d+),\\s*(\\d+),\\s*(\\d+)/)))?[a[1],a[2],a[3]]:false;},compute:function(c,b,a){return c.map(function(e,d){return Math.round(Fx.compute(c[d],b[d],a));\n});},serve:function(a){return a.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(b,a){return(a)?b+a:b;}},String:{parse:Function.from(false),compute:function(b,a){return a;\n},serve:function(a){return a;}}};Fx.CSS.Parsers=new Hash(Fx.CSS.Parsers);Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);\nthis.parent(a);},set:function(b,a){if(arguments.length==1){a=b;b=this.property||this.options.property;}this.render(this.element,b,a,this.options.unit);\nreturn this;},start:function(c,e,d){if(!this.check(c,e,d)){return this;}var b=Array.flatten(arguments);this.property=this.options.property||b.shift();var a=this.prepare(this.element,this.property,b);\nreturn this.parent(a.from,a.to);}});Element.Properties.tween={set:function(a){this.get(\"tween\").cancel().setOptions(a);return this;},get:function(){var a=this.retrieve(\"tween\");\nif(!a){a=new Fx.Tween(this,{link:\"cancel\"});this.store(\"tween\",a);}return a;}};Element.implement({tween:function(a,c,b){this.get(\"tween\").start(a,c,b);\nreturn this;},fade:function(d){var e=this.get(\"tween\"),g,c=[\"opacity\"].append(arguments),a;if(c[1]==null){c[1]=\"toggle\";}switch(c[1]){case\"in\":g=\"start\";\nc[1]=1;break;case\"out\":g=\"start\";c[1]=0;break;case\"show\":g=\"set\";c[1]=1;break;case\"hide\":g=\"set\";c[1]=0;break;case\"toggle\":var b=this.retrieve(\"fade:flag\",this.getStyle(\"opacity\")==1);\ng=\"start\";c[1]=b?0:1;this.store(\"fade:flag\",!b);a=true;break;default:g=\"start\";}if(!a){this.eliminate(\"fade:flag\");}e[g].apply(e,c);var f=c[c.length-1];\nif(g==\"set\"||f!=0){this.setStyle(\"visibility\",f==0?\"hidden\":\"visible\");}else{e.chain(function(){this.element.setStyle(\"visibility\",\"hidden\");this.callChain();\n});}return this;},highlight:function(c,a){if(!a){a=this.retrieve(\"highlight:original\",this.getStyle(\"background-color\"));a=(a==\"transparent\")?\"#fff\":a;\n}var b=this.get(\"tween\");b.start(\"background-color\",c||\"#ffff88\",a).chain(function(){this.setStyle(\"background-color\",this.retrieve(\"highlight:original\"));\nb.callChain();}.bind(this));return this;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a);\n},set:function(a){if(typeof a==\"string\"){a=this.search(a);}for(var b in a){this.render(this.element,b,a[b],this.options.unit);}return this;},compute:function(e,d,c){var a={};\nfor(var b in e){a[b]=this.parent(e[b],d[b],c);}return a;},start:function(b){if(!this.check(b)){return this;}if(typeof b==\"string\"){b=this.search(b);}var e={},d={};\nfor(var c in b){var a=this.prepare(this.element,c,b[c]);e[c]=a.from;d[c]=a.to;}return this.parent(e,d);}});Element.Properties.morph={set:function(a){this.get(\"morph\").cancel().setOptions(a);\nreturn this;},get:function(){var a=this.retrieve(\"morph\");if(!a){a=new Fx.Morph(this,{link:\"cancel\"});this.store(\"morph\",a);}return a;}};Element.implement({morph:function(a){this.get(\"morph\").start(a);\nreturn this;}});Fx.implement({getTransition:function(){var a=this.options.transition||Fx.Transitions.Sine.easeInOut;if(typeof a==\"string\"){var b=a.split(\":\");\na=Fx.Transitions;a=a[b[0]]||a[b[0].capitalize()];if(b[1]){a=a[\"ease\"+b[1].capitalize()+(b[2]?b[2].capitalize():\"\")];}}return a;}});Fx.Transition=function(c,b){b=Array.from(b);\nvar a=function(d){return c(d,b);};return Object.append(a,{easeIn:a,easeOut:function(d){return 1-c(1-d,b);},easeInOut:function(d){return(d<=0.5?c(2*d,b):(2-c(2*(1-d),b)))/2;\n}});};Fx.Transitions={linear:function(a){return a;}};Fx.Transitions=new Hash(Fx.Transitions);Fx.Transitions.extend=function(a){for(var b in a){Fx.Transitions[b]=new Fx.Transition(a[b]);\n}};Fx.Transitions.extend({Pow:function(b,a){return Math.pow(b,a&&a[0]||6);},Expo:function(a){return Math.pow(2,8*(a-1));},Circ:function(a){return 1-Math.sin(Math.acos(a));\n},Sine:function(a){return 1-Math.cos(a*Math.PI/2);},Back:function(b,a){a=a&&a[0]||1.618;return Math.pow(b,2)*((a+1)*b-a);},Bounce:function(f){var e;for(var d=0,c=1;\n1;d+=c,c/=2){if(f>=(7-4*d)/11){e=c*c-Math.pow((11-6*d-11*f)/4,2);break;}}return e;},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a&&a[0]||1)/3);\n}});[\"Quad\",\"Cubic\",\"Quart\",\"Quint\"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,a+2);});});(function(){var d=function(){},a=(\"onprogress\" in new Browser.Request);\nvar c=this.Request=new Class({Implements:[Chain,Events,Options],options:{url:\"\",data:\"\",headers:{\"X-Requested-With\":\"XMLHttpRequest\",Accept:\"text/javascript, text/html, application/xml, text/xml, */*\"},async:true,format:false,method:\"post\",link:\"ignore\",isSuccess:null,emulation:true,urlEncoded:true,encoding:\"utf-8\",evalScripts:false,evalResponse:false,timeout:0,noCache:false},initialize:function(e){this.xhr=new Browser.Request();\nthis.setOptions(e);this.headers=this.options.headers;},onStateChange:function(){var e=this.xhr;if(e.readyState!=4||!this.running){return;}this.running=false;\nthis.status=0;Function.attempt(function(){var f=e.status;this.status=(f==1223)?204:f;}.bind(this));e.onreadystatechange=d;if(a){e.onprogress=e.onloadstart=d;\n}clearTimeout(this.timer);this.response={text:this.xhr.responseText||\"\",xml:this.xhr.responseXML};if(this.options.isSuccess.call(this,this.status)){this.success(this.response.text,this.response.xml);\n}else{this.failure();}},isSuccess:function(){var e=this.status;return(e>=200&&e<300);},isRunning:function(){return !!this.running;},processScripts:function(e){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader(\"Content-type\"))){return Browser.exec(e);\n}return e.stripScripts(this.options.evalScripts);},success:function(f,e){this.onSuccess(this.processScripts(f),e);},onSuccess:function(){this.fireEvent(\"complete\",arguments).fireEvent(\"success\",arguments).callChain();\n},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent(\"complete\").fireEvent(\"failure\",this.xhr);},loadstart:function(e){this.fireEvent(\"loadstart\",[e,this.xhr]);\n},progress:function(e){this.fireEvent(\"progress\",[e,this.xhr]);},timeout:function(){this.fireEvent(\"timeout\",this.xhr);},setHeader:function(e,f){this.headers[e]=f;\nreturn this;},getHeader:function(e){return Function.attempt(function(){return this.xhr.getResponseHeader(e);}.bind(this));},check:function(){if(!this.running){return true;\n}switch(this.options.link){case\"cancel\":this.cancel();return true;case\"chain\":this.chain(this.caller.pass(arguments,this));return false;}return false;},send:function(o){if(!this.check(o)){return this;\n}this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.running=true;var l=typeOf(o);if(l==\"string\"||l==\"element\"){o={data:o};}var h=this.options;\no=Object.append({data:h.data,url:h.url,method:h.method},o);var j=o.data,f=String(o.url),e=o.method.toLowerCase();switch(typeOf(j)){case\"element\":j=document.id(j).toQueryString();\nbreak;case\"object\":case\"hash\":j=Object.toQueryString(j);}if(this.options.format){var m=\"format=\"+this.options.format;j=(j)?m+\"&\"+j:m;}if(this.options.emulation&&![\"get\",\"post\"].contains(e)){var k=\"_method=\"+e;\nj=(j)?k+\"&\"+j:k;e=\"post\";}if(this.options.urlEncoded&&[\"post\",\"put\"].contains(e)){var g=(this.options.encoding)?\"; charset=\"+this.options.encoding:\"\";this.headers[\"Content-type\"]=\"application/x-www-form-urlencoded\"+g;\n}if(!f){f=document.location.pathname;}var i=f.lastIndexOf(\"/\");if(i>-1&&(i=f.indexOf(\"#\"))>-1){f=f.substr(0,i);}if(this.options.noCache){f+=(f.contains(\"?\")?\"&\":\"?\")+String.uniqueID();\n}if(j&&e==\"get\"){f+=(f.contains(\"?\")?\"&\":\"?\")+j;j=null;}var n=this.xhr;if(a){n.onloadstart=this.loadstart.bind(this);n.onprogress=this.progress.bind(this);\n}n.open(e.toUpperCase(),f,this.options.async,this.options.user,this.options.password);if(this.options.user&&\"withCredentials\" in n){n.withCredentials=true;\n}n.onreadystatechange=this.onStateChange.bind(this);Object.each(this.headers,function(q,p){try{n.setRequestHeader(p,q);}catch(r){this.fireEvent(\"exception\",[p,q]);\n}},this);this.fireEvent(\"request\");n.send(j);if(!this.options.async){this.onStateChange();}else{if(this.options.timeout){this.timer=this.timeout.delay(this.options.timeout,this);\n}}return this;},cancel:function(){if(!this.running){return this;}this.running=false;var e=this.xhr;e.abort();clearTimeout(this.timer);e.onreadystatechange=d;\nif(a){e.onprogress=e.onloadstart=d;}this.xhr=new Browser.Request();this.fireEvent(\"cancel\");return this;}});var b={};[\"get\",\"post\",\"put\",\"delete\",\"GET\",\"POST\",\"PUT\",\"DELETE\"].each(function(e){b[e]=function(g){var f={method:e};\nif(g!=null){f.data=g;}return this.send(f);};});c.implement(b);Element.Properties.send={set:function(e){var f=this.get(\"send\").cancel();f.setOptions(e);\nreturn this;},get:function(){var e=this.retrieve(\"send\");if(!e){e=new c({data:this,link:\"cancel\",method:this.get(\"method\")||\"post\",url:this.get(\"action\")});\nthis.store(\"send\",e);}return e;}};Element.implement({send:function(e){var f=this.get(\"send\");f.send({data:this,url:e||f.options.url});return this;}});})();\nRequest.HTML=new Class({Extends:Request,options:{update:false,append:false,evalScripts:true,filter:false,headers:{Accept:\"text/html, application/xml, text/xml, */*\"}},success:function(f){var e=this.options,c=this.response;\nc.html=f.stripScripts(function(h){c.javascript=h;});var d=c.html.match(/<body[^>]*>([\\s\\S]*?)<\\/body>/i);if(d){c.html=d[1];}var b=new Element(\"div\").set(\"html\",c.html);\nc.tree=b.childNodes;c.elements=b.getElements(e.filter||\"*\");if(e.filter){c.tree=c.elements;}if(e.update){var g=document.id(e.update).empty();if(e.filter){g.adopt(c.elements);\n}else{g.set(\"html\",c.html);}}else{if(e.append){var a=document.id(e.append);if(e.filter){c.elements.reverse().inject(a);}else{a.adopt(b.getChildren());}}}if(e.evalScripts){Browser.exec(c.javascript);\n}this.onSuccess(c.tree,c.elements,c.html,c.javascript);}});Element.Properties.load={set:function(a){var b=this.get(\"load\").cancel();b.setOptions(a);return this;\n},get:function(){var a=this.retrieve(\"load\");if(!a){a=new Request.HTML({data:this,link:\"cancel\",update:this,method:\"get\"});this.store(\"load\",a);}return a;\n}};Element.implement({load:function(){this.get(\"load\").send(Array.link(arguments,{data:Type.isObject,url:Type.isString}));return this;}});if(typeof JSON==\"undefined\"){this.JSON={};\n}JSON=new Hash({stringify:JSON.stringify,parse:JSON.parse});(function(){var special={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"};\nvar escape=function(chr){return special[chr]||\"\\\\u\"+(\"0000\"+chr.charCodeAt(0).toString(16)).slice(-4);};JSON.validate=function(string){string=string.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\"@\").replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\"]\").replace(/(?:^|:|,)(?:\\s*\\[)+/g,\"\");\nreturn(/^[\\],:{}\\s]*$/).test(string);};JSON.encode=JSON.stringify?function(obj){return JSON.stringify(obj);}:function(obj){if(obj&&obj.toJSON){obj=obj.toJSON();\n}switch(typeOf(obj)){case\"string\":return'\"'+obj.replace(/[\\x00-\\x1f\\\\\"]/g,escape)+'\"';case\"array\":return\"[\"+obj.map(JSON.encode).clean()+\"]\";case\"object\":case\"hash\":var string=[];\nObject.each(obj,function(value,key){var json=JSON.encode(value);if(json){string.push(JSON.encode(key)+\":\"+json);}});return\"{\"+string+\"}\";case\"number\":case\"boolean\":return\"\"+obj;\ncase\"null\":return\"null\";}return null;};JSON.decode=function(string,secure){if(!string||typeOf(string)!=\"string\"){return null;}if(secure||JSON.secure){if(JSON.parse){return JSON.parse(string);\n}if(!JSON.validate(string)){throw new Error(\"JSON could not decode the input; security is enabled and the value is not secure.\");}}return eval(\"(\"+string+\")\");\n};})();Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(a){this.parent(a);Object.append(this.headers,{Accept:\"application/json\",\"X-Request\":\"JSON\"});\n},success:function(c){var b;try{b=this.response.json=JSON.decode(c,this.options.secure);}catch(a){this.fireEvent(\"error\",[c,a]);return;}if(b==null){this.onFailure();\n}else{this.onSuccess(b,c);}}});var Cookie=new Class({Implements:Options,options:{path:\"/\",domain:false,duration:false,secure:false,document:document,encode:true},initialize:function(b,a){this.key=b;\nthis.setOptions(a);},write:function(b){if(this.options.encode){b=encodeURIComponent(b);}if(this.options.domain){b+=\"; domain=\"+this.options.domain;}if(this.options.path){b+=\"; path=\"+this.options.path;\n}if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+=\"; expires=\"+a.toGMTString();}if(this.options.secure){b+=\"; secure\";\n}this.options.document.cookie=this.key+\"=\"+b;return this;},read:function(){var a=this.options.document.cookie.match(\"(?:^|;)\\\\s*\"+this.key.escapeRegExp()+\"=([^;]*)\");\nreturn(a)?decodeURIComponent(a[1]):null;},dispose:function(){new Cookie(this.key,Object.merge({},this.options,{duration:-1})).write(\"\");return this;}});\nCookie.write=function(b,c,a){return new Cookie(b,a).write(c);};Cookie.read=function(a){return new Cookie(a).read();};Cookie.dispose=function(b,a){return new Cookie(b,a).dispose();\n};(function(i,k){var l,f,e=[],c,b,d=k.createElement(\"div\");var g=function(){clearTimeout(b);if(l){return;}Browser.loaded=l=true;k.removeListener(\"DOMContentLoaded\",g).removeListener(\"readystatechange\",a);\nk.fireEvent(\"domready\");i.fireEvent(\"domready\");};var a=function(){for(var m=e.length;m--;){if(e[m]()){g();return true;}}return false;};var j=function(){clearTimeout(b);\nif(!a()){b=setTimeout(j,10);}};k.addListener(\"DOMContentLoaded\",g);var h=function(){try{d.doScroll();return true;}catch(m){}return false;};if(d.doScroll&&!h()){e.push(h);\nc=true;}if(k.readyState){e.push(function(){var m=k.readyState;return(m==\"loaded\"||m==\"complete\");});}if(\"onreadystatechange\" in k){k.addListener(\"readystatechange\",a);\n}else{c=true;}if(c){j();}Element.Events.domready={onAdd:function(m){if(l){m.call(this);}}};Element.Events.load={base:\"load\",onAdd:function(m){if(f&&this==i){m.call(this);\n}},condition:function(){if(this==i){g();delete Element.Events.load;}return true;}};i.addEvent(\"load\",function(){f=true;});})(window,document);(function(){var Swiff=this.Swiff=new Class({Implements:Options,options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:\"high\",allowScriptAccess:\"always\",wMode:\"window\",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object;\n},initialize:function(path,options){this.instance=\"Swiff_\"+String.uniqueID();this.setOptions(options);options=this.options;var id=this.id=options.id||this.instance;\nvar container=document.id(options.container);Swiff.CallBacks[this.instance]={};var params=options.params,vars=options.vars,callBacks=options.callBacks;\nvar properties=Object.append({height:options.height,width:options.width},options.properties);var self=this;for(var callBack in callBacks){Swiff.CallBacks[this.instance][callBack]=(function(option){return function(){return option.apply(self.object,arguments);\n};})(callBacks[callBack]);vars[callBack]=\"Swiff.CallBacks.\"+this.instance+\".\"+callBack;}params.flashVars=Object.toQueryString(vars);if(Browser.ie){properties.classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\";\nparams.movie=path;}else{properties.type=\"application/x-shockwave-flash\";}properties.data=path;var build='<object id=\"'+id+'\"';for(var property in properties){build+=\" \"+property+'=\"'+properties[property]+'\"';\n}build+=\">\";for(var param in params){if(params[param]){build+='<param name=\"'+param+'\" value=\"'+params[param]+'\" />';}}build+=\"</object>\";this.object=((container)?container.empty():new Element(\"div\")).set(\"html\",build).firstChild;\n},replaces:function(element){element=document.id(element,true);element.parentNode.replaceChild(this.toElement(),element);return this;},inject:function(element){document.id(element,true).appendChild(this.toElement());\nreturn this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].append(arguments));}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name=\"'+fn+'\" returntype=\"javascript\">'+__flash__argumentsToXML(arguments,2)+\"</invoke>\");\nreturn eval(rs);};})();"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/tweenjs-0.2.0.min.js.download",
    "content": "/*\n* TweenJS\n* Visit http://createjs.com/ for documentation, updates and examples.\n*\n* Copyright (c) 2011 gskinner.com, inc.\n* \n* Distributed under the terms of the MIT license.\n* http://www.opensource.org/licenses/mit-license.html\n*\n* This notice shall be included in all copies or substantial portions of the Software.\n*/\n(function(k){var b=function(g,a){this.initialize(g,a)},a=b.prototype;b.NONE=0;b.LOOP=1;b.REVERSE=2;b.IGNORE={};b._tweens=[];b._plugins={};b.get=function(g,a,c){return new b(g,a,c)};b.tick=function(g,a){for(var c=b._tweens,e=c.length-1;e>=0;e--){var d=c[e];if(!a||d.ignoreGlobalPause)d.tick(d._useTicks?1:g)}};Ticker&&Ticker.addListener(b,false);b.removeTweens=function(g){if(g.tweenjs_count){for(var a=b._tweens,c=a.length-1;c>=0;c--)a[c]._target==g&&a.splice(c,1);g.tweenjs_count=0}};b.installPlugin=\nfunction(g,a){var c=g.priority;if(c==null)g.priority=c=0;for(var e=0,d=a.length,f=b._plugins;e<d;e++){var i=a[e];if(f[i]){for(var l=f[i],j=0,k=l.length;j<k;j++)if(c<l[j].priority)break;f[i].splice(j,0,g)}else f[i]=[g]}};b._register=function(g,a){var c=g._target;if(a){if(c)c.tweenjs_count=c.tweenjs_count?c.tweenjs_count+1:1;b._tweens.push(g)}else c&&c.tweenjs_count--,c=b._tweens.indexOf(g),c!=-1&&b._tweens.splice(c,1)};a.ignoreGlobalPause=false;a.loop=false;a.duration=0;a.pluginData=null;a._paused=\nfalse;a._curQueueProps=null;a._initQueueProps=null;a._steps=null;a._actions=null;a._prevPosition=0;a._stepPosition=0;a._prevPos=-1;a._target=null;a._useTicks=false;a.initialize=function(g,a,c){this._target=g;if(a)this._useTicks=a.useTicks,this.ignoreGlobalPause=a.ignoreGlobalPause,this.loop=a.loop,a.override&&b.removeTweens(g);this.pluginData=c||{};this._curQueueProps={};this._initQueueProps={};this._steps=[];this._actions=[];a&&a.paused?this._paused=true:b._register(this,true);a&&a.position!=null&&\nthis.setPosition(a.position,b.NONE)};a.wait=function(g){if(g==null||g<=0)return this;var a=this._cloneProps(this._curQueueProps);return this._addStep({d:g,p0:a,e:this._linearEase,p1:a})};a.to=function(a,b,c){if(isNaN(b)||b<0)b=0;return this._addStep({d:b||0,p0:this._cloneProps(this._curQueueProps),e:c,p1:this._cloneProps(this._appendQueueProps(a))})};a.call=function(a,b,c){return this._addAction({f:a,p:b?b:[this],o:c?c:this._target})};a.set=function(a,b){return this._addAction({f:this._set,o:this,\np:[a,b?b:this._target]})};a.play=function(a){return this.call(a.setPaused,[false],a)};a.pause=function(a){a||(a=this);return this.call(a.setPaused,[true],a)};a.setPosition=function(a,b){a<0&&(a=0);b==null&&(b=1);var c=a,e=false;if(c>=this.duration)this.loop?c%=this.duration:(c=this.duration,e=true);if(c==this._prevPos)return e;if(this._target)if(e)this._updateTargetProps(null,1);else if(this._steps.length>0){for(var d=0,f=this._steps.length;d<f;d++)if(this._steps[d].t>c)break;d=this._steps[d-1];this._updateTargetProps(d,\n(this._stepPosition=c-d.t)/d.d,c)}d=this._prevPos;this._prevPos=c;this._prevPosition=a;b!=0&&this._actions.length>0&&(this._useTicks?this._runActions(c,c):b==1&&c<d?(d!=this.duration&&this._runActions(d,this.duration),this._runActions(0,c,true)):this._runActions(d,c));e&&this.setPaused(true);return e};a.tick=function(a){this._paused||this.setPosition(this._prevPosition+a)};a.setPaused=function(a){if(this._paused!=!!a)this._paused=!!a,b._register(this,!a);return this};a.w=a.wait;a.t=a.to;a.c=a.call;\na.s=a.set;a.toString=function(){return\"[Tween]\"};a.clone=function(){throw\"Tween can not be cloned.\";};a._updateTargetProps=function(a,h,c){var e,d,f,i;!a&&h==1?e=d=this._curQueueProps:(a.e&&(h=a.e(h,0,1,1)),e=a.p0,d=a.p1);for(n in this._initQueueProps){if((f=e[n])==null)e[n]=f=this._initQueueProps[n];if((i=d[n])==null)d[n]=i=f;f=f==i||h==0||h==1||typeof f!=\"number\"?h==1?i:f:f+(i-f)*h;var l=false;if(i=b._plugins[n])for(var j=0,k=i.length;j<k;j++){var m=i[j].tween(this,n,f,e,d,h,c,!a);m==b.IGNORE?l=\ntrue:f=m}l||(this._target[n]=f)}};a._runActions=function(a,b,c){var e=a,d=b,f=-1,i=this._actions.length,k=1;a>b&&(e=b,d=a,f=i,i=k=-1);for(;(f+=k)!=i;){var b=this._actions[f],j=b.t;(j==d||j>e&&j<d||c&&j==a)&&b.f.apply(b.o,b.p)}};a._appendQueueProps=function(a){var h,c,e,d;for(d in a){if(this._initQueueProps[d]==null){c=this._target[d];if(h=b._plugins[d])for(var f=0,i=h.length;f<i;f++)e=h[f].init(this,d,c),e!=b.IGNORE&&(c=e);this._initQueueProps[d]=c}this._curQueueProps[d]=a[d]}return this._curQueueProps};\na._cloneProps=function(a){var b={},c;for(c in a)b[c]=a[c];return b};a._addStep=function(a){if(a.d>0)this._steps.push(a),a.t=this.duration,this.duration+=a.d;return this};a._addAction=function(a){a.t=this.duration;this._actions.push(a);return this};a._set=function(a,b){for(var c in a)b[c]=a[c]};k.Tween=b})(window);(function(k){var b=function(a,b,c){this.initialize(a,b,c)},a=b.prototype;a.ignoreGlobalPause=false;a.duration=0;a.loop=false;a._paused=true;a._tweens=null;a._labels=null;a._prevPosition=0;a._prevPos=-1;a._useTicks=false;a.initialize=function(a,b,c){this._tweens=[];if(c)this._useTicks=c.useTicks,this.loop=c.loop,this.ignoreGlobalPause=c.ignoreGlobalPause;a&&this.addTween.apply(this,a);this.setLabels(b);(!c||!c.paused)&&Tween._register(this,true);c&&c.position!=null&&this.setPosition(c.position,Tween.NONE)};\na.addTween=function(a){var b=arguments.length;if(b>1){for(var c=0;c<b;c++)this.addTween(arguments[c]);return arguments[0]}else if(b==0)return null;this.removeTween(a);this._tweens.push(a);a.setPaused(true);a._paused=false;a._useTicks=this._useTicks;if(a.duration>this.duration)this.duration=a.duration;this._prevPos>=0&&a.setPosition(this._prevPos,Tween.NONE);return a};a.removeTween=function(a){var b=arguments.length;if(b>1){for(var c=true,e=0;e<b;e++)c=c&&this.removeTween(arguments[e]);return c}else if(b==\n0)return false;b=this._tweens.indexOf(a);return b!=-1?(this._tweens.splice(b,1),a.duration>=this.duration&&this.updateDuration(),true):false};a.addLabel=function(a,b){this._labels[a]=b};a.setLabels=function(a){this._labels=a?a:{}};a.gotoAndPlay=function(a){this.setPaused(false);this._goto(a)};a.gotoAndStop=function(a){this.setPaused(true);this._goto(a)};a.setPosition=function(a,b){a<0&&(a=0);var c=this.loop?a%this.duration:a,e=!this.loop&&a>=this.duration;if(c==this._prevPos)return e;this._prevPosition=\na;this._prevPos=c;for(var d=0,f=this._tweens.length;d<f;d++)if(this._tweens[d].setPosition(c,b),c!=this._prevPos)return false;e&&this.setPaused(true);return e};a.setPaused=function(a){if(this._paused!=!!a)this._paused=!!a,Tween._register(this,!a)};a.updateDuration=function(){for(var a=this.duration=0,b=this._tweens.length;a<b;a++)if(tween=this._tweens[a],tween.duration>this.duration)this.duration=tween.duration};a.tick=function(a){this.setPosition(this._prevPosition+a)};a.resolve=function(a){var b=\nparseFloat(a);isNaN(b)&&(b=this._labels[a]);return b};a.toString=function(){return\"[Timeline]\"};a.clone=function(){throw\"Timeline can not be cloned.\";};a._goto=function(a){a=this.resolve(a);a!=null&&this.setPosition(a)};k.Timeline=b})(window);(function(k){var b=function(){throw\"Ease cannot be instantiated.\";};b.linear=function(a){return a};b.none=b.linear;b.get=function(a){a<-1&&(a=-1);a>1&&(a=1);return function(b){return a==0?b:a<0?b*(b*-a+1+a):b*((2-b)*a+(1-a))}};b.getPowIn=function(a){return function(b){return Math.pow(b,a)}};b.getPowOut=function(a){return function(b){return 1-Math.pow(1-b,a)}};b.getPowInOut=function(a){return function(b){return(b*=2)<1?0.5*Math.pow(b,a):1-0.5*Math.abs(Math.pow(2-b,a))}};b.quadIn=b.getPowIn(2);b.quadOut=\nb.getPowOut(2);b.quadInOut=b.getPowInOut(2);b.cubicIn=b.getPowIn(3);b.cubicOut=b.getPowOut(3);b.cubicInOut=b.getPowInOut(3);b.quartIn=b.getPowIn(4);b.quartOut=b.getPowOut(4);b.quartInOut=b.getPowInOut(4);b.quintIn=b.getPowIn(5);b.quintOut=b.getPowOut(5);b.quintInOut=b.getPowInOut(5);b.sineIn=function(a){return 1-Math.cos(a*Math.PI/2)};b.sineOut=function(a){return Math.sin(a*Math.PI/2)};b.sineInOut=function(a){return-0.5*(Math.cos(Math.PI*a)-1)};b.getBackIn=function(a){return function(b){return b*\nb*((a+1)*b-a)}};b.backIn=b.getBackIn(1.7);b.getBackOut=function(a){return function(b){return--b*b*((a+1)*b+a)+1}};b.backOut=b.getBackOut(1.7);b.getBackInOut=function(a){a*=1.525;return function(b){return(b*=2)<1?0.5*b*b*((a+1)*b-a):0.5*((b-=2)*b*((a+1)*b+a)+2)}};b.backInOut=b.getBackInOut(1.7);b.circIn=function(a){return-(Math.sqrt(1-a*a)-1)};b.circOut=function(a){return Math.sqrt(1- --a*a)};b.circInOut=function(a){return(a*=2)<1?-0.5*(Math.sqrt(1-a*a)-1):0.5*(Math.sqrt(1-(a-=2)*a)+1)};b.bounceIn=\nfunction(a){return 1-b.bounceOut(1-a)};b.bounceOut=function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+0.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+0.9375:7.5625*(a-=2.625/2.75)*a+0.984375};b.bounceInOut=function(a){return a<0.5?b.bounceIn(a*2)*0.5:b.bounceOut(a*2-1)*0.5+0.5};b.getElasticIn=function(a,b){var h=Math.PI*2;return function(c){if(c==0||c==1)return c;var e=b/h*Math.asin(1/a);return-(a*Math.pow(2,10*(c-=1))*Math.sin((c-e)*h/b))}};b.elasticIn=b.getElasticIn(1,0.3);b.getElasticOut=\nfunction(a,b){var h=Math.PI*2;return function(c){if(c==0||c==1)return c;var e=b/h*Math.asin(1/a);return a*Math.pow(2,-10*c)*Math.sin((c-e)*h/b)+1}};b.elasticOut=b.getElasticOut(1,0.3);b.getElasticInOut=function(a,b){var h=Math.PI*2;return function(c){var e=b/h*Math.asin(1/a);return(c*=2)<1?-0.5*a*Math.pow(2,10*(c-=1))*Math.sin((c-e)*h/b):a*Math.pow(2,-10*(c-=1))*Math.sin((c-e)*h/b)*0.5+1}};b.elasticInOut=b.getElasticInOut(1,0.3*1.5);k.Ease=b})(window);\n"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/web-animations-basic.min.js.download",
    "content": "// Copyright 2014 Google Inc. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n//     You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n//     See the License for the specific language governing permissions and\n// limitations under the License.\n\n!function(a,b){var c={},d={},e={},f=null;!function(a,b){function c(a){if(\"number\"==typeof a)return a;var b={};for(var c in a)b[c]=a[c];return b}function d(){this._delay=0,this._endDelay=0,this._fill=\"none\",this._iterationStart=0,this._iterations=1,this._duration=0,this._playbackRate=1,this._direction=\"normal\",this._easing=\"linear\",this._easingFunction=w}function e(){return a.isDeprecated(\"Invalid timing inputs\",\"2016-03-02\",\"TypeError exceptions will be thrown instead.\",!0)}function f(b,c,e){var f=new d;return c&&(f.fill=\"both\",f.duration=\"auto\"),\"number\"!=typeof b||isNaN(b)?void 0!==b&&Object.getOwnPropertyNames(b).forEach(function(c){if(\"auto\"!=b[c]){if((\"number\"==typeof f[c]||\"duration\"==c)&&(\"number\"!=typeof b[c]||isNaN(b[c])))return;if(\"fill\"==c&&-1==u.indexOf(b[c]))return;if(\"direction\"==c&&-1==v.indexOf(b[c]))return;if(\"playbackRate\"==c&&1!==b[c]&&a.isDeprecated(\"AnimationEffectTiming.playbackRate\",\"2014-11-28\",\"Use Animation.playbackRate instead.\"))return;f[c]=b[c]}}):f.duration=b,f}function g(a){return\"number\"==typeof a&&(a=isNaN(a)?{duration:0}:{duration:a}),a}function h(b,c){return b=a.numericTimingToObject(b),f(b,c)}function i(a,b,c,d){return 0>a||a>1||0>c||c>1?w:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(0==e||1==e)return e;for(var g=0,h=1;;){var i=(g+h)/2,j=f(a,c,i);if(Math.abs(e-j)<1e-4)return f(b,d,i);e>j?g=i:h=i}}}function j(a,b){return function(c){if(c>=1)return 1;var d=1/a;return c+=b*d,c-c%d}}function k(a){B||(B=document.createElement(\"div\").style),B.animationTimingFunction=\"\",B.animationTimingFunction=a;var b=B.animationTimingFunction;if(\"\"==b&&e())throw new TypeError(a+\" is not a valid value for easing\");var c=D.exec(b);if(c)return i.apply(this,c.slice(1).map(Number));var d=E.exec(b);if(d)return j(Number(d[1]),{start:x,middle:y,end:z}[d[2]]);var f=A[b];return f?f:w}function l(a){return Math.abs(m(a)/a.playbackRate)}function m(a){return a.duration*a.iterations}function n(a,b,c){return null==b?F:b<c.delay?G:b>=c.delay+a?H:I}function o(a,b,c,d,e){switch(d){case G:return\"backwards\"==b||\"both\"==b?0:null;case I:return c-e;case H:return\"forwards\"==b||\"both\"==b?a:null;case F:return null}}function p(a,b,c,d){return(d.playbackRate<0?b-a:b)*d.playbackRate+c}function q(a,b,c,d,e){return c===1/0||c===-(1/0)||c-d==b&&e.iterations&&(e.iterations+e.iterationStart)%1==0?a:c%a}function r(a,b,c,d){return 0===c?0:b==a?d.iterationStart+d.iterations-1:Math.floor(c/a)}function s(a,b,c,d){var e=a%2>=1,f=\"normal\"==d.direction||d.direction==(e?\"alternate-reverse\":\"alternate\"),g=f?c:b-c,h=g/b;return b*d._easingFunction(h)}function t(a,b,c){var d=n(a,b,c),e=o(a,c.fill,b,d,c.delay);if(null===e)return null;if(0===a)return d===G?0:1;var f=c.iterationStart*c.duration,g=p(a,e,f,c),h=q(c.duration,m(c),g,f,c),i=r(c.duration,h,g,c);return s(i,c.duration,h,c)/c.duration}var u=\"backwards|forwards|both|none\".split(\"|\"),v=\"reverse|alternate|alternate-reverse\".split(\"|\"),w=function(a){return a};d.prototype={_setMember:function(b,c){this[\"_\"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember(\"delay\",a)},get delay(){return this._delay},set endDelay(a){this._setMember(\"endDelay\",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember(\"fill\",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||0>a)&&e())throw new TypeError(\"iterationStart must be a non-negative number, received: \"+timing.iterationStart);this._setMember(\"iterationStart\",a)},get iterationStart(){return this._iterationStart},set duration(a){if(\"auto\"!=a&&(isNaN(a)||0>a)&&e())throw new TypeError(\"duration must be non-negative or auto, received: \"+a);this._setMember(\"duration\",a)},get duration(){return this._duration},set direction(a){this._setMember(\"direction\",a)},get direction(){return this._direction},set easing(a){this._easingFunction=k(a),this._setMember(\"easing\",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||0>a)&&e())throw new TypeError(\"iterations must be non-negative, received: \"+a);this._setMember(\"iterations\",a)},get iterations(){return this._iterations}};var x=1,y=.5,z=0,A={ease:i(.25,.1,.25,1),\"ease-in\":i(.42,0,1,1),\"ease-out\":i(0,0,.58,1),\"ease-in-out\":i(.42,0,.58,1),\"step-start\":j(1,x),\"step-middle\":j(1,y),\"step-end\":j(1,z)},B=null,C=\"\\\\s*(-?\\\\d+\\\\.?\\\\d*|-?\\\\.\\\\d+)\\\\s*\",D=new RegExp(\"cubic-bezier\\\\(\"+C+\",\"+C+\",\"+C+\",\"+C+\"\\\\)\"),E=/steps\\(\\s*(\\d+)\\s*,\\s*(start|middle|end)\\s*\\)/,F=0,G=1,H=2,I=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=l,a.calculateTimeFraction=t,a.calculatePhase=n,a.toTimingFunction=k}(c,f),function(a,b){function c(a,b){return a in j?j[a][b]||b:b}function d(a,b,d){var e=g[a];if(e){h.style[a]=b;for(var f in e){var i=e[f],j=h.style[i];d[i]=c(i,j)}}else d[a]=c(a,b)}function e(a){var b=[];for(var c in a)if(!(c in[\"easing\",\"offset\",\"composite\"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;f>g;g++)e={},\"offset\"in a?e.offset=a.offset:1==f?e.offset=1:e.offset=g/(f-1),\"easing\"in a&&(e.easing=a.easing),\"composite\"in a&&(e.composite=a.composite),e[c]=d[g],b.push(e)}return b.sort(function(a,b){return a.offset-b.offset}),b}function f(a){function b(){var a=c.length;null==c[a-1].offset&&(c[a-1].offset=1),a>1&&null==c[0].offset&&(c[0].offset=0);for(var b=0,d=c[0].offset,e=1;a>e;e++){var f=c[e].offset;if(null!=f){for(var g=1;e-b>g;g++)c[b+g].offset=d+(f-d)*g/(e-b);b=e,d=f}}}if(null==a)return[];window.Symbol&&Symbol.iterator&&Array.prototype.from&&a[Symbol.iterator]&&(a=Array.from(a)),Array.isArray(a)||(a=e(a));for(var c=a.map(function(a){var b={};for(var c in a){var e=a[c];if(\"offset\"==c){if(null!=e&&(e=Number(e),!isFinite(e)))throw new TypeError(\"keyframe offsets must be numbers.\")}else{if(\"composite\"==c)throw{type:DOMException.NOT_SUPPORTED_ERR,name:\"NotSupportedError\",message:\"add compositing is not supported\"};e=\"\"+e}d(c,e,b)}return void 0==b.offset&&(b.offset=null),b}),f=!0,g=-(1/0),h=0;h<c.length;h++){var i=c[h].offset;if(null!=i){if(g>i)throw{code:DOMException.INVALID_MODIFICATION_ERR,name:\"InvalidModificationError\",message:\"Keyframes are not loosely sorted by offset. Sort or specify offsets.\"};g=i}else f=!1}return c=c.filter(function(a){return a.offset>=0&&a.offset<=1}),f||b(),c}var g={background:[\"backgroundImage\",\"backgroundPosition\",\"backgroundSize\",\"backgroundRepeat\",\"backgroundAttachment\",\"backgroundOrigin\",\"backgroundClip\",\"backgroundColor\"],border:[\"borderTopColor\",\"borderTopStyle\",\"borderTopWidth\",\"borderRightColor\",\"borderRightStyle\",\"borderRightWidth\",\"borderBottomColor\",\"borderBottomStyle\",\"borderBottomWidth\",\"borderLeftColor\",\"borderLeftStyle\",\"borderLeftWidth\"],borderBottom:[\"borderBottomWidth\",\"borderBottomStyle\",\"borderBottomColor\"],borderColor:[\"borderTopColor\",\"borderRightColor\",\"borderBottomColor\",\"borderLeftColor\"],borderLeft:[\"borderLeftWidth\",\"borderLeftStyle\",\"borderLeftColor\"],borderRadius:[\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],borderRight:[\"borderRightWidth\",\"borderRightStyle\",\"borderRightColor\"],borderTop:[\"borderTopWidth\",\"borderTopStyle\",\"borderTopColor\"],borderWidth:[\"borderTopWidth\",\"borderRightWidth\",\"borderBottomWidth\",\"borderLeftWidth\"],flex:[\"flexGrow\",\"flexShrink\",\"flexBasis\"],font:[\"fontFamily\",\"fontSize\",\"fontStyle\",\"fontVariant\",\"fontWeight\",\"lineHeight\"],margin:[\"marginTop\",\"marginRight\",\"marginBottom\",\"marginLeft\"],outline:[\"outlineColor\",\"outlineStyle\",\"outlineWidth\"],padding:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"]},h=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),i={thin:\"1px\",medium:\"3px\",thick:\"5px\"},j={borderBottomWidth:i,borderLeftWidth:i,borderRightWidth:i,borderTopWidth:i,fontSize:{\"xx-small\":\"60%\",\"x-small\":\"75%\",small:\"89%\",medium:\"100%\",large:\"120%\",\"x-large\":\"150%\",\"xx-large\":\"200%\"},fontWeight:{normal:\"400\",bold:\"700\"},outlineWidth:i,textShadow:{none:\"0px 0px 0px transparent\"},boxShadow:{none:\"0px 0px 0px 0px transparent\"}};a.convertToArrayForm=e,a.normalizeKeyframes=f}(c,f),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?\"are\":\"is\",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),h>g?(a in b||console.warn(\"Web Animations: \"+a+\" \"+f+\" deprecated and will stop working on \"+h.toDateString()+\". \"+d),b[a]=!0,!1):!0},a.deprecated=function(b,c,d,e){var f=e?\"are\":\"is\";if(a.isDeprecated(b,c,d,e))throw new Error(b+\" \"+f+\" no longer supported. \"+d)}}(c),function(){if(document.documentElement.animate){var a=document.documentElement.animate([],0),b=!0;if(a&&(b=!1,\"play|currentTime|pause|reverse|playbackRate|cancel|finish|startTime|playState\".split(\"|\").forEach(function(c){void 0===a[c]&&(b=!0)})),!b)return}!function(a,b,c){function d(a){for(var b={},c=0;c<a.length;c++)for(var d in a[c])if(\"offset\"!=d&&\"easing\"!=d&&\"composite\"!=d){var e={offset:a[c].offset,easing:a[c].easing,value:a[c][d]};b[d]=b[d]||[],b[d].push(e)}for(var f in b){var g=b[f];if(0!=g[0].offset||1!=g[g.length-1].offset)throw{type:DOMException.NOT_SUPPORTED_ERR,name:\"NotSupportedError\",message:\"Partial keyframes are not supported\"}}return b}function e(c){var d=[];for(var e in c)for(var f=c[e],g=0;g<f.length-1;g++){var h=f[g].offset,i=f[g+1].offset,j=f[g].value,k=f[g+1].value,l=f[g].easing;h==i&&(1==i?j=k:k=j),d.push({startTime:h,endTime:i,easing:a.toTimingFunction(l?l:\"linear\"),property:e,interpolation:b.propertyInterpolation(e,j,k)})}return d.sort(function(a,b){return a.startTime-b.startTime}),d}b.convertEffectInput=function(c){var f=a.normalizeKeyframes(c),g=d(f),h=e(g);return function(a,c){if(null!=c)h.filter(function(a){return 0>=c&&0==a.startTime||c>=1&&1==a.endTime||c>=a.startTime&&c<=a.endTime}).forEach(function(d){var e=c-d.startTime,f=d.endTime-d.startTime,g=0==f?0:d.easing(e/f);b.apply(a,d.property,d.interpolation(g))});else for(var d in g)\"offset\"!=d&&\"easing\"!=d&&\"composite\"!=d&&b.clear(a,d)}}}(c,d,f),function(a,b,c){function d(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}function e(a,b,c){h[c]=h[c]||[],h[c].push([a,b])}function f(a,b,c){for(var f=0;f<c.length;f++){var g=c[f];e(a,b,d(g))}}function g(c,e,f){var g=c;/-/.test(c)&&!a.isDeprecated(\"Hyphenated property names\",\"2016-03-22\",\"Use camelCase instead.\",!0)&&(g=d(c)),\"initial\"!=e&&\"initial\"!=f||(\"initial\"==e&&(e=i[g]),\"initial\"==f&&(f=i[g]));for(var j=e==f?[]:h[g],k=0;j&&k<j.length;k++){var l=j[k][0](e),m=j[k][0](f);if(void 0!==l&&void 0!==m){var n=j[k][1](l,m);if(n){var o=b.Interpolation.apply(null,n);return function(a){return 0==a?e:1==a?f:o(a)}}}}return b.Interpolation(!1,!0,function(a){return a?f:e})}var h={};b.addPropertiesHandler=f;var i={backgroundColor:\"transparent\",backgroundPosition:\"0% 0%\",borderBottomColor:\"currentColor\",borderBottomLeftRadius:\"0px\",borderBottomRightRadius:\"0px\",borderBottomWidth:\"3px\",borderLeftColor:\"currentColor\",borderLeftWidth:\"3px\",borderRightColor:\"currentColor\",borderRightWidth:\"3px\",borderSpacing:\"2px\",borderTopColor:\"currentColor\",borderTopLeftRadius:\"0px\",borderTopRightRadius:\"0px\",borderTopWidth:\"3px\",bottom:\"auto\",clip:\"rect(0px, 0px, 0px, 0px)\",color:\"black\",fontSize:\"100%\",fontWeight:\"400\",height:\"auto\",left:\"auto\",letterSpacing:\"normal\",lineHeight:\"120%\",marginBottom:\"0px\",marginLeft:\"0px\",marginRight:\"0px\",marginTop:\"0px\",maxHeight:\"none\",maxWidth:\"none\",minHeight:\"0px\",minWidth:\"0px\",opacity:\"1.0\",outlineColor:\"invert\",outlineOffset:\"0px\",outlineWidth:\"3px\",paddingBottom:\"0px\",paddingLeft:\"0px\",paddingRight:\"0px\",paddingTop:\"0px\",right:\"auto\",textIndent:\"0px\",textShadow:\"0px 0px 0px transparent\",top:\"auto\",transform:\"\",verticalAlign:\"0px\",visibility:\"visible\",width:\"auto\",wordSpacing:\"normal\",zIndex:\"auto\"};b.propertyInterpolation=g}(c,d,f),function(a,b,c){function d(b){var c=a.calculateActiveDuration(b),d=function(d){return a.calculateTimeFraction(c,d,b)};return d._totalDuration=b.delay+c+b.endDelay,d._isCurrent=function(d){var e=a.calculatePhase(c,d,b);return e===PhaseActive||e===PhaseBefore},d}b.KeyframeEffect=function(c,e,f,g){var h,i=d(a.normalizeTimingInput(f)),j=b.convertEffectInput(e),k=function(){j(c,h)};return k._update=function(a){return h=i(a),null!==h},k._clear=function(){j(c,null)},k._hasSameTarget=function(a){return c===a},k._isCurrent=i._isCurrent,k._totalDuration=i._totalDuration,k._id=g,k},b.NullEffect=function(a){var b=function(){a&&(a(),a=null)};return b._update=function(){return null},b._totalDuration=0,b._isCurrent=function(){return!1},b._hasSameTarget=function(){return!1},b}}(c,d,f),function(a,b){function c(a,b,c){c.enumerable=!0,c.configurable=!0,Object.defineProperty(a,b,c)}function d(a){this._surrogateStyle=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\").style,this._style=a.style,this._length=0,this._isAnimatedProperty={};for(var b=0;b<this._style.length;b++){var c=this._style[b];this._surrogateStyle[c]=this._style[c]}this._updateIndices()}function e(a){if(!a._webAnimationsPatchedStyle){var b=new d(a);try{c(a,\"style\",{get:function(){return b}})}catch(e){a.style._set=function(b,c){a.style[b]=c},a.style._clear=function(b){a.style[b]=\"\"}}a._webAnimationsPatchedStyle=a.style}}var f={cssText:1,length:1,parentRule:1},g={getPropertyCSSValue:1,getPropertyPriority:1,getPropertyValue:1,item:1,removeProperty:1,setProperty:1},h={removeProperty:1,setProperty:1};d.prototype={get cssText(){return this._surrogateStyle.cssText},set cssText(a){for(var b={},c=0;c<this._surrogateStyle.length;c++)b[this._surrogateStyle[c]]=!0;this._surrogateStyle.cssText=a,this._updateIndices();for(var c=0;c<this._surrogateStyle.length;c++)b[this._surrogateStyle[c]]=!0;for(var d in b)this._isAnimatedProperty[d]||this._style.setProperty(d,this._surrogateStyle.getPropertyValue(d))},get length(){return this._surrogateStyle.length},get parentRule(){return this._style.parentRule},_updateIndices:function(){for(;this._length<this._surrogateStyle.length;)Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,get:function(a){return function(){return this._surrogateStyle[a]}}(this._length)}),this._length++;for(;this._length>this._surrogateStyle.length;)this._length--,Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,value:void 0})},_set:function(a,b){this._style[a]=b,this._isAnimatedProperty[a]=!0},_clear:function(a){this._style[a]=this._surrogateStyle[a],delete this._isAnimatedProperty[a]}};for(var i in g)d.prototype[i]=function(a,b){return function(){var c=this._surrogateStyle[a].apply(this._surrogateStyle,arguments);return b&&(this._isAnimatedProperty[arguments[0]]||this._style[a].apply(this._style,arguments),this._updateIndices()),c}}(i,i in h);for(var j in document.documentElement.style)j in f||j in g||!function(a){c(d.prototype,a,{get:function(){return this._surrogateStyle[a]},set:function(b){this._surrogateStyle[a]=b,this._updateIndices(),this._isAnimatedProperty[a]||(this._style[a]=b)}})}(j);a.apply=function(b,c,d){e(b),b.style._set(a.propertyName(c),d)},a.clear=function(b,c){b._webAnimationsPatchedStyle&&b.style._clear(a.propertyName(c))}}(d,f),function(a){window.Element.prototype.animate=function(b,c){var d=\"\";return c&&c.id&&(d=c.id),a.timeline._play(a.KeyframeEffect(this,b,c,d))}}(d),function(a,b){function c(a,b,d){if(\"number\"==typeof a&&\"number\"==typeof b)return a*(1-d)+b*d;if(\"boolean\"==typeof a&&\"boolean\"==typeof b)return.5>d?a:b;if(a.length==b.length){for(var e=[],f=0;f<a.length;f++)e.push(c(a[f],b[f],d));return e}throw\"Mismatched interpolation arguments \"+a+\":\"+b}a.Interpolation=function(a,b,d){return function(e){return d(c(a,b,e))}}}(d,f),function(a,b){function c(a,b,c){return Math.max(Math.min(a,c),b)}function d(b,d,e){var f=a.dot(b,d);f=c(f,-1,1);var g=[];if(1===f)g=b;else for(var h=Math.acos(f),i=1*Math.sin(e*h)/Math.sqrt(1-f*f),j=0;4>j;j++)g.push(b[j]*(Math.cos(e*h)-f*i)+d[j]*i);return g}var e=function(){function a(a,b){for(var c=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],d=0;4>d;d++)for(var e=0;4>e;e++)for(var f=0;4>f;f++)c[d][e]+=b[d][f]*a[f][e];return c}function b(a){return 0==a[0][2]&&0==a[0][3]&&0==a[1][2]&&0==a[1][3]&&0==a[2][0]&&0==a[2][1]&&1==a[2][2]&&0==a[2][3]&&0==a[3][2]&&1==a[3][3]}function c(c,d,e,f,g){for(var h=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],i=0;4>i;i++)h[i][3]=g[i];for(var i=0;3>i;i++)for(var j=0;3>j;j++)h[3][i]+=c[j]*h[j][i];var k=f[0],l=f[1],m=f[2],n=f[3],o=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];o[0][0]=1-2*(l*l+m*m),o[0][1]=2*(k*l-m*n),o[0][2]=2*(k*m+l*n),o[1][0]=2*(k*l+m*n),o[1][1]=1-2*(k*k+m*m),o[1][2]=2*(l*m-k*n),o[2][0]=2*(k*m-l*n),o[2][1]=2*(l*m+k*n),o[2][2]=1-2*(k*k+l*l),h=a(h,o);var p=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];e[2]&&(p[2][1]=e[2],h=a(h,p)),e[1]&&(p[2][1]=0,p[2][0]=e[0],h=a(h,p)),e[0]&&(p[2][0]=0,p[1][0]=e[0],h=a(h,p));for(var i=0;3>i;i++)for(var j=0;3>j;j++)h[i][j]*=d[i];return b(h)?[h[0][0],h[0][1],h[1][0],h[1][1],h[3][0],h[3][1]]:h[0].concat(h[1],h[2],h[3])}return c}();a.composeMatrix=e,a.quat=d}(d,f),function(a,b,c){a.sequenceNumber=0;var d=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type=\"finish\",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()};b.Animation=function(b){this.id=\"\",b&&b._id&&(this.id=b._id),this._sequenceNumber=a.sequenceNumber++,this._currentTime=0,this._startTime=null,this._paused=!1,this._playbackRate=1,this._inTimeline=!0,this._finishedFlag=!0,this.onfinish=null,this._finishHandlers=[],this._effect=b,this._inEffect=this._effect._update(0),this._idle=!0,this._currentTimePending=!1},b.Animation.prototype={_ensureAlive:function(){this.playbackRate<0&&0===this.currentTime?this._inEffect=this._effect._update(-1):this._inEffect=this._effect._update(this.currentTime),this._inTimeline||!this._inEffect&&this._finishedFlag||(this._inTimeline=!0,b.timeline._animations.push(this))},_tickCurrentTime:function(a,b){a!=this._currentTime&&(this._currentTime=a,this._isFinished&&!b&&(this._currentTime=this._playbackRate>0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._tickCurrentTime(a,!0),b.invalidateEffects()))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.invalidateEffects())},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var b=this.currentTime;this._playbackRate=a,this._startTime=null,\"paused\"!=this.playState&&\"idle\"!=this.playState&&this.play(),null!=b&&(this.currentTime=b)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?\"idle\":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?\"pending\":this._paused?\"paused\":this._isFinished?\"finished\":\"running\"},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._currentTime=this._playbackRate>0?0:this._totalDuration,this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.invalidateEffects()},pause:function(){this._isFinished||this._paused||this._idle||(this._currentTimePending=!0),this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.invalidateEffects())},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._finishedFlag=!0,this.currentTime=0,this._startTime=null,this._effect._update(null),b.invalidateEffects())},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){\"function\"==typeof b&&\"finish\"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if(\"finish\"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag}}}(c,d,f),function(a,b,c){function d(a){var b=j;j=[],a<p.currentTime&&(a=p.currentTime),h(a,!0),b.forEach(function(b){b[1](a)}),g(),l=void 0}function e(a,b){return a._sequenceNumber-b._sequenceNumber}function f(){this._animations=[],this.currentTime=window.performance&&performance.now?performance.now():0}function g(){o.forEach(function(a){a()}),o.length=0}function h(a,c){n=!1;var d=b.timeline;d.currentTime=a,d._animations.sort(e),m=!1;var f=d._animations;d._animations=[];var g=[],h=[];f=f.filter(function(b){b._tick(a,c),b._inEffect?h.push(b._effect):g.push(b._effect),b._needsTick&&(m=!0);var d=b._inEffect||b._needsTick;return b._inTimeline=d,d}),o.push.apply(o,g),o.push.apply(o,h),d._animations.push.apply(d._animations,f),m&&requestAnimationFrame(function(){})}var i=window.requestAnimationFrame,j=[],k=0;window.requestAnimationFrame=function(a){var b=k++;return 0==j.length&&i(d),j.push([b,a]),b},window.cancelAnimationFrame=function(a){j.forEach(function(b){b[0]==a&&(b[1]=function(){})})},f.prototype={_play:function(c){c._timing=a.normalizeTimingInput(c.timing);var d=new b.Animation(c);return d._idle=!1,d._timeline=this,this._animations.push(d),b.restart(),b.invalidateEffects(),d}};var l=void 0,m=!1,n=!1;b.restart=function(){return m||(m=!0,requestAnimationFrame(function(){}),n=!0),n},b.invalidateEffects=function(){h(b.timeline.currentTime,!1),g()};var o=[],p=new f;b.timeline=p}(c,d,f),function(a,b){function c(a,b){for(var c=0,d=0;d<a.length;d++)c+=a[d]*b[d];return c}function d(a,b){return[a[0]*b[0]+a[4]*b[1]+a[8]*b[2]+a[12]*b[3],a[1]*b[0]+a[5]*b[1]+a[9]*b[2]+a[13]*b[3],a[2]*b[0]+a[6]*b[1]+a[10]*b[2]+a[14]*b[3],a[3]*b[0]+a[7]*b[1]+a[11]*b[2]+a[15]*b[3],a[0]*b[4]+a[4]*b[5]+a[8]*b[6]+a[12]*b[7],a[1]*b[4]+a[5]*b[5]+a[9]*b[6]+a[13]*b[7],a[2]*b[4]+a[6]*b[5]+a[10]*b[6]+a[14]*b[7],a[3]*b[4]+a[7]*b[5]+a[11]*b[6]+a[15]*b[7],a[0]*b[8]+a[4]*b[9]+a[8]*b[10]+a[12]*b[11],a[1]*b[8]+a[5]*b[9]+a[9]*b[10]+a[13]*b[11],a[2]*b[8]+a[6]*b[9]+a[10]*b[10]+a[14]*b[11],a[3]*b[8]+a[7]*b[9]+a[11]*b[10]+a[15]*b[11],a[0]*b[12]+a[4]*b[13]+a[8]*b[14]+a[12]*b[15],a[1]*b[12]+a[5]*b[13]+a[9]*b[14]+a[13]*b[15],a[2]*b[12]+a[6]*b[13]+a[10]*b[14]+a[14]*b[15],a[3]*b[12]+a[7]*b[13]+a[11]*b[14]+a[15]*b[15]]}function e(a){var b=a.rad||0,c=a.deg||0,d=a.grad||0,e=a.turn||0,f=(c/360+d/400+e)*(2*Math.PI)+b;return f}function f(a){switch(a.t){case\"rotatex\":var b=e(a.d[0]);return[1,0,0,0,0,Math.cos(b),Math.sin(b),0,0,-Math.sin(b),Math.cos(b),0,0,0,0,1];case\"rotatey\":var b=e(a.d[0]);return[Math.cos(b),0,-Math.sin(b),0,0,1,0,0,Math.sin(b),0,Math.cos(b),0,0,0,0,1];case\"rotate\":case\"rotatez\":var b=e(a.d[0]);return[Math.cos(b),Math.sin(b),0,0,-Math.sin(b),Math.cos(b),0,0,0,0,1,0,0,0,0,1];case\"rotate3d\":var c=a.d[0],d=a.d[1],f=a.d[2],b=e(a.d[3]),g=c*c+d*d+f*f;if(0===g)c=1,d=0,f=0;else if(1!==g){var h=Math.sqrt(g);c/=h,d/=h,f/=h}var i=Math.sin(b/2),j=i*Math.cos(b/2),k=i*i;return[1-2*(d*d+f*f)*k,2*(c*d*k+f*j),2*(c*f*k-d*j),0,2*(c*d*k-f*j),1-2*(c*c+f*f)*k,2*(d*f*k+c*j),0,2*(c*f*k+d*j),2*(d*f*k-c*j),1-2*(c*c+d*d)*k,0,0,0,0,1];case\"scale\":return[a.d[0],0,0,0,0,a.d[1],0,0,0,0,1,0,0,0,0,1];case\"scalex\":return[a.d[0],0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];case\"scaley\":return[1,0,0,0,0,a.d[0],0,0,0,0,1,0,0,0,0,1];case\"scalez\":return[1,0,0,0,0,1,0,0,0,0,a.d[0],0,0,0,0,1];case\"scale3d\":return[a.d[0],0,0,0,0,a.d[1],0,0,0,0,a.d[2],0,0,0,0,1];case\"skew\":var l=e(a.d[0]),m=e(a.d[1]);return[1,Math.tan(m),0,0,Math.tan(l),1,0,0,0,0,1,0,0,0,0,1];case\"skewx\":var b=e(a.d[0]);return[1,0,0,0,Math.tan(b),1,0,0,0,0,1,0,0,0,0,1];case\"skewy\":var b=e(a.d[0]);return[1,Math.tan(b),0,0,0,1,0,0,0,0,1,0,0,0,0,1];case\"translate\":var c=a.d[0].px||0,d=a.d[1].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,d,0,1];case\"translatex\":var c=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,0,0,1];case\"translatey\":var d=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,0,d,0,1];case\"translatez\":var f=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,f,1];case\"translate3d\":var c=a.d[0].px||0,d=a.d[1].px||0,f=a.d[2].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,d,f,1];case\"perspective\":var n=a.d[0].px?-1/a.d[0].px:0;return[1,0,0,0,0,1,0,0,0,0,1,n,0,0,0,1];case\"matrix\":return[a.d[0],a.d[1],0,0,a.d[2],a.d[3],0,0,0,0,1,0,a.d[4],a.d[5],0,1];case\"matrix3d\":return a.d}}function g(a){return 0===a.length?[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]:a.map(f).reduce(d)}function h(a){return[i(g(a))]}var i=function(){function a(a){return a[0][0]*a[1][1]*a[2][2]+a[1][0]*a[2][1]*a[0][2]+a[2][0]*a[0][1]*a[1][2]-a[0][2]*a[1][1]*a[2][0]-a[1][2]*a[2][1]*a[0][0]-a[2][2]*a[0][1]*a[1][0]}function b(b){for(var c=1/a(b),d=b[0][0],e=b[0][1],f=b[0][2],g=b[1][0],h=b[1][1],i=b[1][2],j=b[2][0],k=b[2][1],l=b[2][2],m=[[(h*l-i*k)*c,(f*k-e*l)*c,(e*i-f*h)*c,0],[(i*j-g*l)*c,(d*l-f*j)*c,(f*g-d*i)*c,0],[(g*k-h*j)*c,(j*e-d*k)*c,(d*h-e*g)*c,0]],n=[],o=0;3>o;o++){for(var p=0,q=0;3>q;q++)p+=b[3][q]*m[q][o];n.push(p)}return n.push(1),m.push(n),m}function d(a){return[[a[0][0],a[1][0],a[2][0],a[3][0]],[a[0][1],a[1][1],a[2][1],a[3][1]],[a[0][2],a[1][2],a[2][2],a[3][2]],[a[0][3],a[1][3],a[2][3],a[3][3]]]}function e(a,b){for(var c=[],d=0;4>d;d++){for(var e=0,f=0;4>f;f++)e+=a[f]*b[f][d];c.push(e)}return c}function f(a){var b=g(a);return[a[0]/b,a[1]/b,a[2]/b]}function g(a){return Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2])}function h(a,b,c,d){return[c*a[0]+d*b[0],c*a[1]+d*b[1],c*a[2]+d*b[2]]}function i(a,b){return[a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]]}function j(j){var k=[j.slice(0,4),j.slice(4,8),j.slice(8,12),j.slice(12,16)];if(1!==k[3][3])return null;for(var l=[],m=0;4>m;m++)l.push(k[m].slice());for(var m=0;3>m;m++)l[m][3]=0;if(0===a(l))return!1;var n,o=[];if(k[0][3]||k[1][3]||k[2][3]){o.push(k[0][3]),o.push(k[1][3]),o.push(k[2][3]),o.push(k[3][3]);var p=b(l),q=d(p);n=e(o,q)}else n=[0,0,0,1];var r=k[3].slice(0,3),s=[];s.push(k[0].slice(0,3));var t=[];t.push(g(s[0])),s[0]=f(s[0]);var u=[];s.push(k[1].slice(0,3)),u.push(c(s[0],s[1])),s[1]=h(s[1],s[0],1,-u[0]),t.push(g(s[1])),s[1]=f(s[1]),u[0]/=t[1],s.push(k[2].slice(0,3)),u.push(c(s[0],s[2])),s[2]=h(s[2],s[0],1,-u[1]),u.push(c(s[1],s[2])),s[2]=h(s[2],s[1],1,-u[2]),t.push(g(s[2])),s[2]=f(s[2]),u[1]/=t[2],u[2]/=t[2];var v=i(s[1],s[2]);if(c(s[0],v)<0)for(var m=0;3>m;m++)t[m]*=-1,s[m][0]*=-1,s[m][1]*=-1,s[m][2]*=-1;var w,x,y=s[0][0]+s[1][1]+s[2][2]+1;return y>1e-4?(w=.5/Math.sqrt(y),x=[(s[2][1]-s[1][2])*w,(s[0][2]-s[2][0])*w,(s[1][0]-s[0][1])*w,.25/w]):s[0][0]>s[1][1]&&s[0][0]>s[2][2]?(w=2*Math.sqrt(1+s[0][0]-s[1][1]-s[2][2]),x=[.25*w,(s[0][1]+s[1][0])/w,(s[0][2]+s[2][0])/w,(s[2][1]-s[1][2])/w]):s[1][1]>s[2][2]?(w=2*Math.sqrt(1+s[1][1]-s[0][0]-s[2][2]),x=[(s[0][1]+s[1][0])/w,.25*w,(s[1][2]+s[2][1])/w,(s[0][2]-s[2][0])/w]):(w=2*Math.sqrt(1+s[2][2]-s[0][0]-s[1][1]),x=[(s[0][2]+s[2][0])/w,(s[1][2]+s[2][1])/w,.25*w,(s[1][0]-s[0][1])/w]),[r,t,u,x,n]}return j}();a.dot=c,a.makeMatrixDecomposition=h}(d,f),function(a){function b(a,b){var c=a.exec(b);return c?(c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]):void 0}function c(a,b){b=b.replace(/^\\s*/,\"\");var c=a(b);return c?[c[0],c[1].replace(/^\\s*/,\"\")]:void 0}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],g=b(d,e),!g||\"\"==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;d<b.length&&(!/\\s|,/.test(b[d])||0!=c);d++)if(\"(\"==b[d])c++;else if(\")\"==b[d]&&(c--,0==c&&d++,0>=c))break;var e=a(b.substr(0,d));return void 0==e?void 0:[e,b.substr(d)]}function f(a,b){for(var c=a,d=b;c&&d;)c>d?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){var d=a(c);return d?d:[b,c]}}function i(b,c){for(var d=[],e=0;e<b.length;e++){var f=a.consumeTrimmed(b[e],c);if(!f||\"\"==f[0])return;void 0!==f[0]&&d.push(f[0]),c=f[1]}return\"\"==c?d:void 0}function j(a,b,c,d,e){for(var g=[],h=[],i=[],j=f(d.length,e.length),k=0;j>k;k++){var l=b(d[k%d.length],e[k%e.length]);if(!l)return;g.push(l[0]),h.push(l[1]),i.push(l[2])}return[g,h,function(b){var d=b.map(function(a,b){return i[b](a)}).join(c);return a?a(d):d}]}function k(a,b,c){for(var d=[],e=[],f=[],g=0,h=0;h<c.length;h++)if(\"function\"==typeof c[h]){var i=c[h](a[g],b[g++]);d.push(i[0]),e.push(i[1]),f.push(i[2])}else!function(a){d.push(!1),e.push(!1),f.push(function(){return c[a]})}(h);return[d,e,function(a){for(var b=\"\",c=0;c<a.length;c++)b+=f[c](a[c]);return b}]}a.consumeToken=b,a.consumeTrimmed=c,a.consumeRepeated=d,a.consumeParenthesised=e,a.ignore=g,a.optional=h,a.consumeList=i,a.mergeNestedRepeated=j.bind(null,null),a.mergeWrappedNestedRepeated=j,a.mergeList=k}(d),function(a){function b(b){function c(b){var c=a.consumeToken(/^inset/i,b);if(c)return d.inset=!0,c;var c=a.consumeLengthOrPercent(b);if(c)return d.lengths.push(c[0]),c;var c=a.consumeColor(b);return c?(d.color=c[0],c):void 0}var d={inset:!1,lengths:[],color:null},e=a.consumeRepeated(c,/^/,b);return e&&e[0].length?[d,e[1]]:void 0}function c(c){var d=a.consumeRepeated(b,/^,/,c);return d&&\"\"==d[1]?d[0]:void 0}function d(b,c){for(;b.lengths.length<Math.max(b.lengths.length,c.lengths.length);)b.lengths.push({px:0});for(;c.lengths.length<Math.max(b.lengths.length,c.lengths.length);)c.lengths.push({px:0});if(b.inset==c.inset&&!!b.color==!!c.color){for(var d,e=[],f=[[],0],g=[[],0],h=0;h<b.lengths.length;h++){var i=a.mergeDimensions(b.lengths[h],c.lengths[h],2==h);f[0].push(i[0]),g[0].push(i[1]),e.push(i[2])}if(b.color&&c.color){var j=a.mergeColors(b.color,c.color);f[1]=j[0],g[1]=j[1],d=j[2]}return[f,g,function(a){for(var c=b.inset?\"inset \":\" \",f=0;f<e.length;f++)c+=e[f](a[0][f])+\" \";return d&&(c+=d(a[1])),c}]}}function e(b,c,d,e){function f(a){return{inset:a,color:[0,0,0,0],lengths:[{px:0},{px:0},{px:0},{px:0}]}}for(var g=[],h=[],i=0;i<d.length||i<e.length;i++){var j=d[i]||f(e[i].inset),k=e[i]||f(d[i].inset);g.push(j),h.push(k)}return a.mergeNestedRepeated(b,c,g,h)}var f=e.bind(null,d,\", \");a.addPropertiesHandler(c,f,[\"box-shadow\",\"text-shadow\"])}(d),function(a,b){function c(a){return a.toFixed(3).replace(\".000\",\"\")}function d(a,b,c){return Math.min(b,Math.max(a,c))}function e(a){return/^\\s*[-+]?(\\d*\\.)?\\d+\\s*$/.test(a)?Number(a):void 0}function f(a,b){return[a,b,c]}function g(a,b){return 0!=a?i(0,1/0)(a,b):void 0}function h(a,b){return[a,b,function(a){return Math.round(d(1,1/0,a))}]}function i(a,b){return function(e,f){return[e,f,function(e){return c(d(a,b,e))}]}}function j(a,b){return[a,b,Math.round]}a.clamp=d,a.addPropertiesHandler(e,i(0,1/0),[\"border-image-width\",\"line-height\"]),a.addPropertiesHandler(e,i(0,1),[\"opacity\",\"shape-image-threshold\"]),a.addPropertiesHandler(e,g,[\"flex-grow\",\"flex-shrink\"]),a.addPropertiesHandler(e,h,[\"orphans\",\"widows\"]),a.addPropertiesHandler(e,j,[\"z-index\"]),a.parseNumber=e,a.mergeNumbers=f,a.numberToString=c}(d,f),function(a,b){function c(a,b){return\"visible\"==a||\"visible\"==b?[0,1,function(c){return 0>=c?a:c>=1?b:\"visible\"}]:void 0}a.addPropertiesHandler(String,c,[\"visibility\"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle=\"#000\",\nf.fillStyle=a;var b=f.fillStyle;if(f.fillStyle=\"#fff\",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;3>d;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),\"rgba(\"+b.join(\",\")+\")\"}]}var e=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");e.width=e.height=1;var f=e.getContext(\"2d\");a.addPropertiesHandler(c,d,[\"background-color\",\"border-bottom-color\",\"border-left-color\",\"border-right-color\",\"border-top-color\",\"color\",\"outline-color\",\"text-decoration-color\"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d,f),function(a,b){function c(a,b){if(b=b.trim().toLowerCase(),\"0\"==b&&\"px\".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\\(/g,\"(\");var c={};b=b.replace(a,function(a){return c[a]=null,\"U\"+a});for(var d=\"U(\"+a.source+\")\",e=b.replace(/[-+]?(\\d*\\.)?\\d+/g,\"N\").replace(new RegExp(\"N\"+d,\"g\"),\"D\").replace(/\\s[+-]\\s/g,\"O\").replace(/\\s/g,\"\"),f=[/N\\*(D)/g,/(N|D)[*\\/]N/g,/(N|D)O\\1/g,/\\((N|D)\\)/g],g=0;g<f.length;)f[g].test(e)?(e=e.replace(f[g],\"$1\"),g=0):g++;if(\"D\"==e){for(var h in c){var i=eval(b.replace(new RegExp(\"U\"+h,\"g\"),\"\").replace(new RegExp(d,\"g\"),\"*0\"));if(!isFinite(i))return;c[h]=i}return c}}}function d(a,b){return e(a,b,!0)}function e(b,c,d){var e,f=[];for(e in b)f.push(e);for(e in c)f.indexOf(e)<0&&f.push(e);return b=f.map(function(a){return b[a]||0}),c=f.map(function(a){return c[a]||0}),[b,c,function(b){var c=b.map(function(c,e){return 1==b.length&&d&&(c=Math.max(c,0)),a.numberToString(c)+f[e]}).join(\" + \");return b.length>1?\"calc(\"+c+\")\":c}]}var f=\"px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc\",g=c.bind(null,new RegExp(f,\"g\")),h=c.bind(null,new RegExp(f+\"|%\",\"g\")),i=c.bind(null,/deg|rad|grad|turn/g);a.parseLength=g,a.parseLengthOrPercent=h,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,h),a.parseAngle=i,a.mergeDimensions=e;var j=a.consumeParenthesised.bind(null,g),k=a.consumeRepeated.bind(void 0,j,/^/),l=a.consumeRepeated.bind(void 0,k,/^,/);a.consumeSizePairList=l;var m=function(a){var b=l(a);return b&&\"\"==b[1]?b[0]:void 0},n=a.mergeNestedRepeated.bind(void 0,d,\" \"),o=a.mergeNestedRepeated.bind(void 0,n,\",\");a.mergeNonNegativeSizePair=n,a.addPropertiesHandler(m,o,[\"background-size\"]),a.addPropertiesHandler(h,d,[\"border-bottom-width\",\"border-image-width\",\"border-left-width\",\"border-right-width\",\"border-top-width\",\"flex-basis\",\"font-size\",\"height\",\"line-height\",\"max-height\",\"max-width\",\"outline-width\",\"width\"]),a.addPropertiesHandler(h,e,[\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-top-left-radius\",\"border-top-right-radius\",\"bottom\",\"left\",\"letter-spacing\",\"margin-bottom\",\"margin-left\",\"margin-right\",\"margin-top\",\"min-height\",\"min-width\",\"outline-offset\",\"padding-bottom\",\"padding-left\",\"padding-right\",\"padding-top\",\"perspective\",\"right\",\"shape-margin\",\"text-indent\",\"top\",\"vertical-align\",\"word-spacing\"])}(d,f),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\\)/))],b);return d&&4==d[0].length?d[0]:void 0}function e(b,c){return\"auto\"==b||\"auto\"==c?[!0,!1,function(d){var e=d?b:c;if(\"auto\"==e)return\"auto\";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return\"rect(\"+a+\")\"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,\", \");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,[\"clip\"])}(d,f),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if(b=b.toLowerCase().trim(),\"none\"==b)return[];for(var c,d=/\\s*(\\w+)\\(([^)]*)\\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(\",\"),j=h[0];if(j.length<i.length)return;for(var k=[],o=0;o<j.length;o++){var p,q=i[o],r=j[o];if(p=q?{A:function(b){return\"0\"==b.trim()?m:a.parseAngle(b)},N:a.parseNumber,T:a.parseLengthOrPercent,L:a.parseLength}[r.toUpperCase()](q):{a:m,n:k[0],t:l}[r],void 0===p)return;k.push(p)}if(e.push({t:g,d:k}),d.lastIndex==b.length)return e}}function f(a){return a.toFixed(6).replace(\".000000\",\"\")}function g(b,c){if(b.decompositionPair!==c){b.decompositionPair=c;var d=a.makeMatrixDecomposition(b)}if(c.decompositionPair!==b){c.decompositionPair=b;var e=a.makeMatrixDecomposition(c)}return null==d[0]||null==e[0]?[[!1],[!0],function(a){return a?c[0].d:b[0].d}]:(d[0].push(0),e[0].push(1),[d,e,function(b){var c=a.quat(d[0][3],e[0][3],b[5]),g=a.composeMatrix(b[0],b[1],b[2],c,b[4]),h=g.map(f).join(\",\");return h}])}function h(a){return a.replace(/[xy]/,\"\")}function i(a){return a.replace(/(x|y|z|3d)?$/,\"3d\")}function j(b,c){var d=a.makeMatrixDecomposition&&!0,e=!1;if(!b.length||!c.length){b.length||(e=!0,b=c,c=[]);for(var f=0;f<b.length;f++){var j=b[f].t,k=b[f].d,l=\"scale\"==j.substr(0,5)?1:0;c.push({t:j,d:k.map(function(a){if(\"number\"==typeof a)return l;var b={};for(var c in a)b[c]=l;return b})})}}var m=function(a,b){return\"perspective\"==a&&\"perspective\"==b||(\"matrix\"==a||\"matrix3d\"==a)&&(\"matrix\"==b||\"matrix3d\"==b)},o=[],p=[],q=[];if(b.length!=c.length){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[[\"matrix\",[r[2]]]]}else for(var f=0;f<b.length;f++){var j,s=b[f].t,t=c[f].t,u=b[f].d,v=c[f].d,w=n[s],x=n[t];if(m(s,t)){if(!d)return;var r=g([b[f]],[c[f]]);o.push(r[0]),p.push(r[1]),q.push([\"matrix\",[r[2]]])}else{if(s==t)j=s;else if(w[2]&&x[2]&&h(s)==h(t))j=h(s),u=w[2](u),v=x[2](v);else{if(!w[1]||!x[1]||i(s)!=i(t)){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[[\"matrix\",[r[2]]]];break}j=i(s),u=w[1](u),v=x[1](v)}for(var y=[],z=[],A=[],B=0;B<u.length;B++){var C=\"number\"==typeof u[B]?a.mergeNumbers:a.mergeDimensions,r=C(u[B],v[B]);y[B]=r[0],z[B]=r[1],A.push(r[2])}o.push(y),p.push(z),q.push([j,A])}}if(e){var D=o;o=p,p=D}return[o,p,function(a){return a.map(function(a,b){var c=a.map(function(a,c){return q[b][1][c](a)}).join(\",\");return\"matrix\"==q[b][0]&&16==c.split(\",\").length&&(q[b][0]=\"matrix3d\"),q[b][0]+\"(\"+c+\")\"}).join(\" \")}]}var k=null,l={px:0},m={deg:0},n={matrix:[\"NNNNNN\",[k,k,0,0,k,k,0,0,0,0,1,0,k,k,0,1],d],matrix3d:[\"NNNNNNNNNNNNNNNN\",d],rotate:[\"A\"],rotatex:[\"A\"],rotatey:[\"A\"],rotatez:[\"A\"],rotate3d:[\"NNNA\"],perspective:[\"L\"],scale:[\"Nn\",c([k,k,1]),d],scalex:[\"N\",c([k,1,1]),c([k,1])],scaley:[\"N\",c([1,k,1]),c([1,k])],scalez:[\"N\",c([1,1,k])],scale3d:[\"NNN\",d],skew:[\"Aa\",null,d],skewx:[\"A\",null,c([k,m])],skewy:[\"A\",null,c([m,k])],translate:[\"Tt\",c([k,k,l]),d],translatex:[\"T\",c([k,l,l]),c([k,l])],translatey:[\"T\",c([l,k,l]),c([l,k])],translatez:[\"L\",c([l,l,k])],translate3d:[\"TTL\",d]};a.addPropertiesHandler(e,j,[\"transform\"])}(d,f),function(a){function b(a){var b=Number(a);return isNaN(b)||100>b||b>900||b%100!==0?void 0:b}function c(b){return b=100*Math.round(b/100),b=a.clamp(100,900,b),400===b?\"normal\":700===b?\"bold\":String(b)}function d(a,b){return[a,b,c]}a.addPropertiesHandler(b,d,[\"font-weight\"])}(d),function(a){function b(a){var b={};for(var c in a)b[c]=-a[c];return b}function c(b){return a.consumeToken(/^(left|center|right|top|bottom)\\b/i,b)||a.consumeLengthOrPercent(b)}function d(b,d){var e=a.consumeRepeated(c,/^/,d);if(e&&\"\"==e[1]){var f=e[0];if(f[0]=f[0]||\"center\",f[1]=f[1]||\"center\",3==b&&(f[2]=f[2]||{px:0}),f.length==b){if(/top|bottom/.test(f[0])||/left|right/.test(f[1])){var h=f[0];f[0]=f[1],f[1]=h}if(/left|right|center|Object/.test(f[0])&&/top|bottom|center|Object/.test(f[1]))return f.map(function(a){return\"object\"==typeof a?a:g[a]})}}}function e(d){var e=a.consumeRepeated(c,/^/,d);if(e){for(var f=e[0],h=[{\"%\":50},{\"%\":50}],i=0,j=!1,k=0;k<f.length;k++){var l=f[k];\"string\"==typeof l?(j=/bottom|right/.test(l),i={left:0,right:0,center:i,top:1,bottom:1}[l],h[i]=g[l],\"center\"==l&&i++):(j&&(l=b(l),l[\"%\"]=(l[\"%\"]||0)+100),h[i]=l,i++,j=!1)}return[h,e[1]]}}function f(b){var c=a.consumeRepeated(e,/^,/,b);return c&&\"\"==c[1]?c[0]:void 0}var g={left:{\"%\":0},center:{\"%\":50},right:{\"%\":100},top:{\"%\":0},bottom:{\"%\":100}},h=a.mergeNestedRepeated.bind(null,a.mergeDimensions,\" \");a.addPropertiesHandler(d.bind(null,3),h,[\"transform-origin\"]),a.addPropertiesHandler(d.bind(null,2),h,[\"perspective-origin\"]),a.consumePosition=e,a.mergeOffsetList=h;var i=a.mergeNestedRepeated.bind(null,h,\", \");a.addPropertiesHandler(f,i,[\"background-position\",\"object-position\"])}(d),function(a){function b(b){var c=a.consumeToken(/^circle/,b);if(c&&c[0])return[\"circle\"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\\(/)),d,a.ignore(a.consumeToken.bind(void 0,/^at/)),a.consumePosition,a.ignore(a.consumeToken.bind(void 0,/^\\)/))],c[1]));var f=a.consumeToken(/^ellipse/,b);if(f&&f[0])return[\"ellipse\"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\\(/)),e,a.ignore(a.consumeToken.bind(void 0,/^at/)),a.consumePosition,a.ignore(a.consumeToken.bind(void 0,/^\\)/))],f[1]));var g=a.consumeToken(/^polygon/,b);return g&&g[0]?[\"polygon\"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\\(/)),a.optional(a.consumeToken.bind(void 0,/^nonzero\\s*,|^evenodd\\s*,/),\"nonzero,\"),a.consumeSizePairList,a.ignore(a.consumeToken.bind(void 0,/^\\)/))],g[1])):void 0}function c(b,c){return b[0]===c[0]?\"circle\"==b[0]?a.mergeList(b.slice(1),c.slice(1),[\"circle(\",a.mergeDimensions,\" at \",a.mergeOffsetList,\")\"]):\"ellipse\"==b[0]?a.mergeList(b.slice(1),c.slice(1),[\"ellipse(\",a.mergeNonNegativeSizePair,\" at \",a.mergeOffsetList,\")\"]):\"polygon\"==b[0]&&b[1]==c[1]?a.mergeList(b.slice(2),c.slice(2),[\"polygon(\",b[1],g,\")\"]):void 0:void 0}var d=a.consumeParenthesised.bind(null,a.parseLengthOrPercent),e=a.consumeRepeated.bind(void 0,d,/^/),f=a.mergeNestedRepeated.bind(void 0,a.mergeDimensions,\" \"),g=a.mergeNestedRepeated.bind(void 0,f,\",\");a.addPropertiesHandler(b,c,[\"shape-outside\"])}(d),function(a,b){function c(a,b){b.concat([a]).forEach(function(b){b in document.documentElement.style&&(d[a]=b)})}var d={};c(\"transform\",[\"webkitTransform\",\"msTransform\"]),c(\"transformOrigin\",[\"webkitTransformOrigin\"]),c(\"perspective\",[\"webkitPerspective\"]),c(\"perspectiveOrigin\",[\"webkitPerspectiveOrigin\"]),a.propertyName=function(a){return d[a]||a}}(d,f)}(),!function(){if(void 0===document.createElement(\"div\").animate([]).oncancel){var a;if(window.performance&&performance.now)var a=function(){return performance.now()};else var a=function(){return Date.now()};var b=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type=\"cancel\",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()},c=window.Element.prototype.animate;window.Element.prototype.animate=function(d,e){var f=c.call(this,d,e);f._cancelHandlers=[],f.oncancel=null;var g=f.cancel;f.cancel=function(){g.call(this);var c=new b(this,null,a()),d=this._cancelHandlers.concat(this.oncancel?[this.oncancel]:[]);setTimeout(function(){d.forEach(function(a){a.call(c.target,c)})},0)};var h=f.addEventListener;f.addEventListener=function(a,b){\"function\"==typeof b&&\"cancel\"==a?this._cancelHandlers.push(b):h.call(this,a,b)};var i=f.removeEventListener;return f.removeEventListener=function(a,b){if(\"cancel\"==a){var c=this._cancelHandlers.indexOf(b);c>=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue(\"opacity\"),f=\"0\"==e?\"1\":\"0\";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue(\"opacity\")==f}catch(g){}finally{c&&c.cancel()}if(!d){var h=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),h.call(this,b,c)}}}(c),!function(a,b,c){function d(a){var b=window.document.timeline;b.currentTime=a,b._discardAnimations(),0==b._animations.length?f=!1:requestAnimationFrame(d)}var e=window.requestAnimationFrame;window.requestAnimationFrame=function(a){return e(function(b){window.document.timeline._updateAnimationsPromises(),a(b),window.document.timeline._updateAnimationsPromises()})},b.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},b.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){b.animationsWithPromises=b.animationsWithPromises.filter(function(a){return a._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(a){return\"finished\"!=a.playState&&\"idle\"!=a.playState})},_play:function(a){var c=new b.Animation(a,this);return this._animations.push(c),b.restartWebAnimationsNextTick(),c._updatePromises(),c._animation.play(),c._updatePromises(),c},play:function(a){return a&&a.remove(),this._play(a)}};var f=!1;b.restartWebAnimationsNextTick=function(){f||(f=!0,requestAnimationFrame(d))};var g=new b.AnimationTimeline;b.timeline=g;try{Object.defineProperty(window.document,\"timeline\",{configurable:!0,get:function(){return g}})}catch(h){}try{window.document.timeline=g}catch(h){}}(c,e,f),function(a,b,c){b.animationsWithPromises=[],b.Animation=function(b,c){if(this.id=\"\",b&&b._id&&(this.id=b._id),this.effect=b,b&&(b._animation=this),!c)throw new Error(\"Animation with null timeline is not supported\");this._timeline=c,this._sequenceNumber=a.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState=\"idle\",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},b.Animation.prototype={_updatePromises:function(){var a=this._oldPlayState,b=this.playState;return this._readyPromise&&b!==a&&(\"idle\"==b?(this._rejectReadyPromise(),this._readyPromise=void 0):\"pending\"==a?this._resolveReadyPromise():\"pending\"==b&&(this._readyPromise=void 0)),this._finishedPromise&&b!==a&&(\"idle\"==b?(this._rejectFinishedPromise(),this._finishedPromise=void 0):\"finished\"==b?this._resolveFinishedPromise():\"finished\"==a&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var a,c,d,e,f=!!this._animation;f&&(a=this.playbackRate,c=this._paused,d=this.startTime,e=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=b.newUnderlyingAnimationForKeyframeEffect(this.effect),b.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=b.newUnderlyingAnimationForGroup(this.effect),b.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&b.bindAnimationForCustomEffect(this),f&&(1!=a&&(this.playbackRate=a),null!==d?this.startTime=d:null!==e?this.currentTime=e:null!==this._holdTime&&(this.currentTime=this._holdTime),c&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&\"idle\"!=this.playState){var a=this.effect._timing.delay;this._childAnimations.forEach(function(c){this._arrangeChildren(c,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c.effect))}.bind(this))}},_setExternalAnimation:function(a){if(this.effect&&this._isGroup)for(var b=0;b<this.effect.children.length;b++)this.effect.children[b]._animation=a,this._childAnimations[b]._setExternalAnimation(a)},_constructChildAnimations:function(){if(this.effect&&this._isGroup){var a=this.effect._timing.delay;this._removeChildAnimations(),this.effect.children.forEach(function(c){var d=window.document.timeline._play(c);this._childAnimations.push(d),d.playbackRate=this.playbackRate,this._paused&&d.pause(),c._animation=this.effect._animation,this._arrangeChildren(d,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c))}.bind(this))}},_arrangeChildren:function(a,b){null===this.startTime?a.currentTime=this.currentTime-b/this.playbackRate:a.startTime!==this.startTime+b/this.playbackRate&&(a.startTime=this.startTime+b/this.playbackRate)},get timeline(){return this._timeline},get playState(){return this._animation?this._animation.playState:\"idle\"},get finished(){return window.Promise?(this._finishedPromise||(-1==b.animationsWithPromises.indexOf(this)&&b.animationsWithPromises.push(this),this._finishedPromise=new Promise(function(a,b){this._resolveFinishedPromise=function(){a(this)},this._rejectFinishedPromise=function(){b({type:DOMException.ABORT_ERR,name:\"AbortError\"})}}.bind(this)),\"finished\"==this.playState&&this._resolveFinishedPromise()),this._finishedPromise):(console.warn(\"Animation Promises require JavaScript Promise constructor\"),null)},get ready(){return window.Promise?(this._readyPromise||(-1==b.animationsWithPromises.indexOf(this)&&b.animationsWithPromises.push(this),this._readyPromise=new Promise(function(a,b){this._resolveReadyPromise=function(){a(this)},this._rejectReadyPromise=function(){b({type:DOMException.ABORT_ERR,name:\"AbortError\"})}}.bind(this)),\"pending\"!==this.playState&&this._resolveReadyPromise()),this._readyPromise):(console.warn(\"Animation Promises require JavaScript Promise constructor\"),null)},get onfinish(){return this._animation.onfinish},set onfinish(a){\"function\"==typeof a?this._animation.onfinish=function(b){b.target=this,a.call(this,b)}.bind(this):this._animation.onfinish=a},get oncancel(){return this._animation.oncancel},set oncancel(a){\"function\"==typeof a?this._animation.oncancel=function(b){b.target=this,a.call(this,b)}.bind(this):this._animation.oncancel=a},get currentTime(){this._updatePromises();var a=this._animation.currentTime;return this._updatePromises(),a},set currentTime(a){this._updatePromises(),this._animation.currentTime=isFinite(a)?a:Math.sign(a)*Number.MAX_VALUE,this._register(),this._forEachChild(function(b,c){b.currentTime=a-c}),this._updatePromises()},get startTime(){return this._animation.startTime},set startTime(a){this._updatePromises(),this._animation.startTime=isFinite(a)?a:Math.sign(a)*Number.MAX_VALUE,this._register(),this._forEachChild(function(b,c){b.startTime=a+c}),this._updatePromises()},get playbackRate(){return this._animation.playbackRate},set playbackRate(a){this._updatePromises();var b=this.currentTime;this._animation.playbackRate=a,this._forEachChild(function(b){b.playbackRate=a}),\"paused\"!=this.playState&&\"idle\"!=this.playState&&this.play(),null!==b&&(this.currentTime=b),this._updatePromises()},play:function(){this._updatePromises(),this._paused=!1,this._animation.play(),-1==this._timeline._animations.indexOf(this)&&this._timeline._animations.push(this),this._register(),b.awaitStartTime(this),this._forEachChild(function(a){var b=a.currentTime;a.play(),a.currentTime=b}),this._updatePromises()},pause:function(){this._updatePromises(),this.currentTime&&(this._holdTime=this.currentTime),this._animation.pause(),this._register(),this._forEachChild(function(a){a.pause()}),this._paused=!0,this._updatePromises()},finish:function(){this._updatePromises(),this._animation.finish(),this._register(),this._updatePromises()},cancel:function(){this._updatePromises(),this._animation.cancel(),this._register(),this._removeChildAnimations(),this._updatePromises()},reverse:function(){this._updatePromises();var a=this.currentTime;this._animation.reverse(),this._forEachChild(function(a){a.reverse()}),null!==a&&(this.currentTime=a),this._updatePromises()},addEventListener:function(a,b){var c=b;\"function\"==typeof b&&(c=function(a){a.target=this,b.call(this,a)}.bind(this),b._wrapper=c),this._animation.addEventListener(a,c)},removeEventListener:function(a,b){this._animation.removeEventListener(a,b&&b._wrapper||b)},_removeChildAnimations:function(){for(;this._childAnimations.length;)this._childAnimations.pop().cancel()},_forEachChild:function(b){var c=0;if(this.effect.children&&this._childAnimations.length<this.effect.children.length&&this._constructChildAnimations(),this._childAnimations.forEach(function(a){b.call(this,a,c),this.effect instanceof window.SequenceEffect&&(c+=a.effect.activeDuration)}.bind(this)),\"pending\"!=this.playState){var d=this.effect._timing,e=this.currentTime;null!==e&&(e=a.calculateTimeFraction(a.calculateActiveDuration(d),e,d)),(null==e||isNaN(e))&&this._removeChildAnimations()}}},window.Animation=b.Animation}(c,e,f),function(a,b,c){function d(b){this._frames=a.normalizeKeyframes(b)}function e(){for(var a=!1;i.length;){var b=i.shift();b._updateChildren(),a=!0}return a}var f=function(a){if(a._animation=void 0,a instanceof window.SequenceEffect||a instanceof window.GroupEffect)for(var b=0;b<a.children.length;b++)f(a.children[b])};b.removeMulti=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];d._parent?(-1==b.indexOf(d._parent)&&b.push(d._parent),d._parent.children.splice(d._parent.children.indexOf(d),1),d._parent=null,f(d)):d._animation&&d._animation.effect==d&&(d._animation.cancel(),d._animation.effect=new KeyframeEffect(null,[]),d._animation._callback&&(d._animation._callback._animation=null),d._animation._rebuildUnderlyingAnimation(),f(d))}for(c=0;c<b.length;c++)b[c]._rebuild()},b.KeyframeEffect=function(b,c,e,f){return this.target=b,this._parent=null,e=a.numericTimingToObject(e),this._timingInput=a.cloneTimingInput(e),this._timing=a.normalizeTimingInput(e),this.timing=a.makeTiming(e,!1,this),this.timing._effect=this,\"function\"==typeof c?(a.deprecated(\"Custom KeyframeEffect\",\"2015-06-22\",\"Use KeyframeEffect.onsample instead.\"),this._normalizedKeyframes=c):this._normalizedKeyframes=new d(c),this._keyframes=c,this.activeDuration=a.calculateActiveDuration(this._timing),this._id=f,this},b.KeyframeEffect.prototype={getFrames:function(){return\"function\"==typeof this._normalizedKeyframes?this._normalizedKeyframes:this._normalizedKeyframes._frames},set onsample(a){if(\"function\"==typeof this.getFrames())throw new Error(\"Setting onsample on custom effect KeyframeEffect is not supported.\");this._onsample=a,this._animation&&this._animation._rebuildUnderlyingAnimation()},get parent(){return this._parent},clone:function(){if(\"function\"==typeof this.getFrames())throw new Error(\"Cloning custom effects is not supported.\");var b=new KeyframeEffect(this.target,[],a.cloneTimingInput(this._timingInput),this._id);return b._normalizedKeyframes=this._normalizedKeyframes,b._keyframes=this._keyframes,b},remove:function(){b.removeMulti([this])}};var g=Element.prototype.animate;Element.prototype.animate=function(a,c){var d=\"\";return c&&c.id&&(d=c.id),b.timeline._play(new b.KeyframeEffect(this,a,c,d))};var h=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\");b.newUnderlyingAnimationForKeyframeEffect=function(a){if(a){var b=a.target||h,c=a._keyframes;\"function\"==typeof c&&(c=[]);var d=a._timingInput;d.id=a._id}else var b=h,c=[],d=0;return g.apply(b,[c,d])},b.bindAnimationForKeyframeEffect=function(a){a.effect&&\"function\"==typeof a.effect._normalizedKeyframes&&b.bindAnimationForCustomEffect(a)};var i=[];b.awaitStartTime=function(a){null===a.startTime&&a._isGroup&&(0==i.length&&requestAnimationFrame(e),i.push(a))};var j=window.getComputedStyle;Object.defineProperty(window,\"getComputedStyle\",{configurable:!0,enumerable:!0,value:function(){window.document.timeline._updateAnimationsPromises();var a=j.apply(this,arguments);return e()&&(a=j.apply(this,arguments)),window.document.timeline._updateAnimationsPromises(),a}}),window.KeyframeEffect=b.KeyframeEffect,window.Element.prototype.getAnimations=function(){return document.timeline.getAnimations().filter(function(a){return null!==a.effect&&a.effect.target==this}.bind(this))}}(c,e,f),function(a,b,c){function d(a){a._registered||(a._registered=!0,g.push(a),h||(h=!0,requestAnimationFrame(e)))}function e(a){var b=g;g=[],b.sort(function(a,b){return a._sequenceNumber-b._sequenceNumber}),b=b.filter(function(a){a();var b=a._animation?a._animation.playState:\"idle\";return\"running\"!=b&&\"pending\"!=b&&(a._registered=!1),a._registered}),g.push.apply(g,b),g.length?(h=!0,requestAnimationFrame(e)):h=!1}var f=(document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"div\"),0);b.bindAnimationForCustomEffect=function(b){var c,e=b.effect.target,g=\"function\"==typeof b.effect.getFrames();c=g?b.effect.getFrames():b.effect._onsample;var h=b.effect.timing,i=null;h=a.normalizeTimingInput(h);var j=function(){var d=j._animation?j._animation.currentTime:null;null!==d&&(d=a.calculateTimeFraction(a.calculateActiveDuration(h),d,h),isNaN(d)&&(d=null)),d!==i&&(g?c(d,e,b.effect):c(d,b.effect,b.effect._animation)),i=d};j._animation=b,j._registered=!1,j._sequenceNumber=f++,b._callback=j,d(j)};var g=[],h=!1;b.Animation.prototype._register=function(){this._callback&&d(this._callback)}}(c,e,f),function(a,b,c){function d(a){return a._timing.delay+a.activeDuration+a._timing.endDelay}function e(b,c,d){this._id=d,this._parent=null,this.children=b||[],this._reparent(this.children),c=a.numericTimingToObject(c),this._timingInput=a.cloneTimingInput(c),this._timing=a.normalizeTimingInput(c,!0),this.timing=a.makeTiming(c,!0,this),this.timing._effect=this,\"auto\"===this._timing.duration&&(this._timing.duration=this.activeDuration)}window.SequenceEffect=function(){e.apply(this,arguments)},window.GroupEffect=function(){e.apply(this,arguments)},e.prototype={_isAncestor:function(a){for(var b=this;null!==b;){if(b==a)return!0;b=b._parent}return!1},_rebuild:function(){for(var a=this;a;)\"auto\"===a.timing.duration&&(a._timing.duration=a.activeDuration),a=a._parent;this._animation&&this._animation._rebuildUnderlyingAnimation()},_reparent:function(a){b.removeMulti(a);for(var c=0;c<a.length;c++)a[c]._parent=this},_putChild:function(a,b){for(var c=b?\"Cannot append an ancestor or self\":\"Cannot prepend an ancestor or self\",d=0;d<a.length;d++)if(this._isAncestor(a[d]))throw{type:DOMException.HIERARCHY_REQUEST_ERR,name:\"HierarchyRequestError\",message:c};for(var d=0;d<a.length;d++)b?this.children.push(a[d]):this.children.unshift(a[d]);this._reparent(a),this._rebuild()},append:function(){this._putChild(arguments,!0)},prepend:function(){this._putChild(arguments,!1)},get parent(){return this._parent},get firstChild(){return this.children.length?this.children[0]:null},get lastChild(){return this.children.length?this.children[this.children.length-1]:null},clone:function(){for(var b=a.cloneTimingInput(this._timingInput),c=[],d=0;d<this.children.length;d++)c.push(this.children[d].clone());return this instanceof GroupEffect?new GroupEffect(c,b):new SequenceEffect(c,b)},remove:function(){b.removeMulti([this])}},window.SequenceEffect.prototype=Object.create(e.prototype),Object.defineProperty(window.SequenceEffect.prototype,\"activeDuration\",{get:function(){var a=0;return this.children.forEach(function(b){a+=d(b)}),Math.max(a,0)}}),window.GroupEffect.prototype=Object.create(e.prototype),Object.defineProperty(window.GroupEffect.prototype,\"activeDuration\",{get:function(){var a=0;return this.children.forEach(function(b){a=Math.max(a,d(b))}),a}}),b.newUnderlyingAnimationForGroup=function(c){var d,e=null,f=function(b){var c=d._wrapper;return c&&\"pending\"!=c.playState&&c.effect?null==b?void c._removeChildAnimations():0==b&&c.playbackRate<0&&(e||(e=a.normalizeTimingInput(c.effect.timing)),b=a.calculateTimeFraction(a.calculateActiveDuration(e),-1,e),isNaN(b)||null==b)?(c._forEachChild(function(a){a.currentTime=-1}),void c._removeChildAnimations()):void 0:void 0},g=new KeyframeEffect(null,[],c._timing,c._id);return g.onsample=f,d=b.timeline._play(g)},b.bindAnimationForGroup=function(a){a._animation._wrapper=a,a._isGroup=!0,b.awaitStartTime(a),a._constructChildAnimations(),a._setExternalAnimation(a)},b.groupChildDuration=d}(c,e,f),b[\"true\"]=a}({},function(){return this}());\n//# sourceMappingURL=web-animations-next.min.js.map"
  },
  {
    "path": "gsap/GreenSock Animation Platform (GSAP) Speed Test_files/zepto.min.js.download",
    "content": "/* Zepto v1.1.2 - zepto event ajax form ie - zeptojs.com/license */\n\n\nvar Zepto = (function() {\n  var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,\n    document = window.document,\n    elementDisplay = {}, classCache = {},\n    cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },\n    fragmentRE = /^\\s*<(\\w+|!)[^>]*>/,\n    singleTagRE = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n    tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n    rootNodeRE = /^(?:body|html)$/i,\n    capitalRE = /([A-Z])/g,\n\n    // special attributes that should be get/set via method calls\n    methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n\n    adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],\n    table = document.createElement('table'),\n    tableRow = document.createElement('tr'),\n    containers = {\n      'tr': document.createElement('tbody'),\n      'tbody': table, 'thead': table, 'tfoot': table,\n      'td': tableRow, 'th': tableRow,\n      '*': document.createElement('div')\n    },\n    readyRE = /complete|loaded|interactive/,\n    classSelectorRE = /^\\.([\\w-]+)$/,\n    idSelectorRE = /^#([\\w-]*)$/,\n    simpleSelectorRE = /^[\\w-]*$/,\n    class2type = {},\n    toString = class2type.toString,\n    zepto = {},\n    camelize, uniq,\n    tempParent = document.createElement('div'),\n    propMap = {\n      'tabindex': 'tabIndex',\n      'readonly': 'readOnly',\n      'for': 'htmlFor',\n      'class': 'className',\n      'maxlength': 'maxLength',\n      'cellspacing': 'cellSpacing',\n      'cellpadding': 'cellPadding',\n      'rowspan': 'rowSpan',\n      'colspan': 'colSpan',\n      'usemap': 'useMap',\n      'frameborder': 'frameBorder',\n      'contenteditable': 'contentEditable'\n    }\n\n  zepto.matches = function(element, selector) {\n    if (!selector || !element || element.nodeType !== 1) return false\n    var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||\n                          element.oMatchesSelector || element.matchesSelector\n    if (matchesSelector) return matchesSelector.call(element, selector)\n    // fall back to performing a selector:\n    var match, parent = element.parentNode, temp = !parent\n    if (temp) (parent = tempParent).appendChild(element)\n    match = ~zepto.qsa(parent, selector).indexOf(element)\n    temp && tempParent.removeChild(element)\n    return match\n  }\n\n  function type(obj) {\n    return obj == null ? String(obj) :\n      class2type[toString.call(obj)] || \"object\"\n  }\n\n  function isFunction(value) { return type(value) == \"function\" }\n  function isWindow(obj)     { return obj != null && obj == obj.window }\n  function isDocument(obj)   { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }\n  function isObject(obj)     { return type(obj) == \"object\" }\n  function isPlainObject(obj) {\n    return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype\n  }\n  function isArray(value) { return value instanceof Array }\n  function likeArray(obj) { return typeof obj.length == 'number' }\n\n  function compact(array) { return filter.call(array, function(item){ return item != null }) }\n  function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }\n  camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }\n  function dasherize(str) {\n    return str.replace(/::/g, '/')\n           .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n           .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n           .replace(/_/g, '-')\n           .toLowerCase()\n  }\n  uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }\n\n  function classRE(name) {\n    return name in classCache ?\n      classCache[name] : (classCache[name] = new RegExp('(^|\\\\s)' + name + '(\\\\s|$)'))\n  }\n\n  function maybeAddPx(name, value) {\n    return (typeof value == \"number\" && !cssNumber[dasherize(name)]) ? value + \"px\" : value\n  }\n\n  function defaultDisplay(nodeName) {\n    var element, display\n    if (!elementDisplay[nodeName]) {\n      element = document.createElement(nodeName)\n      document.body.appendChild(element)\n      display = getComputedStyle(element, '').getPropertyValue(\"display\")\n      element.parentNode.removeChild(element)\n      display == \"none\" && (display = \"block\")\n      elementDisplay[nodeName] = display\n    }\n    return elementDisplay[nodeName]\n  }\n\n  function children(element) {\n    return 'children' in element ?\n      slice.call(element.children) :\n      $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })\n  }\n\n  // `$.zepto.fragment` takes a html string and an optional tag name\n  // to generate DOM nodes nodes from the given html string.\n  // The generated DOM nodes are returned as an array.\n  // This function can be overriden in plugins for example to make\n  // it compatible with browsers that don't support the DOM fully.\n  zepto.fragment = function(html, name, properties) {\n    var dom, nodes, container\n\n    // A special case optimization for a single tag\n    if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))\n\n    if (!dom) {\n      if (html.replace) html = html.replace(tagExpanderRE, \"<$1></$2>\")\n      if (name === undefined) name = fragmentRE.test(html) && RegExp.$1\n      if (!(name in containers)) name = '*'\n\n      container = containers[name]\n      container.innerHTML = '' + html\n      dom = $.each(slice.call(container.childNodes), function(){\n        container.removeChild(this)\n      })\n    }\n\n    if (isPlainObject(properties)) {\n      nodes = $(dom)\n      $.each(properties, function(key, value) {\n        if (methodAttributes.indexOf(key) > -1) nodes[key](value)\n        else nodes.attr(key, value)\n      })\n    }\n\n    return dom\n  }\n\n  // `$.zepto.Z` swaps out the prototype of the given `dom` array\n  // of nodes with `$.fn` and thus supplying all the Zepto functions\n  // to the array. Note that `__proto__` is not supported on Internet\n  // Explorer. This method can be overriden in plugins.\n  zepto.Z = function(dom, selector) {\n    dom = dom || []\n    dom.__proto__ = $.fn\n    dom.selector = selector || ''\n    return dom\n  }\n\n  // `$.zepto.isZ` should return `true` if the given object is a Zepto\n  // collection. This method can be overriden in plugins.\n  zepto.isZ = function(object) {\n    return object instanceof zepto.Z\n  }\n\n  // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and\n  // takes a CSS selector and an optional context (and handles various\n  // special cases).\n  // This method can be overriden in plugins.\n  zepto.init = function(selector, context) {\n    var dom\n    // If nothing given, return an empty Zepto collection\n    if (!selector) return zepto.Z()\n    // Optimize for string selectors\n    else if (typeof selector == 'string') {\n      selector = selector.trim()\n      // If it's a html fragment, create nodes from it\n      // Note: In both Chrome 21 and Firefox 15, DOM error 12\n      // is thrown if the fragment doesn't begin with <\n      if (selector[0] == '<' && fragmentRE.test(selector))\n        dom = zepto.fragment(selector, RegExp.$1, context), selector = null\n      // If there's a context, create a collection on that context first, and select\n      // nodes from there\n      else if (context !== undefined) return $(context).find(selector)\n      // If it's a CSS selector, use it to select nodes.\n      else dom = zepto.qsa(document, selector)\n    }\n    // If a function is given, call it when the DOM is ready\n    else if (isFunction(selector)) return $(document).ready(selector)\n    // If a Zepto collection is given, just return it\n    else if (zepto.isZ(selector)) return selector\n    else {\n      // normalize array if an array of nodes is given\n      if (isArray(selector)) dom = compact(selector)\n      // Wrap DOM nodes.\n      else if (isObject(selector))\n        dom = [selector], selector = null\n      // If it's a html fragment, create nodes from it\n      else if (fragmentRE.test(selector))\n        dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null\n      // If there's a context, create a collection on that context first, and select\n      // nodes from there\n      else if (context !== undefined) return $(context).find(selector)\n      // And last but no least, if it's a CSS selector, use it to select nodes.\n      else dom = zepto.qsa(document, selector)\n    }\n    // create a new Zepto collection from the nodes found\n    return zepto.Z(dom, selector)\n  }\n\n  // `$` will be the base `Zepto` object. When calling this\n  // function just call `$.zepto.init, which makes the implementation\n  // details of selecting nodes and creating Zepto collections\n  // patchable in plugins.\n  $ = function(selector, context){\n    return zepto.init(selector, context)\n  }\n\n  function extend(target, source, deep) {\n    for (key in source)\n      if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {\n        if (isPlainObject(source[key]) && !isPlainObject(target[key]))\n          target[key] = {}\n        if (isArray(source[key]) && !isArray(target[key]))\n          target[key] = []\n        extend(target[key], source[key], deep)\n      }\n      else if (source[key] !== undefined) target[key] = source[key]\n  }\n\n  // Copy all but undefined properties from one or more\n  // objects to the `target` object.\n  $.extend = function(target){\n    var deep, args = slice.call(arguments, 1)\n    if (typeof target == 'boolean') {\n      deep = target\n      target = args.shift()\n    }\n    args.forEach(function(arg){ extend(target, arg, deep) })\n    return target\n  }\n\n  // `$.zepto.qsa` is Zepto's CSS selector implementation which\n  // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.\n  // This method can be overriden in plugins.\n  zepto.qsa = function(element, selector){\n    var found,\n        maybeID = selector[0] == '#',\n        maybeClass = !maybeID && selector[0] == '.',\n        nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked\n        isSimple = simpleSelectorRE.test(nameOnly)\n    return (isDocument(element) && isSimple && maybeID) ?\n      ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :\n      (element.nodeType !== 1 && element.nodeType !== 9) ? [] :\n      slice.call(\n        isSimple && !maybeID ?\n          maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class\n          element.getElementsByTagName(selector) : // Or a tag\n          element.querySelectorAll(selector) // Or it's not simple, and we need to query all\n      )\n  }\n\n  function filtered(nodes, selector) {\n    return selector == null ? $(nodes) : $(nodes).filter(selector)\n  }\n\n  $.contains = function(parent, node) {\n    return parent !== node && parent.contains(node)\n  }\n\n  function funcArg(context, arg, idx, payload) {\n    return isFunction(arg) ? arg.call(context, idx, payload) : arg\n  }\n\n  function setAttribute(node, name, value) {\n    value == null ? node.removeAttribute(name) : node.setAttribute(name, value)\n  }\n\n  // access className property while respecting SVGAnimatedString\n  function className(node, value){\n    var klass = node.className,\n        svg   = klass && klass.baseVal !== undefined\n\n    if (value === undefined) return svg ? klass.baseVal : klass\n    svg ? (klass.baseVal = value) : (node.className = value)\n  }\n\n  // \"true\"  => true\n  // \"false\" => false\n  // \"null\"  => null\n  // \"42\"    => 42\n  // \"42.5\"  => 42.5\n  // \"08\"    => \"08\"\n  // JSON    => parse if valid\n  // String  => self\n  function deserializeValue(value) {\n    var num\n    try {\n      return value ?\n        value == \"true\" ||\n        ( value == \"false\" ? false :\n          value == \"null\" ? null :\n          !/^0/.test(value) && !isNaN(num = Number(value)) ? num :\n          /^[\\[\\{]/.test(value) ? $.parseJSON(value) :\n          value )\n        : value\n    } catch(e) {\n      return value\n    }\n  }\n\n  $.type = type\n  $.isFunction = isFunction\n  $.isWindow = isWindow\n  $.isArray = isArray\n  $.isPlainObject = isPlainObject\n\n  $.isEmptyObject = function(obj) {\n    var name\n    for (name in obj) return false\n    return true\n  }\n\n  $.inArray = function(elem, array, i){\n    return emptyArray.indexOf.call(array, elem, i)\n  }\n\n  $.camelCase = camelize\n  $.trim = function(str) {\n    return str == null ? \"\" : String.prototype.trim.call(str)\n  }\n\n  // plugin compatibility\n  $.uuid = 0\n  $.support = { }\n  $.expr = { }\n\n  $.map = function(elements, callback){\n    var value, values = [], i, key\n    if (likeArray(elements))\n      for (i = 0; i < elements.length; i++) {\n        value = callback(elements[i], i)\n        if (value != null) values.push(value)\n      }\n    else\n      for (key in elements) {\n        value = callback(elements[key], key)\n        if (value != null) values.push(value)\n      }\n    return flatten(values)\n  }\n\n  $.each = function(elements, callback){\n    var i, key\n    if (likeArray(elements)) {\n      for (i = 0; i < elements.length; i++)\n        if (callback.call(elements[i], i, elements[i]) === false) return elements\n    } else {\n      for (key in elements)\n        if (callback.call(elements[key], key, elements[key]) === false) return elements\n    }\n\n    return elements\n  }\n\n  $.grep = function(elements, callback){\n    return filter.call(elements, callback)\n  }\n\n  if (window.JSON) $.parseJSON = JSON.parse\n\n  // Populate the class2type map\n  $.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n    class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase()\n  })\n\n  // Define methods that will be available on all\n  // Zepto collections\n  $.fn = {\n    // Because a collection acts like an array\n    // copy over these useful array functions.\n    forEach: emptyArray.forEach,\n    reduce: emptyArray.reduce,\n    push: emptyArray.push,\n    sort: emptyArray.sort,\n    indexOf: emptyArray.indexOf,\n    concat: emptyArray.concat,\n\n    // `map` and `slice` in the jQuery API work differently\n    // from their array counterparts\n    map: function(fn){\n      return $($.map(this, function(el, i){ return fn.call(el, i, el) }))\n    },\n    slice: function(){\n      return $(slice.apply(this, arguments))\n    },\n\n    ready: function(callback){\n      // need to check if document.body exists for IE as that browser reports\n      // document ready when it hasn't yet created the body element\n      if (readyRE.test(document.readyState) && document.body) callback($)\n      else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)\n      return this\n    },\n    get: function(idx){\n      return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]\n    },\n    toArray: function(){ return this.get() },\n    size: function(){\n      return this.length\n    },\n    remove: function(){\n      return this.each(function(){\n        if (this.parentNode != null)\n          this.parentNode.removeChild(this)\n      })\n    },\n    each: function(callback){\n      emptyArray.every.call(this, function(el, idx){\n        return callback.call(el, idx, el) !== false\n      })\n      return this\n    },\n    filter: function(selector){\n      if (isFunction(selector)) return this.not(this.not(selector))\n      return $(filter.call(this, function(element){\n        return zepto.matches(element, selector)\n      }))\n    },\n    add: function(selector,context){\n      return $(uniq(this.concat($(selector,context))))\n    },\n    is: function(selector){\n      return this.length > 0 && zepto.matches(this[0], selector)\n    },\n    not: function(selector){\n      var nodes=[]\n      if (isFunction(selector) && selector.call !== undefined)\n        this.each(function(idx){\n          if (!selector.call(this,idx)) nodes.push(this)\n        })\n      else {\n        var excludes = typeof selector == 'string' ? this.filter(selector) :\n          (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)\n        this.forEach(function(el){\n          if (excludes.indexOf(el) < 0) nodes.push(el)\n        })\n      }\n      return $(nodes)\n    },\n    has: function(selector){\n      return this.filter(function(){\n        return isObject(selector) ?\n          $.contains(this, selector) :\n          $(this).find(selector).size()\n      })\n    },\n    eq: function(idx){\n      return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)\n    },\n    first: function(){\n      var el = this[0]\n      return el && !isObject(el) ? el : $(el)\n    },\n    last: function(){\n      var el = this[this.length - 1]\n      return el && !isObject(el) ? el : $(el)\n    },\n    find: function(selector){\n      var result, $this = this\n      if (typeof selector == 'object')\n        result = $(selector).filter(function(){\n          var node = this\n          return emptyArray.some.call($this, function(parent){\n            return $.contains(parent, node)\n          })\n        })\n      else if (this.length == 1) result = $(zepto.qsa(this[0], selector))\n      else result = this.map(function(){ return zepto.qsa(this, selector) })\n      return result\n    },\n    closest: function(selector, context){\n      var node = this[0], collection = false\n      if (typeof selector == 'object') collection = $(selector)\n      while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))\n        node = node !== context && !isDocument(node) && node.parentNode\n      return $(node)\n    },\n    parents: function(selector){\n      var ancestors = [], nodes = this\n      while (nodes.length > 0)\n        nodes = $.map(nodes, function(node){\n          if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {\n            ancestors.push(node)\n            return node\n          }\n        })\n      return filtered(ancestors, selector)\n    },\n    parent: function(selector){\n      return filtered(uniq(this.pluck('parentNode')), selector)\n    },\n    children: function(selector){\n      return filtered(this.map(function(){ return children(this) }), selector)\n    },\n    contents: function() {\n      return this.map(function() { return slice.call(this.childNodes) })\n    },\n    siblings: function(selector){\n      return filtered(this.map(function(i, el){\n        return filter.call(children(el.parentNode), function(child){ return child!==el })\n      }), selector)\n    },\n    empty: function(){\n      return this.each(function(){ this.innerHTML = '' })\n    },\n    // `pluck` is borrowed from Prototype.js\n    pluck: function(property){\n      return $.map(this, function(el){ return el[property] })\n    },\n    show: function(){\n      return this.each(function(){\n        this.style.display == \"none\" && (this.style.display = '')\n        if (getComputedStyle(this, '').getPropertyValue(\"display\") == \"none\")\n          this.style.display = defaultDisplay(this.nodeName)\n      })\n    },\n    replaceWith: function(newContent){\n      return this.before(newContent).remove()\n    },\n    wrap: function(structure){\n      var func = isFunction(structure)\n      if (this[0] && !func)\n        var dom   = $(structure).get(0),\n            clone = dom.parentNode || this.length > 1\n\n      return this.each(function(index){\n        $(this).wrapAll(\n          func ? structure.call(this, index) :\n            clone ? dom.cloneNode(true) : dom\n        )\n      })\n    },\n    wrapAll: function(structure){\n      if (this[0]) {\n        $(this[0]).before(structure = $(structure))\n        var children\n        // drill down to the inmost element\n        while ((children = structure.children()).length) structure = children.first()\n        $(structure).append(this)\n      }\n      return this\n    },\n    wrapInner: function(structure){\n      var func = isFunction(structure)\n      return this.each(function(index){\n        var self = $(this), contents = self.contents(),\n            dom  = func ? structure.call(this, index) : structure\n        contents.length ? contents.wrapAll(dom) : self.append(dom)\n      })\n    },\n    unwrap: function(){\n      this.parent().each(function(){\n        $(this).replaceWith($(this).children())\n      })\n      return this\n    },\n    clone: function(){\n      return this.map(function(){ return this.cloneNode(true) })\n    },\n    hide: function(){\n      return this.css(\"display\", \"none\")\n    },\n    toggle: function(setting){\n      return this.each(function(){\n        var el = $(this)\n        ;(setting === undefined ? el.css(\"display\") == \"none\" : setting) ? el.show() : el.hide()\n      })\n    },\n    prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },\n    next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },\n    html: function(html){\n      return arguments.length === 0 ?\n        (this.length > 0 ? this[0].innerHTML : null) :\n        this.each(function(idx){\n          var originHtml = this.innerHTML\n          $(this).empty().append( funcArg(this, html, idx, originHtml) )\n        })\n    },\n    text: function(text){\n      return arguments.length === 0 ?\n        (this.length > 0 ? this[0].textContent : null) :\n        this.each(function(){ this.textContent = (text === undefined) ? '' : ''+text })\n    },\n    attr: function(name, value){\n      var result\n      return (typeof name == 'string' && value === undefined) ?\n        (this.length == 0 || this[0].nodeType !== 1 ? undefined :\n          (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() :\n          (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result\n        ) :\n        this.each(function(idx){\n          if (this.nodeType !== 1) return\n          if (isObject(name)) for (key in name) setAttribute(this, key, name[key])\n          else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))\n        })\n    },\n    removeAttr: function(name){\n      return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) })\n    },\n    prop: function(name, value){\n      name = propMap[name] || name\n      return (value === undefined) ?\n        (this[0] && this[0][name]) :\n        this.each(function(idx){\n          this[name] = funcArg(this, value, idx, this[name])\n        })\n    },\n    data: function(name, value){\n      var data = this.attr('data-' + name.replace(capitalRE, '-$1').toLowerCase(), value)\n      return data !== null ? deserializeValue(data) : undefined\n    },\n    val: function(value){\n      return arguments.length === 0 ?\n        (this[0] && (this[0].multiple ?\n           $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :\n           this[0].value)\n        ) :\n        this.each(function(idx){\n          this.value = funcArg(this, value, idx, this.value)\n        })\n    },\n    offset: function(coordinates){\n      if (coordinates) return this.each(function(index){\n        var $this = $(this),\n            coords = funcArg(this, coordinates, index, $this.offset()),\n            parentOffset = $this.offsetParent().offset(),\n            props = {\n              top:  coords.top  - parentOffset.top,\n              left: coords.left - parentOffset.left\n            }\n\n        if ($this.css('position') == 'static') props['position'] = 'relative'\n        $this.css(props)\n      })\n      if (this.length==0) return null\n      var obj = this[0].getBoundingClientRect()\n      return {\n        left: obj.left + window.pageXOffset,\n        top: obj.top + window.pageYOffset,\n        width: Math.round(obj.width),\n        height: Math.round(obj.height)\n      }\n    },\n    css: function(property, value){\n      if (arguments.length < 2) {\n        var element = this[0], computedStyle = getComputedStyle(element, '')\n        if(!element) return\n        if (typeof property == 'string')\n          return element.style[camelize(property)] || computedStyle.getPropertyValue(property)\n        else if (isArray(property)) {\n          var props = {}\n          $.each(isArray(property) ? property: [property], function(_, prop){\n            props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))\n          })\n          return props\n        }\n      }\n\n      var css = ''\n      if (type(property) == 'string') {\n        if (!value && value !== 0)\n          this.each(function(){ this.style.removeProperty(dasherize(property)) })\n        else\n          css = dasherize(property) + \":\" + maybeAddPx(property, value)\n      } else {\n        for (key in property)\n          if (!property[key] && property[key] !== 0)\n            this.each(function(){ this.style.removeProperty(dasherize(key)) })\n          else\n            css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'\n      }\n\n      return this.each(function(){ this.style.cssText += ';' + css })\n    },\n    index: function(element){\n      return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])\n    },\n    hasClass: function(name){\n      if (!name) return false\n      return emptyArray.some.call(this, function(el){\n        return this.test(className(el))\n      }, classRE(name))\n    },\n    addClass: function(name){\n      if (!name) return this\n      return this.each(function(idx){\n        classList = []\n        var cls = className(this), newName = funcArg(this, name, idx, cls)\n        newName.split(/\\s+/g).forEach(function(klass){\n          if (!$(this).hasClass(klass)) classList.push(klass)\n        }, this)\n        classList.length && className(this, cls + (cls ? \" \" : \"\") + classList.join(\" \"))\n      })\n    },\n    removeClass: function(name){\n      return this.each(function(idx){\n        if (name === undefined) return className(this, '')\n        classList = className(this)\n        funcArg(this, name, idx, classList).split(/\\s+/g).forEach(function(klass){\n          classList = classList.replace(classRE(klass), \" \")\n        })\n        className(this, classList.trim())\n      })\n    },\n    toggleClass: function(name, when){\n      if (!name) return this\n      return this.each(function(idx){\n        var $this = $(this), names = funcArg(this, name, idx, className(this))\n        names.split(/\\s+/g).forEach(function(klass){\n          (when === undefined ? !$this.hasClass(klass) : when) ?\n            $this.addClass(klass) : $this.removeClass(klass)\n        })\n      })\n    },\n    scrollTop: function(value){\n      if (!this.length) return\n      var hasScrollTop = 'scrollTop' in this[0]\n      if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset\n      return this.each(hasScrollTop ?\n        function(){ this.scrollTop = value } :\n        function(){ this.scrollTo(this.scrollX, value) })\n    },\n    scrollLeft: function(value){\n      if (!this.length) return\n      var hasScrollLeft = 'scrollLeft' in this[0]\n      if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset\n      return this.each(hasScrollLeft ?\n        function(){ this.scrollLeft = value } :\n        function(){ this.scrollTo(value, this.scrollY) })\n    },\n    position: function() {\n      if (!this.length) return\n\n      var elem = this[0],\n        // Get *real* offsetParent\n        offsetParent = this.offsetParent(),\n        // Get correct offsets\n        offset       = this.offset(),\n        parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()\n\n      // Subtract element margins\n      // note: when an element has margin: auto the offsetLeft and marginLeft\n      // are the same in Safari causing offset.left to incorrectly be 0\n      offset.top  -= parseFloat( $(elem).css('margin-top') ) || 0\n      offset.left -= parseFloat( $(elem).css('margin-left') ) || 0\n\n      // Add offsetParent borders\n      parentOffset.top  += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0\n      parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0\n\n      // Subtract the two offsets\n      return {\n        top:  offset.top  - parentOffset.top,\n        left: offset.left - parentOffset.left\n      }\n    },\n    offsetParent: function() {\n      return this.map(function(){\n        var parent = this.offsetParent || document.body\n        while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css(\"position\") == \"static\")\n          parent = parent.offsetParent\n        return parent\n      })\n    }\n  }\n\n  // for now\n  $.fn.detach = $.fn.remove\n\n  // Generate the `width` and `height` functions\n  ;['width', 'height'].forEach(function(dimension){\n    var dimensionProperty =\n      dimension.replace(/./, function(m){ return m[0].toUpperCase() })\n\n    $.fn[dimension] = function(value){\n      var offset, el = this[0]\n      if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :\n        isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :\n        (offset = this.offset()) && offset[dimension]\n      else return this.each(function(idx){\n        el = $(this)\n        el.css(dimension, funcArg(this, value, idx, el[dimension]()))\n      })\n    }\n  })\n\n  function traverseNode(node, fun) {\n    fun(node)\n    for (var key in node.childNodes) traverseNode(node.childNodes[key], fun)\n  }\n\n  // Generate the `after`, `prepend`, `before`, `append`,\n  // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.\n  adjacencyOperators.forEach(function(operator, operatorIndex) {\n    var inside = operatorIndex % 2 //=> prepend, append\n\n    $.fn[operator] = function(){\n      // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings\n      var argType, nodes = $.map(arguments, function(arg) {\n            argType = type(arg)\n            return argType == \"object\" || argType == \"array\" || arg == null ?\n              arg : zepto.fragment(arg)\n          }),\n          parent, copyByClone = this.length > 1\n      if (nodes.length < 1) return this\n\n      return this.each(function(_, target){\n        parent = inside ? target : target.parentNode\n\n        // convert all methods to a \"before\" operation\n        target = operatorIndex == 0 ? target.nextSibling :\n                 operatorIndex == 1 ? target.firstChild :\n                 operatorIndex == 2 ? target :\n                 null\n\n        nodes.forEach(function(node){\n          if (copyByClone) node = node.cloneNode(true)\n          else if (!parent) return $(node).remove()\n\n          traverseNode(parent.insertBefore(node, target), function(el){\n            if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&\n               (!el.type || el.type === 'text/javascript') && !el.src)\n              window['eval'].call(window, el.innerHTML)\n          })\n        })\n      })\n    }\n\n    // after    => insertAfter\n    // prepend  => prependTo\n    // before   => insertBefore\n    // append   => appendTo\n    $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){\n      $(html)[operator](this)\n      return this\n    }\n  })\n\n  zepto.Z.prototype = $.fn\n\n  // Export internal API functions in the `$.zepto` namespace\n  zepto.uniq = uniq\n  zepto.deserializeValue = deserializeValue\n  $.zepto = zepto\n\n  return $\n})()\n\nwindow.Zepto = Zepto\nwindow.$ === undefined && (window.$ = Zepto)\n\n;(function($){\n  var $$ = $.zepto.qsa, _zid = 1, undefined,\n      slice = Array.prototype.slice,\n      isFunction = $.isFunction,\n      isString = function(obj){ return typeof obj == 'string' },\n      handlers = {},\n      specialEvents={},\n      focusinSupported = 'onfocusin' in window,\n      focus = { focus: 'focusin', blur: 'focusout' },\n      hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }\n\n  specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'\n\n  function zid(element) {\n    return element._zid || (element._zid = _zid++)\n  }\n  function findHandlers(element, event, fn, selector) {\n    event = parse(event)\n    if (event.ns) var matcher = matcherFor(event.ns)\n    return (handlers[zid(element)] || []).filter(function(handler) {\n      return handler\n        && (!event.e  || handler.e == event.e)\n        && (!event.ns || matcher.test(handler.ns))\n        && (!fn       || zid(handler.fn) === zid(fn))\n        && (!selector || handler.sel == selector)\n    })\n  }\n  function parse(event) {\n    var parts = ('' + event).split('.')\n    return {e: parts[0], ns: parts.slice(1).sort().join(' ')}\n  }\n  function matcherFor(ns) {\n    return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')\n  }\n\n  function eventCapture(handler, captureSetting) {\n    return handler.del &&\n      (!focusinSupported && (handler.e in focus)) ||\n      !!captureSetting\n  }\n\n  function realEvent(type) {\n    return hover[type] || (focusinSupported && focus[type]) || type\n  }\n\n  function add(element, events, fn, data, selector, delegator, capture){\n    var id = zid(element), set = (handlers[id] || (handlers[id] = []))\n    events.split(/\\s/).forEach(function(event){\n      if (event == 'ready') return $(document).ready(fn)\n      var handler   = parse(event)\n      handler.fn    = fn\n      handler.sel   = selector\n      // emulate mouseenter, mouseleave\n      if (handler.e in hover) fn = function(e){\n        var related = e.relatedTarget\n        if (!related || (related !== this && !$.contains(this, related)))\n          return handler.fn.apply(this, arguments)\n      }\n      handler.del   = delegator\n      var callback  = delegator || fn\n      handler.proxy = function(e){\n        e = compatible(e)\n        if (e.isImmediatePropagationStopped()) return\n        e.data = data\n        var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))\n        if (result === false) e.preventDefault(), e.stopPropagation()\n        return result\n      }\n      handler.i = set.length\n      set.push(handler)\n      if ('addEventListener' in element)\n        element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n    })\n  }\n  function remove(element, events, fn, selector, capture){\n    var id = zid(element)\n    ;(events || '').split(/\\s/).forEach(function(event){\n      findHandlers(element, event, fn, selector).forEach(function(handler){\n        delete handlers[id][handler.i]\n      if ('removeEventListener' in element)\n        element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))\n      })\n    })\n  }\n\n  $.event = { add: add, remove: remove }\n\n  $.proxy = function(fn, context) {\n    if (isFunction(fn)) {\n      var proxyFn = function(){ return fn.apply(context, arguments) }\n      proxyFn._zid = zid(fn)\n      return proxyFn\n    } else if (isString(context)) {\n      return $.proxy(fn[context], fn)\n    } else {\n      throw new TypeError(\"expected function\")\n    }\n  }\n\n  $.fn.bind = function(event, data, callback){\n    return this.on(event, data, callback)\n  }\n  $.fn.unbind = function(event, callback){\n    return this.off(event, callback)\n  }\n  $.fn.one = function(event, selector, data, callback){\n    return this.on(event, selector, data, callback, 1)\n  }\n\n  var returnTrue = function(){return true},\n      returnFalse = function(){return false},\n      ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$)/,\n      eventMethods = {\n        preventDefault: 'isDefaultPrevented',\n        stopImmediatePropagation: 'isImmediatePropagationStopped',\n        stopPropagation: 'isPropagationStopped'\n      }\n\n  function compatible(event, source) {\n    if (source || !event.isDefaultPrevented) {\n      source || (source = event)\n\n      $.each(eventMethods, function(name, predicate) {\n        var sourceMethod = source[name]\n        event[name] = function(){\n          this[predicate] = returnTrue\n          return sourceMethod && sourceMethod.apply(source, arguments)\n        }\n        event[predicate] = returnFalse\n      })\n\n      if (source.defaultPrevented !== undefined ? source.defaultPrevented :\n          'returnValue' in source ? source.returnValue === false :\n          source.getPreventDefault && source.getPreventDefault())\n        event.isDefaultPrevented = returnTrue\n    }\n    return event\n  }\n\n  function createProxy(event) {\n    var key, proxy = { originalEvent: event }\n    for (key in event)\n      if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]\n\n    return compatible(proxy, event)\n  }\n\n  $.fn.delegate = function(selector, event, callback){\n    return this.on(event, selector, callback)\n  }\n  $.fn.undelegate = function(selector, event, callback){\n    return this.off(event, selector, callback)\n  }\n\n  $.fn.live = function(event, callback){\n    $(document.body).delegate(this.selector, event, callback)\n    return this\n  }\n  $.fn.die = function(event, callback){\n    $(document.body).undelegate(this.selector, event, callback)\n    return this\n  }\n\n  $.fn.on = function(event, selector, data, callback, one){\n    var autoRemove, delegator, $this = this\n    if (event && !isString(event)) {\n      $.each(event, function(type, fn){\n        $this.on(type, selector, data, fn, one)\n      })\n      return $this\n    }\n\n    if (!isString(selector) && !isFunction(callback) && callback !== false)\n      callback = data, data = selector, selector = undefined\n    if (isFunction(data) || data === false)\n      callback = data, data = undefined\n\n    if (callback === false) callback = returnFalse\n\n    return $this.each(function(_, element){\n      if (one) autoRemove = function(e){\n        remove(element, e.type, callback)\n        return callback.apply(this, arguments)\n      }\n\n      if (selector) delegator = function(e){\n        var evt, match = $(e.target).closest(selector, element).get(0)\n        if (match && match !== element) {\n          evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})\n          return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))\n        }\n      }\n\n      add(element, event, callback, data, selector, delegator || autoRemove)\n    })\n  }\n  $.fn.off = function(event, selector, callback){\n    var $this = this\n    if (event && !isString(event)) {\n      $.each(event, function(type, fn){\n        $this.off(type, selector, fn)\n      })\n      return $this\n    }\n\n    if (!isString(selector) && !isFunction(callback) && callback !== false)\n      callback = selector, selector = undefined\n\n    if (callback === false) callback = returnFalse\n\n    return $this.each(function(){\n      remove(this, event, callback, selector)\n    })\n  }\n\n  $.fn.trigger = function(event, args){\n    event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)\n    event._args = args\n    return this.each(function(){\n      // items in the collection might not be DOM elements\n      if('dispatchEvent' in this) this.dispatchEvent(event)\n      else $(this).triggerHandler(event, args)\n    })\n  }\n\n  // triggers event handlers on current element just as if an event occurred,\n  // doesn't trigger an actual event, doesn't bubble\n  $.fn.triggerHandler = function(event, args){\n    var e, result\n    this.each(function(i, element){\n      e = createProxy(isString(event) ? $.Event(event) : event)\n      e._args = args\n      e.target = element\n      $.each(findHandlers(element, event.type || event), function(i, handler){\n        result = handler.proxy(e)\n        if (e.isImmediatePropagationStopped()) return false\n      })\n    })\n    return result\n  }\n\n  // shortcut methods for `.bind(event, fn)` for each event type\n  ;('focusin focusout load resize scroll unload click dblclick '+\n  'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+\n  'change select keydown keypress keyup error').split(' ').forEach(function(event) {\n    $.fn[event] = function(callback) {\n      return callback ?\n        this.bind(event, callback) :\n        this.trigger(event)\n    }\n  })\n\n  ;['focus', 'blur'].forEach(function(name) {\n    $.fn[name] = function(callback) {\n      if (callback) this.bind(name, callback)\n      else this.each(function(){\n        try { this[name]() }\n        catch(e) {}\n      })\n      return this\n    }\n  })\n\n  $.Event = function(type, props) {\n    if (!isString(type)) props = type, type = props.type\n    var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true\n    if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])\n    event.initEvent(type, bubbles, true)\n    return compatible(event)\n  }\n\n})(Zepto)\n\n;(function($){\n  var jsonpID = 0,\n      document = window.document,\n      key,\n      name,\n      rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n      scriptTypeRE = /^(?:text|application)\\/javascript/i,\n      xmlTypeRE = /^(?:text|application)\\/xml/i,\n      jsonType = 'application/json',\n      htmlType = 'text/html',\n      blankRE = /^\\s*$/\n\n  // trigger a custom event and return false if it was cancelled\n  function triggerAndReturn(context, eventName, data) {\n    var event = $.Event(eventName)\n    $(context).trigger(event, data)\n    return !event.isDefaultPrevented()\n  }\n\n  // trigger an Ajax \"global\" event\n  function triggerGlobal(settings, context, eventName, data) {\n    if (settings.global) return triggerAndReturn(context || document, eventName, data)\n  }\n\n  // Number of active Ajax requests\n  $.active = 0\n\n  function ajaxStart(settings) {\n    if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')\n  }\n  function ajaxStop(settings) {\n    if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')\n  }\n\n  // triggers an extra global event \"ajaxBeforeSend\" that's like \"ajaxSend\" but cancelable\n  function ajaxBeforeSend(xhr, settings) {\n    var context = settings.context\n    if (settings.beforeSend.call(context, xhr, settings) === false ||\n        triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)\n      return false\n\n    triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])\n  }\n  function ajaxSuccess(data, xhr, settings, deferred) {\n    var context = settings.context, status = 'success'\n    settings.success.call(context, data, status, xhr)\n    if (deferred) deferred.resolveWith(context, [data, status, xhr])\n    triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])\n    ajaxComplete(status, xhr, settings)\n  }\n  // type: \"timeout\", \"error\", \"abort\", \"parsererror\"\n  function ajaxError(error, type, xhr, settings, deferred) {\n    var context = settings.context\n    settings.error.call(context, xhr, type, error)\n    if (deferred) deferred.rejectWith(context, [xhr, type, error])\n    triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type])\n    ajaxComplete(type, xhr, settings)\n  }\n  // status: \"success\", \"notmodified\", \"error\", \"timeout\", \"abort\", \"parsererror\"\n  function ajaxComplete(status, xhr, settings) {\n    var context = settings.context\n    settings.complete.call(context, xhr, status)\n    triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])\n    ajaxStop(settings)\n  }\n\n  // Empty function, used as default callback\n  function empty() {}\n\n  $.ajaxJSONP = function(options, deferred){\n    if (!('type' in options)) return $.ajax(options)\n\n    var _callbackName = options.jsonpCallback,\n      callbackName = ($.isFunction(_callbackName) ?\n        _callbackName() : _callbackName) || ('jsonp' + (++jsonpID)),\n      script = document.createElement('script'),\n      originalCallback = window[callbackName],\n      responseData,\n      abort = function(errorType) {\n        $(script).triggerHandler('error', errorType || 'abort')\n      },\n      xhr = { abort: abort }, abortTimeout\n\n    if (deferred) deferred.promise(xhr)\n\n    $(script).on('load error', function(e, errorType){\n      clearTimeout(abortTimeout)\n      $(script).off().remove()\n\n      if (e.type == 'error' || !responseData) {\n        ajaxError(null, errorType || 'error', xhr, options, deferred)\n      } else {\n        ajaxSuccess(responseData[0], xhr, options, deferred)\n      }\n\n      window[callbackName] = originalCallback\n      if (responseData && $.isFunction(originalCallback))\n        originalCallback(responseData[0])\n\n      originalCallback = responseData = undefined\n    })\n\n    if (ajaxBeforeSend(xhr, options) === false) {\n      abort('abort')\n      return xhr\n    }\n\n    window[callbackName] = function(){\n      responseData = arguments\n    }\n\n    script.src = options.url.replace(/=\\?/, '=' + callbackName)\n    document.head.appendChild(script)\n\n    if (options.timeout > 0) abortTimeout = setTimeout(function(){\n      abort('timeout')\n    }, options.timeout)\n\n    return xhr\n  }\n\n  $.ajaxSettings = {\n    // Default type of request\n    type: 'GET',\n    // Callback that is executed before request\n    beforeSend: empty,\n    // Callback that is executed if the request succeeds\n    success: empty,\n    // Callback that is executed the the server drops error\n    error: empty,\n    // Callback that is executed on request complete (both: error and success)\n    complete: empty,\n    // The context for the callbacks\n    context: null,\n    // Whether to trigger \"global\" Ajax events\n    global: true,\n    // Transport\n    xhr: function () {\n      return new window.XMLHttpRequest()\n    },\n    // MIME types mapping\n    // IIS returns Javascript as \"application/x-javascript\"\n    accepts: {\n      script: 'text/javascript, application/javascript, application/x-javascript',\n      json:   jsonType,\n      xml:    'application/xml, text/xml',\n      html:   htmlType,\n      text:   'text/plain'\n    },\n    // Whether the request is to another domain\n    crossDomain: false,\n    // Default timeout\n    timeout: 0,\n    // Whether data should be serialized to string\n    processData: true,\n    // Whether the browser should be allowed to cache GET responses\n    cache: true\n  }\n\n  function mimeToDataType(mime) {\n    if (mime) mime = mime.split(';', 2)[0]\n    return mime && ( mime == htmlType ? 'html' :\n      mime == jsonType ? 'json' :\n      scriptTypeRE.test(mime) ? 'script' :\n      xmlTypeRE.test(mime) && 'xml' ) || 'text'\n  }\n\n  function appendQuery(url, query) {\n    if (query == '') return url\n    return (url + '&' + query).replace(/[&?]{1,2}/, '?')\n  }\n\n  // serialize payload and append it to the URL for GET requests\n  function serializeData(options) {\n    if (options.processData && options.data && $.type(options.data) != \"string\")\n      options.data = $.param(options.data, options.traditional)\n    if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))\n      options.url = appendQuery(options.url, options.data), options.data = undefined\n  }\n\n  $.ajax = function(options){\n    var settings = $.extend({}, options || {}),\n        deferred = $.Deferred && $.Deferred()\n    for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]\n\n    ajaxStart(settings)\n\n    if (!settings.crossDomain) settings.crossDomain = /^([\\w-]+:)?\\/\\/([^\\/]+)/.test(settings.url) &&\n      RegExp.$2 != window.location.host\n\n    if (!settings.url) settings.url = window.location.toString()\n    serializeData(settings)\n    if (settings.cache === false) settings.url = appendQuery(settings.url, '_=' + Date.now())\n\n    var dataType = settings.dataType, hasPlaceholder = /=\\?/.test(settings.url)\n    if (dataType == 'jsonp' || hasPlaceholder) {\n      if (!hasPlaceholder)\n        settings.url = appendQuery(settings.url,\n          settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?')\n      return $.ajaxJSONP(settings, deferred)\n    }\n\n    var mime = settings.accepts[dataType],\n        headers = { },\n        setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },\n        protocol = /^([\\w-]+:)\\/\\//.test(settings.url) ? RegExp.$1 : window.location.protocol,\n        xhr = settings.xhr(),\n        nativeSetHeader = xhr.setRequestHeader,\n        abortTimeout\n\n    if (deferred) deferred.promise(xhr)\n\n    if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest')\n    setHeader('Accept', mime || '*/*')\n    if (mime = settings.mimeType || mime) {\n      if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]\n      xhr.overrideMimeType && xhr.overrideMimeType(mime)\n    }\n    if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))\n      setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded')\n\n    if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])\n    xhr.setRequestHeader = setHeader\n\n    xhr.onreadystatechange = function(){\n      if (xhr.readyState == 4) {\n        xhr.onreadystatechange = empty\n        clearTimeout(abortTimeout)\n        var result, error = false\n        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {\n          dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'))\n          result = xhr.responseText\n\n          try {\n            // http://perfectionkills.com/global-eval-what-are-the-options/\n            if (dataType == 'script')    (1,eval)(result)\n            else if (dataType == 'xml')  result = xhr.responseXML\n            else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)\n          } catch (e) { error = e }\n\n          if (error) ajaxError(error, 'parsererror', xhr, settings, deferred)\n          else ajaxSuccess(result, xhr, settings, deferred)\n        } else {\n          ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred)\n        }\n      }\n    }\n\n    if (ajaxBeforeSend(xhr, settings) === false) {\n      xhr.abort()\n      ajaxError(null, 'abort', xhr, settings, deferred)\n      return xhr\n    }\n\n    if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]\n\n    var async = 'async' in settings ? settings.async : true\n    xhr.open(settings.type, settings.url, async, settings.username, settings.password)\n\n    for (name in headers) nativeSetHeader.apply(xhr, headers[name])\n\n    if (settings.timeout > 0) abortTimeout = setTimeout(function(){\n        xhr.onreadystatechange = empty\n        xhr.abort()\n        ajaxError(null, 'timeout', xhr, settings, deferred)\n      }, settings.timeout)\n\n    // avoid sending empty string (#319)\n    xhr.send(settings.data ? settings.data : null)\n    return xhr\n  }\n\n  // handle optional data/success arguments\n  function parseArguments(url, data, success, dataType) {\n    var hasData = !$.isFunction(data)\n    return {\n      url:      url,\n      data:     hasData  ? data : undefined,\n      success:  !hasData ? data : $.isFunction(success) ? success : undefined,\n      dataType: hasData  ? dataType || success : success\n    }\n  }\n\n  $.get = function(url, data, success, dataType){\n    return $.ajax(parseArguments.apply(null, arguments))\n  }\n\n  $.post = function(url, data, success, dataType){\n    var options = parseArguments.apply(null, arguments)\n    options.type = 'POST'\n    return $.ajax(options)\n  }\n\n  $.getJSON = function(url, data, success){\n    var options = parseArguments.apply(null, arguments)\n    options.dataType = 'json'\n    return $.ajax(options)\n  }\n\n  $.fn.load = function(url, data, success){\n    if (!this.length) return this\n    var self = this, parts = url.split(/\\s/), selector,\n        options = parseArguments(url, data, success),\n        callback = options.success\n    if (parts.length > 1) options.url = parts[0], selector = parts[1]\n    options.success = function(response){\n      self.html(selector ?\n        $('<div>').html(response.replace(rscript, \"\")).find(selector)\n        : response)\n      callback && callback.apply(self, arguments)\n    }\n    $.ajax(options)\n    return this\n  }\n\n  var escape = encodeURIComponent\n\n  function serialize(params, obj, traditional, scope){\n    var type, array = $.isArray(obj), hash = $.isPlainObject(obj)\n    $.each(obj, function(key, value) {\n      type = $.type(value)\n      if (scope) key = traditional ? scope :\n        scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']'\n      // handle data in serializeArray() format\n      if (!scope && array) params.add(value.name, value.value)\n      // recurse into nested objects\n      else if (type == \"array\" || (!traditional && type == \"object\"))\n        serialize(params, value, traditional, key)\n      else params.add(key, value)\n    })\n  }\n\n  $.param = function(obj, traditional){\n    var params = []\n    params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) }\n    serialize(params, obj, traditional)\n    return params.join('&').replace(/%20/g, '+')\n  }\n})(Zepto)\n\n;(function($){\n  $.fn.serializeArray = function() {\n    var result = [], el\n    $([].slice.call(this.get(0).elements)).each(function(){\n      el = $(this)\n      var type = el.attr('type')\n      if (this.nodeName.toLowerCase() != 'fieldset' &&\n        !this.disabled && type != 'submit' && type != 'reset' && type != 'button' &&\n        ((type != 'radio' && type != 'checkbox') || this.checked))\n        result.push({\n          name: el.attr('name'),\n          value: el.val()\n        })\n    })\n    return result\n  }\n\n  $.fn.serialize = function(){\n    var result = []\n    this.serializeArray().forEach(function(elm){\n      result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))\n    })\n    return result.join('&')\n  }\n\n  $.fn.submit = function(callback) {\n    if (callback) this.bind('submit', callback)\n    else if (this.length) {\n      var event = $.Event('submit')\n      this.eq(0).trigger(event)\n      if (!event.isDefaultPrevented()) this.get(0).submit()\n    }\n    return this\n  }\n\n})(Zepto)\n\n;(function($){\n  // __proto__ doesn't exist on IE<11, so redefine\n  // the Z function to use object extension instead\n  if (!('__proto__' in {})) {\n    $.extend($.zepto, {\n      Z: function(dom, selector){\n        dom = dom || []\n        $.extend(dom, $.fn)\n        dom.selector = selector || ''\n        dom.__Z = true\n        return dom\n      },\n      // this is a kludge but works\n      isZ: function(object){\n        return $.type(object) === 'array' && '__Z' in object\n      }\n    })\n  }\n\n  // getComputedStyle shouldn't freak out when called\n  // without a valid element as argument\n  try {\n    getComputedStyle(undefined)\n  } catch(e) {\n    var nativeGetComputedStyle = getComputedStyle;\n    window.getComputedStyle = function(element){\n      try {\n        return nativeGetComputedStyle(element)\n      } catch(e) {\n        return null\n      }\n    }\n  }\n})(Zepto)\n\n//     Zepto.js\n//     (c) 2010-2013 Thomas Fuchs\n//     Zepto.js may be freely distributed under the MIT license.\n\n;(function($, undefined){\n  var prefix = '', eventPrefix, endEventName, endAnimationName,\n    vendors = { Webkit: 'webkit', Moz: '', O: 'o' },\n    document = window.document, testEl = document.createElement('div'),\n    supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,\n    transform,\n    transitionProperty, transitionDuration, transitionTiming, transitionDelay,\n    animationName, animationDuration, animationTiming, animationDelay,\n    cssReset = {}\n\n  function dasherize(str) { return str.replace(/([a-z])([A-Z])/, '$1-$2').toLowerCase() }\n  function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : name.toLowerCase() }\n\n  $.each(vendors, function(vendor, event){\n    if (testEl.style[vendor + 'TransitionProperty'] !== undefined) {\n      prefix = '-' + vendor.toLowerCase() + '-'\n      eventPrefix = event\n      return false\n    }\n  })\n\n  transform = prefix + 'transform'\n  cssReset[transitionProperty = prefix + 'transition-property'] =\n  cssReset[transitionDuration = prefix + 'transition-duration'] =\n  cssReset[transitionDelay    = prefix + 'transition-delay'] =\n  cssReset[transitionTiming   = prefix + 'transition-timing-function'] =\n  cssReset[animationName      = prefix + 'animation-name'] =\n  cssReset[animationDuration  = prefix + 'animation-duration'] =\n  cssReset[animationDelay     = prefix + 'animation-delay'] =\n  cssReset[animationTiming    = prefix + 'animation-timing-function'] = ''\n\n  $.fx = {\n    off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined),\n    speeds: { _default: 400, fast: 200, slow: 600 },\n    cssPrefix: prefix,\n    transitionEnd: normalizeEvent('TransitionEnd'),\n    animationEnd: normalizeEvent('AnimationEnd')\n  }\n\n  $.fn.animate = function(properties, duration, ease, callback, delay){\n    if ($.isFunction(duration))\n      callback = duration, ease = undefined, duration = undefined\n    if ($.isFunction(ease))\n      callback = ease, ease = undefined\n    if ($.isPlainObject(duration))\n      ease = duration.easing, callback = duration.complete, delay = duration.delay, duration = duration.duration\n    if (duration) duration = (typeof duration == 'number' ? duration :\n                    ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000\n    if (delay) delay = parseFloat(delay) / 1000\n    return this.anim(properties, duration, ease, callback, delay)\n  }\n\n  $.fn.anim = function(properties, duration, ease, callback, delay){\n    var key, cssValues = {}, cssProperties, transforms = '',\n        that = this, wrappedCallback, endEvent = $.fx.transitionEnd,\n        fired = false\n\n    if (duration === undefined) duration = $.fx.speeds._default / 1000\n    if (delay === undefined) delay = 0\n    if ($.fx.off) duration = 0\n\n    if (typeof properties == 'string') {\n      // keyframe animation\n      cssValues[animationName] = properties\n      cssValues[animationDuration] = duration + 's'\n      cssValues[animationDelay] = delay + 's'\n      cssValues[animationTiming] = (ease || 'linear')\n      endEvent = $.fx.animationEnd\n    } else {\n      cssProperties = []\n      // CSS transitions\n      for (key in properties)\n        if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') '\n        else cssValues[key] = properties[key], cssProperties.push(dasherize(key))\n\n      if (transforms) cssValues[transform] = transforms, cssProperties.push(transform)\n      if (duration > 0 && typeof properties === 'object') {\n        cssValues[transitionProperty] = cssProperties.join(', ')\n        cssValues[transitionDuration] = duration + 's'\n        cssValues[transitionDelay] = delay + 's'\n        cssValues[transitionTiming] = (ease || 'linear')\n      }\n    }\n\n    wrappedCallback = function(event){\n      if (typeof event !== 'undefined') {\n        if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from \"below\"\n        $(event.target).unbind(endEvent, wrappedCallback)\n      } else\n        $(this).unbind(endEvent, wrappedCallback) // triggered by setTimeout\n\n      fired = true\n      $(this).css(cssReset)\n      callback && callback.call(this)\n    }\n    if (duration > 0){\n      this.bind(endEvent, wrappedCallback)\n      // transitionEnd is not always firing on older Android phones\n      // so make sure it gets fired\n      setTimeout(function(){\n        if (fired) return\n        wrappedCallback.call(that)\n      }, (duration * 1000) + 25)\n    }\n\n    // trigger page reflow so new elements can animate\n    this.size() && this.get(0).clientLeft\n\n    this.css(cssValues)\n\n    if (duration <= 0) setTimeout(function() {\n      that.each(function(){ wrappedCallback.call(this) })\n    }, 0)\n\n    return this\n  }\n\n  testEl = null\n})(Zepto)\n"
  },
  {
    "path": "legacy/README.md",
    "content": "This folder contains code that is planned to go into a legacy browser support Javascript file for people targeting older versions of IE.\n\nThis is a very low priority process, so there is no ETA (though people stating what parts are needed will help).\n"
  },
  {
    "path": "legacy/blur.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n//namespace VelocityStatic.CSS {\n//\texport function blur(element, propertyValue) {\n//\t\tif (propertyValue === undefined) {\n//\t\t\tlet extracted = parseFloat(propertyValue);\n//\n//\t\t\t/* If extracted is NaN, meaning the value isn't already extracted. */\n//\t\t\tif (!(extracted || extracted === 0)) {\n//\t\t\t\tlet blurComponent = propertyValue.toString().match(/blur\\(([0-9]+[A-z]+)\\)/i);\n//\n//\t\t\t\t/* If the filter string had a blur component, return just the blur value and unit type. */\n//\t\t\t\tif (blurComponent) {\n//\t\t\t\t\textracted = blurComponent[1];\n//\t\t\t\t\t/* If the component doesn't exist, default blur to 0. */\n//\t\t\t\t} else {\n//\t\t\t\t\textracted = 0;\n//\t\t\t\t}\n//\t\t\t}\n//\n//\t\t\treturn extracted + \"px\";\n//\t\t}\n//\t\t/* For the blur effect to be fully de-applied, it needs to be set to \"none\" instead of 0. */\n//\t\tif (!parseFloat(propertyValue)) {\n//\t\t\treturn \"none\";\n//\t\t}\n//\t\treturn \"blur(\" + propertyValue + \")\";\n//\t}\n//\n//\tregisterNormalization([\"blur\", blur]);\n//}\n"
  },
  {
    "path": "legacy/borderColor.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nnamespace VelocityStatic.CSS {\n\t/**\n\t * Handle a browser not supplying a compound borderColor property.\n\t */\n\tfunction borderColor(element: HTMLorSVGElement): string;\n\tfunction borderColor(element: HTMLorSVGElement, propertyValue: string): boolean;\n\tfunction borderColor(element: HTMLorSVGElement, propertyValue?: string): string | boolean {\n\t\tif (propertyValue === undefined) {\n\t\t\tvar top = getPropertyValue(element, \"borderTopColor\", true),\n\t\t\t\tright = getPropertyValue(element, \"borderRightColor\", true),\n\t\t\t\tbottom = getPropertyValue(element, \"borderBottomColor\", true),\n\t\t\t\tleft = getPropertyValue(element, \"borderLeftColor\", true);\n\n\t\t\tif (left === right) {\n\t\t\t\tif (top === bottom) {\n\t\t\t\t\tif (top === left) {\n\t\t\t\t\t\treturn top;\n\t\t\t\t\t}\n\t\t\t\t\treturn top + \" \" + right;\n\t\t\t\t}\n\t\t\t\treturn top + \" \" + right + \" \" + bottom;\n\t\t\t}\n\t\t\treturn top + \" \" + right + \" \" + bottom + \" \" + left;\n\t\t}\n\t\tlet sides = propertyValue.match(/((rgba?|hsla?)\\([^\\)]+\\)|#[0-9a-f])/gi);\n\n\t\tif (sides.length) {\n\t\t\tswitch (sides.length) {\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\ttop = right = bottom = left = sides[1];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3:\n\t\t\t\t\ttop = bottom = sides[1];\n\t\t\t\t\tleft = right = sides[2];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 4:\n\t\t\t\t\ttop = sides[1];\n\t\t\t\t\tleft = right = sides[2];\n\t\t\t\t\tbottom = sides[3];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 5:\n\t\t\t\t\ttop = sides[1];\n\t\t\t\t\tright = sides[2];\n\t\t\t\t\tbottom = sides[3];\n\t\t\t\t\tleft = sides[4];\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tsetPropertyValue(element, \"borderColorTop\", top);\n\t\tsetPropertyValue(element, \"borderColorRight\", right);\n\t\tsetPropertyValue(element, \"borderColorBottom\", bottom);\n\t\tsetPropertyValue(element, \"borderColorLeft\", left);\n\t\treturn true;\n\t}\n\n\tlet style = State.prefixElement.style;\n\n\tif (!style.borderColor && style.borderTopColor) {\n\t\tregisterNormalization([\"borderColor\", borderColor]);\n\t}\n}\n"
  },
  {
    "path": "legacy/clip.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n//namespace VelocityStatic.CSS {\n//\texport function clip(element, propertyValue) {\n//\t\tif (propertyValue === undefined) {\n//\t\t\tlet extracted;\n//\n//\t\t\t/* If Velocity also extracted this value, skip extraction. */\n//\t\t\tif (CSS.RegEx.wrappedValueAlreadyExtracted.test(propertyValue)) {\n//\t\t\t\textracted = propertyValue;\n//\t\t\t} else {\n//\t\t\t\t/* Remove the \"rect()\" wrapper. */\n//\t\t\t\textracted = propertyValue.toString().match(CSS.RegEx.valueUnwrap);\n//\n//\t\t\t\t/* Strip off commas. */\n//\t\t\t\textracted = extracted ? extracted[1].replace(/,(\\s+)?/g, \" \") : propertyValue;\n//\t\t\t}\n//\n//\t\t\treturn extracted;\n//\t\t} else {\n//\t\t\treturn \"rect(\" + propertyValue + \")\";\n//\t\t}\n//\t}\n//\n//\tregisterNormalization([\"clip\", clip]);\n//}"
  },
  {
    "path": "legacy/normalisations.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// TODO: Need to override all properties for IE<=8\n\nif (IE <= 8) {\n\ttry {\n\t\t/* A try/catch is used for IE<=8, which throws an error when \"invalid\" CSS values are set, e.g. a negative width.\n\t\t Try/catch is avoided for other browsers since it incurs a performance overhead. */\n\t\tif (Normalizations[propertyName]) {\n\t\t\tNormalizations[propertyName](element, propertyValue);\n\t\t} else {\n\t\t\telement.style[propertyName] = propertyValue;\n\t\t}\n\t} catch (error) {\n\t\tif (debug) {\n\t\t\tconsole.log(`Browser does not support [${propertyValue}] for [${propertyName}]`);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "legacy/opacity.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nnamespace VelocityStatic.CSS {\n\tif (IE <= 8) {\n\t\t/**\n\t\t * IE8 and below returns a \"filter\" value of \"alpha(opacity=\\d{1,3})\".\n\t\t * Extract the value and convert it to a decimal value to match the\n\t\t * standard CSS opacity property's formatting.\n\t\t */\n\t\tfunction opacity(element: HTMLorSVGElement): string;\n\t\tfunction opacity(element: HTMLorSVGElement, propertyValue: string): boolean;\n\t\tfunction opacity(element: HTMLorSVGElement, propertyValue?: string): string | boolean {\n\t\t\tif (propertyValue === undefined) {\n\t\t\t\tlet filterValue: number | string = getPropertyValue(element, \"filter\"),\n\t\t\t\t\textracted = filterValue.toString().match(/alpha\\(opacity=(.*)\\)/i);\n\n\t\t\t\treturn String(extracted ? parseInt(extracted[1]) / 100 : 1);\n\t\t\t}\n\t\t\tlet value = parseFloat(propertyValue);\n\n\t\t\t// Opacified elements are required to have their zoom\n\t\t\t// property set to a non-zero value.\n\t\t\tsetPropertyValue(element, \"zoom\", 1);\n\t\t\t// Setting the filter property on elements with certain font\n\t\t\t// property combinations can result in a highly unappealing\n\t\t\t// ultra-bolding effect. There's no way to remedy this through\n\t\t\t// a tween, but dropping the value altogether (when opacity\n\t\t\t// hits 1) at leasts ensures that the glitch is gone\n\t\t\t// post-tweening.\n\n\t\t\t// As per the filter property's spec, convert the decimal value\n\t\t\t// to a whole number and wrap the value.\n\t\t\tsetPropertyValue(element, \"filter\", value >= 1 ? \"\" : \"alpha(opacity=\" + Math.floor(value * 100) + \")\");\n\t\t\treturn true;\n\t\t}\n\n\t\tregisterNormalization([\"opacity\", opacity]);\n\t}\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"velocity-animate\",\n  \"version\": \"2.0.6\",\n  \"description\": \"Accelerated JavaScript animation.\",\n  \"keywords\": [\n    \"velocity\",\n    \"animation\",\n    \"jquery\",\n    \"animate\",\n    \"ui\",\n    \"velocity.js\",\n    \"velocityjs\",\n    \"javascript\"\n  ],\n  \"homepage\": \"http://velocityjs.org\",\n  \"bugs\": {\n    \"url\": \"http://github.com/julianshapiro/velocity/issues\"\n  },\n  \"license\": \"MIT\",\n  \"authors\": [\n    {\n      \"name\": \"Julian Shapiro\",\n      \"url\": \"http://julian.com/\"\n    },\n    {\n      \"name\": \"Ryc O'Chet\",\n      \"url\": \"https://github.com/Rycochet\"\n    }\n  ],\n  \"scripts\": {\n    \"start\": \"rollup -w -c --environment BUILD,TEST\",\n    \"build\": \"rollup -c --environment BUILD,MINIFY,TEST\",\n    \"lint\": \"tslint src/**/*.ts src-ui/**/*.ts test/src/**/*.ts\",\n    \"test\": \"rollup -c --environment TEST\",\n    \"version\": \"npm run build && auto-changelog && git add .\"\n  },\n  \"main\": \"velocity.min.js\",\n  \"module\": \"velocity.es5.js\",\n  \"types\": \"velocity.d.ts\",\n  \"repository\": \"julianshapiro/velocity\",\n  \"files\": [\n    \"velocity.js\",\n    \"velocity.d.ts\",\n    \"velocity.es5.js\",\n    \"velocity.es5.js.map\",\n    \"velocity.js.map\",\n    \"velocity.min.js\",\n    \"velocity.ui.js\",\n    \"velocity.ui.js.map\",\n    \"velocity.ui.min.js\"\n  ],\n  \"devDependencies\": {\n    \"@types/qunit\": \"^2.5.2\",\n    \"auto-changelog\": \"^1.8.0\",\n    \"babel-core\": \"^6.26.3\",\n    \"babel-plugin-external-helpers\": \"^6.22.0\",\n    \"babel-polyfill\": \"^6.26.0\",\n    \"babel-preset-env\": \"^1.7.0\",\n    \"markdown\": \"^0.5.0\",\n    \"octonode\": \"^0.9.3\",\n    \"qunit\": \"^2.6.1\",\n    \"qunit-assert-close\": \"^2.1.2\",\n    \"rollup\": \"^0.63.5\",\n    \"rollup-plugin-babel\": \"^3.0.7\",\n    \"rollup-plugin-license\": \"^0.7.0\",\n    \"rollup-plugin-sourcemaps\": \"^0.4.2\",\n    \"rollup-plugin-strip-banner\": \"^0.2.0\",\n    \"rollup-plugin-terser\": \"^1.0.1\",\n    \"rollup-plugin-tslint\": \"^0.1.34\",\n    \"rollup-plugin-typescript2\": \"^0.16.1\",\n    \"rollup-plugin-uglify\": \"^4.0.0\",\n    \"tslint\": \"^5.11.0\",\n    \"typescript\": \"^3.0.1\",\n    \"velocity-animate\": \"file:./\"\n  }\n}\n"
  },
  {
    "path": "rollup.config.js",
    "content": "/*\n * velocity-animate (C) 2014-2017 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport fs from \"fs\";\nimport path from \"path\";\nimport process from \"process\";\nimport babel from \"rollup-plugin-babel\";\nimport license from \"rollup-plugin-license\";\nimport sourceMaps from \"rollup-plugin-sourcemaps\";\n//import stripBanner from \"rollup-plugin-strip-banner\";\nimport tslint from \"rollup-plugin-tslint\";\nimport typescript from \"rollup-plugin-typescript2\";\nimport {terser} from \"rollup-plugin-terser\";\n\n// Copy of https://github.com/mjeanroy/rollup-plugin-strip-banner without a fixed file extension check.\n// Waiting for https://github.com/mjeanroy/rollup-plugin-strip-banner/pull/129\n// MIT License Copyright (c) 2016 Mickael Jeanroy\nimport rollupPluginUtils from \"rollup-pluginutils\";\nimport extractBanner from \"extract-banner\";\nimport MagicString from \"magic-string\";\n\nfunction stripBanner(options = {}) {\n\tconst filter = rollupPluginUtils.createFilter(options.include, options.exclude);\n\n\treturn {\n\t\ttransform(code, id) {\n\t\t\tif (!filter(id)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Remove banner for JS files only\n\t\t\tconst ext = path.extname(id).toLowerCase(),\n\t\t\t\t\tbanner = extractBanner(code);\n\t\t\tif (!banner || (ext !== '.js' && ext !== '.jsx' && ext !== '.ts' && ext !== '.tsx')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Use a magicString: it will generate the sourceMap at the end.\n\t\t\tconst magicString = new MagicString(code),\n\t\t\t\t\tpos = code.indexOf(banner);\n\t\t\t// Remove the banner with the magicString instance.\n\t\t\tmagicString.remove(pos, pos + banner.length);\n\t\t\t// Trim left to remove blank spaces.\n\t\t\tmagicString.trimStart();\n\t\t\tconst result = {code: magicString.toString()};\n\t\t\tif (options.sourceMap !== false) {\n\t\t\t\tresult.map = magicString.generateMap({hires: true});\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t};\n}\n// End of rollup-plugin-strip-banner\n\nconst pkg = require(\"./package.json\"),\n\t\tlibraryName = \"velocity\",\n\t\ttasks = [],\n\t\thasBuild = process.env.BUILD === \"true\",\n\t\thasMinify = process.env.MINIFY === \"true\",\n\t\thasTest = process.env.TEST === \"true\",\n\t\ttypescriptOptions = {\n//\t\t\tverbosity: 2,\n\t\t\tclean: true\n\t\t},\n\t\tterserOptions = {\n\t\t\toutput: {\n\t\t\t\tcomments: /velocity-animate \\(C\\)/\n\t\t\t}\n\t\t};\n\nfunction getPlugins(tsconfig) {\n\treturn [\n\t\tlicense({\n\t\t\tbanner: \"velocity-animate (C) 2014-2017 Julian Shapiro.\\n\\n Licensed under the MIT license. See LICENSE file in the project root for details.\"\n\t\t}),\n\t\tstripBanner(),\n\t\ttypescript(Object.assign({}, typescriptOptions, {\n\t\t\ttsconfig\n\t\t})),\n\t\tbabel({\n\t\t\texclude: [\"node_modules/**\"]\n\t\t})\n\t];\n}\n\nif (hasBuild || hasMinify) {\n\tfs.writeFileSync(\"version.ts\", `/*\\n * velocity-animate (C) 2014-2017 Julian Shapiro.\\n *\\n * Licensed under the MIT license. See LICENSE file in the project root for details.\\n */\\n\\n// Automatically generated\\nexport const VERSION = \"${pkg.version}\";\\n`);\n\n\ttasks.push({\n\t\tinput: \"src/velocity.ts\",\n\t\tcontext: \"window\",\n\t\toutput: [{\n\t\t\t\tfile: pkg.main.replace(\".min\", \"\"),\n\t\t\t\tname: \"Velocity\",\n\t\t\t\tformat: \"umd\",\n\t\t\t\tsourcemap: true\n\t\t\t}, {\n\t\t\t\tfile: pkg.module,\n\t\t\t\tname: pkg.name,\n\t\t\t\tformat: \"es\",\n\t\t\t\tsourcemap: true\n\t\t\t}],\n\t\twatch: {\n\t\t\tinclude: \"src/**\"\n\t\t},\n\t\tplugins: [\n\t\t\ttslint(),\n\t\t\t...getPlugins(\"src/tsconfig.json\"),\n\t\t\tsourceMaps()\n\t\t]\n\t}, {\n\t\tinput: \"src-ui/velocity.ui.ts\",\n\t\texternal: [\"velocity-animate\"],\n\t\toutput: [{\n\t\t\t\tfile: pkg.main.replace(\".min\", \".ui\"),\n\t\t\t\tformat: \"umd\",\n\t\t\t\tsourcemap: true,\n\t\t\t\tglobals: {\n\t\t\t\t\t\"velocity-animate\": \"Velocity\"\n\t\t\t\t}\n\t\t\t}],\n\t\twatch: {\n\t\t\tinclude: \"src-ui/**\"\n\t\t},\n\t\tplugins: [\n\t\t\ttslint(),\n\t\t\t...getPlugins(\"src-ui/tsconfig.json\"),\n\t\t\tsourceMaps()\n\t\t]\n\t});\n\tif (hasMinify) {\n\t\ttasks.push({\n\t\t\tinput: \"src/velocity.ts\",\n\t\t\tcontext: \"window\",\n\t\t\toutput: [{\n\t\t\t\t\tfile: pkg.main,\n\t\t\t\t\tname: \"Velocity\",\n\t\t\t\t\tformat: \"umd\",\n\t\t\t\t\tsourcemap: false\n\t\t\t\t}],\n\t\t\tplugins: [\n\t\t\t\t...getPlugins(\"src/tsconfig.json\"),\n\t\t\t\tterser(terserOptions)\n\t\t\t]\n\t\t}, {\n\t\t\tinput: \"src-ui/velocity.ui.ts\",\n\t\t\texternal: [\"velocity-animate\"],\n\t\t\toutput: [{\n\t\t\t\t\tfile: pkg.main.replace(\".min\", \".ui.min\"),\n\t\t\t\t\tformat: \"umd\",\n\t\t\t\t\tsourcemap: false,\n\t\t\t\t\tglobals: {\n\t\t\t\t\t\t\"velocity-animate\": \"Velocity\"\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\tplugins: [\n\t\t\t\t...getPlugins(\"src-ui/tsconfig.json\"),\n\t\t\t\tterser(terserOptions)\n\t\t\t]\n\t\t});\n\t}\n}\nif (hasTest) {\n\ttasks.push({\n\t\tinput: \"test/src/test.ts\",\n\t\texternal: [\"qunit\", \"velocity-animate\"],\n\t\tcontext: \"window\",\n\t\toutput: [{\n\t\t\t\tfile: \"test/test.js\",\n\t\t\t\tformat: \"umd\",\n\t\t\t\tsourcemap: true,\n\t\t\t\tglobals: {\n\t\t\t\t\t\"velocity-animate\": \"Velocity\",\n\t\t\t\t\t\"qunit\": \"QUnit\"\n\t\t\t\t}\n\t\t\t}],\n\t\tplugins: [\n\t\t\ttslint(),\n\t\t\t...getPlugins(\"test/src/tsconfig.json\", true),\n\t\t\tsourceMaps()\n\t\t]\n\t});\n}\n\nexport default tasks;\n"
  },
  {
    "path": "src/Velocity/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./actions/_all\";\nimport \"./css/_all\";\nimport \"./easing/_all\";\nimport \"./normalizations/_all\";\n"
  },
  {
    "path": "src/Velocity/actions/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./finish\";\nimport \"./option\";\nimport \"./pauseResume\";\nimport \"./property\";\nimport \"./reverse\";\nimport \"./stop\";\nimport \"./style\";\nimport \"./tween\";\n"
  },
  {
    "path": "src/Velocity/actions/actions.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Actions that can be performed by passing a string instead of a propertiesMap.\n */\n\n// Typedefs\nimport {VelocityActionFn} from \"../../../velocity.d\";\n\n// Project\nimport {isFunction, isString, propertyIsEnumerable} from \"../../types\";\nimport {defineProperty} from \"../../utility\";\n\n// Constants\nexport const Actions: {[name: string]: VelocityActionFn} = {};\n\n/**\n * Used to register an action. This should never be called by users\n * directly, instead it should be called via  an action:<br/>\n * <code>Velocity(\"registerAction\", \"name\", VelocityActionFn);</code>\n */\nexport function registerAction(args?: [string, VelocityActionFn], internal?: boolean) {\n\tconst name: string = args[0],\n\t\tcallback = args[1];\n\n\tif (!isString(name)) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'registerAction' name to an invalid value:`, name);\n\t} else if (!isFunction(callback)) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'registerAction' callback to an invalid value:`, name, callback);\n\t} else if (Actions[name] && !propertyIsEnumerable(Actions, name)) {\n\t\tconsole.warn(`VelocityJS: Trying to override internal 'registerAction' callback`, name);\n\t} else if (internal === true) {\n\t\tdefineProperty(Actions, name, callback);\n\t} else {\n\t\tActions[name] = callback;\n\t}\n}\n\nregisterAction([\"registerAction\", registerAction as any], true);\n"
  },
  {
    "path": "src/Velocity/actions/finish.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Finish all animation.\n */\n\n// Typedefs\nimport {AnimationCall, AnimationFlags, VelocityPromise, VelocityResult} from \"../../../velocity.d\";\n\n// Project\nimport {isVelocityResult} from \"../../types\";\nimport {getValue} from \"../../utility\";\nimport {completeCall} from \"../complete\";\nimport {setPropertyValue} from \"../css/setPropertyValue\";\nimport {defaults} from \"../defaults\";\nimport {validateQueue} from \"../options\";\nimport {State} from \"../state\";\nimport {beginCall} from \"../tick\";\nimport {validateTweens} from \"../tweens\";\nimport {registerAction} from \"./actions\";\n\n/**\n * Check if an animation should be finished, and if so we set the tweens to\n * the final value for it, then call complete.\n */\nfunction checkAnimationShouldBeFinished(animation: AnimationCall, queueName: false | string, defaultQueue: false | string) {\n\tvalidateTweens(animation);\n\tif (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n\t\tif (!(animation._flags & AnimationFlags.STARTED)) { // tslint:disable-line:no-bitwise\n\t\t\t// Copied from tick.ts - ensure that the animation is completely\n\t\t\t// valid and run begin() before complete().\n\t\t\tconst options = animation.options;\n\n\t\t\t// The begin callback is fired once per call, not once per\n\t\t\t// element, and is passed the full raw DOM element set as both\n\t\t\t// its context and its first argument.\n\t\t\tif (options._started++ === 0) {\n\t\t\t\toptions._first = animation;\n\t\t\t\tif (options.begin) {\n\t\t\t\t\t// Pass to an external fn with a try/catch block for optimisation\n\t\t\t\t\tbeginCall(animation);\n\t\t\t\t\t// Only called once, even if reversed or repeated\n\t\t\t\t\toptions.begin = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tanimation._flags |= AnimationFlags.STARTED; // tslint:disable-line:no-bitwise\n\t\t}\n\t\t// tslint:disable-next-line:forin\n\t\tfor (const property in animation.tweens) {\n\t\t\tconst tween = animation.tweens[property],\n\t\t\t\tsequence = tween.sequence,\n\t\t\t\tpattern = sequence.pattern;\n\t\t\tlet currentValue = \"\",\n\t\t\t\ti = 0;\n\n\t\t\tif (pattern) {\n\t\t\t\tconst endValues = sequence[sequence.length - 1];\n\n\t\t\t\tfor (; i < pattern.length; i++) {\n\t\t\t\t\tconst endValue = endValues[i];\n\n\t\t\t\t\tcurrentValue += endValue == null ? pattern[i] : endValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetPropertyValue(animation.element, property, currentValue, tween.fn);\n\t\t}\n\t\tcompleteCall(animation);\n\t}\n}\n\n/**\n * When the finish action is triggered, the elements' currently active call is\n * immediately finished. When an element is finished, the next item in its\n * animation queue is immediately triggered. If passed via a chained call\n * then this will only target the animations in that call, and not the\n * elements linked to it.\n *\n * A queue name may be passed in to specify that only animations on the\n * named queue are finished. The default queue is named \"\". In addition the\n * value of `false` is allowed for the queue name.\n *\n * An final argument may be passed in to clear an element's remaining queued\n * calls. This may only be the value `true`.\n */\nfunction finish(args: any[], elements: VelocityResult, promiseHandler?: VelocityPromise): void {\n\tconst queueName: string | false = validateQueue(args[0], true),\n\t\tdefaultQueue: false | string = defaults.queue,\n\t\tfinishAll = args[queueName === undefined ? 0 : 1] === true;\n\n\tif (isVelocityResult(elements) && elements.velocity.animations) {\n\t\tfor (const animation of elements.velocity.animations) {\n\t\t\tcheckAnimationShouldBeFinished(animation, queueName, defaultQueue);\n\t\t}\n\t} else {\n\t\twhile (State.firstNew) {\n\t\t\tvalidateTweens(State.firstNew);\n\t\t}\n\t\tfor (let activeCall = State.first, nextCall: AnimationCall; activeCall && (finishAll || activeCall !== State.firstNew); activeCall = nextCall || State.firstNew) {\n\t\t\tnextCall = activeCall._next;\n\t\t\tif (!elements || elements.includes(activeCall.element)) {\n\t\t\t\tcheckAnimationShouldBeFinished(activeCall, queueName, defaultQueue);\n\t\t\t}\n\t\t}\n\t}\n\tif (promiseHandler) {\n\t\tif (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n\t\t\telements.then(promiseHandler._resolver);\n\t\t} else {\n\t\t\tpromiseHandler._resolver(elements);\n\t\t}\n\t}\n}\n\nregisterAction([\"finish\", finish], true);\n"
  },
  {
    "path": "src/Velocity/actions/index.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nexport * from \"./finish\";\nexport * from \"./option\";\nexport * from \"./pauseResume\";\nexport * from \"./property\";\nexport * from \"./reverse\";\nexport * from \"./stop\";\nexport * from \"./style\";\nexport * from \"./tween\";\n"
  },
  {
    "path": "src/Velocity/actions/option.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Get or set a value from one or more running animations.\n */\n\nimport {AnimationCall, AnimationFlags, VelocityPromise, VelocityResult} from \"../../../velocity.d\";\n\nimport {isVelocityResult} from \"../../types\";\nimport {getValue} from \"../../utility\";\nimport {defaults} from \"../defaults\";\nimport {\n\tvalidateBegin, validateCache, validateComplete, validateDelay, validateDuration,\n\tvalidateFpsLimit, validateLoop, validateQueue, validateRepeat,\n} from \"../options\";\nimport {State} from \"../state\";\nimport {lastTick} from \"../tick\";\nimport {registerAction} from \"./actions\";\n\n/**\n * Used to map getters for the various AnimationFlags.\n */\nconst animationFlags: {[key: string]: number} = {\n\tisExpanded: AnimationFlags.EXPANDED,\n\tisReady: AnimationFlags.READY,\n\tisStarted: AnimationFlags.STARTED,\n\tisStopped: AnimationFlags.STOPPED,\n\tisPaused: AnimationFlags.PAUSED,\n\tisSync: AnimationFlags.SYNC,\n\tisReverse: AnimationFlags.REVERSE,\n};\n\n/**\n * Get or set an option or running AnimationCall data value. If there is no\n * value passed then it will get, otherwise we will set.\n *\n * NOTE: When using \"get\" this will not touch the Promise as it is never\n * returned to the user.\n */\nfunction option(args?: any[], elements?: VelocityResult, promiseHandler?: VelocityPromise, action?: string): any {\n\tconst key = args[0],\n\t\tqueue = action.indexOf(\".\") >= 0 ? action.replace(/^.*\\./, \"\") : undefined,\n\t\tqueueName = queue === \"false\" ? false : validateQueue(queue, true);\n\tlet animations: AnimationCall[],\n\t\tvalue = args[1];\n\n\tif (!key) {\n\t\tconsole.warn(`VelocityJS: Cannot access a non-existant key!`);\n\n\t\treturn null;\n\t}\n\t// If we're chaining the return value from Velocity then we are only\n\t// interested in the values related to that call\n\tif (isVelocityResult(elements) && elements.velocity.animations) {\n\t\tanimations = elements.velocity.animations;\n\t} else {\n\t\tanimations = [];\n\n\t\tfor (let activeCall = State.first; activeCall; activeCall = activeCall._next) {\n\t\t\tif (elements.indexOf(activeCall.element) >= 0 && getValue(activeCall.queue, activeCall.options.queue) === queueName) {\n\t\t\t\tanimations.push(activeCall);\n\t\t\t}\n\t\t}\n\t\t// If we're dealing with multiple elements that are pointing at a\n\t\t// single running animation, then instead treat them as a single\n\t\t// animation.\n\t\tif (elements.length > 1 && animations.length > 1) {\n\t\t\tlet i = 1,\n\t\t\t\toptions = animations[0].options;\n\n\t\t\twhile (i < animations.length) {\n\t\t\t\tif (animations[i++].options !== options) {\n\t\t\t\t\toptions = null;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TODO: this needs to check that they're actually a sync:true animation to merge the results, otherwise the individual values may be different\n\t\t\tif (options) {\n\t\t\t\tanimations = [animations[0]];\n\t\t\t}\n\t\t}\n\t}\n\t// GET\n\tif (value === undefined) {\n\t\tconst result = [],\n\t\t\tflag = animationFlags[key];\n\n\t\tfor (const animation of animations) {\n\t\t\tif (flag === undefined) {\n\t\t\t\t// A normal key to get.\n\t\t\t\tresult.push(getValue(animation[key], animation.options[key]));\n\t\t\t} else {\n\t\t\t\t// A flag that we're checking against.\n\t\t\t\tresult.push((animation._flags & flag) === 0); // tslint:disable-line:no-bitwise\n\t\t\t}\n\t\t}\n\t\tif (elements.length === 1 && animations.length === 1) {\n\t\t\t// If only a single animation is found and we're only targetting a\n\t\t\t// single element, then return the value directly\n\t\t\treturn result[0];\n\t\t}\n\n\t\treturn result;\n\t}\n\t// SET\n\tlet isPercentComplete: boolean;\n\n\tswitch (key) {\n\t\tcase \"cache\":\n\t\t\tvalue = validateCache(value);\n\t\t\tbreak;\n\t\tcase \"begin\":\n\t\t\tvalue = validateBegin(value);\n\t\t\tbreak;\n\t\tcase \"complete\":\n\t\t\tvalue = validateComplete(value);\n\t\t\tbreak;\n\t\tcase \"delay\":\n\t\t\tvalue = validateDelay(value);\n\t\t\tbreak;\n\t\tcase \"duration\":\n\t\t\tvalue = validateDuration(value);\n\t\t\tbreak;\n\t\tcase \"fpsLimit\":\n\t\t\tvalue = validateFpsLimit(value);\n\t\t\tbreak;\n\t\tcase \"loop\":\n\t\t\tvalue = validateLoop(value);\n\t\t\tbreak;\n\t\tcase \"percentComplete\":\n\t\t\tisPercentComplete = true;\n\t\t\tvalue = parseFloat(value);\n\t\t\tbreak;\n\t\tcase \"repeat\":\n\t\tcase \"repeatAgain\":\n\t\t\tvalue = validateRepeat(value);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tif (key[0] !== \"_\") {\n\t\t\t\tconst num = parseFloat(value);\n\n\t\t\t\tif (value === String(num)) {\n\t\t\t\t\tvalue = num;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t// deliberate fallthrough\n\t\tcase \"queue\":\n\t\tcase \"promise\":\n\t\tcase \"promiseRejectEmpty\":\n\t\tcase \"easing\":\n\t\tcase \"started\":\n\t\t\tconsole.warn(`VelocityJS: Trying to set a read-only key:`, key);\n\n\t\t\treturn;\n\t}\n\tif (value === undefined || value !== value) {\n\t\tconsole.warn(`VelocityJS: Trying to set an invalid value:${key}=${value} (${args[1]})`);\n\n\t\treturn null;\n\t}\n\tfor (const animation of animations) {\n\t\tif (isPercentComplete) {\n\t\t\tanimation.timeStart = lastTick - (getValue(animation.duration, animation.options.duration, defaults.duration) * value);\n\t\t} else {\n\t\t\tanimation[key] = value;\n\t\t}\n\t}\n\tif (promiseHandler) {\n\t\tif (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n\t\t\telements.then(promiseHandler._resolver);\n\t\t} else {\n\t\t\tpromiseHandler._resolver(elements);\n\t\t}\n\t}\n}\n\nregisterAction([\"option\", option], true);\n"
  },
  {
    "path": "src/Velocity/actions/pauseResume.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Pause and resume animation.\n */\n\n// Typedefs\nimport {AnimationCall, AnimationFlags, VelocityPromise, VelocityResult} from \"../../../velocity.d\";\n\n// Project\nimport {isVelocityResult} from \"../../types\";\nimport {getValue} from \"../../utility\";\nimport {defaults} from \"../defaults\";\nimport {validateQueue} from \"../options\";\nimport {State} from \"../state\";\nimport {registerAction} from \"./actions\";\n\n/**\n * Check if an animation should be paused / resumed.\n */\nfunction checkAnimation(animation: AnimationCall, queueName: false | string, defaultQueue: false | string, isPaused: boolean) {\n\tif (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n\t\tif (isPaused) {\n\t\t\tanimation._flags |= AnimationFlags.PAUSED; // tslint:disable-line:no-bitwise\n\t\t} else {\n\t\t\tanimation._flags &= ~AnimationFlags.PAUSED; // tslint:disable-line:no-bitwise\n\t\t}\n\t}\n}\n\n/**\n * Pause and Resume are call-wide (not on a per element basis). Thus, calling pause or resume on a\n * single element will cause any calls that contain tweens for that element to be paused/resumed\n * as well.\n */\nfunction pauseResume(args?: any[], elements?: VelocityResult, promiseHandler?: VelocityPromise, action?: string) {\n\tconst isPaused = action.indexOf(\"pause\") === 0,\n\t\tqueue = action.indexOf(\".\") >= 0 ? action.replace(/^.*\\./, \"\") : undefined,\n\t\tqueueName = queue === \"false\" ? false : validateQueue(args[0]),\n\t\tdefaultQueue = defaults.queue;\n\n\tif (isVelocityResult(elements) && elements.velocity.animations) {\n\t\tfor (const animation of elements.velocity.animations) {\n\t\t\tcheckAnimation(animation, queueName, defaultQueue, isPaused);\n\t\t}\n\t} else {\n\t\tlet activeCall: AnimationCall = State.first;\n\n\t\twhile (activeCall) {\n\t\t\tif (!elements || elements.includes(activeCall.element)) {\n\t\t\t\tcheckAnimation(activeCall, queueName, defaultQueue, isPaused);\n\t\t\t}\n\t\t\tactiveCall = activeCall._next;\n\t\t}\n\t}\n\tif (promiseHandler) {\n\t\tif (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n\t\t\telements.then(promiseHandler._resolver);\n\t\t} else {\n\t\t\tpromiseHandler._resolver(elements);\n\t\t}\n\t}\n}\n\nregisterAction([\"pause\", pauseResume], true);\nregisterAction([\"resume\", pauseResume], true);\n"
  },
  {
    "path": "src/Velocity/actions/property.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Get or set a property from one or more elements.\n */\n\n// Typedefs\nimport {VelocityPromise, VelocityResult} from \"../../../velocity.d\";\n\n// Project\nimport {isNumber, isPlainObject, isString, isVelocityResult} from \"../../types\";\nimport {fixColors} from \"../css/fixColors\";\nimport {getPropertyValue} from \"../css/getPropertyValue\";\nimport {setPropertyValue} from \"../css/setPropertyValue\";\nimport {registerAction} from \"./actions\";\n\n/**\n * Get or set a style of Nomralised property value on one or more elements.\n * If there is no value passed then it will get, otherwise we will set.\n *\n * NOTE: When using \"get\" this will not touch the Promise as it is never\n * returned to the user.\n *\n * This can fail to set, and will reject the Promise if it does so.\n *\n * Velocity(elements, \"style\", \"property\", \"value\") => elements;\n * Velocity(elements, \"style\", {\"property\": \"value\", ...}) => elements;\n * Velocity(element, \"style\", \"property\") => \"value\";\n * Velocity(elements, \"style\", \"property\") => [\"value\", ...];\n */\nexport function propertyAction(args?: any[], elements?: VelocityResult, promiseHandler?: VelocityPromise, action?: string): any {\n\tconst property = args[0],\n\t\tvalue = args[1];\n\n\tif (!property) {\n\t\tconsole.warn(`VelocityJS: Cannot access a non-existant property!`);\n\n\t\treturn null;\n\t}\n\t// GET\n\tif (value === undefined && !isPlainObject(property)) {\n\t\tif (Array.isArray(property)) {\n\t\t\tif (elements.length === 1) {\n\t\t\t\tconst result = {};\n\n\t\t\t\tfor (const prop of property) {\n\t\t\t\t\tresult[prop] = fixColors(getPropertyValue(elements[0], prop));\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconst result = [];\n\n\t\t\t\tfor (const element of elements) {\n\t\t\t\t\tconst res = {};\n\n\t\t\t\t\tfor (const prop of property) {\n\t\t\t\t\t\tres[prop] = fixColors(getPropertyValue(element, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\tresult.push(res);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\t\t} else {\n\t\t\t// If only a single animation is found and we're only targetting a\n\t\t\t// single element, then return the value directly\n\t\t\tif (elements.length === 1) {\n\t\t\t\treturn fixColors(getPropertyValue(elements[0], property));\n\t\t\t}\n\t\t\tconst result = [];\n\n\t\t\tfor (const element of elements) {\n\t\t\t\tresult.push(fixColors(getPropertyValue(element, property)));\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t}\n\t// SET\n\tconst error: string[] = [];\n\n\tif (isPlainObject(property)) {\n\t\tfor (const propertyName in property) {\n\t\t\tif (property.hasOwnProperty(propertyName)) {\n\t\t\t\tfor (const element of elements) {\n\t\t\t\t\tconst propertyValue = property[propertyName];\n\n\t\t\t\t\tif (isString(propertyValue) || isNumber(propertyValue)) {\n\t\t\t\t\t\tsetPropertyValue(element, propertyName, property[propertyName]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror.push(`Cannot set a property \"${propertyName}\" to an unknown type: ${typeof propertyValue}`);\n\t\t\t\t\t\tconsole.warn(`VelocityJS: Cannot set a property \"${propertyName}\" to an unknown type:`, propertyValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (isString(value) || isNumber(value)) {\n\t\tfor (const element of elements) {\n\t\t\tsetPropertyValue(element, property, String(value));\n\t\t}\n\t} else {\n\t\terror.push(`Cannot set a property \"${property}\" to an unknown type: ${typeof value}`);\n\t\tconsole.warn(`VelocityJS: Cannot set a property \"${property}\" to an unknown type:`, value);\n\t}\n\tif (promiseHandler) {\n\t\tif (error.length) {\n\t\t\tpromiseHandler._rejecter(error.join(\", \"));\n\t\t} else if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n\t\t\telements.then(promiseHandler._resolver);\n\t\t} else {\n\t\t\tpromiseHandler._resolver(elements);\n\t\t}\n\t}\n}\n\nregisterAction([\"property\", propertyAction], true);\n"
  },
  {
    "path": "src/Velocity/actions/reverse.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Actions that can be performed by passing a string instead of a propertiesMap.\n */\n\n// Typedefs\nimport {HTMLorSVGElement, VelocityPromise, VelocityResult} from \"../../../velocity.d\";\n\n// Project\nimport {registerAction} from \"./actions\";\n\nregisterAction([\"reverse\", (args?: any[], elements?: HTMLorSVGElement[] | VelocityResult, promiseHandler?: VelocityPromise, action?: string) => {\n\t// NOTE: Code needs to split out before here - but this is needed to prevent it being overridden\n\tthrow new SyntaxError(\"VelocityJS: The 'reverse' action is built in and private.\");\n}], true);\n"
  },
  {
    "path": "src/Velocity/actions/stop.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Stop animation.\n */\n\n// Typedefs\nimport {AnimationCall, AnimationFlags, VelocityPromise, VelocityResult} from \"../../../velocity.d\";\n\n// Project\nimport {isVelocityResult} from \"../../types\";\nimport {getValue} from \"../../utility\";\nimport {completeCall} from \"../complete\";\nimport {defaults} from \"../defaults\";\nimport {validateQueue} from \"../options\";\nimport {State} from \"../state\";\nimport {validateTweens} from \"../tweens\";\nimport {registerAction} from \"./actions\";\n\n/**\n * Check if an animation should be stopped, and if so then set the STOPPED\n * flag on it, then call complete.\n */\nfunction checkAnimationShouldBeStopped(animation: AnimationCall, queueName: false | string, defaultQueue: false | string) {\n\tvalidateTweens(animation);\n\tif (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n\t\tanimation._flags |= AnimationFlags.STOPPED; // tslint:disable-line:no-bitwise\n\t\tcompleteCall(animation);\n\t}\n}\n\n/**\n * When the stop action is triggered, the elements' currently active call is\n * immediately stopped. When an element is stopped, the next item in its\n * animation queue is immediately triggered. If passed via a chained call\n * then this will only target the animations in that call, and not the\n * elements linked to it.\n *\n * A queue name may be passed in to specify that only animations on the\n * named queue are stopped. The default queue is named \"\". In addition the\n * value of `false` is allowed for the queue name.\n *\n * An final argument may be passed in to clear an element's remaining queued\n * calls. This may only be the value `true`.\n *\n * Note: The stop command runs prior to Velocity's Queueing phase since its\n * behavior is intended to take effect *immediately*, regardless of the\n * element's current queue state.\n */\nfunction stop(args: any[], elements: VelocityResult, promiseHandler?: VelocityPromise, action?: string): void {\n\tconst queueName: string | false = validateQueue(args[0], true),\n\t\tdefaultQueue: false | string = defaults.queue,\n\t\tfinishAll = args[queueName === undefined ? 0 : 1] === true;\n\n\tif (isVelocityResult(elements) && elements.velocity.animations) {\n\t\tfor (const animation of elements.velocity.animations) {\n\t\t\tcheckAnimationShouldBeStopped(animation, queueName, defaultQueue);\n\t\t}\n\t} else {\n\t\twhile (State.firstNew) {\n\t\t\tvalidateTweens(State.firstNew);\n\t\t}\n\t\tfor (let activeCall = State.first, nextCall: AnimationCall; activeCall && (finishAll || activeCall !== State.firstNew); activeCall = nextCall || State.firstNew) {\n\t\t\tnextCall = activeCall._next;\n\t\t\tif (!elements || elements.includes(activeCall.element)) {\n\t\t\t\tcheckAnimationShouldBeStopped(activeCall, queueName, defaultQueue);\n\t\t\t}\n\t\t}\n\t}\n\tif (promiseHandler) {\n\t\tif (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n\t\t\telements.then(promiseHandler._resolver);\n\t\t} else {\n\t\t\tpromiseHandler._resolver(elements);\n\t\t}\n\t}\n}\n\nregisterAction([\"stop\", stop], true);\n"
  },
  {
    "path": "src/Velocity/actions/style.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Get or set a property from one or more elements.\n */\n\n// Project\nimport {registerAction} from \"./actions\";\nimport {propertyAction} from \"./property\";\n\nregisterAction([\"style\", propertyAction], true);\n"
  },
  {
    "path": "src/Velocity/actions/tween.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Get or set a property from one or more elements.\n */\n\n// Typedefs\nimport {\n\tAnimationCall, HTMLorSVGElement, Properties, Sequence, SequenceList,\n\tTweenStep, VelocityEasingType, VelocityPromise, VelocityProperty, VelocityResult,\n} from \"../../../velocity.d\";\n\n// Project\nimport {isNumber, isPlainObject, isString} from \"../../types\";\nimport {getValue} from \"../../utility\";\nimport {defaults} from \"../defaults\";\nimport {linearEasing} from \"../easing/easings\";\nimport {validateEasing} from \"../options\";\nimport {expandSequence} from \"../sequences\";\nimport {SequencesObject} from \"../sequencesObject\";\nimport {expandProperties} from \"../tweens\";\nimport {registerAction} from \"./actions\";\n\n// Constants\nimport {DEFAULT_DURATION} from \"../../constants\";\n\n/**\n *\n */\nfunction tweenAction(args?: any[], elements?: VelocityResult, promiseHandler?: VelocityPromise, action?: string): any {\n\tlet requireForcefeeding: boolean;\n\n\tif (!elements) {\n\t\tif (!args.length) {\n\t\t\tconsole.info(`Velocity(<element>, \\\"tween\\\", percentComplete, property, end | [end, <easing>, <start>], <easing>) => value\nVelocity(<element>, \\\"tween\\\", percentComplete, {property: end | [end, <easing>, <start>], ...}, <easing>) => {property: value, ...}`);\n\n\t\t\treturn null;\n\t\t}\n\t\telements = [document.body];\n\t\trequireForcefeeding = true;\n\t} else if (elements.length !== 1) {\n\t\t// TODO: Allow more than a single element to return an array of results\n\t\tthrow new Error(\"VelocityJS: Cannot tween more than one element!\");\n\t}\n\tconst percentComplete: number = args[0],\n\t\tfakeAnimation = {\n\t\t\telements,\n\t\t\telement: elements[0],\n\t\t\tqueue: false,\n\t\t\toptions: {\n\t\t\t\tduration: 1000,\n\t\t\t},\n\t\t\ttweens: null as {[property: string]: Sequence},\n\t\t} as any as AnimationCall,\n\t\tresult: {[property: string]: string} = {};\n\tlet properties: Properties<string> = args[1],\n\t\tsingleResult: boolean,\n\t\tmaybeSequence: SequenceList,\n\t\teasing: VelocityEasingType = args[2],\n\t\tcount = 0;\n\n\tif (isString(args[1])) {\n\t\tif (SequencesObject && SequencesObject[args[1]]) {\n\t\t\tmaybeSequence = SequencesObject[args[1]];\n\t\t\tproperties = {};\n\t\t\teasing = args[2];\n\t\t} else {\n\t\t\tsingleResult = true;\n\t\t\tproperties = {\n\t\t\t\t[args[1]]: args[2],\n\t\t\t};\n\t\t\teasing = args[3];\n\t\t}\n\t} else if (Array.isArray(args[1])) {\n\t\tsingleResult = true;\n\t\tproperties = {\n\t\t\ttween: args[1],\n\t\t} as any;\n\t\teasing = args[2];\n\t}\n\tif (!isNumber(percentComplete) || percentComplete < 0 || percentComplete > 1) {\n\t\tthrow new Error(\"VelocityJS: Must tween a percentage from 0 to 1!\");\n\t}\n\tif (!isPlainObject(properties)) {\n\t\tthrow new Error(\"VelocityJS: Cannot tween an invalid property!\");\n\t}\n\tif (requireForcefeeding) {\n\t\tfor (const property in properties) {\n\t\t\tif (properties.hasOwnProperty(property) && (!Array.isArray(properties[property]) || properties[property].length < 2)) {\n\t\t\t\tthrow new Error(\"VelocityJS: When not supplying an element you must force-feed values: \" + property);\n\t\t\t}\n\t\t}\n\t}\n\tconst activeEasing = validateEasing(getValue(easing, defaults.easing), DEFAULT_DURATION);\n\n\tif (maybeSequence) {\n\t\texpandSequence(fakeAnimation, maybeSequence);\n\t} else {\n\t\texpandProperties(fakeAnimation as AnimationCall, properties);\n\t}\n\t// tslint:disable-next-line:forin\n\tfor (const property in fakeAnimation.tweens) {\n\t\t// For every element, iterate through each property.\n\t\tconst propertyTween = fakeAnimation.tweens[property],\n\t\t\tsequence = propertyTween.sequence,\n\t\t\tpattern = sequence.pattern;\n\t\tlet currentValue = \"\",\n\t\t\ti = 0;\n\n\t\tcount++;\n\t\tif (pattern) {\n\t\t\tconst easingComplete = (propertyTween.easing || activeEasing)(percentComplete, 0, 1, property);\n\t\t\tlet best = 0;\n\n\t\t\tfor (let j = 0; j < sequence.length - 1; j++) {\n\t\t\t\tif (sequence[j].percent < easingComplete) {\n\t\t\t\t\tbest = j;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst tweenFrom: TweenStep = sequence[best],\n\t\t\t\ttweenTo: TweenStep = sequence[best + 1] || tweenFrom,\n\t\t\t\ttweenPercent = (percentComplete - tweenFrom.percent) / (tweenTo.percent - tweenFrom.percent),\n\t\t\t\ttweenEasing = tweenTo.easing || linearEasing;\n\n\t\t\tfor (; i < pattern.length; i++) {\n\t\t\t\tconst startValue = tweenFrom[i];\n\n\t\t\t\tif (startValue == null) {\n\t\t\t\t\tcurrentValue += pattern[i];\n\t\t\t\t} else {\n\t\t\t\t\tconst endValue = tweenTo[i];\n\n\t\t\t\t\tif (startValue === endValue) {\n\t\t\t\t\t\tcurrentValue += startValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// All easings must deal with numbers except for our internal ones.\n\t\t\t\t\t\tconst value = tweenEasing(tweenPercent, startValue as number, endValue as number, property);\n\n\t\t\t\t\t\tcurrentValue += pattern[i] === true ? Math.round(value) : value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult[property] = currentValue;\n\t\t}\n\t}\n\n\tif (singleResult && count === 1) {\n\t\tfor (const property in result) {\n\t\t\tif (result.hasOwnProperty(property)) {\n\t\t\t\treturn result[property];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nregisterAction([\"tween\", tweenAction], true);\n"
  },
  {
    "path": "src/Velocity/camelCase.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n/**\n * Cache every camelCase match to avoid repeating lookups.\n */\nconst cache: {[property: string]: string} = {};\n\n/**\n * Camelcase a property name into its JavaScript notation (e.g.\n * \"background-color\" ==> \"backgroundColor\"). Camelcasing is used to\n * normalize property names between and across calls.\n */\nexport function camelCase(property: string): string {\n\tconst fixed = cache[property];\n\n\tif (fixed) {\n\t\treturn fixed;\n\t}\n\n\treturn cache[property] = property.replace(/-([a-z])/g, ($: string, letter: string) => letter.toUpperCase());\n}\n"
  },
  {
    "path": "src/Velocity/complete.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Call Completion\n */\n\n// Typedefs\nimport {AnimationCall, AnimationFlags} from \"../../velocity.d\";\n\n// Project\nimport {getValue, removeClass} from \"../utility\";\nimport {Data} from \"./data\";\nimport {defaults} from \"./defaults\";\nimport {dequeue, freeAnimationCall} from \"./queue\";\nimport {State} from \"./state\";\n\n/**\n * Call the complete method of an animation in a separate function so it can\n * benefit from JIT compiling while still having a try/catch block.\n */\nfunction callComplete(activeCall: AnimationCall) {\n\tconst callback = activeCall.complete || activeCall.options.complete;\n\n\tif (callback) {\n\t\ttry {\n\t\t\tconst elements = activeCall.elements;\n\n\t\t\tcallback.call(elements, elements, activeCall);\n\t\t} catch (error) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthrow error;\n\t\t\t}, 1);\n\t\t}\n\t}\n}\n\n/**\n * Complete an animation. This might involve restarting (for loop or repeat\n * options). Once it is finished we also check for any callbacks or Promises\n * that need updating.\n */\nexport function completeCall(activeCall: AnimationCall) {\n\t// TODO: Check if it's not been completed already\n\tconst options = activeCall.options,\n\t\tqueue = getValue(activeCall.queue, options.queue),\n\t\tisLoop = getValue(activeCall.loop, options.loop, defaults.loop),\n\t\tisRepeat = getValue(activeCall.repeat, options.repeat, defaults.repeat),\n\t\tisStopped = activeCall._flags & AnimationFlags.STOPPED; // tslint:disable-line:no-bitwise\n\n\tif (!isStopped && (isLoop || isRepeat)) {\n\n\t\t////////////////////\n\t\t// Option: Loop   //\n\t\t// Option: Repeat //\n\t\t////////////////////\n\n\t\tif (isRepeat && isRepeat !== true) {\n\t\t\tactiveCall.repeat = isRepeat - 1;\n\t\t} else if (isLoop && isLoop !== true) {\n\t\t\tactiveCall.loop = isLoop - 1;\n\t\t\tactiveCall.repeat = getValue(activeCall.repeatAgain, options.repeatAgain, defaults.repeatAgain);\n\t\t}\n\t\tif (isLoop) {\n\t\t\tactiveCall._flags ^= AnimationFlags.REVERSE; // tslint:disable-line:no-bitwise\n\t\t}\n\t\tif (queue !== false) {\n\t\t\t// Can't be called when stopped so no need for an extra check.\n\t\t\tData(activeCall.element).lastFinishList[queue] = activeCall.timeStart + getValue(activeCall.duration, options.duration, defaults.duration);\n\t\t}\n\t\tactiveCall.timeStart = activeCall.ellapsedTime = activeCall.percentComplete = 0;\n\t\tactiveCall._flags &= ~AnimationFlags.STARTED; // tslint:disable-line:no-bitwise\n\t} else {\n\t\tconst element = activeCall.element,\n\t\t\tdata = Data(element);\n\n\t\tif (!--data.count && !isStopped) {\n\n\t\t\t////////////////////////\n\t\t\t// Feature: Classname //\n\t\t\t////////////////////////\n\n\t\t\tremoveClass(element, State.className);\n\t\t}\n\n\t\t//////////////////////\n\t\t// Option: Complete //\n\t\t//////////////////////\n\n\t\t// If this is the last animation in this list then we can check for\n\t\t// and complete calls or Promises.\n\t\t// TODO: When deleting an element we need to adjust these values.\n\t\tif (options && ++options._completed === options._total) {\n\t\t\tif (!isStopped && options.complete) {\n\t\t\t\t// We don't call the complete if the animation is stopped,\n\t\t\t\t// and we clear the key to prevent it being called again.\n\t\t\t\tcallComplete(activeCall);\n\t\t\t\toptions.complete = null;\n\t\t\t}\n\t\t\tconst resolver = options._resolver;\n\n\t\t\tif (resolver) {\n\t\t\t\t// Fulfil the Promise\n\t\t\t\tresolver(activeCall.elements as any);\n\t\t\t\tdelete options._resolver;\n\t\t\t}\n\t\t}\n\n\t\t///////////////////\n\t\t// Option: Queue //\n\t\t///////////////////\n\n\t\tif (queue !== false) {\n\t\t\t// We only do clever things with queues...\n\t\t\tif (!isStopped) {\n\t\t\t\t// If we're not stopping an animation, we need to remember\n\t\t\t\t// what time it finished so that the next animation in\n\t\t\t\t// sequence gets the correct start time.\n\t\t\t\tdata.lastFinishList[queue] = activeCall.timeStart + getValue(activeCall.duration, options.duration, defaults.duration);\n\t\t\t}\n\t\t\t// Start the next animation in sequence, or delete the queue if\n\t\t\t// this was the last one.\n\t\t\tdequeue(element, queue);\n\t\t}\n\t\t// Cleanup any pointers, and remember the last animation etc.\n\t\tfreeAnimationCall(activeCall);\n\t}\n}\n"
  },
  {
    "path": "src/Velocity/css/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./colors\";\n"
  },
  {
    "path": "src/Velocity/css/augmentDimension.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement} from \"../../../velocity.d\";\n\n// Project\nimport {getPropertyValue} from \"./getPropertyValue\";\n\n/**\n * Figure out the dimensions for this width / height based on the\n * potential borders and whether we care about them.\n */\nexport function augmentDimension(element: HTMLorSVGElement, name: \"width\" | \"height\", wantInner: boolean): number {\n\tconst isBorderBox = getPropertyValue(element, \"boxSizing\")\n\t\t.toString()\n\t\t.toLowerCase() === \"border-box\";\n\n\tif (isBorderBox === wantInner) {\n\t\t// in box-sizing mode, the CSS width / height accessors already\n\t\t// give the outerWidth / outerHeight.\n\t\tconst sides = name === \"width\" ? [\"Left\", \"Right\"] : [\"Top\", \"Bottom\"],\n\t\t\tfields = [`padding${sides[0]}`, `padding${sides[1]}`, `border${sides[0]}Width`, `border${sides[1]}Width`];\n\t\tlet augment = 0;\n\n\t\tfor (const field of fields) {\n\t\t\tconst value = parseFloat(getPropertyValue(element, field));\n\n\t\t\tif (!isNaN(value)) {\n\t\t\t\taugment += value;\n\t\t\t}\n\t\t}\n\n\t\treturn wantInner ? -augment : augment;\n\t}\n\n\treturn 0;\n}\n"
  },
  {
    "path": "src/Velocity/css/colors.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Project\nimport {ColorNames} from \"./fixColors\";\n\n/**\n * Converting from hex as it makes for a smaller file.\n */\nconst colorValues = {\n\taliceblue: 0xF0F8FF,\n\tantiquewhite: 0xFAEBD7,\n\taqua: 0x00FFFF,\n\taquamarine: 0x7FFFD4,\n\tazure: 0xF0FFFF,\n\tbeige: 0xF5F5DC,\n\tbisque: 0xFFE4C4,\n\tblack: 0x000000,\n\tblanchedalmond: 0xFFEBCD,\n\tblue: 0x0000FF,\n\tblueviolet: 0x8A2BE2,\n\tbrown: 0xA52A2A,\n\tburlywood: 0xDEB887,\n\tcadetblue: 0x5F9EA0,\n\tchartreuse: 0x7FFF00,\n\tchocolate: 0xD2691E,\n\tcoral: 0xFF7F50,\n\tcornflowerblue: 0x6495ED,\n\tcornsilk: 0xFFF8DC,\n\tcrimson: 0xDC143C,\n\tcyan: 0x00FFFF,\n\tdarkblue: 0x00008B,\n\tdarkcyan: 0x008B8B,\n\tdarkgoldenrod: 0xB8860B,\n\tdarkgray: 0xA9A9A9,\n\tdarkgrey: 0xA9A9A9,\n\tdarkgreen: 0x006400,\n\tdarkkhaki: 0xBDB76B,\n\tdarkmagenta: 0x8B008B,\n\tdarkolivegreen: 0x556B2F,\n\tdarkorange: 0xFF8C00,\n\tdarkorchid: 0x9932CC,\n\tdarkred: 0x8B0000,\n\tdarksalmon: 0xE9967A,\n\tdarkseagreen: 0x8FBC8F,\n\tdarkslateblue: 0x483D8B,\n\tdarkslategray: 0x2F4F4F,\n\tdarkslategrey: 0x2F4F4F,\n\tdarkturquoise: 0x00CED1,\n\tdarkviolet: 0x9400D3,\n\tdeeppink: 0xFF1493,\n\tdeepskyblue: 0x00BFFF,\n\tdimgray: 0x696969,\n\tdimgrey: 0x696969,\n\tdodgerblue: 0x1E90FF,\n\tfirebrick: 0xB22222,\n\tfloralwhite: 0xFFFAF0,\n\tforestgreen: 0x228B22,\n\tfuchsia: 0xFF00FF,\n\tgainsboro: 0xDCDCDC,\n\tghostwhite: 0xF8F8FF,\n\tgold: 0xFFD700,\n\tgoldenrod: 0xDAA520,\n\tgray: 0x808080,\n\tgrey: 0x808080,\n\tgreen: 0x008000,\n\tgreenyellow: 0xADFF2F,\n\thoneydew: 0xF0FFF0,\n\thotpink: 0xFF69B4,\n\tindianred: 0xCD5C5C,\n\tindigo: 0x4B0082,\n\tivory: 0xFFFFF0,\n\tkhaki: 0xF0E68C,\n\tlavender: 0xE6E6FA,\n\tlavenderblush: 0xFFF0F5,\n\tlawngreen: 0x7CFC00,\n\tlemonchiffon: 0xFFFACD,\n\tlightblue: 0xADD8E6,\n\tlightcoral: 0xF08080,\n\tlightcyan: 0xE0FFFF,\n\tlightgoldenrodyellow: 0xFAFAD2,\n\tlightgray: 0xD3D3D3,\n\tlightgrey: 0xD3D3D3,\n\tlightgreen: 0x90EE90,\n\tlightpink: 0xFFB6C1,\n\tlightsalmon: 0xFFA07A,\n\tlightseagreen: 0x20B2AA,\n\tlightskyblue: 0x87CEFA,\n\tlightslategray: 0x778899,\n\tlightslategrey: 0x778899,\n\tlightsteelblue: 0xB0C4DE,\n\tlightyellow: 0xFFFFE0,\n\tlime: 0x00FF00,\n\tlimegreen: 0x32CD32,\n\tlinen: 0xFAF0E6,\n\tmagenta: 0xFF00FF,\n\tmaroon: 0x800000,\n\tmediumaquamarine: 0x66CDAA,\n\tmediumblue: 0x0000CD,\n\tmediumorchid: 0xBA55D3,\n\tmediumpurple: 0x9370DB,\n\tmediumseagreen: 0x3CB371,\n\tmediumslateblue: 0x7B68EE,\n\tmediumspringgreen: 0x00FA9A,\n\tmediumturquoise: 0x48D1CC,\n\tmediumvioletred: 0xC71585,\n\tmidnightblue: 0x191970,\n\tmintcream: 0xF5FFFA,\n\tmistyrose: 0xFFE4E1,\n\tmoccasin: 0xFFE4B5,\n\tnavajowhite: 0xFFDEAD,\n\tnavy: 0x000080,\n\toldlace: 0xFDF5E6,\n\tolive: 0x808000,\n\tolivedrab: 0x6B8E23,\n\torange: 0xFFA500,\n\torangered: 0xFF4500,\n\torchid: 0xDA70D6,\n\tpalegoldenrod: 0xEEE8AA,\n\tpalegreen: 0x98FB98,\n\tpaleturquoise: 0xAFEEEE,\n\tpalevioletred: 0xDB7093,\n\tpapayawhip: 0xFFEFD5,\n\tpeachpuff: 0xFFDAB9,\n\tperu: 0xCD853F,\n\tpink: 0xFFC0CB,\n\tplum: 0xDDA0DD,\n\tpowderblue: 0xB0E0E6,\n\tpurple: 0x800080,\n\trebeccapurple: 0x663399,\n\tred: 0xFF0000,\n\trosybrown: 0xBC8F8F,\n\troyalblue: 0x4169E1,\n\tsaddlebrown: 0x8B4513,\n\tsalmon: 0xFA8072,\n\tsandybrown: 0xF4A460,\n\tseagreen: 0x2E8B57,\n\tseashell: 0xFFF5EE,\n\tsienna: 0xA0522D,\n\tsilver: 0xC0C0C0,\n\tskyblue: 0x87CEEB,\n\tslateblue: 0x6A5ACD,\n\tslategray: 0x708090,\n\tslategrey: 0x708090,\n\tsnow: 0xFFFAFA,\n\tspringgreen: 0x00FF7F,\n\tsteelblue: 0x4682B4,\n\ttan: 0xD2B48C,\n\tteal: 0x008080,\n\tthistle: 0xD8BFD8,\n\ttomato: 0xFF6347,\n\tturquoise: 0x40E0D0,\n\tviolet: 0xEE82EE,\n\twheat: 0xF5DEB3,\n\twhite: 0xFFFFFF,\n\twhitesmoke: 0xF5F5F5,\n\tyellow: 0xFFFF00,\n\tyellowgreen: 0x9ACD32,\n};\n\nfor (const name in colorValues) {\n\tif (colorValues.hasOwnProperty(name)) {\n\t\tconst color = colorValues[name];\n\n\t\tColorNames[name] = `${Math.floor(color / 65536)},${Math.floor(color / 256 % 256)},${(color % 256)}`;\n\t}\n}\n"
  },
  {
    "path": "src/Velocity/css/fixColors.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Constants\nconst rxColor6 = /#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})/gi,\n\trxColor3 = /#([a-f\\d])([a-f\\d])([a-f\\d])/gi,\n\trxColorName = /(rgba?\\(\\s*)?(\\b[a-z]+\\b)/g,\n\trxRGB = /rgb(a?)\\(([^\\)]+)\\)/gi,\n\trxSpaces = /\\s+/g;\n\n/**\n * This is the list of color names -> rgb values. The object is in here so\n * that the actual name conversion can be in a separate file and not\n * included for custom builds.\n */\nexport const ColorNames: {[name: string]: string} = {};\n\n/**\n * Convert a hex list to an rgba value. Designed to be used in replace.\n */\nfunction makeRGBA(ignore: any, r: string, g: string, b: string): string {\n\treturn `rgba(${parseInt(r, 16)},${parseInt(g, 16)},${parseInt(b, 16)},1)`;\n}\n\n/**\n * Replace any css colour name with its rgba() value. It is possible to use\n * the name within an \"rgba(blue, 0.4)\" string this way.\n */\nexport function fixColors(str: string): string {\n\treturn str\n\t\t.replace(rxColor6, makeRGBA)\n\t\t.replace(rxColor3, ($0, r, g, b) => {\n\t\t\treturn makeRGBA($0, r + r, g + g, b + b);\n\t\t})\n\t\t.replace(rxColorName, ($0, $1, $2) => {\n\t\t\tif (ColorNames[$2]) {\n\t\t\t\treturn ($1 ? $1 : \"rgba(\") + ColorNames[$2] + ($1 ? \"\" : \",1)\");\n\t\t\t}\n\n\t\t\treturn $0;\n\t\t})\n\t\t.replace(rxRGB, ($0, $1, $2: string) => {\n\t\t\treturn `rgba(${$2.replace(rxSpaces, \"\") + ($1 ? \"\" : \",1\")})`;\n\t\t});\n}\n"
  },
  {
    "path": "src/Velocity/css/getPropertyValue.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement, VelocityNormalizationsFn} from \"../../../velocity.d\";\n\n// Project\nimport Velocity from \"../../velocity\";\nimport {Data} from \"../data\";\nimport {getNormalization} from \"../normalizations/normalizations\";\nimport {NoCacheNormalizations} from \"../normalizations/normalizationsObject\";\nimport {augmentDimension} from \"./augmentDimension\";\nimport {setPropertyValue} from \"./setPropertyValue\";\n\n/**\n * Get the width or height of an element, pulled out as it can be used when the\n * in two locations so don't want to repeat it.\n */\nfunction getWidthHeight(element: HTMLorSVGElement, property: \"width\" | \"height\"): string {\n\treturn (element.getBoundingClientRect()[property] + augmentDimension(element, property, true)) + \"px\";\n}\n\n// TODO: This is still a complete mess\nexport function computePropertyValue(element: HTMLorSVGElement, property: string): string {\n\tconst data = Data(element),\n\t\t// If computedStyle is cached, use it. If not then get the correct one\n\t\t// for the element to support cross-iframe boundaries.\n\t\tcomputedStyle = data.computedStyle ? data.computedStyle : data.window.getComputedStyle(element, null);\n\tlet computedValue: string | number = 0;\n\n\tif (!data.computedStyle) {\n\t\tdata.computedStyle = computedStyle;\n\t}\n\tif (computedStyle[\"display\"] === \"none\") {\n\t\tswitch (property) {\n\t\t\tcase \"width\":\n\t\t\tcase \"height\":\n\t\t\t\t// Browsers do not return height and width values for elements\n\t\t\t\t// that are set to display:\"none\". Thus, we temporarily toggle\n\t\t\t\t// display to the element type's default value.\n\t\t\t\tsetPropertyValue(element, \"display\", \"auto\");\n\t\t\t\tcomputedValue = getWidthHeight(element, property);\n\t\t\t\tsetPropertyValue(element, \"display\", \"none\");\n\n\t\t\t\treturn String(computedValue);\n\t\t}\n\t}\n\n\t/* IE and Firefox do not return a value for the generic borderColor -- they only return individual values for each border side's color.\n\t Also, in all browsers, when border colors aren't all the same, a compound value is returned that Velocity isn't setup to parse.\n\t So, as a polyfill for querying individual border side colors, we just return the top border's color and animate all borders from that value. */\n\t/* TODO: There is a borderColor normalisation in legacy/ - figure out where this is needed... */\n\n\tcomputedValue = computedStyle[property];\n\t/* Fall back to the property's style value (if defined) when computedValue returns nothing,\n\t which can happen when the element hasn't been painted. */\n\tif (!computedValue) {\n\t\tcomputedValue = element.style[property];\n\t}\n\t/* For top, right, bottom, and left (TRBL) values that are set to \"auto\" on elements of \"fixed\" or \"absolute\" position,\n\t defer to jQuery for converting \"auto\" to a numeric value. (For elements with a \"static\" or \"relative\" position, \"auto\" has the same\n\t effect as being set to 0, so no conversion is necessary.) */\n\t/* An example of why numeric conversion is necessary: When an element with \"position:absolute\" has an untouched \"left\"\n\t property, which reverts to \"auto\", left's value is 0 relative to its parent element, but is often non-zero relative\n\t to its *containing* (not parent) element, which is the nearest \"position:relative\" ancestor or the viewport (and always the viewport in the case of \"position:fixed\"). */\n\tif (computedValue === \"auto\") {\n\t\tswitch (property) {\n\t\t\tcase \"width\":\n\t\t\tcase \"height\":\n\t\t\t\tcomputedValue = getWidthHeight(element, property);\n\t\t\t\tbreak;\n\n\t\t\tcase \"top\":\n\t\t\tcase \"left\":\n\t\t\t\tconst topLeft = true;\n\t\t\tcase \"right\":\n\t\t\tcase \"bottom\":\n\t\t\t\tconst position = getPropertyValue(element, \"position\");\n\n\t\t\t\tif (position === \"fixed\" || (topLeft && position === \"absolute\")) {\n\t\t\t\t\t// Note: this has no pixel unit on its returned values,\n\t\t\t\t\t// we re-add it here to conform with\n\t\t\t\t\t// computePropertyValue's behavior.\n\t\t\t\t\tcomputedValue = element.getBoundingClientRect[property] + \"px\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t// Deliberate fallthrough!\n\t\t\tdefault:\n\t\t\t\tcomputedValue = \"0px\";\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn computedValue ? String(computedValue) : \"\";\n}\n\n/**\n * Get a property value. This will grab via the cache if it exists, then\n * via any normalisations.\n */\nexport function getPropertyValue(element: HTMLorSVGElement, propertyName: string, fn?: VelocityNormalizationsFn, skipCache?: boolean): string {\n\tconst data = Data(element);\n\tlet propertyValue: string;\n\n\tif (NoCacheNormalizations.has(propertyName)) {\n\t\tskipCache = true;\n\t}\n\tif (!skipCache && data && data.cache[propertyName] != null) {\n\t\tpropertyValue = data.cache[propertyName];\n\t} else {\n\t\tfn = fn || getNormalization(element, propertyName);\n\t\tif (fn) {\n\t\t\tpropertyValue = fn(element);\n\t\t\tif (data) {\n\t\t\t\tdata.cache[propertyName] = propertyValue;\n\t\t\t}\n\t\t}\n\t}\n\tif (Velocity.debug >= 2) {\n\t\tconsole.info(`Get \"${propertyName}\": \"${propertyValue}\"`, element);\n\t}\n\n\treturn propertyValue;\n}\n"
  },
  {
    "path": "src/Velocity/css/index.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nexport * from \"./colors\";\n"
  },
  {
    "path": "src/Velocity/css/removeNestedCalc.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n/**\n * Remove nested `calc(0px + *)` or `calc(* + (0px + *))` correctly.\n */\nexport function removeNestedCalc(value: string): string {\n\tif (value.indexOf(\"calc(\") >= 0) {\n\t\tconst tokens = value.split(/([\\(\\)])/);\n\t\tlet depth = 0;\n\n\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\tconst token = tokens[i];\n\n\t\t\tswitch (token) {\n\t\t\t\tcase \"(\":\n\t\t\t\t\tdepth++;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \")\":\n\t\t\t\t\tdepth--;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif (depth && token[0] === \"0\") {\n\t\t\t\t\t\ttokens[i] = token.replace(/^0[a-z%]+ \\+ /, \"\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn tokens.join(\"\")\n\t\t\t.replace(/(?:calc)?\\(([0-9\\.]+[a-z%]+)\\)/g, \"$1\");\n\t}\n\n\treturn value;\n}\n"
  },
  {
    "path": "src/Velocity/css/setPropertyValue.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement, VelocityNormalizationsFn} from \"../../../velocity.d\";\n\n// Project\nimport Velocity from \"../../velocity\";\nimport {Data} from \"../data\";\nimport {getNormalization} from \"../normalizations/normalizations\";\nimport {NoCacheNormalizations} from \"../normalizations/normalizationsObject\";\n\n/**\n * The singular setPropertyValue, which routes the logic for all\n * normalizations.\n */\nexport function setPropertyValue(element: HTMLorSVGElement, propertyName: string, propertyValue: any, fn?: VelocityNormalizationsFn) {\n\tconst noCache = NoCacheNormalizations.has(propertyName),\n\t\tdata = !noCache && Data(element);\n\n\tif (noCache || (data && data.cache[propertyName] !== propertyValue)) {\n\t\t// By setting it to undefined we force a true \"get\" later\n\t\tif (!noCache) {\n\t\t\tdata.cache[propertyName] = propertyValue || undefined;\n\t\t}\n\t\tfn = fn || getNormalization(element, propertyName);\n\t\tif (fn) {\n\t\t\tfn(element, propertyValue);\n\t\t}\n\t\tif (Velocity.debug >= 2) {\n\t\t\tconsole.info(`Set \"${propertyName}\": \"${propertyValue}\"`, element);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/Velocity/data.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {ElementData, HTMLorSVGElement} from \"../../velocity.d\";\n\n// Project\nimport {isString} from \"../types\";\nimport {constructors} from \"./normalizations/normalizationsObject\";\n\n// Constants\nconst dataName = \"velocityData\";\n\n/**\n * Get (and create) the internal data store for an element.\n */\nexport function Data(element: HTMLorSVGElement): ElementData {\n\t// Use a string member so Uglify doesn't mangle it.\n\tconst data = element[dataName];\n\n\tif (data) {\n\t\treturn data;\n\t}\n\tconst window = element.ownerDocument.defaultView;\n\tlet types = 0;\n\n\tfor (let index = 0; index < constructors.length; index++) {\n\t\tconst constructor = constructors[index];\n\n\t\tif (isString(constructor)) {\n\t\t\tif (element instanceof window[constructor]) {\n\t\t\t\ttypes |= 1 << index; // tslint:disable-line:no-bitwise\n\t\t\t}\n\t\t} else if (element instanceof constructor) {\n\t\t\ttypes |= 1 << index; // tslint:disable-line:no-bitwise\n\t\t}\n\t}\n\t// Use an intermediate object so it errors on incorrect data.\n\tconst newData: ElementData = {\n\t\ttypes,\n\t\tcount: 0,\n\t\tcomputedStyle: null,\n\t\tcache: {} as any,\n\t\tqueueList: {},\n\t\tlastAnimationList: {},\n\t\tlastFinishList: {},\n\t\twindow,\n\t};\n\n\tObject.defineProperty(element, dataName, {\n\t\tvalue: newData,\n\t});\n\n\treturn newData;\n}\n"
  },
  {
    "path": "src/Velocity/defaults.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Velocity option defaults, which can be overriden by the user.\n */\n\n// Typedefs\nimport {StrictVelocityOptions, VelocityCallbackFn, VelocityEasingFn} from \"../../velocity.d\";\n\n// Project\nimport {isBoolean} from \"../types\";\nimport {\n\tvalidateBegin, validateCache, validateComplete, validateDelay, validateDuration,\n\tvalidateEasing, validateFpsLimit, validateLoop, validatePromise, validatePromiseRejectEmpty,\n\tvalidateQueue, validateRepeat, validateSpeed, validateSync,\n} from \"./options\";\n\n// Constants\nimport {\n\tDEFAULT_CACHE, DEFAULT_DELAY, DEFAULT_DURATION, DEFAULT_EASING, DEFAULT_FPSLIMIT,\n\tDEFAULT_LOOP, DEFAULT_PROMISE, DEFAULT_PROMISE_REJECT_EMPTY, DEFAULT_QUEUE, DEFAULT_REPEAT,\n\tDEFAULT_SPEED, DEFAULT_SYNC, FUZZY_MS_PER_SECOND,\n} from \"../constants\";\n\n// NOTE: Add the variable here, then add the default state in \"reset\" below.\nlet cache: boolean,\n\tbegin: VelocityCallbackFn,\n\tcomplete: VelocityCallbackFn,\n\tdelay: number,\n\tduration: number,\n\teasing: VelocityEasingFn,\n\tfpsLimit: number,\n\tloop: number | true,\n\tmobileHA: boolean,\n\tminFrameTime: number,\n\tpromise: boolean,\n\tpromiseRejectEmpty: boolean,\n\tqueue: string | false,\n\trepeat: number | true,\n\tspeed: number,\n\tsync: boolean;\n\nexport abstract class defaults implements StrictVelocityOptions {\n\tstatic reset() {\n\t\tcache = DEFAULT_CACHE;\n\t\tbegin = undefined;\n\t\tcomplete = undefined;\n\t\tdelay = DEFAULT_DELAY;\n\t\tduration = DEFAULT_DURATION;\n\t\teasing = validateEasing(DEFAULT_EASING, DEFAULT_DURATION);\n\t\tfpsLimit = DEFAULT_FPSLIMIT;\n\t\tloop = DEFAULT_LOOP;\n\t\tminFrameTime = FUZZY_MS_PER_SECOND / DEFAULT_FPSLIMIT;\n\t\tpromise = DEFAULT_PROMISE;\n\t\tpromiseRejectEmpty = DEFAULT_PROMISE_REJECT_EMPTY;\n\t\tqueue = DEFAULT_QUEUE;\n\t\trepeat = DEFAULT_REPEAT;\n\t\tspeed = DEFAULT_SPEED;\n\t\tsync = DEFAULT_SYNC;\n\t}\n\n\tstatic get cache(): boolean {\n\t\treturn cache;\n\t}\n\n\tstatic set cache(value: boolean) {\n\t\tvalue = validateCache(value);\n\t\tif (value !== undefined) {\n\t\t\tcache = value;\n\t\t}\n\t}\n\n\tstatic get begin(): VelocityCallbackFn {\n\t\treturn begin;\n\t}\n\tstatic set begin(value: VelocityCallbackFn) {\n\t\tvalue = validateBegin(value);\n\t\tif (value !== undefined) {\n\t\t\tbegin = value;\n\t\t}\n\t}\n\n\tstatic get complete(): VelocityCallbackFn {\n\t\treturn complete;\n\t}\n\n\tstatic set complete(value: VelocityCallbackFn) {\n\t\tvalue = validateComplete(value);\n\t\tif (value !== undefined) {\n\t\t\tcomplete = value;\n\t\t}\n\t}\n\n\tstatic get delay(): number {\n\t\treturn delay;\n\t}\n\tstatic set delay(value: number) {\n\t\tvalue = validateDelay(value);\n\t\tif (value !== undefined) {\n\t\t\tdelay = value;\n\t\t}\n\t}\n\n\tstatic get duration(): number {\n\t\treturn duration;\n\t}\n\tstatic set duration(value: number) {\n\t\tvalue = validateDuration(value);\n\t\tif (value !== undefined) {\n\t\t\tduration = value;\n\t\t}\n\t}\n\n\tstatic get easing(): VelocityEasingFn {\n\t\treturn easing;\n\t}\n\tstatic set easing(value: VelocityEasingFn) {\n\t\tvalue = validateEasing(value, duration);\n\t\tif (value !== undefined) {\n\t\t\teasing = value;\n\t\t}\n\t}\n\n\tstatic get fpsLimit(): number | false {\n\t\treturn fpsLimit;\n\t}\n\tstatic set fpsLimit(value: number | false) {\n\t\tvalue = validateFpsLimit(value);\n\t\tif (value !== undefined) {\n\t\t\tfpsLimit = value;\n\t\t\tminFrameTime = FUZZY_MS_PER_SECOND / value;\n\t\t}\n\t}\n\n\tstatic get loop(): number | true {\n\t\treturn loop;\n\t}\n\tstatic set loop(value: number | true) {\n\t\tvalue = validateLoop(value);\n\t\tif (value !== undefined) {\n\t\t\tloop = value;\n\t\t}\n\t}\n\n\tstatic get mobileHA(): boolean {\n\t\treturn mobileHA;\n\t}\n\tstatic set mobileHA(value: boolean) {\n\t\tif (isBoolean(value)) {\n\t\t\tmobileHA = value;\n\t\t}\n\t}\n\n\tstatic get minFrameTime(): number | false {\n\t\treturn minFrameTime;\n\t}\n\n\tstatic get promise(): boolean {\n\t\treturn promise;\n\t}\n\tstatic set promise(value: boolean) {\n\t\tvalue = validatePromise(value);\n\t\tif (value !== undefined) {\n\t\t\tpromise = value;\n\t\t}\n\t}\n\n\tstatic get promiseRejectEmpty(): boolean {\n\t\treturn promiseRejectEmpty;\n\t}\n\tstatic set promiseRejectEmpty(value: boolean) {\n\t\tvalue = validatePromiseRejectEmpty(value);\n\t\tif (value !== undefined) {\n\t\t\tpromiseRejectEmpty = value;\n\t\t}\n\t}\n\n\tstatic get queue(): string | false {\n\t\treturn queue;\n\t}\n\tstatic set queue(value: string | false) {\n\t\tvalue = validateQueue(value);\n\t\tif (value !== undefined) {\n\t\t\tqueue = value;\n\t\t}\n\t}\n\n\tstatic get repeat(): number | true {\n\t\treturn repeat;\n\t}\n\tstatic set repeat(value: number | true) {\n\t\tvalue = validateRepeat(value);\n\t\tif (value !== undefined) {\n\t\t\trepeat = value;\n\t\t}\n\t}\n\n\tstatic get repeatAgain(): number | true {\n\t\treturn repeat;\n\t}\n\n\tstatic get speed(): number {\n\t\treturn speed;\n\t}\n\tstatic set speed(value: number) {\n\t\tvalue = validateSpeed(value);\n\t\tif (value !== undefined) {\n\t\t\tspeed = value;\n\t\t}\n\t}\n\tstatic get sync(): boolean {\n\t\treturn sync;\n\t}\n\tstatic set sync(value: boolean) {\n\t\tvalue = validateSync(value);\n\t\tif (value !== undefined) {\n\t\t\tsync = value;\n\t\t}\n\t}\n}\n\nObject.freeze(defaults);\n\n// Reset to our default values, currently everything is undefined.\ndefaults.reset();\n"
  },
  {
    "path": "src/Velocity/easing/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./back\";\nimport \"./bezier\";\nimport \"./bounce\";\nimport \"./elastic\";\nimport \"./spring_rk4\";\nimport \"./step\";\nimport \"./string\";\n"
  },
  {
    "path": "src/Velocity/easing/back.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Back easings, based on code from https://github.com/yuichiroharai/easeplus-velocity\n */\n\n// Project\nimport {registerEasing} from \"./easings\";\n\nexport function registerBackIn(name: string, amount: number) {\n\tregisterEasing([name, (percentComplete: number, startValue: number, endValue: number): number => {\n\t\tif (percentComplete === 0) {\n\t\t\treturn startValue;\n\t\t}\n\t\tif (percentComplete === 1) {\n\t\t\treturn endValue;\n\t\t}\n\n\t\treturn Math.pow(percentComplete, 2) * ((amount + 1) * percentComplete - amount) * (endValue - startValue);\n\t}]);\n}\n\nexport function registerBackOut(name: string, amount: number) {\n\tregisterEasing([name, (percentComplete: number, startValue: number, endValue: number): number => {\n\t\tif (percentComplete === 0) {\n\t\t\treturn startValue;\n\t\t}\n\t\tif (percentComplete === 1) {\n\t\t\treturn endValue;\n\t\t}\n\n\t\treturn (Math.pow(--percentComplete, 2) * ((amount + 1) * percentComplete + amount) + 1) * (endValue - startValue);\n\t}]);\n}\n\nexport function registerBackInOut(name: string, amount: number) {\n\tamount *= 1.525;\n\tregisterEasing([name, (percentComplete: number, startValue: number, endValue: number): number => {\n\t\tif (percentComplete === 0) {\n\t\t\treturn startValue;\n\t\t}\n\t\tif (percentComplete === 1) {\n\t\t\treturn endValue;\n\t\t}\n\t\tpercentComplete *= 2;\n\n\t\treturn (percentComplete < 1\n\t\t\t? (Math.pow(percentComplete, 2) * ((amount + 1) * percentComplete - amount))\n\t\t\t: (Math.pow(percentComplete - 2, 2) * ((amount + 1) * (percentComplete - 2) + amount) + 2)\n\t\t) * 0.5 * (endValue - startValue);\n\t}]);\n}\n\nregisterBackIn(\"easeInBack\", 1.7);\nregisterBackOut(\"easeOutBack\", 1.7);\nregisterBackInOut(\"easeInOutBack\", 1.7);\n\n// TODO: Expose these as actions to register custom easings?\n"
  },
  {
    "path": "src/Velocity/easing/bezier.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License\n */\n\n// Typedefs\nimport { VelocityEasingFn } from \"../../../velocity.d\";\n\n// Project\nimport { registerEasing } from \"./easings\";\n\n/**\n * Fix to a range of <code>0 <= num <= 1</code>.\n */\nfunction fixRange(num: number) {\n\treturn Math.min(Math.max(num, 0), 1);\n}\n\nfunction A(aA1, aA2) {\n\treturn 1 - 3 * aA2 + 3 * aA1;\n}\n\nfunction B(aA1, aA2) {\n\treturn 3 * aA2 - 6 * aA1;\n}\n\nfunction C(aA1) {\n\treturn 3 * aA1;\n}\n\nfunction calcBezier(aT, aA1, aA2) {\n\treturn ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\nfunction getSlope(aT, aA1, aA2) {\n\treturn 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);\n}\n\nexport function generateBezier(...args: [number, number, number, number]): VelocityEasingFn {\n\tconst NEWTON_ITERATIONS = 4,\n\t\tNEWTON_MIN_SLOPE = 0.001,\n\t\tSUBDIVISION_PRECISION = 0.0000001,\n\t\tSUBDIVISION_MAX_ITERATIONS = 10,\n\t\tkSplineTableSize = 11,\n\t\tkSampleStepSize = 1 / (kSplineTableSize - 1),\n\t\tfloat32ArraySupported = \"Float32Array\" in window;\n\n\t/* Must contain four args. */\n\tif (args.length !== 4) {\n\t\treturn;\n\t}\n\n\t/* Args must be numbers. */\n\tfor (let i = 0; i < 4; ++i) {\n\t\tif (typeof args[i] !== \"number\" || isNaN(args[i]) || !isFinite(args[i])) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/* X values must be in the [0, 1] range. */\n\tconst mX1 = fixRange(args[0]);\n\tconst mY1 = args[1];\n\tconst mX2 = fixRange(args[2]);\n\tconst mY2 = args[3];\n\n\tconst mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n\n\tfunction newtonRaphsonIterate(aX, aGuessT) {\n\t\tfor (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n\t\t\tconst currentSlope = getSlope(aGuessT, mX1, mX2);\n\n\t\t\tif (currentSlope === 0) {\n\t\t\t\treturn aGuessT;\n\t\t\t}\n\n\t\t\tconst currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n\t\t\taGuessT -= currentX / currentSlope;\n\t\t}\n\n\t\treturn aGuessT;\n\t}\n\n\tfunction calcSampleValues() {\n\t\tfor (let i = 0; i < kSplineTableSize; ++i) {\n\t\t\tmSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n\t\t}\n\t}\n\n\tfunction binarySubdivide(aX, aA, aB) {\n\t\tlet currentX, currentT, i = 0;\n\n\t\tdo {\n\t\t\tcurrentT = aA + (aB - aA) / 2;\n\t\t\tcurrentX = calcBezier(currentT, mX1, mX2) - aX;\n\t\t\tif (currentX > 0) {\n\t\t\t\taB = currentT;\n\t\t\t} else {\n\t\t\t\taA = currentT;\n\t\t\t}\n\t\t} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n\t\treturn currentT;\n\t}\n\n\tfunction getTForX(aX) {\n\t\tconst lastSample = kSplineTableSize - 1;\n\t\tlet intervalStart = 0,\n\t\t\tcurrentSample = 1;\n\n\t\tfor (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n\t\t\tintervalStart += kSampleStepSize;\n\t\t}\n\n\t\t--currentSample;\n\n\t\tconst dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),\n\t\t\tguessForT = intervalStart + dist * kSampleStepSize,\n\t\t\tinitialSlope = getSlope(guessForT, mX1, mX2);\n\n\t\tif (initialSlope >= NEWTON_MIN_SLOPE) {\n\t\t\treturn newtonRaphsonIterate(aX, guessForT);\n\t\t} else if (initialSlope === 0) {\n\t\t\treturn guessForT;\n\t\t} else {\n\t\t\treturn binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n\t\t}\n\t}\n\n\tlet precomputed = false;\n\n\tfunction precompute() {\n\t\tprecomputed = true;\n\t\tif (mX1 !== mY1 || mX2 !== mY2) {\n\t\t\tcalcSampleValues();\n\t\t}\n\t}\n\n\tconst str = `generateBezier(${[mX1, mY1, mX2, mY2]})`,\n\t\tf = (percentComplete: number, startValue: number, endValue: number, property?: string) => {\n\t\t\tif (!precomputed) {\n\t\t\t\tprecompute();\n\t\t\t}\n\t\t\tif (percentComplete === 0) {\n\t\t\t\treturn startValue;\n\t\t\t}\n\t\t\tif (percentComplete === 1) {\n\t\t\t\treturn endValue;\n\t\t\t}\n\t\t\tif (mX1 === mY1 && mX2 === mY2) {\n\t\t\t\treturn startValue + percentComplete * (endValue - startValue);\n\t\t\t}\n\n\t\t\treturn startValue + calcBezier(getTForX(percentComplete), mY1, mY2) * (endValue - startValue);\n\t\t};\n\n\t(f as any).getControlPoints = () => {\n\t\treturn [{ x: mX1, y: mY1 }, { x: mX2, y: mY2 }];\n\t};\n\tf.toString = () => {\n\t\treturn str;\n\t};\n\n\treturn f;\n}\n\n/* Common easings */\nconst easeIn = generateBezier(0.42, 0, 1, 1),\n\teaseOut = generateBezier(0, 0, 0.58, 1),\n\teaseInOut = generateBezier(0.42, 0, 0.58, 1);\n\nregisterEasing([\"ease\", generateBezier(0.25, 0.1, 0.25, 1)]);\nregisterEasing([\"easeIn\", easeIn]);\nregisterEasing([\"ease-in\", easeIn]);\nregisterEasing([\"easeOut\", easeOut]);\nregisterEasing([\"ease-out\", easeOut]);\nregisterEasing([\"easeInOut\", easeInOut]);\nregisterEasing([\"ease-in-out\", easeInOut]);\nregisterEasing([\"easeInSine\", generateBezier(0.47, 0, 0.745, 0.715)]);\nregisterEasing([\"easeOutSine\", generateBezier(0.39, 0.575, 0.565, 1)]);\nregisterEasing([\"easeInOutSine\", generateBezier(0.445, 0.05, 0.55, 0.95)]);\nregisterEasing([\"easeInQuad\", generateBezier(0.55, 0.085, 0.68, 0.53)]);\nregisterEasing([\"easeOutQuad\", generateBezier(0.25, 0.46, 0.45, 0.94)]);\nregisterEasing([\"easeInOutQuad\", generateBezier(0.455, 0.03, 0.515, 0.955)]);\nregisterEasing([\"easeInCubic\", generateBezier(0.55, 0.055, 0.675, 0.19)]);\nregisterEasing([\"easeOutCubic\", generateBezier(0.215, 0.61, 0.355, 1)]);\nregisterEasing([\"easeInOutCubic\", generateBezier(0.645, 0.045, 0.355, 1)]);\nregisterEasing([\"easeInQuart\", generateBezier(0.895, 0.03, 0.685, 0.22)]);\nregisterEasing([\"easeOutQuart\", generateBezier(0.165, 0.84, 0.44, 1)]);\nregisterEasing([\"easeInOutQuart\", generateBezier(0.77, 0, 0.175, 1)]);\nregisterEasing([\"easeInQuint\", generateBezier(0.755, 0.05, 0.855, 0.06)]);\nregisterEasing([\"easeOutQuint\", generateBezier(0.23, 1, 0.32, 1)]);\nregisterEasing([\"easeInOutQuint\", generateBezier(0.86, 0, 0.07, 1)]);\nregisterEasing([\"easeInExpo\", generateBezier(0.95, 0.05, 0.795, 0.035)]);\nregisterEasing([\"easeOutExpo\", generateBezier(0.19, 1, 0.22, 1)]);\nregisterEasing([\"easeInOutExpo\", generateBezier(1, 0, 0, 1)]);\nregisterEasing([\"easeInCirc\", generateBezier(0.6, 0.04, 0.98, 0.335)]);\nregisterEasing([\"easeOutCirc\", generateBezier(0.075, 0.82, 0.165, 1)]);\nregisterEasing([\"easeInOutCirc\", generateBezier(0.785, 0.135, 0.15, 0.86)]);\n"
  },
  {
    "path": "src/Velocity/easing/bounce.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Bounce easings, based on code from https://github.com/yuichiroharai/easeplus-velocity\n */\n\n// Project\nimport {registerEasing} from \"./easings\";\n\nfunction easeOutBouncePercent(percentComplete: number): number {\n\tif (percentComplete < 1 / 2.75) {\n\t\treturn (7.5625 * percentComplete * percentComplete);\n\t}\n\tif (percentComplete < 2 / 2.75) {\n\t\treturn (7.5625 * (percentComplete -= 1.5 / 2.75) * percentComplete + 0.75);\n\t}\n\tif (percentComplete < 2.5 / 2.75) {\n\t\treturn (7.5625 * (percentComplete -= 2.25 / 2.75) * percentComplete + 0.9375);\n\t}\n\n\treturn (7.5625 * (percentComplete -= 2.625 / 2.75) * percentComplete + 0.984375);\n}\n\nfunction easeInBouncePercent(percentComplete: number): number {\n\treturn 1 - easeOutBouncePercent(1 - percentComplete);\n}\n\nexport function easeInBounce(percentComplete: number, startValue: number, endValue: number): number {\n\tif (percentComplete === 0) {\n\t\treturn startValue;\n\t}\n\tif (percentComplete === 1) {\n\t\treturn endValue;\n\t}\n\n\treturn easeInBouncePercent(percentComplete) * (endValue - startValue);\n}\n\nexport function easeOutBounce(percentComplete: number, startValue: number, endValue: number): number {\n\tif (percentComplete === 0) {\n\t\treturn startValue;\n\t}\n\tif (percentComplete === 1) {\n\t\treturn endValue;\n\t}\n\n\treturn easeOutBouncePercent(percentComplete) * (endValue - startValue);\n}\n\nexport function easeInOutBounce(percentComplete: number, startValue: number, endValue: number): number {\n\tif (percentComplete === 0) {\n\t\treturn startValue;\n\t}\n\tif (percentComplete === 1) {\n\t\treturn endValue;\n\t}\n\n\treturn (percentComplete < 0.5\n\t\t? easeInBouncePercent(percentComplete * 2) * 0.5\n\t\t: easeOutBouncePercent(percentComplete * 2 - 1) * 0.5 + 0.5\n\t) * (endValue - startValue);\n}\n\nregisterEasing([\"easeInBounce\", easeInBounce]);\nregisterEasing([\"easeOutBounce\", easeOutBounce]);\nregisterEasing([\"easeInOutBounce\", easeInOutBounce]);\n"
  },
  {
    "path": "src/Velocity/easing/easings.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {VelocityEasingFn} from \"../../../velocity.d\";\n\n// Project\nimport {isFunction, isString} from \"../../types\";\nimport {registerAction} from \"../actions/actions\";\n\n// Constants\nexport const Easings: {[name: string]: VelocityEasingFn} = {};\n\n/**\n * Used to register a easing. This should never be called by users\n * directly, instead it should be called via an action:<br/>\n * <code>Velocity(\"registerEasing\", \"name\", VelocityEasingFn);</code>\n */\nexport function registerEasing(args?: [string, VelocityEasingFn]) {\n\tconst name: string = args[0],\n\t\tcallback = args[1];\n\n\tif (!isString(name)) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'registerEasing' name to an invalid value:`, name);\n\t} else if (!isFunction(callback)) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'registerEasing' callback to an invalid value:`, name, callback);\n\t} else if (Easings[name]) {\n\t\tconsole.warn(`VelocityJS: Trying to override 'registerEasing' callback`, name);\n\t} else {\n\t\tEasings[name] = callback;\n\t}\n}\n\nregisterAction([\"registerEasing\", registerEasing], true);\n\n/**\n * Linear easing, used for sequence parts that don't have an actual easing\n * function.\n */\nexport function linearEasing(percentComplete, startValue, endValue, property) {\n\treturn startValue + percentComplete * (endValue - startValue);\n}\n\n/**\n * Swing is the default for jQuery and Velocity.\n */\nexport function swingEasing(percentComplete, startValue, endValue) {\n\treturn startValue + (0.5 - Math.cos(percentComplete * Math.PI) / 2) * (endValue - startValue);\n}\n\n/**\n * A less exaggerated version of easeInOutElastic.\n */\nexport function springEasing(percentComplete, startValue, endValue) {\n\treturn startValue + (1 - (Math.cos(percentComplete * 4.5 * Math.PI) * Math.exp(-percentComplete * 6))) * (endValue - startValue);\n}\n\nregisterEasing([\"linear\", linearEasing]);\nregisterEasing([\"swing\", swingEasing]);\nregisterEasing([\"spring\", springEasing]);\n"
  },
  {
    "path": "src/Velocity/easing/elastic.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Elastic easings, based on code from https://github.com/yuichiroharai/easeplus-velocity\n */\n\n// Project\nimport {registerEasing} from \"./easings\";\n\n// Constants\nconst PI2 = Math.PI * 2;\n\nexport function registerElasticIn(name: string, amplitude: number, period: number) {\n\tregisterEasing([name, (percentComplete: number, startValue: number, endValue: number): number => {\n\t\tif (percentComplete === 0) {\n\t\t\treturn startValue;\n\t\t}\n\t\tif (percentComplete === 1) {\n\t\t\treturn endValue;\n\t\t}\n\n\t\treturn -(amplitude * Math.pow(2, 10 * (percentComplete -= 1)) * Math.sin((percentComplete - (period / PI2 * Math.asin(1 / amplitude))) * PI2 / period)) * (endValue - startValue);\n\t}]);\n}\n\nexport function registerElasticOut(name: string, amplitude: number, period: number) {\n\tregisterEasing([name, (percentComplete: number, startValue: number, endValue: number): number => {\n\t\tif (percentComplete === 0) {\n\t\t\treturn startValue;\n\t\t}\n\t\tif (percentComplete === 1) {\n\t\t\treturn endValue;\n\t\t}\n\n\t\treturn (amplitude * Math.pow(2, -10 * percentComplete) * Math.sin((percentComplete - (period / PI2 * Math.asin(1 / amplitude))) * PI2 / period) + 1) * (endValue - startValue);\n\t}]);\n}\n\nexport function registerElasticInOut(name: string, amplitude: number, period: number) {\n\tregisterEasing([name, (percentComplete: number, startValue: number, endValue: number): number => {\n\t\tif (percentComplete === 0) {\n\t\t\treturn startValue;\n\t\t}\n\t\tif (percentComplete === 1) {\n\t\t\treturn endValue;\n\t\t}\n\t\tconst s = period / PI2 * Math.asin(1 / amplitude);\n\n\t\tpercentComplete = percentComplete * 2 - 1;\n\n\t\treturn (percentComplete < 0\n\t\t\t? -0.5 * (amplitude * Math.pow(2, 10 * percentComplete) * Math.sin((percentComplete - s) * PI2 / period))\n\t\t\t: amplitude * Math.pow(2, -10 * percentComplete) * Math.sin((percentComplete - s) * PI2 / period) * 0.5 + 1\n\t\t) * (endValue - startValue);\n\t}]);\n}\n\nregisterElasticIn(\"easeInElastic\", 1, 0.3);\nregisterElasticOut(\"easeOutElastic\", 1, 0.3);\nregisterElasticInOut(\"easeInOutElastic\", 1, 0.3 * 1.5);\n\n// TODO: Expose these as actions to register custom easings?\n"
  },
  {
    "path": "src/Velocity/easing/index.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nexport * from \"./back\";\nexport * from \"./bezier\";\nexport * from \"./bounce\";\nexport * from \"./elastic\";\nexport * from \"./spring_rk4\";\nexport * from \"./step\";\nexport * from \"./string\";\n"
  },
  {
    "path": "src/Velocity/easing/spring_rk4.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {VelocityEasingFn} from \"../../../velocity.d\";\n\ninterface springState {\n\tx: number;\n\tv: number;\n\ttension: number;\n\tfriction: number;\n}\n\ninterface springDelta {\n\tdx: number;\n\tdv: number;\n}\n\n/* Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */\n/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass\n then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */\nfunction springAccelerationForState(state: springState) {\n\treturn (-state.tension * state.x) - (state.friction * state.v);\n}\n\nfunction springEvaluateStateWithDerivative(initialState: springState, dt: number, derivative: springDelta): springDelta {\n\tconst state = {\n\t\tx: initialState.x + derivative.dx * dt,\n\t\tv: initialState.v + derivative.dv * dt,\n\t\ttension: initialState.tension,\n\t\tfriction: initialState.friction,\n\t};\n\n\treturn {\n\t\tdx: state.v,\n\t\tdv: springAccelerationForState(state),\n\t};\n}\n\nfunction springIntegrateState(state: springState, dt: number) {\n\tconst a = {\n\t\tdx: state.v,\n\t\tdv: springAccelerationForState(state),\n\t},\n\t\tb = springEvaluateStateWithDerivative(state, dt * 0.5, a),\n\t\tc = springEvaluateStateWithDerivative(state, dt * 0.5, b),\n\t\td = springEvaluateStateWithDerivative(state, dt, c),\n\t\tdxdt = 1 / 6 * (a.dx + 2 * (b.dx + c.dx) + d.dx),\n\t\tdvdt = 1 / 6 * (a.dv + 2 * (b.dv + c.dv) + d.dv);\n\n\tstate.x = state.x + dxdt * dt;\n\tstate.v = state.v + dvdt * dt;\n\n\treturn state;\n}\n\nexport function generateSpringRK4(tension: number, friction: number): number;\nexport function generateSpringRK4(tension: number, friction: number, duration: number): VelocityEasingFn;\nexport function generateSpringRK4(tension: number, friction: number, duration?: number): any {\n\tconst initState: springState = {\n\t\tx: -1,\n\t\tv: 0,\n\t\ttension: parseFloat(tension as any) || 500,\n\t\tfriction: parseFloat(friction as any) || 20,\n\t},\n\t\tpath = [0],\n\t\ttolerance = 1 / 10000,\n\t\tDT = 16 / 1000,\n\t\thaveDuration = duration != null; // deliberate \"==\", as undefined == null != 0\n\tlet timeLapsed = 0,\n\t\tdt: number,\n\t\tlastState: springState;\n\n\t/* Calculate the actual time it takes for this animation to complete with the provided conditions. */\n\tif (haveDuration) {\n\t\t/* Run the simulation without a duration. */\n\t\ttimeLapsed = generateSpringRK4(initState.tension, initState.friction);\n\t\t/* Compute the adjusted time delta. */\n\t\tdt = (timeLapsed as number) / duration * DT;\n\t} else {\n\t\tdt = DT;\n\t}\n\n\twhile (true) {\n\t\t/* Next/step function .*/\n\t\tlastState = springIntegrateState(lastState || initState, dt);\n\t\t/* Store the position. */\n\t\tpath.push(1 + lastState.x);\n\t\ttimeLapsed += 16;\n\t\t/* If the change threshold is reached, break. */\n\t\tif (!(Math.abs(lastState.x) > tolerance && Math.abs(lastState.v) > tolerance)) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the\n\t computed path and returns a snapshot of the position according to a given percentComplete. */\n\treturn !haveDuration ? timeLapsed : (percentComplete: number, startValue: number, endValue: number) => {\n\t\tif (percentComplete === 0) {\n\t\t\treturn startValue;\n\t\t}\n\t\tif (percentComplete === 1) {\n\t\t\treturn endValue;\n\t\t}\n\n\t\treturn startValue + path[Math.floor(percentComplete * (path.length - 1))] * (endValue - startValue);\n\t};\n}\n"
  },
  {
    "path": "src/Velocity/easing/step.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details\n *\n * Step easing generator.\n */\n\n// Typedefs\nimport {VelocityEasingFn} from \"../../../velocity.d\";\n\n// Constants\nconst cache: {[steps: number]: VelocityEasingFn} = {};\n\nexport function generateStep(steps): VelocityEasingFn {\n\tconst fn = cache[steps];\n\n\tif (fn) {\n\t\treturn fn;\n\t}\n\n\treturn cache[steps] = (percentComplete: number, startValue: number, endValue: number) => {\n\t\tif (percentComplete === 0) {\n\t\t\treturn startValue;\n\t\t}\n\t\tif (percentComplete === 1) {\n\t\t\treturn endValue;\n\t\t}\n\n\t\treturn startValue + Math.round(percentComplete * steps) * (1 / steps) * (endValue - startValue);\n\t};\n}\n"
  },
  {
    "path": "src/Velocity/easing/string.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Easings to act on strings, either set at the start or at the end depending on\n * need.\n */\n\n// Project\nimport {registerEasing} from \"./easings\";\n\n/**\n * Easing function that sets to the specified value immediately after the\n * animation starts.\n */\nexport function atStart(percentComplete: number, startValue: any, endValue: any): any {\n\treturn percentComplete === 0\n\t\t? startValue\n\t\t: endValue;\n}\n\n/**\n * Easing function that sets to the specified value while the animation is\n * running.\n */\nexport function during(percentComplete: number, startValue: any, endValue: any): any {\n\treturn percentComplete === 0 || percentComplete === 1\n\t\t? startValue\n\t\t: endValue;\n}\n\n/**\n * Easing function that sets to the specified value when the animation ends.\n */\nexport function atEnd(percentComplete: number, startValue: any, endValue: any): any {\n\treturn percentComplete === 1\n\t\t? endValue\n\t\t: startValue;\n}\n\nregisterEasing([\"at-start\", atStart]);\nregisterEasing([\"during\", during]);\nregisterEasing([\"at-end\", atEnd]);\n"
  },
  {
    "path": "src/Velocity/index.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nexport * from \"./actions\";\nexport * from \"./css\";\nexport * from \"./easing\";\nexport * from \"./normalizations\";\n"
  },
  {
    "path": "src/Velocity/normalizations/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./dimensions\";\nimport \"./display\";\nimport \"./scroll\";\nimport \"./style\";\nimport \"./svg/_all\";\nimport \"./tween\";\n"
  },
  {
    "path": "src/Velocity/normalizations/dimensions.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement, VelocityNormalizationsFn} from \"../../../velocity.d\";\n\n// Project\nimport {augmentDimension} from \"../css/augmentDimension\";\nimport {setPropertyValue} from \"../css/setPropertyValue\";\nimport {registerNormalization} from \"./normalizations\";\n\n/**\n * Get/set the inner/outer dimension.\n */\nfunction getDimension(name: \"width\" | \"height\", wantInner: boolean) {\n\treturn ((element: HTMLorSVGElement, propertyValue?: string): string | void => {\n\t\tif (propertyValue === undefined) {\n\t\t\treturn augmentDimension(element, name, wantInner) + \"px\";\n\t\t}\n\t\tsetPropertyValue(element, name, (parseFloat(propertyValue) - augmentDimension(element, name, wantInner)) + \"px\");\n\t}) as VelocityNormalizationsFn;\n}\n\nregisterNormalization([\"Element\", \"innerWidth\", getDimension(\"width\", true)]);\nregisterNormalization([\"Element\", \"innerHeight\", getDimension(\"height\", true)]);\nregisterNormalization([\"Element\", \"outerWidth\", getDimension(\"width\", false)]);\nregisterNormalization([\"Element\", \"outerHeight\", getDimension(\"height\", false)]);\n"
  },
  {
    "path": "src/Velocity/normalizations/display.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement} from \"../../../velocity.d\";\n\n// Project\nimport {computePropertyValue} from \"../css/getPropertyValue\";\nimport {Data} from \"../data\";\nimport {registerNormalization} from \"./normalizations\";\n\n// Constants\nexport const inlineRx = /^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|let|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i,\n\tlistItemRx = /^(li)$/i,\n\ttableRowRx = /^(tr)$/i,\n\ttableRx = /^(table)$/i,\n\ttableRowGroupRx = /^(tbody)$/i;\n\n/**\n * Display has an extra value of \"auto\" that works out the correct value\n * based on the type of element.\n */\nfunction display(element: HTMLorSVGElement): string;\nfunction display(element: HTMLorSVGElement, propertyValue: string): void;\nfunction display(element: HTMLorSVGElement, propertyValue?: string): string | void {\n\tconst style = element.style;\n\n\tif (propertyValue === undefined) {\n\t\treturn computePropertyValue(element, \"display\");\n\t}\n\tif (propertyValue === \"auto\") {\n\t\tconst nodeName = element && element.nodeName,\n\t\t\tdata = Data(element);\n\n\t\tif (inlineRx.test(nodeName)) {\n\t\t\tpropertyValue = \"inline\";\n\t\t} else if (listItemRx.test(nodeName)) {\n\t\t\tpropertyValue = \"list-item\";\n\t\t} else if (tableRowRx.test(nodeName)) {\n\t\t\tpropertyValue = \"table-row\";\n\t\t} else if (tableRx.test(nodeName)) {\n\t\t\tpropertyValue = \"table\";\n\t\t} else if (tableRowGroupRx.test(nodeName)) {\n\t\t\tpropertyValue = \"table-row-group\";\n\t\t} else {\n\t\t\t// Default to \"block\" when no match is found.\n\t\t\tpropertyValue = \"block\";\n\t\t}\n\t\t// IMPORTANT: We need to do this as getPropertyValue bypasses the\n\t\t// Normalisation when it exists in the cache.\n\t\tdata.cache[\"display\"] = propertyValue;\n\t}\n\tstyle.display = propertyValue;\n}\n\nregisterNormalization([\"Element\", \"display\", display]);\n"
  },
  {
    "path": "src/Velocity/normalizations/index.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nexport * from \"./dimensions\";\nexport * from \"./display\";\nexport * from \"./scroll\";\nexport * from \"./style\";\nexport * from \"./svg\";\nexport * from \"./tween\";\n"
  },
  {
    "path": "src/Velocity/normalizations/normalizations.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Normalisations are used when getting or setting a (normally css compound\n * properties) value that can have a different order in different browsers.\n *\n * It can also be used to extend and create specific properties that otherwise\n * don't exist (such as for scrolling, or inner/outer dimensions).\n */\n\n// Typedefs\nimport { HTMLorSVGElement, VelocityNormalizationsFn } from \"../../../velocity.d\";\n\n// Project\nimport { isFunction, isString } from \"../../types\";\nimport { registerAction } from \"../actions/actions\";\nimport { Data } from \"../data\";\nimport { ClassConstructor, constructorCache, constructors, NoCacheNormalizations, Normalizations, NormalizationUnits } from \"./normalizationsObject\";\n\n/**\n * Used to register a normalization. This should never be called by users\n * directly, instead it should be called via an action:<br/>\n * <code>Velocity(\"registerNormalization\", \"Element\", \"name\", VelocityNormalizationsFn[, false]);</code>\n *\n * The second argument is the class of the animatable object. If this is passed\n * as a class name (ie, `\"Element\"` -> `window[\"Element\"]`) then this will work\n * cross-iframe. If passed as an actual class (ie `Element`) then it will\n * attempt to find the class on the window and use that name instead. If it\n * can't find it then it will use the class passed, which allows for custom\n * animation targets, but will not work cross-iframe boundary.\n *\n * The fourth argument can be an explicit <code>false</code>, which prevents\n * the property from being cached. Please note that this can be dangerous\n * for performance!\n */\nexport function registerNormalization(\n\targs?: [ClassConstructor | string, string, VelocityNormalizationsFn]\n\t\t| [ClassConstructor | string, string, VelocityNormalizationsFn, boolean]\n\t\t| [ClassConstructor | string, string, VelocityNormalizationsFn, string]\n\t\t| [ClassConstructor | string, string, VelocityNormalizationsFn, string, boolean]) {\n\tconst constructor = args[0],\n\t\tname: string = args[1],\n\t\tcallback = args[2];\n\n\tif ((isString(constructor) && !(window[constructor] instanceof Object))\n\t\t|| (!isString(constructor) && !(constructor instanceof Object))) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'registerNormalization' constructor to an invalid value:`, constructor);\n\t} else if (!isString(name)) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'registerNormalization' name to an invalid value:`, name);\n\t} else if (!isFunction(callback)) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'registerNormalization' callback to an invalid value:`, name, callback);\n\t} else {\n\t\tlet index = constructors.indexOf(constructor),\n\t\t\tnextArg = 3;\n\n\t\tif (index < 0 && !isString(constructor)) {\n\t\t\tif (constructorCache.has(constructor)) {\n\t\t\t\tindex = constructors.indexOf(constructorCache.get(constructor));\n\t\t\t} else {\n\t\t\t\tfor (const property in window) {\n\t\t\t\t\tif ((window[property] as any) === constructor) {\n\t\t\t\t\t\tindex = constructors.indexOf(property);\n\t\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\t\tindex = constructors.push(property) - 1;\n\t\t\t\t\t\t\tNormalizations[index] = {};\n\t\t\t\t\t\t\tconstructorCache.set(constructor, property);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (index < 0) {\n\t\t\tindex = constructors.push(constructor) - 1;\n\t\t\tNormalizations[index] = {};\n\t\t}\n\t\tNormalizations[index][name] = callback;\n\t\tif (isString(args[nextArg])) {\n\t\t\tconst unit = args[nextArg++] as string;\n\t\t\tlet units = NormalizationUnits[unit];\n\n\t\t\tif (!units) {\n\t\t\t\tunits = NormalizationUnits[unit] = [];\n\t\t\t}\n\t\t\tunits.push(callback);\n\t\t}\n\t\tif (args[nextArg] === false) {\n\t\t\tNoCacheNormalizations.add(name);\n\t\t}\n\t}\n}\n\n/**\n * Used to check if a normalisation exists on a specific class.\n */\nexport function hasNormalization(args?: [ClassConstructor | string, string]): boolean {\n\tconst constructor = args[0],\n\t\tname: string = args[1];\n\tlet index = constructors.indexOf(constructor);\n\n\tif (index < 0 && !isString(constructor)) {\n\t\tif (constructorCache.has(constructor)) {\n\t\t\tindex = constructors.indexOf(constructorCache.get(constructor));\n\t\t} else {\n\t\t\tfor (const property in window) {\n\t\t\t\tif ((window[property] as any) === constructor) {\n\t\t\t\t\tindex = constructors.indexOf(property);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn index >= 0 && Normalizations[index].hasOwnProperty(name);\n}\n\n/**\n * Get the unit to add to a unitless number based on the normalization used.\n */\nexport function getNormalizationUnit(fn: VelocityNormalizationsFn) {\n\tfor (const unit in NormalizationUnits) {\n\t\tif (NormalizationUnits[unit].includes(fn)) {\n\t\t\treturn unit;\n\t\t}\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Get the normalization for an element and propertyName combination. This\n * value should be cached at asking time, as it may change if the user adds\n * more normalizations.\n */\nexport function getNormalization(element: HTMLorSVGElement, propertyName: string) {\n\tconst data = Data(element);\n\tlet fn: VelocityNormalizationsFn;\n\n\tfor (let index = constructors.length - 1, types = data.types; !fn && index >= 0; index--) {\n\t\tif (types & (1 << index)) { // tslint:disable-line:no-bitwise\n\t\t\tfn = Normalizations[index][propertyName];\n\t\t}\n\t}\n\n\treturn fn;\n}\n\nregisterAction([\"registerNormalization\", registerNormalization]);\nregisterAction([\"hasNormalization\", hasNormalization]);\n"
  },
  {
    "path": "src/Velocity/normalizations/normalizationsObject.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Normalisations are used when getting or setting a (normally css compound\n * properties) value that can have a different order in different browsers.\n *\n * It can also be used to extend and create specific properties that otherwise\n * don't exist (such as for scrolling, or inner/outer dimensions).\n */\n\n// Typedefs\nimport {VelocityNormalizationsFn} from \"../../../velocity.d\";\n\n/**\n * The highest type index for finding the best normalization for a property.\n */\nexport let MaxType: number = -1;\n\n/**\n * Unlike \"actions\", normalizations can always be replaced by users.\n */\nexport const Normalizations: {[name: string]: VelocityNormalizationsFn}[] = [];\n\n/**\n * Store a cross-reference to units to be added to specific normalization\n * functions if the user supplies a unit-less number.\n *\n * This is pretty much confined to adding \"px\" to several css properties.\n */\nexport const NormalizationUnits: {[unit: string]: VelocityNormalizationsFn[]} = {};\n\n/**\n * Any normalisations that should never be cached are listed here.\n * Faster than an array - https://jsperf.com/array-includes-and-find-methods-vs-set-has\n */\nexport const NoCacheNormalizations = new Set<string>();\n\n/**\n * Used to define a constructor.\n */\nexport interface ClassConstructor {\n\tnew(): object;\n}\n\n/**\n * An array of classes used for the per-class normalizations. This\n * translates into a bitwise enum for quick cross-reference, and so that\n * the element doesn't need multiple <code>instanceof</code> calls every\n * frame.\n */\nexport const constructors: (ClassConstructor | string)[] = [];\n\n/**\n * A cache of the various constructors we've found and mapping to their real\n * name - saves expensive lookups.\n */\nexport const constructorCache = new Map<ClassConstructor, ClassConstructor | string>();\n"
  },
  {
    "path": "src/Velocity/normalizations/scroll.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement, VelocityNormalizationsFn} from \"../../../velocity.d\";\n\n// Project\nimport {getPropertyValue} from \"../css/getPropertyValue\";\nimport {registerNormalization} from \"./normalizations\";\n\n/**\n * Get the scrollWidth of an element.\n */\nfunction clientWidth(element: HTMLorSVGElement): string;\nfunction clientWidth(element: HTMLorSVGElement, propertyValue: string): void;\nfunction clientWidth(element: HTMLorSVGElement, propertyValue?: string): string | void {\n\tif (propertyValue == null) {\n\t\treturn element.clientWidth + \"px\";\n\t}\n}\n\n/**\n * Get the scrollWidth of an element.\n */\nfunction scrollWidth(element: HTMLorSVGElement): string;\nfunction scrollWidth(element: HTMLorSVGElement, propertyValue: string): void;\nfunction scrollWidth(element: HTMLorSVGElement, propertyValue?: string): string | void {\n\tif (propertyValue == null) {\n\t\treturn element.scrollWidth + \"px\";\n\t}\n}\n\n/**\n * Get the scrollHeight of an element.\n */\nfunction clientHeight(element: HTMLorSVGElement): string;\nfunction clientHeight(element: HTMLorSVGElement, propertyValue: string): void;\nfunction clientHeight(element: HTMLorSVGElement, propertyValue?: string): string | void {\n\tif (propertyValue == null) {\n\t\treturn element.clientHeight + \"px\";\n\t}\n}\n\n/**\n * Get the scrollHeight of an element.\n */\nfunction scrollHeight(element: HTMLorSVGElement): string;\nfunction scrollHeight(element: HTMLorSVGElement, propertyValue: string): void;\nfunction scrollHeight(element: HTMLorSVGElement, propertyValue?: string): string | void {\n\tif (propertyValue == null) {\n\t\treturn element.scrollHeight + \"px\";\n\t}\n}\n\n/**\n * Scroll an element.\n */\nfunction scroll(direction: \"Height\", end: \"Top\"): VelocityNormalizationsFn;\nfunction scroll(direction: \"Width\", end: \"Left\"): VelocityNormalizationsFn;\nfunction scroll(direction: \"Height\" | \"Width\", end: \"Top\" | \"Left\"): VelocityNormalizationsFn {\n\treturn ((element: HTMLorSVGElement, propertyValue?: string): string | void => {\n\t\tif (propertyValue == null) {\n\t\t\t// Make sure we have these values cached.\n\t\t\tgetPropertyValue(element, \"client\" + direction, null, true);\n\t\t\tgetPropertyValue(element, \"scroll\" + direction, null, true);\n\n\t\t\treturn element[\"scroll\" + end] + \"px\";\n\t\t}\n\t\tconst value = parseFloat(propertyValue),\n\t\t\tunit = propertyValue.replace(String(value), \"\");\n\n\t\tswitch (unit) {\n\t\t\tcase \"\":\n\t\t\tcase \"px\":\n\t\t\t\telement[\"scroll\" + end] = value;\n\t\t\t\tbreak;\n\n\t\t\tcase \"%\":\n\t\t\t\tconst client = parseFloat(getPropertyValue(element, \"client\" + direction)),\n\t\t\t\t\tscrollValue = parseFloat(getPropertyValue(element, \"scroll\" + direction));\n\n\t\t\t\telement[\"scroll\" + end] = Math.max(0, scrollValue - client) * value / 100;\n\t\t\t\tbreak;\n\t\t}\n\t}) as VelocityNormalizationsFn;\n}\n\nregisterNormalization([\"HTMLElement\", \"scroll\", scroll(\"Height\", \"Top\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollTop\", scroll(\"Height\", \"Top\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollLeft\", scroll(\"Width\", \"Left\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollWidth\", scrollWidth]);\nregisterNormalization([\"HTMLElement\", \"clientWidth\", clientWidth]);\nregisterNormalization([\"HTMLElement\", \"scrollHeight\", scrollHeight]);\nregisterNormalization([\"HTMLElement\", \"clientHeight\", clientHeight]);\n"
  },
  {
    "path": "src/Velocity/normalizations/style.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * This handles all CSS style properties. With browser prefixed properties it\n * will register a version that handles setting (and getting) both the prefixed\n * and non-prefixed version.\n */\n\n// Typedefs\nimport {HTMLorSVGElement, VelocityNormalizationsFn} from \"../../../velocity.d\";\n\n// Project\nimport {ALL_VENDOR_PREFIXES} from \"../../constants\";\nimport {isString} from \"../../types\";\nimport {computePropertyValue} from \"../css/getPropertyValue\";\nimport {State} from \"../state\";\nimport {hasNormalization, registerNormalization} from \"./normalizations\";\n\n/**\n * An RegExp pattern for the following list of css words using\n * http://kemio.com.ar/tools/lst-trie-re.php to generate:\n *\n * blockSize\n * borderBottomLeftRadius\n * borderBottomRightRadius\n * borderBottomWidth\n * borderImageOutset\n * borderImageWidth\n * borderLeftWidth\n * borderRadius\n * borderRightWidth\n * borderSpacing\n * borderTopLeftRadius\n * borderTopRightRadius\n * borderTopWidth\n * borderWidth\n * bottom\n * columnGap\n * columnRuleWidth\n * columnWidth\n * flexBasis\n * fontSize\n * gridColumnGap\n * gridGap\n * gridRowGap\n * height\n * inlineSize\n * left\n * letterSpacing\n * margin\n * marginBottom\n * marginLeft\n * marginRight\n * marginTop\n * maxBlockSize\n * maxHeight\n * maxInlineSize\n * maxWidth\n * minBlockSize\n * minHeight\n * minInlineSize\n * minWidth\n * objectPosition\n * outlineOffset\n * outlineWidth\n * padding\n * paddingBottom\n * paddingLeft\n * paddingRight\n * paddingTop\n * perspective\n * right\n * shapeMargin\n * strokeDashoffset\n * strokeWidth\n * textIndent\n * top\n * transformOrigin\n * width\n * wordSpacing\n */\n// tslint:disable-next-line:max-line-length\nconst rxAddPx = /^(b(lockSize|o(rder(Bottom(LeftRadius|RightRadius|Width)|Image(Outset|Width)|LeftWidth|R(adius|ightWidth)|Spacing|Top(LeftRadius|RightRadius|Width)|Width)|ttom))|column(Gap|RuleWidth|Width)|f(lexBasis|ontSize)|grid(ColumnGap|Gap|RowGap)|height|inlineSize|le(ft|tterSpacing)|m(a(rgin(Bottom|Left|Right|Top)|x(BlockSize|Height|InlineSize|Width))|in(BlockSize|Height|InlineSize|Width))|o(bjectPosition|utline(Offset|Width))|p(adding(Bottom|Left|Right|Top)|erspective)|right|s(hapeMargin|troke(Dashoffset|Width))|t(extIndent|op|ransformOrigin)|w(idth|ordSpacing))$/;\n\n/**\n * Return a Normalisation that can be used to set / get a prefixed style\n * property.\n */\nfunction getSetPrefixed(propertyName: string, unprefixed: string) {\n\treturn ((element: HTMLorSVGElement, propertyValue?: string): string | void => {\n\t\tif (propertyValue === undefined) {\n\t\t\treturn computePropertyValue(element, propertyName) || computePropertyValue(element, unprefixed);\n\t\t}\n\t\telement.style[propertyName] = element.style[unprefixed] = propertyValue;\n\t}) as VelocityNormalizationsFn;\n}\n\n/**\n * Return a Normalisation that can be used to set / get a style property.\n */\nfunction getSetStyle(propertyName: string) {\n\treturn ((element: HTMLorSVGElement, propertyValue?: string): string | void => {\n\t\tif (propertyValue === undefined) {\n\t\t\treturn computePropertyValue(element, propertyName);\n\t\t}\n\t\telement.style[propertyName] = propertyValue;\n\t}) as VelocityNormalizationsFn;\n}\n\n/**\n * Vendor prefixes. Chrome / Safari, Firefox, IE / Edge, Opera.\n */\nconst rxVendors = /^(webkit|moz|ms|o)[A-Z]/,\n\tprefixElement = State.prefixElement;\n\nif (prefixElement) {\n\tfor (const propertyName in prefixElement.style) {\n\t\tif (rxVendors.test(propertyName)) {\n\t\t\tconst unprefixed = propertyName.replace(/^[a-z]+([A-Z])/, ($, letter: string) => letter.toLowerCase());\n\n\t\t\tif (ALL_VENDOR_PREFIXES || isString(prefixElement.style[unprefixed])) {\n\t\t\t\tconst addUnit = rxAddPx.test(unprefixed) ? \"px\" : undefined;\n\n\t\t\t\tregisterNormalization([\"Element\", unprefixed, getSetPrefixed(propertyName, unprefixed), addUnit]);\n\t\t\t}\n\t\t} else if (!hasNormalization([\"Element\", propertyName])) {\n\t\t\tconst addUnit = rxAddPx.test(propertyName) ? \"px\" : undefined;\n\n\t\t\tregisterNormalization([\"Element\", propertyName, getSetStyle(propertyName), addUnit]);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/Velocity/normalizations/svg/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./attributes\";\nimport \"./dimensions\";\n"
  },
  {
    "path": "src/Velocity/normalizations/svg/attributes.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {VelocityNormalizationsFn} from \"../../../../velocity.d\";\n\n// Project\nimport {isFunction, isString} from \"../../../types\";\nimport {registerNormalization} from \"../normalizations\";\n\n/**\n * Get/set an attribute.\n */\nfunction getAttribute(name: string) {\n\treturn ((element: Element, propertyValue?: string): string | void => {\n\t\tif (propertyValue === undefined) {\n\t\t\treturn element.getAttribute(name);\n\t\t}\n\t\telement.setAttribute(name, propertyValue);\n\t}) as VelocityNormalizationsFn;\n}\n\nconst base = document.createElement(\"div\"),\n\trxSubtype = /^SVG(.*)Element$/,\n\trxElement = /Element$/;\n\nObject.getOwnPropertyNames(window)\n\t.forEach((property) => {\n\t\tconst subtype = rxSubtype.exec(property);\n\n\t\tif (subtype && subtype[1] !== \"SVG\") { // Don't do SVGSVGElement.\n\t\t\ttry {\n\t\t\t\tconst element = subtype[1] ? document.createElementNS(\"http://www.w3.org/2000/svg\", (subtype[1] || \"svg\").toLowerCase()) : document.createElement(\"svg\");\n\n\t\t\t\t// tslint:disable-next-line:forin\n\t\t\t\tfor (const attribute in element) {\n\t\t\t\t\t// Although this isn't a tween without prototypes, we do\n\t\t\t\t\t// want to get hold of all attributes and not just own ones.\n\t\t\t\t\tconst value = element[attribute];\n\n\t\t\t\t\tif (isString(attribute)\n\t\t\t\t\t\t&& !(attribute[0] === \"o\" && attribute[1] === \"n\")\n\t\t\t\t\t\t&& attribute !== attribute.toUpperCase()\n\t\t\t\t\t\t&& !rxElement.test(attribute)\n\t\t\t\t\t\t&& !(attribute in base)\n\t\t\t\t\t\t&& !isFunction(value)) {\n\t\t\t\t\t\t// TODO: Should this all be set on the generic SVGElement, it would save space and time, but not as powerful\n\t\t\t\t\t\tregisterNormalization([property, attribute, getAttribute(attribute)]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(`VelocityJS: Error when trying to identify SVG attributes on ${property}.`, e);\n\t\t\t}\n\t\t}\n\t});\n"
  },
  {
    "path": "src/Velocity/normalizations/svg/dimensions.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement, VelocityNormalizationsFn} from \"../../../../velocity.d\";\n\n// Project\nimport {registerNormalization} from \"../normalizations\";\n\n/**\n * Get/set the width or height.\n */\nfunction getDimension(name: string) {\n\treturn ((element: HTMLorSVGElement, propertyValue?: string): string | void => {\n\t\tif (propertyValue === undefined) {\n\t\t\t// Firefox throws an error if .getBBox() is called on an SVG that isn't attached to the DOM.\n\t\t\ttry {\n\t\t\t\treturn (element as SVGGraphicsElement).getBBox()[name] + \"px\";\n\t\t\t} catch (e) {\n\t\t\t\treturn \"0px\";\n\t\t\t}\n\t\t}\n\t\telement.setAttribute(name, propertyValue);\n\t}) as VelocityNormalizationsFn;\n}\n\nregisterNormalization([\"SVGElement\", \"width\", getDimension(\"width\")]);\nregisterNormalization([\"SVGElement\", \"height\", getDimension(\"height\")]);\n"
  },
  {
    "path": "src/Velocity/normalizations/svg/index.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nexport * from \"./attributes\";\nexport * from \"./dimensions\";\n"
  },
  {
    "path": "src/Velocity/normalizations/tween.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement} from \"../../../velocity.d\";\n\n// Project\nimport {registerNormalization} from \"./normalizations\";\n\n/**\n * A fake normalization used to allow the \"tween\" property easy access.\n */\nfunction getSetTween(element: HTMLorSVGElement, propertyValue?: string) {\n\tif (propertyValue === undefined) {\n\t\treturn \"\";\n\t}\n}\n\nregisterNormalization([\"Element\", \"tween\", getSetTween]);\n"
  },
  {
    "path": "src/Velocity/options.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Validation functions used for various types of data that can be supplied.\n * All errors are reported in the non-minified version for development. If a\n * validation fails then it should return <code>undefined</code>.\n */\n\n// Typedefs\nimport {VelocityCallbackFn, VelocityEasingFn, VelocityEasingType, VelocityProgressFn} from \"../../velocity.d\";\n\n// Project\nimport {Duration} from \"../constants\";\nimport {isBoolean, isFunction, isNumber, isString} from \"../types\";\nimport {generateBezier} from \"./easing/bezier\";\nimport {Easings} from \"./easing/easings\";\nimport {generateSpringRK4} from \"./easing/spring_rk4\";\nimport {generateStep} from \"./easing/step\";\n\n/**\n * Parse a duration value and return an ms number. Optionally return a\n * default value if the number is not valid.\n */\nexport function parseDuration(duration: \"fast\" | \"normal\" | \"slow\" | number, def?: \"fast\" | \"normal\" | \"slow\" | number): number {\n\tif (isNumber(duration)) {\n\t\treturn duration;\n\t}\n\tif (isString(duration)) {\n\t\treturn Duration[duration.toLowerCase()]\n\t\t\t|| parseFloat(duration.replace(\"ms\", \"\")\n\t\t\t\t.replace(\"s\", \"000\"));\n\t}\n\n\treturn def == null ? undefined : parseDuration(def);\n}\n\n/**\n * Validate a <code>cache</code> option.\n */\nexport function validateCache(value: boolean): boolean {\n\tif (isBoolean(value)) {\n\t\treturn value;\n\t}\n\tif (value != null) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'cache' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>begin</code> option.\n */\nexport function validateBegin(value: VelocityCallbackFn): VelocityCallbackFn {\n\tif (isFunction(value)) {\n\t\treturn value;\n\t}\n\tif (value != null) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'begin' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>complete</code> option.\n */\nexport function validateComplete(value: VelocityCallbackFn, noError?: true): VelocityCallbackFn {\n\tif (isFunction(value)) {\n\t\treturn value;\n\t}\n\tif (value != null && !noError) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'complete' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>delay</code> option.\n */\nexport function validateDelay(value: \"fast\" | \"normal\" | \"slow\" | number): number {\n\tconst parsed = parseDuration(value);\n\n\tif (!isNaN(parsed)) {\n\t\treturn parsed;\n\t}\n\tif (value != null) {\n\t\tconsole.error(`VelocityJS: Trying to set 'delay' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>duration</code> option.\n */\nexport function validateDuration(value: \"fast\" | \"normal\" | \"slow\" | number, noError?: true): number {\n\tconst parsed = parseDuration(value);\n\n\tif (!isNaN(parsed) && parsed >= 0) {\n\t\treturn parsed;\n\t}\n\tif (value != null && !noError) {\n\t\tconsole.error(`VelocityJS: Trying to set 'duration' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>easing</code> option.\n */\nexport function validateEasing(value: VelocityEasingType, duration: number, noError?: true): VelocityEasingFn {\n\tif (isString(value)) {\n\t\t// Named easing\n\t\treturn Easings[value];\n\t}\n\tif (isFunction(value)) {\n\t\treturn value;\n\t}\n\t// TODO: We should only do these if the correct function exists - don't force loading.\n\tif (Array.isArray(value)) {\n\t\tif (value.length === 1) {\n\t\t\t// Steps\n\t\t\treturn generateStep(value[0]);\n\t\t}\n\t\tif (value.length === 2) {\n\t\t\t// springRK4 must be passed the animation's duration.\n\t\t\t// Note: If the springRK4 array contains non-numbers,\n\t\t\t// generateSpringRK4() returns an easing function generated with\n\t\t\t// default tension and friction values.\n\t\t\treturn generateSpringRK4(value[0], value[1], duration);\n\t\t}\n\t\tif (value.length === 4) {\n\t\t\t// Note: If the bezier array contains non-numbers, generateBezier()\n\t\t\t// returns undefined.\n\t\t\treturn generateBezier.apply(null, value) || false;\n\t\t}\n\t}\n\tif (value != null && !noError) {\n\t\tconsole.error(`VelocityJS: Trying to set 'easing' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>fpsLimit</code> option.\n */\nexport function validateFpsLimit(value: number | false): number {\n\tif (value === false) {\n\t\treturn 0;\n\t} else {\n\t\tconst parsed = parseInt(value as any, 10);\n\n\t\tif (!isNaN(parsed) && parsed >= 0) {\n\t\t\treturn Math.min(parsed, 60);\n\t\t}\n\t}\n\tif (value != null) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'fpsLimit' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>loop</code> option.\n */\nexport function validateLoop(value: number | boolean): number | true {\n\tswitch (value) {\n\t\tcase false:\n\t\t\treturn 0;\n\n\t\tcase true:\n\t\t\treturn true;\n\n\t\tdefault:\n\t\t\tconst parsed = parseInt(value as any, 10);\n\n\t\t\tif (!isNaN(parsed) && parsed >= 0) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\tif (value != null) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'loop' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>progress</code> option.\n */\nexport function validateProgress(value: VelocityProgressFn): VelocityProgressFn {\n\tif (isFunction(value)) {\n\t\treturn value;\n\t}\n\tif (value != null) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'progress' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>promise</code> option.\n */\nexport function validatePromise(value: boolean): boolean {\n\tif (isBoolean(value)) {\n\t\treturn value;\n\t}\n\tif (value != null) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'promise' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>promiseRejectEmpty</code> option.\n */\nexport function validatePromiseRejectEmpty(value: boolean): boolean {\n\tif (isBoolean(value)) {\n\t\treturn value;\n\t}\n\tif (value != null) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'promiseRejectEmpty' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>queue</code> option.\n */\nexport function validateQueue(value: string | false, noError?: true): string | false {\n\tif (value === false || isString(value)) {\n\t\treturn value;\n\t}\n\tif (value != null && !noError) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'queue' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>repeat</code> option.\n */\nexport function validateRepeat(value: number | boolean): number | true {\n\tswitch (value) {\n\t\tcase false:\n\t\t\treturn 0;\n\n\t\tcase true:\n\t\t\treturn true;\n\n\t\tdefault:\n\t\t\tconst parsed = parseInt(value as any, 10);\n\n\t\t\tif (!isNaN(parsed) && parsed >= 0) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\tif (value != null) {\n\t\tconsole.warn(`VelocityJS: Trying to set 'repeat' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>speed</code> option.\n */\nexport function validateSpeed(value: number): number {\n\tif (isNumber(value)) {\n\t\treturn value;\n\t}\n\tif (value != null) {\n\t\tconsole.error(`VelocityJS: Trying to set 'speed' to an invalid value:`, value);\n\t}\n}\n\n/**\n * Validate a <code>sync</code> option.\n */\nexport function validateSync(value: boolean): boolean {\n\tif (isBoolean(value)) {\n\t\treturn value;\n\t}\n\tif (value != null) {\n\t\tconsole.error(`VelocityJS: Trying to set 'sync' to an invalid value:`, value);\n\t}\n}\n"
  },
  {
    "path": "src/Velocity/patch.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Project\nimport {defineProperty} from \"../utility\";\nimport {Velocity} from \"../velocityFn\";\n\n/**\n * Used to patch any object to allow Velocity chaining. In order to chain an\n * object must either be treatable as an array - with a <code>.length</code>\n * property, and each member a Node, or a Node directly.\n *\n * By default Velocity will try to patch <code>window</code>,\n * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n * Nodes or lists of Nodes.\n */\nexport function patch(proto: any, global?: boolean) {\n\ttry {\n\t\tdefineProperty(proto, (global ? \"V\" : \"v\") + \"elocity\", Velocity);\n\t} catch (e) {\n\t\tconsole.warn(`VelocityJS: Error when trying to add prototype.`, e);\n\t}\n}\n"
  },
  {
    "path": "src/Velocity/queue.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * AnimationCall queue\n */\n\n// Typedefs\nimport {AnimationCall, HTMLorSVGElement} from \"../../velocity.d\";\n\n// Project\nimport {isString} from \"../types\";\nimport {addClass} from \"../utility\";\nimport {Data} from \"./data\";\nimport {State} from \"./state\";\n\n/**\n * Simple queue management. Un-named queue is directly within the element data,\n * named queue is within an object within it.\n */\nfunction animate(animation: AnimationCall) {\n\tconst prev = State.last;\n\n\tanimation._prev = prev;\n\tanimation._next = undefined;\n\tif (prev) {\n\t\tprev._next = animation;\n\t} else {\n\t\tState.first = animation;\n\t}\n\tState.last = animation;\n\tif (!State.firstNew) {\n\t\tState.firstNew = animation;\n\t}\n\tconst element = animation.element,\n\t\tdata = Data(element);\n\n\tif (!data.count++) {\n\n\t\t////////////////////////\n\t\t// Feature: Classname //\n\t\t////////////////////////\n\n\t\taddClass(element, State.className);\n\t}\n}\n\n/**\n * Add an item to an animation queue.\n */\nexport function queue(element: HTMLorSVGElement, animation: AnimationCall, queueName: string | false): void {\n\tconst data = Data(element);\n\n\tif (queueName !== false) {\n\t\t// Store the last animation added so we can use it for the\n\t\t// beginning of the next one.\n\t\tdata.lastAnimationList[queueName] = animation;\n\t}\n\tif (queueName === false) {\n\t\tanimate(animation);\n\t} else {\n\t\tif (!isString(queueName)) {\n\t\t\tqueueName = \"\";\n\t\t}\n\t\tlet last = data.queueList[queueName];\n\n\t\tif (!last) {\n\t\t\tif (last === null) {\n\t\t\t\tdata.queueList[queueName] = animation;\n\t\t\t} else {\n\t\t\t\tdata.queueList[queueName] = null;\n\t\t\t\tanimate(animation);\n\t\t\t}\n\t\t} else {\n\t\t\twhile (last._next) {\n\t\t\t\tlast = last._next;\n\t\t\t}\n\t\t\tlast._next = animation;\n\t\t\tanimation._prev = last;\n\t\t}\n\t}\n}\n\n/**\n * Start the next animation on this element's queue (named or default).\n *\n * @returns the next animation that is starting.\n */\nexport function dequeue(element: HTMLorSVGElement, queueName?: string | boolean, skip?: boolean): AnimationCall {\n\tif (queueName !== false) {\n\t\tif (!isString(queueName)) {\n\t\t\tqueueName = \"\";\n\t\t}\n\t\tconst data = Data(element),\n\t\t\tanimation = data.queueList[queueName];\n\n\t\tif (animation) {\n\t\t\tdata.queueList[queueName] = animation._next || null;\n\t\t\tif (!skip) {\n\t\t\t\tanimate(animation);\n\t\t\t}\n\t\t} else if (animation === null) {\n\t\t\tdelete data.queueList[queueName];\n\t\t}\n\n\t\treturn animation;\n\t}\n}\n\n/**\n * Remove an animation from the active animation list. If it has a queue set\n * then remember it as the last animation for that queue, and free the one\n * that was previously there. If the animation list is completely empty then\n * mark us as finished.\n */\nexport function freeAnimationCall(animation: AnimationCall): void {\n\tconst next = animation._next,\n\t\tprev = animation._prev,\n\t\tqueueName = animation.queue == null ? animation.options.queue : animation.queue;\n\n\tif (State.firstNew === animation) {\n\t\tState.firstNew = next;\n\t}\n\tif (State.first === animation) {\n\t\tState.first = next;\n\t} else if (prev) {\n\t\tprev._next = next;\n\t}\n\tif (State.last === animation) {\n\t\tState.last = prev;\n\t} else if (next) {\n\t\tnext._prev = prev;\n\t}\n\tif (queueName) {\n\t\tconst data = Data(animation.element);\n\n\t\tif (data) {\n\t\t\tanimation._next = animation._prev = undefined;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/Velocity/sequences.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {AnimationCall, SequenceList, VelocitySequence, VelocityTween} from \"../../velocity.d\";\n\n// Project\nimport {isNumber, isPlainObject, isString} from \"../types\";\nimport Velocity from \"../velocity\";\nimport {registerAction} from \"./actions/actions\";\nimport {camelCase} from \"./camelCase\";\nimport {getNormalization} from \"./normalizations/normalizations\";\nimport {validateDuration, validateEasing} from \"./options\";\nimport {SequencesObject} from \"./sequencesObject\";\nimport {findPattern} from \"./tweens\";\n\n// Constants\nimport {DEFAULT_DURATION} from \"../constants\";\n\nconst rxPercents = /(\\d*\\.\\d+|\\d+\\.?|from|to)/g;\n\nexport function expandSequence(animation: AnimationCall, sequence: SequenceList) {\n\tconst tweens = animation.tweens = Object.create(null),\n\t\telement = animation.element;\n\n\tfor (const propertyName in sequence.tweens) {\n\t\tif (sequence.tweens.hasOwnProperty(propertyName)) {\n\t\t\tconst fn = getNormalization(element, propertyName);\n\n\t\t\tif (!fn && propertyName !== \"tween\") {\n\t\t\t\tif (Velocity.debug) {\n\t\t\t\t\tconsole.log(`Skipping [${propertyName}] due to a lack of browser support.`);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttweens[propertyName] = {\n\t\t\t\tfn,\n\t\t\t\tsequence: sequence.tweens[propertyName],\n\t\t\t} as VelocityTween;\n\t\t}\n\t}\n}\n\n/**\n * Used to register a sequence. This should never be called by users\n * directly, instead it should be called via an action:<br/>\n * <code>Velocity(\"registerSequence\", \"\"name\", VelocitySequence);</code>\n */\nexport function registerSequence(args?: [string, VelocitySequence] | [{[name: string]: VelocitySequence}]) {\n\tif (isPlainObject(args[0])) {\n\t\tfor (const name in (args[0] as {[name: string]: VelocitySequence})) {\n\t\t\tif (args[0].hasOwnProperty(name)) {\n\t\t\t\tregisterSequence([name, args[0][name]]);\n\t\t\t}\n\t\t}\n\t} else if (isString(args[0])) {\n\t\tconst name = args[0] as string,\n\t\t\tsequence = args[1] as VelocitySequence;\n\n\t\tif (!isString(name)) {\n\t\t\tconsole.warn(`VelocityJS: Trying to set 'registerSequence' name to an invalid value:`, name);\n\t\t} else if (!isPlainObject(sequence)) {\n\t\t\tconsole.warn(`VelocityJS: Trying to set 'registerSequence' sequence to an invalid value:`, name, sequence);\n\t\t} else {\n\t\t\tif (SequencesObject[name]) {\n\t\t\t\tconsole.warn(`VelocityJS: Replacing named sequence:`, name);\n\t\t\t}\n\t\t\tconst percents: {[key: string]: string[]} = {},\n\t\t\t\tsteps: string[] = new Array(100),\n\t\t\t\tproperties: string[] = [],\n\t\t\t\tpercentages: string[] = [],\n\t\t\t\tsequenceList: SequenceList = SequencesObject[name] = {} as any,\n\t\t\t\tduration = validateDuration((sequence as any).duration);\n\n\t\t\tsequenceList.tweens = {};\n\t\t\tif (isNumber(duration)) {\n\t\t\t\tsequenceList.duration = duration;\n\t\t\t}\n\t\t\tfor (const part in sequence) {\n\t\t\t\tif (sequence.hasOwnProperty(part)) {\n\t\t\t\t\tconst keys = String(part)\n\t\t\t\t\t\t.match(rxPercents);\n\n\t\t\t\t\tif (keys) {\n\t\t\t\t\t\tpercentages.push(part);\n\t\t\t\t\t\tfor (const key of keys) {\n\t\t\t\t\t\t\tconst percent = key === \"from\"\n\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t: key === \"to\"\n\t\t\t\t\t\t\t\t\t? 100\n\t\t\t\t\t\t\t\t\t: parseFloat(key);\n\n\t\t\t\t\t\t\tif (percent < 0 || percent > 100) {\n\t\t\t\t\t\t\t\tconsole.warn(`VelocityJS: Trying to use an invalid value as a percentage (0 <= n <= 100):`, name, percent);\n\t\t\t\t\t\t\t} else if (isNaN(percent)) {\n\t\t\t\t\t\t\t\tconsole.warn(`VelocityJS: Trying to use an invalid number as a percentage:`, name, part, key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (!percents[String(percent)]) {\n\t\t\t\t\t\t\t\t\tpercents[String(percent)] = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tpercents[String(percent)].push(part);\n\t\t\t\t\t\t\t\tfor (const property in sequence[part]) {\n\t\t\t\t\t\t\t\t\tif (!properties.includes(property)) {\n\t\t\t\t\t\t\t\t\t\tproperties.push(property);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst orderedPercents = Object.keys(percents)\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tconst a1 = parseFloat(a),\n\t\t\t\t\t\tb1 = parseFloat(b);\n\n\t\t\t\t\treturn a1 > b1 ? 1 : a1 < b1 ? -1 : 0;\n\t\t\t\t});\n\n\t\t\torderedPercents.forEach((key) => {\n\t\t\t\tsteps.push.apply(percents[key]);\n\t\t\t});\n\t\t\tfor (const property of properties) {\n\t\t\t\tconst parts: string[] = [],\n\t\t\t\t\tpropertyName = camelCase(property);\n\n\t\t\t\tfor (const key of orderedPercents) {\n\t\t\t\t\tfor (const value of percents[key]) {\n\t\t\t\t\t\tconst stepProperties = sequence[value];\n\n\t\t\t\t\t\tif (stepProperties[propertyName]) {\n\t\t\t\t\t\t\tparts.push(isString(stepProperties[propertyName])\n\t\t\t\t\t\t\t\t? stepProperties[propertyName]\n\t\t\t\t\t\t\t\t: stepProperties[propertyName][0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (parts.length) {\n\t\t\t\t\tconst realSequence = findPattern(parts, propertyName);\n\t\t\t\t\tlet index = 0;\n\n\t\t\t\t\tif (realSequence) {\n\t\t\t\t\t\tfor (const key of orderedPercents) {\n\t\t\t\t\t\t\tfor (const value of percents[key]) {\n\t\t\t\t\t\t\t\tconst originalProperty = sequence[value][propertyName];\n\n\t\t\t\t\t\t\t\tif (originalProperty) {\n\t\t\t\t\t\t\t\t\tif (Array.isArray(originalProperty) && originalProperty.length > 1 && (isString(originalProperty[1]) || Array.isArray(originalProperty[1]))) {\n\t\t\t\t\t\t\t\t\t\trealSequence[index].easing = validateEasing(originalProperty[1], sequenceList.duration || DEFAULT_DURATION);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\trealSequence[index++].percent = parseFloat(key) / 100;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsequenceList.tweens[propertyName] = realSequence;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nregisterAction([\"registerSequence\", registerSequence], true);\n"
  },
  {
    "path": "src/Velocity/sequencesObject.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {SequenceList} from \"../../velocity.d\";\n\nexport const SequencesObject: {[name: string]: SequenceList} = {};\n"
  },
  {
    "path": "src/Velocity/state.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {VelocityState} from \"../../velocity.d\";\n\n// Constants\nimport {CLASSNAME} from \"../constants\";\n\nconst isClient = window && window === window.window,\n\twindowScrollAnchor = isClient && window.pageYOffset !== undefined;\n\nexport const State: VelocityState = {\n\tisClient,\n\tisMobile: isClient && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n\tisGingerbread: isClient && /Android 2\\.3\\.[3-7]/i.test(navigator.userAgent),\n\tprefixElement: isClient && document.createElement(\"div\"),\n\twindowScrollAnchor,\n\tscrollAnchor: windowScrollAnchor ? window : (!isClient || document.documentElement || document.body.parentNode || document.body),\n\tscrollPropertyLeft: windowScrollAnchor ? \"pageXOffset\" : \"scrollLeft\",\n\tscrollPropertyTop: windowScrollAnchor ? \"pageYOffset\" : \"scrollTop\",\n\tclassName: CLASSNAME,\n\tisTicking: false,\n\tfirst: undefined,\n\tlast: undefined,\n\tfirstNew: undefined,\n};\n"
  },
  {
    "path": "src/Velocity/tick.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Tick\n */\n\n// Typedefs\nimport {AnimationCall, AnimationFlags, TweenStep} from \"../../velocity.d\";\n\n// Project\nimport {now} from \"../utility\";\nimport Velocity from \"../velocity\";\nimport {completeCall} from \"./complete\";\nimport {removeNestedCalc} from \"./css/removeNestedCalc\";\nimport {setPropertyValue} from \"./css/setPropertyValue\";\nimport {Data} from \"./data\";\nimport {defaults} from \"./defaults\";\nimport {linearEasing} from \"./easing/easings\";\nimport {freeAnimationCall} from \"./queue\";\nimport {State} from \"./state\";\nimport {validateTweens} from \"./tweens\";\n\n/**\n * Call the begin method of an animation in a separate function so it can\n * benefit from JIT compiling while still having a try/catch block.\n */\nexport function beginCall(activeCall: AnimationCall) {\n\tconst callback = activeCall.begin || activeCall.options.begin;\n\n\tif (callback) {\n\t\ttry {\n\t\t\tconst elements = activeCall.elements;\n\n\t\t\tcallback.call(elements, elements, activeCall);\n\t\t} catch (error) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthrow error;\n\t\t\t}, 1);\n\t\t}\n\t}\n}\n\n/**\n * Call the progress method of an animation in a separate function so it can\n * benefit from JIT compiling while still having a try/catch block.\n */\nfunction progressCall(activeCall: AnimationCall) {\n\tconst callback = activeCall.progress || activeCall.options.progress;\n\n\tif (callback) {\n\t\ttry {\n\t\t\tconst elements = activeCall.elements,\n\t\t\t\tpercentComplete = activeCall.percentComplete,\n\t\t\t\toptions = activeCall.options,\n\t\t\t\ttweenValue = activeCall.tween;\n\n\t\t\tcallback.call(elements,\n\t\t\t\telements,\n\t\t\t\tpercentComplete,\n\t\t\t\tMath.max(0, activeCall.timeStart + (activeCall.duration != null ? activeCall.duration : options.duration != null ? options.duration : defaults.duration) - lastTick),\n\t\t\t\ttweenValue !== undefined ? tweenValue : String(percentComplete * 100),\n\t\t\t\tactiveCall);\n\t\t} catch (error) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthrow error;\n\t\t\t}, 1);\n\t\t}\n\t}\n}\n\n/**\n * Call callbacks, potentially run async with the main animation thread.\n */\nfunction asyncCallbacks() {\n\tfor (const activeCall of progressed) {\n\t\tprogressCall(activeCall);\n\t}\n\tprogressed.clear();\n\tfor (const activeCall of completed) {\n\t\tcompleteCall(activeCall);\n\t}\n\tcompleted.clear();\n}\n\n/**************\n Timing\n **************/\n\nconst FRAME_TIME = 1000 / 60,\n\t/**\n\t * Animations with a Complete callback.\n\t */\n\tcompleted = new Set<AnimationCall>(),\n\t/**\n\t * Animations with a Progress callback.\n\t */\n\tprogressed = new Set<AnimationCall>(),\n\t/**\n\t * Shim for window.performance in case it doesn't exist\n\t */\n\tperformance = (() => {\n\t\tconst perf = window.performance || {} as Performance;\n\n\t\tif (typeof perf.now !== \"function\") {\n\t\t\tconst nowOffset = perf.timing && perf.timing.navigationStart ? perf.timing.navigationStart : now();\n\n\t\t\tperf.now = () => {\n\t\t\t\treturn now() - nowOffset;\n\t\t\t};\n\t\t}\n\n\t\treturn perf;\n\t})(),\n\t/**\n\t * Proxy function for when rAF is not available.\n\t *\n\t * This should hopefully never be used as the browsers often throttle\n\t * this to less than one frame per second in the background, making it\n\t * completely unusable.\n\t */\n\trAFProxy = (callback: FrameRequestCallback) => {\n\t\treturn setTimeout(callback, Math.max(0, FRAME_TIME - (performance.now() - lastTick)));\n\t},\n\t/**\n\t * Either requestAnimationFrame, or a shim for it.\n\t */\n\trAFShim = window.requestAnimationFrame || rAFProxy;\n\n/**\n * Set if we are currently inside a tick() to prevent double-calling.\n */\nlet ticking: boolean,\n\t/**\n\t * A background WebWorker that sends us framerate messages when we're in\n\t * the background. Without this we cannot maintain frame accuracy.\n\t */\n\tworker: Worker;\n\n/**\n * The time that the last animation frame ran at. Set from tick(), and used\n * for missing rAF (ie, when not in focus etc).\n */\nexport let lastTick: number = 0;\n\n/**\n * WebWorker background function.\n *\n * When we're in the background this will send us a msg every tick, when in\n * the foreground it won't.\n *\n * When running in the background the browser reduces allowed CPU etc, so\n * we raun at 30fps instead of 60fps.\n */\nfunction workerFn(this: Worker) {\n\tlet interval: any;\n\n\tthis.onmessage = (e) => {\n\t\tswitch (e.data) {\n\t\t\tcase true:\n\t\t\t\tif (!interval) {\n\t\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\t\tthis.postMessage(true);\n\t\t\t\t\t}, 1000 / 30);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase false:\n\t\t\t\tif (interval) {\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\tinterval = 0;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.postMessage(e.data);\n\t\t\t\tbreak;\n\t\t}\n\t};\n}\n\ntry {\n\t// Create the worker - this might not be supported, hence the try/catch.\n\tworker = new Worker(URL.createObjectURL(new Blob([`(${workerFn})()`])));\n\t// Whenever the worker sends a message we tick()\n\tworker.onmessage = (e: MessageEvent) => {\n\t\tif (e.data === true) {\n\t\t\ttick();\n\t\t} else {\n\t\t\tasyncCallbacks();\n\t\t}\n\t};\n\t// And watch for going to the background to start the WebWorker running.\n\tif (!State.isMobile && document.hidden !== undefined) {\n\t\tdocument.addEventListener(\"visibilitychange\", () => {\n\t\t\tworker.postMessage(State.isTicking && document.hidden);\n\t\t});\n\t}\n} catch (e) {\n\t/*\n\t * WebWorkers are not supported in this format. This can happen in IE10\n\t * where it can't create one from a blob this way. We fallback, but make\n\t * no guarantees towards accuracy in this case.\n\t */\n}\n\n/**\n * Called on every tick, preferably through rAF. This is reponsible for\n * initialising any new animations, then starting any that need starting.\n * Finally it will expand any tweens and set the properties relating to\n * them. If there are any callbacks relating to the animations then they\n * will attempt to call at the end (with the exception of \"begin\").\n */\nexport function tick(timestamp?: number | boolean) {\n\tif (ticking) {\n\t\t// Should never happen - but if we've swapped back from hidden to\n\t\t// visibile then we want to make sure\n\t\treturn;\n\t}\n\tticking = true;\n\t/* An empty timestamp argument indicates that this is the first tick occurence since ticking was turned on.\n\t We leverage this metadata to fully ignore the first tick pass since RAF's initial pass is fired whenever\n\t the browser's next tick sync time occurs, which results in the first elements subjected to Velocity\n\t calls being animated out of sync with any elements animated immediately thereafter. In short, we ignore\n\t the first RAF tick pass so that elements being immediately consecutively animated -- instead of simultaneously animated\n\t by the same Velocity call -- are properly batched into the same initial RAF tick and consequently remain in sync thereafter. */\n\tif (timestamp !== false) {\n\t\tconst timeCurrent = performance.now(),\n\t\t\tdeltaTime = lastTick ? timeCurrent - lastTick : FRAME_TIME,\n\t\t\tdefaultSpeed = defaults.speed,\n\t\t\tdefaultEasing = defaults.easing,\n\t\t\tdefaultDuration = defaults.duration;\n\t\tlet activeCall: AnimationCall,\n\t\t\tnextCall: AnimationCall;\n\n\t\tif (deltaTime >= defaults.minFrameTime || !lastTick) {\n\t\t\tlastTick = timeCurrent;\n\n\t\t\t/********************\n\t\t\t Call Iteration\n\t\t\t ********************/\n\n\t\t\t// Expand any tweens that might need it.\n\t\t\twhile (State.firstNew) {\n\t\t\t\tvalidateTweens(State.firstNew);\n\t\t\t}\n\t\t\t// Iterate through each active call.\n\t\t\tfor (activeCall = State.first; activeCall && activeCall !== State.firstNew; activeCall = activeCall._next) {\n\t\t\t\tconst element = activeCall.element,\n\t\t\t\t\tdata = Data(element);\n\n\t\t\t\t// Check to see if this element has been deleted midway\n\t\t\t\t// through the animation. If it's gone then end this\n\t\t\t\t// animation.\n\t\t\t\tif (!element.parentNode || !data) {\n\t\t\t\t\t// TODO: Remove safely - decrease count, delete data, remove from arrays\n\t\t\t\t\tfreeAnimationCall(activeCall);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Don't bother getting until we can use these.\n\t\t\t\tconst options = activeCall.options,\n\t\t\t\t\tflags = activeCall._flags;\n\t\t\t\tlet timeStart = activeCall.timeStart;\n\n\t\t\t\t// If this is the first time that this call has been\n\t\t\t\t// processed by tick() then we assign timeStart now so that\n\t\t\t\t// it's value is as close to the real animation start time\n\t\t\t\t// as possible.\n\t\t\t\tif (!timeStart) {\n\t\t\t\t\tconst queue = activeCall.queue != null ? activeCall.queue : options.queue;\n\n\t\t\t\t\ttimeStart = timeCurrent - deltaTime;\n\t\t\t\t\tif (queue !== false) {\n\t\t\t\t\t\ttimeStart = Math.max(timeStart, data.lastFinishList[queue] || 0);\n\t\t\t\t\t}\n\t\t\t\t\tactiveCall.timeStart = timeStart;\n\t\t\t\t}\n\t\t\t\t// If this animation is paused then skip processing unless\n\t\t\t\t// it has been set to resume.\n\t\t\t\tif (flags & AnimationFlags.PAUSED) { // tslint:disable-line:no-bitwise\n\t\t\t\t\t// Update the time start to accomodate the paused\n\t\t\t\t\t// completion amount.\n\t\t\t\t\tactiveCall.timeStart += deltaTime;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Check if this animation is ready - if it's synced then it\n\t\t\t\t// needs to wait for all other animations in the sync\n\t\t\t\tif (!(flags & AnimationFlags.READY)) { // tslint:disable-line:no-bitwise\n\t\t\t\t\tactiveCall._flags |= AnimationFlags.READY; // tslint:disable-line:no-bitwise\n\t\t\t\t\toptions._ready++;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Need to split the loop, as ready sync animations must all get\n\t\t\t// the same start time.\n\t\t\tfor (activeCall = State.first; activeCall && activeCall !== State.firstNew; activeCall = nextCall) {\n\t\t\t\tconst flags = activeCall._flags;\n\n\t\t\t\tnextCall = activeCall._next;\n\t\t\t\tif (!(flags & AnimationFlags.READY) || (flags & AnimationFlags.PAUSED)) { // tslint:disable-line:no-bitwise\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst options = activeCall.options;\n\n\t\t\t\tif ((flags & AnimationFlags.SYNC) && options._ready < options._total) { // tslint:disable-line:no-bitwise\n\t\t\t\t\tactiveCall.timeStart += deltaTime;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst speed = activeCall.speed != null ? activeCall.speed : options.speed != null ? options.speed : defaultSpeed;\n\t\t\t\tlet timeStart = activeCall.timeStart;\n\n\t\t\t\t// Don't bother getting until we can use these.\n\t\t\t\tif (!(flags & AnimationFlags.STARTED)) { // tslint:disable-line:no-bitwise\n\t\t\t\t\tconst delay = activeCall.delay != null ? activeCall.delay : options.delay;\n\n\t\t\t\t\t// Make sure anything we've delayed doesn't start\n\t\t\t\t\t// animating yet, there might still be an active delay\n\t\t\t\t\t// after something has been un-paused\n\t\t\t\t\tif (delay) {\n\t\t\t\t\t\tif (timeStart + (delay / speed) > timeCurrent) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tactiveCall.timeStart = timeStart += delay / (delay > 0 ? speed : 1);\n\t\t\t\t\t}\n\t\t\t\t\tactiveCall._flags |= AnimationFlags.STARTED; // tslint:disable-line:no-bitwise\n\t\t\t\t\t// The begin callback is fired once per call, not once\n\t\t\t\t\t// per element, and is passed the full raw DOM element\n\t\t\t\t\t// set as both its context and its first argument.\n\t\t\t\t\tif (options._started++ === 0) {\n\t\t\t\t\t\toptions._first = activeCall;\n\t\t\t\t\t\tif (options.begin) {\n\t\t\t\t\t\t\t// Pass to an external fn with a try/catch block for optimisation\n\t\t\t\t\t\t\tbeginCall(activeCall);\n\t\t\t\t\t\t\t// Only called once, even if reversed or repeated\n\t\t\t\t\t\t\toptions.begin = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (speed !== 1) {\n\t\t\t\t\t// On the first frame we may have a shorter delta\n\t\t\t\t\t// const delta = Math.min(deltaTime, timeCurrent - timeStart);\n\t\t\t\t\tactiveCall.timeStart = timeStart += Math.min(deltaTime, timeCurrent - timeStart) * (1 - speed);\n\t\t\t\t}\n\t\t\t\tconst activeEasing = activeCall.easing != null ? activeCall.easing : options.easing != null ? options.easing : defaultEasing,\n\t\t\t\t\tmillisecondsEllapsed = activeCall.ellapsedTime = timeCurrent - timeStart,\n\t\t\t\t\tduration = activeCall.duration != null ? activeCall.duration : options.duration != null ? options.duration : defaultDuration,\n\t\t\t\t\tpercentComplete = activeCall.percentComplete = Velocity.mock ? 1 : Math.min(millisecondsEllapsed / duration, 1),\n\t\t\t\t\ttweens = activeCall.tweens,\n\t\t\t\t\treverse = flags & AnimationFlags.REVERSE; // tslint:disable-line:no-bitwise\n\n\t\t\t\tif (activeCall.progress || (options._first === activeCall && options.progress)) {\n\t\t\t\t\tprogressed.add(activeCall);\n\t\t\t\t}\n\t\t\t\tif (percentComplete === 1) {\n\t\t\t\t\tcompleted.add(activeCall);\n\t\t\t\t}\n\t\t\t\t// tslint:disable-next-line:forin\n\t\t\t\tfor (const property in tweens) {\n\t\t\t\t\t// For every element, iterate through each property.\n\t\t\t\t\tconst tween = tweens[property],\n\t\t\t\t\t\tsequence = tween.sequence,\n\t\t\t\t\t\tpattern = sequence.pattern;\n\t\t\t\t\tlet currentValue = \"\",\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tif (pattern) {\n\t\t\t\t\t\tconst easingComplete = (tween.easing || activeEasing)(percentComplete, 0, 1, property);\n\t\t\t\t\t\tlet best = 0;\n\n\t\t\t\t\t\tfor (let j = 0; j < sequence.length - 1; j++) {\n\t\t\t\t\t\t\tif (sequence[j].percent < easingComplete) {\n\t\t\t\t\t\t\t\tbest = j;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst tweenFrom: TweenStep = sequence[best],\n\t\t\t\t\t\t\ttweenTo: TweenStep = sequence[best + 1] || tweenFrom,\n\t\t\t\t\t\t\trawPercent = (percentComplete - tweenFrom.percent) / (tweenTo.percent - tweenFrom.percent),\n\t\t\t\t\t\t\ttweenPercent = reverse ? 1 - rawPercent : rawPercent,\n\t\t\t\t\t\t\teasing = tweenTo.easing || activeEasing || linearEasing;\n\n\t\t\t\t\t\tfor (; i < pattern.length; i++) {\n\t\t\t\t\t\t\tconst startValue = tweenFrom[i];\n\n\t\t\t\t\t\t\tif (startValue == null) {\n\t\t\t\t\t\t\t\tcurrentValue += pattern[i];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst endValue = tweenTo[i];\n\n\t\t\t\t\t\t\t\tif (startValue === endValue) {\n\t\t\t\t\t\t\t\t\tcurrentValue += startValue;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// All easings must deal with numbers except for our internal ones.\n\t\t\t\t\t\t\t\t\tconst result = easing(tweenPercent, startValue as number, endValue as number, property);\n\n\t\t\t\t\t\t\t\t\tcurrentValue += pattern[i] !== true ? result : Math.round(result);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (property !== \"tween\") {\n\t\t\t\t\t\t\tif (percentComplete === 1) {\n\t\t\t\t\t\t\t\tcurrentValue = removeNestedCalc(currentValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// TODO: To solve an IE<=8 positioning bug, the unit type must be dropped when setting a property value of 0 - add normalisations to legacy\n\t\t\t\t\t\t\tsetPropertyValue(activeCall.element, property, currentValue, tween.fn);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Skip the fake 'tween' property as that is only\n\t\t\t\t\t\t\t// passed into the progress callback.\n\t\t\t\t\t\t\tactiveCall.tween = currentValue;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(`VelocityJS: Missing pattern:`, property, JSON.stringify(tween[property]));\n\t\t\t\t\t\tdelete tweens[property];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (progressed.size || completed.size) {\n\t\t\t\tif (!document.hidden) {\n\t\t\t\t\tasyncCallbacks();\n\t\t\t\t} else if (worker) {\n\t\t\t\t\tworker.postMessage(\"\");\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(asyncCallbacks, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (State.first) {\n\t\tState.isTicking = true;\n\t\tif (!document.hidden) {\n\t\t\trAFShim(tick);\n\t\t} else if (!worker) {\n\t\t\trAFProxy(tick);\n\t\t} else if (timestamp === false) {\n\t\t\t// Make sure we turn on the messages.\n\t\t\tworker.postMessage(true);\n\t\t}\n\t} else {\n\t\tState.isTicking = false;\n\t\tlastTick = 0;\n\t\tif (document.hidden && worker) {\n\t\t\t// Make sure we turn off the messages.\n\t\t\tworker.postMessage(false);\n\t\t}\n\t}\n\tticking = false;\n}\n"
  },
  {
    "path": "src/Velocity/tweens.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Tweens\n */\n\n// Typedefs\nimport {\n\tAnimationCall, AnimationFlags, HTMLorSVGElement, Properties, Sequence,\n\tVelocityProperty, VelocityPropertyFn, VelocityPropertyValueFn, VelocityResult, VelocityTween,\n} from \"../../velocity.d\";\n\n// Project\nimport {isFunction, isNumber, isString} from \"../types\";\nimport {cloneArray, getValue} from \"../utility\";\nimport Velocity from \"../velocity\";\nimport {camelCase} from \"./camelCase\";\nimport {fixColors} from \"./css/fixColors\";\nimport {getPropertyValue} from \"./css/getPropertyValue\";\nimport {Data} from \"./data\";\nimport {defaults} from \"./defaults\";\nimport {Easings} from \"./easing/easings\";\nimport {getNormalization, getNormalizationUnit} from \"./normalizations/normalizations\";\nimport {validateEasing} from \"./options\";\nimport {State} from \"./state\";\n\n// Constants\nconst rxHex = /^#([A-f\\d]{3}){1,2}$/i,\n\tcommands: {\n\t\t[type: string]: (\n\t\t\tvalue: any,\n\t\t\telement: HTMLorSVGElement,\n\t\t\telements: VelocityResult,\n\t\t\telementArrayIndex: number,\n\t\t\tpropertyName: string,\n\t\t\ttween: VelocityTween) => string;\n\t} = {\n\t\tfunction: (value, element, elements, elementArrayIndex, propertyName, tween) => {\n\t\t\treturn (value as any as VelocityPropertyValueFn).call(element, elementArrayIndex, elements.length, propertyName);\n\t\t},\n\t\tnumber: (value, element, elements, elementArrayIndex, propertyName, tween) => {\n\t\t\treturn String(value) + getNormalizationUnit(tween.fn);\n\t\t},\n\t\tstring: (value, element, elements, elementArrayIndex, propertyName, tween) => {\n\t\t\treturn fixColors(value);\n\t\t},\n\t\tundefined: (value, element, elements, elementArrayIndex, propertyName, tween) => {\n\t\t\treturn fixColors(getPropertyValue(element, propertyName, tween.fn) || \"\");\n\t\t},\n\t};\n\n/**\n * Expand a VelocityProperty argument into a valid sparse Tween array. This\n * pre-allocates the array as it is then the correct size and slightly\n * faster to access.\n */\nexport function expandProperties(animation: AnimationCall, properties: Properties<VelocityProperty>) {\n\tconst tweens = animation.tweens = Object.create(null),\n\t\telements = animation.elements,\n\t\telement = animation.element,\n\t\telementArrayIndex = elements.indexOf(element as any),\n\t\tdata = Data(element),\n\t\tqueue = getValue(animation.queue, animation.options.queue),\n\t\tduration = getValue(animation.options.duration, defaults.duration);\n\n\tfor (const property in properties) {\n\t\tif (properties.hasOwnProperty(property)) {\n\t\t\tconst propertyName = camelCase(property),\n\t\t\t\tfn = getNormalization(element, propertyName);\n\t\t\tlet valueData = properties[property];\n\n\t\t\tif (!fn && propertyName !== \"tween\") {\n\t\t\t\tif (Velocity.debug) {\n\t\t\t\t\tconsole.log(`Skipping \"${property}\" due to a lack of browser support.`);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (valueData == null) {\n\t\t\t\tif (Velocity.debug) {\n\t\t\t\t\tconsole.log(`Skipping \"${property}\" due to no value supplied.`);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst tween: VelocityTween = tweens[propertyName] = {} as any;\n\t\t\tlet endValue: string,\n\t\t\t\tstartValue: string;\n\n\t\t\ttween.fn = fn;\n\t\t\tif (isFunction(valueData)) {\n\t\t\t\t// If we have a function as the main argument then resolve\n\t\t\t\t// it first, in case it returns an array that needs to be\n\t\t\t\t// split.\n\t\t\t\tvalueData = (valueData as VelocityPropertyFn).call(element, elementArrayIndex, elements.length, elements);\n\t\t\t}\n\t\t\tif (Array.isArray(valueData)) {\n\t\t\t\t// valueData is an array in the form of\n\t\t\t\t// [ endValue, [, easing] [, startValue] ]\n\t\t\t\tconst arr1 = valueData[1],\n\t\t\t\t\tarr2 = valueData[2];\n\n\t\t\t\tendValue = valueData[0] as any;\n\t\t\t\tif ((isString(arr1) && (/^[\\d-]/.test(arr1) || rxHex.test(arr1))) || isFunction(arr1) || isNumber(arr1)) {\n\t\t\t\t\tstartValue = arr1 as any;\n\t\t\t\t} else if ((isString(arr1) && Easings[arr1]) || Array.isArray(arr1)) {\n\t\t\t\t\ttween.easing = validateEasing(arr1, duration);\n\t\t\t\t\tstartValue = arr2 as any;\n\t\t\t\t} else {\n\t\t\t\t\tstartValue = arr1 || arr2 as any;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tendValue = valueData as any;\n\t\t\t}\n\t\t\ttween.end = commands[typeof endValue](endValue, element, elements, elementArrayIndex, propertyName, tween) as any;\n\t\t\tif (startValue != null || (queue === false || data.queueList[queue] === undefined)) {\n\t\t\t\ttween.start = commands[typeof startValue](startValue, element, elements, elementArrayIndex, propertyName, tween) as any;\n\t\t\t\texplodeTween(propertyName, tween, duration);\n\t\t\t}\n\t\t}\n\t}\n}\n\n// TODO: Needs a better match for \"translate3d\" etc - a number must be preceded by some form of break...\nconst rxToken = /((?:[+\\-*/]=)?(?:[+-]?\\d*\\.\\d+|[+-]?\\d+)[a-z%]*|(?:.(?!$|[+-]?\\d|[+\\-*/]=[+-]?\\d))+.|.)/g,\n\trxNumber = /^([+\\-*/]=)?([+-]?\\d*\\.\\d+|[+-]?\\d+)(.*)$/;\n\n/**\n * Find a pattern between multiple strings, return a VelocitySequence with\n * the pattern and the tokenised values.\n *\n * If number then animate.\n * If a string then must match.\n * If units then convert between them by wrapping in a calc().\n * - If already in a calc then nest another layer.\n * If in an rgba() then the first three numbers are rounded.\n */\nexport function findPattern(parts: ReadonlyArray<string>, propertyName: string): Sequence {\n\tconst partsLength = parts.length,\n\t\ttokens: string[][] = [],\n\t\tindexes: number[] = [];\n\tlet numbers: boolean;\n\n\t// First tokenise the strings - these have all values, we will pull\n\t// numbers later.\n\tfor (let part = 0; part < partsLength; part++) {\n\t\tif (isString(parts[part])) {\n\t\t\tif (parts[part] === \"\") {\n\t\t\t\ttokens[part] = [\"\"];\n\t\t\t} else {\n\t\t\t\ttokens[part] = cloneArray(parts[part].match(rxToken));\n\t\t\t}\n\t\t\tindexes[part] = 0;\n\t\t\t// If it matches more than one thing then we've got a number.\n\t\t\tnumbers = numbers || tokens[part].length > 1;\n\t\t\t//console.log(`tokens:`, parts[part], tokens[part])\n\t\t} else {\n\t\t\t// We have an incomplete lineup, it will get tried again later...\n\t\t\treturn;\n\t\t}\n\t}\n\tconst sequence: Sequence = [] as any,\n\t\tpattern = (sequence.pattern = []) as (string | boolean)[],\n\t\taddString = (text: string) => {\n\t\t\tif (isString(pattern[pattern.length - 1])) {\n\t\t\t\tpattern[pattern.length - 1] += text;\n\t\t\t} else if (text) {\n\t\t\t\tpattern.push(text);\n\t\t\t\tfor (let part = 0; part < partsLength; part++) {\n\t\t\t\t\t(sequence[part] as any[]).push(null);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\treturnStringType = () => {\n\t\t\tif (numbers || pattern.length > 1) {\n\t\t\t\t//console.error(`Velocity: Trying to pattern match mis-matched strings \"${propertyName}\":`, parts);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst isDisplay = propertyName === \"display\",\n\t\t\t\tisVisibility = propertyName === \"visibility\";\n\n\t\t\tfor (let part = 0; part < partsLength; part++) {\n\t\t\t\tconst value = parts[part];\n\n\t\t\t\tsequence[part][0] = value;\n\t\t\t\t// Don't care about duration...\n\t\t\t\tsequence[part].easing = validateEasing((isDisplay && value === \"none\") || (isVisibility && value === \"hidden\") || (!isDisplay && !isVisibility) ? \"at-end\" : \"at-start\", 400);\n\t\t\t}\n\t\t\tpattern[0] = false;\n\n\t\t\treturn sequence;\n\t\t};\n\tlet more = true;\n\n\tfor (let part = 0; part < partsLength; part++) {\n\t\tsequence[part] = [];\n\t}\n\twhile (more) {\n\t\tconst bits: ([number, string] | [number, string, boolean])[] = [],\n\t\t\tunits: string[] = [];\n\t\tlet text: string,\n\t\t\tisUnitless = false,\n\t\t\thasNumbers = false;\n\n\t\tfor (let part = 0; part < partsLength; part++) {\n\t\t\tconst index = indexes[part]++,\n\t\t\t\ttoken = tokens[part][index];\n\n\t\t\tif (token) {\n\t\t\t\tconst num = token.match(rxNumber); // [ignore, change, number, unit]\n\n\t\t\t\tif (num) {\n\t\t\t\t\t// It's a number, possibly with a += change and unit.\n\t\t\t\t\tif (text) {\n\t\t\t\t\t\treturn returnStringType();\n\t\t\t\t\t}\n\t\t\t\t\tconst digits = parseFloat(num[2]),\n\t\t\t\t\t\tunit = num[3],\n\t\t\t\t\t\tchange = num[1] ? num[1][0] + unit : undefined,\n\t\t\t\t\t\tchangeOrUnit = change || unit;\n\n\t\t\t\t\tif (digits && !units.includes(changeOrUnit)) {\n\t\t\t\t\t\t// Will be an empty string at the least.\n\t\t\t\t\t\tunits.push(changeOrUnit);\n\t\t\t\t\t}\n\t\t\t\t\tif (!unit) {\n\t\t\t\t\t\tif (digits) {\n\t\t\t\t\t\t\thasNumbers = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tisUnitless = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbits[part] = change ? [digits, changeOrUnit, true] : [digits, changeOrUnit];\n\t\t\t\t} else if (bits.length) {\n\t\t\t\t\treturn returnStringType();\n\t\t\t\t} else {\n\t\t\t\t\t// It's a string.\n\t\t\t\t\tif (!text) {\n\t\t\t\t\t\ttext = token;\n\t\t\t\t\t} else if (text !== token) {\n\t\t\t\t\t\treturn returnStringType();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!part) {\n\t\t\t\tfor (; part < partsLength; part++) {\n\t\t\t\t\tconst index2 = indexes[part]++;\n\n\t\t\t\t\tif (tokens[part][index2]) {\n\t\t\t\t\t\treturn returnStringType();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// IMPORTANT: This is the exit point.\n\t\t\t\tmore = false;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\t// Different\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (text) {\n\t\t\taddString(text);\n\t\t} else if (units.length) {\n\t\t\tif (units.length === 2 && isUnitless && !hasNumbers) {\n\t\t\t\t// If we only have two units, and one is empty, and it's only empty on \"0\", then treat us as having one unit\n\t\t\t\tunits.splice(units[0] ? 1 : 0, 1);\n\t\t\t}\n\t\t\tif (units.length === 1) {\n\t\t\t\t// All the same units, so append number then unit.\n\t\t\t\tconst unit = units[0],\n\t\t\t\t\tfirstLetter = unit[0];\n\n\t\t\t\tswitch (firstLetter) {\n\t\t\t\t\tcase \"+\":\n\t\t\t\t\tcase \"-\":\n\t\t\t\t\tcase \"*\":\n\t\t\t\t\tcase \"/\":\n\t\t\t\t\t\tif (propertyName) {\n\t\t\t\t\t\t\tconsole.error(`Velocity: The first property must not contain a relative function \"${propertyName}\":`, parts);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpattern.push(false);\n\t\t\t\tfor (let part = 0; part < partsLength; part++) {\n\t\t\t\t\t(sequence[part] as any[]).push(bits[part][0]);\n\t\t\t\t}\n\t\t\t\taddString(unit);\n\t\t\t} else {\n\t\t\t\t// Multiple units, so must be inside a calc.\n\t\t\t\taddString(\"calc(\");\n\t\t\t\tconst patternCalc = pattern.length - 1; // Store the beginning of our calc.\n\n\t\t\t\tfor (let i = 0; i < units.length; i++) {\n\t\t\t\t\tconst unit = units[i],\n\t\t\t\t\t\tfirstLetter = unit[0],\n\t\t\t\t\t\tisComplex = firstLetter === \"*\" || firstLetter === \"/\",\n\t\t\t\t\t\tisMaths = isComplex || firstLetter === \"+\" || firstLetter === \"-\";\n\n\t\t\t\t\tif (isComplex) {\n\t\t\t\t\t\t// TODO: Not sure this should be done automatically!\n\t\t\t\t\t\tpattern[patternCalc] += \"(\";\n\t\t\t\t\t\taddString(\")\");\n\t\t\t\t\t}\n\t\t\t\t\tif (i) {\n\t\t\t\t\t\taddString(` ${isMaths ? firstLetter : \"+\"} `);\n\t\t\t\t\t}\n\t\t\t\t\tpattern.push(false);\n\t\t\t\t\tfor (let part = 0; part < partsLength; part++) {\n\t\t\t\t\t\tconst bit = bits[part],\n\t\t\t\t\t\t\tvalue = bit[1] === unit\n\t\t\t\t\t\t\t\t? bit[0]\n\t\t\t\t\t\t\t\t: bit.length === 3\n\t\t\t\t\t\t\t\t\t? sequence[part - 1][sequence[part - 1].length - 1]\n\t\t\t\t\t\t\t\t\t: isComplex ? 1 : 0;\n\n\t\t\t\t\t\t(sequence[part] as any[]).push(value);\n\t\t\t\t\t}\n\t\t\t\t\taddString(isMaths ? unit.substring(1) : unit);\n\t\t\t\t}\n\t\t\t\taddString(\")\");\n\t\t\t}\n\t\t}\n\t}\n\t// We've got here, so a valid sequence - now check and fix RGB rounding\n\t// and calc() nesting...\n\t// TODO: Nested calc(a + calc(b + c)) -> calc(a + (b + c))\n\tfor (let i = 0, inRGB = 0; i < pattern.length; i++) {\n\t\tconst text = pattern[i];\n\n\t\tif (isString(text)) {\n\t\t\tif (inRGB && (text as string).indexOf(\",\") >= 0) {\n\t\t\t\tinRGB++;\n\t\t\t} else if ((text as string).indexOf(\"rgb\") >= 0) {\n\t\t\t\tinRGB = 1;\n\t\t\t}\n\t\t} else if (inRGB) {\n\t\t\tif (inRGB < 4) {\n\t\t\t\tpattern[i] = true;\n\t\t\t} else {\n\t\t\t\tinRGB = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn sequence;\n}\n\n/**\n * Convert a string-based tween with start and end strings, into a pattern\n * based tween with arrays.\n */\nfunction explodeTween(propertyName: string, tween: VelocityTween, duration: number, starting?: boolean) {\n\tconst startValue: string = tween.start,\n\t\tendValue: string = tween.end;\n\n\tif (!isString(endValue) || !isString(startValue)) {\n\t\treturn;\n\t}\n\tlet sequence: Sequence = findPattern([startValue, endValue], propertyName);\n\n\tif (!sequence && starting) {\n\t\t// This little piece will take a startValue, split out the\n\t\t// various numbers in it, then copy the endValue into the\n\t\t// startValue while replacing the numbers in it to match the\n\t\t// original start numbers as a repeating sequence.\n\t\t// Finally this function will run again with the new\n\t\t// startValue and a now matching pattern.\n\t\tconst startNumbers = startValue.match(/\\d\\.?\\d*/g) || [\"0\"],\n\t\t\tcount = startNumbers.length;\n\t\tlet index = 0;\n\n\t\tsequence = findPattern([endValue.replace(/\\d+\\.?\\d*/g, () => {\n\t\t\treturn startNumbers[index++ % count];\n\t\t}), endValue], propertyName);\n\t}\n\tif (sequence) {\n\t\tif (Velocity.debug) {\n\t\t\tconsole.log(`Velocity: Sequence found:`, sequence);\n\t\t}\n\t\tsequence[0].percent = 0;\n\t\tsequence[1].percent = 1;\n\t\ttween.sequence = sequence;\n\t\tswitch (tween.easing) {\n\t\t\tcase Easings[\"at-start\"]:\n\t\t\tcase Easings[\"during\"]:\n\t\t\tcase Easings[\"at-end\"]:\n\t\t\t\tsequence[0].easing = sequence[1].easing = tween.easing;\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\n/**\n * Expand all queued animations that haven't gone yet\n *\n * This will automatically expand the properties map for any recently added\n * animations so that the start and end values are correct.\n */\nexport function validateTweens(activeCall: AnimationCall) {\n\t// This might be called on an already-ready animation\n\tif (State.firstNew === activeCall) {\n\t\tState.firstNew = activeCall._next;\n\t}\n\t// Check if we're actually already ready\n\tif (activeCall._flags & AnimationFlags.EXPANDED) { // tslint:disable-line:no-bitwise\n\t\treturn;\n\t}\n\tconst element = activeCall.element,\n\t\ttweens = activeCall.tweens,\n\t\tduration = getValue(activeCall.options.duration, defaults.duration);\n\n\t// tslint:disable-next-line:forin\n\tfor (const propertyName in tweens) {\n\t\tconst tween = tweens[propertyName];\n\n\t\tif (tween.start == null) {\n\t\t\t// Get the start value as it's not been passed in\n\t\t\tconst startValue = getPropertyValue(activeCall.element, propertyName);\n\n\t\t\tif (isString(startValue)) {\n\t\t\t\ttween.start = fixColors(startValue) as any;\n\t\t\t\texplodeTween(propertyName, tween, duration, true);\n\t\t\t} else if (!Array.isArray(startValue)) {\n\t\t\t\tconsole.warn(`bad type`, tween, propertyName, startValue);\n\t\t\t}\n\t\t}\n\t\tif (Velocity.debug) {\n\t\t\tconsole.log(`tweensContainer \"${propertyName}\": ${JSON.stringify(tween)}`, element);\n\t\t}\n\t}\n\tactiveCall._flags |= AnimationFlags.EXPANDED; // tslint:disable-line:no-bitwise\n}\n"
  },
  {
    "path": "src/constants.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Constants and defaults. These values should never change without a MINOR\n * version bump.\n */\n\n/**\n * Without this it will only un-prefix properties that have a valid \"normal\"\n * version.\n */\nexport const ALL_VENDOR_PREFIXES = true;\n\nexport const DURATION_FAST = 200;\nexport const DURATION_NORMAL = 400;\nexport const DURATION_SLOW = 600;\n\nexport const FUZZY_MS_PER_SECOND = 980;\n\nexport const DEFAULT_CACHE = true;\nexport const DEFAULT_DELAY = 0;\nexport const DEFAULT_DURATION = DURATION_NORMAL;\nexport const DEFAULT_EASING = \"swing\";\nexport const DEFAULT_FPSLIMIT = 60;\nexport const DEFAULT_LOOP = 0;\nexport const DEFAULT_PROMISE = true;\nexport const DEFAULT_PROMISE_REJECT_EMPTY = true;\nexport const DEFAULT_QUEUE = \"\";\nexport const DEFAULT_REPEAT = 0;\nexport const DEFAULT_SPEED = 1;\nexport const DEFAULT_SYNC = true;\n\nexport const CLASSNAME = \"velocity-animating\";\n\nexport const Duration = {\n\tfast: DURATION_FAST,\n\tnormal: DURATION_NORMAL,\n\tslow: DURATION_SLOW,\n};\n"
  },
  {
    "path": "src/fakeClass.js",
    "content": "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nfunction nn(C) {\n    return new Proxy(C, {\n        apply: function (t, _, a) {\n            var _a;\n            return new ((_a = t).bind.apply(_a, __spreadArrays([void 0], a)))();\n        }\n    });\n}\nvar $A = /** @class */ (function () {\n    function $A() {\n        this.x = 10;\n        // console.log('XXX', (this.constructor as any as $c).$c == $A.$c)\n        // console.log('YYY', this.constructor == $A);\n        // this.constructor = (this.constructor as any as $c).$c || this.constructor;\n        // Object.defineProperty(this, 'constructor', { value: (this.constructor as any as $c).$c || this.constructor });\n        Object.defineProperty(this, 'constructor', { value: this.constructor.$c });\n    }\n    $A.prototype.a = function () {\n        return this.x += 1;\n    };\n    $A.$c = A;\n    return $A;\n}());\nvar A = nn($A);\n$A.$c = A;\nObject.defineProperty(A, 'name', { value: 'A' });\nvar $B = /** @class */ (function (_super) {\n    __extends($B, _super);\n    function $B() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    $B.prototype.a = function () {\n        return this.x += 2;\n    };\n    $B.$c = B;\n    return $B;\n}($A));\nvar B = nn($B);\n$B.$c = B;\nObject.defineProperty(B, 'name', { value: 'B' });\nvar o = {\n    'new A()': new A(),\n    'A()': A(),\n    'new B()': new B(),\n    'B()': B()\n};\nconsole.log('$A.name:', $A.name);\nconsole.log('A.name:', A.name);\nconsole.log('$B.name:', $B.name);\nconsole.log('B.name:', B.name);\nfor (var k in o) {\n    var x = o[k];\n    console.log(\"---\\nx = \" + k);\n    console.log('console.log(x):      ', x);\n    console.log('x instanceof A:      ', x instanceof A);\n    console.log('x instanceof $A:     ', x instanceof $A);\n    console.log('x instanceof B:      ', x instanceof B);\n    console.log('x instanceof $B:     ', x instanceof $B);\n    console.log('x instanceof Proxy:  ', x instanceof Proxy);\n    console.log('x.constructor.name:  ', x.constructor.name);\n    console.log('x.constructor == A:  ', x.constructor == A);\n    console.log('x.constructor == $A: ', x.constructor == $A);\n    console.log('x.constructor == B:  ', x.constructor == B);\n    console.log('x.constructor == $B: ', x.constructor == $B);\n    console.log('x.hasOwnProperty(\\'constructor\\'): ', x.hasOwnProperty('constructor'));\n    console.log('x.propertyIsEnumerable(\\'constructor\\'): ', x.propertyIsEnumerable('constructor'));\n    console.log('x.a():', x.a());\n    console.log('x.a():', x.a());\n    console.log('x.a():', x.a());\n}\n"
  },
  {
    "path": "src/fakeClass.ts",
    "content": "// rsp:\ntype NC<X> = { new(): X };\ntype FC<X> = { (): X };\ntype MC<X> = NC<X> & FC<X>;\nfunction nn<X>(C: NC<X>): MC<X> {\n    return new Proxy(C, {\n        apply: (t, _, a) => new (<any>t)(...a)\n    }) as MC<X>;\n}\n\ntype $c = { $c: Function };\n\nclass $A {\n    static $c = A;\n    x: number;\n    constructor() {\n        this.x = 10;\n        // console.log('XXX', (this.constructor as any as $c).$c == $A.$c)\n        // console.log('YYY', this.constructor == $A);\n        // this.constructor = (this.constructor as any as $c).$c || this.constructor;\n        // Object.defineProperty(this, 'constructor', { value: (this.constructor as any as $c).$c || this.constructor });\n        Object.defineProperty(this, 'constructor', { value: (this.constructor as any as $c).$c });\n    }\n    a() {\n        return this.x += 1;\n    }\n}\ntype A = $A;\nvar A: MC<A> = nn($A);\n$A.$c = A;\nObject.defineProperty(A, 'name', { value: 'A' });\n\nclass $B extends $A {\n    static $c = B;\n    a() {\n        return this.x += 2;\n    }\n}\ntype B = $B;\nvar B: MC<B> = nn($B);\n$B.$c = B;\nObject.defineProperty(B, 'name', { value: 'B' });\n\nconst o: { [s: string]: A } = {\n    'new A()': new A(),\n    'A()': A(),\n    'new B()': new B(),\n    'B()': B(),\n};\n\nconsole.log('$A.name:', $A.name);\nconsole.log('A.name:', A.name);\nconsole.log('$B.name:', $B.name);\nconsole.log('B.name:', B.name);\n\nfor (let k in o) {\n    const x: A = o[k];\n    console.log(`---\\nx = ${k}`);\n    console.log('console.log(x):      ', x);\n    console.log('x instanceof A:      ', x instanceof A);\n    console.log('x instanceof $A:     ', x instanceof $A);\n    console.log('x instanceof B:      ', x instanceof B);\n    console.log('x instanceof $B:     ', x instanceof $B);\n    console.log('x instanceof Proxy:  ', x instanceof Proxy);\n    console.log('x.constructor.name:  ', x.constructor.name);\n    console.log('x.constructor == A:  ', x.constructor == A);\n    console.log('x.constructor == $A: ', x.constructor == $A);\n    console.log('x.constructor == B:  ', x.constructor == B);\n    console.log('x.constructor == $B: ', x.constructor == $B);\n    console.log('x.hasOwnProperty(\\'constructor\\'): ', x.hasOwnProperty('constructor'));\n    console.log('x.propertyIsEnumerable(\\'constructor\\'): ', x.propertyIsEnumerable('constructor'));\n    console.log('x.a():', x.a());\n    console.log('x.a():', x.a());\n    console.log('x.a():', x.a());\n}\n"
  },
  {
    "path": "src/tsconfig.json",
    "content": "{\n    \"extends\": \"../tsconfig.json\",\n    \"files\": [\n\t\t\"velocity.ts\"\n\t]\n}\n"
  },
  {
    "path": "src/types.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Runtime type checking methods.\n */\n\n// Typedefs\nimport {HTMLorSVGElement, VelocityResult} from \"./../velocity.d\";\n\n/**\n * Check if a variable is a boolean.\n */\nexport function isBoolean(variable: any): variable is boolean {\n\treturn variable === true || variable === false;\n}\n\n/**\n * Check if a variable is an empty object.\n */\nexport function isEmptyObject(variable: {}): variable is {} {\n\tfor (const name in variable) {\n\t\tif (variable.hasOwnProperty(name)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/**\n * Check if a variable is a function.\n */\nexport function isFunction(variable: any): variable is Function { // tslint:disable-line:ban-types\n\treturn Object.prototype.toString.call(variable) === \"[object Function]\";\n}\n\n/**\n * Check if a variable is an HTMLElement or SVGElement.\n */\nexport function isNode(variable: any): variable is HTMLorSVGElement {\n\treturn !!(variable && (variable as Element).nodeType);\n}\n\n/**\n * Check if a variable is a number.\n */\nexport function isNumber(variable: any): variable is number {\n\treturn typeof variable === \"number\";\n}\n\n/**\n * Faster way to parse a string/number as a number https://jsperf.com/number-vs-parseint-vs-plus/3\n */\nexport function isNumberWhenParsed(variable: any): variable is number {\n\treturn !isNaN(Number(variable));\n}\n\n/**\n * Check if a variable is a plain object (and not an instance).\n */\nexport function isPlainObject(variable: any): variable is {} {\n\tif (!variable || typeof variable !== \"object\" || (variable as Element).nodeType || Object.prototype.toString.call(variable) !== \"[object Object]\") {\n\t\treturn false;\n\t}\n\tconst proto = Object.getPrototypeOf(variable) as object;\n\n\treturn !proto || (proto.hasOwnProperty(\"constructor\") && proto.constructor === Object);\n}\n\n/**\n * Check if a variable is an SVGElement.\n */\nexport function isSVG(variable: any): variable is SVGElement {\n\treturn SVGElement && variable instanceof SVGElement;\n}\n\n/**\n * Check if a variable is a string.\n */\nexport function isString(variable: any): variable is string {\n\treturn typeof variable === \"string\";\n}\n\n/**\n * Check if a variable is the result of calling Velocity.\n */\nexport function isVelocityResult(variable: any): variable is VelocityResult {\n\treturn variable && isNumber((variable as VelocityResult).length) && isFunction((variable as VelocityResult).velocity);\n}\n\n/**\n * Check if a variable is an array-like wrapped jQuery, Zepto or similar, where\n * each indexed value is a Node.\n */\n\nexport function isWrapped(variable: any): variable is HTMLorSVGElement[] {\n\treturn variable\n\t\t&& variable !== window\n\t\t&& isNumber((variable as HTMLorSVGElement[]).length)\n\t\t&& !isString(variable)\n\t\t&& !isFunction(variable)\n\t\t&& !isNode(variable)\n\t\t&& ((variable as HTMLorSVGElement[]).length === 0 || isNode(variable[0]));\n}\n\n/**\n * Check is a property is an enumerable member of an object.\n */\nexport function propertyIsEnumerable(obj: object, property: string): boolean {\n\treturn Object.prototype.propertyIsEnumerable.call(obj, property);\n}\n"
  },
  {
    "path": "src/utility.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Typedefs\nimport {HTMLorSVGElement} from \"./../velocity.d\";\n\n// Project\nimport {isNode} from \"./types\";\n\n/**\n * Add a single className to an Element.\n */\nexport function addClass(element: HTMLorSVGElement, className: string): void {\n\tif (element instanceof Element) {\n\t\tif (element.classList) {\n\t\t\telement.classList.add(className);\n\t\t} else {\n\t\t\tremoveClass(element, className);\n\t\t\t(element as any).className += (element.className.length ? \" \" : \"\") + className;\n\t\t}\n\t}\n}\n\n/**\n * Clone an array, works for array-like too.\n */\nexport function cloneArray<T = any>(arrayLike: T[] | ArrayLike<T>): T[] {\n\treturn Array.prototype.slice.call(arrayLike, 0);\n}\n\n/**\n * The <strong><code>defineProperty()</code></strong> function provides a\n * shortcut to defining a property that cannot be accidentally iterated across.\n */\nexport function defineProperty(proto: any, name: string, value: any, readonly?: boolean) {\n\tif (proto) {\n\t\tObject.defineProperty(proto, name, {\n\t\t\tconfigurable: !readonly,\n\t\t\twritable: !readonly,\n\t\t\tvalue,\n\t\t});\n\t}\n}\n\n/**\n * When there are multiple locations for a value pass them all in, then get the\n * first value that is valid.\n */\nexport function getValue<T>(...args: T[]): T {\n\tfor (const arg of args) {\n\t\tif (arg !== undefined && arg === arg) {\n\t\t\treturn arg;\n\t\t}\n\t}\n}\n\n/**\n * Shim to get the current milliseconds - on anything except old IE it'll use\n * Date.now() and save creating an object. If that doesn't exist then it'll\n * create one that gets GC.\n */\nexport const now = Date.now ? Date.now : () => {\n\treturn (new Date()).getTime();\n};\n\n/**\n * Remove a single className from an Element.\n */\nexport function removeClass(element: HTMLorSVGElement, className: string): void {\n\tif (element instanceof Element) {\n\t\tif (element.classList) {\n\t\t\telement.classList.remove(className);\n\t\t} else {\n\t\t\t// TODO: Need some jsperf tests on performance - can we get rid of the regex and maybe use split / array manipulation?\n\t\t\t(element as any).className = element.className.replace(new RegExp(`(^|\\\\s)${className}(\\\\s|$)`, \"gi\"), \" \");\n\t\t}\n\t}\n}\n\n/**\n * Convert an element or array-like element list into an array if needed.\n */\nexport function sanitizeElements(elements: HTMLorSVGElement | HTMLorSVGElement[]): HTMLorSVGElement[] {\n\treturn isNode(elements)\n\t\t? [elements] as HTMLorSVGElement[]\n\t\t: elements as HTMLorSVGElement[];\n}\n"
  },
  {
    "path": "src/velocity.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Extended Velocity members.\n */\n\n// Typedefs\nimport {\n\tSequenceList, StrictVelocityOptions, Velocity as VelocityPublic,\n\tVelocityActionFn, VelocityEasingFn, VelocityState,\n} from \"./../velocity.d\";\n\n// Project\nimport { defineProperty } from \"./utility\";\nimport { Actions as ActionsObject } from \"./Velocity/actions/actions\";\nimport { defaults as DefaultObject } from \"./Velocity/defaults\";\nimport { Easings as EasingsObject } from \"./Velocity/easing/easings\";\nimport { patch as patchFn } from \"./Velocity/patch\";\nimport { SequencesObject } from \"./Velocity/sequencesObject\";\nimport { State as StateObject } from \"./Velocity/state\";\nimport { Velocity as VelocityFn } from \"./velocityFn\";\n\n// Build the entire library, even optional bits.\nimport \"./Velocity/_all\";\n\n// Constants\nimport { VERSION } from \"../version\";\nconst Velocity: VelocityPublic = VelocityFn as any;\n\n/**\n * These parts of Velocity absolutely must be included, even if they're unused!\n */\nnamespace VelocityStatic {\n\t/**\n\t * Actions cannot be replaced if they are internal (hasOwnProperty is false\n\t * but they still exist). Otherwise they can be replaced by users.\n\t *\n\t * All external method calls should be using actions rather than sub-calls\n\t * of Velocity itself.\n\t */\n\texport const Actions: { [name: string]: VelocityActionFn } = ActionsObject;\n\n\t/**\n\t * Our known easing functions.\n\t */\n\texport const Easings: { [name: string]: VelocityEasingFn } = EasingsObject;\n\n\t/**\n\t * The currently registered sequences.\n\t */\n\texport const Sequences: { [name: string]: SequenceList } = SequencesObject;\n\n\t/**\n\t * Current internal state of Velocity.\n\t */\n\texport const State: VelocityState = StateObject; // tslint:disable-line:no-shadowed-variable\n\n\t/**\n\t * Velocity option defaults, which can be overriden by the user.\n\t */\n\texport const defaults: StrictVelocityOptions & { reset?: () => void } = DefaultObject as any;\n\n\t/**\n\t * Used to patch any object to allow Velocity chaining. In order to chain an\n\t * object must either be treatable as an array - with a <code>.length</code>\n\t * property, and each member a Node, or a Node directly.\n\t *\n\t * By default Velocity will try to patch <code>window</code>,\n\t * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n\t * Nodes or lists of Nodes.\n\t */\n\texport const patch = patchFn;\n\n\t/**\n\t * Set to true, 1 or 2 (most verbose) to output debug info to console.\n\t */\n\texport let debug: boolean | 1 | 2 = false;\n\n\t/**\n\t * In mock mode, all animations are forced to complete immediately upon the\n\t * next rAF tick. If there are further animations queued then they will each\n\t * take one single frame in turn. Loops and repeats will be disabled while\n\t * <code>mock = true</code>.\n\t */\n\texport let mock: boolean = false;\n\n\t/**\n\t * Save our version number somewhere visible.\n\t */\n\texport const version = VERSION;\n\n\t/**\n\t * Added as a fallback for \"import {Velocity} from 'velocity-animate';\".\n\t */\n\texport const Velocity: VelocityPublic = VelocityFn as any; // tslint:disable-line:no-shadowed-variable\n}\n\n/* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */\nconst IE = (() => {\n\tinterface IEDocument extends Document {\n\t\tdocumentMode: any; // IE\n\t}\n\n\tif ((document as IEDocument).documentMode) {\n\t\treturn (document as IEDocument).documentMode;\n\t} else {\n\t\tfor (let i = 7; i > 4; i--) {\n\t\t\tlet div = document.createElement(\"div\");\n\n\t\t\tdiv.innerHTML = `<!${\"--\"}[if IE ${i}]><span></span><![endif]-->`;\n\t\t\tif (div.getElementsByTagName(\"span\").length) {\n\t\t\t\tdiv = null;\n\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n})();\n\n/******************\n Unsupported\n ******************/\n\nif (IE <= 8) {\n\tthrow new Error(\"VelocityJS cannot run on Internet Explorer 8 or earlier\");\n}\n\n/******************\n Frameworks\n ******************/\n\nif (window) {\n\t/*\n\t * Both jQuery and Zepto allow their $.fn object to be extended to allow\n\t * wrapped elements to be subjected to plugin calls. If either framework is\n\t * loaded, register a \"velocity\" extension pointing to Velocity's core\n\t * animate() method. Velocity also registers itself onto a global container\n\t * (window.jQuery || window.Zepto || window) so that certain features are\n\t * accessible beyond just a per-element scope. Accordingly, Velocity can\n\t * both act on wrapped DOM elements and stand alone for targeting raw DOM\n\t * elements.\n\t */\n\tconst jQuery: { fn: any } = (window as any).jQuery,\n\t\tZepto: { fn: any } = (window as any).Zepto;\n\n\tpatchFn(window, true);\n\tpatchFn(Element && Element.prototype);\n\tpatchFn(NodeList && NodeList.prototype);\n\tpatchFn(HTMLCollection && HTMLCollection.prototype);\n\n\tpatchFn(jQuery, true);\n\tpatchFn(jQuery && jQuery.fn);\n\n\tpatchFn(Zepto, true);\n\tpatchFn(Zepto && Zepto.fn);\n}\n\n// Make sure that the values within Velocity are read-only and upatchable.\nfor (const property in VelocityStatic) {\n\tif (VelocityStatic.hasOwnProperty(property)) {\n\t\tswitch (typeof property) {\n\t\t\tcase \"number\":\n\t\t\tcase \"boolean\":\n\t\t\t\tdefineProperty(Velocity, property, {\n\t\t\t\t\tget() {\n\t\t\t\t\t\treturn VelocityStatic[property];\n\t\t\t\t\t},\n\t\t\t\t\tset(value) {\n\t\t\t\t\t\t(VelocityStatic[property] as any) = value;\n\t\t\t\t\t},\n\t\t\t\t}, true);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tdefineProperty(Velocity, property, VelocityStatic[property], true);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nObject.freeze(Velocity);\n\nexport default Velocity; // tslint:disable-line:no-default-export\n"
  },
  {
    "path": "src/velocityFn.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Core \"Velocity\" function.\n */\n\n// Typedefs\nimport {\n\tAnimationCall, AnimationFlags, HTMLorSVGElement, Properties, StrictVelocityOptions,\n\tVelocityElements, VelocityObjectArgs, VelocityOptionFn, VelocityOptions, VelocityPromise,\n\tVelocityProperty, VelocityResult,\n} from \"./../velocity.d\";\n\n// Project\nimport { isBoolean, isFunction, isNode, isNumber, isPlainObject, isString, isVelocityResult, isWrapped } from \"./types\";\nimport { cloneArray, defineProperty, getValue } from \"./utility\";\nimport { Data } from \"./Velocity/data\";\nimport {\n\tvalidateBegin, validateComplete, validateDelay, validateDuration, validateEasing,\n\tvalidateLoop, validateProgress, validateQueue, validateRepeat, validateSpeed, validateSync,\n} from \"./Velocity/options\";\nimport { patch as patchFn } from \"./Velocity/patch\";\nimport { queue } from \"./Velocity/queue\";\nimport { expandSequence } from \"./Velocity/sequences\";\nimport { tick } from \"./Velocity/tick\";\nimport { expandProperties } from \"./Velocity/tweens\";\n\nimport { Actions as ActionsObject } from \"./Velocity/actions/actions\";\nimport { defaults as DefaultObject } from \"./Velocity/defaults\";\nimport { SequencesObject } from \"./Velocity/sequencesObject\";\nimport { State as StateObject } from \"./Velocity/state\";\n\nlet globalPromise: PromiseConstructor;\n\ntry {\n\tglobalPromise = Promise;\n} catch {/**/ }\n\nconst noPromiseOption = \", if that is deliberate then pass `promiseRejectEmpty:false` as an option\";\n\n/**\n * Patch a VelocityResult with a Promise.\n */\nfunction patchPromise(promiseObject: Promise<any>, result: VelocityResult) {\n\tdefineProperty(result, \"promise\", promiseObject);\n\tdefineProperty(result, \"then\", promiseObject.then.bind(promiseObject));\n\tdefineProperty(result, \"catch\", promiseObject.catch.bind(promiseObject));\n\tif ((promiseObject as any).finally) {\n\t\t// Semi-standard\n\t\tdefineProperty(result, \"finally\", (promiseObject as any).finally.bind(promiseObject));\n\t}\n}\n\n/* tslint:disable:max-line-length */\n/**\n * The main Velocity function. Acts as a gateway to everything else.\n */\nexport function Velocity(options: VelocityObjectArgs): VelocityResult;\nexport function Velocity(elements: VelocityElements, propertyMap: string | Properties<VelocityProperty>, options?: VelocityOptions): VelocityResult;\nexport function Velocity(elements: VelocityElements, propertyMap: string | Properties<VelocityProperty>, duration?: number | \"fast\" | \"normal\" | \"slow\", complete?: () => void): VelocityResult;\nexport function Velocity(elements: VelocityElements, propertyMap: string | Properties<VelocityProperty>, complete?: () => void): VelocityResult;\nexport function Velocity(elements: VelocityElements, propertyMap: string | Properties<VelocityProperty>, easing?: string | number[], complete?: () => void): VelocityResult;\nexport function Velocity(elements: VelocityElements, propertyMap: string | Properties<VelocityProperty>, duration?: number | \"fast\" | \"normal\" | \"slow\", easing?: string | number[], complete?: () => void): VelocityResult;\nexport function Velocity(this: VelocityElements, propertyMap: string | Properties<VelocityProperty>, duration?: number | \"fast\" | \"normal\" | \"slow\", complete?: () => void): VelocityResult;\nexport function Velocity(this: VelocityElements, propertyMap: string | Properties<VelocityProperty>, complete?: () => void): VelocityResult;\nexport function Velocity(this: VelocityElements, propertyMap: string | Properties<VelocityProperty>, easing?: string | number[], complete?: () => void): VelocityResult;\nexport function Velocity(this: VelocityElements, propertyMap: string | Properties<VelocityProperty>, duration?: number | \"fast\" | \"normal\" | \"slow\", easing?: string | number[], complete?: () => void): VelocityResult;\n/* tslint:enable:max-line-length */\nexport function Velocity(this: VelocityElements | void, ...args: any[]): VelocityResult {\n\tconst\n\t\t/**\n\t\t * A shortcut to the default options.\n\t\t */\n\t\tdefaults = DefaultObject,\n\t\t/**\n\t\t * Cache of the first argument - this is used often enough to be saved.\n\t\t */\n\t\targs0 = args[0] as VelocityObjectArgs,\n\t\t/**\n\t\t * To allow for expressive CoffeeScript code, Velocity supports an\n\t\t * alternative syntax in which \"elements\" (or \"e\"), \"properties\" (or\n\t\t * \"p\"), and \"options\" (or \"o\") objects are defined on a container\n\t\t * object that's passed in as Velocity's sole argument.\n\t\t *\n\t\t * Note: Some browsers automatically populate arguments with a\n\t\t * \"properties\" object. We detect it by checking for its default\n\t\t * \"names\" property.\n\t\t */\n\t\t// TODO: Confirm which browsers - if <=IE8 the we can drop completely\n\t\tsyntacticSugar = isPlainObject(args0) && (args0.p || ((isPlainObject(args0.properties) && !(args0.properties as any).names) || isString(args0.properties)));\n\tlet\n\t\t/**\n\t\t *  When Velocity is called via the utility function (Velocity()),\n\t\t * elements are explicitly passed in as the first parameter. Thus,\n\t\t * argument positioning varies.\n\t\t */\n\t\targumentIndex: number = 0,\n\t\t/**\n\t\t * The list of elements, extended with Promise and Velocity.\n\t\t */\n\t\telements: VelocityResult,\n\t\t/**\n\t\t * The properties being animated. This can be a string, in which case it\n\t\t * is either a function for these elements, or it is a \"named\" animation\n\t\t * sequence to use instead. Named sequences start with either \"callout.\"\n\t\t * or \"transition.\". When used as a callout the values will be reset\n\t\t * after finishing. When used as a transtition then there is no special\n\t\t * handling after finishing.\n\t\t */\n\t\tpropertiesMap: string | Properties<VelocityProperty>,\n\t\t/**\n\t\t * Options supplied, this will be mapped and validated into\n\t\t * <code>options</code>.\n\t\t */\n\t\toptionsMap: VelocityOptions,\n\t\t/**\n\t\t * If called via a chain then this contains the <b>last</b> calls\n\t\t * animations. If this does not have a value then any access to the\n\t\t * element's animations needs to be to the currently-running ones.\n\t\t */\n\t\tanimations: AnimationCall[],\n\t\t/**\n\t\t * The promise that is returned.\n\t\t */\n\t\tpromise: Promise<VelocityResult>,\n\t\t// Used when the animation is finished\n\t\tresolver: (value?: VelocityResult) => void,\n\t\t// Used when there was an issue with one or more of the Velocity arguments\n\t\trejecter: (reason: any) => void;\n\n\t//console.log(`Velocity`, args)\n\t// First get the elements, and the animations connected to the last call if\n\t// this is chained.\n\t// TODO: Clean this up a bit\n\t// TODO: Throw error if the chain is called with elements as the first argument. isVelocityResult(this) && ( (isNode(arg0) || isWrapped(arg0)) && arg0 == this)\n\tif (isNode(this)) {\n\t\t// This is from a chain such as document.getElementById(\"\").velocity(...)\n\t\telements = [this as HTMLorSVGElement] as VelocityResult;\n\t} else if (isWrapped(this)) {\n\t\t// This might be a chain from something else, but if chained from a\n\t\t// previous Velocity() call then grab the animations it's related to.\n\t\telements = cloneArray(this as HTMLorSVGElement[]) as VelocityResult;\n\t\tif (isVelocityResult(this)) {\n\t\t\tanimations = (this as VelocityResult).velocity.animations;\n\t\t}\n\t} else if (syntacticSugar) {\n\t\telements = cloneArray(args0.elements || args0.e) as VelocityResult;\n\t\targumentIndex++;\n\t} else if (isNode(args0)) {\n\t\telements = cloneArray([args0]) as VelocityResult;\n\t\targumentIndex++;\n\t} else if (isWrapped(args0)) {\n\t\telements = cloneArray(args0) as VelocityResult;\n\t\targumentIndex++;\n\t}\n\t// Allow elements to be chained.\n\tif (elements) {\n\t\tdefineProperty(elements, \"velocity\", Velocity.bind(elements));\n\t\tif (animations) {\n\t\t\tdefineProperty(elements.velocity, \"animations\", animations);\n\t\t}\n\t}\n\t// Next get the propertiesMap and options.\n\tif (syntacticSugar) {\n\t\tpropertiesMap = getValue(args0.properties, args0.p);\n\t} else {\n\t\t// TODO: Should be possible to call Velocity(\"pauseAll\") - currently not possible\n\t\tpropertiesMap = args[argumentIndex++] as string | Properties<VelocityProperty>;\n\t}\n\t// Get any options map passed in as arguments first, expand any direct\n\t// options if possible.\n\tconst isReverse = propertiesMap === \"reverse\",\n\t\tisAction = !isReverse && isString(propertiesMap),\n\t\tmaybeSequence = isAction && SequencesObject[propertiesMap as string],\n\t\topts = syntacticSugar ? getValue(args0.options, args0.o) : args[argumentIndex];\n\n\tif (isPlainObject(opts)) {\n\t\toptionsMap = opts;\n\t}\n\t// Create the promise if supported and wanted.\n\tif (globalPromise && getValue(optionsMap && optionsMap.promise, defaults.promise)) {\n\t\tpromise = new globalPromise((resolve, reject) => {\n\t\t\trejecter = reject;\n\t\t\t// IMPORTANT:\n\t\t\t// If a resolver tries to run on a Promise then it will wait until\n\t\t\t// that Promise resolves - but in this case we're running on our own\n\t\t\t// Promise, so need to make sure it's not seen as one. Removing\n\t\t\t// these values for the duration of the resolve.\n\t\t\t// Due to being an async call, they should be back to \"normal\"\n\t\t\t// before the <code>.then()</code> function gets called.\n\t\t\tresolver = (result: VelocityResult) => {\n\t\t\t\tif (isVelocityResult(result) && result.promise) {\n\t\t\t\t\tdelete result.then;\n\t\t\t\t\tdelete result.catch;\n\t\t\t\t\tdelete (result as any).finally;\n\t\t\t\t\tresolve(result);\n\t\t\t\t\tpatchPromise(result.promise, result);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t\tif (elements) {\n\t\t\tpatchPromise(promise, elements);\n\t\t}\n\t}\n\tif (promise) {\n\t\tconst optionPromiseRejectEmpty = optionsMap && optionsMap.promiseRejectEmpty,\n\t\t\tpromiseRejectEmpty: boolean = getValue(optionPromiseRejectEmpty, defaults.promiseRejectEmpty);\n\n\t\tif (!elements && !isAction) {\n\t\t\tif (promiseRejectEmpty) {\n\t\t\t\trejecter(`Velocity: No elements supplied${isBoolean(optionPromiseRejectEmpty) ? \"\" : noPromiseOption}. Aborting.`);\n\t\t\t} else {\n\t\t\t\tresolver();\n\t\t\t}\n\t\t} else if (!propertiesMap) {\n\t\t\tif (promiseRejectEmpty) {\n\t\t\t\trejecter(`Velocity: No properties supplied${isBoolean(optionPromiseRejectEmpty) ? \"\" : noPromiseOption}. Aborting.`);\n\t\t\t} else {\n\t\t\t\tresolver();\n\t\t\t}\n\t\t}\n\t}\n\tif ((!elements && !isAction) || !propertiesMap) {\n\t\treturn promise as any;\n\t}\n\n\t// NOTE: Can't use isAction here due to type inference - there are callbacks\n\t// between so the type isn't considered safe.\n\tif (isAction) {\n\t\tconst actionArgs: any[] = [],\n\t\t\tpromiseHandler: VelocityPromise = promise && {\n\t\t\t\t_promise: promise,\n\t\t\t\t_resolver: resolver,\n\t\t\t\t_rejecter: rejecter,\n\t\t\t};\n\n\t\twhile (argumentIndex < args.length) {\n\t\t\tactionArgs.push(args[argumentIndex++]);\n\t\t}\n\n\t\t// Velocity's behavior is categorized into \"actions\". If a string is\n\t\t// passed in instead of a propertiesMap then that will call a function\n\t\t// to do something special to the animation linked.\n\t\t// There is one special case - \"reverse\" - which is handled differently,\n\t\t// by being stored on the animation and then expanded when the animation\n\t\t// starts.\n\t\tconst action = (propertiesMap as string).replace(/\\..*$/, \"\"),\n\t\t\tcallback = ActionsObject[action];\n\n\t\tif (callback) {\n\t\t\tconst result = callback(actionArgs, elements, promiseHandler, propertiesMap as string);\n\n\t\t\tif (result !== undefined) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn elements || promise as any;\n\t\t} else if (!maybeSequence) {\n\t\t\tconsole.error(`VelocityJS: First argument (${propertiesMap}) was not a property map, a known action, or a registered redirect. Aborting.`);\n\n\t\t\treturn;\n\t\t}\n\t}\n\tlet hasValidDuration: boolean;\n\n\tif (isPlainObject(propertiesMap) || isReverse || maybeSequence) {\n\t\t/**\n\t\t * The options for this set of animations.\n\t\t */\n\t\tconst options: StrictVelocityOptions = {};\n\t\tlet isSync = defaults.sync;\n\n\t\t// Private options first - set as non-enumerable, and starting with an\n\t\t// underscore so we can filter them out.\n\t\tif (promise) {\n\t\t\tdefineProperty(options, \"_promise\", promise);\n\t\t\tdefineProperty(options, \"_rejecter\", rejecter);\n\t\t\tdefineProperty(options, \"_resolver\", resolver);\n\t\t}\n\t\tdefineProperty(options, \"_ready\", 0);\n\t\tdefineProperty(options, \"_started\", 0);\n\t\tdefineProperty(options, \"_completed\", 0);\n\t\tdefineProperty(options, \"_total\", 0);\n\n\t\t// Now check the optionsMap\n\t\tif (isPlainObject(optionsMap)) {\n\t\t\tconst validDuration = validateDuration(optionsMap.duration);\n\n\t\t\thasValidDuration = validDuration !== undefined;\n\t\t\toptions.duration = getValue(validDuration, defaults.duration);\n\t\t\toptions.delay = getValue(validateDelay(optionsMap.delay), defaults.delay);\n\t\t\t// Need the extra fallback here in case it supplies an invalid\n\t\t\t// easing that we need to overrride with the default.\n\t\t\toptions.easing = validateEasing(getValue(optionsMap.easing, defaults.easing), options.duration) || validateEasing(defaults.easing, options.duration);\n\t\t\toptions.loop = getValue(validateLoop(optionsMap.loop), defaults.loop);\n\t\t\toptions.repeat = options.repeatAgain = getValue(validateRepeat(optionsMap.repeat), defaults.repeat);\n\t\t\tif (optionsMap.speed != null) {\n\t\t\t\toptions.speed = getValue(validateSpeed(optionsMap.speed), 1);\n\t\t\t}\n\t\t\tif (isBoolean(optionsMap.promise)) {\n\t\t\t\toptions.promise = optionsMap.promise;\n\t\t\t}\n\t\t\toptions.queue = getValue(validateQueue(optionsMap.queue), defaults.queue);\n\t\t\tif (optionsMap.mobileHA && !StateObject.isGingerbread) {\n\t\t\t\t/* When set to true, and if this is a mobile device, mobileHA automatically enables hardware acceleration (via a null transform hack)\n\t\t\t\t on animating elements. HA is removed from the element at the completion of its animation. */\n\t\t\t\t/* Note: Android Gingerbread doesn't support HA. If a null transform hack (mobileHA) is in fact set, it will prevent other tranform subproperties from taking effect. */\n\t\t\t\t/* Note: You can read more about the use of mobileHA in Velocity's documentation: velocity-animate/#mobileHA. */\n\t\t\t\toptions.mobileHA = true;\n\t\t\t}\n\t\t\tif (optionsMap.drag === true) {\n\t\t\t\toptions.drag = true;\n\t\t\t}\n\t\t\tif (isNumber(optionsMap.stagger) || isFunction(optionsMap.stagger)) {\n\t\t\t\toptions.stagger = optionsMap.stagger;\n\t\t\t}\n\t\t\tif (!isReverse) {\n\t\t\t\tif (optionsMap[\"display\"] != null) {\n\t\t\t\t\t(propertiesMap as Properties<VelocityProperty>).display = optionsMap[\"display\"] as string;\n\t\t\t\t\tconsole.error(`Deprecated \"options.display\" used, this is now a property:`, optionsMap[\"display\"]);\n\t\t\t\t}\n\t\t\t\tif (optionsMap[\"visibility\"] != null) {\n\t\t\t\t\t(propertiesMap as Properties<VelocityProperty>).visibility = optionsMap[\"visibility\"] as string;\n\t\t\t\t\tconsole.error(`Deprecated \"options.visibility\" used, this is now a property:`, optionsMap[\"visibility\"]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TODO: Allow functional options for different options per element\n\t\t\tconst optionsBegin = validateBegin(optionsMap.begin),\n\t\t\t\toptionsComplete = validateComplete(optionsMap.complete),\n\t\t\t\toptionsProgress = validateProgress(optionsMap.progress),\n\t\t\t\toptionsSync = validateSync(optionsMap.sync);\n\n\t\t\tif (optionsBegin != null) {\n\t\t\t\toptions.begin = optionsBegin;\n\t\t\t}\n\t\t\tif (optionsComplete != null) {\n\t\t\t\toptions.complete = optionsComplete;\n\t\t\t}\n\t\t\tif (optionsProgress != null) {\n\t\t\t\toptions.progress = optionsProgress;\n\t\t\t}\n\t\t\tif (optionsSync != null) {\n\t\t\t\tisSync = optionsSync;\n\t\t\t}\n\t\t} else if (!syntacticSugar) {\n\t\t\t// Expand any direct options if possible.\n\t\t\tlet offset = 0;\n\n\t\t\toptions.duration = validateDuration(args[argumentIndex], true);\n\t\t\tif (options.duration === undefined) {\n\t\t\t\toptions.duration = defaults.duration;\n\t\t\t} else {\n\t\t\t\thasValidDuration = true;\n\t\t\t\toffset++;\n\t\t\t}\n\t\t\tif (!isFunction(args[argumentIndex + offset])) {\n\t\t\t\t// Despite coming before Complete, we can't pass a fn easing\n\t\t\t\tconst easing = validateEasing(args[argumentIndex + offset], getValue(options && validateDuration(options.duration), defaults.duration) as number, true);\n\n\t\t\t\tif (easing !== undefined) {\n\t\t\t\t\toffset++;\n\t\t\t\t\toptions.easing = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst complete = validateComplete(args[argumentIndex + offset], true);\n\n\t\t\tif (complete !== undefined) {\n\t\t\t\toptions.complete = complete;\n\t\t\t}\n\t\t\toptions.delay = defaults.delay;\n\t\t\toptions.loop = defaults.loop;\n\t\t\toptions.repeat = options.repeatAgain = defaults.repeat;\n\t\t}\n\n\t\tif (isReverse && options.queue === false) {\n\t\t\tthrow new Error(\"VelocityJS: Cannot reverse a queue:false animation.\");\n\t\t}\n\n\t\tif (!hasValidDuration && maybeSequence && maybeSequence.duration) {\n\t\t\toptions.duration = maybeSequence.duration;\n\t\t}\n\n\t\t// When a set of elements is targeted by a Velocity call, the set is\n\t\t// broken up and each element has the current Velocity call individually\n\t\t// queued onto it. In this way, each element's existing queue is\n\t\t// respected; some elements may already be animating and accordingly\n\t\t// should not have this current Velocity call triggered immediately\n\t\t// unless the sync:true option is used.\n\n\t\tconst rootAnimation: AnimationCall = {\n\t\t\toptions,\n\t\t\telements,\n\t\t\t_prev: undefined,\n\t\t\t_next: undefined,\n\t\t\t_flags: isSync ? AnimationFlags.SYNC : 0,\n\t\t\tpercentComplete: 0,\n\t\t\tellapsedTime: 0,\n\t\t\ttimeStart: 0,\n\t\t};\n\n\t\tanimations = [];\n\t\tfor (let index = 0; index < elements.length; index++) {\n\t\t\tconst element = elements[index];\n\t\t\tlet flags = 0;\n\n\t\t\tif (isNode(element)) { // TODO: This needs to check for valid animation targets, not just Elements\n\t\t\t\tif (isReverse) {\n\t\t\t\t\tconst lastAnimation = Data(element).lastAnimationList[options.queue as string];\n\n\t\t\t\t\tpropertiesMap = lastAnimation && lastAnimation.tweens as any;\n\t\t\t\t\tif (!propertiesMap) {\n\t\t\t\t\t\tconsole.error(`VelocityJS: Attempting to reverse an animation on an element with no previous animation:`, element);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tflags |= AnimationFlags.REVERSE & ~(lastAnimation._flags & AnimationFlags.REVERSE); // tslint:disable-line:no-bitwise\n\t\t\t\t}\n\t\t\t\tconst animation: AnimationCall = {\n\t\t\t\t\t...rootAnimation,\n\t\t\t\t\telement,\n\t\t\t\t\t_flags: rootAnimation._flags | flags, // tslint:disable-line:no-bitwise\n\t\t\t\t};\n\n\t\t\t\toptions._total++;\n\t\t\t\tanimations.push(animation);\n\t\t\t\tif (options.stagger) {\n\t\t\t\t\tif (isFunction(options.stagger)) {\n\t\t\t\t\t\tconst num = optionCallback(options.stagger, element, index, elements.length, elements, \"stagger\");\n\n\t\t\t\t\t\tif (isNumber(num)) {\n\t\t\t\t\t\t\tanimation.delay = options.delay + num;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tanimation.delay = options.delay + (options.stagger * index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (options.drag) {\n\t\t\t\t\tanimation.duration = options.duration - (options.duration * Math.max(1 - (index + 1) / elements.length, 0.75));\n\t\t\t\t}\n\t\t\t\tif (maybeSequence) {\n\t\t\t\t\texpandSequence(animation, maybeSequence);\n\t\t\t\t} else if (isReverse) {\n\t\t\t\t\t// In this case we're using the previous animation, so\n\t\t\t\t\t// it will be expanded correctly when that one runs.\n\t\t\t\t\tanimation.tweens = propertiesMap as any;\n\t\t\t\t} else {\n\t\t\t\t\tanimation.tweens = Object.create(null);\n\t\t\t\t\texpandProperties(animation, propertiesMap);\n\t\t\t\t}\n\t\t\t\tqueue(element, animation, options.queue);\n\t\t\t}\n\t\t}\n\t\tif (StateObject.isTicking === false) {\n\t\t\t// If the animation tick isn't running, start it. (Velocity shuts it\n\t\t\t// off when there are no active calls to process.)\n\t\t\ttick(false);\n\t\t}\n\t\tif (animations) {\n\t\t\tdefineProperty(elements.velocity, \"animations\", animations);\n\t\t}\n\t}\n\t/***************\n\t Chaining\n\t ***************/\n\n\t/* Return the elements back to the call chain, with wrapped elements taking precedence in case Velocity was called via the $.fn. extension. */\n\treturn elements || promise as any;\n}\n\n/**\n * Call an option callback in a try/catch block and report an error if needed.\n */\nfunction optionCallback<T>(fn: VelocityOptionFn<T>, element: HTMLorSVGElement, index: number, length: number, elements: HTMLorSVGElement[], option: string): T {\n\ttry {\n\t\treturn fn.call(element, index, length, elements, option);\n\t} catch (e) {\n\t\tconsole.error(`VelocityJS: Exception when calling '${option}' callback:`, e);\n\t}\n}\n"
  },
  {
    "path": "src-ui/attention_seekers/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./bounce\";\nimport \"./flash\";\nimport \"./headShake\";\nimport \"./jello\";\nimport \"./pulse\";\nimport \"./rubberBand\";\nimport \"./shake\";\nimport \"./swing\";\nimport \"./tada\";\nimport \"./wobble\";\n"
  },
  {
    "path": "src-ui/attention_seekers/bounce.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounce\", {\n\t\"duration\": 1000,\n\t\"0,100%\": {\n\t\ttransformOrigin: \"center bottom\",\n\t},\n\t\"0%,20%,53%,80%,100%\": {\n\t\ttransform: [\"translate3d(0,0px,0)\", \"easeOutCubic\"],\n\t},\n\t\"40%,43%\": {\n\t\ttransform: [\"translate3d(0,-30px,0)\", \"easeInQuint\"],\n\t},\n\t\"70%\": {\n\t\ttransform: [\"translate3d(0,-15px,0)\", \"easeInQuint\"],\n\t},\n\t\"90%\": {\n\t\ttransform: \"translate3d(0,-4px,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/flash.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"flash\", {\n\t\"duration\": 1000,\n\t\"0%,50%,100%\": {\n\t\topacity: \"1\",\n\t},\n\t\"25%,75%\": {\n\t\topacity: \"0\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/headShake.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"headShake\", {\n\t\"duration\": 1000,\n\t\"easing\": \"easeInOut\",\n\t\"0%\": {\n\t\ttransform: \"translateX(0) rotateY(0)\",\n\t},\n\t\"6.5%\": {\n\t\ttransform: \"translateX(-6px) rotateY(-9deg)\",\n\t},\n\t\"18.5%\": {\n\t\ttransform: \"translateX(5px) rotateY(7deg)\",\n\t},\n\t\"31.5%\": {\n\t\ttransform: \"translateX(-3px) rotateY(-5deg)\",\n\t},\n\t\"43.5%\": {\n\t\ttransform: \"translateX(2px) rotateY(3deg)\",\n\t},\n\t\"50%\": {\n\t\ttransform: \"translateX(0) rotateY(0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/jello.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"jello\", {\n\t\"duration\": 1000,\n\t\"0%,100%\": {\n\t\ttransformOrigin: \"center\",\n\t},\n\t\"0%,11.1%,100%\": {\n\t\ttransform: \"skewX(0) skewY(0)\",\n\t},\n\t\"22.2%\": {\n\t\ttransform: \"skewX(-12.5deg) skewY(-12.5deg)\",\n\t},\n\t\"33.3%\": {\n\t\ttransform: \"skewX(6.25deg) skewY(6.25deg)\",\n\t},\n\t\"44.4%\": {\n\t\ttransform: \"skewX(-3.125deg) skewY(-3.125deg)\",\n\t},\n\t\"55.5%\": {\n\t\ttransform: \"skewX(1.5625deg) skewY(1.5625deg)\",\n\t},\n\t\"66.6%\": {\n\t\ttransform: \"skewX(-0.78125deg) skewY(-0.78125deg)\",\n\t},\n\t\"77.7%\": {\n\t\ttransform: \"skewX(0.390625deg) skewY(0.390625deg)\",\n\t},\n\t\"88.8%\": {\n\t\ttransform: \"skewX(-0.1953125deg) skewY(-0.1953125deg)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/pulse.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"pulse\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"scale3d(1,1,1)\",\n\t},\n\t\"50%\": {\n\t\ttransform: \"scale3d(1.05,1.05,1.05)\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"scale3d(1,1,1)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/rubberBand.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rubberBand\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"scale3d(1,1,1)\",\n\t},\n\t\"30%\": {\n\t\ttransform: \"scale3d(1.25,0.75,1)\",\n\t},\n\t\"40%\": {\n\t\ttransform: \"scale3d(0.75,1.25,1)\",\n\t},\n\t\"50%\": {\n\t\ttransform: \"scale3d(1.15,0.85,1)\",\n\t},\n\t\"65%\": {\n\t\ttransform: \"scale3d(0.95,1.05,1)\",\n\t},\n\t\"75%\": {\n\t\ttransform: \"scale3d(1.05,0.95,1)\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"scale3d(1,1,1)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/shake.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"shake\", {\n\t\"duration\": 1000,\n\t\"0%,100%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"10%,30%,50%,70%,90%\": {\n\t\ttransform: \"translate3d(-10px,0,0)\",\n\t},\n\t\"20%,40%,60%,80%\": {\n\t\ttransform: \"translate3d(10px,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/swing.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"swing\", {\n\t\"duration\": 1000,\n\t\"0%,100%\": {\n\t\ttransform: \"rotate3d(0,0,1,0deg)\",\n\t\ttransformOrigin: \"center\",\n\t},\n\t\"20%\": {\n\t\ttransform: \"rotate3d(0,0,1,15deg)\",\n\t},\n\t\"40%\": {\n\t\ttransform: \"rotate3d(0,0,1,-10deg)\",\n\t},\n\t\"60%\": {\n\t\ttransform: \"rotate3d(0,0,1,5deg)\",\n\t},\n\t\"80%\": {\n\t\ttransform: \"rotate3d(0,0,1,-5deg)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/tada.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"tada\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"scale3d(1,1,1) rotate3d(0,0,0,0)\",\n\t},\n\t\"10%,20%\": {\n\t\ttransform: \"scale3d(0.9,0.9,0.9) rotate3d(0,0,1,-3deg)\",\n\t},\n\t\"30%,50%,70%,90%\": {\n\t\ttransform: \"scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)\",\n\t},\n\t\"40%,60%,80%\": {\n\t\ttransform: \"scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"scale3d(1, 1, 1) rotate3d(0,0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/attention_seekers/wobble.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"wobble\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(0,0,0) rotate3d(0,0,0,0)\",\n\t},\n\t\"15%\": {\n\t\ttransform: \"translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)\",\n\t},\n\t\"30%\": {\n\t\ttransform: \"translate3d(20%,0,0) rotate3d(0,0,1,3deg)\",\n\t},\n\t\"45%\": {\n\t\ttransform: \"translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)\",\n\t},\n\t\"60%\": {\n\t\ttransform: \"translate3d(10%,0,0) rotate3d(0,0,1,2deg)\",\n\t},\n\t\"75%\": {\n\t\ttransform: \"translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(0,0,0) rotate3d(0,0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_entrances/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./bounceIn\";\nimport \"./bounceInDown\";\nimport \"./bounceInLeft\";\nimport \"./bounceInRight\";\nimport \"./bounceInUp\";\n"
  },
  {
    "path": "src-ui/bouncing_entrances/bounceIn.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceIn\", {\n\t\"duration\": 750,\n\t\"easing\": \"easeOutCubic\",\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale3d(0.3,0.3,0.3)\",\n\t},\n\t\"20%\": {\n\t\ttransform: \"scale3d(1.1,1.1,1.1)\",\n\t},\n\t\"40%\": {\n\t\ttransform: \"scale3d(0.9,0.9,0.9)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale3d(1.03,1.03,1.03)\",\n\t},\n\t\"80%\": {\n\t\ttransform: \"scale3d(0.97,0.97,0.97)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale3d(1,1,1)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_entrances/bounceInDown.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceInDown\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,-3000px,0)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"translate3d(0,25px,0)\", \"easeOutCubic\"],\n\t},\n\t\"75%\": {\n\t\ttransform: [\"translate3d(0,-10px,0)\", \"easeOutCubic\"],\n\t},\n\t\"90%\": {\n\t\ttransform: [\"translate3d(0,5px,0)\", \"easeOutCubic\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"translate3d(0,0,0)\", \"easeOutCubic\"],\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_entrances/bounceInLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceInLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(-3000px,0,0)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"translate3d(25px,0,0)\", \"easeOutCubic\"],\n\t},\n\t\"75%\": {\n\t\ttransform: [\"translate3d(-10px,0,0)\", \"easeOutCubic\"],\n\t},\n\t\"90%\": {\n\t\ttransform: [\"translate3d(5px,0,0)\", \"easeOutCubic\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"translate3d(0,0,0)\", \"easeOutCubic\"],\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_entrances/bounceInRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceInRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(3000px,0,0)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"translate3d(-25px,0,0)\", \"easeOutCubic\"],\n\t},\n\t\"75%\": {\n\t\ttransform: [\"translate3d(10px,0,0)\", \"easeOutCubic\"],\n\t},\n\t\"90%\": {\n\t\ttransform: [\"translate3d(-5px,0,0)\", \"easeOutCubic\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"translate3d(0,0,0)\", \"easeOutCubic\"],\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_entrances/bounceInUp.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceInUp\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,3000px,0)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"translate3d(0,-25px,0)\", \"easeOutCubic\"],\n\t},\n\t\"75%\": {\n\t\ttransform: [\"translate3d(0,10px,0)\", \"easeOutCubic\"],\n\t},\n\t\"90%\": {\n\t\ttransform: [\"translate3d(0,-5px,0)\", \"easeOutCubic\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"translate3d(0,0,0)\", \"easeOutCubic\"],\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_exits/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./bounceOut\";\nimport \"./bounceOutDown\";\nimport \"./bounceOutLeft\";\nimport \"./bounceOutRight\";\nimport \"./bounceOutUp\";\n"
  },
  {
    "path": "src-ui/bouncing_exits/bounceOut.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceOut\", {\n\t\"duration\": 750,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale3d(1,1,1)\",\n\t},\n\t\"20%\": {\n\t\ttransform: \"scale3d(0.9,0.9,0.9)\",\n\t},\n\t\"50%,55%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale3d(1.1,1.1,1.1)\",\n\t},\n\t\"to\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale3d(0.3,0.3,0.3)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_exits/bounceOutDown.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceOutDown\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"20%\": {\n\t\ttransform: \"translate3d(0,10px,0)\",\n\t},\n\t\"40%,45%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,-20px,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,2000px,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_exits/bounceOutLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceOutLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"20%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(20px,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(-2000px,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_exits/bounceOutRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceOutRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"20%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(-20px,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(2000px,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/bouncing_exits/bounceOutUp.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"bounceOutUp\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"20%\": {\n\t\ttransform: \"translate3d(0,-10px,0)\",\n\t},\n\t\"40%,45%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,20px,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,-2000px,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./fadeIn\";\nimport \"./fadeInDown\";\nimport \"./fadeInDownBig\";\nimport \"./fadeInLeft\";\nimport \"./fadeInLeftBig\";\nimport \"./fadeInRight\";\nimport \"./fadeInRightBig\";\nimport \"./fadeInUp\";\nimport \"./fadeInUpBig\";\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeIn.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeIn\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeInDown.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeInDown\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,-100%,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeInDownBig.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeInDownBig\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,-2000px,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeInLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeInLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(-100%,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeInLeftBig.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeInLeftBig\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(-2000px,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeInRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeInRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(100%,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeInRightBig.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeInRightBig\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(2000px,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeInUp.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeInUp\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,100%,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_entrances/fadeInUpBig.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeInUpBig\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,2000px,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./fadeOut\";\nimport \"./fadeOutDown\";\nimport \"./fadeOutDownBig\";\nimport \"./fadeOutLeft\";\nimport \"./fadeOutLeftBig\";\nimport \"./fadeOutRight\";\nimport \"./fadeOutRightBig\";\nimport \"./fadeOutUp\";\nimport \"./fadeOutUpBig\";\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOut.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOut\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOutDown.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOutDown\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,100%,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOutDownBig.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOutDownBig\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,2000px,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOutLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOutLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(-100%,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOutLeftBig.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOutLeftBig\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(-2000px,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOutRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOutRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(100%,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOutRightBig.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOutRightBig\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(2000px,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOutUp.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOutUp\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,-100%,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/fading_exits/fadeOutUpBig.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"fadeOutUpBig\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(0,-2000px,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/flippers/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./flip\";\nimport \"./flipInX\";\nimport \"./flipInY\";\nimport \"./flipOutX\";\nimport \"./flipOutY\";\n"
  },
  {
    "path": "src-ui/flippers/flip.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"flip\", {\n\t\"duration\": 1000,\n\t\"0%,100%\": {\n\t\tbackfaceVisibility: \"visible\",\n\t},\n\t\"0%\": {\n\t\ttransform: [\"perspective(400px) translate3d(0,0,0) rotate3d(0,1,0,-360deg) scale3d(1,1,1)\", \"easeOut\"],\n\t},\n\t\"40%\": {\n\t\ttransform: [\"perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg) scale3d(1,1,1)\", \"easeOut\"],\n\t},\n\t\"50%\": {\n\t\ttransform: [\"perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg) scale3d(1,1,1)\", \"easeIn\"],\n\t},\n\t\"80%\": {\n\t\ttransform: [\"perspective(400px) translate3d(0,0,0) rotate3d(0,1,0,0) scale3d(0.95,0.95,0.95)\", \"easeIn\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"perspective(400px) translate3d(0,0,0) rotate3d(0,0,0,0) scale3d(1,1,1)\", \"ease-in\"],\n\t},\n});\n"
  },
  {
    "path": "src-ui/flippers/flipInX.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"flipInX\", {\n\t\"duration\": 1000,\n\t\"0%,100%\": {\n\t\tbackfaceVisibility: \"visible\",\n\t},\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"perspective(400px) rotate3d(1,0,0,90deg)\",\n\t},\n\t\"40%\": {\n\t\ttransform: [\"perspective(400px) rotate3d(1,0,0,-20deg)\", \"easeIn\"],\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"perspective(400px) rotate3d(1,0,0,10deg)\",\n\t},\n\t\"80%\": {\n\t\ttransform: \"perspective(400px) rotate3d(1,0,0,-5deg)\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"perspective(400px) rotate3d(1,0,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/flippers/flipInY.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"flipInY\", {\n\t\"duration\": 1000,\n\t\"0%,100%\": {\n\t\tbackfaceVisibility: \"visible\",\n\t},\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"perspective(400px) rotate3d(0,1,0,90deg)\",\n\t},\n\t\"40%\": {\n\t\ttransform: [\"perspective(400px) rotate3d(0,1,0,-20deg)\", \"easeIn\"],\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"perspective(400px) rotate3d(0,1,0,10deg)\",\n\t},\n\t\"80%\": {\n\t\ttransform: \"perspective(400px) rotate3d(0,1,0,-5deg)\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"perspective(400px) rotate3d(0,1,0,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/flippers/flipOutX.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"flipOutX\", {\n\t\"duration\": 750,\n\t\"0%,100%\": {\n\t\tbackfaceVisibility: \"visible\",\n\t},\n\t\"0%\": {\n\t\ttransform: \"perspective(400px) rotate3d(1,0,0,0)\",\n\t},\n\t\"30%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"perspective(400px) rotate3d(1,0,0,-20deg)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"perspective(400px) rotate3d(1,0,0,90deg)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/flippers/flipOutY.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"flipOutY\", {\n\t\"duration\": 750,\n\t\"0%,100%\": {\n\t\tbackfaceVisibility: \"visible\",\n\t},\n\t\"0%\": {\n\t\ttransform: \"perspective(400px) rotate3d(0,1,0,0)\",\n\t},\n\t\"30%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"perspective(400px) rotate3d(0,1,0,-20deg)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"perspective(400px) rotate3d(0,1,0,90deg)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/lightspeed/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./lightSpeedIn\";\nimport \"./lightSpeedOut\";\n"
  },
  {
    "path": "src-ui/lightspeed/lightSpeedIn.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"lightSpeedIn\", {\n\t\"duration\": 1000,\n\t\"easing\": \"easeOut\",\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(100%,0,0) skewX(-30deg)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(40%,0,0) skewX(20deg)\",\n\t},\n\t\"80%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(20%,0,0) skewX(-5deg)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0) skew(0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/lightspeed/lightSpeedOut.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"lightSpeedOut\", {\n\t\"duration\": 1000,\n\t\"easing\": \"easeIn\",\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0) skewX(0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(100%,0,0) skewX(30deg)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_entrances/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./rotateIn\";\nimport \"./rotateInDownLeft\";\nimport \"./rotateInDownRight\";\nimport \"./rotateInUpLeft\";\nimport \"./rotateInUpRight\";\n"
  },
  {
    "path": "src-ui/rotating_entrances/rotateIn.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateIn\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,-200deg)\",\n\t\ttransformOrigin: \"center\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"center\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_entrances/rotateInDownLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateInDownLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,-45deg)\",\n\t\ttransformOrigin: \"left bottom\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"left bottom\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_entrances/rotateInDownRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateInDownRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,45deg)\",\n\t\ttransformOrigin: \"right bottom\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"right bottom\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_entrances/rotateInUpLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateInUpLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,45deg)\",\n\t\ttransformOrigin: \"left bottom\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"left bottom\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_entrances/rotateInUpRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateInUpRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,-90deg)\",\n\t\ttransformOrigin: \"right bottom\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"right bottom\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_exits/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./rotateOut\";\nimport \"./rotateOutDownLeft\";\nimport \"./rotateOutDownRight\";\nimport \"./rotateOutUpLeft\";\nimport \"./rotateOutUpRight\";\n"
  },
  {
    "path": "src-ui/rotating_exits/rotateOut.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateOut\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"center\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,200deg)\",\n\t\ttransformOrigin: \"center\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_exits/rotateOutDownLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateOutDownLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"left bottom\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,45deg)\",\n\t\ttransformOrigin: \"left bottom\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_exits/rotateOutDownRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateOutDownRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"right bottom\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,-45deg)\",\n\t\ttransformOrigin: \"right bottom\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_exits/rotateOutUpLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateOutUpLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"left bottom\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,-45deg)\",\n\t\ttransformOrigin: \"left bottom\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/rotating_exits/rotateOutUpRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rotateOutUpRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\ttransformOrigin: \"right bottom\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"rotate3d(0,0,1,90deg)\",\n\t\ttransformOrigin: \"right bottom\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/sliding_entrances/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./slideInDown\";\nimport \"./slideInLeft\";\nimport \"./slideInRight\";\nimport \"./slideInUp\";\n"
  },
  {
    "path": "src-ui/sliding_entrances/slideInDown.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"slideInDown\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(0,-100%,0)\",\n\t\tvisibility: \"hidden\",\n\t\topacity: \"0\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\tvisibility: \"visible\",\n\t\topacity: \"1\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/sliding_entrances/slideInLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"slideInLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(-100%,0,0)\",\n\t\tvisibility: \"hidden\",\n\t\topacity: \"0\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\tvisibility: \"visible\",\n\t\topacity: \"1\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/sliding_entrances/slideInRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"slideInRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(100%,0,0)\",\n\t\tvisibility: \"hidden\",\n\t\topacity: \"0\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\tvisibility: \"visible\",\n\t\topacity: \"1\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/sliding_entrances/slideInUp.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"slideInUp\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(0,100%,0)\",\n\t\tvisibility: \"hidden\",\n\t\topacity: \"0\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\tvisibility: \"visible\",\n\t\topacity: \"1\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/sliding_exits/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./slideOutDown\";\nimport \"./slideOutLeft\";\nimport \"./slideOutRight\";\nimport \"./slideOutUp\";\n"
  },
  {
    "path": "src-ui/sliding_exits/slideOutDown.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"slideOutDown\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\tvisibility: \"visible\",\n\t\topacity: \"1\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(0,-100%,0)\",\n\t\tvisibility: \"hidden\",\n\t\topacity: \"0\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/sliding_exits/slideOutLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"slideOutLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\tvisibility: \"visible\",\n\t\topacity: \"1\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(-100%,0,0)\",\n\t\tvisibility: \"hidden\",\n\t\topacity: \"0\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/sliding_exits/slideOutRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"slideOutRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\tvisibility: \"visible\",\n\t\topacity: \"1\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(100%,0,0)\",\n\t\tvisibility: \"hidden\",\n\t\topacity: \"0\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/sliding_exits/slideOutUp.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"slideOutUp\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"translate3d(0,0,0)\",\n\t\tvisibility: \"visible\",\n\t\topacity: \"1\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"translate3d(0,100%,0)\",\n\t\tvisibility: \"hidden\",\n\t\topacity: \"0\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/specials/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./hinge\";\nimport \"./jackInTheBox\";\nimport \"./rollIn\";\nimport \"./rollOut\";\n"
  },
  {
    "path": "src-ui/specials/hinge.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"hinge\", {\n\t\"duration\": 2000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0) rotate3d(0,0,1,0)\",\n\t\ttransformOrigin: \"top left\",\n\t},\n\t\"20%,60%\": {\n\t\ttransform: [\"translate3d(0,0,0) rotate3d(0,0,1,80deg)\", \"easeInOut\"],\n\t},\n\t\"40%,80%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"translate3d(0,0,0) rotate3d(0,0,1,60deg)\", \"easeInOut\"],\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: [\"translate3d(0,700px,0) rotate3d(0,0,1,80deg)\", \"easeInOut\"],\n\t},\n});\n"
  },
  {
    "path": "src-ui/specials/jackInTheBox.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"jackInTheBox\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale(0.1) rotate(30deg)\",\n\t\ttransformOrigin: \"center bottom\",\n\t},\n\t\"50%\": {\n\t\ttransform: \"scale(0.5) rotate(-10deg)\",\n\t},\n\t\"70%\": {\n\t\ttransform: \"scale(0.7) rotate(3deg)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale(1) rotate(0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/specials/rollIn.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rollIn\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0) rotate3d(0,0,1,0)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/specials/rollOut.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"rollOut\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"translate3d(0,0,0) rotate3d(0,0,1,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"translate3d(100%,0,0) rotate3d(0,0,1,120deg)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/tsconfig.json",
    "content": "{\n    \"extends\": \"../tsconfig.json\",\n    \"files\": [\n\t\t\"velocity.ui.ts\"\n\t]\n}\n"
  },
  {
    "path": "src-ui/velocity.ui.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./attention_seekers/_all\";\nimport \"./bouncing_entrances/_all\";\nimport \"./bouncing_exits/_all\";\nimport \"./fading_entrances/_all\";\nimport \"./fading_exits/_all\";\nimport \"./flippers/_all\";\nimport \"./lightspeed/_all\";\nimport \"./rotating_entrances/_all\";\nimport \"./rotating_exits/_all\";\nimport \"./sliding_entrances/_all\";\nimport \"./sliding_exits/_all\";\nimport \"./specials/_all\";\nimport \"./zooming_entrances/_all\";\nimport \"./zooming_exits/_all\";\n"
  },
  {
    "path": "src-ui/zooming_entrances/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./zoomIn\";\nimport \"./zoomInDown\";\nimport \"./zoomInLeft\";\nimport \"./zoomInRight\";\nimport \"./zoomInUp\";\n"
  },
  {
    "path": "src-ui/zooming_entrances/zoomIn.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomIn\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale3d(0.3,0.3,0.3)\",\n\t},\n\t\"50%\": {\n\t\topacity: \"1\",\n\t},\n\t\"100%\": {\n\t\ttransform: \"scale3d(1,1,1)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_entrances/zoomInDown.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomInDown\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale3d(0.1,0.1,0.1) translate3d(0,-1000px,0)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"scale3d(0.475,0.475,0.475) translate3d(0,60px,0)\", \"easeInCubic\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"scale3d(1,1,1) translate3d(0,0,0)\", [0.175, 0.885, 0.32, 1]],\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_entrances/zoomInLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomInLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale3d(0.1,0.1,0.1) translate3d(-1000px,0,0)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"scale3d(0.475,0.475,0.475) translate3d(10px,0,0)\", \"easeInCubic\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"scale3d(1,1,1) translate3d(0,0,0)\", [0.175, 0.885, 0.32, 1]],\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_entrances/zoomInRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomInRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale3d(0.1,0.1,0.1) translate3d(1000px,0,0)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"scale3d(0.475,0.475,0.475) translate3d(-10px,0,0)\", \"easeInCubic\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"scale3d(1,1,1) translate3d(0,0,0)\", [0.175, 0.885, 0.32, 1]],\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_entrances/zoomInUp.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomInUp\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale3d(0.1,0.1,0.1) translate3d(0,1000px,0)\",\n\t},\n\t\"60%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"scale3d(0.475,0.475,0.475) translate3d(0,-60px,0)\", \"easeInCubic\"],\n\t},\n\t\"100%\": {\n\t\ttransform: [\"scale3d(1,1,1) translate3d(0,0,0)\", [0.175, 0.885, 0.32, 1]],\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_exits/_all.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"./zoomOut\";\nimport \"./zoomOutDown\";\nimport \"./zoomOutLeft\";\nimport \"./zoomOutRight\";\nimport \"./zoomOutUp\";\n"
  },
  {
    "path": "src-ui/zooming_exits/zoomOut.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomOut\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"scale3d(1,1,1)\",\n\t},\n\t\"50%\": {\n\t\topacity: \"1\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale3d(0.3,0.3,0.3)\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_exits/zoomOutDown.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomOutDown\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"scale3d(1,1,1) translate3d(0,0,0)\",\n\t},\n\t\"40%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"scale3d(0.475,0.475,0.475) translate3d(0,60px,0)\", [0.55, 0.055, 0.675, 0.19]],\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: [\"scale3d(0.1,0.1,0.1) translate3d(0,-1000px,0)\", [0.175, 0.885, 0.32, 1]],\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_exits/zoomOutLeft.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomOutLeft\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale(1) translate3d(0,0,0)\",\n\t\ttransformOrigin: \"left center\",\n\t},\n\t\"40%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale(0.475) translate3d(42px,0,0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale(0.1) translate3d(-2000px,0,0)\",\n\t\ttransformOrigin: \"left center\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_exits/zoomOutRight.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomOutRight\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale(1) translate3d(0,0,0)\",\n\t\ttransformOrigin: \"right center\",\n\t},\n\t\"40%\": {\n\t\topacity: \"1\",\n\t\ttransform: \"scale(0.475) translate3d(-42px, 0, 0)\",\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: \"scale(0.1) translate3d(2000px, 0, 0)\",\n\t\ttransformOrigin: \"right center\",\n\t},\n});\n"
  },
  {
    "path": "src-ui/zooming_exits/zoomOutUp.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Based on animate.css: https://github.com/daneden/animate.css\n */\n\nimport Velocity from \"velocity-animate\";\n\nVelocity(\"registerSequence\", \"zoomOutUp\", {\n\t\"duration\": 1000,\n\t\"0%\": {\n\t\ttransform: \"scale3d(1,1,1) translate3d(0,0,0)\",\n\t},\n\t\"40%\": {\n\t\topacity: \"1\",\n\t\ttransform: [\"scale3d(0.475,0.475,0.475) translate3d(0,-60px,0)\", [0.55, 0.055, 0.675, 0.19]],\n\t},\n\t\"100%\": {\n\t\topacity: \"0\",\n\t\ttransform: [\"scale3d(0.1,0.1,0.1) translate3d(0,1000px,0)\", [0.175, 0.885, 0.32, 1]],\n\t},\n});\n"
  },
  {
    "path": "test/index.html",
    "content": "<!DOCTYPE HTML>\n<html>\n\t<head>\n\t\t<title>Velocity.js Tests</title>\n\t\t<link rel=\"stylesheet\" href=\"../node_modules/qunit/qunit/qunit.css\" type=\"text/css\" media=\"screen\" />\n\t\t<script type=\"text/javascript\" src=\"../node_modules/babel-polyfill/dist/polyfill.min.js\"></script>\n\t\t<script type=\"text/javascript\" src=\"../node_modules/qunit/qunit/qunit.js\"></script>\n\t\t<script type=\"text/javascript\" src=\"../node_modules/qunit-assert-close/qunit-assert-close.js\"></script>\n\t\t<script type=\"text/javascript\" src=\"zepto-1.2.0.min.js\"></script>\n\t\t<script type=\"text/javascript\" src=\"jquery-3.2.1.min.js\"></script>\n\t\t<script type=\"text/javascript\" src=\"../velocity.js\"></script>\n\t\t<script type=\"text/javascript\" src=\"../velocity.ui.js\"></script>\n\t\t<style>\n\t\t\t#qunit-stage {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tvisibility: hidden;\n\t\t\t\toverflow: hidden;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t\t#details {\n\t\t\t\tmargin: 0 auto;\n\t\t\t\tmargin-bottom: 1em;\n\t\t\t\twidth: 800px;\n\t\t\t\tpadding: 0;\n\t\t\t\tline-height: 1.35em;\n\t\t\t\tlist-style: none;\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div id=\"qunit\"></div>\n\t\t<div id=\"qunit-stage\"></div>\n\t\t<script type=\"text/javascript\" src=\"test.js\"></script>\n\t</body>\n</html>"
  },
  {
    "path": "test/qunit-2.5.0.css",
    "content": "/*!\n * QUnit 2.5.0\n * https://qunitjs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-10T02:56Z\n */\n\n/** Font Family and Sizes */\n\n#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult {\n\tfont-family: \"Helvetica Neue Light\", \"HelveticaNeue-Light\", \"Helvetica Neue\", Calibri, Helvetica, Arial, sans-serif;\n}\n\n#qunit-testrunner-toolbar, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }\n#qunit-tests { font-size: smaller; }\n\n\n/** Resets */\n\n#qunit-tests, #qunit-header, #qunit-banner, #qunit-filteredTest, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {\n\tmargin: 0;\n\tpadding: 0;\n}\n\n\n/** Header (excluding toolbar) */\n\n#qunit-header {\n\tpadding: 0.5em 0 0.5em 1em;\n\n\tcolor: #8699A4;\n\tbackground-color: #0D3349;\n\n\tfont-size: 1.5em;\n\tline-height: 1em;\n\tfont-weight: 400;\n\n\tborder-radius: 5px 5px 0 0;\n}\n\n#qunit-header a {\n\ttext-decoration: none;\n\tcolor: #C2CCD1;\n}\n\n#qunit-header a:hover,\n#qunit-header a:focus {\n\tcolor: #FFF;\n}\n\n#qunit-banner {\n\theight: 5px;\n}\n\n#qunit-filteredTest {\n\tpadding: 0.5em 1em 0.5em 1em;\n\tcolor: #366097;\n\tbackground-color: #F4FF77;\n}\n\n#qunit-userAgent {\n\tpadding: 0.5em 1em 0.5em 1em;\n\tcolor: #FFF;\n\tbackground-color: #2B81AF;\n\ttext-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;\n}\n\n\n/** Toolbar */\n\n#qunit-testrunner-toolbar {\n\tpadding: 0.5em 1em 0.5em 1em;\n\tcolor: #5E740B;\n\tbackground-color: #EEE;\n}\n\n#qunit-testrunner-toolbar .clearfix {\n\theight: 0;\n\tclear: both;\n}\n\n#qunit-testrunner-toolbar label {\n\tdisplay: inline-block;\n}\n\n#qunit-testrunner-toolbar input[type=checkbox],\n#qunit-testrunner-toolbar input[type=radio] {\n\tmargin: 3px;\n\tvertical-align: -2px;\n}\n\n#qunit-testrunner-toolbar input[type=text] {\n\tbox-sizing: border-box;\n\theight: 1.6em;\n}\n\n.qunit-url-config,\n.qunit-filter,\n#qunit-modulefilter {\n\tdisplay: inline-block;\n\tline-height: 2.1em;\n}\n\n.qunit-filter,\n#qunit-modulefilter {\n\tfloat: right;\n\tposition: relative;\n\tmargin-left: 1em;\n}\n\n.qunit-url-config label {\n\tmargin-right: 0.5em;\n}\n\n#qunit-modulefilter-search {\n\tbox-sizing: border-box;\n\twidth: 400px;\n}\n\n#qunit-modulefilter-search-container:after {\n\tposition: absolute;\n\tright: 0.3em;\n\tcontent: \"\\25bc\";\n\tcolor: black;\n}\n\n#qunit-modulefilter-dropdown {\n\t/* align with #qunit-modulefilter-search */\n\tbox-sizing: border-box;\n\twidth: 400px;\n\tposition: absolute;\n\tright: 0;\n\ttop: 50%;\n\tmargin-top: 0.8em;\n\n\tborder: 1px solid #D3D3D3;\n\tborder-top: none;\n\tborder-radius: 0 0 .25em .25em;\n\tcolor: #000;\n\tbackground-color: #F5F5F5;\n\tz-index: 99;\n}\n\n#qunit-modulefilter-dropdown a {\n\tcolor: inherit;\n\ttext-decoration: none;\n}\n\n#qunit-modulefilter-dropdown .clickable.checked {\n\tfont-weight: bold;\n\tcolor: #000;\n\tbackground-color: #D2E0E6;\n}\n\n#qunit-modulefilter-dropdown .clickable:hover {\n\tcolor: #FFF;\n\tbackground-color: #0D3349;\n}\n\n#qunit-modulefilter-actions {\n\tdisplay: block;\n\toverflow: auto;\n\n\t/* align with #qunit-modulefilter-dropdown-list */\n\tfont: smaller/1.5em sans-serif;\n}\n\n#qunit-modulefilter-dropdown #qunit-modulefilter-actions > * {\n\tbox-sizing: border-box;\n\tmax-height: 2.8em;\n\tdisplay: block;\n\tpadding: 0.4em;\n}\n\n#qunit-modulefilter-dropdown #qunit-modulefilter-actions > button {\n\tfloat: right;\n\tfont: inherit;\n}\n\n#qunit-modulefilter-dropdown #qunit-modulefilter-actions > :last-child {\n\t/* insert padding to align with checkbox margins */\n\tpadding-left: 3px;\n}\n\n#qunit-modulefilter-dropdown-list {\n\tmax-height: 200px;\n\toverflow-y: auto;\n\tmargin: 0;\n\tborder-top: 2px groove threedhighlight;\n\tpadding: 0.4em 0 0;\n\tfont: smaller/1.5em sans-serif;\n}\n\n#qunit-modulefilter-dropdown-list li {\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n#qunit-modulefilter-dropdown-list .clickable {\n\tdisplay: block;\n\tpadding-left: 0.15em;\n}\n\n\n/** Tests: Pass/Fail */\n\n#qunit-tests {\n\tlist-style-position: inside;\n}\n\n#qunit-tests li {\n\tpadding: 0.4em 1em 0.4em 1em;\n\tborder-bottom: 1px solid #FFF;\n\tlist-style-position: inside;\n}\n\n#qunit-tests > li {\n\tdisplay: none;\n}\n\n#qunit-tests li.running,\n#qunit-tests li.pass,\n#qunit-tests li.fail,\n#qunit-tests li.skipped,\n#qunit-tests li.aborted {\n\tdisplay: list-item;\n}\n\n#qunit-tests.hidepass {\n\tposition: relative;\n}\n\n#qunit-tests.hidepass li.running,\n#qunit-tests.hidepass li.pass:not(.todo) {\n\tvisibility: hidden;\n\tposition: absolute;\n\twidth:   0;\n\theight:  0;\n\tpadding: 0;\n\tborder:  0;\n\tmargin:  0;\n}\n\n#qunit-tests li strong {\n\tcursor: pointer;\n}\n\n#qunit-tests li.skipped strong {\n\tcursor: default;\n}\n\n#qunit-tests li a {\n\tpadding: 0.5em;\n\tcolor: #C2CCD1;\n\ttext-decoration: none;\n}\n\n#qunit-tests li p a {\n\tpadding: 0.25em;\n\tcolor: #6B6464;\n}\n#qunit-tests li a:hover,\n#qunit-tests li a:focus {\n\tcolor: #000;\n}\n\n#qunit-tests li .runtime {\n\tfloat: right;\n\tfont-size: smaller;\n}\n\n.qunit-assert-list {\n\tmargin-top: 0.5em;\n\tpadding: 0.5em;\n\n\tbackground-color: #FFF;\n\n\tborder-radius: 5px;\n}\n\n.qunit-source {\n\tmargin: 0.6em 0 0.3em;\n}\n\n.qunit-collapsed {\n\tdisplay: none;\n}\n\n#qunit-tests table {\n\tborder-collapse: collapse;\n\tmargin-top: 0.2em;\n}\n\n#qunit-tests th {\n\ttext-align: right;\n\tvertical-align: top;\n\tpadding: 0 0.5em 0 0;\n}\n\n#qunit-tests td {\n\tvertical-align: top;\n}\n\n#qunit-tests pre {\n\tmargin: 0;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n}\n\n#qunit-tests del {\n\tcolor: #374E0C;\n\tbackground-color: #E0F2BE;\n\ttext-decoration: none;\n}\n\n#qunit-tests ins {\n\tcolor: #500;\n\tbackground-color: #FFCACA;\n\ttext-decoration: none;\n}\n\n/*** Test Counts */\n\n#qunit-tests b.counts                       { color: #000; }\n#qunit-tests b.passed                       { color: #5E740B; }\n#qunit-tests b.failed                       { color: #710909; }\n\n#qunit-tests li li {\n\tpadding: 5px;\n\tbackground-color: #FFF;\n\tborder-bottom: none;\n\tlist-style-position: inside;\n}\n\n/*** Passing Styles */\n\n#qunit-tests li li.pass {\n\tcolor: #3C510C;\n\tbackground-color: #FFF;\n\tborder-left: 10px solid #C6E746;\n}\n\n#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }\n#qunit-tests .pass .test-name               { color: #366097; }\n\n#qunit-tests .pass .test-actual,\n#qunit-tests .pass .test-expected           { color: #999; }\n\n#qunit-banner.qunit-pass                    { background-color: #C6E746; }\n\n/*** Failing Styles */\n\n#qunit-tests li li.fail {\n\tcolor: #710909;\n\tbackground-color: #FFF;\n\tborder-left: 10px solid #EE5757;\n\twhite-space: pre;\n}\n\n#qunit-tests > li:last-child {\n\tborder-radius: 0 0 5px 5px;\n}\n\n#qunit-tests .fail                          { color: #000; background-color: #EE5757; }\n#qunit-tests .fail .test-name,\n#qunit-tests .fail .module-name             { color: #000; }\n\n#qunit-tests .fail .test-actual             { color: #EE5757; }\n#qunit-tests .fail .test-expected           { color: #008000; }\n\n#qunit-banner.qunit-fail                    { background-color: #EE5757; }\n\n\n/*** Aborted tests */\n#qunit-tests .aborted { color: #000; background-color: orange; }\n/*** Skipped tests */\n\n#qunit-tests .skipped {\n\tbackground-color: #EBECE9;\n}\n\n#qunit-tests .qunit-todo-label,\n#qunit-tests .qunit-skipped-label {\n\tbackground-color: #F4FF77;\n\tdisplay: inline-block;\n\tfont-style: normal;\n\tcolor: #366097;\n\tline-height: 1.8em;\n\tpadding: 0 0.5em;\n\tmargin: -0.4em 0.4em -0.4em 0;\n}\n\n#qunit-tests .qunit-todo-label {\n\tbackground-color: #EEE;\n}\n\n/** Result */\n\n#qunit-testresult {\n\tcolor: #2B81AF;\n\tbackground-color: #D2E0E6;\n\n\tborder-bottom: 1px solid #FFF;\n}\n#qunit-testresult .clearfix {\n\theight: 0;\n\tclear: both;\n}\n#qunit-testresult .module-name {\n\tfont-weight: 700;\n}\n#qunit-testresult-display {\n\tpadding: 0.5em 1em 0.5em 1em;\n\twidth: 85%;\n\tfloat:left;\n}\n#qunit-testresult-controls {\n\tpadding: 0.5em 1em 0.5em 1em;\n  width: 10%;\n\tfloat:left;\n}\n\n/** Fixture */\n\n#qunit-fixture {\n\tposition: absolute;\n\ttop: -10000px;\n\tleft: -10000px;\n\twidth: 1000px;\n\theight: 1000px;\n}\n"
  },
  {
    "path": "test/qunit-2.5.0.js",
    "content": "/*!\n * QUnit 2.5.0\n * https://qunitjs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-10T02:56Z\n */\n(function (global$1) {\n  'use strict';\n\n  global$1 = global$1 && global$1.hasOwnProperty('default') ? global$1['default'] : global$1;\n\n  var window = global$1.window;\n  var self$1 = global$1.self;\n  var console = global$1.console;\n  var setTimeout = global$1.setTimeout;\n  var clearTimeout = global$1.clearTimeout;\n\n  var document = window && window.document;\n  var navigator = window && window.navigator;\n\n  var localSessionStorage = function () {\n  \tvar x = \"qunit-test-string\";\n  \ttry {\n  \t\tglobal$1.sessionStorage.setItem(x, x);\n  \t\tglobal$1.sessionStorage.removeItem(x);\n  \t\treturn global$1.sessionStorage;\n  \t} catch (e) {\n  \t\treturn undefined;\n  \t}\n  }();\n\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  };\n\n\n\n\n\n\n\n\n\n\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  var toConsumableArray = function (arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n      return arr2;\n    } else {\n      return Array.from(arr);\n    }\n  };\n\n  var toString = Object.prototype.toString;\n  var hasOwn = Object.prototype.hasOwnProperty;\n  var now = Date.now || function () {\n  \treturn new Date().getTime();\n  };\n\n  var defined = {\n  \tdocument: window && window.document !== undefined,\n  \tsetTimeout: setTimeout !== undefined\n  };\n\n  // Returns a new Array with the elements that are in a but not in b\n  function diff(a, b) {\n  \tvar i,\n  \t    j,\n  \t    result = a.slice();\n\n  \tfor (i = 0; i < result.length; i++) {\n  \t\tfor (j = 0; j < b.length; j++) {\n  \t\t\tif (result[i] === b[j]) {\n  \t\t\t\tresult.splice(i, 1);\n  \t\t\t\ti--;\n  \t\t\t\tbreak;\n  \t\t\t}\n  \t\t}\n  \t}\n  \treturn result;\n  }\n\n  /**\n   * Determines whether an element exists in a given array or not.\n   *\n   * @method inArray\n   * @param {Any} elem\n   * @param {Array} array\n   * @return {Boolean}\n   */\n  function inArray(elem, array) {\n  \treturn array.indexOf(elem) !== -1;\n  }\n\n  /**\n   * Makes a clone of an object using only Array or Object as base,\n   * and copies over the own enumerable properties.\n   *\n   * @param {Object} obj\n   * @return {Object} New object with only the own properties (recursively).\n   */\n  function objectValues(obj) {\n  \tvar key,\n  \t    val,\n  \t    vals = is(\"array\", obj) ? [] : {};\n  \tfor (key in obj) {\n  \t\tif (hasOwn.call(obj, key)) {\n  \t\t\tval = obj[key];\n  \t\t\tvals[key] = val === Object(val) ? objectValues(val) : val;\n  \t\t}\n  \t}\n  \treturn vals;\n  }\n\n  function extend(a, b, undefOnly) {\n  \tfor (var prop in b) {\n  \t\tif (hasOwn.call(b, prop)) {\n  \t\t\tif (b[prop] === undefined) {\n  \t\t\t\tdelete a[prop];\n  \t\t\t} else if (!(undefOnly && typeof a[prop] !== \"undefined\")) {\n  \t\t\t\ta[prop] = b[prop];\n  \t\t\t}\n  \t\t}\n  \t}\n\n  \treturn a;\n  }\n\n  function objectType(obj) {\n  \tif (typeof obj === \"undefined\") {\n  \t\treturn \"undefined\";\n  \t}\n\n  \t// Consider: typeof null === object\n  \tif (obj === null) {\n  \t\treturn \"null\";\n  \t}\n\n  \tvar match = toString.call(obj).match(/^\\[object\\s(.*)\\]$/),\n  \t    type = match && match[1];\n\n  \tswitch (type) {\n  \t\tcase \"Number\":\n  \t\t\tif (isNaN(obj)) {\n  \t\t\t\treturn \"nan\";\n  \t\t\t}\n  \t\t\treturn \"number\";\n  \t\tcase \"String\":\n  \t\tcase \"Boolean\":\n  \t\tcase \"Array\":\n  \t\tcase \"Set\":\n  \t\tcase \"Map\":\n  \t\tcase \"Date\":\n  \t\tcase \"RegExp\":\n  \t\tcase \"Function\":\n  \t\tcase \"Symbol\":\n  \t\t\treturn type.toLowerCase();\n  \t\tdefault:\n  \t\t\treturn typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n  \t}\n  }\n\n  // Safe object type checking\n  function is(type, obj) {\n  \treturn objectType(obj) === type;\n  }\n\n  // Based on Java's String.hashCode, a simple but not\n  // rigorously collision resistant hashing function\n  function generateHash(module, testName) {\n  \tvar str = module + \"\\x1C\" + testName;\n  \tvar hash = 0;\n\n  \tfor (var i = 0; i < str.length; i++) {\n  \t\thash = (hash << 5) - hash + str.charCodeAt(i);\n  \t\thash |= 0;\n  \t}\n\n  \t// Convert the possibly negative integer hash code into an 8 character hex string, which isn't\n  \t// strictly necessary but increases user understanding that the id is a SHA-like hash\n  \tvar hex = (0x100000000 + hash).toString(16);\n  \tif (hex.length < 8) {\n  \t\thex = \"0000000\" + hex;\n  \t}\n\n  \treturn hex.slice(-8);\n  }\n\n  // Test for equality any JavaScript type.\n  // Authors: Philippe Rathé <prathe@gmail.com>, David Chan <david@troi.org>\n  var equiv = (function () {\n\n  \t// Value pairs queued for comparison. Used for breadth-first processing order, recursion\n  \t// detection and avoiding repeated comparison (see below for details).\n  \t// Elements are { a: val, b: val }.\n  \tvar pairs = [];\n\n  \tvar getProto = Object.getPrototypeOf || function (obj) {\n  \t\treturn obj.__proto__;\n  \t};\n\n  \tfunction useStrictEquality(a, b) {\n\n  \t\t// This only gets called if a and b are not strict equal, and is used to compare on\n  \t\t// the primitive values inside object wrappers. For example:\n  \t\t// `var i = 1;`\n  \t\t// `var j = new Number(1);`\n  \t\t// Neither a nor b can be null, as a !== b and they have the same type.\n  \t\tif ((typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) === \"object\") {\n  \t\t\ta = a.valueOf();\n  \t\t}\n  \t\tif ((typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) === \"object\") {\n  \t\t\tb = b.valueOf();\n  \t\t}\n\n  \t\treturn a === b;\n  \t}\n\n  \tfunction compareConstructors(a, b) {\n  \t\tvar protoA = getProto(a);\n  \t\tvar protoB = getProto(b);\n\n  \t\t// Comparing constructors is more strict than using `instanceof`\n  \t\tif (a.constructor === b.constructor) {\n  \t\t\treturn true;\n  \t\t}\n\n  \t\t// Ref #851\n  \t\t// If the obj prototype descends from a null constructor, treat it\n  \t\t// as a null prototype.\n  \t\tif (protoA && protoA.constructor === null) {\n  \t\t\tprotoA = null;\n  \t\t}\n  \t\tif (protoB && protoB.constructor === null) {\n  \t\t\tprotoB = null;\n  \t\t}\n\n  \t\t// Allow objects with no prototype to be equivalent to\n  \t\t// objects with Object as their constructor.\n  \t\tif (protoA === null && protoB === Object.prototype || protoB === null && protoA === Object.prototype) {\n  \t\t\treturn true;\n  \t\t}\n\n  \t\treturn false;\n  \t}\n\n  \tfunction getRegExpFlags(regexp) {\n  \t\treturn \"flags\" in regexp ? regexp.flags : regexp.toString().match(/[gimuy]*$/)[0];\n  \t}\n\n  \tfunction isContainer(val) {\n  \t\treturn [\"object\", \"array\", \"map\", \"set\"].indexOf(objectType(val)) !== -1;\n  \t}\n\n  \tfunction breadthFirstCompareChild(a, b) {\n\n  \t\t// If a is a container not reference-equal to b, postpone the comparison to the\n  \t\t// end of the pairs queue -- unless (a, b) has been seen before, in which case skip\n  \t\t// over the pair.\n  \t\tif (a === b) {\n  \t\t\treturn true;\n  \t\t}\n  \t\tif (!isContainer(a)) {\n  \t\t\treturn typeEquiv(a, b);\n  \t\t}\n  \t\tif (pairs.every(function (pair) {\n  \t\t\treturn pair.a !== a || pair.b !== b;\n  \t\t})) {\n\n  \t\t\t// Not yet started comparing this pair\n  \t\t\tpairs.push({ a: a, b: b });\n  \t\t}\n  \t\treturn true;\n  \t}\n\n  \tvar callbacks = {\n  \t\t\"string\": useStrictEquality,\n  \t\t\"boolean\": useStrictEquality,\n  \t\t\"number\": useStrictEquality,\n  \t\t\"null\": useStrictEquality,\n  \t\t\"undefined\": useStrictEquality,\n  \t\t\"symbol\": useStrictEquality,\n  \t\t\"date\": useStrictEquality,\n\n  \t\t\"nan\": function nan() {\n  \t\t\treturn true;\n  \t\t},\n\n  \t\t\"regexp\": function regexp(a, b) {\n  \t\t\treturn a.source === b.source &&\n\n  \t\t\t// Include flags in the comparison\n  \t\t\tgetRegExpFlags(a) === getRegExpFlags(b);\n  \t\t},\n\n  \t\t// abort (identical references / instance methods were skipped earlier)\n  \t\t\"function\": function _function() {\n  \t\t\treturn false;\n  \t\t},\n\n  \t\t\"array\": function array(a, b) {\n  \t\t\tvar i, len;\n\n  \t\t\tlen = a.length;\n  \t\t\tif (len !== b.length) {\n\n  \t\t\t\t// Safe and faster\n  \t\t\t\treturn false;\n  \t\t\t}\n\n  \t\t\tfor (i = 0; i < len; i++) {\n\n  \t\t\t\t// Compare non-containers; queue non-reference-equal containers\n  \t\t\t\tif (!breadthFirstCompareChild(a[i], b[i])) {\n  \t\t\t\t\treturn false;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t\treturn true;\n  \t\t},\n\n  \t\t// Define sets a and b to be equivalent if for each element aVal in a, there\n  \t\t// is some element bVal in b such that aVal and bVal are equivalent. Element\n  \t\t// repetitions are not counted, so these are equivalent:\n  \t\t// a = new Set( [ {}, [], [] ] );\n  \t\t// b = new Set( [ {}, {}, [] ] );\n  \t\t\"set\": function set$$1(a, b) {\n  \t\t\tvar innerEq,\n  \t\t\t    outerEq = true;\n\n  \t\t\tif (a.size !== b.size) {\n\n  \t\t\t\t// This optimization has certain quirks because of the lack of\n  \t\t\t\t// repetition counting. For instance, adding the same\n  \t\t\t\t// (reference-identical) element to two equivalent sets can\n  \t\t\t\t// make them non-equivalent.\n  \t\t\t\treturn false;\n  \t\t\t}\n\n  \t\t\ta.forEach(function (aVal) {\n\n  \t\t\t\t// Short-circuit if the result is already known. (Using for...of\n  \t\t\t\t// with a break clause would be cleaner here, but it would cause\n  \t\t\t\t// a syntax error on older Javascript implementations even if\n  \t\t\t\t// Set is unused)\n  \t\t\t\tif (!outerEq) {\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\tinnerEq = false;\n\n  \t\t\t\tb.forEach(function (bVal) {\n  \t\t\t\t\tvar parentPairs;\n\n  \t\t\t\t\t// Likewise, short-circuit if the result is already known\n  \t\t\t\t\tif (innerEq) {\n  \t\t\t\t\t\treturn;\n  \t\t\t\t\t}\n\n  \t\t\t\t\t// Swap out the global pairs list, as the nested call to\n  \t\t\t\t\t// innerEquiv will clobber its contents\n  \t\t\t\t\tparentPairs = pairs;\n  \t\t\t\t\tif (innerEquiv(bVal, aVal)) {\n  \t\t\t\t\t\tinnerEq = true;\n  \t\t\t\t\t}\n\n  \t\t\t\t\t// Replace the global pairs list\n  \t\t\t\t\tpairs = parentPairs;\n  \t\t\t\t});\n\n  \t\t\t\tif (!innerEq) {\n  \t\t\t\t\touterEq = false;\n  \t\t\t\t}\n  \t\t\t});\n\n  \t\t\treturn outerEq;\n  \t\t},\n\n  \t\t// Define maps a and b to be equivalent if for each key-value pair (aKey, aVal)\n  \t\t// in a, there is some key-value pair (bKey, bVal) in b such that\n  \t\t// [ aKey, aVal ] and [ bKey, bVal ] are equivalent. Key repetitions are not\n  \t\t// counted, so these are equivalent:\n  \t\t// a = new Map( [ [ {}, 1 ], [ {}, 1 ], [ [], 1 ] ] );\n  \t\t// b = new Map( [ [ {}, 1 ], [ [], 1 ], [ [], 1 ] ] );\n  \t\t\"map\": function map(a, b) {\n  \t\t\tvar innerEq,\n  \t\t\t    outerEq = true;\n\n  \t\t\tif (a.size !== b.size) {\n\n  \t\t\t\t// This optimization has certain quirks because of the lack of\n  \t\t\t\t// repetition counting. For instance, adding the same\n  \t\t\t\t// (reference-identical) key-value pair to two equivalent maps\n  \t\t\t\t// can make them non-equivalent.\n  \t\t\t\treturn false;\n  \t\t\t}\n\n  \t\t\ta.forEach(function (aVal, aKey) {\n\n  \t\t\t\t// Short-circuit if the result is already known. (Using for...of\n  \t\t\t\t// with a break clause would be cleaner here, but it would cause\n  \t\t\t\t// a syntax error on older Javascript implementations even if\n  \t\t\t\t// Map is unused)\n  \t\t\t\tif (!outerEq) {\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\tinnerEq = false;\n\n  \t\t\t\tb.forEach(function (bVal, bKey) {\n  \t\t\t\t\tvar parentPairs;\n\n  \t\t\t\t\t// Likewise, short-circuit if the result is already known\n  \t\t\t\t\tif (innerEq) {\n  \t\t\t\t\t\treturn;\n  \t\t\t\t\t}\n\n  \t\t\t\t\t// Swap out the global pairs list, as the nested call to\n  \t\t\t\t\t// innerEquiv will clobber its contents\n  \t\t\t\t\tparentPairs = pairs;\n  \t\t\t\t\tif (innerEquiv([bVal, bKey], [aVal, aKey])) {\n  \t\t\t\t\t\tinnerEq = true;\n  \t\t\t\t\t}\n\n  \t\t\t\t\t// Replace the global pairs list\n  \t\t\t\t\tpairs = parentPairs;\n  \t\t\t\t});\n\n  \t\t\t\tif (!innerEq) {\n  \t\t\t\t\touterEq = false;\n  \t\t\t\t}\n  \t\t\t});\n\n  \t\t\treturn outerEq;\n  \t\t},\n\n  \t\t\"object\": function object(a, b) {\n  \t\t\tvar i,\n  \t\t\t    aProperties = [],\n  \t\t\t    bProperties = [];\n\n  \t\t\tif (compareConstructors(a, b) === false) {\n  \t\t\t\treturn false;\n  \t\t\t}\n\n  \t\t\t// Be strict: don't ensure hasOwnProperty and go deep\n  \t\t\tfor (i in a) {\n\n  \t\t\t\t// Collect a's properties\n  \t\t\t\taProperties.push(i);\n\n  \t\t\t\t// Skip OOP methods that look the same\n  \t\t\t\tif (a.constructor !== Object && typeof a.constructor !== \"undefined\" && typeof a[i] === \"function\" && typeof b[i] === \"function\" && a[i].toString() === b[i].toString()) {\n  \t\t\t\t\tcontinue;\n  \t\t\t\t}\n\n  \t\t\t\t// Compare non-containers; queue non-reference-equal containers\n  \t\t\t\tif (!breadthFirstCompareChild(a[i], b[i])) {\n  \t\t\t\t\treturn false;\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t\tfor (i in b) {\n\n  \t\t\t\t// Collect b's properties\n  \t\t\t\tbProperties.push(i);\n  \t\t\t}\n\n  \t\t\t// Ensures identical properties name\n  \t\t\treturn typeEquiv(aProperties.sort(), bProperties.sort());\n  \t\t}\n  \t};\n\n  \tfunction typeEquiv(a, b) {\n  \t\tvar type = objectType(a);\n\n  \t\t// Callbacks for containers will append to the pairs queue to achieve breadth-first\n  \t\t// search order. The pairs queue is also used to avoid reprocessing any pair of\n  \t\t// containers that are reference-equal to a previously visited pair (a special case\n  \t\t// this being recursion detection).\n  \t\t//\n  \t\t// Because of this approach, once typeEquiv returns a false value, it should not be\n  \t\t// called again without clearing the pair queue else it may wrongly report a visited\n  \t\t// pair as being equivalent.\n  \t\treturn objectType(b) === type && callbacks[type](a, b);\n  \t}\n\n  \tfunction innerEquiv(a, b) {\n  \t\tvar i, pair;\n\n  \t\t// We're done when there's nothing more to compare\n  \t\tif (arguments.length < 2) {\n  \t\t\treturn true;\n  \t\t}\n\n  \t\t// Clear the global pair queue and add the top-level values being compared\n  \t\tpairs = [{ a: a, b: b }];\n\n  \t\tfor (i = 0; i < pairs.length; i++) {\n  \t\t\tpair = pairs[i];\n\n  \t\t\t// Perform type-specific comparison on any pairs that are not strictly\n  \t\t\t// equal. For container types, that comparison will postpone comparison\n  \t\t\t// of any sub-container pair to the end of the pair queue. This gives\n  \t\t\t// breadth-first search order. It also avoids the reprocessing of\n  \t\t\t// reference-equal siblings, cousins etc, which can have a significant speed\n  \t\t\t// impact when comparing a container of small objects each of which has a\n  \t\t\t// reference to the same (singleton) large object.\n  \t\t\tif (pair.a !== pair.b && !typeEquiv(pair.a, pair.b)) {\n  \t\t\t\treturn false;\n  \t\t\t}\n  \t\t}\n\n  \t\t// ...across all consecutive argument pairs\n  \t\treturn arguments.length === 2 || innerEquiv.apply(this, [].slice.call(arguments, 1));\n  \t}\n\n  \treturn function () {\n  \t\tvar result = innerEquiv.apply(undefined, arguments);\n\n  \t\t// Release any retained objects\n  \t\tpairs.length = 0;\n  \t\treturn result;\n  \t};\n  })();\n\n  /**\n   * Config object: Maintain internal state\n   * Later exposed as QUnit.config\n   * `config` initialized at top of scope\n   */\n  var config = {\n\n  \t// The queue of tests to run\n  \tqueue: [],\n\n  \t// Block until document ready\n  \tblocking: true,\n\n  \t// By default, run previously failed tests first\n  \t// very useful in combination with \"Hide passed tests\" checked\n  \treorder: true,\n\n  \t// By default, modify document.title when suite is done\n  \taltertitle: true,\n\n  \t// HTML Reporter: collapse every test except the first failing test\n  \t// If false, all failing tests will be expanded\n  \tcollapse: true,\n\n  \t// By default, scroll to top of the page when suite is done\n  \tscrolltop: true,\n\n  \t// Depth up-to which object will be dumped\n  \tmaxDepth: 5,\n\n  \t// When enabled, all tests must call expect()\n  \trequireExpects: false,\n\n  \t// Placeholder for user-configurable form-exposed URL parameters\n  \turlConfig: [],\n\n  \t// Set of all modules.\n  \tmodules: [],\n\n  \t// The first unnamed module\n  \tcurrentModule: {\n  \t\tname: \"\",\n  \t\ttests: [],\n  \t\tchildModules: [],\n  \t\ttestsRun: 0,\n  \t\tunskippedTestsRun: 0,\n  \t\thooks: {\n  \t\t\tbefore: [],\n  \t\t\tbeforeEach: [],\n  \t\t\tafterEach: [],\n  \t\t\tafter: []\n  \t\t}\n  \t},\n\n  \tcallbacks: {},\n\n  \t// The storage module to use for reordering tests\n  \tstorage: localSessionStorage\n  };\n\n  // take a predefined QUnit.config and extend the defaults\n  var globalConfig = window && window.QUnit && window.QUnit.config;\n\n  // only extend the global config if there is no QUnit overload\n  if (window && window.QUnit && !window.QUnit.version) {\n  \textend(config, globalConfig);\n  }\n\n  // Push a loose unnamed module to the modules collection\n  config.modules.push(config.currentModule);\n\n  // Based on jsDump by Ariel Flesler\n  // http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html\n  var dump = (function () {\n  \tfunction quote(str) {\n  \t\treturn \"\\\"\" + str.toString().replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\") + \"\\\"\";\n  \t}\n  \tfunction literal(o) {\n  \t\treturn o + \"\";\n  \t}\n  \tfunction join(pre, arr, post) {\n  \t\tvar s = dump.separator(),\n  \t\t    base = dump.indent(),\n  \t\t    inner = dump.indent(1);\n  \t\tif (arr.join) {\n  \t\t\tarr = arr.join(\",\" + s + inner);\n  \t\t}\n  \t\tif (!arr) {\n  \t\t\treturn pre + post;\n  \t\t}\n  \t\treturn [pre, inner + arr, base + post].join(s);\n  \t}\n  \tfunction array(arr, stack) {\n  \t\tvar i = arr.length,\n  \t\t    ret = new Array(i);\n\n  \t\tif (dump.maxDepth && dump.depth > dump.maxDepth) {\n  \t\t\treturn \"[object Array]\";\n  \t\t}\n\n  \t\tthis.up();\n  \t\twhile (i--) {\n  \t\t\tret[i] = this.parse(arr[i], undefined, stack);\n  \t\t}\n  \t\tthis.down();\n  \t\treturn join(\"[\", ret, \"]\");\n  \t}\n\n  \tfunction isArray(obj) {\n  \t\treturn (\n\n  \t\t\t//Native Arrays\n  \t\t\ttoString.call(obj) === \"[object Array]\" ||\n\n  \t\t\t// NodeList objects\n  \t\t\ttypeof obj.length === \"number\" && obj.item !== undefined && (obj.length ? obj.item(0) === obj[0] : obj.item(0) === null && obj[0] === undefined)\n  \t\t);\n  \t}\n\n  \tvar reName = /^function (\\w+)/,\n  \t    dump = {\n\n  \t\t// The objType is used mostly internally, you can fix a (custom) type in advance\n  \t\tparse: function parse(obj, objType, stack) {\n  \t\t\tstack = stack || [];\n  \t\t\tvar res,\n  \t\t\t    parser,\n  \t\t\t    parserType,\n  \t\t\t    objIndex = stack.indexOf(obj);\n\n  \t\t\tif (objIndex !== -1) {\n  \t\t\t\treturn \"recursion(\" + (objIndex - stack.length) + \")\";\n  \t\t\t}\n\n  \t\t\tobjType = objType || this.typeOf(obj);\n  \t\t\tparser = this.parsers[objType];\n  \t\t\tparserType = typeof parser === \"undefined\" ? \"undefined\" : _typeof(parser);\n\n  \t\t\tif (parserType === \"function\") {\n  \t\t\t\tstack.push(obj);\n  \t\t\t\tres = parser.call(this, obj, stack);\n  \t\t\t\tstack.pop();\n  \t\t\t\treturn res;\n  \t\t\t}\n  \t\t\treturn parserType === \"string\" ? parser : this.parsers.error;\n  \t\t},\n  \t\ttypeOf: function typeOf(obj) {\n  \t\t\tvar type;\n\n  \t\t\tif (obj === null) {\n  \t\t\t\ttype = \"null\";\n  \t\t\t} else if (typeof obj === \"undefined\") {\n  \t\t\t\ttype = \"undefined\";\n  \t\t\t} else if (is(\"regexp\", obj)) {\n  \t\t\t\ttype = \"regexp\";\n  \t\t\t} else if (is(\"date\", obj)) {\n  \t\t\t\ttype = \"date\";\n  \t\t\t} else if (is(\"function\", obj)) {\n  \t\t\t\ttype = \"function\";\n  \t\t\t} else if (obj.setInterval !== undefined && obj.document !== undefined && obj.nodeType === undefined) {\n  \t\t\t\ttype = \"window\";\n  \t\t\t} else if (obj.nodeType === 9) {\n  \t\t\t\ttype = \"document\";\n  \t\t\t} else if (obj.nodeType) {\n  \t\t\t\ttype = \"node\";\n  \t\t\t} else if (isArray(obj)) {\n  \t\t\t\ttype = \"array\";\n  \t\t\t} else if (obj.constructor === Error.prototype.constructor) {\n  \t\t\t\ttype = \"error\";\n  \t\t\t} else {\n  \t\t\t\ttype = typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n  \t\t\t}\n  \t\t\treturn type;\n  \t\t},\n\n  \t\tseparator: function separator() {\n  \t\t\tif (this.multiline) {\n  \t\t\t\treturn this.HTML ? \"<br />\" : \"\\n\";\n  \t\t\t} else {\n  \t\t\t\treturn this.HTML ? \"&#160;\" : \" \";\n  \t\t\t}\n  \t\t},\n\n  \t\t// Extra can be a number, shortcut for increasing-calling-decreasing\n  \t\tindent: function indent(extra) {\n  \t\t\tif (!this.multiline) {\n  \t\t\t\treturn \"\";\n  \t\t\t}\n  \t\t\tvar chr = this.indentChar;\n  \t\t\tif (this.HTML) {\n  \t\t\t\tchr = chr.replace(/\\t/g, \"   \").replace(/ /g, \"&#160;\");\n  \t\t\t}\n  \t\t\treturn new Array(this.depth + (extra || 0)).join(chr);\n  \t\t},\n  \t\tup: function up(a) {\n  \t\t\tthis.depth += a || 1;\n  \t\t},\n  \t\tdown: function down(a) {\n  \t\t\tthis.depth -= a || 1;\n  \t\t},\n  \t\tsetParser: function setParser(name, parser) {\n  \t\t\tthis.parsers[name] = parser;\n  \t\t},\n\n  \t\t// The next 3 are exposed so you can use them\n  \t\tquote: quote,\n  \t\tliteral: literal,\n  \t\tjoin: join,\n  \t\tdepth: 1,\n  \t\tmaxDepth: config.maxDepth,\n\n  \t\t// This is the list of parsers, to modify them, use dump.setParser\n  \t\tparsers: {\n  \t\t\twindow: \"[Window]\",\n  \t\t\tdocument: \"[Document]\",\n  \t\t\terror: function error(_error) {\n  \t\t\t\treturn \"Error(\\\"\" + _error.message + \"\\\")\";\n  \t\t\t},\n  \t\t\tunknown: \"[Unknown]\",\n  \t\t\t\"null\": \"null\",\n  \t\t\t\"undefined\": \"undefined\",\n  \t\t\t\"function\": function _function(fn) {\n  \t\t\t\tvar ret = \"function\",\n\n\n  \t\t\t\t// Functions never have name in IE\n  \t\t\t\tname = \"name\" in fn ? fn.name : (reName.exec(fn) || [])[1];\n\n  \t\t\t\tif (name) {\n  \t\t\t\t\tret += \" \" + name;\n  \t\t\t\t}\n  \t\t\t\tret += \"(\";\n\n  \t\t\t\tret = [ret, dump.parse(fn, \"functionArgs\"), \"){\"].join(\"\");\n  \t\t\t\treturn join(ret, dump.parse(fn, \"functionCode\"), \"}\");\n  \t\t\t},\n  \t\t\tarray: array,\n  \t\t\tnodelist: array,\n  \t\t\t\"arguments\": array,\n  \t\t\tobject: function object(map, stack) {\n  \t\t\t\tvar keys,\n  \t\t\t\t    key,\n  \t\t\t\t    val,\n  \t\t\t\t    i,\n  \t\t\t\t    nonEnumerableProperties,\n  \t\t\t\t    ret = [];\n\n  \t\t\t\tif (dump.maxDepth && dump.depth > dump.maxDepth) {\n  \t\t\t\t\treturn \"[object Object]\";\n  \t\t\t\t}\n\n  \t\t\t\tdump.up();\n  \t\t\t\tkeys = [];\n  \t\t\t\tfor (key in map) {\n  \t\t\t\t\tkeys.push(key);\n  \t\t\t\t}\n\n  \t\t\t\t// Some properties are not always enumerable on Error objects.\n  \t\t\t\tnonEnumerableProperties = [\"message\", \"name\"];\n  \t\t\t\tfor (i in nonEnumerableProperties) {\n  \t\t\t\t\tkey = nonEnumerableProperties[i];\n  \t\t\t\t\tif (key in map && !inArray(key, keys)) {\n  \t\t\t\t\t\tkeys.push(key);\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t\tkeys.sort();\n  \t\t\t\tfor (i = 0; i < keys.length; i++) {\n  \t\t\t\t\tkey = keys[i];\n  \t\t\t\t\tval = map[key];\n  \t\t\t\t\tret.push(dump.parse(key, \"key\") + \": \" + dump.parse(val, undefined, stack));\n  \t\t\t\t}\n  \t\t\t\tdump.down();\n  \t\t\t\treturn join(\"{\", ret, \"}\");\n  \t\t\t},\n  \t\t\tnode: function node(_node) {\n  \t\t\t\tvar len,\n  \t\t\t\t    i,\n  \t\t\t\t    val,\n  \t\t\t\t    open = dump.HTML ? \"&lt;\" : \"<\",\n  \t\t\t\t    close = dump.HTML ? \"&gt;\" : \">\",\n  \t\t\t\t    tag = _node.nodeName.toLowerCase(),\n  \t\t\t\t    ret = open + tag,\n  \t\t\t\t    attrs = _node.attributes;\n\n  \t\t\t\tif (attrs) {\n  \t\t\t\t\tfor (i = 0, len = attrs.length; i < len; i++) {\n  \t\t\t\t\t\tval = attrs[i].nodeValue;\n\n  \t\t\t\t\t\t// IE6 includes all attributes in .attributes, even ones not explicitly\n  \t\t\t\t\t\t// set. Those have values like undefined, null, 0, false, \"\" or\n  \t\t\t\t\t\t// \"inherit\".\n  \t\t\t\t\t\tif (val && val !== \"inherit\") {\n  \t\t\t\t\t\t\tret += \" \" + attrs[i].nodeName + \"=\" + dump.parse(val, \"attribute\");\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t\tret += close;\n\n  \t\t\t\t// Show content of TextNode or CDATASection\n  \t\t\t\tif (_node.nodeType === 3 || _node.nodeType === 4) {\n  \t\t\t\t\tret += _node.nodeValue;\n  \t\t\t\t}\n\n  \t\t\t\treturn ret + open + \"/\" + tag + close;\n  \t\t\t},\n\n  \t\t\t// Function calls it internally, it's the arguments part of the function\n  \t\t\tfunctionArgs: function functionArgs(fn) {\n  \t\t\t\tvar args,\n  \t\t\t\t    l = fn.length;\n\n  \t\t\t\tif (!l) {\n  \t\t\t\t\treturn \"\";\n  \t\t\t\t}\n\n  \t\t\t\targs = new Array(l);\n  \t\t\t\twhile (l--) {\n\n  \t\t\t\t\t// 97 is 'a'\n  \t\t\t\t\targs[l] = String.fromCharCode(97 + l);\n  \t\t\t\t}\n  \t\t\t\treturn \" \" + args.join(\", \") + \" \";\n  \t\t\t},\n\n  \t\t\t// Object calls it internally, the key part of an item in a map\n  \t\t\tkey: quote,\n\n  \t\t\t// Function calls it internally, it's the content of the function\n  \t\t\tfunctionCode: \"[code]\",\n\n  \t\t\t// Node calls it internally, it's a html attribute value\n  \t\t\tattribute: quote,\n  \t\t\tstring: quote,\n  \t\t\tdate: quote,\n  \t\t\tregexp: literal,\n  \t\t\tnumber: literal,\n  \t\t\t\"boolean\": literal,\n  \t\t\tsymbol: function symbol(sym) {\n  \t\t\t\treturn sym.toString();\n  \t\t\t}\n  \t\t},\n\n  \t\t// If true, entities are escaped ( <, >, \\t, space and \\n )\n  \t\tHTML: false,\n\n  \t\t// Indentation unit\n  \t\tindentChar: \"  \",\n\n  \t\t// If true, items in a collection, are separated by a \\n, else just a space.\n  \t\tmultiline: true\n  \t};\n\n  \treturn dump;\n  })();\n\n  var LISTENERS = Object.create(null);\n  var SUPPORTED_EVENTS = [\"runStart\", \"suiteStart\", \"testStart\", \"assertion\", \"testEnd\", \"suiteEnd\", \"runEnd\"];\n\n  /**\n   * Emits an event with the specified data to all currently registered listeners.\n   * Callbacks will fire in the order in which they are registered (FIFO). This\n   * function is not exposed publicly; it is used by QUnit internals to emit\n   * logging events.\n   *\n   * @private\n   * @method emit\n   * @param {String} eventName\n   * @param {Object} data\n   * @return {Void}\n   */\n  function emit(eventName, data) {\n  \tif (objectType(eventName) !== \"string\") {\n  \t\tthrow new TypeError(\"eventName must be a string when emitting an event\");\n  \t}\n\n  \t// Clone the callbacks in case one of them registers a new callback\n  \tvar originalCallbacks = LISTENERS[eventName];\n  \tvar callbacks = originalCallbacks ? [].concat(toConsumableArray(originalCallbacks)) : [];\n\n  \tfor (var i = 0; i < callbacks.length; i++) {\n  \t\tcallbacks[i](data);\n  \t}\n  }\n\n  /**\n   * Registers a callback as a listener to the specified event.\n   *\n   * @public\n   * @method on\n   * @param {String} eventName\n   * @param {Function} callback\n   * @return {Void}\n   */\n  function on(eventName, callback) {\n  \tif (objectType(eventName) !== \"string\") {\n  \t\tthrow new TypeError(\"eventName must be a string when registering a listener\");\n  \t} else if (!inArray(eventName, SUPPORTED_EVENTS)) {\n  \t\tvar events = SUPPORTED_EVENTS.join(\", \");\n  \t\tthrow new Error(\"\\\"\" + eventName + \"\\\" is not a valid event; must be one of: \" + events + \".\");\n  \t} else if (objectType(callback) !== \"function\") {\n  \t\tthrow new TypeError(\"callback must be a function when registering a listener\");\n  \t}\n\n  \tif (!LISTENERS[eventName]) {\n  \t\tLISTENERS[eventName] = [];\n  \t}\n\n  \t// Don't register the same callback more than once\n  \tif (!inArray(callback, LISTENERS[eventName])) {\n  \t\tLISTENERS[eventName].push(callback);\n  \t}\n  }\n\n  // Register logging callbacks\n  function registerLoggingCallbacks(obj) {\n  \tvar i,\n  \t    l,\n  \t    key,\n  \t    callbackNames = [\"begin\", \"done\", \"log\", \"testStart\", \"testDone\", \"moduleStart\", \"moduleDone\"];\n\n  \tfunction registerLoggingCallback(key) {\n  \t\tvar loggingCallback = function loggingCallback(callback) {\n  \t\t\tif (objectType(callback) !== \"function\") {\n  \t\t\t\tthrow new Error(\"QUnit logging methods require a callback function as their first parameters.\");\n  \t\t\t}\n\n  \t\t\tconfig.callbacks[key].push(callback);\n  \t\t};\n\n  \t\treturn loggingCallback;\n  \t}\n\n  \tfor (i = 0, l = callbackNames.length; i < l; i++) {\n  \t\tkey = callbackNames[i];\n\n  \t\t// Initialize key collection of logging callback\n  \t\tif (objectType(config.callbacks[key]) === \"undefined\") {\n  \t\t\tconfig.callbacks[key] = [];\n  \t\t}\n\n  \t\tobj[key] = registerLoggingCallback(key);\n  \t}\n  }\n\n  function runLoggingCallbacks(key, args) {\n  \tvar i, l, callbacks;\n\n  \tcallbacks = config.callbacks[key];\n  \tfor (i = 0, l = callbacks.length; i < l; i++) {\n  \t\tcallbacks[i](args);\n  \t}\n  }\n\n  // Doesn't support IE9, it will return undefined on these browsers\n  // See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack\n  var fileName = (sourceFromStacktrace(0) || \"\").replace(/(:\\d+)+\\)?/, \"\").replace(/.+\\//, \"\");\n\n  function extractStacktrace(e, offset) {\n  \toffset = offset === undefined ? 4 : offset;\n\n  \tvar stack, include, i;\n\n  \tif (e && e.stack) {\n  \t\tstack = e.stack.split(\"\\n\");\n  \t\tif (/^error$/i.test(stack[0])) {\n  \t\t\tstack.shift();\n  \t\t}\n  \t\tif (fileName) {\n  \t\t\tinclude = [];\n  \t\t\tfor (i = offset; i < stack.length; i++) {\n  \t\t\t\tif (stack[i].indexOf(fileName) !== -1) {\n  \t\t\t\t\tbreak;\n  \t\t\t\t}\n  \t\t\t\tinclude.push(stack[i]);\n  \t\t\t}\n  \t\t\tif (include.length) {\n  \t\t\t\treturn include.join(\"\\n\");\n  \t\t\t}\n  \t\t}\n  \t\treturn stack[offset];\n  \t}\n  }\n\n  function sourceFromStacktrace(offset) {\n  \tvar error = new Error();\n\n  \t// Support: Safari <=7 only, IE <=10 - 11 only\n  \t// Not all browsers generate the `stack` property for `new Error()`, see also #636\n  \tif (!error.stack) {\n  \t\ttry {\n  \t\t\tthrow error;\n  \t\t} catch (err) {\n  \t\t\terror = err;\n  \t\t}\n  \t}\n\n  \treturn extractStacktrace(error, offset);\n  }\n\n  var priorityCount = 0;\n  var unitSampler = void 0;\n\n  /**\n   * Advances the ProcessingQueue to the next item if it is ready.\n   * @param {Boolean} last\n   */\n  function advance() {\n  \tvar start = now();\n  \tconfig.depth = (config.depth || 0) + 1;\n\n  \twhile (config.queue.length && !config.blocking) {\n  \t\tvar elapsedTime = now() - start;\n\n  \t\tif (!defined.setTimeout || config.updateRate <= 0 || elapsedTime < config.updateRate) {\n  \t\t\tif (priorityCount > 0) {\n  \t\t\t\tpriorityCount--;\n  \t\t\t}\n\n  \t\t\tconfig.queue.shift()();\n  \t\t} else {\n  \t\t\tsetTimeout(advance);\n  \t\t\tbreak;\n  \t\t}\n  \t}\n\n  \tconfig.depth--;\n\n  \tif (!config.blocking && !config.queue.length && config.depth === 0) {\n  \t\tdone();\n  \t}\n  }\n\n  function addToQueueImmediate(callback) {\n  \tif (objectType(callback) === \"array\") {\n  \t\twhile (callback.length) {\n  \t\t\taddToQueueImmediate(callback.pop());\n  \t\t}\n\n  \t\treturn;\n  \t}\n\n  \tconfig.queue.unshift(callback);\n  \tpriorityCount++;\n  }\n\n  /**\n   * Adds a function to the ProcessingQueue for execution.\n   * @param {Function|Array} callback\n   * @param {Boolean} priority\n   * @param {String} seed\n   */\n  function addToQueue(callback, prioritize, seed) {\n  \tif (prioritize) {\n  \t\tconfig.queue.splice(priorityCount++, 0, callback);\n  \t} else if (seed) {\n  \t\tif (!unitSampler) {\n  \t\t\tunitSampler = unitSamplerGenerator(seed);\n  \t\t}\n\n  \t\t// Insert into a random position after all prioritized items\n  \t\tvar index = Math.floor(unitSampler() * (config.queue.length - priorityCount + 1));\n  \t\tconfig.queue.splice(priorityCount + index, 0, callback);\n  \t} else {\n  \t\tconfig.queue.push(callback);\n  \t}\n  }\n\n  /**\n   * Creates a seeded \"sample\" generator which is used for randomizing tests.\n   */\n  function unitSamplerGenerator(seed) {\n\n  \t// 32-bit xorshift, requires only a nonzero seed\n  \t// http://excamera.com/sphinx/article-xorshift.html\n  \tvar sample = parseInt(generateHash(seed), 16) || -1;\n  \treturn function () {\n  \t\tsample ^= sample << 13;\n  \t\tsample ^= sample >>> 17;\n  \t\tsample ^= sample << 5;\n\n  \t\t// ECMAScript has no unsigned number type\n  \t\tif (sample < 0) {\n  \t\t\tsample += 0x100000000;\n  \t\t}\n\n  \t\treturn sample / 0x100000000;\n  \t};\n  }\n\n  /**\n   * This function is called when the ProcessingQueue is done processing all\n   * items. It handles emitting the final run events.\n   */\n  function done() {\n  \tvar storage = config.storage;\n\n  \tProcessingQueue.finished = true;\n\n  \tvar runtime = now() - config.started;\n  \tvar passed = config.stats.all - config.stats.bad;\n\n  \temit(\"runEnd\", globalSuite.end(true));\n  \trunLoggingCallbacks(\"done\", {\n  \t\tpassed: passed,\n  \t\tfailed: config.stats.bad,\n  \t\ttotal: config.stats.all,\n  \t\truntime: runtime\n  \t});\n\n  \t// Clear own storage items if all tests passed\n  \tif (storage && config.stats.bad === 0) {\n  \t\tfor (var i = storage.length - 1; i >= 0; i--) {\n  \t\t\tvar key = storage.key(i);\n\n  \t\t\tif (key.indexOf(\"qunit-test-\") === 0) {\n  \t\t\t\tstorage.removeItem(key);\n  \t\t\t}\n  \t\t}\n  \t}\n  }\n\n  var ProcessingQueue = {\n  \tfinished: false,\n  \tadd: addToQueue,\n  \taddImmediate: addToQueueImmediate,\n  \tadvance: advance\n  };\n\n  var TestReport = function () {\n  \tfunction TestReport(name, suite, options) {\n  \t\tclassCallCheck(this, TestReport);\n\n  \t\tthis.name = name;\n  \t\tthis.suiteName = suite.name;\n  \t\tthis.fullName = suite.fullName.concat(name);\n  \t\tthis.runtime = 0;\n  \t\tthis.assertions = [];\n\n  \t\tthis.skipped = !!options.skip;\n  \t\tthis.todo = !!options.todo;\n\n  \t\tthis.valid = options.valid;\n\n  \t\tthis._startTime = 0;\n  \t\tthis._endTime = 0;\n\n  \t\tsuite.pushTest(this);\n  \t}\n\n  \tcreateClass(TestReport, [{\n  \t\tkey: \"start\",\n  \t\tvalue: function start(recordTime) {\n  \t\t\tif (recordTime) {\n  \t\t\t\tthis._startTime = Date.now();\n  \t\t\t}\n\n  \t\t\treturn {\n  \t\t\t\tname: this.name,\n  \t\t\t\tsuiteName: this.suiteName,\n  \t\t\t\tfullName: this.fullName.slice()\n  \t\t\t};\n  \t\t}\n  \t}, {\n  \t\tkey: \"end\",\n  \t\tvalue: function end(recordTime) {\n  \t\t\tif (recordTime) {\n  \t\t\t\tthis._endTime = Date.now();\n  \t\t\t}\n\n  \t\t\treturn extend(this.start(), {\n  \t\t\t\truntime: this.getRuntime(),\n  \t\t\t\tstatus: this.getStatus(),\n  \t\t\t\terrors: this.getFailedAssertions(),\n  \t\t\t\tassertions: this.getAssertions()\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"pushAssertion\",\n  \t\tvalue: function pushAssertion(assertion) {\n  \t\t\tthis.assertions.push(assertion);\n  \t\t}\n  \t}, {\n  \t\tkey: \"getRuntime\",\n  \t\tvalue: function getRuntime() {\n  \t\t\treturn this._endTime - this._startTime;\n  \t\t}\n  \t}, {\n  \t\tkey: \"getStatus\",\n  \t\tvalue: function getStatus() {\n  \t\t\tif (this.skipped) {\n  \t\t\t\treturn \"skipped\";\n  \t\t\t}\n\n  \t\t\tvar testPassed = this.getFailedAssertions().length > 0 ? this.todo : !this.todo;\n\n  \t\t\tif (!testPassed) {\n  \t\t\t\treturn \"failed\";\n  \t\t\t} else if (this.todo) {\n  \t\t\t\treturn \"todo\";\n  \t\t\t} else {\n  \t\t\t\treturn \"passed\";\n  \t\t\t}\n  \t\t}\n  \t}, {\n  \t\tkey: \"getFailedAssertions\",\n  \t\tvalue: function getFailedAssertions() {\n  \t\t\treturn this.assertions.filter(function (assertion) {\n  \t\t\t\treturn !assertion.passed;\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"getAssertions\",\n  \t\tvalue: function getAssertions() {\n  \t\t\treturn this.assertions.slice();\n  \t\t}\n\n  \t\t// Remove actual and expected values from assertions. This is to prevent\n  \t\t// leaking memory throughout a test suite.\n\n  \t}, {\n  \t\tkey: \"slimAssertions\",\n  \t\tvalue: function slimAssertions() {\n  \t\t\tthis.assertions = this.assertions.map(function (assertion) {\n  \t\t\t\tdelete assertion.actual;\n  \t\t\t\tdelete assertion.expected;\n  \t\t\t\treturn assertion;\n  \t\t\t});\n  \t\t}\n  \t}]);\n  \treturn TestReport;\n  }();\n\n  var focused$1 = false;\n\n  function Test(settings) {\n  \tvar i, l;\n\n  \t++Test.count;\n\n  \tthis.expected = null;\n  \tthis.assertions = [];\n  \tthis.semaphore = 0;\n  \tthis.module = config.currentModule;\n  \tthis.stack = sourceFromStacktrace(3);\n  \tthis.steps = [];\n  \tthis.timeout = undefined;\n\n  \t// If a module is skipped, all its tests and the tests of the child suites\n  \t// should be treated as skipped even if they are defined as `only` or `todo`.\n  \t// As for `todo` module, all its tests will be treated as `todo` except for\n  \t// tests defined as `skip` which will be left intact.\n  \t//\n  \t// So, if a test is defined as `todo` and is inside a skipped module, we should\n  \t// then treat that test as if was defined as `skip`.\n  \tif (this.module.skip) {\n  \t\tsettings.skip = true;\n  \t\tsettings.todo = false;\n\n  \t\t// Skipped tests should be left intact\n  \t} else if (this.module.todo && !settings.skip) {\n  \t\tsettings.todo = true;\n  \t}\n\n  \textend(this, settings);\n\n  \tthis.testReport = new TestReport(settings.testName, this.module.suiteReport, {\n  \t\ttodo: settings.todo,\n  \t\tskip: settings.skip,\n  \t\tvalid: this.valid()\n  \t});\n\n  \t// Register unique strings\n  \tfor (i = 0, l = this.module.tests; i < l.length; i++) {\n  \t\tif (this.module.tests[i].name === this.testName) {\n  \t\t\tthis.testName += \" \";\n  \t\t}\n  \t}\n\n  \tthis.testId = generateHash(this.module.name, this.testName);\n\n  \tthis.module.tests.push({\n  \t\tname: this.testName,\n  \t\ttestId: this.testId,\n  \t\tskip: !!settings.skip\n  \t});\n\n  \tif (settings.skip) {\n\n  \t\t// Skipped tests will fully ignore any sent callback\n  \t\tthis.callback = function () {};\n  \t\tthis.async = false;\n  \t\tthis.expected = 0;\n  \t} else {\n  \t\tif (typeof this.callback !== \"function\") {\n  \t\t\tvar method = this.todo ? \"todo\" : \"test\";\n\n  \t\t\t// eslint-disable-next-line max-len\n  \t\t\tthrow new TypeError(\"You must provide a function as a test callback to QUnit.\" + method + \"(\\\"\" + settings.testName + \"\\\")\");\n  \t\t}\n\n  \t\tthis.assert = new Assert(this);\n  \t}\n  }\n\n  Test.count = 0;\n\n  function getNotStartedModules(startModule) {\n  \tvar module = startModule,\n  \t    modules = [];\n\n  \twhile (module && module.testsRun === 0) {\n  \t\tmodules.push(module);\n  \t\tmodule = module.parentModule;\n  \t}\n\n  \treturn modules;\n  }\n\n  Test.prototype = {\n  \tbefore: function before() {\n  \t\tvar i,\n  \t\t    startModule,\n  \t\t    module = this.module,\n  \t\t    notStartedModules = getNotStartedModules(module);\n\n  \t\tfor (i = notStartedModules.length - 1; i >= 0; i--) {\n  \t\t\tstartModule = notStartedModules[i];\n  \t\t\tstartModule.stats = { all: 0, bad: 0, started: now() };\n  \t\t\temit(\"suiteStart\", startModule.suiteReport.start(true));\n  \t\t\trunLoggingCallbacks(\"moduleStart\", {\n  \t\t\t\tname: startModule.name,\n  \t\t\t\ttests: startModule.tests\n  \t\t\t});\n  \t\t}\n\n  \t\tconfig.current = this;\n\n  \t\tthis.testEnvironment = extend({}, module.testEnvironment);\n\n  \t\tthis.started = now();\n  \t\temit(\"testStart\", this.testReport.start(true));\n  \t\trunLoggingCallbacks(\"testStart\", {\n  \t\t\tname: this.testName,\n  \t\t\tmodule: module.name,\n  \t\t\ttestId: this.testId,\n  \t\t\tpreviousFailure: this.previousFailure\n  \t\t});\n\n  \t\tif (!config.pollution) {\n  \t\t\tsaveGlobal();\n  \t\t}\n  \t},\n\n  \trun: function run() {\n  \t\tvar promise;\n\n  \t\tconfig.current = this;\n\n  \t\tthis.callbackStarted = now();\n\n  \t\tif (config.notrycatch) {\n  \t\t\trunTest(this);\n  \t\t\treturn;\n  \t\t}\n\n  \t\ttry {\n  \t\t\trunTest(this);\n  \t\t} catch (e) {\n  \t\t\tthis.pushFailure(\"Died on test #\" + (this.assertions.length + 1) + \" \" + this.stack + \": \" + (e.message || e), extractStacktrace(e, 0));\n\n  \t\t\t// Else next test will carry the responsibility\n  \t\t\tsaveGlobal();\n\n  \t\t\t// Restart the tests if they're blocking\n  \t\t\tif (config.blocking) {\n  \t\t\t\tinternalRecover(this);\n  \t\t\t}\n  \t\t}\n\n  \t\tfunction runTest(test) {\n  \t\t\tpromise = test.callback.call(test.testEnvironment, test.assert);\n  \t\t\ttest.resolvePromise(promise);\n\n  \t\t\t// If the test has a \"lock\" on it, but the timeout is 0, then we push a\n  \t\t\t// failure as the test should be synchronous.\n  \t\t\tif (test.timeout === 0 && test.semaphore !== 0) {\n  \t\t\t\tpushFailure(\"Test did not finish synchronously even though assert.timeout( 0 ) was used.\", sourceFromStacktrace(2));\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \tafter: function after() {\n  \t\tcheckPollution();\n  \t},\n\n  \tqueueHook: function queueHook(hook, hookName, hookOwner) {\n  \t\tvar _this = this;\n\n  \t\tvar callHook = function callHook() {\n  \t\t\tvar promise = hook.call(_this.testEnvironment, _this.assert);\n  \t\t\t_this.resolvePromise(promise, hookName);\n  \t\t};\n\n  \t\tvar runHook = function runHook() {\n  \t\t\tif (hookName === \"before\") {\n  \t\t\t\tif (hookOwner.unskippedTestsRun !== 0) {\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\t_this.preserveEnvironment = true;\n  \t\t\t}\n\n  \t\t\tif (hookName === \"after\" && hookOwner.unskippedTestsRun !== numberOfUnskippedTests(hookOwner) - 1 && config.queue.length > 2) {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tconfig.current = _this;\n  \t\t\tif (config.notrycatch) {\n  \t\t\t\tcallHook();\n  \t\t\t\treturn;\n  \t\t\t}\n  \t\t\ttry {\n  \t\t\t\tcallHook();\n  \t\t\t} catch (error) {\n  \t\t\t\t_this.pushFailure(hookName + \" failed on \" + _this.testName + \": \" + (error.message || error), extractStacktrace(error, 0));\n  \t\t\t}\n  \t\t};\n\n  \t\treturn runHook;\n  \t},\n\n\n  \t// Currently only used for module level hooks, can be used to add global level ones\n  \thooks: function hooks(handler) {\n  \t\tvar hooks = [];\n\n  \t\tfunction processHooks(test, module) {\n  \t\t\tif (module.parentModule) {\n  \t\t\t\tprocessHooks(test, module.parentModule);\n  \t\t\t}\n\n  \t\t\tif (module.hooks[handler].length) {\n  \t\t\t\tfor (var i = 0; i < module.hooks[handler].length; i++) {\n  \t\t\t\t\thooks.push(test.queueHook(module.hooks[handler][i], handler, module));\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\t// Hooks are ignored on skipped tests\n  \t\tif (!this.skip) {\n  \t\t\tprocessHooks(this, this.module);\n  \t\t}\n\n  \t\treturn hooks;\n  \t},\n\n\n  \tfinish: function finish() {\n  \t\tconfig.current = this;\n  \t\tif (config.requireExpects && this.expected === null) {\n  \t\t\tthis.pushFailure(\"Expected number of assertions to be defined, but expect() was \" + \"not called.\", this.stack);\n  \t\t} else if (this.expected !== null && this.expected !== this.assertions.length) {\n  \t\t\tthis.pushFailure(\"Expected \" + this.expected + \" assertions, but \" + this.assertions.length + \" were run\", this.stack);\n  \t\t} else if (this.expected === null && !this.assertions.length) {\n  \t\t\tthis.pushFailure(\"Expected at least one assertion, but none were run - call \" + \"expect(0) to accept zero assertions.\", this.stack);\n  \t\t}\n\n  \t\tvar i,\n  \t\t    module = this.module,\n  \t\t    moduleName = module.name,\n  \t\t    testName = this.testName,\n  \t\t    skipped = !!this.skip,\n  \t\t    todo = !!this.todo,\n  \t\t    bad = 0,\n  \t\t    storage = config.storage;\n\n  \t\tthis.runtime = now() - this.started;\n\n  \t\tconfig.stats.all += this.assertions.length;\n  \t\tmodule.stats.all += this.assertions.length;\n\n  \t\tfor (i = 0; i < this.assertions.length; i++) {\n  \t\t\tif (!this.assertions[i].result) {\n  \t\t\t\tbad++;\n  \t\t\t\tconfig.stats.bad++;\n  \t\t\t\tmodule.stats.bad++;\n  \t\t\t}\n  \t\t}\n\n  \t\tnotifyTestsRan(module, skipped);\n\n  \t\t// Store result when possible\n  \t\tif (storage) {\n  \t\t\tif (bad) {\n  \t\t\t\tstorage.setItem(\"qunit-test-\" + moduleName + \"-\" + testName, bad);\n  \t\t\t} else {\n  \t\t\t\tstorage.removeItem(\"qunit-test-\" + moduleName + \"-\" + testName);\n  \t\t\t}\n  \t\t}\n\n  \t\t// After emitting the js-reporters event we cleanup the assertion data to\n  \t\t// avoid leaking it. It is not used by the legacy testDone callbacks.\n  \t\temit(\"testEnd\", this.testReport.end(true));\n  \t\tthis.testReport.slimAssertions();\n\n  \t\trunLoggingCallbacks(\"testDone\", {\n  \t\t\tname: testName,\n  \t\t\tmodule: moduleName,\n  \t\t\tskipped: skipped,\n  \t\t\ttodo: todo,\n  \t\t\tfailed: bad,\n  \t\t\tpassed: this.assertions.length - bad,\n  \t\t\ttotal: this.assertions.length,\n  \t\t\truntime: skipped ? 0 : this.runtime,\n\n  \t\t\t// HTML Reporter use\n  \t\t\tassertions: this.assertions,\n  \t\t\ttestId: this.testId,\n\n  \t\t\t// Source of Test\n  \t\t\tsource: this.stack\n  \t\t});\n\n  \t\tif (module.testsRun === numberOfTests(module)) {\n  \t\t\tlogSuiteEnd(module);\n\n  \t\t\t// Check if the parent modules, iteratively, are done. If that the case,\n  \t\t\t// we emit the `suiteEnd` event and trigger `moduleDone` callback.\n  \t\t\tvar parent = module.parentModule;\n  \t\t\twhile (parent && parent.testsRun === numberOfTests(parent)) {\n  \t\t\t\tlogSuiteEnd(parent);\n  \t\t\t\tparent = parent.parentModule;\n  \t\t\t}\n  \t\t}\n\n  \t\tconfig.current = undefined;\n\n  \t\tfunction logSuiteEnd(module) {\n  \t\t\temit(\"suiteEnd\", module.suiteReport.end(true));\n  \t\t\trunLoggingCallbacks(\"moduleDone\", {\n  \t\t\t\tname: module.name,\n  \t\t\t\ttests: module.tests,\n  \t\t\t\tfailed: module.stats.bad,\n  \t\t\t\tpassed: module.stats.all - module.stats.bad,\n  \t\t\t\ttotal: module.stats.all,\n  \t\t\t\truntime: now() - module.stats.started\n  \t\t\t});\n  \t\t}\n  \t},\n\n  \tpreserveTestEnvironment: function preserveTestEnvironment() {\n  \t\tif (this.preserveEnvironment) {\n  \t\t\tthis.module.testEnvironment = this.testEnvironment;\n  \t\t\tthis.testEnvironment = extend({}, this.module.testEnvironment);\n  \t\t}\n  \t},\n\n  \tqueue: function queue() {\n  \t\tvar test = this;\n\n  \t\tif (!this.valid()) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tfunction runTest() {\n\n  \t\t\t// Each of these can by async\n  \t\t\tProcessingQueue.addImmediate([function () {\n  \t\t\t\ttest.before();\n  \t\t\t}, test.hooks(\"before\"), function () {\n  \t\t\t\ttest.preserveTestEnvironment();\n  \t\t\t}, test.hooks(\"beforeEach\"), function () {\n  \t\t\t\ttest.run();\n  \t\t\t}, test.hooks(\"afterEach\").reverse(), test.hooks(\"after\").reverse(), function () {\n  \t\t\t\ttest.after();\n  \t\t\t}, function () {\n  \t\t\t\ttest.finish();\n  \t\t\t}]);\n  \t\t}\n\n  \t\tvar previousFailCount = config.storage && +config.storage.getItem(\"qunit-test-\" + this.module.name + \"-\" + this.testName);\n\n  \t\t// Prioritize previously failed tests, detected from storage\n  \t\tvar prioritize = config.reorder && !!previousFailCount;\n\n  \t\tthis.previousFailure = !!previousFailCount;\n\n  \t\tProcessingQueue.add(runTest, prioritize, config.seed);\n\n  \t\t// If the queue has already finished, we manually process the new test\n  \t\tif (ProcessingQueue.finished) {\n  \t\t\tProcessingQueue.advance();\n  \t\t}\n  \t},\n\n\n  \tpushResult: function pushResult(resultInfo) {\n  \t\tif (this !== config.current) {\n  \t\t\tthrow new Error(\"Assertion occurred after test had finished.\");\n  \t\t}\n\n  \t\t// Destructure of resultInfo = { result, actual, expected, message, negative }\n  \t\tvar source,\n  \t\t    details = {\n  \t\t\tmodule: this.module.name,\n  \t\t\tname: this.testName,\n  \t\t\tresult: resultInfo.result,\n  \t\t\tmessage: resultInfo.message,\n  \t\t\tactual: resultInfo.actual,\n  \t\t\ttestId: this.testId,\n  \t\t\tnegative: resultInfo.negative || false,\n  \t\t\truntime: now() - this.started,\n  \t\t\ttodo: !!this.todo\n  \t\t};\n\n  \t\tif (hasOwn.call(resultInfo, \"expected\")) {\n  \t\t\tdetails.expected = resultInfo.expected;\n  \t\t}\n\n  \t\tif (!resultInfo.result) {\n  \t\t\tsource = resultInfo.source || sourceFromStacktrace();\n\n  \t\t\tif (source) {\n  \t\t\t\tdetails.source = source;\n  \t\t\t}\n  \t\t}\n\n  \t\tthis.logAssertion(details);\n\n  \t\tthis.assertions.push({\n  \t\t\tresult: !!resultInfo.result,\n  \t\t\tmessage: resultInfo.message\n  \t\t});\n  \t},\n\n  \tpushFailure: function pushFailure(message, source, actual) {\n  \t\tif (!(this instanceof Test)) {\n  \t\t\tthrow new Error(\"pushFailure() assertion outside test context, was \" + sourceFromStacktrace(2));\n  \t\t}\n\n  \t\tthis.pushResult({\n  \t\t\tresult: false,\n  \t\t\tmessage: message || \"error\",\n  \t\t\tactual: actual || null,\n  \t\t\tsource: source\n  \t\t});\n  \t},\n\n  \t/**\n    * Log assertion details using both the old QUnit.log interface and\n    * QUnit.on( \"assertion\" ) interface.\n    *\n    * @private\n    */\n  \tlogAssertion: function logAssertion(details) {\n  \t\trunLoggingCallbacks(\"log\", details);\n\n  \t\tvar assertion = {\n  \t\t\tpassed: details.result,\n  \t\t\tactual: details.actual,\n  \t\t\texpected: details.expected,\n  \t\t\tmessage: details.message,\n  \t\t\tstack: details.source,\n  \t\t\ttodo: details.todo\n  \t\t};\n  \t\tthis.testReport.pushAssertion(assertion);\n  \t\temit(\"assertion\", assertion);\n  \t},\n\n\n  \tresolvePromise: function resolvePromise(promise, phase) {\n  \t\tvar then,\n  \t\t    resume,\n  \t\t    message,\n  \t\t    test = this;\n  \t\tif (promise != null) {\n  \t\t\tthen = promise.then;\n  \t\t\tif (objectType(then) === \"function\") {\n  \t\t\t\tresume = internalStop(test);\n  \t\t\t\tif (config.notrycatch) {\n  \t\t\t\t\tthen.call(promise, function () {\n  \t\t\t\t\t\tresume();\n  \t\t\t\t\t});\n  \t\t\t\t} else {\n  \t\t\t\t\tthen.call(promise, function () {\n  \t\t\t\t\t\tresume();\n  \t\t\t\t\t}, function (error) {\n  \t\t\t\t\t\tmessage = \"Promise rejected \" + (!phase ? \"during\" : phase.replace(/Each$/, \"\")) + \" \\\"\" + test.testName + \"\\\": \" + (error && error.message || error);\n  \t\t\t\t\t\ttest.pushFailure(message, extractStacktrace(error, 0));\n\n  \t\t\t\t\t\t// Else next test will carry the responsibility\n  \t\t\t\t\t\tsaveGlobal();\n\n  \t\t\t\t\t\t// Unblock\n  \t\t\t\t\t\tresume();\n  \t\t\t\t\t});\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \tvalid: function valid() {\n  \t\tvar filter = config.filter,\n  \t\t    regexFilter = /^(!?)\\/([\\w\\W]*)\\/(i?$)/.exec(filter),\n  \t\t    module = config.module && config.module.toLowerCase(),\n  \t\t    fullName = this.module.name + \": \" + this.testName;\n\n  \t\tfunction moduleChainNameMatch(testModule) {\n  \t\t\tvar testModuleName = testModule.name ? testModule.name.toLowerCase() : null;\n  \t\t\tif (testModuleName === module) {\n  \t\t\t\treturn true;\n  \t\t\t} else if (testModule.parentModule) {\n  \t\t\t\treturn moduleChainNameMatch(testModule.parentModule);\n  \t\t\t} else {\n  \t\t\t\treturn false;\n  \t\t\t}\n  \t\t}\n\n  \t\tfunction moduleChainIdMatch(testModule) {\n  \t\t\treturn inArray(testModule.moduleId, config.moduleId) || testModule.parentModule && moduleChainIdMatch(testModule.parentModule);\n  \t\t}\n\n  \t\t// Internally-generated tests are always valid\n  \t\tif (this.callback && this.callback.validTest) {\n  \t\t\treturn true;\n  \t\t}\n\n  \t\tif (config.moduleId && config.moduleId.length > 0 && !moduleChainIdMatch(this.module)) {\n\n  \t\t\treturn false;\n  \t\t}\n\n  \t\tif (config.testId && config.testId.length > 0 && !inArray(this.testId, config.testId)) {\n\n  \t\t\treturn false;\n  \t\t}\n\n  \t\tif (module && !moduleChainNameMatch(this.module)) {\n  \t\t\treturn false;\n  \t\t}\n\n  \t\tif (!filter) {\n  \t\t\treturn true;\n  \t\t}\n\n  \t\treturn regexFilter ? this.regexFilter(!!regexFilter[1], regexFilter[2], regexFilter[3], fullName) : this.stringFilter(filter, fullName);\n  \t},\n\n  \tregexFilter: function regexFilter(exclude, pattern, flags, fullName) {\n  \t\tvar regex = new RegExp(pattern, flags);\n  \t\tvar match = regex.test(fullName);\n\n  \t\treturn match !== exclude;\n  \t},\n\n  \tstringFilter: function stringFilter(filter, fullName) {\n  \t\tfilter = filter.toLowerCase();\n  \t\tfullName = fullName.toLowerCase();\n\n  \t\tvar include = filter.charAt(0) !== \"!\";\n  \t\tif (!include) {\n  \t\t\tfilter = filter.slice(1);\n  \t\t}\n\n  \t\t// If the filter matches, we need to honour include\n  \t\tif (fullName.indexOf(filter) !== -1) {\n  \t\t\treturn include;\n  \t\t}\n\n  \t\t// Otherwise, do the opposite\n  \t\treturn !include;\n  \t}\n  };\n\n  function pushFailure() {\n  \tif (!config.current) {\n  \t\tthrow new Error(\"pushFailure() assertion outside test context, in \" + sourceFromStacktrace(2));\n  \t}\n\n  \t// Gets current test obj\n  \tvar currentTest = config.current;\n\n  \treturn currentTest.pushFailure.apply(currentTest, arguments);\n  }\n\n  function saveGlobal() {\n  \tconfig.pollution = [];\n\n  \tif (config.noglobals) {\n  \t\tfor (var key in global$1) {\n  \t\t\tif (hasOwn.call(global$1, key)) {\n\n  \t\t\t\t// In Opera sometimes DOM element ids show up here, ignore them\n  \t\t\t\tif (/^qunit-test-output/.test(key)) {\n  \t\t\t\t\tcontinue;\n  \t\t\t\t}\n  \t\t\t\tconfig.pollution.push(key);\n  \t\t\t}\n  \t\t}\n  \t}\n  }\n\n  function checkPollution() {\n  \tvar newGlobals,\n  \t    deletedGlobals,\n  \t    old = config.pollution;\n\n  \tsaveGlobal();\n\n  \tnewGlobals = diff(config.pollution, old);\n  \tif (newGlobals.length > 0) {\n  \t\tpushFailure(\"Introduced global variable(s): \" + newGlobals.join(\", \"));\n  \t}\n\n  \tdeletedGlobals = diff(old, config.pollution);\n  \tif (deletedGlobals.length > 0) {\n  \t\tpushFailure(\"Deleted global variable(s): \" + deletedGlobals.join(\", \"));\n  \t}\n  }\n\n  // Will be exposed as QUnit.test\n  function test(testName, callback) {\n  \tif (focused$1) {\n  \t\treturn;\n  \t}\n\n  \tvar newTest = new Test({\n  \t\ttestName: testName,\n  \t\tcallback: callback\n  \t});\n\n  \tnewTest.queue();\n  }\n\n  function todo(testName, callback) {\n  \tif (focused$1) {\n  \t\treturn;\n  \t}\n\n  \tvar newTest = new Test({\n  \t\ttestName: testName,\n  \t\tcallback: callback,\n  \t\ttodo: true\n  \t});\n\n  \tnewTest.queue();\n  }\n\n  // Will be exposed as QUnit.skip\n  function skip(testName) {\n  \tif (focused$1) {\n  \t\treturn;\n  \t}\n\n  \tvar test = new Test({\n  \t\ttestName: testName,\n  \t\tskip: true\n  \t});\n\n  \ttest.queue();\n  }\n\n  // Will be exposed as QUnit.only\n  function only(testName, callback) {\n  \tif (focused$1) {\n  \t\treturn;\n  \t}\n\n  \tconfig.queue.length = 0;\n  \tfocused$1 = true;\n\n  \tvar newTest = new Test({\n  \t\ttestName: testName,\n  \t\tcallback: callback\n  \t});\n\n  \tnewTest.queue();\n  }\n\n  // Put a hold on processing and return a function that will release it.\n  function internalStop(test) {\n  \ttest.semaphore += 1;\n  \tconfig.blocking = true;\n\n  \t// Set a recovery timeout, if so configured.\n  \tif (defined.setTimeout) {\n  \t\tvar timeoutDuration = void 0;\n\n  \t\tif (typeof test.timeout === \"number\") {\n  \t\t\ttimeoutDuration = test.timeout;\n  \t\t} else if (typeof config.testTimeout === \"number\") {\n  \t\t\ttimeoutDuration = config.testTimeout;\n  \t\t}\n\n  \t\tif (typeof timeoutDuration === \"number\" && timeoutDuration > 0) {\n  \t\t\tclearTimeout(config.timeout);\n  \t\t\tconfig.timeout = setTimeout(function () {\n  \t\t\t\tpushFailure(\"Test took longer than \" + timeoutDuration + \"ms; test timed out.\", sourceFromStacktrace(2));\n  \t\t\t\tinternalRecover(test);\n  \t\t\t}, timeoutDuration);\n  \t\t}\n  \t}\n\n  \tvar released = false;\n  \treturn function resume() {\n  \t\tif (released) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\treleased = true;\n  \t\ttest.semaphore -= 1;\n  \t\tinternalStart(test);\n  \t};\n  }\n\n  // Forcefully release all processing holds.\n  function internalRecover(test) {\n  \ttest.semaphore = 0;\n  \tinternalStart(test);\n  }\n\n  // Release a processing hold, scheduling a resumption attempt if no holds remain.\n  function internalStart(test) {\n\n  \t// If semaphore is non-numeric, throw error\n  \tif (isNaN(test.semaphore)) {\n  \t\ttest.semaphore = 0;\n\n  \t\tpushFailure(\"Invalid value on test.semaphore\", sourceFromStacktrace(2));\n  \t\treturn;\n  \t}\n\n  \t// Don't start until equal number of stop-calls\n  \tif (test.semaphore > 0) {\n  \t\treturn;\n  \t}\n\n  \t// Throw an Error if start is called more often than stop\n  \tif (test.semaphore < 0) {\n  \t\ttest.semaphore = 0;\n\n  \t\tpushFailure(\"Tried to restart test while already started (test's semaphore was 0 already)\", sourceFromStacktrace(2));\n  \t\treturn;\n  \t}\n\n  \t// Add a slight delay to allow more assertions etc.\n  \tif (defined.setTimeout) {\n  \t\tif (config.timeout) {\n  \t\t\tclearTimeout(config.timeout);\n  \t\t}\n  \t\tconfig.timeout = setTimeout(function () {\n  \t\t\tif (test.semaphore > 0) {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tif (config.timeout) {\n  \t\t\t\tclearTimeout(config.timeout);\n  \t\t\t}\n\n  \t\t\tbegin();\n  \t\t});\n  \t} else {\n  \t\tbegin();\n  \t}\n  }\n\n  function collectTests(module) {\n  \tvar tests = [].concat(module.tests);\n  \tvar modules = [].concat(toConsumableArray(module.childModules));\n\n  \t// Do a breadth-first traversal of the child modules\n  \twhile (modules.length) {\n  \t\tvar nextModule = modules.shift();\n  \t\ttests.push.apply(tests, nextModule.tests);\n  \t\tmodules.push.apply(modules, toConsumableArray(nextModule.childModules));\n  \t}\n\n  \treturn tests;\n  }\n\n  function numberOfTests(module) {\n  \treturn collectTests(module).length;\n  }\n\n  function numberOfUnskippedTests(module) {\n  \treturn collectTests(module).filter(function (test) {\n  \t\treturn !test.skip;\n  \t}).length;\n  }\n\n  function notifyTestsRan(module, skipped) {\n  \tmodule.testsRun++;\n  \tif (!skipped) {\n  \t\tmodule.unskippedTestsRun++;\n  \t}\n  \twhile (module = module.parentModule) {\n  \t\tmodule.testsRun++;\n  \t\tif (!skipped) {\n  \t\t\tmodule.unskippedTestsRun++;\n  \t\t}\n  \t}\n  }\n\n  /**\n   * Returns a function that proxies to the given method name on the globals\n   * console object. The proxy will also detect if the console doesn't exist and\n   * will appropriately no-op. This allows support for IE9, which doesn't have a\n   * console if the developer tools are not open.\n   */\n  function consoleProxy(method) {\n  \treturn function () {\n  \t\tif (console) {\n  \t\t\tconsole[method].apply(console, arguments);\n  \t\t}\n  \t};\n  }\n\n  var Logger = {\n  \twarn: consoleProxy(\"warn\")\n  };\n\n  var Assert = function () {\n  \tfunction Assert(testContext) {\n  \t\tclassCallCheck(this, Assert);\n\n  \t\tthis.test = testContext;\n  \t}\n\n  \t// Assert helpers\n\n  \tcreateClass(Assert, [{\n  \t\tkey: \"timeout\",\n  \t\tvalue: function timeout(duration) {\n  \t\t\tif (typeof duration !== \"number\") {\n  \t\t\t\tthrow new Error(\"You must pass a number as the duration to assert.timeout\");\n  \t\t\t}\n\n  \t\t\tthis.test.timeout = duration;\n  \t\t}\n\n  \t\t// Documents a \"step\", which is a string value, in a test as a passing assertion\n\n  \t}, {\n  \t\tkey: \"step\",\n  \t\tvalue: function step(message) {\n  \t\t\tvar result = !!message;\n\n  \t\t\tthis.test.steps.push(message);\n\n  \t\t\treturn this.pushResult({\n  \t\t\t\tresult: result,\n  \t\t\t\tmessage: message || \"You must provide a message to assert.step\"\n  \t\t\t});\n  \t\t}\n\n  \t\t// Verifies the steps in a test match a given array of string values\n\n  \t}, {\n  \t\tkey: \"verifySteps\",\n  \t\tvalue: function verifySteps(steps, message) {\n  \t\t\tthis.deepEqual(this.test.steps, steps, message);\n  \t\t\tthis.test.steps.length = 0;\n  \t\t}\n\n  \t\t// Specify the number of expected assertions to guarantee that failed test\n  \t\t// (no assertions are run at all) don't slip through.\n\n  \t}, {\n  \t\tkey: \"expect\",\n  \t\tvalue: function expect(asserts) {\n  \t\t\tif (arguments.length === 1) {\n  \t\t\t\tthis.test.expected = asserts;\n  \t\t\t} else {\n  \t\t\t\treturn this.test.expected;\n  \t\t\t}\n  \t\t}\n\n  \t\t// Put a hold on processing and return a function that will release it a maximum of once.\n\n  \t}, {\n  \t\tkey: \"async\",\n  \t\tvalue: function async(count) {\n  \t\t\tvar test$$1 = this.test;\n\n  \t\t\tvar popped = false,\n  \t\t\t    acceptCallCount = count;\n\n  \t\t\tif (typeof acceptCallCount === \"undefined\") {\n  \t\t\t\tacceptCallCount = 1;\n  \t\t\t}\n\n  \t\t\tvar resume = internalStop(test$$1);\n\n  \t\t\treturn function done() {\n  \t\t\t\tif (config.current !== test$$1) {\n  \t\t\t\t\tthrow Error(\"assert.async callback called after test finished.\");\n  \t\t\t\t}\n\n  \t\t\t\tif (popped) {\n  \t\t\t\t\ttest$$1.pushFailure(\"Too many calls to the `assert.async` callback\", sourceFromStacktrace(2));\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\tacceptCallCount -= 1;\n  \t\t\t\tif (acceptCallCount > 0) {\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n\n  \t\t\t\tpopped = true;\n  \t\t\t\tresume();\n  \t\t\t};\n  \t\t}\n\n  \t\t// Exports test.push() to the user API\n  \t\t// Alias of pushResult.\n\n  \t}, {\n  \t\tkey: \"push\",\n  \t\tvalue: function push(result, actual, expected, message, negative) {\n  \t\t\tLogger.warn(\"assert.push is deprecated and will be removed in QUnit 3.0.\" + \" Please use assert.pushResult instead (https://api.qunitjs.com/assert/pushResult).\");\n\n  \t\t\tvar currentAssert = this instanceof Assert ? this : config.current.assert;\n  \t\t\treturn currentAssert.pushResult({\n  \t\t\t\tresult: result,\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message,\n  \t\t\t\tnegative: negative\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"pushResult\",\n  \t\tvalue: function pushResult(resultInfo) {\n\n  \t\t\t// Destructure of resultInfo = { result, actual, expected, message, negative }\n  \t\t\tvar assert = this;\n  \t\t\tvar currentTest = assert instanceof Assert && assert.test || config.current;\n\n  \t\t\t// Backwards compatibility fix.\n  \t\t\t// Allows the direct use of global exported assertions and QUnit.assert.*\n  \t\t\t// Although, it's use is not recommended as it can leak assertions\n  \t\t\t// to other tests from async tests, because we only get a reference to the current test,\n  \t\t\t// not exactly the test where assertion were intended to be called.\n  \t\t\tif (!currentTest) {\n  \t\t\t\tthrow new Error(\"assertion outside test context, in \" + sourceFromStacktrace(2));\n  \t\t\t}\n\n  \t\t\tif (!(assert instanceof Assert)) {\n  \t\t\t\tassert = currentTest.assert;\n  \t\t\t}\n\n  \t\t\treturn assert.test.pushResult(resultInfo);\n  \t\t}\n  \t}, {\n  \t\tkey: \"ok\",\n  \t\tvalue: function ok(result, message) {\n  \t\t\tif (!message) {\n  \t\t\t\tmessage = result ? \"okay\" : \"failed, expected argument to be truthy, was: \" + dump.parse(result);\n  \t\t\t}\n\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: !!result,\n  \t\t\t\tactual: result,\n  \t\t\t\texpected: true,\n  \t\t\t\tmessage: message\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"notOk\",\n  \t\tvalue: function notOk(result, message) {\n  \t\t\tif (!message) {\n  \t\t\t\tmessage = !result ? \"okay\" : \"failed, expected argument to be falsy, was: \" + dump.parse(result);\n  \t\t\t}\n\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: !result,\n  \t\t\t\tactual: result,\n  \t\t\t\texpected: false,\n  \t\t\t\tmessage: message\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"equal\",\n  \t\tvalue: function equal(actual, expected, message) {\n\n  \t\t\t// eslint-disable-next-line eqeqeq\n  \t\t\tvar result = expected == actual;\n\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: result,\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"notEqual\",\n  \t\tvalue: function notEqual(actual, expected, message) {\n\n  \t\t\t// eslint-disable-next-line eqeqeq\n  \t\t\tvar result = expected != actual;\n\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: result,\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message,\n  \t\t\t\tnegative: true\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"propEqual\",\n  \t\tvalue: function propEqual(actual, expected, message) {\n  \t\t\tactual = objectValues(actual);\n  \t\t\texpected = objectValues(expected);\n\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: equiv(actual, expected),\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"notPropEqual\",\n  \t\tvalue: function notPropEqual(actual, expected, message) {\n  \t\t\tactual = objectValues(actual);\n  \t\t\texpected = objectValues(expected);\n\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: !equiv(actual, expected),\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message,\n  \t\t\t\tnegative: true\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"deepEqual\",\n  \t\tvalue: function deepEqual(actual, expected, message) {\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: equiv(actual, expected),\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"notDeepEqual\",\n  \t\tvalue: function notDeepEqual(actual, expected, message) {\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: !equiv(actual, expected),\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message,\n  \t\t\t\tnegative: true\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"strictEqual\",\n  \t\tvalue: function strictEqual(actual, expected, message) {\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: expected === actual,\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"notStrictEqual\",\n  \t\tvalue: function notStrictEqual(actual, expected, message) {\n  \t\t\tthis.pushResult({\n  \t\t\t\tresult: expected !== actual,\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message,\n  \t\t\t\tnegative: true\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"throws\",\n  \t\tvalue: function throws(block, expected, message) {\n  \t\t\tvar actual = void 0,\n  \t\t\t    result = false;\n\n  \t\t\tvar currentTest = this instanceof Assert && this.test || config.current;\n\n  \t\t\t// 'expected' is optional unless doing string comparison\n  \t\t\tif (objectType(expected) === \"string\") {\n  \t\t\t\tif (message == null) {\n  \t\t\t\t\tmessage = expected;\n  \t\t\t\t\texpected = null;\n  \t\t\t\t} else {\n  \t\t\t\t\tthrow new Error(\"throws/raises does not accept a string value for the expected argument.\\n\" + \"Use a non-string object value (e.g. regExp) instead if it's necessary.\");\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t\tcurrentTest.ignoreGlobalErrors = true;\n  \t\t\ttry {\n  \t\t\t\tblock.call(currentTest.testEnvironment);\n  \t\t\t} catch (e) {\n  \t\t\t\tactual = e;\n  \t\t\t}\n  \t\t\tcurrentTest.ignoreGlobalErrors = false;\n\n  \t\t\tif (actual) {\n  \t\t\t\tvar expectedType = objectType(expected);\n\n  \t\t\t\t// We don't want to validate thrown error\n  \t\t\t\tif (!expected) {\n  \t\t\t\t\tresult = true;\n  \t\t\t\t\texpected = null;\n\n  \t\t\t\t\t// Expected is a regexp\n  \t\t\t\t} else if (expectedType === \"regexp\") {\n  \t\t\t\t\tresult = expected.test(errorString(actual));\n\n  \t\t\t\t\t// Expected is a constructor, maybe an Error constructor\n  \t\t\t\t} else if (expectedType === \"function\" && actual instanceof expected) {\n  \t\t\t\t\tresult = true;\n\n  \t\t\t\t\t// Expected is an Error object\n  \t\t\t\t} else if (expectedType === \"object\") {\n  \t\t\t\t\tresult = actual instanceof expected.constructor && actual.name === expected.name && actual.message === expected.message;\n\n  \t\t\t\t\t// Expected is a validation function which returns true if validation passed\n  \t\t\t\t} else if (expectedType === \"function\" && expected.call({}, actual) === true) {\n  \t\t\t\t\texpected = null;\n  \t\t\t\t\tresult = true;\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t\tcurrentTest.assert.pushResult({\n  \t\t\t\tresult: result,\n  \t\t\t\tactual: actual,\n  \t\t\t\texpected: expected,\n  \t\t\t\tmessage: message\n  \t\t\t});\n  \t\t}\n  \t}, {\n  \t\tkey: \"rejects\",\n  \t\tvalue: function rejects(promise, expected, message) {\n  \t\t\tvar result = false;\n\n  \t\t\tvar currentTest = this instanceof Assert && this.test || config.current;\n\n  \t\t\t// 'expected' is optional unless doing string comparison\n  \t\t\tif (objectType(expected) === \"string\") {\n  \t\t\t\tif (message === undefined) {\n  \t\t\t\t\tmessage = expected;\n  \t\t\t\t\texpected = undefined;\n  \t\t\t\t} else {\n  \t\t\t\t\tmessage = \"assert.rejects does not accept a string value for the expected \" + \"argument.\\nUse a non-string object value (e.g. validator function) instead \" + \"if necessary.\";\n\n  \t\t\t\t\tcurrentTest.assert.pushResult({\n  \t\t\t\t\t\tresult: false,\n  \t\t\t\t\t\tmessage: message\n  \t\t\t\t\t});\n\n  \t\t\t\t\treturn;\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t\tvar then = promise && promise.then;\n  \t\t\tif (objectType(then) !== \"function\") {\n  \t\t\t\tvar _message = \"The value provided to `assert.rejects` in \" + \"\\\"\" + currentTest.testName + \"\\\" was not a promise.\";\n\n  \t\t\t\tcurrentTest.assert.pushResult({\n  \t\t\t\t\tresult: false,\n  \t\t\t\t\tmessage: _message,\n  \t\t\t\t\tactual: promise\n  \t\t\t\t});\n\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tvar done = this.async();\n\n  \t\t\treturn then.call(promise, function handleFulfillment() {\n  \t\t\t\tvar message = \"The promise returned by the `assert.rejects` callback in \" + \"\\\"\" + currentTest.testName + \"\\\" did not reject.\";\n\n  \t\t\t\tcurrentTest.assert.pushResult({\n  \t\t\t\t\tresult: false,\n  \t\t\t\t\tmessage: message,\n  \t\t\t\t\tactual: promise\n  \t\t\t\t});\n\n  \t\t\t\tdone();\n  \t\t\t}, function handleRejection(actual) {\n  \t\t\t\tif (actual) {\n  \t\t\t\t\tvar expectedType = objectType(expected);\n\n  \t\t\t\t\t// We don't want to validate\n  \t\t\t\t\tif (expected === undefined) {\n  \t\t\t\t\t\tresult = true;\n  \t\t\t\t\t\texpected = null;\n\n  \t\t\t\t\t\t// Expected is a regexp\n  \t\t\t\t\t} else if (expectedType === \"regexp\") {\n  \t\t\t\t\t\tresult = expected.test(errorString(actual));\n\n  \t\t\t\t\t\t// Expected is a constructor, maybe an Error constructor\n  \t\t\t\t\t} else if (expectedType === \"function\" && actual instanceof expected) {\n  \t\t\t\t\t\tresult = true;\n\n  \t\t\t\t\t\t// Expected is an Error object\n  \t\t\t\t\t} else if (expectedType === \"object\") {\n  \t\t\t\t\t\tresult = actual instanceof expected.constructor && actual.name === expected.name && actual.message === expected.message;\n\n  \t\t\t\t\t\t// Expected is a validation function which returns true if validation passed\n  \t\t\t\t\t} else {\n  \t\t\t\t\t\tif (expectedType === \"function\") {\n  \t\t\t\t\t\t\tresult = expected.call({}, actual) === true;\n  \t\t\t\t\t\t\texpected = null;\n\n  \t\t\t\t\t\t\t// Expected is some other invalid type\n  \t\t\t\t\t\t} else {\n  \t\t\t\t\t\t\tresult = false;\n  \t\t\t\t\t\t\tmessage = \"invalid expected value provided to `assert.rejects` \" + \"callback in \\\"\" + currentTest.testName + \"\\\": \" + expectedType + \".\";\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n  \t\t\t\t}\n\n  \t\t\t\tcurrentTest.assert.pushResult({\n  \t\t\t\t\tresult: result,\n  \t\t\t\t\tactual: actual,\n  \t\t\t\t\texpected: expected,\n  \t\t\t\t\tmessage: message\n  \t\t\t\t});\n\n  \t\t\t\tdone();\n  \t\t\t});\n  \t\t}\n  \t}]);\n  \treturn Assert;\n  }();\n\n  // Provide an alternative to assert.throws(), for environments that consider throws a reserved word\n  // Known to us are: Closure Compiler, Narwhal\n  // eslint-disable-next-line dot-notation\n\n\n  Assert.prototype.raises = Assert.prototype[\"throws\"];\n\n  /**\n   * Converts an error into a simple string for comparisons.\n   *\n   * @param {Error} error\n   * @return {String}\n   */\n  function errorString(error) {\n  \tvar resultErrorString = error.toString();\n\n  \tif (resultErrorString.substring(0, 7) === \"[object\") {\n  \t\tvar name = error.name ? error.name.toString() : \"Error\";\n  \t\tvar message = error.message ? error.message.toString() : \"\";\n\n  \t\tif (name && message) {\n  \t\t\treturn name + \": \" + message;\n  \t\t} else if (name) {\n  \t\t\treturn name;\n  \t\t} else if (message) {\n  \t\t\treturn message;\n  \t\t} else {\n  \t\t\treturn \"Error\";\n  \t\t}\n  \t} else {\n  \t\treturn resultErrorString;\n  \t}\n  }\n\n  /* global module, exports, define */\n  function exportQUnit(QUnit) {\n\n  \tif (defined.document) {\n\n  \t\t// QUnit may be defined when it is preconfigured but then only QUnit and QUnit.config may be defined.\n  \t\tif (window.QUnit && window.QUnit.version) {\n  \t\t\tthrow new Error(\"QUnit has already been defined.\");\n  \t\t}\n\n  \t\twindow.QUnit = QUnit;\n  \t}\n\n  \t// For nodejs\n  \tif (typeof module !== \"undefined\" && module && module.exports) {\n  \t\tmodule.exports = QUnit;\n\n  \t\t// For consistency with CommonJS environments' exports\n  \t\tmodule.exports.QUnit = QUnit;\n  \t}\n\n  \t// For CommonJS with exports, but without module.exports, like Rhino\n  \tif (typeof exports !== \"undefined\" && exports) {\n  \t\texports.QUnit = QUnit;\n  \t}\n\n  \tif (typeof define === \"function\" && define.amd) {\n  \t\tdefine(function () {\n  \t\t\treturn QUnit;\n  \t\t});\n  \t\tQUnit.config.autostart = false;\n  \t}\n\n  \t// For Web/Service Workers\n  \tif (self$1 && self$1.WorkerGlobalScope && self$1 instanceof self$1.WorkerGlobalScope) {\n  \t\tself$1.QUnit = QUnit;\n  \t}\n  }\n\n  var SuiteReport = function () {\n  \tfunction SuiteReport(name, parentSuite) {\n  \t\tclassCallCheck(this, SuiteReport);\n\n  \t\tthis.name = name;\n  \t\tthis.fullName = parentSuite ? parentSuite.fullName.concat(name) : [];\n\n  \t\tthis.tests = [];\n  \t\tthis.childSuites = [];\n\n  \t\tif (parentSuite) {\n  \t\t\tparentSuite.pushChildSuite(this);\n  \t\t}\n  \t}\n\n  \tcreateClass(SuiteReport, [{\n  \t\tkey: \"start\",\n  \t\tvalue: function start(recordTime) {\n  \t\t\tif (recordTime) {\n  \t\t\t\tthis._startTime = Date.now();\n  \t\t\t}\n\n  \t\t\treturn {\n  \t\t\t\tname: this.name,\n  \t\t\t\tfullName: this.fullName.slice(),\n  \t\t\t\ttests: this.tests.map(function (test) {\n  \t\t\t\t\treturn test.start();\n  \t\t\t\t}),\n  \t\t\t\tchildSuites: this.childSuites.map(function (suite) {\n  \t\t\t\t\treturn suite.start();\n  \t\t\t\t}),\n  \t\t\t\ttestCounts: {\n  \t\t\t\t\ttotal: this.getTestCounts().total\n  \t\t\t\t}\n  \t\t\t};\n  \t\t}\n  \t}, {\n  \t\tkey: \"end\",\n  \t\tvalue: function end(recordTime) {\n  \t\t\tif (recordTime) {\n  \t\t\t\tthis._endTime = Date.now();\n  \t\t\t}\n\n  \t\t\treturn {\n  \t\t\t\tname: this.name,\n  \t\t\t\tfullName: this.fullName.slice(),\n  \t\t\t\ttests: this.tests.map(function (test) {\n  \t\t\t\t\treturn test.end();\n  \t\t\t\t}),\n  \t\t\t\tchildSuites: this.childSuites.map(function (suite) {\n  \t\t\t\t\treturn suite.end();\n  \t\t\t\t}),\n  \t\t\t\ttestCounts: this.getTestCounts(),\n  \t\t\t\truntime: this.getRuntime(),\n  \t\t\t\tstatus: this.getStatus()\n  \t\t\t};\n  \t\t}\n  \t}, {\n  \t\tkey: \"pushChildSuite\",\n  \t\tvalue: function pushChildSuite(suite) {\n  \t\t\tthis.childSuites.push(suite);\n  \t\t}\n  \t}, {\n  \t\tkey: \"pushTest\",\n  \t\tvalue: function pushTest(test) {\n  \t\t\tthis.tests.push(test);\n  \t\t}\n  \t}, {\n  \t\tkey: \"getRuntime\",\n  \t\tvalue: function getRuntime() {\n  \t\t\treturn this._endTime - this._startTime;\n  \t\t}\n  \t}, {\n  \t\tkey: \"getTestCounts\",\n  \t\tvalue: function getTestCounts() {\n  \t\t\tvar counts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { passed: 0, failed: 0, skipped: 0, todo: 0, total: 0 };\n\n  \t\t\tcounts = this.tests.reduce(function (counts, test) {\n  \t\t\t\tif (test.valid) {\n  \t\t\t\t\tcounts[test.getStatus()]++;\n  \t\t\t\t\tcounts.total++;\n  \t\t\t\t}\n\n  \t\t\t\treturn counts;\n  \t\t\t}, counts);\n\n  \t\t\treturn this.childSuites.reduce(function (counts, suite) {\n  \t\t\t\treturn suite.getTestCounts(counts);\n  \t\t\t}, counts);\n  \t\t}\n  \t}, {\n  \t\tkey: \"getStatus\",\n  \t\tvalue: function getStatus() {\n  \t\t\tvar _getTestCounts = this.getTestCounts(),\n  \t\t\t    total = _getTestCounts.total,\n  \t\t\t    failed = _getTestCounts.failed,\n  \t\t\t    skipped = _getTestCounts.skipped,\n  \t\t\t    todo = _getTestCounts.todo;\n\n  \t\t\tif (failed) {\n  \t\t\t\treturn \"failed\";\n  \t\t\t} else {\n  \t\t\t\tif (skipped === total) {\n  \t\t\t\t\treturn \"skipped\";\n  \t\t\t\t} else if (todo === total) {\n  \t\t\t\t\treturn \"todo\";\n  \t\t\t\t} else {\n  \t\t\t\t\treturn \"passed\";\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t}]);\n  \treturn SuiteReport;\n  }();\n\n  // Handle an unhandled exception. By convention, returns true if further\n  // error handling should be suppressed and false otherwise.\n  // In this case, we will only suppress further error handling if the\n  // \"ignoreGlobalErrors\" configuration option is enabled.\n  function onError(error) {\n  \tfor (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n  \t\targs[_key - 1] = arguments[_key];\n  \t}\n\n  \tif (config.current) {\n  \t\tif (config.current.ignoreGlobalErrors) {\n  \t\t\treturn true;\n  \t\t}\n  \t\tpushFailure.apply(undefined, [error.message, error.fileName + \":\" + error.lineNumber].concat(args));\n  \t} else {\n  \t\ttest(\"global failure\", extend(function () {\n  \t\t\tpushFailure.apply(undefined, [error.message, error.fileName + \":\" + error.lineNumber].concat(args));\n  \t\t}, { validTest: true }));\n  \t}\n\n  \treturn false;\n  }\n\n  // Handle an unhandled rejection\n  function onUnhandledRejection(reason) {\n  \tvar resultInfo = {\n  \t\tresult: false,\n  \t\tmessage: reason.message || \"error\",\n  \t\tactual: reason,\n  \t\tsource: reason.stack || sourceFromStacktrace(3)\n  \t};\n\n  \tvar currentTest = config.current;\n  \tif (currentTest) {\n  \t\tcurrentTest.assert.pushResult(resultInfo);\n  \t} else {\n  \t\ttest(\"global failure\", extend(function (assert) {\n  \t\t\tassert.pushResult(resultInfo);\n  \t\t}, { validTest: true }));\n  \t}\n  }\n\n  var focused = false;\n  var QUnit = {};\n  var globalSuite = new SuiteReport();\n\n  // The initial \"currentModule\" represents the global (or top-level) module that\n  // is not explicitly defined by the user, therefore we add the \"globalSuite\" to\n  // it since each module has a suiteReport associated with it.\n  config.currentModule.suiteReport = globalSuite;\n\n  var moduleStack = [];\n  var globalStartCalled = false;\n  var runStarted = false;\n\n  // Figure out if we're running the tests from a server or not\n  QUnit.isLocal = !(defined.document && window.location.protocol !== \"file:\");\n\n  // Expose the current QUnit version\n  QUnit.version = \"2.5.0\";\n\n  function createModule(name, testEnvironment, modifiers) {\n  \tvar parentModule = moduleStack.length ? moduleStack.slice(-1)[0] : null;\n  \tvar moduleName = parentModule !== null ? [parentModule.name, name].join(\" > \") : name;\n  \tvar parentSuite = parentModule ? parentModule.suiteReport : globalSuite;\n\n  \tvar skip$$1 = parentModule !== null && parentModule.skip || modifiers.skip;\n  \tvar todo$$1 = parentModule !== null && parentModule.todo || modifiers.todo;\n\n  \tvar module = {\n  \t\tname: moduleName,\n  \t\tparentModule: parentModule,\n  \t\ttests: [],\n  \t\tmoduleId: generateHash(moduleName),\n  \t\ttestsRun: 0,\n  \t\tunskippedTestsRun: 0,\n  \t\tchildModules: [],\n  \t\tsuiteReport: new SuiteReport(name, parentSuite),\n\n  \t\t// Pass along `skip` and `todo` properties from parent module, in case\n  \t\t// there is one, to childs. And use own otherwise.\n  \t\t// This property will be used to mark own tests and tests of child suites\n  \t\t// as either `skipped` or `todo`.\n  \t\tskip: skip$$1,\n  \t\ttodo: skip$$1 ? false : todo$$1\n  \t};\n\n  \tvar env = {};\n  \tif (parentModule) {\n  \t\tparentModule.childModules.push(module);\n  \t\textend(env, parentModule.testEnvironment);\n  \t}\n  \textend(env, testEnvironment);\n  \tmodule.testEnvironment = env;\n\n  \tconfig.modules.push(module);\n  \treturn module;\n  }\n\n  function processModule(name, options, executeNow) {\n  \tvar modifiers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n  \tvar module = createModule(name, options, modifiers);\n\n  \t// Move any hooks to a 'hooks' object\n  \tvar testEnvironment = module.testEnvironment;\n  \tvar hooks = module.hooks = {};\n\n  \tsetHookFromEnvironment(hooks, testEnvironment, \"before\");\n  \tsetHookFromEnvironment(hooks, testEnvironment, \"beforeEach\");\n  \tsetHookFromEnvironment(hooks, testEnvironment, \"afterEach\");\n  \tsetHookFromEnvironment(hooks, testEnvironment, \"after\");\n\n  \tfunction setHookFromEnvironment(hooks, environment, name) {\n  \t\tvar potentialHook = environment[name];\n  \t\thooks[name] = typeof potentialHook === \"function\" ? [potentialHook] : [];\n  \t\tdelete environment[name];\n  \t}\n\n  \tvar moduleFns = {\n  \t\tbefore: setHookFunction(module, \"before\"),\n  \t\tbeforeEach: setHookFunction(module, \"beforeEach\"),\n  \t\tafterEach: setHookFunction(module, \"afterEach\"),\n  \t\tafter: setHookFunction(module, \"after\")\n  \t};\n\n  \tvar currentModule = config.currentModule;\n  \tif (objectType(executeNow) === \"function\") {\n  \t\tmoduleStack.push(module);\n  \t\tconfig.currentModule = module;\n  \t\texecuteNow.call(module.testEnvironment, moduleFns);\n  \t\tmoduleStack.pop();\n  \t\tmodule = module.parentModule || currentModule;\n  \t}\n\n  \tconfig.currentModule = module;\n  }\n\n  // TODO: extract this to a new file alongside its related functions\n  function module$1(name, options, executeNow) {\n  \tif (focused) {\n  \t\treturn;\n  \t}\n\n  \tif (arguments.length === 2) {\n  \t\tif (objectType(options) === \"function\") {\n  \t\t\texecuteNow = options;\n  \t\t\toptions = undefined;\n  \t\t}\n  \t}\n\n  \tprocessModule(name, options, executeNow);\n  }\n\n  module$1.only = function () {\n  \tif (focused) {\n  \t\treturn;\n  \t}\n\n  \tconfig.modules.length = 0;\n  \tconfig.queue.length = 0;\n\n  \tmodule$1.apply(undefined, arguments);\n\n  \tfocused = true;\n  };\n\n  module$1.skip = function (name, options, executeNow) {\n  \tif (focused) {\n  \t\treturn;\n  \t}\n\n  \tif (arguments.length === 2) {\n  \t\tif (objectType(options) === \"function\") {\n  \t\t\texecuteNow = options;\n  \t\t\toptions = undefined;\n  \t\t}\n  \t}\n\n  \tprocessModule(name, options, executeNow, { skip: true });\n  };\n\n  module$1.todo = function (name, options, executeNow) {\n  \tif (focused) {\n  \t\treturn;\n  \t}\n\n  \tif (arguments.length === 2) {\n  \t\tif (objectType(options) === \"function\") {\n  \t\t\texecuteNow = options;\n  \t\t\toptions = undefined;\n  \t\t}\n  \t}\n\n  \tprocessModule(name, options, executeNow, { todo: true });\n  };\n\n  extend(QUnit, {\n  \ton: on,\n\n  \tmodule: module$1,\n\n  \ttest: test,\n\n  \ttodo: todo,\n\n  \tskip: skip,\n\n  \tonly: only,\n\n  \tstart: function start(count) {\n  \t\tvar globalStartAlreadyCalled = globalStartCalled;\n\n  \t\tif (!config.current) {\n  \t\t\tglobalStartCalled = true;\n\n  \t\t\tif (runStarted) {\n  \t\t\t\tthrow new Error(\"Called start() while test already started running\");\n  \t\t\t} else if (globalStartAlreadyCalled || count > 1) {\n  \t\t\t\tthrow new Error(\"Called start() outside of a test context too many times\");\n  \t\t\t} else if (config.autostart) {\n  \t\t\t\tthrow new Error(\"Called start() outside of a test context when \" + \"QUnit.config.autostart was true\");\n  \t\t\t} else if (!config.pageLoaded) {\n\n  \t\t\t\t// The page isn't completely loaded yet, so we set autostart and then\n  \t\t\t\t// load if we're in Node or wait for the browser's load event.\n  \t\t\t\tconfig.autostart = true;\n\n  \t\t\t\t// Starts from Node even if .load was not previously called. We still return\n  \t\t\t\t// early otherwise we'll wind up \"beginning\" twice.\n  \t\t\t\tif (!defined.document) {\n  \t\t\t\t\tQUnit.load();\n  \t\t\t\t}\n\n  \t\t\t\treturn;\n  \t\t\t}\n  \t\t} else {\n  \t\t\tthrow new Error(\"QUnit.start cannot be called inside a test context.\");\n  \t\t}\n\n  \t\tscheduleBegin();\n  \t},\n\n  \tconfig: config,\n\n  \tis: is,\n\n  \tobjectType: objectType,\n\n  \textend: extend,\n\n  \tload: function load() {\n  \t\tconfig.pageLoaded = true;\n\n  \t\t// Initialize the configuration options\n  \t\textend(config, {\n  \t\t\tstats: { all: 0, bad: 0 },\n  \t\t\tstarted: 0,\n  \t\t\tupdateRate: 1000,\n  \t\t\tautostart: true,\n  \t\t\tfilter: \"\"\n  \t\t}, true);\n\n  \t\tif (!runStarted) {\n  \t\t\tconfig.blocking = false;\n\n  \t\t\tif (config.autostart) {\n  \t\t\t\tscheduleBegin();\n  \t\t\t}\n  \t\t}\n  \t},\n\n  \tstack: function stack(offset) {\n  \t\toffset = (offset || 0) + 2;\n  \t\treturn sourceFromStacktrace(offset);\n  \t},\n\n  \tonError: onError,\n\n  \tonUnhandledRejection: onUnhandledRejection\n  });\n\n  QUnit.pushFailure = pushFailure;\n  QUnit.assert = Assert.prototype;\n  QUnit.equiv = equiv;\n  QUnit.dump = dump;\n\n  registerLoggingCallbacks(QUnit);\n\n  function scheduleBegin() {\n\n  \trunStarted = true;\n\n  \t// Add a slight delay to allow definition of more modules and tests.\n  \tif (defined.setTimeout) {\n  \t\tsetTimeout(function () {\n  \t\t\tbegin();\n  \t\t});\n  \t} else {\n  \t\tbegin();\n  \t}\n  }\n\n  function begin() {\n  \tvar i,\n  \t    l,\n  \t    modulesLog = [];\n\n  \t// If the test run hasn't officially begun yet\n  \tif (!config.started) {\n\n  \t\t// Record the time of the test run's beginning\n  \t\tconfig.started = now();\n\n  \t\t// Delete the loose unnamed module if unused.\n  \t\tif (config.modules[0].name === \"\" && config.modules[0].tests.length === 0) {\n  \t\t\tconfig.modules.shift();\n  \t\t}\n\n  \t\t// Avoid unnecessary information by not logging modules' test environments\n  \t\tfor (i = 0, l = config.modules.length; i < l; i++) {\n  \t\t\tmodulesLog.push({\n  \t\t\t\tname: config.modules[i].name,\n  \t\t\t\ttests: config.modules[i].tests\n  \t\t\t});\n  \t\t}\n\n  \t\t// The test run is officially beginning now\n  \t\temit(\"runStart\", globalSuite.start(true));\n  \t\trunLoggingCallbacks(\"begin\", {\n  \t\t\ttotalTests: Test.count,\n  \t\t\tmodules: modulesLog\n  \t\t});\n  \t}\n\n  \tconfig.blocking = false;\n  \tProcessingQueue.advance();\n  }\n\n  function setHookFunction(module, hookName) {\n  \treturn function setHook(callback) {\n  \t\tmodule.hooks[hookName].push(callback);\n  \t};\n  }\n\n  exportQUnit(QUnit);\n\n  (function () {\n\n  \tif (typeof window === \"undefined\" || typeof document === \"undefined\") {\n  \t\treturn;\n  \t}\n\n  \tvar config = QUnit.config,\n  \t    hasOwn = Object.prototype.hasOwnProperty;\n\n  \t// Stores fixture HTML for resetting later\n  \tfunction storeFixture() {\n\n  \t\t// Avoid overwriting user-defined values\n  \t\tif (hasOwn.call(config, \"fixture\")) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tvar fixture = document.getElementById(\"qunit-fixture\");\n  \t\tif (fixture) {\n  \t\t\tconfig.fixture = fixture.innerHTML;\n  \t\t}\n  \t}\n\n  \tQUnit.begin(storeFixture);\n\n  \t// Resets the fixture DOM element if available.\n  \tfunction resetFixture() {\n  \t\tif (config.fixture == null) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tvar fixture = document.getElementById(\"qunit-fixture\");\n  \t\tif (fixture) {\n  \t\t\tfixture.innerHTML = config.fixture;\n  \t\t}\n  \t}\n\n  \tQUnit.testStart(resetFixture);\n  })();\n\n  (function () {\n\n  \t// Only interact with URLs via window.location\n  \tvar location = typeof window !== \"undefined\" && window.location;\n  \tif (!location) {\n  \t\treturn;\n  \t}\n\n  \tvar urlParams = getUrlParams();\n\n  \tQUnit.urlParams = urlParams;\n\n  \t// Match module/test by inclusion in an array\n  \tQUnit.config.moduleId = [].concat(urlParams.moduleId || []);\n  \tQUnit.config.testId = [].concat(urlParams.testId || []);\n\n  \t// Exact case-insensitive match of the module name\n  \tQUnit.config.module = urlParams.module;\n\n  \t// Regular expression or case-insenstive substring match against \"moduleName: testName\"\n  \tQUnit.config.filter = urlParams.filter;\n\n  \t// Test order randomization\n  \tif (urlParams.seed === true) {\n\n  \t\t// Generate a random seed if the option is specified without a value\n  \t\tQUnit.config.seed = Math.random().toString(36).slice(2);\n  \t} else if (urlParams.seed) {\n  \t\tQUnit.config.seed = urlParams.seed;\n  \t}\n\n  \t// Add URL-parameter-mapped config values with UI form rendering data\n  \tQUnit.config.urlConfig.push({\n  \t\tid: \"hidepassed\",\n  \t\tlabel: \"Hide passed tests\",\n  \t\ttooltip: \"Only show tests and assertions that fail. Stored as query-strings.\"\n  \t}, {\n  \t\tid: \"noglobals\",\n  \t\tlabel: \"Check for Globals\",\n  \t\ttooltip: \"Enabling this will test if any test introduces new properties on the \" + \"global object (`window` in Browsers). Stored as query-strings.\"\n  \t}, {\n  \t\tid: \"notrycatch\",\n  \t\tlabel: \"No try-catch\",\n  \t\ttooltip: \"Enabling this will run tests outside of a try-catch block. Makes debugging \" + \"exceptions in IE reasonable. Stored as query-strings.\"\n  \t});\n\n  \tQUnit.begin(function () {\n  \t\tvar i,\n  \t\t    option,\n  \t\t    urlConfig = QUnit.config.urlConfig;\n\n  \t\tfor (i = 0; i < urlConfig.length; i++) {\n\n  \t\t\t// Options can be either strings or objects with nonempty \"id\" properties\n  \t\t\toption = QUnit.config.urlConfig[i];\n  \t\t\tif (typeof option !== \"string\") {\n  \t\t\t\toption = option.id;\n  \t\t\t}\n\n  \t\t\tif (QUnit.config[option] === undefined) {\n  \t\t\t\tQUnit.config[option] = urlParams[option];\n  \t\t\t}\n  \t\t}\n  \t});\n\n  \tfunction getUrlParams() {\n  \t\tvar i, param, name, value;\n  \t\tvar urlParams = Object.create(null);\n  \t\tvar params = location.search.slice(1).split(\"&\");\n  \t\tvar length = params.length;\n\n  \t\tfor (i = 0; i < length; i++) {\n  \t\t\tif (params[i]) {\n  \t\t\t\tparam = params[i].split(\"=\");\n  \t\t\t\tname = decodeQueryParam(param[0]);\n\n  \t\t\t\t// Allow just a key to turn on a flag, e.g., test.html?noglobals\n  \t\t\t\tvalue = param.length === 1 || decodeQueryParam(param.slice(1).join(\"=\"));\n  \t\t\t\tif (name in urlParams) {\n  \t\t\t\t\turlParams[name] = [].concat(urlParams[name], value);\n  \t\t\t\t} else {\n  \t\t\t\t\turlParams[name] = value;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\treturn urlParams;\n  \t}\n\n  \tfunction decodeQueryParam(param) {\n  \t\treturn decodeURIComponent(param.replace(/\\+/g, \"%20\"));\n  \t}\n  })();\n\n  var stats = {\n  \tpassedTests: 0,\n  \tfailedTests: 0,\n  \tskippedTests: 0,\n  \ttodoTests: 0\n  };\n\n  // Escape text for attribute or text content.\n  function escapeText(s) {\n  \tif (!s) {\n  \t\treturn \"\";\n  \t}\n  \ts = s + \"\";\n\n  \t// Both single quotes and double quotes (for attributes)\n  \treturn s.replace(/['\"<>&]/g, function (s) {\n  \t\tswitch (s) {\n  \t\t\tcase \"'\":\n  \t\t\t\treturn \"&#039;\";\n  \t\t\tcase \"\\\"\":\n  \t\t\t\treturn \"&quot;\";\n  \t\t\tcase \"<\":\n  \t\t\t\treturn \"&lt;\";\n  \t\t\tcase \">\":\n  \t\t\t\treturn \"&gt;\";\n  \t\t\tcase \"&\":\n  \t\t\t\treturn \"&amp;\";\n  \t\t}\n  \t});\n  }\n\n  (function () {\n\n  \t// Don't load the HTML Reporter on non-browser environments\n  \tif (typeof window === \"undefined\" || !window.document) {\n  \t\treturn;\n  \t}\n\n  \tvar config = QUnit.config,\n  \t    document$$1 = window.document,\n  \t    collapseNext = false,\n  \t    hasOwn = Object.prototype.hasOwnProperty,\n  \t    unfilteredUrl = setUrl({ filter: undefined, module: undefined,\n  \t\tmoduleId: undefined, testId: undefined }),\n  \t    modulesList = [];\n\n  \tfunction addEvent(elem, type, fn) {\n  \t\telem.addEventListener(type, fn, false);\n  \t}\n\n  \tfunction removeEvent(elem, type, fn) {\n  \t\telem.removeEventListener(type, fn, false);\n  \t}\n\n  \tfunction addEvents(elems, type, fn) {\n  \t\tvar i = elems.length;\n  \t\twhile (i--) {\n  \t\t\taddEvent(elems[i], type, fn);\n  \t\t}\n  \t}\n\n  \tfunction hasClass(elem, name) {\n  \t\treturn (\" \" + elem.className + \" \").indexOf(\" \" + name + \" \") >= 0;\n  \t}\n\n  \tfunction addClass(elem, name) {\n  \t\tif (!hasClass(elem, name)) {\n  \t\t\telem.className += (elem.className ? \" \" : \"\") + name;\n  \t\t}\n  \t}\n\n  \tfunction toggleClass(elem, name, force) {\n  \t\tif (force || typeof force === \"undefined\" && !hasClass(elem, name)) {\n  \t\t\taddClass(elem, name);\n  \t\t} else {\n  \t\t\tremoveClass(elem, name);\n  \t\t}\n  \t}\n\n  \tfunction removeClass(elem, name) {\n  \t\tvar set = \" \" + elem.className + \" \";\n\n  \t\t// Class name may appear multiple times\n  \t\twhile (set.indexOf(\" \" + name + \" \") >= 0) {\n  \t\t\tset = set.replace(\" \" + name + \" \", \" \");\n  \t\t}\n\n  \t\t// Trim for prettiness\n  \t\telem.className = typeof set.trim === \"function\" ? set.trim() : set.replace(/^\\s+|\\s+$/g, \"\");\n  \t}\n\n  \tfunction id(name) {\n  \t\treturn document$$1.getElementById && document$$1.getElementById(name);\n  \t}\n\n  \tfunction abortTests() {\n  \t\tvar abortButton = id(\"qunit-abort-tests-button\");\n  \t\tif (abortButton) {\n  \t\t\tabortButton.disabled = true;\n  \t\t\tabortButton.innerHTML = \"Aborting...\";\n  \t\t}\n  \t\tQUnit.config.queue.length = 0;\n  \t\treturn false;\n  \t}\n\n  \tfunction interceptNavigation(ev) {\n  \t\tapplyUrlParams();\n\n  \t\tif (ev && ev.preventDefault) {\n  \t\t\tev.preventDefault();\n  \t\t}\n\n  \t\treturn false;\n  \t}\n\n  \tfunction getUrlConfigHtml() {\n  \t\tvar i,\n  \t\t    j,\n  \t\t    val,\n  \t\t    escaped,\n  \t\t    escapedTooltip,\n  \t\t    selection = false,\n  \t\t    urlConfig = config.urlConfig,\n  \t\t    urlConfigHtml = \"\";\n\n  \t\tfor (i = 0; i < urlConfig.length; i++) {\n\n  \t\t\t// Options can be either strings or objects with nonempty \"id\" properties\n  \t\t\tval = config.urlConfig[i];\n  \t\t\tif (typeof val === \"string\") {\n  \t\t\t\tval = {\n  \t\t\t\t\tid: val,\n  \t\t\t\t\tlabel: val\n  \t\t\t\t};\n  \t\t\t}\n\n  \t\t\tescaped = escapeText(val.id);\n  \t\t\tescapedTooltip = escapeText(val.tooltip);\n\n  \t\t\tif (!val.value || typeof val.value === \"string\") {\n  \t\t\t\turlConfigHtml += \"<label for='qunit-urlconfig-\" + escaped + \"' title='\" + escapedTooltip + \"'><input id='qunit-urlconfig-\" + escaped + \"' name='\" + escaped + \"' type='checkbox'\" + (val.value ? \" value='\" + escapeText(val.value) + \"'\" : \"\") + (config[val.id] ? \" checked='checked'\" : \"\") + \" title='\" + escapedTooltip + \"' />\" + escapeText(val.label) + \"</label>\";\n  \t\t\t} else {\n  \t\t\t\turlConfigHtml += \"<label for='qunit-urlconfig-\" + escaped + \"' title='\" + escapedTooltip + \"'>\" + val.label + \": </label><select id='qunit-urlconfig-\" + escaped + \"' name='\" + escaped + \"' title='\" + escapedTooltip + \"'><option></option>\";\n\n  \t\t\t\tif (QUnit.is(\"array\", val.value)) {\n  \t\t\t\t\tfor (j = 0; j < val.value.length; j++) {\n  \t\t\t\t\t\tescaped = escapeText(val.value[j]);\n  \t\t\t\t\t\turlConfigHtml += \"<option value='\" + escaped + \"'\" + (config[val.id] === val.value[j] ? (selection = true) && \" selected='selected'\" : \"\") + \">\" + escaped + \"</option>\";\n  \t\t\t\t\t}\n  \t\t\t\t} else {\n  \t\t\t\t\tfor (j in val.value) {\n  \t\t\t\t\t\tif (hasOwn.call(val.value, j)) {\n  \t\t\t\t\t\t\turlConfigHtml += \"<option value='\" + escapeText(j) + \"'\" + (config[val.id] === j ? (selection = true) && \" selected='selected'\" : \"\") + \">\" + escapeText(val.value[j]) + \"</option>\";\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t\tif (config[val.id] && !selection) {\n  \t\t\t\t\tescaped = escapeText(config[val.id]);\n  \t\t\t\t\turlConfigHtml += \"<option value='\" + escaped + \"' selected='selected' disabled='disabled'>\" + escaped + \"</option>\";\n  \t\t\t\t}\n  \t\t\t\turlConfigHtml += \"</select>\";\n  \t\t\t}\n  \t\t}\n\n  \t\treturn urlConfigHtml;\n  \t}\n\n  \t// Handle \"click\" events on toolbar checkboxes and \"change\" for select menus.\n  \t// Updates the URL with the new state of `config.urlConfig` values.\n  \tfunction toolbarChanged() {\n  \t\tvar updatedUrl,\n  \t\t    value,\n  \t\t    tests,\n  \t\t    field = this,\n  \t\t    params = {};\n\n  \t\t// Detect if field is a select menu or a checkbox\n  \t\tif (\"selectedIndex\" in field) {\n  \t\t\tvalue = field.options[field.selectedIndex].value || undefined;\n  \t\t} else {\n  \t\t\tvalue = field.checked ? field.defaultValue || true : undefined;\n  \t\t}\n\n  \t\tparams[field.name] = value;\n  \t\tupdatedUrl = setUrl(params);\n\n  \t\t// Check if we can apply the change without a page refresh\n  \t\tif (\"hidepassed\" === field.name && \"replaceState\" in window.history) {\n  \t\t\tQUnit.urlParams[field.name] = value;\n  \t\t\tconfig[field.name] = value || false;\n  \t\t\ttests = id(\"qunit-tests\");\n  \t\t\tif (tests) {\n  \t\t\t\ttoggleClass(tests, \"hidepass\", value || false);\n  \t\t\t}\n  \t\t\twindow.history.replaceState(null, \"\", updatedUrl);\n  \t\t} else {\n  \t\t\twindow.location = updatedUrl;\n  \t\t}\n  \t}\n\n  \tfunction setUrl(params) {\n  \t\tvar key,\n  \t\t    arrValue,\n  \t\t    i,\n  \t\t    querystring = \"?\",\n  \t\t    location = window.location;\n\n  \t\tparams = QUnit.extend(QUnit.extend({}, QUnit.urlParams), params);\n\n  \t\tfor (key in params) {\n\n  \t\t\t// Skip inherited or undefined properties\n  \t\t\tif (hasOwn.call(params, key) && params[key] !== undefined) {\n\n  \t\t\t\t// Output a parameter for each value of this key\n  \t\t\t\t// (but usually just one)\n  \t\t\t\tarrValue = [].concat(params[key]);\n  \t\t\t\tfor (i = 0; i < arrValue.length; i++) {\n  \t\t\t\t\tquerystring += encodeURIComponent(key);\n  \t\t\t\t\tif (arrValue[i] !== true) {\n  \t\t\t\t\t\tquerystring += \"=\" + encodeURIComponent(arrValue[i]);\n  \t\t\t\t\t}\n  \t\t\t\t\tquerystring += \"&\";\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n  \t\treturn location.protocol + \"//\" + location.host + location.pathname + querystring.slice(0, -1);\n  \t}\n\n  \tfunction applyUrlParams() {\n  \t\tvar i,\n  \t\t    selectedModules = [],\n  \t\t    modulesList = id(\"qunit-modulefilter-dropdown-list\").getElementsByTagName(\"input\"),\n  \t\t    filter = id(\"qunit-filter-input\").value;\n\n  \t\tfor (i = 0; i < modulesList.length; i++) {\n  \t\t\tif (modulesList[i].checked) {\n  \t\t\t\tselectedModules.push(modulesList[i].value);\n  \t\t\t}\n  \t\t}\n\n  \t\twindow.location = setUrl({\n  \t\t\tfilter: filter === \"\" ? undefined : filter,\n  \t\t\tmoduleId: selectedModules.length === 0 ? undefined : selectedModules,\n\n  \t\t\t// Remove module and testId filter\n  \t\t\tmodule: undefined,\n  \t\t\ttestId: undefined\n  \t\t});\n  \t}\n\n  \tfunction toolbarUrlConfigContainer() {\n  \t\tvar urlConfigContainer = document$$1.createElement(\"span\");\n\n  \t\turlConfigContainer.innerHTML = getUrlConfigHtml();\n  \t\taddClass(urlConfigContainer, \"qunit-url-config\");\n\n  \t\taddEvents(urlConfigContainer.getElementsByTagName(\"input\"), \"change\", toolbarChanged);\n  \t\taddEvents(urlConfigContainer.getElementsByTagName(\"select\"), \"change\", toolbarChanged);\n\n  \t\treturn urlConfigContainer;\n  \t}\n\n  \tfunction abortTestsButton() {\n  \t\tvar button = document$$1.createElement(\"button\");\n  \t\tbutton.id = \"qunit-abort-tests-button\";\n  \t\tbutton.innerHTML = \"Abort\";\n  \t\taddEvent(button, \"click\", abortTests);\n  \t\treturn button;\n  \t}\n\n  \tfunction toolbarLooseFilter() {\n  \t\tvar filter = document$$1.createElement(\"form\"),\n  \t\t    label = document$$1.createElement(\"label\"),\n  \t\t    input = document$$1.createElement(\"input\"),\n  \t\t    button = document$$1.createElement(\"button\");\n\n  \t\taddClass(filter, \"qunit-filter\");\n\n  \t\tlabel.innerHTML = \"Filter: \";\n\n  \t\tinput.type = \"text\";\n  \t\tinput.value = config.filter || \"\";\n  \t\tinput.name = \"filter\";\n  \t\tinput.id = \"qunit-filter-input\";\n\n  \t\tbutton.innerHTML = \"Go\";\n\n  \t\tlabel.appendChild(input);\n\n  \t\tfilter.appendChild(label);\n  \t\tfilter.appendChild(document$$1.createTextNode(\" \"));\n  \t\tfilter.appendChild(button);\n  \t\taddEvent(filter, \"submit\", interceptNavigation);\n\n  \t\treturn filter;\n  \t}\n\n  \tfunction moduleListHtml() {\n  \t\tvar i,\n  \t\t    checked,\n  \t\t    html = \"\";\n\n  \t\tfor (i = 0; i < config.modules.length; i++) {\n  \t\t\tif (config.modules[i].name !== \"\") {\n  \t\t\t\tchecked = config.moduleId.indexOf(config.modules[i].moduleId) > -1;\n  \t\t\t\thtml += \"<li><label class='clickable\" + (checked ? \" checked\" : \"\") + \"'><input type='checkbox' \" + \"value='\" + config.modules[i].moduleId + \"'\" + (checked ? \" checked='checked'\" : \"\") + \" />\" + escapeText(config.modules[i].name) + \"</label></li>\";\n  \t\t\t}\n  \t\t}\n\n  \t\treturn html;\n  \t}\n\n  \tfunction toolbarModuleFilter() {\n  \t\tvar allCheckbox,\n  \t\t    commit,\n  \t\t    reset,\n  \t\t    moduleFilter = document$$1.createElement(\"form\"),\n  \t\t    label = document$$1.createElement(\"label\"),\n  \t\t    moduleSearch = document$$1.createElement(\"input\"),\n  \t\t    dropDown = document$$1.createElement(\"div\"),\n  \t\t    actions = document$$1.createElement(\"span\"),\n  \t\t    dropDownList = document$$1.createElement(\"ul\"),\n  \t\t    dirty = false;\n\n  \t\tmoduleSearch.id = \"qunit-modulefilter-search\";\n  \t\taddEvent(moduleSearch, \"input\", searchInput);\n  \t\taddEvent(moduleSearch, \"input\", searchFocus);\n  \t\taddEvent(moduleSearch, \"focus\", searchFocus);\n  \t\taddEvent(moduleSearch, \"click\", searchFocus);\n\n  \t\tlabel.id = \"qunit-modulefilter-search-container\";\n  \t\tlabel.innerHTML = \"Module: \";\n  \t\tlabel.appendChild(moduleSearch);\n\n  \t\tactions.id = \"qunit-modulefilter-actions\";\n  \t\tactions.innerHTML = \"<button style='display:none'>Apply</button>\" + \"<button type='reset' style='display:none'>Reset</button>\" + \"<label class='clickable\" + (config.moduleId.length ? \"\" : \" checked\") + \"'><input type='checkbox'\" + (config.moduleId.length ? \"\" : \" checked='checked'\") + \">All modules</label>\";\n  \t\tallCheckbox = actions.lastChild.firstChild;\n  \t\tcommit = actions.firstChild;\n  \t\treset = commit.nextSibling;\n  \t\taddEvent(commit, \"click\", applyUrlParams);\n\n  \t\tdropDownList.id = \"qunit-modulefilter-dropdown-list\";\n  \t\tdropDownList.innerHTML = moduleListHtml();\n\n  \t\tdropDown.id = \"qunit-modulefilter-dropdown\";\n  \t\tdropDown.style.display = \"none\";\n  \t\tdropDown.appendChild(actions);\n  \t\tdropDown.appendChild(dropDownList);\n  \t\taddEvent(dropDown, \"change\", selectionChange);\n  \t\tselectionChange();\n\n  \t\tmoduleFilter.id = \"qunit-modulefilter\";\n  \t\tmoduleFilter.appendChild(label);\n  \t\tmoduleFilter.appendChild(dropDown);\n  \t\taddEvent(moduleFilter, \"submit\", interceptNavigation);\n  \t\taddEvent(moduleFilter, \"reset\", function () {\n\n  \t\t\t// Let the reset happen, then update styles\n  \t\t\twindow.setTimeout(selectionChange);\n  \t\t});\n\n  \t\t// Enables show/hide for the dropdown\n  \t\tfunction searchFocus() {\n  \t\t\tif (dropDown.style.display !== \"none\") {\n  \t\t\t\treturn;\n  \t\t\t}\n\n  \t\t\tdropDown.style.display = \"block\";\n  \t\t\taddEvent(document$$1, \"click\", hideHandler);\n  \t\t\taddEvent(document$$1, \"keydown\", hideHandler);\n\n  \t\t\t// Hide on Escape keydown or outside-container click\n  \t\t\tfunction hideHandler(e) {\n  \t\t\t\tvar inContainer = moduleFilter.contains(e.target);\n\n  \t\t\t\tif (e.keyCode === 27 || !inContainer) {\n  \t\t\t\t\tif (e.keyCode === 27 && inContainer) {\n  \t\t\t\t\t\tmoduleSearch.focus();\n  \t\t\t\t\t}\n  \t\t\t\t\tdropDown.style.display = \"none\";\n  \t\t\t\t\tremoveEvent(document$$1, \"click\", hideHandler);\n  \t\t\t\t\tremoveEvent(document$$1, \"keydown\", hideHandler);\n  \t\t\t\t\tmoduleSearch.value = \"\";\n  \t\t\t\t\tsearchInput();\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\t// Processes module search box input\n  \t\tfunction searchInput() {\n  \t\t\tvar i,\n  \t\t\t    item,\n  \t\t\t    searchText = moduleSearch.value.toLowerCase(),\n  \t\t\t    listItems = dropDownList.children;\n\n  \t\t\tfor (i = 0; i < listItems.length; i++) {\n  \t\t\t\titem = listItems[i];\n  \t\t\t\tif (!searchText || item.textContent.toLowerCase().indexOf(searchText) > -1) {\n  \t\t\t\t\titem.style.display = \"\";\n  \t\t\t\t} else {\n  \t\t\t\t\titem.style.display = \"none\";\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\t// Processes selection changes\n  \t\tfunction selectionChange(evt) {\n  \t\t\tvar i,\n  \t\t\t    item,\n  \t\t\t    checkbox = evt && evt.target || allCheckbox,\n  \t\t\t    modulesList = dropDownList.getElementsByTagName(\"input\"),\n  \t\t\t    selectedNames = [];\n\n  \t\t\ttoggleClass(checkbox.parentNode, \"checked\", checkbox.checked);\n\n  \t\t\tdirty = false;\n  \t\t\tif (checkbox.checked && checkbox !== allCheckbox) {\n  \t\t\t\tallCheckbox.checked = false;\n  \t\t\t\tremoveClass(allCheckbox.parentNode, \"checked\");\n  \t\t\t}\n  \t\t\tfor (i = 0; i < modulesList.length; i++) {\n  \t\t\t\titem = modulesList[i];\n  \t\t\t\tif (!evt) {\n  \t\t\t\t\ttoggleClass(item.parentNode, \"checked\", item.checked);\n  \t\t\t\t} else if (checkbox === allCheckbox && checkbox.checked) {\n  \t\t\t\t\titem.checked = false;\n  \t\t\t\t\tremoveClass(item.parentNode, \"checked\");\n  \t\t\t\t}\n  \t\t\t\tdirty = dirty || item.checked !== item.defaultChecked;\n  \t\t\t\tif (item.checked) {\n  \t\t\t\t\tselectedNames.push(item.parentNode.textContent);\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t\tcommit.style.display = reset.style.display = dirty ? \"\" : \"none\";\n  \t\t\tmoduleSearch.placeholder = selectedNames.join(\", \") || allCheckbox.parentNode.textContent;\n  \t\t\tmoduleSearch.title = \"Type to filter list. Current selection:\\n\" + (selectedNames.join(\"\\n\") || allCheckbox.parentNode.textContent);\n  \t\t}\n\n  \t\treturn moduleFilter;\n  \t}\n\n  \tfunction appendToolbar() {\n  \t\tvar toolbar = id(\"qunit-testrunner-toolbar\");\n\n  \t\tif (toolbar) {\n  \t\t\ttoolbar.appendChild(toolbarUrlConfigContainer());\n  \t\t\ttoolbar.appendChild(toolbarModuleFilter());\n  \t\t\ttoolbar.appendChild(toolbarLooseFilter());\n  \t\t\ttoolbar.appendChild(document$$1.createElement(\"div\")).className = \"clearfix\";\n  \t\t}\n  \t}\n\n  \tfunction appendHeader() {\n  \t\tvar header = id(\"qunit-header\");\n\n  \t\tif (header) {\n  \t\t\theader.innerHTML = \"<a href='\" + escapeText(unfilteredUrl) + \"'>\" + header.innerHTML + \"</a> \";\n  \t\t}\n  \t}\n\n  \tfunction appendBanner() {\n  \t\tvar banner = id(\"qunit-banner\");\n\n  \t\tif (banner) {\n  \t\t\tbanner.className = \"\";\n  \t\t}\n  \t}\n\n  \tfunction appendTestResults() {\n  \t\tvar tests = id(\"qunit-tests\"),\n  \t\t    result = id(\"qunit-testresult\"),\n  \t\t    controls;\n\n  \t\tif (result) {\n  \t\t\tresult.parentNode.removeChild(result);\n  \t\t}\n\n  \t\tif (tests) {\n  \t\t\ttests.innerHTML = \"\";\n  \t\t\tresult = document$$1.createElement(\"p\");\n  \t\t\tresult.id = \"qunit-testresult\";\n  \t\t\tresult.className = \"result\";\n  \t\t\ttests.parentNode.insertBefore(result, tests);\n  \t\t\tresult.innerHTML = \"<div id=\\\"qunit-testresult-display\\\">Running...<br />&#160;</div>\" + \"<div id=\\\"qunit-testresult-controls\\\"></div>\" + \"<div class=\\\"clearfix\\\"></div>\";\n  \t\t\tcontrols = id(\"qunit-testresult-controls\");\n  \t\t}\n\n  \t\tif (controls) {\n  \t\t\tcontrols.appendChild(abortTestsButton());\n  \t\t}\n  \t}\n\n  \tfunction appendFilteredTest() {\n  \t\tvar testId = QUnit.config.testId;\n  \t\tif (!testId || testId.length <= 0) {\n  \t\t\treturn \"\";\n  \t\t}\n  \t\treturn \"<div id='qunit-filteredTest'>Rerunning selected tests: \" + escapeText(testId.join(\", \")) + \" <a id='qunit-clearFilter' href='\" + escapeText(unfilteredUrl) + \"'>Run all tests</a></div>\";\n  \t}\n\n  \tfunction appendUserAgent() {\n  \t\tvar userAgent = id(\"qunit-userAgent\");\n\n  \t\tif (userAgent) {\n  \t\t\tuserAgent.innerHTML = \"\";\n  \t\t\tuserAgent.appendChild(document$$1.createTextNode(\"QUnit \" + QUnit.version + \"; \" + navigator.userAgent));\n  \t\t}\n  \t}\n\n  \tfunction appendInterface() {\n  \t\tvar qunit = id(\"qunit\");\n\n  \t\tif (qunit) {\n  \t\t\tqunit.innerHTML = \"<h1 id='qunit-header'>\" + escapeText(document$$1.title) + \"</h1>\" + \"<h2 id='qunit-banner'></h2>\" + \"<div id='qunit-testrunner-toolbar'></div>\" + appendFilteredTest() + \"<h2 id='qunit-userAgent'></h2>\" + \"<ol id='qunit-tests'></ol>\";\n  \t\t}\n\n  \t\tappendHeader();\n  \t\tappendBanner();\n  \t\tappendTestResults();\n  \t\tappendUserAgent();\n  \t\tappendToolbar();\n  \t}\n\n  \tfunction appendTestsList(modules) {\n  \t\tvar i, l, x, z, test, moduleObj;\n\n  \t\tfor (i = 0, l = modules.length; i < l; i++) {\n  \t\t\tmoduleObj = modules[i];\n\n  \t\t\tfor (x = 0, z = moduleObj.tests.length; x < z; x++) {\n  \t\t\t\ttest = moduleObj.tests[x];\n\n  \t\t\t\tappendTest(test.name, test.testId, moduleObj.name);\n  \t\t\t}\n  \t\t}\n  \t}\n\n  \tfunction appendTest(name, testId, moduleName) {\n  \t\tvar title,\n  \t\t    rerunTrigger,\n  \t\t    testBlock,\n  \t\t    assertList,\n  \t\t    tests = id(\"qunit-tests\");\n\n  \t\tif (!tests) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\ttitle = document$$1.createElement(\"strong\");\n  \t\ttitle.innerHTML = getNameHtml(name, moduleName);\n\n  \t\trerunTrigger = document$$1.createElement(\"a\");\n  \t\trerunTrigger.innerHTML = \"Rerun\";\n  \t\trerunTrigger.href = setUrl({ testId: testId });\n\n  \t\ttestBlock = document$$1.createElement(\"li\");\n  \t\ttestBlock.appendChild(title);\n  \t\ttestBlock.appendChild(rerunTrigger);\n  \t\ttestBlock.id = \"qunit-test-output-\" + testId;\n\n  \t\tassertList = document$$1.createElement(\"ol\");\n  \t\tassertList.className = \"qunit-assert-list\";\n\n  \t\ttestBlock.appendChild(assertList);\n\n  \t\ttests.appendChild(testBlock);\n  \t}\n\n  \t// HTML Reporter initialization and load\n  \tQUnit.begin(function (details) {\n  \t\tvar i, moduleObj, tests;\n\n  \t\t// Sort modules by name for the picker\n  \t\tfor (i = 0; i < details.modules.length; i++) {\n  \t\t\tmoduleObj = details.modules[i];\n  \t\t\tif (moduleObj.name) {\n  \t\t\t\tmodulesList.push(moduleObj.name);\n  \t\t\t}\n  \t\t}\n  \t\tmodulesList.sort(function (a, b) {\n  \t\t\treturn a.localeCompare(b);\n  \t\t});\n\n  \t\t// Initialize QUnit elements\n  \t\tappendInterface();\n  \t\tappendTestsList(details.modules);\n  \t\ttests = id(\"qunit-tests\");\n  \t\tif (tests && config.hidepassed) {\n  \t\t\taddClass(tests, \"hidepass\");\n  \t\t}\n  \t});\n\n  \tQUnit.done(function (details) {\n  \t\tvar banner = id(\"qunit-banner\"),\n  \t\t    tests = id(\"qunit-tests\"),\n  \t\t    abortButton = id(\"qunit-abort-tests-button\"),\n  \t\t    totalTests = stats.passedTests + stats.skippedTests + stats.todoTests + stats.failedTests,\n  \t\t    html = [totalTests, \" tests completed in \", details.runtime, \" milliseconds, with \", stats.failedTests, \" failed, \", stats.skippedTests, \" skipped, and \", stats.todoTests, \" todo.<br />\", \"<span class='passed'>\", details.passed, \"</span> assertions of <span class='total'>\", details.total, \"</span> passed, <span class='failed'>\", details.failed, \"</span> failed.\"].join(\"\"),\n  \t\t    test,\n  \t\t    assertLi,\n  \t\t    assertList;\n\n  \t\t// Update remaing tests to aborted\n  \t\tif (abortButton && abortButton.disabled) {\n  \t\t\thtml = \"Tests aborted after \" + details.runtime + \" milliseconds.\";\n\n  \t\t\tfor (var i = 0; i < tests.children.length; i++) {\n  \t\t\t\ttest = tests.children[i];\n  \t\t\t\tif (test.className === \"\" || test.className === \"running\") {\n  \t\t\t\t\ttest.className = \"aborted\";\n  \t\t\t\t\tassertList = test.getElementsByTagName(\"ol\")[0];\n  \t\t\t\t\tassertLi = document$$1.createElement(\"li\");\n  \t\t\t\t\tassertLi.className = \"fail\";\n  \t\t\t\t\tassertLi.innerHTML = \"Test aborted.\";\n  \t\t\t\t\tassertList.appendChild(assertLi);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\tif (banner && (!abortButton || abortButton.disabled === false)) {\n  \t\t\tbanner.className = stats.failedTests ? \"qunit-fail\" : \"qunit-pass\";\n  \t\t}\n\n  \t\tif (abortButton) {\n  \t\t\tabortButton.parentNode.removeChild(abortButton);\n  \t\t}\n\n  \t\tif (tests) {\n  \t\t\tid(\"qunit-testresult-display\").innerHTML = html;\n  \t\t}\n\n  \t\tif (config.altertitle && document$$1.title) {\n\n  \t\t\t// Show ✖ for good, ✔ for bad suite result in title\n  \t\t\t// use escape sequences in case file gets loaded with non-utf-8\n  \t\t\t// charset\n  \t\t\tdocument$$1.title = [stats.failedTests ? \"\\u2716\" : \"\\u2714\", document$$1.title.replace(/^[\\u2714\\u2716] /i, \"\")].join(\" \");\n  \t\t}\n\n  \t\t// Scroll back to top to show results\n  \t\tif (config.scrolltop && window.scrollTo) {\n  \t\t\twindow.scrollTo(0, 0);\n  \t\t}\n  \t});\n\n  \tfunction getNameHtml(name, module) {\n  \t\tvar nameHtml = \"\";\n\n  \t\tif (module) {\n  \t\t\tnameHtml = \"<span class='module-name'>\" + escapeText(module) + \"</span>: \";\n  \t\t}\n\n  \t\tnameHtml += \"<span class='test-name'>\" + escapeText(name) + \"</span>\";\n\n  \t\treturn nameHtml;\n  \t}\n\n  \tQUnit.testStart(function (details) {\n  \t\tvar running, testBlock, bad;\n\n  \t\ttestBlock = id(\"qunit-test-output-\" + details.testId);\n  \t\tif (testBlock) {\n  \t\t\ttestBlock.className = \"running\";\n  \t\t} else {\n\n  \t\t\t// Report later registered tests\n  \t\t\tappendTest(details.name, details.testId, details.module);\n  \t\t}\n\n  \t\trunning = id(\"qunit-testresult-display\");\n  \t\tif (running) {\n  \t\t\tbad = QUnit.config.reorder && details.previousFailure;\n\n  \t\t\trunning.innerHTML = [bad ? \"Rerunning previously failed test: <br />\" : \"Running: <br />\", getNameHtml(details.name, details.module)].join(\"\");\n  \t\t}\n  \t});\n\n  \tfunction stripHtml(string) {\n\n  \t\t// Strip tags, html entity and whitespaces\n  \t\treturn string.replace(/<\\/?[^>]+(>|$)/g, \"\").replace(/\\&quot;/g, \"\").replace(/\\s+/g, \"\");\n  \t}\n\n  \tQUnit.log(function (details) {\n  \t\tvar assertList,\n  \t\t    assertLi,\n  \t\t    message,\n  \t\t    expected,\n  \t\t    actual,\n  \t\t    diff,\n  \t\t    showDiff = false,\n  \t\t    testItem = id(\"qunit-test-output-\" + details.testId);\n\n  \t\tif (!testItem) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\tmessage = escapeText(details.message) || (details.result ? \"okay\" : \"failed\");\n  \t\tmessage = \"<span class='test-message'>\" + message + \"</span>\";\n  \t\tmessage += \"<span class='runtime'>@ \" + details.runtime + \" ms</span>\";\n\n  \t\t// The pushFailure doesn't provide details.expected\n  \t\t// when it calls, it's implicit to also not show expected and diff stuff\n  \t\t// Also, we need to check details.expected existence, as it can exist and be undefined\n  \t\tif (!details.result && hasOwn.call(details, \"expected\")) {\n  \t\t\tif (details.negative) {\n  \t\t\t\texpected = \"NOT \" + QUnit.dump.parse(details.expected);\n  \t\t\t} else {\n  \t\t\t\texpected = QUnit.dump.parse(details.expected);\n  \t\t\t}\n\n  \t\t\tactual = QUnit.dump.parse(details.actual);\n  \t\t\tmessage += \"<table><tr class='test-expected'><th>Expected: </th><td><pre>\" + escapeText(expected) + \"</pre></td></tr>\";\n\n  \t\t\tif (actual !== expected) {\n\n  \t\t\t\tmessage += \"<tr class='test-actual'><th>Result: </th><td><pre>\" + escapeText(actual) + \"</pre></td></tr>\";\n\n  \t\t\t\tif (typeof details.actual === \"number\" && typeof details.expected === \"number\") {\n  \t\t\t\t\tif (!isNaN(details.actual) && !isNaN(details.expected)) {\n  \t\t\t\t\t\tshowDiff = true;\n  \t\t\t\t\t\tdiff = details.actual - details.expected;\n  \t\t\t\t\t\tdiff = (diff > 0 ? \"+\" : \"\") + diff;\n  \t\t\t\t\t}\n  \t\t\t\t} else if (typeof details.actual !== \"boolean\" && typeof details.expected !== \"boolean\") {\n  \t\t\t\t\tdiff = QUnit.diff(expected, actual);\n\n  \t\t\t\t\t// don't show diff if there is zero overlap\n  \t\t\t\t\tshowDiff = stripHtml(diff).length !== stripHtml(expected).length + stripHtml(actual).length;\n  \t\t\t\t}\n\n  \t\t\t\tif (showDiff) {\n  \t\t\t\t\tmessage += \"<tr class='test-diff'><th>Diff: </th><td><pre>\" + diff + \"</pre></td></tr>\";\n  \t\t\t\t}\n  \t\t\t} else if (expected.indexOf(\"[object Array]\") !== -1 || expected.indexOf(\"[object Object]\") !== -1) {\n  \t\t\t\tmessage += \"<tr class='test-message'><th>Message: </th><td>\" + \"Diff suppressed as the depth of object is more than current max depth (\" + QUnit.config.maxDepth + \").<p>Hint: Use <code>QUnit.dump.maxDepth</code> to \" + \" run with a higher max depth or <a href='\" + escapeText(setUrl({ maxDepth: -1 })) + \"'>\" + \"Rerun</a> without max depth.</p></td></tr>\";\n  \t\t\t} else {\n  \t\t\t\tmessage += \"<tr class='test-message'><th>Message: </th><td>\" + \"Diff suppressed as the expected and actual results have an equivalent\" + \" serialization</td></tr>\";\n  \t\t\t}\n\n  \t\t\tif (details.source) {\n  \t\t\t\tmessage += \"<tr class='test-source'><th>Source: </th><td><pre>\" + escapeText(details.source) + \"</pre></td></tr>\";\n  \t\t\t}\n\n  \t\t\tmessage += \"</table>\";\n\n  \t\t\t// This occurs when pushFailure is set and we have an extracted stack trace\n  \t\t} else if (!details.result && details.source) {\n  \t\t\tmessage += \"<table>\" + \"<tr class='test-source'><th>Source: </th><td><pre>\" + escapeText(details.source) + \"</pre></td></tr>\" + \"</table>\";\n  \t\t}\n\n  \t\tassertList = testItem.getElementsByTagName(\"ol\")[0];\n\n  \t\tassertLi = document$$1.createElement(\"li\");\n  \t\tassertLi.className = details.result ? \"pass\" : \"fail\";\n  \t\tassertLi.innerHTML = message;\n  \t\tassertList.appendChild(assertLi);\n  \t});\n\n  \tQUnit.testDone(function (details) {\n  \t\tvar testTitle,\n  \t\t    time,\n  \t\t    testItem,\n  \t\t    assertList,\n  \t\t    good,\n  \t\t    bad,\n  \t\t    testCounts,\n  \t\t    skipped,\n  \t\t    sourceName,\n  \t\t    tests = id(\"qunit-tests\");\n\n  \t\tif (!tests) {\n  \t\t\treturn;\n  \t\t}\n\n  \t\ttestItem = id(\"qunit-test-output-\" + details.testId);\n\n  \t\tassertList = testItem.getElementsByTagName(\"ol\")[0];\n\n  \t\tgood = details.passed;\n  \t\tbad = details.failed;\n\n  \t\t// This test passed if it has no unexpected failed assertions\n  \t\tvar testPassed = details.failed > 0 ? details.todo : !details.todo;\n\n  \t\tif (testPassed) {\n\n  \t\t\t// Collapse the passing tests\n  \t\t\taddClass(assertList, \"qunit-collapsed\");\n  \t\t} else if (config.collapse) {\n  \t\t\tif (!collapseNext) {\n\n  \t\t\t\t// Skip collapsing the first failing test\n  \t\t\t\tcollapseNext = true;\n  \t\t\t} else {\n\n  \t\t\t\t// Collapse remaining tests\n  \t\t\t\taddClass(assertList, \"qunit-collapsed\");\n  \t\t\t}\n  \t\t}\n\n  \t\t// The testItem.firstChild is the test name\n  \t\ttestTitle = testItem.firstChild;\n\n  \t\ttestCounts = bad ? \"<b class='failed'>\" + bad + \"</b>, \" + \"<b class='passed'>\" + good + \"</b>, \" : \"\";\n\n  \t\ttestTitle.innerHTML += \" <b class='counts'>(\" + testCounts + details.assertions.length + \")</b>\";\n\n  \t\tif (details.skipped) {\n  \t\t\tstats.skippedTests++;\n\n  \t\t\ttestItem.className = \"skipped\";\n  \t\t\tskipped = document$$1.createElement(\"em\");\n  \t\t\tskipped.className = \"qunit-skipped-label\";\n  \t\t\tskipped.innerHTML = \"skipped\";\n  \t\t\ttestItem.insertBefore(skipped, testTitle);\n  \t\t} else {\n  \t\t\taddEvent(testTitle, \"click\", function () {\n  \t\t\t\ttoggleClass(assertList, \"qunit-collapsed\");\n  \t\t\t});\n\n  \t\t\ttestItem.className = testPassed ? \"pass\" : \"fail\";\n\n  \t\t\tif (details.todo) {\n  \t\t\t\tvar todoLabel = document$$1.createElement(\"em\");\n  \t\t\t\ttodoLabel.className = \"qunit-todo-label\";\n  \t\t\t\ttodoLabel.innerHTML = \"todo\";\n  \t\t\t\ttestItem.className += \" todo\";\n  \t\t\t\ttestItem.insertBefore(todoLabel, testTitle);\n  \t\t\t}\n\n  \t\t\ttime = document$$1.createElement(\"span\");\n  \t\t\ttime.className = \"runtime\";\n  \t\t\ttime.innerHTML = details.runtime + \" ms\";\n  \t\t\ttestItem.insertBefore(time, assertList);\n\n  \t\t\tif (!testPassed) {\n  \t\t\t\tstats.failedTests++;\n  \t\t\t} else if (details.todo) {\n  \t\t\t\tstats.todoTests++;\n  \t\t\t} else {\n  \t\t\t\tstats.passedTests++;\n  \t\t\t}\n  \t\t}\n\n  \t\t// Show the source of the test when showing assertions\n  \t\tif (details.source) {\n  \t\t\tsourceName = document$$1.createElement(\"p\");\n  \t\t\tsourceName.innerHTML = \"<strong>Source: </strong>\" + details.source;\n  \t\t\taddClass(sourceName, \"qunit-source\");\n  \t\t\tif (testPassed) {\n  \t\t\t\taddClass(sourceName, \"qunit-collapsed\");\n  \t\t\t}\n  \t\t\taddEvent(testTitle, \"click\", function () {\n  \t\t\t\ttoggleClass(sourceName, \"qunit-collapsed\");\n  \t\t\t});\n  \t\t\ttestItem.appendChild(sourceName);\n  \t\t}\n  \t});\n\n  \t// Avoid readyState issue with phantomjs\n  \t// Ref: #818\n  \tvar notPhantom = function (p) {\n  \t\treturn !(p && p.version && p.version.major > 0);\n  \t}(window.phantom);\n\n  \tif (notPhantom && document$$1.readyState === \"complete\") {\n  \t\tQUnit.load();\n  \t} else {\n  \t\taddEvent(window, \"load\", QUnit.load);\n  \t}\n\n  \t// Wrap window.onerror. We will call the original window.onerror to see if\n  \t// the existing handler fully handles the error; if not, we will call the\n  \t// QUnit.onError function.\n  \tvar originalWindowOnError = window.onerror;\n\n  \t// Cover uncaught exceptions\n  \t// Returning true will suppress the default browser handler,\n  \t// returning false will let it run.\n  \twindow.onerror = function (message, fileName, lineNumber) {\n  \t\tvar ret = false;\n  \t\tif (originalWindowOnError) {\n  \t\t\tfor (var _len = arguments.length, args = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n  \t\t\t\targs[_key - 3] = arguments[_key];\n  \t\t\t}\n\n  \t\t\tret = originalWindowOnError.call.apply(originalWindowOnError, [this, message, fileName, lineNumber].concat(args));\n  \t\t}\n\n  \t\t// Treat return value as window.onerror itself does,\n  \t\t// Only do our handling if not suppressed.\n  \t\tif (ret !== true) {\n  \t\t\tvar error = {\n  \t\t\t\tmessage: message,\n  \t\t\t\tfileName: fileName,\n  \t\t\t\tlineNumber: lineNumber\n  \t\t\t};\n\n  \t\t\tret = QUnit.onError(error);\n  \t\t}\n\n  \t\treturn ret;\n  \t};\n\n  \t// Listen for unhandled rejections, and call QUnit.onUnhandledRejection\n  \twindow.addEventListener(\"unhandledrejection\", function (event) {\n  \t\tQUnit.onUnhandledRejection(event.reason);\n  \t});\n  })();\n\n  /*\n   * This file is a modified version of google-diff-match-patch's JavaScript implementation\n   * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),\n   * modifications are licensed as more fully set forth in LICENSE.txt.\n   *\n   * The original source of google-diff-match-patch is attributable and licensed as follows:\n   *\n   * Copyright 2006 Google Inc.\n   * https://code.google.com/p/google-diff-match-patch/\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   * https://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   *\n   * More Info:\n   *  https://code.google.com/p/google-diff-match-patch/\n   *\n   * Usage: QUnit.diff(expected, actual)\n   *\n   */\n  QUnit.diff = function () {\n  \tfunction DiffMatchPatch() {}\n\n  \t//  DIFF FUNCTIONS\n\n  \t/**\n    * The data structure representing a diff is an array of tuples:\n    * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n    * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n    */\n  \tvar DIFF_DELETE = -1,\n  \t    DIFF_INSERT = 1,\n  \t    DIFF_EQUAL = 0;\n\n  \t/**\n    * Find the differences between two texts.  Simplifies the problem by stripping\n    * any common prefix or suffix off the texts before diffing.\n    * @param {string} text1 Old string to be diffed.\n    * @param {string} text2 New string to be diffed.\n    * @param {boolean=} optChecklines Optional speedup flag. If present and false,\n    *     then don't run a line-level diff first to identify the changed areas.\n    *     Defaults to true, which does a faster, slightly less optimal diff.\n    * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.\n    */\n  \tDiffMatchPatch.prototype.DiffMain = function (text1, text2, optChecklines) {\n  \t\tvar deadline, checklines, commonlength, commonprefix, commonsuffix, diffs;\n\n  \t\t// The diff must be complete in up to 1 second.\n  \t\tdeadline = new Date().getTime() + 1000;\n\n  \t\t// Check for null inputs.\n  \t\tif (text1 === null || text2 === null) {\n  \t\t\tthrow new Error(\"Null input. (DiffMain)\");\n  \t\t}\n\n  \t\t// Check for equality (speedup).\n  \t\tif (text1 === text2) {\n  \t\t\tif (text1) {\n  \t\t\t\treturn [[DIFF_EQUAL, text1]];\n  \t\t\t}\n  \t\t\treturn [];\n  \t\t}\n\n  \t\tif (typeof optChecklines === \"undefined\") {\n  \t\t\toptChecklines = true;\n  \t\t}\n\n  \t\tchecklines = optChecklines;\n\n  \t\t// Trim off common prefix (speedup).\n  \t\tcommonlength = this.diffCommonPrefix(text1, text2);\n  \t\tcommonprefix = text1.substring(0, commonlength);\n  \t\ttext1 = text1.substring(commonlength);\n  \t\ttext2 = text2.substring(commonlength);\n\n  \t\t// Trim off common suffix (speedup).\n  \t\tcommonlength = this.diffCommonSuffix(text1, text2);\n  \t\tcommonsuffix = text1.substring(text1.length - commonlength);\n  \t\ttext1 = text1.substring(0, text1.length - commonlength);\n  \t\ttext2 = text2.substring(0, text2.length - commonlength);\n\n  \t\t// Compute the diff on the middle block.\n  \t\tdiffs = this.diffCompute(text1, text2, checklines, deadline);\n\n  \t\t// Restore the prefix and suffix.\n  \t\tif (commonprefix) {\n  \t\t\tdiffs.unshift([DIFF_EQUAL, commonprefix]);\n  \t\t}\n  \t\tif (commonsuffix) {\n  \t\t\tdiffs.push([DIFF_EQUAL, commonsuffix]);\n  \t\t}\n  \t\tthis.diffCleanupMerge(diffs);\n  \t\treturn diffs;\n  \t};\n\n  \t/**\n    * Reduce the number of edits by eliminating operationally trivial equalities.\n    * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.\n    */\n  \tDiffMatchPatch.prototype.diffCleanupEfficiency = function (diffs) {\n  \t\tvar changes, equalities, equalitiesLength, lastequality, pointer, preIns, preDel, postIns, postDel;\n  \t\tchanges = false;\n  \t\tequalities = []; // Stack of indices where equalities are found.\n  \t\tequalitiesLength = 0; // Keeping our own length var is faster in JS.\n  \t\t/** @type {?string} */\n  \t\tlastequality = null;\n\n  \t\t// Always equal to diffs[equalities[equalitiesLength - 1]][1]\n  \t\tpointer = 0; // Index of current position.\n\n  \t\t// Is there an insertion operation before the last equality.\n  \t\tpreIns = false;\n\n  \t\t// Is there a deletion operation before the last equality.\n  \t\tpreDel = false;\n\n  \t\t// Is there an insertion operation after the last equality.\n  \t\tpostIns = false;\n\n  \t\t// Is there a deletion operation after the last equality.\n  \t\tpostDel = false;\n  \t\twhile (pointer < diffs.length) {\n\n  \t\t\t// Equality found.\n  \t\t\tif (diffs[pointer][0] === DIFF_EQUAL) {\n  \t\t\t\tif (diffs[pointer][1].length < 4 && (postIns || postDel)) {\n\n  \t\t\t\t\t// Candidate found.\n  \t\t\t\t\tequalities[equalitiesLength++] = pointer;\n  \t\t\t\t\tpreIns = postIns;\n  \t\t\t\t\tpreDel = postDel;\n  \t\t\t\t\tlastequality = diffs[pointer][1];\n  \t\t\t\t} else {\n\n  \t\t\t\t\t// Not a candidate, and can never become one.\n  \t\t\t\t\tequalitiesLength = 0;\n  \t\t\t\t\tlastequality = null;\n  \t\t\t\t}\n  \t\t\t\tpostIns = postDel = false;\n\n  \t\t\t\t// An insertion or deletion.\n  \t\t\t} else {\n\n  \t\t\t\tif (diffs[pointer][0] === DIFF_DELETE) {\n  \t\t\t\t\tpostDel = true;\n  \t\t\t\t} else {\n  \t\t\t\t\tpostIns = true;\n  \t\t\t\t}\n\n  \t\t\t\t/*\n       * Five types to be split:\n       * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n       * <ins>A</ins>X<ins>C</ins><del>D</del>\n       * <ins>A</ins><del>B</del>X<ins>C</ins>\n       * <ins>A</del>X<ins>C</ins><del>D</del>\n       * <ins>A</ins><del>B</del>X<del>C</del>\n       */\n  \t\t\t\tif (lastequality && (preIns && preDel && postIns && postDel || lastequality.length < 2 && preIns + preDel + postIns + postDel === 3)) {\n\n  \t\t\t\t\t// Duplicate record.\n  \t\t\t\t\tdiffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]);\n\n  \t\t\t\t\t// Change second copy to insert.\n  \t\t\t\t\tdiffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n  \t\t\t\t\tequalitiesLength--; // Throw away the equality we just deleted;\n  \t\t\t\t\tlastequality = null;\n  \t\t\t\t\tif (preIns && preDel) {\n\n  \t\t\t\t\t\t// No changes made which could affect previous entry, keep going.\n  \t\t\t\t\t\tpostIns = postDel = true;\n  \t\t\t\t\t\tequalitiesLength = 0;\n  \t\t\t\t\t} else {\n  \t\t\t\t\t\tequalitiesLength--; // Throw away the previous equality.\n  \t\t\t\t\t\tpointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n  \t\t\t\t\t\tpostIns = postDel = false;\n  \t\t\t\t\t}\n  \t\t\t\t\tchanges = true;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t\tpointer++;\n  \t\t}\n\n  \t\tif (changes) {\n  \t\t\tthis.diffCleanupMerge(diffs);\n  \t\t}\n  \t};\n\n  \t/**\n    * Convert a diff array into a pretty HTML report.\n    * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.\n    * @param {integer} string to be beautified.\n    * @return {string} HTML representation.\n    */\n  \tDiffMatchPatch.prototype.diffPrettyHtml = function (diffs) {\n  \t\tvar op,\n  \t\t    data,\n  \t\t    x,\n  \t\t    html = [];\n  \t\tfor (x = 0; x < diffs.length; x++) {\n  \t\t\top = diffs[x][0]; // Operation (insert, delete, equal)\n  \t\t\tdata = diffs[x][1]; // Text of change.\n  \t\t\tswitch (op) {\n  \t\t\t\tcase DIFF_INSERT:\n  \t\t\t\t\thtml[x] = \"<ins>\" + escapeText(data) + \"</ins>\";\n  \t\t\t\t\tbreak;\n  \t\t\t\tcase DIFF_DELETE:\n  \t\t\t\t\thtml[x] = \"<del>\" + escapeText(data) + \"</del>\";\n  \t\t\t\t\tbreak;\n  \t\t\t\tcase DIFF_EQUAL:\n  \t\t\t\t\thtml[x] = \"<span>\" + escapeText(data) + \"</span>\";\n  \t\t\t\t\tbreak;\n  \t\t\t}\n  \t\t}\n  \t\treturn html.join(\"\");\n  \t};\n\n  \t/**\n    * Determine the common prefix of two strings.\n    * @param {string} text1 First string.\n    * @param {string} text2 Second string.\n    * @return {number} The number of characters common to the start of each\n    *     string.\n    */\n  \tDiffMatchPatch.prototype.diffCommonPrefix = function (text1, text2) {\n  \t\tvar pointermid, pointermax, pointermin, pointerstart;\n\n  \t\t// Quick check for common null cases.\n  \t\tif (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n  \t\t\treturn 0;\n  \t\t}\n\n  \t\t// Binary search.\n  \t\t// Performance analysis: https://neil.fraser.name/news/2007/10/09/\n  \t\tpointermin = 0;\n  \t\tpointermax = Math.min(text1.length, text2.length);\n  \t\tpointermid = pointermax;\n  \t\tpointerstart = 0;\n  \t\twhile (pointermin < pointermid) {\n  \t\t\tif (text1.substring(pointerstart, pointermid) === text2.substring(pointerstart, pointermid)) {\n  \t\t\t\tpointermin = pointermid;\n  \t\t\t\tpointerstart = pointermin;\n  \t\t\t} else {\n  \t\t\t\tpointermax = pointermid;\n  \t\t\t}\n  \t\t\tpointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  \t\t}\n  \t\treturn pointermid;\n  \t};\n\n  \t/**\n    * Determine the common suffix of two strings.\n    * @param {string} text1 First string.\n    * @param {string} text2 Second string.\n    * @return {number} The number of characters common to the end of each string.\n    */\n  \tDiffMatchPatch.prototype.diffCommonSuffix = function (text1, text2) {\n  \t\tvar pointermid, pointermax, pointermin, pointerend;\n\n  \t\t// Quick check for common null cases.\n  \t\tif (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) {\n  \t\t\treturn 0;\n  \t\t}\n\n  \t\t// Binary search.\n  \t\t// Performance analysis: https://neil.fraser.name/news/2007/10/09/\n  \t\tpointermin = 0;\n  \t\tpointermax = Math.min(text1.length, text2.length);\n  \t\tpointermid = pointermax;\n  \t\tpointerend = 0;\n  \t\twhile (pointermin < pointermid) {\n  \t\t\tif (text1.substring(text1.length - pointermid, text1.length - pointerend) === text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n  \t\t\t\tpointermin = pointermid;\n  \t\t\t\tpointerend = pointermin;\n  \t\t\t} else {\n  \t\t\t\tpointermax = pointermid;\n  \t\t\t}\n  \t\t\tpointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  \t\t}\n  \t\treturn pointermid;\n  \t};\n\n  \t/**\n    * Find the differences between two texts.  Assumes that the texts do not\n    * have any common prefix or suffix.\n    * @param {string} text1 Old string to be diffed.\n    * @param {string} text2 New string to be diffed.\n    * @param {boolean} checklines Speedup flag.  If false, then don't run a\n    *     line-level diff first to identify the changed areas.\n    *     If true, then run a faster, slightly less optimal diff.\n    * @param {number} deadline Time when the diff should be complete by.\n    * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.\n    * @private\n    */\n  \tDiffMatchPatch.prototype.diffCompute = function (text1, text2, checklines, deadline) {\n  \t\tvar diffs, longtext, shorttext, i, hm, text1A, text2A, text1B, text2B, midCommon, diffsA, diffsB;\n\n  \t\tif (!text1) {\n\n  \t\t\t// Just add some text (speedup).\n  \t\t\treturn [[DIFF_INSERT, text2]];\n  \t\t}\n\n  \t\tif (!text2) {\n\n  \t\t\t// Just delete some text (speedup).\n  \t\t\treturn [[DIFF_DELETE, text1]];\n  \t\t}\n\n  \t\tlongtext = text1.length > text2.length ? text1 : text2;\n  \t\tshorttext = text1.length > text2.length ? text2 : text1;\n  \t\ti = longtext.indexOf(shorttext);\n  \t\tif (i !== -1) {\n\n  \t\t\t// Shorter text is inside the longer text (speedup).\n  \t\t\tdiffs = [[DIFF_INSERT, longtext.substring(0, i)], [DIFF_EQUAL, shorttext], [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n\n  \t\t\t// Swap insertions for deletions if diff is reversed.\n  \t\t\tif (text1.length > text2.length) {\n  \t\t\t\tdiffs[0][0] = diffs[2][0] = DIFF_DELETE;\n  \t\t\t}\n  \t\t\treturn diffs;\n  \t\t}\n\n  \t\tif (shorttext.length === 1) {\n\n  \t\t\t// Single character string.\n  \t\t\t// After the previous speedup, the character can't be an equality.\n  \t\t\treturn [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n  \t\t}\n\n  \t\t// Check to see if the problem can be split in two.\n  \t\thm = this.diffHalfMatch(text1, text2);\n  \t\tif (hm) {\n\n  \t\t\t// A half-match was found, sort out the return data.\n  \t\t\ttext1A = hm[0];\n  \t\t\ttext1B = hm[1];\n  \t\t\ttext2A = hm[2];\n  \t\t\ttext2B = hm[3];\n  \t\t\tmidCommon = hm[4];\n\n  \t\t\t// Send both pairs off for separate processing.\n  \t\t\tdiffsA = this.DiffMain(text1A, text2A, checklines, deadline);\n  \t\t\tdiffsB = this.DiffMain(text1B, text2B, checklines, deadline);\n\n  \t\t\t// Merge the results.\n  \t\t\treturn diffsA.concat([[DIFF_EQUAL, midCommon]], diffsB);\n  \t\t}\n\n  \t\tif (checklines && text1.length > 100 && text2.length > 100) {\n  \t\t\treturn this.diffLineMode(text1, text2, deadline);\n  \t\t}\n\n  \t\treturn this.diffBisect(text1, text2, deadline);\n  \t};\n\n  \t/**\n    * Do the two texts share a substring which is at least half the length of the\n    * longer text?\n    * This speedup can produce non-minimal diffs.\n    * @param {string} text1 First string.\n    * @param {string} text2 Second string.\n    * @return {Array.<string>} Five element Array, containing the prefix of\n    *     text1, the suffix of text1, the prefix of text2, the suffix of\n    *     text2 and the common middle.  Or null if there was no match.\n    * @private\n    */\n  \tDiffMatchPatch.prototype.diffHalfMatch = function (text1, text2) {\n  \t\tvar longtext, shorttext, dmp, text1A, text2B, text2A, text1B, midCommon, hm1, hm2, hm;\n\n  \t\tlongtext = text1.length > text2.length ? text1 : text2;\n  \t\tshorttext = text1.length > text2.length ? text2 : text1;\n  \t\tif (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n  \t\t\treturn null; // Pointless.\n  \t\t}\n  \t\tdmp = this; // 'this' becomes 'window' in a closure.\n\n  \t\t/**\n     * Does a substring of shorttext exist within longtext such that the substring\n     * is at least half the length of longtext?\n     * Closure, but does not reference any external variables.\n     * @param {string} longtext Longer string.\n     * @param {string} shorttext Shorter string.\n     * @param {number} i Start index of quarter length substring within longtext.\n     * @return {Array.<string>} Five element Array, containing the prefix of\n     *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n     *     of shorttext and the common middle.  Or null if there was no match.\n     * @private\n     */\n  \t\tfunction diffHalfMatchI(longtext, shorttext, i) {\n  \t\t\tvar seed, j, bestCommon, prefixLength, suffixLength, bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB;\n\n  \t\t\t// Start with a 1/4 length substring at position i as a seed.\n  \t\t\tseed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n  \t\t\tj = -1;\n  \t\t\tbestCommon = \"\";\n  \t\t\twhile ((j = shorttext.indexOf(seed, j + 1)) !== -1) {\n  \t\t\t\tprefixLength = dmp.diffCommonPrefix(longtext.substring(i), shorttext.substring(j));\n  \t\t\t\tsuffixLength = dmp.diffCommonSuffix(longtext.substring(0, i), shorttext.substring(0, j));\n  \t\t\t\tif (bestCommon.length < suffixLength + prefixLength) {\n  \t\t\t\t\tbestCommon = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength);\n  \t\t\t\t\tbestLongtextA = longtext.substring(0, i - suffixLength);\n  \t\t\t\t\tbestLongtextB = longtext.substring(i + prefixLength);\n  \t\t\t\t\tbestShorttextA = shorttext.substring(0, j - suffixLength);\n  \t\t\t\t\tbestShorttextB = shorttext.substring(j + prefixLength);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t\tif (bestCommon.length * 2 >= longtext.length) {\n  \t\t\t\treturn [bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB, bestCommon];\n  \t\t\t} else {\n  \t\t\t\treturn null;\n  \t\t\t}\n  \t\t}\n\n  \t\t// First check if the second quarter is the seed for a half-match.\n  \t\thm1 = diffHalfMatchI(longtext, shorttext, Math.ceil(longtext.length / 4));\n\n  \t\t// Check again based on the third quarter.\n  \t\thm2 = diffHalfMatchI(longtext, shorttext, Math.ceil(longtext.length / 2));\n  \t\tif (!hm1 && !hm2) {\n  \t\t\treturn null;\n  \t\t} else if (!hm2) {\n  \t\t\thm = hm1;\n  \t\t} else if (!hm1) {\n  \t\t\thm = hm2;\n  \t\t} else {\n\n  \t\t\t// Both matched.  Select the longest.\n  \t\t\thm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  \t\t}\n\n  \t\t// A half-match was found, sort out the return data.\n  \t\tif (text1.length > text2.length) {\n  \t\t\ttext1A = hm[0];\n  \t\t\ttext1B = hm[1];\n  \t\t\ttext2A = hm[2];\n  \t\t\ttext2B = hm[3];\n  \t\t} else {\n  \t\t\ttext2A = hm[0];\n  \t\t\ttext2B = hm[1];\n  \t\t\ttext1A = hm[2];\n  \t\t\ttext1B = hm[3];\n  \t\t}\n  \t\tmidCommon = hm[4];\n  \t\treturn [text1A, text1B, text2A, text2B, midCommon];\n  \t};\n\n  \t/**\n    * Do a quick line-level diff on both strings, then rediff the parts for\n    * greater accuracy.\n    * This speedup can produce non-minimal diffs.\n    * @param {string} text1 Old string to be diffed.\n    * @param {string} text2 New string to be diffed.\n    * @param {number} deadline Time when the diff should be complete by.\n    * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.\n    * @private\n    */\n  \tDiffMatchPatch.prototype.diffLineMode = function (text1, text2, deadline) {\n  \t\tvar a, diffs, linearray, pointer, countInsert, countDelete, textInsert, textDelete, j;\n\n  \t\t// Scan the text on a line-by-line basis first.\n  \t\ta = this.diffLinesToChars(text1, text2);\n  \t\ttext1 = a.chars1;\n  \t\ttext2 = a.chars2;\n  \t\tlinearray = a.lineArray;\n\n  \t\tdiffs = this.DiffMain(text1, text2, false, deadline);\n\n  \t\t// Convert the diff back to original text.\n  \t\tthis.diffCharsToLines(diffs, linearray);\n\n  \t\t// Eliminate freak matches (e.g. blank lines)\n  \t\tthis.diffCleanupSemantic(diffs);\n\n  \t\t// Rediff any replacement blocks, this time character-by-character.\n  \t\t// Add a dummy entry at the end.\n  \t\tdiffs.push([DIFF_EQUAL, \"\"]);\n  \t\tpointer = 0;\n  \t\tcountDelete = 0;\n  \t\tcountInsert = 0;\n  \t\ttextDelete = \"\";\n  \t\ttextInsert = \"\";\n  \t\twhile (pointer < diffs.length) {\n  \t\t\tswitch (diffs[pointer][0]) {\n  \t\t\t\tcase DIFF_INSERT:\n  \t\t\t\t\tcountInsert++;\n  \t\t\t\t\ttextInsert += diffs[pointer][1];\n  \t\t\t\t\tbreak;\n  \t\t\t\tcase DIFF_DELETE:\n  \t\t\t\t\tcountDelete++;\n  \t\t\t\t\ttextDelete += diffs[pointer][1];\n  \t\t\t\t\tbreak;\n  \t\t\t\tcase DIFF_EQUAL:\n\n  \t\t\t\t\t// Upon reaching an equality, check for prior redundancies.\n  \t\t\t\t\tif (countDelete >= 1 && countInsert >= 1) {\n\n  \t\t\t\t\t\t// Delete the offending records and add the merged ones.\n  \t\t\t\t\t\tdiffs.splice(pointer - countDelete - countInsert, countDelete + countInsert);\n  \t\t\t\t\t\tpointer = pointer - countDelete - countInsert;\n  \t\t\t\t\t\ta = this.DiffMain(textDelete, textInsert, false, deadline);\n  \t\t\t\t\t\tfor (j = a.length - 1; j >= 0; j--) {\n  \t\t\t\t\t\t\tdiffs.splice(pointer, 0, a[j]);\n  \t\t\t\t\t\t}\n  \t\t\t\t\t\tpointer = pointer + a.length;\n  \t\t\t\t\t}\n  \t\t\t\t\tcountInsert = 0;\n  \t\t\t\t\tcountDelete = 0;\n  \t\t\t\t\ttextDelete = \"\";\n  \t\t\t\t\ttextInsert = \"\";\n  \t\t\t\t\tbreak;\n  \t\t\t}\n  \t\t\tpointer++;\n  \t\t}\n  \t\tdiffs.pop(); // Remove the dummy entry at the end.\n\n  \t\treturn diffs;\n  \t};\n\n  \t/**\n    * Find the 'middle snake' of a diff, split the problem in two\n    * and return the recursively constructed diff.\n    * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n    * @param {string} text1 Old string to be diffed.\n    * @param {string} text2 New string to be diffed.\n    * @param {number} deadline Time at which to bail if not yet complete.\n    * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.\n    * @private\n    */\n  \tDiffMatchPatch.prototype.diffBisect = function (text1, text2, deadline) {\n  \t\tvar text1Length, text2Length, maxD, vOffset, vLength, v1, v2, x, delta, front, k1start, k1end, k2start, k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2;\n\n  \t\t// Cache the text lengths to prevent multiple calls.\n  \t\ttext1Length = text1.length;\n  \t\ttext2Length = text2.length;\n  \t\tmaxD = Math.ceil((text1Length + text2Length) / 2);\n  \t\tvOffset = maxD;\n  \t\tvLength = 2 * maxD;\n  \t\tv1 = new Array(vLength);\n  \t\tv2 = new Array(vLength);\n\n  \t\t// Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  \t\t// integers and undefined.\n  \t\tfor (x = 0; x < vLength; x++) {\n  \t\t\tv1[x] = -1;\n  \t\t\tv2[x] = -1;\n  \t\t}\n  \t\tv1[vOffset + 1] = 0;\n  \t\tv2[vOffset + 1] = 0;\n  \t\tdelta = text1Length - text2Length;\n\n  \t\t// If the total number of characters is odd, then the front path will collide\n  \t\t// with the reverse path.\n  \t\tfront = delta % 2 !== 0;\n\n  \t\t// Offsets for start and end of k loop.\n  \t\t// Prevents mapping of space beyond the grid.\n  \t\tk1start = 0;\n  \t\tk1end = 0;\n  \t\tk2start = 0;\n  \t\tk2end = 0;\n  \t\tfor (d = 0; d < maxD; d++) {\n\n  \t\t\t// Bail out if deadline is reached.\n  \t\t\tif (new Date().getTime() > deadline) {\n  \t\t\t\tbreak;\n  \t\t\t}\n\n  \t\t\t// Walk the front path one step.\n  \t\t\tfor (k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n  \t\t\t\tk1Offset = vOffset + k1;\n  \t\t\t\tif (k1 === -d || k1 !== d && v1[k1Offset - 1] < v1[k1Offset + 1]) {\n  \t\t\t\t\tx1 = v1[k1Offset + 1];\n  \t\t\t\t} else {\n  \t\t\t\t\tx1 = v1[k1Offset - 1] + 1;\n  \t\t\t\t}\n  \t\t\t\ty1 = x1 - k1;\n  \t\t\t\twhile (x1 < text1Length && y1 < text2Length && text1.charAt(x1) === text2.charAt(y1)) {\n  \t\t\t\t\tx1++;\n  \t\t\t\t\ty1++;\n  \t\t\t\t}\n  \t\t\t\tv1[k1Offset] = x1;\n  \t\t\t\tif (x1 > text1Length) {\n\n  \t\t\t\t\t// Ran off the right of the graph.\n  \t\t\t\t\tk1end += 2;\n  \t\t\t\t} else if (y1 > text2Length) {\n\n  \t\t\t\t\t// Ran off the bottom of the graph.\n  \t\t\t\t\tk1start += 2;\n  \t\t\t\t} else if (front) {\n  \t\t\t\t\tk2Offset = vOffset + delta - k1;\n  \t\t\t\t\tif (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) {\n\n  \t\t\t\t\t\t// Mirror x2 onto top-left coordinate system.\n  \t\t\t\t\t\tx2 = text1Length - v2[k2Offset];\n  \t\t\t\t\t\tif (x1 >= x2) {\n\n  \t\t\t\t\t\t\t// Overlap detected.\n  \t\t\t\t\t\t\treturn this.diffBisectSplit(text1, text2, x1, y1, deadline);\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n\n  \t\t\t// Walk the reverse path one step.\n  \t\t\tfor (k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n  \t\t\t\tk2Offset = vOffset + k2;\n  \t\t\t\tif (k2 === -d || k2 !== d && v2[k2Offset - 1] < v2[k2Offset + 1]) {\n  \t\t\t\t\tx2 = v2[k2Offset + 1];\n  \t\t\t\t} else {\n  \t\t\t\t\tx2 = v2[k2Offset - 1] + 1;\n  \t\t\t\t}\n  \t\t\t\ty2 = x2 - k2;\n  \t\t\t\twhile (x2 < text1Length && y2 < text2Length && text1.charAt(text1Length - x2 - 1) === text2.charAt(text2Length - y2 - 1)) {\n  \t\t\t\t\tx2++;\n  \t\t\t\t\ty2++;\n  \t\t\t\t}\n  \t\t\t\tv2[k2Offset] = x2;\n  \t\t\t\tif (x2 > text1Length) {\n\n  \t\t\t\t\t// Ran off the left of the graph.\n  \t\t\t\t\tk2end += 2;\n  \t\t\t\t} else if (y2 > text2Length) {\n\n  \t\t\t\t\t// Ran off the top of the graph.\n  \t\t\t\t\tk2start += 2;\n  \t\t\t\t} else if (!front) {\n  \t\t\t\t\tk1Offset = vOffset + delta - k2;\n  \t\t\t\t\tif (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) {\n  \t\t\t\t\t\tx1 = v1[k1Offset];\n  \t\t\t\t\t\ty1 = vOffset + x1 - k1Offset;\n\n  \t\t\t\t\t\t// Mirror x2 onto top-left coordinate system.\n  \t\t\t\t\t\tx2 = text1Length - x2;\n  \t\t\t\t\t\tif (x1 >= x2) {\n\n  \t\t\t\t\t\t\t// Overlap detected.\n  \t\t\t\t\t\t\treturn this.diffBisectSplit(text1, text2, x1, y1, deadline);\n  \t\t\t\t\t\t}\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t}\n  \t\t}\n\n  \t\t// Diff took too long and hit the deadline or\n  \t\t// number of diffs equals number of characters, no commonality at all.\n  \t\treturn [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n  \t};\n\n  \t/**\n    * Given the location of the 'middle snake', split the diff in two parts\n    * and recurse.\n    * @param {string} text1 Old string to be diffed.\n    * @param {string} text2 New string to be diffed.\n    * @param {number} x Index of split point in text1.\n    * @param {number} y Index of split point in text2.\n    * @param {number} deadline Time at which to bail if not yet complete.\n    * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.\n    * @private\n    */\n  \tDiffMatchPatch.prototype.diffBisectSplit = function (text1, text2, x, y, deadline) {\n  \t\tvar text1a, text1b, text2a, text2b, diffs, diffsb;\n  \t\ttext1a = text1.substring(0, x);\n  \t\ttext2a = text2.substring(0, y);\n  \t\ttext1b = text1.substring(x);\n  \t\ttext2b = text2.substring(y);\n\n  \t\t// Compute both diffs serially.\n  \t\tdiffs = this.DiffMain(text1a, text2a, false, deadline);\n  \t\tdiffsb = this.DiffMain(text1b, text2b, false, deadline);\n\n  \t\treturn diffs.concat(diffsb);\n  \t};\n\n  \t/**\n    * Reduce the number of edits by eliminating semantically trivial equalities.\n    * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.\n    */\n  \tDiffMatchPatch.prototype.diffCleanupSemantic = function (diffs) {\n  \t\tvar changes, equalities, equalitiesLength, lastequality, pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1, lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2;\n  \t\tchanges = false;\n  \t\tequalities = []; // Stack of indices where equalities are found.\n  \t\tequalitiesLength = 0; // Keeping our own length var is faster in JS.\n  \t\t/** @type {?string} */\n  \t\tlastequality = null;\n\n  \t\t// Always equal to diffs[equalities[equalitiesLength - 1]][1]\n  \t\tpointer = 0; // Index of current position.\n\n  \t\t// Number of characters that changed prior to the equality.\n  \t\tlengthInsertions1 = 0;\n  \t\tlengthDeletions1 = 0;\n\n  \t\t// Number of characters that changed after the equality.\n  \t\tlengthInsertions2 = 0;\n  \t\tlengthDeletions2 = 0;\n  \t\twhile (pointer < diffs.length) {\n  \t\t\tif (diffs[pointer][0] === DIFF_EQUAL) {\n  \t\t\t\t// Equality found.\n  \t\t\t\tequalities[equalitiesLength++] = pointer;\n  \t\t\t\tlengthInsertions1 = lengthInsertions2;\n  \t\t\t\tlengthDeletions1 = lengthDeletions2;\n  \t\t\t\tlengthInsertions2 = 0;\n  \t\t\t\tlengthDeletions2 = 0;\n  \t\t\t\tlastequality = diffs[pointer][1];\n  \t\t\t} else {\n  \t\t\t\t// An insertion or deletion.\n  \t\t\t\tif (diffs[pointer][0] === DIFF_INSERT) {\n  \t\t\t\t\tlengthInsertions2 += diffs[pointer][1].length;\n  \t\t\t\t} else {\n  \t\t\t\t\tlengthDeletions2 += diffs[pointer][1].length;\n  \t\t\t\t}\n\n  \t\t\t\t// Eliminate an equality that is smaller or equal to the edits on both\n  \t\t\t\t// sides of it.\n  \t\t\t\tif (lastequality && lastequality.length <= Math.max(lengthInsertions1, lengthDeletions1) && lastequality.length <= Math.max(lengthInsertions2, lengthDeletions2)) {\n\n  \t\t\t\t\t// Duplicate record.\n  \t\t\t\t\tdiffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]);\n\n  \t\t\t\t\t// Change second copy to insert.\n  \t\t\t\t\tdiffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n\n  \t\t\t\t\t// Throw away the equality we just deleted.\n  \t\t\t\t\tequalitiesLength--;\n\n  \t\t\t\t\t// Throw away the previous equality (it needs to be reevaluated).\n  \t\t\t\t\tequalitiesLength--;\n  \t\t\t\t\tpointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n\n  \t\t\t\t\t// Reset the counters.\n  \t\t\t\t\tlengthInsertions1 = 0;\n  \t\t\t\t\tlengthDeletions1 = 0;\n  \t\t\t\t\tlengthInsertions2 = 0;\n  \t\t\t\t\tlengthDeletions2 = 0;\n  \t\t\t\t\tlastequality = null;\n  \t\t\t\t\tchanges = true;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t\tpointer++;\n  \t\t}\n\n  \t\t// Normalize the diff.\n  \t\tif (changes) {\n  \t\t\tthis.diffCleanupMerge(diffs);\n  \t\t}\n\n  \t\t// Find any overlaps between deletions and insertions.\n  \t\t// e.g: <del>abcxxx</del><ins>xxxdef</ins>\n  \t\t//   -> <del>abc</del>xxx<ins>def</ins>\n  \t\t// e.g: <del>xxxabc</del><ins>defxxx</ins>\n  \t\t//   -> <ins>def</ins>xxx<del>abc</del>\n  \t\t// Only extract an overlap if it is as big as the edit ahead or behind it.\n  \t\tpointer = 1;\n  \t\twhile (pointer < diffs.length) {\n  \t\t\tif (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) {\n  \t\t\t\tdeletion = diffs[pointer - 1][1];\n  \t\t\t\tinsertion = diffs[pointer][1];\n  \t\t\t\toverlapLength1 = this.diffCommonOverlap(deletion, insertion);\n  \t\t\t\toverlapLength2 = this.diffCommonOverlap(insertion, deletion);\n  \t\t\t\tif (overlapLength1 >= overlapLength2) {\n  \t\t\t\t\tif (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) {\n\n  \t\t\t\t\t\t// Overlap found.  Insert an equality and trim the surrounding edits.\n  \t\t\t\t\t\tdiffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlapLength1)]);\n  \t\t\t\t\t\tdiffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlapLength1);\n  \t\t\t\t\t\tdiffs[pointer + 1][1] = insertion.substring(overlapLength1);\n  \t\t\t\t\t\tpointer++;\n  \t\t\t\t\t}\n  \t\t\t\t} else {\n  \t\t\t\t\tif (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) {\n\n  \t\t\t\t\t\t// Reverse overlap found.\n  \t\t\t\t\t\t// Insert an equality and swap and trim the surrounding edits.\n  \t\t\t\t\t\tdiffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlapLength2)]);\n\n  \t\t\t\t\t\tdiffs[pointer - 1][0] = DIFF_INSERT;\n  \t\t\t\t\t\tdiffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlapLength2);\n  \t\t\t\t\t\tdiffs[pointer + 1][0] = DIFF_DELETE;\n  \t\t\t\t\t\tdiffs[pointer + 1][1] = deletion.substring(overlapLength2);\n  \t\t\t\t\t\tpointer++;\n  \t\t\t\t\t}\n  \t\t\t\t}\n  \t\t\t\tpointer++;\n  \t\t\t}\n  \t\t\tpointer++;\n  \t\t}\n  \t};\n\n  \t/**\n    * Determine if the suffix of one string is the prefix of another.\n    * @param {string} text1 First string.\n    * @param {string} text2 Second string.\n    * @return {number} The number of characters common to the end of the first\n    *     string and the start of the second string.\n    * @private\n    */\n  \tDiffMatchPatch.prototype.diffCommonOverlap = function (text1, text2) {\n  \t\tvar text1Length, text2Length, textLength, best, length, pattern, found;\n\n  \t\t// Cache the text lengths to prevent multiple calls.\n  \t\ttext1Length = text1.length;\n  \t\ttext2Length = text2.length;\n\n  \t\t// Eliminate the null case.\n  \t\tif (text1Length === 0 || text2Length === 0) {\n  \t\t\treturn 0;\n  \t\t}\n\n  \t\t// Truncate the longer string.\n  \t\tif (text1Length > text2Length) {\n  \t\t\ttext1 = text1.substring(text1Length - text2Length);\n  \t\t} else if (text1Length < text2Length) {\n  \t\t\ttext2 = text2.substring(0, text1Length);\n  \t\t}\n  \t\ttextLength = Math.min(text1Length, text2Length);\n\n  \t\t// Quick check for the worst case.\n  \t\tif (text1 === text2) {\n  \t\t\treturn textLength;\n  \t\t}\n\n  \t\t// Start by looking for a single character match\n  \t\t// and increase length until no match is found.\n  \t\t// Performance analysis: https://neil.fraser.name/news/2010/11/04/\n  \t\tbest = 0;\n  \t\tlength = 1;\n  \t\twhile (true) {\n  \t\t\tpattern = text1.substring(textLength - length);\n  \t\t\tfound = text2.indexOf(pattern);\n  \t\t\tif (found === -1) {\n  \t\t\t\treturn best;\n  \t\t\t}\n  \t\t\tlength += found;\n  \t\t\tif (found === 0 || text1.substring(textLength - length) === text2.substring(0, length)) {\n  \t\t\t\tbest = length;\n  \t\t\t\tlength++;\n  \t\t\t}\n  \t\t}\n  \t};\n\n  \t/**\n    * Split two texts into an array of strings.  Reduce the texts to a string of\n    * hashes where each Unicode character represents one line.\n    * @param {string} text1 First string.\n    * @param {string} text2 Second string.\n    * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}\n    *     An object containing the encoded text1, the encoded text2 and\n    *     the array of unique strings.\n    *     The zeroth element of the array of unique strings is intentionally blank.\n    * @private\n    */\n  \tDiffMatchPatch.prototype.diffLinesToChars = function (text1, text2) {\n  \t\tvar lineArray, lineHash, chars1, chars2;\n  \t\tlineArray = []; // E.g. lineArray[4] === 'Hello\\n'\n  \t\tlineHash = {}; // E.g. lineHash['Hello\\n'] === 4\n\n  \t\t// '\\x00' is a valid character, but various debuggers don't like it.\n  \t\t// So we'll insert a junk entry to avoid generating a null character.\n  \t\tlineArray[0] = \"\";\n\n  \t\t/**\n     * Split a text into an array of strings.  Reduce the texts to a string of\n     * hashes where each Unicode character represents one line.\n     * Modifies linearray and linehash through being a closure.\n     * @param {string} text String to encode.\n     * @return {string} Encoded string.\n     * @private\n     */\n  \t\tfunction diffLinesToCharsMunge(text) {\n  \t\t\tvar chars, lineStart, lineEnd, lineArrayLength, line;\n  \t\t\tchars = \"\";\n\n  \t\t\t// Walk the text, pulling out a substring for each line.\n  \t\t\t// text.split('\\n') would would temporarily double our memory footprint.\n  \t\t\t// Modifying text would create many large strings to garbage collect.\n  \t\t\tlineStart = 0;\n  \t\t\tlineEnd = -1;\n\n  \t\t\t// Keeping our own length variable is faster than looking it up.\n  \t\t\tlineArrayLength = lineArray.length;\n  \t\t\twhile (lineEnd < text.length - 1) {\n  \t\t\t\tlineEnd = text.indexOf(\"\\n\", lineStart);\n  \t\t\t\tif (lineEnd === -1) {\n  \t\t\t\t\tlineEnd = text.length - 1;\n  \t\t\t\t}\n  \t\t\t\tline = text.substring(lineStart, lineEnd + 1);\n  \t\t\t\tlineStart = lineEnd + 1;\n\n  \t\t\t\tvar lineHashExists = lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== undefined;\n\n  \t\t\t\tif (lineHashExists) {\n  \t\t\t\t\tchars += String.fromCharCode(lineHash[line]);\n  \t\t\t\t} else {\n  \t\t\t\t\tchars += String.fromCharCode(lineArrayLength);\n  \t\t\t\t\tlineHash[line] = lineArrayLength;\n  \t\t\t\t\tlineArray[lineArrayLength++] = line;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t\treturn chars;\n  \t\t}\n\n  \t\tchars1 = diffLinesToCharsMunge(text1);\n  \t\tchars2 = diffLinesToCharsMunge(text2);\n  \t\treturn {\n  \t\t\tchars1: chars1,\n  \t\t\tchars2: chars2,\n  \t\t\tlineArray: lineArray\n  \t\t};\n  \t};\n\n  \t/**\n    * Rehydrate the text in a diff from a string of line hashes to real lines of\n    * text.\n    * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.\n    * @param {!Array.<string>} lineArray Array of unique strings.\n    * @private\n    */\n  \tDiffMatchPatch.prototype.diffCharsToLines = function (diffs, lineArray) {\n  \t\tvar x, chars, text, y;\n  \t\tfor (x = 0; x < diffs.length; x++) {\n  \t\t\tchars = diffs[x][1];\n  \t\t\ttext = [];\n  \t\t\tfor (y = 0; y < chars.length; y++) {\n  \t\t\t\ttext[y] = lineArray[chars.charCodeAt(y)];\n  \t\t\t}\n  \t\t\tdiffs[x][1] = text.join(\"\");\n  \t\t}\n  \t};\n\n  \t/**\n    * Reorder and merge like edit sections.  Merge equalities.\n    * Any edit section can move as long as it doesn't cross an equality.\n    * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.\n    */\n  \tDiffMatchPatch.prototype.diffCleanupMerge = function (diffs) {\n  \t\tvar pointer, countDelete, countInsert, textInsert, textDelete, commonlength, changes, diffPointer, position;\n  \t\tdiffs.push([DIFF_EQUAL, \"\"]); // Add a dummy entry at the end.\n  \t\tpointer = 0;\n  \t\tcountDelete = 0;\n  \t\tcountInsert = 0;\n  \t\ttextDelete = \"\";\n  \t\ttextInsert = \"\";\n\n  \t\twhile (pointer < diffs.length) {\n  \t\t\tswitch (diffs[pointer][0]) {\n  \t\t\t\tcase DIFF_INSERT:\n  \t\t\t\t\tcountInsert++;\n  \t\t\t\t\ttextInsert += diffs[pointer][1];\n  \t\t\t\t\tpointer++;\n  \t\t\t\t\tbreak;\n  \t\t\t\tcase DIFF_DELETE:\n  \t\t\t\t\tcountDelete++;\n  \t\t\t\t\ttextDelete += diffs[pointer][1];\n  \t\t\t\t\tpointer++;\n  \t\t\t\t\tbreak;\n  \t\t\t\tcase DIFF_EQUAL:\n\n  \t\t\t\t\t// Upon reaching an equality, check for prior redundancies.\n  \t\t\t\t\tif (countDelete + countInsert > 1) {\n  \t\t\t\t\t\tif (countDelete !== 0 && countInsert !== 0) {\n\n  \t\t\t\t\t\t\t// Factor out any common prefixes.\n  \t\t\t\t\t\t\tcommonlength = this.diffCommonPrefix(textInsert, textDelete);\n  \t\t\t\t\t\t\tif (commonlength !== 0) {\n  \t\t\t\t\t\t\t\tif (pointer - countDelete - countInsert > 0 && diffs[pointer - countDelete - countInsert - 1][0] === DIFF_EQUAL) {\n  \t\t\t\t\t\t\t\t\tdiffs[pointer - countDelete - countInsert - 1][1] += textInsert.substring(0, commonlength);\n  \t\t\t\t\t\t\t\t} else {\n  \t\t\t\t\t\t\t\t\tdiffs.splice(0, 0, [DIFF_EQUAL, textInsert.substring(0, commonlength)]);\n  \t\t\t\t\t\t\t\t\tpointer++;\n  \t\t\t\t\t\t\t\t}\n  \t\t\t\t\t\t\t\ttextInsert = textInsert.substring(commonlength);\n  \t\t\t\t\t\t\t\ttextDelete = textDelete.substring(commonlength);\n  \t\t\t\t\t\t\t}\n\n  \t\t\t\t\t\t\t// Factor out any common suffixies.\n  \t\t\t\t\t\t\tcommonlength = this.diffCommonSuffix(textInsert, textDelete);\n  \t\t\t\t\t\t\tif (commonlength !== 0) {\n  \t\t\t\t\t\t\t\tdiffs[pointer][1] = textInsert.substring(textInsert.length - commonlength) + diffs[pointer][1];\n  \t\t\t\t\t\t\t\ttextInsert = textInsert.substring(0, textInsert.length - commonlength);\n  \t\t\t\t\t\t\t\ttextDelete = textDelete.substring(0, textDelete.length - commonlength);\n  \t\t\t\t\t\t\t}\n  \t\t\t\t\t\t}\n\n  \t\t\t\t\t\t// Delete the offending records and add the merged ones.\n  \t\t\t\t\t\tif (countDelete === 0) {\n  \t\t\t\t\t\t\tdiffs.splice(pointer - countInsert, countDelete + countInsert, [DIFF_INSERT, textInsert]);\n  \t\t\t\t\t\t} else if (countInsert === 0) {\n  \t\t\t\t\t\t\tdiffs.splice(pointer - countDelete, countDelete + countInsert, [DIFF_DELETE, textDelete]);\n  \t\t\t\t\t\t} else {\n  \t\t\t\t\t\t\tdiffs.splice(pointer - countDelete - countInsert, countDelete + countInsert, [DIFF_DELETE, textDelete], [DIFF_INSERT, textInsert]);\n  \t\t\t\t\t\t}\n  \t\t\t\t\t\tpointer = pointer - countDelete - countInsert + (countDelete ? 1 : 0) + (countInsert ? 1 : 0) + 1;\n  \t\t\t\t\t} else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n\n  \t\t\t\t\t\t// Merge this equality with the previous one.\n  \t\t\t\t\t\tdiffs[pointer - 1][1] += diffs[pointer][1];\n  \t\t\t\t\t\tdiffs.splice(pointer, 1);\n  \t\t\t\t\t} else {\n  \t\t\t\t\t\tpointer++;\n  \t\t\t\t\t}\n  \t\t\t\t\tcountInsert = 0;\n  \t\t\t\t\tcountDelete = 0;\n  \t\t\t\t\ttextDelete = \"\";\n  \t\t\t\t\ttextInsert = \"\";\n  \t\t\t\t\tbreak;\n  \t\t\t}\n  \t\t}\n  \t\tif (diffs[diffs.length - 1][1] === \"\") {\n  \t\t\tdiffs.pop(); // Remove the dummy entry at the end.\n  \t\t}\n\n  \t\t// Second pass: look for single edits surrounded on both sides by equalities\n  \t\t// which can be shifted sideways to eliminate an equality.\n  \t\t// e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  \t\tchanges = false;\n  \t\tpointer = 1;\n\n  \t\t// Intentionally ignore the first and last element (don't need checking).\n  \t\twhile (pointer < diffs.length - 1) {\n  \t\t\tif (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n\n  \t\t\t\tdiffPointer = diffs[pointer][1];\n  \t\t\t\tposition = diffPointer.substring(diffPointer.length - diffs[pointer - 1][1].length);\n\n  \t\t\t\t// This is a single edit surrounded by equalities.\n  \t\t\t\tif (position === diffs[pointer - 1][1]) {\n\n  \t\t\t\t\t// Shift the edit over the previous equality.\n  \t\t\t\t\tdiffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);\n  \t\t\t\t\tdiffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n  \t\t\t\t\tdiffs.splice(pointer - 1, 1);\n  \t\t\t\t\tchanges = true;\n  \t\t\t\t} else if (diffPointer.substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1]) {\n\n  \t\t\t\t\t// Shift the edit over the next equality.\n  \t\t\t\t\tdiffs[pointer - 1][1] += diffs[pointer + 1][1];\n  \t\t\t\t\tdiffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n  \t\t\t\t\tdiffs.splice(pointer + 1, 1);\n  \t\t\t\t\tchanges = true;\n  \t\t\t\t}\n  \t\t\t}\n  \t\t\tpointer++;\n  \t\t}\n\n  \t\t// If shifts were made, the diff needs reordering and another shift sweep.\n  \t\tif (changes) {\n  \t\t\tthis.diffCleanupMerge(diffs);\n  \t\t}\n  \t};\n\n  \treturn function (o, n) {\n  \t\tvar diff, output, text;\n  \t\tdiff = new DiffMatchPatch();\n  \t\toutput = diff.DiffMain(o, n);\n  \t\tdiff.diffCleanupEfficiency(output);\n  \t\ttext = diff.diffPrettyHtml(output);\n\n  \t\treturn text;\n  \t};\n  }();\n\n}((function() { return this; }())));\n"
  },
  {
    "path": "test/qunit-assert-close.js",
    "content": "(function(factory) {\n\n  // NOTE:\n  // All techniques except for the \"browser globals\" fallback will extend the\n  // provided QUnit object but return the isolated API methods\n\n  // For AMD: Register as an anonymous AMD module with a named dependency on \"qunit\".\n  if (typeof define === \"function\" && define.amd) {\n    define([\"qunit\"], factory);\n  }\n  // For Node.js\n  else if (typeof module !== \"undefined\" && module && module.exports && typeof require === \"function\") {\n    module.exports = factory(require(\"qunitjs\"));\n  }\n  // For CommonJS with `exports`, but without `module.exports`, like Rhino\n  else if (typeof exports !== \"undefined\" && exports && typeof require === \"function\") {\n    var qunit = require(\"qunitjs\");\n    qunit.extend(exports, factory(qunit));\n  }\n  // For browser globals\n  else {\n    factory(QUnit);\n  }\n\n}(function(QUnit) {\n\n  /**\n   * Find an appropriate `Assert` context to `push` results to.\n   * @param * context - An unknown context, possibly `Assert`, `Test`, or neither\n   * @private\n   */\n  function _getPushContext(context) {\n    var pushContext;\n\n    if (context && typeof context.push === \"function\") {\n      // `context` is an `Assert` context\n      pushContext = context;\n    }\n    else if (context && context.assert && typeof context.assert.push === \"function\") {\n      // `context` is a `Test` context\n      pushContext = context.assert;\n    }\n    else if (\n      QUnit && QUnit.config && QUnit.config.current && QUnit.config.current.assert &&\n      typeof QUnit.config.current.assert.push === \"function\"\n    ) {\n      // `context` is an unknown context but we can find the `Assert` context via QUnit\n      pushContext = QUnit.config.current.assert;\n    }\n    else if (QUnit && typeof QUnit.push === \"function\") {\n      pushContext = QUnit.push;\n    }\n    else {\n      throw new Error(\"Could not find the QUnit `Assert` context to push results\");\n    }\n\n    return pushContext;\n  }\n\n  /**\n   * Checks that the first two arguments are equal, or are numbers close enough to be considered equal\n   * based on a specified maximum allowable difference.\n   *\n   * @example assert.close(3.141, Math.PI, 0.001);\n   *\n   * @param Number actual\n   * @param Number expected\n   * @param Number maxDifference (the maximum inclusive difference allowed between the actual and expected numbers)\n   * @param String message (optional)\n   */\n  function close(actual, expected, maxDifference, message) {\n    var actualDiff = (actual === expected) ? 0 : Math.abs(actual - expected),\n        result = actualDiff <= maxDifference,\n        pushContext = _getPushContext(this);\n\n    message = message || (actual + \" should be within \" + maxDifference + \" (inclusive) of \" + expected + (result ? \"\" : \". Actual: \" + actualDiff));\n\n\tif (pushContext.pushResult) {\n\t\tpushContext.pushResult({\n\t\t\t\"result\": result,\n\t\t\t\"actual\": actual,\n\t\t\t\"expected\": expected,\n\t\t\t\"message\": message\n\t\t});\n\t} else {\n\t\tpushContext.push(result, actual, expected, message);\n\t}\n  }\n\n\n  /**\n   * Checks that the first two arguments are equal, or are numbers close enough to be considered equal\n   * based on a specified maximum allowable difference percentage.\n   *\n   * @example assert.close.percent(155, 150, 3.4);  // Difference is ~3.33%\n   *\n   * @param Number actual\n   * @param Number expected\n   * @param Number maxPercentDifference (the maximum inclusive difference percentage allowed between the actual and expected numbers)\n   * @param String message (optional)\n   */\n  close.percent = function closePercent(actual, expected, maxPercentDifference, message) {\n    var actualDiff, result,\n        pushContext = _getPushContext(this);\n\n    if (actual === expected) {\n      actualDiff = 0;\n      result = actualDiff <= maxPercentDifference;\n    }\n    else if (actual !== 0 && expected !== 0 && expected !== Infinity && expected !== -Infinity) {\n      actualDiff = Math.abs(100 * (actual - expected) / expected);\n      result = actualDiff <= maxPercentDifference;\n    }\n    else {\n      // Dividing by zero (0)!  Should return `false` unless the max percentage was `Infinity`\n      actualDiff = Infinity;\n      result = maxPercentDifference === Infinity;\n    }\n    message = message || (actual + \" should be within \" + maxPercentDifference + \"% (inclusive) of \" + expected + (result ? \"\" : \". Actual: \" + actualDiff + \"%\"));\n\n\tif (pushContext.pushResult) {\n\t\tpushContext.pushResult({\n\t\t\t\"result\": result,\n\t\t\t\"actual\": actual,\n\t\t\t\"expected\": expected,\n\t\t\t\"message\": message\n\t\t});\n\t} else {\n\t\tpushContext.push(result, actual, expected, message);\n\t}\n  };\n\n\n  /**\n   * Checks that the first two arguments are numbers with differences greater than the specified\n   * minimum difference.\n   *\n   * @example assert.notClose(3.1, Math.PI, 0.001);\n   *\n   * @param Number actual\n   * @param Number expected\n   * @param Number minDifference (the minimum exclusive difference allowed between the actual and expected numbers)\n   * @param String message (optional)\n   */\n  function notClose(actual, expected, minDifference, message) {\n    var actualDiff = Math.abs(actual - expected),\n        result = actualDiff > minDifference,\n        pushContext = _getPushContext(this);\n\n    message = message || (actual + \" should not be within \" + minDifference + \" (exclusive) of \" + expected + (result ? \"\" : \". Actual: \" + actualDiff));\n\n\tif (pushContext.pushResult) {\n\t\tpushContext.pushResult({\n\t\t\t\"result\": result,\n\t\t\t\"actual\": actual,\n\t\t\t\"expected\": expected,\n\t\t\t\"message\": message\n\t\t});\n\t} else {\n\t\tpushContext.push(result, actual, expected, message);\n\t}\n  }\n\n\n  /**\n   * Checks that the first two arguments are numbers with differences greater than the specified\n   * minimum difference percentage.\n   *\n   * @example assert.notClose.percent(156, 150, 3.5);  // Difference is 4.0%\n   *\n   * @param Number actual\n   * @param Number expected\n   * @param Number minPercentDifference (the minimum exclusive difference percentage allowed between the actual and expected numbers)\n   * @param String message (optional)\n   */\n  notClose.percent = function notClosePercent(actual, expected, minPercentDifference, message) {\n    var actualDiff, result,\n        pushContext = _getPushContext(this);\n\n    if (actual === expected) {\n      actualDiff = 0;\n      result = actualDiff > minPercentDifference;\n    }\n    else if (actual !== 0 && expected !== 0 && expected !== Infinity && expected !== -Infinity) {\n      actualDiff = Math.abs(100 * (actual - expected) / expected);\n      result = actualDiff > minPercentDifference;\n    }\n    else {\n      // Dividing by zero (0)!  Should only return `true` if the min percentage was `Infinity`\n      actualDiff = Infinity;\n      result = minPercentDifference !== Infinity;\n    }\n    message = message || (actual + \" should not be within \" + minPercentDifference + \"% (exclusive) of \" + expected + (result ? \"\" : \". Actual: \" + actualDiff + \"%\"));\n\n\tif (pushContext.pushResult) {\n\t\tpushContext.pushResult({\n\t\t\t\"result\": result,\n\t\t\t\"actual\": actual,\n\t\t\t\"expected\": expected,\n\t\t\t\"message\": message\n\t\t});\n\t} else {\n\t\tpushContext.push(result, actual, expected, message);\n\t}\n  };\n\n\n  var api = {\n    close: close,\n    notClose: notClose,\n    closePercent: close.percent,\n    notClosePercent: notClose.percent\n  };\n\n  QUnit.extend(QUnit.assert, api);\n\n  return api;\n}));\n"
  },
  {
    "path": "test/src/1_Core/Arguments.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity, {VelocityOptions, VelocityResult} from \"velocity-animate\";\nimport {Data, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Arguments\", (assert) => {\n\tconst testComplete = () => {\n\t\t// Do nothing\n\t},\n\t\ttestDuration = 1000,\n\t\ttestEasing = \"easeInSine\",\n\t\ttestOptions: VelocityOptions = {\n\t\t\tduration: 123,\n\t\t\teasing: testEasing,\n\t\t\tcomplete: testComplete,\n\t\t};\n\tlet result: VelocityResult;\n\n\tassert.expect(18);\n\n\t/****************\n\t Overloading\n\t ****************/\n\n\tresult = Velocity(getTarget(), defaultProperties);\n\tassert.ok(result.length,\n\t\t\"Overload variation #1a: Velocity(ELEMENT, {properties})\");\n\tassert.ok(result.velocity.animations.length,\n\t\t\"Overload variation #1b: Velocity(element, {PROPERTIES})\");\n\n\tresult = Velocity(getTarget(), defaultProperties, testDuration);\n\tassert.equal(result.velocity.animations[0].options.duration, testDuration,\n\t\t\"Overload variation #2a: Velocity(element, {properties}, DURATION<number>)\");\n\tresult = Velocity(getTarget(), defaultProperties, \"slow\");\n\tassert.equal(result.velocity.animations[0].options.duration, 600,\n\t\t\"Overload variation #2b: Velocity(element, {properties}, DURATION<slow>)\");\n\tresult = Velocity(getTarget(), defaultProperties, \"normal\");\n\tassert.equal(result.velocity.animations[0].options.duration, 400,\n\t\t\"Overload variation #2c: Velocity(element, {properties}, DURATION<normal>)\");\n\tresult = Velocity(getTarget(), defaultProperties, \"fast\");\n\tassert.equal(result.velocity.animations[0].options.duration, 200,\n\t\t\"Overload variation #2d: Velocity(element, {properties}, DURATION<fast>)\");\n\n\tresult = Velocity(getTarget(), defaultProperties, testEasing);\n\tassert.equal(typeof result.velocity.animations[0].options.easing, \"function\",\n\t\t\"Overload variation #3: Velocity(element, {properties}, EASING)\");\n\n\tresult = Velocity(getTarget(), defaultProperties, testComplete);\n\tassert.equal(typeof result.velocity.animations[0].options.complete, \"function\",\n\t\t\"Overload variation #4: Velocity(element, {properties}, COMPLETE)\");\n\n\tresult = Velocity(getTarget(), defaultProperties, testDuration, [0.42, 0, 0.58, 1]);\n\tassert.equal(result.velocity.animations[0].options.duration, testDuration,\n\t\t\"Overload variation #5a: Velocity(element, {properties}, DURATION, easing)\");\n\tassert.equal(result.velocity.animations[0].options.easing(0.2, 0, 1), 0.0816598562658975,\n\t\t\"Overload variation #5b: Velocity(element, {properties}, duration, EASING)\");\n\n\tresult = Velocity(getTarget(), defaultProperties, testDuration, testComplete);\n\tassert.equal(result.velocity.animations[0].options.duration, testDuration,\n\t\t\"Overload variation #6a: Velocity(element, {properties}, DURATION, complete)\");\n\tassert.equal(result.velocity.animations[0].options.complete, testComplete,\n\t\t\"Overload variation #6b: Velocity(element, {properties}, duration, COMPLETE)\");\n\n\tresult = Velocity(getTarget(), defaultProperties, testDuration, testEasing, testComplete);\n\tassert.equal(result.velocity.animations[0].options.duration, testDuration,\n\t\t\"Overload variation #7a: Velocity(element, {properties}, DURATION, easing, complete)\");\n\tassert.equal(typeof result.velocity.animations[0].options.easing, \"function\",\n\t\t\"Overload variation #7b: Velocity(element, {properties}, duration, EASING, complete)\");\n\tassert.equal(result.velocity.animations[0].options.complete, testComplete,\n\t\t\"Overload variation #7c: Velocity(element, {properties}, duration, easing, COMPLETE)\");\n\n\tresult = Velocity(getTarget(), defaultProperties, testOptions);\n\tassert.equal(result.velocity.animations[0].options.duration, testOptions.duration,\n\t\t\"Overload variation #8: Velocity(element, {properties}, {OPTIONS})\");\n\n\tVelocity({elements: [getTarget()], properties: defaultProperties, options: testOptions});\n\tassert.equal(result.velocity.animations[0].options.duration, testOptions.duration,\n\t\t\"Overload variation #9: Velocity({elements:[elements], properties:{properties}, options:{OPTIONS})\");\n\n\tVelocity({elements: [getTarget()], properties: \"stop\", options: testOptions});\n\tassert.equal(result.velocity.animations[0].options.duration, testOptions.duration,\n\t\t\"Overload variation #10: Velocity({elements:[elements], properties:\\\"ACTION\\\", options:{OPTIONS})\");\n\n\t//\tvar $target12 = getTarget();\n\t//\tVelocity($target12, {opacity: [0.75, \"spring\", 0.25]}, testDuration);\n\t//\tassert.equal(Data($target12).style.opacity.startValue, 0.25, \"Overload variation #10a.\");\n\t//\tassert.equal(Data($target12).style.opacity.easing, \"spring\", \"Overload variation #10b.\");\n\t//\tassert.equal(Data($target12).style.opacity.endValue, 0.75, \"Overload variation #10c.\");\n\n\t//\tvar $target13 = getTarget();\n\t//\tVelocity($target13, {opacity: [0.75, 0.25]}, testDuration);\n\t//\tassert.equal(Data($target13).style.opacity.startValue, 0.25, \"Overload variation #11a.\");\n\t//\tassert.equal(Data($target13).style.opacity.endValue, 0.75, \"Overload variation #11b.\");\n\n\t//\tvar $target14 = getTarget();\n\t//\tVelocity($target14, {opacity: [0.75, \"spring\"]}, testDuration);\n\t//\tassert.equal(Data($target14).style.opacity.endValue, 0.75, \"Overload variation #12a.\");\n\t//\tassert.equal(Data($target14).style.opacity.easing, \"spring\", \"Overload variation #12b.\");\n\n\t//\tif ($) {\n\t//\t\tvar $target17 = getTarget();\n\t//\t\t$($target17).velocity(defaultProperties, testOptions);\n\t//\t\tassert.deepEqual(Data($target17).opts, testOptions, \"$.fn.: Utility function variation #1: options object.\");\n\t//\n\t//\t\tvar $target18 = getTarget();\n\t//\t\t$($target18).velocity({properties: defaultProperties, options: testOptions});\n\t//\t\tassert.deepEqual(Data($target18).opts, testOptions, \"$.fn.: Utility function variation #2: single object.\");\n\t//\n\t//\t\tvar $target19 = getTarget();\n\t//\t\t$($target19).velocity(defaultProperties, testDuration, testEasing, testComplete);\n\t//\t\tassert.equal(Data($target19).opts.duration, testDuration, \"$.fn.: Utility function variation #2a.\");\n\t//\t\tassert.equal(Data($target19).opts.easing, testEasing, \"$.fn.: Utility function variation #2b.\");\n\t//\t\tassert.equal(Data($target19).opts.complete, testComplete, \"$.fn.: Utility function variation #2c.\");\n\t//\n\t//\t\tvar $target20 = getTarget();\n\t//\t\tassert.equal($($target20).length, $($target20).velocity(defaultProperties, testDuration, testEasing, testComplete)\n\t//\t\t.velocity(defaultProperties, testDuration, testEasing, testComplete).length, \"$.fn.: Elements passed back to the call stack.\");\n\t//\t\t// TODO: Should check in a better way - but the prototype chain is now extended with a Promise so a standard (non-length) comparison *will* fail\n\t//\t}\n});\n"
  },
  {
    "path": "test/src/1_Core/End Value Caching.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {Data, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"End Value Caching\", (assert) => {\n\tconst done = assert.async(2),\n\t\tnewProperties = {height: \"50px\", width: \"250px\"};\n\n\tassert.expect(4);\n\n\t/* Called after the last call is complete (stale). Ensure that the newly-set (via $.css()) properties are used. */\n\tVelocity(getTarget(newProperties), defaultProperties)\n\t\t.then((elements) => {\n\t\t\tassert.equal(Data(elements[0]).cache.width, defaultProperties.width, \"Stale end value #1 wasn't pulled.\");\n\t\t\tassert.equal(Data(elements[0]).cache.height, defaultProperties.height, \"Stale end value #2 wasn't pulled.\");\n\n\t\t\tdone();\n\t\t});\n\n\tVelocity(getTarget(), defaultProperties)\n\t\t.velocity(newProperties)\n\t\t.then((elements) => {\n\t\t\t/* Chained onto a previous call (fresh). */\n\t\t\tassert.equal(Data(elements[0]).cache.width, newProperties.width, \"Chained end value #1 was pulled.\");\n\t\t\tassert.equal(Data(elements[0]).cache.height, newProperties.height, \"Chained end value #2 was pulled.\");\n\n\t\t\tdone();\n\t\t});\n});\n"
  },
  {
    "path": "test/src/1_Core/End Value Setting.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {Data, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"End Value Setting\", (assert) => {\n\tconst done = assert.async(1);\n\n\t/* Standard properties. */\n\tVelocity(getTarget(), defaultProperties)\n\t\t.then((elements) => {\n\t\t\tassert.equal(Velocity(elements[0], \"style\", \"width\"), defaultProperties.width, \"Standard end value #1 was set.\");\n\t\t\tassert.equal(Velocity(elements[0], \"style\", \"opacity\"), defaultProperties.opacity, \"Standard end value #2 was set.\");\n\n\t\t\tdone();\n\t\t});\n});\n"
  },
  {
    "path": "test/src/1_Core/Start Value Calculation.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {$qunitStage, applyStartValues, Data, defaultProperties, defaultStyles, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.todo(\"Start Value Calculation\", (assert) => {\n\tconst testStartValues = {\n\t\tpaddingLeft: \"10px\",\n\t\theight: \"100px\",\n\t\tpaddingRight: \"50%\",\n\t\tmarginLeft: \"100px\",\n\t\tmarginBottom: \"33%\",\n\t\tmarginTop: \"100px\",\n\t\tlineHeight: \"30px\",\n\t\twordSpacing: \"40px\",\n\t\tbackgroundColor: \"rgb(123,0,0)\",\n\t};\n\n\t/* Properties not previously defined on the element. */\n\tconst $target1 = getTarget();\n\n\tVelocity($target1, testStartValues);\n\tassert.equal(Data($target1).cache.paddingLeft, testStartValues.paddingLeft, \"Undefined standard start value was calculated.\");\n\tassert.equal(Data($target1).cache.backgroundColor, testStartValues.backgroundColor, \"Undefined start value hook was calculated.\");\n\n\t/* Properties previously defined on the element. */\n\tconst $target2 = getTarget();\n\n\tVelocity($target2, defaultProperties);\n\tassert.equal(Data($target2).cache.width, parseFloat(defaultStyles.width as any), \"Defined start value #1 was calculated.\");\n\tassert.equal(Data($target2).cache.opacity, parseFloat(defaultStyles.opacity as any), \"Defined start value #2 was calculated.\");\n\tassert.equal(Data($target2).cache.color, parseFloat(defaultStyles.colorGreen as any), \"Defined hooked start value was calculated.\");\n\n\t/* Properties that shouldn't cause start values to be unit-converted. */\n\tconst testPropertiesEndNoConvert = {paddingLeft: \"20px\", height: \"40px\", paddingRight: \"75%\"},\n\t\t$target3 = getTarget();\n\n\tapplyStartValues($target3, testStartValues);\n\tVelocity($target3, testPropertiesEndNoConvert);\n\tassert.equal(Data($target3).cache.paddingLeft, parseFloat(testStartValues.paddingLeft), \"Start value #1 wasn't unit converted.\");\n\tassert.equal(Data($target3).cache.height, parseFloat(testStartValues.height), \"Start value #2 wasn't unit converted.\");\n\t//\t\t\tassert.deepEqual(Data($target3).cache.paddingRight.startValue, [Math.floor((parentWidth * parseFloat(testStartValues.paddingRight)) / 100), 0],\n\t//\t\t\t \"Start value #3 was pattern matched.\");\n\n\t/* Properties that should cause start values to be unit-converted. */\n\tconst testPropertiesEndConvert = {paddingLeft: \"20%\", height: \"40%\", lineHeight: \"0.5em\", wordSpacing: \"2rem\", marginLeft: \"10vw\", marginTop: \"5vh\", marginBottom: \"100px\"},\n\t\tparentWidth = $qunitStage.clientWidth,\n\t\tparentHeight = $qunitStage.clientHeight,\n\t\tparentFontSize = Velocity($qunitStage, \"style\", \"fontSize\"),\n\t\tremSize = parseFloat(Velocity(document.body, \"style\", \"fontSize\") as any),\n\t\t$target4 = getTarget();\n\n\tapplyStartValues($target4, testStartValues);\n\tVelocity($target4, testPropertiesEndConvert);\n\n\t/* Long decimal results can be returned after unit conversion, and Velocity's code and the code here can differ in precision. So, we round floor values before comparison. */\n\t//\t\t\tassert.deepEqual(Data($target4).cache.paddingLeft.startValue, [parseFloat(testStartValues.paddingLeft), 0],\n\t//\t\t\t \"Horizontal property converted to %.\");\n\tassert.equal(parseInt(Data($target4).cache.height, 10), Math.floor((parseFloat(testStartValues.height) / parentHeight) * 100), \"Vertical property converted to %.\");\n\t//\t\t\tassert.equal(Data($target4).cache.lineHeight.startValue, Math.floor(parseFloat(testStartValues.lineHeight) / parseFloat(parentFontSize)),\n\t//\t\t\t \"Property converted to em.\");\n\t//\t\t\tassert.equal(Data($target4).cache.wordSpacing.startValue, Math.floor(parseFloat(testStartValues.wordSpacing) / parseFloat(remSize)),\n\t//\t\t\t \"Property converted to rem.\");\n\tassert.equal(parseInt(Data($target4).cache.marginBottom, 10), parseFloat(testStartValues.marginBottom) / 100 * parseFloat($target4.parentElement.offsetWidth as any),\n\t\t\"Property converted to px.\");\n\n\t//\t\t\tif (!(IE<=8) && !isAndroid) {\n\t//\t\t\t\tassert.equal(Data($target4).cache.marginLeft.startValue, Math.floor(parseFloat(testStartValues.marginLeft) / window.innerWidth * 100),\n\t//\t\t\t\t \"Horizontal property converted to vw.\");\n\t//\t\t\t\tassert.equal(Data($target4).cache.marginTop.startValue, Math.floor(parseFloat(testStartValues.marginTop) / window.innerHeight * 100),\n\t//\t\t\t\t \"Vertical property converted to vh.\");\n\t//\t\t\t}\n\n\t// TODO: Tests for auto-parameters as the units are no longer converted.\n\n\t/* jQuery TRBL deferring. */\n\tconst testPropertiesTRBL = {left: \"1000px\"},\n\t\t$TRBLContainer = document.createElement(\"div\");\n\n\t$TRBLContainer.setAttribute(\"id\", \"TRBLContainer\");\n\t$TRBLContainer.style.marginLeft = testPropertiesTRBL.left;\n\t$TRBLContainer.style.width = \"100px\";\n\t$TRBLContainer.style.height = \"100px\";\n\tdocument.body.appendChild($TRBLContainer);\n\n\tconst $target5 = getTarget();\n\n\t$target5.style.position = \"absolute\";\n\t$TRBLContainer.appendChild($target5);\n\tVelocity($target5, testPropertiesTRBL);\n\n\tassert.equal(parseInt(Data($target5).cache.left, 10),\n\t\tMath.round(parseFloat(testPropertiesTRBL.left) + parseFloat(Velocity(document.body, \"style\", \"marginLeft\") as any)),\n\t\t\"TRBL value was deferred to jQuery.\");\n});\n"
  },
  {
    "path": "test/src/1_Core/Unit Calculation.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, getPropertyValue, getTarget, sleep} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Unit Calculation\", (assert) => {\n\t// TODO: Add code and tests for operators - probably using calc() internally\n\t//\t/* Standard properties with operators. */\n\t//\tvar testIncrementWidth = \"5px\",\n\t//\t\t\ttestDecrementOpacity = 0.25,\n\t//\t\t\ttestMultiplyMarginBottom = 4,\n\t//\t\t\ttestDivideHeight = 2;\n\t//\n\t//\tvar $target2 = getTarget();\n\t//\tVelocity($target2, {width: \"+=\" + testIncrementWidth, opacity: \"-=\" + testDecrementOpacity, marginBottom: \"*=\" + testMultiplyMarginBottom, height: \"/=\" + testDivideHeight});\n\t//\tsetTimeout(function() {\n\t//\n\t//\t\tassert.equal(Data($target2).style.width.endValue, defaultStyles.width + parseFloat(testIncrementWidth), \"Incremented end value was calculated.\");\n\t//\t\tassert.equal(Data($target2).style.opacity.endValue, defaultStyles.opacity - testDecrementOpacity, \"Decremented end value was calculated.\");\n\t//\t\tassert.equal(Data($target2).style.marginBottom.endValue, defaultStyles.marginBottom * testMultiplyMarginBottom, \"Multiplied end value was calculated.\");\n\t//\t\tassert.equal(Data($target2).style.height.endValue, defaultStyles.height / testDivideHeight, \"Divided end value was calculated.\");\n\t//\n\t//\t\tdone();\n\t//\t}, asyncCheckDuration);\n\n\tasyncTests(assert, 2, async (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, {left: \"500px\"}, {duration: 10});\n\t\tawait sleep(100);\n\t\tassert.equal(getPropertyValue($target, \"left\"), \"500px\", \"Finished animated value with given pixels should be the same.\");\n\t\tVelocity($target, {left: \"0px\"}, {duration: 10});\n\t\tawait sleep(100);\n\t\tassert.equal(getPropertyValue($target, \"left\"), \"0px\", \"Finished animated value with 0px should be the same.\");\n\n\t\tdone();\n\t});\n\n\t//\tasync(assert, 1, async (done) => {\n\t//\t\tconst $target = getTarget();\n\t//\n\t//\t\tVelocity($target, {left: \"500px\"}, {duration: 10});\n\t//\t\tawait sleep(100);\n\t//\t\tVelocity($target, {left: \"0\"}, {duration: 10});\n\t//\t\tawait sleep(100);\n\t//\t\tassert.equal(getPropertyValue($target, \"left\"), \"0px\", \"Finished animated value without giving px, but only number as a string should be the same.\");\n\t//\n\t//\t\tdone();\n\t//\t});\n\n\tasyncTests(assert, 1, async (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, {left: \"500px\"}, {duration: 10});\n\t\tawait sleep(100);\n\t\tVelocity($target, {left: 0}, {duration: 10});\n\t\tawait sleep(1000);\n\t\tassert.equal(getPropertyValue($target, \"left\"), \"0px\", \"Finished animated value given as number 0 should be the same as 0px.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 2, async (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, {left: 500}, {duration: 10});\n\t\tawait sleep(100);\n\t\tassert.equal(getPropertyValue($target, \"left\"), \"500px\", \"Finished animated value with given pixels should be the same.\");\n\t\tVelocity($target, {left: 0}, {duration: 10});\n\t\tawait sleep(100);\n\t\tassert.equal(getPropertyValue($target, \"left\"), \"0px\", \"Omitted pixels (px) when given animation should run properly.\");\n\n\t\tdone();\n\t});\n});\n"
  },
  {
    "path": "test/src/1_Core/_module.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nQUnit.module(\"Core\");\n"
  },
  {
    "path": "test/src/2_Option/Option Begin.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncCheckDuration, asyncTests, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Begin\", (assert) => {\n\tasyncTests(assert, 1, (done) => {\n\t\tconst $targetSet = [getTarget(), getTarget()];\n\n\t\tVelocity($targetSet, defaultProperties, {\n\t\t\tduration: asyncCheckDuration,\n\t\t\tbegin(elements) {\n\t\t\t\tassert.deepEqual(elements, $targetSet, \"Elements passed into callback.\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Complete.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncCheckDuration, asyncTests, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Complete\", (assert) => {\n\tasyncTests(assert, 1, (done) => {\n\t\tconst $targetSet = [getTarget(), getTarget()];\n\n\t\tVelocity($targetSet, defaultProperties, {\n\t\t\tduration: asyncCheckDuration,\n\t\t\tcomplete(elements) {\n\t\t\t\tassert.deepEqual(elements, $targetSet, \"Elements passed into callback.\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Delay.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, defaultOptions, defaultProperties, getNow, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Delay\", (assert) => {\n\tconst testDelay = 250;\n\n\tasyncTests(assert, 1, (done) => {\n\t\tconst start = getNow();\n\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration: defaultOptions.duration,\n\t\t\tdelay: testDelay,\n\t\t\tbegin(elements, activeCall) {\n\t\t\t\tassert.close(getNow() - start, testDelay, 32, \"Delayed calls start after the correct delay.\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tconst start = getNow();\n\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration: defaultOptions.duration,\n\t\t\tdelay: testDelay,\n\t\t})\n\t\t\t.velocity(defaultProperties, {\n\t\t\t\tduration: defaultOptions.duration,\n\t\t\t\tdelay: testDelay,\n\t\t\t\tbegin(elements, activeCall) {\n\t\t\t\t\tassert.close(getNow() - start, (testDelay * 2) + (defaultOptions.duration as number), 32, \"Chained delays start after the correct delay.\");\n\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Duration.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, defaultOptions, defaultProperties, getNow, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Duration\", (assert) => {\n\tconst testDuration = Velocity.defaults.duration as number;\n\n\tasyncTests(assert, 1, (done) => {\n\t\tconst start = getNow();\n\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration: testDuration,\n\t\t\tcomplete(elements, activeCall) {\n\t\t\t\tconst time = getNow() - start;\n\n\t\t\t\tassert.close(time, testDuration, 32, `Calls run for the correct duration (~${Math.floor(time)}ms / ${testDuration}ms).`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tconst start = getNow();\n\n\t\tVelocity(getTarget(), {width: [\"200px\", \"500px\"]}, {\n\t\t\tduration: testDuration,\n\t\t})\n\t\t\t.velocity({width: [\"500px\", \"200px\"]}, {\n\t\t\t\tduration: testDuration,\n\t\t\t\tcomplete(elements, activeCall) {\n\t\t\t\t\tconst time = getNow() - start;\n\n\t\t\t\t\tassert.close(getNow() - start, testDuration * 2, 32, `Chained durations run for the correct duration (~${Math.floor(time)}ms / ${testDuration * 2}ms).`);\n\n\t\t\t\t\tdone();\n\t\t\t\t},\n\t\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tconst start = getNow();\n\n\t\tVelocity(getTarget(), {width: [\"200px\", \"500px\"]})\n\t\t\t.velocity({width: [\"500px\", \"200px\"]})\n\t\t\t.then(() => {\n\t\t\t\tconst time = getNow() - start;\n\n\t\t\t\tassert.close(getNow() - start, testDuration * 2, 32, `Chained durations with defaults run for the correct duration (~${Math.floor(time)}ms / ${testDuration * 2}ms).`);\n\n\t\t\t\tdone();\n\t\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Easing.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity, {VelocityResult} from \"velocity-animate\";\nimport {asyncCheckDuration, asyncTests, defaultProperties, getTarget, once} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Easing\", (assert) => {\n\tasyncTests(assert, 1, (done) => {\n\t\tlet success = false;\n\n\t\ttry {\n\t\t\tsuccess = true;\n\t\t\tVelocity(getTarget(), defaultProperties, {easing: \"fake\"});\n\t\t} catch (e) {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert.ok(success, \"Fake easing string didn't throw error.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tlet success = false;\n\n\t\ttry {\n\t\t\tsuccess = true;\n\t\t\tVelocity(getTarget(), defaultProperties, {easing: [\"a\" as any, 0.5, 0.5, 0.5]});\n\t\t\tVelocity(getTarget(), defaultProperties, {easing: [0.5, 0.5, 0.5]});\n\t\t} catch (e) {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert.ok(success, \"Invalid bezier curve didn't throw error.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\t// TODO: Use a \"tween\" action?\n\t\t/* Ensure that a properly-formatted bezier curve array returns a bezier function. */\n\t\tconst easingBezierArray = [0.27, -0.65, 0.78, 0.19],\n\t\t\teasingBezierTestPercent = 0.25,\n\t\t\teasingBezierTestValue = -0.23;\n\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\teasing: easingBezierArray,\n\t\t\tbegin(elements, animation) {\n\t\t\t\tassert.close(animation.options.easing(easingBezierTestPercent, 0, 1), easingBezierTestValue, 0.005, \"Array converted into bezier function.\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\t/* Ensure that a properly-formatted spring RK4 array returns a bezier function. */\n\t\tconst easingSpringRK4Array = [250, 12],\n\t\t\teasingSpringRK4TestPercent = 0.25,\n\t\t\teasingSpringRK4TestValue = 0.928, // TODO: Check accuracy\n\t\t\teasingSpringRK4TestDuration = 992;\n\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration: 150,\n\t\t\teasing: easingSpringRK4Array,\n\t\t\tbegin(elements, animation) {\n\t\t\t\tassert.close(animation.options.easing(easingSpringRK4TestPercent, 0, 1), easingSpringRK4TestValue, 10, \"Array with duration converted into springRK4 function.\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\t// TODO: Get this working in Velocity - so it can be tested\n\t//\tasync(assert, 1, (done) => {\n\t//\tVelocity(getTarget(), defaultProperties, {\n\t//\t\teasing: easingSpringRK4Array,\n\t//\t\tbegin(elements, animation) {\n\t//\t\t\tassert.equal(animation.duration, easingSpringRK4TestDuration, \"Array without duration converted into springRK4 duration.\");\n\t//\t\t\tdone();\n\t//\t\t}\n\t//\t});\n\t//\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\t/* Ensure that a properly-formatted step easing array returns a step function. */\n\t\tconst easingStepArray = [4],\n\t\t\teasingStepTestPercent = 0.35,\n\t\t\teasingStepTestValue = 0.25;\n\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\teasing: easingStepArray,\n\t\t\tbegin(elements, animation) {\n\t\t\t\tassert.close(animation.options.easing(easingStepTestPercent, 0, 1), easingStepTestValue, 0.05, \"Array converted into Step function.\");\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 3, (done) => {\n\t\tVelocity(getTarget(), {opacity: [0, \"during\", 1]}, {\n\t\t\tduration: asyncCheckDuration,\n\t\t\tbegin(elements) {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct begin value (easing:'during').\");\n\t\t\t},\n\t\t\tprogress: once((elements: VelocityResult) => {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 0, \"Correct progress value (easing:'during').\");\n\t\t\t}),\n\t\t\tcomplete(elements) {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct complete value (easing:'during').\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 3, (done) => {\n\t\tVelocity(getTarget(), {opacity: [0, \"at-start\", 1]}, {\n\t\t\tduration: asyncCheckDuration,\n\t\t\tbegin(elements) {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct begin value (easing:'at-start').\");\n\t\t\t},\n\t\t\tprogress: once((elements: VelocityResult) => {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 0, \"Correct progress value (easing:'at-start').\");\n\t\t\t}),\n\t\t\tcomplete(elements) {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 0, \"Correct complete value (easing:'at-start').\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 3, (done) => {\n\t\tVelocity(getTarget(), {opacity: [0, \"at-end\", 1]}, {\n\t\t\tduration: asyncCheckDuration,\n\t\t\tbegin(elements) {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct begin value (easing:'at-end').\");\n\t\t\t},\n\t\t\tprogress: once((elements: VelocityResult) => {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct progress value (easing:'at-end').\");\n\t\t\t}),\n\t\t\tcomplete(elements) {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"opacity\"), 0, \"Correct complete value (easing:'at-end').\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Fps Limit.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"FPS Limit\", async (assert) => {\n\tlet count: number;\n\tconst $target = getTarget(),\n\t\tframeRates = [5, 15, 30, 60],\n\t\ttestFrame = (frameRate) => {\n\t\t\tlet counter = 0;\n\n\t\t\tVelocity.defaults.fpsLimit = frameRate;\n\t\t\t// Test if the frame rate is assigned succesfully.\n\t\t\tassert.equal(frameRate, Velocity.defaults.fpsLimit, \"Setting global fps limit to \" + frameRate);\n\n\t\t\treturn Velocity($target, defaultProperties,\n\t\t\t\t{\n\t\t\t\t\tduration: 1000,\n\t\t\t\t\tprogress() {\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t.then(() => counter);\n\t\t};\n\n\tassert.expect(frameRates.length * 2);\n\t// Test if the limit is working for 60, 30, 15 and 5 fps.\n\tfor (const frameRate of frameRates) {\n\t\tassert.ok((count = await testFrame(frameRate)) <= frameRate + 1, `...counted ${count} frames (\\xB11 frame)`);\n\t}\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Loop.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, defaultProperties, getNow, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Loop\", (assert) => {\n\tasyncTests(assert, 4, (done) => {\n\t\tconst testOptions = {loop: 2, delay: 100, duration: 100},\n\t\t\tstart = getNow();\n\t\tlet begin = 0,\n\t\t\tcomplete = 0,\n\t\t\tloop = 0,\n\t\t\tlastPercentComplete = 2;\n\n\t\tVelocity(getTarget(), defaultProperties,\n\t\t\t{\n\t\t\t\tloop: testOptions.loop,\n\t\t\t\tdelay: testOptions.delay,\n\t\t\t\tduration: testOptions.duration,\n\t\t\t\tbegin() {\n\t\t\t\t\tbegin++;\n\t\t\t\t},\n\t\t\t\tprogress(elements, percentComplete) {\n\t\t\t\t\tif (lastPercentComplete > percentComplete) {\n\t\t\t\t\t\tloop++;\n\t\t\t\t\t}\n\t\t\t\t\tlastPercentComplete = percentComplete;\n\t\t\t\t},\n\t\t\t\tcomplete() {\n\t\t\t\t\tcomplete++;\n\t\t\t\t},\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tassert.equal(begin, 1, \"Begin callback only called once.\");\n\t\t\t\tassert.equal(loop, testOptions.loop * 2 - 1, \"Animation looped correct number of times (once each direction per loop).\");\n\t\t\t\tassert.close(getNow() - start, (testOptions.delay + testOptions.duration) * loop, 32, \"Looping with 'delay' has correct duration.\");\n\t\t\t\tassert.equal(complete, 1, \"Complete callback only called once.\");\n\n\t\t\t\tdone();\n\t\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Progress.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncCheckDuration, asyncTests, defaultProperties, getTarget, once} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Progress\", (assert) => {\n\tasyncTests(assert, 4, (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, defaultProperties, {\n\t\t\tduration: asyncCheckDuration,\n\t\t\tprogress: once(function(elements, percentComplete, msRemaining) { // tslint:disable-line:only-arrow-functions\n\t\t\t\tassert.deepEqual(elements, [$target], \"Elements passed into progress.\");\n\t\t\t\tassert.deepEqual(this, [$target], \"Elements passed into progress as this.\"); // tslint:disable-line:no-invalid-this\n\t\t\t\tassert.equal(percentComplete >= 0 && percentComplete <= 1, true, \"'percentComplete' passed into progress.\");\n\t\t\t\tassert.equal(msRemaining > asyncCheckDuration - 50, true, \"'msRemaining' passed into progress.\");\n\n\t\t\t\tdone();\n\t\t\t}),\n\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Queue.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {Data, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Queue\", (assert) => {\n\tconst done = assert.async(4),\n\t\ttestQueue = \"custom\",\n\t\t$target = getTarget(),\n\t\tignore = $target.velocity(\"style\", \"display\"), // Force data creation\n\t\tdata = Data($target);\n\tlet anim1: boolean,\n\t\tanim2: boolean,\n\t\tanim3: boolean;\n\n\tassert.expect(7);\n\n\tassert.ok(data.queueList[testQueue] === undefined, \"Custom queue is empty.\"); // Shouldn't exist\n\n\t$target.velocity(defaultProperties, {\n\t\tqueue: testQueue,\n\t\tbegin() {\n\t\t\tanim1 = true;\n\t\t},\n\t\tcomplete() {\n\t\t\tanim1 = false;\n\t\t\tassert.ok(!anim2, \"Queued animation isn't started early.\");\n\n\t\t\tdone();\n\t\t},\n\t});\n\tassert.ok(data.queueList[testQueue] !== undefined, \"Custom queue was created.\"); // Should exist, but be \"null\"\n\n\t$target.velocity(defaultProperties, {\n\t\tqueue: testQueue,\n\t\tbegin() {\n\t\t\tanim2 = true;\n\t\t\tassert.ok(anim1 === false, \"Queued animation starts after first.\");\n\n\t\t\tdone();\n\t\t},\n\t\tcomplete() {\n\t\t\tanim2 = false;\n\t\t},\n\t});\n\tassert.ok(data.queueList[testQueue], \"Custom queue grows.\"); // Should exist and point at the next animation\n\n\t$target.velocity(defaultProperties, {\n\t\tbegin() {\n\t\t\tanim3 = true;\n\t\t\tassert.ok(anim1 === true, \"Different queue animation starts in parallel.\");\n\n\t\t\tdone();\n\t\t},\n\t\tcomplete() {\n\t\t\tanim3 = false;\n\t\t},\n\t});\n\n\t$target.velocity(defaultProperties, {\n\t\tqueue: false,\n\t\tbegin() {\n\t\t\tassert.ok(anim1 === true, \"Queue:false animation starts in parallel.\");\n\n\t\t\tdone();\n\t\t},\n\t});\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Repeat.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Repeat\", (assert) => {\n\tasyncTests(assert, 4, (done) => {\n\t\tconst testOptions = {repeat: 2, delay: 100, duration: 100},\n\t\t\tstart = Date.now();\n\t\tlet begin = 0,\n\t\t\tcomplete = 0,\n\t\t\trepeat = 0;\n\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\trepeat: testOptions.repeat,\n\t\t\tdelay: testOptions.delay,\n\t\t\tduration: testOptions.duration,\n\t\t\tbegin() {\n\t\t\t\tbegin++;\n\t\t\t},\n\t\t\tprogress(elements, percentComplete) {\n\t\t\t\tif (percentComplete === 1) {\n\t\t\t\t\trepeat++;\n\t\t\t\t}\n\t\t\t},\n\t\t\tcomplete() {\n\t\t\t\tcomplete++;\n\t\t\t\tassert.equal(begin, 1, \"Begin callback only called once.\");\n\t\t\t\tassert.equal(repeat, testOptions.repeat + 1, \"Animation repeated correct number of times (original plus repeats).\");\n\t\t\t\tassert.close(Date.now() - start, (testOptions.delay + testOptions.duration) * (testOptions.repeat + 1), (testOptions.repeat + 1) * 16 + 32,\n\t\t\t\t\t\"Repeat with 'delay' has correct duration.\");\n\t\t\t\tassert.equal(complete, 1, \"Complete callback only called once.\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Speed.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity, {VelocityResult} from \"velocity-animate\";\nimport {asyncTests, defaultProperties, getNow, getTarget} from \"../utilities\";\nimport \"./_module\";\n\ninterface ExtendedVelocityExtended extends VelocityResult {\n\t__count?: number;\n\t__start?: number;\n}\n\nQUnit.test(\"Speed\", (assert) => {\n\tconst delay = 200,\n\t\tduration = 400,\n\t\tstartDelay = getNow();\n\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity.defaults.speed = 3;\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tspeed: 5,\n\t\t\tbegin(elements) {\n\t\t\t\tassert.equal(elements.velocity.animations[0].options.speed, 5, \"Speed on options overrides default.\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration,\n\t\t\tbegin(elements: ExtendedVelocityExtended) {\n\t\t\t\telements.__start = getNow();\n\t\t\t},\n\t\t\tcomplete(elements: ExtendedVelocityExtended) {\n\t\t\t\tconst actual = getNow() - elements.__start,\n\t\t\t\t\texpected = duration / 3;\n\n\t\t\t\tassert.close(actual, expected, 32, `Velocity.defaults.speed change is respected. (\\xD73, ${Math.floor(actual - expected)}ms \\xB132ms)`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration,\n\t\t\tspeed: 2,\n\t\t\tbegin(elements: ExtendedVelocityExtended) {\n\t\t\t\telements.__start = getNow();\n\t\t\t},\n\t\t\tcomplete(elements: ExtendedVelocityExtended) {\n\t\t\t\tconst actual = getNow() - elements.__start,\n\t\t\t\t\texpected = duration / 2;\n\n\t\t\t\tassert.close(actual, expected, 32, `Double speed animation lasts half as long. (\\xD72, ${Math.floor(actual - expected)}ms \\xB132ms)`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration,\n\t\t\tdelay,\n\t\t\tspeed: 2,\n\t\t\tbegin(elements: ExtendedVelocityExtended) {\n\t\t\t\telements.__start = startDelay;\n\t\t\t},\n\t\t\tcomplete(elements: ExtendedVelocityExtended) {\n\t\t\t\tconst actual = getNow() - elements.__start,\n\t\t\t\t\texpected = (duration + delay) / 2;\n\n\t\t\t\tassert.close(actual, expected, 32, `Delayed animation includes speed for delay. (\\xD72, ${Math.floor(actual - expected)}ms \\xB132ms)`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration,\n\t\t\tdelay: -delay,\n\t\t\tspeed: 2,\n\t\t\tbegin(elements: ExtendedVelocityExtended) {\n\t\t\t\telements.__start = startDelay;\n\t\t\t},\n\t\t\tcomplete(elements: ExtendedVelocityExtended) {\n\t\t\t\tconst actual = getNow() - elements.__start,\n\t\t\t\t\texpected = (duration - delay) / 2;\n\n\t\t\t\tassert.close(actual, expected, 32, `Negative delay animation includes speed for delay. (\\xD72, ${Math.floor(actual - expected)}ms \\xB132ms)`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration,\n\t\t\tspeed: 0.5,\n\t\t\tbegin(elements: ExtendedVelocityExtended) {\n\t\t\t\telements.__start = getNow();\n\t\t\t},\n\t\t\tcomplete(elements: ExtendedVelocityExtended) {\n\t\t\t\tconst actual = getNow() - elements.__start,\n\t\t\t\t\texpected = duration * 2;\n\n\t\t\t\t// TODO: Really not happy with the allowed range - it sits around 40ms, but should be closer to 16ms\n\t\t\t\tassert.close(actual, expected, 64, `Half speed animation lasts twice as long. (\\xD7\\xBD, ${Math.floor(actual - expected)}ms \\xB164ms)`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity(getTarget(), defaultProperties, {\n\t\t\tduration,\n\t\t\tspeed: 0,\n\t\t\tprogress(elements: ExtendedVelocityExtended, percentComplete) {\n\t\t\t\tif (!elements.__count) {\n\t\t\t\t\telements.__start = percentComplete;\n\t\t\t\t\telements.__count = 1;\n\t\t\t\t} else {\n\t\t\t\t\tassert.equal(elements.__start, percentComplete, \"Frozen (speed:0) animation doesn't progress.\");\n\t\t\t\t\telements\n\t\t\t\t\t\t.velocity(\"option\", \"speed\", 1) // Just in case \"stop\" is broken\n\t\t\t\t\t\t.velocity(\"stop\");\n\n\t\t\t\t\tdone();\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/Option Sync.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, defaultProperties, getTarget, sleep} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Sync\", (assert) => {\n\tasyncTests(assert, 1, async (done) => {\n\t\tconst $target = getTarget(),\n\t\t\t$targetSet = [getTarget(), $target, getTarget()];\n\t\tlet complete = false;\n\n\t\tVelocity($target, defaultProperties, {\n\t\t\tduration: 300,\n\t\t\tcomplete() {\n\t\t\t\tcomplete = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($targetSet, defaultProperties, {\n\t\t\tsync: false,\n\t\t\tduration: 250,\n\t\t});\n\t\tawait sleep(275);\n\t\tassert.notOk(complete, \"Sync 'false' animations don't wait for completion.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, async (done) => {\n\t\tconst $target = getTarget(),\n\t\t\t$targetSet = [getTarget(), $target, getTarget()];\n\t\tlet complete = false;\n\n\t\tVelocity($target, defaultProperties, {\n\t\t\tduration: 300,\n\t\t\tcomplete() {\n\t\t\t\tcomplete = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($targetSet, defaultProperties, {\n\t\t\tsync: true,\n\t\t\tduration: 250,\n\t\t\tbegin() {\n\t\t\t\tassert.ok(complete, \"Sync 'true' animations wait for completion.\");\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/2_Option/_module.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nQUnit.module(\"Option\");\n"
  },
  {
    "path": "test/src/3_Command/Command Finish.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, defaultOptions, defaultProperties, getPropertyValue, getTarget, sleep} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Finish\", async (assert) => {\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity(getTarget(), \"finish\");\n\t\tassert.ok(true, \"Calling on an element that isn't animating doesn't cause an error.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, defaultProperties, defaultOptions);\n\t\tVelocity($target, {top: 0}, defaultOptions);\n\t\tVelocity($target, {width: 0}, defaultOptions);\n\t\tVelocity($target, \"finish\");\n\t\tassert.ok(true, \"Calling on an element that is animating doesn't cause an error.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 2, async (done) => {\n\t\tconst $target = getTarget();\n\t\tlet complete1 = false,\n\t\t\tcomplete2 = false;\n\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tqueue: \"test1\",\n\t\t\tcomplete() {\n\t\t\t\tcomplete1 = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tqueue: \"test2\",\n\t\t\tcomplete() {\n\t\t\t\tcomplete2 = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($target, \"finish\", \"test1\");\n\t\tawait sleep(defaultOptions.duration as number / 2);\n\t\tassert.ok(complete1, \"Finish animation with correct queue.\");\n\t\tassert.notOk(complete2, \"Don't finish animation with wrong queue.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 3, async (done) => {\n\t\tconst $target = getTarget();\n\t\tlet begin = false,\n\t\t\tcomplete = false;\n\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tbegin() {\n\t\t\t\tbegin = true;\n\t\t\t},\n\t\t\tcomplete() {\n\t\t\t\tcomplete = true;\n\t\t\t},\n\t\t});\n\t\tawait sleep(500);\n\t\tVelocity($target, \"finish\");\n\t\tassert.ok(begin, \"Finish calls 'begin()' callback without delay.\");\n\t\tassert.ok(complete, \"Finish calls 'complete()' callback without delay.\");\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Finish animation with correct value.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 3, async (done) => {\n\t\tconst $target = getTarget();\n\t\tlet begin = false,\n\t\t\tcomplete = false;\n\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tdelay: 1000,\n\t\t\tbegin() {\n\t\t\t\tbegin = true;\n\t\t\t},\n\t\t\tcomplete() {\n\t\t\t\tcomplete = true;\n\t\t\t},\n\t\t});\n\t\tawait sleep(500);\n\t\tVelocity($target, \"finish\");\n\t\tassert.ok(begin, \"Finish calls 'begin()' callback with delay.\");\n\t\tassert.ok(complete, \"Finish calls 'complete()' callback with delay.\");\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Finish animation with correct value before delay ends.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 3, async (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, {opacity: 0})\n\t\t\t.velocity({opacity: 1})\n\t\t\t.velocity({opacity: 0.25})\n\t\t\t.velocity({opacity: 0.75})\n\t\t\t.velocity({opacity: 0.5});\n\t\tVelocity($target, \"finish\");\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Finish once starts the second animation.\");\n\t\tVelocity($target, \"finish\");\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Finish twice starts the third animation.\");\n\t\tVelocity($target, \"finish\", true);\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"0.5\", \"Finish 'true' finishes all animations.\");\n\n\t\tdone();\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/3_Command/Command Pause + Resume.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, getPropertyValue, getTarget, sleep} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Pause + Resume\", async (assert) => {\n\tasyncTests(assert, 2, (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, \"pause\");\n\t\tassert.ok(true, \"Calling \\\"pause\\\" on an element that isn't animating doesn't cause an error.\");\n\t\tVelocity($target, \"resume\");\n\t\tassert.ok(true, \"Calling \\\"resume\\\" on an element that isn't animating doesn't cause an error.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 4, async (done) => {\n\t\tconst $target = getTarget();\n\t\tlet progress = false;\n\n\t\tVelocity($target, {opacity: 0}, {\n\t\t\tduration: 250,\n\t\t\tprogress() {\n\t\t\t\tprogress = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($target, \"pause\");\n\t\tawait sleep(50);\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Property value unchanged after pause.\");\n\t\tassert.notOk(progress, \"Progress callback not run during pause.\");\n\t\tVelocity($target, \"resume\");\n\t\tawait sleep(300);\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Tween completed after pause/resume.\");\n\t\tassert.ok(progress, \"Progress callback run after pause.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 3, async (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, {opacity: 0}, {duration: 250, delay: 250});\n\t\tVelocity($target, \"pause\");\n\t\tawait sleep(500);\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Delayed property value unchanged after pause.\");\n\t\tVelocity($target, \"resume\");\n\t\tawait sleep(100);\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Delayed tween did not start early after pause.\");\n\t\tawait sleep(500);\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Delayed tween completed after pause/resume.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, async (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, {opacity: 0}, {queue: \"test\", duration: 250});\n\t\tVelocity(\"pause\", \"test\");\n\t\tawait sleep(300);\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Pause 'queue' works globally.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, async (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, {opacity: 0})\n\t\t\t.velocity(\"pause\");\n\t\tawait sleep(300);\n\t\tassert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Chained pause only pauses chained tweens.\");\n\n\t\tdone();\n\t});\n\n\t// TODO: Better global tests, queue: false, named queues\n\n\t//\t/* Ensure proper behavior with queue:false  */\n\t//\tvar $target4 = getTarget();\n\t//\tVelocity($target4, {opacity: 0}, {duration: 200});\n\t//\n\t//\tvar isResumed = false;\n\t//\n\t//\tawait sleep(100);\n\t//\tVelocity($target4, \"pause\");\n\t//\tVelocity($target4, {left: -20}, {\n\t//\t\tduration: 100,\n\t//\t\teasing: \"linear\",\n\t//\t\tqueue: false,\n\t//\t\tbegin: function(elements) {\n\t//\t\t\tassert.ok(true, \"Animation with {queue:false} will run regardless of previously paused animations.\");\n\t//\t\t}\n\t//\t});\n\t//\n\t//\tVelocity($target4, {top: 20}, {\n\t//\t\tduration: 100,\n\t//\t\teasing: \"linear\",\n\t//\t\tbegin: function(elements) {\n\t//\t\t\tassert.ok(isResumed, \"Queued animation began after previously paused animation completed\");\n\t//\t\t}\n\t//\t});\n\t//\n\t//\tawait sleep(100);\n\t//\n\t//\tisResumed = true;\n\t//\tVelocity($target4, \"resume\");\n\t//\tawait sleep(100);\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/3_Command/Command Reverse.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Reverse\", (assert) => {\n\tconst $target = getTarget(),\n\t\topacity = $target.velocity(\"style\", \"opacity\"),\n\t\t// Browsers don't always suffix, but Velocity does.\n\t\twidth = $target.velocity(\"style\", \"width\") === \"0\" ? \"0px\" : $target.velocity(\"style\", \"width\");\n\n\tasyncTests(assert, 2, (done) => {\n\t\tVelocity($target, defaultProperties, {\n\t\t\tcomplete(elements) {\n\t\t\t\tassert.equal(elements[0].velocity(\"style\", \"opacity\"), defaultProperties.opacity, `Initial property #1 set correctly. (${defaultProperties.opacity})`);\n\t\t\t\tassert.equal(elements[0].velocity(\"style\", \"width\"), defaultProperties.width, `Initial property #2 set correctly. (${defaultProperties.width})`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 2, (done) => {\n\t\tVelocity($target, \"reverse\", {\n\t\t\tcomplete(elements) {\n\t\t\t\tassert.equal(elements[0].velocity(\"style\", \"opacity\"), opacity, `Reversed property #1 set correctly. (${opacity})`);\n\t\t\t\tassert.equal(elements[0].velocity(\"style\", \"width\"), width, `Reversed property #2 set correctly. (${width})`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tasyncTests(assert, 2, (done) => {\n\t\tVelocity($target, \"reverse\", {\n\t\t\tcomplete(elements) {\n\t\t\t\tassert.equal(elements[0].velocity(\"style\", \"opacity\"), defaultProperties.opacity, `Chained reversed property #1 set correctly. (${defaultProperties.opacity})`);\n\t\t\t\tassert.equal(elements[0].velocity(\"style\", \"width\"), defaultProperties.width, `Chained reversed property #2 set correctly. (${defaultProperties.width})`);\n\n\t\t\t\tdone();\n\t\t\t},\n\t\t});\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/3_Command/Command Scroll.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncCheckDuration, asyncTests, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\n/* Window scrolling. */\nQUnit.skip(\"Scroll (Window)\", (assert) => {\n\t//\tvar done = assert.async(4),\n\t//\t\t$details = $(\"#details\"),\n\t//\t\t$scrollTarget1 = $(\"<div>Scroll target #1. Should stop 50 pixels above this point.</div>\"),\n\t//\t\t$scrollTarget2 = $(\"<div>Scroll target #2. Should stop 50 pixels before this point.</div>\"),\n\t//\t\tscrollOffset = -50;\n\t//\n\t//\t$scrollTarget1\n\t//\t\t.css({position: \"relative\", top: 3000, height: 100, paddingBottom: 10000})\n\t//\t\t.appendTo($(\"body\"));\n\t//\n\t//\t$scrollTarget2\n\t//\t\t.css({position: \"absolute\", top: 100, left: 3000, width: 100, paddingRight: 15000})\n\t//\t\t.appendTo($(\"body\"));\n\t//\n\t//\t$scrollTarget1\n\t//\t\t.velocity(\"scroll\", {\n\t//\t\t\tduration: 500, offset: scrollOffset, complete: function() {\n\t//\t\t\t\tassert.equal(Math.abs(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyTop]\n\t//\t\t\t\t - ($scrollTarget1.offset().top + scrollOffset)) <= 100, true, \"Page scrolled top with a scroll offset.\");\n\t//\n\t//\t\t\t\tdone();\n\t//\t\t\t}\n\t//\t\t})\n\t//\t\t.velocity({opacity: 0.5}, function() {\n\t//\t\t\t$details\n\t//\t\t\t\t.velocity({opacity: 0.5}, 500)\n\t//\t\t\t\t.velocity(\"scroll\", 500)\n\t//\t\t\t\t.velocity({opacity: 1}, 500, function() {\n\t//\t\t\t\t\t//alert(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyTop] + \" \" + ($details.offset().top + scrollOffset))\n\t//\t\t\t\t\tassert.equal(Math.abs(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyTop]\n\t//\t\t\t\t\t - ($details.offset().top + scrollOffset)) <= 100, true, \"Page scroll top was chained.\");\n\t//\n\t//\t\t\t\t\tdone();\n\t//\n\t//\t\t\t\t\t//$scrollTarget1.remove();\n\t//\n\t//\t\t\t\t\t$scrollTarget2\n\t//\t\t\t\t\t\t.velocity(\"scroll\", {\n\t//\t\t\t\t\t\t\tduration: 500, axis: \"x\", offset: scrollOffset, complete: function() {\n\t//\t\t\t\t\t\t\t\t/* Phones can reposition the browser's scroll position by a 10 pixels or so, so we just check for a value that's within that range. */\n\t//\t\t\t\t\t\t\t\tassert.equal(Math.abs(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyLeft]\n\t//\t\t\t\t\t\t\t\t - ($scrollTarget2.offset().left + scrollOffset)) <= 100, true, \"Page scrolled left with a scroll offset.\");\n\t//\n\t//\t\t\t\t\t\t\t\tdone();\n\t//\t\t\t\t\t\t\t}\n\t//\t\t\t\t\t\t})\n\t//\t\t\t\t\t\t.velocity({opacity: 0.5}, function() {\n\t//\t\t\t\t\t\t\t$details\n\t//\t\t\t\t\t\t\t\t.velocity({opacity: 0.5}, 500)\n\t//\t\t\t\t\t\t\t\t.velocity(\"scroll\", {duration: 500, axis: \"x\"})\n\t//\t\t\t\t\t\t\t\t.velocity({opacity: 1}, 500, function() {\n\t//\t\t\t\t\t\t\t\t\tassert.equal(Math.abs(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyLeft]\n\t//\t\t\t\t\t\t\t\t\t - ($details.offset().left + scrollOffset)) <= 100, true, \"Page scroll left was chained.\");\n\t//\n\t//\t\t\t\t\t\t\t\t\tdone();\n\t//\t\t\t\t\t\t\t\t});\n\t//\t\t\t\t\t\t});\n\t//\t\t\t\t});\n\t//\t\t});\n});\n\n/* Element scrolling. */\nQUnit.skip(\"Scroll (Element)\", (assert) => {\n\t//\tvar done = assert.async(2),\n\t//\t\t$scrollTarget1 = $(\"\\\n\t//\t\t\t\t\t<div id='scroller'>\\\n\t//\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t//\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t//\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t//\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t//\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t//\t\t\t\t\t\t<div id='scrollerChild1'>\\\n\t//\t\t\t\t\t\t\tStop #1\\\n\t//\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t</div>\\\n\t//\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\t<div id='scrollerChild2'>\\\n\t//\t\t\t\t\t\t\tStop #2\\\n\t//\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t</div>\\\n\t//\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t</div>\\\n\t//\t\t\t\t\");\n\t//\n\t//\tassert.expect(2);\n\t//\t$scrollTarget1\n\t//\t\t.css({position: \"absolute\", backgroundColor: \"white\", top: 100, left: \"50%\", width: 500, height: 100, overflowY: \"scroll\"})\n\t//\t\t.appendTo($(\"body\"));\n\t//\n\t//\t/* Test with a jQuery object container. */\n\t//\t$(\"#scrollerChild1\").velocity(\"scroll\", {\n\t//\t\tcontainer: $(\"#scroller\"), duration: 750, complete: function() {\n\t//\t\t\t/* Test with a raw DOM element container. */\n\t//\t\t\t$(\"#scrollerChild2\").velocity(\"scroll\", {\n\t//\t\t\t\tcontainer: $(\"#scroller\")[0], duration: 750, complete: function() {\n\t//\t\t\t\t\t/* This test is purely visual. */\n\t//\t\t\t\t\tassert.ok(true);\n\t//\n\t//\t\t\t\t\t$scrollTarget1.remove();\n\t//\n\t//\t\t\t\t\tvar $scrollTarget2 = $(\"\\\n\t//\t\t\t\t\t\t\t\t\t<div id='scroller'>\\\n\t//\t\t\t\t\t\t\t\t\t\t<div id='scrollerChild1' style='float: left; width: 20%;'>\\\n\t//\t\t\t\t\t\t\t\t\t\t\tStop #1\\\n\t//\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t//\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t//\t\t\t\t\t\t\t\t\t\t</div>\\\n\t//\t\t\t\t\t\t\t\t\t\t<div id='scrollerChild2' style='float: right; width: 20%;'>\\\n\t//\t\t\t\t\t\t\t\t\t\t\tStop #2\\\n\t//\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t//\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t//\t\t\t\t\t\t\t\t\t\t</div>\\\n\t//\t\t\t\t\t\t\t\t\t</div>\\\n\t//\t\t\t\t\t\t\t\t\");\n\t//\n\t//\t\t\t\t\t$scrollTarget2\n\t//\t\t\t\t\t\t.css({position: \"absolute\", backgroundColor: \"white\", top: 100, left: \"50%\", width: 100, height: 500, overflowX: \"scroll\"})\n\t//\t\t\t\t\t\t.appendTo($(\"body\"));\n\t//\n\t//\t\t\t\t\t/* Test with a jQuery object container. */\n\t//\t\t\t\t\t$(\"#scrollerChild2\").velocity(\"scroll\", {\n\t//\t\t\t\t\t\taxis: \"x\", container: $(\"#scroller\"), duration: 750, complete: function() {\n\t//\t\t\t\t\t\t\t/* Test with a raw DOM element container. */\n\t//\t\t\t\t\t\t\t$(\"#scrollerChild1\").velocity(\"scroll\", {\n\t//\t\t\t\t\t\t\t\taxis: \"x\", container: $(\"#scroller\")[0], duration: 750, complete: function() {\n\t//\t\t\t\t\t\t\t\t\t/* This test is purely visual. */\n\t//\t\t\t\t\t\t\t\t\tassert.ok(true);\n\t//\n\t//\t\t\t\t\t\t\t\t\t$scrollTarget2.remove();\n\t//\n\t//\t\t\t\t\t\t\t\t\tdone();\n\t//\t\t\t\t\t\t\t\t}\n\t//\t\t\t\t\t\t\t});\n\t//\t\t\t\t\t\t}\n\t//\t\t\t\t\t});\n\t//\n\t//\t\t\t\t\tdone();\n\t//\t\t\t\t}\n\t//\t\t\t});\n\t//\t\t}\n\t//\t});\n});\n"
  },
  {
    "path": "test/src/3_Command/Command Stop.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncTests, defaultOptions, defaultProperties, getPropertyValue, getTarget, sleep} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Stop\", async (assert) => {\n\tasyncTests(assert, 1, (done) => {\n\t\tVelocity(getTarget(), \"stop\");\n\t\tassert.ok(true, \"Calling on an element that isn't animating doesn't cause an error.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, (done) => {\n\t\tconst $target = getTarget();\n\n\t\tVelocity($target, defaultProperties, defaultOptions);\n\t\tVelocity($target, {top: 0}, defaultOptions);\n\t\tVelocity($target, {width: 0}, defaultOptions);\n\t\tVelocity($target, \"stop\");\n\t\tassert.ok(true, \"Calling on an element that is animating doesn't cause an error.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, async (done) => {\n\t\tconst $target = getTarget(),\n\t\t\tstartOpacity = getPropertyValue($target, \"opacity\");\n\n\t\tVelocity($target, {opacity: [0, 1]}, defaultOptions);\n\t\tawait sleep(defaultOptions.duration as number / 2);\n\t\tVelocity($target, \"stop\");\n\t\tassert.close(parseFloat(getPropertyValue($target, \"opacity\")), parseFloat(startOpacity) / 2, 0.1, \"Animation runs until stopped.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, async (done) => {\n\t\tconst $target = getTarget();\n\t\tlet begin = false;\n\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tdelay: 1000,\n\t\t\tbegin() {\n\t\t\t\tbegin = true;\n\t\t\t},\n\t\t});\n\t\tawait sleep(500);\n\t\tVelocity($target, \"stop\");\n\t\tassert.notOk(begin, \"Stop animation before delay ends.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 2, async (done) => {\n\t\tconst $target = getTarget();\n\t\tlet complete1 = false,\n\t\t\tcomplete2 = false;\n\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tqueue: \"test1\",\n\t\t\tcomplete() {\n\t\t\t\tcomplete1 = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tqueue: \"test2\",\n\t\t\tcomplete() {\n\t\t\t\tcomplete2 = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($target, \"stop\", \"test1\");\n\t\tawait sleep(defaultOptions.duration as number * 2);\n\t\tassert.ok(complete2, \"Stop animation with correct queue.\");\n\t\tassert.notOk(complete1, \"Don't stop animation with wrong queue.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 1, async (done) => {\n\t\tconst $target = getTarget();\n\t\tlet begin1 = false,\n\t\t\tbegin2 = false;\n\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tbegin() {\n\t\t\t\tbegin1 = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($target, {width: \"500px\"}, {\n\t\t\tbegin() {\n\t\t\t\tbegin2 = true;\n\t\t\t},\n\t\t});\n\t\tVelocity($target, \"stop\", true);\n\t\tawait sleep(defaultOptions.duration as number * 2);\n\t\tassert.notOk(begin1 || begin2, \"Stop 'true' stops all animations.\");\n\n\t\tdone();\n\t});\n\n\tasyncTests(assert, 2, async (done) => {\n\t\tconst $target = getTarget(),\n\t\t\tanim = Velocity($target, {opacity: [0, 1]}, {\n\t\t\t\tqueue: \"test\",\n\t\t\t\tbegin() {\n\t\t\t\t\tbegin1 = true;\n\t\t\t\t},\n\t\t\t});\n\t\tlet begin1 = false,\n\t\t\tbegin2 = false;\n\n\t\tVelocity($target, {opacity: [0, 1]}, {\n\t\t\tbegin() {\n\t\t\t\tbegin2 = true;\n\t\t\t},\n\t\t});\n\t\tanim.velocity(\"stop\");\n\t\tawait sleep(defaultOptions.duration as number * 2);\n\t\tassert.notOk(begin1, \"Stop without arguments on a chain stops chain animations.\");\n\t\tassert.ok(begin2, \"Stop without arguments on a chain doesn't stop other animations.\");\n\n\t\tdone();\n\t});\n\n\tassert.expect(asyncTests());\n});\n"
  },
  {
    "path": "test/src/3_Command/Command Tween.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Tween\", (assert) => {\n\tconst $target1 = getTarget(),\n\t\tstartOpacity = $target1.style.opacity;\n\n\tassert.expect(11);\n\n\tassert.raises(() => (Velocity as any)(\"tween\", \"invalid\"), \"Invalid percentComplete throws an error.\");\n\tassert.raises(() => (Velocity as any)([$target1, $target1], \"tween\", \"invalid\"), \"Passing more than one target throws an error.\");\n\tassert.raises(() => (Velocity as any)(\"tween\", 0, [\"invalid\"]), \"Invalid propertyMap throws an error.\");\n\tassert.raises(() => (Velocity as any)(\"tween\", 0, \"invalid\", 1), \"Property without an element must be forcefed or throw an error.\");\n\n\tassert.equal($target1.velocity(\"tween\", 0.5, \"opacity\", [1, 0], \"linear\"), \"0.5\", \"Calling on an chain returns the correct value.\");\n\tassert.equal(Velocity($target1, \"tween\", 0.5, \"opacity\", [1, 0], \"linear\"), \"0.5\", \"Calling with an element returns the correct value.\");\n\tassert.equal(Velocity(\"tween\", 0.5, \"opacity\", [1, 0], \"linear\"), \"0.5\", \"Calling without an element returns the correct value.\");\n\tassert.equal($target1.style.opacity, startOpacity, \"Ensure that the element is not altered.\");\n\n\tassert.equal(typeof Velocity($target1, \"tween\", 0.5, \"opacity\", [1, 0], \"linear\"), \"string\", \"Calling a single property returns a value.\");\n\tassert.equal(typeof Velocity($target1, \"tween\", 0.5, {opacity: [1, 0]}, \"linear\"), \"object\", \"Calling a propertiesMap returns an object.\");\n\tassert.deepEqual($target1.velocity(\"tween\", 0.5, {opacity: [1, 0]}, \"linear\"), Velocity($target1, \"tween\", 0.5, {opacity: [1, 0]}, \"linear\"),\n\t\t\"Calling directly returns the same as a chain.\");\n});\n"
  },
  {
    "path": "test/src/3_Command/_module.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nQUnit.module(\"Command\");\n"
  },
  {
    "path": "test/src/4_Feature/Feature Classname.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"'velocity-animating' Classname\", (assert) => {\n\tconst done = assert.async(1);\n\n\tVelocity(getTarget(), defaultProperties, {\n\t\tbegin(elements) {\n\t\t\tassert.equal(/velocity-animating/.test(elements[0].className), true, \"Class added.\");\n\t\t},\n\t\tcomplete(elements) {\n\t\t\tassert.equal(/velocity-animating/.test(elements[0].className), false, \"Class removed.\");\n\t\t},\n\t})\n\t\t.then(done);\n});\n"
  },
  {
    "path": "test/src/4_Feature/Feature Colors.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.skip(\"Colors (Shorthands)\", (assert) => {\n\tconst $target = getTarget();\n\n\tVelocity($target, {borderColor: \"#7871c2\", color: [\"#297dad\", \"spring\", \"#5ead29\"]});\n\n\t//\tassert.equal(Data($target).style.borderColorRed.endValue, 120, \"Hex #1a component.\");\n\t//\tassert.equal(Data($target).style.borderColorGreen.endValue, 113, \"Hex #1b component.\");\n\t//\tassert.equal(Data($target).style.borderColorBlue.endValue, 194, \"Hex #1c component.\");\n\t//\tassert.equal(Data($target).style.colorRed.easing, \"spring\", \"Per-property easing.\");\n\t//\tassert.equal(Data($target).style.colorRed.startValue, 94, \"Forcefed hex #2a component.\");\n\t//\tassert.equal(Data($target).style.colorGreen.startValue, 173, \"Forcefed hex #2b component.\");\n\t//\tassert.equal(Data($target).style.colorBlue.startValue, 41, \"Forcefed hex #2c component.\");\n\t//\tassert.equal(Data($target).style.colorRed.endValue, 41, \"Hex #3a component.\");\n\t//\tassert.equal(Data($target).style.colorGreen.endValue, 125, \"Hex #3b component.\");\n\t//\tassert.equal(Data($target).style.colorBlue.endValue, 173, \"Hex #3c component.\");\n});\n"
  },
  {
    "path": "test/src/4_Feature/Feature Forcefeeding.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {Data, defaultProperties, defaultStyles, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.todo(\"Forcefeeding\", (assert) => {\n\t/* Note: Start values are always converted into pixels. W test the conversion ratio we already know to avoid additional work. */\n\tconst testStartWidth = \"1rem\",\n\t\ttestStartWidthToPx = \"16px\",\n\t\ttestStartHeight = \"10px\",\n\t\t$target = getTarget();\n\n\tVelocity($target, {\n\t\twidth: [100, \"linear\", testStartWidth],\n\t\theight: [100, testStartHeight],\n\t\topacity: [defaultProperties.opacity as any, \"easeInQuad\"],\n\t});\n\n\tassert.equal(Data($target).cache.width, parseFloat(testStartWidthToPx), \"Forcefed value #1 passed to tween.\");\n\tassert.equal(Data($target).cache.height, parseFloat(testStartHeight), \"Forcefed value #2 passed to tween.\");\n\tassert.equal(Data($target).cache.opacity, defaultStyles.opacity, \"Easing was misinterpreted as forcefed value.\");\n});\n"
  },
  {
    "path": "test/src/4_Feature/Feature Promises.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity, {VelocityResult} from \"velocity-animate\";\nimport {defaultOptions, defaultProperties, getNow, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Promises\", (assert) => {\n\tconst done = assert.async(10),\n\t\tstart = getNow();\n\tlet result: VelocityResult;\n\n\tassert.expect(10);\n\n\t/**********************\n\t Invalid Arguments\n\t **********************/\n\n\t((Velocity as any)() as Promise<any>)\n\t\t.then(() => {\n\t\t\tassert.notOk(true, \"Calling with no arguments should reject a Promise.\");\n\t\t}, () => {\n\t\t\tassert.ok(true, \"Calling with no arguments should reject a Promise.\");\n\t\t})\n\t\t.then(done);\n\n\tVelocity(getTarget() as any)\n\t\t.then(() => {\n\t\t\tassert.notOk(true, \"Calling with no properties should reject a Promise.\");\n\t\t}, () => {\n\t\t\tassert.ok(true, \"Calling with no properties should reject a Promise.\");\n\t\t})\n\t\t.then(done);\n\n\tVelocity(getTarget(), {})\n\t\t.then(() => {\n\t\t\tassert.ok(true, \"Calling with empty properties should not reject a Promise.\");\n\t\t}, () => {\n\t\t\tassert.notOk(true, \"Calling with empty properties should not reject a Promise.\");\n\t\t})\n\t\t.then(done);\n\n\tVelocity(getTarget(), {}, defaultOptions.duration)\n\t\t.then(() => {\n\t\t\tassert.ok(true, \"Calling with empty properties + duration should not reject a Promise.\");\n\t\t}, () => {\n\t\t\tassert.notOk(true, \"Calling with empty properties + duration should not reject a Promise.\");\n\t\t})\n\t\t.then(done);\n\n\t/* Invalid arguments: Ensure an error isn't thrown. */\n\tVelocity(getTarget(), {} as any, \"fakeArg1\", \"fakeArg2\")\n\t\t.then(() => {\n\t\t\tassert.ok(true, \"Calling with invalid arguments should reject a Promise.\");\n\t\t}, () => {\n\t\t\tassert.notOk(true, \"Calling with invalid arguments should reject a Promise.\");\n\t\t})\n\t\t.then(done);\n\n\tresult = Velocity(getTarget(), defaultProperties, defaultOptions);\n\tresult\n\t\t.then((elements) => {\n\t\t\tassert.equal(elements.length, 1, \"Calling with a single element fulfills with a single element array.\");\n\t\t}, () => {\n\t\t\tassert.ok(false, \"Calling with a single element fulfills with a single element array.\");\n\t\t})\n\t\t.then(done);\n\tresult.velocity(defaultProperties)\n\t\t.then((elements) => {\n\t\t\tassert.ok(getNow() - start > 2 * (defaultOptions.duration as number), \"Queued call fulfilled after correct delay.\");\n\t\t}, () => {\n\t\t\tassert.ok(false, \"Queued call fulfilled after correct delay.\");\n\t\t})\n\t\t.then(done);\n\n\tresult = Velocity([getTarget(), getTarget()], defaultProperties, defaultOptions);\n\tresult\n\t\t.then((elements) => {\n\t\t\tassert.equal(elements.length, 2, \"Calling with multiple elements fulfills with a multiple element array.\");\n\t\t}, () => {\n\t\t\tassert.ok(false, \"Calling with multiple elements fulfills with a multiple element array.\");\n\t\t})\n\t\t.then(done);\n\n\tconst anim = Velocity(getTarget(), defaultProperties, defaultOptions);\n\n\tanim\n\t\t.then(() => {\n\t\t\tassert.ok(getNow() - start < (defaultOptions.duration as number), \"Stop call fulfilled after correct delay.\");\n\t\t}, () => {\n\t\t\tassert.ok(false, \"Stop call fulfilled after correct delay.\");\n\t\t})\n\t\t.then(done);\n\tanim.velocity(\"stop\");\n\n\tPromise\n\t\t.all([\n\t\t\tVelocity(getTarget(), defaultProperties, defaultOptions).promise,\n\t\t\tVelocity(getTarget(), defaultProperties, defaultOptions).promise,\n\t\t])\n\t\t.then(() => {\n\t\t\tassert.ok(true, \"Promise.all fulfilled when all animations have finished.\");\n\t\t})\n\t\t.then(done);\n});\n"
  },
  {
    "path": "test/src/4_Feature/Feature Sequences.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncCheckDuration, asyncTests, defaultProperties, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.todo(\"Sequences\", (assert) => {\n\t//\tvar done = assert.async(2),\n\t//\t\t$target1 = getTarget(),\n\t//\t\t$target2 = getTarget(),\n\t//\t\tredirectOptions = {duration: 1500};\n\t//\n\t//\t((window as any).jQuery || (window as any).Zepto || window).Velocity.Redirects.test = function(element, options, elementIndex, elementsLength) {\n\t//\t\tif (elementIndex === 0) {\n\t//\t\t\tassert.deepEqual(element, $target1, \"Element passed through #1.\");\n\t//\t\t\tassert.deepEqual(options, redirectOptions, \"Options object passed through #1.\");\n\t//\t\t\tassert.equal(elementIndex, 0, \"Element index passed through #1.\");\n\t//\t\t\tassert.equal(elementsLength, 2, \"Elements length passed through #1.\");\n\t//\n\t//\t\t\tdone();\n\t//\t\t} else if (elementIndex === 1) {\n\t//\t\t\tassert.deepEqual(element, $target2, \"Element passed through #2.\");\n\t//\t\t\tassert.deepEqual(options, redirectOptions, \"Options object passed through #2.\");\n\t//\t\t\tassert.equal(elementIndex, 1, \"Element index passed through #2.\");\n\t//\t\t\tassert.equal(elementsLength, 2, \"Elements length passed through #2.\");\n\t//\n\t//\t\t\tdone();\n\t//\t\t}\n\t//\t};\n\t//\n\t//\tVelocity([$target1, $target2], \"test\", redirectOptions);\n});\n"
  },
  {
    "path": "test/src/4_Feature/Feature Value Functions.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {Data, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.todo(\"Value Functions\", (assert) => {\n\tconst testWidth = 10,\n\t\t$target1 = getTarget(),\n\t\t$target2 = getTarget();\n\n\tVelocity([$target1, $target2], {\n\t\twidth(i, total) {\n\t\t\treturn (i + 1) / total * testWidth;\n\t\t},\n\t});\n\n\tassert.equal(Data($target1).cache.width, parseFloat(testWidth as any) / 2, \"Function value #1 passed to tween.\");\n\tassert.equal(Data($target2).cache.width, parseFloat(testWidth as any), \"Function value #2 passed to tween.\");\n});\n"
  },
  {
    "path": "test/src/4_Feature/_module.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nQUnit.module(\"Feature\");\n"
  },
  {
    "path": "test/src/5_UIPack/Packaged Effect slideUp+Down.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {getPropertyValue, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.skip(\"Packaged Effect: slideUp/Down\", (assert) => {\n\tconst done = assert.async(4),\n\t\t$target1 = getTarget(),\n\t\t$target2 = getTarget(),\n\t\tinitialStyles = {\n\t\t\tdisplay: \"none\",\n\t\t\tpaddingTop: \"123px\",\n\t\t};\n\n\t$target1.style.display = initialStyles.display;\n\t$target1.style.paddingTop = initialStyles.paddingTop;\n\n\tVelocity($target1, \"slideDown\", {\n\t\tbegin(elements) {\n\t\t\tassert.deepEqual(elements, [$target1], \"slideDown: Begin callback returned.\");\n\n\t\t\tdone();\n\t\t},\n\t\tcomplete(elements) {\n\t\t\tassert.deepEqual(elements, [$target1], \"slideDown: Complete callback returned.\");\n\t\t\t//\t\t\tassert.equal(getPropertyValue($target1, \"display\"), Values.getDisplayType($target1), \"slideDown: display set to default.\");\n\t\t\tassert.notEqual(getPropertyValue($target1, \"height\"), 0, \"slideDown: height set.\");\n\t\t\tassert.equal(getPropertyValue($target1, \"paddingTop\"), initialStyles.paddingTop, \"slideDown: paddingTop set.\");\n\n\t\t\tdone();\n\t\t},\n\t\t//\t}).then(function(elements) {\n\t\t//\t\tassert.deepEqual(elements, [$target1], \"slideDown: Promise fulfilled.\");\n\t\t//\n\t\t//\t\tdone();\n\t});\n\n\tVelocity($target2, \"slideUp\", {\n\t\tbegin(elements) {\n\t\t\tassert.deepEqual(elements, [$target2], \"slideUp: Begin callback returned.\");\n\n\t\t\tdone();\n\t\t},\n\t\tcomplete(elements) {\n\t\t\tassert.deepEqual(elements, [$target2], \"slideUp: Complete callback returned.\");\n\t\t\tassert.equal(getPropertyValue($target2, \"display\"), 0, \"slideUp: display set to none.\");\n\t\t\tassert.notEqual(getPropertyValue($target2, \"height\"), 0, \"slideUp: height reset.\");\n\t\t\tassert.equal(getPropertyValue($target1, \"paddingTop\"), initialStyles.paddingTop, \"slideUp: paddingTop reset.\");\n\n\t\t\tdone();\n\t\t},\n\t\t//\t}).then(function(elements) {\n\t\t//\t\tassert.deepEqual(elements, [$target2], \"slideUp: Promise fulfilled.\");\n\t\t//\n\t\t//\t\tdone();\n\t});\n});\n"
  },
  {
    "path": "test/src/5_UIPack/UI Pack Call Options.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {completeCheckDuration, defaultOptions, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.skip(\"Call Options\", (assert) => {\n\tconst done = assert.async(2),\n\t\tUICallOptions1 = {\n\t\t\tdelay: 123,\n\t\t\tduration: defaultOptions.duration,\n\t\t\teasing: \"spring\", // Should get ignored\n\t\t},\n\t\t$target1 = getTarget();\n\n\t//assert.expect(1);\n\tVelocity($target1, \"transition.slideLeftIn\", UICallOptions1);\n\n\tsetTimeout(() => {\n\t\t// Note: We can do this because transition.slideLeftIn is composed of a single call.\n\t\t//\t\tassert.equal(Data($target1).opts.delay, UICallOptions1.delay, \"Whitelisted option passed in.\");\n\t\t//\t\tassert.notEqual(Data($target1).opts.easing, UICallOptions1.easing, \"Non-whitelisted option not passed in #1a.\");\n\t\t//\t\tassert.equal(!/velocity-animating/.test(Data($target1).className), true, \"Duration option passed in.\");\n\n\t\tdone();\n\t}, completeCheckDuration);\n\n\tconst UICallOptions2 = {\n\t\tstagger: 100,\n\t\tduration: defaultOptions.duration,\n\t\tbackwards: true,\n\t};\n\n\tconst $targets = [getTarget(), getTarget(), getTarget()];\n\tVelocity($targets, \"transition.slideLeftIn\", UICallOptions2);\n\n\tsetTimeout(() => {\n\t\t//\t\tassert.equal(Data($targets[0]).opts.delay, UICallOptions2.stagger * 2, \"Backwards stagger delay passed in #1a.\");\n\t\t//\t\tassert.equal(Data($targets[1]).opts.delay, UICallOptions2.stagger * 1, \"Backwards stagger delay passed in #1b.\");\n\t\t//\t\tassert.equal(Data($targets[2]).opts.delay, UICallOptions2.stagger * 0, \"Backwards stagger delay passed in #1c.\");\n\n\t\tdone();\n\t}, completeCheckDuration);\n});\n"
  },
  {
    "path": "test/src/5_UIPack/UI Pack Callbacks.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.skip(\"Callbacks\", (assert) => {\n\tconst done = assert.async(2),\n\t\t$targets = [getTarget(), getTarget()];\n\n\tassert.expect(3);\n\tVelocity($targets, \"transition.bounceIn\", {\n\t\tbegin(elements) {\n\t\t\tassert.deepEqual(elements, $targets, \"Begin callback returned.\");\n\n\t\t\tdone();\n\t\t},\n\t\tcomplete(elements) {\n\t\t\tassert.deepEqual(elements, $targets, \"Complete callback returned.\");\n\n\t\t\tdone();\n\t\t},\n\t\t//\t}).then(function(elements) {\n\t\t//\t\tassert.deepEqual(elements, $targets, \"Promise fulfilled.\");\n\t\t//\n\t\t//\t\tdone();\n\t});\n});\n"
  },
  {
    "path": "test/src/5_UIPack/UI Pack In+Out.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {asyncCheckDuration, completeCheckDuration, defaultOptions, getPropertyValue, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.skip(\"In/Out\", (assert) => {\n\tconst done = assert.async(2),\n\t\t$target1 = getTarget(),\n\t\t$target2 = getTarget(),\n\t\t$target3 = getTarget(),\n\t\t$target4 = getTarget(),\n\t\t$target5 = getTarget(),\n\t\t$target6 = getTarget();\n\n\tVelocity($target1, \"transition.bounceIn\", defaultOptions.duration);\n\n//\tVelocity($target2, \"transition.bounceIn\", {duration: defaultOptions.duration, display: \"inline\"});\n//\n//\tVelocity($target3, \"transition.bounceOut\", defaultOptions.duration);\n//\n//\tVelocity($target4, \"transition.bounceOut\", {duration: defaultOptions.duration, display: null});\n//\n//\t$target5.style.visibility = \"hidden\";\n//\tVelocity($target5, \"transition.bounceIn\", {duration: defaultOptions.duration, visibility: \"visible\"});\n//\n//\t$target6.style.visibility = \"visible\";\n//\tVelocity($target6, \"transition.bounceOut\", {duration: defaultOptions.duration, visibility: \"hidden\"});\n\n\tassert.expect(8);\n\tsetTimeout(() => {\n\t\tassert.notEqual(getPropertyValue($target3, \"display\"), 0, \"Out: display not prematurely set to none.\");\n\t\tassert.notEqual(getPropertyValue($target6, \"visibility\"), \"hidden\", \"Out: visibility not prematurely set to hidden.\");\n\n\t\tdone();\n\t}, asyncCheckDuration);\n\n\tsetTimeout(() => {\n\t\t//\t\tassert.equal(getPropertyValue($target1, \"display\"), Values.getDisplayType($target1), \"In: display set to default.\");\n\t\tassert.equal(getPropertyValue($target2, \"display\"), \"inline\", \"In: Custom inline value set.\");\n\n\t\tassert.equal(getPropertyValue($target3, \"display\"), 0, \"Out: display set to none.\");\n\t\t//\t\tassert.equal(getPropertyValue($target4, \"display\"), Values.getDisplayType($target3), \"Out: No display value set.\");\n\n\t\tassert.equal(getPropertyValue($target5, \"visibility\"), \"visible\", \"In: visibility set to visible.\");\n\t\tassert.equal(getPropertyValue($target6, \"visibility\"), \"hidden\", \"Out: visibility set to hidden.\");\n\n\t\tdone();\n\t}, completeCheckDuration);\n});\n"
  },
  {
    "path": "test/src/5_UIPack/UI Pack RegisterEffect.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {getPropertyValue, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.skip(\"RegisterEffect\", (assert) => {\n//\tconst done = assert.async(1),\n//\t\teffectDefaultDuration = 800;\n//\n//\tassert.expect(2);\n//\tVelocity.RegisterEffect(\"callout.twirl\", {\n//\t\tdefaultDuration: effectDefaultDuration,\n//\t\tcalls: [\n//\t\t\t[{rotateZ: 1080}, 0.5],\n//\t\t\t[{scaleX: 0.5}, 0.25, {easing: \"spring\"}],\n//\t\t\t[{scaleX: 1}, 0.25, {easing: \"spring\"}],\n//\t\t],\n//\t});\n//\n//\tconst $target1 = getTarget();\n//\tVelocity($target1, \"callout.twirl\");\n//\n//\tsetTimeout(() => {\n//\t\tassert.equal(parseFloat(getPropertyValue($target1, \"rotateZ\") as string), 1080, \"First call's property animated.\");\n//\t\tassert.equal(parseFloat(getPropertyValue($target1, \"scaleX\") as string), 1, \"Last call's property animated.\");\n//\n//\t\tdone();\n//\t}, effectDefaultDuration * 1.5);\n});\n"
  },
  {
    "path": "test/src/5_UIPack/UI Pack RunSequence.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity from \"velocity-animate\";\nimport {defaultProperties, getPropertyValue, getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.skip(\"RunSequence\", (assert) => {\n\t//\n\t//\tvar done = assert.async(1),\n\t//\t\t$target1 = getTarget(),\n\t//\t\t$target2 = getTarget(),\n\t//\t\t$target3 = getTarget(),\n\t//\t\tmySequence = [\n\t//\t\t\t{elements: $target1, properties: {opacity: defaultProperties.opacity}},\n\t//\t\t\t{elements: $target2, properties: {height: defaultProperties.height}},\n\t//\t\t\t{\n\t//\t\t\t\telements: $target3, properties: {width: defaultProperties.width}, options: {\n\t//\t\t\t\t\tdelay: 100,\n\t//\t\t\t\t\tsequenceQueue: false,\n\t//\t\t\t\t\tcomplete: function() {\n\t//\t\t\t\t\t\tassert.equal(parseFloat(getPropertyValue($target1, \"opacity\") as string), defaultProperties.opacity, \"First call's property animated.\");\n\t//\t\t\t\t\t\tassert.equal(parseFloat(getPropertyValue($target2, \"height\") as string), defaultProperties.height, \"Second call's property animated.\");\n\t//\t\t\t\t\t\tassert.equal(parseFloat(getPropertyValue($target3, \"width\") as string), defaultProperties.width, \"Last call's property animated.\");\n\t//\n\t//\t\t\t\t\t\tdone();\n\t//\t\t\t\t\t}\n\t//\t\t\t\t}\n\t//\t\t\t}\n\t//\t\t];\n\t//\n\t//\tassert.expect(3);\n\t//\tVelocity.RunSequence(mySequence);\n});\n"
  },
  {
    "path": "test/src/5_UIPack/_module.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nQUnit.module(\"UI Pack\");\n"
  },
  {
    "path": "test/src/6_Properties/Normalization property value reordering.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity, {HTMLorSVGElement} from \"velocity-animate\";\nimport {getTarget} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.skip(\"GenericReordering\", (assert) => {\n\t//\tfunction genericReordering(element: HTMLorSVGElement, propertyValue?: string): string | void {\n\t//\t\tif (propertyValue === undefined) {\n\t//\t\t\tpropertyValue = Velocity(element, \"style\", \"textShadow\");\n\t//\t\t\tconst split = propertyValue.split(/\\s/g),\n\t//\t\t\t\tfirstPart = split[0];\n\t//\t\t\tlet newValue = \"\";\n\t//\n\t//\t\t\tif (Velocity.CSS.ColorNames[firstPart]) {\n\t//\t\t\t\tsplit.shift();\n\t//\t\t\t\tsplit.push(firstPart);\n\t//\t\t\t\tnewValue = split.join(\" \");\n\t//\t\t\t} else if (firstPart.match(/^#|^hsl|^rgb|-gradient/)) {\n\t//\t\t\t\tconst matchedString = propertyValue.match(/(hsl.*\\)|#[\\da-fA-F]+|rgb.*\\)|.*gradient.*\\))\\s/g)[0];\n\t//\n\t//\t\t\t\tnewValue = propertyValue.replace(matchedString, \"\") + \" \" + matchedString.trim();\n\t//\t\t\t} else {\n\t//\t\t\t\tnewValue = propertyValue;\n\t//\t\t\t}\n\t//\t\t\treturn newValue;\n\t//\t\t}\n\t//\t}\n\t//\n\t//\tVelocity(\"registerNormalization\", \"Element\", \"genericReordering\", genericReordering);\n\t//\n\t//\tlet tests = [\n\t//\t\t{\n\t//\t\t\ttest: \"hsl(16, 100%, 66%) 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px hsl(16, 100%, 66%)\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"-webkit-linear-gradient(red, yellow) 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px -webkit-linear-gradient(rgba(255,0,0,1), rgba(255,255,0,1))\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"-o-linear-gradient(red, yellow) 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px -o-linear-gradient(rgba(255,0,0,1), rgba(255,255,0,1))\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"-moz-linear-gradient(red, yellow) 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px -moz-linear-gradient(rgba(255,0,0,1), rgba(255,255,0,1))\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"linear-gradient(red, yellow) 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px linear-gradient(rgba(255,0,0,1), rgba(255,255,0,1))\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"red 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px rgba(255,0,0,1)\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"#000000 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px rgba(0,0,0,1)\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"rgb(0, 0, 0) 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px rgba(0,0,0,1)\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"rgba(0, 0, 0, 1) 1px 1px 1px\",\n\t//\t\t\tresult: \"1px 1px 1px rgba(0,0,0,1)\",\n\t//\t\t}, {\n\t//\t\t\ttest: \"1px 1px 1px rgb(0, 0, 0)\",\n\t//\t\t\tresult: \"1px 1px 1px rgba(0,0,0,1)\",\n\t//\t\t},\n\t//\t];\n\t//\n\t//\tfor (let test of tests) {\n\t//\t\tlet element = getTarget();\n\t//\n\t//\t\telement.velocity(\"style\", \"textShadow\", test.test);\n\t//\t\tassert.equal(element.velocity(\"style\", \"genericReordering\"), test.result, test.test);\n\t//\t}\n});\n"
  },
  {
    "path": "test/src/6_Properties/Property Display.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity, {VelocityResult} from \"velocity-animate\";\nimport {getTarget, once} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Display\", (assert) => {\n\tconst done = assert.async(5);\n\n\tVelocity(getTarget(), \"style\", \"display\", \"none\")\n\t\t.velocity({display: \"block\"}, {\n\t\t\tprogress: once((elements: VelocityResult) => {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"display\"), \"block\", \"Display:'block' was set immediately.\");\n\n\t\t\t\tdone();\n\t\t\t}),\n\t\t});\n\n\tVelocity(getTarget(), \"style\", \"display\", \"none\")\n\t\t.velocity(\"style\", \"display\", \"auto\")\n\t\t.then((elements) => {\n\t\t\tassert.equal(elements[0].style.display, \"block\", \"Display:'auto' was understood.\");\n\t\t\tassert.equal(elements.velocity(\"style\", \"display\"), \"block\", \"Display:'auto' was cached as 'block'.\");\n\n\t\t\tdone();\n\t\t});\n\n\tVelocity(getTarget(), \"style\", \"display\", \"none\")\n\t\t.velocity(\"style\", \"display\", \"\")\n\t\t.then((elements) => {\n\t\t\tassert.equal(elements.velocity(\"style\", \"display\"), \"block\", \"Display:'' was reset correctly.\");\n\n\t\t\tdone();\n\t\t});\n\n\tVelocity(getTarget(), {display: \"none\"}, {\n\t\tprogress: once((elements: VelocityResult) => {\n\t\t\tassert.notEqual(elements.velocity(\"style\", \"display\"), \"none\", \"Display:'none' was not set immediately.\");\n\n\t\t\tdone();\n\t\t}),\n\t})\n\t\t.then((elements) => {\n\t\t\tassert.equal(elements.velocity(\"style\", \"display\"), \"none\", \"Display:'none' was set upon completion.\");\n\n\t\t\tdone();\n\t\t});\n});\n"
  },
  {
    "path": "test/src/6_Properties/Property Visibility.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity, {VelocityResult} from \"velocity-animate\";\nimport {getTarget, once} from \"../utilities\";\nimport \"./_module\";\n\nQUnit.test(\"Visibility\", (assert) => {\n\tconst done = assert.async(4);\n\n\tVelocity(getTarget(), \"style\", \"visibility\", \"hidden\")\n\t\t.velocity({visibility: \"visible\"}, {\n\t\t\tprogress: once((elements: VelocityResult) => {\n\t\t\t\tassert.equal(elements.velocity(\"style\", \"visibility\"), \"visible\", \"Visibility:'visible' was set immediately.\");\n\n\t\t\t\tdone();\n\t\t\t}),\n\t\t});\n\n\tVelocity(getTarget(), \"style\", \"visibility\", \"hidden\")\n\t\t.velocity(\"style\", \"visibility\", \"\")\n\t\t.then((elements) => {\n\t\t\t// NOTE: The test elements inherit \"hidden\", so while illogical it\n\t\t\t// is in fact correct.\n\t\t\tassert.equal(elements.velocity(\"style\", \"visibility\"), \"hidden\", \"Visibility:'' was reset correctly.\");\n\n\t\t\tdone();\n\t\t});\n\n\tVelocity(getTarget(), {visibility: \"hidden\"}, {\n\t\tprogress: once((elements: VelocityResult) => {\n\t\t\tassert.notEqual(elements.velocity(\"style\", \"visibility\"), \"visible\", \"Visibility:'hidden' was not set immediately.\");\n\n\t\t\tdone();\n\t\t}),\n\t})\n\t\t.then((elements) => {\n\t\t\tassert.equal(elements.velocity(\"style\", \"visibility\"), \"hidden\", \"Visibility:'hidden' was set upon completion.\");\n\n\t\t\tdone();\n\t\t});\n});\n"
  },
  {
    "path": "test/src/6_Properties/_module.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nQUnit.module(\"Properties\");\n"
  },
  {
    "path": "test/src/test.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\nimport \"./utilities\";\n\nimport \"./1_Core/_module\";\nimport \"./1_Core/Arguments\";\nimport \"./1_Core/End Value Caching\";\nimport \"./1_Core/End Value Setting\";\nimport \"./1_Core/Start Value Calculation\";\nimport \"./1_Core/Unit Calculation\";\n\nimport \"./2_Option/_module\";\nimport \"./2_Option/Option Begin\";\nimport \"./2_Option/Option Complete\";\nimport \"./2_Option/Option Delay\";\nimport \"./2_Option/Option Duration\";\nimport \"./2_Option/Option Easing\";\nimport \"./2_Option/Option Fps Limit\";\nimport \"./2_Option/Option Loop\";\nimport \"./2_Option/Option Progress\";\nimport \"./2_Option/Option Queue\";\nimport \"./2_Option/Option Repeat\";\nimport \"./2_Option/Option Speed\";\nimport \"./2_Option/Option Sync\";\n\nimport \"./3_Command/_module\";\nimport \"./3_Command/Command Finish\";\nimport \"./3_Command/Command Pause + Resume\";\nimport \"./3_Command/Command Reverse\";\nimport \"./3_Command/Command Scroll\";\nimport \"./3_Command/Command Stop\";\nimport \"./3_Command/Command Tween\";\n\nimport \"./4_Feature/_module\";\nimport \"./4_Feature/Feature Classname\";\nimport \"./4_Feature/Feature Colors\";\nimport \"./4_Feature/Feature Forcefeeding\";\nimport \"./4_Feature/Feature Promises\";\nimport \"./4_Feature/Feature Sequences\";\nimport \"./4_Feature/Feature Value Functions\";\n\nimport \"./5_UIPack/_module\";\nimport \"./5_UIPack/Packaged Effect slideUp+Down\";\nimport \"./5_UIPack/UI Pack Call Options\";\nimport \"./5_UIPack/UI Pack Callbacks\";\nimport \"./5_UIPack/UI Pack In+Out\";\nimport \"./5_UIPack/UI Pack RegisterEffect\";\nimport \"./5_UIPack/UI Pack RunSequence\";\n\nimport \"./6_Properties/_module\";\nimport \"./6_Properties/Normalization property value reordering\";\nimport \"./6_Properties/Property Display\";\nimport \"./6_Properties/Property Visibility\";\n"
  },
  {
    "path": "test/src/tsconfig.json",
    "content": "{\n    \"extends\": \"../../tsconfig.json\",\n    \"files\": [\n\t\t\"test.ts\"\n\t]\n}\n"
  },
  {
    "path": "test/src/utilities.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nimport \"qunit\";\n\nimport Velocity, { ElementData, VelocityOptions, VelocityProperties } from \"velocity-animate\";\n\ndeclare global {\n\tinterface QUnit {\n\t\ttodo(name: string, callback: (assert: Assert) => void): void;\n\t}\n\n\tinterface Assert {\n\t\tclose: {\n\t\t\t(actual: number, expected: number, maxDifference: number, message: string): void;\n\t\t\tpercent(actual: number, expected: number, maxPercentDifference: number, message: string): void;\n\t\t};\n\t\tnotClose: {\n\t\t\t(actual: number, expected: number, minDifference: number, message: string): void;\n\t\t\tpercent(actual: number, expected: number, minPercentDifference: number, message: string): void;\n\t\t};\n\t}\n}\n\nexport const $ = ((window as any).jQuery || (window as any).Zepto),\n\t$qunitStage = document.getElementById(\"qunit-stage\"),\n\tdefaultStyles = {\n\t\topacity: 1,\n\t\twidth: 1,\n\t\theight: 1,\n\t\tmarginBottom: 1,\n\t\tcolorGreen: 200,\n\t\ttextShadowBlur: 3,\n\t},\n\tdefaultProperties: VelocityProperties = {\n\t\topacity: String(defaultStyles.opacity / 2),\n\t\twidth: defaultStyles.width * 2 + \"px\",\n\t\theight: defaultStyles.height * 2 + \"px\",\n\t},\n\tdefaultOptions: VelocityOptions = {\n\t\tqueue: \"\",\n\t\tduration: 300,\n\t\teasing: \"swing\",\n\t\tbegin: null,\n\t\tcomplete: null,\n\t\tprogress: null,\n\t\tloop: false,\n\t\tdelay: 0,\n\t\tmobileHA: true,\n\t},\n\tasyncCheckDuration = (defaultOptions.duration as number) / 2,\n\tcompleteCheckDuration = (defaultOptions.duration as number) * 2,\n\tIE = (() => {\n\t\tif ((document as any).documentMode) {\n\t\t\treturn (document as any).documentMode as number;\n\t\t} else {\n\t\t\tfor (let i = 7; i > 0; i--) {\n\t\t\t\tlet div = document.createElement(\"div\");\n\n\t\t\t\tdiv.innerHTML = `<!${\"--\"}[if IE ${i}]><span></span><![endif]-->`;\n\t\t\t\tif (div.getElementsByTagName(\"span\").length) {\n\t\t\t\t\tdiv = null;\n\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t\tdiv = null;\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t})();\n\nconst targets: HTMLDivElement[] = [];\nlet asyncCount = 0;\n\nQUnit.config.reorder = false;\n\nexport function applyStartValues(element: HTMLElement, startValues: { [name: string]: string }) {\n\t$.each(startValues, (property, startValue) => {\n\t\telement.style[property] = startValue;\n\t});\n}\n\nexport function Data(element): ElementData {\n\treturn (element.jquery ? element[0] : element).velocityData;\n}\n\nexport function getNow(): number {\n\treturn performance && performance.now ? performance.now() : Date.now();\n}\n\nexport function getPropertyValue(element: HTMLElement, property: string): string {\n\treturn Velocity(element, \"style\", property);\n}\n\nexport function getTarget(startValues?: { [name: string]: string }): HTMLDivElement {\n\tconst div = document.createElement(\"div\") as HTMLDivElement;\n\n\tdiv.className = \"target\";\n\tdiv.style.opacity = String(defaultStyles.opacity);\n\tdiv.style.color = `rgb(125, ${defaultStyles.colorGreen}, 125)`;\n\tdiv.style.width = defaultStyles.width + \"px\";\n\tdiv.style.height = defaultStyles.height + \"px\";\n\tdiv.style.marginBottom = defaultStyles.marginBottom + \"px\";\n\tdiv.style.textShadow = `0px 0px ${defaultStyles.textShadowBlur}px red`;\n\t$qunitStage.appendChild(div);\n\ttargets.push(div);\n\tif (startValues) {\n\t\tapplyStartValues(div, startValues);\n\t}\n\n\treturn div;\n}\n\nexport function once(func): typeof func {\n\tlet done: boolean,\n\t\tresult: any;\n\n\treturn function(this: any, ...args: any[]) {\n\t\tif (!done) {\n\t\t\tresult = func.apply(this, args);\n\t\t\tfunc = done = true; // Don't care about type, just let the GC collect if possible\n\t\t}\n\n\t\treturn result;\n\t};\n}\n\nexport function sleep(ms: number) {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Create an asyn callback. Each callback must be independant of all others, and\n * gets it's own unique done() callback to use. This also requires a count of\n * the number of tests run, and the assert object used.\n * Call without any arguments to get a total count of tests requested.\n */\nexport function asyncTests(): number;\nexport function asyncTests(assert: Assert, count: number, callback: (done: () => void) => void): void;\nexport function asyncTests(assert?: Assert, count?: number, callback?: (done: () => void) => void): number {\n\tif (!assert) {\n\t\tconst oldCount = asyncCount;\n\n\t\tasyncCount = 0;\n\n\t\treturn oldCount;\n\t}\n\tconst done = assert.async(1);\n\n\tasyncCount += count;\n\tsetTimeout(() => {\n\t\tcallback(done);\n\t}, 1);\n}\n\nexport function isEmptyObject(variable): variable is {} {\n\tfor (const name in variable) {\n\t\tif (variable.hasOwnProperty(name)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nQUnit.testDone(() => {\n\ttry {\n\t\tdocument.querySelectorAll(\".velocity-animating\")\n\t\t\t.velocity(\"stop\");\n\t} catch {\n\t\t// We don't care if it fails.\n\t}\n\t// Free all targets requested by the current test.\n\twhile (targets.length) {\n\t\ttry {\n\t\t\t$qunitStage.removeChild(targets.pop());\n\t\t} catch {\n\t\t\t// We don't care if it fails.\n\t\t}\n\t}\n\t// Ensure we have reset the test counter.\n\tasyncTests();\n\t// Make sure Velocity goes back to defaults.\n\tVelocity.defaults.reset();\n});\n\n/* Cleanup */\nQUnit.done((details) => {\n\t//\t$(\".velocity-animating\").velocity(\"stop\");\n\tconsole.log(\"Total: \", details.total, \" Failed: \", details.failed, \" Passed: \", details.passed, \" Runtime: \", details.runtime);\n});\n\n/* Helpful redirect for testing custom and parallel queues. */\n// var $div2 = $(\"#DataBody-PropertiesDummy\");\n// $.fn.velocity.defaults.duration = 1000;\n// $div2.velocity(\"scroll\", { queue: \"test\" })\n// $div2.velocity({width: 100}, { queue: \"test\" })\n// $div2.velocity({ borderWidth: 50 }, { queue: \"test\" })\n// $div2.velocity({height: 20}, { queue: \"test\" })\n// $div2.velocity({marginLeft: 200}, { queue: \"test\" })\n// $div2.velocity({paddingTop: 60});\n// $div2.velocity({marginTop: 100});\n// $div2.velocity({paddingRight: 40});\n// $div2.velocity({marginTop: 0})\n// $div2.dequeue(\"test\")\n"
  },
  {
    "path": "test/test.js",
    "content": "/**\n * velocity-animate (C) 2014-2017 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('qunit'), require('velocity-animate')) :\n\ttypeof define === 'function' && define.amd ? define(['qunit', 'velocity-animate'], factory) :\n\t(factory(global.QUnit,global.Velocity));\n}(this, (function (qunit,Velocity) { 'use strict';\n\n\tVelocity = Velocity && Velocity.hasOwnProperty('default') ? Velocity['default'] : Velocity;\n\n\tvar $ = window.jQuery || window.Zepto,\n\t    $qunitStage = document.getElementById(\"qunit-stage\"),\n\t    defaultStyles = {\n\t    opacity: 1,\n\t    width: 1,\n\t    height: 1,\n\t    marginBottom: 1,\n\t    colorGreen: 200,\n\t    textShadowBlur: 3\n\t},\n\t    defaultProperties = {\n\t    opacity: String(defaultStyles.opacity / 2),\n\t    width: defaultStyles.width * 2 + \"px\",\n\t    height: defaultStyles.height * 2 + \"px\"\n\t},\n\t    defaultOptions = {\n\t    queue: \"\",\n\t    duration: 300,\n\t    easing: \"swing\",\n\t    begin: null,\n\t    complete: null,\n\t    progress: null,\n\t    loop: false,\n\t    delay: 0,\n\t    mobileHA: true\n\t},\n\t    asyncCheckDuration = defaultOptions.duration / 2,\n\t    completeCheckDuration = defaultOptions.duration * 2,\n\t    IE = function () {\n\t    if (document.documentMode) {\n\t        return document.documentMode;\n\t    } else {\n\t        for (var i = 7; i > 0; i--) {\n\t            var div = document.createElement(\"div\");\n\t            div.innerHTML = \"<!\" + \"--\" + \"[if IE \" + i + \"]><span></span><![endif]-->\";\n\t            if (div.getElementsByTagName(\"span\").length) {\n\t                div = null;\n\t                return i;\n\t            }\n\t            div = null;\n\t        }\n\t    }\n\t    return undefined;\n\t}();\n\tvar targets = [];\n\tvar asyncCount = 0;\n\tQUnit.config.reorder = false;\n\tfunction applyStartValues(element, startValues) {\n\t    $.each(startValues, function (property, startValue) {\n\t        element.style[property] = startValue;\n\t    });\n\t}\n\tfunction Data(element) {\n\t    return (element.jquery ? element[0] : element).velocityData;\n\t}\n\tfunction getNow() {\n\t    return performance && performance.now ? performance.now() : Date.now();\n\t}\n\tfunction getPropertyValue(element, property) {\n\t    return Velocity(element, \"style\", property);\n\t}\n\tfunction getTarget(startValues) {\n\t    var div = document.createElement(\"div\");\n\t    div.className = \"target\";\n\t    div.style.opacity = String(defaultStyles.opacity);\n\t    div.style.color = \"rgb(125, \" + defaultStyles.colorGreen + \", 125)\";\n\t    div.style.width = defaultStyles.width + \"px\";\n\t    div.style.height = defaultStyles.height + \"px\";\n\t    div.style.marginBottom = defaultStyles.marginBottom + \"px\";\n\t    div.style.textShadow = \"0px 0px \" + defaultStyles.textShadowBlur + \"px red\";\n\t    $qunitStage.appendChild(div);\n\t    targets.push(div);\n\t    if (startValues) {\n\t        applyStartValues(div, startValues);\n\t    }\n\t    return div;\n\t}\n\tfunction once(func) {\n\t    var done = void 0,\n\t        result = void 0;\n\t    return function () {\n\t        if (!done) {\n\t            for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t                args[_key] = arguments[_key];\n\t            }\n\n\t            result = func.apply(this, args);\n\t            func = done = true; // Don't care about type, just let the GC collect if possible\n\t        }\n\t        return result;\n\t    };\n\t}\n\tfunction sleep(ms) {\n\t    return new Promise(function (resolve) {\n\t        return setTimeout(resolve, ms);\n\t    });\n\t}\n\tfunction asyncTests(assert, count, callback) {\n\t    if (!assert) {\n\t        var oldCount = asyncCount;\n\t        asyncCount = 0;\n\t        return oldCount;\n\t    }\n\t    var done = assert.async(1);\n\t    asyncCount += count;\n\t    setTimeout(function () {\n\t        callback(done);\n\t    }, 1);\n\t}\n\tQUnit.testDone(function () {\n\t    try {\n\t        document.querySelectorAll(\".velocity-animating\").velocity(\"stop\");\n\t    } catch (_a) {}\n\t    // We don't care if it fails.\n\n\t    // Free all targets requested by the current test.\n\t    while (targets.length) {\n\t        try {\n\t            $qunitStage.removeChild(targets.pop());\n\t        } catch (_b) {\n\t            // We don't care if it fails.\n\t        }\n\t    }\n\t    // Ensure we have reset the test counter.\n\t    asyncTests();\n\t    // Make sure Velocity goes back to defaults.\n\t    Velocity.defaults.reset();\n\t});\n\t/* Cleanup */\n\tQUnit.done(function (details) {\n\t    //\t$(\".velocity-animating\").velocity(\"stop\");\n\t    console.log(\"Total: \", details.total, \" Failed: \", details.failed, \" Passed: \", details.passed, \" Runtime: \", details.runtime);\n\t});\n\t/* Helpful redirect for testing custom and parallel queues. */\n\t// var $div2 = $(\"#DataBody-PropertiesDummy\");\n\t// $.fn.velocity.defaults.duration = 1000;\n\t// $div2.velocity(\"scroll\", { queue: \"test\" })\n\t// $div2.velocity({width: 100}, { queue: \"test\" })\n\t// $div2.velocity({ borderWidth: 50 }, { queue: \"test\" })\n\t// $div2.velocity({height: 20}, { queue: \"test\" })\n\t// $div2.velocity({marginLeft: 200}, { queue: \"test\" })\n\t// $div2.velocity({paddingTop: 60});\n\t// $div2.velocity({marginTop: 100});\n\t// $div2.velocity({paddingRight: 40});\n\t// $div2.velocity({marginTop: 0})\n\t// $div2.dequeue(\"test\")\n\n\tQUnit.module(\"Core\");\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n\t  return typeof obj;\n\t} : function (obj) {\n\t  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t};\n\n\tQUnit.test(\"Arguments\", function (assert) {\n\t    var testComplete = function testComplete() {\n\t        // Do nothing\n\t    },\n\t        testDuration = 1000,\n\t        testEasing = \"easeInSine\",\n\t        testOptions = {\n\t        duration: 123,\n\t        easing: testEasing,\n\t        complete: testComplete\n\t    };\n\t    var result = void 0;\n\t    assert.expect(18);\n\t    /****************\n\t     Overloading\n\t     ****************/\n\t    result = Velocity(getTarget(), defaultProperties);\n\t    assert.ok(result.length, \"Overload variation #1a: Velocity(ELEMENT, {properties})\");\n\t    assert.ok(result.velocity.animations.length, \"Overload variation #1b: Velocity(element, {PROPERTIES})\");\n\t    result = Velocity(getTarget(), defaultProperties, testDuration);\n\t    assert.equal(result.velocity.animations[0].options.duration, testDuration, \"Overload variation #2a: Velocity(element, {properties}, DURATION<number>)\");\n\t    result = Velocity(getTarget(), defaultProperties, \"slow\");\n\t    assert.equal(result.velocity.animations[0].options.duration, 600, \"Overload variation #2b: Velocity(element, {properties}, DURATION<slow>)\");\n\t    result = Velocity(getTarget(), defaultProperties, \"normal\");\n\t    assert.equal(result.velocity.animations[0].options.duration, 400, \"Overload variation #2c: Velocity(element, {properties}, DURATION<normal>)\");\n\t    result = Velocity(getTarget(), defaultProperties, \"fast\");\n\t    assert.equal(result.velocity.animations[0].options.duration, 200, \"Overload variation #2d: Velocity(element, {properties}, DURATION<fast>)\");\n\t    result = Velocity(getTarget(), defaultProperties, testEasing);\n\t    assert.equal(_typeof(result.velocity.animations[0].options.easing), \"function\", \"Overload variation #3: Velocity(element, {properties}, EASING)\");\n\t    result = Velocity(getTarget(), defaultProperties, testComplete);\n\t    assert.equal(_typeof(result.velocity.animations[0].options.complete), \"function\", \"Overload variation #4: Velocity(element, {properties}, COMPLETE)\");\n\t    result = Velocity(getTarget(), defaultProperties, testDuration, [0.42, 0, 0.58, 1]);\n\t    assert.equal(result.velocity.animations[0].options.duration, testDuration, \"Overload variation #5a: Velocity(element, {properties}, DURATION, easing)\");\n\t    assert.equal(result.velocity.animations[0].options.easing(0.2, 0, 1), 0.0816598562658975, \"Overload variation #5b: Velocity(element, {properties}, duration, EASING)\");\n\t    result = Velocity(getTarget(), defaultProperties, testDuration, testComplete);\n\t    assert.equal(result.velocity.animations[0].options.duration, testDuration, \"Overload variation #6a: Velocity(element, {properties}, DURATION, complete)\");\n\t    assert.equal(result.velocity.animations[0].options.complete, testComplete, \"Overload variation #6b: Velocity(element, {properties}, duration, COMPLETE)\");\n\t    result = Velocity(getTarget(), defaultProperties, testDuration, testEasing, testComplete);\n\t    assert.equal(result.velocity.animations[0].options.duration, testDuration, \"Overload variation #7a: Velocity(element, {properties}, DURATION, easing, complete)\");\n\t    assert.equal(_typeof(result.velocity.animations[0].options.easing), \"function\", \"Overload variation #7b: Velocity(element, {properties}, duration, EASING, complete)\");\n\t    assert.equal(result.velocity.animations[0].options.complete, testComplete, \"Overload variation #7c: Velocity(element, {properties}, duration, easing, COMPLETE)\");\n\t    result = Velocity(getTarget(), defaultProperties, testOptions);\n\t    assert.equal(result.velocity.animations[0].options.duration, testOptions.duration, \"Overload variation #8: Velocity(element, {properties}, {OPTIONS})\");\n\t    Velocity({ elements: [getTarget()], properties: defaultProperties, options: testOptions });\n\t    assert.equal(result.velocity.animations[0].options.duration, testOptions.duration, \"Overload variation #9: Velocity({elements:[elements], properties:{properties}, options:{OPTIONS})\");\n\t    Velocity({ elements: [getTarget()], properties: \"stop\", options: testOptions });\n\t    assert.equal(result.velocity.animations[0].options.duration, testOptions.duration, \"Overload variation #10: Velocity({elements:[elements], properties:\\\"ACTION\\\", options:{OPTIONS})\");\n\t    //\tvar $target12 = getTarget();\n\t    //\tVelocity($target12, {opacity: [0.75, \"spring\", 0.25]}, testDuration);\n\t    //\tassert.equal(Data($target12).style.opacity.startValue, 0.25, \"Overload variation #10a.\");\n\t    //\tassert.equal(Data($target12).style.opacity.easing, \"spring\", \"Overload variation #10b.\");\n\t    //\tassert.equal(Data($target12).style.opacity.endValue, 0.75, \"Overload variation #10c.\");\n\t    //\tvar $target13 = getTarget();\n\t    //\tVelocity($target13, {opacity: [0.75, 0.25]}, testDuration);\n\t    //\tassert.equal(Data($target13).style.opacity.startValue, 0.25, \"Overload variation #11a.\");\n\t    //\tassert.equal(Data($target13).style.opacity.endValue, 0.75, \"Overload variation #11b.\");\n\t    //\tvar $target14 = getTarget();\n\t    //\tVelocity($target14, {opacity: [0.75, \"spring\"]}, testDuration);\n\t    //\tassert.equal(Data($target14).style.opacity.endValue, 0.75, \"Overload variation #12a.\");\n\t    //\tassert.equal(Data($target14).style.opacity.easing, \"spring\", \"Overload variation #12b.\");\n\t    //\tif ($) {\n\t    //\t\tvar $target17 = getTarget();\n\t    //\t\t$($target17).velocity(defaultProperties, testOptions);\n\t    //\t\tassert.deepEqual(Data($target17).opts, testOptions, \"$.fn.: Utility function variation #1: options object.\");\n\t    //\n\t    //\t\tvar $target18 = getTarget();\n\t    //\t\t$($target18).velocity({properties: defaultProperties, options: testOptions});\n\t    //\t\tassert.deepEqual(Data($target18).opts, testOptions, \"$.fn.: Utility function variation #2: single object.\");\n\t    //\n\t    //\t\tvar $target19 = getTarget();\n\t    //\t\t$($target19).velocity(defaultProperties, testDuration, testEasing, testComplete);\n\t    //\t\tassert.equal(Data($target19).opts.duration, testDuration, \"$.fn.: Utility function variation #2a.\");\n\t    //\t\tassert.equal(Data($target19).opts.easing, testEasing, \"$.fn.: Utility function variation #2b.\");\n\t    //\t\tassert.equal(Data($target19).opts.complete, testComplete, \"$.fn.: Utility function variation #2c.\");\n\t    //\n\t    //\t\tvar $target20 = getTarget();\n\t    //\t\tassert.equal($($target20).length, $($target20).velocity(defaultProperties, testDuration, testEasing, testComplete)\n\t    //\t\t.velocity(defaultProperties, testDuration, testEasing, testComplete).length, \"$.fn.: Elements passed back to the call stack.\");\n\t    //\t\t// TODO: Should check in a better way - but the prototype chain is now extended with a Promise so a standard (non-length) comparison *will* fail\n\t    //\t}\n\t});\n\n\tQUnit.test(\"End Value Caching\", function (assert) {\n\t    var done = assert.async(2),\n\t        newProperties = { height: \"50px\", width: \"250px\" };\n\t    assert.expect(4);\n\t    /* Called after the last call is complete (stale). Ensure that the newly-set (via $.css()) properties are used. */\n\t    Velocity(getTarget(newProperties), defaultProperties).then(function (elements) {\n\t        assert.equal(Data(elements[0]).cache.width, defaultProperties.width, \"Stale end value #1 wasn't pulled.\");\n\t        assert.equal(Data(elements[0]).cache.height, defaultProperties.height, \"Stale end value #2 wasn't pulled.\");\n\t        done();\n\t    });\n\t    Velocity(getTarget(), defaultProperties).velocity(newProperties).then(function (elements) {\n\t        /* Chained onto a previous call (fresh). */\n\t        assert.equal(Data(elements[0]).cache.width, newProperties.width, \"Chained end value #1 was pulled.\");\n\t        assert.equal(Data(elements[0]).cache.height, newProperties.height, \"Chained end value #2 was pulled.\");\n\t        done();\n\t    });\n\t});\n\n\tQUnit.test(\"End Value Setting\", function (assert) {\n\t    var done = assert.async(1);\n\t    /* Standard properties. */\n\t    Velocity(getTarget(), defaultProperties).then(function (elements) {\n\t        assert.equal(Velocity(elements[0], \"style\", \"width\"), defaultProperties.width, \"Standard end value #1 was set.\");\n\t        assert.equal(Velocity(elements[0], \"style\", \"opacity\"), defaultProperties.opacity, \"Standard end value #2 was set.\");\n\t        done();\n\t    });\n\t});\n\n\tQUnit.todo(\"Start Value Calculation\", function (assert) {\n\t    var testStartValues = {\n\t        paddingLeft: \"10px\",\n\t        height: \"100px\",\n\t        paddingRight: \"50%\",\n\t        marginLeft: \"100px\",\n\t        marginBottom: \"33%\",\n\t        marginTop: \"100px\",\n\t        lineHeight: \"30px\",\n\t        wordSpacing: \"40px\",\n\t        backgroundColor: \"rgb(123,0,0)\"\n\t    };\n\t    /* Properties not previously defined on the element. */\n\t    var $target1 = getTarget();\n\t    Velocity($target1, testStartValues);\n\t    assert.equal(Data($target1).cache.paddingLeft, testStartValues.paddingLeft, \"Undefined standard start value was calculated.\");\n\t    assert.equal(Data($target1).cache.backgroundColor, testStartValues.backgroundColor, \"Undefined start value hook was calculated.\");\n\t    /* Properties previously defined on the element. */\n\t    var $target2 = getTarget();\n\t    Velocity($target2, defaultProperties);\n\t    assert.equal(Data($target2).cache.width, parseFloat(defaultStyles.width), \"Defined start value #1 was calculated.\");\n\t    assert.equal(Data($target2).cache.opacity, parseFloat(defaultStyles.opacity), \"Defined start value #2 was calculated.\");\n\t    assert.equal(Data($target2).cache.color, parseFloat(defaultStyles.colorGreen), \"Defined hooked start value was calculated.\");\n\t    /* Properties that shouldn't cause start values to be unit-converted. */\n\t    var testPropertiesEndNoConvert = { paddingLeft: \"20px\", height: \"40px\", paddingRight: \"75%\" },\n\t        $target3 = getTarget();\n\t    applyStartValues($target3, testStartValues);\n\t    Velocity($target3, testPropertiesEndNoConvert);\n\t    assert.equal(Data($target3).cache.paddingLeft, parseFloat(testStartValues.paddingLeft), \"Start value #1 wasn't unit converted.\");\n\t    assert.equal(Data($target3).cache.height, parseFloat(testStartValues.height), \"Start value #2 wasn't unit converted.\");\n\t    //\t\t\tassert.deepEqual(Data($target3).cache.paddingRight.startValue, [Math.floor((parentWidth * parseFloat(testStartValues.paddingRight)) / 100), 0],\n\t    //\t\t\t \"Start value #3 was pattern matched.\");\n\t    /* Properties that should cause start values to be unit-converted. */\n\t    var testPropertiesEndConvert = { paddingLeft: \"20%\", height: \"40%\", lineHeight: \"0.5em\", wordSpacing: \"2rem\", marginLeft: \"10vw\", marginTop: \"5vh\", marginBottom: \"100px\" },\n\t        parentWidth = $qunitStage.clientWidth,\n\t        parentHeight = $qunitStage.clientHeight,\n\t        parentFontSize = Velocity($qunitStage, \"style\", \"fontSize\"),\n\t        remSize = parseFloat(Velocity(document.body, \"style\", \"fontSize\")),\n\t        $target4 = getTarget();\n\t    applyStartValues($target4, testStartValues);\n\t    Velocity($target4, testPropertiesEndConvert);\n\t    /* Long decimal results can be returned after unit conversion, and Velocity's code and the code here can differ in precision. So, we round floor values before comparison. */\n\t    //\t\t\tassert.deepEqual(Data($target4).cache.paddingLeft.startValue, [parseFloat(testStartValues.paddingLeft), 0],\n\t    //\t\t\t \"Horizontal property converted to %.\");\n\t    assert.equal(parseInt(Data($target4).cache.height, 10), Math.floor(parseFloat(testStartValues.height) / parentHeight * 100), \"Vertical property converted to %.\");\n\t    //\t\t\tassert.equal(Data($target4).cache.lineHeight.startValue, Math.floor(parseFloat(testStartValues.lineHeight) / parseFloat(parentFontSize)),\n\t    //\t\t\t \"Property converted to em.\");\n\t    //\t\t\tassert.equal(Data($target4).cache.wordSpacing.startValue, Math.floor(parseFloat(testStartValues.wordSpacing) / parseFloat(remSize)),\n\t    //\t\t\t \"Property converted to rem.\");\n\t    assert.equal(parseInt(Data($target4).cache.marginBottom, 10), parseFloat(testStartValues.marginBottom) / 100 * parseFloat($target4.parentElement.offsetWidth), \"Property converted to px.\");\n\t    //\t\t\tif (!(IE<=8) && !isAndroid) {\n\t    //\t\t\t\tassert.equal(Data($target4).cache.marginLeft.startValue, Math.floor(parseFloat(testStartValues.marginLeft) / window.innerWidth * 100),\n\t    //\t\t\t\t \"Horizontal property converted to vw.\");\n\t    //\t\t\t\tassert.equal(Data($target4).cache.marginTop.startValue, Math.floor(parseFloat(testStartValues.marginTop) / window.innerHeight * 100),\n\t    //\t\t\t\t \"Vertical property converted to vh.\");\n\t    //\t\t\t}\n\t    // TODO: Tests for auto-parameters as the units are no longer converted.\n\t    /* jQuery TRBL deferring. */\n\t    var testPropertiesTRBL = { left: \"1000px\" },\n\t        $TRBLContainer = document.createElement(\"div\");\n\t    $TRBLContainer.setAttribute(\"id\", \"TRBLContainer\");\n\t    $TRBLContainer.style.marginLeft = testPropertiesTRBL.left;\n\t    $TRBLContainer.style.width = \"100px\";\n\t    $TRBLContainer.style.height = \"100px\";\n\t    document.body.appendChild($TRBLContainer);\n\t    var $target5 = getTarget();\n\t    $target5.style.position = \"absolute\";\n\t    $TRBLContainer.appendChild($target5);\n\t    Velocity($target5, testPropertiesTRBL);\n\t    assert.equal(parseInt(Data($target5).cache.left, 10), Math.round(parseFloat(testPropertiesTRBL.left) + parseFloat(Velocity(document.body, \"style\", \"marginLeft\"))), \"TRBL value was deferred to jQuery.\");\n\t});\n\n\t/*! *****************************************************************************\n\tCopyright (c) Microsoft Corporation. All rights reserved.\n\tLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n\tthis file except in compliance with the License. You may obtain a copy of the\n\tLicense at http://www.apache.org/licenses/LICENSE-2.0\n\n\tTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n\tKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\n\tWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\n\tMERCHANTABLITY OR NON-INFRINGEMENT.\n\n\tSee the Apache Version 2.0 License for specific language governing permissions\n\tand limitations under the License.\n\t***************************************************************************** */\n\n\tfunction __awaiter(thisArg, _arguments, P, generator) {\n\t    return new (P || (P = Promise))(function (resolve, reject) {\n\t        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n\t        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n\t        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n\t        step((generator = generator.apply(thisArg, _arguments || [])).next());\n\t    });\n\t}\n\n\tvar _this = window;\n\tQUnit.test(\"Unit Calculation\", function (assert) {\n\t    // TODO: Add code and tests for operators - probably using calc() internally\n\t    //\t/* Standard properties with operators. */\n\t    //\tvar testIncrementWidth = \"5px\",\n\t    //\t\t\ttestDecrementOpacity = 0.25,\n\t    //\t\t\ttestMultiplyMarginBottom = 4,\n\t    //\t\t\ttestDivideHeight = 2;\n\t    //\n\t    //\tvar $target2 = getTarget();\n\t    //\tVelocity($target2, {width: \"+=\" + testIncrementWidth, opacity: \"-=\" + testDecrementOpacity, marginBottom: \"*=\" + testMultiplyMarginBottom, height: \"/=\" + testDivideHeight});\n\t    //\tsetTimeout(function() {\n\t    //\n\t    //\t\tassert.equal(Data($target2).style.width.endValue, defaultStyles.width + parseFloat(testIncrementWidth), \"Incremented end value was calculated.\");\n\t    //\t\tassert.equal(Data($target2).style.opacity.endValue, defaultStyles.opacity - testDecrementOpacity, \"Decremented end value was calculated.\");\n\t    //\t\tassert.equal(Data($target2).style.marginBottom.endValue, defaultStyles.marginBottom * testMultiplyMarginBottom, \"Multiplied end value was calculated.\");\n\t    //\t\tassert.equal(Data($target2).style.height.endValue, defaultStyles.height / testDivideHeight, \"Divided end value was calculated.\");\n\t    //\n\t    //\t\tdone();\n\t    //\t}, asyncCheckDuration);\n\t    asyncTests(assert, 2, function (done) {\n\t        return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n\t            var $target;\n\t            return regeneratorRuntime.wrap(function _callee$(_context) {\n\t                while (1) {\n\t                    switch (_context.prev = _context.next) {\n\t                        case 0:\n\t                            $target = getTarget();\n\n\t                            Velocity($target, { left: \"500px\" }, { duration: 10 });\n\t                            _context.next = 4;\n\t                            return sleep(100);\n\n\t                        case 4:\n\t                            assert.equal(getPropertyValue($target, \"left\"), \"500px\", \"Finished animated value with given pixels should be the same.\");\n\t                            Velocity($target, { left: \"0px\" }, { duration: 10 });\n\t                            _context.next = 8;\n\t                            return sleep(100);\n\n\t                        case 8:\n\t                            assert.equal(getPropertyValue($target, \"left\"), \"0px\", \"Finished animated value with 0px should be the same.\");\n\t                            done();\n\n\t                        case 10:\n\t                        case \"end\":\n\t                            return _context.stop();\n\t                    }\n\t                }\n\t            }, _callee, this);\n\t        }));\n\t    });\n\t    //\tasync(assert, 1, async (done) => {\n\t    //\t\tconst $target = getTarget();\n\t    //\n\t    //\t\tVelocity($target, {left: \"500px\"}, {duration: 10});\n\t    //\t\tawait sleep(100);\n\t    //\t\tVelocity($target, {left: \"0\"}, {duration: 10});\n\t    //\t\tawait sleep(100);\n\t    //\t\tassert.equal(getPropertyValue($target, \"left\"), \"0px\", \"Finished animated value without giving px, but only number as a string should be the same.\");\n\t    //\n\t    //\t\tdone();\n\t    //\t});\n\t    asyncTests(assert, 1, function (done) {\n\t        return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n\t            var $target;\n\t            return regeneratorRuntime.wrap(function _callee2$(_context2) {\n\t                while (1) {\n\t                    switch (_context2.prev = _context2.next) {\n\t                        case 0:\n\t                            $target = getTarget();\n\n\t                            Velocity($target, { left: \"500px\" }, { duration: 10 });\n\t                            _context2.next = 4;\n\t                            return sleep(100);\n\n\t                        case 4:\n\t                            Velocity($target, { left: 0 }, { duration: 10 });\n\t                            _context2.next = 7;\n\t                            return sleep(1000);\n\n\t                        case 7:\n\t                            assert.equal(getPropertyValue($target, \"left\"), \"0px\", \"Finished animated value given as number 0 should be the same as 0px.\");\n\t                            done();\n\n\t                        case 9:\n\t                        case \"end\":\n\t                            return _context2.stop();\n\t                    }\n\t                }\n\t            }, _callee2, this);\n\t        }));\n\t    });\n\t    asyncTests(assert, 2, function (done) {\n\t        return __awaiter(_this, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n\t            var $target;\n\t            return regeneratorRuntime.wrap(function _callee3$(_context3) {\n\t                while (1) {\n\t                    switch (_context3.prev = _context3.next) {\n\t                        case 0:\n\t                            $target = getTarget();\n\n\t                            Velocity($target, { left: 500 }, { duration: 10 });\n\t                            _context3.next = 4;\n\t                            return sleep(100);\n\n\t                        case 4:\n\t                            assert.equal(getPropertyValue($target, \"left\"), \"500px\", \"Finished animated value with given pixels should be the same.\");\n\t                            Velocity($target, { left: 0 }, { duration: 10 });\n\t                            _context3.next = 8;\n\t                            return sleep(100);\n\n\t                        case 8:\n\t                            assert.equal(getPropertyValue($target, \"left\"), \"0px\", \"Omitted pixels (px) when given animation should run properly.\");\n\t                            done();\n\n\t                        case 10:\n\t                        case \"end\":\n\t                            return _context3.stop();\n\t                    }\n\t                }\n\t            }, _callee3, this);\n\t        }));\n\t    });\n\t});\n\n\tQUnit.module(\"Option\");\n\n\tQUnit.test(\"Begin\", function (assert) {\n\t    asyncTests(assert, 1, function (done) {\n\t        var $targetSet = [getTarget(), getTarget()];\n\t        Velocity($targetSet, defaultProperties, {\n\t            duration: asyncCheckDuration,\n\t            begin: function begin(elements) {\n\t                assert.deepEqual(elements, $targetSet, \"Elements passed into callback.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tQUnit.test(\"Complete\", function (assert) {\n\t    asyncTests(assert, 1, function (done) {\n\t        var $targetSet = [getTarget(), getTarget()];\n\t        Velocity($targetSet, defaultProperties, {\n\t            duration: asyncCheckDuration,\n\t            complete: function complete(elements) {\n\t                assert.deepEqual(elements, $targetSet, \"Elements passed into callback.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tQUnit.test(\"Delay\", function (assert) {\n\t    var testDelay = 250;\n\t    asyncTests(assert, 1, function (done) {\n\t        var start = getNow();\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: defaultOptions.duration,\n\t            delay: testDelay,\n\t            begin: function begin(elements, activeCall) {\n\t                assert.close(getNow() - start, testDelay, 32, \"Delayed calls start after the correct delay.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        var start = getNow();\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: defaultOptions.duration,\n\t            delay: testDelay\n\t        }).velocity(defaultProperties, {\n\t            duration: defaultOptions.duration,\n\t            delay: testDelay,\n\t            begin: function begin(elements, activeCall) {\n\t                assert.close(getNow() - start, testDelay * 2 + defaultOptions.duration, 32, \"Chained delays start after the correct delay.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tQUnit.test(\"Duration\", function (assert) {\n\t    var testDuration = Velocity.defaults.duration;\n\t    asyncTests(assert, 1, function (done) {\n\t        var start = getNow();\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: testDuration,\n\t            complete: function complete(elements, activeCall) {\n\t                var time = getNow() - start;\n\t                assert.close(time, testDuration, 32, \"Calls run for the correct duration (~\" + Math.floor(time) + \"ms / \" + testDuration + \"ms).\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        var start = getNow();\n\t        Velocity(getTarget(), { width: [\"200px\", \"500px\"] }, {\n\t            duration: testDuration\n\t        }).velocity({ width: [\"500px\", \"200px\"] }, {\n\t            duration: testDuration,\n\t            complete: function complete(elements, activeCall) {\n\t                var time = getNow() - start;\n\t                assert.close(getNow() - start, testDuration * 2, 32, \"Chained durations run for the correct duration (~\" + Math.floor(time) + \"ms / \" + testDuration * 2 + \"ms).\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        var start = getNow();\n\t        Velocity(getTarget(), { width: [\"200px\", \"500px\"] }).velocity({ width: [\"500px\", \"200px\"] }).then(function () {\n\t            var time = getNow() - start;\n\t            assert.close(getNow() - start, testDuration * 2, 32, \"Chained durations with defaults run for the correct duration (~\" + Math.floor(time) + \"ms / \" + testDuration * 2 + \"ms).\");\n\t            done();\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tQUnit.test(\"Easing\", function (assert) {\n\t    asyncTests(assert, 1, function (done) {\n\t        var success = false;\n\t        try {\n\t            success = true;\n\t            Velocity(getTarget(), defaultProperties, { easing: \"fake\" });\n\t        } catch (e) {\n\t            success = false;\n\t        }\n\t        assert.ok(success, \"Fake easing string didn't throw error.\");\n\t        done();\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        var success = false;\n\t        try {\n\t            success = true;\n\t            Velocity(getTarget(), defaultProperties, { easing: [\"a\", 0.5, 0.5, 0.5] });\n\t            Velocity(getTarget(), defaultProperties, { easing: [0.5, 0.5, 0.5] });\n\t        } catch (e) {\n\t            success = false;\n\t        }\n\t        assert.ok(success, \"Invalid bezier curve didn't throw error.\");\n\t        done();\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        // TODO: Use a \"tween\" action?\n\t        /* Ensure that a properly-formatted bezier curve array returns a bezier function. */\n\t        var easingBezierArray = [0.27, -0.65, 0.78, 0.19],\n\t            easingBezierTestPercent = 0.25,\n\t            easingBezierTestValue = -0.23;\n\t        Velocity(getTarget(), defaultProperties, {\n\t            easing: easingBezierArray,\n\t            begin: function begin(elements, animation) {\n\t                assert.close(animation.options.easing(easingBezierTestPercent, 0, 1), easingBezierTestValue, 0.005, \"Array converted into bezier function.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        /* Ensure that a properly-formatted spring RK4 array returns a bezier function. */\n\t        var easingSpringRK4Array = [250, 12],\n\t            easingSpringRK4TestPercent = 0.25,\n\t            easingSpringRK4TestValue = 0.928;\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: 150,\n\t            easing: easingSpringRK4Array,\n\t            begin: function begin(elements, animation) {\n\t                assert.close(animation.options.easing(easingSpringRK4TestPercent, 0, 1), easingSpringRK4TestValue, 10, \"Array with duration converted into springRK4 function.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    // TODO: Get this working in Velocity - so it can be tested\n\t    //\tasync(assert, 1, (done) => {\n\t    //\tVelocity(getTarget(), defaultProperties, {\n\t    //\t\teasing: easingSpringRK4Array,\n\t    //\t\tbegin(elements, animation) {\n\t    //\t\t\tassert.equal(animation.duration, easingSpringRK4TestDuration, \"Array without duration converted into springRK4 duration.\");\n\t    //\t\t\tdone();\n\t    //\t\t}\n\t    //\t});\n\t    //\t});\n\t    asyncTests(assert, 1, function (done) {\n\t        /* Ensure that a properly-formatted step easing array returns a step function. */\n\t        var easingStepArray = [4],\n\t            easingStepTestPercent = 0.35,\n\t            easingStepTestValue = 0.25;\n\t        Velocity(getTarget(), defaultProperties, {\n\t            easing: easingStepArray,\n\t            begin: function begin(elements, animation) {\n\t                assert.close(animation.options.easing(easingStepTestPercent, 0, 1), easingStepTestValue, 0.05, \"Array converted into Step function.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 3, function (done) {\n\t        Velocity(getTarget(), { opacity: [0, \"during\", 1] }, {\n\t            duration: asyncCheckDuration,\n\t            begin: function begin(elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct begin value (easing:'during').\");\n\t            },\n\n\t            progress: once(function (elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 0, \"Correct progress value (easing:'during').\");\n\t            }),\n\t            complete: function complete(elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct complete value (easing:'during').\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 3, function (done) {\n\t        Velocity(getTarget(), { opacity: [0, \"at-start\", 1] }, {\n\t            duration: asyncCheckDuration,\n\t            begin: function begin(elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct begin value (easing:'at-start').\");\n\t            },\n\n\t            progress: once(function (elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 0, \"Correct progress value (easing:'at-start').\");\n\t            }),\n\t            complete: function complete(elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 0, \"Correct complete value (easing:'at-start').\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 3, function (done) {\n\t        Velocity(getTarget(), { opacity: [0, \"at-end\", 1] }, {\n\t            duration: asyncCheckDuration,\n\t            begin: function begin(elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct begin value (easing:'at-end').\");\n\t            },\n\n\t            progress: once(function (elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 1, \"Correct progress value (easing:'at-end').\");\n\t            }),\n\t            complete: function complete(elements) {\n\t                assert.equal(elements.velocity(\"style\", \"opacity\"), 0, \"Correct complete value (easing:'at-end').\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tvar _this$1 = window;\n\tQUnit.test(\"FPS Limit\", function (assert) {\n\t    return __awaiter(_this$1, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n\t        var count, $target, frameRates, testFrame, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, frameRate;\n\n\t        return regeneratorRuntime.wrap(function _callee$(_context) {\n\t            while (1) {\n\t                switch (_context.prev = _context.next) {\n\t                    case 0:\n\t                        count = void 0;\n\t                        $target = getTarget(), frameRates = [5, 15, 30, 60], testFrame = function testFrame(frameRate) {\n\t                            var counter = 0;\n\t                            Velocity.defaults.fpsLimit = frameRate;\n\t                            // Test if the frame rate is assigned succesfully.\n\t                            assert.equal(frameRate, Velocity.defaults.fpsLimit, \"Setting global fps limit to \" + frameRate);\n\t                            return Velocity($target, defaultProperties, {\n\t                                duration: 1000,\n\t                                progress: function progress() {\n\t                                    counter++;\n\t                                }\n\t                            }).then(function () {\n\t                                return counter;\n\t                            });\n\t                        };\n\n\t                        assert.expect(frameRates.length * 2);\n\t                        // Test if the limit is working for 60, 30, 15 and 5 fps.\n\t                        _iteratorNormalCompletion = true;\n\t                        _didIteratorError = false;\n\t                        _iteratorError = undefined;\n\t                        _context.prev = 6;\n\t                        _iterator = frameRates[Symbol.iterator]();\n\n\t                    case 8:\n\t                        if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {\n\t                            _context.next = 21;\n\t                            break;\n\t                        }\n\n\t                        frameRate = _step.value;\n\t                        _context.t0 = assert;\n\t                        _context.next = 13;\n\t                        return testFrame(frameRate);\n\n\t                    case 13:\n\t                        _context.t1 = count = _context.sent;\n\t                        _context.t2 = frameRate + 1;\n\t                        _context.t3 = _context.t1 <= _context.t2;\n\t                        _context.t4 = \"...counted \" + count + \" frames (\\xB11 frame)\";\n\n\t                        _context.t0.ok.call(_context.t0, _context.t3, _context.t4);\n\n\t                    case 18:\n\t                        _iteratorNormalCompletion = true;\n\t                        _context.next = 8;\n\t                        break;\n\n\t                    case 21:\n\t                        _context.next = 27;\n\t                        break;\n\n\t                    case 23:\n\t                        _context.prev = 23;\n\t                        _context.t5 = _context[\"catch\"](6);\n\t                        _didIteratorError = true;\n\t                        _iteratorError = _context.t5;\n\n\t                    case 27:\n\t                        _context.prev = 27;\n\t                        _context.prev = 28;\n\n\t                        if (!_iteratorNormalCompletion && _iterator.return) {\n\t                            _iterator.return();\n\t                        }\n\n\t                    case 30:\n\t                        _context.prev = 30;\n\n\t                        if (!_didIteratorError) {\n\t                            _context.next = 33;\n\t                            break;\n\t                        }\n\n\t                        throw _iteratorError;\n\n\t                    case 33:\n\t                        return _context.finish(30);\n\n\t                    case 34:\n\t                        return _context.finish(27);\n\n\t                    case 35:\n\t                    case \"end\":\n\t                        return _context.stop();\n\t                }\n\t            }\n\t        }, _callee, this, [[6, 23, 27, 35], [28,, 30, 34]]);\n\t    }));\n\t});\n\n\tQUnit.test(\"Loop\", function (assert) {\n\t    asyncTests(assert, 4, function (done) {\n\t        var testOptions = { loop: 2, delay: 100, duration: 100 },\n\t            start = getNow();\n\t        var _begin = 0,\n\t            _complete = 0,\n\t            loop = 0,\n\t            lastPercentComplete = 2;\n\t        Velocity(getTarget(), defaultProperties, {\n\t            loop: testOptions.loop,\n\t            delay: testOptions.delay,\n\t            duration: testOptions.duration,\n\t            begin: function begin() {\n\t                _begin++;\n\t            },\n\t            progress: function progress(elements, percentComplete) {\n\t                if (lastPercentComplete > percentComplete) {\n\t                    loop++;\n\t                }\n\t                lastPercentComplete = percentComplete;\n\t            },\n\t            complete: function complete() {\n\t                _complete++;\n\t            }\n\t        }).then(function () {\n\t            assert.equal(_begin, 1, \"Begin callback only called once.\");\n\t            assert.equal(loop, testOptions.loop * 2 - 1, \"Animation looped correct number of times (once each direction per loop).\");\n\t            assert.close(getNow() - start, (testOptions.delay + testOptions.duration) * loop, 32, \"Looping with 'delay' has correct duration.\");\n\t            assert.equal(_complete, 1, \"Complete callback only called once.\");\n\t            done();\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tQUnit.test(\"Progress\", function (assert) {\n\t    asyncTests(assert, 4, function (done) {\n\t        var $target = getTarget();\n\t        Velocity($target, defaultProperties, {\n\t            duration: asyncCheckDuration,\n\t            progress: once(function (elements, percentComplete, msRemaining) {\n\t                assert.deepEqual(elements, [$target], \"Elements passed into progress.\");\n\t                assert.deepEqual(this, [$target], \"Elements passed into progress as this.\"); // tslint:disable-line:no-invalid-this\n\t                assert.equal(percentComplete >= 0 && percentComplete <= 1, true, \"'percentComplete' passed into progress.\");\n\t                assert.equal(msRemaining > asyncCheckDuration - 50, true, \"'msRemaining' passed into progress.\");\n\t                done();\n\t            })\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tQUnit.test(\"Queue\", function (assert) {\n\t    var done = assert.async(4),\n\t        testQueue = \"custom\",\n\t        $target = getTarget(),\n\t        ignore = $target.velocity(\"style\", \"display\"),\n\t        // Force data creation\n\t    data = Data($target);\n\t    var anim1 = void 0,\n\t        anim2 = void 0;\n\t    assert.expect(7);\n\t    assert.ok(data.queueList[testQueue] === undefined, \"Custom queue is empty.\"); // Shouldn't exist\n\t    $target.velocity(defaultProperties, {\n\t        queue: testQueue,\n\t        begin: function begin() {\n\t            anim1 = true;\n\t        },\n\t        complete: function complete() {\n\t            anim1 = false;\n\t            assert.ok(!anim2, \"Queued animation isn't started early.\");\n\t            done();\n\t        }\n\t    });\n\t    assert.ok(data.queueList[testQueue] !== undefined, \"Custom queue was created.\"); // Should exist, but be \"null\"\n\t    $target.velocity(defaultProperties, {\n\t        queue: testQueue,\n\t        begin: function begin() {\n\t            anim2 = true;\n\t            assert.ok(anim1 === false, \"Queued animation starts after first.\");\n\t            done();\n\t        },\n\t        complete: function complete() {\n\t            anim2 = false;\n\t        }\n\t    });\n\t    assert.ok(data.queueList[testQueue], \"Custom queue grows.\"); // Should exist and point at the next animation\n\t    $target.velocity(defaultProperties, {\n\t        begin: function begin() {\n\t            assert.ok(anim1 === true, \"Different queue animation starts in parallel.\");\n\t            done();\n\t        },\n\t        complete: function complete() {\n\t        }\n\t    });\n\t    $target.velocity(defaultProperties, {\n\t        queue: false,\n\t        begin: function begin() {\n\t            assert.ok(anim1 === true, \"Queue:false animation starts in parallel.\");\n\t            done();\n\t        }\n\t    });\n\t});\n\n\tQUnit.test(\"Repeat\", function (assert) {\n\t    asyncTests(assert, 4, function (done) {\n\t        var testOptions = { repeat: 2, delay: 100, duration: 100 },\n\t            start = Date.now();\n\t        var _begin = 0,\n\t            _complete = 0,\n\t            repeat = 0;\n\t        Velocity(getTarget(), defaultProperties, {\n\t            repeat: testOptions.repeat,\n\t            delay: testOptions.delay,\n\t            duration: testOptions.duration,\n\t            begin: function begin() {\n\t                _begin++;\n\t            },\n\t            progress: function progress(elements, percentComplete) {\n\t                if (percentComplete === 1) {\n\t                    repeat++;\n\t                }\n\t            },\n\t            complete: function complete() {\n\t                _complete++;\n\t                assert.equal(_begin, 1, \"Begin callback only called once.\");\n\t                assert.equal(repeat, testOptions.repeat + 1, \"Animation repeated correct number of times (original plus repeats).\");\n\t                assert.close(Date.now() - start, (testOptions.delay + testOptions.duration) * (testOptions.repeat + 1), (testOptions.repeat + 1) * 16 + 32, \"Repeat with 'delay' has correct duration.\");\n\t                assert.equal(_complete, 1, \"Complete callback only called once.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tQUnit.test(\"Speed\", function (assert) {\n\t    var delay = 200,\n\t        duration = 400,\n\t        startDelay = getNow();\n\t    asyncTests(assert, 1, function (done) {\n\t        Velocity.defaults.speed = 3;\n\t        Velocity(getTarget(), defaultProperties, {\n\t            speed: 5,\n\t            begin: function begin(elements) {\n\t                assert.equal(elements.velocity.animations[0].options.speed, 5, \"Speed on options overrides default.\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: duration,\n\t            begin: function begin(elements) {\n\t                elements.__start = getNow();\n\t            },\n\t            complete: function complete(elements) {\n\t                var actual = getNow() - elements.__start,\n\t                    expected = duration / 3;\n\t                assert.close(actual, expected, 32, \"Velocity.defaults.speed change is respected. (\\xD73, \" + Math.floor(actual - expected) + \"ms \\xB132ms)\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: duration,\n\t            speed: 2,\n\t            begin: function begin(elements) {\n\t                elements.__start = getNow();\n\t            },\n\t            complete: function complete(elements) {\n\t                var actual = getNow() - elements.__start,\n\t                    expected = duration / 2;\n\t                assert.close(actual, expected, 32, \"Double speed animation lasts half as long. (\\xD72, \" + Math.floor(actual - expected) + \"ms \\xB132ms)\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: duration,\n\t            delay: delay,\n\t            speed: 2,\n\t            begin: function begin(elements) {\n\t                elements.__start = startDelay;\n\t            },\n\t            complete: function complete(elements) {\n\t                var actual = getNow() - elements.__start,\n\t                    expected = (duration + delay) / 2;\n\t                assert.close(actual, expected, 32, \"Delayed animation includes speed for delay. (\\xD72, \" + Math.floor(actual - expected) + \"ms \\xB132ms)\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: duration,\n\t            delay: -delay,\n\t            speed: 2,\n\t            begin: function begin(elements) {\n\t                elements.__start = startDelay;\n\t            },\n\t            complete: function complete(elements) {\n\t                var actual = getNow() - elements.__start,\n\t                    expected = (duration - delay) / 2;\n\t                assert.close(actual, expected, 32, \"Negative delay animation includes speed for delay. (\\xD72, \" + Math.floor(actual - expected) + \"ms \\xB132ms)\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: duration,\n\t            speed: 0.5,\n\t            begin: function begin(elements) {\n\t                elements.__start = getNow();\n\t            },\n\t            complete: function complete(elements) {\n\t                var actual = getNow() - elements.__start,\n\t                    expected = duration * 2;\n\t                // TODO: Really not happy with the allowed range - it sits around 40ms, but should be closer to 16ms\n\t                assert.close(actual, expected, 64, \"Half speed animation lasts twice as long. (\\xD7\\xBD, \" + Math.floor(actual - expected) + \"ms \\xB164ms)\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        Velocity(getTarget(), defaultProperties, {\n\t            duration: duration,\n\t            speed: 0,\n\t            progress: function progress(elements, percentComplete) {\n\t                if (!elements.__count) {\n\t                    elements.__start = percentComplete;\n\t                    elements.__count = 1;\n\t                } else {\n\t                    assert.equal(elements.__start, percentComplete, \"Frozen (speed:0) animation doesn't progress.\");\n\t                    elements.velocity(\"option\", \"speed\", 1) // Just in case \"stop\" is broken\n\t                    .velocity(\"stop\");\n\t                    done();\n\t                }\n\t            }\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tvar _this$2 = window;\n\tQUnit.test(\"Sync\", function (assert) {\n\t    asyncTests(assert, 1, function (done) {\n\t        return __awaiter(_this$2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n\t            var $target, $targetSet, _complete;\n\n\t            return regeneratorRuntime.wrap(function _callee$(_context) {\n\t                while (1) {\n\t                    switch (_context.prev = _context.next) {\n\t                        case 0:\n\t                            $target = getTarget(), $targetSet = [getTarget(), $target, getTarget()];\n\t                            _complete = false;\n\n\t                            Velocity($target, defaultProperties, {\n\t                                duration: 300,\n\t                                complete: function complete() {\n\t                                    _complete = true;\n\t                                }\n\t                            });\n\t                            Velocity($targetSet, defaultProperties, {\n\t                                sync: false,\n\t                                duration: 250\n\t                            });\n\t                            _context.next = 6;\n\t                            return sleep(275);\n\n\t                        case 6:\n\t                            assert.notOk(_complete, \"Sync 'false' animations don't wait for completion.\");\n\t                            done();\n\n\t                        case 8:\n\t                        case \"end\":\n\t                            return _context.stop();\n\t                    }\n\t                }\n\t            }, _callee, this);\n\t        }));\n\t    });\n\t    asyncTests(assert, 1, function (done) {\n\t        return __awaiter(_this$2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n\t            var $target, $targetSet, _complete2;\n\n\t            return regeneratorRuntime.wrap(function _callee2$(_context2) {\n\t                while (1) {\n\t                    switch (_context2.prev = _context2.next) {\n\t                        case 0:\n\t                            $target = getTarget(), $targetSet = [getTarget(), $target, getTarget()];\n\t                            _complete2 = false;\n\n\t                            Velocity($target, defaultProperties, {\n\t                                duration: 300,\n\t                                complete: function complete() {\n\t                                    _complete2 = true;\n\t                                }\n\t                            });\n\t                            Velocity($targetSet, defaultProperties, {\n\t                                sync: true,\n\t                                duration: 250,\n\t                                begin: function begin() {\n\t                                    assert.ok(_complete2, \"Sync 'true' animations wait for completion.\");\n\t                                    done();\n\t                                }\n\t                            });\n\n\t                        case 4:\n\t                        case \"end\":\n\t                            return _context2.stop();\n\t                    }\n\t                }\n\t            }, _callee2, this);\n\t        }));\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\tQUnit.module(\"Command\");\n\n\tvar _this$3 = window;\n\tQUnit.test(\"Finish\", function (assert) {\n\t    return __awaiter(_this$3, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {\n\t        var _this2 = this;\n\n\t        return regeneratorRuntime.wrap(function _callee5$(_context5) {\n\t            while (1) {\n\t                switch (_context5.prev = _context5.next) {\n\t                    case 0:\n\t                        asyncTests(assert, 1, function (done) {\n\t                            Velocity(getTarget(), \"finish\");\n\t                            assert.ok(true, \"Calling on an element that isn't animating doesn't cause an error.\");\n\t                            done();\n\t                        });\n\t                        asyncTests(assert, 1, function (done) {\n\t                            var $target = getTarget();\n\t                            Velocity($target, defaultProperties, defaultOptions);\n\t                            Velocity($target, { top: 0 }, defaultOptions);\n\t                            Velocity($target, { width: 0 }, defaultOptions);\n\t                            Velocity($target, \"finish\");\n\t                            assert.ok(true, \"Calling on an element that is animating doesn't cause an error.\");\n\t                            done();\n\t                        });\n\t                        asyncTests(assert, 2, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n\t                                var $target, complete1, complete2;\n\t                                return regeneratorRuntime.wrap(function _callee$(_context) {\n\t                                    while (1) {\n\t                                        switch (_context.prev = _context.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\t                                                complete1 = false, complete2 = false;\n\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    queue: \"test1\",\n\t                                                    complete: function complete() {\n\t                                                        complete1 = true;\n\t                                                    }\n\t                                                });\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    queue: \"test2\",\n\t                                                    complete: function complete() {\n\t                                                        complete2 = true;\n\t                                                    }\n\t                                                });\n\t                                                Velocity($target, \"finish\", \"test1\");\n\t                                                _context.next = 7;\n\t                                                return sleep(defaultOptions.duration / 2);\n\n\t                                            case 7:\n\t                                                assert.ok(complete1, \"Finish animation with correct queue.\");\n\t                                                assert.notOk(complete2, \"Don't finish animation with wrong queue.\");\n\t                                                done();\n\n\t                                            case 10:\n\t                                            case \"end\":\n\t                                                return _context.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 3, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n\t                                var $target, _begin, _complete;\n\n\t                                return regeneratorRuntime.wrap(function _callee2$(_context2) {\n\t                                    while (1) {\n\t                                        switch (_context2.prev = _context2.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\t                                                _begin = false, _complete = false;\n\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    begin: function begin() {\n\t                                                        _begin = true;\n\t                                                    },\n\t                                                    complete: function complete() {\n\t                                                        _complete = true;\n\t                                                    }\n\t                                                });\n\t                                                _context2.next = 5;\n\t                                                return sleep(500);\n\n\t                                            case 5:\n\t                                                Velocity($target, \"finish\");\n\t                                                assert.ok(_begin, \"Finish calls 'begin()' callback without delay.\");\n\t                                                assert.ok(_complete, \"Finish calls 'complete()' callback without delay.\");\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Finish animation with correct value.\");\n\t                                                done();\n\n\t                                            case 10:\n\t                                            case \"end\":\n\t                                                return _context2.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee2, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 3, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n\t                                var $target, _begin2, _complete2;\n\n\t                                return regeneratorRuntime.wrap(function _callee3$(_context3) {\n\t                                    while (1) {\n\t                                        switch (_context3.prev = _context3.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\t                                                _begin2 = false, _complete2 = false;\n\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    delay: 1000,\n\t                                                    begin: function begin() {\n\t                                                        _begin2 = true;\n\t                                                    },\n\t                                                    complete: function complete() {\n\t                                                        _complete2 = true;\n\t                                                    }\n\t                                                });\n\t                                                _context3.next = 5;\n\t                                                return sleep(500);\n\n\t                                            case 5:\n\t                                                Velocity($target, \"finish\");\n\t                                                assert.ok(_begin2, \"Finish calls 'begin()' callback with delay.\");\n\t                                                assert.ok(_complete2, \"Finish calls 'complete()' callback with delay.\");\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Finish animation with correct value before delay ends.\");\n\t                                                done();\n\n\t                                            case 10:\n\t                                            case \"end\":\n\t                                                return _context3.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee3, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 3, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {\n\t                                var $target;\n\t                                return regeneratorRuntime.wrap(function _callee4$(_context4) {\n\t                                    while (1) {\n\t                                        switch (_context4.prev = _context4.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\n\t                                                Velocity($target, { opacity: 0 }).velocity({ opacity: 1 }).velocity({ opacity: 0.25 }).velocity({ opacity: 0.75 }).velocity({ opacity: 0.5 });\n\t                                                Velocity($target, \"finish\");\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Finish once starts the second animation.\");\n\t                                                Velocity($target, \"finish\");\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Finish twice starts the third animation.\");\n\t                                                Velocity($target, \"finish\", true);\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"0.5\", \"Finish 'true' finishes all animations.\");\n\t                                                done();\n\n\t                                            case 9:\n\t                                            case \"end\":\n\t                                                return _context4.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee4, this);\n\t                            }));\n\t                        });\n\t                        assert.expect(asyncTests());\n\n\t                    case 7:\n\t                    case \"end\":\n\t                        return _context5.stop();\n\t                }\n\t            }\n\t        }, _callee5, this);\n\t    }));\n\t});\n\n\tvar _this$4 = window;\n\tQUnit.test(\"Pause + Resume\", function (assert) {\n\t    return __awaiter(_this$4, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {\n\t        var _this2 = this;\n\n\t        return regeneratorRuntime.wrap(function _callee5$(_context5) {\n\t            while (1) {\n\t                switch (_context5.prev = _context5.next) {\n\t                    case 0:\n\t                        asyncTests(assert, 2, function (done) {\n\t                            var $target = getTarget();\n\t                            Velocity($target, \"pause\");\n\t                            assert.ok(true, \"Calling \\\"pause\\\" on an element that isn't animating doesn't cause an error.\");\n\t                            Velocity($target, \"resume\");\n\t                            assert.ok(true, \"Calling \\\"resume\\\" on an element that isn't animating doesn't cause an error.\");\n\t                            done();\n\t                        });\n\t                        asyncTests(assert, 4, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n\t                                var $target, _progress;\n\n\t                                return regeneratorRuntime.wrap(function _callee$(_context) {\n\t                                    while (1) {\n\t                                        switch (_context.prev = _context.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\t                                                _progress = false;\n\n\t                                                Velocity($target, { opacity: 0 }, {\n\t                                                    duration: 250,\n\t                                                    progress: function progress() {\n\t                                                        _progress = true;\n\t                                                    }\n\t                                                });\n\t                                                Velocity($target, \"pause\");\n\t                                                _context.next = 6;\n\t                                                return sleep(50);\n\n\t                                            case 6:\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Property value unchanged after pause.\");\n\t                                                assert.notOk(_progress, \"Progress callback not run during pause.\");\n\t                                                Velocity($target, \"resume\");\n\t                                                _context.next = 11;\n\t                                                return sleep(300);\n\n\t                                            case 11:\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Tween completed after pause/resume.\");\n\t                                                assert.ok(_progress, \"Progress callback run after pause.\");\n\t                                                done();\n\n\t                                            case 14:\n\t                                            case \"end\":\n\t                                                return _context.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 3, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n\t                                var $target;\n\t                                return regeneratorRuntime.wrap(function _callee2$(_context2) {\n\t                                    while (1) {\n\t                                        switch (_context2.prev = _context2.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\n\t                                                Velocity($target, { opacity: 0 }, { duration: 250, delay: 250 });\n\t                                                Velocity($target, \"pause\");\n\t                                                _context2.next = 5;\n\t                                                return sleep(500);\n\n\t                                            case 5:\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Delayed property value unchanged after pause.\");\n\t                                                Velocity($target, \"resume\");\n\t                                                _context2.next = 9;\n\t                                                return sleep(100);\n\n\t                                            case 9:\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Delayed tween did not start early after pause.\");\n\t                                                _context2.next = 12;\n\t                                                return sleep(500);\n\n\t                                            case 12:\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"0\", \"Delayed tween completed after pause/resume.\");\n\t                                                done();\n\n\t                                            case 14:\n\t                                            case \"end\":\n\t                                                return _context2.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee2, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 1, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n\t                                var $target;\n\t                                return regeneratorRuntime.wrap(function _callee3$(_context3) {\n\t                                    while (1) {\n\t                                        switch (_context3.prev = _context3.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\n\t                                                Velocity($target, { opacity: 0 }, { queue: \"test\", duration: 250 });\n\t                                                Velocity(\"pause\", \"test\");\n\t                                                _context3.next = 5;\n\t                                                return sleep(300);\n\n\t                                            case 5:\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Pause 'queue' works globally.\");\n\t                                                done();\n\n\t                                            case 7:\n\t                                            case \"end\":\n\t                                                return _context3.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee3, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 1, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {\n\t                                var $target;\n\t                                return regeneratorRuntime.wrap(function _callee4$(_context4) {\n\t                                    while (1) {\n\t                                        switch (_context4.prev = _context4.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\n\t                                                Velocity($target, { opacity: 0 }).velocity(\"pause\");\n\t                                                _context4.next = 4;\n\t                                                return sleep(300);\n\n\t                                            case 4:\n\t                                                assert.equal(getPropertyValue($target, \"opacity\"), \"1\", \"Chained pause only pauses chained tweens.\");\n\t                                                done();\n\n\t                                            case 6:\n\t                                            case \"end\":\n\t                                                return _context4.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee4, this);\n\t                            }));\n\t                        });\n\t                        // TODO: Better global tests, queue: false, named queues\n\t                        //\t/* Ensure proper behavior with queue:false  */\n\t                        //\tvar $target4 = getTarget();\n\t                        //\tVelocity($target4, {opacity: 0}, {duration: 200});\n\t                        //\n\t                        //\tvar isResumed = false;\n\t                        //\n\t                        //\tawait sleep(100);\n\t                        //\tVelocity($target4, \"pause\");\n\t                        //\tVelocity($target4, {left: -20}, {\n\t                        //\t\tduration: 100,\n\t                        //\t\teasing: \"linear\",\n\t                        //\t\tqueue: false,\n\t                        //\t\tbegin: function(elements) {\n\t                        //\t\t\tassert.ok(true, \"Animation with {queue:false} will run regardless of previously paused animations.\");\n\t                        //\t\t}\n\t                        //\t});\n\t                        //\n\t                        //\tVelocity($target4, {top: 20}, {\n\t                        //\t\tduration: 100,\n\t                        //\t\teasing: \"linear\",\n\t                        //\t\tbegin: function(elements) {\n\t                        //\t\t\tassert.ok(isResumed, \"Queued animation began after previously paused animation completed\");\n\t                        //\t\t}\n\t                        //\t});\n\t                        //\n\t                        //\tawait sleep(100);\n\t                        //\n\t                        //\tisResumed = true;\n\t                        //\tVelocity($target4, \"resume\");\n\t                        //\tawait sleep(100);\n\t                        assert.expect(asyncTests());\n\n\t                    case 6:\n\t                    case \"end\":\n\t                        return _context5.stop();\n\t                }\n\t            }\n\t        }, _callee5, this);\n\t    }));\n\t});\n\n\tQUnit.test(\"Reverse\", function (assert) {\n\t    var $target = getTarget(),\n\t        opacity = $target.velocity(\"style\", \"opacity\"),\n\n\t    // Browsers don't always suffix, but Velocity does.\n\t    width = $target.velocity(\"style\", \"width\") === \"0\" ? \"0px\" : $target.velocity(\"style\", \"width\");\n\t    asyncTests(assert, 2, function (done) {\n\t        Velocity($target, defaultProperties, {\n\t            complete: function complete(elements) {\n\t                assert.equal(elements[0].velocity(\"style\", \"opacity\"), defaultProperties.opacity, \"Initial property #1 set correctly. (\" + defaultProperties.opacity + \")\");\n\t                assert.equal(elements[0].velocity(\"style\", \"width\"), defaultProperties.width, \"Initial property #2 set correctly. (\" + defaultProperties.width + \")\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 2, function (done) {\n\t        Velocity($target, \"reverse\", {\n\t            complete: function complete(elements) {\n\t                assert.equal(elements[0].velocity(\"style\", \"opacity\"), opacity, \"Reversed property #1 set correctly. (\" + opacity + \")\");\n\t                assert.equal(elements[0].velocity(\"style\", \"width\"), width, \"Reversed property #2 set correctly. (\" + width + \")\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    asyncTests(assert, 2, function (done) {\n\t        Velocity($target, \"reverse\", {\n\t            complete: function complete(elements) {\n\t                assert.equal(elements[0].velocity(\"style\", \"opacity\"), defaultProperties.opacity, \"Chained reversed property #1 set correctly. (\" + defaultProperties.opacity + \")\");\n\t                assert.equal(elements[0].velocity(\"style\", \"width\"), defaultProperties.width, \"Chained reversed property #2 set correctly. (\" + defaultProperties.width + \")\");\n\t                done();\n\t            }\n\t        });\n\t    });\n\t    assert.expect(asyncTests());\n\t});\n\n\t/* Window scrolling. */\n\tQUnit.skip(\"Scroll (Window)\", function (assert) {\n\t    //\tvar done = assert.async(4),\n\t    //\t\t$details = $(\"#details\"),\n\t    //\t\t$scrollTarget1 = $(\"<div>Scroll target #1. Should stop 50 pixels above this point.</div>\"),\n\t    //\t\t$scrollTarget2 = $(\"<div>Scroll target #2. Should stop 50 pixels before this point.</div>\"),\n\t    //\t\tscrollOffset = -50;\n\t    //\n\t    //\t$scrollTarget1\n\t    //\t\t.css({position: \"relative\", top: 3000, height: 100, paddingBottom: 10000})\n\t    //\t\t.appendTo($(\"body\"));\n\t    //\n\t    //\t$scrollTarget2\n\t    //\t\t.css({position: \"absolute\", top: 100, left: 3000, width: 100, paddingRight: 15000})\n\t    //\t\t.appendTo($(\"body\"));\n\t    //\n\t    //\t$scrollTarget1\n\t    //\t\t.velocity(\"scroll\", {\n\t    //\t\t\tduration: 500, offset: scrollOffset, complete: function() {\n\t    //\t\t\t\tassert.equal(Math.abs(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyTop]\n\t    //\t\t\t\t - ($scrollTarget1.offset().top + scrollOffset)) <= 100, true, \"Page scrolled top with a scroll offset.\");\n\t    //\n\t    //\t\t\t\tdone();\n\t    //\t\t\t}\n\t    //\t\t})\n\t    //\t\t.velocity({opacity: 0.5}, function() {\n\t    //\t\t\t$details\n\t    //\t\t\t\t.velocity({opacity: 0.5}, 500)\n\t    //\t\t\t\t.velocity(\"scroll\", 500)\n\t    //\t\t\t\t.velocity({opacity: 1}, 500, function() {\n\t    //\t\t\t\t\t//alert(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyTop] + \" \" + ($details.offset().top + scrollOffset))\n\t    //\t\t\t\t\tassert.equal(Math.abs(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyTop]\n\t    //\t\t\t\t\t - ($details.offset().top + scrollOffset)) <= 100, true, \"Page scroll top was chained.\");\n\t    //\n\t    //\t\t\t\t\tdone();\n\t    //\n\t    //\t\t\t\t\t//$scrollTarget1.remove();\n\t    //\n\t    //\t\t\t\t\t$scrollTarget2\n\t    //\t\t\t\t\t\t.velocity(\"scroll\", {\n\t    //\t\t\t\t\t\t\tduration: 500, axis: \"x\", offset: scrollOffset, complete: function() {\n\t    //\t\t\t\t\t\t\t\t/* Phones can reposition the browser's scroll position by a 10 pixels or so, so we just check for a value that's within that range. */\n\t    //\t\t\t\t\t\t\t\tassert.equal(Math.abs(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyLeft]\n\t    //\t\t\t\t\t\t\t\t - ($scrollTarget2.offset().left + scrollOffset)) <= 100, true, \"Page scrolled left with a scroll offset.\");\n\t    //\n\t    //\t\t\t\t\t\t\t\tdone();\n\t    //\t\t\t\t\t\t\t}\n\t    //\t\t\t\t\t\t})\n\t    //\t\t\t\t\t\t.velocity({opacity: 0.5}, function() {\n\t    //\t\t\t\t\t\t\t$details\n\t    //\t\t\t\t\t\t\t\t.velocity({opacity: 0.5}, 500)\n\t    //\t\t\t\t\t\t\t\t.velocity(\"scroll\", {duration: 500, axis: \"x\"})\n\t    //\t\t\t\t\t\t\t\t.velocity({opacity: 1}, 500, function() {\n\t    //\t\t\t\t\t\t\t\t\tassert.equal(Math.abs(Velocity.State.scrollAnchor[Velocity.State.scrollPropertyLeft]\n\t    //\t\t\t\t\t\t\t\t\t - ($details.offset().left + scrollOffset)) <= 100, true, \"Page scroll left was chained.\");\n\t    //\n\t    //\t\t\t\t\t\t\t\t\tdone();\n\t    //\t\t\t\t\t\t\t\t});\n\t    //\t\t\t\t\t\t});\n\t    //\t\t\t\t});\n\t    //\t\t});\n\t});\n\t/* Element scrolling. */\n\tQUnit.skip(\"Scroll (Element)\", function (assert) {\n\t    //\tvar done = assert.async(2),\n\t    //\t\t$scrollTarget1 = $(\"\\\n\t    //\t\t\t\t\t<div id='scroller'>\\\n\t    //\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t    //\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t    //\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t    //\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t    //\t\t\t\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n\t    //\t\t\t\t\t\t<div id='scrollerChild1'>\\\n\t    //\t\t\t\t\t\t\tStop #1\\\n\t    //\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t</div>\\\n\t    //\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\t<div id='scrollerChild2'>\\\n\t    //\t\t\t\t\t\t\tStop #2\\\n\t    //\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t</div>\\\n\t    //\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t</div>\\\n\t    //\t\t\t\t\");\n\t    //\n\t    //\tassert.expect(2);\n\t    //\t$scrollTarget1\n\t    //\t\t.css({position: \"absolute\", backgroundColor: \"white\", top: 100, left: \"50%\", width: 500, height: 100, overflowY: \"scroll\"})\n\t    //\t\t.appendTo($(\"body\"));\n\t    //\n\t    //\t/* Test with a jQuery object container. */\n\t    //\t$(\"#scrollerChild1\").velocity(\"scroll\", {\n\t    //\t\tcontainer: $(\"#scroller\"), duration: 750, complete: function() {\n\t    //\t\t\t/* Test with a raw DOM element container. */\n\t    //\t\t\t$(\"#scrollerChild2\").velocity(\"scroll\", {\n\t    //\t\t\t\tcontainer: $(\"#scroller\")[0], duration: 750, complete: function() {\n\t    //\t\t\t\t\t/* This test is purely visual. */\n\t    //\t\t\t\t\tassert.ok(true);\n\t    //\n\t    //\t\t\t\t\t$scrollTarget1.remove();\n\t    //\n\t    //\t\t\t\t\tvar $scrollTarget2 = $(\"\\\n\t    //\t\t\t\t\t\t\t\t\t<div id='scroller'>\\\n\t    //\t\t\t\t\t\t\t\t\t\t<div id='scrollerChild1' style='float: left; width: 20%;'>\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tStop #1\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tcccccccccccccccccccccccccccccccccccccccccccccccccccccccc\\\n\t    //\t\t\t\t\t\t\t\t\t\t</div>\\\n\t    //\t\t\t\t\t\t\t\t\t\t<div id='scrollerChild2' style='float: right; width: 20%;'>\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tStop #2\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\t\t\t\t\tdddddddddddddddddddddddddddddddddddddddddddddddddddddddd\\\n\t    //\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\t\t\t\t\t\teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\\\n\t    //\t\t\t\t\t\t\t\t\t\t</div>\\\n\t    //\t\t\t\t\t\t\t\t\t</div>\\\n\t    //\t\t\t\t\t\t\t\t\");\n\t    //\n\t    //\t\t\t\t\t$scrollTarget2\n\t    //\t\t\t\t\t\t.css({position: \"absolute\", backgroundColor: \"white\", top: 100, left: \"50%\", width: 100, height: 500, overflowX: \"scroll\"})\n\t    //\t\t\t\t\t\t.appendTo($(\"body\"));\n\t    //\n\t    //\t\t\t\t\t/* Test with a jQuery object container. */\n\t    //\t\t\t\t\t$(\"#scrollerChild2\").velocity(\"scroll\", {\n\t    //\t\t\t\t\t\taxis: \"x\", container: $(\"#scroller\"), duration: 750, complete: function() {\n\t    //\t\t\t\t\t\t\t/* Test with a raw DOM element container. */\n\t    //\t\t\t\t\t\t\t$(\"#scrollerChild1\").velocity(\"scroll\", {\n\t    //\t\t\t\t\t\t\t\taxis: \"x\", container: $(\"#scroller\")[0], duration: 750, complete: function() {\n\t    //\t\t\t\t\t\t\t\t\t/* This test is purely visual. */\n\t    //\t\t\t\t\t\t\t\t\tassert.ok(true);\n\t    //\n\t    //\t\t\t\t\t\t\t\t\t$scrollTarget2.remove();\n\t    //\n\t    //\t\t\t\t\t\t\t\t\tdone();\n\t    //\t\t\t\t\t\t\t\t}\n\t    //\t\t\t\t\t\t\t});\n\t    //\t\t\t\t\t\t}\n\t    //\t\t\t\t\t});\n\t    //\n\t    //\t\t\t\t\tdone();\n\t    //\t\t\t\t}\n\t    //\t\t\t});\n\t    //\t\t}\n\t    //\t});\n\t});\n\n\tvar _this$5 = window;\n\tQUnit.test(\"Stop\", function (assert) {\n\t    return __awaiter(_this$5, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee6() {\n\t        var _this2 = this;\n\n\t        return regeneratorRuntime.wrap(function _callee6$(_context6) {\n\t            while (1) {\n\t                switch (_context6.prev = _context6.next) {\n\t                    case 0:\n\t                        asyncTests(assert, 1, function (done) {\n\t                            Velocity(getTarget(), \"stop\");\n\t                            assert.ok(true, \"Calling on an element that isn't animating doesn't cause an error.\");\n\t                            done();\n\t                        });\n\t                        asyncTests(assert, 1, function (done) {\n\t                            var $target = getTarget();\n\t                            Velocity($target, defaultProperties, defaultOptions);\n\t                            Velocity($target, { top: 0 }, defaultOptions);\n\t                            Velocity($target, { width: 0 }, defaultOptions);\n\t                            Velocity($target, \"stop\");\n\t                            assert.ok(true, \"Calling on an element that is animating doesn't cause an error.\");\n\t                            done();\n\t                        });\n\t                        asyncTests(assert, 1, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n\t                                var $target, startOpacity;\n\t                                return regeneratorRuntime.wrap(function _callee$(_context) {\n\t                                    while (1) {\n\t                                        switch (_context.prev = _context.next) {\n\t                                            case 0:\n\t                                                $target = getTarget(), startOpacity = getPropertyValue($target, \"opacity\");\n\n\t                                                Velocity($target, { opacity: [0, 1] }, defaultOptions);\n\t                                                _context.next = 4;\n\t                                                return sleep(defaultOptions.duration / 2);\n\n\t                                            case 4:\n\t                                                Velocity($target, \"stop\");\n\t                                                assert.close(parseFloat(getPropertyValue($target, \"opacity\")), parseFloat(startOpacity) / 2, 0.1, \"Animation runs until stopped.\");\n\t                                                done();\n\n\t                                            case 7:\n\t                                            case \"end\":\n\t                                                return _context.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 1, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n\t                                var $target, _begin;\n\n\t                                return regeneratorRuntime.wrap(function _callee2$(_context2) {\n\t                                    while (1) {\n\t                                        switch (_context2.prev = _context2.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\t                                                _begin = false;\n\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    delay: 1000,\n\t                                                    begin: function begin() {\n\t                                                        _begin = true;\n\t                                                    }\n\t                                                });\n\t                                                _context2.next = 5;\n\t                                                return sleep(500);\n\n\t                                            case 5:\n\t                                                Velocity($target, \"stop\");\n\t                                                assert.notOk(_begin, \"Stop animation before delay ends.\");\n\t                                                done();\n\n\t                                            case 8:\n\t                                            case \"end\":\n\t                                                return _context2.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee2, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 2, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n\t                                var $target, complete1, complete2;\n\t                                return regeneratorRuntime.wrap(function _callee3$(_context3) {\n\t                                    while (1) {\n\t                                        switch (_context3.prev = _context3.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\t                                                complete1 = false, complete2 = false;\n\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    queue: \"test1\",\n\t                                                    complete: function complete() {\n\t                                                        complete1 = true;\n\t                                                    }\n\t                                                });\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    queue: \"test2\",\n\t                                                    complete: function complete() {\n\t                                                        complete2 = true;\n\t                                                    }\n\t                                                });\n\t                                                Velocity($target, \"stop\", \"test1\");\n\t                                                _context3.next = 7;\n\t                                                return sleep(defaultOptions.duration * 2);\n\n\t                                            case 7:\n\t                                                assert.ok(complete2, \"Stop animation with correct queue.\");\n\t                                                assert.notOk(complete1, \"Don't stop animation with wrong queue.\");\n\t                                                done();\n\n\t                                            case 10:\n\t                                            case \"end\":\n\t                                                return _context3.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee3, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 1, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {\n\t                                var $target, begin1, begin2;\n\t                                return regeneratorRuntime.wrap(function _callee4$(_context4) {\n\t                                    while (1) {\n\t                                        switch (_context4.prev = _context4.next) {\n\t                                            case 0:\n\t                                                $target = getTarget();\n\t                                                begin1 = false, begin2 = false;\n\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    begin: function begin() {\n\t                                                        begin1 = true;\n\t                                                    }\n\t                                                });\n\t                                                Velocity($target, { width: \"500px\" }, {\n\t                                                    begin: function begin() {\n\t                                                        begin2 = true;\n\t                                                    }\n\t                                                });\n\t                                                Velocity($target, \"stop\", true);\n\t                                                _context4.next = 7;\n\t                                                return sleep(defaultOptions.duration * 2);\n\n\t                                            case 7:\n\t                                                assert.notOk(begin1 || begin2, \"Stop 'true' stops all animations.\");\n\t                                                done();\n\n\t                                            case 9:\n\t                                            case \"end\":\n\t                                                return _context4.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee4, this);\n\t                            }));\n\t                        });\n\t                        asyncTests(assert, 2, function (done) {\n\t                            return __awaiter(_this2, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {\n\t                                var $target, anim, begin1, begin2;\n\t                                return regeneratorRuntime.wrap(function _callee5$(_context5) {\n\t                                    while (1) {\n\t                                        switch (_context5.prev = _context5.next) {\n\t                                            case 0:\n\t                                                $target = getTarget(), anim = Velocity($target, { opacity: [0, 1] }, {\n\t                                                    queue: \"test\",\n\t                                                    begin: function begin() {\n\t                                                        begin1 = true;\n\t                                                    }\n\t                                                });\n\t                                                begin1 = false, begin2 = false;\n\n\t                                                Velocity($target, { opacity: [0, 1] }, {\n\t                                                    begin: function begin() {\n\t                                                        begin2 = true;\n\t                                                    }\n\t                                                });\n\t                                                anim.velocity(\"stop\");\n\t                                                _context5.next = 6;\n\t                                                return sleep(defaultOptions.duration * 2);\n\n\t                                            case 6:\n\t                                                assert.notOk(begin1, \"Stop without arguments on a chain stops chain animations.\");\n\t                                                assert.ok(begin2, \"Stop without arguments on a chain doesn't stop other animations.\");\n\t                                                done();\n\n\t                                            case 9:\n\t                                            case \"end\":\n\t                                                return _context5.stop();\n\t                                        }\n\t                                    }\n\t                                }, _callee5, this);\n\t                            }));\n\t                        });\n\t                        assert.expect(asyncTests());\n\n\t                    case 8:\n\t                    case \"end\":\n\t                        return _context6.stop();\n\t                }\n\t            }\n\t        }, _callee6, this);\n\t    }));\n\t});\n\n\tQUnit.test(\"Tween\", function (assert) {\n\t    var $target1 = getTarget(),\n\t        startOpacity = $target1.style.opacity;\n\t    assert.expect(11);\n\t    assert.raises(function () {\n\t        return Velocity(\"tween\", \"invalid\");\n\t    }, \"Invalid percentComplete throws an error.\");\n\t    assert.raises(function () {\n\t        return Velocity([$target1, $target1], \"tween\", \"invalid\");\n\t    }, \"Passing more than one target throws an error.\");\n\t    assert.raises(function () {\n\t        return Velocity(\"tween\", 0, [\"invalid\"]);\n\t    }, \"Invalid propertyMap throws an error.\");\n\t    assert.raises(function () {\n\t        return Velocity(\"tween\", 0, \"invalid\", 1);\n\t    }, \"Property without an element must be forcefed or throw an error.\");\n\t    assert.equal($target1.velocity(\"tween\", 0.5, \"opacity\", [1, 0], \"linear\"), \"0.5\", \"Calling on an chain returns the correct value.\");\n\t    assert.equal(Velocity($target1, \"tween\", 0.5, \"opacity\", [1, 0], \"linear\"), \"0.5\", \"Calling with an element returns the correct value.\");\n\t    assert.equal(Velocity(\"tween\", 0.5, \"opacity\", [1, 0], \"linear\"), \"0.5\", \"Calling without an element returns the correct value.\");\n\t    assert.equal($target1.style.opacity, startOpacity, \"Ensure that the element is not altered.\");\n\t    assert.equal(_typeof(Velocity($target1, \"tween\", 0.5, \"opacity\", [1, 0], \"linear\")), \"string\", \"Calling a single property returns a value.\");\n\t    assert.equal(_typeof(Velocity($target1, \"tween\", 0.5, { opacity: [1, 0] }, \"linear\")), \"object\", \"Calling a propertiesMap returns an object.\");\n\t    assert.deepEqual($target1.velocity(\"tween\", 0.5, { opacity: [1, 0] }, \"linear\"), Velocity($target1, \"tween\", 0.5, { opacity: [1, 0] }, \"linear\"), \"Calling directly returns the same as a chain.\");\n\t});\n\n\tQUnit.module(\"Feature\");\n\n\tQUnit.test(\"'velocity-animating' Classname\", function (assert) {\n\t    var done = assert.async(1);\n\t    Velocity(getTarget(), defaultProperties, {\n\t        begin: function begin(elements) {\n\t            assert.equal(/velocity-animating/.test(elements[0].className), true, \"Class added.\");\n\t        },\n\t        complete: function complete(elements) {\n\t            assert.equal(/velocity-animating/.test(elements[0].className), false, \"Class removed.\");\n\t        }\n\t    }).then(done);\n\t});\n\n\tQUnit.skip(\"Colors (Shorthands)\", function (assert) {\n\t    var $target = getTarget();\n\t    Velocity($target, { borderColor: \"#7871c2\", color: [\"#297dad\", \"spring\", \"#5ead29\"] });\n\t    //\tassert.equal(Data($target).style.borderColorRed.endValue, 120, \"Hex #1a component.\");\n\t    //\tassert.equal(Data($target).style.borderColorGreen.endValue, 113, \"Hex #1b component.\");\n\t    //\tassert.equal(Data($target).style.borderColorBlue.endValue, 194, \"Hex #1c component.\");\n\t    //\tassert.equal(Data($target).style.colorRed.easing, \"spring\", \"Per-property easing.\");\n\t    //\tassert.equal(Data($target).style.colorRed.startValue, 94, \"Forcefed hex #2a component.\");\n\t    //\tassert.equal(Data($target).style.colorGreen.startValue, 173, \"Forcefed hex #2b component.\");\n\t    //\tassert.equal(Data($target).style.colorBlue.startValue, 41, \"Forcefed hex #2c component.\");\n\t    //\tassert.equal(Data($target).style.colorRed.endValue, 41, \"Hex #3a component.\");\n\t    //\tassert.equal(Data($target).style.colorGreen.endValue, 125, \"Hex #3b component.\");\n\t    //\tassert.equal(Data($target).style.colorBlue.endValue, 173, \"Hex #3c component.\");\n\t});\n\n\tQUnit.todo(\"Forcefeeding\", function (assert) {\n\t    /* Note: Start values are always converted into pixels. W test the conversion ratio we already know to avoid additional work. */\n\t    var testStartWidth = \"1rem\",\n\t        testStartWidthToPx = \"16px\",\n\t        testStartHeight = \"10px\",\n\t        $target = getTarget();\n\t    Velocity($target, {\n\t        width: [100, \"linear\", testStartWidth],\n\t        height: [100, testStartHeight],\n\t        opacity: [defaultProperties.opacity, \"easeInQuad\"]\n\t    });\n\t    assert.equal(Data($target).cache.width, parseFloat(testStartWidthToPx), \"Forcefed value #1 passed to tween.\");\n\t    assert.equal(Data($target).cache.height, parseFloat(testStartHeight), \"Forcefed value #2 passed to tween.\");\n\t    assert.equal(Data($target).cache.opacity, defaultStyles.opacity, \"Easing was misinterpreted as forcefed value.\");\n\t});\n\n\tQUnit.test(\"Promises\", function (assert) {\n\t    var done = assert.async(10),\n\t        start = getNow();\n\t    var result = void 0;\n\t    assert.expect(10);\n\t    /**********************\n\t     Invalid Arguments\n\t     **********************/\n\t    Velocity().then(function () {\n\t        assert.notOk(true, \"Calling with no arguments should reject a Promise.\");\n\t    }, function () {\n\t        assert.ok(true, \"Calling with no arguments should reject a Promise.\");\n\t    }).then(done);\n\t    Velocity(getTarget()).then(function () {\n\t        assert.notOk(true, \"Calling with no properties should reject a Promise.\");\n\t    }, function () {\n\t        assert.ok(true, \"Calling with no properties should reject a Promise.\");\n\t    }).then(done);\n\t    Velocity(getTarget(), {}).then(function () {\n\t        assert.ok(true, \"Calling with empty properties should not reject a Promise.\");\n\t    }, function () {\n\t        assert.notOk(true, \"Calling with empty properties should not reject a Promise.\");\n\t    }).then(done);\n\t    Velocity(getTarget(), {}, defaultOptions.duration).then(function () {\n\t        assert.ok(true, \"Calling with empty properties + duration should not reject a Promise.\");\n\t    }, function () {\n\t        assert.notOk(true, \"Calling with empty properties + duration should not reject a Promise.\");\n\t    }).then(done);\n\t    /* Invalid arguments: Ensure an error isn't thrown. */\n\t    Velocity(getTarget(), {}, \"fakeArg1\", \"fakeArg2\").then(function () {\n\t        assert.ok(true, \"Calling with invalid arguments should reject a Promise.\");\n\t    }, function () {\n\t        assert.notOk(true, \"Calling with invalid arguments should reject a Promise.\");\n\t    }).then(done);\n\t    result = Velocity(getTarget(), defaultProperties, defaultOptions);\n\t    result.then(function (elements) {\n\t        assert.equal(elements.length, 1, \"Calling with a single element fulfills with a single element array.\");\n\t    }, function () {\n\t        assert.ok(false, \"Calling with a single element fulfills with a single element array.\");\n\t    }).then(done);\n\t    result.velocity(defaultProperties).then(function (elements) {\n\t        assert.ok(getNow() - start > 2 * defaultOptions.duration, \"Queued call fulfilled after correct delay.\");\n\t    }, function () {\n\t        assert.ok(false, \"Queued call fulfilled after correct delay.\");\n\t    }).then(done);\n\t    result = Velocity([getTarget(), getTarget()], defaultProperties, defaultOptions);\n\t    result.then(function (elements) {\n\t        assert.equal(elements.length, 2, \"Calling with multiple elements fulfills with a multiple element array.\");\n\t    }, function () {\n\t        assert.ok(false, \"Calling with multiple elements fulfills with a multiple element array.\");\n\t    }).then(done);\n\t    var anim = Velocity(getTarget(), defaultProperties, defaultOptions);\n\t    anim.then(function () {\n\t        assert.ok(getNow() - start < defaultOptions.duration, \"Stop call fulfilled after correct delay.\");\n\t    }, function () {\n\t        assert.ok(false, \"Stop call fulfilled after correct delay.\");\n\t    }).then(done);\n\t    anim.velocity(\"stop\");\n\t    Promise.all([Velocity(getTarget(), defaultProperties, defaultOptions).promise, Velocity(getTarget(), defaultProperties, defaultOptions).promise]).then(function () {\n\t        assert.ok(true, \"Promise.all fulfilled when all animations have finished.\");\n\t    }).then(done);\n\t});\n\n\tQUnit.todo(\"Sequences\", function (assert) {\n\t    //\tvar done = assert.async(2),\n\t    //\t\t$target1 = getTarget(),\n\t    //\t\t$target2 = getTarget(),\n\t    //\t\tredirectOptions = {duration: 1500};\n\t    //\n\t    //\t((window as any).jQuery || (window as any).Zepto || window).Velocity.Redirects.test = function(element, options, elementIndex, elementsLength) {\n\t    //\t\tif (elementIndex === 0) {\n\t    //\t\t\tassert.deepEqual(element, $target1, \"Element passed through #1.\");\n\t    //\t\t\tassert.deepEqual(options, redirectOptions, \"Options object passed through #1.\");\n\t    //\t\t\tassert.equal(elementIndex, 0, \"Element index passed through #1.\");\n\t    //\t\t\tassert.equal(elementsLength, 2, \"Elements length passed through #1.\");\n\t    //\n\t    //\t\t\tdone();\n\t    //\t\t} else if (elementIndex === 1) {\n\t    //\t\t\tassert.deepEqual(element, $target2, \"Element passed through #2.\");\n\t    //\t\t\tassert.deepEqual(options, redirectOptions, \"Options object passed through #2.\");\n\t    //\t\t\tassert.equal(elementIndex, 1, \"Element index passed through #2.\");\n\t    //\t\t\tassert.equal(elementsLength, 2, \"Elements length passed through #2.\");\n\t    //\n\t    //\t\t\tdone();\n\t    //\t\t}\n\t    //\t};\n\t    //\n\t    //\tVelocity([$target1, $target2], \"test\", redirectOptions);\n\t});\n\n\tQUnit.todo(\"Value Functions\", function (assert) {\n\t    var testWidth = 10,\n\t        $target1 = getTarget(),\n\t        $target2 = getTarget();\n\t    Velocity([$target1, $target2], {\n\t        width: function width(i, total) {\n\t            return (i + 1) / total * testWidth;\n\t        }\n\t    });\n\t    assert.equal(Data($target1).cache.width, parseFloat(testWidth) / 2, \"Function value #1 passed to tween.\");\n\t    assert.equal(Data($target2).cache.width, parseFloat(testWidth), \"Function value #2 passed to tween.\");\n\t});\n\n\tQUnit.module(\"UI Pack\");\n\n\tQUnit.skip(\"Packaged Effect: slideUp/Down\", function (assert) {\n\t    var done = assert.async(4),\n\t        $target1 = getTarget(),\n\t        $target2 = getTarget(),\n\t        initialStyles = {\n\t        display: \"none\",\n\t        paddingTop: \"123px\"\n\t    };\n\t    $target1.style.display = initialStyles.display;\n\t    $target1.style.paddingTop = initialStyles.paddingTop;\n\t    Velocity($target1, \"slideDown\", {\n\t        begin: function begin(elements) {\n\t            assert.deepEqual(elements, [$target1], \"slideDown: Begin callback returned.\");\n\t            done();\n\t        },\n\t        complete: function complete(elements) {\n\t            assert.deepEqual(elements, [$target1], \"slideDown: Complete callback returned.\");\n\t            //\t\t\tassert.equal(getPropertyValue($target1, \"display\"), Values.getDisplayType($target1), \"slideDown: display set to default.\");\n\t            assert.notEqual(getPropertyValue($target1, \"height\"), 0, \"slideDown: height set.\");\n\t            assert.equal(getPropertyValue($target1, \"paddingTop\"), initialStyles.paddingTop, \"slideDown: paddingTop set.\");\n\t            done();\n\t        }\n\t    });\n\t    Velocity($target2, \"slideUp\", {\n\t        begin: function begin(elements) {\n\t            assert.deepEqual(elements, [$target2], \"slideUp: Begin callback returned.\");\n\t            done();\n\t        },\n\t        complete: function complete(elements) {\n\t            assert.deepEqual(elements, [$target2], \"slideUp: Complete callback returned.\");\n\t            assert.equal(getPropertyValue($target2, \"display\"), 0, \"slideUp: display set to none.\");\n\t            assert.notEqual(getPropertyValue($target2, \"height\"), 0, \"slideUp: height reset.\");\n\t            assert.equal(getPropertyValue($target1, \"paddingTop\"), initialStyles.paddingTop, \"slideUp: paddingTop reset.\");\n\t            done();\n\t        }\n\t    });\n\t});\n\n\tQUnit.skip(\"Call Options\", function (assert) {\n\t    var done = assert.async(2),\n\t        UICallOptions1 = {\n\t        delay: 123,\n\t        duration: defaultOptions.duration,\n\t        easing: \"spring\"\n\t    },\n\t        $target1 = getTarget();\n\t    //assert.expect(1);\n\t    Velocity($target1, \"transition.slideLeftIn\", UICallOptions1);\n\t    setTimeout(function () {\n\t        // Note: We can do this because transition.slideLeftIn is composed of a single call.\n\t        //\t\tassert.equal(Data($target1).opts.delay, UICallOptions1.delay, \"Whitelisted option passed in.\");\n\t        //\t\tassert.notEqual(Data($target1).opts.easing, UICallOptions1.easing, \"Non-whitelisted option not passed in #1a.\");\n\t        //\t\tassert.equal(!/velocity-animating/.test(Data($target1).className), true, \"Duration option passed in.\");\n\t        done();\n\t    }, completeCheckDuration);\n\t    var UICallOptions2 = {\n\t        stagger: 100,\n\t        duration: defaultOptions.duration,\n\t        backwards: true\n\t    };\n\t    var $targets = [getTarget(), getTarget(), getTarget()];\n\t    Velocity($targets, \"transition.slideLeftIn\", UICallOptions2);\n\t    setTimeout(function () {\n\t        //\t\tassert.equal(Data($targets[0]).opts.delay, UICallOptions2.stagger * 2, \"Backwards stagger delay passed in #1a.\");\n\t        //\t\tassert.equal(Data($targets[1]).opts.delay, UICallOptions2.stagger * 1, \"Backwards stagger delay passed in #1b.\");\n\t        //\t\tassert.equal(Data($targets[2]).opts.delay, UICallOptions2.stagger * 0, \"Backwards stagger delay passed in #1c.\");\n\t        done();\n\t    }, completeCheckDuration);\n\t});\n\n\tQUnit.skip(\"Callbacks\", function (assert) {\n\t    var done = assert.async(2),\n\t        $targets = [getTarget(), getTarget()];\n\t    assert.expect(3);\n\t    Velocity($targets, \"transition.bounceIn\", {\n\t        begin: function begin(elements) {\n\t            assert.deepEqual(elements, $targets, \"Begin callback returned.\");\n\t            done();\n\t        },\n\t        complete: function complete(elements) {\n\t            assert.deepEqual(elements, $targets, \"Complete callback returned.\");\n\t            done();\n\t        }\n\t    });\n\t});\n\n\tQUnit.skip(\"In/Out\", function (assert) {\n\t    var done = assert.async(2),\n\t        $target1 = getTarget(),\n\t        $target2 = getTarget(),\n\t        $target3 = getTarget(),\n\t        $target4 = getTarget(),\n\t        $target5 = getTarget(),\n\t        $target6 = getTarget();\n\t    Velocity($target1, \"transition.bounceIn\", defaultOptions.duration);\n\t    //\tVelocity($target2, \"transition.bounceIn\", {duration: defaultOptions.duration, display: \"inline\"});\n\t    //\n\t    //\tVelocity($target3, \"transition.bounceOut\", defaultOptions.duration);\n\t    //\n\t    //\tVelocity($target4, \"transition.bounceOut\", {duration: defaultOptions.duration, display: null});\n\t    //\n\t    //\t$target5.style.visibility = \"hidden\";\n\t    //\tVelocity($target5, \"transition.bounceIn\", {duration: defaultOptions.duration, visibility: \"visible\"});\n\t    //\n\t    //\t$target6.style.visibility = \"visible\";\n\t    //\tVelocity($target6, \"transition.bounceOut\", {duration: defaultOptions.duration, visibility: \"hidden\"});\n\t    assert.expect(8);\n\t    setTimeout(function () {\n\t        assert.notEqual(getPropertyValue($target3, \"display\"), 0, \"Out: display not prematurely set to none.\");\n\t        assert.notEqual(getPropertyValue($target6, \"visibility\"), \"hidden\", \"Out: visibility not prematurely set to hidden.\");\n\t        done();\n\t    }, asyncCheckDuration);\n\t    setTimeout(function () {\n\t        //\t\tassert.equal(getPropertyValue($target1, \"display\"), Values.getDisplayType($target1), \"In: display set to default.\");\n\t        assert.equal(getPropertyValue($target2, \"display\"), \"inline\", \"In: Custom inline value set.\");\n\t        assert.equal(getPropertyValue($target3, \"display\"), 0, \"Out: display set to none.\");\n\t        //\t\tassert.equal(getPropertyValue($target4, \"display\"), Values.getDisplayType($target3), \"Out: No display value set.\");\n\t        assert.equal(getPropertyValue($target5, \"visibility\"), \"visible\", \"In: visibility set to visible.\");\n\t        assert.equal(getPropertyValue($target6, \"visibility\"), \"hidden\", \"Out: visibility set to hidden.\");\n\t        done();\n\t    }, completeCheckDuration);\n\t});\n\n\tQUnit.skip(\"RegisterEffect\", function (assert) {\n\t    //\tconst done = assert.async(1),\n\t    //\t\teffectDefaultDuration = 800;\n\t    //\n\t    //\tassert.expect(2);\n\t    //\tVelocity.RegisterEffect(\"callout.twirl\", {\n\t    //\t\tdefaultDuration: effectDefaultDuration,\n\t    //\t\tcalls: [\n\t    //\t\t\t[{rotateZ: 1080}, 0.5],\n\t    //\t\t\t[{scaleX: 0.5}, 0.25, {easing: \"spring\"}],\n\t    //\t\t\t[{scaleX: 1}, 0.25, {easing: \"spring\"}],\n\t    //\t\t],\n\t    //\t});\n\t    //\n\t    //\tconst $target1 = getTarget();\n\t    //\tVelocity($target1, \"callout.twirl\");\n\t    //\n\t    //\tsetTimeout(() => {\n\t    //\t\tassert.equal(parseFloat(getPropertyValue($target1, \"rotateZ\") as string), 1080, \"First call's property animated.\");\n\t    //\t\tassert.equal(parseFloat(getPropertyValue($target1, \"scaleX\") as string), 1, \"Last call's property animated.\");\n\t    //\n\t    //\t\tdone();\n\t    //\t}, effectDefaultDuration * 1.5);\n\t});\n\n\tQUnit.skip(\"RunSequence\", function (assert) {\n\t    //\n\t    //\tvar done = assert.async(1),\n\t    //\t\t$target1 = getTarget(),\n\t    //\t\t$target2 = getTarget(),\n\t    //\t\t$target3 = getTarget(),\n\t    //\t\tmySequence = [\n\t    //\t\t\t{elements: $target1, properties: {opacity: defaultProperties.opacity}},\n\t    //\t\t\t{elements: $target2, properties: {height: defaultProperties.height}},\n\t    //\t\t\t{\n\t    //\t\t\t\telements: $target3, properties: {width: defaultProperties.width}, options: {\n\t    //\t\t\t\t\tdelay: 100,\n\t    //\t\t\t\t\tsequenceQueue: false,\n\t    //\t\t\t\t\tcomplete: function() {\n\t    //\t\t\t\t\t\tassert.equal(parseFloat(getPropertyValue($target1, \"opacity\") as string), defaultProperties.opacity, \"First call's property animated.\");\n\t    //\t\t\t\t\t\tassert.equal(parseFloat(getPropertyValue($target2, \"height\") as string), defaultProperties.height, \"Second call's property animated.\");\n\t    //\t\t\t\t\t\tassert.equal(parseFloat(getPropertyValue($target3, \"width\") as string), defaultProperties.width, \"Last call's property animated.\");\n\t    //\n\t    //\t\t\t\t\t\tdone();\n\t    //\t\t\t\t\t}\n\t    //\t\t\t\t}\n\t    //\t\t\t}\n\t    //\t\t];\n\t    //\n\t    //\tassert.expect(3);\n\t    //\tVelocity.RunSequence(mySequence);\n\t});\n\n\tQUnit.module(\"Properties\");\n\n\tQUnit.skip(\"GenericReordering\", function (assert) {\n\t    //\tfunction genericReordering(element: HTMLorSVGElement, propertyValue?: string): string | void {\n\t    //\t\tif (propertyValue === undefined) {\n\t    //\t\t\tpropertyValue = Velocity(element, \"style\", \"textShadow\");\n\t    //\t\t\tconst split = propertyValue.split(/\\s/g),\n\t    //\t\t\t\tfirstPart = split[0];\n\t    //\t\t\tlet newValue = \"\";\n\t    //\n\t    //\t\t\tif (Velocity.CSS.ColorNames[firstPart]) {\n\t    //\t\t\t\tsplit.shift();\n\t    //\t\t\t\tsplit.push(firstPart);\n\t    //\t\t\t\tnewValue = split.join(\" \");\n\t    //\t\t\t} else if (firstPart.match(/^#|^hsl|^rgb|-gradient/)) {\n\t    //\t\t\t\tconst matchedString = propertyValue.match(/(hsl.*\\)|#[\\da-fA-F]+|rgb.*\\)|.*gradient.*\\))\\s/g)[0];\n\t    //\n\t    //\t\t\t\tnewValue = propertyValue.replace(matchedString, \"\") + \" \" + matchedString.trim();\n\t    //\t\t\t} else {\n\t    //\t\t\t\tnewValue = propertyValue;\n\t    //\t\t\t}\n\t    //\t\t\treturn newValue;\n\t    //\t\t}\n\t    //\t}\n\t    //\n\t    //\tVelocity(\"registerNormalization\", \"Element\", \"genericReordering\", genericReordering);\n\t    //\n\t    //\tlet tests = [\n\t    //\t\t{\n\t    //\t\t\ttest: \"hsl(16, 100%, 66%) 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px hsl(16, 100%, 66%)\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"-webkit-linear-gradient(red, yellow) 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px -webkit-linear-gradient(rgba(255,0,0,1), rgba(255,255,0,1))\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"-o-linear-gradient(red, yellow) 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px -o-linear-gradient(rgba(255,0,0,1), rgba(255,255,0,1))\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"-moz-linear-gradient(red, yellow) 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px -moz-linear-gradient(rgba(255,0,0,1), rgba(255,255,0,1))\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"linear-gradient(red, yellow) 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px linear-gradient(rgba(255,0,0,1), rgba(255,255,0,1))\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"red 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px rgba(255,0,0,1)\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"#000000 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px rgba(0,0,0,1)\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"rgb(0, 0, 0) 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px rgba(0,0,0,1)\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"rgba(0, 0, 0, 1) 1px 1px 1px\",\n\t    //\t\t\tresult: \"1px 1px 1px rgba(0,0,0,1)\",\n\t    //\t\t}, {\n\t    //\t\t\ttest: \"1px 1px 1px rgb(0, 0, 0)\",\n\t    //\t\t\tresult: \"1px 1px 1px rgba(0,0,0,1)\",\n\t    //\t\t},\n\t    //\t];\n\t    //\n\t    //\tfor (let test of tests) {\n\t    //\t\tlet element = getTarget();\n\t    //\n\t    //\t\telement.velocity(\"style\", \"textShadow\", test.test);\n\t    //\t\tassert.equal(element.velocity(\"style\", \"genericReordering\"), test.result, test.test);\n\t    //\t}\n\t});\n\n\tQUnit.test(\"Display\", function (assert) {\n\t    var done = assert.async(5);\n\t    Velocity(getTarget(), \"style\", \"display\", \"none\").velocity({ display: \"block\" }, {\n\t        progress: once(function (elements) {\n\t            assert.equal(elements.velocity(\"style\", \"display\"), \"block\", \"Display:'block' was set immediately.\");\n\t            done();\n\t        })\n\t    });\n\t    Velocity(getTarget(), \"style\", \"display\", \"none\").velocity(\"style\", \"display\", \"auto\").then(function (elements) {\n\t        assert.equal(elements[0].style.display, \"block\", \"Display:'auto' was understood.\");\n\t        assert.equal(elements.velocity(\"style\", \"display\"), \"block\", \"Display:'auto' was cached as 'block'.\");\n\t        done();\n\t    });\n\t    Velocity(getTarget(), \"style\", \"display\", \"none\").velocity(\"style\", \"display\", \"\").then(function (elements) {\n\t        assert.equal(elements.velocity(\"style\", \"display\"), \"block\", \"Display:'' was reset correctly.\");\n\t        done();\n\t    });\n\t    Velocity(getTarget(), { display: \"none\" }, {\n\t        progress: once(function (elements) {\n\t            assert.notEqual(elements.velocity(\"style\", \"display\"), \"none\", \"Display:'none' was not set immediately.\");\n\t            done();\n\t        })\n\t    }).then(function (elements) {\n\t        assert.equal(elements.velocity(\"style\", \"display\"), \"none\", \"Display:'none' was set upon completion.\");\n\t        done();\n\t    });\n\t});\n\n\tQUnit.test(\"Visibility\", function (assert) {\n\t    var done = assert.async(4);\n\t    Velocity(getTarget(), \"style\", \"visibility\", \"hidden\").velocity({ visibility: \"visible\" }, {\n\t        progress: once(function (elements) {\n\t            assert.equal(elements.velocity(\"style\", \"visibility\"), \"visible\", \"Visibility:'visible' was set immediately.\");\n\t            done();\n\t        })\n\t    });\n\t    Velocity(getTarget(), \"style\", \"visibility\", \"hidden\").velocity(\"style\", \"visibility\", \"\").then(function (elements) {\n\t        // NOTE: The test elements inherit \"hidden\", so while illogical it\n\t        // is in fact correct.\n\t        assert.equal(elements.velocity(\"style\", \"visibility\"), \"hidden\", \"Visibility:'' was reset correctly.\");\n\t        done();\n\t    });\n\t    Velocity(getTarget(), { visibility: \"hidden\" }, {\n\t        progress: once(function (elements) {\n\t            assert.notEqual(elements.velocity(\"style\", \"visibility\"), \"visible\", \"Visibility:'hidden' was not set immediately.\");\n\t            done();\n\t        })\n\t    }).then(function (elements) {\n\t        assert.equal(elements.velocity(\"style\", \"visibility\"), \"hidden\", \"Visibility:'hidden' was set upon completion.\");\n\t        done();\n\t    });\n\t});\n\n})));\n//# sourceMappingURL=test.js.map\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"allowUnreachableCode\": true,\n\t\t\"allowUnusedLabels\": true,\n\t\t\"alwaysStrict\": false,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"noEmitOnError\": false,\n\t\t\"noImplicitAny\": false,\n\t\t\"module\": \"es2015\",\n\t\t\"moduleResolution\": \"node\",\n\t\t\"outDir\": \"build/\",\n\t\t\"preserveConstEnums\": true,\n\t\t\"removeComments\": false,\n\t\t\"sourceMap\": true,\n\t\t\"target\": \"es6\",\n\t\t\"lib\" : [\n\t\t\t\"dom\",\n\t\t\t\"es6\",\n\t\t\t\"es2016\",\n\t\t\t\"scripthost\"\n\t\t]\n\t},\n\t\"files\": [\n\t\t\"src/velocity.ts\",\n\t\t\"src-ui/velocity.ui.ts\",\n\t\t\"test/src/test.ts\"\n\t]\n}\n"
  },
  {
    "path": "tslint.json",
    "content": "{\n\t\"rules\": {\n\t\t\"adjacent-overload-signatures\": true,\n\t\t\"align\": {\n\t\t\t\"options\": [\n\t\t\t\t\"parameters\",\n\t\t\t\t\"statements\"\n\t\t\t]\n\t\t},\n\t\t\"array-type\": {\n\t\t\t\"options\": [\"array\"]\n\t\t},\n\t\t\"arrow-parens\": true,\n\t\t\"arrow-return-shorthand\": true,\n\t\t\"ban-types\": {\n\t\t\t\"options\": [\n\t\t\t\t[\"Object\", \"Avoid using the `Object` type. Did you mean `object`?\"],\n\t\t\t\t[\"Function\", \"Avoid using the `Function` type. Prefer a specific function type, like `() => void`.\"],\n\t\t\t\t[\"Boolean\", \"Avoid using the `Boolean` type. Did you mean `boolean`?\"],\n\t\t\t\t[\"Number\", \"Avoid using the `Number` type. Did you mean `number`?\"],\n\t\t\t\t[\"String\", \"Avoid using the `String` type. Did you mean `string`?\"],\n\t\t\t\t[\"Symbol\", \"Avoid using the `Symbol` type. Did you mean `symbol`?\"]\n\t\t\t]\n\t\t},\n\t\t\"callable-types\": true,\n\t\t\"class-name\": false,\n\t\t\"comment-format\": false,\n\t\t\"completed-docs\": false,\n\t\t\"curly\": true,\n\t\t\"cyclomatic-complexity\": false,\n\t\t\"eofline\": true,\n\t\t\"file-header\": [true, \"velocity-animate \\\\(C\\\\) 2014\"],\n\t\t\"forin\": true,\n\t\t\"import-spacing\": true,\n\t\t\"indent\": {\n\t\t\t\"options\": [\"tabs\"]\n\t\t},\n\t\t\"interface-name\": false,\n\t\t\"interface-over-type-literal\": true,\n\t\t\"jsdoc-format\": true,\n\t\t\"label-position\": true,\n\t\t\"max-classes-per-file\": {\n\t\t\t\"options\": [1]\n\t\t},\n\t\t\"max-line-length\": {\n\t\t\t\"options\": [180]\n\t\t},\n\t\t\"member-access\": [true, \"no-public\"],\n\t\t\"member-ordering\": {\n\t\t\t\"options\": {\n\t\t\t\t\"order\": \"statics-first\"\n\t\t\t}\n\t\t},\n\t\t\"new-parens\": true,\n\t\t\"newline-before-return\": true,\n\t\t\"newline-per-chained-call\": true,\n\t\t\"no-angle-bracket-type-assertion\": true,\n\t\t\"no-any\": false,\n\t\t\"no-arg\": true,\n\t\t\"no-bitwise\": true,\n\t\t\"no-conditional-assignment\": true,\n\t\t\"no-consecutive-blank-lines\": true,\n\t\t\"no-console\": false,\n\t\t\"no-construct\": true,\n\t\t\"no-debugger\": false,\n\t\t\"no-default-export\": true,\n\t\t\"no-duplicate-super\": true,\n\t\t\"no-empty\": true,\n\t\t\"no-empty-interface\": false,\n\t\t\"no-eval\": true,\n\t\t\"no-internal-module\": true,\n\t\t\"no-invalid-this\": true,\n\t\t\"no-misused-new\": true,\n\t\t\"no-namespace\": false,\n\t\t\"no-parameter-properties\": false,\n\t\t\"no-redundant-jsdoc\": false,\n\t\t\"no-reference\": true,\n\t\t\"no-reference-import\": true,\n\t\t\"no-require-imports\": true,\n\t\t\"no-shadowed-variable\": true,\n\t\t\"no-string-literal\": false,\n\t\t\"no-string-throw\": true,\n\t\t\"no-switch-case-fall-through\": false,\n\t\t\"no-trailing-whitespace\": true,\n\t\t\"no-unnecessary-initializer\": true,\n\t\t\"no-unsafe-finally\": true,\n\t\t\"no-unused-expression\": true,\n\t\t\"no-use-before-declare\": false,\n\t\t\"no-var-keyword\": true,\n\t\t\"no-var-requires\": true,\n\t\t\"number-literal-format\": true,\n\t\t\"object-literal-key-quotes\": {\n\t\t\t\"options\": [\"consistent-as-needed\"]\n\t\t},\n\t\t\"object-literal-shorthand\": true,\n\t\t\"object-literal-sort-keys\": false,\n\t\t\"one-line\": true,\n\t\t\"one-variable-per-declaration\": false,\n\t\t\"only-arrow-functions\": {\n\t\t\t\"options\": [\n\t\t\t\t\"allow-declarations\",\n\t\t\t\t\"allow-named-functions\"\n\t\t\t]\n\t\t},\n\t\t\"ordered-imports\": {\n\t\t\t\"options\": {\n\t\t\t\t\"import-sources-order\": \"case-insensitive\",\n\t\t\t\t\"module-source-path\": \"full\",\n\t\t\t\t\"named-imports-order\": \"case-insensitive\"\n\t\t\t}\n\t\t},\n\t\t\"prefer-const\": true,\n\t\t\"prefer-for-of\": true,\n\t\t\"prefer-switch\": [true, {\n\t\t\t\t\"min-cases\": 2\n\t\t\t}],\n\t\t\"prefer-template\": [true, \"allow-single-concat\"],\n\t\t\"quotemark\": {\n\t\t\t\"options\": [\n\t\t\t\t\"double\",\n\t\t\t\t\"avoid-escape\"\n\t\t\t]\n\t\t},\n\t\t\"radix\": true,\n\t\t\"semicolon\": {\n\t\t\t\"options\": [\"always\"]\n\t\t},\n\t\t\"space-before-function-paren\": {\n\t\t\t\"options\": {\n\t\t\t\t\"anonymous\": \"never\",\n\t\t\t\t\"asyncArrow\": \"always\",\n\t\t\t\t\"constructor\": \"never\",\n\t\t\t\t\"method\": \"never\",\n\t\t\t\t\"named\": \"never\"\n\t\t\t}\n\t\t},\n\t\t\"switch-final-break\": [true, \"always\"],\n\t\t\"trailing-comma\": {\n\t\t\t\"options\": {\n\t\t\t\t\"multiline\": \"always\",\n\t\t\t\t\"singleline\": \"never\"\n\t\t\t}\n\t\t},\n\t\t\"triple-equals\": {\n\t\t\t\"options\": [\"allow-null-check\"]\n\t\t},\n\t\t\"type-literal-delimiter\": true,\n\t\t\"typedef\": false,\n\t\t\"typedef-whitespace\": {\n\t\t\t\"options\": [\n\t\t\t\t{\n\t\t\t\t\t\"call-signature\": \"nospace\",\n\t\t\t\t\t\"index-signature\": \"nospace\",\n\t\t\t\t\t\"parameter\": \"nospace\",\n\t\t\t\t\t\"property-declaration\": \"nospace\",\n\t\t\t\t\t\"variable-declaration\": \"nospace\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"call-signature\": \"onespace\",\n\t\t\t\t\t\"index-signature\": \"onespace\",\n\t\t\t\t\t\"parameter\": \"onespace\",\n\t\t\t\t\t\"property-declaration\": \"onespace\",\n\t\t\t\t\t\"variable-declaration\": \"onespace\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t\"unified-signatures\": false,\n\t\t\"use-isnan\": true,\n\t\t\"variable-name\": {\n\t\t\t\"options\": [\n\t\t\t\t\"ban-keywords\",\n\t\t\t\t\"check-format\",\n\t\t\t\t\"allow-pascal-case\"\n\t\t\t]\n\t\t},\n\t\t\"whitespace\": {\n\t\t\t\"options\": [\n\t\t\t\t\"check-branch\",\n\t\t\t\t\"check-decl\",\n\t\t\t\t\"check-operator\",\n\t\t\t\t\"check-separator\",\n\t\t\t\t\"check-type\",\n\t\t\t\t\"check-typecast\"\n\t\t\t]\n\t\t}\n\t}\n}"
  },
  {
    "path": "velocity.d.ts",
    "content": "/*\n * velocity-animate (C) 2014-2018 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n *\n * Velocity typings.\n */\n\n/**************\n * Interfaces *\n **************/\n\n/**\n * A single animation for a single element. This extends the strict options (ie,\n * after processing) to allow per-element options. Anything that is shared\n * between all elements in an animation will be under the `options` member.\n */\nexport interface AnimationCall extends StrictVelocityOptions {\n\t/**\n\t * Used to store the next AnimationCell in this list.\n\t *\n\t * @private\n\t */\n\t_next?: AnimationCall;\n\n\t/**\n\t * Used to store the previous AnimationCell in this list. Used to make\n\t * removing items from the list significantly easier.\n\t *\n\t * @private\n\t */\n\t_prev?: AnimationCall;\n\n\t/**\n\t * A number of flags for use in tracking an animation.\n\t */\n\t_flags: number;\n\n\t/**\n\t * Properties to be tweened\n\t */\n\ttweens?: {[property: string]: VelocityTween};\n\n\t/**\n\t * The current value for the \"tween\" property, defaults to a percentage if\n\t * not used.\n\t */\n\ttween?: string;\n\n\t/**\n\t * The element this specific animation is for. If there is more than one in\n\t * the elements list then this will be duplicated when it is pulled off a\n\t * queue.\n\t */\n\telement?: HTMLorSVGElement;\n\n\t/**\n\t * The list of elements associated with this specific animation.\n\t * TODO: This should be removed so we're not trying to lock an element.\n\t * Without this entry, any removed elements will simply not exist in Data\n\t * (a WeakMap) and then can be removed from the list of animations.\n\t * @deprecated\n\t */\n\telements?: VelocityResult;\n\n\t/**\n\t * Shared options for the entire set of elements.\n\t */\n\toptions?: StrictVelocityOptions;\n\n\t/**\n\t * The time this animation started according to whichever clock we are\n\t * using.\n\t */\n\ttimeStart?: number;\n\n\t/**\n\t * The time (in ms) that this animation has already run. Used with the\n\t * duration and easing to provide the exact tween needed.\n\t */\n\tellapsedTime?: number;\n\n\t/**\n\t * The percentage complete as a number 0 <= n <= 1\n\t */\n\tpercentComplete?: number;\n}\n\n/**\n * AnimationFlags are used internally. These are subject to change as they are\n * only valid for the internal state of the current version of Velocity.\n *\n * To get these values use the \"option\" action with a key of \"isReady\" etc. All\n * of these are gettable with the same pattern of keyname.\n *\n * @private\n */\nexport declare const enum AnimationFlags {\n\t/**\n\t * When the tweens are expanded this is set to save future processing.\n\t */\n\tEXPANDED = 1 << 0, // tslint:disable-line:no-bitwise\n\n\t/**\n\t * Set once the animation is ready to start - after any delay (and possible\n\t * pause).\n\t */\n\tREADY = 1 << 1, // tslint:disable-line:no-bitwise\n\n\t/**\n\t * Set once the animation has started.\n\t */\n\tSTARTED = 1 << 2, // tslint:disable-line:no-bitwise\n\n\t/**\n\t * Set when an animation is manually stopped.\n\t */\n\tSTOPPED = 1 << 3, // tslint:disable-line:no-bitwise\n\n\t/**\n\t * The pause state of this animation. If true it is paused, if false it was\n\t * paused and needs to be resumed, and if undefined / null then not either.\n\t */\n\tPAUSED = 1 << 4, // tslint:disable-line:no-bitwise\n\n\t/**\n\t * Set when the animation is a sync animation.\n\t */\n\tSYNC = 1 << 5, // tslint:disable-line:no-bitwise\n\n\t/**\n\t * When the animation is running in reverse, such as for a loop.\n\t */\n\tREVERSE = 1 << 6, // tslint:disable-line:no-bitwise\n}\n\n/**\n * Global per-Element data. This is persistent between animations, and freed\n * when the garbage collector removes the Element because it is no longer being\n * used.\n */\nexport interface ElementData {\n\t/**\n\t * A generated enum of types of this element, used for Normalizations.\n\t */\n\ttypes: number;\n\n\t/**\n\t * A local cache of the current style values we're using, this is 80x faster\n\t * than <code>element.style</code> access.\n\t *\n\t * Empty strings are set to null to get the value from getComputedStyle\n\t * instead. If getComputedStyle returns an empty string then that is saved.\n\t */\n\tcache: Properties<string>;\n\n\t/**\n\t * A cached copy of getComputedStyle, this is 50% the speed of\n\t * <code>element.style</code> access.\n\t */\n\tcomputedStyle?: CSSStyleDeclaration;\n\n\t/**\n\t * Changed as animations start and finish on an element. This allows us to\n\t * keep track of exactly how many are running at a given time.\n\t */\n\tcount: number;\n\n\t/**\n\t * Animations to be run for each queue. The animations are linked lists,\n\t * but treated as a FIFO queue (new ones are added to the end). When the\n\t * queue is empty (but still running) the key will still exist with a value\n\t * of \"null\". When the queue is empty and the next entry is pulled from it\n\t * then it will be set to \"undefined\".\n\t *\n\t * The default queue is an empty string - \"\"\n\t */\n\tqueueList: {[name: string]: AnimationCall};\n\n\t/**\n\t * Last properties tweened per each queue. Used for both \"reverse\" and\n\t * \"repeat\" methods.\n\t */\n\tlastAnimationList: {[name: string]: AnimationCall};\n\n\t/**\n\t * The time the last animation on an element finished. This is used for\n\t * starting a new animation and making sure it follows directly if possible,\n\t * otherwise it will start as if one frame in already.\n\t */\n\tlastFinishList: {[name: string]: number};\n\n\t/**\n\t * The window used for this element.\n\t */\n\twindow: Window;\n}\n\n/**\n * Internal Sequence property value.\n */\nexport interface Sequence extends ReadonlyArray<TweenStep> {\n\t/**\n\t * Pattern to use for tweening.\n\t */\n\tpattern: ReadonlyArray<string | boolean>;\n\n\t/**\n\t * Step value.\n\t */\n\t[index: number]: TweenStep;\n}\n\nexport interface SequenceList {\n\tduration: number;\n\ttweens: Properties<Sequence>;\n}\n\n/**\n * After correcting the options so they are usable internally, they will be of\n * this type. The base VelocityOptions includes human readable and shortcuts,\n * which this doesn't.\n */\nexport interface StrictVelocityOptions extends VelocityOptions, VelocityPromise {\n\t/**\n\t * Begin handler. Only the first element to check this callback gets to use\n\t * it. Cleared after calling\n\t *\n\t * @private\n\t */\n\tbegin?: VelocityCallbackFn;\n\n\t/**\n\t * Complete handler (only the last element in a set gets this)\n\t *\n\t * @private\n\t */\n\tcomplete?: VelocityCallbackFn;\n\n\t/**\n\t * The amount of delay before this animation can start doing anything.\n\t */\n\tdelay?: number;\n\n\t/**\n\t * The length of time this animation will run for.\n\t */\n\tduration?: number;\n\n\t/**\n\t * Easing for this animation while running.\n\t */\n\teasing?: VelocityEasingFn;\n\n\t/**\n\t * Loop, calls 2n-1 times reversing it each iteration\n\t */\n\tloop?: true | number;\n\n\t/**\n\t * TODO: Remove this so it's a normal property\n\t */\n\tmobileHA?: boolean;\n\n\t/**\n\t * Progress handler (only the last element in a set gets this)\n\t *\n\t * @private\n\t */\n\tprogress?: VelocityProgressFn;\n\n\t/**\n\t * Queue\n\t */\n\tqueue?: false | string;\n\n\t/**\n\t * Repeat this number of times. If looped then each iteration of the loop\n\t * is actually repeated this number of times.\n\t */\n\trepeat?: true | number;\n\n\t/**\n\t * This is a cache of the repeat value. When looping and repeating work\n\t * together, the repeat is looped, so it needs to remember how many repeats\n\t * to perform for each loop.\n\t */\n\trepeatAgain?: true | number;\n\n\t/**\n\t * The first AnimationCall to get this - used for the progress callback.\n\t *\n\t * @private\n\t */\n\t_first?: AnimationCall;\n\n\t/**\n\t * The total number of AnimationCalls that are pointing at this.\n\t *\n\t * @private\n\t */\n\t_total?: number;\n\n\t/**\n\t * The number of AnimationCalls that are ready to start.\n\t *\n\t * @private\n\t */\n\t_ready?: number;\n\n\t/**\n\t * The number of AnimationCalls that have started.\n\t *\n\t * @private\n\t */\n\t_started?: number;\n\n\t/**\n\t * The number of AnimationCalls that have finished.\n\t *\n\t * @private\n\t */\n\t_completed?: number;\n}\n\n/**\n * Internal list of values for a single Sequence data point.\n */\nexport interface TweenStep extends ReadonlyArray<string | number> {\n\t/**\n\t * Percent of animation.\n\t */\n\tpercent?: number;\n\n\t/**\n\t * Easing function.\n\t */\n\teasing?: VelocityEasingFn | null;\n\n\t/**\n\t * Values to tween and insert into pattern.\n\t */\n\t[index: number]: string | number;\n}\n\n/**\n * Direct Velocity access.\n */\nexport interface Velocity<T = VelocityElements> {\n\t/**\n\t * Available to be able to check what version you're running against.\n\t */\n\treadonly version: string;\n\n\t/**\n\t * Velocity option defaults, which can be overriden by the user.\n\t */\n\treadonly defaults: VelocityOptions & {\n\t\t/**\n\t\t * Provided in order to reset Velocity defaults back to their initial\n\t\t * state.\n\t\t */\n\t\treadonly reset: () => void;\n\t};\n\n\t/**\n\t * Current internal state of Velocity.\n\t */\n\treadonly State: VelocityState;\n\n\t/**\n\t * Actions cannot be replaced if they are internal (hasOwnProperty is false\n\t * but they still exist). Otherwise they can be replaced by users.\n\t *\n\t * All external method calls should be using actions rather than sub-calls\n\t * of Velocity itself.\n\t */\n\treadonly Actions: {[name: string]: VelocityActionFn};\n\n\t/**\n\t * Our known easing functions.\n\t */\n\treadonly Easings: {[name: string]: VelocityEasingFn};\n\n\t/**\n\t * The currently registered sequences.\n\t */\n\treadonly Sequences: {[name: string]: SequenceList};\n\n\t/**\n\t * Used to patch any object to allow Velocity chaining. In order to chain an\n\t * object must either be treatable as an array - with a <code>.length</code>\n\t * property, and each member a Node, or a Node directly.\n\t *\n\t * By default Velocity will try to patch <code>window</code>,\n\t * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n\t * Nodes or lists of Nodes.\n\t */\n\tpatch(proto: any, global?: boolean): void;\n\n\t/**\n\t * Set to true, 1 or 2 (most verbose) to output debug info to console.\n\t */\n\tdebug: boolean | 1 | 2;\n\n\t/**\n\t * In mock mode, all animations are forced to complete immediately upon the\n\t * next rAF tick. If there are further animations queued then they will each\n\t * take one single frame in turn. Loops and repeats will be disabled while\n\t * <code>mock = true</code>.\n\t */\n\tmock: boolean;\n\n\t/********************\n\t * Calling Velocity *\n\t ********************/\n\n\t/**\n\t * Finish the running animations on the elements selected.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param queue The queue to finish.\n\t * @param finishAll Should this stop all queued animations too?\n\t */\n\t(elements: T, action: \"finish\", queue?: string | false, finishAll?: true): VelocityResult;\n\n\t/**\n\t * Finish the running animations on the elements selected.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param finishAll Should this stop all queued animations too?\n\t */\n\t(elements: T, action: \"finish\", finishAll?: true): VelocityResult;\n\n\t/**\n\t * Finish the running animations on this VelocityResult or on the elements\n\t * selected.\n\t *\n\t * @param queue The queue to finish.\n\t * @param finishAll Should this stop all queued animations too?\n\t */\n\t(this: T, action: \"finish\", queue?: string | false, finishAll?: true): VelocityResult;\n\n\t/**\n\t * Finish the running animations on this VelocityResult or on the elements\n\t * selected.\n\t *\n\t * @param finishAll Should this stop all queued animations too?\n\t */\n\t(this: T, action: \"finish\", finishAll?: true): VelocityResult;\n\n\t/**\n\t * Finish any running animations.\n\t *\n\t * @param queue The queue to finish.\n\t * @param finishAll Should this stop all queued animations too?\n\t */\n\t(action: \"finish\", queue?: string | false, finishAll?: true): VelocityResult;\n\n\t/**\n\t * Finish any running animations.\n\t *\n\t * @param finishAll Should this stop all queued animations too?\n\t */\n\t(action: \"finish\", finishAll?: true): VelocityResult;\n\n\t/**\n\t * Check if there is a normalisation handler for the named type of `Element`\n\t * and the named property.\n\t */\n\t(this: T, action: \"hasNormalization\", constructor: {new: () => Element} | string, name: string): boolean;\n\n\t/**\n\t * Set the value of an option on a running animation. This performs some\n\t * validation on the named option as only some are available to set at\n\t * runtime.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param option The name of the option to get.\n\t * @param value The value to set it to.\n\t */\n\t(elements: T, action: \"option\", option: string, value: any): VelocityResult;\n\n\t/**\n\t * Get the value of an option on a running animation.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param option The name of the option to get.\n\t */\n\t(elements: T, action: \"option\", option: string): any;\n\n\t/**\n\t * Set the value of an option on a running animation. This performs some\n\t * validation on the named option as only some are available to set at\n\t * runtime.\n\t *\n\t * @param option The name of the option to get.\n\t * @param value The value to set it to.\n\t */\n\t(this: T, action: \"option\", option: string, value: any): VelocityResult;\n\n\t/**\n\t * Get the value of an option on a running animation.\n\t *\n\t * @param option The name of the option to get.\n\t */\n\t(this: T, action: \"option\", option: string): any;\n\n\t/**\n\t * Pause a currently running animation.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param queue The name of the queue to pause on it.\n\t */\n\t(elements: T, action: \"pause\", queue?: string): VelocityResult;\n\n\t/**\n\t * Pause a currently running animation.\n\t *\n\t * @param queue The name of the queue to pause on it.\n\t */\n\t(this: T, action: \"pause\", queue?: string): VelocityResult;\n\n\t/**\n\t * Pause all currently running animations.\n\t *\n\t * @param queue The name of the queue to pause on them.\n\t */\n\t(action: \"pause\", queue?: string): VelocityResult;\n\n\t/**\n\t * Resume a currently paused animation.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param queue The name of the queue to resume on it.\n\t */\n\t(elements: T, action: \"resume\", queue?: string): VelocityResult;\n\n\t/**\n\t * Resume a currently paused animation.\n\t *\n\t * @param queue The name of the queue to resume on it.\n\t */\n\t(this: T, action: \"resume\", queue?: string): VelocityResult;\n\n\t/**\n\t * Resume all currently paused animations.\n\t *\n\t * @param queue The name of the queue to resume on them.\n\t */\n\t(action: \"resume\", queue?: string): VelocityResult;\n\n\t/**\n\t * Register a new easing handler.\n\t *\n\t * @param name The name of the easing to add.\n\t * @param easing The function to call when this easing is used.\n\t */\n\t(action: \"registerEasing\", name: string, easing: VelocityEasingFn): void;\n\n\t/**\n\t * Register a new normalization handler. This is the interface between\n\t * Velocity and the actual properties, so is responsible for reading and\n\t * writing any values on the `Element`.\n\t *\n\t * @param constructor The type of `Element`. If using ia string it will work\n\t * across iframe boundaries.\n\t * @param name The name of the property to provide.\n\t * @param normalization The function to call whenever this property is\n\t * accessed.\n\t * @param unit An optional unit string to add to any numeric values passed.\n\t * @param cache Set to false to prevent this property from being cached.\n\t */\n\t(action: \"registerNormalization\", constructor: {new: () => Element} | string, name: string, normalization: VelocityNormalizationsFn, unit?: string, cache?: boolean): void;\n\n\t/**\n\t * Register a new normalization handler. This is the interface between\n\t * Velocity and the actual properties, so is responsible for reading and\n\t * writing any values on the `Element`.\n\t *\n\t * @param constructor The type of `Element`. If using ia string it will work\n\t * across iframe boundaries.\n\t * @param name The name of the property to provide.\n\t * @param normalization The function to call whenever this property is\n\t * accessed.\n\t * @param cache Set to false to prevent this property from being cached.\n\t */\n\t(action: \"registerNormalization\", constructor: {new: () => Element} | string, name: string, normalization: VelocityNormalizationsFn, cache?: boolean): void;\n\n\t/**\n\t * Register a named animation sequence to be used elsewhere.\n\t *\n\t * @param name The sequence name.\n\t * @param sequence The animation steps to perform.\n\t */\n\t(action: \"registerSequence\", name: string, sequence: VelocitySequence): void;\n\n\t/**\n\t * Register a named animation sequence to be used elsewhere.\n\t *\n\t * @param sequences Multiple named sequences to add.\n\t */\n\t(action: \"registerSequence\", sequences: {[name: string]: VelocitySequence}): void;\n\n\t/**\n\t * Reverse the most recent animations on the supplied elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t */\n\t(elements: T, action: \"reverse\", complete?: () => void): VelocityResult;\n\n\t/**\n\t * Reverse the most recent animations on the supplied elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param duration How long the animation should run in ms.\n\t * @param complete A function to call when finished.\n\t */\n\t(elements: T, action: \"reverse\", duration?: number | \"fast\" | \"normal\" | \"slow\", complete?: () => void): VelocityResult;\n\n\t/**\n\t * Reverse the most recent animations on the supplied elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param duration How long the animation should run in ms.\n\t * @param easing The default easing to apply.\n\t * @param complete A function to call when finished.\n\t */\n\t(elements: T, action: \"reverse\", duration?: number | \"fast\" | \"normal\" | \"slow\", easing?: string | number[], complete?: () => void): VelocityResult;\n\n\t/**\n\t * Reverse the most recent animations on the supplied elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param easing The default easing to apply.\n\t * @param complete A function to call when finished.\n\t */\n\t(elements: T, action: \"reverse\", easing?: string | number[], complete?: () => void): VelocityResult;\n\n\t/**\n\t * Reverse the most recent animations on the supplied elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param options The options to apply.\n\t */\n\t(elements: T, action: \"reverse\", options?: VelocityOptions): VelocityResult;\n\n\t/**\n\t * Stop without finishing the running animations on this VelocityResult or\n\t * on the elements selected.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param queue The queue to stop.\n\t * @param stopAll Should this stop all queued animations too?\n\t */\n\t(elements: T, action: \"stop\", queue?: string | false, stopAll?: true): VelocityResult;\n\n\t/**\n\t * Stop without finishing the running animations on this VelocityResult or\n\t * on the elements selected.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param stopAll Should this stop all queued animations too?\n\t */\n\t(elements: T, action: \"stop\", stopAll?: true): VelocityResult;\n\n\t/**\n\t * Stop without finishing the running animations on this VelocityResult or\n\t * on the elements selected.\n\t *\n\t * @param queue The queue to stop.\n\t * @param stopAll Should this stop all queued animations too?\n\t */\n\t(this: T, action: \"stop\", queue?: string | false, stopAll?: true): VelocityResult;\n\n\t/**\n\t * Stop without finishing the running animations on this VelocityResult or\n\t * on the elements selected.\n\t *\n\t * @param stopAll Should this stop all queued animations too?\n\t */\n\t(this: T, action: \"stop\", stopAll?: true): VelocityResult;\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param property The name of the property to access.\n\t */\n\t(elements: HTMLorSVGElement, action: \"style\" | \"property\", property: string): string;\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param property The name of the property to access, or an object with\n\t * `name: value` pairs for setting.\n\t */\n\t(elements: HTMLorSVGElement, action: \"style\" | \"property\", property: string[]): {[property: string]: string}[] | {[property: string]: string};\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param property The name of the property to access.\n\t */\n\t(this: T, action: \"style\" | \"property\", property: string): string | string[];\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param property The name of the property to access.\n\t */\n\t(elements: T, action: \"style\" | \"property\", property: string): string[];\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param property The name of the property to access, or an object with\n\t * `name: value` pairs for setting.\n\t */\n\t(elements: T, action: \"style\" | \"property\", property: string[]): {[property: string]: string}[] | {[property: string]: string}[];\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param property The name of the property to access.\n\t * @param value The value to set the property to.\n\t */\n\t(this: T, action: \"style\" | \"property\", property: string, value: string): VelocityResult;\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param property The name of the property to access.\n\t * @param value The value to set the property to.\n\t */\n\t(elements: T, action: \"style\" | \"property\", property: string, value: string): VelocityResult;\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param property An object with `name: value` pairs for setting.\n\t */\n\t(this: T, action: \"style\" | \"property\", property: {[property: string]: string}): VelocityResult;\n\n\t/**\n\t * Get or set the value for a property that Velocity understands how to\n\t * access.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param property An object with `name: value` pairs for setting.\n\t */\n\t(elements: T, action: \"style\" | \"property\", property: {[property: string]: string}): VelocityResult;\n\n\t/**\n\t * Get the tween value for one or more elements using an animation at a\n\t * specific percentage complete. This does not animate the elements, just\n\t * obtains the values based on the current properties.\n\t *\n\t * @param percentComplete What specific percentage is needed (0 <= x <= 1)\n\t * @param property The property to animate.\n\t * @param value The end value or forcefed value.\n\t * @param easing The easing to use.\n\t */\n\t(this: T, action: \"tween\", percentComplete: number, property: string, value: VelocityPropertyValue, easing?: VelocityEasingType): string;\n\n\t/**\n\t * Get the tween value for one or more elements using an animation at a\n\t * specific percentage complete. This does not animate the elements, just\n\t * obtains the values based on the current properties.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param percentComplete What specific percentage is needed (0 <= x <= 1)\n\t * @param property The property to animate.\n\t * @param value The end value or forcefed value.\n\t * @param easing The easing to use.\n\t */\n\t(elements: T, action: \"tween\", percentComplete: number, property: string, value: VelocityPropertyValue, easing?: VelocityEasingType): string;\n\n\t/**\n\t * Get the tween value for one or more elements using an animation at a\n\t * specific percentage complete. This does not animate the elements, just\n\t * obtains the values based on the current properties.\n\t *\n\t * @param percentComplete What specific percentage is needed (0 <= x <= 1)\n\t * @param propertyMap The `key: value` property map to animate to.\n\t * @param easing The easing to use.\n\t */\n\t(this: T, action: \"tween\", percentComplete: number, propertyMap: Properties<VelocityProperty>, easing?: VelocityEasingType): Properties<string>;\n\n\t/**\n\t * Get the tween value for one or more elements using an animation at a\n\t * specific percentage complete. This does not animate the elements, just\n\t * obtains the values based on the current properties.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param percentComplete What specific percentage is needed (0 <= x <= 1)\n\t * @param propertyMap The `key: value` property map to animate to.\n\t * @param easing The easing to use.\n\t */\n\t(elements: T, action: \"tween\", percentComplete: number, propertyMap: Properties<VelocityProperty>, easing?: VelocityEasingType): Properties<string>;\n\n\t/**\n\t * Get the tween value for one or more elements using an animation at a\n\t * specific percentage complete. This does not animate the elements, just\n\t * obtains the values based on the current properties.\n\t *\n\t * When called on Velocity directly without any supplied elements, then the\n\t * values will be based on the `document.body` element. This can be useful\n\t * for simply finding the value for a forcefed animation.\n\t *\n\t * @param percentComplete What specific percentage is needed (0 <= x <= 1)\n\t * @param property The property to animate.\n\t * @param value The end value or forcefed value.\n\t * @param easing The easing to use.\n\t */\n\t(action: \"tween\", percentComplete: number, property: string, value: VelocityPropertyValue, easing?: VelocityEasingType): string;\n\n\t/**\n\t * Get the tween value for one or more elements using an animation at a\n\t * specific percentage complete. This does not animate the elements, just\n\t * obtains the values based on the current properties.\n\t *\n\t * When called on Velocity directly without any supplied elements, then the\n\t * values will be based on the `document.body` element. This can be useful\n\t * for simply finding the value for a forcefed animation.\n\t *\n\t * @param percentComplete What specific percentage is needed (0 <= x <= 1)\n\t * @param propertyMap The `key: value` property map to animate to.\n\t * @param easing The easing to use.\n\t */\n\t(action: \"tween\", percentComplete: number, propertyMap: Properties<VelocityProperty>, easing?: VelocityEasingType): Properties<string>;\n\n\t/**\n\t * Call Velocity with a single object containing all the necessary options.\n\t *\n\t * @param options An object containing the `elements`, `options`, and\n\t * `properties` to use.\n\t */\n\t(options: VelocityObjectArgs): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param options The options to apply to the animation. This overrides the\n\t * default and any supplied in a sequence.\n\t */\n\t(elements: T, propertyMap: string | Properties<VelocityProperty>, options?: VelocityOptions): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param duration The length of time to run animation in ms (1000/s).\n\t * @param complete A function to call when the animation is finished.\n\t */\n\t(elements: T, propertyMap: string | Properties<VelocityProperty>, duration?: number | \"fast\" | \"normal\" | \"slow\", complete?: () => void): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param complete A function to call when the animation is finished.\n\t */\n\t(elements: T, propertyMap: string | Properties<VelocityProperty>, complete?: () => void): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param easing The easing to use for this animation.\n\t * @param complete A function to call when the animation is finished.\n\t */\n\t(elements: T, propertyMap: string | Properties<VelocityProperty>, easing?: string | number[], complete?: () => void): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param elements An `Element`, or an array-like list of `Elements` to\n\t * process.\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param duration The length of time to run animation in ms (1000/s).\n\t * @param easing The easing to use for this animation.\n\t * @param complete A function to call when the animation is finished.\n\t */\n\t(elements: T, propertyMap: string | Properties<VelocityProperty>, duration?: number | \"fast\" | \"normal\" | \"slow\", easing?: string | number[], complete?: () => void): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param options The options to apply to the animation. This overrides the\n\t * default and any supplied in a sequence.\n\t */\n\t(this: T, propertyMap: string | Properties<VelocityProperty>, options?: VelocityOptions): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param duration The length of time to run animation in ms (1000/s).\n\t * @param complete A function to call when the animation is finished.\n\t */\n\t(this: T, propertyMap: string | Properties<VelocityProperty>, duration?: number | \"fast\" | \"normal\" | \"slow\", complete?: () => void): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param complete A function to call when the animation is finished.\n\t */\n\t(this: T, propertyMap: string | Properties<VelocityProperty>, complete?: () => void): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param easing The easing to use for this animation.\n\t * @param complete A function to call when the animation is finished.\n\t */\n\t(this: T, propertyMap: string | Properties<VelocityProperty>, easing?: string | number[], complete?: () => void): VelocityResult;\n\n\t/**\n\t * Call velocity on one or more elements.\n\t *\n\t * @param propertyMap The `key: value` property map to animate to, or a\n\t * named sequence to use.\n\t * @param duration The length of time to run animation in ms (1000/s).\n\t * @param easing The easing to use for this animation.\n\t * @param complete A function to call when the animation is finished.\n\t */\n\t(this: T, propertyMap: string | Properties<VelocityProperty>, duration?: number | \"fast\" | \"normal\" | \"slow\", easing?: string | number[], complete?: () => void): VelocityResult;\n}\n\n/**\n * Add any easings to this interface to have them picked up by the Easings type.\n */\nexport interface VelocityEasings {\n\t\"at-end\": true;\n\t\"at-start\": true;\n\t\"during\": true;\n\t\"ease\": true;\n\t\"ease-in\": true;\n\t\"ease-in-out\": true;\n\t\"ease-out\": true;\n\t\"easeIn\": true;\n\t\"easeInBack\": true;\n\t\"easeInBounce\": true;\n\t\"easeInCirc\": true;\n\t\"easeInCubic\": true;\n\t\"easeInElastic\": true;\n\t\"easeInExpo\": true;\n\t\"easeInOut\": true;\n\t\"easeInOutBack\": true;\n\t\"easeInOutBounce\": true;\n\t\"easeInOutCirc\": true;\n\t\"easeInOutCubic\": true;\n\t\"easeInOutElastic\": true;\n\t\"easeInOutExpo\": true;\n\t\"easeInOutQuad\": true;\n\t\"easeInOutQuart\": true;\n\t\"easeInOutQuint\": true;\n\t\"easeInOutSine\": true;\n\t\"easeInQuad\": true;\n\t\"easeInQuart\": true;\n\t\"easeInQuint\": true;\n\t\"easeInSine\": true;\n\t\"easeOut\": true;\n\t\"easeOutBack\": true;\n\t\"easeOutBounce\": true;\n\t\"easeOutCirc\": true;\n\t\"easeOutCubic\": true;\n\t\"easeOutElastic\": true;\n\t\"easeOutExpo\": true;\n\t\"easeOutQuad\": true;\n\t\"easeOutQuart\": true;\n\t\"easeOutQuint\": true;\n\t\"easeOutSine\": true;\n\t\"linear\": true;\n\t\"spring\": true;\n\t\"swing\": true;\n}\n\n/**\n * Chaining Velocity calls from various sources.\n */\nexport interface VelocityExtended<T> {\n\t/**\n\t * This is the Velocity chaining method. It is functionally equivalent to\n\t * the normal Velocity call, but allows chaining on the elements it is\n\t * attached to.\n\t */\n\treadonly velocity: Velocity<T>;\n}\n\n/**\n * This is used for CoffeeScript shortcuts apparently. Kept for legacy reasons.\n *\n * TODO: I don't like having two of these - need to merge into a type or similar\n */\nexport interface VelocityObjectArgs {\n\telements?: HTMLorSVGElement[];\n\tproperties?: Properties<VelocityProperty>;\n\toptions?: VelocityOptions;\n\te?: HTMLorSVGElement[];\n\tp?: Properties<VelocityProperty>;\n\to?: VelocityOptions;\n}\n\n/**\n * Options passed to a new Velocity animation. These are validated and copied\n * into a StrictVelocityOptions object.\n */\nexport interface VelocityOptions {\n\tbackwards?: boolean;\n\n\t/**\n\t * Begin handler. Only the first element to check this callback gets to use\n\t * it.\n\t *\n\t * default: undefined\n\t */\n\tbegin?: VelocityCallbackFn;\n\n\t/**\n\t * Complete handler (only the last element in a set gets this).\n\t *\n\t * default: undefined\n\t */\n\tcomplete?: VelocityCallbackFn;\n\n\t/**\n\t * How long the animation should delay after becoming active and before it\n\t * actually starts to animate. This is a millisecond timer, but\n\t * can handle some string values.\n\t * <code>\"fast\"</code> = 200ms\n\t * <code>\"normal\"</code> = 400ms\n\t * <code>\"slow\"</code> = 600ms\n\t * NOTE: If passing a negative number then this will allow you to start with\n\t * the animation partially complete from the start.\n\t *\n\t * default 0\n\t */\n\tdelay?: \"fast\" | \"normal\" | \"slow\" | number;\n\n\t/**\n\t * Reduce the duration of each successive element so they drag into final\n\t * state. The first quarter of the elements will get a reduced duration (ie.\n\t * they will finish faster) in a smooth way.\n\t */\n\tdrag?: boolean;\n\n\t/**\n\t * How long the animation should run for. This is a millisecond timer, but\n\t * can handle some string values.\n\t * <code>\"fast\"</code> = 200ms\n\t * <code>\"normal\"</code> = 400ms (default)\n\t * <code>\"slow\"</code> = 600ms\n\t *\n\t * default 400\n\t */\n\tduration?: \"fast\" | \"normal\" | \"slow\" | number;\n\n\t/**\n\t * Easing is the rate of change over time for an animation. A linear easing\n\t * would simply be 1% of the time to 1% of the animation. This allows you\n\t * to specify how that rate of change should be. There are various named\n\t * easings, but you can also supply your own.\n\t *\n\t * TODO: Copy more of the original description\n\t *\n\t * default \"swing\"\n\t */\n\teasing?: VelocityEasingType;\n\n\t/**\n\t * Maximum number of frames to render on each second for all animations\n\t *\n\t * default 60\n\t */\n\tfpsLimit?: number;\n\n\t/**\n\t * How many times should this option loop. A loop is defined as a \"return to\n\t * start values\", so it will run, then reverse. This counts as a single\n\t * loop. Setting <code>loop:4</code> will cause the animation to take the\n\t * same time as <code>4n+1</code> iterations.\n\t *\n\t * default 0\n\t */\n\tloop?: boolean | number;\n\n\t/**\n\t * The minimum frame time to achieve, the value is calculated based on fpsLimit\n\t *\n\t * default 16.33333333 (1000ms / 60fps)\n\t */\n\tminFrameTime?: number;\n\n\t/**\n\t * Not currently implemented.\n\t *\n\t * @deprecated\n\t */\n\tmobileHA?: boolean;\n\n\t/**\n\t * Progress handler (only the last element in a set gets this)\n\t *\n\t * default: undefined\n\t */\n\tprogress?: VelocityProgressFn;\n\n\t/**\n\t * If this should return a Promise with everything else. If promises are not\n\t * required at all, then simply setting it globally will turn them off.\n\t *\n\t * default true\n\t */\n\tpromise?: boolean;\n\n\t/**\n\t * If promises are turned on, then the promise can reject if there are no\n\t * elements supplied (an empty array is still valid).\n\t *\n\t * default false\n\t */\n\tpromiseRejectEmpty?: boolean;\n\n\t/**\n\t * The name of the queue to use. If this is set to <code>false</code> then\n\t * it will be added immediately ignoring any other queues running. Queues\n\t * start playing automatically (unlike jQuery, this doesn't need a queue to\n\t * be manually started).\n\t *\n\t * default \"\"\n\t */\n\tqueue?: false | string;\n\n\t/**\n\t * How many times should this animation repeat. A repeat will restart at\n\t * initial values and animate once. This is most useful for rotating\n\t * animations where <code>0deg === 360deg</code>. If you are after a more\n\t * \"bounce\" effect then look at <code>loop</code>.\n\t *\n\t * default 0\n\t */\n\trepeat?: boolean | number;\n\n\t/**\n\t * The speed to play the animation back at. This number can change while\n\t * running, in order to vary the playback rate.\n\t *\n\t * default 0\n\t */\n\tspeed?: number;\n\n\t/**\n\t * Supply a delay in ms, and every element in the animation will get this\n\t * delay multiplied by its index added to it.\n\t */\n\tstagger?: number | VelocityOptionFn<number>;\n\n\t/**\n\t * When adding animations to elements each element has its own queue of\n\t * pending animations. This ensures that when adding a single animation to\n\t * multiple elements, they all begin at the same time.\n\t *\n\t * default true\n\t */\n\tsync?: boolean;\n\n\t/**\n\t * Should the cache be used for the tweens. Turning this off can improve\n\t * memory usage slightly, but will also make things slower when creating\n\t * animations.\n\t *\n\t * @private\n\t * default true\n\t */\n\tcache?: boolean;\n}\n\n/**\n * Used internally for storing the Promise if used.\n */\nexport interface VelocityPromise {\n\t/**\n\t * A saved copy of the Promise.\n\t *\n\t * @private\n\t */\n\t_promise?: Promise<VelocityResult>;\n\n\t/**\n\t * This method is called at most once to signify that the animation has\n\t * completed. Currently a loop:true animation will never complete. This\n\t * allows .then(fn) to run (see Promise support).\n\t *\n\t * @private\n\t */\n\t_resolver?: (value?: (VelocityResult) | PromiseLike<VelocityResult>) => void;\n\n\t/**\n\t * This method is called at most once to signify that the animation has\n\t * completed. Currently a loop:true animation will never complete. This\n\t * allows .then(fn) to run (see Promise support).\n\t *\n\t * @private\n\t */\n\t_rejecter?: (reason?: any) => void;\n}\n\n/**\n * The return type of any velocity call. If this is called via a \"utility\"\n * function (such a jQuery <code>$(elements).velocity(...)</code>) then it will\n * be based on the array-like list of elements supplied, otherwise it will\n * create a plain array. The extra values for Promises and Velocity are inserted\n * into the array in such a way as to not interfere with other methods unless\n * they are specifically overwriting them.\n */\nexport interface VelocityResult<T = HTMLorSVGElement> extends Array<T>, Partial<Promise<T[] & VelocityResult<T>>> {\n\t/**\n\t * This is the actual Promise used by Velocity. If using Promise.all() or\n\t * similar methods then you may need to use this instead of the Velocity\n\t * result itself.\n\t */\n\treadonly promise?: Promise<T[] & VelocityResult<T>>;\n\n\t/**\n\t * This is the Velocity chaining method. It is functionally equivalent to\n\t * the normal Velocity call, but allows chaining on the elements it is\n\t * attached to.\n\t */\n\treadonly velocity?: Velocity & {\n\t\t/**\n\t\t * These are the animation objects attached to this specific chain. This\n\t\t * is used in some actions to allow the call to only touch the specific\n\t\t * animations called rather than just the animations on the linked\n\t\t * elements.\n\t\t *\n\t\t * TODO: Decide if this should be public\n\t\t * @private\n\t\t */\n\t\treadonly animations?: AnimationCall[];\n\t};\n}\n\n/**\n * Container for page-wide Velocity state data.\n */\nexport interface VelocityState {\n\t/**\n\t * Detect if this is a NodeJS or web browser\n\t */\n\treadonly isClient: boolean;\n\n\t/**\n\t * Detect mobile devices to determine if mobileHA should be turned\n\t * on.\n\t */\n\treadonly isMobile: boolean;\n\n\t/**\n\t * The mobileHA option's behavior changes on older Android devices\n\t * (Gingerbread, versions 2.3.3-2.3.7).\n\t */\n\treadonly isGingerbread: boolean;\n\n\t/**\n\t * Create a cached element for re-use when checking for CSS property\n\t * prefixes.\n\t */\n\treadonly prefixElement?: HTMLDivElement;\n\n\t/**\n\t * Retrieve the appropriate scroll anchor and property name for the\n\t * browser: https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY\n\t */\n\treadonly windowScrollAnchor: boolean;\n\n\t/**\n\t * Cache the anchor used for animating window scrolling.\n\t */\n\treadonly scrollAnchor: Window | HTMLElement | Node | boolean;\n\n\t/**\n\t * Cache the browser-specific property names associated with the\n\t * scroll anchor.\n\t */\n\treadonly scrollPropertyLeft: string;\n\n\t/**\n\t * Cache the browser-specific property names associated with the\n\t * scroll anchor.\n\t */\n\treadonly scrollPropertyTop: string;\n\n\t/**\n\t * The className we add / remove when animating.\n\t */\n\treadonly className: string;\n\n\t/**\n\t * Keep track of whether our RAF tick is running.\n\t *\n\t * @private\n\t */\n\tisTicking: boolean;\n\n\t/**\n\t * Container for every in-progress call to Velocity.\n\t *\n\t * @private\n\t */\n\tfirst?: AnimationCall;\n\n\t/**\n\t * Container for every in-progress call to Velocity.\n\t *\n\t * @private\n\t */\n\tlast?: AnimationCall;\n\n\t/**\n\t * First new animation - to shortcut starting them all up and push\n\t * any css reads to the start of the tick.\n\t *\n\t * @private\n\t */\n\tfirstNew?: AnimationCall;\n}\n\n/**\n * Internal Sequence per property.\n */\nexport interface VelocityTween {\n\t/**\n\t * Normalization function - cached at animation creation time.\n\t */\n\tfn: VelocityNormalizationsFn;\n\n\t/**\n\t * Sequence to use for tweening (excludes pattern).\n\t */\n\tsequence?: Sequence;\n\n\t/**\n\t * Easing function to use for entire tween.\n\t */\n\teasing?: VelocityEasingFn;\n\n\t/**\n\t * Start value.\n\t */\n\tstart?: string;\n\n\t/**\n\t * End value.\n\t */\n\tend?: string;\n}\n\n/*********\n * Types *\n *********/\n\n/**\n * Velocity can run on both HTML and SVG elements.\n */\nexport type HTMLorSVGElement = HTMLElement | SVGElement;\n\n/**\n * The properties that are permitted to be animated.\n * TODO: Add SVG and \"Tween\" properties. Should (can?) this get html / svg specifics later\n */\nexport type Properties<T> = {\n\t\"clientHeight\"?: T;\n\t\"clientWidth\"?: T;\n\t\"innerHeight\"?: T;\n\t\"innerWidth\"?: T;\n\t\"outerHeight\"?: T;\n\t\"outerWidth\"?: T;\n\t\"scroll\"?: T;\n\t\"scrollHeight\"?: T;\n\t\"scrollLeft\"?: T;\n\t\"scrollTop\"?: T;\n\t\"scrollWidth\"?: T;\n\t\"tween\"?: T;\n} & {\n\t\t// \"style\" normalizations\n\t\t[property in keyof CSSStyleDeclaration]?: T;\n\t};\n\n/**\n * Used for action callbacks. These are the commands such as `\"pause\"` and\n * `\"stop\"`\n *\n * @param args The arguments passed to Velocity when calling this action. They\n * start as the first argument passed after the name of the action.\n * @param elements Any elements this action is being called on. This may be\n * null, in which case it is being called without any.\n * @param promiseHandler The action should resolve or reject the promise as\n * needed.\n * @param action The name of the action before any dot (used for sub-actions).\n */\nexport type VelocityActionFn = (\n\targs?: any[],\n\telements?: VelocityResult,\n\tpromiseHandler?: VelocityPromise,\n\taction?: string) => any;\n\n/**\n * A callback used for the `begin` or `complete` callbacks of an animation.\n *\n * @param elements The elements being animated.\n * @param activeCall The animation being performed.\n */\nexport type VelocityCallbackFn = (\n\tthis: VelocityResult,\n\telements?: VelocityResult,\n\tactiveCall?: AnimationCall) => void;\n\n/**\n * All easings must return the current value given the start and end values, and\n * a percentage complete. The property name is also passed in case that makes a\n * difference to how values are used.\n *\n * @param percentComplete Between 0 and 1 inclusive.\n * @param startValue The value at 0.\n * @param endValue The value at 1.\n * @param property The property name.\n */\nexport type VelocityEasingFn = (\n\tpercentComplete: number,\n\tstartValue: number,\n\tendValue: number,\n\tproperty?: string) => number;\n\n/**\n * List of all easing types for easy code completion in TypeScript\n */\nexport type VelocityEasingType = VelocityEasingFn\n\t| keyof VelocityEasings\n\t| string // Need to leave in to prevent errors.\n\t| [number] | [number, number] | [number, number, number, number]\n\t| number[]; // Need to leave in to prevent errors.\n\n/**\n * The various formats of Element argument for Velocity. Some libraries such as\n * jQuery and Zepto provide an array-like\n */\nexport type VelocityElements = HTMLorSVGElement | HTMLorSVGElement[];\n\n/**\n * Used for normalization callbacks.\n *\n * @param element The element to be called on.\n * @param propertyValue The value to set. If <code>undefined</code> then this is\n * a get action and must return a string value for that element.\n *\n * @returns When getting a value it must return a string, otherwise the return\n * value is ignored.\n */\nexport type VelocityNormalizationsFn =\n\t((\n\t\telement: HTMLorSVGElement,\n\t\tpropertyValue: string) => void)\n\t& ((\n\t\telement: HTMLorSVGElement) => string);\n\n/**\n * A callback to allow us to generate an option value.\n */\nexport type VelocityOptionFn<T> = (\n\tthis: HTMLorSVGElement,\n\tindex?: number,\n\ttotal?: number,\n\telements?: VelocityElements,\n\toption?: string) => T;\n\n/**\n * A callback used for progress tracking.\n */\nexport type VelocityProgressFn = (\n\tthis: VelocityResult,\n\telements?: VelocityResult,\n\tpercentComplete?: number,\n\tremaining?: number,\n\ttweenValue?: number,\n\tactiveCall?: AnimationCall) => void;\n\n/**\n * Shortcut property type for HTML Elements.\n */\nexport type VelocityProperties = Properties<VelocityProperty>;\n\n/**\n * A property value can be a string or a number. If it is a number then it will\n * get the correct unit added to it depending on the property name if required.\n */\nexport type VelocityProperty = VelocityPropertyValue | VelocityPropertyFn;\n\n/**\n * A callback to allow us to generate a property value for a property name.\n */\nexport type VelocityPropertyFn = (\n\tthis: HTMLorSVGElement,\n\tindex?: number,\n\ttotal?: number,\n\telements?: VelocityElements) => VelocityPropertyValue;\n\n/**\n * A property value can be a string or a number. If it is a number then it will\n * get the correct unit added to it depending on the property name if required.\n */\nexport type VelocityPropertyValue = number\n\t| string\n\t| [number | string]\n\t| [number | string, VelocityEasingType | number | string]\n\t| [number | string, VelocityEasingType, number | string];\n\n/**\n * A callback to allow us to generate a property start / end value.\n */\nexport type VelocityPropertyValueFn = (\n\tthis: HTMLorSVGElement,\n\tindex?: number,\n\ttotal?: number,\n\tpropertyName?: string) => number | string;\n\n/**\n * Public Sequence definition.\n */\nexport type VelocitySequence = {\n\tduration?: number;\n\teasing?: VelocityEasingType;\n\t[percent: number]: Properties<VelocitySequenceProperty>;\n} | {\n\t[percent: string]: Properties<VelocitySequenceProperty>;\n}; // Needs to be like this to prevent warnings.\n\n/**\n * Public property value for a Sequence.\n */\nexport type VelocitySequenceProperty = string | [string] | [string, VelocityEasingType];\n\n/******************\n * Global extends *\n ******************/\n\ndeclare global {\n\t/**\n\t * Extend the return value from <code>document.querySelectorAll()</code>.\n\t */\n\texport interface NodeListOf<TNode extends Node> extends VelocityExtended<NodeListOf<TNode>> {}\n\n\t/**\n\t * Extend <code>Element</code> directly.\n\t */\n\texport interface Element extends VelocityExtended<Element> {}\n\n\t/**\n\t * Extend <code>Element</code> directly.\n\t */\n\texport interface HTMLCollection extends VelocityExtended<Element> {}\n}\n\n/*****************\n * Global access *\n *****************/\nexport default Velocity;\nexport declare const Velocity: Velocity;\n"
  },
  {
    "path": "velocity.es5.js",
    "content": "/**\n * velocity-animate (C) 2014-2017 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\n/**\n * Check if a variable is a boolean.\n */\nfunction isBoolean(variable) {\n    return variable === true || variable === false;\n}\n/**\n * Check if a variable is a function.\n */\nfunction isFunction(variable) {\n    return Object.prototype.toString.call(variable) === \"[object Function]\";\n}\n/**\n * Check if a variable is an HTMLElement or SVGElement.\n */\nfunction isNode(variable) {\n    return !!(variable && variable.nodeType);\n}\n/**\n * Check if a variable is a number.\n */\nfunction isNumber(variable) {\n    return typeof variable === \"number\";\n}\n/**\n * Check if a variable is a plain object (and not an instance).\n */\nfunction isPlainObject(variable) {\n    if (!variable || (typeof variable === \"undefined\" ? \"undefined\" : _typeof(variable)) !== \"object\" || variable.nodeType || Object.prototype.toString.call(variable) !== \"[object Object]\") {\n        return false;\n    }\n    var proto = Object.getPrototypeOf(variable);\n    return !proto || proto.hasOwnProperty(\"constructor\") && proto.constructor === Object;\n}\n/**\n * Check if a variable is a string.\n */\nfunction isString(variable) {\n    return typeof variable === \"string\";\n}\n/**\n * Check if a variable is the result of calling Velocity.\n */\nfunction isVelocityResult(variable) {\n    return variable && isNumber(variable.length) && isFunction(variable.velocity);\n}\n/**\n * Check if a variable is an array-like wrapped jQuery, Zepto or similar, where\n * each indexed value is a Node.\n */\nfunction isWrapped(variable) {\n    return variable && variable !== window && isNumber(variable.length) && !isString(variable) && !isFunction(variable) && !isNode(variable) && (variable.length === 0 || isNode(variable[0]));\n}\n/**\n * Check is a property is an enumerable member of an object.\n */\nfunction propertyIsEnumerable(obj, property) {\n    return Object.prototype.propertyIsEnumerable.call(obj, property);\n}\n\n// Project\n/**\n * Add a single className to an Element.\n */\nfunction addClass(element, className) {\n    if (element instanceof Element) {\n        if (element.classList) {\n            element.classList.add(className);\n        } else {\n            removeClass(element, className);\n            element.className += (element.className.length ? \" \" : \"\") + className;\n        }\n    }\n}\n/**\n * Clone an array, works for array-like too.\n */\nfunction cloneArray(arrayLike) {\n    return Array.prototype.slice.call(arrayLike, 0);\n}\n/**\n * The <strong><code>defineProperty()</code></strong> function provides a\n * shortcut to defining a property that cannot be accidentally iterated across.\n */\nfunction defineProperty$1(proto, name, value, readonly) {\n    if (proto) {\n        Object.defineProperty(proto, name, {\n            configurable: !readonly,\n            writable: !readonly,\n            value: value\n        });\n    }\n}\n/**\n * When there are multiple locations for a value pass them all in, then get the\n * first value that is valid.\n */\nfunction getValue() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n    }\n\n    var _iteratorNormalCompletion = true;\n    var _didIteratorError = false;\n    var _iteratorError = undefined;\n\n    try {\n        for (var _iterator = args[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var arg = _step.value;\n\n            if (arg !== undefined && arg === arg) {\n                return arg;\n            }\n        }\n    } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n    } finally {\n        try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n                _iterator.return();\n            }\n        } finally {\n            if (_didIteratorError) {\n                throw _iteratorError;\n            }\n        }\n    }\n}\n/**\n * Shim to get the current milliseconds - on anything except old IE it'll use\n * Date.now() and save creating an object. If that doesn't exist then it'll\n * create one that gets GC.\n */\nvar now = Date.now ? Date.now : function () {\n    return new Date().getTime();\n};\n/**\n * Remove a single className from an Element.\n */\nfunction removeClass(element, className) {\n    if (element instanceof Element) {\n        if (element.classList) {\n            element.classList.remove(className);\n        } else {\n            // TODO: Need some jsperf tests on performance - can we get rid of the regex and maybe use split / array manipulation?\n            element.className = element.className.replace(new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\", \"gi\"), \" \");\n        }\n    }\n}\n\n// Project\n// Constants\nvar Actions = {};\n/**\n * Used to register an action. This should never be called by users\n * directly, instead it should be called via  an action:<br/>\n * <code>Velocity(\"registerAction\", \"name\", VelocityActionFn);</code>\n */\nfunction registerAction(args, internal) {\n    var name = args[0],\n        callback = args[1];\n    if (!isString(name)) {\n        console.warn(\"VelocityJS: Trying to set 'registerAction' name to an invalid value:\", name);\n    } else if (!isFunction(callback)) {\n        console.warn(\"VelocityJS: Trying to set 'registerAction' callback to an invalid value:\", name, callback);\n    } else if (Actions[name] && !propertyIsEnumerable(Actions, name)) {\n        console.warn(\"VelocityJS: Trying to override internal 'registerAction' callback\", name);\n    } else if (internal === true) {\n        defineProperty$1(Actions, name, callback);\n    } else {\n        Actions[name] = callback;\n    }\n}\nregisterAction([\"registerAction\", registerAction], true);\n\n/**\n * Without this it will only un-prefix properties that have a valid \"normal\"\n * version.\n */\nvar DURATION_FAST = 200;\nvar DURATION_NORMAL = 400;\nvar DURATION_SLOW = 600;\nvar FUZZY_MS_PER_SECOND = 980;\nvar DEFAULT_CACHE = true;\nvar DEFAULT_DELAY = 0;\nvar DEFAULT_DURATION = DURATION_NORMAL;\nvar DEFAULT_EASING = \"swing\";\nvar DEFAULT_FPSLIMIT = 60;\nvar DEFAULT_LOOP = 0;\nvar DEFAULT_PROMISE = true;\nvar DEFAULT_PROMISE_REJECT_EMPTY = true;\nvar DEFAULT_QUEUE = \"\";\nvar DEFAULT_REPEAT = 0;\nvar DEFAULT_SPEED = 1;\nvar DEFAULT_SYNC = true;\nvar CLASSNAME = \"velocity-animating\";\nvar Duration = {\n  fast: DURATION_FAST,\n  normal: DURATION_NORMAL,\n  slow: DURATION_SLOW\n};\n\n// Project\n// Constants\nvar Easings = {};\n/**\n * Used to register a easing. This should never be called by users\n * directly, instead it should be called via an action:<br/>\n * <code>Velocity(\"registerEasing\", \"name\", VelocityEasingFn);</code>\n */\nfunction registerEasing(args) {\n    var name = args[0],\n        callback = args[1];\n    if (!isString(name)) {\n        console.warn(\"VelocityJS: Trying to set 'registerEasing' name to an invalid value:\", name);\n    } else if (!isFunction(callback)) {\n        console.warn(\"VelocityJS: Trying to set 'registerEasing' callback to an invalid value:\", name, callback);\n    } else if (Easings[name]) {\n        console.warn(\"VelocityJS: Trying to override 'registerEasing' callback\", name);\n    } else {\n        Easings[name] = callback;\n    }\n}\nregisterAction([\"registerEasing\", registerEasing], true);\n/**\n * Linear easing, used for sequence parts that don't have an actual easing\n * function.\n */\nfunction linearEasing(percentComplete, startValue, endValue, property) {\n    return startValue + percentComplete * (endValue - startValue);\n}\n/**\n * Swing is the default for jQuery and Velocity.\n */\nfunction swingEasing(percentComplete, startValue, endValue) {\n    return startValue + (0.5 - Math.cos(percentComplete * Math.PI) / 2) * (endValue - startValue);\n}\n/**\n * A less exaggerated version of easeInOutElastic.\n */\nfunction springEasing(percentComplete, startValue, endValue) {\n    return startValue + (1 - Math.cos(percentComplete * 4.5 * Math.PI) * Math.exp(-percentComplete * 6)) * (endValue - startValue);\n}\nregisterEasing([\"linear\", linearEasing]);\nregisterEasing([\"swing\", swingEasing]);\nregisterEasing([\"spring\", springEasing]);\n\n// Project\n/**\n * Fix to a range of <code>0 <= num <= 1</code>.\n */\nfunction fixRange(num) {\n    return Math.min(Math.max(num, 0), 1);\n}\nfunction A(aA1, aA2) {\n    return 1 - 3 * aA2 + 3 * aA1;\n}\nfunction B(aA1, aA2) {\n    return 3 * aA2 - 6 * aA1;\n}\nfunction C(aA1) {\n    return 3 * aA1;\n}\nfunction calcBezier(aT, aA1, aA2) {\n    return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\nfunction getSlope(aT, aA1, aA2) {\n    return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);\n}\nfunction generateBezier() {\n    var NEWTON_ITERATIONS = 4,\n        NEWTON_MIN_SLOPE = 0.001,\n        SUBDIVISION_PRECISION = 0.0000001,\n        SUBDIVISION_MAX_ITERATIONS = 10,\n        kSplineTableSize = 11,\n        kSampleStepSize = 1 / (kSplineTableSize - 1),\n        float32ArraySupported = \"Float32Array\" in window;\n    /* Must contain four args. */\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n    }\n\n    if (args.length !== 4) {\n        return;\n    }\n    /* Args must be numbers. */\n    for (var i = 0; i < 4; ++i) {\n        if (typeof args[i] !== \"number\" || isNaN(args[i]) || !isFinite(args[i])) {\n            return;\n        }\n    }\n    /* X values must be in the [0, 1] range. */\n    var mX1 = fixRange(args[0]);\n    var mY1 = args[1];\n    var mX2 = fixRange(args[2]);\n    var mY2 = args[3];\n    var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n    function newtonRaphsonIterate(aX, aGuessT) {\n        for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) {\n            var currentSlope = getSlope(aGuessT, mX1, mX2);\n            if (currentSlope === 0) {\n                return aGuessT;\n            }\n            var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n            aGuessT -= currentX / currentSlope;\n        }\n        return aGuessT;\n    }\n    function calcSampleValues() {\n        for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) {\n            mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2);\n        }\n    }\n    function binarySubdivide(aX, aA, aB) {\n        var currentX = void 0,\n            currentT = void 0,\n            i = 0;\n        do {\n            currentT = aA + (aB - aA) / 2;\n            currentX = calcBezier(currentT, mX1, mX2) - aX;\n            if (currentX > 0) {\n                aB = currentT;\n            } else {\n                aA = currentT;\n            }\n        } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n        return currentT;\n    }\n    function getTForX(aX) {\n        var lastSample = kSplineTableSize - 1;\n        var intervalStart = 0,\n            currentSample = 1;\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n            intervalStart += kSampleStepSize;\n        }\n        --currentSample;\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),\n            guessForT = intervalStart + dist * kSampleStepSize,\n            initialSlope = getSlope(guessForT, mX1, mX2);\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n            return newtonRaphsonIterate(aX, guessForT);\n        } else if (initialSlope === 0) {\n            return guessForT;\n        } else {\n            return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n        }\n    }\n    var precomputed = false;\n    function precompute() {\n        precomputed = true;\n        if (mX1 !== mY1 || mX2 !== mY2) {\n            calcSampleValues();\n        }\n    }\n    var str = \"generateBezier(\" + [mX1, mY1, mX2, mY2] + \")\",\n        f = function f(percentComplete, startValue, endValue, property) {\n        if (!precomputed) {\n            precompute();\n        }\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        if (mX1 === mY1 && mX2 === mY2) {\n            return startValue + percentComplete * (endValue - startValue);\n        }\n        return startValue + calcBezier(getTForX(percentComplete), mY1, mY2) * (endValue - startValue);\n    };\n    f.getControlPoints = function () {\n        return [{ x: mX1, y: mY1 }, { x: mX2, y: mY2 }];\n    };\n    f.toString = function () {\n        return str;\n    };\n    return f;\n}\n/* Common easings */\nvar easeIn = generateBezier(0.42, 0, 1, 1),\n    easeOut = generateBezier(0, 0, 0.58, 1),\n    easeInOut = generateBezier(0.42, 0, 0.58, 1);\nregisterEasing([\"ease\", generateBezier(0.25, 0.1, 0.25, 1)]);\nregisterEasing([\"easeIn\", easeIn]);\nregisterEasing([\"ease-in\", easeIn]);\nregisterEasing([\"easeOut\", easeOut]);\nregisterEasing([\"ease-out\", easeOut]);\nregisterEasing([\"easeInOut\", easeInOut]);\nregisterEasing([\"ease-in-out\", easeInOut]);\nregisterEasing([\"easeInSine\", generateBezier(0.47, 0, 0.745, 0.715)]);\nregisterEasing([\"easeOutSine\", generateBezier(0.39, 0.575, 0.565, 1)]);\nregisterEasing([\"easeInOutSine\", generateBezier(0.445, 0.05, 0.55, 0.95)]);\nregisterEasing([\"easeInQuad\", generateBezier(0.55, 0.085, 0.68, 0.53)]);\nregisterEasing([\"easeOutQuad\", generateBezier(0.25, 0.46, 0.45, 0.94)]);\nregisterEasing([\"easeInOutQuad\", generateBezier(0.455, 0.03, 0.515, 0.955)]);\nregisterEasing([\"easeInCubic\", generateBezier(0.55, 0.055, 0.675, 0.19)]);\nregisterEasing([\"easeOutCubic\", generateBezier(0.215, 0.61, 0.355, 1)]);\nregisterEasing([\"easeInOutCubic\", generateBezier(0.645, 0.045, 0.355, 1)]);\nregisterEasing([\"easeInQuart\", generateBezier(0.895, 0.03, 0.685, 0.22)]);\nregisterEasing([\"easeOutQuart\", generateBezier(0.165, 0.84, 0.44, 1)]);\nregisterEasing([\"easeInOutQuart\", generateBezier(0.77, 0, 0.175, 1)]);\nregisterEasing([\"easeInQuint\", generateBezier(0.755, 0.05, 0.855, 0.06)]);\nregisterEasing([\"easeOutQuint\", generateBezier(0.23, 1, 0.32, 1)]);\nregisterEasing([\"easeInOutQuint\", generateBezier(0.86, 0, 0.07, 1)]);\nregisterEasing([\"easeInExpo\", generateBezier(0.95, 0.05, 0.795, 0.035)]);\nregisterEasing([\"easeOutExpo\", generateBezier(0.19, 1, 0.22, 1)]);\nregisterEasing([\"easeInOutExpo\", generateBezier(1, 0, 0, 1)]);\nregisterEasing([\"easeInCirc\", generateBezier(0.6, 0.04, 0.98, 0.335)]);\nregisterEasing([\"easeOutCirc\", generateBezier(0.075, 0.82, 0.165, 1)]);\nregisterEasing([\"easeInOutCirc\", generateBezier(0.785, 0.135, 0.15, 0.86)]);\n\n/* Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */\n/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass\n then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */\nfunction springAccelerationForState(state) {\n    return -state.tension * state.x - state.friction * state.v;\n}\nfunction springEvaluateStateWithDerivative(initialState, dt, derivative) {\n    var state = {\n        x: initialState.x + derivative.dx * dt,\n        v: initialState.v + derivative.dv * dt,\n        tension: initialState.tension,\n        friction: initialState.friction\n    };\n    return {\n        dx: state.v,\n        dv: springAccelerationForState(state)\n    };\n}\nfunction springIntegrateState(state, dt) {\n    var a = {\n        dx: state.v,\n        dv: springAccelerationForState(state)\n    },\n        b = springEvaluateStateWithDerivative(state, dt * 0.5, a),\n        c = springEvaluateStateWithDerivative(state, dt * 0.5, b),\n        d = springEvaluateStateWithDerivative(state, dt, c),\n        dxdt = 1 / 6 * (a.dx + 2 * (b.dx + c.dx) + d.dx),\n        dvdt = 1 / 6 * (a.dv + 2 * (b.dv + c.dv) + d.dv);\n    state.x = state.x + dxdt * dt;\n    state.v = state.v + dvdt * dt;\n    return state;\n}\nfunction generateSpringRK4(tension, friction, duration) {\n    var initState = {\n        x: -1,\n        v: 0,\n        tension: parseFloat(tension) || 500,\n        friction: parseFloat(friction) || 20\n    },\n        path = [0],\n        tolerance = 1 / 10000,\n        DT = 16 / 1000,\n        haveDuration = duration != null; // deliberate \"==\", as undefined == null != 0\n    var timeLapsed = 0,\n        dt = void 0,\n        lastState = void 0;\n    /* Calculate the actual time it takes for this animation to complete with the provided conditions. */\n    if (haveDuration) {\n        /* Run the simulation without a duration. */\n        timeLapsed = generateSpringRK4(initState.tension, initState.friction);\n        /* Compute the adjusted time delta. */\n        dt = timeLapsed / duration * DT;\n    } else {\n        dt = DT;\n    }\n    while (true) {\n        /* Next/step function .*/\n        lastState = springIntegrateState(lastState || initState, dt);\n        /* Store the position. */\n        path.push(1 + lastState.x);\n        timeLapsed += 16;\n        /* If the change threshold is reached, break. */\n        if (!(Math.abs(lastState.x) > tolerance && Math.abs(lastState.v) > tolerance)) {\n            break;\n        }\n    }\n    /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the\n     computed path and returns a snapshot of the position according to a given percentComplete. */\n    return !haveDuration ? timeLapsed : function (percentComplete, startValue, endValue) {\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        return startValue + path[Math.floor(percentComplete * (path.length - 1))] * (endValue - startValue);\n    };\n}\n\n// Constants\nvar cache = {};\nfunction generateStep(steps) {\n    var fn = cache[steps];\n    if (fn) {\n        return fn;\n    }\n    return cache[steps] = function (percentComplete, startValue, endValue) {\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        return startValue + Math.round(percentComplete * steps) * (1 / steps) * (endValue - startValue);\n    };\n}\n\n// Project\n/**\n * Parse a duration value and return an ms number. Optionally return a\n * default value if the number is not valid.\n */\nfunction parseDuration(duration, def) {\n    if (isNumber(duration)) {\n        return duration;\n    }\n    if (isString(duration)) {\n        return Duration[duration.toLowerCase()] || parseFloat(duration.replace(\"ms\", \"\").replace(\"s\", \"000\"));\n    }\n    return def == null ? undefined : parseDuration(def);\n}\n/**\n * Validate a <code>cache</code> option.\n */\nfunction validateCache(value) {\n    if (isBoolean(value)) {\n        return value;\n    }\n    if (value != null) {\n        console.warn(\"VelocityJS: Trying to set 'cache' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>begin</code> option.\n */\nfunction validateBegin(value) {\n    if (isFunction(value)) {\n        return value;\n    }\n    if (value != null) {\n        console.warn(\"VelocityJS: Trying to set 'begin' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>complete</code> option.\n */\nfunction validateComplete(value, noError) {\n    if (isFunction(value)) {\n        return value;\n    }\n    if (value != null && !noError) {\n        console.warn(\"VelocityJS: Trying to set 'complete' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>delay</code> option.\n */\nfunction validateDelay(value) {\n    var parsed = parseDuration(value);\n    if (!isNaN(parsed)) {\n        return parsed;\n    }\n    if (value != null) {\n        console.error(\"VelocityJS: Trying to set 'delay' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>duration</code> option.\n */\nfunction validateDuration(value, noError) {\n    var parsed = parseDuration(value);\n    if (!isNaN(parsed) && parsed >= 0) {\n        return parsed;\n    }\n    if (value != null && !noError) {\n        console.error(\"VelocityJS: Trying to set 'duration' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>easing</code> option.\n */\nfunction validateEasing(value, duration, noError) {\n    if (isString(value)) {\n        // Named easing\n        return Easings[value];\n    }\n    if (isFunction(value)) {\n        return value;\n    }\n    // TODO: We should only do these if the correct function exists - don't force loading.\n    if (Array.isArray(value)) {\n        if (value.length === 1) {\n            // Steps\n            return generateStep(value[0]);\n        }\n        if (value.length === 2) {\n            // springRK4 must be passed the animation's duration.\n            // Note: If the springRK4 array contains non-numbers,\n            // generateSpringRK4() returns an easing function generated with\n            // default tension and friction values.\n            return generateSpringRK4(value[0], value[1], duration);\n        }\n        if (value.length === 4) {\n            // Note: If the bezier array contains non-numbers, generateBezier()\n            // returns undefined.\n            return generateBezier.apply(null, value) || false;\n        }\n    }\n    if (value != null && !noError) {\n        console.error(\"VelocityJS: Trying to set 'easing' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>fpsLimit</code> option.\n */\nfunction validateFpsLimit(value) {\n    if (value === false) {\n        return 0;\n    } else {\n        var parsed = parseInt(value, 10);\n        if (!isNaN(parsed) && parsed >= 0) {\n            return Math.min(parsed, 60);\n        }\n    }\n    if (value != null) {\n        console.warn(\"VelocityJS: Trying to set 'fpsLimit' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>loop</code> option.\n */\nfunction validateLoop(value) {\n    switch (value) {\n        case false:\n            return 0;\n        case true:\n            return true;\n        default:\n            var parsed = parseInt(value, 10);\n            if (!isNaN(parsed) && parsed >= 0) {\n                return parsed;\n            }\n            break;\n    }\n    if (value != null) {\n        console.warn(\"VelocityJS: Trying to set 'loop' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>progress</code> option.\n */\nfunction validateProgress(value) {\n    if (isFunction(value)) {\n        return value;\n    }\n    if (value != null) {\n        console.warn(\"VelocityJS: Trying to set 'progress' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>promise</code> option.\n */\nfunction validatePromise(value) {\n    if (isBoolean(value)) {\n        return value;\n    }\n    if (value != null) {\n        console.warn(\"VelocityJS: Trying to set 'promise' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>promiseRejectEmpty</code> option.\n */\nfunction validatePromiseRejectEmpty(value) {\n    if (isBoolean(value)) {\n        return value;\n    }\n    if (value != null) {\n        console.warn(\"VelocityJS: Trying to set 'promiseRejectEmpty' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>queue</code> option.\n */\nfunction validateQueue(value, noError) {\n    if (value === false || isString(value)) {\n        return value;\n    }\n    if (value != null && !noError) {\n        console.warn(\"VelocityJS: Trying to set 'queue' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>repeat</code> option.\n */\nfunction validateRepeat(value) {\n    switch (value) {\n        case false:\n            return 0;\n        case true:\n            return true;\n        default:\n            var parsed = parseInt(value, 10);\n            if (!isNaN(parsed) && parsed >= 0) {\n                return parsed;\n            }\n            break;\n    }\n    if (value != null) {\n        console.warn(\"VelocityJS: Trying to set 'repeat' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>speed</code> option.\n */\nfunction validateSpeed(value) {\n    if (isNumber(value)) {\n        return value;\n    }\n    if (value != null) {\n        console.error(\"VelocityJS: Trying to set 'speed' to an invalid value:\", value);\n    }\n}\n/**\n * Validate a <code>sync</code> option.\n */\nfunction validateSync(value) {\n    if (isBoolean(value)) {\n        return value;\n    }\n    if (value != null) {\n        console.error(\"VelocityJS: Trying to set 'sync' to an invalid value:\", value);\n    }\n}\n\n// Project\n// NOTE: Add the variable here, then add the default state in \"reset\" below.\nvar cache$1 = void 0,\n    begin = void 0,\n    complete = void 0,\n    delay = void 0,\n    duration = void 0,\n    easing = void 0,\n    fpsLimit = void 0,\n    loop = void 0,\n    mobileHA = void 0,\n    minFrameTime = void 0,\n    promise = void 0,\n    promiseRejectEmpty = void 0,\n    queue = void 0,\n    repeat = void 0,\n    speed = void 0,\n    sync = void 0;\nvar defaults$1 = function () {\n    function defaults$$1() {\n        classCallCheck(this, defaults$$1);\n    }\n\n    createClass(defaults$$1, null, [{\n        key: \"reset\",\n        value: function reset() {\n            cache$1 = DEFAULT_CACHE;\n            begin = undefined;\n            complete = undefined;\n            delay = DEFAULT_DELAY;\n            duration = DEFAULT_DURATION;\n            easing = validateEasing(DEFAULT_EASING, DEFAULT_DURATION);\n            fpsLimit = DEFAULT_FPSLIMIT;\n            loop = DEFAULT_LOOP;\n            minFrameTime = FUZZY_MS_PER_SECOND / DEFAULT_FPSLIMIT;\n            promise = DEFAULT_PROMISE;\n            promiseRejectEmpty = DEFAULT_PROMISE_REJECT_EMPTY;\n            queue = DEFAULT_QUEUE;\n            repeat = DEFAULT_REPEAT;\n            speed = DEFAULT_SPEED;\n            sync = DEFAULT_SYNC;\n        }\n    }, {\n        key: \"cache\",\n        get: function get$$1() {\n            return cache$1;\n        },\n        set: function set$$1(value) {\n            value = validateCache(value);\n            if (value !== undefined) {\n                cache$1 = value;\n            }\n        }\n    }, {\n        key: \"begin\",\n        get: function get$$1() {\n            return begin;\n        },\n        set: function set$$1(value) {\n            value = validateBegin(value);\n            if (value !== undefined) {\n                begin = value;\n            }\n        }\n    }, {\n        key: \"complete\",\n        get: function get$$1() {\n            return complete;\n        },\n        set: function set$$1(value) {\n            value = validateComplete(value);\n            if (value !== undefined) {\n                complete = value;\n            }\n        }\n    }, {\n        key: \"delay\",\n        get: function get$$1() {\n            return delay;\n        },\n        set: function set$$1(value) {\n            value = validateDelay(value);\n            if (value !== undefined) {\n                delay = value;\n            }\n        }\n    }, {\n        key: \"duration\",\n        get: function get$$1() {\n            return duration;\n        },\n        set: function set$$1(value) {\n            value = validateDuration(value);\n            if (value !== undefined) {\n                duration = value;\n            }\n        }\n    }, {\n        key: \"easing\",\n        get: function get$$1() {\n            return easing;\n        },\n        set: function set$$1(value) {\n            value = validateEasing(value, duration);\n            if (value !== undefined) {\n                easing = value;\n            }\n        }\n    }, {\n        key: \"fpsLimit\",\n        get: function get$$1() {\n            return fpsLimit;\n        },\n        set: function set$$1(value) {\n            value = validateFpsLimit(value);\n            if (value !== undefined) {\n                fpsLimit = value;\n                minFrameTime = FUZZY_MS_PER_SECOND / value;\n            }\n        }\n    }, {\n        key: \"loop\",\n        get: function get$$1() {\n            return loop;\n        },\n        set: function set$$1(value) {\n            value = validateLoop(value);\n            if (value !== undefined) {\n                loop = value;\n            }\n        }\n    }, {\n        key: \"mobileHA\",\n        get: function get$$1() {\n            return mobileHA;\n        },\n        set: function set$$1(value) {\n            if (isBoolean(value)) {\n                mobileHA = value;\n            }\n        }\n    }, {\n        key: \"minFrameTime\",\n        get: function get$$1() {\n            return minFrameTime;\n        }\n    }, {\n        key: \"promise\",\n        get: function get$$1() {\n            return promise;\n        },\n        set: function set$$1(value) {\n            value = validatePromise(value);\n            if (value !== undefined) {\n                promise = value;\n            }\n        }\n    }, {\n        key: \"promiseRejectEmpty\",\n        get: function get$$1() {\n            return promiseRejectEmpty;\n        },\n        set: function set$$1(value) {\n            value = validatePromiseRejectEmpty(value);\n            if (value !== undefined) {\n                promiseRejectEmpty = value;\n            }\n        }\n    }, {\n        key: \"queue\",\n        get: function get$$1() {\n            return queue;\n        },\n        set: function set$$1(value) {\n            value = validateQueue(value);\n            if (value !== undefined) {\n                queue = value;\n            }\n        }\n    }, {\n        key: \"repeat\",\n        get: function get$$1() {\n            return repeat;\n        },\n        set: function set$$1(value) {\n            value = validateRepeat(value);\n            if (value !== undefined) {\n                repeat = value;\n            }\n        }\n    }, {\n        key: \"repeatAgain\",\n        get: function get$$1() {\n            return repeat;\n        }\n    }, {\n        key: \"speed\",\n        get: function get$$1() {\n            return speed;\n        },\n        set: function set$$1(value) {\n            value = validateSpeed(value);\n            if (value !== undefined) {\n                speed = value;\n            }\n        }\n    }, {\n        key: \"sync\",\n        get: function get$$1() {\n            return sync;\n        },\n        set: function set$$1(value) {\n            value = validateSync(value);\n            if (value !== undefined) {\n                sync = value;\n            }\n        }\n    }]);\n    return defaults$$1;\n}();\nObject.freeze(defaults$1);\n// Reset to our default values, currently everything is undefined.\ndefaults$1.reset();\n\n/**\n * The highest type index for finding the best normalization for a property.\n */\n/**\n * Unlike \"actions\", normalizations can always be replaced by users.\n */\nvar Normalizations = [];\n/**\n * Store a cross-reference to units to be added to specific normalization\n * functions if the user supplies a unit-less number.\n *\n * This is pretty much confined to adding \"px\" to several css properties.\n */\nvar NormalizationUnits = {};\n/**\n * Any normalisations that should never be cached are listed here.\n * Faster than an array - https://jsperf.com/array-includes-and-find-methods-vs-set-has\n */\nvar NoCacheNormalizations = new Set();\n/**\n * An array of classes used for the per-class normalizations. This\n * translates into a bitwise enum for quick cross-reference, and so that\n * the element doesn't need multiple <code>instanceof</code> calls every\n * frame.\n */\nvar constructors = [];\n/**\n * A cache of the various constructors we've found and mapping to their real\n * name - saves expensive lookups.\n */\nvar constructorCache = new Map();\n\n// Project\n// Constants\nvar dataName = \"velocityData\";\n/**\n * Get (and create) the internal data store for an element.\n */\nfunction Data(element) {\n    // Use a string member so Uglify doesn't mangle it.\n    var data = element[dataName];\n    if (data) {\n        return data;\n    }\n    var window = element.ownerDocument.defaultView;\n    var types = 0;\n    for (var index = 0; index < constructors.length; index++) {\n        var _constructor = constructors[index];\n        if (isString(_constructor)) {\n            if (element instanceof window[_constructor]) {\n                types |= 1 << index; // tslint:disable-line:no-bitwise\n            }\n        } else if (element instanceof _constructor) {\n            types |= 1 << index; // tslint:disable-line:no-bitwise\n        }\n    }\n    // Use an intermediate object so it errors on incorrect data.\n    var newData = {\n        types: types,\n        count: 0,\n        computedStyle: null,\n        cache: {},\n        queueList: {},\n        lastAnimationList: {},\n        lastFinishList: {},\n        window: window\n    };\n    Object.defineProperty(element, dataName, {\n        value: newData\n    });\n    return newData;\n}\n\n// Constants\nvar isClient = window && window === window.window,\n    windowScrollAnchor = isClient && window.pageYOffset !== undefined;\nvar State = {\n    isClient: isClient,\n    isMobile: isClient && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n    isGingerbread: isClient && /Android 2\\.3\\.[3-7]/i.test(navigator.userAgent),\n    prefixElement: isClient && document.createElement(\"div\"),\n    windowScrollAnchor: windowScrollAnchor,\n    scrollAnchor: windowScrollAnchor ? window : !isClient || document.documentElement || document.body.parentNode || document.body,\n    scrollPropertyLeft: windowScrollAnchor ? \"pageXOffset\" : \"scrollLeft\",\n    scrollPropertyTop: windowScrollAnchor ? \"pageYOffset\" : \"scrollTop\",\n    className: CLASSNAME,\n    isTicking: false,\n    first: undefined,\n    last: undefined,\n    firstNew: undefined\n};\n\n// Project\n/**\n * Simple queue management. Un-named queue is directly within the element data,\n * named queue is within an object within it.\n */\nfunction animate(animation) {\n    var prev = State.last;\n    animation._prev = prev;\n    animation._next = undefined;\n    if (prev) {\n        prev._next = animation;\n    } else {\n        State.first = animation;\n    }\n    State.last = animation;\n    if (!State.firstNew) {\n        State.firstNew = animation;\n    }\n    var element = animation.element,\n        data = Data(element);\n    if (!data.count++) {\n        ////////////////////////\n        // Feature: Classname //\n        ////////////////////////\n        addClass(element, State.className);\n    }\n}\n/**\n * Add an item to an animation queue.\n */\nfunction queue$1(element, animation, queueName) {\n    var data = Data(element);\n    if (queueName !== false) {\n        // Store the last animation added so we can use it for the\n        // beginning of the next one.\n        data.lastAnimationList[queueName] = animation;\n    }\n    if (queueName === false) {\n        animate(animation);\n    } else {\n        if (!isString(queueName)) {\n            queueName = \"\";\n        }\n        var last = data.queueList[queueName];\n        if (!last) {\n            if (last === null) {\n                data.queueList[queueName] = animation;\n            } else {\n                data.queueList[queueName] = null;\n                animate(animation);\n            }\n        } else {\n            while (last._next) {\n                last = last._next;\n            }\n            last._next = animation;\n            animation._prev = last;\n        }\n    }\n}\n/**\n * Start the next animation on this element's queue (named or default).\n *\n * @returns the next animation that is starting.\n */\nfunction dequeue(element, queueName, skip) {\n    if (queueName !== false) {\n        if (!isString(queueName)) {\n            queueName = \"\";\n        }\n        var data = Data(element),\n            animation = data.queueList[queueName];\n        if (animation) {\n            data.queueList[queueName] = animation._next || null;\n            if (!skip) {\n                animate(animation);\n            }\n        } else if (animation === null) {\n            delete data.queueList[queueName];\n        }\n        return animation;\n    }\n}\n/**\n * Remove an animation from the active animation list. If it has a queue set\n * then remember it as the last animation for that queue, and free the one\n * that was previously there. If the animation list is completely empty then\n * mark us as finished.\n */\nfunction freeAnimationCall(animation) {\n    var next = animation._next,\n        prev = animation._prev,\n        queueName = animation.queue == null ? animation.options.queue : animation.queue;\n    if (State.firstNew === animation) {\n        State.firstNew = next;\n    }\n    if (State.first === animation) {\n        State.first = next;\n    } else if (prev) {\n        prev._next = next;\n    }\n    if (State.last === animation) {\n        State.last = prev;\n    } else if (next) {\n        next._prev = prev;\n    }\n    if (queueName) {\n        var data = Data(animation.element);\n        if (data) {\n            animation._next = animation._prev = undefined;\n        }\n    }\n}\n\nvar SequencesObject = {};\n\n// Project\n/**\n * Call the complete method of an animation in a separate function so it can\n * benefit from JIT compiling while still having a try/catch block.\n */\nfunction callComplete(activeCall) {\n    var callback = activeCall.complete || activeCall.options.complete;\n    if (callback) {\n        try {\n            var elements = activeCall.elements;\n            callback.call(elements, elements, activeCall);\n        } catch (error) {\n            setTimeout(function () {\n                throw error;\n            }, 1);\n        }\n    }\n}\n/**\n * Complete an animation. This might involve restarting (for loop or repeat\n * options). Once it is finished we also check for any callbacks or Promises\n * that need updating.\n */\nfunction completeCall(activeCall) {\n    // TODO: Check if it's not been completed already\n    var options = activeCall.options,\n        queue = getValue(activeCall.queue, options.queue),\n        isLoop = getValue(activeCall.loop, options.loop, defaults$1.loop),\n        isRepeat = getValue(activeCall.repeat, options.repeat, defaults$1.repeat),\n        isStopped = activeCall._flags & 8 /* STOPPED */; // tslint:disable-line:no-bitwise\n    if (!isStopped && (isLoop || isRepeat)) {\n        ////////////////////\n        // Option: Loop   //\n        // Option: Repeat //\n        ////////////////////\n        if (isRepeat && isRepeat !== true) {\n            activeCall.repeat = isRepeat - 1;\n        } else if (isLoop && isLoop !== true) {\n            activeCall.loop = isLoop - 1;\n            activeCall.repeat = getValue(activeCall.repeatAgain, options.repeatAgain, defaults$1.repeatAgain);\n        }\n        if (isLoop) {\n            activeCall._flags ^= 64 /* REVERSE */; // tslint:disable-line:no-bitwise\n        }\n        if (queue !== false) {\n            // Can't be called when stopped so no need for an extra check.\n            Data(activeCall.element).lastFinishList[queue] = activeCall.timeStart + getValue(activeCall.duration, options.duration, defaults$1.duration);\n        }\n        activeCall.timeStart = activeCall.ellapsedTime = activeCall.percentComplete = 0;\n        activeCall._flags &= ~4 /* STARTED */; // tslint:disable-line:no-bitwise\n    } else {\n        var element = activeCall.element,\n            data = Data(element);\n        if (! --data.count && !isStopped) {\n            ////////////////////////\n            // Feature: Classname //\n            ////////////////////////\n            removeClass(element, State.className);\n        }\n        //////////////////////\n        // Option: Complete //\n        //////////////////////\n        // If this is the last animation in this list then we can check for\n        // and complete calls or Promises.\n        // TODO: When deleting an element we need to adjust these values.\n        if (options && ++options._completed === options._total) {\n            if (!isStopped && options.complete) {\n                // We don't call the complete if the animation is stopped,\n                // and we clear the key to prevent it being called again.\n                callComplete(activeCall);\n                options.complete = null;\n            }\n            var resolver = options._resolver;\n            if (resolver) {\n                // Fulfil the Promise\n                resolver(activeCall.elements);\n                delete options._resolver;\n            }\n        }\n        ///////////////////\n        // Option: Queue //\n        ///////////////////\n        if (queue !== false) {\n            // We only do clever things with queues...\n            if (!isStopped) {\n                // If we're not stopping an animation, we need to remember\n                // what time it finished so that the next animation in\n                // sequence gets the correct start time.\n                data.lastFinishList[queue] = activeCall.timeStart + getValue(activeCall.duration, options.duration, defaults$1.duration);\n            }\n            // Start the next animation in sequence, or delete the queue if\n            // this was the last one.\n            dequeue(element, queue);\n        }\n        // Cleanup any pointers, and remember the last animation etc.\n        freeAnimationCall(activeCall);\n    }\n}\n\n// Project\n/**\n * Used to register a normalization. This should never be called by users\n * directly, instead it should be called via an action:<br/>\n * <code>Velocity(\"registerNormalization\", \"Element\", \"name\", VelocityNormalizationsFn[, false]);</code>\n *\n * The second argument is the class of the animatable object. If this is passed\n * as a class name (ie, `\"Element\"` -> `window[\"Element\"]`) then this will work\n * cross-iframe. If passed as an actual class (ie `Element`) then it will\n * attempt to find the class on the window and use that name instead. If it\n * can't find it then it will use the class passed, which allows for custom\n * animation targets, but will not work cross-iframe boundary.\n *\n * The fourth argument can be an explicit <code>false</code>, which prevents\n * the property from being cached. Please note that this can be dangerous\n * for performance!\n */\nfunction registerNormalization(args) {\n    var constructor = args[0],\n        name = args[1],\n        callback = args[2];\n    if (isString(constructor) && !(window[constructor] instanceof Object) || !isString(constructor) && !(constructor instanceof Object)) {\n        console.warn(\"VelocityJS: Trying to set 'registerNormalization' constructor to an invalid value:\", constructor);\n    } else if (!isString(name)) {\n        console.warn(\"VelocityJS: Trying to set 'registerNormalization' name to an invalid value:\", name);\n    } else if (!isFunction(callback)) {\n        console.warn(\"VelocityJS: Trying to set 'registerNormalization' callback to an invalid value:\", name, callback);\n    } else {\n        var index = constructors.indexOf(constructor),\n            nextArg = 3;\n        if (index < 0 && !isString(constructor)) {\n            if (constructorCache.has(constructor)) {\n                index = constructors.indexOf(constructorCache.get(constructor));\n            } else {\n                for (var property in window) {\n                    if (window[property] === constructor) {\n                        index = constructors.indexOf(property);\n                        if (index < 0) {\n                            index = constructors.push(property) - 1;\n                            Normalizations[index] = {};\n                            constructorCache.set(constructor, property);\n                        }\n                        break;\n                    }\n                }\n            }\n        }\n        if (index < 0) {\n            index = constructors.push(constructor) - 1;\n            Normalizations[index] = {};\n        }\n        Normalizations[index][name] = callback;\n        if (isString(args[nextArg])) {\n            var unit = args[nextArg++];\n            var units = NormalizationUnits[unit];\n            if (!units) {\n                units = NormalizationUnits[unit] = [];\n            }\n            units.push(callback);\n        }\n        if (args[nextArg] === false) {\n            NoCacheNormalizations.add(name);\n        }\n    }\n}\n/**\n * Used to check if a normalisation exists on a specific class.\n */\nfunction hasNormalization(args) {\n    var constructor = args[0],\n        name = args[1];\n    var index = constructors.indexOf(constructor);\n    if (index < 0 && !isString(constructor)) {\n        if (constructorCache.has(constructor)) {\n            index = constructors.indexOf(constructorCache.get(constructor));\n        } else {\n            for (var property in window) {\n                if (window[property] === constructor) {\n                    index = constructors.indexOf(property);\n                    break;\n                }\n            }\n        }\n    }\n    return index >= 0 && Normalizations[index].hasOwnProperty(name);\n}\n/**\n * Get the unit to add to a unitless number based on the normalization used.\n */\nfunction getNormalizationUnit(fn) {\n    for (var unit in NormalizationUnits) {\n        if (NormalizationUnits[unit].includes(fn)) {\n            return unit;\n        }\n    }\n    return \"\";\n}\n/**\n * Get the normalization for an element and propertyName combination. This\n * value should be cached at asking time, as it may change if the user adds\n * more normalizations.\n */\nfunction getNormalization(element, propertyName) {\n    var data = Data(element);\n    var fn = void 0;\n    for (var index = constructors.length - 1, types = data.types; !fn && index >= 0; index--) {\n        if (types & 1 << index) {\n            // tslint:disable-line:no-bitwise\n            fn = Normalizations[index][propertyName];\n        }\n    }\n    return fn;\n}\nregisterAction([\"registerNormalization\", registerNormalization]);\nregisterAction([\"hasNormalization\", hasNormalization]);\n\n// Project\n/**\n * The singular setPropertyValue, which routes the logic for all\n * normalizations.\n */\nfunction setPropertyValue(element, propertyName, propertyValue, fn) {\n    var noCache = NoCacheNormalizations.has(propertyName),\n        data = !noCache && Data(element);\n    if (noCache || data && data.cache[propertyName] !== propertyValue) {\n        // By setting it to undefined we force a true \"get\" later\n        if (!noCache) {\n            data.cache[propertyName] = propertyValue || undefined;\n        }\n        fn = fn || getNormalization(element, propertyName);\n        if (fn) {\n            fn(element, propertyValue);\n        }\n        if (Velocity$$1.debug >= 2) {\n            console.info(\"Set \\\"\" + propertyName + \"\\\": \\\"\" + propertyValue + \"\\\"\", element);\n        }\n    }\n}\n\n/**\n * Remove nested `calc(0px + *)` or `calc(* + (0px + *))` correctly.\n */\nfunction removeNestedCalc(value) {\n    if (value.indexOf(\"calc(\") >= 0) {\n        var tokens = value.split(/([\\(\\)])/);\n        var depth = 0;\n        for (var i = 0; i < tokens.length; i++) {\n            var token = tokens[i];\n            switch (token) {\n                case \"(\":\n                    depth++;\n                    break;\n                case \")\":\n                    depth--;\n                    break;\n                default:\n                    if (depth && token[0] === \"0\") {\n                        tokens[i] = token.replace(/^0[a-z%]+ \\+ /, \"\");\n                    }\n                    break;\n            }\n        }\n        return tokens.join(\"\").replace(/(?:calc)?\\(([0-9\\.]+[a-z%]+)\\)/g, \"$1\");\n    }\n    return value;\n}\n\n/**\n * Cache every camelCase match to avoid repeating lookups.\n */\nvar cache$2 = {};\n/**\n * Camelcase a property name into its JavaScript notation (e.g.\n * \"background-color\" ==> \"backgroundColor\"). Camelcasing is used to\n * normalize property names between and across calls.\n */\nfunction camelCase(property) {\n  var fixed = cache$2[property];\n  if (fixed) {\n    return fixed;\n  }\n  return cache$2[property] = property.replace(/-([a-z])/g, function ($, letter) {\n    return letter.toUpperCase();\n  });\n}\n\n// Constants\nvar rxColor6 = /#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})/gi,\n    rxColor3 = /#([a-f\\d])([a-f\\d])([a-f\\d])/gi,\n    rxColorName = /(rgba?\\(\\s*)?(\\b[a-z]+\\b)/g,\n    rxRGB = /rgb(a?)\\(([^\\)]+)\\)/gi,\n    rxSpaces = /\\s+/g;\n/**\n * This is the list of color names -> rgb values. The object is in here so\n * that the actual name conversion can be in a separate file and not\n * included for custom builds.\n */\nvar ColorNames = {};\n/**\n * Convert a hex list to an rgba value. Designed to be used in replace.\n */\nfunction makeRGBA(ignore, r, g, b) {\n    return \"rgba(\" + parseInt(r, 16) + \",\" + parseInt(g, 16) + \",\" + parseInt(b, 16) + \",1)\";\n}\n/**\n * Replace any css colour name with its rgba() value. It is possible to use\n * the name within an \"rgba(blue, 0.4)\" string this way.\n */\nfunction fixColors(str) {\n    return str.replace(rxColor6, makeRGBA).replace(rxColor3, function ($0, r, g, b) {\n        return makeRGBA($0, r + r, g + g, b + b);\n    }).replace(rxColorName, function ($0, $1, $2) {\n        if (ColorNames[$2]) {\n            return ($1 ? $1 : \"rgba(\") + ColorNames[$2] + ($1 ? \"\" : \",1)\");\n        }\n        return $0;\n    }).replace(rxRGB, function ($0, $1, $2) {\n        return \"rgba(\" + ($2.replace(rxSpaces, \"\") + ($1 ? \"\" : \",1\")) + \")\";\n    });\n}\n\n// Project\n/**\n * Figure out the dimensions for this width / height based on the\n * potential borders and whether we care about them.\n */\nfunction augmentDimension(element, name, wantInner) {\n    var isBorderBox = getPropertyValue(element, \"boxSizing\").toString().toLowerCase() === \"border-box\";\n    if (isBorderBox === wantInner) {\n        // in box-sizing mode, the CSS width / height accessors already\n        // give the outerWidth / outerHeight.\n        var sides = name === \"width\" ? [\"Left\", \"Right\"] : [\"Top\", \"Bottom\"],\n            fields = [\"padding\" + sides[0], \"padding\" + sides[1], \"border\" + sides[0] + \"Width\", \"border\" + sides[1] + \"Width\"];\n        var augment = 0;\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n            for (var _iterator = fields[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                var field = _step.value;\n\n                var value = parseFloat(getPropertyValue(element, field));\n                if (!isNaN(value)) {\n                    augment += value;\n                }\n            }\n        } catch (err) {\n            _didIteratorError = true;\n            _iteratorError = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion && _iterator.return) {\n                    _iterator.return();\n                }\n            } finally {\n                if (_didIteratorError) {\n                    throw _iteratorError;\n                }\n            }\n        }\n\n        return wantInner ? -augment : augment;\n    }\n    return 0;\n}\n\n// Project\n/**\n * Get the width or height of an element, pulled out as it can be used when the\n * in two locations so don't want to repeat it.\n */\nfunction getWidthHeight(element, property) {\n    return element.getBoundingClientRect()[property] + augmentDimension(element, property, true) + \"px\";\n}\n// TODO: This is still a complete mess\nfunction computePropertyValue(element, property) {\n    var data = Data(element),\n\n    // If computedStyle is cached, use it. If not then get the correct one\n    // for the element to support cross-iframe boundaries.\n    computedStyle = data.computedStyle ? data.computedStyle : data.window.getComputedStyle(element, null);\n    var computedValue = 0;\n    if (!data.computedStyle) {\n        data.computedStyle = computedStyle;\n    }\n    if (computedStyle[\"display\"] === \"none\") {\n        switch (property) {\n            case \"width\":\n            case \"height\":\n                // Browsers do not return height and width values for elements\n                // that are set to display:\"none\". Thus, we temporarily toggle\n                // display to the element type's default value.\n                setPropertyValue(element, \"display\", \"auto\");\n                computedValue = getWidthHeight(element, property);\n                setPropertyValue(element, \"display\", \"none\");\n                return String(computedValue);\n        }\n    }\n    /* IE and Firefox do not return a value for the generic borderColor -- they only return individual values for each border side's color.\n     Also, in all browsers, when border colors aren't all the same, a compound value is returned that Velocity isn't setup to parse.\n     So, as a polyfill for querying individual border side colors, we just return the top border's color and animate all borders from that value. */\n    /* TODO: There is a borderColor normalisation in legacy/ - figure out where this is needed... */\n    computedValue = computedStyle[property];\n    /* Fall back to the property's style value (if defined) when computedValue returns nothing,\n     which can happen when the element hasn't been painted. */\n    if (!computedValue) {\n        computedValue = element.style[property];\n    }\n    /* For top, right, bottom, and left (TRBL) values that are set to \"auto\" on elements of \"fixed\" or \"absolute\" position,\n     defer to jQuery for converting \"auto\" to a numeric value. (For elements with a \"static\" or \"relative\" position, \"auto\" has the same\n     effect as being set to 0, so no conversion is necessary.) */\n    /* An example of why numeric conversion is necessary: When an element with \"position:absolute\" has an untouched \"left\"\n     property, which reverts to \"auto\", left's value is 0 relative to its parent element, but is often non-zero relative\n     to its *containing* (not parent) element, which is the nearest \"position:relative\" ancestor or the viewport (and always the viewport in the case of \"position:fixed\"). */\n    if (computedValue === \"auto\") {\n        switch (property) {\n            case \"width\":\n            case \"height\":\n                computedValue = getWidthHeight(element, property);\n                break;\n            case \"top\":\n            case \"left\":\n\n            case \"right\":\n            case \"bottom\":\n                var position = getPropertyValue(element, \"position\");\n                if (position === \"fixed\" || position === \"absolute\") {\n                    // Note: this has no pixel unit on its returned values,\n                    // we re-add it here to conform with\n                    // computePropertyValue's behavior.\n                    computedValue = element.getBoundingClientRect[property] + \"px\";\n                    break;\n                }\n            // Deliberate fallthrough!\n            default:\n                computedValue = \"0px\";\n                break;\n        }\n    }\n    return computedValue ? String(computedValue) : \"\";\n}\n/**\n * Get a property value. This will grab via the cache if it exists, then\n * via any normalisations.\n */\nfunction getPropertyValue(element, propertyName, fn, skipCache) {\n    var data = Data(element);\n    var propertyValue = void 0;\n    if (NoCacheNormalizations.has(propertyName)) {\n        skipCache = true;\n    }\n    if (!skipCache && data && data.cache[propertyName] != null) {\n        propertyValue = data.cache[propertyName];\n    } else {\n        fn = fn || getNormalization(element, propertyName);\n        if (fn) {\n            propertyValue = fn(element);\n            if (data) {\n                data.cache[propertyName] = propertyValue;\n            }\n        }\n    }\n    if (Velocity$$1.debug >= 2) {\n        console.info(\"Get \\\"\" + propertyName + \"\\\": \\\"\" + propertyValue + \"\\\"\", element);\n    }\n    return propertyValue;\n}\n\n// Project\n// Constants\nvar rxHex = /^#([A-f\\d]{3}){1,2}$/i,\n    commands = {\n    function: function _function(value, element, elements, elementArrayIndex, propertyName, tween) {\n        return value.call(element, elementArrayIndex, elements.length, propertyName);\n    },\n    number: function number(value, element, elements, elementArrayIndex, propertyName, tween) {\n        return String(value) + getNormalizationUnit(tween.fn);\n    },\n    string: function string(value, element, elements, elementArrayIndex, propertyName, tween) {\n        return fixColors(value);\n    },\n    undefined: function undefined(value, element, elements, elementArrayIndex, propertyName, tween) {\n        return fixColors(getPropertyValue(element, propertyName, tween.fn) || \"\");\n    }\n};\n/**\n * Expand a VelocityProperty argument into a valid sparse Tween array. This\n * pre-allocates the array as it is then the correct size and slightly\n * faster to access.\n */\nfunction expandProperties(animation, properties) {\n    var tweens = animation.tweens = Object.create(null),\n        elements = animation.elements,\n        element = animation.element,\n        elementArrayIndex = elements.indexOf(element),\n        data = Data(element),\n        queue = getValue(animation.queue, animation.options.queue),\n        duration = getValue(animation.options.duration, defaults$1.duration);\n    for (var property in properties) {\n        if (properties.hasOwnProperty(property)) {\n            var propertyName = camelCase(property),\n                fn = getNormalization(element, propertyName);\n            var valueData = properties[property];\n            if (!fn && propertyName !== \"tween\") {\n                if (Velocity$$1.debug) {\n                    console.log(\"Skipping \\\"\" + property + \"\\\" due to a lack of browser support.\");\n                }\n                continue;\n            }\n            if (valueData == null) {\n                if (Velocity$$1.debug) {\n                    console.log(\"Skipping \\\"\" + property + \"\\\" due to no value supplied.\");\n                }\n                continue;\n            }\n            var tween = tweens[propertyName] = {};\n            var endValue = void 0,\n                startValue = void 0;\n            tween.fn = fn;\n            if (isFunction(valueData)) {\n                // If we have a function as the main argument then resolve\n                // it first, in case it returns an array that needs to be\n                // split.\n                valueData = valueData.call(element, elementArrayIndex, elements.length, elements);\n            }\n            if (Array.isArray(valueData)) {\n                // valueData is an array in the form of\n                // [ endValue, [, easing] [, startValue] ]\n                var arr1 = valueData[1],\n                    arr2 = valueData[2];\n                endValue = valueData[0];\n                if (isString(arr1) && (/^[\\d-]/.test(arr1) || rxHex.test(arr1)) || isFunction(arr1) || isNumber(arr1)) {\n                    startValue = arr1;\n                } else if (isString(arr1) && Easings[arr1] || Array.isArray(arr1)) {\n                    tween.easing = validateEasing(arr1, duration);\n                    startValue = arr2;\n                } else {\n                    startValue = arr1 || arr2;\n                }\n            } else {\n                endValue = valueData;\n            }\n            tween.end = commands[typeof endValue === \"undefined\" ? \"undefined\" : _typeof(endValue)](endValue, element, elements, elementArrayIndex, propertyName, tween);\n            if (startValue != null || queue === false || data.queueList[queue] === undefined) {\n                tween.start = commands[typeof startValue === \"undefined\" ? \"undefined\" : _typeof(startValue)](startValue, element, elements, elementArrayIndex, propertyName, tween);\n                explodeTween(propertyName, tween, duration);\n            }\n        }\n    }\n}\n// TODO: Needs a better match for \"translate3d\" etc - a number must be preceded by some form of break...\nvar rxToken = /((?:[+\\-*/]=)?(?:[+-]?\\d*\\.\\d+|[+-]?\\d+)[a-z%]*|(?:.(?!$|[+-]?\\d|[+\\-*/]=[+-]?\\d))+.|.)/g,\n    rxNumber = /^([+\\-*/]=)?([+-]?\\d*\\.\\d+|[+-]?\\d+)(.*)$/;\n/**\n * Find a pattern between multiple strings, return a VelocitySequence with\n * the pattern and the tokenised values.\n *\n * If number then animate.\n * If a string then must match.\n * If units then convert between them by wrapping in a calc().\n * - If already in a calc then nest another layer.\n * If in an rgba() then the first three numbers are rounded.\n */\nfunction findPattern(parts, propertyName) {\n    var partsLength = parts.length,\n        tokens = [],\n        indexes = [];\n    var numbers = void 0;\n    // First tokenise the strings - these have all values, we will pull\n    // numbers later.\n    for (var part = 0; part < partsLength; part++) {\n        if (isString(parts[part])) {\n            if (parts[part] === \"\") {\n                tokens[part] = [\"\"];\n            } else {\n                tokens[part] = cloneArray(parts[part].match(rxToken));\n            }\n            indexes[part] = 0;\n            // If it matches more than one thing then we've got a number.\n            numbers = numbers || tokens[part].length > 1;\n            //console.log(`tokens:`, parts[part], tokens[part])\n        } else {\n            // We have an incomplete lineup, it will get tried again later...\n            return;\n        }\n    }\n    var sequence = [],\n        pattern = sequence.pattern = [],\n        addString = function addString(text) {\n        if (isString(pattern[pattern.length - 1])) {\n            pattern[pattern.length - 1] += text;\n        } else if (text) {\n            pattern.push(text);\n            for (var _part = 0; _part < partsLength; _part++) {\n                sequence[_part].push(null);\n            }\n        }\n    },\n        returnStringType = function returnStringType() {\n        if (numbers || pattern.length > 1) {\n            //console.error(`Velocity: Trying to pattern match mis-matched strings \"${propertyName}\":`, parts);\n            return;\n        }\n        var isDisplay = propertyName === \"display\",\n            isVisibility = propertyName === \"visibility\";\n        for (var _part2 = 0; _part2 < partsLength; _part2++) {\n            var value = parts[_part2];\n            sequence[_part2][0] = value;\n            // Don't care about duration...\n            sequence[_part2].easing = validateEasing(isDisplay && value === \"none\" || isVisibility && value === \"hidden\" || !isDisplay && !isVisibility ? \"at-end\" : \"at-start\", 400);\n        }\n        pattern[0] = false;\n        return sequence;\n    };\n    var more = true;\n    for (var _part3 = 0; _part3 < partsLength; _part3++) {\n        sequence[_part3] = [];\n    }\n    while (more) {\n        var bits = [],\n            units = [];\n        var text = void 0,\n            isUnitless = false,\n            hasNumbers = false;\n        for (var _part4 = 0; _part4 < partsLength; _part4++) {\n            var index = indexes[_part4]++,\n                token = tokens[_part4][index];\n            if (token) {\n                var num = token.match(rxNumber); // [ignore, change, number, unit]\n                if (num) {\n                    // It's a number, possibly with a += change and unit.\n                    if (text) {\n                        return returnStringType();\n                    }\n                    var digits = parseFloat(num[2]),\n                        unit = num[3],\n                        change = num[1] ? num[1][0] + unit : undefined,\n                        changeOrUnit = change || unit;\n                    if (digits && !units.includes(changeOrUnit)) {\n                        // Will be an empty string at the least.\n                        units.push(changeOrUnit);\n                    }\n                    if (!unit) {\n                        if (digits) {\n                            hasNumbers = true;\n                        } else {\n                            isUnitless = true;\n                        }\n                    }\n                    bits[_part4] = change ? [digits, changeOrUnit, true] : [digits, changeOrUnit];\n                } else if (bits.length) {\n                    return returnStringType();\n                } else {\n                    // It's a string.\n                    if (!text) {\n                        text = token;\n                    } else if (text !== token) {\n                        return returnStringType();\n                    }\n                }\n            } else if (!_part4) {\n                for (; _part4 < partsLength; _part4++) {\n                    var index2 = indexes[_part4]++;\n                    if (tokens[_part4][index2]) {\n                        return returnStringType();\n                    }\n                }\n                // IMPORTANT: This is the exit point.\n                more = false;\n                break;\n            } else {\n                // Different\n                return;\n            }\n        }\n        if (text) {\n            addString(text);\n        } else if (units.length) {\n            if (units.length === 2 && isUnitless && !hasNumbers) {\n                // If we only have two units, and one is empty, and it's only empty on \"0\", then treat us as having one unit\n                units.splice(units[0] ? 1 : 0, 1);\n            }\n            if (units.length === 1) {\n                // All the same units, so append number then unit.\n                var _unit = units[0],\n                    firstLetter = _unit[0];\n                switch (firstLetter) {\n                    case \"+\":\n                    case \"-\":\n                    case \"*\":\n                    case \"/\":\n                        if (propertyName) {\n                            console.error(\"Velocity: The first property must not contain a relative function \\\"\" + propertyName + \"\\\":\", parts);\n                        }\n                        return;\n                }\n                pattern.push(false);\n                for (var _part5 = 0; _part5 < partsLength; _part5++) {\n                    sequence[_part5].push(bits[_part5][0]);\n                }\n                addString(_unit);\n            } else {\n                // Multiple units, so must be inside a calc.\n                addString(\"calc(\");\n                var patternCalc = pattern.length - 1; // Store the beginning of our calc.\n                for (var i = 0; i < units.length; i++) {\n                    var _unit2 = units[i],\n                        _firstLetter = _unit2[0],\n                        isComplex = _firstLetter === \"*\" || _firstLetter === \"/\",\n                        isMaths = isComplex || _firstLetter === \"+\" || _firstLetter === \"-\";\n                    if (isComplex) {\n                        // TODO: Not sure this should be done automatically!\n                        pattern[patternCalc] += \"(\";\n                        addString(\")\");\n                    }\n                    if (i) {\n                        addString(\" \" + (isMaths ? _firstLetter : \"+\") + \" \");\n                    }\n                    pattern.push(false);\n                    for (var _part6 = 0; _part6 < partsLength; _part6++) {\n                        var bit = bits[_part6],\n                            value = bit[1] === _unit2 ? bit[0] : bit.length === 3 ? sequence[_part6 - 1][sequence[_part6 - 1].length - 1] : isComplex ? 1 : 0;\n                        sequence[_part6].push(value);\n                    }\n                    addString(isMaths ? _unit2.substring(1) : _unit2);\n                }\n                addString(\")\");\n            }\n        }\n    }\n    // We've got here, so a valid sequence - now check and fix RGB rounding\n    // and calc() nesting...\n    // TODO: Nested calc(a + calc(b + c)) -> calc(a + (b + c))\n    for (var _i = 0, inRGB = 0; _i < pattern.length; _i++) {\n        var _text = pattern[_i];\n        if (isString(_text)) {\n            if (inRGB && _text.indexOf(\",\") >= 0) {\n                inRGB++;\n            } else if (_text.indexOf(\"rgb\") >= 0) {\n                inRGB = 1;\n            }\n        } else if (inRGB) {\n            if (inRGB < 4) {\n                pattern[_i] = true;\n            } else {\n                inRGB = 0;\n            }\n        }\n    }\n    return sequence;\n}\n/**\n * Convert a string-based tween with start and end strings, into a pattern\n * based tween with arrays.\n */\nfunction explodeTween(propertyName, tween, duration, starting) {\n    var startValue = tween.start,\n        endValue = tween.end;\n    if (!isString(endValue) || !isString(startValue)) {\n        return;\n    }\n    var sequence = findPattern([startValue, endValue], propertyName);\n    if (!sequence && starting) {\n        // This little piece will take a startValue, split out the\n        // various numbers in it, then copy the endValue into the\n        // startValue while replacing the numbers in it to match the\n        // original start numbers as a repeating sequence.\n        // Finally this function will run again with the new\n        // startValue and a now matching pattern.\n        var startNumbers = startValue.match(/\\d\\.?\\d*/g) || [\"0\"],\n            count = startNumbers.length;\n        var index = 0;\n        sequence = findPattern([endValue.replace(/\\d+\\.?\\d*/g, function () {\n            return startNumbers[index++ % count];\n        }), endValue], propertyName);\n    }\n    if (sequence) {\n        if (Velocity$$1.debug) {\n            console.log(\"Velocity: Sequence found:\", sequence);\n        }\n        sequence[0].percent = 0;\n        sequence[1].percent = 1;\n        tween.sequence = sequence;\n        switch (tween.easing) {\n            case Easings[\"at-start\"]:\n            case Easings[\"during\"]:\n            case Easings[\"at-end\"]:\n                sequence[0].easing = sequence[1].easing = tween.easing;\n                break;\n        }\n    }\n}\n/**\n * Expand all queued animations that haven't gone yet\n *\n * This will automatically expand the properties map for any recently added\n * animations so that the start and end values are correct.\n */\nfunction validateTweens(activeCall) {\n    // This might be called on an already-ready animation\n    if (State.firstNew === activeCall) {\n        State.firstNew = activeCall._next;\n    }\n    // Check if we're actually already ready\n    if (activeCall._flags & 1 /* EXPANDED */) {\n            // tslint:disable-line:no-bitwise\n            return;\n        }\n    var element = activeCall.element,\n        tweens = activeCall.tweens,\n        duration = getValue(activeCall.options.duration, defaults$1.duration);\n    // tslint:disable-next-line:forin\n    for (var propertyName in tweens) {\n        var tween = tweens[propertyName];\n        if (tween.start == null) {\n            // Get the start value as it's not been passed in\n            var startValue = getPropertyValue(activeCall.element, propertyName);\n            if (isString(startValue)) {\n                tween.start = fixColors(startValue);\n                explodeTween(propertyName, tween, duration, true);\n            } else if (!Array.isArray(startValue)) {\n                console.warn(\"bad type\", tween, propertyName, startValue);\n            }\n        }\n        if (Velocity$$1.debug) {\n            console.log(\"tweensContainer \\\"\" + propertyName + \"\\\": \" + JSON.stringify(tween), element);\n        }\n    }\n    activeCall._flags |= 1 /* EXPANDED */; // tslint:disable-line:no-bitwise\n}\n\n// Project\n/**\n * Call the begin method of an animation in a separate function so it can\n * benefit from JIT compiling while still having a try/catch block.\n */\nfunction beginCall(activeCall) {\n    var callback = activeCall.begin || activeCall.options.begin;\n    if (callback) {\n        try {\n            var elements = activeCall.elements;\n            callback.call(elements, elements, activeCall);\n        } catch (error) {\n            setTimeout(function () {\n                throw error;\n            }, 1);\n        }\n    }\n}\n/**\n * Call the progress method of an animation in a separate function so it can\n * benefit from JIT compiling while still having a try/catch block.\n */\nfunction progressCall(activeCall) {\n    var callback = activeCall.progress || activeCall.options.progress;\n    if (callback) {\n        try {\n            var elements = activeCall.elements,\n                percentComplete = activeCall.percentComplete,\n                options = activeCall.options,\n                tweenValue = activeCall.tween;\n            callback.call(elements, elements, percentComplete, Math.max(0, activeCall.timeStart + (activeCall.duration != null ? activeCall.duration : options.duration != null ? options.duration : defaults$1.duration) - lastTick), tweenValue !== undefined ? tweenValue : String(percentComplete * 100), activeCall);\n        } catch (error) {\n            setTimeout(function () {\n                throw error;\n            }, 1);\n        }\n    }\n}\n/**\n * Call callbacks, potentially run async with the main animation thread.\n */\nfunction asyncCallbacks() {\n    var _iteratorNormalCompletion = true;\n    var _didIteratorError = false;\n    var _iteratorError = undefined;\n\n    try {\n        for (var _iterator = progressed[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var activeCall = _step.value;\n\n            progressCall(activeCall);\n        }\n    } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n    } finally {\n        try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n                _iterator.return();\n            }\n        } finally {\n            if (_didIteratorError) {\n                throw _iteratorError;\n            }\n        }\n    }\n\n    progressed.clear();\n    var _iteratorNormalCompletion2 = true;\n    var _didIteratorError2 = false;\n    var _iteratorError2 = undefined;\n\n    try {\n        for (var _iterator2 = completed[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var _activeCall = _step2.value;\n\n            completeCall(_activeCall);\n        }\n    } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n    } finally {\n        try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                _iterator2.return();\n            }\n        } finally {\n            if (_didIteratorError2) {\n                throw _iteratorError2;\n            }\n        }\n    }\n\n    completed.clear();\n}\n/**************\n Timing\n **************/\nvar FRAME_TIME = 1000 / 60,\n\n/**\n * Animations with a Complete callback.\n */\ncompleted = new Set(),\n\n/**\n * Animations with a Progress callback.\n */\nprogressed = new Set(),\n\n/**\n * Shim for window.performance in case it doesn't exist\n */\nperformance = function () {\n    var perf = window.performance || {};\n    if (typeof perf.now !== \"function\") {\n        var nowOffset = perf.timing && perf.timing.navigationStart ? perf.timing.navigationStart : now();\n        perf.now = function () {\n            return now() - nowOffset;\n        };\n    }\n    return perf;\n}(),\n\n/**\n * Proxy function for when rAF is not available.\n *\n * This should hopefully never be used as the browsers often throttle\n * this to less than one frame per second in the background, making it\n * completely unusable.\n */\nrAFProxy = function rAFProxy(callback) {\n    return setTimeout(callback, Math.max(0, FRAME_TIME - (performance.now() - lastTick)));\n},\n\n/**\n * Either requestAnimationFrame, or a shim for it.\n */\nrAFShim = window.requestAnimationFrame || rAFProxy;\n/**\n * Set if we are currently inside a tick() to prevent double-calling.\n */\nvar ticking = void 0,\n\n/**\n * A background WebWorker that sends us framerate messages when we're in\n * the background. Without this we cannot maintain frame accuracy.\n */\nworker = void 0;\n/**\n * The time that the last animation frame ran at. Set from tick(), and used\n * for missing rAF (ie, when not in focus etc).\n */\nvar lastTick = 0;\n/**\n * WebWorker background function.\n *\n * When we're in the background this will send us a msg every tick, when in\n * the foreground it won't.\n *\n * When running in the background the browser reduces allowed CPU etc, so\n * we raun at 30fps instead of 60fps.\n */\nfunction workerFn() {\n    var _this = this;\n\n    var interval = void 0;\n    this.onmessage = function (e) {\n        switch (e.data) {\n            case true:\n                if (!interval) {\n                    interval = setInterval(function () {\n                        _this.postMessage(true);\n                    }, 1000 / 30);\n                }\n                break;\n            case false:\n                if (interval) {\n                    clearInterval(interval);\n                    interval = 0;\n                }\n                break;\n            default:\n                _this.postMessage(e.data);\n                break;\n        }\n    };\n}\ntry {\n    // Create the worker - this might not be supported, hence the try/catch.\n    worker = new Worker(URL.createObjectURL(new Blob([\"(\" + workerFn + \")()\"])));\n    // Whenever the worker sends a message we tick()\n    worker.onmessage = function (e) {\n        if (e.data === true) {\n            tick();\n        } else {\n            asyncCallbacks();\n        }\n    };\n    // And watch for going to the background to start the WebWorker running.\n    if (!State.isMobile && document.hidden !== undefined) {\n        document.addEventListener(\"visibilitychange\", function () {\n            worker.postMessage(State.isTicking && document.hidden);\n        });\n    }\n} catch (e) {}\n/*\n * WebWorkers are not supported in this format. This can happen in IE10\n * where it can't create one from a blob this way. We fallback, but make\n * no guarantees towards accuracy in this case.\n */\n\n/**\n * Called on every tick, preferably through rAF. This is reponsible for\n * initialising any new animations, then starting any that need starting.\n * Finally it will expand any tweens and set the properties relating to\n * them. If there are any callbacks relating to the animations then they\n * will attempt to call at the end (with the exception of \"begin\").\n */\nfunction tick(timestamp) {\n    if (ticking) {\n        // Should never happen - but if we've swapped back from hidden to\n        // visibile then we want to make sure\n        return;\n    }\n    ticking = true;\n    /* An empty timestamp argument indicates that this is the first tick occurence since ticking was turned on.\n     We leverage this metadata to fully ignore the first tick pass since RAF's initial pass is fired whenever\n     the browser's next tick sync time occurs, which results in the first elements subjected to Velocity\n     calls being animated out of sync with any elements animated immediately thereafter. In short, we ignore\n     the first RAF tick pass so that elements being immediately consecutively animated -- instead of simultaneously animated\n     by the same Velocity call -- are properly batched into the same initial RAF tick and consequently remain in sync thereafter. */\n    if (timestamp !== false) {\n        var timeCurrent = performance.now(),\n            deltaTime = lastTick ? timeCurrent - lastTick : FRAME_TIME,\n            defaultSpeed = defaults$1.speed,\n            defaultEasing = defaults$1.easing,\n            defaultDuration = defaults$1.duration;\n        var activeCall = void 0,\n            nextCall = void 0;\n        if (deltaTime >= defaults$1.minFrameTime || !lastTick) {\n            lastTick = timeCurrent;\n            /********************\n             Call Iteration\n             ********************/\n            // Expand any tweens that might need it.\n            while (State.firstNew) {\n                validateTweens(State.firstNew);\n            }\n            // Iterate through each active call.\n            for (activeCall = State.first; activeCall && activeCall !== State.firstNew; activeCall = activeCall._next) {\n                var element = activeCall.element,\n                    data = Data(element);\n                // Check to see if this element has been deleted midway\n                // through the animation. If it's gone then end this\n                // animation.\n                if (!element.parentNode || !data) {\n                    // TODO: Remove safely - decrease count, delete data, remove from arrays\n                    freeAnimationCall(activeCall);\n                    continue;\n                }\n                // Don't bother getting until we can use these.\n                var options = activeCall.options,\n                    flags = activeCall._flags;\n                var timeStart = activeCall.timeStart;\n                // If this is the first time that this call has been\n                // processed by tick() then we assign timeStart now so that\n                // it's value is as close to the real animation start time\n                // as possible.\n                if (!timeStart) {\n                    var queue = activeCall.queue != null ? activeCall.queue : options.queue;\n                    timeStart = timeCurrent - deltaTime;\n                    if (queue !== false) {\n                        timeStart = Math.max(timeStart, data.lastFinishList[queue] || 0);\n                    }\n                    activeCall.timeStart = timeStart;\n                }\n                // If this animation is paused then skip processing unless\n                // it has been set to resume.\n                if (flags & 16 /* PAUSED */) {\n                        // tslint:disable-line:no-bitwise\n                        // Update the time start to accomodate the paused\n                        // completion amount.\n                        activeCall.timeStart += deltaTime;\n                        continue;\n                    }\n                // Check if this animation is ready - if it's synced then it\n                // needs to wait for all other animations in the sync\n                if (!(flags & 2 /* READY */)) {\n                    // tslint:disable-line:no-bitwise\n                    activeCall._flags |= 2 /* READY */; // tslint:disable-line:no-bitwise\n                    options._ready++;\n                }\n            }\n            // Need to split the loop, as ready sync animations must all get\n            // the same start time.\n            for (activeCall = State.first; activeCall && activeCall !== State.firstNew; activeCall = nextCall) {\n                var _flags = activeCall._flags;\n                nextCall = activeCall._next;\n                if (!(_flags & 2 /* READY */) || _flags & 16 /* PAUSED */) {\n                    // tslint:disable-line:no-bitwise\n                    continue;\n                }\n                var _options = activeCall.options;\n                if (_flags & 32 /* SYNC */ && _options._ready < _options._total) {\n                    // tslint:disable-line:no-bitwise\n                    activeCall.timeStart += deltaTime;\n                    continue;\n                }\n                var speed = activeCall.speed != null ? activeCall.speed : _options.speed != null ? _options.speed : defaultSpeed;\n                var _timeStart = activeCall.timeStart;\n                // Don't bother getting until we can use these.\n                if (!(_flags & 4 /* STARTED */)) {\n                    // tslint:disable-line:no-bitwise\n                    var delay = activeCall.delay != null ? activeCall.delay : _options.delay;\n                    // Make sure anything we've delayed doesn't start\n                    // animating yet, there might still be an active delay\n                    // after something has been un-paused\n                    if (delay) {\n                        if (_timeStart + delay / speed > timeCurrent) {\n                            continue;\n                        }\n                        activeCall.timeStart = _timeStart += delay / (delay > 0 ? speed : 1);\n                    }\n                    activeCall._flags |= 4 /* STARTED */; // tslint:disable-line:no-bitwise\n                    // The begin callback is fired once per call, not once\n                    // per element, and is passed the full raw DOM element\n                    // set as both its context and its first argument.\n                    if (_options._started++ === 0) {\n                        _options._first = activeCall;\n                        if (_options.begin) {\n                            // Pass to an external fn with a try/catch block for optimisation\n                            beginCall(activeCall);\n                            // Only called once, even if reversed or repeated\n                            _options.begin = undefined;\n                        }\n                    }\n                }\n                if (speed !== 1) {\n                    // On the first frame we may have a shorter delta\n                    // const delta = Math.min(deltaTime, timeCurrent - timeStart);\n                    activeCall.timeStart = _timeStart += Math.min(deltaTime, timeCurrent - _timeStart) * (1 - speed);\n                }\n                var activeEasing = activeCall.easing != null ? activeCall.easing : _options.easing != null ? _options.easing : defaultEasing,\n                    millisecondsEllapsed = activeCall.ellapsedTime = timeCurrent - _timeStart,\n                    duration = activeCall.duration != null ? activeCall.duration : _options.duration != null ? _options.duration : defaultDuration,\n                    percentComplete = activeCall.percentComplete = Velocity$$1.mock ? 1 : Math.min(millisecondsEllapsed / duration, 1),\n                    tweens = activeCall.tweens,\n                    reverse = _flags & 64 /* REVERSE */; // tslint:disable-line:no-bitwise\n                if (activeCall.progress || _options._first === activeCall && _options.progress) {\n                    progressed.add(activeCall);\n                }\n                if (percentComplete === 1) {\n                    completed.add(activeCall);\n                }\n                // tslint:disable-next-line:forin\n                for (var property in tweens) {\n                    // For every element, iterate through each property.\n                    var tween = tweens[property],\n                        sequence = tween.sequence,\n                        pattern = sequence.pattern;\n                    var currentValue = \"\",\n                        i = 0;\n                    if (pattern) {\n                        var easingComplete = (tween.easing || activeEasing)(percentComplete, 0, 1, property);\n                        var best = 0;\n                        for (var j = 0; j < sequence.length - 1; j++) {\n                            if (sequence[j].percent < easingComplete) {\n                                best = j;\n                            }\n                        }\n                        var tweenFrom = sequence[best],\n                            tweenTo = sequence[best + 1] || tweenFrom,\n                            rawPercent = (percentComplete - tweenFrom.percent) / (tweenTo.percent - tweenFrom.percent),\n                            tweenPercent = reverse ? 1 - rawPercent : rawPercent,\n                            easing = tweenTo.easing || activeEasing || linearEasing;\n                        for (; i < pattern.length; i++) {\n                            var startValue = tweenFrom[i];\n                            if (startValue == null) {\n                                currentValue += pattern[i];\n                            } else {\n                                var endValue = tweenTo[i];\n                                if (startValue === endValue) {\n                                    currentValue += startValue;\n                                } else {\n                                    // All easings must deal with numbers except for our internal ones.\n                                    var result = easing(tweenPercent, startValue, endValue, property);\n                                    currentValue += pattern[i] !== true ? result : Math.round(result);\n                                }\n                            }\n                        }\n                        if (property !== \"tween\") {\n                            if (percentComplete === 1) {\n                                currentValue = removeNestedCalc(currentValue);\n                            }\n                            // TODO: To solve an IE<=8 positioning bug, the unit type must be dropped when setting a property value of 0 - add normalisations to legacy\n                            setPropertyValue(activeCall.element, property, currentValue, tween.fn);\n                        } else {\n                            // Skip the fake 'tween' property as that is only\n                            // passed into the progress callback.\n                            activeCall.tween = currentValue;\n                        }\n                    } else {\n                        console.warn(\"VelocityJS: Missing pattern:\", property, JSON.stringify(tween[property]));\n                        delete tweens[property];\n                    }\n                }\n            }\n            if (progressed.size || completed.size) {\n                if (!document.hidden) {\n                    asyncCallbacks();\n                } else if (worker) {\n                    worker.postMessage(\"\");\n                } else {\n                    setTimeout(asyncCallbacks, 1);\n                }\n            }\n        }\n    }\n    if (State.first) {\n        State.isTicking = true;\n        if (!document.hidden) {\n            rAFShim(tick);\n        } else if (!worker) {\n            rAFProxy(tick);\n        } else if (timestamp === false) {\n            // Make sure we turn on the messages.\n            worker.postMessage(true);\n        }\n    } else {\n        State.isTicking = false;\n        lastTick = 0;\n        if (document.hidden && worker) {\n            // Make sure we turn off the messages.\n            worker.postMessage(false);\n        }\n    }\n    ticking = false;\n}\n\n// Project\n/**\n * Check if an animation should be finished, and if so we set the tweens to\n * the final value for it, then call complete.\n */\nfunction checkAnimationShouldBeFinished(animation, queueName, defaultQueue) {\n    validateTweens(animation);\n    if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n        if (!(animation._flags & 4 /* STARTED */)) {\n            // tslint:disable-line:no-bitwise\n            // Copied from tick.ts - ensure that the animation is completely\n            // valid and run begin() before complete().\n            var options = animation.options;\n            // The begin callback is fired once per call, not once per\n            // element, and is passed the full raw DOM element set as both\n            // its context and its first argument.\n            if (options._started++ === 0) {\n                options._first = animation;\n                if (options.begin) {\n                    // Pass to an external fn with a try/catch block for optimisation\n                    beginCall(animation);\n                    // Only called once, even if reversed or repeated\n                    options.begin = undefined;\n                }\n            }\n            animation._flags |= 4 /* STARTED */; // tslint:disable-line:no-bitwise\n        }\n        // tslint:disable-next-line:forin\n        for (var property in animation.tweens) {\n            var tween = animation.tweens[property],\n                sequence = tween.sequence,\n                pattern = sequence.pattern;\n            var currentValue = \"\",\n                i = 0;\n            if (pattern) {\n                var endValues = sequence[sequence.length - 1];\n                for (; i < pattern.length; i++) {\n                    var endValue = endValues[i];\n                    currentValue += endValue == null ? pattern[i] : endValue;\n                }\n            }\n            setPropertyValue(animation.element, property, currentValue, tween.fn);\n        }\n        completeCall(animation);\n    }\n}\n/**\n * When the finish action is triggered, the elements' currently active call is\n * immediately finished. When an element is finished, the next item in its\n * animation queue is immediately triggered. If passed via a chained call\n * then this will only target the animations in that call, and not the\n * elements linked to it.\n *\n * A queue name may be passed in to specify that only animations on the\n * named queue are finished. The default queue is named \"\". In addition the\n * value of `false` is allowed for the queue name.\n *\n * An final argument may be passed in to clear an element's remaining queued\n * calls. This may only be the value `true`.\n */\nfunction finish(args, elements, promiseHandler) {\n    var queueName = validateQueue(args[0], true),\n        defaultQueue = defaults$1.queue,\n        finishAll = args[queueName === undefined ? 0 : 1] === true;\n    if (isVelocityResult(elements) && elements.velocity.animations) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n            for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                var animation = _step.value;\n\n                checkAnimationShouldBeFinished(animation, queueName, defaultQueue);\n            }\n        } catch (err) {\n            _didIteratorError = true;\n            _iteratorError = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion && _iterator.return) {\n                    _iterator.return();\n                }\n            } finally {\n                if (_didIteratorError) {\n                    throw _iteratorError;\n                }\n            }\n        }\n    } else {\n        while (State.firstNew) {\n            validateTweens(State.firstNew);\n        }\n        for (var activeCall = State.first, nextCall; activeCall && (finishAll || activeCall !== State.firstNew); activeCall = nextCall || State.firstNew) {\n            nextCall = activeCall._next;\n            if (!elements || elements.includes(activeCall.element)) {\n                checkAnimationShouldBeFinished(activeCall, queueName, defaultQueue);\n            }\n        }\n    }\n    if (promiseHandler) {\n        if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n            elements.then(promiseHandler._resolver);\n        } else {\n            promiseHandler._resolver(elements);\n        }\n    }\n}\nregisterAction([\"finish\", finish], true);\n\n/**\n * Used to map getters for the various AnimationFlags.\n */\nvar animationFlags = {\n    isExpanded: 1 /* EXPANDED */\n    , isReady: 2 /* READY */\n    , isStarted: 4 /* STARTED */\n    , isStopped: 8 /* STOPPED */\n    , isPaused: 16 /* PAUSED */\n    , isSync: 32 /* SYNC */\n    , isReverse: 64 /* REVERSE */\n};\n/**\n * Get or set an option or running AnimationCall data value. If there is no\n * value passed then it will get, otherwise we will set.\n *\n * NOTE: When using \"get\" this will not touch the Promise as it is never\n * returned to the user.\n */\nfunction option(args, elements, promiseHandler, action) {\n    var key = args[0],\n        queue = action.indexOf(\".\") >= 0 ? action.replace(/^.*\\./, \"\") : undefined,\n        queueName = queue === \"false\" ? false : validateQueue(queue, true);\n    var animations = void 0,\n        value = args[1];\n    if (!key) {\n        console.warn(\"VelocityJS: Cannot access a non-existant key!\");\n        return null;\n    }\n    // If we're chaining the return value from Velocity then we are only\n    // interested in the values related to that call\n    if (isVelocityResult(elements) && elements.velocity.animations) {\n        animations = elements.velocity.animations;\n    } else {\n        animations = [];\n        for (var activeCall = State.first; activeCall; activeCall = activeCall._next) {\n            if (elements.indexOf(activeCall.element) >= 0 && getValue(activeCall.queue, activeCall.options.queue) === queueName) {\n                animations.push(activeCall);\n            }\n        }\n        // If we're dealing with multiple elements that are pointing at a\n        // single running animation, then instead treat them as a single\n        // animation.\n        if (elements.length > 1 && animations.length > 1) {\n            var i = 1,\n                options = animations[0].options;\n            while (i < animations.length) {\n                if (animations[i++].options !== options) {\n                    options = null;\n                    break;\n                }\n            }\n            // TODO: this needs to check that they're actually a sync:true animation to merge the results, otherwise the individual values may be different\n            if (options) {\n                animations = [animations[0]];\n            }\n        }\n    }\n    // GET\n    if (value === undefined) {\n        var result = [],\n            flag = animationFlags[key];\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n            for (var _iterator = animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                var animation = _step.value;\n\n                if (flag === undefined) {\n                    // A normal key to get.\n                    result.push(getValue(animation[key], animation.options[key]));\n                } else {\n                    // A flag that we're checking against.\n                    result.push((animation._flags & flag) === 0); // tslint:disable-line:no-bitwise\n                }\n            }\n        } catch (err) {\n            _didIteratorError = true;\n            _iteratorError = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion && _iterator.return) {\n                    _iterator.return();\n                }\n            } finally {\n                if (_didIteratorError) {\n                    throw _iteratorError;\n                }\n            }\n        }\n\n        if (elements.length === 1 && animations.length === 1) {\n            // If only a single animation is found and we're only targetting a\n            // single element, then return the value directly\n            return result[0];\n        }\n        return result;\n    }\n    // SET\n    var isPercentComplete = void 0;\n    switch (key) {\n        case \"cache\":\n            value = validateCache(value);\n            break;\n        case \"begin\":\n            value = validateBegin(value);\n            break;\n        case \"complete\":\n            value = validateComplete(value);\n            break;\n        case \"delay\":\n            value = validateDelay(value);\n            break;\n        case \"duration\":\n            value = validateDuration(value);\n            break;\n        case \"fpsLimit\":\n            value = validateFpsLimit(value);\n            break;\n        case \"loop\":\n            value = validateLoop(value);\n            break;\n        case \"percentComplete\":\n            isPercentComplete = true;\n            value = parseFloat(value);\n            break;\n        case \"repeat\":\n        case \"repeatAgain\":\n            value = validateRepeat(value);\n            break;\n        default:\n            if (key[0] !== \"_\") {\n                var num = parseFloat(value);\n                if (value === String(num)) {\n                    value = num;\n                }\n                break;\n            }\n        // deliberate fallthrough\n        case \"queue\":\n        case \"promise\":\n        case \"promiseRejectEmpty\":\n        case \"easing\":\n        case \"started\":\n            console.warn(\"VelocityJS: Trying to set a read-only key:\", key);\n            return;\n    }\n    if (value === undefined || value !== value) {\n        console.warn(\"VelocityJS: Trying to set an invalid value:\" + key + \"=\" + value + \" (\" + args[1] + \")\");\n        return null;\n    }\n    var _iteratorNormalCompletion2 = true;\n    var _didIteratorError2 = false;\n    var _iteratorError2 = undefined;\n\n    try {\n        for (var _iterator2 = animations[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var _animation = _step2.value;\n\n            if (isPercentComplete) {\n                _animation.timeStart = lastTick - getValue(_animation.duration, _animation.options.duration, defaults$1.duration) * value;\n            } else {\n                _animation[key] = value;\n            }\n        }\n    } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n    } finally {\n        try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                _iterator2.return();\n            }\n        } finally {\n            if (_didIteratorError2) {\n                throw _iteratorError2;\n            }\n        }\n    }\n\n    if (promiseHandler) {\n        if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n            elements.then(promiseHandler._resolver);\n        } else {\n            promiseHandler._resolver(elements);\n        }\n    }\n}\nregisterAction([\"option\", option], true);\n\n// Project\n/**\n * Check if an animation should be paused / resumed.\n */\nfunction checkAnimation(animation, queueName, defaultQueue, isPaused) {\n    if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n        if (isPaused) {\n            animation._flags |= 16 /* PAUSED */; // tslint:disable-line:no-bitwise\n        } else {\n            animation._flags &= ~16 /* PAUSED */; // tslint:disable-line:no-bitwise\n        }\n    }\n}\n/**\n * Pause and Resume are call-wide (not on a per element basis). Thus, calling pause or resume on a\n * single element will cause any calls that contain tweens for that element to be paused/resumed\n * as well.\n */\nfunction pauseResume(args, elements, promiseHandler, action) {\n    var isPaused = action.indexOf(\"pause\") === 0,\n        queue = action.indexOf(\".\") >= 0 ? action.replace(/^.*\\./, \"\") : undefined,\n        queueName = queue === \"false\" ? false : validateQueue(args[0]),\n        defaultQueue = defaults$1.queue;\n    if (isVelocityResult(elements) && elements.velocity.animations) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n            for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                var animation = _step.value;\n\n                checkAnimation(animation, queueName, defaultQueue, isPaused);\n            }\n        } catch (err) {\n            _didIteratorError = true;\n            _iteratorError = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion && _iterator.return) {\n                    _iterator.return();\n                }\n            } finally {\n                if (_didIteratorError) {\n                    throw _iteratorError;\n                }\n            }\n        }\n    } else {\n        var activeCall = State.first;\n        while (activeCall) {\n            if (!elements || elements.includes(activeCall.element)) {\n                checkAnimation(activeCall, queueName, defaultQueue, isPaused);\n            }\n            activeCall = activeCall._next;\n        }\n    }\n    if (promiseHandler) {\n        if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n            elements.then(promiseHandler._resolver);\n        } else {\n            promiseHandler._resolver(elements);\n        }\n    }\n}\nregisterAction([\"pause\", pauseResume], true);\nregisterAction([\"resume\", pauseResume], true);\n\n// Project\n/**\n * Get or set a style of Nomralised property value on one or more elements.\n * If there is no value passed then it will get, otherwise we will set.\n *\n * NOTE: When using \"get\" this will not touch the Promise as it is never\n * returned to the user.\n *\n * This can fail to set, and will reject the Promise if it does so.\n *\n * Velocity(elements, \"style\", \"property\", \"value\") => elements;\n * Velocity(elements, \"style\", {\"property\": \"value\", ...}) => elements;\n * Velocity(element, \"style\", \"property\") => \"value\";\n * Velocity(elements, \"style\", \"property\") => [\"value\", ...];\n */\nfunction propertyAction(args, elements, promiseHandler, action) {\n    var property = args[0],\n        value = args[1];\n    if (!property) {\n        console.warn(\"VelocityJS: Cannot access a non-existant property!\");\n        return null;\n    }\n    // GET\n    if (value === undefined && !isPlainObject(property)) {\n        if (Array.isArray(property)) {\n            if (elements.length === 1) {\n                var result = {};\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = property[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var prop = _step.value;\n\n                        result[prop] = fixColors(getPropertyValue(elements[0], prop));\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n\n                return result;\n            } else {\n                var _result = [];\n                var _iteratorNormalCompletion2 = true;\n                var _didIteratorError2 = false;\n                var _iteratorError2 = undefined;\n\n                try {\n                    for (var _iterator2 = elements[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                        var element = _step2.value;\n\n                        var res = {};\n                        var _iteratorNormalCompletion3 = true;\n                        var _didIteratorError3 = false;\n                        var _iteratorError3 = undefined;\n\n                        try {\n                            for (var _iterator3 = property[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                                var _prop = _step3.value;\n\n                                res[_prop] = fixColors(getPropertyValue(element, _prop));\n                            }\n                        } catch (err) {\n                            _didIteratorError3 = true;\n                            _iteratorError3 = err;\n                        } finally {\n                            try {\n                                if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                                    _iterator3.return();\n                                }\n                            } finally {\n                                if (_didIteratorError3) {\n                                    throw _iteratorError3;\n                                }\n                            }\n                        }\n\n                        _result.push(res);\n                    }\n                } catch (err) {\n                    _didIteratorError2 = true;\n                    _iteratorError2 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                            _iterator2.return();\n                        }\n                    } finally {\n                        if (_didIteratorError2) {\n                            throw _iteratorError2;\n                        }\n                    }\n                }\n\n                return _result;\n            }\n        } else {\n            // If only a single animation is found and we're only targetting a\n            // single element, then return the value directly\n            if (elements.length === 1) {\n                return fixColors(getPropertyValue(elements[0], property));\n            }\n            var _result2 = [];\n            var _iteratorNormalCompletion4 = true;\n            var _didIteratorError4 = false;\n            var _iteratorError4 = undefined;\n\n            try {\n                for (var _iterator4 = elements[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                    var _element = _step4.value;\n\n                    _result2.push(fixColors(getPropertyValue(_element, property)));\n                }\n            } catch (err) {\n                _didIteratorError4 = true;\n                _iteratorError4 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                        _iterator4.return();\n                    }\n                } finally {\n                    if (_didIteratorError4) {\n                        throw _iteratorError4;\n                    }\n                }\n            }\n\n            return _result2;\n        }\n    }\n    // SET\n    var error = [];\n    if (isPlainObject(property)) {\n        for (var propertyName in property) {\n            if (property.hasOwnProperty(propertyName)) {\n                var _iteratorNormalCompletion5 = true;\n                var _didIteratorError5 = false;\n                var _iteratorError5 = undefined;\n\n                try {\n                    for (var _iterator5 = elements[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                        var _element2 = _step5.value;\n\n                        var propertyValue = property[propertyName];\n                        if (isString(propertyValue) || isNumber(propertyValue)) {\n                            setPropertyValue(_element2, propertyName, property[propertyName]);\n                        } else {\n                            error.push(\"Cannot set a property \\\"\" + propertyName + \"\\\" to an unknown type: \" + (typeof propertyValue === \"undefined\" ? \"undefined\" : _typeof(propertyValue)));\n                            console.warn(\"VelocityJS: Cannot set a property \\\"\" + propertyName + \"\\\" to an unknown type:\", propertyValue);\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError5 = true;\n                    _iteratorError5 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                            _iterator5.return();\n                        }\n                    } finally {\n                        if (_didIteratorError5) {\n                            throw _iteratorError5;\n                        }\n                    }\n                }\n            }\n        }\n    } else if (isString(value) || isNumber(value)) {\n        var _iteratorNormalCompletion6 = true;\n        var _didIteratorError6 = false;\n        var _iteratorError6 = undefined;\n\n        try {\n            for (var _iterator6 = elements[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                var _element3 = _step6.value;\n\n                setPropertyValue(_element3, property, String(value));\n            }\n        } catch (err) {\n            _didIteratorError6 = true;\n            _iteratorError6 = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                    _iterator6.return();\n                }\n            } finally {\n                if (_didIteratorError6) {\n                    throw _iteratorError6;\n                }\n            }\n        }\n    } else {\n        error.push(\"Cannot set a property \\\"\" + property + \"\\\" to an unknown type: \" + (typeof value === \"undefined\" ? \"undefined\" : _typeof(value)));\n        console.warn(\"VelocityJS: Cannot set a property \\\"\" + property + \"\\\" to an unknown type:\", value);\n    }\n    if (promiseHandler) {\n        if (error.length) {\n            promiseHandler._rejecter(error.join(\", \"));\n        } else if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n            elements.then(promiseHandler._resolver);\n        } else {\n            promiseHandler._resolver(elements);\n        }\n    }\n}\nregisterAction([\"property\", propertyAction], true);\n\n// Project\nregisterAction([\"reverse\", function (args, elements, promiseHandler, action) {\n        // NOTE: Code needs to split out before here - but this is needed to prevent it being overridden\n        throw new SyntaxError(\"VelocityJS: The 'reverse' action is built in and private.\");\n}], true);\n\n// Project\n/**\n * Check if an animation should be stopped, and if so then set the STOPPED\n * flag on it, then call complete.\n */\nfunction checkAnimationShouldBeStopped(animation, queueName, defaultQueue) {\n    validateTweens(animation);\n    if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n        animation._flags |= 8 /* STOPPED */; // tslint:disable-line:no-bitwise\n        completeCall(animation);\n    }\n}\n/**\n * When the stop action is triggered, the elements' currently active call is\n * immediately stopped. When an element is stopped, the next item in its\n * animation queue is immediately triggered. If passed via a chained call\n * then this will only target the animations in that call, and not the\n * elements linked to it.\n *\n * A queue name may be passed in to specify that only animations on the\n * named queue are stopped. The default queue is named \"\". In addition the\n * value of `false` is allowed for the queue name.\n *\n * An final argument may be passed in to clear an element's remaining queued\n * calls. This may only be the value `true`.\n *\n * Note: The stop command runs prior to Velocity's Queueing phase since its\n * behavior is intended to take effect *immediately*, regardless of the\n * element's current queue state.\n */\nfunction stop(args, elements, promiseHandler, action) {\n    var queueName = validateQueue(args[0], true),\n        defaultQueue = defaults$1.queue,\n        finishAll = args[queueName === undefined ? 0 : 1] === true;\n    if (isVelocityResult(elements) && elements.velocity.animations) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n            for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                var animation = _step.value;\n\n                checkAnimationShouldBeStopped(animation, queueName, defaultQueue);\n            }\n        } catch (err) {\n            _didIteratorError = true;\n            _iteratorError = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion && _iterator.return) {\n                    _iterator.return();\n                }\n            } finally {\n                if (_didIteratorError) {\n                    throw _iteratorError;\n                }\n            }\n        }\n    } else {\n        while (State.firstNew) {\n            validateTweens(State.firstNew);\n        }\n        for (var activeCall = State.first, nextCall; activeCall && (finishAll || activeCall !== State.firstNew); activeCall = nextCall || State.firstNew) {\n            nextCall = activeCall._next;\n            if (!elements || elements.includes(activeCall.element)) {\n                checkAnimationShouldBeStopped(activeCall, queueName, defaultQueue);\n            }\n        }\n    }\n    if (promiseHandler) {\n        if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n            elements.then(promiseHandler._resolver);\n        } else {\n            promiseHandler._resolver(elements);\n        }\n    }\n}\nregisterAction([\"stop\", stop], true);\n\n// Project\nregisterAction([\"style\", propertyAction], true);\n\n// Project\n/**\n *\n */\nfunction tweenAction(args, elements, promiseHandler, action) {\n    var requireForcefeeding = void 0;\n    if (!elements) {\n        if (!args.length) {\n            console.info(\"Velocity(<element>, \\\"tween\\\", percentComplete, property, end | [end, <easing>, <start>], <easing>) => value\\nVelocity(<element>, \\\"tween\\\", percentComplete, {property: end | [end, <easing>, <start>], ...}, <easing>) => {property: value, ...}\");\n            return null;\n        }\n        elements = [document.body];\n        requireForcefeeding = true;\n    } else if (elements.length !== 1) {\n        // TODO: Allow more than a single element to return an array of results\n        throw new Error(\"VelocityJS: Cannot tween more than one element!\");\n    }\n    var percentComplete = args[0],\n        fakeAnimation = {\n        elements: elements,\n        element: elements[0],\n        queue: false,\n        options: {\n            duration: 1000\n        },\n        tweens: null\n    },\n        result = {};\n    var properties = args[1],\n        singleResult = void 0,\n        maybeSequence = void 0,\n        easing = args[2],\n        count = 0;\n    if (isString(args[1])) {\n        if (SequencesObject && SequencesObject[args[1]]) {\n            maybeSequence = SequencesObject[args[1]];\n            properties = {};\n            easing = args[2];\n        } else {\n            singleResult = true;\n            properties = defineProperty({}, args[1], args[2]);\n            easing = args[3];\n        }\n    } else if (Array.isArray(args[1])) {\n        singleResult = true;\n        properties = {\n            tween: args[1]\n        };\n        easing = args[2];\n    }\n    if (!isNumber(percentComplete) || percentComplete < 0 || percentComplete > 1) {\n        throw new Error(\"VelocityJS: Must tween a percentage from 0 to 1!\");\n    }\n    if (!isPlainObject(properties)) {\n        throw new Error(\"VelocityJS: Cannot tween an invalid property!\");\n    }\n    if (requireForcefeeding) {\n        for (var property in properties) {\n            if (properties.hasOwnProperty(property) && (!Array.isArray(properties[property]) || properties[property].length < 2)) {\n                throw new Error(\"VelocityJS: When not supplying an element you must force-feed values: \" + property);\n            }\n        }\n    }\n    var activeEasing = validateEasing(getValue(easing, defaults$1.easing), DEFAULT_DURATION);\n    if (maybeSequence) {\n        expandSequence(fakeAnimation, maybeSequence);\n    } else {\n        expandProperties(fakeAnimation, properties);\n    }\n    // tslint:disable-next-line:forin\n    for (var _property in fakeAnimation.tweens) {\n        // For every element, iterate through each property.\n        var propertyTween = fakeAnimation.tweens[_property],\n            sequence = propertyTween.sequence,\n            pattern = sequence.pattern;\n        var currentValue = \"\",\n            i = 0;\n        count++;\n        if (pattern) {\n            var easingComplete = (propertyTween.easing || activeEasing)(percentComplete, 0, 1, _property);\n            var best = 0;\n            for (var j = 0; j < sequence.length - 1; j++) {\n                if (sequence[j].percent < easingComplete) {\n                    best = j;\n                }\n            }\n            var tweenFrom = sequence[best],\n                tweenTo = sequence[best + 1] || tweenFrom,\n                tweenPercent = (percentComplete - tweenFrom.percent) / (tweenTo.percent - tweenFrom.percent),\n                tweenEasing = tweenTo.easing || linearEasing;\n            for (; i < pattern.length; i++) {\n                var startValue = tweenFrom[i];\n                if (startValue == null) {\n                    currentValue += pattern[i];\n                } else {\n                    var endValue = tweenTo[i];\n                    if (startValue === endValue) {\n                        currentValue += startValue;\n                    } else {\n                        // All easings must deal with numbers except for our internal ones.\n                        var value = tweenEasing(tweenPercent, startValue, endValue, _property);\n                        currentValue += pattern[i] === true ? Math.round(value) : value;\n                    }\n                }\n            }\n            result[_property] = currentValue;\n        }\n    }\n    if (singleResult && count === 1) {\n        for (var _property2 in result) {\n            if (result.hasOwnProperty(_property2)) {\n                return result[_property2];\n            }\n        }\n    }\n    return result;\n}\nregisterAction([\"tween\", tweenAction], true);\n\n// Project\n/**\n * Converting from hex as it makes for a smaller file.\n */\nvar colorValues = {\n    aliceblue: 0xF0F8FF,\n    antiquewhite: 0xFAEBD7,\n    aqua: 0x00FFFF,\n    aquamarine: 0x7FFFD4,\n    azure: 0xF0FFFF,\n    beige: 0xF5F5DC,\n    bisque: 0xFFE4C4,\n    black: 0x000000,\n    blanchedalmond: 0xFFEBCD,\n    blue: 0x0000FF,\n    blueviolet: 0x8A2BE2,\n    brown: 0xA52A2A,\n    burlywood: 0xDEB887,\n    cadetblue: 0x5F9EA0,\n    chartreuse: 0x7FFF00,\n    chocolate: 0xD2691E,\n    coral: 0xFF7F50,\n    cornflowerblue: 0x6495ED,\n    cornsilk: 0xFFF8DC,\n    crimson: 0xDC143C,\n    cyan: 0x00FFFF,\n    darkblue: 0x00008B,\n    darkcyan: 0x008B8B,\n    darkgoldenrod: 0xB8860B,\n    darkgray: 0xA9A9A9,\n    darkgrey: 0xA9A9A9,\n    darkgreen: 0x006400,\n    darkkhaki: 0xBDB76B,\n    darkmagenta: 0x8B008B,\n    darkolivegreen: 0x556B2F,\n    darkorange: 0xFF8C00,\n    darkorchid: 0x9932CC,\n    darkred: 0x8B0000,\n    darksalmon: 0xE9967A,\n    darkseagreen: 0x8FBC8F,\n    darkslateblue: 0x483D8B,\n    darkslategray: 0x2F4F4F,\n    darkslategrey: 0x2F4F4F,\n    darkturquoise: 0x00CED1,\n    darkviolet: 0x9400D3,\n    deeppink: 0xFF1493,\n    deepskyblue: 0x00BFFF,\n    dimgray: 0x696969,\n    dimgrey: 0x696969,\n    dodgerblue: 0x1E90FF,\n    firebrick: 0xB22222,\n    floralwhite: 0xFFFAF0,\n    forestgreen: 0x228B22,\n    fuchsia: 0xFF00FF,\n    gainsboro: 0xDCDCDC,\n    ghostwhite: 0xF8F8FF,\n    gold: 0xFFD700,\n    goldenrod: 0xDAA520,\n    gray: 0x808080,\n    grey: 0x808080,\n    green: 0x008000,\n    greenyellow: 0xADFF2F,\n    honeydew: 0xF0FFF0,\n    hotpink: 0xFF69B4,\n    indianred: 0xCD5C5C,\n    indigo: 0x4B0082,\n    ivory: 0xFFFFF0,\n    khaki: 0xF0E68C,\n    lavender: 0xE6E6FA,\n    lavenderblush: 0xFFF0F5,\n    lawngreen: 0x7CFC00,\n    lemonchiffon: 0xFFFACD,\n    lightblue: 0xADD8E6,\n    lightcoral: 0xF08080,\n    lightcyan: 0xE0FFFF,\n    lightgoldenrodyellow: 0xFAFAD2,\n    lightgray: 0xD3D3D3,\n    lightgrey: 0xD3D3D3,\n    lightgreen: 0x90EE90,\n    lightpink: 0xFFB6C1,\n    lightsalmon: 0xFFA07A,\n    lightseagreen: 0x20B2AA,\n    lightskyblue: 0x87CEFA,\n    lightslategray: 0x778899,\n    lightslategrey: 0x778899,\n    lightsteelblue: 0xB0C4DE,\n    lightyellow: 0xFFFFE0,\n    lime: 0x00FF00,\n    limegreen: 0x32CD32,\n    linen: 0xFAF0E6,\n    magenta: 0xFF00FF,\n    maroon: 0x800000,\n    mediumaquamarine: 0x66CDAA,\n    mediumblue: 0x0000CD,\n    mediumorchid: 0xBA55D3,\n    mediumpurple: 0x9370DB,\n    mediumseagreen: 0x3CB371,\n    mediumslateblue: 0x7B68EE,\n    mediumspringgreen: 0x00FA9A,\n    mediumturquoise: 0x48D1CC,\n    mediumvioletred: 0xC71585,\n    midnightblue: 0x191970,\n    mintcream: 0xF5FFFA,\n    mistyrose: 0xFFE4E1,\n    moccasin: 0xFFE4B5,\n    navajowhite: 0xFFDEAD,\n    navy: 0x000080,\n    oldlace: 0xFDF5E6,\n    olive: 0x808000,\n    olivedrab: 0x6B8E23,\n    orange: 0xFFA500,\n    orangered: 0xFF4500,\n    orchid: 0xDA70D6,\n    palegoldenrod: 0xEEE8AA,\n    palegreen: 0x98FB98,\n    paleturquoise: 0xAFEEEE,\n    palevioletred: 0xDB7093,\n    papayawhip: 0xFFEFD5,\n    peachpuff: 0xFFDAB9,\n    peru: 0xCD853F,\n    pink: 0xFFC0CB,\n    plum: 0xDDA0DD,\n    powderblue: 0xB0E0E6,\n    purple: 0x800080,\n    rebeccapurple: 0x663399,\n    red: 0xFF0000,\n    rosybrown: 0xBC8F8F,\n    royalblue: 0x4169E1,\n    saddlebrown: 0x8B4513,\n    salmon: 0xFA8072,\n    sandybrown: 0xF4A460,\n    seagreen: 0x2E8B57,\n    seashell: 0xFFF5EE,\n    sienna: 0xA0522D,\n    silver: 0xC0C0C0,\n    skyblue: 0x87CEEB,\n    slateblue: 0x6A5ACD,\n    slategray: 0x708090,\n    slategrey: 0x708090,\n    snow: 0xFFFAFA,\n    springgreen: 0x00FF7F,\n    steelblue: 0x4682B4,\n    tan: 0xD2B48C,\n    teal: 0x008080,\n    thistle: 0xD8BFD8,\n    tomato: 0xFF6347,\n    turquoise: 0x40E0D0,\n    violet: 0xEE82EE,\n    wheat: 0xF5DEB3,\n    white: 0xFFFFFF,\n    whitesmoke: 0xF5F5F5,\n    yellow: 0xFFFF00,\n    yellowgreen: 0x9ACD32\n};\nfor (var name in colorValues) {\n    if (colorValues.hasOwnProperty(name)) {\n        var color = colorValues[name];\n        ColorNames[name] = Math.floor(color / 65536) + \",\" + Math.floor(color / 256 % 256) + \",\" + color % 256;\n    }\n}\n\n// Project\nfunction registerBackIn(name, amount) {\n    registerEasing([name, function (percentComplete, startValue, endValue) {\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        return Math.pow(percentComplete, 2) * ((amount + 1) * percentComplete - amount) * (endValue - startValue);\n    }]);\n}\nfunction registerBackOut(name, amount) {\n    registerEasing([name, function (percentComplete, startValue, endValue) {\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        return (Math.pow(--percentComplete, 2) * ((amount + 1) * percentComplete + amount) + 1) * (endValue - startValue);\n    }]);\n}\nfunction registerBackInOut(name, amount) {\n    amount *= 1.525;\n    registerEasing([name, function (percentComplete, startValue, endValue) {\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        percentComplete *= 2;\n        return (percentComplete < 1 ? Math.pow(percentComplete, 2) * ((amount + 1) * percentComplete - amount) : Math.pow(percentComplete - 2, 2) * ((amount + 1) * (percentComplete - 2) + amount) + 2) * 0.5 * (endValue - startValue);\n    }]);\n}\nregisterBackIn(\"easeInBack\", 1.7);\nregisterBackOut(\"easeOutBack\", 1.7);\nregisterBackInOut(\"easeInOutBack\", 1.7);\n// TODO: Expose these as actions to register custom easings?\n\n// Project\nfunction easeOutBouncePercent(percentComplete) {\n    if (percentComplete < 1 / 2.75) {\n        return 7.5625 * percentComplete * percentComplete;\n    }\n    if (percentComplete < 2 / 2.75) {\n        return 7.5625 * (percentComplete -= 1.5 / 2.75) * percentComplete + 0.75;\n    }\n    if (percentComplete < 2.5 / 2.75) {\n        return 7.5625 * (percentComplete -= 2.25 / 2.75) * percentComplete + 0.9375;\n    }\n    return 7.5625 * (percentComplete -= 2.625 / 2.75) * percentComplete + 0.984375;\n}\nfunction easeInBouncePercent(percentComplete) {\n    return 1 - easeOutBouncePercent(1 - percentComplete);\n}\nfunction easeInBounce(percentComplete, startValue, endValue) {\n    if (percentComplete === 0) {\n        return startValue;\n    }\n    if (percentComplete === 1) {\n        return endValue;\n    }\n    return easeInBouncePercent(percentComplete) * (endValue - startValue);\n}\nfunction easeOutBounce(percentComplete, startValue, endValue) {\n    if (percentComplete === 0) {\n        return startValue;\n    }\n    if (percentComplete === 1) {\n        return endValue;\n    }\n    return easeOutBouncePercent(percentComplete) * (endValue - startValue);\n}\nfunction easeInOutBounce(percentComplete, startValue, endValue) {\n    if (percentComplete === 0) {\n        return startValue;\n    }\n    if (percentComplete === 1) {\n        return endValue;\n    }\n    return (percentComplete < 0.5 ? easeInBouncePercent(percentComplete * 2) * 0.5 : easeOutBouncePercent(percentComplete * 2 - 1) * 0.5 + 0.5) * (endValue - startValue);\n}\nregisterEasing([\"easeInBounce\", easeInBounce]);\nregisterEasing([\"easeOutBounce\", easeOutBounce]);\nregisterEasing([\"easeInOutBounce\", easeInOutBounce]);\n\n// Project\n// Constants\nvar PI2 = Math.PI * 2;\nfunction registerElasticIn(name, amplitude, period) {\n    registerEasing([name, function (percentComplete, startValue, endValue) {\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        return -(amplitude * Math.pow(2, 10 * (percentComplete -= 1)) * Math.sin((percentComplete - period / PI2 * Math.asin(1 / amplitude)) * PI2 / period)) * (endValue - startValue);\n    }]);\n}\nfunction registerElasticOut(name, amplitude, period) {\n    registerEasing([name, function (percentComplete, startValue, endValue) {\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        return (amplitude * Math.pow(2, -10 * percentComplete) * Math.sin((percentComplete - period / PI2 * Math.asin(1 / amplitude)) * PI2 / period) + 1) * (endValue - startValue);\n    }]);\n}\nfunction registerElasticInOut(name, amplitude, period) {\n    registerEasing([name, function (percentComplete, startValue, endValue) {\n        if (percentComplete === 0) {\n            return startValue;\n        }\n        if (percentComplete === 1) {\n            return endValue;\n        }\n        var s = period / PI2 * Math.asin(1 / amplitude);\n        percentComplete = percentComplete * 2 - 1;\n        return (percentComplete < 0 ? -0.5 * (amplitude * Math.pow(2, 10 * percentComplete) * Math.sin((percentComplete - s) * PI2 / period)) : amplitude * Math.pow(2, -10 * percentComplete) * Math.sin((percentComplete - s) * PI2 / period) * 0.5 + 1) * (endValue - startValue);\n    }]);\n}\nregisterElasticIn(\"easeInElastic\", 1, 0.3);\nregisterElasticOut(\"easeOutElastic\", 1, 0.3);\nregisterElasticInOut(\"easeInOutElastic\", 1, 0.3 * 1.5);\n// TODO: Expose these as actions to register custom easings?\n\n// Project\n/**\n * Easing function that sets to the specified value immediately after the\n * animation starts.\n */\nfunction atStart(percentComplete, startValue, endValue) {\n  return percentComplete === 0 ? startValue : endValue;\n}\n/**\n * Easing function that sets to the specified value while the animation is\n * running.\n */\nfunction during(percentComplete, startValue, endValue) {\n  return percentComplete === 0 || percentComplete === 1 ? startValue : endValue;\n}\n/**\n * Easing function that sets to the specified value when the animation ends.\n */\nfunction atEnd(percentComplete, startValue, endValue) {\n  return percentComplete === 1 ? endValue : startValue;\n}\nregisterEasing([\"at-start\", atStart]);\nregisterEasing([\"during\", during]);\nregisterEasing([\"at-end\", atEnd]);\n\n// Project\n/**\n * Get/set the inner/outer dimension.\n */\nfunction getDimension(name, wantInner) {\n    return function (element, propertyValue) {\n        if (propertyValue === undefined) {\n            return augmentDimension(element, name, wantInner) + \"px\";\n        }\n        setPropertyValue(element, name, parseFloat(propertyValue) - augmentDimension(element, name, wantInner) + \"px\");\n    };\n}\nregisterNormalization([\"Element\", \"innerWidth\", getDimension(\"width\", true)]);\nregisterNormalization([\"Element\", \"innerHeight\", getDimension(\"height\", true)]);\nregisterNormalization([\"Element\", \"outerWidth\", getDimension(\"width\", false)]);\nregisterNormalization([\"Element\", \"outerHeight\", getDimension(\"height\", false)]);\n\n// Project\n// Constants\nvar inlineRx = /^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|let|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i,\n    listItemRx = /^(li)$/i,\n    tableRowRx = /^(tr)$/i,\n    tableRx = /^(table)$/i,\n    tableRowGroupRx = /^(tbody)$/i;\nfunction display(element, propertyValue) {\n    var style = element.style;\n    if (propertyValue === undefined) {\n        return computePropertyValue(element, \"display\");\n    }\n    if (propertyValue === \"auto\") {\n        var nodeName = element && element.nodeName,\n            data = Data(element);\n        if (inlineRx.test(nodeName)) {\n            propertyValue = \"inline\";\n        } else if (listItemRx.test(nodeName)) {\n            propertyValue = \"list-item\";\n        } else if (tableRowRx.test(nodeName)) {\n            propertyValue = \"table-row\";\n        } else if (tableRx.test(nodeName)) {\n            propertyValue = \"table\";\n        } else if (tableRowGroupRx.test(nodeName)) {\n            propertyValue = \"table-row-group\";\n        } else {\n            // Default to \"block\" when no match is found.\n            propertyValue = \"block\";\n        }\n        // IMPORTANT: We need to do this as getPropertyValue bypasses the\n        // Normalisation when it exists in the cache.\n        data.cache[\"display\"] = propertyValue;\n    }\n    style.display = propertyValue;\n}\nregisterNormalization([\"Element\", \"display\", display]);\n\n// Project\nfunction clientWidth(element, propertyValue) {\n    if (propertyValue == null) {\n        return element.clientWidth + \"px\";\n    }\n}\nfunction scrollWidth(element, propertyValue) {\n    if (propertyValue == null) {\n        return element.scrollWidth + \"px\";\n    }\n}\nfunction clientHeight(element, propertyValue) {\n    if (propertyValue == null) {\n        return element.clientHeight + \"px\";\n    }\n}\nfunction scrollHeight(element, propertyValue) {\n    if (propertyValue == null) {\n        return element.scrollHeight + \"px\";\n    }\n}\nfunction scroll(direction, end) {\n    return function (element, propertyValue) {\n        if (propertyValue == null) {\n            // Make sure we have these values cached.\n            getPropertyValue(element, \"client\" + direction, null, true);\n            getPropertyValue(element, \"scroll\" + direction, null, true);\n            return element[\"scroll\" + end] + \"px\";\n        }\n        var value = parseFloat(propertyValue),\n            unit = propertyValue.replace(String(value), \"\");\n        switch (unit) {\n            case \"\":\n            case \"px\":\n                element[\"scroll\" + end] = value;\n                break;\n            case \"%\":\n                var client = parseFloat(getPropertyValue(element, \"client\" + direction)),\n                    scrollValue = parseFloat(getPropertyValue(element, \"scroll\" + direction));\n                element[\"scroll\" + end] = Math.max(0, scrollValue - client) * value / 100;\n                break;\n        }\n    };\n}\nregisterNormalization([\"HTMLElement\", \"scroll\", scroll(\"Height\", \"Top\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollTop\", scroll(\"Height\", \"Top\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollLeft\", scroll(\"Width\", \"Left\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollWidth\", scrollWidth]);\nregisterNormalization([\"HTMLElement\", \"clientWidth\", clientWidth]);\nregisterNormalization([\"HTMLElement\", \"scrollHeight\", scrollHeight]);\nregisterNormalization([\"HTMLElement\", \"clientHeight\", clientHeight]);\n\n// Project\n/**\n * An RegExp pattern for the following list of css words using\n * http://kemio.com.ar/tools/lst-trie-re.php to generate:\n *\n * blockSize\n * borderBottomLeftRadius\n * borderBottomRightRadius\n * borderBottomWidth\n * borderImageOutset\n * borderImageWidth\n * borderLeftWidth\n * borderRadius\n * borderRightWidth\n * borderSpacing\n * borderTopLeftRadius\n * borderTopRightRadius\n * borderTopWidth\n * borderWidth\n * bottom\n * columnGap\n * columnRuleWidth\n * columnWidth\n * flexBasis\n * fontSize\n * gridColumnGap\n * gridGap\n * gridRowGap\n * height\n * inlineSize\n * left\n * letterSpacing\n * margin\n * marginBottom\n * marginLeft\n * marginRight\n * marginTop\n * maxBlockSize\n * maxHeight\n * maxInlineSize\n * maxWidth\n * minBlockSize\n * minHeight\n * minInlineSize\n * minWidth\n * objectPosition\n * outlineOffset\n * outlineWidth\n * padding\n * paddingBottom\n * paddingLeft\n * paddingRight\n * paddingTop\n * perspective\n * right\n * shapeMargin\n * strokeDashoffset\n * strokeWidth\n * textIndent\n * top\n * transformOrigin\n * width\n * wordSpacing\n */\n// tslint:disable-next-line:max-line-length\nvar rxAddPx = /^(b(lockSize|o(rder(Bottom(LeftRadius|RightRadius|Width)|Image(Outset|Width)|LeftWidth|R(adius|ightWidth)|Spacing|Top(LeftRadius|RightRadius|Width)|Width)|ttom))|column(Gap|RuleWidth|Width)|f(lexBasis|ontSize)|grid(ColumnGap|Gap|RowGap)|height|inlineSize|le(ft|tterSpacing)|m(a(rgin(Bottom|Left|Right|Top)|x(BlockSize|Height|InlineSize|Width))|in(BlockSize|Height|InlineSize|Width))|o(bjectPosition|utline(Offset|Width))|p(adding(Bottom|Left|Right|Top)|erspective)|right|s(hapeMargin|troke(Dashoffset|Width))|t(extIndent|op|ransformOrigin)|w(idth|ordSpacing))$/;\n/**\n * Return a Normalisation that can be used to set / get a prefixed style\n * property.\n */\nfunction getSetPrefixed(propertyName, unprefixed) {\n    return function (element, propertyValue) {\n        if (propertyValue === undefined) {\n            return computePropertyValue(element, propertyName) || computePropertyValue(element, unprefixed);\n        }\n        element.style[propertyName] = element.style[unprefixed] = propertyValue;\n    };\n}\n/**\n * Return a Normalisation that can be used to set / get a style property.\n */\nfunction getSetStyle(propertyName) {\n    return function (element, propertyValue) {\n        if (propertyValue === undefined) {\n            return computePropertyValue(element, propertyName);\n        }\n        element.style[propertyName] = propertyValue;\n    };\n}\n/**\n * Vendor prefixes. Chrome / Safari, Firefox, IE / Edge, Opera.\n */\nvar rxVendors = /^(webkit|moz|ms|o)[A-Z]/,\n    prefixElement = State.prefixElement;\nif (prefixElement) {\n    for (var propertyName in prefixElement.style) {\n        if (rxVendors.test(propertyName)) {\n            var unprefixed = propertyName.replace(/^[a-z]+([A-Z])/, function ($, letter) {\n                return letter.toLowerCase();\n            });\n            {\n                var addUnit = rxAddPx.test(unprefixed) ? \"px\" : undefined;\n                registerNormalization([\"Element\", unprefixed, getSetPrefixed(propertyName, unprefixed), addUnit]);\n            }\n        } else if (!hasNormalization([\"Element\", propertyName])) {\n            var _addUnit = rxAddPx.test(propertyName) ? \"px\" : undefined;\n            registerNormalization([\"Element\", propertyName, getSetStyle(propertyName), _addUnit]);\n        }\n    }\n}\n\n// Project\n/**\n * Get/set an attribute.\n */\nfunction getAttribute(name) {\n    return function (element, propertyValue) {\n        if (propertyValue === undefined) {\n            return element.getAttribute(name);\n        }\n        element.setAttribute(name, propertyValue);\n    };\n}\nvar base = document.createElement(\"div\"),\n    rxSubtype = /^SVG(.*)Element$/,\n    rxElement = /Element$/;\nObject.getOwnPropertyNames(window).forEach(function (property) {\n    var subtype = rxSubtype.exec(property);\n    if (subtype && subtype[1] !== \"SVG\") {\n        // Don't do SVGSVGElement.\n        try {\n            var element = subtype[1] ? document.createElementNS(\"http://www.w3.org/2000/svg\", (subtype[1] || \"svg\").toLowerCase()) : document.createElement(\"svg\");\n            // tslint:disable-next-line:forin\n            for (var attribute in element) {\n                // Although this isn't a tween without prototypes, we do\n                // want to get hold of all attributes and not just own ones.\n                var value = element[attribute];\n                if (isString(attribute) && !(attribute[0] === \"o\" && attribute[1] === \"n\") && attribute !== attribute.toUpperCase() && !rxElement.test(attribute) && !(attribute in base) && !isFunction(value)) {\n                    // TODO: Should this all be set on the generic SVGElement, it would save space and time, but not as powerful\n                    registerNormalization([property, attribute, getAttribute(attribute)]);\n                }\n            }\n        } catch (e) {\n            console.error(\"VelocityJS: Error when trying to identify SVG attributes on \" + property + \".\", e);\n        }\n    }\n});\n\n// Project\n/**\n * Get/set the width or height.\n */\nfunction getDimension$1(name) {\n    return function (element, propertyValue) {\n        if (propertyValue === undefined) {\n            // Firefox throws an error if .getBBox() is called on an SVG that isn't attached to the DOM.\n            try {\n                return element.getBBox()[name] + \"px\";\n            } catch (e) {\n                return \"0px\";\n            }\n        }\n        element.setAttribute(name, propertyValue);\n    };\n}\nregisterNormalization([\"SVGElement\", \"width\", getDimension$1(\"width\")]);\nregisterNormalization([\"SVGElement\", \"height\", getDimension$1(\"height\")]);\n\n// Project\n/**\n * A fake normalization used to allow the \"tween\" property easy access.\n */\nfunction getSetTween(element, propertyValue) {\n    if (propertyValue === undefined) {\n        return \"\";\n    }\n}\nregisterNormalization([\"Element\", \"tween\", getSetTween]);\n\n// Automatically generated\nvar VERSION = \"2.0.6\";\n\n// Project\nvar Velocity$$1 = Velocity$1;\n/**\n * These parts of Velocity absolutely must be included, even if they're unused!\n */\nvar VelocityStatic;\n(function (VelocityStatic) {\n    /**\n     * Actions cannot be replaced if they are internal (hasOwnProperty is false\n     * but they still exist). Otherwise they can be replaced by users.\n     *\n     * All external method calls should be using actions rather than sub-calls\n     * of Velocity itself.\n     */\n    VelocityStatic.Actions = Actions;\n    /**\n     * Our known easing functions.\n     */\n    VelocityStatic.Easings = Easings;\n    /**\n     * The currently registered sequences.\n     */\n    VelocityStatic.Sequences = SequencesObject;\n    /**\n     * Current internal state of Velocity.\n     */\n    VelocityStatic.State = State; // tslint:disable-line:no-shadowed-variable\n    /**\n     * Velocity option defaults, which can be overriden by the user.\n     */\n    VelocityStatic.defaults = defaults$1;\n    /**\n     * Used to patch any object to allow Velocity chaining. In order to chain an\n     * object must either be treatable as an array - with a <code>.length</code>\n     * property, and each member a Node, or a Node directly.\n     *\n     * By default Velocity will try to patch <code>window</code>,\n     * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n     * Nodes or lists of Nodes.\n     */\n    VelocityStatic.patch = patch;\n    /**\n     * Set to true, 1 or 2 (most verbose) to output debug info to console.\n     */\n    VelocityStatic.debug = false;\n    /**\n     * In mock mode, all animations are forced to complete immediately upon the\n     * next rAF tick. If there are further animations queued then they will each\n     * take one single frame in turn. Loops and repeats will be disabled while\n     * <code>mock = true</code>.\n     */\n    VelocityStatic.mock = false;\n    /**\n     * Save our version number somewhere visible.\n     */\n    VelocityStatic.version = VERSION;\n    /**\n     * Added as a fallback for \"import {Velocity} from 'velocity-animate';\".\n     */\n    VelocityStatic.Velocity = Velocity$1; // tslint:disable-line:no-shadowed-variable\n})(VelocityStatic || (VelocityStatic = {}));\n/* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */\nvar IE = function () {\n    if (document.documentMode) {\n        return document.documentMode;\n    } else {\n        for (var i = 7; i > 4; i--) {\n            var div = document.createElement(\"div\");\n            div.innerHTML = \"<!\" + \"--\" + \"[if IE \" + i + \"]><span></span><![endif]-->\";\n            if (div.getElementsByTagName(\"span\").length) {\n                div = null;\n                return i;\n            }\n        }\n    }\n    return undefined;\n}();\n/******************\n Unsupported\n ******************/\nif (IE <= 8) {\n    throw new Error(\"VelocityJS cannot run on Internet Explorer 8 or earlier\");\n}\n/******************\n Frameworks\n ******************/\nif (window) {\n    /*\n     * Both jQuery and Zepto allow their $.fn object to be extended to allow\n     * wrapped elements to be subjected to plugin calls. If either framework is\n     * loaded, register a \"velocity\" extension pointing to Velocity's core\n     * animate() method. Velocity also registers itself onto a global container\n     * (window.jQuery || window.Zepto || window) so that certain features are\n     * accessible beyond just a per-element scope. Accordingly, Velocity can\n     * both act on wrapped DOM elements and stand alone for targeting raw DOM\n     * elements.\n     */\n    var jQuery = window.jQuery,\n        Zepto = window.Zepto;\n    patch(window, true);\n    patch(Element && Element.prototype);\n    patch(NodeList && NodeList.prototype);\n    patch(HTMLCollection && HTMLCollection.prototype);\n    patch(jQuery, true);\n    patch(jQuery && jQuery.fn);\n    patch(Zepto, true);\n    patch(Zepto && Zepto.fn);\n}\n// Make sure that the values within Velocity are read-only and upatchable.\n\nvar _loop = function _loop(property) {\n    if (VelocityStatic.hasOwnProperty(property)) {\n        switch (typeof property === \"undefined\" ? \"undefined\" : _typeof(property)) {\n            case \"number\":\n            case \"boolean\":\n                defineProperty$1(Velocity$$1, property, {\n                    get: function get$$1() {\n                        return VelocityStatic[property];\n                    },\n                    set: function set$$1(value) {\n                        VelocityStatic[property] = value;\n                    }\n                }, true);\n                break;\n            default:\n                defineProperty$1(Velocity$$1, property, VelocityStatic[property], true);\n                break;\n        }\n    }\n};\n\nfor (var property in VelocityStatic) {\n    _loop(property);\n}\nObject.freeze(Velocity$$1);\n\n// Project\nvar rxPercents = /(\\d*\\.\\d+|\\d+\\.?|from|to)/g;\nfunction expandSequence(animation, sequence) {\n    var tweens = animation.tweens = Object.create(null),\n        element = animation.element;\n    for (var propertyName in sequence.tweens) {\n        if (sequence.tweens.hasOwnProperty(propertyName)) {\n            var fn = getNormalization(element, propertyName);\n            if (!fn && propertyName !== \"tween\") {\n                if (Velocity$$1.debug) {\n                    console.log(\"Skipping [\" + propertyName + \"] due to a lack of browser support.\");\n                }\n                continue;\n            }\n            tweens[propertyName] = {\n                fn: fn,\n                sequence: sequence.tweens[propertyName]\n            };\n        }\n    }\n}\n/**\n * Used to register a sequence. This should never be called by users\n * directly, instead it should be called via an action:<br/>\n * <code>Velocity(\"registerSequence\", \"\"name\", VelocitySequence);</code>\n */\nfunction registerSequence(args) {\n    if (isPlainObject(args[0])) {\n        for (var name in args[0]) {\n            if (args[0].hasOwnProperty(name)) {\n                registerSequence([name, args[0][name]]);\n            }\n        }\n    } else if (isString(args[0])) {\n        var _name = args[0],\n            sequence = args[1];\n        if (!isString(_name)) {\n            console.warn(\"VelocityJS: Trying to set 'registerSequence' name to an invalid value:\", _name);\n        } else if (!isPlainObject(sequence)) {\n            console.warn(\"VelocityJS: Trying to set 'registerSequence' sequence to an invalid value:\", _name, sequence);\n        } else {\n            if (SequencesObject[_name]) {\n                console.warn(\"VelocityJS: Replacing named sequence:\", _name);\n            }\n            var percents = {},\n                steps = new Array(100),\n                properties = [],\n                sequenceList = SequencesObject[_name] = {},\n                duration = validateDuration(sequence.duration);\n            sequenceList.tweens = {};\n            if (isNumber(duration)) {\n                sequenceList.duration = duration;\n            }\n            for (var part in sequence) {\n                if (sequence.hasOwnProperty(part)) {\n                    var keys = String(part).match(rxPercents);\n                    if (keys) {\n                        var _iteratorNormalCompletion = true;\n                        var _didIteratorError = false;\n                        var _iteratorError = undefined;\n\n                        try {\n                            for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                                var key = _step.value;\n\n                                var percent = key === \"from\" ? 0 : key === \"to\" ? 100 : parseFloat(key);\n                                if (percent < 0 || percent > 100) {\n                                    console.warn(\"VelocityJS: Trying to use an invalid value as a percentage (0 <= n <= 100):\", _name, percent);\n                                } else if (isNaN(percent)) {\n                                    console.warn(\"VelocityJS: Trying to use an invalid number as a percentage:\", _name, part, key);\n                                } else {\n                                    if (!percents[String(percent)]) {\n                                        percents[String(percent)] = [];\n                                    }\n                                    percents[String(percent)].push(part);\n                                    for (var property in sequence[part]) {\n                                        if (!properties.includes(property)) {\n                                            properties.push(property);\n                                        }\n                                    }\n                                }\n                            }\n                        } catch (err) {\n                            _didIteratorError = true;\n                            _iteratorError = err;\n                        } finally {\n                            try {\n                                if (!_iteratorNormalCompletion && _iterator.return) {\n                                    _iterator.return();\n                                }\n                            } finally {\n                                if (_didIteratorError) {\n                                    throw _iteratorError;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            var orderedPercents = Object.keys(percents).sort(function (a, b) {\n                var a1 = parseFloat(a),\n                    b1 = parseFloat(b);\n                return a1 > b1 ? 1 : a1 < b1 ? -1 : 0;\n            });\n            orderedPercents.forEach(function (key) {\n                steps.push.apply(percents[key]);\n            });\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n                for (var _iterator2 = properties[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                    var _property = _step2.value;\n\n                    var parts = [],\n                        propertyName = camelCase(_property);\n                    var _iteratorNormalCompletion3 = true;\n                    var _didIteratorError3 = false;\n                    var _iteratorError3 = undefined;\n\n                    try {\n                        for (var _iterator3 = orderedPercents[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                            var _key = _step3.value;\n                            var _iteratorNormalCompletion6 = true;\n                            var _didIteratorError6 = false;\n                            var _iteratorError6 = undefined;\n\n                            try {\n                                for (var _iterator6 = percents[_key][Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                                    var _value = _step6.value;\n\n                                    var stepProperties = sequence[_value];\n                                    if (stepProperties[propertyName]) {\n                                        parts.push(isString(stepProperties[propertyName]) ? stepProperties[propertyName] : stepProperties[propertyName][0]);\n                                    }\n                                }\n                            } catch (err) {\n                                _didIteratorError6 = true;\n                                _iteratorError6 = err;\n                            } finally {\n                                try {\n                                    if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                                        _iterator6.return();\n                                    }\n                                } finally {\n                                    if (_didIteratorError6) {\n                                        throw _iteratorError6;\n                                    }\n                                }\n                            }\n                        }\n                    } catch (err) {\n                        _didIteratorError3 = true;\n                        _iteratorError3 = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                                _iterator3.return();\n                            }\n                        } finally {\n                            if (_didIteratorError3) {\n                                throw _iteratorError3;\n                            }\n                        }\n                    }\n\n                    if (parts.length) {\n                        var realSequence = findPattern(parts, propertyName);\n                        var index = 0;\n                        if (realSequence) {\n                            var _iteratorNormalCompletion4 = true;\n                            var _didIteratorError4 = false;\n                            var _iteratorError4 = undefined;\n\n                            try {\n                                for (var _iterator4 = orderedPercents[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                                    var _key2 = _step4.value;\n                                    var _iteratorNormalCompletion5 = true;\n                                    var _didIteratorError5 = false;\n                                    var _iteratorError5 = undefined;\n\n                                    try {\n                                        for (var _iterator5 = percents[_key2][Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                                            var value = _step5.value;\n\n                                            var originalProperty = sequence[value][propertyName];\n                                            if (originalProperty) {\n                                                if (Array.isArray(originalProperty) && originalProperty.length > 1 && (isString(originalProperty[1]) || Array.isArray(originalProperty[1]))) {\n                                                    realSequence[index].easing = validateEasing(originalProperty[1], sequenceList.duration || DEFAULT_DURATION);\n                                                }\n                                                realSequence[index++].percent = parseFloat(_key2) / 100;\n                                            }\n                                        }\n                                    } catch (err) {\n                                        _didIteratorError5 = true;\n                                        _iteratorError5 = err;\n                                    } finally {\n                                        try {\n                                            if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                                                _iterator5.return();\n                                            }\n                                        } finally {\n                                            if (_didIteratorError5) {\n                                                throw _iteratorError5;\n                                            }\n                                        }\n                                    }\n                                }\n                            } catch (err) {\n                                _didIteratorError4 = true;\n                                _iteratorError4 = err;\n                            } finally {\n                                try {\n                                    if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                                        _iterator4.return();\n                                    }\n                                } finally {\n                                    if (_didIteratorError4) {\n                                        throw _iteratorError4;\n                                    }\n                                }\n                            }\n\n                            sequenceList.tweens[propertyName] = realSequence;\n                        }\n                    }\n                }\n            } catch (err) {\n                _didIteratorError2 = true;\n                _iteratorError2 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                        _iterator2.return();\n                    }\n                } finally {\n                    if (_didIteratorError2) {\n                        throw _iteratorError2;\n                    }\n                }\n            }\n        }\n    }\n}\nregisterAction([\"registerSequence\", registerSequence], true);\n\n// Project\nvar globalPromise = void 0;\ntry {\n    globalPromise = Promise;\n} catch ( /**/_a) {/**/}\nvar noPromiseOption = \", if that is deliberate then pass `promiseRejectEmpty:false` as an option\";\n/**\n * Patch a VelocityResult with a Promise.\n */\nfunction patchPromise(promiseObject, result) {\n    defineProperty$1(result, \"promise\", promiseObject);\n    defineProperty$1(result, \"then\", promiseObject.then.bind(promiseObject));\n    defineProperty$1(result, \"catch\", promiseObject.catch.bind(promiseObject));\n    if (promiseObject.finally) {\n        // Semi-standard\n        defineProperty$1(result, \"finally\", promiseObject.finally.bind(promiseObject));\n    }\n}\n/* tslint:enable:max-line-length */\nfunction Velocity$1() {\n    var\n    /**\n     * A shortcut to the default options.\n     */\n    defaults$$1 = defaults$1,\n\n    /**\n     * Cache of the first argument - this is used often enough to be saved.\n     */\n    args0 = arguments.length <= 0 ? undefined : arguments[0],\n\n    /**\n     * To allow for expressive CoffeeScript code, Velocity supports an\n     * alternative syntax in which \"elements\" (or \"e\"), \"properties\" (or\n     * \"p\"), and \"options\" (or \"o\") objects are defined on a container\n     * object that's passed in as Velocity's sole argument.\n     *\n     * Note: Some browsers automatically populate arguments with a\n     * \"properties\" object. We detect it by checking for its default\n     * \"names\" property.\n     */\n    // TODO: Confirm which browsers - if <=IE8 the we can drop completely\n    syntacticSugar = isPlainObject(args0) && (args0.p || isPlainObject(args0.properties) && !args0.properties.names || isString(args0.properties));\n    var\n    /**\n     *  When Velocity is called via the utility function (Velocity()),\n     * elements are explicitly passed in as the first parameter. Thus,\n     * argument positioning varies.\n     */\n    argumentIndex = 0,\n\n    /**\n     * The list of elements, extended with Promise and Velocity.\n     */\n    elements = void 0,\n\n    /**\n     * The properties being animated. This can be a string, in which case it\n     * is either a function for these elements, or it is a \"named\" animation\n     * sequence to use instead. Named sequences start with either \"callout.\"\n     * or \"transition.\". When used as a callout the values will be reset\n     * after finishing. When used as a transtition then there is no special\n     * handling after finishing.\n     */\n    propertiesMap = void 0,\n\n    /**\n     * Options supplied, this will be mapped and validated into\n     * <code>options</code>.\n     */\n    optionsMap = void 0,\n\n    /**\n     * If called via a chain then this contains the <b>last</b> calls\n     * animations. If this does not have a value then any access to the\n     * element's animations needs to be to the currently-running ones.\n     */\n    animations = void 0,\n\n    /**\n     * The promise that is returned.\n     */\n    promise = void 0,\n\n    // Used when the animation is finished\n    resolver = void 0,\n\n    // Used when there was an issue with one or more of the Velocity arguments\n    rejecter = void 0;\n    //console.log(`Velocity`, args)\n    // First get the elements, and the animations connected to the last call if\n    // this is chained.\n    // TODO: Clean this up a bit\n    // TODO: Throw error if the chain is called with elements as the first argument. isVelocityResult(this) && ( (isNode(arg0) || isWrapped(arg0)) && arg0 == this)\n    if (isNode(this)) {\n        // This is from a chain such as document.getElementById(\"\").velocity(...)\n        elements = [this];\n    } else if (isWrapped(this)) {\n        // This might be a chain from something else, but if chained from a\n        // previous Velocity() call then grab the animations it's related to.\n        elements = cloneArray(this);\n        if (isVelocityResult(this)) {\n            animations = this.velocity.animations;\n        }\n    } else if (syntacticSugar) {\n        elements = cloneArray(args0.elements || args0.e);\n        argumentIndex++;\n    } else if (isNode(args0)) {\n        elements = cloneArray([args0]);\n        argumentIndex++;\n    } else if (isWrapped(args0)) {\n        elements = cloneArray(args0);\n        argumentIndex++;\n    }\n    // Allow elements to be chained.\n    if (elements) {\n        defineProperty$1(elements, \"velocity\", Velocity$1.bind(elements));\n        if (animations) {\n            defineProperty$1(elements.velocity, \"animations\", animations);\n        }\n    }\n    // Next get the propertiesMap and options.\n    if (syntacticSugar) {\n        propertiesMap = getValue(args0.properties, args0.p);\n    } else {\n        var _ref;\n\n        // TODO: Should be possible to call Velocity(\"pauseAll\") - currently not possible\n        propertiesMap = (_ref = argumentIndex++, arguments.length <= _ref ? undefined : arguments[_ref]);\n    }\n    // Get any options map passed in as arguments first, expand any direct\n    // options if possible.\n    var isReverse = propertiesMap === \"reverse\",\n        isAction = !isReverse && isString(propertiesMap),\n        maybeSequence = isAction && SequencesObject[propertiesMap],\n        opts = syntacticSugar ? getValue(args0.options, args0.o) : arguments.length <= argumentIndex ? undefined : arguments[argumentIndex];\n    if (isPlainObject(opts)) {\n        optionsMap = opts;\n    }\n    // Create the promise if supported and wanted.\n    if (globalPromise && getValue(optionsMap && optionsMap.promise, defaults$$1.promise)) {\n        promise = new globalPromise(function (resolve, reject) {\n            rejecter = reject;\n            // IMPORTANT:\n            // If a resolver tries to run on a Promise then it will wait until\n            // that Promise resolves - but in this case we're running on our own\n            // Promise, so need to make sure it's not seen as one. Removing\n            // these values for the duration of the resolve.\n            // Due to being an async call, they should be back to \"normal\"\n            // before the <code>.then()</code> function gets called.\n            resolver = function resolver(result) {\n                if (isVelocityResult(result) && result.promise) {\n                    delete result.then;\n                    delete result.catch;\n                    delete result.finally;\n                    resolve(result);\n                    patchPromise(result.promise, result);\n                } else {\n                    resolve(result);\n                }\n            };\n        });\n        if (elements) {\n            patchPromise(promise, elements);\n        }\n    }\n    if (promise) {\n        var optionPromiseRejectEmpty = optionsMap && optionsMap.promiseRejectEmpty,\n            promiseRejectEmpty = getValue(optionPromiseRejectEmpty, defaults$$1.promiseRejectEmpty);\n        if (!elements && !isAction) {\n            if (promiseRejectEmpty) {\n                rejecter(\"Velocity: No elements supplied\" + (isBoolean(optionPromiseRejectEmpty) ? \"\" : noPromiseOption) + \". Aborting.\");\n            } else {\n                resolver();\n            }\n        } else if (!propertiesMap) {\n            if (promiseRejectEmpty) {\n                rejecter(\"Velocity: No properties supplied\" + (isBoolean(optionPromiseRejectEmpty) ? \"\" : noPromiseOption) + \". Aborting.\");\n            } else {\n                resolver();\n            }\n        }\n    }\n    if (!elements && !isAction || !propertiesMap) {\n        return promise;\n    }\n    // NOTE: Can't use isAction here due to type inference - there are callbacks\n    // between so the type isn't considered safe.\n    if (isAction) {\n        var actionArgs = [],\n            promiseHandler = promise && {\n            _promise: promise,\n            _resolver: resolver,\n            _rejecter: rejecter\n        };\n        while (argumentIndex < arguments.length) {\n            var _ref2;\n\n            actionArgs.push((_ref2 = argumentIndex++, arguments.length <= _ref2 ? undefined : arguments[_ref2]));\n        }\n        // Velocity's behavior is categorized into \"actions\". If a string is\n        // passed in instead of a propertiesMap then that will call a function\n        // to do something special to the animation linked.\n        // There is one special case - \"reverse\" - which is handled differently,\n        // by being stored on the animation and then expanded when the animation\n        // starts.\n        var action = propertiesMap.replace(/\\..*$/, \"\"),\n            callback = Actions[action];\n        if (callback) {\n            var result = callback(actionArgs, elements, promiseHandler, propertiesMap);\n            if (result !== undefined) {\n                return result;\n            }\n            return elements || promise;\n        } else if (!maybeSequence) {\n            console.error(\"VelocityJS: First argument (\" + propertiesMap + \") was not a property map, a known action, or a registered redirect. Aborting.\");\n            return;\n        }\n    }\n    var hasValidDuration = void 0;\n    if (isPlainObject(propertiesMap) || isReverse || maybeSequence) {\n        /**\n         * The options for this set of animations.\n         */\n        var options = {};\n        var isSync = defaults$$1.sync;\n        // Private options first - set as non-enumerable, and starting with an\n        // underscore so we can filter them out.\n        if (promise) {\n            defineProperty$1(options, \"_promise\", promise);\n            defineProperty$1(options, \"_rejecter\", rejecter);\n            defineProperty$1(options, \"_resolver\", resolver);\n        }\n        defineProperty$1(options, \"_ready\", 0);\n        defineProperty$1(options, \"_started\", 0);\n        defineProperty$1(options, \"_completed\", 0);\n        defineProperty$1(options, \"_total\", 0);\n        // Now check the optionsMap\n        if (isPlainObject(optionsMap)) {\n            var validDuration = validateDuration(optionsMap.duration);\n            hasValidDuration = validDuration !== undefined;\n            options.duration = getValue(validDuration, defaults$$1.duration);\n            options.delay = getValue(validateDelay(optionsMap.delay), defaults$$1.delay);\n            // Need the extra fallback here in case it supplies an invalid\n            // easing that we need to overrride with the default.\n            options.easing = validateEasing(getValue(optionsMap.easing, defaults$$1.easing), options.duration) || validateEasing(defaults$$1.easing, options.duration);\n            options.loop = getValue(validateLoop(optionsMap.loop), defaults$$1.loop);\n            options.repeat = options.repeatAgain = getValue(validateRepeat(optionsMap.repeat), defaults$$1.repeat);\n            if (optionsMap.speed != null) {\n                options.speed = getValue(validateSpeed(optionsMap.speed), 1);\n            }\n            if (isBoolean(optionsMap.promise)) {\n                options.promise = optionsMap.promise;\n            }\n            options.queue = getValue(validateQueue(optionsMap.queue), defaults$$1.queue);\n            if (optionsMap.mobileHA && !State.isGingerbread) {\n                /* When set to true, and if this is a mobile device, mobileHA automatically enables hardware acceleration (via a null transform hack)\n                 on animating elements. HA is removed from the element at the completion of its animation. */\n                /* Note: Android Gingerbread doesn't support HA. If a null transform hack (mobileHA) is in fact set, it will prevent other tranform subproperties from taking effect. */\n                /* Note: You can read more about the use of mobileHA in Velocity's documentation: velocity-animate/#mobileHA. */\n                options.mobileHA = true;\n            }\n            if (optionsMap.drag === true) {\n                options.drag = true;\n            }\n            if (isNumber(optionsMap.stagger) || isFunction(optionsMap.stagger)) {\n                options.stagger = optionsMap.stagger;\n            }\n            if (!isReverse) {\n                if (optionsMap[\"display\"] != null) {\n                    propertiesMap.display = optionsMap[\"display\"];\n                    console.error(\"Deprecated \\\"options.display\\\" used, this is now a property:\", optionsMap[\"display\"]);\n                }\n                if (optionsMap[\"visibility\"] != null) {\n                    propertiesMap.visibility = optionsMap[\"visibility\"];\n                    console.error(\"Deprecated \\\"options.visibility\\\" used, this is now a property:\", optionsMap[\"visibility\"]);\n                }\n            }\n            // TODO: Allow functional options for different options per element\n            var optionsBegin = validateBegin(optionsMap.begin),\n                optionsComplete = validateComplete(optionsMap.complete),\n                optionsProgress = validateProgress(optionsMap.progress),\n                optionsSync = validateSync(optionsMap.sync);\n            if (optionsBegin != null) {\n                options.begin = optionsBegin;\n            }\n            if (optionsComplete != null) {\n                options.complete = optionsComplete;\n            }\n            if (optionsProgress != null) {\n                options.progress = optionsProgress;\n            }\n            if (optionsSync != null) {\n                isSync = optionsSync;\n            }\n        } else if (!syntacticSugar) {\n            // Expand any direct options if possible.\n            var offset = 0;\n            options.duration = validateDuration(arguments.length <= argumentIndex ? undefined : arguments[argumentIndex], true);\n            if (options.duration === undefined) {\n                options.duration = defaults$$1.duration;\n            } else {\n                hasValidDuration = true;\n                offset++;\n            }\n            if (!isFunction(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset])) {\n                // Despite coming before Complete, we can't pass a fn easing\n                var easing = validateEasing(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset], getValue(options && validateDuration(options.duration), defaults$$1.duration), true);\n                if (easing !== undefined) {\n                    offset++;\n                    options.easing = easing;\n                }\n            }\n            var complete = validateComplete(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset], true);\n            if (complete !== undefined) {\n                options.complete = complete;\n            }\n            options.delay = defaults$$1.delay;\n            options.loop = defaults$$1.loop;\n            options.repeat = options.repeatAgain = defaults$$1.repeat;\n        }\n        if (isReverse && options.queue === false) {\n            throw new Error(\"VelocityJS: Cannot reverse a queue:false animation.\");\n        }\n        if (!hasValidDuration && maybeSequence && maybeSequence.duration) {\n            options.duration = maybeSequence.duration;\n        }\n        // When a set of elements is targeted by a Velocity call, the set is\n        // broken up and each element has the current Velocity call individually\n        // queued onto it. In this way, each element's existing queue is\n        // respected; some elements may already be animating and accordingly\n        // should not have this current Velocity call triggered immediately\n        // unless the sync:true option is used.\n        var rootAnimation = {\n            options: options,\n            elements: elements,\n            _prev: undefined,\n            _next: undefined,\n            _flags: isSync ? 32 /* SYNC */ : 0,\n            percentComplete: 0,\n            ellapsedTime: 0,\n            timeStart: 0\n        };\n        animations = [];\n        for (var index = 0; index < elements.length; index++) {\n            var element = elements[index];\n            var flags = 0;\n            if (isNode(element)) {\n                // TODO: This needs to check for valid animation targets, not just Elements\n                if (isReverse) {\n                    var lastAnimation = Data(element).lastAnimationList[options.queue];\n                    propertiesMap = lastAnimation && lastAnimation.tweens;\n                    if (!propertiesMap) {\n                        console.error(\"VelocityJS: Attempting to reverse an animation on an element with no previous animation:\", element);\n                        continue;\n                    }\n                    flags |= 64 /* REVERSE */ & ~(lastAnimation._flags & 64 /* REVERSE */); // tslint:disable-line:no-bitwise\n                }\n                var animation = Object.assign({}, rootAnimation, { element: element, _flags: rootAnimation._flags | flags });\n                options._total++;\n                animations.push(animation);\n                if (options.stagger) {\n                    if (isFunction(options.stagger)) {\n                        var num = optionCallback(options.stagger, element, index, elements.length, elements, \"stagger\");\n                        if (isNumber(num)) {\n                            animation.delay = options.delay + num;\n                        }\n                    } else {\n                        animation.delay = options.delay + options.stagger * index;\n                    }\n                }\n                if (options.drag) {\n                    animation.duration = options.duration - options.duration * Math.max(1 - (index + 1) / elements.length, 0.75);\n                }\n                if (maybeSequence) {\n                    expandSequence(animation, maybeSequence);\n                } else if (isReverse) {\n                    // In this case we're using the previous animation, so\n                    // it will be expanded correctly when that one runs.\n                    animation.tweens = propertiesMap;\n                } else {\n                    animation.tweens = Object.create(null);\n                    expandProperties(animation, propertiesMap);\n                }\n                queue$1(element, animation, options.queue);\n            }\n        }\n        if (State.isTicking === false) {\n            // If the animation tick isn't running, start it. (Velocity shuts it\n            // off when there are no active calls to process.)\n            tick(false);\n        }\n        if (animations) {\n            defineProperty$1(elements.velocity, \"animations\", animations);\n        }\n    }\n    /***************\n     Chaining\n     ***************/\n    /* Return the elements back to the call chain, with wrapped elements taking precedence in case Velocity was called via the $.fn. extension. */\n    return elements || promise;\n}\n/**\n * Call an option callback in a try/catch block and report an error if needed.\n */\nfunction optionCallback(fn, element, index, length, elements, option) {\n    try {\n        return fn.call(element, index, length, elements, option);\n    } catch (e) {\n        console.error(\"VelocityJS: Exception when calling '\" + option + \"' callback:\", e);\n    }\n}\n\n// Project\n/**\n * Used to patch any object to allow Velocity chaining. In order to chain an\n * object must either be treatable as an array - with a <code>.length</code>\n * property, and each member a Node, or a Node directly.\n *\n * By default Velocity will try to patch <code>window</code>,\n * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n * Nodes or lists of Nodes.\n */\nfunction patch(proto, global) {\n    try {\n        defineProperty$1(proto, (global ? \"V\" : \"v\") + \"elocity\", Velocity$1);\n    } catch (e) {\n        console.warn(\"VelocityJS: Error when trying to add prototype.\", e);\n    }\n}\n\n// Project\nvar Velocity$2 = Velocity$1;\n/**\n * These parts of Velocity absolutely must be included, even if they're unused!\n */\nvar VelocityStatic$1;\n(function (VelocityStatic) {\n    /**\n     * Actions cannot be replaced if they are internal (hasOwnProperty is false\n     * but they still exist). Otherwise they can be replaced by users.\n     *\n     * All external method calls should be using actions rather than sub-calls\n     * of Velocity itself.\n     */\n    VelocityStatic.Actions = Actions;\n    /**\n     * Our known easing functions.\n     */\n    VelocityStatic.Easings = Easings;\n    /**\n     * The currently registered sequences.\n     */\n    VelocityStatic.Sequences = SequencesObject;\n    /**\n     * Current internal state of Velocity.\n     */\n    VelocityStatic.State = State; // tslint:disable-line:no-shadowed-variable\n    /**\n     * Velocity option defaults, which can be overriden by the user.\n     */\n    VelocityStatic.defaults = defaults$1;\n    /**\n     * Used to patch any object to allow Velocity chaining. In order to chain an\n     * object must either be treatable as an array - with a <code>.length</code>\n     * property, and each member a Node, or a Node directly.\n     *\n     * By default Velocity will try to patch <code>window</code>,\n     * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n     * Nodes or lists of Nodes.\n     */\n    VelocityStatic.patch = patch;\n    /**\n     * Set to true, 1 or 2 (most verbose) to output debug info to console.\n     */\n    VelocityStatic.debug = false;\n    /**\n     * In mock mode, all animations are forced to complete immediately upon the\n     * next rAF tick. If there are further animations queued then they will each\n     * take one single frame in turn. Loops and repeats will be disabled while\n     * <code>mock = true</code>.\n     */\n    VelocityStatic.mock = false;\n    /**\n     * Save our version number somewhere visible.\n     */\n    VelocityStatic.version = VERSION;\n    /**\n     * Added as a fallback for \"import {Velocity} from 'velocity-animate';\".\n     */\n    VelocityStatic.Velocity = Velocity$1; // tslint:disable-line:no-shadowed-variable\n})(VelocityStatic$1 || (VelocityStatic$1 = {}));\n/* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */\nvar IE$1 = function () {\n    if (document.documentMode) {\n        return document.documentMode;\n    } else {\n        for (var i = 7; i > 4; i--) {\n            var div = document.createElement(\"div\");\n            div.innerHTML = \"<!\" + \"--\" + \"[if IE \" + i + \"]><span></span><![endif]-->\";\n            if (div.getElementsByTagName(\"span\").length) {\n                div = null;\n                return i;\n            }\n        }\n    }\n    return undefined;\n}();\n/******************\n Unsupported\n ******************/\nif (IE$1 <= 8) {\n    throw new Error(\"VelocityJS cannot run on Internet Explorer 8 or earlier\");\n}\n/******************\n Frameworks\n ******************/\nif (window) {\n    /*\n     * Both jQuery and Zepto allow their $.fn object to be extended to allow\n     * wrapped elements to be subjected to plugin calls. If either framework is\n     * loaded, register a \"velocity\" extension pointing to Velocity's core\n     * animate() method. Velocity also registers itself onto a global container\n     * (window.jQuery || window.Zepto || window) so that certain features are\n     * accessible beyond just a per-element scope. Accordingly, Velocity can\n     * both act on wrapped DOM elements and stand alone for targeting raw DOM\n     * elements.\n     */\n    var jQuery$1 = window.jQuery,\n        Zepto$1 = window.Zepto;\n    patch(window, true);\n    patch(Element && Element.prototype);\n    patch(NodeList && NodeList.prototype);\n    patch(HTMLCollection && HTMLCollection.prototype);\n    patch(jQuery$1, true);\n    patch(jQuery$1 && jQuery$1.fn);\n    patch(Zepto$1, true);\n    patch(Zepto$1 && Zepto$1.fn);\n}\n// Make sure that the values within Velocity are read-only and upatchable.\n\nvar _loop$1 = function _loop(property) {\n    if (VelocityStatic$1.hasOwnProperty(property)) {\n        switch (typeof property === \"undefined\" ? \"undefined\" : _typeof(property)) {\n            case \"number\":\n            case \"boolean\":\n                defineProperty$1(Velocity$2, property, {\n                    get: function get$$1() {\n                        return VelocityStatic$1[property];\n                    },\n                    set: function set$$1(value) {\n                        VelocityStatic$1[property] = value;\n                    }\n                }, true);\n                break;\n            default:\n                defineProperty$1(Velocity$2, property, VelocityStatic$1[property], true);\n                break;\n        }\n    }\n};\n\nfor (var property$1 in VelocityStatic$1) {\n    _loop$1(property$1);\n}\nObject.freeze(Velocity$2);\n\nexport default Velocity$2;\n//# sourceMappingURL=velocity.es5.js.map\n"
  },
  {
    "path": "velocity.js",
    "content": "/**\n * velocity-animate (C) 2014-2017 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Velocity = factory());\n}(this, (function () { 'use strict';\n\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  };\n\n  var classCallCheck = function (instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var defineProperty = function (obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  };\n\n  /**\n   * Check if a variable is a boolean.\n   */\n  function isBoolean(variable) {\n      return variable === true || variable === false;\n  }\n  /**\n   * Check if a variable is a function.\n   */\n  function isFunction(variable) {\n      return Object.prototype.toString.call(variable) === \"[object Function]\";\n  }\n  /**\n   * Check if a variable is an HTMLElement or SVGElement.\n   */\n  function isNode(variable) {\n      return !!(variable && variable.nodeType);\n  }\n  /**\n   * Check if a variable is a number.\n   */\n  function isNumber(variable) {\n      return typeof variable === \"number\";\n  }\n  /**\n   * Check if a variable is a plain object (and not an instance).\n   */\n  function isPlainObject(variable) {\n      if (!variable || (typeof variable === \"undefined\" ? \"undefined\" : _typeof(variable)) !== \"object\" || variable.nodeType || Object.prototype.toString.call(variable) !== \"[object Object]\") {\n          return false;\n      }\n      var proto = Object.getPrototypeOf(variable);\n      return !proto || proto.hasOwnProperty(\"constructor\") && proto.constructor === Object;\n  }\n  /**\n   * Check if a variable is a string.\n   */\n  function isString(variable) {\n      return typeof variable === \"string\";\n  }\n  /**\n   * Check if a variable is the result of calling Velocity.\n   */\n  function isVelocityResult(variable) {\n      return variable && isNumber(variable.length) && isFunction(variable.velocity);\n  }\n  /**\n   * Check if a variable is an array-like wrapped jQuery, Zepto or similar, where\n   * each indexed value is a Node.\n   */\n  function isWrapped(variable) {\n      return variable && variable !== window && isNumber(variable.length) && !isString(variable) && !isFunction(variable) && !isNode(variable) && (variable.length === 0 || isNode(variable[0]));\n  }\n  /**\n   * Check is a property is an enumerable member of an object.\n   */\n  function propertyIsEnumerable(obj, property) {\n      return Object.prototype.propertyIsEnumerable.call(obj, property);\n  }\n\n  // Project\n  /**\n   * Add a single className to an Element.\n   */\n  function addClass(element, className) {\n      if (element instanceof Element) {\n          if (element.classList) {\n              element.classList.add(className);\n          } else {\n              removeClass(element, className);\n              element.className += (element.className.length ? \" \" : \"\") + className;\n          }\n      }\n  }\n  /**\n   * Clone an array, works for array-like too.\n   */\n  function cloneArray(arrayLike) {\n      return Array.prototype.slice.call(arrayLike, 0);\n  }\n  /**\n   * The <strong><code>defineProperty()</code></strong> function provides a\n   * shortcut to defining a property that cannot be accidentally iterated across.\n   */\n  function defineProperty$1(proto, name, value, readonly) {\n      if (proto) {\n          Object.defineProperty(proto, name, {\n              configurable: !readonly,\n              writable: !readonly,\n              value: value\n          });\n      }\n  }\n  /**\n   * When there are multiple locations for a value pass them all in, then get the\n   * first value that is valid.\n   */\n  function getValue() {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n      }\n\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n          for (var _iterator = args[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n              var arg = _step.value;\n\n              if (arg !== undefined && arg === arg) {\n                  return arg;\n              }\n          }\n      } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n      } finally {\n          try {\n              if (!_iteratorNormalCompletion && _iterator.return) {\n                  _iterator.return();\n              }\n          } finally {\n              if (_didIteratorError) {\n                  throw _iteratorError;\n              }\n          }\n      }\n  }\n  /**\n   * Shim to get the current milliseconds - on anything except old IE it'll use\n   * Date.now() and save creating an object. If that doesn't exist then it'll\n   * create one that gets GC.\n   */\n  var now = Date.now ? Date.now : function () {\n      return new Date().getTime();\n  };\n  /**\n   * Remove a single className from an Element.\n   */\n  function removeClass(element, className) {\n      if (element instanceof Element) {\n          if (element.classList) {\n              element.classList.remove(className);\n          } else {\n              // TODO: Need some jsperf tests on performance - can we get rid of the regex and maybe use split / array manipulation?\n              element.className = element.className.replace(new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\", \"gi\"), \" \");\n          }\n      }\n  }\n\n  // Project\n  // Constants\n  var Actions = {};\n  /**\n   * Used to register an action. This should never be called by users\n   * directly, instead it should be called via  an action:<br/>\n   * <code>Velocity(\"registerAction\", \"name\", VelocityActionFn);</code>\n   */\n  function registerAction(args, internal) {\n      var name = args[0],\n          callback = args[1];\n      if (!isString(name)) {\n          console.warn(\"VelocityJS: Trying to set 'registerAction' name to an invalid value:\", name);\n      } else if (!isFunction(callback)) {\n          console.warn(\"VelocityJS: Trying to set 'registerAction' callback to an invalid value:\", name, callback);\n      } else if (Actions[name] && !propertyIsEnumerable(Actions, name)) {\n          console.warn(\"VelocityJS: Trying to override internal 'registerAction' callback\", name);\n      } else if (internal === true) {\n          defineProperty$1(Actions, name, callback);\n      } else {\n          Actions[name] = callback;\n      }\n  }\n  registerAction([\"registerAction\", registerAction], true);\n\n  /**\n   * Without this it will only un-prefix properties that have a valid \"normal\"\n   * version.\n   */\n  var DURATION_FAST = 200;\n  var DURATION_NORMAL = 400;\n  var DURATION_SLOW = 600;\n  var FUZZY_MS_PER_SECOND = 980;\n  var DEFAULT_CACHE = true;\n  var DEFAULT_DELAY = 0;\n  var DEFAULT_DURATION = DURATION_NORMAL;\n  var DEFAULT_EASING = \"swing\";\n  var DEFAULT_FPSLIMIT = 60;\n  var DEFAULT_LOOP = 0;\n  var DEFAULT_PROMISE = true;\n  var DEFAULT_PROMISE_REJECT_EMPTY = true;\n  var DEFAULT_QUEUE = \"\";\n  var DEFAULT_REPEAT = 0;\n  var DEFAULT_SPEED = 1;\n  var DEFAULT_SYNC = true;\n  var CLASSNAME = \"velocity-animating\";\n  var Duration = {\n    fast: DURATION_FAST,\n    normal: DURATION_NORMAL,\n    slow: DURATION_SLOW\n  };\n\n  // Project\n  // Constants\n  var Easings = {};\n  /**\n   * Used to register a easing. This should never be called by users\n   * directly, instead it should be called via an action:<br/>\n   * <code>Velocity(\"registerEasing\", \"name\", VelocityEasingFn);</code>\n   */\n  function registerEasing(args) {\n      var name = args[0],\n          callback = args[1];\n      if (!isString(name)) {\n          console.warn(\"VelocityJS: Trying to set 'registerEasing' name to an invalid value:\", name);\n      } else if (!isFunction(callback)) {\n          console.warn(\"VelocityJS: Trying to set 'registerEasing' callback to an invalid value:\", name, callback);\n      } else if (Easings[name]) {\n          console.warn(\"VelocityJS: Trying to override 'registerEasing' callback\", name);\n      } else {\n          Easings[name] = callback;\n      }\n  }\n  registerAction([\"registerEasing\", registerEasing], true);\n  /**\n   * Linear easing, used for sequence parts that don't have an actual easing\n   * function.\n   */\n  function linearEasing(percentComplete, startValue, endValue, property) {\n      return startValue + percentComplete * (endValue - startValue);\n  }\n  /**\n   * Swing is the default for jQuery and Velocity.\n   */\n  function swingEasing(percentComplete, startValue, endValue) {\n      return startValue + (0.5 - Math.cos(percentComplete * Math.PI) / 2) * (endValue - startValue);\n  }\n  /**\n   * A less exaggerated version of easeInOutElastic.\n   */\n  function springEasing(percentComplete, startValue, endValue) {\n      return startValue + (1 - Math.cos(percentComplete * 4.5 * Math.PI) * Math.exp(-percentComplete * 6)) * (endValue - startValue);\n  }\n  registerEasing([\"linear\", linearEasing]);\n  registerEasing([\"swing\", swingEasing]);\n  registerEasing([\"spring\", springEasing]);\n\n  // Project\n  /**\n   * Fix to a range of <code>0 <= num <= 1</code>.\n   */\n  function fixRange(num) {\n      return Math.min(Math.max(num, 0), 1);\n  }\n  function A(aA1, aA2) {\n      return 1 - 3 * aA2 + 3 * aA1;\n  }\n  function B(aA1, aA2) {\n      return 3 * aA2 - 6 * aA1;\n  }\n  function C(aA1) {\n      return 3 * aA1;\n  }\n  function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n  }\n  function getSlope(aT, aA1, aA2) {\n      return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);\n  }\n  function generateBezier() {\n      var NEWTON_ITERATIONS = 4,\n          NEWTON_MIN_SLOPE = 0.001,\n          SUBDIVISION_PRECISION = 0.0000001,\n          SUBDIVISION_MAX_ITERATIONS = 10,\n          kSplineTableSize = 11,\n          kSampleStepSize = 1 / (kSplineTableSize - 1),\n          float32ArraySupported = \"Float32Array\" in window;\n      /* Must contain four args. */\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n      }\n\n      if (args.length !== 4) {\n          return;\n      }\n      /* Args must be numbers. */\n      for (var i = 0; i < 4; ++i) {\n          if (typeof args[i] !== \"number\" || isNaN(args[i]) || !isFinite(args[i])) {\n              return;\n          }\n      }\n      /* X values must be in the [0, 1] range. */\n      var mX1 = fixRange(args[0]);\n      var mY1 = args[1];\n      var mX2 = fixRange(args[2]);\n      var mY2 = args[3];\n      var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      function newtonRaphsonIterate(aX, aGuessT) {\n          for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) {\n              var currentSlope = getSlope(aGuessT, mX1, mX2);\n              if (currentSlope === 0) {\n                  return aGuessT;\n              }\n              var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n              aGuessT -= currentX / currentSlope;\n          }\n          return aGuessT;\n      }\n      function calcSampleValues() {\n          for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) {\n              mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2);\n          }\n      }\n      function binarySubdivide(aX, aA, aB) {\n          var currentX = void 0,\n              currentT = void 0,\n              i = 0;\n          do {\n              currentT = aA + (aB - aA) / 2;\n              currentX = calcBezier(currentT, mX1, mX2) - aX;\n              if (currentX > 0) {\n                  aB = currentT;\n              } else {\n                  aA = currentT;\n              }\n          } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n          return currentT;\n      }\n      function getTForX(aX) {\n          var lastSample = kSplineTableSize - 1;\n          var intervalStart = 0,\n              currentSample = 1;\n          for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n              intervalStart += kSampleStepSize;\n          }\n          --currentSample;\n          var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),\n              guessForT = intervalStart + dist * kSampleStepSize,\n              initialSlope = getSlope(guessForT, mX1, mX2);\n          if (initialSlope >= NEWTON_MIN_SLOPE) {\n              return newtonRaphsonIterate(aX, guessForT);\n          } else if (initialSlope === 0) {\n              return guessForT;\n          } else {\n              return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n          }\n      }\n      var precomputed = false;\n      function precompute() {\n          precomputed = true;\n          if (mX1 !== mY1 || mX2 !== mY2) {\n              calcSampleValues();\n          }\n      }\n      var str = \"generateBezier(\" + [mX1, mY1, mX2, mY2] + \")\",\n          f = function f(percentComplete, startValue, endValue, property) {\n          if (!precomputed) {\n              precompute();\n          }\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          if (mX1 === mY1 && mX2 === mY2) {\n              return startValue + percentComplete * (endValue - startValue);\n          }\n          return startValue + calcBezier(getTForX(percentComplete), mY1, mY2) * (endValue - startValue);\n      };\n      f.getControlPoints = function () {\n          return [{ x: mX1, y: mY1 }, { x: mX2, y: mY2 }];\n      };\n      f.toString = function () {\n          return str;\n      };\n      return f;\n  }\n  /* Common easings */\n  var easeIn = generateBezier(0.42, 0, 1, 1),\n      easeOut = generateBezier(0, 0, 0.58, 1),\n      easeInOut = generateBezier(0.42, 0, 0.58, 1);\n  registerEasing([\"ease\", generateBezier(0.25, 0.1, 0.25, 1)]);\n  registerEasing([\"easeIn\", easeIn]);\n  registerEasing([\"ease-in\", easeIn]);\n  registerEasing([\"easeOut\", easeOut]);\n  registerEasing([\"ease-out\", easeOut]);\n  registerEasing([\"easeInOut\", easeInOut]);\n  registerEasing([\"ease-in-out\", easeInOut]);\n  registerEasing([\"easeInSine\", generateBezier(0.47, 0, 0.745, 0.715)]);\n  registerEasing([\"easeOutSine\", generateBezier(0.39, 0.575, 0.565, 1)]);\n  registerEasing([\"easeInOutSine\", generateBezier(0.445, 0.05, 0.55, 0.95)]);\n  registerEasing([\"easeInQuad\", generateBezier(0.55, 0.085, 0.68, 0.53)]);\n  registerEasing([\"easeOutQuad\", generateBezier(0.25, 0.46, 0.45, 0.94)]);\n  registerEasing([\"easeInOutQuad\", generateBezier(0.455, 0.03, 0.515, 0.955)]);\n  registerEasing([\"easeInCubic\", generateBezier(0.55, 0.055, 0.675, 0.19)]);\n  registerEasing([\"easeOutCubic\", generateBezier(0.215, 0.61, 0.355, 1)]);\n  registerEasing([\"easeInOutCubic\", generateBezier(0.645, 0.045, 0.355, 1)]);\n  registerEasing([\"easeInQuart\", generateBezier(0.895, 0.03, 0.685, 0.22)]);\n  registerEasing([\"easeOutQuart\", generateBezier(0.165, 0.84, 0.44, 1)]);\n  registerEasing([\"easeInOutQuart\", generateBezier(0.77, 0, 0.175, 1)]);\n  registerEasing([\"easeInQuint\", generateBezier(0.755, 0.05, 0.855, 0.06)]);\n  registerEasing([\"easeOutQuint\", generateBezier(0.23, 1, 0.32, 1)]);\n  registerEasing([\"easeInOutQuint\", generateBezier(0.86, 0, 0.07, 1)]);\n  registerEasing([\"easeInExpo\", generateBezier(0.95, 0.05, 0.795, 0.035)]);\n  registerEasing([\"easeOutExpo\", generateBezier(0.19, 1, 0.22, 1)]);\n  registerEasing([\"easeInOutExpo\", generateBezier(1, 0, 0, 1)]);\n  registerEasing([\"easeInCirc\", generateBezier(0.6, 0.04, 0.98, 0.335)]);\n  registerEasing([\"easeOutCirc\", generateBezier(0.075, 0.82, 0.165, 1)]);\n  registerEasing([\"easeInOutCirc\", generateBezier(0.785, 0.135, 0.15, 0.86)]);\n\n  /* Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */\n  /* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass\n   then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */\n  function springAccelerationForState(state) {\n      return -state.tension * state.x - state.friction * state.v;\n  }\n  function springEvaluateStateWithDerivative(initialState, dt, derivative) {\n      var state = {\n          x: initialState.x + derivative.dx * dt,\n          v: initialState.v + derivative.dv * dt,\n          tension: initialState.tension,\n          friction: initialState.friction\n      };\n      return {\n          dx: state.v,\n          dv: springAccelerationForState(state)\n      };\n  }\n  function springIntegrateState(state, dt) {\n      var a = {\n          dx: state.v,\n          dv: springAccelerationForState(state)\n      },\n          b = springEvaluateStateWithDerivative(state, dt * 0.5, a),\n          c = springEvaluateStateWithDerivative(state, dt * 0.5, b),\n          d = springEvaluateStateWithDerivative(state, dt, c),\n          dxdt = 1 / 6 * (a.dx + 2 * (b.dx + c.dx) + d.dx),\n          dvdt = 1 / 6 * (a.dv + 2 * (b.dv + c.dv) + d.dv);\n      state.x = state.x + dxdt * dt;\n      state.v = state.v + dvdt * dt;\n      return state;\n  }\n  function generateSpringRK4(tension, friction, duration) {\n      var initState = {\n          x: -1,\n          v: 0,\n          tension: parseFloat(tension) || 500,\n          friction: parseFloat(friction) || 20\n      },\n          path = [0],\n          tolerance = 1 / 10000,\n          DT = 16 / 1000,\n          haveDuration = duration != null; // deliberate \"==\", as undefined == null != 0\n      var timeLapsed = 0,\n          dt = void 0,\n          lastState = void 0;\n      /* Calculate the actual time it takes for this animation to complete with the provided conditions. */\n      if (haveDuration) {\n          /* Run the simulation without a duration. */\n          timeLapsed = generateSpringRK4(initState.tension, initState.friction);\n          /* Compute the adjusted time delta. */\n          dt = timeLapsed / duration * DT;\n      } else {\n          dt = DT;\n      }\n      while (true) {\n          /* Next/step function .*/\n          lastState = springIntegrateState(lastState || initState, dt);\n          /* Store the position. */\n          path.push(1 + lastState.x);\n          timeLapsed += 16;\n          /* If the change threshold is reached, break. */\n          if (!(Math.abs(lastState.x) > tolerance && Math.abs(lastState.v) > tolerance)) {\n              break;\n          }\n      }\n      /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the\n       computed path and returns a snapshot of the position according to a given percentComplete. */\n      return !haveDuration ? timeLapsed : function (percentComplete, startValue, endValue) {\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          return startValue + path[Math.floor(percentComplete * (path.length - 1))] * (endValue - startValue);\n      };\n  }\n\n  // Constants\n  var cache = {};\n  function generateStep(steps) {\n      var fn = cache[steps];\n      if (fn) {\n          return fn;\n      }\n      return cache[steps] = function (percentComplete, startValue, endValue) {\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          return startValue + Math.round(percentComplete * steps) * (1 / steps) * (endValue - startValue);\n      };\n  }\n\n  // Project\n  /**\n   * Parse a duration value and return an ms number. Optionally return a\n   * default value if the number is not valid.\n   */\n  function parseDuration(duration, def) {\n      if (isNumber(duration)) {\n          return duration;\n      }\n      if (isString(duration)) {\n          return Duration[duration.toLowerCase()] || parseFloat(duration.replace(\"ms\", \"\").replace(\"s\", \"000\"));\n      }\n      return def == null ? undefined : parseDuration(def);\n  }\n  /**\n   * Validate a <code>cache</code> option.\n   */\n  function validateCache(value) {\n      if (isBoolean(value)) {\n          return value;\n      }\n      if (value != null) {\n          console.warn(\"VelocityJS: Trying to set 'cache' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>begin</code> option.\n   */\n  function validateBegin(value) {\n      if (isFunction(value)) {\n          return value;\n      }\n      if (value != null) {\n          console.warn(\"VelocityJS: Trying to set 'begin' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>complete</code> option.\n   */\n  function validateComplete(value, noError) {\n      if (isFunction(value)) {\n          return value;\n      }\n      if (value != null && !noError) {\n          console.warn(\"VelocityJS: Trying to set 'complete' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>delay</code> option.\n   */\n  function validateDelay(value) {\n      var parsed = parseDuration(value);\n      if (!isNaN(parsed)) {\n          return parsed;\n      }\n      if (value != null) {\n          console.error(\"VelocityJS: Trying to set 'delay' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>duration</code> option.\n   */\n  function validateDuration(value, noError) {\n      var parsed = parseDuration(value);\n      if (!isNaN(parsed) && parsed >= 0) {\n          return parsed;\n      }\n      if (value != null && !noError) {\n          console.error(\"VelocityJS: Trying to set 'duration' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>easing</code> option.\n   */\n  function validateEasing(value, duration, noError) {\n      if (isString(value)) {\n          // Named easing\n          return Easings[value];\n      }\n      if (isFunction(value)) {\n          return value;\n      }\n      // TODO: We should only do these if the correct function exists - don't force loading.\n      if (Array.isArray(value)) {\n          if (value.length === 1) {\n              // Steps\n              return generateStep(value[0]);\n          }\n          if (value.length === 2) {\n              // springRK4 must be passed the animation's duration.\n              // Note: If the springRK4 array contains non-numbers,\n              // generateSpringRK4() returns an easing function generated with\n              // default tension and friction values.\n              return generateSpringRK4(value[0], value[1], duration);\n          }\n          if (value.length === 4) {\n              // Note: If the bezier array contains non-numbers, generateBezier()\n              // returns undefined.\n              return generateBezier.apply(null, value) || false;\n          }\n      }\n      if (value != null && !noError) {\n          console.error(\"VelocityJS: Trying to set 'easing' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>fpsLimit</code> option.\n   */\n  function validateFpsLimit(value) {\n      if (value === false) {\n          return 0;\n      } else {\n          var parsed = parseInt(value, 10);\n          if (!isNaN(parsed) && parsed >= 0) {\n              return Math.min(parsed, 60);\n          }\n      }\n      if (value != null) {\n          console.warn(\"VelocityJS: Trying to set 'fpsLimit' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>loop</code> option.\n   */\n  function validateLoop(value) {\n      switch (value) {\n          case false:\n              return 0;\n          case true:\n              return true;\n          default:\n              var parsed = parseInt(value, 10);\n              if (!isNaN(parsed) && parsed >= 0) {\n                  return parsed;\n              }\n              break;\n      }\n      if (value != null) {\n          console.warn(\"VelocityJS: Trying to set 'loop' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>progress</code> option.\n   */\n  function validateProgress(value) {\n      if (isFunction(value)) {\n          return value;\n      }\n      if (value != null) {\n          console.warn(\"VelocityJS: Trying to set 'progress' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>promise</code> option.\n   */\n  function validatePromise(value) {\n      if (isBoolean(value)) {\n          return value;\n      }\n      if (value != null) {\n          console.warn(\"VelocityJS: Trying to set 'promise' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>promiseRejectEmpty</code> option.\n   */\n  function validatePromiseRejectEmpty(value) {\n      if (isBoolean(value)) {\n          return value;\n      }\n      if (value != null) {\n          console.warn(\"VelocityJS: Trying to set 'promiseRejectEmpty' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>queue</code> option.\n   */\n  function validateQueue(value, noError) {\n      if (value === false || isString(value)) {\n          return value;\n      }\n      if (value != null && !noError) {\n          console.warn(\"VelocityJS: Trying to set 'queue' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>repeat</code> option.\n   */\n  function validateRepeat(value) {\n      switch (value) {\n          case false:\n              return 0;\n          case true:\n              return true;\n          default:\n              var parsed = parseInt(value, 10);\n              if (!isNaN(parsed) && parsed >= 0) {\n                  return parsed;\n              }\n              break;\n      }\n      if (value != null) {\n          console.warn(\"VelocityJS: Trying to set 'repeat' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>speed</code> option.\n   */\n  function validateSpeed(value) {\n      if (isNumber(value)) {\n          return value;\n      }\n      if (value != null) {\n          console.error(\"VelocityJS: Trying to set 'speed' to an invalid value:\", value);\n      }\n  }\n  /**\n   * Validate a <code>sync</code> option.\n   */\n  function validateSync(value) {\n      if (isBoolean(value)) {\n          return value;\n      }\n      if (value != null) {\n          console.error(\"VelocityJS: Trying to set 'sync' to an invalid value:\", value);\n      }\n  }\n\n  // Project\n  // NOTE: Add the variable here, then add the default state in \"reset\" below.\n  var cache$1 = void 0,\n      begin = void 0,\n      complete = void 0,\n      delay = void 0,\n      duration = void 0,\n      easing = void 0,\n      fpsLimit = void 0,\n      loop = void 0,\n      mobileHA = void 0,\n      minFrameTime = void 0,\n      promise = void 0,\n      promiseRejectEmpty = void 0,\n      queue = void 0,\n      repeat = void 0,\n      speed = void 0,\n      sync = void 0;\n  var defaults$1 = function () {\n      function defaults$$1() {\n          classCallCheck(this, defaults$$1);\n      }\n\n      createClass(defaults$$1, null, [{\n          key: \"reset\",\n          value: function reset() {\n              cache$1 = DEFAULT_CACHE;\n              begin = undefined;\n              complete = undefined;\n              delay = DEFAULT_DELAY;\n              duration = DEFAULT_DURATION;\n              easing = validateEasing(DEFAULT_EASING, DEFAULT_DURATION);\n              fpsLimit = DEFAULT_FPSLIMIT;\n              loop = DEFAULT_LOOP;\n              minFrameTime = FUZZY_MS_PER_SECOND / DEFAULT_FPSLIMIT;\n              promise = DEFAULT_PROMISE;\n              promiseRejectEmpty = DEFAULT_PROMISE_REJECT_EMPTY;\n              queue = DEFAULT_QUEUE;\n              repeat = DEFAULT_REPEAT;\n              speed = DEFAULT_SPEED;\n              sync = DEFAULT_SYNC;\n          }\n      }, {\n          key: \"cache\",\n          get: function get$$1() {\n              return cache$1;\n          },\n          set: function set$$1(value) {\n              value = validateCache(value);\n              if (value !== undefined) {\n                  cache$1 = value;\n              }\n          }\n      }, {\n          key: \"begin\",\n          get: function get$$1() {\n              return begin;\n          },\n          set: function set$$1(value) {\n              value = validateBegin(value);\n              if (value !== undefined) {\n                  begin = value;\n              }\n          }\n      }, {\n          key: \"complete\",\n          get: function get$$1() {\n              return complete;\n          },\n          set: function set$$1(value) {\n              value = validateComplete(value);\n              if (value !== undefined) {\n                  complete = value;\n              }\n          }\n      }, {\n          key: \"delay\",\n          get: function get$$1() {\n              return delay;\n          },\n          set: function set$$1(value) {\n              value = validateDelay(value);\n              if (value !== undefined) {\n                  delay = value;\n              }\n          }\n      }, {\n          key: \"duration\",\n          get: function get$$1() {\n              return duration;\n          },\n          set: function set$$1(value) {\n              value = validateDuration(value);\n              if (value !== undefined) {\n                  duration = value;\n              }\n          }\n      }, {\n          key: \"easing\",\n          get: function get$$1() {\n              return easing;\n          },\n          set: function set$$1(value) {\n              value = validateEasing(value, duration);\n              if (value !== undefined) {\n                  easing = value;\n              }\n          }\n      }, {\n          key: \"fpsLimit\",\n          get: function get$$1() {\n              return fpsLimit;\n          },\n          set: function set$$1(value) {\n              value = validateFpsLimit(value);\n              if (value !== undefined) {\n                  fpsLimit = value;\n                  minFrameTime = FUZZY_MS_PER_SECOND / value;\n              }\n          }\n      }, {\n          key: \"loop\",\n          get: function get$$1() {\n              return loop;\n          },\n          set: function set$$1(value) {\n              value = validateLoop(value);\n              if (value !== undefined) {\n                  loop = value;\n              }\n          }\n      }, {\n          key: \"mobileHA\",\n          get: function get$$1() {\n              return mobileHA;\n          },\n          set: function set$$1(value) {\n              if (isBoolean(value)) {\n                  mobileHA = value;\n              }\n          }\n      }, {\n          key: \"minFrameTime\",\n          get: function get$$1() {\n              return minFrameTime;\n          }\n      }, {\n          key: \"promise\",\n          get: function get$$1() {\n              return promise;\n          },\n          set: function set$$1(value) {\n              value = validatePromise(value);\n              if (value !== undefined) {\n                  promise = value;\n              }\n          }\n      }, {\n          key: \"promiseRejectEmpty\",\n          get: function get$$1() {\n              return promiseRejectEmpty;\n          },\n          set: function set$$1(value) {\n              value = validatePromiseRejectEmpty(value);\n              if (value !== undefined) {\n                  promiseRejectEmpty = value;\n              }\n          }\n      }, {\n          key: \"queue\",\n          get: function get$$1() {\n              return queue;\n          },\n          set: function set$$1(value) {\n              value = validateQueue(value);\n              if (value !== undefined) {\n                  queue = value;\n              }\n          }\n      }, {\n          key: \"repeat\",\n          get: function get$$1() {\n              return repeat;\n          },\n          set: function set$$1(value) {\n              value = validateRepeat(value);\n              if (value !== undefined) {\n                  repeat = value;\n              }\n          }\n      }, {\n          key: \"repeatAgain\",\n          get: function get$$1() {\n              return repeat;\n          }\n      }, {\n          key: \"speed\",\n          get: function get$$1() {\n              return speed;\n          },\n          set: function set$$1(value) {\n              value = validateSpeed(value);\n              if (value !== undefined) {\n                  speed = value;\n              }\n          }\n      }, {\n          key: \"sync\",\n          get: function get$$1() {\n              return sync;\n          },\n          set: function set$$1(value) {\n              value = validateSync(value);\n              if (value !== undefined) {\n                  sync = value;\n              }\n          }\n      }]);\n      return defaults$$1;\n  }();\n  Object.freeze(defaults$1);\n  // Reset to our default values, currently everything is undefined.\n  defaults$1.reset();\n\n  /**\n   * The highest type index for finding the best normalization for a property.\n   */\n  /**\n   * Unlike \"actions\", normalizations can always be replaced by users.\n   */\n  var Normalizations = [];\n  /**\n   * Store a cross-reference to units to be added to specific normalization\n   * functions if the user supplies a unit-less number.\n   *\n   * This is pretty much confined to adding \"px\" to several css properties.\n   */\n  var NormalizationUnits = {};\n  /**\n   * Any normalisations that should never be cached are listed here.\n   * Faster than an array - https://jsperf.com/array-includes-and-find-methods-vs-set-has\n   */\n  var NoCacheNormalizations = new Set();\n  /**\n   * An array of classes used for the per-class normalizations. This\n   * translates into a bitwise enum for quick cross-reference, and so that\n   * the element doesn't need multiple <code>instanceof</code> calls every\n   * frame.\n   */\n  var constructors = [];\n  /**\n   * A cache of the various constructors we've found and mapping to their real\n   * name - saves expensive lookups.\n   */\n  var constructorCache = new Map();\n\n  // Project\n  // Constants\n  var dataName = \"velocityData\";\n  /**\n   * Get (and create) the internal data store for an element.\n   */\n  function Data(element) {\n      // Use a string member so Uglify doesn't mangle it.\n      var data = element[dataName];\n      if (data) {\n          return data;\n      }\n      var window = element.ownerDocument.defaultView;\n      var types = 0;\n      for (var index = 0; index < constructors.length; index++) {\n          var _constructor = constructors[index];\n          if (isString(_constructor)) {\n              if (element instanceof window[_constructor]) {\n                  types |= 1 << index; // tslint:disable-line:no-bitwise\n              }\n          } else if (element instanceof _constructor) {\n              types |= 1 << index; // tslint:disable-line:no-bitwise\n          }\n      }\n      // Use an intermediate object so it errors on incorrect data.\n      var newData = {\n          types: types,\n          count: 0,\n          computedStyle: null,\n          cache: {},\n          queueList: {},\n          lastAnimationList: {},\n          lastFinishList: {},\n          window: window\n      };\n      Object.defineProperty(element, dataName, {\n          value: newData\n      });\n      return newData;\n  }\n\n  // Constants\n  var isClient = window && window === window.window,\n      windowScrollAnchor = isClient && window.pageYOffset !== undefined;\n  var State = {\n      isClient: isClient,\n      isMobile: isClient && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n      isGingerbread: isClient && /Android 2\\.3\\.[3-7]/i.test(navigator.userAgent),\n      prefixElement: isClient && document.createElement(\"div\"),\n      windowScrollAnchor: windowScrollAnchor,\n      scrollAnchor: windowScrollAnchor ? window : !isClient || document.documentElement || document.body.parentNode || document.body,\n      scrollPropertyLeft: windowScrollAnchor ? \"pageXOffset\" : \"scrollLeft\",\n      scrollPropertyTop: windowScrollAnchor ? \"pageYOffset\" : \"scrollTop\",\n      className: CLASSNAME,\n      isTicking: false,\n      first: undefined,\n      last: undefined,\n      firstNew: undefined\n  };\n\n  // Project\n  /**\n   * Simple queue management. Un-named queue is directly within the element data,\n   * named queue is within an object within it.\n   */\n  function animate(animation) {\n      var prev = State.last;\n      animation._prev = prev;\n      animation._next = undefined;\n      if (prev) {\n          prev._next = animation;\n      } else {\n          State.first = animation;\n      }\n      State.last = animation;\n      if (!State.firstNew) {\n          State.firstNew = animation;\n      }\n      var element = animation.element,\n          data = Data(element);\n      if (!data.count++) {\n          ////////////////////////\n          // Feature: Classname //\n          ////////////////////////\n          addClass(element, State.className);\n      }\n  }\n  /**\n   * Add an item to an animation queue.\n   */\n  function queue$1(element, animation, queueName) {\n      var data = Data(element);\n      if (queueName !== false) {\n          // Store the last animation added so we can use it for the\n          // beginning of the next one.\n          data.lastAnimationList[queueName] = animation;\n      }\n      if (queueName === false) {\n          animate(animation);\n      } else {\n          if (!isString(queueName)) {\n              queueName = \"\";\n          }\n          var last = data.queueList[queueName];\n          if (!last) {\n              if (last === null) {\n                  data.queueList[queueName] = animation;\n              } else {\n                  data.queueList[queueName] = null;\n                  animate(animation);\n              }\n          } else {\n              while (last._next) {\n                  last = last._next;\n              }\n              last._next = animation;\n              animation._prev = last;\n          }\n      }\n  }\n  /**\n   * Start the next animation on this element's queue (named or default).\n   *\n   * @returns the next animation that is starting.\n   */\n  function dequeue(element, queueName, skip) {\n      if (queueName !== false) {\n          if (!isString(queueName)) {\n              queueName = \"\";\n          }\n          var data = Data(element),\n              animation = data.queueList[queueName];\n          if (animation) {\n              data.queueList[queueName] = animation._next || null;\n              if (!skip) {\n                  animate(animation);\n              }\n          } else if (animation === null) {\n              delete data.queueList[queueName];\n          }\n          return animation;\n      }\n  }\n  /**\n   * Remove an animation from the active animation list. If it has a queue set\n   * then remember it as the last animation for that queue, and free the one\n   * that was previously there. If the animation list is completely empty then\n   * mark us as finished.\n   */\n  function freeAnimationCall(animation) {\n      var next = animation._next,\n          prev = animation._prev,\n          queueName = animation.queue == null ? animation.options.queue : animation.queue;\n      if (State.firstNew === animation) {\n          State.firstNew = next;\n      }\n      if (State.first === animation) {\n          State.first = next;\n      } else if (prev) {\n          prev._next = next;\n      }\n      if (State.last === animation) {\n          State.last = prev;\n      } else if (next) {\n          next._prev = prev;\n      }\n      if (queueName) {\n          var data = Data(animation.element);\n          if (data) {\n              animation._next = animation._prev = undefined;\n          }\n      }\n  }\n\n  var SequencesObject = {};\n\n  // Project\n  /**\n   * Call the complete method of an animation in a separate function so it can\n   * benefit from JIT compiling while still having a try/catch block.\n   */\n  function callComplete(activeCall) {\n      var callback = activeCall.complete || activeCall.options.complete;\n      if (callback) {\n          try {\n              var elements = activeCall.elements;\n              callback.call(elements, elements, activeCall);\n          } catch (error) {\n              setTimeout(function () {\n                  throw error;\n              }, 1);\n          }\n      }\n  }\n  /**\n   * Complete an animation. This might involve restarting (for loop or repeat\n   * options). Once it is finished we also check for any callbacks or Promises\n   * that need updating.\n   */\n  function completeCall(activeCall) {\n      // TODO: Check if it's not been completed already\n      var options = activeCall.options,\n          queue = getValue(activeCall.queue, options.queue),\n          isLoop = getValue(activeCall.loop, options.loop, defaults$1.loop),\n          isRepeat = getValue(activeCall.repeat, options.repeat, defaults$1.repeat),\n          isStopped = activeCall._flags & 8 /* STOPPED */; // tslint:disable-line:no-bitwise\n      if (!isStopped && (isLoop || isRepeat)) {\n          ////////////////////\n          // Option: Loop   //\n          // Option: Repeat //\n          ////////////////////\n          if (isRepeat && isRepeat !== true) {\n              activeCall.repeat = isRepeat - 1;\n          } else if (isLoop && isLoop !== true) {\n              activeCall.loop = isLoop - 1;\n              activeCall.repeat = getValue(activeCall.repeatAgain, options.repeatAgain, defaults$1.repeatAgain);\n          }\n          if (isLoop) {\n              activeCall._flags ^= 64 /* REVERSE */; // tslint:disable-line:no-bitwise\n          }\n          if (queue !== false) {\n              // Can't be called when stopped so no need for an extra check.\n              Data(activeCall.element).lastFinishList[queue] = activeCall.timeStart + getValue(activeCall.duration, options.duration, defaults$1.duration);\n          }\n          activeCall.timeStart = activeCall.ellapsedTime = activeCall.percentComplete = 0;\n          activeCall._flags &= ~4 /* STARTED */; // tslint:disable-line:no-bitwise\n      } else {\n          var element = activeCall.element,\n              data = Data(element);\n          if (! --data.count && !isStopped) {\n              ////////////////////////\n              // Feature: Classname //\n              ////////////////////////\n              removeClass(element, State.className);\n          }\n          //////////////////////\n          // Option: Complete //\n          //////////////////////\n          // If this is the last animation in this list then we can check for\n          // and complete calls or Promises.\n          // TODO: When deleting an element we need to adjust these values.\n          if (options && ++options._completed === options._total) {\n              if (!isStopped && options.complete) {\n                  // We don't call the complete if the animation is stopped,\n                  // and we clear the key to prevent it being called again.\n                  callComplete(activeCall);\n                  options.complete = null;\n              }\n              var resolver = options._resolver;\n              if (resolver) {\n                  // Fulfil the Promise\n                  resolver(activeCall.elements);\n                  delete options._resolver;\n              }\n          }\n          ///////////////////\n          // Option: Queue //\n          ///////////////////\n          if (queue !== false) {\n              // We only do clever things with queues...\n              if (!isStopped) {\n                  // If we're not stopping an animation, we need to remember\n                  // what time it finished so that the next animation in\n                  // sequence gets the correct start time.\n                  data.lastFinishList[queue] = activeCall.timeStart + getValue(activeCall.duration, options.duration, defaults$1.duration);\n              }\n              // Start the next animation in sequence, or delete the queue if\n              // this was the last one.\n              dequeue(element, queue);\n          }\n          // Cleanup any pointers, and remember the last animation etc.\n          freeAnimationCall(activeCall);\n      }\n  }\n\n  // Project\n  /**\n   * Used to register a normalization. This should never be called by users\n   * directly, instead it should be called via an action:<br/>\n   * <code>Velocity(\"registerNormalization\", \"Element\", \"name\", VelocityNormalizationsFn[, false]);</code>\n   *\n   * The second argument is the class of the animatable object. If this is passed\n   * as a class name (ie, `\"Element\"` -> `window[\"Element\"]`) then this will work\n   * cross-iframe. If passed as an actual class (ie `Element`) then it will\n   * attempt to find the class on the window and use that name instead. If it\n   * can't find it then it will use the class passed, which allows for custom\n   * animation targets, but will not work cross-iframe boundary.\n   *\n   * The fourth argument can be an explicit <code>false</code>, which prevents\n   * the property from being cached. Please note that this can be dangerous\n   * for performance!\n   */\n  function registerNormalization(args) {\n      var constructor = args[0],\n          name = args[1],\n          callback = args[2];\n      if (isString(constructor) && !(window[constructor] instanceof Object) || !isString(constructor) && !(constructor instanceof Object)) {\n          console.warn(\"VelocityJS: Trying to set 'registerNormalization' constructor to an invalid value:\", constructor);\n      } else if (!isString(name)) {\n          console.warn(\"VelocityJS: Trying to set 'registerNormalization' name to an invalid value:\", name);\n      } else if (!isFunction(callback)) {\n          console.warn(\"VelocityJS: Trying to set 'registerNormalization' callback to an invalid value:\", name, callback);\n      } else {\n          var index = constructors.indexOf(constructor),\n              nextArg = 3;\n          if (index < 0 && !isString(constructor)) {\n              if (constructorCache.has(constructor)) {\n                  index = constructors.indexOf(constructorCache.get(constructor));\n              } else {\n                  for (var property in window) {\n                      if (window[property] === constructor) {\n                          index = constructors.indexOf(property);\n                          if (index < 0) {\n                              index = constructors.push(property) - 1;\n                              Normalizations[index] = {};\n                              constructorCache.set(constructor, property);\n                          }\n                          break;\n                      }\n                  }\n              }\n          }\n          if (index < 0) {\n              index = constructors.push(constructor) - 1;\n              Normalizations[index] = {};\n          }\n          Normalizations[index][name] = callback;\n          if (isString(args[nextArg])) {\n              var unit = args[nextArg++];\n              var units = NormalizationUnits[unit];\n              if (!units) {\n                  units = NormalizationUnits[unit] = [];\n              }\n              units.push(callback);\n          }\n          if (args[nextArg] === false) {\n              NoCacheNormalizations.add(name);\n          }\n      }\n  }\n  /**\n   * Used to check if a normalisation exists on a specific class.\n   */\n  function hasNormalization(args) {\n      var constructor = args[0],\n          name = args[1];\n      var index = constructors.indexOf(constructor);\n      if (index < 0 && !isString(constructor)) {\n          if (constructorCache.has(constructor)) {\n              index = constructors.indexOf(constructorCache.get(constructor));\n          } else {\n              for (var property in window) {\n                  if (window[property] === constructor) {\n                      index = constructors.indexOf(property);\n                      break;\n                  }\n              }\n          }\n      }\n      return index >= 0 && Normalizations[index].hasOwnProperty(name);\n  }\n  /**\n   * Get the unit to add to a unitless number based on the normalization used.\n   */\n  function getNormalizationUnit(fn) {\n      for (var unit in NormalizationUnits) {\n          if (NormalizationUnits[unit].includes(fn)) {\n              return unit;\n          }\n      }\n      return \"\";\n  }\n  /**\n   * Get the normalization for an element and propertyName combination. This\n   * value should be cached at asking time, as it may change if the user adds\n   * more normalizations.\n   */\n  function getNormalization(element, propertyName) {\n      var data = Data(element);\n      var fn = void 0;\n      for (var index = constructors.length - 1, types = data.types; !fn && index >= 0; index--) {\n          if (types & 1 << index) {\n              // tslint:disable-line:no-bitwise\n              fn = Normalizations[index][propertyName];\n          }\n      }\n      return fn;\n  }\n  registerAction([\"registerNormalization\", registerNormalization]);\n  registerAction([\"hasNormalization\", hasNormalization]);\n\n  // Project\n  /**\n   * The singular setPropertyValue, which routes the logic for all\n   * normalizations.\n   */\n  function setPropertyValue(element, propertyName, propertyValue, fn) {\n      var noCache = NoCacheNormalizations.has(propertyName),\n          data = !noCache && Data(element);\n      if (noCache || data && data.cache[propertyName] !== propertyValue) {\n          // By setting it to undefined we force a true \"get\" later\n          if (!noCache) {\n              data.cache[propertyName] = propertyValue || undefined;\n          }\n          fn = fn || getNormalization(element, propertyName);\n          if (fn) {\n              fn(element, propertyValue);\n          }\n          if (Velocity$$1.debug >= 2) {\n              console.info(\"Set \\\"\" + propertyName + \"\\\": \\\"\" + propertyValue + \"\\\"\", element);\n          }\n      }\n  }\n\n  /**\n   * Remove nested `calc(0px + *)` or `calc(* + (0px + *))` correctly.\n   */\n  function removeNestedCalc(value) {\n      if (value.indexOf(\"calc(\") >= 0) {\n          var tokens = value.split(/([\\(\\)])/);\n          var depth = 0;\n          for (var i = 0; i < tokens.length; i++) {\n              var token = tokens[i];\n              switch (token) {\n                  case \"(\":\n                      depth++;\n                      break;\n                  case \")\":\n                      depth--;\n                      break;\n                  default:\n                      if (depth && token[0] === \"0\") {\n                          tokens[i] = token.replace(/^0[a-z%]+ \\+ /, \"\");\n                      }\n                      break;\n              }\n          }\n          return tokens.join(\"\").replace(/(?:calc)?\\(([0-9\\.]+[a-z%]+)\\)/g, \"$1\");\n      }\n      return value;\n  }\n\n  /**\n   * Cache every camelCase match to avoid repeating lookups.\n   */\n  var cache$2 = {};\n  /**\n   * Camelcase a property name into its JavaScript notation (e.g.\n   * \"background-color\" ==> \"backgroundColor\"). Camelcasing is used to\n   * normalize property names between and across calls.\n   */\n  function camelCase(property) {\n    var fixed = cache$2[property];\n    if (fixed) {\n      return fixed;\n    }\n    return cache$2[property] = property.replace(/-([a-z])/g, function ($, letter) {\n      return letter.toUpperCase();\n    });\n  }\n\n  // Constants\n  var rxColor6 = /#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})/gi,\n      rxColor3 = /#([a-f\\d])([a-f\\d])([a-f\\d])/gi,\n      rxColorName = /(rgba?\\(\\s*)?(\\b[a-z]+\\b)/g,\n      rxRGB = /rgb(a?)\\(([^\\)]+)\\)/gi,\n      rxSpaces = /\\s+/g;\n  /**\n   * This is the list of color names -> rgb values. The object is in here so\n   * that the actual name conversion can be in a separate file and not\n   * included for custom builds.\n   */\n  var ColorNames = {};\n  /**\n   * Convert a hex list to an rgba value. Designed to be used in replace.\n   */\n  function makeRGBA(ignore, r, g, b) {\n      return \"rgba(\" + parseInt(r, 16) + \",\" + parseInt(g, 16) + \",\" + parseInt(b, 16) + \",1)\";\n  }\n  /**\n   * Replace any css colour name with its rgba() value. It is possible to use\n   * the name within an \"rgba(blue, 0.4)\" string this way.\n   */\n  function fixColors(str) {\n      return str.replace(rxColor6, makeRGBA).replace(rxColor3, function ($0, r, g, b) {\n          return makeRGBA($0, r + r, g + g, b + b);\n      }).replace(rxColorName, function ($0, $1, $2) {\n          if (ColorNames[$2]) {\n              return ($1 ? $1 : \"rgba(\") + ColorNames[$2] + ($1 ? \"\" : \",1)\");\n          }\n          return $0;\n      }).replace(rxRGB, function ($0, $1, $2) {\n          return \"rgba(\" + ($2.replace(rxSpaces, \"\") + ($1 ? \"\" : \",1\")) + \")\";\n      });\n  }\n\n  // Project\n  /**\n   * Figure out the dimensions for this width / height based on the\n   * potential borders and whether we care about them.\n   */\n  function augmentDimension(element, name, wantInner) {\n      var isBorderBox = getPropertyValue(element, \"boxSizing\").toString().toLowerCase() === \"border-box\";\n      if (isBorderBox === wantInner) {\n          // in box-sizing mode, the CSS width / height accessors already\n          // give the outerWidth / outerHeight.\n          var sides = name === \"width\" ? [\"Left\", \"Right\"] : [\"Top\", \"Bottom\"],\n              fields = [\"padding\" + sides[0], \"padding\" + sides[1], \"border\" + sides[0] + \"Width\", \"border\" + sides[1] + \"Width\"];\n          var augment = 0;\n          var _iteratorNormalCompletion = true;\n          var _didIteratorError = false;\n          var _iteratorError = undefined;\n\n          try {\n              for (var _iterator = fields[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                  var field = _step.value;\n\n                  var value = parseFloat(getPropertyValue(element, field));\n                  if (!isNaN(value)) {\n                      augment += value;\n                  }\n              }\n          } catch (err) {\n              _didIteratorError = true;\n              _iteratorError = err;\n          } finally {\n              try {\n                  if (!_iteratorNormalCompletion && _iterator.return) {\n                      _iterator.return();\n                  }\n              } finally {\n                  if (_didIteratorError) {\n                      throw _iteratorError;\n                  }\n              }\n          }\n\n          return wantInner ? -augment : augment;\n      }\n      return 0;\n  }\n\n  // Project\n  /**\n   * Get the width or height of an element, pulled out as it can be used when the\n   * in two locations so don't want to repeat it.\n   */\n  function getWidthHeight(element, property) {\n      return element.getBoundingClientRect()[property] + augmentDimension(element, property, true) + \"px\";\n  }\n  // TODO: This is still a complete mess\n  function computePropertyValue(element, property) {\n      var data = Data(element),\n\n      // If computedStyle is cached, use it. If not then get the correct one\n      // for the element to support cross-iframe boundaries.\n      computedStyle = data.computedStyle ? data.computedStyle : data.window.getComputedStyle(element, null);\n      var computedValue = 0;\n      if (!data.computedStyle) {\n          data.computedStyle = computedStyle;\n      }\n      if (computedStyle[\"display\"] === \"none\") {\n          switch (property) {\n              case \"width\":\n              case \"height\":\n                  // Browsers do not return height and width values for elements\n                  // that are set to display:\"none\". Thus, we temporarily toggle\n                  // display to the element type's default value.\n                  setPropertyValue(element, \"display\", \"auto\");\n                  computedValue = getWidthHeight(element, property);\n                  setPropertyValue(element, \"display\", \"none\");\n                  return String(computedValue);\n          }\n      }\n      /* IE and Firefox do not return a value for the generic borderColor -- they only return individual values for each border side's color.\n       Also, in all browsers, when border colors aren't all the same, a compound value is returned that Velocity isn't setup to parse.\n       So, as a polyfill for querying individual border side colors, we just return the top border's color and animate all borders from that value. */\n      /* TODO: There is a borderColor normalisation in legacy/ - figure out where this is needed... */\n      computedValue = computedStyle[property];\n      /* Fall back to the property's style value (if defined) when computedValue returns nothing,\n       which can happen when the element hasn't been painted. */\n      if (!computedValue) {\n          computedValue = element.style[property];\n      }\n      /* For top, right, bottom, and left (TRBL) values that are set to \"auto\" on elements of \"fixed\" or \"absolute\" position,\n       defer to jQuery for converting \"auto\" to a numeric value. (For elements with a \"static\" or \"relative\" position, \"auto\" has the same\n       effect as being set to 0, so no conversion is necessary.) */\n      /* An example of why numeric conversion is necessary: When an element with \"position:absolute\" has an untouched \"left\"\n       property, which reverts to \"auto\", left's value is 0 relative to its parent element, but is often non-zero relative\n       to its *containing* (not parent) element, which is the nearest \"position:relative\" ancestor or the viewport (and always the viewport in the case of \"position:fixed\"). */\n      if (computedValue === \"auto\") {\n          switch (property) {\n              case \"width\":\n              case \"height\":\n                  computedValue = getWidthHeight(element, property);\n                  break;\n              case \"top\":\n              case \"left\":\n\n              case \"right\":\n              case \"bottom\":\n                  var position = getPropertyValue(element, \"position\");\n                  if (position === \"fixed\" || position === \"absolute\") {\n                      // Note: this has no pixel unit on its returned values,\n                      // we re-add it here to conform with\n                      // computePropertyValue's behavior.\n                      computedValue = element.getBoundingClientRect[property] + \"px\";\n                      break;\n                  }\n              // Deliberate fallthrough!\n              default:\n                  computedValue = \"0px\";\n                  break;\n          }\n      }\n      return computedValue ? String(computedValue) : \"\";\n  }\n  /**\n   * Get a property value. This will grab via the cache if it exists, then\n   * via any normalisations.\n   */\n  function getPropertyValue(element, propertyName, fn, skipCache) {\n      var data = Data(element);\n      var propertyValue = void 0;\n      if (NoCacheNormalizations.has(propertyName)) {\n          skipCache = true;\n      }\n      if (!skipCache && data && data.cache[propertyName] != null) {\n          propertyValue = data.cache[propertyName];\n      } else {\n          fn = fn || getNormalization(element, propertyName);\n          if (fn) {\n              propertyValue = fn(element);\n              if (data) {\n                  data.cache[propertyName] = propertyValue;\n              }\n          }\n      }\n      if (Velocity$$1.debug >= 2) {\n          console.info(\"Get \\\"\" + propertyName + \"\\\": \\\"\" + propertyValue + \"\\\"\", element);\n      }\n      return propertyValue;\n  }\n\n  // Project\n  // Constants\n  var rxHex = /^#([A-f\\d]{3}){1,2}$/i,\n      commands = {\n      function: function _function(value, element, elements, elementArrayIndex, propertyName, tween) {\n          return value.call(element, elementArrayIndex, elements.length, propertyName);\n      },\n      number: function number(value, element, elements, elementArrayIndex, propertyName, tween) {\n          return String(value) + getNormalizationUnit(tween.fn);\n      },\n      string: function string(value, element, elements, elementArrayIndex, propertyName, tween) {\n          return fixColors(value);\n      },\n      undefined: function undefined(value, element, elements, elementArrayIndex, propertyName, tween) {\n          return fixColors(getPropertyValue(element, propertyName, tween.fn) || \"\");\n      }\n  };\n  /**\n   * Expand a VelocityProperty argument into a valid sparse Tween array. This\n   * pre-allocates the array as it is then the correct size and slightly\n   * faster to access.\n   */\n  function expandProperties(animation, properties) {\n      var tweens = animation.tweens = Object.create(null),\n          elements = animation.elements,\n          element = animation.element,\n          elementArrayIndex = elements.indexOf(element),\n          data = Data(element),\n          queue = getValue(animation.queue, animation.options.queue),\n          duration = getValue(animation.options.duration, defaults$1.duration);\n      for (var property in properties) {\n          if (properties.hasOwnProperty(property)) {\n              var propertyName = camelCase(property),\n                  fn = getNormalization(element, propertyName);\n              var valueData = properties[property];\n              if (!fn && propertyName !== \"tween\") {\n                  if (Velocity$$1.debug) {\n                      console.log(\"Skipping \\\"\" + property + \"\\\" due to a lack of browser support.\");\n                  }\n                  continue;\n              }\n              if (valueData == null) {\n                  if (Velocity$$1.debug) {\n                      console.log(\"Skipping \\\"\" + property + \"\\\" due to no value supplied.\");\n                  }\n                  continue;\n              }\n              var tween = tweens[propertyName] = {};\n              var endValue = void 0,\n                  startValue = void 0;\n              tween.fn = fn;\n              if (isFunction(valueData)) {\n                  // If we have a function as the main argument then resolve\n                  // it first, in case it returns an array that needs to be\n                  // split.\n                  valueData = valueData.call(element, elementArrayIndex, elements.length, elements);\n              }\n              if (Array.isArray(valueData)) {\n                  // valueData is an array in the form of\n                  // [ endValue, [, easing] [, startValue] ]\n                  var arr1 = valueData[1],\n                      arr2 = valueData[2];\n                  endValue = valueData[0];\n                  if (isString(arr1) && (/^[\\d-]/.test(arr1) || rxHex.test(arr1)) || isFunction(arr1) || isNumber(arr1)) {\n                      startValue = arr1;\n                  } else if (isString(arr1) && Easings[arr1] || Array.isArray(arr1)) {\n                      tween.easing = validateEasing(arr1, duration);\n                      startValue = arr2;\n                  } else {\n                      startValue = arr1 || arr2;\n                  }\n              } else {\n                  endValue = valueData;\n              }\n              tween.end = commands[typeof endValue === \"undefined\" ? \"undefined\" : _typeof(endValue)](endValue, element, elements, elementArrayIndex, propertyName, tween);\n              if (startValue != null || queue === false || data.queueList[queue] === undefined) {\n                  tween.start = commands[typeof startValue === \"undefined\" ? \"undefined\" : _typeof(startValue)](startValue, element, elements, elementArrayIndex, propertyName, tween);\n                  explodeTween(propertyName, tween, duration);\n              }\n          }\n      }\n  }\n  // TODO: Needs a better match for \"translate3d\" etc - a number must be preceded by some form of break...\n  var rxToken = /((?:[+\\-*/]=)?(?:[+-]?\\d*\\.\\d+|[+-]?\\d+)[a-z%]*|(?:.(?!$|[+-]?\\d|[+\\-*/]=[+-]?\\d))+.|.)/g,\n      rxNumber = /^([+\\-*/]=)?([+-]?\\d*\\.\\d+|[+-]?\\d+)(.*)$/;\n  /**\n   * Find a pattern between multiple strings, return a VelocitySequence with\n   * the pattern and the tokenised values.\n   *\n   * If number then animate.\n   * If a string then must match.\n   * If units then convert between them by wrapping in a calc().\n   * - If already in a calc then nest another layer.\n   * If in an rgba() then the first three numbers are rounded.\n   */\n  function findPattern(parts, propertyName) {\n      var partsLength = parts.length,\n          tokens = [],\n          indexes = [];\n      var numbers = void 0;\n      // First tokenise the strings - these have all values, we will pull\n      // numbers later.\n      for (var part = 0; part < partsLength; part++) {\n          if (isString(parts[part])) {\n              if (parts[part] === \"\") {\n                  tokens[part] = [\"\"];\n              } else {\n                  tokens[part] = cloneArray(parts[part].match(rxToken));\n              }\n              indexes[part] = 0;\n              // If it matches more than one thing then we've got a number.\n              numbers = numbers || tokens[part].length > 1;\n              //console.log(`tokens:`, parts[part], tokens[part])\n          } else {\n              // We have an incomplete lineup, it will get tried again later...\n              return;\n          }\n      }\n      var sequence = [],\n          pattern = sequence.pattern = [],\n          addString = function addString(text) {\n          if (isString(pattern[pattern.length - 1])) {\n              pattern[pattern.length - 1] += text;\n          } else if (text) {\n              pattern.push(text);\n              for (var _part = 0; _part < partsLength; _part++) {\n                  sequence[_part].push(null);\n              }\n          }\n      },\n          returnStringType = function returnStringType() {\n          if (numbers || pattern.length > 1) {\n              //console.error(`Velocity: Trying to pattern match mis-matched strings \"${propertyName}\":`, parts);\n              return;\n          }\n          var isDisplay = propertyName === \"display\",\n              isVisibility = propertyName === \"visibility\";\n          for (var _part2 = 0; _part2 < partsLength; _part2++) {\n              var value = parts[_part2];\n              sequence[_part2][0] = value;\n              // Don't care about duration...\n              sequence[_part2].easing = validateEasing(isDisplay && value === \"none\" || isVisibility && value === \"hidden\" || !isDisplay && !isVisibility ? \"at-end\" : \"at-start\", 400);\n          }\n          pattern[0] = false;\n          return sequence;\n      };\n      var more = true;\n      for (var _part3 = 0; _part3 < partsLength; _part3++) {\n          sequence[_part3] = [];\n      }\n      while (more) {\n          var bits = [],\n              units = [];\n          var text = void 0,\n              isUnitless = false,\n              hasNumbers = false;\n          for (var _part4 = 0; _part4 < partsLength; _part4++) {\n              var index = indexes[_part4]++,\n                  token = tokens[_part4][index];\n              if (token) {\n                  var num = token.match(rxNumber); // [ignore, change, number, unit]\n                  if (num) {\n                      // It's a number, possibly with a += change and unit.\n                      if (text) {\n                          return returnStringType();\n                      }\n                      var digits = parseFloat(num[2]),\n                          unit = num[3],\n                          change = num[1] ? num[1][0] + unit : undefined,\n                          changeOrUnit = change || unit;\n                      if (digits && !units.includes(changeOrUnit)) {\n                          // Will be an empty string at the least.\n                          units.push(changeOrUnit);\n                      }\n                      if (!unit) {\n                          if (digits) {\n                              hasNumbers = true;\n                          } else {\n                              isUnitless = true;\n                          }\n                      }\n                      bits[_part4] = change ? [digits, changeOrUnit, true] : [digits, changeOrUnit];\n                  } else if (bits.length) {\n                      return returnStringType();\n                  } else {\n                      // It's a string.\n                      if (!text) {\n                          text = token;\n                      } else if (text !== token) {\n                          return returnStringType();\n                      }\n                  }\n              } else if (!_part4) {\n                  for (; _part4 < partsLength; _part4++) {\n                      var index2 = indexes[_part4]++;\n                      if (tokens[_part4][index2]) {\n                          return returnStringType();\n                      }\n                  }\n                  // IMPORTANT: This is the exit point.\n                  more = false;\n                  break;\n              } else {\n                  // Different\n                  return;\n              }\n          }\n          if (text) {\n              addString(text);\n          } else if (units.length) {\n              if (units.length === 2 && isUnitless && !hasNumbers) {\n                  // If we only have two units, and one is empty, and it's only empty on \"0\", then treat us as having one unit\n                  units.splice(units[0] ? 1 : 0, 1);\n              }\n              if (units.length === 1) {\n                  // All the same units, so append number then unit.\n                  var _unit = units[0],\n                      firstLetter = _unit[0];\n                  switch (firstLetter) {\n                      case \"+\":\n                      case \"-\":\n                      case \"*\":\n                      case \"/\":\n                          if (propertyName) {\n                              console.error(\"Velocity: The first property must not contain a relative function \\\"\" + propertyName + \"\\\":\", parts);\n                          }\n                          return;\n                  }\n                  pattern.push(false);\n                  for (var _part5 = 0; _part5 < partsLength; _part5++) {\n                      sequence[_part5].push(bits[_part5][0]);\n                  }\n                  addString(_unit);\n              } else {\n                  // Multiple units, so must be inside a calc.\n                  addString(\"calc(\");\n                  var patternCalc = pattern.length - 1; // Store the beginning of our calc.\n                  for (var i = 0; i < units.length; i++) {\n                      var _unit2 = units[i],\n                          _firstLetter = _unit2[0],\n                          isComplex = _firstLetter === \"*\" || _firstLetter === \"/\",\n                          isMaths = isComplex || _firstLetter === \"+\" || _firstLetter === \"-\";\n                      if (isComplex) {\n                          // TODO: Not sure this should be done automatically!\n                          pattern[patternCalc] += \"(\";\n                          addString(\")\");\n                      }\n                      if (i) {\n                          addString(\" \" + (isMaths ? _firstLetter : \"+\") + \" \");\n                      }\n                      pattern.push(false);\n                      for (var _part6 = 0; _part6 < partsLength; _part6++) {\n                          var bit = bits[_part6],\n                              value = bit[1] === _unit2 ? bit[0] : bit.length === 3 ? sequence[_part6 - 1][sequence[_part6 - 1].length - 1] : isComplex ? 1 : 0;\n                          sequence[_part6].push(value);\n                      }\n                      addString(isMaths ? _unit2.substring(1) : _unit2);\n                  }\n                  addString(\")\");\n              }\n          }\n      }\n      // We've got here, so a valid sequence - now check and fix RGB rounding\n      // and calc() nesting...\n      // TODO: Nested calc(a + calc(b + c)) -> calc(a + (b + c))\n      for (var _i = 0, inRGB = 0; _i < pattern.length; _i++) {\n          var _text = pattern[_i];\n          if (isString(_text)) {\n              if (inRGB && _text.indexOf(\",\") >= 0) {\n                  inRGB++;\n              } else if (_text.indexOf(\"rgb\") >= 0) {\n                  inRGB = 1;\n              }\n          } else if (inRGB) {\n              if (inRGB < 4) {\n                  pattern[_i] = true;\n              } else {\n                  inRGB = 0;\n              }\n          }\n      }\n      return sequence;\n  }\n  /**\n   * Convert a string-based tween with start and end strings, into a pattern\n   * based tween with arrays.\n   */\n  function explodeTween(propertyName, tween, duration, starting) {\n      var startValue = tween.start,\n          endValue = tween.end;\n      if (!isString(endValue) || !isString(startValue)) {\n          return;\n      }\n      var sequence = findPattern([startValue, endValue], propertyName);\n      if (!sequence && starting) {\n          // This little piece will take a startValue, split out the\n          // various numbers in it, then copy the endValue into the\n          // startValue while replacing the numbers in it to match the\n          // original start numbers as a repeating sequence.\n          // Finally this function will run again with the new\n          // startValue and a now matching pattern.\n          var startNumbers = startValue.match(/\\d\\.?\\d*/g) || [\"0\"],\n              count = startNumbers.length;\n          var index = 0;\n          sequence = findPattern([endValue.replace(/\\d+\\.?\\d*/g, function () {\n              return startNumbers[index++ % count];\n          }), endValue], propertyName);\n      }\n      if (sequence) {\n          if (Velocity$$1.debug) {\n              console.log(\"Velocity: Sequence found:\", sequence);\n          }\n          sequence[0].percent = 0;\n          sequence[1].percent = 1;\n          tween.sequence = sequence;\n          switch (tween.easing) {\n              case Easings[\"at-start\"]:\n              case Easings[\"during\"]:\n              case Easings[\"at-end\"]:\n                  sequence[0].easing = sequence[1].easing = tween.easing;\n                  break;\n          }\n      }\n  }\n  /**\n   * Expand all queued animations that haven't gone yet\n   *\n   * This will automatically expand the properties map for any recently added\n   * animations so that the start and end values are correct.\n   */\n  function validateTweens(activeCall) {\n      // This might be called on an already-ready animation\n      if (State.firstNew === activeCall) {\n          State.firstNew = activeCall._next;\n      }\n      // Check if we're actually already ready\n      if (activeCall._flags & 1 /* EXPANDED */) {\n              // tslint:disable-line:no-bitwise\n              return;\n          }\n      var element = activeCall.element,\n          tweens = activeCall.tweens,\n          duration = getValue(activeCall.options.duration, defaults$1.duration);\n      // tslint:disable-next-line:forin\n      for (var propertyName in tweens) {\n          var tween = tweens[propertyName];\n          if (tween.start == null) {\n              // Get the start value as it's not been passed in\n              var startValue = getPropertyValue(activeCall.element, propertyName);\n              if (isString(startValue)) {\n                  tween.start = fixColors(startValue);\n                  explodeTween(propertyName, tween, duration, true);\n              } else if (!Array.isArray(startValue)) {\n                  console.warn(\"bad type\", tween, propertyName, startValue);\n              }\n          }\n          if (Velocity$$1.debug) {\n              console.log(\"tweensContainer \\\"\" + propertyName + \"\\\": \" + JSON.stringify(tween), element);\n          }\n      }\n      activeCall._flags |= 1 /* EXPANDED */; // tslint:disable-line:no-bitwise\n  }\n\n  // Project\n  /**\n   * Call the begin method of an animation in a separate function so it can\n   * benefit from JIT compiling while still having a try/catch block.\n   */\n  function beginCall(activeCall) {\n      var callback = activeCall.begin || activeCall.options.begin;\n      if (callback) {\n          try {\n              var elements = activeCall.elements;\n              callback.call(elements, elements, activeCall);\n          } catch (error) {\n              setTimeout(function () {\n                  throw error;\n              }, 1);\n          }\n      }\n  }\n  /**\n   * Call the progress method of an animation in a separate function so it can\n   * benefit from JIT compiling while still having a try/catch block.\n   */\n  function progressCall(activeCall) {\n      var callback = activeCall.progress || activeCall.options.progress;\n      if (callback) {\n          try {\n              var elements = activeCall.elements,\n                  percentComplete = activeCall.percentComplete,\n                  options = activeCall.options,\n                  tweenValue = activeCall.tween;\n              callback.call(elements, elements, percentComplete, Math.max(0, activeCall.timeStart + (activeCall.duration != null ? activeCall.duration : options.duration != null ? options.duration : defaults$1.duration) - lastTick), tweenValue !== undefined ? tweenValue : String(percentComplete * 100), activeCall);\n          } catch (error) {\n              setTimeout(function () {\n                  throw error;\n              }, 1);\n          }\n      }\n  }\n  /**\n   * Call callbacks, potentially run async with the main animation thread.\n   */\n  function asyncCallbacks() {\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n          for (var _iterator = progressed[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n              var activeCall = _step.value;\n\n              progressCall(activeCall);\n          }\n      } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n      } finally {\n          try {\n              if (!_iteratorNormalCompletion && _iterator.return) {\n                  _iterator.return();\n              }\n          } finally {\n              if (_didIteratorError) {\n                  throw _iteratorError;\n              }\n          }\n      }\n\n      progressed.clear();\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n          for (var _iterator2 = completed[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n              var _activeCall = _step2.value;\n\n              completeCall(_activeCall);\n          }\n      } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n      } finally {\n          try {\n              if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                  _iterator2.return();\n              }\n          } finally {\n              if (_didIteratorError2) {\n                  throw _iteratorError2;\n              }\n          }\n      }\n\n      completed.clear();\n  }\n  /**************\n   Timing\n   **************/\n  var FRAME_TIME = 1000 / 60,\n\n  /**\n   * Animations with a Complete callback.\n   */\n  completed = new Set(),\n\n  /**\n   * Animations with a Progress callback.\n   */\n  progressed = new Set(),\n\n  /**\n   * Shim for window.performance in case it doesn't exist\n   */\n  performance = function () {\n      var perf = window.performance || {};\n      if (typeof perf.now !== \"function\") {\n          var nowOffset = perf.timing && perf.timing.navigationStart ? perf.timing.navigationStart : now();\n          perf.now = function () {\n              return now() - nowOffset;\n          };\n      }\n      return perf;\n  }(),\n\n  /**\n   * Proxy function for when rAF is not available.\n   *\n   * This should hopefully never be used as the browsers often throttle\n   * this to less than one frame per second in the background, making it\n   * completely unusable.\n   */\n  rAFProxy = function rAFProxy(callback) {\n      return setTimeout(callback, Math.max(0, FRAME_TIME - (performance.now() - lastTick)));\n  },\n\n  /**\n   * Either requestAnimationFrame, or a shim for it.\n   */\n  rAFShim = window.requestAnimationFrame || rAFProxy;\n  /**\n   * Set if we are currently inside a tick() to prevent double-calling.\n   */\n  var ticking = void 0,\n\n  /**\n   * A background WebWorker that sends us framerate messages when we're in\n   * the background. Without this we cannot maintain frame accuracy.\n   */\n  worker = void 0;\n  /**\n   * The time that the last animation frame ran at. Set from tick(), and used\n   * for missing rAF (ie, when not in focus etc).\n   */\n  var lastTick = 0;\n  /**\n   * WebWorker background function.\n   *\n   * When we're in the background this will send us a msg every tick, when in\n   * the foreground it won't.\n   *\n   * When running in the background the browser reduces allowed CPU etc, so\n   * we raun at 30fps instead of 60fps.\n   */\n  function workerFn() {\n      var _this = this;\n\n      var interval = void 0;\n      this.onmessage = function (e) {\n          switch (e.data) {\n              case true:\n                  if (!interval) {\n                      interval = setInterval(function () {\n                          _this.postMessage(true);\n                      }, 1000 / 30);\n                  }\n                  break;\n              case false:\n                  if (interval) {\n                      clearInterval(interval);\n                      interval = 0;\n                  }\n                  break;\n              default:\n                  _this.postMessage(e.data);\n                  break;\n          }\n      };\n  }\n  try {\n      // Create the worker - this might not be supported, hence the try/catch.\n      worker = new Worker(URL.createObjectURL(new Blob([\"(\" + workerFn + \")()\"])));\n      // Whenever the worker sends a message we tick()\n      worker.onmessage = function (e) {\n          if (e.data === true) {\n              tick();\n          } else {\n              asyncCallbacks();\n          }\n      };\n      // And watch for going to the background to start the WebWorker running.\n      if (!State.isMobile && document.hidden !== undefined) {\n          document.addEventListener(\"visibilitychange\", function () {\n              worker.postMessage(State.isTicking && document.hidden);\n          });\n      }\n  } catch (e) {}\n  /*\n   * WebWorkers are not supported in this format. This can happen in IE10\n   * where it can't create one from a blob this way. We fallback, but make\n   * no guarantees towards accuracy in this case.\n   */\n\n  /**\n   * Called on every tick, preferably through rAF. This is reponsible for\n   * initialising any new animations, then starting any that need starting.\n   * Finally it will expand any tweens and set the properties relating to\n   * them. If there are any callbacks relating to the animations then they\n   * will attempt to call at the end (with the exception of \"begin\").\n   */\n  function tick(timestamp) {\n      if (ticking) {\n          // Should never happen - but if we've swapped back from hidden to\n          // visibile then we want to make sure\n          return;\n      }\n      ticking = true;\n      /* An empty timestamp argument indicates that this is the first tick occurence since ticking was turned on.\n       We leverage this metadata to fully ignore the first tick pass since RAF's initial pass is fired whenever\n       the browser's next tick sync time occurs, which results in the first elements subjected to Velocity\n       calls being animated out of sync with any elements animated immediately thereafter. In short, we ignore\n       the first RAF tick pass so that elements being immediately consecutively animated -- instead of simultaneously animated\n       by the same Velocity call -- are properly batched into the same initial RAF tick and consequently remain in sync thereafter. */\n      if (timestamp !== false) {\n          var timeCurrent = performance.now(),\n              deltaTime = lastTick ? timeCurrent - lastTick : FRAME_TIME,\n              defaultSpeed = defaults$1.speed,\n              defaultEasing = defaults$1.easing,\n              defaultDuration = defaults$1.duration;\n          var activeCall = void 0,\n              nextCall = void 0;\n          if (deltaTime >= defaults$1.minFrameTime || !lastTick) {\n              lastTick = timeCurrent;\n              /********************\n               Call Iteration\n               ********************/\n              // Expand any tweens that might need it.\n              while (State.firstNew) {\n                  validateTweens(State.firstNew);\n              }\n              // Iterate through each active call.\n              for (activeCall = State.first; activeCall && activeCall !== State.firstNew; activeCall = activeCall._next) {\n                  var element = activeCall.element,\n                      data = Data(element);\n                  // Check to see if this element has been deleted midway\n                  // through the animation. If it's gone then end this\n                  // animation.\n                  if (!element.parentNode || !data) {\n                      // TODO: Remove safely - decrease count, delete data, remove from arrays\n                      freeAnimationCall(activeCall);\n                      continue;\n                  }\n                  // Don't bother getting until we can use these.\n                  var options = activeCall.options,\n                      flags = activeCall._flags;\n                  var timeStart = activeCall.timeStart;\n                  // If this is the first time that this call has been\n                  // processed by tick() then we assign timeStart now so that\n                  // it's value is as close to the real animation start time\n                  // as possible.\n                  if (!timeStart) {\n                      var queue = activeCall.queue != null ? activeCall.queue : options.queue;\n                      timeStart = timeCurrent - deltaTime;\n                      if (queue !== false) {\n                          timeStart = Math.max(timeStart, data.lastFinishList[queue] || 0);\n                      }\n                      activeCall.timeStart = timeStart;\n                  }\n                  // If this animation is paused then skip processing unless\n                  // it has been set to resume.\n                  if (flags & 16 /* PAUSED */) {\n                          // tslint:disable-line:no-bitwise\n                          // Update the time start to accomodate the paused\n                          // completion amount.\n                          activeCall.timeStart += deltaTime;\n                          continue;\n                      }\n                  // Check if this animation is ready - if it's synced then it\n                  // needs to wait for all other animations in the sync\n                  if (!(flags & 2 /* READY */)) {\n                      // tslint:disable-line:no-bitwise\n                      activeCall._flags |= 2 /* READY */; // tslint:disable-line:no-bitwise\n                      options._ready++;\n                  }\n              }\n              // Need to split the loop, as ready sync animations must all get\n              // the same start time.\n              for (activeCall = State.first; activeCall && activeCall !== State.firstNew; activeCall = nextCall) {\n                  var _flags = activeCall._flags;\n                  nextCall = activeCall._next;\n                  if (!(_flags & 2 /* READY */) || _flags & 16 /* PAUSED */) {\n                      // tslint:disable-line:no-bitwise\n                      continue;\n                  }\n                  var _options = activeCall.options;\n                  if (_flags & 32 /* SYNC */ && _options._ready < _options._total) {\n                      // tslint:disable-line:no-bitwise\n                      activeCall.timeStart += deltaTime;\n                      continue;\n                  }\n                  var speed = activeCall.speed != null ? activeCall.speed : _options.speed != null ? _options.speed : defaultSpeed;\n                  var _timeStart = activeCall.timeStart;\n                  // Don't bother getting until we can use these.\n                  if (!(_flags & 4 /* STARTED */)) {\n                      // tslint:disable-line:no-bitwise\n                      var delay = activeCall.delay != null ? activeCall.delay : _options.delay;\n                      // Make sure anything we've delayed doesn't start\n                      // animating yet, there might still be an active delay\n                      // after something has been un-paused\n                      if (delay) {\n                          if (_timeStart + delay / speed > timeCurrent) {\n                              continue;\n                          }\n                          activeCall.timeStart = _timeStart += delay / (delay > 0 ? speed : 1);\n                      }\n                      activeCall._flags |= 4 /* STARTED */; // tslint:disable-line:no-bitwise\n                      // The begin callback is fired once per call, not once\n                      // per element, and is passed the full raw DOM element\n                      // set as both its context and its first argument.\n                      if (_options._started++ === 0) {\n                          _options._first = activeCall;\n                          if (_options.begin) {\n                              // Pass to an external fn with a try/catch block for optimisation\n                              beginCall(activeCall);\n                              // Only called once, even if reversed or repeated\n                              _options.begin = undefined;\n                          }\n                      }\n                  }\n                  if (speed !== 1) {\n                      // On the first frame we may have a shorter delta\n                      // const delta = Math.min(deltaTime, timeCurrent - timeStart);\n                      activeCall.timeStart = _timeStart += Math.min(deltaTime, timeCurrent - _timeStart) * (1 - speed);\n                  }\n                  var activeEasing = activeCall.easing != null ? activeCall.easing : _options.easing != null ? _options.easing : defaultEasing,\n                      millisecondsEllapsed = activeCall.ellapsedTime = timeCurrent - _timeStart,\n                      duration = activeCall.duration != null ? activeCall.duration : _options.duration != null ? _options.duration : defaultDuration,\n                      percentComplete = activeCall.percentComplete = Velocity$$1.mock ? 1 : Math.min(millisecondsEllapsed / duration, 1),\n                      tweens = activeCall.tweens,\n                      reverse = _flags & 64 /* REVERSE */; // tslint:disable-line:no-bitwise\n                  if (activeCall.progress || _options._first === activeCall && _options.progress) {\n                      progressed.add(activeCall);\n                  }\n                  if (percentComplete === 1) {\n                      completed.add(activeCall);\n                  }\n                  // tslint:disable-next-line:forin\n                  for (var property in tweens) {\n                      // For every element, iterate through each property.\n                      var tween = tweens[property],\n                          sequence = tween.sequence,\n                          pattern = sequence.pattern;\n                      var currentValue = \"\",\n                          i = 0;\n                      if (pattern) {\n                          var easingComplete = (tween.easing || activeEasing)(percentComplete, 0, 1, property);\n                          var best = 0;\n                          for (var j = 0; j < sequence.length - 1; j++) {\n                              if (sequence[j].percent < easingComplete) {\n                                  best = j;\n                              }\n                          }\n                          var tweenFrom = sequence[best],\n                              tweenTo = sequence[best + 1] || tweenFrom,\n                              rawPercent = (percentComplete - tweenFrom.percent) / (tweenTo.percent - tweenFrom.percent),\n                              tweenPercent = reverse ? 1 - rawPercent : rawPercent,\n                              easing = tweenTo.easing || activeEasing || linearEasing;\n                          for (; i < pattern.length; i++) {\n                              var startValue = tweenFrom[i];\n                              if (startValue == null) {\n                                  currentValue += pattern[i];\n                              } else {\n                                  var endValue = tweenTo[i];\n                                  if (startValue === endValue) {\n                                      currentValue += startValue;\n                                  } else {\n                                      // All easings must deal with numbers except for our internal ones.\n                                      var result = easing(tweenPercent, startValue, endValue, property);\n                                      currentValue += pattern[i] !== true ? result : Math.round(result);\n                                  }\n                              }\n                          }\n                          if (property !== \"tween\") {\n                              if (percentComplete === 1) {\n                                  currentValue = removeNestedCalc(currentValue);\n                              }\n                              // TODO: To solve an IE<=8 positioning bug, the unit type must be dropped when setting a property value of 0 - add normalisations to legacy\n                              setPropertyValue(activeCall.element, property, currentValue, tween.fn);\n                          } else {\n                              // Skip the fake 'tween' property as that is only\n                              // passed into the progress callback.\n                              activeCall.tween = currentValue;\n                          }\n                      } else {\n                          console.warn(\"VelocityJS: Missing pattern:\", property, JSON.stringify(tween[property]));\n                          delete tweens[property];\n                      }\n                  }\n              }\n              if (progressed.size || completed.size) {\n                  if (!document.hidden) {\n                      asyncCallbacks();\n                  } else if (worker) {\n                      worker.postMessage(\"\");\n                  } else {\n                      setTimeout(asyncCallbacks, 1);\n                  }\n              }\n          }\n      }\n      if (State.first) {\n          State.isTicking = true;\n          if (!document.hidden) {\n              rAFShim(tick);\n          } else if (!worker) {\n              rAFProxy(tick);\n          } else if (timestamp === false) {\n              // Make sure we turn on the messages.\n              worker.postMessage(true);\n          }\n      } else {\n          State.isTicking = false;\n          lastTick = 0;\n          if (document.hidden && worker) {\n              // Make sure we turn off the messages.\n              worker.postMessage(false);\n          }\n      }\n      ticking = false;\n  }\n\n  // Project\n  /**\n   * Check if an animation should be finished, and if so we set the tweens to\n   * the final value for it, then call complete.\n   */\n  function checkAnimationShouldBeFinished(animation, queueName, defaultQueue) {\n      validateTweens(animation);\n      if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n          if (!(animation._flags & 4 /* STARTED */)) {\n              // tslint:disable-line:no-bitwise\n              // Copied from tick.ts - ensure that the animation is completely\n              // valid and run begin() before complete().\n              var options = animation.options;\n              // The begin callback is fired once per call, not once per\n              // element, and is passed the full raw DOM element set as both\n              // its context and its first argument.\n              if (options._started++ === 0) {\n                  options._first = animation;\n                  if (options.begin) {\n                      // Pass to an external fn with a try/catch block for optimisation\n                      beginCall(animation);\n                      // Only called once, even if reversed or repeated\n                      options.begin = undefined;\n                  }\n              }\n              animation._flags |= 4 /* STARTED */; // tslint:disable-line:no-bitwise\n          }\n          // tslint:disable-next-line:forin\n          for (var property in animation.tweens) {\n              var tween = animation.tweens[property],\n                  sequence = tween.sequence,\n                  pattern = sequence.pattern;\n              var currentValue = \"\",\n                  i = 0;\n              if (pattern) {\n                  var endValues = sequence[sequence.length - 1];\n                  for (; i < pattern.length; i++) {\n                      var endValue = endValues[i];\n                      currentValue += endValue == null ? pattern[i] : endValue;\n                  }\n              }\n              setPropertyValue(animation.element, property, currentValue, tween.fn);\n          }\n          completeCall(animation);\n      }\n  }\n  /**\n   * When the finish action is triggered, the elements' currently active call is\n   * immediately finished. When an element is finished, the next item in its\n   * animation queue is immediately triggered. If passed via a chained call\n   * then this will only target the animations in that call, and not the\n   * elements linked to it.\n   *\n   * A queue name may be passed in to specify that only animations on the\n   * named queue are finished. The default queue is named \"\". In addition the\n   * value of `false` is allowed for the queue name.\n   *\n   * An final argument may be passed in to clear an element's remaining queued\n   * calls. This may only be the value `true`.\n   */\n  function finish(args, elements, promiseHandler) {\n      var queueName = validateQueue(args[0], true),\n          defaultQueue = defaults$1.queue,\n          finishAll = args[queueName === undefined ? 0 : 1] === true;\n      if (isVelocityResult(elements) && elements.velocity.animations) {\n          var _iteratorNormalCompletion = true;\n          var _didIteratorError = false;\n          var _iteratorError = undefined;\n\n          try {\n              for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                  var animation = _step.value;\n\n                  checkAnimationShouldBeFinished(animation, queueName, defaultQueue);\n              }\n          } catch (err) {\n              _didIteratorError = true;\n              _iteratorError = err;\n          } finally {\n              try {\n                  if (!_iteratorNormalCompletion && _iterator.return) {\n                      _iterator.return();\n                  }\n              } finally {\n                  if (_didIteratorError) {\n                      throw _iteratorError;\n                  }\n              }\n          }\n      } else {\n          while (State.firstNew) {\n              validateTweens(State.firstNew);\n          }\n          for (var activeCall = State.first, nextCall; activeCall && (finishAll || activeCall !== State.firstNew); activeCall = nextCall || State.firstNew) {\n              nextCall = activeCall._next;\n              if (!elements || elements.includes(activeCall.element)) {\n                  checkAnimationShouldBeFinished(activeCall, queueName, defaultQueue);\n              }\n          }\n      }\n      if (promiseHandler) {\n          if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n              elements.then(promiseHandler._resolver);\n          } else {\n              promiseHandler._resolver(elements);\n          }\n      }\n  }\n  registerAction([\"finish\", finish], true);\n\n  /**\n   * Used to map getters for the various AnimationFlags.\n   */\n  var animationFlags = {\n      isExpanded: 1 /* EXPANDED */\n      , isReady: 2 /* READY */\n      , isStarted: 4 /* STARTED */\n      , isStopped: 8 /* STOPPED */\n      , isPaused: 16 /* PAUSED */\n      , isSync: 32 /* SYNC */\n      , isReverse: 64 /* REVERSE */\n  };\n  /**\n   * Get or set an option or running AnimationCall data value. If there is no\n   * value passed then it will get, otherwise we will set.\n   *\n   * NOTE: When using \"get\" this will not touch the Promise as it is never\n   * returned to the user.\n   */\n  function option(args, elements, promiseHandler, action) {\n      var key = args[0],\n          queue = action.indexOf(\".\") >= 0 ? action.replace(/^.*\\./, \"\") : undefined,\n          queueName = queue === \"false\" ? false : validateQueue(queue, true);\n      var animations = void 0,\n          value = args[1];\n      if (!key) {\n          console.warn(\"VelocityJS: Cannot access a non-existant key!\");\n          return null;\n      }\n      // If we're chaining the return value from Velocity then we are only\n      // interested in the values related to that call\n      if (isVelocityResult(elements) && elements.velocity.animations) {\n          animations = elements.velocity.animations;\n      } else {\n          animations = [];\n          for (var activeCall = State.first; activeCall; activeCall = activeCall._next) {\n              if (elements.indexOf(activeCall.element) >= 0 && getValue(activeCall.queue, activeCall.options.queue) === queueName) {\n                  animations.push(activeCall);\n              }\n          }\n          // If we're dealing with multiple elements that are pointing at a\n          // single running animation, then instead treat them as a single\n          // animation.\n          if (elements.length > 1 && animations.length > 1) {\n              var i = 1,\n                  options = animations[0].options;\n              while (i < animations.length) {\n                  if (animations[i++].options !== options) {\n                      options = null;\n                      break;\n                  }\n              }\n              // TODO: this needs to check that they're actually a sync:true animation to merge the results, otherwise the individual values may be different\n              if (options) {\n                  animations = [animations[0]];\n              }\n          }\n      }\n      // GET\n      if (value === undefined) {\n          var result = [],\n              flag = animationFlags[key];\n          var _iteratorNormalCompletion = true;\n          var _didIteratorError = false;\n          var _iteratorError = undefined;\n\n          try {\n              for (var _iterator = animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                  var animation = _step.value;\n\n                  if (flag === undefined) {\n                      // A normal key to get.\n                      result.push(getValue(animation[key], animation.options[key]));\n                  } else {\n                      // A flag that we're checking against.\n                      result.push((animation._flags & flag) === 0); // tslint:disable-line:no-bitwise\n                  }\n              }\n          } catch (err) {\n              _didIteratorError = true;\n              _iteratorError = err;\n          } finally {\n              try {\n                  if (!_iteratorNormalCompletion && _iterator.return) {\n                      _iterator.return();\n                  }\n              } finally {\n                  if (_didIteratorError) {\n                      throw _iteratorError;\n                  }\n              }\n          }\n\n          if (elements.length === 1 && animations.length === 1) {\n              // If only a single animation is found and we're only targetting a\n              // single element, then return the value directly\n              return result[0];\n          }\n          return result;\n      }\n      // SET\n      var isPercentComplete = void 0;\n      switch (key) {\n          case \"cache\":\n              value = validateCache(value);\n              break;\n          case \"begin\":\n              value = validateBegin(value);\n              break;\n          case \"complete\":\n              value = validateComplete(value);\n              break;\n          case \"delay\":\n              value = validateDelay(value);\n              break;\n          case \"duration\":\n              value = validateDuration(value);\n              break;\n          case \"fpsLimit\":\n              value = validateFpsLimit(value);\n              break;\n          case \"loop\":\n              value = validateLoop(value);\n              break;\n          case \"percentComplete\":\n              isPercentComplete = true;\n              value = parseFloat(value);\n              break;\n          case \"repeat\":\n          case \"repeatAgain\":\n              value = validateRepeat(value);\n              break;\n          default:\n              if (key[0] !== \"_\") {\n                  var num = parseFloat(value);\n                  if (value === String(num)) {\n                      value = num;\n                  }\n                  break;\n              }\n          // deliberate fallthrough\n          case \"queue\":\n          case \"promise\":\n          case \"promiseRejectEmpty\":\n          case \"easing\":\n          case \"started\":\n              console.warn(\"VelocityJS: Trying to set a read-only key:\", key);\n              return;\n      }\n      if (value === undefined || value !== value) {\n          console.warn(\"VelocityJS: Trying to set an invalid value:\" + key + \"=\" + value + \" (\" + args[1] + \")\");\n          return null;\n      }\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n          for (var _iterator2 = animations[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n              var _animation = _step2.value;\n\n              if (isPercentComplete) {\n                  _animation.timeStart = lastTick - getValue(_animation.duration, _animation.options.duration, defaults$1.duration) * value;\n              } else {\n                  _animation[key] = value;\n              }\n          }\n      } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n      } finally {\n          try {\n              if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                  _iterator2.return();\n              }\n          } finally {\n              if (_didIteratorError2) {\n                  throw _iteratorError2;\n              }\n          }\n      }\n\n      if (promiseHandler) {\n          if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n              elements.then(promiseHandler._resolver);\n          } else {\n              promiseHandler._resolver(elements);\n          }\n      }\n  }\n  registerAction([\"option\", option], true);\n\n  // Project\n  /**\n   * Check if an animation should be paused / resumed.\n   */\n  function checkAnimation(animation, queueName, defaultQueue, isPaused) {\n      if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n          if (isPaused) {\n              animation._flags |= 16 /* PAUSED */; // tslint:disable-line:no-bitwise\n          } else {\n              animation._flags &= ~16 /* PAUSED */; // tslint:disable-line:no-bitwise\n          }\n      }\n  }\n  /**\n   * Pause and Resume are call-wide (not on a per element basis). Thus, calling pause or resume on a\n   * single element will cause any calls that contain tweens for that element to be paused/resumed\n   * as well.\n   */\n  function pauseResume(args, elements, promiseHandler, action) {\n      var isPaused = action.indexOf(\"pause\") === 0,\n          queue = action.indexOf(\".\") >= 0 ? action.replace(/^.*\\./, \"\") : undefined,\n          queueName = queue === \"false\" ? false : validateQueue(args[0]),\n          defaultQueue = defaults$1.queue;\n      if (isVelocityResult(elements) && elements.velocity.animations) {\n          var _iteratorNormalCompletion = true;\n          var _didIteratorError = false;\n          var _iteratorError = undefined;\n\n          try {\n              for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                  var animation = _step.value;\n\n                  checkAnimation(animation, queueName, defaultQueue, isPaused);\n              }\n          } catch (err) {\n              _didIteratorError = true;\n              _iteratorError = err;\n          } finally {\n              try {\n                  if (!_iteratorNormalCompletion && _iterator.return) {\n                      _iterator.return();\n                  }\n              } finally {\n                  if (_didIteratorError) {\n                      throw _iteratorError;\n                  }\n              }\n          }\n      } else {\n          var activeCall = State.first;\n          while (activeCall) {\n              if (!elements || elements.includes(activeCall.element)) {\n                  checkAnimation(activeCall, queueName, defaultQueue, isPaused);\n              }\n              activeCall = activeCall._next;\n          }\n      }\n      if (promiseHandler) {\n          if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n              elements.then(promiseHandler._resolver);\n          } else {\n              promiseHandler._resolver(elements);\n          }\n      }\n  }\n  registerAction([\"pause\", pauseResume], true);\n  registerAction([\"resume\", pauseResume], true);\n\n  // Project\n  /**\n   * Get or set a style of Nomralised property value on one or more elements.\n   * If there is no value passed then it will get, otherwise we will set.\n   *\n   * NOTE: When using \"get\" this will not touch the Promise as it is never\n   * returned to the user.\n   *\n   * This can fail to set, and will reject the Promise if it does so.\n   *\n   * Velocity(elements, \"style\", \"property\", \"value\") => elements;\n   * Velocity(elements, \"style\", {\"property\": \"value\", ...}) => elements;\n   * Velocity(element, \"style\", \"property\") => \"value\";\n   * Velocity(elements, \"style\", \"property\") => [\"value\", ...];\n   */\n  function propertyAction(args, elements, promiseHandler, action) {\n      var property = args[0],\n          value = args[1];\n      if (!property) {\n          console.warn(\"VelocityJS: Cannot access a non-existant property!\");\n          return null;\n      }\n      // GET\n      if (value === undefined && !isPlainObject(property)) {\n          if (Array.isArray(property)) {\n              if (elements.length === 1) {\n                  var result = {};\n                  var _iteratorNormalCompletion = true;\n                  var _didIteratorError = false;\n                  var _iteratorError = undefined;\n\n                  try {\n                      for (var _iterator = property[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                          var prop = _step.value;\n\n                          result[prop] = fixColors(getPropertyValue(elements[0], prop));\n                      }\n                  } catch (err) {\n                      _didIteratorError = true;\n                      _iteratorError = err;\n                  } finally {\n                      try {\n                          if (!_iteratorNormalCompletion && _iterator.return) {\n                              _iterator.return();\n                          }\n                      } finally {\n                          if (_didIteratorError) {\n                              throw _iteratorError;\n                          }\n                      }\n                  }\n\n                  return result;\n              } else {\n                  var _result = [];\n                  var _iteratorNormalCompletion2 = true;\n                  var _didIteratorError2 = false;\n                  var _iteratorError2 = undefined;\n\n                  try {\n                      for (var _iterator2 = elements[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                          var element = _step2.value;\n\n                          var res = {};\n                          var _iteratorNormalCompletion3 = true;\n                          var _didIteratorError3 = false;\n                          var _iteratorError3 = undefined;\n\n                          try {\n                              for (var _iterator3 = property[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                                  var _prop = _step3.value;\n\n                                  res[_prop] = fixColors(getPropertyValue(element, _prop));\n                              }\n                          } catch (err) {\n                              _didIteratorError3 = true;\n                              _iteratorError3 = err;\n                          } finally {\n                              try {\n                                  if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                                      _iterator3.return();\n                                  }\n                              } finally {\n                                  if (_didIteratorError3) {\n                                      throw _iteratorError3;\n                                  }\n                              }\n                          }\n\n                          _result.push(res);\n                      }\n                  } catch (err) {\n                      _didIteratorError2 = true;\n                      _iteratorError2 = err;\n                  } finally {\n                      try {\n                          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                              _iterator2.return();\n                          }\n                      } finally {\n                          if (_didIteratorError2) {\n                              throw _iteratorError2;\n                          }\n                      }\n                  }\n\n                  return _result;\n              }\n          } else {\n              // If only a single animation is found and we're only targetting a\n              // single element, then return the value directly\n              if (elements.length === 1) {\n                  return fixColors(getPropertyValue(elements[0], property));\n              }\n              var _result2 = [];\n              var _iteratorNormalCompletion4 = true;\n              var _didIteratorError4 = false;\n              var _iteratorError4 = undefined;\n\n              try {\n                  for (var _iterator4 = elements[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                      var _element = _step4.value;\n\n                      _result2.push(fixColors(getPropertyValue(_element, property)));\n                  }\n              } catch (err) {\n                  _didIteratorError4 = true;\n                  _iteratorError4 = err;\n              } finally {\n                  try {\n                      if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                          _iterator4.return();\n                      }\n                  } finally {\n                      if (_didIteratorError4) {\n                          throw _iteratorError4;\n                      }\n                  }\n              }\n\n              return _result2;\n          }\n      }\n      // SET\n      var error = [];\n      if (isPlainObject(property)) {\n          for (var propertyName in property) {\n              if (property.hasOwnProperty(propertyName)) {\n                  var _iteratorNormalCompletion5 = true;\n                  var _didIteratorError5 = false;\n                  var _iteratorError5 = undefined;\n\n                  try {\n                      for (var _iterator5 = elements[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                          var _element2 = _step5.value;\n\n                          var propertyValue = property[propertyName];\n                          if (isString(propertyValue) || isNumber(propertyValue)) {\n                              setPropertyValue(_element2, propertyName, property[propertyName]);\n                          } else {\n                              error.push(\"Cannot set a property \\\"\" + propertyName + \"\\\" to an unknown type: \" + (typeof propertyValue === \"undefined\" ? \"undefined\" : _typeof(propertyValue)));\n                              console.warn(\"VelocityJS: Cannot set a property \\\"\" + propertyName + \"\\\" to an unknown type:\", propertyValue);\n                          }\n                      }\n                  } catch (err) {\n                      _didIteratorError5 = true;\n                      _iteratorError5 = err;\n                  } finally {\n                      try {\n                          if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                              _iterator5.return();\n                          }\n                      } finally {\n                          if (_didIteratorError5) {\n                              throw _iteratorError5;\n                          }\n                      }\n                  }\n              }\n          }\n      } else if (isString(value) || isNumber(value)) {\n          var _iteratorNormalCompletion6 = true;\n          var _didIteratorError6 = false;\n          var _iteratorError6 = undefined;\n\n          try {\n              for (var _iterator6 = elements[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                  var _element3 = _step6.value;\n\n                  setPropertyValue(_element3, property, String(value));\n              }\n          } catch (err) {\n              _didIteratorError6 = true;\n              _iteratorError6 = err;\n          } finally {\n              try {\n                  if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                      _iterator6.return();\n                  }\n              } finally {\n                  if (_didIteratorError6) {\n                      throw _iteratorError6;\n                  }\n              }\n          }\n      } else {\n          error.push(\"Cannot set a property \\\"\" + property + \"\\\" to an unknown type: \" + (typeof value === \"undefined\" ? \"undefined\" : _typeof(value)));\n          console.warn(\"VelocityJS: Cannot set a property \\\"\" + property + \"\\\" to an unknown type:\", value);\n      }\n      if (promiseHandler) {\n          if (error.length) {\n              promiseHandler._rejecter(error.join(\", \"));\n          } else if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n              elements.then(promiseHandler._resolver);\n          } else {\n              promiseHandler._resolver(elements);\n          }\n      }\n  }\n  registerAction([\"property\", propertyAction], true);\n\n  // Project\n  registerAction([\"reverse\", function (args, elements, promiseHandler, action) {\n          // NOTE: Code needs to split out before here - but this is needed to prevent it being overridden\n          throw new SyntaxError(\"VelocityJS: The 'reverse' action is built in and private.\");\n  }], true);\n\n  // Project\n  /**\n   * Check if an animation should be stopped, and if so then set the STOPPED\n   * flag on it, then call complete.\n   */\n  function checkAnimationShouldBeStopped(animation, queueName, defaultQueue) {\n      validateTweens(animation);\n      if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n          animation._flags |= 8 /* STOPPED */; // tslint:disable-line:no-bitwise\n          completeCall(animation);\n      }\n  }\n  /**\n   * When the stop action is triggered, the elements' currently active call is\n   * immediately stopped. When an element is stopped, the next item in its\n   * animation queue is immediately triggered. If passed via a chained call\n   * then this will only target the animations in that call, and not the\n   * elements linked to it.\n   *\n   * A queue name may be passed in to specify that only animations on the\n   * named queue are stopped. The default queue is named \"\". In addition the\n   * value of `false` is allowed for the queue name.\n   *\n   * An final argument may be passed in to clear an element's remaining queued\n   * calls. This may only be the value `true`.\n   *\n   * Note: The stop command runs prior to Velocity's Queueing phase since its\n   * behavior is intended to take effect *immediately*, regardless of the\n   * element's current queue state.\n   */\n  function stop(args, elements, promiseHandler, action) {\n      var queueName = validateQueue(args[0], true),\n          defaultQueue = defaults$1.queue,\n          finishAll = args[queueName === undefined ? 0 : 1] === true;\n      if (isVelocityResult(elements) && elements.velocity.animations) {\n          var _iteratorNormalCompletion = true;\n          var _didIteratorError = false;\n          var _iteratorError = undefined;\n\n          try {\n              for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                  var animation = _step.value;\n\n                  checkAnimationShouldBeStopped(animation, queueName, defaultQueue);\n              }\n          } catch (err) {\n              _didIteratorError = true;\n              _iteratorError = err;\n          } finally {\n              try {\n                  if (!_iteratorNormalCompletion && _iterator.return) {\n                      _iterator.return();\n                  }\n              } finally {\n                  if (_didIteratorError) {\n                      throw _iteratorError;\n                  }\n              }\n          }\n      } else {\n          while (State.firstNew) {\n              validateTweens(State.firstNew);\n          }\n          for (var activeCall = State.first, nextCall; activeCall && (finishAll || activeCall !== State.firstNew); activeCall = nextCall || State.firstNew) {\n              nextCall = activeCall._next;\n              if (!elements || elements.includes(activeCall.element)) {\n                  checkAnimationShouldBeStopped(activeCall, queueName, defaultQueue);\n              }\n          }\n      }\n      if (promiseHandler) {\n          if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n              elements.then(promiseHandler._resolver);\n          } else {\n              promiseHandler._resolver(elements);\n          }\n      }\n  }\n  registerAction([\"stop\", stop], true);\n\n  // Project\n  registerAction([\"style\", propertyAction], true);\n\n  // Project\n  /**\n   *\n   */\n  function tweenAction(args, elements, promiseHandler, action) {\n      var requireForcefeeding = void 0;\n      if (!elements) {\n          if (!args.length) {\n              console.info(\"Velocity(<element>, \\\"tween\\\", percentComplete, property, end | [end, <easing>, <start>], <easing>) => value\\nVelocity(<element>, \\\"tween\\\", percentComplete, {property: end | [end, <easing>, <start>], ...}, <easing>) => {property: value, ...}\");\n              return null;\n          }\n          elements = [document.body];\n          requireForcefeeding = true;\n      } else if (elements.length !== 1) {\n          // TODO: Allow more than a single element to return an array of results\n          throw new Error(\"VelocityJS: Cannot tween more than one element!\");\n      }\n      var percentComplete = args[0],\n          fakeAnimation = {\n          elements: elements,\n          element: elements[0],\n          queue: false,\n          options: {\n              duration: 1000\n          },\n          tweens: null\n      },\n          result = {};\n      var properties = args[1],\n          singleResult = void 0,\n          maybeSequence = void 0,\n          easing = args[2],\n          count = 0;\n      if (isString(args[1])) {\n          if (SequencesObject && SequencesObject[args[1]]) {\n              maybeSequence = SequencesObject[args[1]];\n              properties = {};\n              easing = args[2];\n          } else {\n              singleResult = true;\n              properties = defineProperty({}, args[1], args[2]);\n              easing = args[3];\n          }\n      } else if (Array.isArray(args[1])) {\n          singleResult = true;\n          properties = {\n              tween: args[1]\n          };\n          easing = args[2];\n      }\n      if (!isNumber(percentComplete) || percentComplete < 0 || percentComplete > 1) {\n          throw new Error(\"VelocityJS: Must tween a percentage from 0 to 1!\");\n      }\n      if (!isPlainObject(properties)) {\n          throw new Error(\"VelocityJS: Cannot tween an invalid property!\");\n      }\n      if (requireForcefeeding) {\n          for (var property in properties) {\n              if (properties.hasOwnProperty(property) && (!Array.isArray(properties[property]) || properties[property].length < 2)) {\n                  throw new Error(\"VelocityJS: When not supplying an element you must force-feed values: \" + property);\n              }\n          }\n      }\n      var activeEasing = validateEasing(getValue(easing, defaults$1.easing), DEFAULT_DURATION);\n      if (maybeSequence) {\n          expandSequence(fakeAnimation, maybeSequence);\n      } else {\n          expandProperties(fakeAnimation, properties);\n      }\n      // tslint:disable-next-line:forin\n      for (var _property in fakeAnimation.tweens) {\n          // For every element, iterate through each property.\n          var propertyTween = fakeAnimation.tweens[_property],\n              sequence = propertyTween.sequence,\n              pattern = sequence.pattern;\n          var currentValue = \"\",\n              i = 0;\n          count++;\n          if (pattern) {\n              var easingComplete = (propertyTween.easing || activeEasing)(percentComplete, 0, 1, _property);\n              var best = 0;\n              for (var j = 0; j < sequence.length - 1; j++) {\n                  if (sequence[j].percent < easingComplete) {\n                      best = j;\n                  }\n              }\n              var tweenFrom = sequence[best],\n                  tweenTo = sequence[best + 1] || tweenFrom,\n                  tweenPercent = (percentComplete - tweenFrom.percent) / (tweenTo.percent - tweenFrom.percent),\n                  tweenEasing = tweenTo.easing || linearEasing;\n              for (; i < pattern.length; i++) {\n                  var startValue = tweenFrom[i];\n                  if (startValue == null) {\n                      currentValue += pattern[i];\n                  } else {\n                      var endValue = tweenTo[i];\n                      if (startValue === endValue) {\n                          currentValue += startValue;\n                      } else {\n                          // All easings must deal with numbers except for our internal ones.\n                          var value = tweenEasing(tweenPercent, startValue, endValue, _property);\n                          currentValue += pattern[i] === true ? Math.round(value) : value;\n                      }\n                  }\n              }\n              result[_property] = currentValue;\n          }\n      }\n      if (singleResult && count === 1) {\n          for (var _property2 in result) {\n              if (result.hasOwnProperty(_property2)) {\n                  return result[_property2];\n              }\n          }\n      }\n      return result;\n  }\n  registerAction([\"tween\", tweenAction], true);\n\n  // Project\n  /**\n   * Converting from hex as it makes for a smaller file.\n   */\n  var colorValues = {\n      aliceblue: 0xF0F8FF,\n      antiquewhite: 0xFAEBD7,\n      aqua: 0x00FFFF,\n      aquamarine: 0x7FFFD4,\n      azure: 0xF0FFFF,\n      beige: 0xF5F5DC,\n      bisque: 0xFFE4C4,\n      black: 0x000000,\n      blanchedalmond: 0xFFEBCD,\n      blue: 0x0000FF,\n      blueviolet: 0x8A2BE2,\n      brown: 0xA52A2A,\n      burlywood: 0xDEB887,\n      cadetblue: 0x5F9EA0,\n      chartreuse: 0x7FFF00,\n      chocolate: 0xD2691E,\n      coral: 0xFF7F50,\n      cornflowerblue: 0x6495ED,\n      cornsilk: 0xFFF8DC,\n      crimson: 0xDC143C,\n      cyan: 0x00FFFF,\n      darkblue: 0x00008B,\n      darkcyan: 0x008B8B,\n      darkgoldenrod: 0xB8860B,\n      darkgray: 0xA9A9A9,\n      darkgrey: 0xA9A9A9,\n      darkgreen: 0x006400,\n      darkkhaki: 0xBDB76B,\n      darkmagenta: 0x8B008B,\n      darkolivegreen: 0x556B2F,\n      darkorange: 0xFF8C00,\n      darkorchid: 0x9932CC,\n      darkred: 0x8B0000,\n      darksalmon: 0xE9967A,\n      darkseagreen: 0x8FBC8F,\n      darkslateblue: 0x483D8B,\n      darkslategray: 0x2F4F4F,\n      darkslategrey: 0x2F4F4F,\n      darkturquoise: 0x00CED1,\n      darkviolet: 0x9400D3,\n      deeppink: 0xFF1493,\n      deepskyblue: 0x00BFFF,\n      dimgray: 0x696969,\n      dimgrey: 0x696969,\n      dodgerblue: 0x1E90FF,\n      firebrick: 0xB22222,\n      floralwhite: 0xFFFAF0,\n      forestgreen: 0x228B22,\n      fuchsia: 0xFF00FF,\n      gainsboro: 0xDCDCDC,\n      ghostwhite: 0xF8F8FF,\n      gold: 0xFFD700,\n      goldenrod: 0xDAA520,\n      gray: 0x808080,\n      grey: 0x808080,\n      green: 0x008000,\n      greenyellow: 0xADFF2F,\n      honeydew: 0xF0FFF0,\n      hotpink: 0xFF69B4,\n      indianred: 0xCD5C5C,\n      indigo: 0x4B0082,\n      ivory: 0xFFFFF0,\n      khaki: 0xF0E68C,\n      lavender: 0xE6E6FA,\n      lavenderblush: 0xFFF0F5,\n      lawngreen: 0x7CFC00,\n      lemonchiffon: 0xFFFACD,\n      lightblue: 0xADD8E6,\n      lightcoral: 0xF08080,\n      lightcyan: 0xE0FFFF,\n      lightgoldenrodyellow: 0xFAFAD2,\n      lightgray: 0xD3D3D3,\n      lightgrey: 0xD3D3D3,\n      lightgreen: 0x90EE90,\n      lightpink: 0xFFB6C1,\n      lightsalmon: 0xFFA07A,\n      lightseagreen: 0x20B2AA,\n      lightskyblue: 0x87CEFA,\n      lightslategray: 0x778899,\n      lightslategrey: 0x778899,\n      lightsteelblue: 0xB0C4DE,\n      lightyellow: 0xFFFFE0,\n      lime: 0x00FF00,\n      limegreen: 0x32CD32,\n      linen: 0xFAF0E6,\n      magenta: 0xFF00FF,\n      maroon: 0x800000,\n      mediumaquamarine: 0x66CDAA,\n      mediumblue: 0x0000CD,\n      mediumorchid: 0xBA55D3,\n      mediumpurple: 0x9370DB,\n      mediumseagreen: 0x3CB371,\n      mediumslateblue: 0x7B68EE,\n      mediumspringgreen: 0x00FA9A,\n      mediumturquoise: 0x48D1CC,\n      mediumvioletred: 0xC71585,\n      midnightblue: 0x191970,\n      mintcream: 0xF5FFFA,\n      mistyrose: 0xFFE4E1,\n      moccasin: 0xFFE4B5,\n      navajowhite: 0xFFDEAD,\n      navy: 0x000080,\n      oldlace: 0xFDF5E6,\n      olive: 0x808000,\n      olivedrab: 0x6B8E23,\n      orange: 0xFFA500,\n      orangered: 0xFF4500,\n      orchid: 0xDA70D6,\n      palegoldenrod: 0xEEE8AA,\n      palegreen: 0x98FB98,\n      paleturquoise: 0xAFEEEE,\n      palevioletred: 0xDB7093,\n      papayawhip: 0xFFEFD5,\n      peachpuff: 0xFFDAB9,\n      peru: 0xCD853F,\n      pink: 0xFFC0CB,\n      plum: 0xDDA0DD,\n      powderblue: 0xB0E0E6,\n      purple: 0x800080,\n      rebeccapurple: 0x663399,\n      red: 0xFF0000,\n      rosybrown: 0xBC8F8F,\n      royalblue: 0x4169E1,\n      saddlebrown: 0x8B4513,\n      salmon: 0xFA8072,\n      sandybrown: 0xF4A460,\n      seagreen: 0x2E8B57,\n      seashell: 0xFFF5EE,\n      sienna: 0xA0522D,\n      silver: 0xC0C0C0,\n      skyblue: 0x87CEEB,\n      slateblue: 0x6A5ACD,\n      slategray: 0x708090,\n      slategrey: 0x708090,\n      snow: 0xFFFAFA,\n      springgreen: 0x00FF7F,\n      steelblue: 0x4682B4,\n      tan: 0xD2B48C,\n      teal: 0x008080,\n      thistle: 0xD8BFD8,\n      tomato: 0xFF6347,\n      turquoise: 0x40E0D0,\n      violet: 0xEE82EE,\n      wheat: 0xF5DEB3,\n      white: 0xFFFFFF,\n      whitesmoke: 0xF5F5F5,\n      yellow: 0xFFFF00,\n      yellowgreen: 0x9ACD32\n  };\n  for (var name in colorValues) {\n      if (colorValues.hasOwnProperty(name)) {\n          var color = colorValues[name];\n          ColorNames[name] = Math.floor(color / 65536) + \",\" + Math.floor(color / 256 % 256) + \",\" + color % 256;\n      }\n  }\n\n  // Project\n  function registerBackIn(name, amount) {\n      registerEasing([name, function (percentComplete, startValue, endValue) {\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          return Math.pow(percentComplete, 2) * ((amount + 1) * percentComplete - amount) * (endValue - startValue);\n      }]);\n  }\n  function registerBackOut(name, amount) {\n      registerEasing([name, function (percentComplete, startValue, endValue) {\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          return (Math.pow(--percentComplete, 2) * ((amount + 1) * percentComplete + amount) + 1) * (endValue - startValue);\n      }]);\n  }\n  function registerBackInOut(name, amount) {\n      amount *= 1.525;\n      registerEasing([name, function (percentComplete, startValue, endValue) {\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          percentComplete *= 2;\n          return (percentComplete < 1 ? Math.pow(percentComplete, 2) * ((amount + 1) * percentComplete - amount) : Math.pow(percentComplete - 2, 2) * ((amount + 1) * (percentComplete - 2) + amount) + 2) * 0.5 * (endValue - startValue);\n      }]);\n  }\n  registerBackIn(\"easeInBack\", 1.7);\n  registerBackOut(\"easeOutBack\", 1.7);\n  registerBackInOut(\"easeInOutBack\", 1.7);\n  // TODO: Expose these as actions to register custom easings?\n\n  // Project\n  function easeOutBouncePercent(percentComplete) {\n      if (percentComplete < 1 / 2.75) {\n          return 7.5625 * percentComplete * percentComplete;\n      }\n      if (percentComplete < 2 / 2.75) {\n          return 7.5625 * (percentComplete -= 1.5 / 2.75) * percentComplete + 0.75;\n      }\n      if (percentComplete < 2.5 / 2.75) {\n          return 7.5625 * (percentComplete -= 2.25 / 2.75) * percentComplete + 0.9375;\n      }\n      return 7.5625 * (percentComplete -= 2.625 / 2.75) * percentComplete + 0.984375;\n  }\n  function easeInBouncePercent(percentComplete) {\n      return 1 - easeOutBouncePercent(1 - percentComplete);\n  }\n  function easeInBounce(percentComplete, startValue, endValue) {\n      if (percentComplete === 0) {\n          return startValue;\n      }\n      if (percentComplete === 1) {\n          return endValue;\n      }\n      return easeInBouncePercent(percentComplete) * (endValue - startValue);\n  }\n  function easeOutBounce(percentComplete, startValue, endValue) {\n      if (percentComplete === 0) {\n          return startValue;\n      }\n      if (percentComplete === 1) {\n          return endValue;\n      }\n      return easeOutBouncePercent(percentComplete) * (endValue - startValue);\n  }\n  function easeInOutBounce(percentComplete, startValue, endValue) {\n      if (percentComplete === 0) {\n          return startValue;\n      }\n      if (percentComplete === 1) {\n          return endValue;\n      }\n      return (percentComplete < 0.5 ? easeInBouncePercent(percentComplete * 2) * 0.5 : easeOutBouncePercent(percentComplete * 2 - 1) * 0.5 + 0.5) * (endValue - startValue);\n  }\n  registerEasing([\"easeInBounce\", easeInBounce]);\n  registerEasing([\"easeOutBounce\", easeOutBounce]);\n  registerEasing([\"easeInOutBounce\", easeInOutBounce]);\n\n  // Project\n  // Constants\n  var PI2 = Math.PI * 2;\n  function registerElasticIn(name, amplitude, period) {\n      registerEasing([name, function (percentComplete, startValue, endValue) {\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          return -(amplitude * Math.pow(2, 10 * (percentComplete -= 1)) * Math.sin((percentComplete - period / PI2 * Math.asin(1 / amplitude)) * PI2 / period)) * (endValue - startValue);\n      }]);\n  }\n  function registerElasticOut(name, amplitude, period) {\n      registerEasing([name, function (percentComplete, startValue, endValue) {\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          return (amplitude * Math.pow(2, -10 * percentComplete) * Math.sin((percentComplete - period / PI2 * Math.asin(1 / amplitude)) * PI2 / period) + 1) * (endValue - startValue);\n      }]);\n  }\n  function registerElasticInOut(name, amplitude, period) {\n      registerEasing([name, function (percentComplete, startValue, endValue) {\n          if (percentComplete === 0) {\n              return startValue;\n          }\n          if (percentComplete === 1) {\n              return endValue;\n          }\n          var s = period / PI2 * Math.asin(1 / amplitude);\n          percentComplete = percentComplete * 2 - 1;\n          return (percentComplete < 0 ? -0.5 * (amplitude * Math.pow(2, 10 * percentComplete) * Math.sin((percentComplete - s) * PI2 / period)) : amplitude * Math.pow(2, -10 * percentComplete) * Math.sin((percentComplete - s) * PI2 / period) * 0.5 + 1) * (endValue - startValue);\n      }]);\n  }\n  registerElasticIn(\"easeInElastic\", 1, 0.3);\n  registerElasticOut(\"easeOutElastic\", 1, 0.3);\n  registerElasticInOut(\"easeInOutElastic\", 1, 0.3 * 1.5);\n  // TODO: Expose these as actions to register custom easings?\n\n  // Project\n  /**\n   * Easing function that sets to the specified value immediately after the\n   * animation starts.\n   */\n  function atStart(percentComplete, startValue, endValue) {\n    return percentComplete === 0 ? startValue : endValue;\n  }\n  /**\n   * Easing function that sets to the specified value while the animation is\n   * running.\n   */\n  function during(percentComplete, startValue, endValue) {\n    return percentComplete === 0 || percentComplete === 1 ? startValue : endValue;\n  }\n  /**\n   * Easing function that sets to the specified value when the animation ends.\n   */\n  function atEnd(percentComplete, startValue, endValue) {\n    return percentComplete === 1 ? endValue : startValue;\n  }\n  registerEasing([\"at-start\", atStart]);\n  registerEasing([\"during\", during]);\n  registerEasing([\"at-end\", atEnd]);\n\n  // Project\n  /**\n   * Get/set the inner/outer dimension.\n   */\n  function getDimension(name, wantInner) {\n      return function (element, propertyValue) {\n          if (propertyValue === undefined) {\n              return augmentDimension(element, name, wantInner) + \"px\";\n          }\n          setPropertyValue(element, name, parseFloat(propertyValue) - augmentDimension(element, name, wantInner) + \"px\");\n      };\n  }\n  registerNormalization([\"Element\", \"innerWidth\", getDimension(\"width\", true)]);\n  registerNormalization([\"Element\", \"innerHeight\", getDimension(\"height\", true)]);\n  registerNormalization([\"Element\", \"outerWidth\", getDimension(\"width\", false)]);\n  registerNormalization([\"Element\", \"outerHeight\", getDimension(\"height\", false)]);\n\n  // Project\n  // Constants\n  var inlineRx = /^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|let|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i,\n      listItemRx = /^(li)$/i,\n      tableRowRx = /^(tr)$/i,\n      tableRx = /^(table)$/i,\n      tableRowGroupRx = /^(tbody)$/i;\n  function display(element, propertyValue) {\n      var style = element.style;\n      if (propertyValue === undefined) {\n          return computePropertyValue(element, \"display\");\n      }\n      if (propertyValue === \"auto\") {\n          var nodeName = element && element.nodeName,\n              data = Data(element);\n          if (inlineRx.test(nodeName)) {\n              propertyValue = \"inline\";\n          } else if (listItemRx.test(nodeName)) {\n              propertyValue = \"list-item\";\n          } else if (tableRowRx.test(nodeName)) {\n              propertyValue = \"table-row\";\n          } else if (tableRx.test(nodeName)) {\n              propertyValue = \"table\";\n          } else if (tableRowGroupRx.test(nodeName)) {\n              propertyValue = \"table-row-group\";\n          } else {\n              // Default to \"block\" when no match is found.\n              propertyValue = \"block\";\n          }\n          // IMPORTANT: We need to do this as getPropertyValue bypasses the\n          // Normalisation when it exists in the cache.\n          data.cache[\"display\"] = propertyValue;\n      }\n      style.display = propertyValue;\n  }\n  registerNormalization([\"Element\", \"display\", display]);\n\n  // Project\n  function clientWidth(element, propertyValue) {\n      if (propertyValue == null) {\n          return element.clientWidth + \"px\";\n      }\n  }\n  function scrollWidth(element, propertyValue) {\n      if (propertyValue == null) {\n          return element.scrollWidth + \"px\";\n      }\n  }\n  function clientHeight(element, propertyValue) {\n      if (propertyValue == null) {\n          return element.clientHeight + \"px\";\n      }\n  }\n  function scrollHeight(element, propertyValue) {\n      if (propertyValue == null) {\n          return element.scrollHeight + \"px\";\n      }\n  }\n  function scroll(direction, end) {\n      return function (element, propertyValue) {\n          if (propertyValue == null) {\n              // Make sure we have these values cached.\n              getPropertyValue(element, \"client\" + direction, null, true);\n              getPropertyValue(element, \"scroll\" + direction, null, true);\n              return element[\"scroll\" + end] + \"px\";\n          }\n          var value = parseFloat(propertyValue),\n              unit = propertyValue.replace(String(value), \"\");\n          switch (unit) {\n              case \"\":\n              case \"px\":\n                  element[\"scroll\" + end] = value;\n                  break;\n              case \"%\":\n                  var client = parseFloat(getPropertyValue(element, \"client\" + direction)),\n                      scrollValue = parseFloat(getPropertyValue(element, \"scroll\" + direction));\n                  element[\"scroll\" + end] = Math.max(0, scrollValue - client) * value / 100;\n                  break;\n          }\n      };\n  }\n  registerNormalization([\"HTMLElement\", \"scroll\", scroll(\"Height\", \"Top\"), false]);\n  registerNormalization([\"HTMLElement\", \"scrollTop\", scroll(\"Height\", \"Top\"), false]);\n  registerNormalization([\"HTMLElement\", \"scrollLeft\", scroll(\"Width\", \"Left\"), false]);\n  registerNormalization([\"HTMLElement\", \"scrollWidth\", scrollWidth]);\n  registerNormalization([\"HTMLElement\", \"clientWidth\", clientWidth]);\n  registerNormalization([\"HTMLElement\", \"scrollHeight\", scrollHeight]);\n  registerNormalization([\"HTMLElement\", \"clientHeight\", clientHeight]);\n\n  // Project\n  /**\n   * An RegExp pattern for the following list of css words using\n   * http://kemio.com.ar/tools/lst-trie-re.php to generate:\n   *\n   * blockSize\n   * borderBottomLeftRadius\n   * borderBottomRightRadius\n   * borderBottomWidth\n   * borderImageOutset\n   * borderImageWidth\n   * borderLeftWidth\n   * borderRadius\n   * borderRightWidth\n   * borderSpacing\n   * borderTopLeftRadius\n   * borderTopRightRadius\n   * borderTopWidth\n   * borderWidth\n   * bottom\n   * columnGap\n   * columnRuleWidth\n   * columnWidth\n   * flexBasis\n   * fontSize\n   * gridColumnGap\n   * gridGap\n   * gridRowGap\n   * height\n   * inlineSize\n   * left\n   * letterSpacing\n   * margin\n   * marginBottom\n   * marginLeft\n   * marginRight\n   * marginTop\n   * maxBlockSize\n   * maxHeight\n   * maxInlineSize\n   * maxWidth\n   * minBlockSize\n   * minHeight\n   * minInlineSize\n   * minWidth\n   * objectPosition\n   * outlineOffset\n   * outlineWidth\n   * padding\n   * paddingBottom\n   * paddingLeft\n   * paddingRight\n   * paddingTop\n   * perspective\n   * right\n   * shapeMargin\n   * strokeDashoffset\n   * strokeWidth\n   * textIndent\n   * top\n   * transformOrigin\n   * width\n   * wordSpacing\n   */\n  // tslint:disable-next-line:max-line-length\n  var rxAddPx = /^(b(lockSize|o(rder(Bottom(LeftRadius|RightRadius|Width)|Image(Outset|Width)|LeftWidth|R(adius|ightWidth)|Spacing|Top(LeftRadius|RightRadius|Width)|Width)|ttom))|column(Gap|RuleWidth|Width)|f(lexBasis|ontSize)|grid(ColumnGap|Gap|RowGap)|height|inlineSize|le(ft|tterSpacing)|m(a(rgin(Bottom|Left|Right|Top)|x(BlockSize|Height|InlineSize|Width))|in(BlockSize|Height|InlineSize|Width))|o(bjectPosition|utline(Offset|Width))|p(adding(Bottom|Left|Right|Top)|erspective)|right|s(hapeMargin|troke(Dashoffset|Width))|t(extIndent|op|ransformOrigin)|w(idth|ordSpacing))$/;\n  /**\n   * Return a Normalisation that can be used to set / get a prefixed style\n   * property.\n   */\n  function getSetPrefixed(propertyName, unprefixed) {\n      return function (element, propertyValue) {\n          if (propertyValue === undefined) {\n              return computePropertyValue(element, propertyName) || computePropertyValue(element, unprefixed);\n          }\n          element.style[propertyName] = element.style[unprefixed] = propertyValue;\n      };\n  }\n  /**\n   * Return a Normalisation that can be used to set / get a style property.\n   */\n  function getSetStyle(propertyName) {\n      return function (element, propertyValue) {\n          if (propertyValue === undefined) {\n              return computePropertyValue(element, propertyName);\n          }\n          element.style[propertyName] = propertyValue;\n      };\n  }\n  /**\n   * Vendor prefixes. Chrome / Safari, Firefox, IE / Edge, Opera.\n   */\n  var rxVendors = /^(webkit|moz|ms|o)[A-Z]/,\n      prefixElement = State.prefixElement;\n  if (prefixElement) {\n      for (var propertyName in prefixElement.style) {\n          if (rxVendors.test(propertyName)) {\n              var unprefixed = propertyName.replace(/^[a-z]+([A-Z])/, function ($, letter) {\n                  return letter.toLowerCase();\n              });\n              {\n                  var addUnit = rxAddPx.test(unprefixed) ? \"px\" : undefined;\n                  registerNormalization([\"Element\", unprefixed, getSetPrefixed(propertyName, unprefixed), addUnit]);\n              }\n          } else if (!hasNormalization([\"Element\", propertyName])) {\n              var _addUnit = rxAddPx.test(propertyName) ? \"px\" : undefined;\n              registerNormalization([\"Element\", propertyName, getSetStyle(propertyName), _addUnit]);\n          }\n      }\n  }\n\n  // Project\n  /**\n   * Get/set an attribute.\n   */\n  function getAttribute(name) {\n      return function (element, propertyValue) {\n          if (propertyValue === undefined) {\n              return element.getAttribute(name);\n          }\n          element.setAttribute(name, propertyValue);\n      };\n  }\n  var base = document.createElement(\"div\"),\n      rxSubtype = /^SVG(.*)Element$/,\n      rxElement = /Element$/;\n  Object.getOwnPropertyNames(window).forEach(function (property) {\n      var subtype = rxSubtype.exec(property);\n      if (subtype && subtype[1] !== \"SVG\") {\n          // Don't do SVGSVGElement.\n          try {\n              var element = subtype[1] ? document.createElementNS(\"http://www.w3.org/2000/svg\", (subtype[1] || \"svg\").toLowerCase()) : document.createElement(\"svg\");\n              // tslint:disable-next-line:forin\n              for (var attribute in element) {\n                  // Although this isn't a tween without prototypes, we do\n                  // want to get hold of all attributes and not just own ones.\n                  var value = element[attribute];\n                  if (isString(attribute) && !(attribute[0] === \"o\" && attribute[1] === \"n\") && attribute !== attribute.toUpperCase() && !rxElement.test(attribute) && !(attribute in base) && !isFunction(value)) {\n                      // TODO: Should this all be set on the generic SVGElement, it would save space and time, but not as powerful\n                      registerNormalization([property, attribute, getAttribute(attribute)]);\n                  }\n              }\n          } catch (e) {\n              console.error(\"VelocityJS: Error when trying to identify SVG attributes on \" + property + \".\", e);\n          }\n      }\n  });\n\n  // Project\n  /**\n   * Get/set the width or height.\n   */\n  function getDimension$1(name) {\n      return function (element, propertyValue) {\n          if (propertyValue === undefined) {\n              // Firefox throws an error if .getBBox() is called on an SVG that isn't attached to the DOM.\n              try {\n                  return element.getBBox()[name] + \"px\";\n              } catch (e) {\n                  return \"0px\";\n              }\n          }\n          element.setAttribute(name, propertyValue);\n      };\n  }\n  registerNormalization([\"SVGElement\", \"width\", getDimension$1(\"width\")]);\n  registerNormalization([\"SVGElement\", \"height\", getDimension$1(\"height\")]);\n\n  // Project\n  /**\n   * A fake normalization used to allow the \"tween\" property easy access.\n   */\n  function getSetTween(element, propertyValue) {\n      if (propertyValue === undefined) {\n          return \"\";\n      }\n  }\n  registerNormalization([\"Element\", \"tween\", getSetTween]);\n\n  // Automatically generated\n  var VERSION = \"2.0.6\";\n\n  // Project\n  var Velocity$$1 = Velocity$1;\n  /**\n   * These parts of Velocity absolutely must be included, even if they're unused!\n   */\n  var VelocityStatic;\n  (function (VelocityStatic) {\n      /**\n       * Actions cannot be replaced if they are internal (hasOwnProperty is false\n       * but they still exist). Otherwise they can be replaced by users.\n       *\n       * All external method calls should be using actions rather than sub-calls\n       * of Velocity itself.\n       */\n      VelocityStatic.Actions = Actions;\n      /**\n       * Our known easing functions.\n       */\n      VelocityStatic.Easings = Easings;\n      /**\n       * The currently registered sequences.\n       */\n      VelocityStatic.Sequences = SequencesObject;\n      /**\n       * Current internal state of Velocity.\n       */\n      VelocityStatic.State = State; // tslint:disable-line:no-shadowed-variable\n      /**\n       * Velocity option defaults, which can be overriden by the user.\n       */\n      VelocityStatic.defaults = defaults$1;\n      /**\n       * Used to patch any object to allow Velocity chaining. In order to chain an\n       * object must either be treatable as an array - with a <code>.length</code>\n       * property, and each member a Node, or a Node directly.\n       *\n       * By default Velocity will try to patch <code>window</code>,\n       * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n       * Nodes or lists of Nodes.\n       */\n      VelocityStatic.patch = patch;\n      /**\n       * Set to true, 1 or 2 (most verbose) to output debug info to console.\n       */\n      VelocityStatic.debug = false;\n      /**\n       * In mock mode, all animations are forced to complete immediately upon the\n       * next rAF tick. If there are further animations queued then they will each\n       * take one single frame in turn. Loops and repeats will be disabled while\n       * <code>mock = true</code>.\n       */\n      VelocityStatic.mock = false;\n      /**\n       * Save our version number somewhere visible.\n       */\n      VelocityStatic.version = VERSION;\n      /**\n       * Added as a fallback for \"import {Velocity} from 'velocity-animate';\".\n       */\n      VelocityStatic.Velocity = Velocity$1; // tslint:disable-line:no-shadowed-variable\n  })(VelocityStatic || (VelocityStatic = {}));\n  /* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */\n  var IE = function () {\n      if (document.documentMode) {\n          return document.documentMode;\n      } else {\n          for (var i = 7; i > 4; i--) {\n              var div = document.createElement(\"div\");\n              div.innerHTML = \"<!\" + \"--\" + \"[if IE \" + i + \"]><span></span><![endif]-->\";\n              if (div.getElementsByTagName(\"span\").length) {\n                  div = null;\n                  return i;\n              }\n          }\n      }\n      return undefined;\n  }();\n  /******************\n   Unsupported\n   ******************/\n  if (IE <= 8) {\n      throw new Error(\"VelocityJS cannot run on Internet Explorer 8 or earlier\");\n  }\n  /******************\n   Frameworks\n   ******************/\n  if (window) {\n      /*\n       * Both jQuery and Zepto allow their $.fn object to be extended to allow\n       * wrapped elements to be subjected to plugin calls. If either framework is\n       * loaded, register a \"velocity\" extension pointing to Velocity's core\n       * animate() method. Velocity also registers itself onto a global container\n       * (window.jQuery || window.Zepto || window) so that certain features are\n       * accessible beyond just a per-element scope. Accordingly, Velocity can\n       * both act on wrapped DOM elements and stand alone for targeting raw DOM\n       * elements.\n       */\n      var jQuery = window.jQuery,\n          Zepto = window.Zepto;\n      patch(window, true);\n      patch(Element && Element.prototype);\n      patch(NodeList && NodeList.prototype);\n      patch(HTMLCollection && HTMLCollection.prototype);\n      patch(jQuery, true);\n      patch(jQuery && jQuery.fn);\n      patch(Zepto, true);\n      patch(Zepto && Zepto.fn);\n  }\n  // Make sure that the values within Velocity are read-only and upatchable.\n\n  var _loop = function _loop(property) {\n      if (VelocityStatic.hasOwnProperty(property)) {\n          switch (typeof property === \"undefined\" ? \"undefined\" : _typeof(property)) {\n              case \"number\":\n              case \"boolean\":\n                  defineProperty$1(Velocity$$1, property, {\n                      get: function get$$1() {\n                          return VelocityStatic[property];\n                      },\n                      set: function set$$1(value) {\n                          VelocityStatic[property] = value;\n                      }\n                  }, true);\n                  break;\n              default:\n                  defineProperty$1(Velocity$$1, property, VelocityStatic[property], true);\n                  break;\n          }\n      }\n  };\n\n  for (var property in VelocityStatic) {\n      _loop(property);\n  }\n  Object.freeze(Velocity$$1);\n\n  // Project\n  var rxPercents = /(\\d*\\.\\d+|\\d+\\.?|from|to)/g;\n  function expandSequence(animation, sequence) {\n      var tweens = animation.tweens = Object.create(null),\n          element = animation.element;\n      for (var propertyName in sequence.tweens) {\n          if (sequence.tweens.hasOwnProperty(propertyName)) {\n              var fn = getNormalization(element, propertyName);\n              if (!fn && propertyName !== \"tween\") {\n                  if (Velocity$$1.debug) {\n                      console.log(\"Skipping [\" + propertyName + \"] due to a lack of browser support.\");\n                  }\n                  continue;\n              }\n              tweens[propertyName] = {\n                  fn: fn,\n                  sequence: sequence.tweens[propertyName]\n              };\n          }\n      }\n  }\n  /**\n   * Used to register a sequence. This should never be called by users\n   * directly, instead it should be called via an action:<br/>\n   * <code>Velocity(\"registerSequence\", \"\"name\", VelocitySequence);</code>\n   */\n  function registerSequence(args) {\n      if (isPlainObject(args[0])) {\n          for (var name in args[0]) {\n              if (args[0].hasOwnProperty(name)) {\n                  registerSequence([name, args[0][name]]);\n              }\n          }\n      } else if (isString(args[0])) {\n          var _name = args[0],\n              sequence = args[1];\n          if (!isString(_name)) {\n              console.warn(\"VelocityJS: Trying to set 'registerSequence' name to an invalid value:\", _name);\n          } else if (!isPlainObject(sequence)) {\n              console.warn(\"VelocityJS: Trying to set 'registerSequence' sequence to an invalid value:\", _name, sequence);\n          } else {\n              if (SequencesObject[_name]) {\n                  console.warn(\"VelocityJS: Replacing named sequence:\", _name);\n              }\n              var percents = {},\n                  steps = new Array(100),\n                  properties = [],\n                  sequenceList = SequencesObject[_name] = {},\n                  duration = validateDuration(sequence.duration);\n              sequenceList.tweens = {};\n              if (isNumber(duration)) {\n                  sequenceList.duration = duration;\n              }\n              for (var part in sequence) {\n                  if (sequence.hasOwnProperty(part)) {\n                      var keys = String(part).match(rxPercents);\n                      if (keys) {\n                          var _iteratorNormalCompletion = true;\n                          var _didIteratorError = false;\n                          var _iteratorError = undefined;\n\n                          try {\n                              for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                                  var key = _step.value;\n\n                                  var percent = key === \"from\" ? 0 : key === \"to\" ? 100 : parseFloat(key);\n                                  if (percent < 0 || percent > 100) {\n                                      console.warn(\"VelocityJS: Trying to use an invalid value as a percentage (0 <= n <= 100):\", _name, percent);\n                                  } else if (isNaN(percent)) {\n                                      console.warn(\"VelocityJS: Trying to use an invalid number as a percentage:\", _name, part, key);\n                                  } else {\n                                      if (!percents[String(percent)]) {\n                                          percents[String(percent)] = [];\n                                      }\n                                      percents[String(percent)].push(part);\n                                      for (var property in sequence[part]) {\n                                          if (!properties.includes(property)) {\n                                              properties.push(property);\n                                          }\n                                      }\n                                  }\n                              }\n                          } catch (err) {\n                              _didIteratorError = true;\n                              _iteratorError = err;\n                          } finally {\n                              try {\n                                  if (!_iteratorNormalCompletion && _iterator.return) {\n                                      _iterator.return();\n                                  }\n                              } finally {\n                                  if (_didIteratorError) {\n                                      throw _iteratorError;\n                                  }\n                              }\n                          }\n                      }\n                  }\n              }\n              var orderedPercents = Object.keys(percents).sort(function (a, b) {\n                  var a1 = parseFloat(a),\n                      b1 = parseFloat(b);\n                  return a1 > b1 ? 1 : a1 < b1 ? -1 : 0;\n              });\n              orderedPercents.forEach(function (key) {\n                  steps.push.apply(percents[key]);\n              });\n              var _iteratorNormalCompletion2 = true;\n              var _didIteratorError2 = false;\n              var _iteratorError2 = undefined;\n\n              try {\n                  for (var _iterator2 = properties[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                      var _property = _step2.value;\n\n                      var parts = [],\n                          propertyName = camelCase(_property);\n                      var _iteratorNormalCompletion3 = true;\n                      var _didIteratorError3 = false;\n                      var _iteratorError3 = undefined;\n\n                      try {\n                          for (var _iterator3 = orderedPercents[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                              var _key = _step3.value;\n                              var _iteratorNormalCompletion6 = true;\n                              var _didIteratorError6 = false;\n                              var _iteratorError6 = undefined;\n\n                              try {\n                                  for (var _iterator6 = percents[_key][Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                                      var _value = _step6.value;\n\n                                      var stepProperties = sequence[_value];\n                                      if (stepProperties[propertyName]) {\n                                          parts.push(isString(stepProperties[propertyName]) ? stepProperties[propertyName] : stepProperties[propertyName][0]);\n                                      }\n                                  }\n                              } catch (err) {\n                                  _didIteratorError6 = true;\n                                  _iteratorError6 = err;\n                              } finally {\n                                  try {\n                                      if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                                          _iterator6.return();\n                                      }\n                                  } finally {\n                                      if (_didIteratorError6) {\n                                          throw _iteratorError6;\n                                      }\n                                  }\n                              }\n                          }\n                      } catch (err) {\n                          _didIteratorError3 = true;\n                          _iteratorError3 = err;\n                      } finally {\n                          try {\n                              if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                                  _iterator3.return();\n                              }\n                          } finally {\n                              if (_didIteratorError3) {\n                                  throw _iteratorError3;\n                              }\n                          }\n                      }\n\n                      if (parts.length) {\n                          var realSequence = findPattern(parts, propertyName);\n                          var index = 0;\n                          if (realSequence) {\n                              var _iteratorNormalCompletion4 = true;\n                              var _didIteratorError4 = false;\n                              var _iteratorError4 = undefined;\n\n                              try {\n                                  for (var _iterator4 = orderedPercents[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                                      var _key2 = _step4.value;\n                                      var _iteratorNormalCompletion5 = true;\n                                      var _didIteratorError5 = false;\n                                      var _iteratorError5 = undefined;\n\n                                      try {\n                                          for (var _iterator5 = percents[_key2][Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                                              var value = _step5.value;\n\n                                              var originalProperty = sequence[value][propertyName];\n                                              if (originalProperty) {\n                                                  if (Array.isArray(originalProperty) && originalProperty.length > 1 && (isString(originalProperty[1]) || Array.isArray(originalProperty[1]))) {\n                                                      realSequence[index].easing = validateEasing(originalProperty[1], sequenceList.duration || DEFAULT_DURATION);\n                                                  }\n                                                  realSequence[index++].percent = parseFloat(_key2) / 100;\n                                              }\n                                          }\n                                      } catch (err) {\n                                          _didIteratorError5 = true;\n                                          _iteratorError5 = err;\n                                      } finally {\n                                          try {\n                                              if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                                                  _iterator5.return();\n                                              }\n                                          } finally {\n                                              if (_didIteratorError5) {\n                                                  throw _iteratorError5;\n                                              }\n                                          }\n                                      }\n                                  }\n                              } catch (err) {\n                                  _didIteratorError4 = true;\n                                  _iteratorError4 = err;\n                              } finally {\n                                  try {\n                                      if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                                          _iterator4.return();\n                                      }\n                                  } finally {\n                                      if (_didIteratorError4) {\n                                          throw _iteratorError4;\n                                      }\n                                  }\n                              }\n\n                              sequenceList.tweens[propertyName] = realSequence;\n                          }\n                      }\n                  }\n              } catch (err) {\n                  _didIteratorError2 = true;\n                  _iteratorError2 = err;\n              } finally {\n                  try {\n                      if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                          _iterator2.return();\n                      }\n                  } finally {\n                      if (_didIteratorError2) {\n                          throw _iteratorError2;\n                      }\n                  }\n              }\n          }\n      }\n  }\n  registerAction([\"registerSequence\", registerSequence], true);\n\n  // Project\n  var globalPromise = void 0;\n  try {\n      globalPromise = Promise;\n  } catch ( /**/_a) {/**/}\n  var noPromiseOption = \", if that is deliberate then pass `promiseRejectEmpty:false` as an option\";\n  /**\n   * Patch a VelocityResult with a Promise.\n   */\n  function patchPromise(promiseObject, result) {\n      defineProperty$1(result, \"promise\", promiseObject);\n      defineProperty$1(result, \"then\", promiseObject.then.bind(promiseObject));\n      defineProperty$1(result, \"catch\", promiseObject.catch.bind(promiseObject));\n      if (promiseObject.finally) {\n          // Semi-standard\n          defineProperty$1(result, \"finally\", promiseObject.finally.bind(promiseObject));\n      }\n  }\n  /* tslint:enable:max-line-length */\n  function Velocity$1() {\n      var\n      /**\n       * A shortcut to the default options.\n       */\n      defaults$$1 = defaults$1,\n\n      /**\n       * Cache of the first argument - this is used often enough to be saved.\n       */\n      args0 = arguments.length <= 0 ? undefined : arguments[0],\n\n      /**\n       * To allow for expressive CoffeeScript code, Velocity supports an\n       * alternative syntax in which \"elements\" (or \"e\"), \"properties\" (or\n       * \"p\"), and \"options\" (or \"o\") objects are defined on a container\n       * object that's passed in as Velocity's sole argument.\n       *\n       * Note: Some browsers automatically populate arguments with a\n       * \"properties\" object. We detect it by checking for its default\n       * \"names\" property.\n       */\n      // TODO: Confirm which browsers - if <=IE8 the we can drop completely\n      syntacticSugar = isPlainObject(args0) && (args0.p || isPlainObject(args0.properties) && !args0.properties.names || isString(args0.properties));\n      var\n      /**\n       *  When Velocity is called via the utility function (Velocity()),\n       * elements are explicitly passed in as the first parameter. Thus,\n       * argument positioning varies.\n       */\n      argumentIndex = 0,\n\n      /**\n       * The list of elements, extended with Promise and Velocity.\n       */\n      elements = void 0,\n\n      /**\n       * The properties being animated. This can be a string, in which case it\n       * is either a function for these elements, or it is a \"named\" animation\n       * sequence to use instead. Named sequences start with either \"callout.\"\n       * or \"transition.\". When used as a callout the values will be reset\n       * after finishing. When used as a transtition then there is no special\n       * handling after finishing.\n       */\n      propertiesMap = void 0,\n\n      /**\n       * Options supplied, this will be mapped and validated into\n       * <code>options</code>.\n       */\n      optionsMap = void 0,\n\n      /**\n       * If called via a chain then this contains the <b>last</b> calls\n       * animations. If this does not have a value then any access to the\n       * element's animations needs to be to the currently-running ones.\n       */\n      animations = void 0,\n\n      /**\n       * The promise that is returned.\n       */\n      promise = void 0,\n\n      // Used when the animation is finished\n      resolver = void 0,\n\n      // Used when there was an issue with one or more of the Velocity arguments\n      rejecter = void 0;\n      //console.log(`Velocity`, args)\n      // First get the elements, and the animations connected to the last call if\n      // this is chained.\n      // TODO: Clean this up a bit\n      // TODO: Throw error if the chain is called with elements as the first argument. isVelocityResult(this) && ( (isNode(arg0) || isWrapped(arg0)) && arg0 == this)\n      if (isNode(this)) {\n          // This is from a chain such as document.getElementById(\"\").velocity(...)\n          elements = [this];\n      } else if (isWrapped(this)) {\n          // This might be a chain from something else, but if chained from a\n          // previous Velocity() call then grab the animations it's related to.\n          elements = cloneArray(this);\n          if (isVelocityResult(this)) {\n              animations = this.velocity.animations;\n          }\n      } else if (syntacticSugar) {\n          elements = cloneArray(args0.elements || args0.e);\n          argumentIndex++;\n      } else if (isNode(args0)) {\n          elements = cloneArray([args0]);\n          argumentIndex++;\n      } else if (isWrapped(args0)) {\n          elements = cloneArray(args0);\n          argumentIndex++;\n      }\n      // Allow elements to be chained.\n      if (elements) {\n          defineProperty$1(elements, \"velocity\", Velocity$1.bind(elements));\n          if (animations) {\n              defineProperty$1(elements.velocity, \"animations\", animations);\n          }\n      }\n      // Next get the propertiesMap and options.\n      if (syntacticSugar) {\n          propertiesMap = getValue(args0.properties, args0.p);\n      } else {\n          var _ref;\n\n          // TODO: Should be possible to call Velocity(\"pauseAll\") - currently not possible\n          propertiesMap = (_ref = argumentIndex++, arguments.length <= _ref ? undefined : arguments[_ref]);\n      }\n      // Get any options map passed in as arguments first, expand any direct\n      // options if possible.\n      var isReverse = propertiesMap === \"reverse\",\n          isAction = !isReverse && isString(propertiesMap),\n          maybeSequence = isAction && SequencesObject[propertiesMap],\n          opts = syntacticSugar ? getValue(args0.options, args0.o) : arguments.length <= argumentIndex ? undefined : arguments[argumentIndex];\n      if (isPlainObject(opts)) {\n          optionsMap = opts;\n      }\n      // Create the promise if supported and wanted.\n      if (globalPromise && getValue(optionsMap && optionsMap.promise, defaults$$1.promise)) {\n          promise = new globalPromise(function (resolve, reject) {\n              rejecter = reject;\n              // IMPORTANT:\n              // If a resolver tries to run on a Promise then it will wait until\n              // that Promise resolves - but in this case we're running on our own\n              // Promise, so need to make sure it's not seen as one. Removing\n              // these values for the duration of the resolve.\n              // Due to being an async call, they should be back to \"normal\"\n              // before the <code>.then()</code> function gets called.\n              resolver = function resolver(result) {\n                  if (isVelocityResult(result) && result.promise) {\n                      delete result.then;\n                      delete result.catch;\n                      delete result.finally;\n                      resolve(result);\n                      patchPromise(result.promise, result);\n                  } else {\n                      resolve(result);\n                  }\n              };\n          });\n          if (elements) {\n              patchPromise(promise, elements);\n          }\n      }\n      if (promise) {\n          var optionPromiseRejectEmpty = optionsMap && optionsMap.promiseRejectEmpty,\n              promiseRejectEmpty = getValue(optionPromiseRejectEmpty, defaults$$1.promiseRejectEmpty);\n          if (!elements && !isAction) {\n              if (promiseRejectEmpty) {\n                  rejecter(\"Velocity: No elements supplied\" + (isBoolean(optionPromiseRejectEmpty) ? \"\" : noPromiseOption) + \". Aborting.\");\n              } else {\n                  resolver();\n              }\n          } else if (!propertiesMap) {\n              if (promiseRejectEmpty) {\n                  rejecter(\"Velocity: No properties supplied\" + (isBoolean(optionPromiseRejectEmpty) ? \"\" : noPromiseOption) + \". Aborting.\");\n              } else {\n                  resolver();\n              }\n          }\n      }\n      if (!elements && !isAction || !propertiesMap) {\n          return promise;\n      }\n      // NOTE: Can't use isAction here due to type inference - there are callbacks\n      // between so the type isn't considered safe.\n      if (isAction) {\n          var actionArgs = [],\n              promiseHandler = promise && {\n              _promise: promise,\n              _resolver: resolver,\n              _rejecter: rejecter\n          };\n          while (argumentIndex < arguments.length) {\n              var _ref2;\n\n              actionArgs.push((_ref2 = argumentIndex++, arguments.length <= _ref2 ? undefined : arguments[_ref2]));\n          }\n          // Velocity's behavior is categorized into \"actions\". If a string is\n          // passed in instead of a propertiesMap then that will call a function\n          // to do something special to the animation linked.\n          // There is one special case - \"reverse\" - which is handled differently,\n          // by being stored on the animation and then expanded when the animation\n          // starts.\n          var action = propertiesMap.replace(/\\..*$/, \"\"),\n              callback = Actions[action];\n          if (callback) {\n              var result = callback(actionArgs, elements, promiseHandler, propertiesMap);\n              if (result !== undefined) {\n                  return result;\n              }\n              return elements || promise;\n          } else if (!maybeSequence) {\n              console.error(\"VelocityJS: First argument (\" + propertiesMap + \") was not a property map, a known action, or a registered redirect. Aborting.\");\n              return;\n          }\n      }\n      var hasValidDuration = void 0;\n      if (isPlainObject(propertiesMap) || isReverse || maybeSequence) {\n          /**\n           * The options for this set of animations.\n           */\n          var options = {};\n          var isSync = defaults$$1.sync;\n          // Private options first - set as non-enumerable, and starting with an\n          // underscore so we can filter them out.\n          if (promise) {\n              defineProperty$1(options, \"_promise\", promise);\n              defineProperty$1(options, \"_rejecter\", rejecter);\n              defineProperty$1(options, \"_resolver\", resolver);\n          }\n          defineProperty$1(options, \"_ready\", 0);\n          defineProperty$1(options, \"_started\", 0);\n          defineProperty$1(options, \"_completed\", 0);\n          defineProperty$1(options, \"_total\", 0);\n          // Now check the optionsMap\n          if (isPlainObject(optionsMap)) {\n              var validDuration = validateDuration(optionsMap.duration);\n              hasValidDuration = validDuration !== undefined;\n              options.duration = getValue(validDuration, defaults$$1.duration);\n              options.delay = getValue(validateDelay(optionsMap.delay), defaults$$1.delay);\n              // Need the extra fallback here in case it supplies an invalid\n              // easing that we need to overrride with the default.\n              options.easing = validateEasing(getValue(optionsMap.easing, defaults$$1.easing), options.duration) || validateEasing(defaults$$1.easing, options.duration);\n              options.loop = getValue(validateLoop(optionsMap.loop), defaults$$1.loop);\n              options.repeat = options.repeatAgain = getValue(validateRepeat(optionsMap.repeat), defaults$$1.repeat);\n              if (optionsMap.speed != null) {\n                  options.speed = getValue(validateSpeed(optionsMap.speed), 1);\n              }\n              if (isBoolean(optionsMap.promise)) {\n                  options.promise = optionsMap.promise;\n              }\n              options.queue = getValue(validateQueue(optionsMap.queue), defaults$$1.queue);\n              if (optionsMap.mobileHA && !State.isGingerbread) {\n                  /* When set to true, and if this is a mobile device, mobileHA automatically enables hardware acceleration (via a null transform hack)\n                   on animating elements. HA is removed from the element at the completion of its animation. */\n                  /* Note: Android Gingerbread doesn't support HA. If a null transform hack (mobileHA) is in fact set, it will prevent other tranform subproperties from taking effect. */\n                  /* Note: You can read more about the use of mobileHA in Velocity's documentation: velocity-animate/#mobileHA. */\n                  options.mobileHA = true;\n              }\n              if (optionsMap.drag === true) {\n                  options.drag = true;\n              }\n              if (isNumber(optionsMap.stagger) || isFunction(optionsMap.stagger)) {\n                  options.stagger = optionsMap.stagger;\n              }\n              if (!isReverse) {\n                  if (optionsMap[\"display\"] != null) {\n                      propertiesMap.display = optionsMap[\"display\"];\n                      console.error(\"Deprecated \\\"options.display\\\" used, this is now a property:\", optionsMap[\"display\"]);\n                  }\n                  if (optionsMap[\"visibility\"] != null) {\n                      propertiesMap.visibility = optionsMap[\"visibility\"];\n                      console.error(\"Deprecated \\\"options.visibility\\\" used, this is now a property:\", optionsMap[\"visibility\"]);\n                  }\n              }\n              // TODO: Allow functional options for different options per element\n              var optionsBegin = validateBegin(optionsMap.begin),\n                  optionsComplete = validateComplete(optionsMap.complete),\n                  optionsProgress = validateProgress(optionsMap.progress),\n                  optionsSync = validateSync(optionsMap.sync);\n              if (optionsBegin != null) {\n                  options.begin = optionsBegin;\n              }\n              if (optionsComplete != null) {\n                  options.complete = optionsComplete;\n              }\n              if (optionsProgress != null) {\n                  options.progress = optionsProgress;\n              }\n              if (optionsSync != null) {\n                  isSync = optionsSync;\n              }\n          } else if (!syntacticSugar) {\n              // Expand any direct options if possible.\n              var offset = 0;\n              options.duration = validateDuration(arguments.length <= argumentIndex ? undefined : arguments[argumentIndex], true);\n              if (options.duration === undefined) {\n                  options.duration = defaults$$1.duration;\n              } else {\n                  hasValidDuration = true;\n                  offset++;\n              }\n              if (!isFunction(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset])) {\n                  // Despite coming before Complete, we can't pass a fn easing\n                  var easing = validateEasing(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset], getValue(options && validateDuration(options.duration), defaults$$1.duration), true);\n                  if (easing !== undefined) {\n                      offset++;\n                      options.easing = easing;\n                  }\n              }\n              var complete = validateComplete(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset], true);\n              if (complete !== undefined) {\n                  options.complete = complete;\n              }\n              options.delay = defaults$$1.delay;\n              options.loop = defaults$$1.loop;\n              options.repeat = options.repeatAgain = defaults$$1.repeat;\n          }\n          if (isReverse && options.queue === false) {\n              throw new Error(\"VelocityJS: Cannot reverse a queue:false animation.\");\n          }\n          if (!hasValidDuration && maybeSequence && maybeSequence.duration) {\n              options.duration = maybeSequence.duration;\n          }\n          // When a set of elements is targeted by a Velocity call, the set is\n          // broken up and each element has the current Velocity call individually\n          // queued onto it. In this way, each element's existing queue is\n          // respected; some elements may already be animating and accordingly\n          // should not have this current Velocity call triggered immediately\n          // unless the sync:true option is used.\n          var rootAnimation = {\n              options: options,\n              elements: elements,\n              _prev: undefined,\n              _next: undefined,\n              _flags: isSync ? 32 /* SYNC */ : 0,\n              percentComplete: 0,\n              ellapsedTime: 0,\n              timeStart: 0\n          };\n          animations = [];\n          for (var index = 0; index < elements.length; index++) {\n              var element = elements[index];\n              var flags = 0;\n              if (isNode(element)) {\n                  // TODO: This needs to check for valid animation targets, not just Elements\n                  if (isReverse) {\n                      var lastAnimation = Data(element).lastAnimationList[options.queue];\n                      propertiesMap = lastAnimation && lastAnimation.tweens;\n                      if (!propertiesMap) {\n                          console.error(\"VelocityJS: Attempting to reverse an animation on an element with no previous animation:\", element);\n                          continue;\n                      }\n                      flags |= 64 /* REVERSE */ & ~(lastAnimation._flags & 64 /* REVERSE */); // tslint:disable-line:no-bitwise\n                  }\n                  var animation = Object.assign({}, rootAnimation, { element: element, _flags: rootAnimation._flags | flags });\n                  options._total++;\n                  animations.push(animation);\n                  if (options.stagger) {\n                      if (isFunction(options.stagger)) {\n                          var num = optionCallback(options.stagger, element, index, elements.length, elements, \"stagger\");\n                          if (isNumber(num)) {\n                              animation.delay = options.delay + num;\n                          }\n                      } else {\n                          animation.delay = options.delay + options.stagger * index;\n                      }\n                  }\n                  if (options.drag) {\n                      animation.duration = options.duration - options.duration * Math.max(1 - (index + 1) / elements.length, 0.75);\n                  }\n                  if (maybeSequence) {\n                      expandSequence(animation, maybeSequence);\n                  } else if (isReverse) {\n                      // In this case we're using the previous animation, so\n                      // it will be expanded correctly when that one runs.\n                      animation.tweens = propertiesMap;\n                  } else {\n                      animation.tweens = Object.create(null);\n                      expandProperties(animation, propertiesMap);\n                  }\n                  queue$1(element, animation, options.queue);\n              }\n          }\n          if (State.isTicking === false) {\n              // If the animation tick isn't running, start it. (Velocity shuts it\n              // off when there are no active calls to process.)\n              tick(false);\n          }\n          if (animations) {\n              defineProperty$1(elements.velocity, \"animations\", animations);\n          }\n      }\n      /***************\n       Chaining\n       ***************/\n      /* Return the elements back to the call chain, with wrapped elements taking precedence in case Velocity was called via the $.fn. extension. */\n      return elements || promise;\n  }\n  /**\n   * Call an option callback in a try/catch block and report an error if needed.\n   */\n  function optionCallback(fn, element, index, length, elements, option) {\n      try {\n          return fn.call(element, index, length, elements, option);\n      } catch (e) {\n          console.error(\"VelocityJS: Exception when calling '\" + option + \"' callback:\", e);\n      }\n  }\n\n  // Project\n  /**\n   * Used to patch any object to allow Velocity chaining. In order to chain an\n   * object must either be treatable as an array - with a <code>.length</code>\n   * property, and each member a Node, or a Node directly.\n   *\n   * By default Velocity will try to patch <code>window</code>,\n   * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n   * Nodes or lists of Nodes.\n   */\n  function patch(proto, global) {\n      try {\n          defineProperty$1(proto, (global ? \"V\" : \"v\") + \"elocity\", Velocity$1);\n      } catch (e) {\n          console.warn(\"VelocityJS: Error when trying to add prototype.\", e);\n      }\n  }\n\n  // Project\n  var Velocity$2 = Velocity$1;\n  /**\n   * These parts of Velocity absolutely must be included, even if they're unused!\n   */\n  var VelocityStatic$1;\n  (function (VelocityStatic) {\n      /**\n       * Actions cannot be replaced if they are internal (hasOwnProperty is false\n       * but they still exist). Otherwise they can be replaced by users.\n       *\n       * All external method calls should be using actions rather than sub-calls\n       * of Velocity itself.\n       */\n      VelocityStatic.Actions = Actions;\n      /**\n       * Our known easing functions.\n       */\n      VelocityStatic.Easings = Easings;\n      /**\n       * The currently registered sequences.\n       */\n      VelocityStatic.Sequences = SequencesObject;\n      /**\n       * Current internal state of Velocity.\n       */\n      VelocityStatic.State = State; // tslint:disable-line:no-shadowed-variable\n      /**\n       * Velocity option defaults, which can be overriden by the user.\n       */\n      VelocityStatic.defaults = defaults$1;\n      /**\n       * Used to patch any object to allow Velocity chaining. In order to chain an\n       * object must either be treatable as an array - with a <code>.length</code>\n       * property, and each member a Node, or a Node directly.\n       *\n       * By default Velocity will try to patch <code>window</code>,\n       * <code>jQuery</code>, <code>Zepto</code>, and several classes that return\n       * Nodes or lists of Nodes.\n       */\n      VelocityStatic.patch = patch;\n      /**\n       * Set to true, 1 or 2 (most verbose) to output debug info to console.\n       */\n      VelocityStatic.debug = false;\n      /**\n       * In mock mode, all animations are forced to complete immediately upon the\n       * next rAF tick. If there are further animations queued then they will each\n       * take one single frame in turn. Loops and repeats will be disabled while\n       * <code>mock = true</code>.\n       */\n      VelocityStatic.mock = false;\n      /**\n       * Save our version number somewhere visible.\n       */\n      VelocityStatic.version = VERSION;\n      /**\n       * Added as a fallback for \"import {Velocity} from 'velocity-animate';\".\n       */\n      VelocityStatic.Velocity = Velocity$1; // tslint:disable-line:no-shadowed-variable\n  })(VelocityStatic$1 || (VelocityStatic$1 = {}));\n  /* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */\n  var IE$1 = function () {\n      if (document.documentMode) {\n          return document.documentMode;\n      } else {\n          for (var i = 7; i > 4; i--) {\n              var div = document.createElement(\"div\");\n              div.innerHTML = \"<!\" + \"--\" + \"[if IE \" + i + \"]><span></span><![endif]-->\";\n              if (div.getElementsByTagName(\"span\").length) {\n                  div = null;\n                  return i;\n              }\n          }\n      }\n      return undefined;\n  }();\n  /******************\n   Unsupported\n   ******************/\n  if (IE$1 <= 8) {\n      throw new Error(\"VelocityJS cannot run on Internet Explorer 8 or earlier\");\n  }\n  /******************\n   Frameworks\n   ******************/\n  if (window) {\n      /*\n       * Both jQuery and Zepto allow their $.fn object to be extended to allow\n       * wrapped elements to be subjected to plugin calls. If either framework is\n       * loaded, register a \"velocity\" extension pointing to Velocity's core\n       * animate() method. Velocity also registers itself onto a global container\n       * (window.jQuery || window.Zepto || window) so that certain features are\n       * accessible beyond just a per-element scope. Accordingly, Velocity can\n       * both act on wrapped DOM elements and stand alone for targeting raw DOM\n       * elements.\n       */\n      var jQuery$1 = window.jQuery,\n          Zepto$1 = window.Zepto;\n      patch(window, true);\n      patch(Element && Element.prototype);\n      patch(NodeList && NodeList.prototype);\n      patch(HTMLCollection && HTMLCollection.prototype);\n      patch(jQuery$1, true);\n      patch(jQuery$1 && jQuery$1.fn);\n      patch(Zepto$1, true);\n      patch(Zepto$1 && Zepto$1.fn);\n  }\n  // Make sure that the values within Velocity are read-only and upatchable.\n\n  var _loop$1 = function _loop(property) {\n      if (VelocityStatic$1.hasOwnProperty(property)) {\n          switch (typeof property === \"undefined\" ? \"undefined\" : _typeof(property)) {\n              case \"number\":\n              case \"boolean\":\n                  defineProperty$1(Velocity$2, property, {\n                      get: function get$$1() {\n                          return VelocityStatic$1[property];\n                      },\n                      set: function set$$1(value) {\n                          VelocityStatic$1[property] = value;\n                      }\n                  }, true);\n                  break;\n              default:\n                  defineProperty$1(Velocity$2, property, VelocityStatic$1[property], true);\n                  break;\n          }\n      }\n  };\n\n  for (var property$1 in VelocityStatic$1) {\n      _loop$1(property$1);\n  }\n  Object.freeze(Velocity$2);\n\n  return Velocity$2;\n\n})));\n//# sourceMappingURL=velocity.js.map\n"
  },
  {
    "path": "velocity.ui.js",
    "content": "/**\n * velocity-animate (C) 2014-2017 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(require('velocity-animate')) :\n\ttypeof define === 'function' && define.amd ? define(['velocity-animate'], factory) :\n\t(factory(global.Velocity));\n}(this, (function (Velocity) { 'use strict';\n\n\tVelocity = Velocity && Velocity.hasOwnProperty('default') ? Velocity['default'] : Velocity;\n\n\tVelocity(\"registerSequence\", \"bounce\", {\n\t    \"duration\": 1000,\n\t    \"0,100%\": {\n\t        transformOrigin: \"center bottom\"\n\t    },\n\t    \"0%,20%,53%,80%,100%\": {\n\t        transform: [\"translate3d(0,0px,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"40%,43%\": {\n\t        transform: [\"translate3d(0,-30px,0)\", \"easeInQuint\"]\n\t    },\n\t    \"70%\": {\n\t        transform: [\"translate3d(0,-15px,0)\", \"easeInQuint\"]\n\t    },\n\t    \"90%\": {\n\t        transform: \"translate3d(0,-4px,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"flash\", {\n\t    \"duration\": 1000,\n\t    \"0%,50%,100%\": {\n\t        opacity: \"1\"\n\t    },\n\t    \"25%,75%\": {\n\t        opacity: \"0\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"headShake\", {\n\t    \"duration\": 1000,\n\t    \"easing\": \"easeInOut\",\n\t    \"0%\": {\n\t        transform: \"translateX(0) rotateY(0)\"\n\t    },\n\t    \"6.5%\": {\n\t        transform: \"translateX(-6px) rotateY(-9deg)\"\n\t    },\n\t    \"18.5%\": {\n\t        transform: \"translateX(5px) rotateY(7deg)\"\n\t    },\n\t    \"31.5%\": {\n\t        transform: \"translateX(-3px) rotateY(-5deg)\"\n\t    },\n\t    \"43.5%\": {\n\t        transform: \"translateX(2px) rotateY(3deg)\"\n\t    },\n\t    \"50%\": {\n\t        transform: \"translateX(0) rotateY(0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"jello\", {\n\t    \"duration\": 1000,\n\t    \"0%,100%\": {\n\t        transformOrigin: \"center\"\n\t    },\n\t    \"0%,11.1%,100%\": {\n\t        transform: \"skewX(0) skewY(0)\"\n\t    },\n\t    \"22.2%\": {\n\t        transform: \"skewX(-12.5deg) skewY(-12.5deg)\"\n\t    },\n\t    \"33.3%\": {\n\t        transform: \"skewX(6.25deg) skewY(6.25deg)\"\n\t    },\n\t    \"44.4%\": {\n\t        transform: \"skewX(-3.125deg) skewY(-3.125deg)\"\n\t    },\n\t    \"55.5%\": {\n\t        transform: \"skewX(1.5625deg) skewY(1.5625deg)\"\n\t    },\n\t    \"66.6%\": {\n\t        transform: \"skewX(-0.78125deg) skewY(-0.78125deg)\"\n\t    },\n\t    \"77.7%\": {\n\t        transform: \"skewX(0.390625deg) skewY(0.390625deg)\"\n\t    },\n\t    \"88.8%\": {\n\t        transform: \"skewX(-0.1953125deg) skewY(-0.1953125deg)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"pulse\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"scale3d(1,1,1)\"\n\t    },\n\t    \"50%\": {\n\t        transform: \"scale3d(1.05,1.05,1.05)\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"scale3d(1,1,1)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rubberBand\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"scale3d(1,1,1)\"\n\t    },\n\t    \"30%\": {\n\t        transform: \"scale3d(1.25,0.75,1)\"\n\t    },\n\t    \"40%\": {\n\t        transform: \"scale3d(0.75,1.25,1)\"\n\t    },\n\t    \"50%\": {\n\t        transform: \"scale3d(1.15,0.85,1)\"\n\t    },\n\t    \"65%\": {\n\t        transform: \"scale3d(0.95,1.05,1)\"\n\t    },\n\t    \"75%\": {\n\t        transform: \"scale3d(1.05,0.95,1)\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"scale3d(1,1,1)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"shake\", {\n\t    \"duration\": 1000,\n\t    \"0%,100%\": {\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"10%,30%,50%,70%,90%\": {\n\t        transform: \"translate3d(-10px,0,0)\"\n\t    },\n\t    \"20%,40%,60%,80%\": {\n\t        transform: \"translate3d(10px,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"swing\", {\n\t    \"duration\": 1000,\n\t    \"0%,100%\": {\n\t        transform: \"rotate3d(0,0,1,0deg)\",\n\t        transformOrigin: \"center\"\n\t    },\n\t    \"20%\": {\n\t        transform: \"rotate3d(0,0,1,15deg)\"\n\t    },\n\t    \"40%\": {\n\t        transform: \"rotate3d(0,0,1,-10deg)\"\n\t    },\n\t    \"60%\": {\n\t        transform: \"rotate3d(0,0,1,5deg)\"\n\t    },\n\t    \"80%\": {\n\t        transform: \"rotate3d(0,0,1,-5deg)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"tada\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"scale3d(1,1,1) rotate3d(0,0,0,0)\"\n\t    },\n\t    \"10%,20%\": {\n\t        transform: \"scale3d(0.9,0.9,0.9) rotate3d(0,0,1,-3deg)\"\n\t    },\n\t    \"30%,50%,70%,90%\": {\n\t        transform: \"scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)\"\n\t    },\n\t    \"40%,60%,80%\": {\n\t        transform: \"scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"scale3d(1, 1, 1) rotate3d(0,0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"wobble\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(0,0,0) rotate3d(0,0,0,0)\"\n\t    },\n\t    \"15%\": {\n\t        transform: \"translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)\"\n\t    },\n\t    \"30%\": {\n\t        transform: \"translate3d(20%,0,0) rotate3d(0,0,1,3deg)\"\n\t    },\n\t    \"45%\": {\n\t        transform: \"translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)\"\n\t    },\n\t    \"60%\": {\n\t        transform: \"translate3d(10%,0,0) rotate3d(0,0,1,2deg)\"\n\t    },\n\t    \"75%\": {\n\t        transform: \"translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(0,0,0) rotate3d(0,0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceIn\", {\n\t    \"duration\": 750,\n\t    \"easing\": \"easeOutCubic\",\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale3d(0.3,0.3,0.3)\"\n\t    },\n\t    \"20%\": {\n\t        transform: \"scale3d(1.1,1.1,1.1)\"\n\t    },\n\t    \"40%\": {\n\t        transform: \"scale3d(0.9,0.9,0.9)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale3d(1.03,1.03,1.03)\"\n\t    },\n\t    \"80%\": {\n\t        transform: \"scale3d(0.97,0.97,0.97)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale3d(1,1,1)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceInDown\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,-3000px,0)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: [\"translate3d(0,25px,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"75%\": {\n\t        transform: [\"translate3d(0,-10px,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"90%\": {\n\t        transform: [\"translate3d(0,5px,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"translate3d(0,0,0)\", \"easeOutCubic\"]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceInLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(-3000px,0,0)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: [\"translate3d(25px,0,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"75%\": {\n\t        transform: [\"translate3d(-10px,0,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"90%\": {\n\t        transform: [\"translate3d(5px,0,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"translate3d(0,0,0)\", \"easeOutCubic\"]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceInRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(3000px,0,0)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: [\"translate3d(-25px,0,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"75%\": {\n\t        transform: [\"translate3d(10px,0,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"90%\": {\n\t        transform: [\"translate3d(-5px,0,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"translate3d(0,0,0)\", \"easeOutCubic\"]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceInUp\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,3000px,0)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: [\"translate3d(0,-25px,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"75%\": {\n\t        transform: [\"translate3d(0,10px,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"90%\": {\n\t        transform: [\"translate3d(0,-5px,0)\", \"easeOutCubic\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"translate3d(0,0,0)\", \"easeOutCubic\"]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceOut\", {\n\t    \"duration\": 750,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale3d(1,1,1)\"\n\t    },\n\t    \"20%\": {\n\t        transform: \"scale3d(0.9,0.9,0.9)\"\n\t    },\n\t    \"50%,55%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale3d(1.1,1.1,1.1)\"\n\t    },\n\t    \"to\": {\n\t        opacity: \"0\",\n\t        transform: \"scale3d(0.3,0.3,0.3)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceOutDown\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"20%\": {\n\t        transform: \"translate3d(0,10px,0)\"\n\t    },\n\t    \"40%,45%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,-20px,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,2000px,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceOutLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"20%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(20px,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(-2000px,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceOutRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"20%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(-20px,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(2000px,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"bounceOutUp\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"20%\": {\n\t        transform: \"translate3d(0,-10px,0)\"\n\t    },\n\t    \"40%,45%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,20px,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,-2000px,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeIn\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeInDown\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,-100%,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeInDownBig\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,-2000px,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeInLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(-100%,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeInLeftBig\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(-2000px,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeInRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(100%,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeInRightBig\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(2000px,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeInUp\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,100%,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeInUpBig\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,2000px,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOut\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOutDown\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,100%,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOutDownBig\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,2000px,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOutLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(-100%,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOutLeftBig\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(-2000px,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOutRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(100%,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOutRightBig\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(2000px,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOutUp\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,-100%,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"fadeOutUpBig\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(0,-2000px,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"flip\", {\n\t    \"duration\": 1000,\n\t    \"0%,100%\": {\n\t        backfaceVisibility: \"visible\"\n\t    },\n\t    \"0%\": {\n\t        transform: [\"perspective(400px) translate3d(0,0,0) rotate3d(0,1,0,-360deg) scale3d(1,1,1)\", \"easeOut\"]\n\t    },\n\t    \"40%\": {\n\t        transform: [\"perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg) scale3d(1,1,1)\", \"easeOut\"]\n\t    },\n\t    \"50%\": {\n\t        transform: [\"perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg) scale3d(1,1,1)\", \"easeIn\"]\n\t    },\n\t    \"80%\": {\n\t        transform: [\"perspective(400px) translate3d(0,0,0) rotate3d(0,1,0,0) scale3d(0.95,0.95,0.95)\", \"easeIn\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"perspective(400px) translate3d(0,0,0) rotate3d(0,0,0,0) scale3d(1,1,1)\", \"ease-in\"]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"flipInX\", {\n\t    \"duration\": 1000,\n\t    \"0%,100%\": {\n\t        backfaceVisibility: \"visible\"\n\t    },\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"perspective(400px) rotate3d(1,0,0,90deg)\"\n\t    },\n\t    \"40%\": {\n\t        transform: [\"perspective(400px) rotate3d(1,0,0,-20deg)\", \"easeIn\"]\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: \"perspective(400px) rotate3d(1,0,0,10deg)\"\n\t    },\n\t    \"80%\": {\n\t        transform: \"perspective(400px) rotate3d(1,0,0,-5deg)\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"perspective(400px) rotate3d(1,0,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"flipInY\", {\n\t    \"duration\": 1000,\n\t    \"0%,100%\": {\n\t        backfaceVisibility: \"visible\"\n\t    },\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"perspective(400px) rotate3d(0,1,0,90deg)\"\n\t    },\n\t    \"40%\": {\n\t        transform: [\"perspective(400px) rotate3d(0,1,0,-20deg)\", \"easeIn\"]\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: \"perspective(400px) rotate3d(0,1,0,10deg)\"\n\t    },\n\t    \"80%\": {\n\t        transform: \"perspective(400px) rotate3d(0,1,0,-5deg)\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"perspective(400px) rotate3d(0,1,0,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"flipOutX\", {\n\t    \"duration\": 750,\n\t    \"0%,100%\": {\n\t        backfaceVisibility: \"visible\"\n\t    },\n\t    \"0%\": {\n\t        transform: \"perspective(400px) rotate3d(1,0,0,0)\"\n\t    },\n\t    \"30%\": {\n\t        opacity: \"1\",\n\t        transform: \"perspective(400px) rotate3d(1,0,0,-20deg)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"perspective(400px) rotate3d(1,0,0,90deg)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"flipOutY\", {\n\t    \"duration\": 750,\n\t    \"0%,100%\": {\n\t        backfaceVisibility: \"visible\"\n\t    },\n\t    \"0%\": {\n\t        transform: \"perspective(400px) rotate3d(0,1,0,0)\"\n\t    },\n\t    \"30%\": {\n\t        opacity: \"1\",\n\t        transform: \"perspective(400px) rotate3d(0,1,0,-20deg)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"perspective(400px) rotate3d(0,1,0,90deg)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"lightSpeedIn\", {\n\t    \"duration\": 1000,\n\t    \"easing\": \"easeOut\",\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(100%,0,0) skewX(-30deg)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(40%,0,0) skewX(20deg)\"\n\t    },\n\t    \"80%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(20%,0,0) skewX(-5deg)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0) skew(0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"lightSpeedOut\", {\n\t    \"duration\": 1000,\n\t    \"easing\": \"easeIn\",\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0) skewX(0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(100%,0,0) skewX(30deg)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateIn\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,-200deg)\",\n\t        transformOrigin: \"center\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"center\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateInDownLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,-45deg)\",\n\t        transformOrigin: \"left bottom\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"left bottom\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateInDownRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,45deg)\",\n\t        transformOrigin: \"right bottom\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"right bottom\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateInUpLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,45deg)\",\n\t        transformOrigin: \"left bottom\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"left bottom\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateInUpRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,-90deg)\",\n\t        transformOrigin: \"right bottom\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"right bottom\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateOut\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"center\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,200deg)\",\n\t        transformOrigin: \"center\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateOutDownLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"left bottom\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,45deg)\",\n\t        transformOrigin: \"left bottom\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateOutDownRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"right bottom\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,-45deg)\",\n\t        transformOrigin: \"right bottom\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateOutUpLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"left bottom\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,-45deg)\",\n\t        transformOrigin: \"left bottom\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rotateOutUpRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0)\",\n\t        transformOrigin: \"right bottom\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"rotate3d(0,0,1,90deg)\",\n\t        transformOrigin: \"right bottom\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"slideInDown\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(0,-100%,0)\",\n\t        visibility: \"hidden\",\n\t        opacity: \"0\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(0,0,0)\",\n\t        visibility: \"visible\",\n\t        opacity: \"1\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"slideInLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(-100%,0,0)\",\n\t        visibility: \"hidden\",\n\t        opacity: \"0\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(0,0,0)\",\n\t        visibility: \"visible\",\n\t        opacity: \"1\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"slideInRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(100%,0,0)\",\n\t        visibility: \"hidden\",\n\t        opacity: \"0\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(0,0,0)\",\n\t        visibility: \"visible\",\n\t        opacity: \"1\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"slideInUp\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(0,100%,0)\",\n\t        visibility: \"hidden\",\n\t        opacity: \"0\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(0,0,0)\",\n\t        visibility: \"visible\",\n\t        opacity: \"1\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"slideOutDown\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(0,0,0)\",\n\t        visibility: \"visible\",\n\t        opacity: \"1\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(0,-100%,0)\",\n\t        visibility: \"hidden\",\n\t        opacity: \"0\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"slideOutLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(0,0,0)\",\n\t        visibility: \"visible\",\n\t        opacity: \"1\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(-100%,0,0)\",\n\t        visibility: \"hidden\",\n\t        opacity: \"0\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"slideOutRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(0,0,0)\",\n\t        visibility: \"visible\",\n\t        opacity: \"1\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(100%,0,0)\",\n\t        visibility: \"hidden\",\n\t        opacity: \"0\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"slideOutUp\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"translate3d(0,0,0)\",\n\t        visibility: \"visible\",\n\t        opacity: \"1\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"translate3d(0,100%,0)\",\n\t        visibility: \"hidden\",\n\t        opacity: \"0\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"hinge\", {\n\t    \"duration\": 2000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0) rotate3d(0,0,1,0)\",\n\t        transformOrigin: \"top left\"\n\t    },\n\t    \"20%,60%\": {\n\t        transform: [\"translate3d(0,0,0) rotate3d(0,0,1,80deg)\", \"easeInOut\"]\n\t    },\n\t    \"40%,80%\": {\n\t        opacity: \"1\",\n\t        transform: [\"translate3d(0,0,0) rotate3d(0,0,1,60deg)\", \"easeInOut\"]\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: [\"translate3d(0,700px,0) rotate3d(0,0,1,80deg)\", \"easeInOut\"]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"jackInTheBox\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale(0.1) rotate(30deg)\",\n\t        transformOrigin: \"center bottom\"\n\t    },\n\t    \"50%\": {\n\t        transform: \"scale(0.5) rotate(-10deg)\"\n\t    },\n\t    \"70%\": {\n\t        transform: \"scale(0.7) rotate(3deg)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale(1) rotate(0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rollIn\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0) rotate3d(0,0,1,0)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"rollOut\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"translate3d(0,0,0) rotate3d(0,0,1,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"translate3d(100%,0,0) rotate3d(0,0,1,120deg)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomIn\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale3d(0.3,0.3,0.3)\"\n\t    },\n\t    \"50%\": {\n\t        opacity: \"1\"\n\t    },\n\t    \"100%\": {\n\t        transform: \"scale3d(1,1,1)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomInDown\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale3d(0.1,0.1,0.1) translate3d(0,-1000px,0)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: [\"scale3d(0.475,0.475,0.475) translate3d(0,60px,0)\", \"easeInCubic\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"scale3d(1,1,1) translate3d(0,0,0)\", [0.175, 0.885, 0.32, 1]]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomInLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale3d(0.1,0.1,0.1) translate3d(-1000px,0,0)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: [\"scale3d(0.475,0.475,0.475) translate3d(10px,0,0)\", \"easeInCubic\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"scale3d(1,1,1) translate3d(0,0,0)\", [0.175, 0.885, 0.32, 1]]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomInRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale3d(0.1,0.1,0.1) translate3d(1000px,0,0)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: [\"scale3d(0.475,0.475,0.475) translate3d(-10px,0,0)\", \"easeInCubic\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"scale3d(1,1,1) translate3d(0,0,0)\", [0.175, 0.885, 0.32, 1]]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomInUp\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale3d(0.1,0.1,0.1) translate3d(0,1000px,0)\"\n\t    },\n\t    \"60%\": {\n\t        opacity: \"1\",\n\t        transform: [\"scale3d(0.475,0.475,0.475) translate3d(0,-60px,0)\", \"easeInCubic\"]\n\t    },\n\t    \"100%\": {\n\t        transform: [\"scale3d(1,1,1) translate3d(0,0,0)\", [0.175, 0.885, 0.32, 1]]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomOut\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"scale3d(1,1,1)\"\n\t    },\n\t    \"50%\": {\n\t        opacity: \"1\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale3d(0.3,0.3,0.3)\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomOutDown\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"scale3d(1,1,1) translate3d(0,0,0)\"\n\t    },\n\t    \"40%\": {\n\t        opacity: \"1\",\n\t        transform: [\"scale3d(0.475,0.475,0.475) translate3d(0,60px,0)\", [0.55, 0.055, 0.675, 0.19]]\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: [\"scale3d(0.1,0.1,0.1) translate3d(0,-1000px,0)\", [0.175, 0.885, 0.32, 1]]\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomOutLeft\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale(1) translate3d(0,0,0)\",\n\t        transformOrigin: \"left center\"\n\t    },\n\t    \"40%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale(0.475) translate3d(42px,0,0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale(0.1) translate3d(-2000px,0,0)\",\n\t        transformOrigin: \"left center\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomOutRight\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale(1) translate3d(0,0,0)\",\n\t        transformOrigin: \"right center\"\n\t    },\n\t    \"40%\": {\n\t        opacity: \"1\",\n\t        transform: \"scale(0.475) translate3d(-42px, 0, 0)\"\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: \"scale(0.1) translate3d(2000px, 0, 0)\",\n\t        transformOrigin: \"right center\"\n\t    }\n\t});\n\n\tVelocity(\"registerSequence\", \"zoomOutUp\", {\n\t    \"duration\": 1000,\n\t    \"0%\": {\n\t        transform: \"scale3d(1,1,1) translate3d(0,0,0)\"\n\t    },\n\t    \"40%\": {\n\t        opacity: \"1\",\n\t        transform: [\"scale3d(0.475,0.475,0.475) translate3d(0,-60px,0)\", [0.55, 0.055, 0.675, 0.19]]\n\t    },\n\t    \"100%\": {\n\t        opacity: \"0\",\n\t        transform: [\"scale3d(0.1,0.1,0.1) translate3d(0,1000px,0)\", [0.175, 0.885, 0.32, 1]]\n\t    }\n\t});\n\n})));\n//# sourceMappingURL=velocity.ui.js.map\n"
  },
  {
    "path": "version.ts",
    "content": "/*\n * velocity-animate (C) 2014-2017 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\n// Automatically generated\nexport const VERSION = \"2.0.6\";\n"
  }
]