diff --git a/app/config.json b/app/config.json
index e972efe68125f7e966658ed56d1910713bf131a3..b0b2823901416db69cee8b2dab6a29c270b3d08c 100644
--- a/app/config.json
+++ b/app/config.json
@@ -259,6 +259,10 @@
       {
         "host": "g1-test.cgeek.fr",
         "port": 443
+      },
+      {
+        "host": "gtest.jytou.fr",
+        "port": 443
       }
     ],
     "plugins":{
diff --git a/bower.json b/bower.json
index db2ac07ecee85a3bad040ce92a7199f8fc86f5df..84eaeeb415ba2682b3930ccea456d9a7e2c8cecc 100644
--- a/bower.json
+++ b/bower.json
@@ -6,30 +6,57 @@
     "ionic-material": "0.4.2"
   },
   "dependencies": {
-    "angular-messages": "1.3.13",
+    "angular-messages": "~1.3.13",
     "robotodraft": "1.1.0",
+    "angular": "^1.5.11",
     "angular-moment": "^0.10.3",
-    "angular-animate": "1.5.3",
-    "angular-sanitize": "1.5.3",
-    "angular": "1.5.3",
-    "angular-bind-notifier": "^1.1.7",
+    "angular-animate": "^1.5.11",
+    "angular-sanitize": "^1.5.11",
+    "angular-resource": "1.5.11",
+    "angular-bind-notifier": "^1.1.11",
     "angular-image-crop": "^2.0.0",
-    "ng-idle": "^1.3.2",
-    "chart.js": "chartjs#^2.6.0",
-    "Leaflet.awesome-markers": "^2.0.2",
-    "leaflet-search": "^2.7.2",
+    "angular-ui-router": "^0.2.18",
+    "angular-cache": "^4.6.0",
+    "ng-idle": "angular-idle#^1.3.2",
+    "chart.js": "2.9.3",
+    "Leaflet.awesome-markers": "leaflet.awesome-markers#2.0.2",
+    "leaflet-search": "2.7.2",
     "angular-leaflet-directive": "angular-leaflet#^0.10.0",
-    "Leaflet.EasyButton": "~1.3.2",
+    "Leaflet.EasyButton": "^2.4.0",
     "leaflet.loading": "Leaflet.loading#^0.1.24",
     "ui-leaflet": "^2.0.0",
-    "leaflet.markercluster": "0.5",
+    "leaflet.markercluster": "Leaflet.markercluster#0.5.0",
     "Leaflet.FeatureGroup.SubGroup": "0.1.2",
-    "ion-digit-keyboard": "skol-pro/ion-digit-keyboard"
+    "ion-digit-keyboard": "skol-pro/ion-digit-keyboard#973b90c2fc",
+    "angular-api": "E-IS/angular-api#0.3.0",
+    "angular-screenmatch": "^1.0.1",
+    "angular-file-saver": "^1.1.3",
+    "angular-simple-logger": "^0.1.7",
+    "angular-chart.js": "jtblin/angular-chart#1.1.1",
+    "angular-fullscreen": "E-IS/angular-fullscreen#1.0.2",
+    "leaflet": "0.7.7",
+    "moment": "^2.24.0",
+    "numeral": "1.5.6",
+    "underscore": "1.8.3",
+    "qrcode.js": "davidshimjs/qrcodejs",
+    "aes-js": "ricmoo/aes-js#3.1.2",
+    "ngCordova": "0.1.26-alpha",
+    "js-scrypt": "1.2.0",
+    "js-nacl": "1.3.2",
+    "angular-translate": "^2.18.1"
   },
   "resolutions": {
-    "angular": "1.5.3",
-    "ionic": "1.3.5",
-    "angular-animate": "1.5.3",
-    "angular-sanitize": "1.5.3"
+    "angular": "1.5.11",
+    "angular-animate": "1.5.11",
+    "angular-sanitize": "1.5.11",
+    "angular-ui-router": "0.2.18",
+    "angular-messages": "1.5.11",
+    "angular-api": "0.3.0",
+    "Leaflet.EasyButton": "~1.3.2",
+    "leaflet": "0.7.7",
+    "leaflet.markercluster": "0.5",
+    "Leaflet.FeatureGroup.SubGroup": "0.1.2",
+    "moment": ">=2.8.0 <2.11.0",
+    "numeral": "1.5.3"
   }
 }
diff --git a/config.xml b/config.xml
index 7008c1054e964b32efaca6c4955f94cc775e7296..bf91a449045620bfd790137dbb33f9a10e1738b4 100644
--- a/config.xml
+++ b/config.xml
@@ -138,7 +138,7 @@
     <plugin name="cordova-plugin-x-toast" spec="^2.6.0" />
     <plugin name="cordova-plugin-ionic-keyboard" spec="^2.2.0" />
     <plugin name="cordova-plugin-minisodium" spec="https://github.com/E-IS/cordova-plugin-minisodium.git" />
-    <plugin name="phonegap-plugin-barcodescanner" spec="https://github.com/phonegap/phonegap-plugin-barcodescanner.git">
-        <variable name="CAMERA_USAGE_DESCRIPTION" value="Scan QRCode" />
+    <plugin name="phonegap-plugin-barcodescanner">
+        <variable name="CAMERA_USAGE_DESCRIPTION" value="To scan QRCode" />
     </plugin>
 </widget>
diff --git a/doc/build_ios.md b/doc/build_ios.md
index d99ec0c3603750ea4e35a3ad2ab59c3c254aa5d0..91d77479bbd9f3f3ee05040b9db8baf4932bf05c 100644
--- a/doc/build_ios.md
+++ b/doc/build_ios.md
@@ -82,7 +82,7 @@ npm install -g nw-gyp node-pre-gyp
 
 2. Install global dependencies (see [Development Guide](./development_guide.md) for versions to used) :
 ```
-npm install -g gulp bower@1.8.0 cordova@6.5.0 ionic@1.7.16
+npm install -g gulp bower cordova ionic@1.7.16
 ```
 
 3. Install project dependencies :
diff --git a/doc/build_ubuntu.md b/doc/build_ubuntu.md
deleted file mode 100644
index a2ee72468663ed050cb151cae26167b2ba0bac30..0000000000000000000000000000000000000000
--- a/doc/build_ubuntu.md
+++ /dev/null
@@ -1,109 +0,0 @@
-# Ubuntu Builds
-
-Cesium can be build as desktop application for Ubuntu, or as App on Ubuntu phone. Such builds use cross-architecture [click targets](https://developer.ubuntu.com/en/phone/apps/sdk/tutorials/click-targets-and-device-kits/) and the specific Apache Cordova platform `ubuntu`.
-
-## Prerequisites
-
-### Install the development environment
-
-Follow all the steps defined in the [Development guide](./development_guide.md).
-
-After that you should be able to start the application using `npm start`, and to test it.
-
-## Install Ubuntu SDK 
-
-Source documentation [here](https://developer.ubuntu.com/en/phone/platform/sdk/installing-the-sdk/) and [here](https://cordova.apache.org/docs/en/latest/guide/platforms/ubuntu/index.html)
-
-Install the SDK :
-
-```bash
-sudo add-apt-repository ppa:ubuntu-sdk-team/ppa
-sudo apt update
-sudo apt install ubuntu-sdk
-```
-
-Install "click" packaging tools:
-
-```bash
-sudo apt-get install click cmake libicu-dev pkg-config devscripts qtbase5-dev qtchooser qtdeclarative5-dev qtfeedback5-dev qtlocation5-dev qtmultimedia5-dev qtpim5-dev libqt5sensors5-dev qtsystems5-dev 
-
-```
-> Alternatively (not tested): 
-> `sudo click chroot -a armhf -f ubuntu-sdk-15.04 install cmake libicu-dev:armhf pkg-config qtbase5-dev:armhf qtchooser qtdeclarative5-dev:armhf qtfeedback5-dev:armhf qtlocation5-dev:armhf qtmultimedia5-dev:armhf qtpim5-dev:armhf libqt5sensors5-dev:armhf qtsystems5-dev:armhf`
-
-
-
-## Add Ubuntu platform to the Ionic project
-
-```bash
-cd cesium
-ionic platform add ubuntu
-```
-
-## Running Ubuntu SDK IDE (optional)
- 
-To debug or configure the Ubuntu builds easily, you can use the Ubuntu SDK IDE.
- 
-```bash
-ubuntu-sdk-ide
-```
-
-> Note: Before launching the IDE, make sure your user has the unix group `lxd`. If not, simply execute this command:
-> `sudo usermod -a -G lxd mon_user`
-
-
-## Build Debian package 
-
-Cesium can be built on a `amd64` architecture. 
-
-1. Generate the `click` source code:
-
-```bash
-cd cesium
-ionic build ubuntu --release
-```
-
-2. Then build the project:
- 
-```bash
-cd platforms/ubuntu/native/cesium
-debuild
-```
-
-This should generate the `.deb` in directory `<cesium>/platforms/ubuntu/native`. 
-
-> This step will required a valid (and installed) GPG key, to sign the `.deb` file.
-> The key should match the `author` field of the file `<cesium>/config.xml`.
-> To be able to your own GPG key, change the author. 
-
-### Build for Ubuntu Phone
-
-Cesium can be built on a `armhf` architecture.
-
-Install `armhf` build platform:
-
-```bash
-sudo click chroot -a armhf -f ubuntu-sdk-15.04 create
-```
-
-Then install some dependencies inside the `armhf` chroot:  
- 
-```bash
-sudo click chroot -a armhf -f ubuntu-sdk-15.04 install cmake libicu-dev:armhf pkg-config qtbase5-dev:armhf qtchooser qtdeclarative5-dev:armhf qtfeedback5-dev:armhf qtlocation5-dev:armhf qtmultimedia5-dev:armhf qtpim5-dev:armhf libqt5sensors5-dev:armhf qtsystems5-dev:armhf 
-```
-
-Build the phone application  
-
-```bash
-cd cesium
-ionic build ubuntu --device
-```
-
-> To test your application on phone, execute :
-> `ionic run ubuntu --device`
-
-
-
-## Publishing to Ubuntu App Store
-
-Follow steps on https://developer.ubuntu.com/en/publish/
\ No newline at end of file
diff --git a/doc/changelog/changelog_v1.2.10.md b/doc/changelog/changelog_v1.2.10.md
index ab058333d39f25b9e352f66a3fc187ce8e0bd1e8..fca2e15de421959a570b6f9dc50c941405a7dd56 100644
--- a/doc/changelog/changelog_v1.2.10.md
+++ b/doc/changelog/changelog_v1.2.10.md
@@ -1,12 +1,7 @@
 # Version v1.2.10
 
-## Settings
-- If Duniter node is down, settings cannot be stored locally - fix [#788](https://git.duniter.org/clients/cesium-grp/cesium/issues/788)
+## All platforms
 
-## My account
-- Le nombre de notifications affiché est incorrect - fix [#745](https://git.duniter.org/clients/cesium-grp/cesium/issues/745)
-
-## Cesium+ features
-
-### Settings
-- Allow to use Cesium+ Pod in version v1.1.3+
\ No newline at end of file
+- [enh] Cesium+: Add compatibility to Cesium+ Pod v1.1.3+
+- [fix] If Duniter node is down, settings cannot be stored locally - fix [#788](https://git.duniter.org/clients/cesium-grp/cesium/issues/788)
+- [fix] My account: notification count was wrong - fix [#745](https://git.duniter.org/clients/cesium-grp/cesium/issues/745)
diff --git a/doc/changelog/changelog_v1.2.6.md b/doc/changelog/changelog_v1.2.6.md
index 12fe00c62edfc2285089ae6804991b07f4ab3dcf..99615af9cea6aa883b6ca01f498b4e8828ee2aec 100644
--- a/doc/changelog/changelog_v1.2.6.md
+++ b/doc/changelog/changelog_v1.2.6.md
@@ -1,15 +1,16 @@
 # Version v1.2.6
 
-## WoT identity
-- Fix JS error when browsing a identity (identity without certifications)
+## All platforms
 
-## My account
-- Display a warn when distance rule failed - fix [#777](https://git.duniter.org/clients/cesium-grp/cesium/issues/777)
+### WoT identity
+- [fix] Fix JS error when browsing a identity (identity without certifications)
 
-## My wallets
-- Use 'pubkey' login method as default, when add new wallets - fix [#767](https://git.duniter.org/clients/cesium-grp/cesium/issues/767)
+### My account
+- [enh] Display a warn when distance rule failed - fix [#777](https://git.duniter.org/clients/cesium-grp/cesium/issues/777)
 
-## Cesium+ features
+### My wallets
+- [enh] Use 'pubkey' login method as default, when add new wallets - fix [#767](https://git.duniter.org/clients/cesium-grp/cesium/issues/767)
 
-### Notifications
-- Fix JS error when displaying a warning in the notifications popover
\ No newline at end of file
+### Cesium+ > Notifications
+
+- [fix] Fix JS error when displaying a warning in the notifications popover
\ No newline at end of file
diff --git a/doc/changelog/changelog_v1.2.9.md b/doc/changelog/changelog_v1.2.9.md
index 81b4ce76da8350484a18990f4db6c9575ad603c7..8a3550040082eecad72359e692ac13dd55140359 100644
--- a/doc/changelog/changelog_v1.2.9.md
+++ b/doc/changelog/changelog_v1.2.9.md
@@ -1,17 +1,20 @@
 # Version v1.2.9
 
-## My operations
-- Avoid duplicated transaction, and refresh issue - Fix [#780](https://git.duniter.org/clients/cesium-grp/cesium/issues/780)
-- Add icon on each divider 
+## All platforms
 
-## My wallets
-- Display the total balance of wallets
-- Show the default (main) wallet 
-- Better wallets refresh animation
-- Fix: wallet list can be lost when view not fully loaded - Fix [#782](https://git.duniter.org/clients/cesium-grp/cesium/issues/782) 
-- Fix: Avoid multiple error when failed - Fix [#776](https://git.duniter.org/clients/cesium-grp/cesium/issues/776) 
+### My operations
 
-## Cesium+ features
+- [enh] Add icon on each divider 
+- [fix] Avoid duplicated transaction, and refresh issue - Fix [#780](https://git.duniter.org/clients/cesium-grp/cesium/issues/780)
 
-### Messages
-- Fix sending message from a secondary wallet - fix [#784](https://git.duniter.org/clients/cesium-grp/cesium/issues/784) 
\ No newline at end of file
+### My wallets
+
+- [enh] Display the total balance of wallets
+- [enh] Show the default (main) wallet 
+- [enh] Better wallets refresh animation
+- [fix] wallet list can be lost when view not fully loaded - Fix [#782](https://git.duniter.org/clients/cesium-grp/cesium/issues/782) 
+- [fix] Avoid multiple error when failed - Fix [#776](https://git.duniter.org/clients/cesium-grp/cesium/issues/776) 
+
+### Cesium+ > Messages
+
+- [fix] Fix sending message from a secondary wallet - fix [#784](https://git.duniter.org/clients/cesium-grp/cesium/issues/784) 
\ No newline at end of file
diff --git a/doc/changelog/changelog_v1.3.0.md b/doc/changelog/changelog_v1.3.0.md
index d1a8aa23da9a3815688627000c32424deb81cc32..06b07cc410c8663740f4266a52261f28584f5b40 100644
--- a/doc/changelog/changelog_v1.3.0.md
+++ b/doc/changelog/changelog_v1.3.0.md
@@ -1,6 +1,6 @@
 # Version v1.3.0
 
-## Desktop version
+## Desktop
 
 - Upgrade to NW.js v0.35.3
 - Better Duniter configuration detection (keyring and node)
diff --git a/doc/changelog/changelog_v1.3.1.md b/doc/changelog/changelog_v1.3.1.md
index 692e1664afcdb9b1b7d2cdd0ee526d97d978ebd1..f2dcad5ee7355ceaa4b2980efd186eb08c0ed10b 100644
--- a/doc/changelog/changelog_v1.3.1.md
+++ b/doc/changelog/changelog_v1.3.1.md
@@ -1,6 +1,6 @@
 # Version v1.3.1
 
-## Desktop version
+## Desktop
 
 - [enh] Display logs in terminal
 - [enh] Add option `--debug` to show debug logs
diff --git a/doc/changelog/changelog_v1.3.10.md b/doc/changelog/changelog_v1.3.10.md
new file mode 100644
index 0000000000000000000000000000000000000000..bc5307b9855653497a559997b774e3130d6ebab2
--- /dev/null
+++ b/doc/changelog/changelog_v1.3.10.md
@@ -0,0 +1,5 @@
+# Version v1.3.10
+
+## Web payment API
+
+- [fix]fix cancel button redirection
\ No newline at end of file
diff --git a/doc/changelog/changelog_v1.3.11.md b/doc/changelog/changelog_v1.3.11.md
new file mode 100644
index 0000000000000000000000000000000000000000..9656e195d03336f03ede12bdfe505696b99931ed
--- /dev/null
+++ b/doc/changelog/changelog_v1.3.11.md
@@ -0,0 +1,8 @@
+# Version v1.3.11
+
+## All platforms
+
+ - [enh] Add a console log, when load sources failed (e.g. if network timeout)
+ - [fix] Settings: on small screens, make sure all option's labels are visible
+ - [fix] Menu: left menu is now scrollable for small device, to fix access to the `Settings` entry
+ 
\ No newline at end of file
diff --git a/doc/changelog/changelog_v1.3.8.md b/doc/changelog/changelog_v1.3.8.md
index e7a847934f254216929aafba6ed14ca67dbafba3..a999cc384314cabb991256751519dbe88a59ba06 100644
--- a/doc/changelog/changelog_v1.3.8.md
+++ b/doc/changelog/changelog_v1.3.8.md
@@ -1,6 +1,6 @@
 # Version v1.3.8
 
-## All build
+## All platforms
 
 - [enh] Settings: display options in 2 columns
 - [enh] Display registration date, in multiple identities modal  - fix [#817](https://git.duniter.org/clients/cesium-grp/cesium/issues/817)
diff --git a/doc/changelog/changelog_v1.3.9.md b/doc/changelog/changelog_v1.3.9.md
new file mode 100644
index 0000000000000000000000000000000000000000..5ffcac672c226d9c516b1ea2936f586ff3a91076
--- /dev/null
+++ b/doc/changelog/changelog_v1.3.9.md
@@ -0,0 +1,7 @@
+# Version v1.3.9
+
+## Web payment API
+
+- [enh] Add `preferred_node` params on the URL to call the payment API;
+- [enh] Allow `amount` to have list of values, to allow user to choice the payment amount;
+- [enh] Add `{node}` params on `return_url` - fix [#549](https://git.duniter.org/clients/cesium-grp/cesium/issues/549) ;
diff --git a/doc/changelog/changelog_v1.4.0.md b/doc/changelog/changelog_v1.4.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..c01df024c5fab1242de06692c5d85276293e5f02
--- /dev/null
+++ b/doc/changelog/changelog_v1.4.0.md
@@ -0,0 +1,12 @@
+# Version v1.4.0
+
+## All platforms
+
+- [enh] Optimize screen for landscape mode, on Tablet device
+- [enh] Switch in fullscreen, when web version is running on mobile devices
+- [fix] Fix freeze bug (bas CSS after using actions popover)
+- [fix] Fix theme color, on mobile device
+
+## iOS
+
+- [fix] Fix iOS layout issues
diff --git a/doc/changelog/changelog_v1.4.1.md b/doc/changelog/changelog_v1.4.1.md
new file mode 100644
index 0000000000000000000000000000000000000000..0e542b5b64e4ca749a3863646ca19d0559f70861
--- /dev/null
+++ b/doc/changelog/changelog_v1.4.1.md
@@ -0,0 +1,5 @@
+# Version v1.4.1
+
+## Desktop
+
+- [fix] Fix fullscreen mode, on desktop build
diff --git a/doc/changelog/changelog_v1.4.12.md b/doc/changelog/changelog_v1.4.12.md
new file mode 100644
index 0000000000000000000000000000000000000000..c41bc515da4bfa654ad77f8c3f1864566cc6267b
--- /dev/null
+++ b/doc/changelog/changelog_v1.4.12.md
@@ -0,0 +1,12 @@
+# Version v1.4.12
+
+## All platforms
+
+- [enh] Fix some Esperanto translations - thanks to @Vivakvo 
+- [fix] Avoid to use source with complex output condition - fix [#845](https://git.duniter.org/clients/cesium-grp/cesium/issues/819) - thanks to @matograine
+- [fix] Avoid transaction to himself - fix [#819](https://git.duniter.org/clients/cesium-grp/cesium/issues/819)
+- [fix] Fix some Italian translations - thanks to @BorisPAING 
+
+## iOS
+
+- [enh] Add compatibility for iOS and iPad - thanks to @bpresles
diff --git a/doc/changelog/changelog_v1.4.13.md b/doc/changelog/changelog_v1.4.13.md
new file mode 100644
index 0000000000000000000000000000000000000000..5f83e50adaa4ed03a29336a567a96223ab4b1ff6
--- /dev/null
+++ b/doc/changelog/changelog_v1.4.13.md
@@ -0,0 +1,14 @@
+# Version v1.4.13
+
+## All platforms
+
+- [enh] Upgrade some JS libs: bower 1.8.8, angular 1.5.11, chart.js 2.9.3
+- [fix] Build: Better dependencies management: update the `bower.json`, and remove libs from `www/js/vendor` 
+  and `www/lib/ionic/angular`
+- [fix] Cesium+: fix charts X axis labels
+
+## Android
+
+
+## Desktop
+
diff --git a/doc/changelog/changelog_v1.4.3.md b/doc/changelog/changelog_v1.4.3.md
new file mode 100644
index 0000000000000000000000000000000000000000..a8688648a78acd91f2849b705f2f45d7e9ae4d01
--- /dev/null
+++ b/doc/changelog/changelog_v1.4.3.md
@@ -0,0 +1,22 @@
+# Version v1.4.3
+
+## All platforms
+
+- [enh] Menu: change items order - thanks to @BorisPAING 
+- [enh] Add Esperanto translation - thanks to @Vivakvo 
+- [fix] Fix scale change, on the network TX graph - fix #835 - thanks to @jiemme2
+- [fix] Fix ES translation - thanks to @scanlegentil
+- [fix] Fix NL translation - thanks to @RavanH
+- [fix] Fix develepment guide - thanks to @BorisPAING 
+
+## Android
+
+- [enh] Add 64bit compatibility for libsodium
+
+## Desktop
+
+- [enh] upgrade to Chromium 76 (NWJS v0.40.1)
+
+## iOS
+
+- [enh] Add doc to build a signed artefact for iOS - thanks to @bpresles
diff --git a/doc/changelog/changelog_v1.4.6.md b/doc/changelog/changelog_v1.4.6.md
new file mode 100644
index 0000000000000000000000000000000000000000..ae5d0c9c71d0128eeeab37a54ef728ab6f19bcac
--- /dev/null
+++ b/doc/changelog/changelog_v1.4.6.md
@@ -0,0 +1,5 @@
+# Version v1.4.6
+
+## Android
+
+- [enh] Android: Add libsodium 64bit so, for compatibility with Google Play Store policy
diff --git a/doc/development_guide.md b/doc/development_guide.md
index ee2b8659362bc9643abc18d72d90910f34621509..435a996a3bf6e73ff0a5dafda29b64ac96eaee1d 100644
--- a/doc/development_guide.md
+++ b/doc/development_guide.md
@@ -25,7 +25,7 @@ If you are using fish shell, there is a [dedicated plugin](https://github.com/jo
       
   - Installing node.js build tools:
 ```
-   npm install -g gulp bower@1.8.0 cordova@9.0.0 ionic@1.7.16
+   npm install -g gulp bower cordova ionic@1.7.16
 ```
    
 ## Get the source code and dependencies
diff --git a/doc/fr/development_tutorial-01.md b/doc/fr/development_tutorial-01.md
index 922307276351eaace0c33f30e1232b28bdff27bd..c325af98ae54ef79df0fcc74fb2c44c286643cb7 100644
--- a/doc/fr/development_tutorial-01.md
+++ b/doc/fr/development_tutorial-01.md
@@ -127,7 +127,7 @@ cd cesium
 Puis, lancez le téléchargement et l'installation des modules Cesium à l'aide de la commande : 
 
 ```bash
-npm install -g gulp bower@1.8.0 cordova@6.5.0 ionic@1.7.16
+npm install -g gulp bower cordova ionic@1.7.16
 ```
 
 Puis pour les dépendances non globales :
@@ -141,7 +141,7 @@ npm install
 Si tout s'est bien passé, vous devriez obtenir une fin d'arborescence dans la console, et l'invité de commande devrait vous avoir rendu la main : 
 
 ```bash
-├── bower@1.7.9 
+├── bower@1.8.8 
 ├─┬ gulp@3.9.1 
 │ ├── archy@1.0.0 
 │ ├─┬ chalk@1.1.3 
diff --git a/doc/fr/development_tutorial-04-add_plugin.md b/doc/fr/development_tutorial-04-add_plugin.md
index 24e4603ca1ea9579250d7b5feb045b26039fc069..8d30e8d57ca124675f8b545776d4b3309d7cfb35 100644
--- a/doc/fr/development_tutorial-04-add_plugin.md
+++ b/doc/fr/development_tutorial-04-add_plugin.md
@@ -414,13 +414,13 @@ La communauté AngularJS est très active : de nombreux plugins, de tous genres,
 Généralement, installer un nouveau plugin AngularJS est très simple. Il suffit d'executer la commande suivante pour que le téléchargement de la librairie soit fait : 
  
 ```bash
- > bower install <nom_du_plugin_AngularJS>
+ > bower install ---save <nom_du_plugin_AngularJS>
 ```
 
-Le chemin de la librairie installée doit ensuite être ajouté à la main, dans le fichier `www/index.html` : 
+Le chemin de la librairie installée doit ensuite être ajouté à la main, dans le fichier `www/index.html`. Par exemple: : 
 
 ```html
-<script src="lib/ionic/js/angular/angular-file-saver.bundle.js"></script>
+<script src="lib/angular-file-saver/dist/dist/angular-file-saver.bundle.js"></script>
 ```
 
 ### 5 minutes de dev : Top chrono !
diff --git a/gulpfile.js b/gulpfile.js
index 38c4583509b6ed07aeafe77df093e50fc19bab0d..3050d7cf729dac4a974d4a178d685684f998b26d 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -357,9 +357,9 @@ gulp.task('copy-files:web', ['clean:tmp', 'clean:web', 'sass', 'config'], functi
     gulp.src('./www/manifest.json')
       .pipe(gulp.dest(tmpPath)),
 
-    // Copy lib/ionic
-    gulp.src('./www/lib/ionic/**/*.*')
-      .pipe(gulp.dest(tmpPath + '/lib/ionic')),
+    // Copy lib
+    gulp.src('./www/lib/**/*.*')
+      .pipe(gulp.dest(tmpPath + '/lib')),
 
     // Copy license into HTML
     gulp.src('./www/license/*.md')
@@ -552,10 +552,8 @@ gulp.task('clean-unused-directories:web', ['clean-unused-files:web'], function()
     tmpPath + '/templates',
     tmpPath + '/js',
     tmpPath + '/dist',
-    tmpPath + '/lib/ionic/scss',
-    tmpPath + '/lib/ionic/css',
-    tmpPath + '/lib/ionic/js',
-    tmpPath + '/lib/ionic/version.json'
+    //tmpPath + '/lib/**/*',
+    //tmpPath + '!/lib/ionic'
   ]);
 });
 
diff --git a/license_g1-eo-EO.md b/license_g1-eo-EO.md
deleted file mode 100644
index ab3b38b68d9f38af7d2558ea3f1a991ea0379188..0000000000000000000000000000000000000000
--- a/license_g1-eo-EO.md
+++ /dev/null
@@ -1,97 +0,0 @@
-Licencc Äž1 - v0.2.9
-===================
-
-:dato: 2017-04-04 12:59
-:modifita: 2019-07-14 12:00
-
-**Licenco de la mono kaj promeso de respondeco.**
-
-Ĉiu atestado de nova membro de Ğ1 devas antaŭe akompaniĝi per transdono de tiu ĉi licenco de la mono Ğ1, pri kiu la atestanto devas certiĝi, ke ĝi estis studita, komprenita kaj akceptita de la persono, kiu estos atestita.
-
-Ĉiu okazo de renkontiĝo rilate al Ğ1 devus akompaniĝi per transdono de tiu ĉi licenco, kiu povas esti laŭte legata, kaj transdonita ĉiamaniere.
-
-Reto de Fido Äž1 (RdF Äž1)
-------------------------------
-
-**Averto :** Atesti ne estas nur certiĝi, ke vi renkontis la personon, tio estas certigi al la komunumo Ğ1, ke vi sufiĉe bone konas la atestitan personon, kaj ke vi tiel scipovos facile kontakti lin/ŝin, kaj kapablos malkovri duoblan konton kreitan de persono atestita de vi mem, aŭ alitipajn problemojn (malapero...), farante komparajn kontrolojn, kiuj eventuale ebligos elmontri la problemon.
-
-**Ege rekomendindaj konsiloj**
-
-Bone koni personon supozigas, ke vi scipovas kontakti lin/ŝin per pluraj rimedoj malsamaj (fizika, elektronika, alitipa...), sed ankaŭ ke vi konas plurajn personojn, kiuj konas lin/ŝin same bone, kaj kiuj ankaŭ scipovas kontakti lin/ŝin simile. Aparte se vi ne bone konas neniun el ties aliaj atestantoj, tio estas forta indiko, ke vi ne bone konas la personon, kaj tia atestaĵo ekas signalon al la tuta komunumo Ğ1. Kaze de nesufiĉa kono, necesas nepre ne atesti.
-
-Neniam atestu sola, sed akompanata de almenaŭ unu alia membro de la RdF Ğ1 por eviti ĉian manipulan eraron. Kaze de eraro, tuj avertu aliajn membrojn de la RdF Ğ1.
-
-Antaŭ ĉiu atestado, ne forgesu kontroli, ĉu tiu konto (ĉu ĝi estas validigota aŭ jam membro) jam ricevis unu aŭ plurajn atestaĵojn. Laŭnecese petu informojn por konkakti tiujn aliajn atestantojn por kune kontroli, ke vi bone konas la personon, kiu kreis la novan konton, kaj ankaŭ ties publikan ŝlosilon.
-
-Kontrolu ke la atestoto bone regas sian konton: bona rimedo por kontroli tion estas sendi kelkajn Ğ1 al la celata konto, kaj poste peti resendon al via propra konto. Tio certigas, ke la atestoto bone regas sian privatan ŝlosilon.
-
-Kontrolu ke viaj kontaktoj bone studis kaj komprenis la licencon Ğ1 ĝisdatan.
-
-Se vi ekkonscias, ke efektiva aÅ­ ebla atestanto de la koncernata konto ne konas la koncernatan personon, tuj avertu fakulojn pri la temo inter viaj konatoj de la RdF Äž1, por ke la valid-procezo estu kontrolita de la RdF Äž1.
-
-Kiam vi estas membro de la RdF Äž1, kaj ke vi estas atestonta novan konton:
-
-
-**Vi certiĝis:**
-
-1°) ke vi sufiĉe bone konas (ne nur "vide" konas) la personon, kiu deklaras regi tiun publikan ŝlosilon (novan konton). Vidu la ĉi-suprajn ege rekomendindajn konsilojn por certiĝi "bone koni".
-
-2°) ke vi persone kontrolis kun li/ŝi, ke temas ja pri tiu publika ŝlosilo, kiun vi estas atestonta (vidu ĉi-suprajn konsilojn).
-
-3°) ke vi bone kontrolis kun la koncernata persono, ke li/ŝi ja kreis sian Duniter-dokumenton pri konto-nuligo, kiu laŭbezone ebligos al li/ŝi malaktivigi sian membro-statuson (kaze de konto-ŝtelo, ID-ŝanĝo, erare kreita konto, ktp.).
-
-4a°) ke vi fizike renkontis la personon por certiĝi, ke ja lin/ŝin vi bone konas, kaj ke ja li/ŝi uzas tiun publikan ŝlosilon.
-
-4b°) aŭ ke vi distance kontrolis la ligon persono/publik-ŝlosilo kontaktante la personon per pluraj komunikiloj malsamaj, kiel paper-poŝto + sociaj retoj + forumo + retpoŝto + video-konferenco + telefono (rekoni la voĉon). Ĉar se oni povas fiuzi retadreson aŭ forum-konton, estos multe pli malfacile fiuzi kvar malsamajn komunikilojn, kaj imiti la aspekton (vidan) kaj plie la voĉon de la persono.
-
-La 4a°) tamen preferindas al la 4b°), dum la punktoj 1°) 2°) kaj 3°) estas antaŭ ĉio nepraj.
-
-**Resumitaj reguloj de la RdF:**
-
-Ĉiu membro havas rezervon da 100 eblaj atestaĵoj, kiujn li/ŝi povas sendi nur po 1 ĉiun 5-an tagon.
-
-Valida 2 monatojn, atestaĵo por nova membro estas definitive aprobita nur se la atestito havas almenaŭ 4 aliajn atestaĵojn fine de tiuj 2 monatoj, alie la enir-procezo devos esti rekomencita.
-
-Por fariĝi nova membro de la RdF Ğ1, necesas do akiri 5 atestaĵojn kaj troviĝi je distanco <= 5 paŝoj de 80% el la referencaj membroj de la RdF.
-
-Membro de la RdF Ğ1 estas referenca membro, kiam li/ŝi ricevis kaj sendis almenaŭ Y[N] atestaĵojn, kie N estas la nombro de membroj de la RdF kaj Y[N] = plafono N^(1/5). Ekzemploj:
-
-* por 1024 < N ≤ 3125 oni havas Y[N] = 5
-* por 7776 < N ≤ 16807 oni havas Y[N] = 7
-* por 59049 < N ≤ 100 000 oni havas Y[N] = 10
-
-Ekde kiam la nova membro partoprenas en la RdF Ğ1, ties atestaĵoj restas validaj 2 jarojn.
-
-Por resti membro necesas redoni regule sian konsenton per sia privata ŝlosilo (ĉiun 12-an monaton) kaj certiĝi daŭre havi almenaŭ 5 atestaĵojn validajn post la 2 jaroj.
-
-Mono Äž1
-----------
-
-Ğ1 produktiĝas per Universala Dividendo (UD) por ĉiu homa estaĵo membro de la Reto de Fido Ğ1, laŭ la formo:
-
-* po 1 UD por ĉiu persono ĉiutage
-
-**Kodo de la mono Äž1**
-
-La sumo en Ğ1 de la UD samas ĉiutage ĝis la venonta ekvinokso, kiam la UD estos tiam revalorigita laŭ la formulo (kun 1 tago = 86 400 sekundoj):
-
-* UDtago(sekvanta ekvinokso) = UDtago(ekvinokso) + c² (M/N)(ekvinokso) / (182,625 tagoj)
-
-kun kiel parametroj:
-
-* c = 4,88% / ekvinokso
-* UD(0) = 10,00 Äž1
-
-kaj kiel variabloj:
-
-* *M* la ĉioma mona maso je ekvinokso
-* *N* la nombro de membroj je ekvinokso
-
-Programoj Äž1 kaj licenco Äž1
---------------------------
-
-La programoj Ğ1 ebligantaj al la uzantoj mastrumi ties uzon de Ğ1 devas transdoni tiun licencon kun la programo, kaj ankaŭ la aron de la teknikaj parametroj de la mono Ğ1 kaj de la RdF Ğ1, kiu estas enskribita en la bloko 0 de Ğ1. Programo, kiu ne konformiĝus al tiuj devigoj de la licenco, ne estus kongrua kun Ğ1.
-
-Por pli da precizigoj pri la teknikaj detaloj, eblas rekte konsulti la kodon de Duniter, kiu estas libera programo, kaj ankaŭ la datenojn de la blokĉeno Ğ1 ekhavante ĝin tra  ekzemplero (aŭ nodo) Duniter Ğ1.
-
-Pli da informoj ĉe la retejo de la teamo Duniter https://www.duniter.org
\ No newline at end of file
diff --git a/license_g1-eo-EO.txt b/license_g1-eo-EO.txt
deleted file mode 100644
index 623959d96d25156d8bf3ca9c3022c82ca82de1fa..0000000000000000000000000000000000000000
--- a/license_g1-eo-EO.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-Licenco Äž1 - v0.2.9
-===================
-
-:dato: 2017-04-04 12:59 
-:modifita: 2019-07-14 12:00
-
-**Licenco de la mono kaj promeso de respondeco.**
-
-Ĉiu atestado de nova membro de Ğ1 devas antaŭe akompaniĝi per transdono de tiu ĉi licenco de la mono Ğ1, pri kiu la atestanto devas certiĝi, ke ĝi estis studita, komprenita kaj akceptita de la persono, kiu estos atestita.
-
-Ĉiu okazo de renkontiĝo rilate al Ğ1 devus akompaniĝi per transdono de tiu ĉi licenco, kiu povas esti laŭte legata, kaj transdonita ĉiamaniere.
-
-Reto de Fido Äž1 (RdF Äž1)
-------------------------------
-
-**Averto:** Atesti ne estas nur certiĝi, ke vi renkontis la personon, tio estas certigi al la komunumo Ğ1, ke vi sufiĉe bone konas la atestitan personon, kaj ke vi tiel scipovos facile kontakti lin/ŝin, kaj kapablos malkovri duoblan konton kreitan de persono atestita de vi mem, aŭ alitipajn problemojn (malapero...), farante komparajn kontrolojn, kiuj eventuale ebligos elmontri la problemon.
-
-**Ege rekomendindaj konsiloj**
-
-Bone koni personon supozigas, ke vi scipovas kontakti lin/ŝin per pluraj rimedoj malsamaj (fizika, elektronika, alitipa...), sed ankaŭ ke vi konas plurajn personojn, kiuj konas lin/ŝin same bone, kaj kiuj ankaŭ scipovas kontakti lin/ŝin simile. Aparte se vi ne bone konas neniun el ties aliaj atestantoj, tio estas forta indiko, ke vi ne bone konas la personon, kaj tia atestaĵo ekas signalon al la tuta komunumo Ğ1. Kaze de nesufiĉa kono, necesas nepre ne atesti.
-
-Neniam atestu sola, sed akompanata de almenaŭ unu alia membro de la RdF Ğ1 por eviti ĉian manipulan eraron. Kaze de eraro, tuj avertu aliajn membrojn de la RdF Ğ1.
-
-Antaŭ ĉiu atestado, ne forgesu kontroli, ĉu tiu konto (ĉu ĝi estas validigota aŭ jam membro) jam ricevis unu aŭ plurajn atestaĵojn. Laŭnecese petu informojn por konkakti tiujn aliajn atestantojn por kune kontroli, ke vi bone konas la personon, kiu kreis la novan konton, kaj ankaŭ ties publikan ŝlosilon.
-
-Kontrolu ke la atestoto bone regas sian konton: bona rimedo por kontroli tion estas sendi kelkajn Ğ1 al la celata konto, kaj poste peti resendon al via propra konto. Tio certigas, ke la atestoto bone regas sian privatan ŝlosilon.
-
-Kontrolu ke viaj kontaktoj bone studis kaj komprenis la licencon Ğ1 ĝisdatan.
-
-Se vi ekkonscias, ke efektiva aÅ­ ebla atestanto de la koncernata konto ne konas la koncernatan personon, tuj avertu fakulojn pri la temo inter viaj konatoj de la RdF Äž1, por ke la valid-procezo estu kontrolita de la RdF Äž1.
-
-Kiam vi estas membro de la RdF Äž1, kaj ke vi estas atestonta novan konton:
-
-
-**Vi certiĝis:**
-
-1°) ke vi sufiĉe bone konas (ne nur "vide" konas) la personon, kiu deklaras regi tiun publikan ŝlosilon (novan konton). Vidu la ĉi-suprajn ege rekomendindajn konsilojn por certiĝi "bone koni".
-
-2°) ke vi persone kontrolis kun li/ŝi, ke temas ja pri tiu publika ŝlosilo, kiun vi estas atestonta (vidu ĉi-suprajn konsilojn).
-
-3°) ke vi bone kontrolis kun la koncernata persono, ke li/ŝi ja kreis sian Duniter-dokumenton pri konto-nuligo, kiu laŭbezone ebligos al li/ŝi malaktivigi sian membro-statuson (kaze de konto-ŝtelo, ID-ŝanĝo, erare kreita konto, ktp.).
-
-4a°) ke vi fizike renkontis la personon por certiĝi, ke ja lin/ŝin vi bone konas, kaj ke ja li/ŝi uzas tiun publikan ŝlosilon.
-
-4b°) aŭ ke vi distance kontrolis la ligon persono/publik-ŝlosilo kontaktante la personon per pluraj komunikiloj malsamaj, kiel paper-poŝto + sociaj retoj + forumo + retpoŝto + video-konferenco + telefono (rekoni la voĉon). Ĉar se oni povas fiuzi retadreson aŭ forum-konton, estos multe pli malfacile fiuzi kvar malsamajn komunikilojn, kaj imiti la aspekton (vidan) kaj plie la voĉon de la persono.
-
-La 4a°) tamen preferindas al la 4b°), dum la punktoj 1°) 2°) kaj 3°) estas antaŭ ĉio nepraj.
-
-**Resumitaj reguloj de la RdF:**
-
-Ĉiu membro havas rezervon da 100 eblaj atestaĵoj, kiujn li/ŝi povas sendi nur po unu ĉiun kvinan tagon.
-
-Valida 2 monatojn, atestaĵo por nova membro estas definitive aprobita nur se la atestito havas almenaŭ 4 aliajn atestaĵojn fine de tiuj 2 monatoj, alie la enir-procezo devos esti rekomencita.
-
-Por fariĝi nova membro de la RdF Ğ1, necesas do akiri 5 atestaĵojn kaj troviĝi je distanco <= 5 paŝoj de 80% el la referencaj membroj de la RdF.
-
-Membro de la RdF Ğ1 estas referenca membro, kiam li/ŝi ricevis kaj sendis almenaŭ Y[N] atestaĵojn, kie N estas la nombro de membroj de la RdF kaj Y[N] = plafono N^(1/5). Ekzemploj:
-
-* por 1024 < N ≤ 3125 oni havas Y[N] = 5
-* por 7776 < N ≤ 16807 oni havas Y[N] = 7
-* por 59049 < N ≤ 100 000 oni havas Y[N] = 10
-
-Ekde kiam la nova membro partoprenas en la RdF Ğ1, ties atestaĵoj restas validaj 2 jarojn.
-
-Por resti membro necesas redoni regule sian konsenton per sia privata ŝlosilo (ĉiun 12-an monaton) kaj certiĝi daŭre havi almenaŭ 5 atestaĵojn validajn post la 2 jaroj.
-
-Mono Äž1
-----------
-
-Ğ1 produktiĝas per Universala Dividendo (UD) por ĉiu homa estaĵo membro de la Reto de Fido Ğ1, laŭ la formo:
-
-* po 1 UD por ĉiu persono ĉiutage
-
-**Kodo de la mono Äž1**
-
-La sumo en Ğ1 de la UD samas ĉiutage ĝis la venonta ekvinokso, kiam la UD estos tiam revalorigita laŭ la formulo (kun 1 tago = 86 400 sekundoj):
-
-* UDtago(sekvanta ekvinokso) = UDtago(ekvinokso) + c² (M/N)(ekvinokso) / (182,625 tagoj)
-
-kun kiel parametroj:
-
-* c = 4,88% / ekvinokso
-* UD(0) = 10,00 Äž1
-
-kaj kiel variabloj:
-
-* *M* la ĉioma mona maso je ekvinokso
-* *N* la nombro de membroj je ekvinokso
-
-Programoj Äž1 kaj licenco Äž1
---------------------------
-
-La programoj Ğ1 ebligantaj al la uzantoj mastrumi ties uzon de Ğ1 devas transdoni tiun licencon kun la programo, kaj ankaŭ la aron de la teknikaj parametroj de la mono Ğ1 kaj de la RdF Ğ1, kiu estas enskribita en la bloko 0 de Ğ1. Programo, kiu ne konformiĝus al tiuj devigoj de la licenco, ne estus kongrua kun Ğ1.
-
-Por pli da precizigoj pri la teknikaj detaloj, eblas rekte konsulti la kodon de Duniter, kiu estas libera programo, kaj ankaŭ la datenojn de la blokĉeno Ğ1 ekhavante ĝin tra  ekzemplero (aŭ nodo) Duniter Ğ1.
-
-Pli da informoj ĉe la retejo de la teamo Duniter https://www.duniter.org
diff --git a/license_g1-fr-FR.md b/license_g1-fr-FR.md
deleted file mode 100644
index 55ee3cc9d0bf6703d9333bc0af485098812b93ba..0000000000000000000000000000000000000000
--- a/license_g1-fr-FR.md
+++ /dev/null
@@ -1,97 +0,0 @@
-Licence Äž1 - v0.2.9
-===================
-
-:date: 2017-04-04 12:59
-:modifié: 2019-07-14 12:00
-
-**Licence de la monnaie et engagement de responsabilité.**
-
-Toute opération de certification d'un nouveau membre de Ğ1 doit préalablement s'accompagner de la transmission de cette licence de la monnaie Ğ1 dont le certificateur doit s'assurer qu'elle a été étudiée, comprise et acceptée par la personne qui sera certifiée.
-
-Tout événement de rencontre concernant Ğ1 devrait s'accompagner de la transmission de cette licence, qui peut être lue à haute voix, et transmise par tout moyen.
-
-Toile de confiance Äž1 (TdC Äž1)
-------------------------------
-
-**Avertissement :** Certifier n'est pas uniquement s'assurer que vous avez rencontré la personne, c'est assurer à la communauté Ğ1 que vous connaissez suffisamment bien la personne certifiée et que vous saurez ainsi la contacter facilement, et être en mesure de repérer un double compte effectué par une personne certifiée par vous-même, ou d'autres types de problèmes (disparition...), en effectuant des recoupements qui permettront de révéler le problème le cas échéant.
-
-**Conseils fortement recommandés**
-
-Bien connaître une personne suppose que vous êtes en mesure de la contacter par plusieurs moyens différents (physique, électronique, autre...) mais aussi que vous connaissez aussi plusieurs personnes qui la connaissent tout aussi bien et sont donc aussi en mesure de la contacter de même. Notamment si vous ne connaissez pas bien aucun de ses autres certificateurs c'est une indication forte que vous ne connaissez pas bien la personne et une certification de ce type déclenche une alerte vers toute la communauté Ğ1. En cas de connaissance insuffisante il convient de ne surtout pas certifier.
-
-Ne certifiez jamais seul, mais accompagné d'au moins un autre membre de la TdC Ğ1 afin d'éviter toute erreur de manipulation. En cas d'erreur, prévenez immédiatement d'autres membres de la TdC Ğ1.
-
-Avant toute certification, assurez vous de vérifier si son compte (qu'il soit en cours de validation ou déjà membre) a déjà reçu une ou plusieurs certifications. Le cas échéant demandez des informations pour entrer en contact avec ces autres certificateurs afin de vérifier ensemble que vous connaissez bien la personne concernée par la création du nouveau compte, ainsi que la clé publique correspondante.
-
-Vérifiez que le futur certifié maîtrise bien son compte : un bon moyen de vérifier cela est de transférer quelques Ğ1 vers le compte cible, et de demander ensuite un renvoi vers votre propre compte, cela assure de la bonne maîtrise par le futur certifié de sa clé privée.
-
-Vérifiez que vos contacts ont bien étudié et compris la licence Ğ1 à jour.
-
-Si vous vous rendez compte qu'un certificateur effectif ou potentiel du compte concerné ne connaît pas la personne concernée, alertez immédiatement des experts du sujet au sein de vos connaissance de la TdC Ğ1, afin que la procédure de validation soit vérifiée par la TdC Ğ1.
-
-Lorsque vous êtes membre de la TdC Ğ1 et que vous vous apprêtez à certifier un nouveau compte :
-
-
-**Vous êtes vous assuré :**
-
-1°) De suffisamment bien connaître (pas seulement de la connaître "de visu") la personne qui déclare gérer cette clé publique (nouveau compte). Voir les conseils fortement recommandés ci-dessus pour s'assurer de "bien connaître".
-
-2°) D'avoir personnellement vérifié avec elle qu'il s'agit bien de cette clé publique que vous vous apprêtez à certifier (voir conseils ci-dessus).
-
-3°) D'avoir bien vérifié avec la personne concernée qu'elle a bien généré son document Duniter de révocation de compte qui lui permettra le cas échéant de pouvoir désactiver son statut de membre (cas d'un vol de compte, d'un changement de ID, d'un compte créé à tort etc.).
-
-4a°) De rencontrer la personne physiquement pour vous assurer que c'est bien elle que vous connaissez bien et qui gère cette clé publique.
-
-4b°) Ou bien de vérifier à distance le lien personne / clé publique en contactant la personne par plusieurs moyens de communication différents, comme courrier papier + réseau social + forum + mail + vidéo conférence + téléphone (reconnaître la voix). Car si l'on peut pirater un compte mail ou un compte forum, il sera bien plus difficile d'imaginer pirater quatre moyens de communication distincts, et imiter l'apparence (vidéo) ainsi que la voix de la personne en plus.
-
-Le 4a°) restant toutefois préférable au 4b°), tandis que les points 1°) 2°) et 3°) sont préalablement indispensables.
-
-**Règles abrégées de la TdC :**
-
-Chaque membre a un stock de 100 certifications possibles, qu'il ne peut émettre qu'au rythme de 1 certification / 5 jours.
-
-Valable 2 mois, une certification pour un nouveau membre n'est définitivement adoptée que si le certifié possède au moins 4 autres certifications au bout de ces 2 mois, sinon le processus d'entrée devra être relancé.
-
-Pour devenir un nouveau membre de la TdC Ğ1 il faut donc obtenir 5 certifications et se trouver à une distance <= 5 pas de 80% des membres référents de la TdC.
-
-Un membre de la TdC Ğ1 est membre référent lorsqu'il a reçu et émis au moins Y[N] certifications où N est le nombre de membres de la TdC et Y[N] = plafond N^(1/5). Exemples :
-
-* Pour 1024 < N ≤ 3125 on a Y[N] = 5
-* Pour 7776 < N ≤ 16807 on a Y[N] = 7
-* pour 59049 < N ≤ 100 000 on a Y[N] = 10
-
-Une fois que le nouveau membre est partie prenante de la TdC Äž1 ses certifications restent valables 2 ans.
-
-Pour rester membre il faut renouveler son accord régulièrement avec sa clé privée (tous les 12 mois) et s'assurer d'avoir toujours au moins 5 certifications valides au delà des 2 ans.
-
-Monnaie Äž1
-----------
-
-Ğ1 se produit via un Dividende Universel (DU) pour tout être humain membre de la Toile de Confiance Ğ1, qui est de la forme :
-
-* 1 DU par personne et par jour
-
-**Code de la monnaie Äž1**
-
-Le montant en Ğ1 du DU est identique chaque jour jusqu'au prochain équinoxe où le DU sera alors réévalué selon la formule (avec 1 jour = 86 400 secondes) :
-
-* DUjour(équinoxe suivant) = DUjour(équinoxe) + c² (M/N)(équinoxe) / (182,625 jours)
-
-Avec comme paramètres :
-
-* c = 4,88% / équinoxe
-* DU(0) = 10,00 Äž1
-
-Et comme variables :
-
-* *M* la masse monétaire totale à l'équinoxe
-* *N* le nombre de membres à l'équinoxe
-
-Logiciels Äž1 et licence Äž1
---------------------------
-
-Les logiciels Ğ1 permettant aux utilisateurs de gérer leur utilisation de Ğ1 doivent transmettre cette licence avec le logiciel ainsi que l'ensemble des paramètres techniques de la monnaie Ğ1 et de la TdC Ğ1 qui sont inscrits dans le bloc 0 de Ğ1. Un logiciel qui ne remplirait pas ces obligations de la licence n'est pas compatible Ğ1.
-
-Pour plus de précisions dans les détails techniques il est possible de consulter directement le code de Duniter qui est un logiciel libre ainsi que les données de la blockchain Ğ1 en la récupérant via une instance (ou nœud) Duniter Ğ1.
-
-Plus d'informations sur le site de l'équipe Duniter https://www.duniter.org
\ No newline at end of file
diff --git a/license_g1-fr-FR.txt b/license_g1-fr-FR.txt
deleted file mode 100644
index 55ee3cc9d0bf6703d9333bc0af485098812b93ba..0000000000000000000000000000000000000000
--- a/license_g1-fr-FR.txt
+++ /dev/null
@@ -1,97 +0,0 @@
-Licence Äž1 - v0.2.9
-===================
-
-:date: 2017-04-04 12:59
-:modifié: 2019-07-14 12:00
-
-**Licence de la monnaie et engagement de responsabilité.**
-
-Toute opération de certification d'un nouveau membre de Ğ1 doit préalablement s'accompagner de la transmission de cette licence de la monnaie Ğ1 dont le certificateur doit s'assurer qu'elle a été étudiée, comprise et acceptée par la personne qui sera certifiée.
-
-Tout événement de rencontre concernant Ğ1 devrait s'accompagner de la transmission de cette licence, qui peut être lue à haute voix, et transmise par tout moyen.
-
-Toile de confiance Äž1 (TdC Äž1)
-------------------------------
-
-**Avertissement :** Certifier n'est pas uniquement s'assurer que vous avez rencontré la personne, c'est assurer à la communauté Ğ1 que vous connaissez suffisamment bien la personne certifiée et que vous saurez ainsi la contacter facilement, et être en mesure de repérer un double compte effectué par une personne certifiée par vous-même, ou d'autres types de problèmes (disparition...), en effectuant des recoupements qui permettront de révéler le problème le cas échéant.
-
-**Conseils fortement recommandés**
-
-Bien connaître une personne suppose que vous êtes en mesure de la contacter par plusieurs moyens différents (physique, électronique, autre...) mais aussi que vous connaissez aussi plusieurs personnes qui la connaissent tout aussi bien et sont donc aussi en mesure de la contacter de même. Notamment si vous ne connaissez pas bien aucun de ses autres certificateurs c'est une indication forte que vous ne connaissez pas bien la personne et une certification de ce type déclenche une alerte vers toute la communauté Ğ1. En cas de connaissance insuffisante il convient de ne surtout pas certifier.
-
-Ne certifiez jamais seul, mais accompagné d'au moins un autre membre de la TdC Ğ1 afin d'éviter toute erreur de manipulation. En cas d'erreur, prévenez immédiatement d'autres membres de la TdC Ğ1.
-
-Avant toute certification, assurez vous de vérifier si son compte (qu'il soit en cours de validation ou déjà membre) a déjà reçu une ou plusieurs certifications. Le cas échéant demandez des informations pour entrer en contact avec ces autres certificateurs afin de vérifier ensemble que vous connaissez bien la personne concernée par la création du nouveau compte, ainsi que la clé publique correspondante.
-
-Vérifiez que le futur certifié maîtrise bien son compte : un bon moyen de vérifier cela est de transférer quelques Ğ1 vers le compte cible, et de demander ensuite un renvoi vers votre propre compte, cela assure de la bonne maîtrise par le futur certifié de sa clé privée.
-
-Vérifiez que vos contacts ont bien étudié et compris la licence Ğ1 à jour.
-
-Si vous vous rendez compte qu'un certificateur effectif ou potentiel du compte concerné ne connaît pas la personne concernée, alertez immédiatement des experts du sujet au sein de vos connaissance de la TdC Ğ1, afin que la procédure de validation soit vérifiée par la TdC Ğ1.
-
-Lorsque vous êtes membre de la TdC Ğ1 et que vous vous apprêtez à certifier un nouveau compte :
-
-
-**Vous êtes vous assuré :**
-
-1°) De suffisamment bien connaître (pas seulement de la connaître "de visu") la personne qui déclare gérer cette clé publique (nouveau compte). Voir les conseils fortement recommandés ci-dessus pour s'assurer de "bien connaître".
-
-2°) D'avoir personnellement vérifié avec elle qu'il s'agit bien de cette clé publique que vous vous apprêtez à certifier (voir conseils ci-dessus).
-
-3°) D'avoir bien vérifié avec la personne concernée qu'elle a bien généré son document Duniter de révocation de compte qui lui permettra le cas échéant de pouvoir désactiver son statut de membre (cas d'un vol de compte, d'un changement de ID, d'un compte créé à tort etc.).
-
-4a°) De rencontrer la personne physiquement pour vous assurer que c'est bien elle que vous connaissez bien et qui gère cette clé publique.
-
-4b°) Ou bien de vérifier à distance le lien personne / clé publique en contactant la personne par plusieurs moyens de communication différents, comme courrier papier + réseau social + forum + mail + vidéo conférence + téléphone (reconnaître la voix). Car si l'on peut pirater un compte mail ou un compte forum, il sera bien plus difficile d'imaginer pirater quatre moyens de communication distincts, et imiter l'apparence (vidéo) ainsi que la voix de la personne en plus.
-
-Le 4a°) restant toutefois préférable au 4b°), tandis que les points 1°) 2°) et 3°) sont préalablement indispensables.
-
-**Règles abrégées de la TdC :**
-
-Chaque membre a un stock de 100 certifications possibles, qu'il ne peut émettre qu'au rythme de 1 certification / 5 jours.
-
-Valable 2 mois, une certification pour un nouveau membre n'est définitivement adoptée que si le certifié possède au moins 4 autres certifications au bout de ces 2 mois, sinon le processus d'entrée devra être relancé.
-
-Pour devenir un nouveau membre de la TdC Ğ1 il faut donc obtenir 5 certifications et se trouver à une distance <= 5 pas de 80% des membres référents de la TdC.
-
-Un membre de la TdC Ğ1 est membre référent lorsqu'il a reçu et émis au moins Y[N] certifications où N est le nombre de membres de la TdC et Y[N] = plafond N^(1/5). Exemples :
-
-* Pour 1024 < N ≤ 3125 on a Y[N] = 5
-* Pour 7776 < N ≤ 16807 on a Y[N] = 7
-* pour 59049 < N ≤ 100 000 on a Y[N] = 10
-
-Une fois que le nouveau membre est partie prenante de la TdC Äž1 ses certifications restent valables 2 ans.
-
-Pour rester membre il faut renouveler son accord régulièrement avec sa clé privée (tous les 12 mois) et s'assurer d'avoir toujours au moins 5 certifications valides au delà des 2 ans.
-
-Monnaie Äž1
-----------
-
-Ğ1 se produit via un Dividende Universel (DU) pour tout être humain membre de la Toile de Confiance Ğ1, qui est de la forme :
-
-* 1 DU par personne et par jour
-
-**Code de la monnaie Äž1**
-
-Le montant en Ğ1 du DU est identique chaque jour jusqu'au prochain équinoxe où le DU sera alors réévalué selon la formule (avec 1 jour = 86 400 secondes) :
-
-* DUjour(équinoxe suivant) = DUjour(équinoxe) + c² (M/N)(équinoxe) / (182,625 jours)
-
-Avec comme paramètres :
-
-* c = 4,88% / équinoxe
-* DU(0) = 10,00 Äž1
-
-Et comme variables :
-
-* *M* la masse monétaire totale à l'équinoxe
-* *N* le nombre de membres à l'équinoxe
-
-Logiciels Äž1 et licence Äž1
---------------------------
-
-Les logiciels Ğ1 permettant aux utilisateurs de gérer leur utilisation de Ğ1 doivent transmettre cette licence avec le logiciel ainsi que l'ensemble des paramètres techniques de la monnaie Ğ1 et de la TdC Ğ1 qui sont inscrits dans le bloc 0 de Ğ1. Un logiciel qui ne remplirait pas ces obligations de la licence n'est pas compatible Ğ1.
-
-Pour plus de précisions dans les détails techniques il est possible de consulter directement le code de Duniter qui est un logiciel libre ainsi que les données de la blockchain Ğ1 en la récupérant via une instance (ou nœud) Duniter Ğ1.
-
-Plus d'informations sur le site de l'équipe Duniter https://www.duniter.org
\ No newline at end of file
diff --git a/moment.eo.js b/moment.eo.js
deleted file mode 100644
index 798e7b846e819a46a71fb738a304acdf262aa97b..0000000000000000000000000000000000000000
--- a/moment.eo.js
+++ /dev/null
@@ -1,61 +0,0 @@
-//! moment.js locale configuration
-//! locale : esperanto (fr)
-//! author : Vivakvo: https://github.com/vivakvo
-
-(function (global, factory) {
-   typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
-   typeof define === 'function' && define.amd ? define(['moment'], factory) :
-   factory(global.moment)
-}(this, function (moment) { 'use strict';
-
-
-    var eo = moment.defineLocale('eo', {
-        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aÅ­gusto_septembro_oktobro_novembro_decembro'.split('_'),
-        monthsShort : 'jan._feb._mart._apr._majo_jun._jul._aÅ­g._sept._okt._nov._dec.'.split('_'),
-        weekdays : 'dimanĉo_lundo_mardo_merkredo_jaŭdo_vendredo_sabato'.split('_'),
-        weekdaysShort : 'dim._lun._mar._mer._jaÅ­._ven._sab.'.split('_'),
-        weekdaysMin : 'Di_Lu_Ma_Me_Ja_Ve_Sa'.split('_'),
-        longDateFormat : {
-            LT : 'HH:mm',
-            LTS : 'HH:mm:ss',
-            L : 'DD/MM/YYYY',
-            LL : 'D MMMM YYYY',
-            LLL : 'D MMMM YYYY HH:mm',
-            LLLL : 'dddd D MMMM YYYY HH:mm'
-        },
-        calendar : {
-            sameDay: '[HodiaÅ­ je] LT',
-            nextDay: '[MorgaÅ­ je] LT',
-            nextWeek: 'dddd [je] LT',
-            lastDay: '[HieraÅ­ je] LT',
-            lastWeek: '[Pasintan] dddd[n je] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : 'post %s',
-            past : 'antaÅ­ %s',
-            s : 'kelkaj sekundoj',
-            m : 'unu minuto',
-            mm : '%d minutoj',
-            h : 'unu horo',
-            hh : '%d horoj',
-            d : 'unu tago',
-            dd : '%d tagoj',
-            M : 'unu monato',
-            MM : '%d monatoj',
-            y : 'unu jaro',
-            yy : '%d jaroj'
-        },
-        ordinalParse: /\d{1,2}(er|)/,
-        ordinal : function (number) {
-            return number + 'a';
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-
-    return eo;
-
-}));
\ No newline at end of file
diff --git a/package.json b/package.json
index ef8cfc993c0c421459e9cfed7544ecd30a807d0f..de8b6beab7c25b09c4ce8ed16cfd23e6655d3a01 100644
--- a/package.json
+++ b/package.json
@@ -9,12 +9,12 @@
     "url": "git@git.duniter.org:clients/cesium/cesium.git"
   },
   "scripts": {
-    "postinstall": "bower install --allow-root && rm hooks/minify-conf.json hooks/uglify-config.json hooks/after_prepare/ionic-minify.js  hooks/after_prepare/uglify.js",
+    "postinstall": "bower install --allow-root && rm -f hooks/minify-conf.json hooks/uglify-config.json hooks/after_prepare/ionic-minify.js  hooks/after_prepare/uglify.js",
     "install-platforms": "ionic state restore",
     "start": "ionic serve",
     "docker:build": "sudo docker build . -t cesium/release",
     "docker:run": "sudo docker run -ti --rm -p 8100:8100 -p 35729:35729 -v .:/cesium:rw cesium/release",
-    "build:web": "config --env default && gulp build:web --release"
+    "build:web": "gulp config --env default && gulp build:web --release"
   },
   "keywords": [
     "duniter",
@@ -43,7 +43,7 @@
     "cordova-plugin-dialogs": "^1.3.4",
     "cordova-plugin-ionic-keyboard": "^2.2.0",
     "cordova-plugin-ionic-webview": "^4.1.2",
-    "cordova-plugin-minisodium": "git+https://github.com/bpresles/cordova-plugin-minisodium.git",
+    "cordova-plugin-minisodium": "git+https://github.com/E-IS/cordova-plugin-minisodium.git",
     "cordova-plugin-secure-storage": "^2.6.8",
     "cordova-plugin-splashscreen": "^3.2.2",
     "cordova-plugin-statusbar": "^2.4.3",
@@ -52,13 +52,13 @@
     "cordova-plugin-whitelist": "^1.3.4",
     "cordova-plugin-x-toast": "^2.7.2",
     "ionic-plugin-keyboard": "^2.2.1",
-    "moment": "~2.19.3",
-    "numeral": "1.5.3",
-    "phonegap-plugin-barcodescanner": "git+https://github.com/phonegap/phonegap-plugin-barcodescanner.git"
+    "moment": "~2.24.0",
+    "numeral": "1.5.6",
+    "phonegap-plugin-barcodescanner": "8.1.0"
   },
   "devDependencies": {
-    "bower": "^1.8.0",
-    "cordova-uglify": "^0.2.3",
+    "bower": "^1.8.8",
+    "cordova-uglify": "^0.2.9",
     "del": "^2.2.0",
     "delete-empty": "^0.1.3",
     "event-stream": "3.3.4",
@@ -69,7 +69,7 @@
     "gulp-base64": "^0.1.3",
     "gulp-bump": "^2.1.0",
     "gulp-clean": "^0.3.2",
-    "gulp-clean-css": "^2.0.10",
+    "gulp-clean-css": "^3.7.0",
     "gulp-concat": "^2.2.0",
     "gulp-concat-css": "^2.3.0",
     "gulp-css-base64": "^1.3.4",
@@ -88,17 +88,18 @@
     "gulp-replace": "^0.5.4",
     "gulp-rev": "^7.0.0",
     "gulp-rev-replace": "^0.4.3",
-    "gulp-sass": "^2.2.0",
+    "gulp-sass": "^3.1.0",
     "gulp-sourcemaps": "^1.6.0",
     "gulp-uglify": "^2.0.0",
     "gulp-useref": "^3.1.0",
     "gulp-util": "^3.0.8",
     "gulp-zip": "^3.2.0",
     "ionic": "^1.7.16",
-    "ionic-minify": "^2.0.8",
+    "@ionic/v1-toolkit": "2.0.18",
+    "ionic-minify": "^2.0.10",
     "jshint": "^2.9.2",
     "mv": "^2.1.1",
-    "node-sass": "^3.3.3",
+    "node-sass": "^3.13.1",
     "playup": "^1.0.2",
     "shelljs": "^0.3.0",
     "yargs": "^4.3.1"
@@ -121,10 +122,7 @@
       "id": "cordova-plugin-minisodium",
       "locator": "https://github.com/E-IS/cordova-plugin-minisodium.git"
     },
-    {
-      "id": "phonegap-plugin-barcodescanner",
-      "locator": "https://github.com/phonegap/phonegap-plugin-barcodescanner.git"
-    },
+    "phonegap-plugin-barcodescanner",
     "cordova-plugin-ionic-keyboard",
     "cordova-plugin-ionic-webview@4.1.2"
   ],
@@ -156,13 +154,11 @@
       "cordova-plugin-x-toast": {},
       "cordova-plugin-ionic-keyboard": {},
       "phonegap-plugin-barcodescanner": {
-        "CAMERA_USAGE_DESCRIPTION": "Scan QRCode"
+        "CAMERA_USAGE_DESCRIPTION": "To scan QRCode"
       },
       "ionic-plugin-keyboard": {},
       "cordova-clipboard": {},
-      "cordova-plugin-ionic-webview": {
-        "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
-      }
+      "cordova-plugin-ionic-webview": {}
     },
     "platforms": [
       "ios",
diff --git a/scss/ionic.app.scss b/scss/ionic.app.scss
index 25430b49c2bb99852872a20a24344f2a2b24fc38..ade2bd22eace3a6434a5a9f810037bf0aaf67750 100644
--- a/scss/ionic.app.scss
+++ b/scss/ionic.app.scss
@@ -52,8 +52,7 @@ $cesiumicons-font-path: "../fonts" !default;
 @import "./icons/cesiumicons";
 
 // Include ion-digit-keyboard
-// FIXME: how to remove style from HTML doc insertion ?
-//@import "www/lib/ion-digit-keyboard/src/ion-digit-keyboard";
+@import "www/lib/ion-digit-keyboard/src/ion-digit-keyboard";
 
 // --------------------------------------------------
 // Responsive: Utility classes
@@ -490,7 +489,6 @@ html, body {
     span {
       @extend .gray;
       font-size: 10px;
-      margin: 5px;
       height: 20px;
       position: absolute;
       right: 0;
@@ -544,7 +542,7 @@ html, body {
   }
 
   .list .item {
-    border-bottom: 0px !important;
+    border-bottom: 0 !important;
   }
 }
 
@@ -552,8 +550,6 @@ html, body {
 /**********
    Notifications popover
 **********/
-
-
 .popover-light,
 .popover-notification {
 
@@ -635,6 +631,15 @@ html, body {
   width: 420px;
 }
 
+.popover-wallets {
+  .item-avatar {
+    padding-left: 95px !important;
+    .icon:last-child {
+      display: none;
+    }
+  }
+}
+
 /**********
    Network
 **********/
@@ -915,11 +920,11 @@ body {
 }
 
 .refresher-positive-900-bg {
-  --refresher-background-color: $positive-900-bg;
+  --refresher-background-color: #{$positive-900-bg};
 }
 
 .refresher-dark-100-bg {
-  --refresher-background-color: $dark-100-bg;
+  --refresher-background-color: #{$dark-100-bg};
 }
 
 .platform-android {
@@ -987,38 +992,13 @@ body {
 
   .hero {
     height: 200px;
-  }
 
-  .qrcode {
-    position: absolute;
-    top: 30px;
-    padding: 3px;
-    background: #fff;
-    width: 90px;
-    max-width: 30%;
-    right: -170px;
-    -webkit-backface-visibility: hidden !important;
-    backface-visibility: hidden !important;
-    -webkit-transition: all 0.5s ease-out !important;
-    transition: all 0.5s ease-out !important;
-
-    img {
-      width: 100%;
+    h4:after {
+      content: ' ';
+      display: inline-block;
     }
   }
 
-  .qrcode.on {
-    right: 30px;
-  }
-
-  .qrcode.active {
-    top: 0px !important;
-    right: 0px !important;
-    padding: 10px;
-    width: 200px;
-    max-width: 50%;
-  }
-
   .item-text-wrap {
     white-space: normal !important;
   }
@@ -1059,20 +1039,64 @@ body {
 
 }
 
-@media screen and (max-width: $screen-sm-max) {
-  .view-wallet {
-    .qrcode {
-      top: 8px;
-      width: 60px;
-      max-width: 30%;
+/* --
+  QR code
+-- */
+
+.view-wallet,
+.view-identity {
+  .qrcode {
+    position: absolute;
+    display: block;
+    top: 0;
+    right: 0;
+    width: 0;
+    height: 0;
+    background: #fff;
+    z-index: 1;
+    -webkit-backface-visibility: hidden !important;
+    backface-visibility: hidden !important;
+    -webkit-transition: all 0.5s ease-out !important;
+    transition: all 0.5s ease-out !important;
+    overflow: hidden;
+    img {
+      display: float;
+      float: right;
+      width: 0;
+      height: 0;
+      z-index: 1;
+      transition: all 0.5s ease-out !important;
+    }
+  }
+
+  .qrcode.on {
+    width: 50px;
+    height: 50px;
+    padding: 3px;
+    margin: 7px;
+    img {
+      width: 44px;
+      height: 44px;
     }
+  }
 
-    .qrcode.on {
-      right: 8px;
+  .qrcode.on.active {
+    margin: 0 !important;
+    padding: 10px;
+    width: 200px;
+    height: 200px;
+    img {
+      width: 180px;
+      height: 180px;
     }
+  }
+}
 
+@media screen and (max-width: $screen-sm-max) {
+  .view-wallet,
+  .view-identity  {
     .hero.hero-qrcode-active {
-      h1, h2, h3, h4, h5, i {
+      h1, h2, h3, h4, h5, i.avatar {
         margin-right: 200px;
       }
     }
@@ -1138,11 +1162,48 @@ body {
 * TX view (wallet or identity)
 *******/
 
-.item-tx .badge-energized {
-  background-color: rgba(255, 201, 0, 0.3);
-  color: #888 !important;
+.item-tx{
+  border-top: solid 1px lightgray !important;
+  padding-bottom: 6px;
+  padding-top: 8px;
+  margin: 0 !important;
+
+
+  .badge-energized {
+    background-color: rgba(255, 201, 0, 0.3);
+    color: #888 !important;
+  }
+  .badge {
+    right : 1% !important;
+    top: 13px;
+  }
+  .badge-white {
+    background-color: white; // Fix issue #847
+  }
+
+  .vertical-center{
+    position: absolute;
+    top: 30%;
+    width: 40%;
+  }
+
+  .width-cup{
+    width: 175px;
+  }
+}
+
+
+
+.expert-mode .item-tx {
+  .item-note {
+    top : 8%;
+  }
+  .badge-secondary {
+    top : calc(8% + 23px) !important;
+  }
 }
 
+
 /******
 * Identity view
 *******/
@@ -1152,11 +1213,11 @@ body {
   --refresher-bg-height: 200px;
 
   // Default wallet color
-  --refresher-background-color: $dark-100-bg;
+  --refresher-background-color: #{$dark-100-bg};
 
   // if member wallet, change wallet color
   .member {
-    --refresher-background-color: $positive-900-bg;
+    --refresher-background-color: #{$positive-900-bg};
   }
 
   .hero {
@@ -1164,8 +1225,10 @@ body {
     background-color: var(--refresher-background-color);
   }
 
+
 }
 
+
 /******
 * Cards
 *******/
@@ -1229,7 +1292,7 @@ body {
     padding-top: 10px;
     padding-bottom: 2px;
     min-height: 45px !important;
-
+    margin-bottom: 1px;
   }
 
   .card-footer {
@@ -1479,14 +1542,22 @@ a.underline:hover,
   font-weight: bold !important;
 }
 
+@media screen and (max-width: $screen-sm-max) {
+  .item .badge {
+    right: 16px;
+  }
+}
+
+
 @media screen and (min-width: $screen-md) {
   .list .item.item-border-large {
+    margin-bottom: 1px;
     border-bottom: solid 1px #ccc !important;
   }
   .list.item-border-large {
     .item {
       border-bottom: solid 1px #ccc !important;
-      margin: 0px;
+      margin: 0px 0px 1px;
     }
 
     .item-divider {
@@ -1497,6 +1568,7 @@ a.underline:hover,
 
 .list .item.item-border {
   border-bottom: solid 1px #ccc !important;
+  margin-bottom: 1px;
 }
 
 .list .item.item-small-height {
@@ -1596,10 +1668,13 @@ a.underline:hover,
     max-width: 300px !important;
     display: block !important;
   }
+
   .badge:empty {
     display: none !important;
   }
-  .item .badge {
+
+  .item.item-button-right .badge,
+  .item.item-icon-right .badge {
     right: 26px !important;
   }
 }
@@ -1641,7 +1716,7 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0";
 .bar {
   .badge-button {
     margin: 0 !important;
-    padding: 0px 4px !important;
+    padding: 0 4px !important;
     font-size: 10px;
     position: absolute !important;
     top: 5px;
@@ -1918,6 +1993,10 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0";
   }
 }
 
+/**********
+   Menu
+**********/
+
 // Menu for NOT small screens
 @media screen and (min-width: $screen-sm) {
   .menu.menu-left {
@@ -2181,8 +2260,8 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0";
     font-style: italic;
     top: 37px;
     font-weight: normal !important;
-    margin-right: 0px;
-    padding-right: 0px;
+    margin-right: 0;
+    padding: 3px 8px;
   }
 
   .item-avatar .badge.badge-avatar {
@@ -2191,7 +2270,7 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0";
     right: inherit !important;
     top: 15px !important;
     margin: 0 !important;
-    padding: 0px 4px !important;
+    padding: 0 4px !important;
     font-size: 10px;
   }
 }
diff --git a/scss/leaflet.app.scss b/scss/leaflet.app.scss
index 7cc891cf1907996002a09a4499d4878411048791..bb6c4f197b1e3c2e2bfd2654c5e6ec9effb93247 100644
--- a/scss/leaflet.app.scss
+++ b/scss/leaflet.app.scss
@@ -1,8 +1,8 @@
 @charset "UTF-8";
-@import "leaflet/leaflet";
-@import "leaflet/leaflet.search";
-@import "leaflet/leaflet.easy-button";
-@import "leaflet/leaflet.loading";
-@import "leaflet/leaflet.awesome-markers";
-@import "leaflet/leaflet.markercluster";
-@import "leaflet/leaflet.markercluster.default";
+@import "www/lib/leaflet/dist/leaflet";
+@import "www/lib/leaflet-search/dist/leaflet-search.src";
+@import "www/lib/Leaflet.EasyButton/src/easy-button";
+@import "www/lib/leaflet.loading/src/Control.Loading";
+@import "www/lib/Leaflet.awesome-markers/dist/leaflet.awesome-markers";
+@import "www/lib/leaflet.markercluster/dist/MarkerCluster";
+@import "www/lib/leaflet.markercluster/dist/MarkerCluster.Default";
diff --git a/scss/leaflet/README.md b/scss/leaflet/README.md
deleted file mode 100644
index ac5cd7c78cebf73261ad7714b7d8ad1a6cb1a70e..0000000000000000000000000000000000000000
--- a/scss/leaflet/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-This SCCS config has been done by hand, from original leaflet CSS files, and CSS of plugins used in Cesium.
- 
-Hox to update this config:
- - Execute 'bower install' to get dependencies (into www/lib)
- - Search leaflet lib (in 'www/lib')
- - Copy all source CSS file into current directory
- - Rename CSS files into '_<basename>.scss'
- - Copy all images resources into current 'images' directory
-  
-make sure to update the file 'leaflet.app.scss' (e.g. when adding some Leaflet plugins)
diff --git a/scss/leaflet/_leaflet.awesome-markers.scss b/scss/leaflet/_leaflet.awesome-markers.scss
deleted file mode 100644
index 588a99c85dcd52173357678fe848538359271edf..0000000000000000000000000000000000000000
--- a/scss/leaflet/_leaflet.awesome-markers.scss
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-Author: L. Voogdt
-License: MIT
-Version: 1.0
-*/
-
-/* Marker setup */
-.awesome-marker {
-  background: url('images/markers-soft.png') no-repeat 0 0;
-  width: 35px;
-  height: 46px;
-  position:absolute;
-  left:0;
-  top:0;
-  display: block;
-  text-align: center;
-}
-
-.awesome-marker-shadow {
-  background: url('images/markers-shadow.png') no-repeat 0 0;
-  width: 36px;
-  height: 16px;
-}
-
-/* Retina displays */
-@media (min--moz-device-pixel-ratio: 1.5),(-o-min-device-pixel-ratio: 3/2),
-(-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5),(min-resolution: 1.5dppx) {
- .awesome-marker {
-  background-image: url('images/markers-soft@2x.png');
-  background-size: 720px 46px;
- }
- .awesome-marker-shadow {
-  background-image: url('images/markers-shadow@2x.png');
-  background-size: 35px 16px;
- }
-}
-
-.awesome-marker i {
-  color: #333;
-  margin-top: 10px;
-  display: inline-block;
-  font-size: 14px;
-}
-
-.awesome-marker .icon-white {
-  color: #fff;
-}
-
-/* Colors */
-.awesome-marker-icon-red {
-  background-position: 0 0;
-}
-
-.awesome-marker-icon-darkred {
-  background-position: -180px 0;
-}
-
-.awesome-marker-icon-lightred {
-  background-position: -360px 0;
-}
-
-.awesome-marker-icon-orange {
-  background-position: -36px 0;
-}
-
-.awesome-marker-icon-beige {
-  background-position: -396px 0;
-}
-
-.awesome-marker-icon-green {
-  background-position: -72px 0;
-}
-
-.awesome-marker-icon-darkgreen {
-  background-position: -252px 0;
-}
-
-.awesome-marker-icon-lightgreen {
-  background-position: -432px 0;
-}
-
-.awesome-marker-icon-blue {
-  background-position: -108px 0;
-}
-
-.awesome-marker-icon-darkblue {
-  background-position: -216px 0;
-}
-
-.awesome-marker-icon-lightblue {
-  background-position: -468px 0;
-}
-
-.awesome-marker-icon-purple {
-  background-position: -144px 0;
-}
-
-.awesome-marker-icon-darkpurple {
-  background-position: -288px 0;
-}
-
-.awesome-marker-icon-pink {
-  background-position: -504px 0;
-}
-
-.awesome-marker-icon-cadetblue {
-  background-position: -324px 0;
-}
-
-.awesome-marker-icon-white {
-  background-position: -574px 0;
-}
-
-.awesome-marker-icon-gray {
-  background-position: -648px 0;
-}
-
-.awesome-marker-icon-lightgray {
-  background-position: -612px 0;
-}
-
-.awesome-marker-icon-black {
-  background-position: -682px 0;
-}
diff --git a/scss/leaflet/_leaflet.easy-button.scss b/scss/leaflet/_leaflet.easy-button.scss
deleted file mode 100644
index 18ce9ac16199b60fcf31dfd9045df293660f74e9..0000000000000000000000000000000000000000
--- a/scss/leaflet/_leaflet.easy-button.scss
+++ /dev/null
@@ -1,56 +0,0 @@
-.leaflet-bar button,
-.leaflet-bar button:hover {
-  background-color: #fff;
-  border: none;
-  border-bottom: 1px solid #ccc;
-  width: 26px;
-  height: 26px;
-  line-height: 26px;
-  display: block;
-  text-align: center;
-  text-decoration: none;
-  color: black;
-}
-
-.leaflet-bar button {
-  background-position: 50% 50%;
-  background-repeat: no-repeat;
-  overflow: hidden;
-  display: block;
-}
-
-.leaflet-bar button:hover {
-  background-color: #f4f4f4;
-}
-
-.leaflet-bar button:first-of-type {
-  border-top-left-radius: 4px;
-  border-top-right-radius: 4px;
-}
-
-.leaflet-bar button:last-of-type {
-  border-bottom-left-radius: 4px;
-  border-bottom-right-radius: 4px;
-  border-bottom: none;
-}
-
-.leaflet-bar.disabled,
-.leaflet-bar button.disabled {
-  cursor: default;
-  pointer-events: none;
-  opacity: .4;
-}
-
-.easy-button-button .button-state{
-  display: block;
-  width: 100%;
-  height: 100%;
-  position: relative;
-}
-
-
-.leaflet-touch .leaflet-bar button {
-  width: 30px;
-  height: 30px;
-  line-height: 30px;
-}
diff --git a/scss/leaflet/_leaflet.loading.scss b/scss/leaflet/_leaflet.loading.scss
deleted file mode 100644
index f4157bc6f31522437abc8ffb64542a77d1feacc8..0000000000000000000000000000000000000000
--- a/scss/leaflet/_leaflet.loading.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-.leaflet-control-loading:empty {
-    /* Spinner via ajaxload.info, base64-encoded */
-    background-image: url(data:image/gif;base64,R0lGODlhEAAQAPQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAAKAAEALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQACgACACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQACgADACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkEAAoABAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkEAAoABQAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkEAAoABgAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAAKAAcALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkEAAoACAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAAKAAkALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQACgAKACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQACgALACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==);
-    background-repeat: no-repeat;
-}
-
-.leaflet-control-loading,
-.leaflet-control-zoom a.leaflet-control-loading,
-.leaflet-control-zoomslider a.leaflet-control-loading,
-.leaflet-control-layer-container {
-    display: none;
-}
-
-.leaflet-control-loading.is-loading,
-.leaflet-control-zoom a.leaflet-control-loading.is-loading,
-.leaflet-control-zoomslider a.leaflet-control-loading.is-loading,
-.leaflet-control-layer-container.is-loading {
-    display: block;
-}
-
-/* Necessary for display consistency in Leaflet >= 0.6 */
-.leaflet-bar-part-bottom {
-    border-bottom: medium none;
-    border-bottom-left-radius: 4px;
-    border-bottom-right-radius: 4px;
-}
diff --git a/scss/leaflet/_leaflet.markercluster.default.scss b/scss/leaflet/_leaflet.markercluster.default.scss
deleted file mode 100644
index bbc8c9fb085fcf62de8bad47b7860a7fd7b9e331..0000000000000000000000000000000000000000
--- a/scss/leaflet/_leaflet.markercluster.default.scss
+++ /dev/null
@@ -1,60 +0,0 @@
-.marker-cluster-small {
-	background-color: rgba(181, 226, 140, 0.6);
-	}
-.marker-cluster-small div {
-	background-color: rgba(110, 204, 57, 0.6);
-	}
-
-.marker-cluster-medium {
-	background-color: rgba(241, 211, 87, 0.6);
-	}
-.marker-cluster-medium div {
-	background-color: rgba(240, 194, 12, 0.6);
-	}
-
-.marker-cluster-large {
-	background-color: rgba(253, 156, 115, 0.6);
-	}
-.marker-cluster-large div {
-	background-color: rgba(241, 128, 23, 0.6);
-	}
-
-	/* IE 6-8 fallback colors */
-.leaflet-oldie .marker-cluster-small {
-	background-color: rgb(181, 226, 140);
-	}
-.leaflet-oldie .marker-cluster-small div {
-	background-color: rgb(110, 204, 57);
-	}
-
-.leaflet-oldie .marker-cluster-medium {
-	background-color: rgb(241, 211, 87);
-	}
-.leaflet-oldie .marker-cluster-medium div {
-	background-color: rgb(240, 194, 12);
-	}
-
-.leaflet-oldie .marker-cluster-large {
-	background-color: rgb(253, 156, 115);
-	}
-.leaflet-oldie .marker-cluster-large div {
-	background-color: rgb(241, 128, 23);
-}
-
-.marker-cluster {
-	background-clip: padding-box;
-	border-radius: 20px;
-	}
-.marker-cluster div {
-	width: 30px;
-	height: 30px;
-	margin-left: 5px;
-	margin-top: 5px;
-
-	text-align: center;
-	border-radius: 15px;
-	font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif;
-	}
-.marker-cluster span {
-	line-height: 30px;
-	}
\ No newline at end of file
diff --git a/scss/leaflet/_leaflet.markercluster.scss b/scss/leaflet/_leaflet.markercluster.scss
deleted file mode 100644
index c60d71b7ad1143065e06e4c6323c81da70a88946..0000000000000000000000000000000000000000
--- a/scss/leaflet/_leaflet.markercluster.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
-	-webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
-	-moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
-	-o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
-	transition: transform 0.3s ease-out, opacity 0.3s ease-in;
-}
-
-.leaflet-cluster-spider-leg {
-	/* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */
-	-webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;
-	-moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;
-	-o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;
-	transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;
-}
diff --git a/scss/leaflet/_leaflet.scss b/scss/leaflet/_leaflet.scss
deleted file mode 100644
index dea175f0f0fe3cf0c55fd63b158a25bcd4a03397..0000000000000000000000000000000000000000
--- a/scss/leaflet/_leaflet.scss
+++ /dev/null
@@ -1,479 +0,0 @@
-/* required styles */
-
-.leaflet-map-pane,
-.leaflet-tile,
-.leaflet-marker-icon,
-.leaflet-marker-shadow,
-.leaflet-tile-pane,
-.leaflet-tile-container,
-.leaflet-overlay-pane,
-.leaflet-shadow-pane,
-.leaflet-marker-pane,
-.leaflet-popup-pane,
-.leaflet-overlay-pane svg,
-.leaflet-zoom-box,
-.leaflet-image-layer,
-.leaflet-layer {
-	position: absolute;
-	left: 0;
-	top: 0;
-	}
-.leaflet-container {
-	overflow: hidden;
-	-ms-touch-action: none;
-	touch-action: none;
-	}
-.leaflet-tile,
-.leaflet-marker-icon,
-.leaflet-marker-shadow {
-	-webkit-user-select: none;
-	   -moz-user-select: none;
-	        user-select: none;
-	-webkit-user-drag: none;
-	}
-.leaflet-marker-icon,
-.leaflet-marker-shadow {
-	display: block;
-	}
-/* map is broken in FF if you have max-width: 100% on tiles */
-.leaflet-container img {
-	max-width: none !important;
-	}
-/* stupid Android 2 doesn't understand "max-width: none" properly */
-.leaflet-container img.leaflet-image-layer {
-	max-width: 15000px !important;
-	}
-.leaflet-tile {
-	filter: inherit;
-	visibility: hidden;
-	}
-.leaflet-tile-loaded {
-	visibility: inherit;
-	}
-.leaflet-zoom-box {
-	width: 0;
-	height: 0;
-	}
-/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
-.leaflet-overlay-pane svg {
-	-moz-user-select: none;
-	}
-
-.leaflet-tile-pane    { z-index: 2; }
-.leaflet-objects-pane { z-index: 3; }
-.leaflet-overlay-pane { z-index: 4; }
-.leaflet-shadow-pane  { z-index: 5; }
-.leaflet-marker-pane  { z-index: 6; }
-.leaflet-popup-pane   { z-index: 7; }
-
-.leaflet-vml-shape {
-	width: 1px;
-	height: 1px;
-	}
-.lvml {
-	behavior: url(#default#VML);
-	display: inline-block;
-	position: absolute;
-	}
-
-
-/* control positioning */
-
-.leaflet-control {
-	position: relative;
-	z-index: 7;
-	pointer-events: auto;
-	}
-.leaflet-top,
-.leaflet-bottom {
-	position: absolute;
-	z-index: 1000;
-	pointer-events: none;
-	}
-.leaflet-top {
-	top: 0;
-	}
-.leaflet-right {
-	right: 0;
-	}
-.leaflet-bottom {
-	bottom: 0;
-	}
-.leaflet-left {
-	left: 0;
-	}
-.leaflet-control {
-	float: left;
-	clear: both;
-	}
-.leaflet-right .leaflet-control {
-	float: right;
-	}
-.leaflet-top .leaflet-control {
-	margin-top: 10px;
-	}
-.leaflet-bottom .leaflet-control {
-	margin-bottom: 10px;
-	}
-.leaflet-left .leaflet-control {
-	margin-left: 10px;
-	}
-.leaflet-right .leaflet-control {
-	margin-right: 10px;
-	}
-
-
-/* zoom and fade animations */
-
-.leaflet-fade-anim .leaflet-tile,
-.leaflet-fade-anim .leaflet-popup {
-	opacity: 0;
-	-webkit-transition: opacity 0.2s linear;
-	   -moz-transition: opacity 0.2s linear;
-	     -o-transition: opacity 0.2s linear;
-	        transition: opacity 0.2s linear;
-	}
-.leaflet-fade-anim .leaflet-tile-loaded,
-.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
-	opacity: 1;
-	}
-
-.leaflet-zoom-anim .leaflet-zoom-animated {
-	-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
-	   -moz-transition:    -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
-	     -o-transition:      -o-transform 0.25s cubic-bezier(0,0,0.25,1);
-	        transition:         transform 0.25s cubic-bezier(0,0,0.25,1);
-	}
-.leaflet-zoom-anim .leaflet-tile,
-.leaflet-pan-anim .leaflet-tile,
-.leaflet-touching .leaflet-zoom-animated {
-	-webkit-transition: none;
-	   -moz-transition: none;
-	     -o-transition: none;
-	        transition: none;
-	}
-
-.leaflet-zoom-anim .leaflet-zoom-hide {
-	visibility: hidden;
-	}
-
-
-/* cursors */
-
-.leaflet-clickable {
-	cursor: pointer;
-	}
-.leaflet-container {
-	cursor: -webkit-grab;
-	cursor:    -moz-grab;
-	}
-.leaflet-popup-pane,
-.leaflet-control {
-	cursor: auto;
-	}
-.leaflet-dragging .leaflet-container,
-.leaflet-dragging .leaflet-clickable {
-	cursor: move;
-	cursor: -webkit-grabbing;
-	cursor:    -moz-grabbing;
-	}
-
-
-/* visual tweaks */
-
-.leaflet-container {
-	background: #ddd;
-	outline: 0;
-	}
-.leaflet-container a {
-	color: #0078A8;
-	}
-.leaflet-container a.leaflet-active {
-	outline: 2px solid orange;
-	}
-.leaflet-zoom-box {
-	border: 2px dotted #38f;
-	background: rgba(255,255,255,0.5);
-	}
-
-
-/* general typography */
-.leaflet-container {
-	font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
-	}
-
-
-/* general toolbar styles */
-
-.leaflet-bar {
-	box-shadow: 0 1px 5px rgba(0,0,0,0.65);
-	border-radius: 4px;
-	}
-.leaflet-bar a,
-.leaflet-bar a:hover {
-	background-color: #fff;
-	border-bottom: 1px solid #ccc;
-	width: 26px;
-	height: 26px;
-	line-height: 26px;
-	display: block;
-	text-align: center;
-	text-decoration: none;
-	color: black;
-	}
-.leaflet-bar a,
-.leaflet-control-layers-toggle {
-	background-position: 50% 50%;
-	background-repeat: no-repeat;
-	display: block;
-	}
-.leaflet-bar a:hover {
-	background-color: #f4f4f4;
-	}
-.leaflet-bar a:first-child {
-	border-top-left-radius: 4px;
-	border-top-right-radius: 4px;
-	}
-.leaflet-bar a:last-child {
-	border-bottom-left-radius: 4px;
-	border-bottom-right-radius: 4px;
-	border-bottom: none;
-	}
-.leaflet-bar a.leaflet-disabled {
-	cursor: default;
-	background-color: #f4f4f4;
-	color: #bbb;
-	}
-
-.leaflet-touch .leaflet-bar a {
-	width: 30px;
-	height: 30px;
-	line-height: 30px;
-	}
-
-
-/* zoom control */
-
-.leaflet-control-zoom-in,
-.leaflet-control-zoom-out {
-	font: bold 18px 'Lucida Console', Monaco, monospace;
-	text-indent: 1px;
-	}
-.leaflet-control-zoom-out {
-	font-size: 20px;
-	}
-
-.leaflet-touch .leaflet-control-zoom-in {
-	font-size: 22px;
-	}
-.leaflet-touch .leaflet-control-zoom-out {
-	font-size: 24px;
-	}
-
-
-/* layers control */
-
-.leaflet-control-layers {
-	box-shadow: 0 1px 5px rgba(0,0,0,0.4);
-	background: #fff;
-	border-radius: 5px;
-	}
-.leaflet-control-layers-toggle {
-	background-image: url(images/layers.png);
-	width: 36px;
-	height: 36px;
-	}
-.leaflet-retina .leaflet-control-layers-toggle {
-	background-image: url(images/layers-2x.png);
-	background-size: 26px 26px;
-	}
-.leaflet-touch .leaflet-control-layers-toggle {
-	width: 44px;
-	height: 44px;
-	}
-.leaflet-control-layers .leaflet-control-layers-list,
-.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
-	display: none;
-	}
-.leaflet-control-layers-expanded .leaflet-control-layers-list {
-	display: block;
-	position: relative;
-	}
-.leaflet-control-layers-expanded {
-	padding: 6px 10px 6px 6px;
-	color: #333;
-	background: #fff;
-	}
-.leaflet-control-layers-selector {
-	margin-top: 2px;
-	position: relative;
-	top: 1px;
-	}
-.leaflet-control-layers label {
-	display: block;
-	}
-.leaflet-control-layers-separator {
-	height: 0;
-	border-top: 1px solid #ddd;
-	margin: 5px -10px 5px -6px;
-	}
-
-
-/* attribution and scale controls */
-
-.leaflet-container .leaflet-control-attribution {
-	background: #fff;
-	background: rgba(255, 255, 255, 0.7);
-	margin: 0;
-	}
-.leaflet-control-attribution,
-.leaflet-control-scale-line {
-	padding: 0 5px;
-	color: #333;
-	}
-.leaflet-control-attribution a {
-	text-decoration: none;
-	}
-.leaflet-control-attribution a:hover {
-	text-decoration: underline;
-	}
-.leaflet-container .leaflet-control-attribution,
-.leaflet-container .leaflet-control-scale {
-	font-size: 11px;
-	}
-.leaflet-left .leaflet-control-scale {
-	margin-left: 5px;
-	}
-.leaflet-bottom .leaflet-control-scale {
-	margin-bottom: 5px;
-	}
-.leaflet-control-scale-line {
-	border: 2px solid #777;
-	border-top: none;
-	line-height: 1.1;
-	padding: 2px 5px 1px;
-	font-size: 11px;
-	white-space: nowrap;
-	overflow: hidden;
-	-moz-box-sizing: content-box;
-	     box-sizing: content-box;
-
-	background: #fff;
-	background: rgba(255, 255, 255, 0.5);
-	}
-.leaflet-control-scale-line:not(:first-child) {
-	border-top: 2px solid #777;
-	border-bottom: none;
-	margin-top: -2px;
-	}
-.leaflet-control-scale-line:not(:first-child):not(:last-child) {
-	border-bottom: 2px solid #777;
-	}
-
-.leaflet-touch .leaflet-control-attribution,
-.leaflet-touch .leaflet-control-layers,
-.leaflet-touch .leaflet-bar {
-	box-shadow: none;
-	}
-.leaflet-touch .leaflet-control-layers,
-.leaflet-touch .leaflet-bar {
-	border: 2px solid rgba(0,0,0,0.2);
-	background-clip: padding-box;
-	}
-
-
-/* popup */
-
-.leaflet-popup {
-	position: absolute;
-	text-align: center;
-	}
-.leaflet-popup-content-wrapper {
-	padding: 1px;
-	text-align: left;
-	border-radius: 12px;
-	}
-.leaflet-popup-content {
-	margin: 13px 19px;
-	line-height: 1.4;
-	}
-.leaflet-popup-content p {
-	margin: 18px 0;
-	}
-.leaflet-popup-tip-container {
-	margin: 0 auto;
-	width: 40px;
-	height: 20px;
-	position: relative;
-	overflow: hidden;
-	}
-.leaflet-popup-tip {
-	width: 17px;
-	height: 17px;
-	padding: 1px;
-
-	margin: -10px auto 0;
-
-	-webkit-transform: rotate(45deg);
-	   -moz-transform: rotate(45deg);
-	    -ms-transform: rotate(45deg);
-	     -o-transform: rotate(45deg);
-	        transform: rotate(45deg);
-	}
-.leaflet-popup-content-wrapper,
-.leaflet-popup-tip {
-	background: white;
-
-	box-shadow: 0 3px 14px rgba(0,0,0,0.4);
-	}
-.leaflet-container a.leaflet-popup-close-button {
-	position: absolute;
-	top: 0;
-	right: 0;
-	padding: 4px 4px 0 0;
-	text-align: center;
-	width: 18px;
-	height: 14px;
-	font: 16px/14px Tahoma, Verdana, sans-serif;
-	color: #c3c3c3;
-	text-decoration: none;
-	font-weight: bold;
-	background: transparent;
-	}
-.leaflet-container a.leaflet-popup-close-button:hover {
-	color: #999;
-	}
-.leaflet-popup-scrolled {
-	overflow: auto;
-	border-bottom: 1px solid #ddd;
-	border-top: 1px solid #ddd;
-	}
-
-.leaflet-oldie .leaflet-popup-content-wrapper {
-	zoom: 1;
-	}
-.leaflet-oldie .leaflet-popup-tip {
-	width: 24px;
-	margin: 0 auto;
-
-	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
-	filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
-	}
-.leaflet-oldie .leaflet-popup-tip-container {
-	margin-top: -1px;
-	}
-
-.leaflet-oldie .leaflet-control-zoom,
-.leaflet-oldie .leaflet-control-layers,
-.leaflet-oldie .leaflet-popup-content-wrapper,
-.leaflet-oldie .leaflet-popup-tip {
-	border: 1px solid #999;
-	}
-
-
-/* div icon */
-
-.leaflet-div-icon {
-	background: #fff;
-	border: 1px solid #666;
-	}
diff --git a/scss/leaflet/_leaflet.search.scss b/scss/leaflet/_leaflet.search.scss
deleted file mode 100644
index e78a16b6ef04aae6583de7b95abf2d0452ca613b..0000000000000000000000000000000000000000
--- a/scss/leaflet/_leaflet.search.scss
+++ /dev/null
@@ -1,134 +0,0 @@
-/* 
- * Leaflet Control Search v2.7.2 - 2017-04-08 
- * 
- * Copyright 2017 Stefano Cudini 
- * stefano.cudini@gmail.com 
- * http://labs.easyblog.it/ 
- * 
- * Licensed under the MIT license. 
- * 
- * Demo: 
- * http://labs.easyblog.it/maps/leaflet-search/ 
- * 
- * Source: 
- * git@github.com:stefanocudini/leaflet-search.git 
- * 
- */
- 
-.leaflet-container .leaflet-control-search {
-	position:relative;
-	float:left;
-	background:#fff;
-	color:#1978cf;
-	-moz-border-radius: 4px;
-	-webkit-border-radius: 4px;
-	border-radius: 4px;
-	background-color: rgba(255, 255, 255, 0.8);
-	z-index:1000;	
-	box-shadow: 0 1px 7px rgba(0,0,0,0.65);
-	margin-left: 10px;
-	margin-top: 10px;
-}
-.leaflet-control-search.search-exp {/*expanded*/
-	box-shadow: 0 1px 7px #999;
-	background: #fff;
-}
-.leaflet-control-search .search-input {
-	display:block;
-	float:left;
-	background: #fff;
-	border:1px solid #666;
-	border-radius:2px;
-	height:18px;
-	padding:0 18px 0 2px;
-	margin:3px 0 3px 3px;
-}
-.leaflet-control-search.search-load .search-input {
-	background: url('../images/loader.gif') no-repeat center right #fff;
-}
-.leaflet-control-search.search-load .search-cancel {
-	visibility:hidden;
-}
-.leaflet-control-search .search-cancel {
-	display:block;
-	width:22px;
-	height:18px;
-	position:absolute;
-	right:22px;
-	margin:3px 0;
-	background: url('../images/search-icon.png') no-repeat 0 -46px;
-	text-decoration:none;
-	filter: alpha(opacity=80);
-	opacity: 0.8;		
-}
-.leaflet-control-search .search-cancel:hover {
-	filter: alpha(opacity=100);
-	opacity: 1;
-}
-.leaflet-control-search .search-cancel span {
-	display:none;/* comment for cancel button imageless */
-	font-size:18px;
-	line-height:20px;
-	color:#ccc;
-	font-weight:bold;
-}
-.leaflet-control-search .search-cancel:hover span {
-	color:#aaa;
-}
-.leaflet-control-search .search-button {
-	display:block;
-	float:left;
-	width:26px;
-	height:26px;	
-	background: url('../images/search-icon.png') no-repeat 2px 2px #fff;
-	border-radius:4px;
-}
-.leaflet-control-search .search-button:hover {
-	background: url('../images/search-icon.png') no-repeat 2px -22px #fafafa;
-}
-.leaflet-control-search .search-tooltip {
-	position:absolute;
-	top:100%;
-	left:0;
-	float:left;
-	list-style: none;
-	padding-left: 0;
-	min-width:120px;
-	max-height:122px;
-	box-shadow: 1px 1px 6px rgba(0,0,0,0.4);
-	background-color: rgba(0, 0, 0, 0.25);
-	z-index:1010;
-	overflow-y:auto;
-	overflow-x:hidden;
-	cursor: pointer;
-}
-.leaflet-control-search .search-tip {
-	margin:2px;
-	padding:2px 4px;
-	display:block;
-	color:black;
-	background: #eee;
-	border-radius:.25em;
-	text-decoration:none;	
-	white-space:nowrap;
-	vertical-align:center;
-}
-.leaflet-control-search .search-button:hover {
-	background-color: #f4f4f4;
-}
-.leaflet-control-search .search-tip-select,
-.leaflet-control-search .search-tip:hover {
-	background-color: #fff;
-}
-.leaflet-control-search .search-alert {
-	cursor:pointer;
-	clear:both;
-	font-size:.75em;
-	margin-bottom:5px;
-	padding:0 .25em;
-	color:#e00;
-	font-weight:bold;
-	border-radius:.25em;
-}
-
-
diff --git a/www/api/index.html b/www/api/index.html
index 7badbd6304caa6fb8acd31cefb888469f471f87a..db048a8f2c5be587b43d43df87615308dc0cc4ec 100644
--- a/www/api/index.html
+++ b/www/api/index.html
@@ -3,13 +3,19 @@
 <head>
   <meta charset="utf-8">
   <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, width=device-width, minimal-ui">
-  <meta name="apple-mobile-web-app-capable" content="yes">
   <title>Cesium API</title>
   <link rel="icon" href="../img/favicon.ico">
 
+  <meta name="theme-color" content="black">
+
+  <meta name="apple-mobile-web-app-capable" content="yes">
+  <meta name="apple-mobile-web-app-status-bar-style" content="black">
+  <link rel="apple-touch-icon" href="../img/logo_57px.png">
+
   <!-- build:css dist_css/cesium-api.css -->
   <link rel="stylesheet" type="text/css" href="../css/ionic.app.min.css">
   <link rel="stylesheet" type="text/css" href="../css/style.css">
+  <link rel="stylesheet" type="text/css" href="../lib/angular-image-crop/image-crop-styles.css">
   <!--removeIf(device)-->
   <link rel="stylesheet" type="text/css" href="../css/style-no-device.css">
   <!--endRemoveIf(device)-->
@@ -25,43 +31,48 @@
 
 <!-- build:js dist_js/vendor-api.js -->
 <!-- vendor js -->
-<script src="../js/vendor/moment.min.js"></script>
-<script src="../js/vendor/moment.fr.js"></script>
-<script src="../js/vendor/moment.nl.js"></script>
-<script src="../js/vendor/moment.es.js"></script>
-<script src="../js/vendor/numeral.js"></script>
-<script src="../js/vendor/numeral.fr.js"></script>
-<script src="../js/vendor/numeral.en.js"></script>
-<script src="../js/vendor/numeral.nl.js"></script>
-<script src="../js/vendor/numeral.es.js"></script>
+<script src="../lib/moment/min/moment-with-locales.min.js"></script>
+<script src="../lib/numeral/numeral.js"></script>
+<script src="../lib/numeral/languages/fr.js"></script>
+<script src="../lib/numeral/languages/en-gb.js"></script>
+<script src="../lib/numeral/languages/nl-nl.js"></script>
+<script src="../lib/numeral/languages/es.js"></script>
+<script src="../lib/numeral/languages/it.js"></script>
+<script src="../js/vendor/numeral.eo.js"></script>
 <script src="../js/vendor/socket-io.js"></script>
-<script src="../js/vendor/underscore.js"></script>
+<script src="../lib/underscore/underscore-min.js"></script>
+
 
 <!-- ionic/angularjs js -->
-<script src="../lib/ionic/js/ionic.bundle.js"></script>
-<script src="../lib/ionic/js/ionic.material.js"></script>
-<script src="../lib/ionic/js/angular/angular-resource.js"></script>
-<script src="../lib/ionic/js/angular/angular-translate.js"></script>
-<script src="../lib/ionic/js/angular/angular-messages.js"></script>
-<script src="../lib/ionic/js/angular/angular-api.js"></script>
-<script src="../lib/ionic/js/angular/angular-cache.js"></script>
-<script src="../lib/ionic/js/angular/angular-screenmatch.min.js"></script>
-<script src="../lib/ionic/js/angular/angular-bind-notifier.min.js"></script>
-<script src="../lib/ionic/js/angular/angular-file-saver.bundle.js"></script>
-<script src="../lib/ionic/js/angular/angular-idle.js"></script>
-<script src="../lib/ionic/js/angular/angular-fullscreen.js"></script>
+<script src="../lib/ionic/js/ionic.js"></script>
+<script src="../lib/angular/angular.js"></script>
+<script src="../lib/angular-animate/angular-animate.js"></script>
+<script src="../lib/angular-sanitize/angular-sanitize.js"></script>
+<script src="../lib/angular-ui-router/release/angular-ui-router.js"></script>
+<script src="../lib/ionic/js/ionic-angular.js"></script>
+<script src="../lib/ionic-material/dist/ionic.material.js"></script>
+<script src="../lib/angular-resource/angular-resource.js"></script>
+<script src="../lib/angular-translate/angular-translate.js"></script>
+<script src="../lib/angular-messages/angular-messages.js"></script>
+<script src="../lib/angular-api/angular-api.js"></script>
+<script src="../lib/angular-cache/dist/angular-cache.js"></script>
+<script src="../lib/angular-screenmatch/dist/angular-screenmatch.min.js"></script>
+<script src="../lib/angular-bind-notifier/dist/angular-bind-notifier.min.js"></script>
+<script src="../lib/angular-file-saver/dist/angular-file-saver.bundle.js"></script>
+<script src="../lib/ng-idle/angular-idle.js"></script>
+<script src="../lib/angular-fullscreen/src/angular-fullscreen.js"></script>
 
   <script src="../js/vendor/base58.js" async></script>
   <!--removeIf(android)-->
   <!--removeIf(ios)-->
-  <script src="../js/vendor/nacl_factory.js" async></script>
-  <script src="../js/vendor/scrypt-em.js" async></script>
+  <script src="../lib/js-nacl/lib/nacl_factory.js" async></script>
+  <script src="../lib/js-scrypt/browser/scrypt.js" async></script>
   <script src="../js/vendor/base64.js" async></script>
   <!--endRemoveIf(ios)-->
   <!--endRemoveIf(android)-->
   <!--removeIf(no-device)-->
   <script src="../js/vendor/sha256.min.js" async></script>
-  <script src="../js/vendor/ng-cordova.min.js"></script>
+  <script src="../lib/ngCordova/dist/ng-cordova.min.js"></script>
   <!--endRemoveIf(no-device)-->
 
 <!-- endbuild -->
@@ -87,14 +98,15 @@
 <script src="../dist/dist_js/app/services/wot-services.js"></script>
 <script src="../dist/dist_js/app/services/tx-services.js"></script>
 <script src="../dist/dist_js/app/services/wallet-services.js"></script>
-<script src="../dist/dist_js/app/services/plugin-services.js"></script>
 <script src="../dist/dist_js/app/services/help-services.js"></script>
+<script src="../dist/dist_js/app/services/plugin-services.js"></script>
 <script src="../dist/dist_js/app/services.js"></script>
 <script src="../dist/dist_js/app/api/api-demo-services.js"></script>
 
 <!-- entities -->
 <script src="../dist/dist_js/app/entities/peer.js"></script>
 <script src="../dist/dist_js/app/entities/block.js"></script>
+<script src="../dist/dist_js/app/entities/ws2pmessage.js"></script>
 
 <!-- controllers -->
 <script src="../dist/dist_js/app/controllers/login-controllers.js"></script>
diff --git a/www/css/angular-image-crop.css b/www/css/angular-image-crop.css
deleted file mode 100644
index 2da5e010667905e2e2e5b8f62a25e73a2c8bd9b6..0000000000000000000000000000000000000000
--- a/www/css/angular-image-crop.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Some of these styles you can override, things like colors,
- * however some styles are required for the structure, and are critical to this module behaving properly!
- */
-
-/* Core component styles */
-.ng-image-crop {
-  text-align: center;
-  margin: 0 auto;
-  position: relative;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  -o-user-select: none;
-  user-select: none;
-}
-/* Each of the 3 steps in the process are contained within sections */
-.ng-image-crop > section {
-  background: #ccc;
-}
-/* The cropping button */
-.ng-image-crop button {
-  margin-top: 10px;
-}
-/* The dashed cropping guideline */
-.ng-image-crop .cropping-guide {
-  display: block;
-  background: rgba(255, 255, 255, .3);
-  border: 2px dashed white;
-  position: absolute;
-  pointer-events: none;
-}
-/* The circular themed cropping guideline */
-.ng-image-crop--circle .cropping-guide {
-  border-radius: 50%;
-  -webkit-border-radius: 50%;
-  -moz-border-radius: 50%;
-  -ms-border-radius: 50%;
-  -o-border-radius: 50%;
-}
-/* The canvas where the user positions the image via dragging and zooming */
-.ng-image-crop .cropping-canvas {
-  background: rgba(255, 255, 255, .3);
-  margin: 0 auto;
-  cursor: move;
-}
-/* The overlayed draggable zoom handle in the corner of the module */
-.ng-image-crop .zoom-handle {
-  display: block;
-  position: absolute;
-  bottom: 1px;
-  left: 1px;
-  background: rgba(255,255,255,0.7);
-  width: 80px;
-  height: 80px;
-  cursor: move;
-  border-radius: 200px 50px;
-}
-/* The text within the zoom handle */
-.ng-image-crop .zoom-handle > span {
-  color: rgba(0, 0, 0, 0.5);
-  -webkit-transform: rotate(-45deg);
-  -moz-transform: rotate(-45deg);
-  -ms-transform: rotate(-45deg);
-  -o-transform: rotate(-45deg);
-  transform: rotate(-45deg);
-  display: block;
-  position: relative;
-  top: 32px;
-}
\ No newline at end of file
diff --git a/www/css/ionic.app.min.css b/www/css/ionic.app.min.css
index 5f6a972e5853b9212fdbadee98bf495850a586fa..3f41cae04871be9e4f7d4cf02373d046705c4c2a 100644
--- a/www/css/ionic.app.min.css
+++ b/www/css/ionic.app.min.css
@@ -1 +1,21 @@
-@charset "UTF-8";.badge,sub,sup{vertical-align:baseline}.content,sub,sup{position:relative}.overflow-scroll .scroll,.pane{-webkit-transform:translate3d(0,0,0)}.action-sheet-open,.action-sheet-open.modal-open .modal,.menu-open .menu-content .pane,.menu-open .menu-content .scroll-content,.menu-open .menu-content .scroll-content .scroll,.modal-backdrop-bg,.modal-open{pointer-events:none}.backdrop,.ng-animate .scroll-bar{visibility:hidden}.tabs,ion-infinite-scroll{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.disable-user-behavior,.ionic-body,.scroll,body{-webkit-touch-callout:none}.disable-user-behavior,.ionic-body,a,body,img{-webkit-user-drag:none}@font-face{font-family:Ionicons;src:url(../lib/ionic/fonts/ionicons.eot?v=2.0.1);src:url(../lib/ionic/fonts/ionicons.eot?v=2.0.1#iefix) format("embedded-opentype"),url(../lib/ionic/fonts/ionicons.ttf?v=2.0.1) format("truetype"),url(../lib/ionic/fonts/ionicons.woff?v=2.0.1) format("woff"),url(../lib/ionic/fonts/ionicons.woff) format("woff"),url(../lib/ionic/fonts/ionicons.svg?v=2.0.1#Ionicons) format("svg");font-weight:400;font-style:normal}#menu .footer .icon-help:before,.badge-editable:hover:before,.icon-alert:before,.icon-help:before,.ion,.ion-alert-circled:before,.ion-alert:before,.ion-android-add-circle:before,.ion-android-add:before,.ion-android-alarm-clock:before,.ion-android-alert:before,.ion-android-apps:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down:before,.ion-android-arrow-dropdown-circle:before,.ion-android-arrow-dropdown:before,.ion-android-arrow-dropleft-circle:before,.ion-android-arrow-dropleft:before,.ion-android-arrow-dropright-circle:before,.ion-android-arrow-dropright:before,.ion-android-arrow-dropup-circle:before,.ion-android-arrow-dropup:before,.ion-android-arrow-forward:before,.ion-android-arrow-up:before,.ion-android-attach:before,.ion-android-bar:before,.ion-android-bicycle:before,.ion-android-boat:before,.ion-android-bookmark:before,.ion-android-bulb:before,.ion-android-bus:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-cancel:before,.ion-android-car:before,.ion-android-cart:before,.ion-android-chat:before,.ion-android-checkbox-blank:before,.ion-android-checkbox-outline-blank:before,.ion-android-checkbox-outline:before,.ion-android-checkbox:before,.ion-android-checkmark-circle:before,.ion-android-clipboard:before,.ion-android-close:before,.ion-android-cloud-circle:before,.ion-android-cloud-done:before,.ion-android-cloud-outline:before,.ion-android-cloud:before,.ion-android-color-palette:before,.ion-android-compass:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-contract:before,.ion-android-create:before,.ion-android-delete:before,.ion-android-desktop:before,.ion-android-document:before,.ion-android-done-all:before,.ion-android-done:before,.ion-android-download:before,.ion-android-drafts:before,.ion-android-exit:before,.ion-android-expand:before,.ion-android-favorite-outline:before,.ion-android-favorite:before,.ion-android-film:before,.ion-android-folder-open:before,.ion-android-folder:before,.ion-android-funnel:before,.ion-android-globe:before,.ion-android-hand:before,.ion-android-hangout:before,.ion-android-happy:before,.ion-android-home:before,.ion-android-image:before,.ion-android-laptop:before,.ion-android-list:before,.ion-android-locate:before,.ion-android-lock:before,.ion-android-mail:before,.ion-android-map:before,.ion-android-menu:before,.ion-android-microphone-off:before,.ion-android-microphone:before,.ion-android-more-horizontal:before,.ion-android-more-vertical:before,.ion-android-navigate:before,.ion-android-notifications-none:before,.ion-android-notifications-off:before,.ion-android-notifications:before,.ion-android-open:before,.ion-android-options:before,.ion-android-people:before,.ion-android-person-add:before,.ion-android-person:before,.ion-android-phone-landscape:before,.ion-android-phone-portrait:before,.ion-android-pin:before,.ion-android-plane:before,.ion-android-playstore:before,.ion-android-print:before,.ion-android-radio-button-off:before,.ion-android-radio-button-on:before,.ion-android-refresh:before,.ion-android-remove-circle:before,.ion-android-remove:before,.ion-android-restaurant:before,.ion-android-sad:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share-alt:before,.ion-android-share:before,.ion-android-star-half:before,.ion-android-star-outline:before,.ion-android-star:before,.ion-android-stopwatch:before,.ion-android-subway:before,.ion-android-sunny:before,.ion-android-sync:before,.ion-android-textsms:before,.ion-android-time:before,.ion-android-train:before,.ion-android-unlock:before,.ion-android-upload:before,.ion-android-volume-down:before,.ion-android-volume-mute:before,.ion-android-volume-off:before,.ion-android-volume-up:before,.ion-android-walk:before,.ion-android-warning:before,.ion-android-watch:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-backspace-outline:before,.ion-backspace:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-bowtie:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox-working:before,.ion-chatbox:before,.ion-chatboxes:before,.ion-chatbubble-working:before,.ion-chatbubble:before,.ion-chatbubbles:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-checkmark:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close-circled:before,.ion-close-round:before,.ion-close:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code-download:before,.ion-code-working:before,.ion-code:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-crop:before,.ion-cube:before,.ion-disc:before,.ion-document-text:before,.ion-document:before,.ion-drag:before,.ion-earth:before,.ion-easel:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email-unread:before,.ion-email:before,.ion-erlenmeyer-flask-bubbles:before,.ion-erlenmeyer-flask:before,.ion-eye-disabled:before,.ion-eye:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash-off:before,.ion-flash:before,.ion-folder:before,.ion-fork-repo:before,.ion-fork:before,.ion-forward:before,.ion-funnel:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy-outline:before,.ion-happy:before,.ion-headphone:before,.ion-heart-broken:before,.ion-heart:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-help:before,.ion-home:before,.ion-icecream:before,.ion-image:before,.ion-images:before,.ion-information-circled:before,.ion-information:before,.ion-ionic:before,.ion-ios-alarm-outline:before,.ion-ios-alarm:before,.ion-ios-albums-outline:before,.ion-ios-albums:before,.ion-ios-americanfootball-outline:before,.ion-ios-americanfootball:before,.ion-ios-analytics-outline:before,.ion-ios-analytics:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-left:before,.ion-ios-arrow-right:before,.ion-ios-arrow-thin-down:before,.ion-ios-arrow-thin-left:before,.ion-ios-arrow-thin-right:before,.ion-ios-arrow-thin-up:before,.ion-ios-arrow-up:before,.ion-ios-at-outline:before,.ion-ios-at:before,.ion-ios-barcode-outline:before,.ion-ios-barcode:before,.ion-ios-baseball-outline:before,.ion-ios-baseball:before,.ion-ios-basketball-outline:before,.ion-ios-basketball:before,.ion-ios-bell-outline:before,.ion-ios-bell:before,.ion-ios-body-outline:before,.ion-ios-body:before,.ion-ios-bolt-outline:before,.ion-ios-bolt:before,.ion-ios-book-outline:before,.ion-ios-book:before,.ion-ios-bookmarks-outline:before,.ion-ios-bookmarks:before,.ion-ios-box-outline:before,.ion-ios-box:before,.ion-ios-briefcase-outline:before,.ion-ios-briefcase:before,.ion-ios-browsers-outline:before,.ion-ios-browsers:before,.ion-ios-calculator-outline:before,.ion-ios-calculator:before,.ion-ios-calendar-outline:before,.ion-ios-calendar:before,.ion-ios-camera-outline:before,.ion-ios-camera:before,.ion-ios-cart-outline:before,.ion-ios-cart:before,.ion-ios-chatboxes-outline:before,.ion-ios-chatboxes:before,.ion-ios-chatbubble-outline:before,.ion-ios-chatbubble:before,.ion-ios-checkmark-empty:before,.ion-ios-checkmark-outline:before,.ion-ios-checkmark:before,.ion-ios-circle-filled:before,.ion-ios-circle-outline:before,.ion-ios-clock-outline:before,.ion-ios-clock:before,.ion-ios-close-empty:before,.ion-ios-close-outline:before,.ion-ios-close:before,.ion-ios-cloud-download-outline:before,.ion-ios-cloud-download:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloud:before,.ion-ios-cloudy-night-outline:before,.ion-ios-cloudy-night:before,.ion-ios-cloudy-outline:before,.ion-ios-cloudy:before,.ion-ios-cog-outline:before,.ion-ios-cog:before,.ion-ios-color-filter-outline:before,.ion-ios-color-filter:before,.ion-ios-color-wand-outline:before,.ion-ios-color-wand:before,.ion-ios-compose-outline:before,.ion-ios-compose:before,.ion-ios-contact-outline:before,.ion-ios-contact:before,.ion-ios-copy-outline:before,.ion-ios-copy:before,.ion-ios-crop-strong:before,.ion-ios-crop:before,.ion-ios-download-outline:before,.ion-ios-download:before,.ion-ios-drag:before,.ion-ios-email-outline:before,.ion-ios-email:before,.ion-ios-eye-outline:before,.ion-ios-eye:before,.ion-ios-fastforward-outline:before,.ion-ios-fastforward:before,.ion-ios-filing-outline:before,.ion-ios-filing:before,.ion-ios-film-outline:before,.ion-ios-film:before,.ion-ios-flag-outline:before,.ion-ios-flag:before,.ion-ios-flame-outline:before,.ion-ios-flame:before,.ion-ios-flask-outline:before,.ion-ios-flask:before,.ion-ios-flower-outline:before,.ion-ios-flower:before,.ion-ios-folder-outline:before,.ion-ios-folder:before,.ion-ios-football-outline:before,.ion-ios-football:before,.ion-ios-game-controller-a-outline:before,.ion-ios-game-controller-a:before,.ion-ios-game-controller-b-outline:before,.ion-ios-game-controller-b:before,.ion-ios-gear-outline:before,.ion-ios-gear:before,.ion-ios-glasses-outline:before,.ion-ios-glasses:before,.ion-ios-grid-view-outline:before,.ion-ios-grid-view:before,.ion-ios-heart-outline:before,.ion-ios-heart:before,.ion-ios-help-empty:before,.ion-ios-help-outline:before,.ion-ios-help:before,.ion-ios-home-outline:before,.ion-ios-home:before,.ion-ios-infinite-outline:before,.ion-ios-infinite:before,.ion-ios-information-empty:before,.ion-ios-information-outline:before,.ion-ios-information:before,.ion-ios-ionic-outline:before,.ion-ios-keypad-outline:before,.ion-ios-keypad:before,.ion-ios-lightbulb-outline:before,.ion-ios-lightbulb:before,.ion-ios-list-outline:before,.ion-ios-list:before,.ion-ios-location-outline:before,.ion-ios-location:before,.ion-ios-locked-outline:before,.ion-ios-locked:before,.ion-ios-loop-strong:before,.ion-ios-loop:before,.ion-ios-medical-outline:before,.ion-ios-medical:before,.ion-ios-medkit-outline:before,.ion-ios-medkit:before,.ion-ios-mic-off:before,.ion-ios-mic-outline:before,.ion-ios-mic:before,.ion-ios-minus-empty:before,.ion-ios-minus-outline:before,.ion-ios-minus:before,.ion-ios-monitor-outline:before,.ion-ios-monitor:before,.ion-ios-moon-outline:before,.ion-ios-moon:before,.ion-ios-more-outline:before,.ion-ios-more:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate-outline:before,.ion-ios-navigate:before,.ion-ios-nutrition-outline:before,.ion-ios-nutrition:before,.ion-ios-paper-outline:before,.ion-ios-paper:before,.ion-ios-paperplane-outline:before,.ion-ios-paperplane:before,.ion-ios-partlysunny-outline:before,.ion-ios-partlysunny:before,.ion-ios-pause-outline:before,.ion-ios-pause:before,.ion-ios-paw-outline:before,.ion-ios-paw:before,.ion-ios-people-outline:before,.ion-ios-people:before,.ion-ios-person-outline:before,.ion-ios-person:before,.ion-ios-personadd-outline:before,.ion-ios-personadd:before,.ion-ios-photos-outline:before,.ion-ios-photos:before,.ion-ios-pie-outline:before,.ion-ios-pie:before,.ion-ios-pint-outline:before,.ion-ios-pint:before,.ion-ios-play-outline:before,.ion-ios-play:before,.ion-ios-plus-empty:before,.ion-ios-plus-outline:before,.ion-ios-plus:before,.ion-ios-pricetag-outline:before,.ion-ios-pricetag:before,.ion-ios-pricetags-outline:before,.ion-ios-pricetags:before,.ion-ios-printer-outline:before,.ion-ios-printer:before,.ion-ios-pulse-strong:before,.ion-ios-pulse:before,.ion-ios-rainy-outline:before,.ion-ios-rainy:before,.ion-ios-recording-outline:before,.ion-ios-recording:before,.ion-ios-redo-outline:before,.ion-ios-redo:before,.ion-ios-refresh-empty:before,.ion-ios-refresh-outline:before,.ion-ios-refresh:before,.ion-ios-reload:before,.ion-ios-reverse-camera-outline:before,.ion-ios-reverse-camera:before,.ion-ios-rewind-outline:before,.ion-ios-rewind:before,.ion-ios-rose-outline:before,.ion-ios-rose:before,.ion-ios-search-strong:before,.ion-ios-search:before,.ion-ios-settings-strong:before,.ion-ios-settings:before,.ion-ios-shuffle-strong:before,.ion-ios-shuffle:before,.ion-ios-skipbackward-outline:before,.ion-ios-skipbackward:before,.ion-ios-skipforward-outline:before,.ion-ios-skipforward:before,.ion-ios-snowy:before,.ion-ios-speedometer-outline:before,.ion-ios-speedometer:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-star:before,.ion-ios-stopwatch-outline:before,.ion-ios-stopwatch:before,.ion-ios-sunny-outline:before,.ion-ios-sunny:before,.ion-ios-telephone-outline:before,.ion-ios-telephone:before,.ion-ios-tennisball-outline:before,.ion-ios-tennisball:before,.ion-ios-thunderstorm-outline:before,.ion-ios-thunderstorm:before,.ion-ios-time-outline:before,.ion-ios-time:before,.ion-ios-timer-outline:before,.ion-ios-timer:before,.ion-ios-toggle-outline:before,.ion-ios-toggle:before,.ion-ios-trash-outline:before,.ion-ios-trash:before,.ion-ios-undo-outline:before,.ion-ios-undo:before,.ion-ios-unlocked-outline:before,.ion-ios-unlocked:before,.ion-ios-upload-outline:before,.ion-ios-upload:before,.ion-ios-videocam-outline:before,.ion-ios-videocam:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-wineglass-outline:before,.ion-ios-wineglass:before,.ion-ios-world-outline:before,.ion-ios-world:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-location:before,.ion-lock-combination:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-minus:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon-round:before,.ion-navicon:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paintbrush:before,.ion-paintbucket:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person-add:before,.ion-person-stalker:before,.ion-person:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-plus:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-reply-all:before,.ion-reply:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad-outline:before,.ion-sad:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android-outline:before,.ion-social-android:before,.ion-social-angular-outline:before,.ion-social-angular:before,.ion-social-apple-outline:before,.ion-social-apple:before,.ion-social-bitcoin-outline:before,.ion-social-bitcoin:before,.ion-social-buffer-outline:before,.ion-social-buffer:before,.ion-social-chrome-outline:before,.ion-social-chrome:before,.ion-social-codepen-outline:before,.ion-social-codepen:before,.ion-social-css3-outline:before,.ion-social-css3:before,.ion-social-designernews-outline:before,.ion-social-designernews:before,.ion-social-dribbble-outline:before,.ion-social-dribbble:before,.ion-social-dropbox-outline:before,.ion-social-dropbox:before,.ion-social-euro-outline:before,.ion-social-euro:before,.ion-social-facebook-outline:before,.ion-social-facebook:before,.ion-social-foursquare-outline:before,.ion-social-foursquare:before,.ion-social-freebsd-devil:before,.ion-social-github-outline:before,.ion-social-github:before,.ion-social-google-outline:before,.ion-social-google:before,.ion-social-googleplus-outline:before,.ion-social-googleplus:before,.ion-social-hackernews-outline:before,.ion-social-hackernews:before,.ion-social-html5-outline:before,.ion-social-html5:before,.ion-social-instagram-outline:before,.ion-social-instagram:before,.ion-social-javascript-outline:before,.ion-social-javascript:before,.ion-social-linkedin-outline:before,.ion-social-linkedin:before,.ion-social-markdown:before,.ion-social-nodejs:before,.ion-social-octocat:before,.ion-social-pinterest-outline:before,.ion-social-pinterest:before,.ion-social-python:before,.ion-social-reddit-outline:before,.ion-social-reddit:before,.ion-social-rss-outline:before,.ion-social-rss:before,.ion-social-sass:before,.ion-social-skype-outline:before,.ion-social-skype:before,.ion-social-snapchat-outline:before,.ion-social-snapchat:before,.ion-social-tumblr-outline:before,.ion-social-tumblr:before,.ion-social-tux:before,.ion-social-twitch-outline:before,.ion-social-twitch:before,.ion-social-twitter-outline:before,.ion-social-twitter:before,.ion-social-usd-outline:before,.ion-social-usd:before,.ion-social-vimeo-outline:before,.ion-social-vimeo:before,.ion-social-whatsapp-outline:before,.ion-social-whatsapp:before,.ion-social-windows-outline:before,.ion-social-windows:before,.ion-social-wordpress-outline:before,.ion-social-wordpress:before,.ion-social-yahoo-outline:before,.ion-social-yahoo:before,.ion-social-yen-outline:before,.ion-social-yen:before,.ion-social-youtube-outline:before,.ion-social-youtube:before,.ion-soup-can-outline:before,.ion-soup-can:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle-filled:before,.ion-toggle:before,.ion-transgender:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-tshirt-outline:before,.ion-tshirt:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before,.ionicons,.text-editable:hover:after{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-alert:before{content:""}.ion-alert-circled:before{content:""}.ion-android-add:before{content:""}.ion-android-add-circle:before{content:""}.ion-android-alarm-clock:before{content:""}.icon-alert:before,.ion-android-alert:before{content:""}.ion-android-apps:before{content:""}.ion-android-archive:before{content:""}.ion-android-arrow-back:before{content:""}.ion-android-arrow-down:before{content:""}.ion-android-arrow-dropdown:before{content:""}.ion-android-arrow-dropdown-circle:before{content:""}.ion-android-arrow-dropleft:before{content:""}.ion-android-arrow-dropleft-circle:before{content:""}.ion-android-arrow-dropright:before{content:""}.ion-android-arrow-dropright-circle:before{content:""}.ion-android-arrow-dropup:before{content:""}.ion-android-arrow-dropup-circle:before{content:""}.ion-android-arrow-forward:before{content:""}.ion-android-arrow-up:before{content:""}.ion-android-attach:before{content:""}.ion-android-bar:before{content:""}.ion-android-bicycle:before{content:""}.ion-android-boat:before{content:""}.ion-android-bookmark:before{content:""}.ion-android-bulb:before{content:""}.ion-android-bus:before{content:""}.ion-android-calendar:before{content:""}.ion-android-call:before{content:""}.ion-android-camera:before{content:""}.ion-android-cancel:before{content:""}.ion-android-car:before{content:""}.ion-android-cart:before{content:""}.ion-android-chat:before{content:""}.ion-android-checkbox:before{content:""}.ion-android-checkbox-blank:before{content:""}.ion-android-checkbox-outline:before{content:""}.ion-android-checkbox-outline-blank:before{content:""}.ion-android-checkmark-circle:before{content:""}.ion-android-clipboard:before{content:""}.ion-android-close:before{content:""}.ion-android-cloud:before{content:""}.ion-android-cloud-circle:before{content:""}.ion-android-cloud-done:before{content:""}.ion-android-cloud-outline:before{content:""}.ion-android-color-palette:before{content:""}.ion-android-compass:before{content:""}.ion-android-contact:before{content:""}.ion-android-contacts:before{content:""}.ion-android-contract:before{content:""}.ion-android-create:before{content:""}.ion-android-delete:before{content:""}.ion-android-desktop:before{content:""}.ion-android-document:before{content:""}.ion-android-done:before{content:""}.ion-android-done-all:before{content:""}.ion-android-download:before{content:""}.ion-android-drafts:before{content:""}.ion-android-exit:before{content:""}.ion-android-expand:before{content:""}.ion-android-favorite:before{content:""}.ion-android-favorite-outline:before{content:""}.ion-android-film:before{content:""}.ion-android-folder:before{content:""}.ion-android-folder-open:before{content:""}.ion-android-funnel:before{content:""}.ion-android-globe:before{content:""}.ion-android-hand:before{content:""}.ion-android-hangout:before{content:""}.ion-android-happy:before{content:""}.ion-android-home:before{content:""}.ion-android-image:before{content:""}.ion-android-laptop:before{content:""}.ion-android-list:before{content:""}.ion-android-locate:before{content:""}.ion-android-lock:before{content:""}.ion-android-mail:before{content:""}.ion-android-map:before{content:""}.ion-android-menu:before{content:""}.ion-android-microphone:before{content:""}.ion-android-microphone-off:before{content:""}.ion-android-more-horizontal:before{content:""}.ion-android-more-vertical:before{content:""}.ion-android-navigate:before{content:""}.ion-android-notifications:before{content:""}.ion-android-notifications-none:before{content:""}.ion-android-notifications-off:before{content:""}.ion-android-open:before{content:""}.ion-android-options:before{content:""}.ion-android-people:before{content:""}.ion-android-person:before{content:""}.ion-android-person-add:before{content:""}.ion-android-phone-landscape:before{content:""}.ion-android-phone-portrait:before{content:""}.ion-android-pin:before{content:""}.ion-android-plane:before{content:""}.ion-android-playstore:before{content:""}.ion-android-print:before{content:""}.ion-android-radio-button-off:before{content:""}.ion-android-radio-button-on:before{content:""}.ion-android-refresh:before{content:""}.ion-android-remove:before{content:""}.ion-android-remove-circle:before{content:""}.ion-android-restaurant:before{content:""}.ion-android-sad:before{content:""}.ion-android-search:before{content:""}.ion-android-send:before{content:""}.ion-android-settings:before{content:""}.ion-android-share:before{content:""}.ion-android-share-alt:before{content:""}.ion-android-star:before{content:""}.ion-android-star-half:before{content:""}.ion-android-star-outline:before{content:""}.ion-android-stopwatch:before{content:""}.ion-android-subway:before{content:""}.ion-android-sunny:before{content:""}.ion-android-sync:before{content:""}.ion-android-textsms:before{content:""}.ion-android-time:before{content:""}.ion-android-train:before{content:""}.ion-android-unlock:before{content:""}.ion-android-upload:before{content:""}.ion-android-volume-down:before{content:""}.ion-android-volume-mute:before{content:""}.ion-android-volume-off:before{content:""}.ion-android-volume-up:before{content:""}.ion-android-walk:before{content:""}.ion-android-warning:before{content:""}.ion-android-watch:before{content:""}.ion-android-wifi:before{content:""}.ion-aperture:before{content:""}.ion-archive:before{content:""}.ion-arrow-down-a:before{content:""}.ion-arrow-down-b:before{content:""}.ion-arrow-down-c:before{content:""}.ion-arrow-expand:before{content:""}.ion-arrow-graph-down-left:before{content:""}.ion-arrow-graph-down-right:before{content:""}.ion-arrow-graph-up-left:before{content:""}.ion-arrow-graph-up-right:before{content:""}.ion-arrow-left-a:before{content:""}.ion-arrow-left-b:before{content:""}.ion-arrow-left-c:before{content:""}.ion-arrow-move:before{content:""}.ion-arrow-resize:before{content:""}.ion-arrow-return-left:before{content:""}.ion-arrow-return-right:before{content:""}.ion-arrow-right-a:before{content:""}.ion-arrow-right-b:before{content:""}.ion-arrow-right-c:before{content:""}.ion-arrow-shrink:before{content:""}.ion-arrow-swap:before{content:""}.ion-arrow-up-a:before{content:""}.ion-arrow-up-b:before{content:""}.ion-arrow-up-c:before{content:""}.ion-asterisk:before{content:""}.ion-at:before{content:""}.ion-backspace:before{content:""}.ion-backspace-outline:before{content:""}.ion-bag:before{content:""}.ion-battery-charging:before{content:""}.ion-battery-empty:before{content:""}.ion-battery-full:before{content:""}.ion-battery-half:before{content:""}.ion-battery-low:before{content:""}.ion-beaker:before{content:""}.ion-beer:before{content:""}.ion-bluetooth:before{content:""}.ion-bonfire:before{content:""}.ion-bookmark:before{content:""}.ion-bowtie:before{content:""}.ion-briefcase:before{content:""}.ion-bug:before{content:""}.ion-calculator:before{content:""}.ion-calendar:before{content:""}.ion-camera:before{content:""}.ion-card:before{content:""}.ion-cash:before{content:""}.ion-chatbox:before{content:""}.ion-chatbox-working:before{content:""}.ion-chatboxes:before{content:""}.ion-chatbubble:before{content:""}.ion-chatbubble-working:before{content:""}.ion-chatbubbles:before{content:""}.ion-checkmark:before{content:""}.ion-checkmark-circled:before{content:""}.ion-checkmark-round:before{content:""}.ion-chevron-down:before{content:""}.ion-chevron-left:before{content:""}.ion-chevron-right:before{content:""}.ion-chevron-up:before{content:""}.ion-clipboard:before{content:""}.ion-clock:before{content:""}.ion-close:before{content:""}.ion-close-circled:before{content:""}.ion-close-round:before{content:""}.ion-closed-captioning:before{content:""}.ion-cloud:before{content:""}.ion-code:before{content:""}.ion-code-download:before{content:""}.ion-code-working:before{content:""}.ion-coffee:before{content:""}.ion-compass:before{content:""}.ion-compose:before{content:""}.ion-connection-bars:before{content:""}.ion-contrast:before{content:""}.ion-crop:before{content:""}.ion-cube:before{content:""}.ion-disc:before{content:""}.ion-document:before{content:""}.ion-document-text:before{content:""}.ion-drag:before{content:""}.ion-earth:before{content:""}.ion-easel:before{content:""}.ion-edit:before{content:""}.ion-egg:before{content:""}.ion-eject:before{content:""}.ion-email:before{content:""}.ion-email-unread:before{content:""}.ion-erlenmeyer-flask:before{content:""}.ion-erlenmeyer-flask-bubbles:before{content:""}.ion-eye:before{content:""}.ion-eye-disabled:before{content:""}.ion-female:before{content:""}.ion-filing:before{content:""}.ion-film-marker:before{content:""}.ion-fireball:before{content:""}.ion-flag:before{content:""}.ion-flame:before{content:""}.ion-flash:before{content:""}.ion-flash-off:before{content:""}.ion-folder:before{content:""}.ion-fork:before{content:""}.ion-fork-repo:before{content:""}.ion-forward:before{content:""}.ion-funnel:before{content:""}.ion-gear-a:before{content:""}.ion-gear-b:before{content:""}.ion-grid:before{content:""}.ion-hammer:before{content:""}.ion-happy:before{content:""}.ion-happy-outline:before{content:""}.ion-headphone:before{content:""}.ion-heart:before{content:""}.ion-heart-broken:before{content:""}.ion-help:before{content:""}.ion-help-buoy:before{content:""}.ion-help-circled:before{content:""}.ion-home:before{content:""}.ion-icecream:before{content:""}.ion-image:before{content:""}.ion-images:before{content:""}.ion-information:before{content:""}.ion-information-circled:before{content:""}.ion-ionic:before{content:""}.ion-ios-alarm:before{content:""}.ion-ios-alarm-outline:before{content:""}.ion-ios-albums:before{content:""}.ion-ios-albums-outline:before{content:""}.ion-ios-americanfootball:before{content:""}.ion-ios-americanfootball-outline:before{content:""}.ion-ios-analytics:before{content:""}.ion-ios-analytics-outline:before{content:""}.ion-ios-arrow-back:before{content:""}.ion-ios-arrow-down:before{content:""}.ion-ios-arrow-forward:before{content:""}.ion-ios-arrow-left:before{content:""}.ion-ios-arrow-right:before{content:""}.ion-ios-arrow-thin-down:before{content:""}.ion-ios-arrow-thin-left:before{content:""}.ion-ios-arrow-thin-right:before{content:""}.ion-ios-arrow-thin-up:before{content:""}.ion-ios-arrow-up:before{content:""}.ion-ios-at:before{content:""}.ion-ios-at-outline:before{content:""}.ion-ios-barcode:before{content:""}.ion-ios-barcode-outline:before{content:""}.ion-ios-baseball:before{content:""}.ion-ios-baseball-outline:before{content:""}.ion-ios-basketball:before{content:""}.ion-ios-basketball-outline:before{content:""}.ion-ios-bell:before{content:""}.ion-ios-bell-outline:before{content:""}.ion-ios-body:before{content:""}.ion-ios-body-outline:before{content:""}.ion-ios-bolt:before{content:""}.ion-ios-bolt-outline:before{content:""}.ion-ios-book:before{content:""}.ion-ios-book-outline:before{content:""}.ion-ios-bookmarks:before{content:""}.ion-ios-bookmarks-outline:before{content:""}.ion-ios-box:before{content:""}.ion-ios-box-outline:before{content:""}.ion-ios-briefcase:before{content:""}.ion-ios-briefcase-outline:before{content:""}.ion-ios-browsers:before{content:""}.ion-ios-browsers-outline:before{content:""}.ion-ios-calculator:before{content:""}.ion-ios-calculator-outline:before{content:""}.ion-ios-calendar:before{content:""}.ion-ios-calendar-outline:before{content:""}.ion-ios-camera:before{content:""}.ion-ios-camera-outline:before{content:""}.ion-ios-cart:before{content:""}.ion-ios-cart-outline:before{content:""}.ion-ios-chatboxes:before{content:""}.ion-ios-chatboxes-outline:before{content:""}.ion-ios-chatbubble:before{content:""}.ion-ios-chatbubble-outline:before{content:""}.ion-ios-checkmark:before{content:""}.ion-ios-checkmark-empty:before{content:""}.ion-ios-checkmark-outline:before{content:""}.ion-ios-circle-filled:before{content:""}.ion-ios-circle-outline:before{content:""}.ion-ios-clock:before{content:""}.ion-ios-clock-outline:before{content:""}.ion-ios-close:before{content:""}.ion-ios-close-empty:before{content:""}.ion-ios-close-outline:before{content:""}.ion-ios-cloud:before{content:""}.ion-ios-cloud-download:before{content:""}.ion-ios-cloud-download-outline:before{content:""}.ion-ios-cloud-outline:before{content:""}.ion-ios-cloud-upload:before{content:""}.ion-ios-cloud-upload-outline:before{content:""}.ion-ios-cloudy:before{content:""}.ion-ios-cloudy-night:before{content:""}.ion-ios-cloudy-night-outline:before{content:""}.ion-ios-cloudy-outline:before{content:""}.ion-ios-cog:before{content:""}.ion-ios-cog-outline:before{content:""}.ion-ios-color-filter:before{content:""}.ion-ios-color-filter-outline:before{content:""}.ion-ios-color-wand:before{content:""}.ion-ios-color-wand-outline:before{content:""}.ion-ios-compose:before{content:""}.ion-ios-compose-outline:before{content:""}.ion-ios-contact:before{content:""}.ion-ios-contact-outline:before{content:""}.ion-ios-copy:before{content:""}.ion-ios-copy-outline:before{content:""}.ion-ios-crop:before{content:""}.ion-ios-crop-strong:before{content:""}.ion-ios-download:before{content:""}.ion-ios-download-outline:before{content:""}.ion-ios-drag:before{content:""}.ion-ios-email:before{content:""}.ion-ios-email-outline:before{content:""}.ion-ios-eye:before{content:""}.ion-ios-eye-outline:before{content:""}.ion-ios-fastforward:before{content:""}.ion-ios-fastforward-outline:before{content:""}.ion-ios-filing:before{content:""}.ion-ios-filing-outline:before{content:""}.ion-ios-film:before{content:""}.ion-ios-film-outline:before{content:""}.ion-ios-flag:before{content:""}.ion-ios-flag-outline:before{content:""}.ion-ios-flame:before{content:""}.ion-ios-flame-outline:before{content:""}.ion-ios-flask:before{content:""}.ion-ios-flask-outline:before{content:""}.ion-ios-flower:before{content:""}.ion-ios-flower-outline:before{content:""}.ion-ios-folder:before{content:""}.ion-ios-folder-outline:before{content:""}.ion-ios-football:before{content:""}.ion-ios-football-outline:before{content:""}.ion-ios-game-controller-a:before{content:""}.ion-ios-game-controller-a-outline:before{content:""}.ion-ios-game-controller-b:before{content:""}.ion-ios-game-controller-b-outline:before{content:""}.ion-ios-gear:before{content:""}.ion-ios-gear-outline:before{content:""}.ion-ios-glasses:before{content:""}.ion-ios-glasses-outline:before{content:""}.ion-ios-grid-view:before{content:""}.ion-ios-grid-view-outline:before{content:""}.ion-ios-heart:before{content:""}.ion-ios-heart-outline:before{content:""}.ion-ios-help:before{content:""}.ion-ios-help-empty:before{content:""}#menu .footer .icon-help:before,.icon-help:before,.ion-ios-help-outline:before{content:""}.ion-ios-home:before{content:""}.ion-ios-home-outline:before{content:""}.ion-ios-infinite:before{content:""}.ion-ios-infinite-outline:before{content:""}.ion-ios-information:before{content:""}.ion-ios-information-empty:before{content:""}.ion-ios-information-outline:before{content:""}.ion-ios-ionic-outline:before{content:""}.ion-ios-keypad:before{content:""}.ion-ios-keypad-outline:before{content:""}.ion-ios-lightbulb:before{content:""}.ion-ios-lightbulb-outline:before{content:""}.ion-ios-list:before{content:""}.ion-ios-list-outline:before{content:""}.ion-ios-location:before{content:""}.ion-ios-location-outline:before{content:""}.ion-ios-locked:before{content:""}.ion-ios-locked-outline:before{content:""}.ion-ios-loop:before{content:""}.ion-ios-loop-strong:before{content:""}.ion-ios-medical:before{content:""}.ion-ios-medical-outline:before{content:""}.ion-ios-medkit:before{content:""}.ion-ios-medkit-outline:before{content:""}.ion-ios-mic:before{content:""}.ion-ios-mic-off:before{content:""}.ion-ios-mic-outline:before{content:""}.ion-ios-minus:before{content:""}.ion-ios-minus-empty:before{content:""}.ion-ios-minus-outline:before{content:""}.ion-ios-monitor:before{content:""}.ion-ios-monitor-outline:before{content:""}.ion-ios-moon:before{content:""}.ion-ios-moon-outline:before{content:""}.ion-ios-more:before{content:""}.ion-ios-more-outline:before{content:""}.ion-ios-musical-note:before{content:""}.ion-ios-musical-notes:before{content:""}.ion-ios-navigate:before{content:""}.ion-ios-navigate-outline:before{content:""}.ion-ios-nutrition:before{content:""}.ion-ios-nutrition-outline:before{content:""}.ion-ios-paper:before{content:""}.ion-ios-paper-outline:before{content:""}.ion-ios-paperplane:before{content:""}.ion-ios-paperplane-outline:before{content:""}.ion-ios-partlysunny:before{content:""}.ion-ios-partlysunny-outline:before{content:""}.ion-ios-pause:before{content:""}.ion-ios-pause-outline:before{content:""}.ion-ios-paw:before{content:""}.ion-ios-paw-outline:before{content:""}.ion-ios-people:before{content:""}.ion-ios-people-outline:before{content:""}.ion-ios-person:before{content:""}.ion-ios-person-outline:before{content:""}.ion-ios-personadd:before{content:""}.ion-ios-personadd-outline:before{content:""}.ion-ios-photos:before{content:""}.ion-ios-photos-outline:before{content:""}.ion-ios-pie:before{content:""}.ion-ios-pie-outline:before{content:""}.ion-ios-pint:before{content:""}.ion-ios-pint-outline:before{content:""}.ion-ios-play:before{content:""}.ion-ios-play-outline:before{content:""}.ion-ios-plus:before{content:""}.ion-ios-plus-empty:before{content:""}.ion-ios-plus-outline:before{content:""}.ion-ios-pricetag:before{content:""}.ion-ios-pricetag-outline:before{content:""}.ion-ios-pricetags:before{content:""}.ion-ios-pricetags-outline:before{content:""}.ion-ios-printer:before{content:""}.ion-ios-printer-outline:before{content:""}.ion-ios-pulse:before{content:""}.ion-ios-pulse-strong:before{content:""}.ion-ios-rainy:before{content:""}.ion-ios-rainy-outline:before{content:""}.ion-ios-recording:before{content:""}.ion-ios-recording-outline:before{content:""}.ion-ios-redo:before{content:""}.ion-ios-redo-outline:before{content:""}.ion-ios-refresh:before{content:""}.ion-ios-refresh-empty:before{content:""}.ion-ios-refresh-outline:before{content:""}.ion-ios-reload:before{content:""}.ion-ios-reverse-camera:before{content:""}.ion-ios-reverse-camera-outline:before{content:""}.ion-ios-rewind:before{content:""}.ion-ios-rewind-outline:before{content:""}.ion-ios-rose:before{content:""}.ion-ios-rose-outline:before{content:""}.ion-ios-search:before{content:""}.ion-ios-search-strong:before{content:""}.ion-ios-settings:before{content:""}.ion-ios-settings-strong:before{content:""}.ion-ios-shuffle:before{content:""}.ion-ios-shuffle-strong:before{content:""}.ion-ios-skipbackward:before{content:""}.ion-ios-skipbackward-outline:before{content:""}.ion-ios-skipforward:before{content:""}.ion-ios-skipforward-outline:before{content:""}.ion-ios-snowy:before{content:""}.ion-ios-speedometer:before{content:""}.ion-ios-speedometer-outline:before{content:""}.ion-ios-star:before{content:""}.ion-ios-star-half:before{content:""}.ion-ios-star-outline:before{content:""}.ion-ios-stopwatch:before{content:""}.ion-ios-stopwatch-outline:before{content:""}.ion-ios-sunny:before{content:""}.ion-ios-sunny-outline:before{content:""}.ion-ios-telephone:before{content:""}.ion-ios-telephone-outline:before{content:""}.ion-ios-tennisball:before{content:""}.ion-ios-tennisball-outline:before{content:""}.ion-ios-thunderstorm:before{content:""}.ion-ios-thunderstorm-outline:before{content:""}.ion-ios-time:before{content:""}.ion-ios-time-outline:before{content:""}.ion-ios-timer:before{content:""}.ion-ios-timer-outline:before{content:""}.ion-ios-toggle:before{content:""}.ion-ios-toggle-outline:before{content:""}.ion-ios-trash:before{content:""}.ion-ios-trash-outline:before{content:""}.ion-ios-undo:before{content:""}.ion-ios-undo-outline:before{content:""}.ion-ios-unlocked:before{content:""}.ion-ios-unlocked-outline:before{content:""}.ion-ios-upload:before{content:""}.ion-ios-upload-outline:before{content:""}.ion-ios-videocam:before{content:""}.ion-ios-videocam-outline:before{content:""}.ion-ios-volume-high:before{content:""}.ion-ios-volume-low:before{content:""}.ion-ios-wineglass:before{content:""}.ion-ios-wineglass-outline:before{content:""}.ion-ios-world:before{content:""}.ion-ios-world-outline:before{content:""}.ion-ipad:before{content:""}.ion-iphone:before{content:""}.ion-ipod:before{content:""}.ion-jet:before{content:""}.ion-key:before{content:""}.ion-knife:before{content:""}.ion-laptop:before{content:""}.ion-leaf:before{content:""}.ion-levels:before{content:""}.ion-lightbulb:before{content:""}.ion-link:before{content:""}.ion-load-a:before{content:""}.ion-load-b:before{content:""}.ion-load-c:before{content:""}.ion-load-d:before{content:""}.ion-location:before{content:""}.ion-lock-combination:before{content:""}.ion-locked:before{content:""}.ion-log-in:before{content:""}.ion-log-out:before{content:""}.ion-loop:before{content:""}.ion-magnet:before{content:""}.ion-male:before{content:""}.ion-man:before{content:""}.ion-map:before{content:""}.ion-medkit:before{content:""}.ion-merge:before{content:""}.ion-mic-a:before{content:""}.ion-mic-b:before{content:""}.ion-mic-c:before{content:""}.ion-minus:before{content:""}.ion-minus-circled:before{content:""}.ion-minus-round:before{content:""}.ion-model-s:before{content:""}.ion-monitor:before{content:""}.ion-more:before{content:""}.ion-mouse:before{content:""}.ion-music-note:before{content:""}.ion-navicon:before{content:""}.ion-navicon-round:before{content:""}.ion-navigate:before{content:""}.ion-network:before{content:""}.ion-no-smoking:before{content:""}.ion-nuclear:before{content:""}.ion-outlet:before{content:""}.ion-paintbrush:before{content:""}.ion-paintbucket:before{content:""}.ion-paper-airplane:before{content:""}.ion-paperclip:before{content:""}.ion-pause:before{content:""}.ion-person:before{content:""}.ion-person-add:before{content:""}.ion-person-stalker:before{content:""}.ion-pie-graph:before{content:""}.ion-pin:before{content:""}.ion-pinpoint:before{content:""}.ion-pizza:before{content:""}.ion-plane:before{content:""}.ion-planet:before{content:""}.ion-play:before{content:""}.ion-playstation:before{content:""}.ion-plus:before{content:""}.ion-plus-circled:before{content:""}.ion-plus-round:before{content:""}.ion-podium:before{content:""}.ion-pound:before{content:""}.ion-power:before{content:""}.ion-pricetag:before{content:""}.ion-pricetags:before{content:""}.ion-printer:before{content:""}.ion-pull-request:before{content:""}.ion-qr-scanner:before{content:""}.ion-quote:before{content:""}.ion-radio-waves:before{content:""}.ion-record:before{content:""}.ion-refresh:before{content:""}.ion-reply:before{content:""}.ion-reply-all:before{content:""}.ion-ribbon-a:before{content:""}.ion-ribbon-b:before{content:""}.ion-sad:before{content:""}.ion-sad-outline:before{content:""}.ion-scissors:before{content:""}.ion-search:before{content:""}.ion-settings:before{content:""}.ion-share:before{content:""}.ion-shuffle:before{content:""}.ion-skip-backward:before{content:""}.ion-skip-forward:before{content:""}.ion-social-android:before{content:""}.ion-social-android-outline:before{content:""}.ion-social-angular:before{content:""}.ion-social-angular-outline:before{content:""}.ion-social-apple:before{content:""}.ion-social-apple-outline:before{content:""}.ion-social-bitcoin:before{content:""}.ion-social-bitcoin-outline:before{content:""}.ion-social-buffer:before{content:""}.ion-social-buffer-outline:before{content:""}.ion-social-chrome:before{content:""}.ion-social-chrome-outline:before{content:""}.ion-social-codepen:before{content:""}.ion-social-codepen-outline:before{content:""}.ion-social-css3:before{content:""}.ion-social-css3-outline:before{content:""}.ion-social-designernews:before{content:""}.ion-social-designernews-outline:before{content:""}.ion-social-dribbble:before{content:""}.ion-social-dribbble-outline:before{content:""}.ion-social-dropbox:before{content:""}.ion-social-dropbox-outline:before{content:""}.ion-social-euro:before{content:""}.ion-social-euro-outline:before{content:""}.ion-social-facebook:before{content:""}.ion-social-facebook-outline:before{content:""}.ion-social-foursquare:before{content:""}.ion-social-foursquare-outline:before{content:""}.ion-social-freebsd-devil:before{content:""}.ion-social-github:before{content:""}.ion-social-github-outline:before{content:""}.ion-social-google:before{content:""}.ion-social-google-outline:before{content:""}.ion-social-googleplus:before{content:""}.ion-social-googleplus-outline:before{content:""}.ion-social-hackernews:before{content:""}.ion-social-hackernews-outline:before{content:""}.ion-social-html5:before{content:""}.ion-social-html5-outline:before{content:""}.ion-social-instagram:before{content:""}.ion-social-instagram-outline:before{content:""}.ion-social-javascript:before{content:""}.ion-social-javascript-outline:before{content:""}.ion-social-linkedin:before{content:""}.ion-social-linkedin-outline:before{content:""}.ion-social-markdown:before{content:""}.ion-social-nodejs:before{content:""}.ion-social-octocat:before{content:""}.ion-social-pinterest:before{content:""}.ion-social-pinterest-outline:before{content:""}.ion-social-python:before{content:""}.ion-social-reddit:before{content:""}.ion-social-reddit-outline:before{content:""}.ion-social-rss:before{content:""}.ion-social-rss-outline:before{content:""}.ion-social-sass:before{content:""}.ion-social-skype:before{content:""}.ion-social-skype-outline:before{content:""}.ion-social-snapchat:before{content:""}.ion-social-snapchat-outline:before{content:""}.ion-social-tumblr:before{content:""}.ion-social-tumblr-outline:before{content:""}.ion-social-tux:before{content:""}.ion-social-twitch:before{content:""}.ion-social-twitch-outline:before{content:""}.ion-social-twitter:before{content:""}.ion-social-twitter-outline:before{content:""}.ion-social-usd:before{content:""}.ion-social-usd-outline:before{content:""}.ion-social-vimeo:before{content:""}.ion-social-vimeo-outline:before{content:""}.ion-social-whatsapp:before{content:""}.ion-social-whatsapp-outline:before{content:""}.ion-social-windows:before{content:""}.ion-social-windows-outline:before{content:""}.ion-social-wordpress:before{content:""}.ion-social-wordpress-outline:before{content:""}.ion-social-yahoo:before{content:""}.ion-social-yahoo-outline:before{content:""}.ion-social-yen:before{content:""}.ion-social-yen-outline:before{content:""}.ion-social-youtube:before{content:""}.ion-social-youtube-outline:before{content:""}.ion-soup-can:before{content:""}.ion-soup-can-outline:before{content:""}.ion-speakerphone:before{content:""}.ion-speedometer:before{content:""}.ion-spoon:before{content:""}.ion-star:before{content:""}.ion-stats-bars:before{content:""}.ion-steam:before{content:""}.ion-stop:before{content:""}.ion-thermometer:before{content:""}.ion-thumbsdown:before{content:""}.ion-thumbsup:before{content:""}.ion-toggle:before{content:""}.ion-toggle-filled:before{content:""}.ion-transgender:before{content:""}.ion-trash-a:before{content:""}.ion-trash-b:before{content:""}.ion-trophy:before{content:""}.ion-tshirt:before{content:""}.ion-tshirt-outline:before{content:""}.ion-umbrella:before{content:""}.ion-university:before{content:""}.ion-unlocked:before{content:""}.ion-upload:before{content:""}.ion-usb:before{content:""}.ion-videocamera:before{content:""}.ion-volume-high:before{content:""}.ion-volume-low:before{content:""}.ion-volume-medium:before{content:""}.ion-volume-mute:before{content:""}.ion-wand:before{content:""}.ion-waterdrop:before{content:""}.ion-wifi:before{content:""}.ion-wineglass:before{content:""}.ion-woman:before{content:""}.ion-wrench:before{content:""}.ion-xbox:before{content:""}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;vertical-align:baseline;font:inherit;font-size:100%}ol,ul{list-style:none}blockquote,q{quotes:none}audio:not([controls]){display:none;height:0}[hidden],template{display:none}script{display:none!important}html{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;overflow:hidden;-ms-touch-action:pan-y;touch-action:pan-y}:focus,a,a:active,a:focus,a:hover,button,button:focus{outline:0}a[href]:hover{cursor:pointer}b,strong{font-weight:700}dfn{font-style:italic}address,cite{font-style:normal}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}code,kbd,pre,samp{font-size:1em;font-family:monospace,serif}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}fieldset{margin:0 2px;padding:.35em .625em .75em;border:1px solid silver}button,input,select,textarea{margin:0;outline-offset:0;outline-style:none;outline-width:0;-webkit-font-smoothing:inherit;background-image:none}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ionic-body,body{-webkit-font-smoothing:antialiased;font-smoothing:antialiased;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0;padding:0;color:#000;word-wrap:break-word;font-size:14px;font-family:-apple-system;font-family:"-apple-system","Helvetica Neue",Roboto,"Segoe UI",sans-serif;line-height:20px;text-rendering:optimizeLegibility;-webkit-backface-visibility:hidden;-ms-content-zooming:none}.bar,.scroll{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.scroll-content,.scroll-view{overflow:hidden;margin-top:-1px}.h1,.h2,.h3,.h4,.h5,.h6,.tab-item,button,h1,h2,h3,h4,h5,h6,input,select,textarea{font-family:"-apple-system","Helvetica Neue",Roboto,"Segoe UI",sans-serif}body.grade-b,body.grade-c{text-rendering:auto}.scroll-content{position:absolute;top:0;right:0;bottom:0;left:0;padding-top:1px;margin-bottom:-1px;width:auto;height:auto}.scroll-view,.scroll-view.overflow-scroll{position:relative}.menu .scroll-content.scroll-content-false{z-index:11}.scroll-view{display:block}.scroll-view.scroll-x{overflow-x:scroll;overflow-y:hidden}.scroll-view.scroll-y{overflow-x:hidden;overflow-y:scroll}.scroll-view.scroll-xy{overflow-x:scroll;overflow-y:scroll}.overflow-scroll,.overflow-scroll.pane{overflow-x:hidden;overflow-y:scroll}.scroll{user-select:none;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-transform-origin:left top;transform-origin:left top}@-ms-viewport{width:device-width}.scroll-bar{position:absolute;z-index:9999}.pane,.view{z-index:1}.scroll-bar-h{right:2px;bottom:3px;left:2px;height:3px}.scroll-bar-h .scroll-bar-indicator{height:100%}.scroll-bar-v{top:2px;right:3px;bottom:2px;width:3px}.scroll-bar-v .scroll-bar-indicator{width:100%}.scroll-bar-indicator{position:absolute;border-radius:4px;background:rgba(0,0,0,.3);opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.backdrop,.scroll-bar-indicator.scroll-bar-fade-out{opacity:0}.platform-android .scroll-bar-indicator{border-radius:0}.grade-b .scroll-bar-indicator,.grade-c .scroll-bar-indicator{background:#aaa}.grade-b .scroll-bar-indicator.scroll-bar-fade-out,.grade-c .scroll-bar-indicator.scroll-bar-fade-out{-webkit-transition:none;transition:none}ion-infinite-scroll{height:60px;width:100%;display:block;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}#menu .footer ion-infinite-scroll .icon-help,ion-infinite-scroll #menu .footer .icon-help,ion-infinite-scroll .icon,ion-infinite-scroll .icon-alert,ion-infinite-scroll .icon-help{font-size:30px;color:#666}#menu .footer ion-infinite-scroll:not(.active) .icon-help:before,ion-infinite-scroll:not(.active) #menu .footer .icon-help:before,ion-infinite-scroll:not(.active) .icon-alert:before,ion-infinite-scroll:not(.active) .icon-help:before,ion-infinite-scroll:not(.active) .icon:before,ion-infinite-scroll:not(.active) .spinner{display:none}.view-container,address,blockquote small{display:block}.overflow-scroll{-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;top:0;right:0;bottom:0;left:0;position:absolute}.overflow-scroll .scroll{position:static;height:100%}.has-header{top:44px}.no-header{top:0}.has-subheader{top:88px}.has-tabs-top{top:93px}.has-header.has-subheader.has-tabs-top{top:137px}.has-footer{bottom:44px}.has-subfooter{bottom:88px}.bar-footer.has-tabs,.has-tabs{bottom:49px}.bar-footer.has-tabs.pane,.has-tabs.pane{bottom:49px;height:auto}.bar-subfooter.has-tabs,.has-footer.has-tabs{bottom:93px}.action-sheet-wrapper,.pane,.view{bottom:0;left:0;width:100%;right:0}.pane{transform:translate3d(0,0,0);-webkit-transition-duration:0;transition-duration:0}.pane,.view{position:absolute;top:0;height:100%;background-color:#fff;overflow:hidden}.view-container{position:absolute;width:100%;height:100%}p{margin:0 0 10px}small{font-size:85%}.text-left{text-align:left}.text-right{text-align:right}.item.large-button-bar,.text-center{text-align:center}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:#000;font-weight:500;line-height:1.2}.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1}address,blockquote small,dd,dt{line-height:1.42857}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1:first-child,.h2:first-child,.h3:first-child,h1:first-child,h2:first-child,h3:first-child{margin-top:0}.h1+.h1,.h1+.h2,.h1+.h3,.h1+h1,.h1+h2,.h1+h3,.h2+.h1,.h2+.h2,.h2+.h3,.h2+h1,.h2+h2,.h2+h3,.h3+.h1,.h3+.h2,.h3+.h3,.h3+h1,.h3+h2,.h3+h3,h1+.h1,h1+.h2,h1+.h3,h1+h1,h1+h2,h1+h3,h2+.h1,h2+.h2,h2+.h3,h2+h1,h2+h2,h2+h3,h3+.h1,h3+.h2,h3+.h3,h3+h1,h3+h2,h3+h3{margin-top:10px}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}address,dl{margin-bottom:20px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}.h1 small,h1 small{font-size:24px}.h2 small,h2 small{font-size:18px}.h3 small,.h4 small,h3 small,h4 small{font-size:14px}dt{font-weight:700}blockquote{margin:0 0 20px;padding:10px 20px;border-left:5px solid gray}blockquote p{font-weight:300;font-size:17.5px;line-height:1.25}.action-sheet-cancel .button,.bar .title{font-weight:500}blockquote p:last-child{margin-bottom:0}blockquote small:before{content:'\2014 \00A0'}blockquote:after,blockquote:before,q:after,q:before{content:""}a{-webkit-tap-highlight-color:transparent;color:#387ef5}a.subdued{padding-right:10px;color:#888;text-decoration:none}a.subdued:hover{text-decoration:none}a.subdued:last-child{padding-right:0}.action-sheet-backdrop{-webkit-transition:background-color 150ms ease-in-out;transition:background-color 150ms ease-in-out;position:fixed;top:0;left:0;z-index:11;width:100%;height:100%;background-color:transparent}.action-sheet-backdrop.active{background-color:rgba(0,0,0,.4)}.action-sheet-wrapper{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:all cubic-bezier(.36,.66,.04,1) .5s;transition:all cubic-bezier(.36,.66,.04,1) .5s;position:absolute;max-width:500px;margin:auto}.action-sheet-up,.bar{-webkit-transform:translate3d(0,0,0)}.action-sheet-up{transform:translate3d(0,0,0)}.action-sheet{margin-left:8px;margin-right:8px;width:auto;z-index:11;overflow:hidden}.action-sheet .button{display:block;padding:1px;width:100%;border-radius:0;border-color:#d1d3d6;background-color:transparent;color:#007aff;font-size:21px}.action-sheet .button:hover{color:#007aff}.action-sheet .button.destructive,.action-sheet .button.destructive:hover{color:#ff3b30}.action-sheet .button.activated,.action-sheet .button.active{box-shadow:none;border-color:#d1d3d6;color:#007aff;background:#e4e5e7}#menu .footer .action-sheet-has-icons .icon-help,.action-sheet-has-icons #menu .footer .icon-help,.action-sheet-has-icons .icon,.action-sheet-has-icons .icon-alert,.action-sheet-has-icons .icon-help{position:absolute;left:16px}.action-sheet-title{padding:16px;color:#8f8f8f;text-align:center;font-size:13px}.action-sheet-group{margin-bottom:8px;border-radius:4px;background-color:#fff;overflow:hidden}.action-sheet-group .button{border-width:1px 0 0}.action-sheet-group .button:first-child:last-child,.bar{border-width:0}.action-sheet-options{background:#f1f2f3}.action-sheet-open .action-sheet-backdrop{pointer-events:auto}.platform-android .action-sheet-backdrop.active{background-color:rgba(0,0,0,.2)}.platform-android .action-sheet{margin:0}.platform-android .action-sheet .action-sheet-title,.platform-android .action-sheet .button{text-align:left;border-color:transparent;font-size:16px;color:inherit}.platform-android .action-sheet .action-sheet-title{font-size:14px;padding:16px;color:#666}.platform-android .action-sheet .button.activated,.platform-android .action-sheet .button.active{background:#e8e8e8}.platform-android .action-sheet-group{margin:0;border-radius:0;background-color:#fafafa}.platform-android .action-sheet-cancel{display:none}.platform-android .action-sheet-has-icons .button{padding-left:56px}.backdrop{position:fixed;top:0;left:0;z-index:11;width:100%;height:100%;background-color:rgba(0,0,0,.4);-webkit-transition:.1s opacity linear;transition:.1s opacity linear}.bar,.bar .title,.bar-footer.item-input-inset,.nav-bar-block,.tabs{position:absolute}.backdrop.visible{visibility:visible}.backdrop.active{opacity:1}.bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;transform:translate3d(0,0,0);user-select:none;right:0;left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:44px;border-style:solid;border-top:1px solid transparent;background-color:#fff;background-size:0}.button,.disable-user-behavior{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}@media (min--moz-device-pixel-ratio:1.5),(-webkit-min-device-pixel-ratio:1.5),(min-device-pixel-ratio:1.5),(min-resolution:144dpi),(min-resolution:1.5dppx){.bar{border:none;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);background-position:bottom;background-size:100% 1px;background-repeat:no-repeat}}.bar.bar-clear{border:none;background:0 0;color:#fff}.bar.bar-clear .button,.bar.bar-clear .title{color:#fff}.bar.bar-light,.bar.bar-light .title,.bar.bar-stable .title{color:#444}.bar.item-input-inset .item-input-wrapper{margin-top:-1px}.bar.item-input-inset .item-input-wrapper input{padding-left:8px;width:94%;height:28px;background:0 0}.bar.bar-light{border-color:#ddd;background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%)}.bar.bar-light.bar-footer{background-image:linear-gradient(180deg,#ddd,#ddd 50%,transparent 50%)}.bar.bar-stable{border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444}.bar.bar-assertive,.bar.bar-assertive .title,.bar.bar-balanced .title,.bar.bar-calm,.bar.bar-calm .title,.bar.bar-dark,.bar.bar-dark .title,.bar.bar-energized,.bar.bar-energized .title,.bar.bar-positive,.bar.bar-positive .title,.bar.bar-royal,.bar.bar-royal .title{color:#fff}.bar.bar-stable.bar-footer{background-image:linear-gradient(180deg,#b2b2b2,#b2b2b2 50%,transparent 50%)}.bar.bar-positive{border-color:#0c60ee;background-color:#387ef5;background-image:linear-gradient(0deg,#0c60ee,#0c60ee 50%,transparent 50%)}.bar.bar-positive.bar-footer{background-image:linear-gradient(180deg,#0c60ee,#0c60ee 50%,transparent 50%)}.bar.bar-calm{border-color:#0a9dc7;background-color:#11c1f3;background-image:linear-gradient(0deg,#0a9dc7,#0a9dc7 50%,transparent 50%)}.bar.bar-calm.bar-footer{background-image:linear-gradient(180deg,#0a9dc7,#0a9dc7 50%,transparent 50%)}.bar.bar-assertive{border-color:#e42112;background-color:#ef473a;background-image:linear-gradient(0deg,#e42112,#e42112 50%,transparent 50%)}.bar.bar-assertive.bar-footer{background-image:linear-gradient(180deg,#e42112,#e42112 50%,transparent 50%)}.bar.bar-balanced{border-color:#28a54c;background-color:#33cd5f;background-image:linear-gradient(0deg,#28a54c,#28a54c 50%,transparent 50%);color:#fff}.bar.bar-balanced.bar-footer{background-image:linear-gradient(180deg,#28a54c,#28a54c 50%,transparent 50%)}.bar.bar-energized{border-color:#e6b500;background-color:#ffc900;background-image:linear-gradient(0deg,#e6b500,#e6b500 50%,transparent 50%)}.bar.bar-energized.bar-footer{background-image:linear-gradient(180deg,#e6b500,#e6b500 50%,transparent 50%)}.bar.bar-royal{border-color:#6b46e5;background-color:#886aea;background-image:linear-gradient(0deg,#6b46e5,#6b46e5 50%,transparent 50%)}.bar.bar-royal.bar-footer{background-image:linear-gradient(180deg,#6b46e5,#6b46e5 50%,transparent 50%)}.bar.bar-dark{border-color:#111;background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%)}.bar.bar-dark.bar-footer{background-image:linear-gradient(180deg,#111,#111 50%,transparent 50%)}.bar .title{display:block;top:0;right:0;left:0;z-index:0;overflow:hidden;margin:0 10px;min-width:30px;height:43px;text-align:center;text-overflow:ellipsis;white-space:nowrap;font-size:17px;line-height:44px}.bar .title.title-left{text-align:left}.bar .title.title-right{text-align:right}.bar .title a{color:inherit}.bar .button,.bar button{z-index:1;padding:0 8px;min-width:initial;min-height:31px;font-weight:400;font-size:13px;line-height:32px}#menu .footer .bar .button .icon-help:before,#menu .footer .bar .button.icon-help:before,#menu .footer .bar button .icon-help:before,#menu .footer .bar button.icon-help:before,.bar #menu .footer .button.icon-help:before,.bar #menu .footer button.icon-help:before,.bar .button #menu .footer .icon-help:before,.bar .button .icon-alert:before,.bar .button .icon-help:before,.bar .button .icon:before,.bar .button.button-icon:before,.bar .button.icon-alert:before,.bar .button.icon-help:before,.bar .button.icon-left:before,.bar .button.icon-right:before,.bar .button.icon:before,.bar button #menu .footer .icon-help:before,.bar button .icon-alert:before,.bar button .icon-help:before,.bar button .icon:before,.bar button.button-icon:before,.bar button.icon-alert:before,.bar button.icon-help:before,.bar button.icon-left:before,.bar button.icon-right:before,.bar button.icon:before{padding-right:2px;padding-left:2px;font-size:20px;line-height:32px}.bar .button.button-icon,.bar button.button-icon{font-size:17px}#menu .footer .bar .button.button-icon .icon-help:before,#menu .footer .bar button.button-icon .icon-help:before,.bar .button.button-icon #menu .footer .icon-help:before,.bar .button.button-icon .icon-alert:before,.bar .button.button-icon .icon-help:before,.bar .button.button-icon .icon:before,.bar .button.button-icon.icon-left:before,.bar .button.button-icon.icon-right:before,.bar .button.button-icon:before,.bar button.button-icon #menu .footer .icon-help:before,.bar button.button-icon .icon-alert:before,.bar button.button-icon .icon-help:before,.bar button.button-icon .icon:before,.bar button.button-icon.icon-left:before,.bar button.button-icon.icon-right:before,.bar button.button-icon:before{vertical-align:top;font-size:32px;line-height:32px}.bar .button.button-clear,.bar .button.button-text,.bar button.button-clear,.bar button.button-text{padding-right:2px;padding-left:2px;font-weight:300;font-size:17px}#menu .footer .bar .button.button-clear .icon-help:before,#menu .footer .bar .button.button-clear.icon-help:before,#menu .footer .bar .button.button-text .icon-help:before,#menu .footer .bar .button.button-text.icon-help:before,#menu .footer .bar button.button-clear .icon-help:before,#menu .footer .bar button.button-clear.icon-help:before,#menu .footer .bar button.button-text .icon-help:before,#menu .footer .bar button.button-text.icon-help:before,.bar #menu .footer .button.button-clear.icon-help:before,.bar #menu .footer .button.button-text.icon-help:before,.bar #menu .footer button.button-clear.icon-help:before,.bar #menu .footer button.button-text.icon-help:before,.bar .button.button-clear #menu .footer .icon-help:before,.bar .button.button-clear .icon-alert:before,.bar .button.button-clear .icon-help:before,.bar .button.button-clear .icon:before,.bar .button.button-clear.icon-alert:before,.bar .button.button-clear.icon-help:before,.bar .button.button-clear.icon-left:before,.bar .button.button-clear.icon-right:before,.bar .button.button-clear.icon:before,.bar .button.button-text #menu .footer .icon-help:before,.bar .button.button-text .icon-alert:before,.bar .button.button-text .icon-help:before,.bar .button.button-text .icon:before,.bar .button.button-text.icon-alert:before,.bar .button.button-text.icon-help:before,.bar .button.icon-left.button-text:before,.bar .button.icon-right.button-text:before,.bar .button.icon.button-text:before,.bar button.button-clear #menu .footer .icon-help:before,.bar button.button-clear .icon-alert:before,.bar button.button-clear .icon-help:before,.bar button.button-clear .icon:before,.bar button.button-clear.icon-alert:before,.bar button.button-clear.icon-help:before,.bar button.button-clear.icon-left:before,.bar button.button-clear.icon-right:before,.bar button.button-clear.icon:before,.bar button.button-text #menu .footer .icon-help:before,.bar button.button-text .icon-alert:before,.bar button.button-text .icon-help:before,.bar button.button-text .icon:before,.bar button.button-text.icon-alert:before,.bar button.button-text.icon-help:before,.bar button.icon-left.button-text:before,.bar button.icon-right.button-text:before,.bar button.icon.button-text:before{font-size:32px;line-height:32px}.bar .button.back-button,.bar button.back-button{display:block;margin-right:5px;padding:0;white-space:nowrap;font-weight:400}.bar .button.back-button.activated,.bar .button.back-button.active,.bar button.back-button.activated,.bar button.back-button.active{opacity:.2}.bar .button-bar>.button,.bar .buttons>.button{min-height:31px;line-height:32px}.menu,.modal{min-height:100%;overflow:hidden}.bar .button+.button-bar,.bar .button-bar+.button{margin-left:5px}.bar .buttons,.bar .buttons.primary-buttons,.bar .buttons.secondary-buttons{display:inherit}.bar .buttons span{display:inline-block}.bar .buttons-left span{margin-right:5px;display:inherit}.bar .buttons-right span{margin-left:5px;display:inherit}#menu .footer .popover-helptip .bar .buttons.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-right.icon-help,.bar .buttons.pull-right,.bar .popover-helptip #menu .footer .buttons.icon-bottom-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-bottom-right.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon-bottom-center.icon-alert,.bar .popover-helptip .buttons.icon-bottom-center.icon-help,.bar .popover-helptip .buttons.icon-bottom-right.icon-alert,.bar .popover-helptip .buttons.icon-bottom-right.icon-help,.bar .popover-helptip .buttons.icon-center.icon-alert,.bar .popover-helptip .buttons.icon-center.icon-help,.bar .popover-helptip .buttons.icon-right.icon-alert,.bar .popover-helptip .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon.icon-bottom-center,.bar .popover-helptip .buttons.icon.icon-bottom-right,.bar .popover-helptip .buttons.icon.icon-center,.bar .popover-helptip .buttons.icon.icon-right,.bar .title+.button:last-child,.bar .title+.buttons,.bar>.button+.button:last-child,.bar>.button.pull-right,.popover-helptip #menu .footer .bar .buttons.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-right.icon-help,.popover-helptip .bar .buttons.icon-bottom-center.icon-alert,.popover-helptip .bar .buttons.icon-bottom-center.icon-help,.popover-helptip .bar .buttons.icon-bottom-right.icon-alert,.popover-helptip .bar .buttons.icon-bottom-right.icon-help,.popover-helptip .bar .buttons.icon-center.icon-alert,.popover-helptip .bar .buttons.icon-center.icon-help,.popover-helptip .bar .buttons.icon-right.icon-alert,.popover-helptip .bar .buttons.icon-right.icon-help,.popover-helptip .bar .buttons.icon.icon-bottom-center,.popover-helptip .bar .buttons.icon.icon-bottom-right,.popover-helptip .bar .buttons.icon.icon-center,.popover-helptip .bar .buttons.icon.icon-right,.popover-helptip .bar>.button.icon-bottom-center.icon-alert,.popover-helptip .bar>.button.icon-bottom-center.icon-help,.popover-helptip .bar>.button.icon-bottom-right.icon-alert,.popover-helptip .bar>.button.icon-bottom-right.icon-help,.popover-helptip .bar>.button.icon-center.icon-alert,.popover-helptip .bar>.button.icon-center.icon-help,.popover-helptip .bar>.button.icon-right.icon-alert,.popover-helptip .bar>.button.icon-right.icon-help,.popover-helptip .bar>.button.icon.icon-bottom-center,.popover-helptip .bar>.button.icon.icon-bottom-right,.popover-helptip .bar>.button.icon.icon-center,.popover-helptip .bar>.button.icon.icon-right{position:absolute;right:5px;bottom:5px}.platform-android .nav-bar-has-subheader .bar{background-image:none}#menu .footer .platform-android .bar .back-button .icon-help:before,.platform-android .bar .back-button #menu .footer .icon-help:before,.platform-android .bar .back-button .icon-alert:before,.platform-android .bar .back-button .icon-help:before,.platform-android .bar .back-button .icon:before{font-size:24px}.platform-android .bar .title{font-size:19px;line-height:44px}.bar-light .button{border-color:#ddd;background-color:#fff;color:#444}.bar-light .button:hover{color:#444;text-decoration:none}.bar-light .button.activated,.bar-light .button.active{border-color:#ccc;background-color:#fafafa}.bar-light .button.button-clear,.bar-light .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#444;font-size:17px}.bar-light .button.button-icon{border-color:transparent;background:0 0}.bar-stable .button{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.bar-stable .button:hover{color:#444;text-decoration:none}.bar-stable .button.activated,.bar-stable .button.active{border-color:#a2a2a2;background-color:#e5e5e5}.bar-stable .button.button-clear,.bar-stable .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#444;font-size:17px}.bar-stable .button.button-icon{border-color:transparent;background:0 0}.bar-positive .button{border-color:#0c60ee;background-color:#387ef5;color:#fff}.bar-positive .button:hover{color:#fff;text-decoration:none}.bar-positive .button.activated,.bar-positive .button.active{border-color:#0c60ee;background-color:#0c60ee}.bar-positive .button.button-clear,.bar-positive .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-positive .button.button-icon{border-color:transparent;background:0 0}.bar-calm .button{border-color:#0a9dc7;background-color:#11c1f3;color:#fff}.bar-calm .button:hover{color:#fff;text-decoration:none}.bar-calm .button.activated,.bar-calm .button.active{border-color:#0a9dc7;background-color:#0a9dc7}.bar-calm .button.button-clear,.bar-calm .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-calm .button.button-icon{border-color:transparent;background:0 0}.bar-assertive .button{border-color:#e42112;background-color:#ef473a;color:#fff}.bar-assertive .button:hover{color:#fff;text-decoration:none}.bar-assertive .button.activated,.bar-assertive .button.active{border-color:#e42112;background-color:#e42112}.bar-assertive .button.button-clear,.bar-assertive .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-assertive .button.button-icon{border-color:transparent;background:0 0}.bar-balanced .button{border-color:#28a54c;background-color:#33cd5f;color:#fff}.bar-balanced .button:hover{color:#fff;text-decoration:none}.bar-balanced .button.activated,.bar-balanced .button.active{border-color:#28a54c;background-color:#28a54c}.bar-balanced .button.button-clear,.bar-balanced .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-balanced .button.button-icon{border-color:transparent;background:0 0}.bar-energized .button{border-color:#e6b500;background-color:#ffc900;color:#fff}.bar-energized .button:hover{color:#fff;text-decoration:none}.bar-energized .button.activated,.bar-energized .button.active{border-color:#e6b500;background-color:#e6b500}.bar-energized .button.button-clear,.bar-energized .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-energized .button.button-icon{border-color:transparent;background:0 0}.bar-royal .button{border-color:#6b46e5;background-color:#886aea;color:#fff}.bar-royal .button:hover{color:#fff;text-decoration:none}.bar-royal .button.activated,.bar-royal .button.active{border-color:#6b46e5;background-color:#6b46e5}.bar-royal .button.button-clear,.bar-royal .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-royal .button.button-icon{border-color:transparent;background:0 0}.bar-dark .button{border-color:#111;background-color:#444;color:#fff}.bar-dark .button:hover{color:#fff;text-decoration:none}.bar-dark .button.activated,.bar-dark .button.active{border-color:#000;background-color:#262626}.bar-dark .button.button-clear,.bar-dark .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-dark .button.button-icon{border-color:transparent;background:0 0}.bar-header{top:0;border-top-width:0;border-bottom-width:1px}.bar-footer,.tabs{border-top-width:1px;bottom:0}.bar-header.has-tabs-top,.tabs-top .bar-header{border-bottom-width:0;background-image:none}.bar-footer{border-bottom-width:0;background-position:top;height:44px}.bar-footer .title{height:43px;line-height:44px}.bar-tabs{padding:0}.bar-subheader{top:44px;height:44px}.bar-subheader .title{height:43px;line-height:44px}.bar-subfooter{bottom:44px;height:44px}.bar-subfooter .title{height:43px;line-height:44px}.nav-bar-block{top:0;right:0;left:0;z-index:9}.bar .back-button.hide,.bar .buttons .hide{display:none}.nav-bar-tabs-top .bar{background-image:none}.tabs{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:horizontal;-moz-flex-direction:horizontal;-ms-flex-direction:horizontal;flex-direction:horizontal;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444;z-index:5;width:100%;height:49px;border-style:solid;background-size:0;line-height:49px}.tabs .tab-item .badge{background-color:#444;color:#f8f8f8}@media (min--moz-device-pixel-ratio:1.5),(-webkit-min-device-pixel-ratio:1.5),(min-device-pixel-ratio:1.5),(min-resolution:144dpi),(min-resolution:1.5dppx){.tabs{padding-top:2px;border-top:none!important;border-bottom:none;background-position:top;background-size:100% 1px;background-repeat:no-repeat}}.tabs-light>.tabs,.tabs.tabs-light{border-color:#ddd;background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);color:#444}.tabs-light>.tabs .tab-item .badge,.tabs.tabs-light .tab-item .badge{background-color:#444;color:#fff}.tabs-stable>.tabs,.tabs.tabs-stable{border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444}.tabs-stable>.tabs .tab-item .badge,.tabs.tabs-stable .tab-item .badge{background-color:#444;color:#f8f8f8}.tabs-positive>.tabs,.tabs.tabs-positive{border-color:#0c60ee;background-color:#387ef5;background-image:linear-gradient(0deg,#0c60ee,#0c60ee 50%,transparent 50%);color:#fff}.tabs-positive>.tabs .tab-item .badge,.tabs.tabs-positive .tab-item .badge{background-color:#fff;color:#387ef5}.tabs-calm>.tabs,.tabs.tabs-calm{border-color:#0a9dc7;background-color:#11c1f3;background-image:linear-gradient(0deg,#0a9dc7,#0a9dc7 50%,transparent 50%);color:#fff}.tabs-calm>.tabs .tab-item .badge,.tabs.tabs-calm .tab-item .badge{background-color:#fff;color:#11c1f3}.tabs-assertive>.tabs,.tabs.tabs-assertive{border-color:#e42112;background-color:#ef473a;background-image:linear-gradient(0deg,#e42112,#e42112 50%,transparent 50%);color:#fff}.tabs-assertive>.tabs .tab-item .badge,.tabs.tabs-assertive .tab-item .badge{background-color:#fff;color:#ef473a}.tabs-balanced>.tabs,.tabs.tabs-balanced{border-color:#28a54c;background-color:#33cd5f;background-image:linear-gradient(0deg,#28a54c,#28a54c 50%,transparent 50%);color:#fff}.tabs-balanced>.tabs .tab-item .badge,.tabs.tabs-balanced .tab-item .badge{background-color:#fff;color:#33cd5f}.tabs-energized>.tabs,.tabs.tabs-energized{border-color:#e6b500;background-color:#ffc900;background-image:linear-gradient(0deg,#e6b500,#e6b500 50%,transparent 50%);color:#fff}.tabs-energized>.tabs .tab-item .badge,.tabs.tabs-energized .tab-item .badge{background-color:#fff;color:#ffc900}.tabs-royal>.tabs,.tabs.tabs-royal{border-color:#6b46e5;background-color:#886aea;background-image:linear-gradient(0deg,#6b46e5,#6b46e5 50%,transparent 50%);color:#fff}.tabs-royal>.tabs .tab-item .badge,.tabs.tabs-royal .tab-item .badge{background-color:#fff;color:#886aea}.tabs-dark>.tabs,.tabs.tabs-dark{border-color:#111;background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);color:#fff}.tabs-striped .tabs,.tabs-striped.tabs-light .tabs{background-color:#fff}.tabs-dark>.tabs .tab-item .badge,.tabs.tabs-dark .tab-item .badge{background-color:#fff;color:#444}.tabs-striped .tabs{background-image:none;border:none;border-bottom:1px solid #ddd;padding-top:2px}.tabs-striped .tab-item.activated,.tabs-striped .tab-item.active,.tabs-striped .tab-item.tab-item-active{margin-top:-2px;border-style:solid;border-width:2px 0 0;border-color:#444}.tabs-striped .tab-item.activated .badge,.tabs-striped .tab-item.active .badge,.tabs-striped .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-light .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-striped.tabs-light .tab-item .badge{opacity:.4}.tabs-striped.tabs-light .tab-item.activated,.tabs-striped.tabs-light .tab-item.active,.tabs-striped.tabs-light .tab-item.tab-item-active{margin-top:-2px;color:#444;border-style:solid;border-width:2px 0 0;border-color:#444}.tabs-striped.tabs-stable .tabs{background-color:#f8f8f8}.tabs-striped.tabs-stable .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-striped.tabs-stable .tab-item .badge{opacity:.4}.tabs-striped.tabs-stable .tab-item.activated,.tabs-striped.tabs-stable .tab-item.active,.tabs-striped.tabs-stable .tab-item.tab-item-active{margin-top:-2px;color:#444;border-style:solid;border-width:2px 0 0;border-color:#444}.tabs-striped.tabs-positive .tabs{background-color:#387ef5}.tabs-striped.tabs-positive .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-positive .tab-item .badge{opacity:.4}.tabs-striped.tabs-positive .tab-item.activated,.tabs-striped.tabs-positive .tab-item.active,.tabs-striped.tabs-positive .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0;border-color:#fff}.tabs-striped.tabs-calm .tabs{background-color:#11c1f3}.tabs-striped.tabs-calm .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-calm .tab-item .badge{opacity:.4}.tabs-striped.tabs-calm .tab-item.activated,.tabs-striped.tabs-calm .tab-item.active,.tabs-striped.tabs-calm .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0;border-color:#fff}.tabs-striped.tabs-assertive .tabs{background-color:#ef473a}.tabs-striped.tabs-assertive .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-assertive .tab-item .badge{opacity:.4}.tabs-striped.tabs-assertive .tab-item.activated,.tabs-striped.tabs-assertive .tab-item.active,.tabs-striped.tabs-assertive .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0;border-color:#fff}.tabs-striped.tabs-balanced .tabs{background-color:#33cd5f}.tabs-striped.tabs-balanced .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-balanced .tab-item .badge{opacity:.4}.tabs-striped.tabs-balanced .tab-item.activated,.tabs-striped.tabs-balanced .tab-item.active,.tabs-striped.tabs-balanced .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0;border-color:#fff}.tabs-striped.tabs-energized .tabs{background-color:#ffc900}.tabs-striped.tabs-energized .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-energized .tab-item .badge{opacity:.4}.tabs-striped.tabs-energized .tab-item.activated,.tabs-striped.tabs-energized .tab-item.active,.tabs-striped.tabs-energized .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0;border-color:#fff}.tabs-striped.tabs-royal .tabs{background-color:#886aea}.tabs-striped.tabs-royal .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-royal .tab-item .badge{opacity:.4}.tabs-striped.tabs-royal .tab-item.activated,.tabs-striped.tabs-royal .tab-item.active,.tabs-striped.tabs-royal .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0;border-color:#fff}.tabs-striped.tabs-dark .tabs{background-color:#444}.tabs-striped.tabs-dark .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-dark .tab-item .badge{opacity:.4}.tabs-striped.tabs-dark .tab-item.activated,.tabs-striped.tabs-dark .tab-item.active,.tabs-striped.tabs-dark .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0;border-color:#fff}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-background-light .tabs{background-color:#fff;background-image:none}.tabs-striped.tabs-background-stable .tabs{background-color:#f8f8f8;background-image:none}.tabs-striped.tabs-background-positive .tabs{background-color:#387ef5;background-image:none}.tabs-striped.tabs-background-calm .tabs{background-color:#11c1f3;background-image:none}.tabs-striped.tabs-background-assertive .tabs{background-color:#ef473a;background-image:none}.tabs-striped.tabs-background-balanced .tabs{background-color:#33cd5f;background-image:none}.tabs-striped.tabs-background-energized .tabs{background-color:#ffc900;background-image:none}.tabs-striped.tabs-background-royal .tabs{background-color:#886aea;background-image:none}.tabs-striped.tabs-background-dark .tabs{background-color:#444;background-image:none}.tabs-striped.tabs-color-light .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-color-light .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-light .tab-item.activated,.tabs-striped.tabs-color-light .tab-item.active,.tabs-striped.tabs-color-light .tab-item.tab-item-active{margin-top:-2px;color:#fff;border:0 solid #fff;border-top-width:2px}.tabs-striped.tabs-color-light .tab-item.activated .badge,.tabs-striped.tabs-color-light .tab-item.active .badge,.tabs-striped.tabs-color-light .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-stable .tab-item{color:rgba(248,248,248,.4);opacity:1}.tabs-striped.tabs-color-stable .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-stable .tab-item.activated,.tabs-striped.tabs-color-stable .tab-item.active,.tabs-striped.tabs-color-stable .tab-item.tab-item-active{margin-top:-2px;color:#f8f8f8;border:0 solid #f8f8f8;border-top-width:2px}.tabs-striped.tabs-color-stable .tab-item.activated .badge,.tabs-striped.tabs-color-stable .tab-item.active .badge,.tabs-striped.tabs-color-stable .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-positive .tab-item{color:rgba(56,126,245,.4);opacity:1}.tabs-striped.tabs-color-positive .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-positive .tab-item.activated,.tabs-striped.tabs-color-positive .tab-item.active,.tabs-striped.tabs-color-positive .tab-item.tab-item-active{margin-top:-2px;color:#387ef5;border:0 solid #387ef5;border-top-width:2px}.tabs-striped.tabs-color-positive .tab-item.activated .badge,.tabs-striped.tabs-color-positive .tab-item.active .badge,.tabs-striped.tabs-color-positive .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-calm .tab-item{color:rgba(17,193,243,.4);opacity:1}.tabs-striped.tabs-color-calm .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-calm .tab-item.activated,.tabs-striped.tabs-color-calm .tab-item.active,.tabs-striped.tabs-color-calm .tab-item.tab-item-active{margin-top:-2px;color:#11c1f3;border:0 solid #11c1f3;border-top-width:2px}.tabs-striped.tabs-color-calm .tab-item.activated .badge,.tabs-striped.tabs-color-calm .tab-item.active .badge,.tabs-striped.tabs-color-calm .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-assertive .tab-item{color:rgba(239,71,58,.4);opacity:1}.tabs-striped.tabs-color-assertive .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-assertive .tab-item.activated,.tabs-striped.tabs-color-assertive .tab-item.active,.tabs-striped.tabs-color-assertive .tab-item.tab-item-active{margin-top:-2px;color:#ef473a;border:0 solid #ef473a;border-top-width:2px}.tabs-striped.tabs-color-assertive .tab-item.activated .badge,.tabs-striped.tabs-color-assertive .tab-item.active .badge,.tabs-striped.tabs-color-assertive .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-balanced .tab-item{color:rgba(51,205,95,.4);opacity:1}.tabs-striped.tabs-color-balanced .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-balanced .tab-item.activated,.tabs-striped.tabs-color-balanced .tab-item.active,.tabs-striped.tabs-color-balanced .tab-item.tab-item-active{margin-top:-2px;color:#33cd5f;border:0 solid #33cd5f;border-top-width:2px}.tabs-striped.tabs-color-balanced .tab-item.activated .badge,.tabs-striped.tabs-color-balanced .tab-item.active .badge,.tabs-striped.tabs-color-balanced .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-energized .tab-item{color:rgba(255,201,0,.4);opacity:1}.tabs-striped.tabs-color-energized .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-energized .tab-item.activated,.tabs-striped.tabs-color-energized .tab-item.active,.tabs-striped.tabs-color-energized .tab-item.tab-item-active{margin-top:-2px;color:#ffc900;border:0 solid #ffc900;border-top-width:2px}.tabs-striped.tabs-color-energized .tab-item.activated .badge,.tabs-striped.tabs-color-energized .tab-item.active .badge,.tabs-striped.tabs-color-energized .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-royal .tab-item{color:rgba(136,106,234,.4);opacity:1}.tabs-striped.tabs-color-royal .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-royal .tab-item.activated,.tabs-striped.tabs-color-royal .tab-item.active,.tabs-striped.tabs-color-royal .tab-item.tab-item-active{margin-top:-2px;color:#886aea;border:0 solid #886aea;border-top-width:2px}.tabs-striped.tabs-color-royal .tab-item.activated .badge,.tabs-striped.tabs-color-royal .tab-item.active .badge,.tabs-striped.tabs-color-royal .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-dark .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-striped.tabs-color-dark .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-dark .tab-item.activated,.tabs-striped.tabs-color-dark .tab-item.active,.tabs-striped.tabs-color-dark .tab-item.tab-item-active{margin-top:-2px;color:#444;border:0 solid #444;border-top-width:2px}.tabs-striped.tabs-color-dark .tab-item.activated .badge,.tabs-striped.tabs-color-dark .tab-item.active .badge,.tabs-striped.tabs-color-dark .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-background-light .tabs,.tabs-background-light>.tabs{background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);border-color:#ddd}.tabs-background-stable .tabs,.tabs-background-stable>.tabs{background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);border-color:#b2b2b2}.tabs-background-positive .tabs,.tabs-background-positive>.tabs{background-color:#387ef5;background-image:linear-gradient(0deg,#0c60ee,#0c60ee 50%,transparent 50%);border-color:#0c60ee}.tabs-background-calm .tabs,.tabs-background-calm>.tabs{background-color:#11c1f3;background-image:linear-gradient(0deg,#0a9dc7,#0a9dc7 50%,transparent 50%);border-color:#0a9dc7}.tabs-background-assertive .tabs,.tabs-background-assertive>.tabs{background-color:#ef473a;background-image:linear-gradient(0deg,#e42112,#e42112 50%,transparent 50%);border-color:#e42112}.tabs-background-balanced .tabs,.tabs-background-balanced>.tabs{background-color:#33cd5f;background-image:linear-gradient(0deg,#28a54c,#28a54c 50%,transparent 50%);border-color:#28a54c}.tabs-background-energized .tabs,.tabs-background-energized>.tabs{background-color:#ffc900;background-image:linear-gradient(0deg,#e6b500,#e6b500 50%,transparent 50%);border-color:#e6b500}.tabs-background-royal .tabs,.tabs-background-royal>.tabs{background-color:#886aea;background-image:linear-gradient(0deg,#6b46e5,#6b46e5 50%,transparent 50%);border-color:#6b46e5}.tabs-background-dark .tabs,.tabs-background-dark>.tabs{background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);border-color:#111}.tabs-color-light .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-color-light .tab-item .badge{opacity:.4}.tabs-color-light .tab-item.activated,.tabs-color-light .tab-item.active,.tabs-color-light .tab-item.tab-item-active{color:#fff;border:0 solid #fff}.tabs-color-light .tab-item.activated .badge,.tabs-color-light .tab-item.active .badge,.tabs-color-light .tab-item.tab-item-active .badge{opacity:1}.tabs-color-stable .tab-item{color:rgba(248,248,248,.4);opacity:1}.tabs-color-stable .tab-item .badge{opacity:.4}.tabs-color-stable .tab-item.activated,.tabs-color-stable .tab-item.active,.tabs-color-stable .tab-item.tab-item-active{color:#f8f8f8;border:0 solid #f8f8f8}.tabs-color-stable .tab-item.activated .badge,.tabs-color-stable .tab-item.active .badge,.tabs-color-stable .tab-item.tab-item-active .badge{opacity:1}.tabs-color-positive .tab-item{color:rgba(56,126,245,.4);opacity:1}.tabs-color-positive .tab-item .badge{opacity:.4}.tabs-color-positive .tab-item.activated,.tabs-color-positive .tab-item.active,.tabs-color-positive .tab-item.tab-item-active{color:#387ef5;border:0 solid #387ef5}.tabs-color-positive .tab-item.activated .badge,.tabs-color-positive .tab-item.active .badge,.tabs-color-positive .tab-item.tab-item-active .badge{opacity:1}.tabs-color-calm .tab-item{color:rgba(17,193,243,.4);opacity:1}.tabs-color-calm .tab-item .badge{opacity:.4}.tabs-color-calm .tab-item.activated,.tabs-color-calm .tab-item.active,.tabs-color-calm .tab-item.tab-item-active{color:#11c1f3;border:0 solid #11c1f3}.tabs-color-calm .tab-item.activated .badge,.tabs-color-calm .tab-item.active .badge,.tabs-color-calm .tab-item.tab-item-active .badge{opacity:1}.tabs-color-assertive .tab-item{color:rgba(239,71,58,.4);opacity:1}.tabs-color-assertive .tab-item .badge{opacity:.4}.tabs-color-assertive .tab-item.activated,.tabs-color-assertive .tab-item.active,.tabs-color-assertive .tab-item.tab-item-active{color:#ef473a;border:0 solid #ef473a}.tabs-color-assertive .tab-item.activated .badge,.tabs-color-assertive .tab-item.active .badge,.tabs-color-assertive .tab-item.tab-item-active .badge{opacity:1}.tabs-color-balanced .tab-item{color:rgba(51,205,95,.4);opacity:1}.tabs-color-balanced .tab-item .badge{opacity:.4}.tabs-color-balanced .tab-item.activated,.tabs-color-balanced .tab-item.active,.tabs-color-balanced .tab-item.tab-item-active{color:#33cd5f;border:0 solid #33cd5f}.tabs-color-balanced .tab-item.activated .badge,.tabs-color-balanced .tab-item.active .badge,.tabs-color-balanced .tab-item.tab-item-active .badge{opacity:1}.tabs-color-energized .tab-item{color:rgba(255,201,0,.4);opacity:1}.tabs-color-energized .tab-item .badge{opacity:.4}.tabs-color-energized .tab-item.activated,.tabs-color-energized .tab-item.active,.tabs-color-energized .tab-item.tab-item-active{color:#ffc900;border:0 solid #ffc900}.tabs-color-energized .tab-item.activated .badge,.tabs-color-energized .tab-item.active .badge,.tabs-color-energized .tab-item.tab-item-active .badge{opacity:1}.tabs-color-royal .tab-item{color:rgba(136,106,234,.4);opacity:1}.tabs-color-royal .tab-item .badge{opacity:.4}.tabs-color-royal .tab-item.activated,.tabs-color-royal .tab-item.active,.tabs-color-royal .tab-item.tab-item-active{color:#886aea;border:0 solid #886aea}.tabs-color-royal .tab-item.activated .badge,.tabs-color-royal .tab-item.active .badge,.tabs-color-royal .tab-item.tab-item-active .badge{opacity:1}.tabs-color-dark .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-color-dark .tab-item .badge{opacity:.4}.tabs-color-dark .tab-item.activated,.tabs-color-dark .tab-item.active,.tabs-color-dark .tab-item.tab-item-active{color:#444;border:0 solid #444}.tabs-color-dark .tab-item.activated .badge,.tabs-color-dark .tab-item.active .badge,.tabs-color-dark .tab-item.tab-item-active .badge{opacity:1}ion-tabs.tabs-color-active-light .tab-item{color:#444}ion-tabs.tabs-color-active-light .tab-item.activated,ion-tabs.tabs-color-active-light .tab-item.active,ion-tabs.tabs-color-active-light .tab-item.tab-item-active{color:#fff}ion-tabs.tabs-striped.tabs-color-active-light .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-light .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-light .tab-item.tab-item-active{border-color:#fff;color:#fff}ion-tabs.tabs-color-active-stable .tab-item{color:#444}ion-tabs.tabs-color-active-stable .tab-item.activated,ion-tabs.tabs-color-active-stable .tab-item.active,ion-tabs.tabs-color-active-stable .tab-item.tab-item-active{color:#f8f8f8}ion-tabs.tabs-striped.tabs-color-active-stable .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-stable .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-stable .tab-item.tab-item-active{border-color:#f8f8f8;color:#f8f8f8}ion-tabs.tabs-color-active-positive .tab-item{color:#444}ion-tabs.tabs-color-active-positive .tab-item.activated,ion-tabs.tabs-color-active-positive .tab-item.active,ion-tabs.tabs-color-active-positive .tab-item.tab-item-active{color:#387ef5}ion-tabs.tabs-striped.tabs-color-active-positive .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-positive .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-positive .tab-item.tab-item-active{border-color:#387ef5;color:#387ef5}ion-tabs.tabs-color-active-calm .tab-item{color:#444}ion-tabs.tabs-color-active-calm .tab-item.activated,ion-tabs.tabs-color-active-calm .tab-item.active,ion-tabs.tabs-color-active-calm .tab-item.tab-item-active{color:#11c1f3}ion-tabs.tabs-striped.tabs-color-active-calm .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-calm .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-calm .tab-item.tab-item-active{border-color:#11c1f3;color:#11c1f3}ion-tabs.tabs-color-active-assertive .tab-item{color:#444}ion-tabs.tabs-color-active-assertive .tab-item.activated,ion-tabs.tabs-color-active-assertive .tab-item.active,ion-tabs.tabs-color-active-assertive .tab-item.tab-item-active{color:#ef473a}ion-tabs.tabs-striped.tabs-color-active-assertive .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-assertive .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-assertive .tab-item.tab-item-active{border-color:#ef473a;color:#ef473a}ion-tabs.tabs-color-active-balanced .tab-item{color:#444}ion-tabs.tabs-color-active-balanced .tab-item.activated,ion-tabs.tabs-color-active-balanced .tab-item.active,ion-tabs.tabs-color-active-balanced .tab-item.tab-item-active{color:#33cd5f}ion-tabs.tabs-striped.tabs-color-active-balanced .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-balanced .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-balanced .tab-item.tab-item-active{border-color:#33cd5f;color:#33cd5f}ion-tabs.tabs-color-active-energized .tab-item{color:#444}ion-tabs.tabs-color-active-energized .tab-item.activated,ion-tabs.tabs-color-active-energized .tab-item.active,ion-tabs.tabs-color-active-energized .tab-item.tab-item-active{color:#ffc900}ion-tabs.tabs-striped.tabs-color-active-energized .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-energized .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-energized .tab-item.tab-item-active{border-color:#ffc900;color:#ffc900}ion-tabs.tabs-color-active-royal .tab-item{color:#444}ion-tabs.tabs-color-active-royal .tab-item.activated,ion-tabs.tabs-color-active-royal .tab-item.active,ion-tabs.tabs-color-active-royal .tab-item.tab-item-active{color:#886aea}ion-tabs.tabs-striped.tabs-color-active-royal .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-royal .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-royal .tab-item.tab-item-active{border-color:#886aea;color:#886aea}ion-tabs.tabs-color-active-dark .tab-item{color:#fff}ion-tabs.tabs-color-active-dark .tab-item.activated,ion-tabs.tabs-color-active-dark .tab-item.active,ion-tabs.tabs-color-active-dark .tab-item.tab-item-active{color:#444}ion-tabs.tabs-striped.tabs-color-active-dark .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-dark .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-dark .tab-item.tab-item-active{border-color:#444;color:#444}.tabs-top.tabs-striped{padding-bottom:0}.tabs-top.tabs-striped .tab-item{background:0 0;-webkit-transition:color .1s ease;-moz-transition:color .1s ease;-ms-transition:color .1s ease;-o-transition:color .1s ease;transition:color .1s ease}.tabs-top.tabs-striped .tab-item.activated,.tabs-top.tabs-striped .tab-item.active,.tabs-top.tabs-striped .tab-item.tab-item-active{margin-top:1px;border-width:0 0 2px!important;border-style:solid}.tabs-top.tabs-striped .tab-item.activated>.badge,.tabs-top.tabs-striped .tab-item.activated>i,.tabs-top.tabs-striped .tab-item.active>.badge,.tabs-top.tabs-striped .tab-item.active>i,.tabs-top.tabs-striped .tab-item.tab-item-active>.badge,.tabs-top.tabs-striped .tab-item.tab-item-active>i{margin-top:-1px}.tabs-top.tabs-striped .tab-item .badge{-webkit-transition:color .2s ease;-moz-transition:color .2s ease;-ms-transition:color .2s ease;-o-transition:color .2s ease;transition:color .2s ease}.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.activated .tab-title,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.activated i,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.active .tab-title,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.active i,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.tab-item-active .tab-title,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.tab-item-active i{display:block;margin-top:-1px}.tabs-top.tabs-striped.tabs-icon-left .tab-item{margin-top:1px}.tabs-top.tabs-striped.tabs-icon-left .tab-item.activated .tab-title,.tabs-top.tabs-striped.tabs-icon-left .tab-item.activated i,.tabs-top.tabs-striped.tabs-icon-left .tab-item.active .tab-title,.tabs-top.tabs-striped.tabs-icon-left .tab-item.active i,.tabs-top.tabs-striped.tabs-icon-left .tab-item.tab-item-active .tab-title,.tabs-top.tabs-striped.tabs-icon-left .tab-item.tab-item-active i{margin-top:-.1em}.tabs-top>.tabs,.tabs.tabs-top{top:44px;padding-top:0;background-position:bottom;border-top-width:0;border-bottom-width:1px}.tabs-top>.tabs .tab-item.activated .badge,.tabs-top>.tabs .tab-item.active .badge,.tabs-top>.tabs .tab-item.tab-item-active .badge,.tabs.tabs-top .tab-item.activated .badge,.tabs.tabs-top .tab-item.active .badge,.tabs.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-top~.bar-header{border-bottom-width:0}.tab-item{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;max-width:150px;height:100%;color:inherit;text-align:center;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;font-weight:400;font-size:14px;opacity:.7}.tab-item:hover{cursor:pointer}.tab-item.tab-hidden,.tabs-item-hide>.tabs,.tabs.tabs-item-hide{display:none}.tabs-icon-bottom.tabs .tab-item,.tabs-icon-bottom>.tabs .tab-item,.tabs-icon-top.tabs .tab-item,.tabs-icon-top>.tabs .tab-item{font-size:10px;line-height:14px}#menu .footer .tab-item .icon-help,.tab-item #menu .footer .icon-help,.tab-item .icon,.tab-item .icon-alert,.tab-item .icon-help{display:block;margin:0 auto;height:32px;font-size:32px}.tabs-icon-left.tabs .tab-item,.tabs-icon-left>.tabs .tab-item,.tabs-icon-right.tabs .tab-item,.tabs-icon-right>.tabs .tab-item{font-size:10px}#menu .footer .tabs-icon-left.tabs .tab-item .icon-help,#menu .footer .tabs-icon-left>.tabs .tab-item .icon-help,#menu .footer .tabs-icon-right.tabs .tab-item .icon-help,#menu .footer .tabs-icon-right>.tabs .tab-item .icon-help,.tabs-icon-left.tabs .tab-item #menu .footer .icon-help,.tabs-icon-left.tabs .tab-item .icon,.tabs-icon-left.tabs .tab-item .icon-alert,.tabs-icon-left.tabs .tab-item .icon-help,.tabs-icon-left.tabs .tab-item .tab-title,.tabs-icon-left>.tabs .tab-item #menu .footer .icon-help,.tabs-icon-left>.tabs .tab-item .icon,.tabs-icon-left>.tabs .tab-item .icon-alert,.tabs-icon-left>.tabs .tab-item .icon-help,.tabs-icon-left>.tabs .tab-item .tab-title,.tabs-icon-right.tabs .tab-item #menu .footer .icon-help,.tabs-icon-right.tabs .tab-item .icon,.tabs-icon-right.tabs .tab-item .icon-alert,.tabs-icon-right.tabs .tab-item .icon-help,.tabs-icon-right.tabs .tab-item .tab-title,.tabs-icon-right>.tabs .tab-item #menu .footer .icon-help,.tabs-icon-right>.tabs .tab-item .icon,.tabs-icon-right>.tabs .tab-item .icon-alert,.tabs-icon-right>.tabs .tab-item .icon-help,.tabs-icon-right>.tabs .tab-item .tab-title{display:inline-block;vertical-align:top;margin-top:-.1em}#menu .footer .tabs-icon-left.tabs .tab-item .icon-help:before,#menu .footer .tabs-icon-left>.tabs .tab-item .icon-help:before,#menu .footer .tabs-icon-right.tabs .tab-item .icon-help:before,#menu .footer .tabs-icon-right>.tabs .tab-item .icon-help:before,.tabs-icon-left.tabs .tab-item #menu .footer .icon-help:before,.tabs-icon-left.tabs .tab-item .icon-alert:before,.tabs-icon-left.tabs .tab-item .icon-help:before,.tabs-icon-left.tabs .tab-item .icon:before,.tabs-icon-left.tabs .tab-item .tab-title:before,.tabs-icon-left>.tabs .tab-item #menu .footer .icon-help:before,.tabs-icon-left>.tabs .tab-item .icon-alert:before,.tabs-icon-left>.tabs .tab-item .icon-help:before,.tabs-icon-left>.tabs .tab-item .icon:before,.tabs-icon-left>.tabs .tab-item .tab-title:before,.tabs-icon-right.tabs .tab-item #menu .footer .icon-help:before,.tabs-icon-right.tabs .tab-item .icon-alert:before,.tabs-icon-right.tabs .tab-item .icon-help:before,.tabs-icon-right.tabs .tab-item .icon:before,.tabs-icon-right.tabs .tab-item .tab-title:before,.tabs-icon-right>.tabs .tab-item #menu .footer .icon-help:before,.tabs-icon-right>.tabs .tab-item .icon-alert:before,.tabs-icon-right>.tabs .tab-item .icon-help:before,.tabs-icon-right>.tabs .tab-item .icon:before,.tabs-icon-right>.tabs .tab-item .tab-title:before{font-size:24px;line-height:49px}#menu .footer .tabs-icon-left.tabs .tab-item .icon-help,#menu .footer .tabs-icon-left>.tabs .tab-item .icon-help,.tabs-icon-left.tabs .tab-item #menu .footer .icon-help,.tabs-icon-left.tabs .tab-item .icon,.tabs-icon-left.tabs .tab-item .icon-alert,.tabs-icon-left.tabs .tab-item .icon-help,.tabs-icon-left>.tabs .tab-item #menu .footer .icon-help,.tabs-icon-left>.tabs .tab-item .icon,.tabs-icon-left>.tabs .tab-item .icon-alert,.tabs-icon-left>.tabs .tab-item .icon-help{padding-right:3px}#menu .footer .tabs-icon-right.tabs .tab-item .icon-help,#menu .footer .tabs-icon-right>.tabs .tab-item .icon-help,.tabs-icon-right.tabs .tab-item #menu .footer .icon-help,.tabs-icon-right.tabs .tab-item .icon,.tabs-icon-right.tabs .tab-item .icon-alert,.tabs-icon-right.tabs .tab-item .icon-help,.tabs-icon-right>.tabs .tab-item #menu .footer .icon-help,.tabs-icon-right>.tabs .tab-item .icon,.tabs-icon-right>.tabs .tab-item .icon-alert,.tabs-icon-right>.tabs .tab-item .icon-help{padding-left:3px}#menu .footer .tabs-icon-only.tabs .icon-help,#menu .footer .tabs-icon-only>.tabs .icon-help,.tabs-icon-only.tabs #menu .footer .icon-help,.tabs-icon-only.tabs .icon,.tabs-icon-only.tabs .icon-alert,.tabs-icon-only.tabs .icon-help,.tabs-icon-only>.tabs #menu .footer .icon-help,.tabs-icon-only>.tabs .icon,.tabs-icon-only>.tabs .icon-alert,.tabs-icon-only>.tabs .icon-help{line-height:inherit}.tab-item.has-badge{position:relative}.tab-item .badge{position:absolute;top:4%;right:33%;right:calc(50% - 26px);padding:1px 6px;height:auto;font-size:12px;line-height:16px}.tab-item.activated,.tab-item.active,.tab-item.tab-item-active{opacity:1}.tab-item.activated.tab-item-light,.tab-item.active.tab-item-light,.tab-item.tab-item-active.tab-item-light{color:#fff}.tab-item.activated.tab-item-stable,.tab-item.active.tab-item-stable,.tab-item.tab-item-active.tab-item-stable{color:#f8f8f8}.tab-item.activated.tab-item-positive,.tab-item.active.tab-item-positive,.tab-item.tab-item-active.tab-item-positive{color:#387ef5}.tab-item.activated.tab-item-calm,.tab-item.active.tab-item-calm,.tab-item.tab-item-active.tab-item-calm{color:#11c1f3}.tab-item.activated.tab-item-assertive,.tab-item.active.tab-item-assertive,.tab-item.tab-item-active.tab-item-assertive{color:#ef473a}.tab-item.activated.tab-item-balanced,.tab-item.active.tab-item-balanced,.tab-item.tab-item-active.tab-item-balanced{color:#33cd5f}.tab-item.activated.tab-item-energized,.tab-item.active.tab-item-energized,.tab-item.tab-item-active.tab-item-energized{color:#ffc900}.tab-item.activated.tab-item-royal,.tab-item.active.tab-item-royal,.tab-item.tab-item-active.tab-item-royal{color:#886aea}.tab-item.activated.tab-item-dark,.tab-item.active.tab-item-dark,.tab-item.tab-item-active.tab-item-dark{color:#444}.item.tabs{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;padding:0}#menu .footer .item.tabs .icon-help:before,.item.tabs #menu .footer .icon-help:before,.item.tabs .icon-alert:before,.item.tabs .icon-help:before,.item.tabs .icon:before{position:relative}.tab-item.disabled,.tab-item[disabled]{opacity:.4;cursor:default;pointer-events:none}.nav-bar-tabs-top.hide~.view-container .tabs-top .tabs{top:0}.pane[hide-nav-bar=true] .has-tabs-top{top:49px}.menu{position:absolute;top:0;bottom:0;z-index:0;max-height:100%;width:275px}.menu .scroll-content{z-index:10}.menu .bar-header{z-index:11}.menu-content{-webkit-transform:none;transform:none;box-shadow:-1px 0 2px rgba(0,0,0,.2),1px 0 2px rgba(0,0,0,.2)}.menu-open .menu-content .scroll-content:not(.overflow-scroll){overflow:hidden}.grade-b .menu-content,.grade-c .menu-content{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;right:-1px;left:-1px;border-right:1px solid #ccc;border-left:1px solid #ccc;box-shadow:none}.menu-left{left:0}.menu-right{right:0}.aside-open.aside-resizing .menu-right{display:none}.modal,.popover{z-index:10;display:block}.menu-animated{-webkit-transition:-webkit-transform .2s ease;transition:transform .2s ease}.modal-backdrop,.modal-backdrop-bg{position:fixed;top:0;left:0;z-index:10;width:100%;height:100%}.modal{position:absolute;top:0;width:100%;background-color:#fff}@media (min-width:680px){.modal{top:20%;right:20%;bottom:20%;left:20%;min-height:240px;width:60%}.modal.ng-leave-active{bottom:0}.platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader){height:44px}.platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader)>*{margin-top:0}.platform-ios.platform-cordova .modal-wrapper .modal .bar-subheader,.platform-ios.platform-cordova .modal-wrapper .modal .has-header,.platform-ios.platform-cordova .modal-wrapper .modal .tabs-top>.tabs,.platform-ios.platform-cordova .modal-wrapper .modal .tabs.tabs-top{top:44px}.platform-ios.platform-cordova .modal-wrapper .modal .has-subheader{top:88px}.platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-tabs-top{top:93px}.platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-subheader.has-tabs-top{top:137px}.modal-backdrop-bg{-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;background-color:#000;opacity:0}.active .modal-backdrop-bg{opacity:.5}}.modal-open .modal,.modal-open .modal-backdrop{pointer-events:auto}.modal-open.loading-active .modal,.modal-open.loading-active .modal-backdrop,.popover-open{pointer-events:none}.popover-backdrop{position:fixed;top:0;left:0;z-index:10;width:100%;height:100%;background-color:transparent}.popover-backdrop.active{background-color:rgba(0,0,0,.1)}.popover{left:50%;margin-top:12px;margin-left:-110px;height:280px;width:220px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}.popover .item:first-child{border-top:0}.popover .item:last-child{border-bottom:0}.popover.popover-bottom{margin-top:-12px}.popover,.popover .bar-header{border-radius:2px}.popover .scroll-content{z-index:1;margin:2px 0}.popover .bar-header{border-bottom-right-radius:0;border-bottom-left-radius:0}.popover .has-header{border-top-right-radius:0;border-top-left-radius:0}.popover-arrow{display:none}.platform-ios .popover{box-shadow:0 0 40px rgba(0,0,0,.08);border-radius:10px}.platform-ios .popover .bar-header{-webkit-border-top-right-radius:10px;border-top-right-radius:10px;-webkit-border-top-left-radius:10px;border-top-left-radius:10px}.platform-ios .popover .scroll-content{margin:8px 0;border-radius:10px}.platform-ios .popover .scroll-content.has-header{margin-top:0}.platform-ios .popover-arrow{position:absolute;display:block;top:-17px;width:30px;height:19px;overflow:hidden}.popup-container,.popup-container .popup{display:-webkit-box;display:-moz-box;display:-moz-flex;display:-ms-flexbox}.platform-ios .popover-arrow:after{position:absolute;top:12px;left:5px;width:20px;height:20px;background-color:#fff;border-radius:3px;content:'';-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.platform-ios .popover-bottom .popover-arrow{top:auto;bottom:-10px}.platform-ios .popover-bottom .popover-arrow:after{top:-6px}.loading-container,.popup-container{position:absolute;left:0;top:0;right:0;bottom:0}.platform-android .popover{margin-top:-32px;background-color:#fafafa;box-shadow:0 2px 6px rgba(0,0,0,.35)}.platform-android .popover .item{border-color:#fafafa;background-color:#fafafa;color:#4d4d4d}.platform-android .popover.popover-bottom{margin-top:32px}.platform-android .popover-backdrop,.platform-android .popover-backdrop.active{background-color:transparent}.popover-open .popover,.popover-open .popover-backdrop{pointer-events:auto}.popover-open.loading-active .popover,.popover-open.loading-active .popover-backdrop,.popup-open,.popup-open.modal-open .modal{pointer-events:none}@media (min-width:680px){.popover{width:360px;margin-left:-180px}}.popup-container{background:0 0;display:-webkit-flex;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;z-index:12;visibility:hidden}.popup-container.popup-showing{visibility:visible}.popup-container.popup-hidden .popup{-webkit-animation-name:scaleOut;animation-name:scaleOut;-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.popup-container.active .popup{-webkit-animation-name:superScaleIn;animation-name:superScaleIn;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.popup-container .popup{width:250px;max-width:100%;max-height:90%;border-radius:0;background-color:rgba(255,255,255,.9);display:-webkit-flex;display:flex;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.popup-container input,.popup-container textarea{width:100%}.popup-head{padding:15px 10px;border-bottom:1px solid #eee;text-align:center}.popup-title{margin:0;padding:0;font-size:15px}.popup-sub-title{margin:5px 0 0;padding:0;font-weight:400;font-size:11px}.popup-body{padding:10px;overflow:auto}.popup-buttons{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row;padding:10px;min-height:65px}.popup-buttons .button{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;min-height:45px;border-radius:2px;line-height:20px;margin-right:5px}.popup-buttons .button:last-child{margin-right:0}.popup-open .popup,.popup-open .popup-backdrop{pointer-events:auto}.loading-container{z-index:13;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-transition:.2s opacity linear;transition:.2s opacity linear;visibility:hidden;opacity:0}#menu .footer .loading-container:not(.visible) .icon-help,.loading-container:not(.visible) #menu .footer .icon-help,.loading-container:not(.visible) .icon,.loading-container:not(.visible) .icon-alert,.loading-container:not(.visible) .icon-help,.loading-container:not(.visible) .spinner{display:none}.loading-container.visible{visibility:visible}.loading-container.active{opacity:1}.loading-container .loading{padding:20px;border-radius:5px;background-color:rgba(0,0,0,.7);color:#fff;text-align:center;text-overflow:ellipsis;font-size:15px}.loading-container .loading h1,.loading-container .loading h2,.loading-container .loading h3,.loading-container .loading h4,.loading-container .loading h5,.loading-container .loading h6{color:#fff}.item{border-color:#ddd;color:#444;position:relative;z-index:2;display:block;margin:-1px;padding:16px;border-width:1px;border-style:solid}.item h2{margin:0 0 2px;font-size:16px;font-weight:400}.item h3{margin:0 0 4px;font-size:14px}.item h4{margin:0 0 4px;font-size:12px}.item h5,.item h6{margin:0 0 3px;font-size:10px}.item p{color:#666;font-size:14px;margin-bottom:2px}.item h1:last-child,.item h2:last-child,.item h3:last-child,.item h4:last-child,.item h5:last-child,.item h6:last-child,.item p:last-child{margin-bottom:0}.item .badge{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;position:absolute;top:16px;right:32px}.item.item-divider .badge{top:8px}.item .badge+.badge{margin-right:5px}.item.item-light{border-color:#ddd;background-color:#fff;color:#444}.item.item-stable{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.item.item-positive{border-color:#0c60ee;background-color:#387ef5;color:#fff}.item.item-calm{border-color:#0a9dc7;background-color:#11c1f3;color:#fff}.item.item-assertive{border-color:#e42112;background-color:#ef473a;color:#fff}.item.item-balanced{border-color:#28a54c;background-color:#33cd5f;color:#fff}.item.item-energized{border-color:#e6b500;background-color:#ffc900;color:#fff}.item.item-royal{border-color:#6b46e5;background-color:#886aea;color:#fff}.item.item-dark{border-color:#111;background-color:#444;color:#fff}a.item,a.item-content{color:inherit;text-decoration:none}.item[ng-click]:hover{cursor:pointer}.item-borderless,.list-borderless .item{border-width:0}.item .item-content.activated,.item .item-content.activated.item-complex>.item-content,.item .item-content.active,.item .item-content.active.item-complex>.item-content,.item-complex.activated .item-content,.item-complex.activated .item-content.item-complex>.item-content,.item-complex.active .item-content,.item-complex.active .item-content.item-complex>.item-content,.item.activated,.item.activated.item-complex>.item-content,.item.active,.item.active.item-complex>.item-content{border-color:#ccc;background-color:#D9D9D9}.item .item-content.activated.item-light,.item .item-content.activated.item-light.item-complex>.item-content,.item .item-content.active.item-light,.item .item-content.active.item-light.item-complex>.item-content,.item-complex.activated .item-content.item-light,.item-complex.activated .item-content.item-light.item-complex>.item-content,.item-complex.active .item-content.item-light,.item-complex.active .item-content.item-light.item-complex>.item-content,.item.activated.item-light,.item.activated.item-light.item-complex>.item-content,.item.active.item-light,.item.active.item-light.item-complex>.item-content{border-color:#ccc;background-color:#fafafa}.item .item-content.activated.item-stable,.item .item-content.activated.item-stable.item-complex>.item-content,.item .item-content.active.item-stable,.item .item-content.active.item-stable.item-complex>.item-content,.item-complex.activated .item-content.item-stable,.item-complex.activated .item-content.item-stable.item-complex>.item-content,.item-complex.active .item-content.item-stable,.item-complex.active .item-content.item-stable.item-complex>.item-content,.item.activated.item-stable,.item.activated.item-stable.item-complex>.item-content,.item.active.item-stable,.item.active.item-stable.item-complex>.item-content{border-color:#a2a2a2;background-color:#e5e5e5}.item .item-content.activated.item-positive,.item .item-content.activated.item-positive.item-complex>.item-content,.item .item-content.active.item-positive,.item .item-content.active.item-positive.item-complex>.item-content,.item-complex.activated .item-content.item-positive,.item-complex.activated .item-content.item-positive.item-complex>.item-content,.item-complex.active .item-content.item-positive,.item-complex.active .item-content.item-positive.item-complex>.item-content,.item.activated.item-positive,.item.activated.item-positive.item-complex>.item-content,.item.active.item-positive,.item.active.item-positive.item-complex>.item-content{border-color:#0c60ee;background-color:#0c60ee}.item .item-content.activated.item-calm,.item .item-content.activated.item-calm.item-complex>.item-content,.item .item-content.active.item-calm,.item .item-content.active.item-calm.item-complex>.item-content,.item-complex.activated .item-content.item-calm,.item-complex.activated .item-content.item-calm.item-complex>.item-content,.item-complex.active .item-content.item-calm,.item-complex.active .item-content.item-calm.item-complex>.item-content,.item.activated.item-calm,.item.activated.item-calm.item-complex>.item-content,.item.active.item-calm,.item.active.item-calm.item-complex>.item-content{border-color:#0a9dc7;background-color:#0a9dc7}.item .item-content.activated.item-assertive,.item .item-content.activated.item-assertive.item-complex>.item-content,.item .item-content.active.item-assertive,.item .item-content.active.item-assertive.item-complex>.item-content,.item-complex.activated .item-content.item-assertive,.item-complex.activated .item-content.item-assertive.item-complex>.item-content,.item-complex.active .item-content.item-assertive,.item-complex.active .item-content.item-assertive.item-complex>.item-content,.item.activated.item-assertive,.item.activated.item-assertive.item-complex>.item-content,.item.active.item-assertive,.item.active.item-assertive.item-complex>.item-content{border-color:#e42112;background-color:#e42112}.item .item-content.activated.item-balanced,.item .item-content.activated.item-balanced.item-complex>.item-content,.item .item-content.active.item-balanced,.item .item-content.active.item-balanced.item-complex>.item-content,.item-complex.activated .item-content.item-balanced,.item-complex.activated .item-content.item-balanced.item-complex>.item-content,.item-complex.active .item-content.item-balanced,.item-complex.active .item-content.item-balanced.item-complex>.item-content,.item.activated.item-balanced,.item.activated.item-balanced.item-complex>.item-content,.item.active.item-balanced,.item.active.item-balanced.item-complex>.item-content{border-color:#28a54c;background-color:#28a54c}.item .item-content.activated.item-energized,.item .item-content.activated.item-energized.item-complex>.item-content,.item .item-content.active.item-energized,.item .item-content.active.item-energized.item-complex>.item-content,.item-complex.activated .item-content.item-energized,.item-complex.activated .item-content.item-energized.item-complex>.item-content,.item-complex.active .item-content.item-energized,.item-complex.active .item-content.item-energized.item-complex>.item-content,.item.activated.item-energized,.item.activated.item-energized.item-complex>.item-content,.item.active.item-energized,.item.active.item-energized.item-complex>.item-content{border-color:#e6b500;background-color:#e6b500}.item .item-content.activated.item-royal,.item .item-content.activated.item-royal.item-complex>.item-content,.item .item-content.active.item-royal,.item .item-content.active.item-royal.item-complex>.item-content,.item-complex.activated .item-content.item-royal,.item-complex.activated .item-content.item-royal.item-complex>.item-content,.item-complex.active .item-content.item-royal,.item-complex.active .item-content.item-royal.item-complex>.item-content,.item.activated.item-royal,.item.activated.item-royal.item-complex>.item-content,.item.active.item-royal,.item.active.item-royal.item-complex>.item-content{border-color:#6b46e5;background-color:#6b46e5}.item .item-content.activated.item-dark,.item .item-content.activated.item-dark.item-complex>.item-content,.item .item-content.active.item-dark,.item .item-content.active.item-dark.item-complex>.item-content,.item-complex.activated .item-content.item-dark,.item-complex.activated .item-content.item-dark.item-complex>.item-content,.item-complex.active .item-content.item-dark,.item-complex.active .item-content.item-dark.item-complex>.item-content,.item.activated.item-dark,.item.activated.item-dark.item-complex>.item-content,.item.active.item-dark,.item.active.item-dark.item-complex>.item-content{border-color:#000;background-color:#262626}.item,.item h1,.item h2,.item h3,.item h4,.item h5,.item h6,.item p,.item-content,.item-content h1,.item-content h2,.item-content h3,.item-content h4,.item-content h5,.item-content h6,.item-content p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a.item:focus,a.item:hover{text-decoration:none}.item-complex,a.item.item-complex,button.item.item-complex{padding:0}.item-complex .item-content,.item-radio .item-content{position:relative;z-index:2;padding:16px 49px 16px 16px;border:none}a.item-content{display:block}.item-body h1,.item-body h2,.item-body h3,.item-body h4,.item-body h5,.item-body h6,.item-body p,.item-complex.item-text-wrap,.item-complex.item-text-wrap .item-content,.item-complex.item-text-wrap h1,.item-complex.item-text-wrap h2,.item-complex.item-text-wrap h3,.item-complex.item-text-wrap h4,.item-complex.item-text-wrap h5,.item-complex.item-text-wrap h6,.item-complex.item-text-wrap p,.item-text-wrap,.item-text-wrap .item,.item-text-wrap .item-content,.item-text-wrap h1,.item-text-wrap h2,.item-text-wrap h3,.item-text-wrap h4,.item-text-wrap h5,.item-text-wrap h6,.item-text-wrap p{overflow:visible;white-space:normal}.item-complex.item-light>.item-content{border-color:#ddd;background-color:#fff;color:#444}.item-complex.item-light>.item-content.active,.item-complex.item-light>.item-content.active.item-complex>.item-content,.item-complex.item-light>.item-content:active,.item-complex.item-light>.item-content:active.item-complex>.item-content{border-color:#ccc;background-color:#fafafa}.item-complex.item-stable>.item-content{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.item-complex.item-stable>.item-content.active,.item-complex.item-stable>.item-content.active.item-complex>.item-content,.item-complex.item-stable>.item-content:active,.item-complex.item-stable>.item-content:active.item-complex>.item-content{border-color:#a2a2a2;background-color:#e5e5e5}.item-complex.item-positive>.item-content{border-color:#0c60ee;background-color:#387ef5;color:#fff}.item-complex.item-positive>.item-content.active,.item-complex.item-positive>.item-content.active.item-complex>.item-content,.item-complex.item-positive>.item-content:active,.item-complex.item-positive>.item-content:active.item-complex>.item-content{border-color:#0c60ee;background-color:#0c60ee}.item-complex.item-calm>.item-content{border-color:#0a9dc7;background-color:#11c1f3;color:#fff}.item-complex.item-calm>.item-content.active,.item-complex.item-calm>.item-content.active.item-complex>.item-content,.item-complex.item-calm>.item-content:active,.item-complex.item-calm>.item-content:active.item-complex>.item-content{border-color:#0a9dc7;background-color:#0a9dc7}.item-complex.item-assertive>.item-content{border-color:#e42112;background-color:#ef473a;color:#fff}.item-complex.item-assertive>.item-content.active,.item-complex.item-assertive>.item-content.active.item-complex>.item-content,.item-complex.item-assertive>.item-content:active,.item-complex.item-assertive>.item-content:active.item-complex>.item-content{border-color:#e42112;background-color:#e42112}.item-complex.item-balanced>.item-content{border-color:#28a54c;background-color:#33cd5f;color:#fff}.item-complex.item-balanced>.item-content.active,.item-complex.item-balanced>.item-content.active.item-complex>.item-content,.item-complex.item-balanced>.item-content:active,.item-complex.item-balanced>.item-content:active.item-complex>.item-content{border-color:#28a54c;background-color:#28a54c}.item-complex.item-energized>.item-content{border-color:#e6b500;background-color:#ffc900;color:#fff}.item-complex.item-energized>.item-content.active,.item-complex.item-energized>.item-content.active.item-complex>.item-content,.item-complex.item-energized>.item-content:active,.item-complex.item-energized>.item-content:active.item-complex>.item-content{border-color:#e6b500;background-color:#e6b500}.item-complex.item-royal>.item-content{border-color:#6b46e5;background-color:#886aea;color:#fff}.item-complex.item-royal>.item-content.active,.item-complex.item-royal>.item-content.active.item-complex>.item-content,.item-complex.item-royal>.item-content:active,.item-complex.item-royal>.item-content:active.item-complex>.item-content{border-color:#6b46e5;background-color:#6b46e5}.item-complex.item-dark>.item-content{border-color:#111;background-color:#444;color:#fff}.item-complex.item-dark>.item-content.active,.item-complex.item-dark>.item-content.active.item-complex>.item-content,.item-complex.item-dark>.item-content:active,.item-complex.item-dark>.item-content:active.item-complex>.item-content{border-color:#000;background-color:#262626}#menu .footer .item-icon-left .icon-help,#menu .footer .item-icon-right .icon-help,.item-icon-left #menu .footer .icon-help,.item-icon-left .icon,.item-icon-left .icon-alert,.item-icon-left .icon-help,.item-icon-right #menu .footer .icon-help,.item-icon-right .icon,.item-icon-right .icon-alert,.item-icon-right .icon-help{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%;font-size:32px}#menu .footer .item-icon-left .icon-help:before,#menu .footer .item-icon-right .icon-help:before,.item-icon-left #menu .footer .icon-help:before,.item-icon-left .icon-alert:before,.item-icon-left .icon-help:before,.item-icon-left .icon:before,.item-icon-right #menu .footer .icon-help:before,.item-icon-right .icon-alert:before,.item-icon-right .icon-help:before,.item-icon-right .icon:before{display:block;width:32px;text-align:center}.item .fill-icon{min-width:30px;min-height:30px;font-size:28px}.item-icon-left{padding-left:54px}.item-complex.item-icon-left{padding-left:0}.item-complex.item-icon-left .item-content{padding-left:54px}.item-icon-right{padding-right:54px}.item-complex.item-icon-right{padding-right:0}.item-complex.item-icon-right .item-content{padding-right:54px}#menu .footer .item-icon-left.item-icon-right .icon-help:first-child,.item-icon-left.item-icon-right #menu .footer .icon-help:first-child,.item-icon-left.item-icon-right .icon-alert:first-child,.item-icon-left.item-icon-right .icon-help:first-child,.item-icon-left.item-icon-right .icon:first-child{right:auto}#menu .footer .item-icon-left .item-delete .icon-help,#menu .footer .item-icon-left.item-icon-right .icon-help:last-child,.item-icon-left .item-delete #menu .footer .icon-help,.item-icon-left .item-delete .icon,.item-icon-left .item-delete .icon-alert,.item-icon-left .item-delete .icon-help,.item-icon-left.item-icon-right #menu .footer .icon-help:last-child,.item-icon-left.item-icon-right .icon-alert:last-child,.item-icon-left.item-icon-right .icon-help:last-child,.item-icon-left.item-icon-right .icon:last-child{left:auto}.item-icon-left .icon-accessory,.item-icon-right .icon-accessory{color:#ccc;font-size:16px}.item-icon-left .icon-accessory{left:3px}.item-icon-right .icon-accessory{right:3px}.item-button-left{padding-left:72px}.item-button-left .item-content>.button,.item-button-left>.button{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:8px;left:11px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}#menu .footer .item-button-left .item-content>.button .icon-help:before,#menu .footer .item-button-left>.button .icon-help:before,.item-button-left .item-content>.button #menu .footer .icon-help:before,.item-button-left .item-content>.button .icon-alert:before,.item-button-left .item-content>.button .icon-help:before,.item-button-left .item-content>.button .icon:before,.item-button-left>.button #menu .footer .icon-help:before,.item-button-left>.button .icon-alert:before,.item-button-left>.button .icon-help:before,.item-button-left>.button .icon:before{position:relative;left:auto;width:auto;line-height:31px}.item-button-left .item-content>.button>.button,.item-button-left>.button>.button{margin:0 2px;min-height:34px;font-size:18px;line-height:32px}.item-button-right,a.item.item-button-right,button.item.item-button-right{padding-right:80px}.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.button,.item-button-right>.buttons{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;right:16px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}#menu .footer .item-button-right .item-content>.button .icon-help:before,#menu .footer .item-button-right .item-content>.buttons .icon-help:before,#menu .footer .item-button-right>.button .icon-help:before,#menu .footer .item-button-right>.buttons .icon-help:before,.item-button-right .item-content>.button #menu .footer .icon-help:before,.item-button-right .item-content>.button .icon-alert:before,.item-button-right .item-content>.button .icon-help:before,.item-button-right .item-content>.button .icon:before,.item-button-right .item-content>.buttons #menu .footer .icon-help:before,.item-button-right .item-content>.buttons .icon-alert:before,.item-button-right .item-content>.buttons .icon-help:before,.item-button-right .item-content>.buttons .icon:before,.item-button-right>.button #menu .footer .icon-help:before,.item-button-right>.button .icon-alert:before,.item-button-right>.button .icon-help:before,.item-button-right>.button .icon:before,.item-button-right>.buttons #menu .footer .icon-help:before,.item-button-right>.buttons .icon-alert:before,.item-button-right>.buttons .icon-help:before,.item-button-right>.buttons .icon:before{position:relative;left:auto;width:auto;line-height:31px}.item-button-right .item-content>.button>.button,.item-button-right .item-content>.buttons>.button,.item-button-right>.button>.button,.item-button-right>.buttons>.button{margin:0 2px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}.item-button-left.item-button-right .button:first-child{right:auto}.item-button-left.item-button-right .button:last-child{left:auto}.item-avatar .item-content .item-image,.item-avatar .item-content>img:first-child,.item-avatar .item-image,.item-avatar-left .item-content .item-image,.item-avatar-left .item-content>img:first-child,.item-avatar-left .item-image,.item-avatar-left>img:first-child,.item-avatar>img:first-child{position:absolute;top:16px;width:100%;height:100%;border-radius:50%}.item-avatar-right,.item-avatar-right .item-content{padding-right:72px;min-height:72px}.item-avatar-right .item-content .item-image,.item-avatar-right .item-content>img:first-child,.item-avatar-right .item-image,.item-avatar-right>img:first-child{position:absolute;top:16px;right:16px;max-width:40px;max-height:40px;width:100%;height:100%;border-radius:50%}.item-thumbnail-left,.item-thumbnail-left .item-content{padding-top:8px;padding-left:106px;min-height:100px}.item-thumbnail-left .item-content .item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left .item-image,.item-thumbnail-left>img:first-child{position:absolute;top:10px;left:10px;max-width:80px;max-height:80px;width:100%;height:100%}.item-avatar-left.item-complex,.item-avatar.item-complex,.item-thumbnail-left.item-complex{padding-top:0;padding-left:0}.item-thumbnail-right,.item-thumbnail-right .item-content{padding-top:8px;min-height:100px}.item-thumbnail-right .item-content .item-image,.item-thumbnail-right .item-content>img:first-child,.item-thumbnail-right .item-image,.item-thumbnail-right>img:first-child{position:absolute;top:10px;right:10px;max-width:80px;max-height:80px;width:100%;height:100%}.item-options,.item-right-edit{position:absolute;top:0;right:0;height:100%}.item-avatar-right.item-complex,.item-thumbnail-right.item-complex{padding-top:0;padding-right:0}.item-image{padding:0;text-align:center}.item-image .list-img,.item-image img:first-child{width:100%;vertical-align:middle}.item-body{overflow:auto;padding:16px;text-overflow:inherit;white-space:normal}.item-body h1,.item-body h2,.item-body h3,.item-body h4,.item-body h5,.item-body h6,.item-body p{margin-top:16px;margin-bottom:16px}.item-divider{padding-top:8px;padding-bottom:8px;min-height:30px;background-color:#f5f5f5;color:#222;font-weight:500}.item-divider-ios,.platform-ios .item-divider-platform{padding-top:26px;text-transform:uppercase;font-weight:300;font-size:13px;background-color:#efeff4;color:#555}.item-divider-android,.platform-android .item-divider-platform{font-weight:300;font-size:13px}.item-note{float:right;color:#aaa;font-size:14px}.item-left-editable .item-content,.item-right-editable .item-content{-webkit-transition-duration:250ms;transition-duration:250ms;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;transition-property:transform}.item-left-editing.item-left-editable .item-content,.list-left-editing .item-left-editable .item-content{-webkit-transform:translate3d(50px,0,0);transform:translate3d(50px,0,0)}.item-remove-animate.ng-leave{-webkit-transition-duration:.3s;transition-duration:.3s}.item-remove-animate.ng-leave .item-content,.item-remove-animate.ng-leave:last-of-type{-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-property:all;transition-property:all}.item-remove-animate.ng-leave.ng-leave-active .item-content{opacity:0;-webkit-transform:translate3d(-100%,0,0)!important;transform:translate3d(-100%,0,0)!important}.item-remove-animate.ng-leave.ng-leave-active:last-of-type{opacity:0}.item-remove-animate.ng-leave.ng-leave-active~ion-item:not(.ng-leave){-webkit-transform:translate3d(0,-webkit-calc(-100% + 1px),0);transform:translate3d(0,calc(-100% + 1px),0);-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:cubic-bezier(.25,.81,.24,1);transition-timing-function:cubic-bezier(.25,.81,.24,1);-webkit-transition-property:all;transition-property:all}.item-left-edit{-webkit-transition:all ease-in-out 125ms;transition:all ease-in-out 125ms;position:absolute;top:0;left:0;z-index:0;width:50px;height:100%;line-height:100%;display:none;opacity:0;-webkit-transform:translate3d(-21px,0,0);transform:translate3d(-21px,0,0)}.item-left-edit .button{height:100%}#menu .footer .item-left-edit .button.icon-help,.item-left-edit #menu .footer .button.icon-help,.item-left-edit .button.icon,.item-left-edit .button.icon-alert,.item-left-edit .button.icon-help{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%}.item-left-edit.visible{display:block}.item-left-edit.visible.active{opacity:1;-webkit-transform:translate3d(8px,0,0);transform:translate3d(8px,0,0)}.list-left-editing .item-left-edit{-webkit-transition-delay:125ms;transition-delay:125ms}#menu .footer .item-delete .button.icon-help,.item-delete #menu .footer .button.icon-help,.item-delete .button.icon,.item-delete .button.icon-alert,.item-delete .button.icon-help{color:#ef473a;font-size:24px}#menu .footer .item-delete .button.icon-help:hover,.item-delete #menu .footer .button.icon-help:hover,.item-delete .button.icon-alert:hover,.item-delete .button.icon-help:hover,.item-delete .button.icon:hover{opacity:.7}.item-right-edit{-webkit-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms;z-index:3;width:75px;background:inherit;padding-left:20px;display:block;opacity:0;-webkit-transform:translate3d(75px,0,0);transform:translate3d(75px,0,0)}.item-right-edit .button{min-width:50px;height:100%}#menu .footer .item-right-edit .button.icon-help,.item-right-edit #menu .footer .button.icon-help,.item-right-edit .button.icon,.item-right-edit .button.icon-alert,.item-right-edit .button.icon-help{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%;font-size:32px}.item-right-edit.visible{display:block}.item-right-edit.visible.active{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#menu .footer .item-reorder .button.icon-help,.item-reorder #menu .footer .button.icon-help,.item-reorder .button.icon,.item-reorder .button.icon-alert,.item-reorder .button.icon-help{color:#444;font-size:32px}.item-reordering{position:absolute;left:0;top:0;z-index:9;width:100%;box-shadow:0 0 10px 0 #aaa}.item-reordering .item-reorder{z-index:9}.item-placeholder{opacity:.7}.item-options{z-index:1}.button .badge,.list,.slider,.slider-slide,.slider-slides{position:relative}.item-options .button{height:100%;border:none;border-radius:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-moz-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}.item-options .button:before{margin:0 auto}.item-options ion-option-button:last-child{padding-right:calc(env(safe-area-inset-right) + 12px)}.list{padding-top:1px;padding-bottom:1px;padding-left:0;margin-bottom:20px}.list:last-child{margin-bottom:0}.list:last-child.card{margin-bottom:40px}.list-header{margin-top:20px;padding:5px 15px;background-color:transparent;color:#222;font-weight:700}.card.list .list-item{padding-right:1px;padding-left:1px}.card,.list-inset{overflow:hidden;margin:20px 10px;border-radius:2px;background-color:#fff}.card .item,.item.large-button-bar .card,.item.large-button-bar .list-inset,.item.large-button-bar>.list .item,.list-inset .item,.padding .card,.padding .list-inset,.padding-horizontal>.list .item,.padding>.list .item{margin-left:0;margin-right:0}.card{padding-top:1px;padding-bottom:1px}.card .item{border-left:0;border-right:0}.card .item:first-child{border-top:0}.card .item:last-child{border-bottom:0}.card .item:first-child,.card .item:first-child .item-content,.item.large-button-bar>.list .item:first-child,.item.large-button-bar>.list .item:first-child .item-content,.list-inset .item:first-child,.list-inset .item:first-child .item-content,.padding>.list .item:first-child,.padding>.list .item:first-child .item-content{border-top-left-radius:2px;border-top-right-radius:2px}.card .item:last-child,.card .item:last-child .item-content,.item.large-button-bar>.list .item:last-child,.item.large-button-bar>.list .item:last-child .item-content,.list-inset .item:last-child,.list-inset .item:last-child .item-content,.padding>.list .item:last-child,.padding>.list .item:last-child .item-content{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.card .item:last-child,.list-inset .item:last-child{margin-bottom:-1px}.card .item.item-input input,.item.large-button-bar>.list .item.item-input input,.list-inset .item.item-input input,.padding-horizontal>.list .item.item-input input,.padding>.list .item.item-input input{padding-right:44px}.padding-left>.list .item{margin-left:0}.padding-right>.list .item,.popover-share .bar-footer .button-close>.list .item{margin-right:0}.badge{background-color:transparent;color:#AAA;z-index:1;display:inline-block;padding:3px 8px;min-width:10px;border-radius:10px;text-align:center;white-space:nowrap;font-weight:700;font-size:14px;line-height:16px}.badge:empty{display:none}.badge.badge-light,.tabs .tab-item .badge.badge-light{background-color:#fff;color:#444}.badge.badge-stable,.tabs .tab-item .badge.badge-stable{background-color:#f8f8f8;color:#444}.badge.badge-positive,.tabs .tab-item .badge.badge-positive{background-color:#387ef5;color:#fff}.badge.badge-calm,.tabs .tab-item .badge.badge-calm{background-color:#11c1f3;color:#fff}.badge.badge-assertive,.badge.badge-editable:hover,.tabs .tab-item .badge.badge-assertive,.tabs .tab-item .badge.badge-editable:hover{background-color:#ef473a;color:#fff}.badge.badge-balanced,.tabs .tab-item .badge.badge-balanced{background-color:#33cd5f;color:#fff}.badge.badge-energized,.tabs .tab-item .badge.badge-energized{background-color:#ffc900;color:#fff}.badge.badge-royal,.tabs .tab-item .badge.badge-royal{background-color:#886aea;color:#fff}.badge.badge-dark,.tabs .tab-item .badge.badge-dark{background-color:#444;color:#fff}.button .badge{top:-1px}.slider{visibility:hidden;overflow:hidden}.slider-slides{height:100%}.slider-slide{display:block;float:left;width:100%;height:100%;vertical-align:top}.slider-slide-image>img{width:100%}.slider-pager{position:absolute;bottom:20px;z-index:1;width:100%;height:15px;text-align:center}.slider-pager .slider-pager-page{display:inline-block;margin:0 3px;width:15px;color:#000;text-decoration:none;opacity:.3}.slider-pager .slider-pager-page.active{-webkit-transition:opacity .4s ease-in;transition:opacity .4s ease-in;opacity:1}.slider-pager-page.ng-animate,.slider-pager-page.ng-enter,.slider-pager-page.ng-leave,.slider-slide.ng-animate,.slider-slide.ng-enter,.slider-slide.ng-leave{-webkit-transition:none!important;transition:none!important}.slider-pager-page.ng-animate,.slider-slide.ng-animate{-webkit-animation:none 0s;animation:none 0s}.swiper-container{margin:0 auto;position:relative;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-slide,.toggle .track{box-sizing:border-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{display:block;-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-transition-property:-webkit-transform,height;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}.swiper-pagination-white .swiper-pagination-bullet,.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.item-input .button-bar,.item-input input{-webkit-appearance:none;-moz-appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination{bottom:10px;left:0;width:100%}.swiper-container-horizontal>.swiper-pagination .swiper-pagination-bullet{margin:0 5px}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(to left,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(to right,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(to top,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(to bottom,rgba(0,0,0,.5),transparent)}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide,.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;width:100%;height:100%;z-index:1}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-container,.swiper-slide,.swiper-wrapper,ion-slides{width:100%;height:100%}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}ion-slides{display:block}.slide-zoom{display:block;width:100%;text-align:center}.scroll-refresher .icon-refreshing,.scroll-refresher .text-refreshing,.scroll-refresher.active.refreshing .icon-pulling,.scroll-refresher.active.refreshing .text-pulling{display:none}.swiper-container{padding:0;overflow:hidden}.swiper-wrapper{position:absolute;left:0;top:0;padding:0}.swiper-slide img{width:auto;height:auto;max-width:100%;max-height:100%}.scroll-refresher{position:absolute;top:-60px;right:0;left:0;overflow:hidden;margin:auto;height:60px}.scroll-refresher .ionic-refresher-content{position:absolute;bottom:15px;left:0;width:100%;color:#666;text-align:center;font-size:30px}.scroll-refresher .ionic-refresher-content .text-pulling,.scroll-refresher .ionic-refresher-content .text-refreshing{font-size:16px;line-height:16px}.scroll-refresher .ionic-refresher-content.ionic-refresher-with-text{bottom:10px}.scroll-refresher .icon-pulling,.scroll-refresher .icon-refreshing{width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.scroll-refresher .icon-pulling{-webkit-animation-name:refresh-spin-back;animation-name:refresh-spin-back;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:none;animation-fill-mode:none;-webkit-transform:translate3d(0,0,0) rotate(0);transform:translate3d(0,0,0) rotate(0)}.scroll-refresher .icon-refreshing{-webkit-animation-duration:1.5s;animation-duration:1.5s}.scroll-refresher.active .icon-pulling:not(.pulling-rotation-disabled){-webkit-animation-name:refresh-spin;animation-name:refresh-spin;-webkit-transform:translate3d(0,0,0) rotate(-180deg);transform:translate3d(0,0,0) rotate(-180deg)}.scroll-refresher.active.refreshing{-webkit-transition:transform .2s;transition:transform .2s;-webkit-transform:scale(1,1);transform:scale(1,1)}.scroll-refresher.active.refreshing .icon-refreshing,.scroll-refresher.active.refreshing .text-refreshing,legend{display:block}.scroll-refresher.active.refreshing.refreshing-tail{-webkit-transform:scale(0,0);transform:scale(0,0)}.overflow-scroll>.scroll{-webkit-overflow-scrolling:touch;width:100%}.overflow-scroll>.scroll.overscroll{position:fixed;right:0;left:0}.overflow-scroll.item.large-button-bar>.scroll.overscroll,.overflow-scroll.padding>.scroll.overscroll{padding:10px}@-webkit-keyframes refresh-spin{0%{-webkit-transform:translate3d(0,0,0) rotate(0)}100%{-webkit-transform:translate3d(0,0,0) rotate(180deg)}}@keyframes refresh-spin{0%{transform:translate3d(0,0,0) rotate(0)}100%{transform:translate3d(0,0,0) rotate(180deg)}}@-webkit-keyframes refresh-spin-back{0%{-webkit-transform:translate3d(0,0,0) rotate(180deg)}100%{-webkit-transform:translate3d(0,0,0) rotate(0)}}@keyframes refresh-spin-back{0%{transform:translate3d(0,0,0) rotate(180deg)}100%{transform:translate3d(0,0,0) rotate(0)}}.spinner{stroke:#444;fill:#444}.spinner svg{width:28px;height:28px}.spinner.spinner-light{stroke:#fff;fill:#fff}.spinner.spinner-stable{stroke:#f8f8f8;fill:#f8f8f8}.spinner.spinner-positive{stroke:#387ef5;fill:#387ef5}.spinner.spinner-calm{stroke:#11c1f3;fill:#11c1f3}.spinner.spinner-balanced{stroke:#33cd5f;fill:#33cd5f}.spinner.spinner-assertive{stroke:#ef473a;fill:#ef473a}.spinner.spinner-energized{stroke:#ffc900;fill:#ffc900}.spinner.spinner-royal{stroke:#886aea;fill:#886aea}.spinner.spinner-dark{stroke:#444;fill:#444}.spinner-android{stroke:#4b8bf4}.spinner-ios,.spinner-ios-small{stroke:#69717d}.spinner-spiral .stop1{stop-color:#fff;stop-opacity:0}.spinner-spiral.spinner-light .stop1{stop-color:#444}.spinner-spiral.spinner-light .stop2{stop-color:#fff}.spinner-spiral.spinner-stable .stop2{stop-color:#f8f8f8}.spinner-spiral.spinner-positive .stop2{stop-color:#387ef5}.spinner-spiral.spinner-calm .stop2{stop-color:#11c1f3}.spinner-spiral.spinner-balanced .stop2{stop-color:#33cd5f}.spinner-spiral.spinner-assertive .stop2{stop-color:#ef473a}.spinner-spiral.spinner-energized .stop2{stop-color:#ffc900}.spinner-spiral.spinner-royal .stop2{stop-color:#886aea}.spinner-spiral.spinner-dark .stop2{stop-color:#444}form{margin:0 0 1.42857}legend{margin-bottom:1.42857;padding:0;width:100%;border:1px solid #ddd;color:#444;font-size:21px;line-height:2.85714}.item-input,.item-input-inset{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;overflow:hidden}legend small{color:#f8f8f8;font-size:1.07143}button,input,label,select,textarea{font-weight:400;font-size:14px;line-height:1.42857}.item-input{display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:relative;padding:6px 0 5px 16px}.item-input input{-webkit-border-radius:0;border-radius:0;-webkit-box-flex:1;-webkit-flex:1 220px;-moz-box-flex:1;-moz-flex:1 220px;-ms-flex:1 220px;flex:1 220px;appearance:none;margin:0;padding-right:24px;background-color:transparent}#menu .footer .item-input .button .icon-help,.item-input .button #menu .footer .icon-help,.item-input .button .icon,.item-input .button .icon-alert,.item-input .button .icon-help{-webkit-box-flex:0;-webkit-flex:0 0 24px;-moz-box-flex:0;-moz-flex:0 0 24px;-ms-flex:0 0 24px;flex:0 0 24px;position:static;display:inline-block;height:auto;text-align:center;font-size:16px}.item-input .button-bar{-webkit-border-radius:0;border-radius:0;-webkit-box-flex:1;-webkit-flex:1 0 220px;-moz-box-flex:1;-moz-flex:1 0 220px;-ms-flex:1 0 220px;flex:1 0 220px;appearance:none}#menu .footer .item-input .icon-help,.item-input #menu .footer .icon-help,.item-input .icon,.item-input .icon-alert,.item-input .icon-help{min-width:14px}.platform-windowsphone .item-input input{flex-shrink:1}.item-input-inset,.range{-webkit-box-align:center}.item-input-inset{display:flex;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:relative;padding:10.67px}.item-input-wrapper{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1 0;-moz-box-flex:1;-moz-flex:1 0;-ms-flex:1 0;flex:1 0;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-border-radius:4px;border-radius:4px;padding-right:8px;padding-left:8px;background:#eee}.item-input-inset .item-input-wrapper input{padding-left:4px;height:29px;background:0 0;line-height:18px}.item-input-wrapper~.button{margin-left:10.67px}.input-label{display:table;padding:7px 10px 7px 0;max-width:200px;width:35%;color:#444;font-size:16px}.placeholder-icon{color:#aaa}.placeholder-icon:first-child{padding-right:6px}.placeholder-icon:last-child{padding-left:6px}.item-stacked-label{display:block;background-color:transparent;box-shadow:none}#menu .footer .item-stacked-label .icon-help,.item-stacked-label #menu .footer .icon-help,.item-stacked-label .icon,.item-stacked-label .icon-alert,.item-stacked-label .icon-help,.item-stacked-label .input-label{display:inline-block;padding:4px 0 0;vertical-align:middle}.item-stacked-label input,.item-stacked-label textarea{-webkit-border-radius:2px;border-radius:2px;padding:4px 8px 3px 0;border:none;background-color:#fff}.item-stacked-label input{overflow:hidden;height:46px}.item-select.item-stacked-label select{position:relative;padding:0;max-width:90%;direction:ltr;white-space:pre-wrap;margin:-3px}.item-floating-label{display:block;background-color:transparent;box-shadow:none}.item-floating-label .input-label{position:relative;padding:5px 0 0;opacity:0;top:10px;-webkit-transition:opacity .15s ease-in,top .2s linear;transition:opacity .15s ease-in,top .2s linear}.item-floating-label .input-label.has-input{opacity:1;top:0;-webkit-transition:opacity .15s ease-in,top .2s linear;transition:opacity .15s ease-in,top .2s linear}input[type=search],input[type=text],input[type=password],input[type=datetime],input[type=datetime-local],input[type=date],input[type=month],input[type=time],input[type=week],input[type=number],input[type=email],input[type=url],input[type=tel],input[type=color],textarea{display:block;padding-top:2px;padding-left:0;height:34px;color:#111;vertical-align:middle;font-size:14px;line-height:16px;border:0}.platform-android input[type=datetime-local],.platform-android input[type=date],.platform-android input[type=month],.platform-android input[type=time],.platform-android input[type=week],.platform-ios input[type=datetime-local],.platform-ios input[type=date],.platform-ios input[type=month],.platform-ios input[type=time],.platform-ios input[type=week]{padding-top:8px}.item-input input,.item-input textarea{width:100%}textarea{padding-left:0;height:auto}textarea::-moz-placeholder{color:#aaa}textarea:-ms-input-placeholder{color:#aaa}textarea::-webkit-input-placeholder{color:#aaa;text-indent:-3px}input[type=radio],input[type=checkbox]{margin:0;line-height:normal}.item-input input[type=button],.item-input input[type=reset],.item-input input[type=submit],.item-input input[type=radio],.item-input input[type=checkbox],.item-input input[type=file],.item-input input[type=image]{width:auto}input[type=file]{line-height:34px}.cloned-text-input+input,.cloned-text-input+textarea,.previous-input-focus{position:absolute!important;left:-9999px;width:200px}input::-moz-placeholder,textarea::-moz-placeholder{color:#aaa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#aaa}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#aaa;text-indent:0}input[disabled],input[readonly]:not(.cloned-text-input),select[disabled],select[readonly],textarea[disabled],textarea[readonly]:not(.cloned-text-input){background-color:#f8f8f8;cursor:not-allowed}.checkbox,.item-radio:hover,.item-select select,.toggle .track{cursor:pointer}input[type=radio][disabled],input[type=radio][readonly],input[type=checkbox][disabled],input[type=checkbox][readonly]{background-color:transparent}.checkbox{position:relative;display:inline-block;padding:7px}.checkbox .checkbox-icon:before,.checkbox input:before{border-color:#ddd}.checkbox input:checked+.checkbox-icon:before,.checkbox input:checked:before{background:#387ef5;border-color:#387ef5}.checkbox-light .checkbox-icon:before,.checkbox-light input:before{border-color:#ddd}.checkbox-light input:checked+.checkbox-icon:before,.checkbox-light input:checked:before{background:#ddd;border-color:#ddd}.checkbox-stable .checkbox-icon:before,.checkbox-stable input:before{border-color:#b2b2b2}.checkbox-stable input:checked+.checkbox-icon:before,.checkbox-stable input:checked:before{background:#b2b2b2;border-color:#b2b2b2}.checkbox-positive .checkbox-icon:before,.checkbox-positive input:before{border-color:#387ef5}.checkbox-positive input:checked+.checkbox-icon:before,.checkbox-positive input:checked:before{background:#387ef5;border-color:#387ef5}.checkbox-calm .checkbox-icon:before,.checkbox-calm input:before{border-color:#11c1f3}.checkbox-calm input:checked+.checkbox-icon:before,.checkbox-calm input:checked:before{background:#11c1f3;border-color:#11c1f3}.checkbox-assertive .checkbox-icon:before,.checkbox-assertive input:before{border-color:#ef473a}.checkbox-assertive input:checked+.checkbox-icon:before,.checkbox-assertive input:checked:before{background:#ef473a;border-color:#ef473a}.checkbox-balanced .checkbox-icon:before,.checkbox-balanced input:before{border-color:#33cd5f}.checkbox-balanced input:checked+.checkbox-icon:before,.checkbox-balanced input:checked:before{background:#33cd5f;border-color:#33cd5f}.checkbox-energized .checkbox-icon:before,.checkbox-energized input:before{border-color:#ffc900}.checkbox-energized input:checked+.checkbox-icon:before,.checkbox-energized input:checked:before{background:#ffc900;border-color:#ffc900}.checkbox-royal .checkbox-icon:before,.checkbox-royal input:before{border-color:#886aea}.checkbox-royal input:checked+.checkbox-icon:before,.checkbox-royal input:checked:before{background:#886aea;border-color:#886aea}.checkbox-dark .checkbox-icon:before,.checkbox-dark input:before{border-color:#444}.checkbox-dark input:checked+.checkbox-icon:before,.checkbox-dark input:checked:before{background:#444;border-color:#444}.checkbox input:disabled+.checkbox-icon:before,.checkbox input:disabled:before{border-color:#ddd}.checkbox input:disabled:checked+.checkbox-icon:before,.checkbox input:disabled:checked:before{background:#ddd}.checkbox.checkbox-input-hidden input{display:none!important}.checkbox input,.checkbox-icon{position:relative;width:28px;height:28px;display:block;border:0;background:0 0;cursor:pointer;-webkit-appearance:none}.checkbox input:before,.checkbox-icon:before{display:table;width:100%;height:100%;border-width:1px;border-style:solid;border-radius:28px;background:#fff;content:' ';-webkit-transition:background-color 20ms ease-in-out;transition:background-color 20ms ease-in-out}.checkbox input:checked:before,input:checked+.checkbox-icon:before{border-width:2px}.checkbox input:after,.checkbox-icon:after{-webkit-transition:opacity 50ms ease-in-out;transition:opacity 50ms ease-in-out;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);position:absolute;top:33%;left:25%;display:table;width:14px;height:6px;border:1px solid #fff;border-top:0;border-right:0;content:' ';opacity:0}.checkbox-square .checkbox-icon:before,.checkbox-square input:before,.platform-android .checkbox-platform .checkbox-icon:before,.platform-android .checkbox-platform input:before{border-radius:2px;width:72%;height:72%;margin-top:14%;margin-left:14%;border-width:2px}.checkbox-square .checkbox-icon:after,.checkbox-square input:after,.platform-android .checkbox-platform .checkbox-icon:after,.platform-android .checkbox-platform input:after{border-width:2px;top:19%;left:25%;width:13px;height:7px}.platform-android .item-checkbox-right .checkbox-square .checkbox-icon::after{top:31%}.grade-c .checkbox input:after,.grade-c .checkbox-icon:after{-webkit-transform:rotate(0);transform:rotate(0);top:3px;left:4px;border:none;color:#fff;content:'\2713';font-weight:700;font-size:20px}.checkbox input:checked:after,input:checked+.checkbox-icon:after{opacity:1}.item-checkbox{padding-left:60px}.item-checkbox.active{box-shadow:none}.item-checkbox .checkbox{position:absolute;top:50%;right:8px;left:8px;z-index:3;margin-top:-21px}.item-checkbox.item-checkbox-right{padding-right:60px;padding-left:16px}.item-checkbox-right .checkbox input,.item-checkbox-right .checkbox-icon{float:right}.item-toggle{pointer-events:none}.toggle{position:relative;display:inline-block;pointer-events:auto;margin:-5px;padding:5px}.toggle input:checked+.track{border-color:#4cd964;background-color:#4cd964}.toggle.dragging .handle{background-color:#f2f2f2!important}.toggle.toggle-light input:checked+.track{border-color:#ddd;background-color:#ddd}.toggle.toggle-stable input:checked+.track{border-color:#b2b2b2;background-color:#b2b2b2}.toggle.toggle-positive input:checked+.track{border-color:#387ef5;background-color:#387ef5}.toggle.toggle-calm input:checked+.track{border-color:#11c1f3;background-color:#11c1f3}.toggle.toggle-assertive input:checked+.track{border-color:#ef473a;background-color:#ef473a}.toggle.toggle-balanced input:checked+.track{border-color:#33cd5f;background-color:#33cd5f}.toggle.toggle-energized input:checked+.track{border-color:#ffc900;background-color:#ffc900}.toggle.toggle-royal input:checked+.track{border-color:#886aea;background-color:#886aea}.toggle.toggle-dark input:checked+.track{border-color:#444;background-color:#444}.toggle input{display:none}.toggle .track{-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-property:background-color,border;transition-property:background-color,border;display:inline-block;width:51px;height:31px;border:2px solid #e6e6e6;border-radius:20px;background-color:#fff;content:' ';pointer-events:none}.platform-android4_2 .toggle .track{-webkit-background-clip:padding-box}.toggle .handle{-webkit-transition:.3s cubic-bezier(0,1.1,1,1.1);transition:.3s cubic-bezier(0,1.1,1,1.1);-webkit-transition-property:background-color,transform;transition-property:background-color,transform;position:absolute;display:block;width:27px;height:27px;border-radius:27px;background-color:#fff;top:7px;left:7px;box-shadow:0 2px 7px rgba(0,0,0,.35),0 1px 1px rgba(0,0,0,.15)}.toggle .handle:before{position:absolute;top:-4px;left:-21.5px;padding:18.5px 34px;content:" "}.toggle input:checked+.track .handle{-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0);background-color:#fff}.item-toggle.active{box-shadow:none}.item-toggle,.item-toggle.item-complex .item-content{padding-right:99px}.item-toggle.item-complex{padding-right:0}.item-toggle .toggle{position:absolute;top:10px;right:16px;z-index:3}.toggle input:disabled+.track{opacity:.6}.toggle-small .track{border:0;width:34px;height:15px;background:#9e9e9e}.toggle-small input:checked+.track{background:rgba(0,150,137,.5)}.toggle-small .handle{top:2px;left:4px;width:21px;height:21px;box-shadow:0 2px 5px rgba(0,0,0,.25)}.toggle-small input:checked+.track .handle{-webkit-transform:translate3d(16px,0,0);transform:translate3d(16px,0,0);background:#009689}.toggle-small.item-toggle .toggle{top:19px}.toggle-small .toggle-light input:checked+.track{background-color:rgba(221,221,221,.5)}.toggle-small .toggle-light input:checked+.track .handle{background-color:#ddd}.toggle-small .toggle-stable input:checked+.track{background-color:rgba(178,178,178,.5)}.toggle-small .toggle-stable input:checked+.track .handle{background-color:#b2b2b2}.toggle-small .toggle-positive input:checked+.track{background-color:rgba(56,126,245,.5)}.toggle-small .toggle-positive input:checked+.track .handle{background-color:#387ef5}.toggle-small .toggle-calm input:checked+.track{background-color:rgba(17,193,243,.5)}.toggle-small .toggle-calm input:checked+.track .handle{background-color:#11c1f3}.toggle-small .toggle-assertive input:checked+.track{background-color:rgba(239,71,58,.5)}.toggle-small .toggle-assertive input:checked+.track .handle{background-color:#ef473a}.toggle-small .toggle-balanced input:checked+.track{background-color:rgba(51,205,95,.5)}.toggle-small .toggle-balanced input:checked+.track .handle{background-color:#33cd5f}.toggle-small .toggle-energized input:checked+.track{background-color:rgba(255,201,0,.5)}.toggle-small .toggle-energized input:checked+.track .handle{background-color:#ffc900}.toggle-small .toggle-royal input:checked+.track{background-color:rgba(136,106,234,.5)}.toggle-small .toggle-royal input:checked+.track .handle{background-color:#886aea}.toggle-small .toggle-dark input:checked+.track{background-color:rgba(68,68,68,.5)}.toggle-small .toggle-dark input:checked+.track .handle{background-color:#444}.item-radio{padding:0}.item-radio .item-content{padding-right:64px}.item-radio .radio-icon{position:absolute;top:0;right:0;z-index:3;visibility:hidden;padding:14px;height:100%;font-size:24px}.item-radio input{position:absolute;left:-9999px}.item-radio input:checked+.radio-content .item-content{background:#f7f7f7}.item-radio input:checked+.radio-content .radio-icon{visibility:visible}.block:after,.invisible{visibility:hidden}.range input{overflow:hidden;margin-top:5px;margin-bottom:5px;padding-right:2px;padding-left:1px;width:auto;height:43px;outline:0;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0,#ccc),color-stop(100%,#ccc));background:linear-gradient(to right,#ccc 0,#ccc 100%);background-position:center;background-size:99% 2px;background-repeat:no-repeat;-webkit-appearance:none}.range input::-moz-focus-outer{border:0}.range input::-webkit-slider-thumb{position:relative;width:28px;height:28px;border-radius:50%;background-color:#fff;box-shadow:0 0 2px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2);cursor:pointer;-webkit-appearance:none;border:0}.range input::-webkit-slider-thumb:before{position:absolute;top:13px;left:-2001px;width:2000px;height:2px;background:#444;content:' '}.range input::-webkit-slider-thumb:after{position:absolute;top:-15px;left:-15px;padding:30px;content:' '}.range input::-ms-fill-lower{height:2px;background:#444}.range{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;padding:2px 11px}.range.range-light input::-webkit-slider-thumb:before{background:#ddd}.range.range-light input::-ms-fill-lower{background:#ddd}.range.range-stable input::-webkit-slider-thumb:before{background:#b2b2b2}.range.range-stable input::-ms-fill-lower{background:#b2b2b2}.range.range-positive input::-webkit-slider-thumb:before{background:#387ef5}.range.range-positive input::-ms-fill-lower{background:#387ef5}.range.range-calm input::-webkit-slider-thumb:before{background:#11c1f3}.range.range-calm input::-ms-fill-lower{background:#11c1f3}.range.range-balanced input::-webkit-slider-thumb:before{background:#33cd5f}.range.range-balanced input::-ms-fill-lower{background:#33cd5f}.range.range-assertive input::-webkit-slider-thumb:before{background:#ef473a}.range.range-assertive input::-ms-fill-lower{background:#ef473a}.range.range-energized input::-webkit-slider-thumb:before{background:#ffc900}.range.range-energized input::-ms-fill-lower{background:#ffc900}.range.range-royal input::-webkit-slider-thumb:before{background:#886aea}.range.range-royal input::-ms-fill-lower{background:#886aea}.range.range-dark input::-webkit-slider-thumb:before{background:#444}.range.range-dark input::-ms-fill-lower{background:#444}#menu .footer .range .icon-help,.range #menu .footer .icon-help,.range .icon,.range .icon-alert,.range .icon-help{-webkit-box-flex:0;-webkit-flex:0;-moz-box-flex:0;-moz-flex:0;-ms-flex:0;flex:0;display:block;min-width:24px;text-align:center;font-size:24px}.range input{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;margin-right:10px;margin-left:10px}.range-label{-webkit-box-flex:0;-webkit-flex:0 0 auto;-moz-box-flex:0;-moz-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:block;white-space:nowrap}.range-label:first-child{padding-left:5px}.range input+.range-label{padding-right:5px;padding-left:0}.platform-windowsphone .range input{height:auto}.item-select{position:relative}.item-select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:absolute;top:0;bottom:0;right:0;padding:0 48px 0 16px;max-width:65%;border:none;background:#fff;color:#333;text-indent:.01px;text-overflow:'';white-space:nowrap;font-size:14px;direction:rtl}.item-select select::-ms-expand{display:none}.item-select option{direction:ltr}.item-select:after{position:absolute;top:50%;right:16px;margin-top:-3px;width:0;height:0;border-top:5px solid;border-right:5px solid transparent;border-left:5px solid transparent;color:#999;content:"";pointer-events:none}.button-full>button.button,button.button-block,button.button-full,input.button.button-block,progress{width:100%}.item-select.item-light select{background:#fff;color:#444}.item-select.item-stable select{background:#f8f8f8;color:#444}.item-select.item-stable .input-label,.item-select.item-stable:after{color:#666}.item-select.item-positive select{background:#387ef5;color:#fff}.item-select.item-positive .input-label,.item-select.item-positive:after{color:#fff}.item-select.item-calm select{background:#11c1f3;color:#fff}.item-select.item-calm .input-label,.item-select.item-calm:after{color:#fff}.item-select.item-assertive select{background:#ef473a;color:#fff}.item-select.item-assertive .input-label,.item-select.item-assertive:after{color:#fff}.item-select.item-balanced select{background:#33cd5f;color:#fff}.item-select.item-balanced .input-label,.item-select.item-balanced:after{color:#fff}.item-select.item-energized select{background:#ffc900;color:#fff}.item-select.item-energized .input-label,.item-select.item-energized:after{color:#fff}.item-select.item-royal select{background:#886aea;color:#fff}.item-select.item-royal .input-label,.item-select.item-royal:after{color:#fff}.item-select.item-dark select{background:#444;color:#fff}.item-select.item-dark .input-label,.item-select.item-dark:after{color:#fff}select[multiple],select[size]{height:auto}progress{display:block;margin:15px auto}.button{background-color:#f8f8f8;color:#444;min-width:52px;min-height:47px;vertical-align:top;text-overflow:ellipsis;line-height:42px}.button:hover{color:#444;text-decoration:none}.button.activated,.button.active{border-color:#a2a2a2;background-color:#e5e5e5}.button:after{position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;content:' '}#menu .footer .button .icon-help,.button #menu .footer .icon-help,.button .icon,.button .icon-alert,.button .icon-help{vertical-align:top;pointer-events:none}#menu .footer .button .icon-help:before,#menu .footer .button.icon-help:before,.button #menu .footer .icon-help:before,.button .icon-alert:before,.button .icon-help:before,.button .icon:before,.button.icon-alert:before,.button.icon-help:before,.button.icon-left:before,.button.icon-right:before,.button.icon:before{display:inline-block;padding:0 0 1px;vertical-align:inherit;font-size:24px;line-height:41px;pointer-events:none}.button.icon-left:before{float:left;padding-right:.2em;padding-left:0}.button.icon-right:before{float:right;padding-right:0;padding-left:.2em}.button.button-block,.button.button-full{margin-top:10px;margin-bottom:10px}.button.button-light{border-color:transparent;background-color:#fff;color:#444}.button.button-light:hover{color:#444;text-decoration:none}.button.button-light.activated,.button.button-light.active{border-color:#a2a2a2;background-color:#fafafa}.button.button-light.button-clear,.button.button-light.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#ddd}.button.button-light.button-icon{border-color:transparent;background:0 0}.button.button-light.button-outline{border-color:#ddd;background:0 0;color:#ddd}.button.button-light.button-outline.activated,.button.button-light.button-outline.active{background-color:#ddd;box-shadow:none;color:#fff}.button.button-stable{border-color:transparent;background-color:#f8f8f8;color:#444}.button.button-stable:hover{color:#444;text-decoration:none}.button.button-stable.activated,.button.button-stable.active{border-color:#a2a2a2;background-color:#e5e5e5}.button.button-stable.button-clear,.button.button-stable.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#b2b2b2}.button.button-stable.button-icon{border-color:transparent;background:0 0}.button.button-stable.button-outline{border-color:#b2b2b2;background:0 0;color:#b2b2b2}.button.button-stable.button-outline.activated,.button.button-stable.button-outline.active{background-color:#b2b2b2;box-shadow:none;color:#fff}.button.button-positive,.button.button-text{border-color:transparent;background-color:#387ef5;color:#fff}.button.button-positive:hover,.button.button-text:hover{color:#fff;text-decoration:none}.button.activated.button-text,.button.active.button-text,.button.button-positive.activated,.button.button-positive.active{border-color:#a2a2a2;background-color:#0c60ee}.button.button-positive.button-clear,.button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#387ef5}.button.button-icon.button-text,.button.button-positive.button-icon{border-color:transparent;background:0 0}.button.button-outline.button-text,.button.button-positive.button-outline{border-color:#387ef5;background:0 0;color:#387ef5}.button.button-outline.activated.button-text,.button.button-outline.active.button-text,.button.button-positive.button-outline.activated,.button.button-positive.button-outline.active{background-color:#387ef5;box-shadow:none;color:#fff}.button.button-calm{border-color:transparent;background-color:#11c1f3;color:#fff}.button.button-calm:hover{color:#fff;text-decoration:none}.button.button-calm.activated,.button.button-calm.active{border-color:#a2a2a2;background-color:#0a9dc7}.button.button-calm.button-clear,.button.button-calm.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#11c1f3}.button.button-calm.button-icon{border-color:transparent;background:0 0}.button.button-calm.button-outline{border-color:#11c1f3;background:0 0;color:#11c1f3}.button.button-calm.button-outline.activated,.button.button-calm.button-outline.active{background-color:#11c1f3;box-shadow:none;color:#fff}.button.button-assertive{border-color:transparent;background-color:#ef473a;color:#fff}.button.button-assertive:hover{color:#fff;text-decoration:none}.button.button-assertive.activated,.button.button-assertive.active{border-color:#a2a2a2;background-color:#e42112}.button.button-assertive.button-clear,.button.button-assertive.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#ef473a}.button.button-assertive.button-icon{border-color:transparent;background:0 0}.button.button-assertive.button-outline{border-color:#ef473a;background:0 0;color:#ef473a}.button.button-assertive.button-outline.activated,.button.button-assertive.button-outline.active{background-color:#ef473a;box-shadow:none;color:#fff}.button.button-balanced{border-color:transparent;background-color:#33cd5f;color:#fff}.button.button-balanced:hover{color:#fff;text-decoration:none}.button.button-balanced.activated,.button.button-balanced.active{border-color:#a2a2a2;background-color:#28a54c}.button.button-balanced.button-clear,.button.button-balanced.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#33cd5f}.button.button-balanced.button-icon{border-color:transparent;background:0 0}.button.button-balanced.button-outline{border-color:#33cd5f;background:0 0;color:#33cd5f}.button.button-balanced.button-outline.activated,.button.button-balanced.button-outline.active{background-color:#33cd5f;box-shadow:none;color:#fff}.button.button-energized{border-color:transparent;background-color:#ffc900;color:#fff}.button.button-energized:hover{color:#fff;text-decoration:none}.button.button-energized.activated,.button.button-energized.active{border-color:#a2a2a2;background-color:#e6b500}.button.button-energized.button-clear,.button.button-energized.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#ffc900}.button.button-energized.button-icon{border-color:transparent;background:0 0}.button.button-energized.button-outline{border-color:#ffc900;background:0 0;color:#ffc900}.button.button-energized.button-outline.activated,.button.button-energized.button-outline.active{background-color:#ffc900;box-shadow:none;color:#fff}.button.button-royal{border-color:transparent;background-color:#886aea;color:#fff}.button.button-royal:hover{color:#fff;text-decoration:none}.button.button-royal.activated,.button.button-royal.active{border-color:#a2a2a2;background-color:#6b46e5}.button.button-royal.button-clear,.button.button-royal.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#886aea}.button.button-royal.button-icon{border-color:transparent;background:0 0}.button.button-royal.button-outline{border-color:#886aea;background:0 0;color:#886aea}.button.button-royal.button-outline.activated,.button.button-royal.button-outline.active{background-color:#886aea;box-shadow:none;color:#fff}.button.button-dark{border-color:transparent;background-color:#444;color:#fff}.button.button-dark:hover{color:#fff;text-decoration:none}.button.button-dark.activated,.button.button-dark.active{border-color:#a2a2a2;background-color:#262626}.button.button-dark.button-clear,.button.button-dark.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#444}.button.button-dark.button-icon{border-color:transparent;background:0 0}.button.button-dark.button-outline{border-color:#444;background:0 0;color:#444}.button.button-dark.button-outline.activated,.button.button-dark.button-outline.active{background-color:#444;box-shadow:none;color:#fff}.button-small,.button-text.button-small{padding:2px 4px 1px;min-width:28px;min-height:30px;font-size:12px;line-height:26px}#menu .footer .button-small .icon-help:before,#menu .footer .button-small.icon-help:before,.button-small #menu .footer .icon-help:before,.button-small .icon-alert:before,.button-small .icon-help:before,.button-small .icon:before,.button-small.icon-alert:before,.button-small.icon-help:before,.button-small.icon-left:before,.button-small.icon-right:before,.button-small.icon:before{font-size:16px;line-height:19px;margin-top:3px}.button-large{padding:0 16px;min-width:68px;min-height:59px;font-size:20px;line-height:53px}#menu .footer .button-large .icon-help:before,#menu .footer .button-large.icon-help:before,.button-large #menu .footer .icon-help:before,.button-large .icon-alert:before,.button-large .icon-help:before,.button-large .icon:before,.button-large.icon-alert:before,.button-large.icon-help:before,.button-large.icon-left:before,.button-large.icon-right:before,.button-large.icon:before{padding-bottom:2px;font-size:32px;line-height:51px}.button-clear,.button-icon,.button-text{-webkit-transition:opacity .1s;padding:0 6px;background:0 0}.button-icon{transition:opacity .1s;min-width:initial}.button-icon.button.activated,.button-icon.button.active{border-color:transparent;background:0 0;box-shadow:none}#menu .footer .button-icon .icon-help:before,#menu .footer .button-icon.icon-help:before,.button-icon #menu .footer .icon-help:before,.button-icon .icon-alert:before,.button-icon .icon-help:before,.button-icon .icon:before,.button-icon.icon-alert:before,.button-icon.icon-help:before,.button-icon.icon:before{font-size:32px}.button-clear,.button-text{transition:opacity .1s;max-height:42px;border-color:transparent;box-shadow:none}.button-clear.button-clear,.button-text{border-color:transparent;background:0 0;box-shadow:none;color:transparent}.button-clear.button-icon,.button-icon.button-text{border-color:transparent;background:0 0}.activated.button-text,.active.button-text,.button-clear.activated,.button-clear.active{opacity:.3}.button-outline{-webkit-transition:opacity .1s;transition:opacity .1s;background:0 0;box-shadow:none}.button-outline.button-outline{border-color:transparent;background:0 0;color:transparent}.button-outline.button-outline.activated,.button-outline.button-outline.active{background-color:transparent;box-shadow:none;color:#fff}.item.large-button-bar>.button.button-block:first-child,.padding>.button.button-block:first-child{margin-top:0}.button-block{display:block;clear:both}.button-block:after{clear:both}.button-full,.button-full>.button{display:block;margin-right:0;margin-left:0;border-right-width:0;border-left-width:0;border-radius:0}a.button{text-decoration:none}#menu .footer a.button .icon-help:before,#menu .footer a.button.icon-help:before,a.button #menu .footer .icon-help:before,a.button .icon-alert:before,a.button .icon-help:before,a.button .icon:before,a.button.icon-alert:before,a.button.icon-help:before,a.button.icon-left:before,a.button.icon-right:before,a.button.icon:before{margin-top:2px}.button.disabled,.button[disabled]{opacity:.4;cursor:default!important;pointer-events:none}.button-bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;width:100%}.button-bar.button-bar-inline{display:block;width:auto}.button-bar.button-bar-inline:after,.button-bar.button-bar-inline:before{display:table;content:"";line-height:0}.button-bar.button-bar-inline:after{clear:both}.button-bar.button-bar-inline>.button{width:auto;display:inline-block;float:left}.button-bar.bar-light>.button{border-color:#ddd}.button-bar.bar-stable>.button{border-color:#b2b2b2}.button-bar.bar-positive>.button{border-color:#0c60ee}.button-bar.bar-calm>.button{border-color:#0a9dc7}.button-bar.bar-assertive>.button{border-color:#e42112}.button-bar.bar-balanced>.button{border-color:#28a54c}.button-bar.bar-energized>.button{border-color:#e6b500}.button-bar.bar-royal>.button{border-color:#6b46e5}.button-bar.bar-dark>.button{border-color:#111}.button-bar>.button{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;padding:0 16px;width:0;border-width:1px 0 1px 1px;border-radius:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.bar,.col,.full-image,.iframe-wrapper iframe,.row{width:100%}.button-bar>.button:first-child{border-radius:4px 0 0 4px}.button-bar>.button:last-child{border-right-width:1px;border-radius:0 4px 4px 0}.button-bar>.button:only-child{border-radius:4px}#menu .footer .button-bar>.button-small .icon-help:before,.button-bar>.button-small #menu .footer .icon-help:before,.button-bar>.button-small .icon-alert:before,.button-bar>.button-small .icon-help:before,.button-bar>.button-small .icon:before,.button-bar>.button-small:before{line-height:28px}.row{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;padding:5px}.row-wrap{-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.row-no-padding,.row-no-padding>.col{padding:0}.row+.row{margin-top:-5px;padding-top:0}.col{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;padding:5px}.row-top{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;-moz-align-items:flex-start;align-items:flex-start}.row-bottom{-webkit-box-align:end;-ms-flex-align:end;-webkit-align-items:flex-end;-moz-align-items:flex-end;align-items:flex-end}.row-center{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}.row-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;-webkit-align-items:stretch;-moz-align-items:stretch;align-items:stretch}.row-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;-webkit-align-items:baseline;-moz-align-items:baseline;align-items:baseline}.col-top{-webkit-align-self:flex-start;-moz-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.col-bottom{-webkit-align-self:flex-end;-moz-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.col-center{-webkit-align-self:center;-moz-align-self:center;-ms-flex-item-align:center;align-self:center}.col-10,.col-20{-webkit-box-flex:0}.col-offset-10{margin-left:10%}.col-offset-20{margin-left:20%}.col-offset-25{margin-left:25%}.col-offset-33,.col-offset-34{margin-left:33.3333%}.col-offset-50{margin-left:50%}.col-offset-66,.col-offset-67{margin-left:66.6666%}.col-offset-75{margin-left:75%}.col-offset-80{margin-left:80%}.col-offset-90{margin-left:90%}.col-10{-webkit-flex:0 0 10%;-moz-box-flex:0;-moz-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%;max-width:10%}.col-20{-webkit-flex:0 0 20%;-moz-box-flex:0;-moz-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.col-25{-webkit-box-flex:0;-webkit-flex:0 0 25%;-moz-box-flex:0;-moz-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-33,.col-34{-webkit-box-flex:0;-webkit-flex:0 0 33.3333%;-moz-box-flex:0;-moz-flex:0 0 33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%;max-width:33.3333%}.col-40,.col-50{-webkit-box-flex:0}.col-40{-webkit-flex:0 0 40%;-moz-box-flex:0;-moz-flex:0 0 40%;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}.col-50{-webkit-flex:0 0 50%;-moz-box-flex:0;-moz-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-60{-webkit-box-flex:0;-webkit-flex:0 0 60%;-moz-box-flex:0;-moz-flex:0 0 60%;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}.col-66,.col-67{-webkit-box-flex:0;-webkit-flex:0 0 66.6666%;-moz-box-flex:0;-moz-flex:0 0 66.6666%;-ms-flex:0 0 66.6666%;flex:0 0 66.6666%;max-width:66.6666%}.col-75,.col-80{-webkit-box-flex:0}.col-75{-webkit-flex:0 0 75%;-moz-box-flex:0;-moz-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-80{-webkit-flex:0 0 80%;-moz-box-flex:0;-moz-flex:0 0 80%;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}.col-90{-webkit-box-flex:0;-webkit-flex:0 0 90%;-moz-box-flex:0;-moz-flex:0 0 90%;-ms-flex:0 0 90%;flex:0 0 90%;max-width:90%}@media (max-width:567px){.responsive-sm{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-sm .col,.responsive-sm .col-10,.responsive-sm .col-20,.responsive-sm .col-25,.responsive-sm .col-33,.responsive-sm .col-34,.responsive-sm .col-50,.responsive-sm .col-66,.responsive-sm .col-67,.responsive-sm .col-75,.responsive-sm .col-80,.responsive-sm .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}@media (max-width:767px){.responsive-md{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-md .col,.responsive-md .col-10,.responsive-md .col-20,.responsive-md .col-25,.responsive-md .col-33,.responsive-md .col-34,.responsive-md .col-50,.responsive-md .col-66,.responsive-md .col-67,.responsive-md .col-75,.responsive-md .col-80,.responsive-md .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}@media (max-width:1023px){.responsive-lg{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-lg .col,.responsive-lg .col-10,.responsive-lg .col-20,.responsive-lg .col-25,.responsive-lg .col-33,.responsive-lg .col-34,.responsive-lg .col-50,.responsive-lg .col-66,.responsive-lg .col-67,.responsive-lg .col-75,.responsive-lg .col-80,.responsive-lg .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}.hide{display:none}.opacity-hide{opacity:0}.grade-b .opacity-hide,.grade-c .opacity-hide{opacity:1;display:none}.show{display:block}.opacity-show{opacity:1}.keyboard-open .hide-on-keyboard-open{display:none}.keyboard-open .bar-footer.hide-on-keyboard-open+.pane .has-footer,.keyboard-open .tabs.hide-on-keyboard-open+.pane .has-tabs{bottom:0}.inline{display:inline-block}.block,.block:after{display:block;clear:both}.disable-pointer-events{pointer-events:none}.enable-pointer-events{pointer-events:auto}.disable-user-behavior{user-select:none;-webkit-tap-highlight-color:transparent;-ms-touch-action:none;-ms-content-zooming:none}.click-block{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;z-index:99999;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);overflow:hidden}.click-block-hide{-webkit-transform:translate3d(-9999px,0,0);transform:translate3d(-9999px,0,0)}.no-resize{resize:none}.block:after{height:0;content:"."}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.padding-top,.padding-vertical{padding-top:10px}.padding-horizontal,.padding-right,.popover-share .bar-footer .button-close{padding-right:10px}.padding-bottom,.padding-vertical,.popover-share .bar-footer .button-close{padding-bottom:10px}.padding-horizontal,.padding-left{padding-left:10px}.iframe-wrapper{position:fixed;-webkit-overflow-scrolling:touch;overflow:scroll}.iframe-wrapper iframe{height:100%}.light,a.light{color:#fff}.light-bg{background-color:#fff}.stable,a.stable{color:#f8f8f8}.stable-border{border-color:#b2b2b2}.icon-help,.positive,.text-editable:hover,a.icon-help,a.positive,a.text-editable:hover{color:#387ef5}.positive-border{border-color:#0c60ee}#menu .footer .icon-help,#menu .footer a.icon-help,.calm,a.calm{color:#11c1f3}.calm-border{border-color:#0a9dc7}.assertive,.icon-alert,a.assertive,a.icon-alert{color:#ef473a}.assertive-border{border-color:#e42112}.balanced,a.balanced{color:#33cd5f}.balanced-border{border-color:#28a54c}.energized,a.energized{color:#ffc900}.energized-border{border-color:#e6b500}.royal,a.royal{color:#886aea}.royal-border{border-color:#6b46e5}.button-text-dark,.dark,a.button-text-dark,a.dark{color:#444}.dark-bg{background-color:#444}.dark-border{border-color:#111}[collection-repeat]{left:0!important;top:0!important;position:absolute!important;z-index:1}.collection-repeat-container{position:relative;z-index:1}.collection-repeat-after-container{z-index:0;display:block}[nav-view-transition=ios] [nav-view=active],[nav-view-transition=ios][nav-view-direction=forward] [nav-view=entering],[nav-view-transition=ios][nav-view-direction=back] [nav-view=leaving],[nav-view-transition=android] [nav-view=active],[nav-view-transition=android][nav-view-direction=forward] [nav-view=entering],[nav-view-transition=android][nav-view-direction=back] [nav-view=leaving]{z-index:3}[nav-view-transition=ios][nav-view-direction=forward] [nav-view=leaving],[nav-view-transition=ios][nav-view-direction=back] [nav-view=entering],[nav-view-transition=android][nav-view-direction=forward] [nav-view=leaving],[nav-view-transition=android][nav-view-direction=back] [nav-view=entering]{z-index:2}[nav-bar-transition=ios] [nav-bar=entering],[nav-bar-transition=ios] [nav-bar=active],[nav-bar-transition=android] [nav-bar=entering],[nav-bar-transition=android] [nav-bar=active]{z-index:10}.collection-repeat-after-container.horizontal{display:inline-block}.ng-cloak,.ng-hide:not(.ng-hide-animate),.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none!important}[nav-bar-transition=ios] [nav-bar=cached] .header-item,[nav-bar-transition=android] [nav-bar=cached] .header-item,[nav-bar=cached],[nav-view=cached]{display:none}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader){height:64px;height:calc(constant(safe-area-inset-top) + 44px);height:calc(env(safe-area-inset-top) + 44px)}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper{margin-top:19px!important}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader)>*{margin-top:20px;margin-top:env(safe-area-inset-top)}.platform-ios.platform-cordova:not(.fullscreen) .bar-header{padding-left:calc(env(safe-area-inset-left) + 5px);padding-right:calc(env(safe-area-inset-right) + 5px)}.platform-ios.platform-cordova:not(.fullscreen) .bar-header .buttons:last-child{right:calc(constant(safe-area-inset-right) + 5px);right:calc(env(safe-area-inset-right) + 5px)}.platform-ios.platform-cordova:not(.fullscreen) .bar-footer.has-tabs,.platform-ios.platform-cordova:not(.fullscreen) .has-tabs{bottom:calc(constant(safe-area-inset-bottom) + 49px);bottom:calc(env(safe-area-inset-bottom) + 49px)}.platform-ios.platform-cordova:not(.fullscreen) .tabs-top>.tabs,.platform-ios.platform-cordova:not(.fullscreen) .tabs.tabs-top{top:64px}.platform-ios.platform-cordova:not(.fullscreen) .tabs{padding-bottom:env(safe-area-inset-bottom);height:calc(constant(safe-area-inset-bottom) + 49px);height:calc(env(safe-area-inset-bottom) + 49px)}.platform-ios.platform-cordova:not(.fullscreen) .bar-subheader,.platform-ios.platform-cordova:not(.fullscreen) .has-header{top:64px;top:calc(constant(safe-area-inset-top) + 44px);top:calc(env(safe-area-inset-top) + 44px)}.platform-ios.platform-cordova:not(.fullscreen) .has-subheader{top:108px;top:calc(constant(safe-area-inset-top) + 88px);top:calc(env(safe-area-inset-top) + 88px)}.platform-ios.platform-cordova:not(.fullscreen) .has-header.has-tabs-top{top:113px;top:calc(93px + constant(safe-area-inset-top));top:calc(93px + env(safe-area-inset-top))}.platform-ios.platform-cordova:not(.fullscreen) .has-header.has-subheader.has-tabs-top{top:157px;top:calc(137px + constant(safe-area-inset-right));top:calc(137px + env(safe-area-inset-right))}.platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader){height:44px}.platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper{margin-top:-1px}.platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader)>*{margin-top:0}.platform-ios.platform-cordova .popover .bar-subheader,.platform-ios.platform-cordova .popover .has-header{top:44px}.platform-ios.platform-cordova .popover .has-subheader{top:88px}.platform-ios.platform-cordova.status-bar-hide{margin-bottom:20px}@media (orientation:landscape){.item{padding:16px calc(constant(safe-area-inset-right) + 16px)}.item .badge{right:calc(constant(safe-area-inset-right) + 32px)}.item-icon-left{padding-left:calc(constant(safe-area-inset-left) + 54px)}#menu .footer .item-icon-left .icon-help,.item-icon-left #menu .footer .icon-help,.item-icon-left .icon,.item-icon-left .icon-alert,.item-icon-left .icon-help{left:calc(constant(safe-area-inset-left) + 11px)}.item-icon-right{padding-right:calc(constant(safe-area-inset-right) + 54px)}#menu .footer .item-icon-right .icon-help,.item-icon-right #menu .footer .icon-help,.item-icon-right .icon,.item-icon-right .icon-alert,.item-icon-right .icon-help{right:calc(constant(safe-area-inset-right) + 11px)}.item-complex,a.item.item-complex,button.item.item-complex{padding:0}.item-complex .item-content,a.item.item-complex .item-content,button.item.item-complex .item-content{padding:16px calc(constant(safe-area-inset-right) + 49px) 16px calc(constant(safe-area-inset-left) + 16px)}.item-left-edit.visible.active{-webkit-transform:translate3d(calc(constant(safe-area-inset-left) + 8px),0,0);transform:translate3d(calc(constant(safe-area-inset-left) + 8px),0,0)}.item-left-editing.item-left-editable .item-content,.list-left-editing .item-left-editable .item-content{-webkit-transform:translate3d(calc(constant(safe-area-inset-left) + 50px),0,0);transform:translate3d(calc(constant(safe-area-inset-left) + 50px),0,0)}.item-right-edit{right:constant(safe-area-inset-right);right:env(safe-area-inset-right)}.platform-ios.platform-browser.platform-ipad{position:fixed}}.platform-c:not(.enable-transitions) *{-webkit-transition:none!important;transition:none!important}.slide-in-up{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.slide-in-up.ng-enter,.slide-in-up>.ng-enter{-webkit-transition:all cubic-bezier(.1,.7,.1,1) .4s;transition:all cubic-bezier(.1,.7,.1,1) .4s}.slide-in-up.ng-enter-active,.slide-in-up>.ng-enter-active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-in-up.ng-leave,.slide-in-up>.ng-leave{-webkit-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms}@-webkit-keyframes scaleOut{from{-webkit-transform:scale(1);opacity:1}to{-webkit-transform:scale(.8);opacity:0}}@keyframes scaleOut{from{transform:scale(1);opacity:1}to{transform:scale(.8);opacity:0}}@-webkit-keyframes superScaleIn{from{-webkit-transform:scale(1.2);opacity:0}to{-webkit-transform:scale(1);opacity:1}}@keyframes superScaleIn{from{transform:scale(1.2);opacity:0}to{transform:scale(1);opacity:1}}[nav-view-transition=ios] [nav-view=entering],[nav-view-transition=ios] [nav-view=leaving]{-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:cubic-bezier(.36,.66,.04,1);transition-timing-function:cubic-bezier(.36,.66,.04,1);-webkit-transition-property:opacity,-webkit-transform,box-shadow;transition-property:opacity,transform,box-shadow}[nav-view-transition=ios][nav-view-direction=forward],[nav-view-transition=ios][nav-view-direction=back]{background-color:#000}.item-md-label,[nav-bar-transition=ios] [nav-bar=entering] .bar,[nav-bar-transition=ios] [nav-bar=active] .bar,[nav-bar-transition=android] [nav-bar=entering] .bar,[nav-bar-transition=android] [nav-bar=active] .bar{background:0 0}[nav-bar-transition=ios] .back-text,[nav-bar-transition=ios] .buttons,[nav-bar-transition=ios] .title{-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:cubic-bezier(.36,.66,.04,1);transition-timing-function:cubic-bezier(.36,.66,.04,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,transform}[nav-bar-transition=ios] [nav-bar=cached]{display:block}[nav-view-transition=android] [nav-view=entering],[nav-view-transition=android] [nav-view=leaving]{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,.6,.2,1);transition-timing-function:cubic-bezier(.4,.6,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform}[nav-bar-transition=android] .buttons,[nav-bar-transition=android] .title{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,.6,.2,1);transition-timing-function:cubic-bezier(.4,.6,.2,1);-webkit-transition-property:opacity;transition-property:opacity}[nav-bar-transition=android] [nav-bar=cached]{display:block}[nav-swipe=fast] .back-text,[nav-swipe=fast] .buttons,[nav-swipe=fast] .title,[nav-swipe=fast] [nav-view]{-webkit-transition-duration:50ms;transition-duration:50ms;-webkit-transition-timing-function:linear;transition-timing-function:linear}[nav-swipe=slow] .back-text,[nav-swipe=slow] .buttons,[nav-swipe=slow] .title,[nav-swipe=slow] [nav-view]{-webkit-transition-duration:160ms;transition-duration:160ms;-webkit-transition-timing-function:linear;transition-timing-function:linear}[nav-view=stage]{opacity:0;-webkit-transition-duration:0;transition-duration:0}[nav-bar=stage] .back-text,[nav-bar=stage] .buttons,[nav-bar=stage] .title{position:absolute;opacity:0;-webkit-transition-duration:0s;transition-duration:0s}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Thin/RobotoDraft-Thin.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Thin/RobotoDraft-Thin.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Thin/RobotoDraft-Thin.ttf?v=1.1.0) format("truetype");font-weight:100;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Light/RobotoDraft-Light.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Light/RobotoDraft-Light.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Light/RobotoDraft-Light.ttf?v=1.1.0) format("truetype");font-weight:300;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.ttf?v=1.1.0) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.ttf?v=1.1.0) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.ttf?v=1.1.0) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.ttf?v=1.1.0) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Medium/RobotoDraft-Medium.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Medium/RobotoDraft-Medium.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Medium/RobotoDraft-Medium.ttf?v=1.1.0) format("truetype");font-weight:500;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.ttf?v=1.1.0) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.ttf?v=1.1.0) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.ttf?v=1.1.0) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.ttf?v=1.1.0) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Black/RobotoDraft-Black.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Black/RobotoDraft-Black.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Black/RobotoDraft-Black.ttf?v=1.1.0) format("truetype");font-weight:900;font-style:normal}.item-md-label{display:block;box-shadow:none;margin-left:12px;margin-right:12px;padding:30px 0 0}.item-md-label .input-label{position:absolute;z-index:2;-webkit-transform:translate3d(0,-30px,0) scale(1);transform:translate3d(0,-30px,0) scale(1);-webkit-transition:all .2s ease;transition:all .2s ease;color:#fff;opacity:.5;filter:alpha(opacity=50);-webkit-transform-origin:0;-ms-transform-origin:0;transform-origin:0}.item-md-label input{background-color:rgba(0,0,0,.6);bottom:0;color:#fff;letter-spacing:.25rem;padding:20px 10px;position:relative;z-index:1}.item-md-label .highlight{position:absolute;bottom:0;height:2px;left:0;width:100%;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:all .15s ease;transition:all .15s ease;z-index:1}.item-md-label .highlight-light{background:#fff}.item-md-label .highlight-stable{background:#f8f8f8}.item-md-label .highlight-positive{background:#387ef5}.item-md-label .highlight-calm{background:#11c1f3}.item-md-label .highlight-balanced{background:#33cd5f}.item-md-label .highlight-energized{background:#ffc900}.item-md-label .highlight-assertive{background:#ef473a}.item-md-label .highlight-royal{background:#886aea}.item-md-label .highlight-dark{background:#444}.item-md-label .input-label{letter-spacing:.25rem;padding:0 10px}.item-md-label input.used~.input-label,.item-md-label input:focus~.input-label{font-weight:700;opacity:.7;filter:alpha(opacity=70);padding:0;text-transform:uppercase;-webkit-transform:translate3d(0,-60px,0) scale(.9);transform:translate3d(0,-60px,0) scale(.9)}.item-md-label input:focus~.highlight{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.bar.bar-header.expanded,.expanded .bar.bar-header{height:75px;-webkit-transition:height 1s cubic-bezier(.55,0,.1,1);transition:height 1s cubic-bezier(.55,0,.1,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.bar.bar-header.expanded .title,.expanded.bar.bar-header .title{bottom:0;top:initial;padding-left:16px}.bar.bar-header.expanded .title.fab-left,.expanded .bar.bar-header .title.fab-left{bottom:0;left:90px;position:absolute;right:initial;top:initial}.bar.bar-header.expanded .title.fab-right,.expanded .bar.bar-header .title.fab-right{bottom:0;left:4px;position:absolute;top:initial;right:initial}.bar.bar-header.expanded+.button-fab,.expanded .bar.bar-header+.button-fab{top:50px;-webkit-transition:all 1.1s cubic-bezier(.55,0,.1,1);transition:all 1.1s cubic-bezier(.55,0,.1,1);-webkit-transform:translate3d(0,0,0) scale(1);transform:translate3d(0,0,0) scale(1)}.bar.bar-header.expanded.push-down,.expanded .bar.bar-header.push-down{height:44px;overflow:hidden}.bar.bar-header.expanded.push-down+.button-fab,.expanded .bar.bar-header.push-down+.button-fab{top:0;-webkit-transform:translate3d(-100px,-100px,0) scale(2.5);transform:translate3d(-100px,-100px,0) scale(2.5)}.bar.bar-header.expanded.push-down .title,.expanded .bar.bar-header.push-down .title{opacity:0;filter:alpha(opacity=0);left:initial;right:initial}.bar.bar-header.expanded .title,.expanded .bar.bar-header .title{opacity:1;filter:alpha(opacity=100);-webkit-transition:all 2s cubic-bezier(.55,0,.1,1);transition:all 2s cubic-bezier(.55,0,.1,1);bottom:0;left:42px!important;top:initial}.bar.bar-header.expanded.has-header-fab-left .title,.expanded.has-header-fab-left .bar.bar-header .title{left:76px!important}.bar{z-index:2;font-size:1.3em;box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.bar .button{z-index:3}.bar .no-text span.back-text{display:none}.bar .title sup{opacity:.7}.bar.bar-header .button+.title{text-align:left;left:35px;line-height:46px}.button-bar{box-shadow:0 1px 3px rgba(0,0,0,.15)}.bar .button.button-clear,.bar .button.button-text,.button-bar>.button{box-shadow:none}#menu .footer .button-bar>.button .icon-help:before,.button-bar>.button #menu .footer .icon-help:before,.button-bar>.button .icon-alert:before,.button-bar>.button .icon-help:before,.button-bar>.button .icon:before,.button-bar>.button:before{line-height:initial}.bar-footer .button-fab{position:absolute;top:-26px;bottom:initial}.bar-footer .buttons-left .button-fab{left:8px}.bar-footer .buttons-right .button-fab{right:8px}.left-buttons .button-fab{left:8px;top:16px}.right-buttons .button-fab{right:8px;top:16px}.fab-left.title-left,.fab-left.title.title-left{left:68px}.bar .button.button-fab,.button.button-fab{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);z-index:9999;width:56px;height:56px;max-height:initial;max-width:initial;border-radius:50%;overflow:hidden;padding:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:.3s fade-in-out;transition:.3s fade-in-out;-webkit-transition-property:-webkit-transform,box-shadow;transition-property:transform,box-shadow}.bar .button.button-fab.button-fab-bottom-right,.button.button-fab.button-fab-bottom-right{top:auto;right:16px;bottom:16px;left:auto;position:absolute}.bar .button.button-fab.button-fab-bottom-left,.button.button-fab.button-fab-bottom-left{top:auto;right:auto;bottom:16px;left:16px;position:absolute}.bar .button.button-fab.button-fab-top-right,.button.button-fab.button-fab-top-right{top:32px;right:16px;bottom:auto;left:auto;position:absolute}.bar .button.button-fab.button-fab-top-left,.button.button-fab.button-fab-top-left{top:32px;right:auto;bottom:auto;left:16px;position:absolute}.bar .button.button-fab.button-fab-top-left.expanded,.bar .button.button-fab.button-fab-top-right.expanded,.button.button-fab.button-fab-top-left.expanded,.button.button-fab.button-fab-top-right.expanded{top:48px}.bar .button.button-fab i,.button.button-fab i{font-size:2.5rem;margin-top:0}.bar .button.button-fab.mini,.button.button-fab.mini{width:40px;height:40px}.bar .button.button-fab.mini i,.button.button-fab.mini i{font-size:2rem}.button.button-fab.button-fab-top-left.motion{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(-120px,60px,0);transform:translate3d(-120px,60px,0);-webkit-transition:all .1s ease-out;transition:all .1s ease-out}.button.button-fab.button-fab-top-right.motion{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(120px,60px,0);transform:translate3d(120px,60px,0);-webkit-transition:all .1s ease-out;transition:all .1s ease-out}.button.button-fab.button-fab-bottom-left.motion{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(-120px,60px,0);transform:translate3d(-120px,60px,0);-webkit-transition:all .1s ease-out;transition:all .1s ease-out}.button.button-fab.button-fab-bottom-right.motion{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(120px,60px,0);transform:translate3d(120px,60px,0);-webkit-transition:all .1s ease-out;transition:all .1s ease-out}.fade,.spin-back{-webkit-backface-visibility:hidden!important}.bar .button.button-floating,.button.button-floating{display:inline-block;color:#FFF;position:relative;z-index:1;width:37px;height:37px;line-height:37px;padding:0;border-radius:50%;background-clip:padding-box;-webkit-transition:.3s;transition:.3s;cursor:pointer}.bar .button.button-floating i,.button.button-floating i{width:inherit;display:inline-block;text-align:center;color:#FFF;line-height:37px}.bar .button.button-floating.button-large,.button.button-floating.button-large{width:55.5px;height:55.5px}.bar .button.button-floating.button-large i,.button.button-floating.button-large i{line-height:55.5px}.bar .button,.bar .button.button-flat,.bar .button.button-large,.button,.button.button-flat,.button.button-large{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);display:inline-block;height:36px;padding:0 2rem;border-radius:2px;background-clip:padding-box;text-transform:uppercase;border:none;outline:0;-webkit-tap-highlight-color:transparent}.button-bar .button,.button.cornered{border-radius:0}.bar .button.button-floating.disabled,.bar .button.button-floating:disabled,.bar .button.button-large.disabled,.bar .button.button-large:disabled,.bar .button.button:disabled,.bar .button.disabled,.bar .button.disabled.button-large,.button.button-floating.disabled,.button.button-floating:disabled,.button.button-large.disabled,.button.button-large:disabled,.button.button:disabled,.button.disabled,.button.disabled.button-large{background-color:#DFDFDF;box-shadow:none;color:#9F9F9F}.bar .button.button-floating.disabled:hover,.bar .button.button-floating:disabled:hover,.bar .button.button-large.disabled:hover,.bar .button.button-large:disabled:hover,.bar .button.button:disabled:hover,.bar .button.disabled.button-large:hover,.bar .button.disabled:hover,.button.button-floating.disabled:hover,.button.button-floating:disabled:hover,.button.button-large.disabled:hover,.button.button-large:disabled:hover,.button.button:disabled:hover,.button.disabled.button-large:hover,.button.disabled:hover{background-color:#DFDFDF;color:#9F9F9F}.bar .button i,.bar .button.button-flat i,.bar .button.button-floating i,.bar .button.button-large i,.button i,.button.button-flat i,.button.button-floating i,.button.button-large i{font-size:1.3rem}.bar .button,.bar .button-large,.button,.button-large{text-decoration:none;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.button{user-select:none;position:relative;outline:0;margin:0;white-space:nowrap;text-align:center;text-transform:uppercase;font-weight:500;font-style:inherit;font-variant:inherit;font-size:inherit;text-decoration:none;cursor:pointer;-webkit-transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1),-webkit-transform .4s cubic-bezier(.25,.8,.25,1);transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1),transform .4s cubic-bezier(.25,.8,.25,1)}.button:focus{outline:0}.button.ng-hide{-webkit-transition:none;transition:none}.button.raised{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.button-outline,.button-outline:active,.button-outline:hover{border-style:solid;border-width:1px}.button.button-outline,.button.button-outline.button-assertive,.button.button-outline.button-balanced,.button.button-outline.button-calm,.button.button-outline.button-dark,.button.button-outline.button-energized,.button.button-outline.button-light,.button.button-outline.button-positive,.button.button-outline.button-royal,.button.button-outline.button-stable,.button.button-outline.button-text{border-color:rgba(0,0,0,.1)}.bar .button-flat,.button-flat{box-shadow:none;background-color:transparent;color:#343434;cursor:pointer}.bar .button.button-flat.disabled,.button.button-flat.disabled{color:#b3b3b3}.button.button-flat,.button.button-flat:active,.button.button-flat:hover,.hero{color:#fff}.bar .button.button-large i,.button.button-large i{font-size:1.6rem}.button-pin-header.button-floating{position:absolute;z-index:1000}.button-pin-header.button-pin-left{left:24px;top:-24px}.button-pin-header.button-pin-right{right:24px;top:-24px}#menu .footer .item-icon-right .icon-help,.item-icon-right #menu .footer .icon-help,.item-icon-right .icon,.item-icon-right .icon-alert,.item-icon-right .icon-help,.menu-top{right:16px}.button:not([disabled]).floating:focus,.button:not([disabled]).floating:hover,.button:not([disabled]).raised:focus,.button:not([disabled]).raised:hover{-webkit-transform:translate3d(0,-1px,0);transform:translate3d(0,-1px,0)}.button.button-flat{box-shadow:none}.card,.card img{box-shadow:0 2px 5px 0 rgba(0,0,0,.26);display:block}.button.button-clear,.button.button-clear:active,.button.button-clear:hover,.button.button-text,.button.button-text:active,.button.button-text:hover{background:0 0}.button-block.ink,.button-full.ink{display:block}.card-item.item{border:none;padding-bottom:4px;padding-top:4px}.card-item.item:first-child{padding-top:16px}.card{margin:8px;padding:0;position:relative}.card .image{display:block;margin-top:10px;margin-bottom:5px}.card img{max-width:100%;max-height:initial;position:static}.card.card-gallery img{border:none;box-shadow:none;display:block}.card .card-footer{font-size:90%;opacity:.8;filter:alpha(opacity=80);padding-top:10px}.card>.item{border:none}.card.card-gallery>.item{background:inherit}#menu .footer .card .icon+.icon-help,#menu .footer .card .icon-alert+.icon-help,#menu .footer .card .icon-help+.icon,#menu .footer .card .icon-help+.icon-alert,#menu .footer .card .icon-help+.icon-help,.card #menu .footer .icon+.icon-help,.card #menu .footer .icon-alert+.icon-help,.card #menu .footer .icon-help+.icon,.card #menu .footer .icon-help+.icon-alert,.card #menu .footer .icon-help+.icon-help,.card .icon+.icon,.card .icon+.icon-alert,.card .icon+.icon-help,.card .icon-alert+.icon,.card .icon-alert+.icon-alert,.card .icon-alert+.icon-help,.card .icon-help+.icon,.card .icon-help+.icon-alert,.card .icon-help+.icon-help{padding-left:1rem}.card.animate-fade-in{opacity:0;filter:alpha(opacity=0);-webkit-transform:translate3d(-30px,1px,0);-webkit-transition:all 1s ease-in-out}.hero+.mid-bar,.hero>*{opacity:1;filter:alpha(opacity=100)}.animate-fade-slide-in .card.animate-fade-in.expanded.item,.animate-fade-slide-in .expanded .card.animate-fade-in.item,.animate-fade-slide-in-right .card.animate-fade-in.expanded.item,.animate-fade-slide-in-right .expanded .card.animate-fade-in.item,.animate-ripple .card.animate-fade-in.expanded.item,.animate-ripple .expanded .card.animate-fade-in.item,.card-avatar-small .expanded .card.animate-fade-in.card-comment,.card-avatar-small .expanded .card.animate-fade-in.item,.card-avatar-small.expanded .card.animate-fade-in.card-comment,.card-avatar-small.expanded .card.animate-fade-in.item,.card.animate-fade-in.done{opacity:1;filter:alpha(opacity=100);-webkit-transform:translate3d(0,0,0)}.card .item.item-avatar{min-height:88px;padding-left:88px}.hero{background-size:cover;box-shadow:0 2px 5px 0 rgba(0,0,0,.26);height:200px;position:relative;text-align:center;-webkit-transition:all 1s cubic-bezier(.55,0,.1,1);transition:all 1s cubic-bezier(.55,0,.1,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);width:100%}.hero .hero-icon{box-shadow:0 0 2px 0 rgba(0,0,0,.26);border-radius:50%;display:inline-block;height:150px;padding:10px 30px;line-height:136px;width:150px}.hero.no-header{height:244px}.hero>.content{bottom:0;position:absolute;text-align:center;width:100%;z-index:1}.hero>.content>.avatar{background-position:center;background-size:cover;border:1px solid rgba(255,255,255,.8);border-radius:50%;display:inline-block;height:88px;left:auto;margin-bottom:10px;position:relative;width:88px}.hero h1 .hero h2,.hero h3,.hero h4,.hero h5,.hero h6{color:#fff;margin:0}.hero h4{color:rgba(255,255,255,.7);margin:3px 0 16px}.hero h1>a,.hero h2>a,.hero h3>a,.hero h4>a,.hero h5>a,.hero h6>a{text-decoration:none}.hero+.button-bar{border-radius:0;margin-top:0}.hero+.button-bar>.button:first-child,.hero+.button-bar>.button:last-child{border-radius:0}.hero .hero-icon{color:#fff;font-size:96px}.hero .hero-icon+h1{color:#fff;letter-spacing:.15rem}.hero .button,.hero .button.button-flat,.hero .button.button-large{margin:0}.hero h1.title{color:#fff;font-size:23px;margin:0;text-align:left;padding-left:80px;line-height:59px}.hero+.mid-bar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:all 1s cubic-bezier(.55,0,.1,1);transition:all 1s cubic-bezier(.55,0,.1,1);height:initial}.hero>*{-webkit-transition:opacity 2.5s cubic-bezier(.55,0,.1,1);transition:opacity 2.5s cubic-bezier(.55,0,.1,1)}.item{font-size:14px;width:100%}#menu .footer .item-icon-left .icon-help,.item-icon-left #menu .footer .icon-help,.item-icon-left .icon,.item-icon-left .icon-alert,.item-icon-left .icon-help{left:16px}.item-thumbnail-left .item-content .item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left .item-image,.item-thumbnail-left>img:first-child{border-radius:50%}.tab-item.activated{height:calc(100% + 3px)}.content+.list{padding-top:0}.list .item{border:none;min-height:48px;text-align:left}.list .item.tabs{padding:initial}.list .item.item-bg-image{min-height:150px}.list .item.item-bg-image>img{height:100%;left:0;max-width:initial;opacity:.65;filter:alpha(opacity=65);position:absolute;top:0;width:100%;z-index:0}.list a.item{opacity:1;filter:alpha(opacity=100)}.list .item.item-bg-image h1,.list .item.item-bg-image h2,.list .item.item-bg-image h3,.list .item.item-bg-image h4,.list .item.item-bg-image h5,.list .item.item-bg-image h6{color:#fff;font-weight:700;position:relative;text-shadow:0 0 3px rgba(0,0,0,.95);z-index:1}.list .item.item-bg-image h2{font-size:24px}.list .item.item-bg-image p{color:#fff;font-size:17px;position:relative;text-shadow:0 0 4px rgba(0,0,0,.95);z-index:1}.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{min-height:80px}.card>.item.item-thumbnail-left,.item-thumbnail-left,.item-thumbnail-left .item-content{padding-left:106px}.card>.item.item-thumbnail-right,.item-thumbnail-right,.item-thumbnail-right .item-content{padding-right:106px}.item-avatar .item-content .item-image,.item-avatar .item-content>img:first-child,.item-avatar .item-image,.item-avatar-left .item-content .item-image,.item-avatar-left .item-content>img:first-child,.item-avatar-left .item-image,.item-avatar-left>img:first-child,.item-avatar>img:first-child{left:16px;max-height:40px;max-width:40px}.avatar,.item-avatar .avatar{background-position:center;background-size:cover;border-radius:50%;display:inline-block;height:56px;left:16px;position:absolute;width:56px}.list.half{display:inline-block;float:left;margin:0;padding:0;width:50%}.list.half:first-child{padding:16px 8px 16px 16px}.list.half:last-child{padding:16px 16px 16px 8px}.list.half:first-child .card.card-gallery,.list.half:last-child .card.card-gallery{margin-left:0;margin-right:0}.list.condensed-space>.card,.list.condensed-space>.item{margin:0 0 2px}.list .card.card-gallery{display:block;float:left;margin:0 0 0 13px;padding:0;width:auto}.list .item.item-gallery img,.list.half .item{width:100%}.list.half .item.card{margin-bottom:16px}.list .card.card-gallery.item h2{padding:12px}.item.item-divider{border-top:solid 1px rgba(0,0,0,.12);font-size:14px;font-weight:700;height:48px;line-height:48px;color:rgba(0,0,0,.54)}.circular,.loader{height:100px;position:relative;width:100px}.item.item-divider:first-child{border:none}.item .item-content.activated,.item .item-content.active,.item-complex.activated .item-content,.item-complex.active .item-content,.item.activated,.item.active{background-color:transparent}.list-inset,.login .light-bg{background-color:#fff}.list-inset{margin:20px 30px;border-left:solid 1px #ccc;border-radius:0}.item-floating-label,.list .item.item-floating-label{border-bottom:solid 1px #ccc}.loader{margin:0 auto;zoom:1.7}.circular{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite}.path{stroke-dasharray:1,200;stroke-dashoffset:0;-webkit-animation:dash 1.5s ease-in-out infinite,color 6s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite,color 6s ease-in-out infinite;stroke-linecap:round}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}100%{stroke-dasharray:89,200;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}100%{stroke-dasharray:89,200;stroke-dashoffset:-124}}@-webkit-keyframes color{0%,100%{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}@keyframes color{0%,100%{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}.login{background-position:25% 25%;background-size:180% 180%;height:100%;-webkit-transition:all 1.5s ease-in-out;transition:all 1.5s ease-in-out}.login .item{margin:0 12px;padding-left:0;padding-right:0;width:initial}.login .button-bar{bottom:0;margin:28px 12px 0;width:initial}#menu .footer .hero-icon.icon-help:before,.hero-icon.icon-alert:before,.hero-icon.icon-help:before,.icon.hero-icon:before{line-height:130px}.card.has-mask:after,.hero.has-mask:after,.item.has-mask:after{content:'';background:-webkit-linear-gradient(top,transparent 0,rgba(0,0,0,.6) 100%);height:100%;left:0;position:absolute;top:0;z-index:0;width:100%}.card.has-mask-reverse:after,.hero.has-mask-reverse:after,.item.has-mask-reverse:after{content:'';background:-webkit-linear-gradient(top,rgba(0,0,0,.6) 0,transparent 100%);height:100%;left:0;position:absolute;top:0;z-index:0;width:100%}.menu-bottom{bottom:16px;left:16px;right:16px;position:absolute}.menu-top{top:16px;left:16px;position:absolute}.menu .avatar{top:16px;left:16px;height:65px;width:65px}.menu .bar.bar-header.expanded{box-shadow:none;min-height:150px;color:#fff}.menu-open .bar.bar-header.expanded{background-position:0;background-size:100%}.has-expanded-header{top:150px!important}.motion{-webkit-transition:all .5s ease-out;transition:all .5s ease-out}.fade{opacity:0;filter:alpha(opacity=0);backface-visibility:hidden!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.spin-back,.spiral{-webkit-transition:all .1s ease-out!important}.spin-back{backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(360deg) scale(0)!important;transform:translateZ(0) rotate(360deg) scale(0)!important;transition:all .1s ease-out!important}.spiral,.spiral-back{-webkit-backface-visibility:hidden!important}.spiral{backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(-360deg) scale(0) translate(-120px)!important;transform:translateZ(0) rotate(-360deg) scale(0) translate(-120px)!important;transition:all .1s ease-out!important}.spiral-back{backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(360deg) scale(0) translate(120px)!important;transform:translateZ(0) rotate(360deg) scale(0) translate(120px)!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.flap,.spin{-webkit-backface-visibility:hidden!important}.menu-open .avatar{opacity:1;filter:alpha(opacity=100);-webkit-transform:translateZ(0) rotate(0) scale(1)!important;transform:translateZ(0) rotate(0) scale(1)!important;-webkit-transition:all .3s ease-out!important;transition:all .3s ease-out!important}.spin{backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(0) scale(0)!important;transform:translateZ(0) rotate(0) scale(0)!important;-webkit-transition:all .3s ease-out!important;transition:all .3s ease-out!important}.spin.on{-webkit-transform:translateZ(0) rotate(-360deg) scale(1)!important;transform:translateZ(0) rotate(-360deg) scale(1)!important}.flap{backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotateX(0) scale(0) translate(-120px)!important;transform:translateZ(0) rotateX(0) scale(0) translate(-120px)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.drop,.flip{-webkit-backface-visibility:hidden!important}.drop,.flap.on{-webkit-transition:all .5s ease-out!important}.flap.on{-webkit-transform:translateZ(0) rotateX(-720deg) scale(1) translate(0)!important;transform:translateZ(0) rotateX(-720deg) scale(1) translate(0)!important;transition:all .5s ease-out!important}.drop{backface-visibility:hidden!important;-webkit-transform:translateZ(0) scale(3)!important;transform:translateZ(0) scale(3)!important;transition:all .5s ease-out!important}.drop.on,.flip{-webkit-transition:all .5s ease-out!important}.drop.on{-webkit-transform:translateZ(0) scale(1)!important;transform:translateZ(0) scale(1)!important;transition:all .5s ease-out!important}.flip{backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotateY(0) scale(0)!important;transform:translateZ(0) rotateY(0) scale(0)!important;transition:all .5s ease-out!important}.flip.on{-webkit-transform:translateZ(0) rotateY(-720deg) scale(1)!important;transform:translateZ(0) rotateY(-720deg) scale(1)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.bold{font-weight:700}.static{position:static}#menu .footer .popover-helptip .icon-bottom-left.icon-help,#menu .footer .popover-helptip .icon-left.icon-help,.popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .icon-left.icon-help,.popover-helptip .icon-bottom-left.icon-alert,.popover-helptip .icon-bottom-left.icon-help,.popover-helptip .icon-left.icon-alert,.popover-helptip .icon-left.icon-help,.popover-helptip .icon.icon-bottom-left,.popover-helptip .icon.icon-left,.pull-left{float:left}#menu .footer .popover-helptip .icon-bottom-center.icon-help,#menu .footer .popover-helptip .icon-bottom-right.icon-help,#menu .footer .popover-helptip .icon-center.icon-help,#menu .footer .popover-helptip .icon-right.icon-help,.popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .icon-center.icon-help,.popover-helptip #menu .footer .icon-right.icon-help,.popover-helptip .icon-bottom-center.icon-alert,.popover-helptip .icon-bottom-center.icon-help,.popover-helptip .icon-bottom-right.icon-alert,.popover-helptip .icon-bottom-right.icon-help,.popover-helptip .icon-center.icon-alert,.popover-helptip .icon-center.icon-help,.popover-helptip .icon-right.icon-alert,.popover-helptip .icon-right.icon-help,.popover-helptip .icon.icon-bottom-center,.popover-helptip .icon.icon-bottom-right,.popover-helptip .icon.icon-center,.popover-helptip .icon.icon-right,.pull-right{float:right}.double-padding,.ionic-content.double-padding{padding:16px}.double-padding-x{padding-left:16px;padding-right:16px}.double-padding-y{padding-top:16px;padding-bottom:16px}.outline{border-style:solid;border-width:1px}.border-top{border-top:solid 1px #ccc;padding-top:30px}.no-border{border:none}.circle,.ink-ripple{border-radius:50%}.bar.no-padding,.button-bar.no-padding,.button.no-padding,.card.no-padding,.item.no-padding,.list.no-padding,.no-padding{padding:0}#menu .footer .flat.button.icon-help,.flat,.flat.button,.flat.button.icon,.flat.button.icon-alert,.flat.button.icon-help,.flat.hero,.flat.tabs{box-shadow:none;-webkit-box-shadow:none}.im-wrapper,.item.large-button-bar,.padding{padding:16px!important}.padding-bottom,.popover-share .bar-footer .button-close{padding-bottom:16px!important}.padding-top{padding-top:16px!important}.padding-left{padding-left:16px!important}.padding-right,.popover-share .bar-footer .button-close{padding-right:16px!important}.no-padding-bottom{padding-bottom:0!important}.no-padding-top{padding-top:0!important}.no-padding-left{padding-left:0!important}.no-padding-right{padding-right:0!important}.z1{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.bar.bar-positive.darker{background-color:#164FAB}.bar.bar-positive.dark-positive-bg{background-color:#2C5CAD}.muted{color:#C3C3C3}.clear-bg{background:0 0}.animate-blinds .item{-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1);-webkit-transition:-webkit-transform .3s cubic-bezier(.55,0,.1,1);transition:transform .3s cubic-bezier(.55,0,.1,1)}.animate-blinds .item-bg-image>img.background{box-shadow:none;-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-blinds .animate-fade-slide-in .expanded .item,.animate-blinds .animate-fade-slide-in .expanded.item,.animate-blinds .animate-fade-slide-in-right .expanded .item,.animate-blinds .animate-fade-slide-in-right .expanded.item,.animate-blinds .animate-ripple .expanded .item,.animate-blinds .animate-ripple .expanded.item,.animate-blinds .card-avatar-small .expanded .card.card-comment,.animate-blinds .card-avatar-small .expanded .item,.animate-blinds .card-avatar-small.expanded .card.card-comment,.animate-blinds .card-avatar-small.expanded .item,.animate-blinds .in,.animate-blinds.done>*,.animate-fade-slide-in .animate-blinds .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item>*,.animate-fade-slide-in .expanded .animate-blinds .item,.animate-fade-slide-in .expanded .animate-blinds.item>*,.animate-fade-slide-in-right .animate-blinds .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item>*,.animate-fade-slide-in-right .expanded .animate-blinds .item,.animate-fade-slide-in-right .expanded .animate-blinds.item>*,.animate-ripple .animate-blinds .expanded.item,.animate-ripple .animate-blinds.expanded.item>*,.animate-ripple .expanded .animate-blinds .item,.animate-ripple .expanded .animate-blinds.item>*,.card-avatar-small .expanded .animate-blinds .card.card-comment,.card-avatar-small .expanded .animate-blinds .item,.card-avatar-small .expanded .animate-blinds.card.card-comment>*,.card-avatar-small .expanded .animate-blinds.item>*,.card-avatar-small.expanded .animate-blinds .card.card-comment,.card-avatar-small.expanded .animate-blinds .item,.card-avatar-small.expanded .animate-blinds.card.card-comment>*,.card-avatar-small.expanded .animate-blinds.item>*{-ms-transform:translate3d(0,0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.animate-blinds .animate-fade-slide-in .expanded .item,.animate-blinds .animate-fade-slide-in .expanded.item,.animate-blinds .animate-fade-slide-in-right .expanded .item,.animate-blinds .animate-fade-slide-in-right .expanded.item,.animate-blinds .animate-ripple .expanded .item,.animate-blinds .animate-ripple .expanded.item,.animate-blinds .card-avatar-small .expanded .card.card-comment,.animate-blinds .card-avatar-small .expanded .item,.animate-blinds .card-avatar-small.expanded .card.card-comment,.animate-blinds .card-avatar-small.expanded .item,.animate-blinds .in,.animate-blinds.done .item,.animate-fade-slide-in .animate-blinds .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .item,.animate-fade-slide-in .expanded .animate-blinds .item,.animate-fade-slide-in .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .animate-blinds .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .expanded .animate-blinds .item,.animate-fade-slide-in-right .expanded .animate-blinds.item .item,.animate-ripple .animate-blinds .expanded.item,.animate-ripple .animate-blinds.expanded.item .item,.animate-ripple .expanded .animate-blinds .item,.animate-ripple .expanded .animate-blinds.item .item,.card-avatar-small .expanded .animate-blinds .card.card-comment,.card-avatar-small .expanded .animate-blinds .item,.card-avatar-small .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .expanded .animate-blinds.item .item,.card-avatar-small.expanded .animate-blinds .card.card-comment,.card-avatar-small.expanded .animate-blinds .item,.card-avatar-small.expanded .animate-blinds.card.card-comment .item,.card-avatar-small.expanded .animate-blinds.item .item{visibility:visible}.animate-blinds .item{visibility:hidden;opacity:0;filter:alpha(opacity=0)}.animate-blinds .animate-fade-slide-in .expanded .item,.animate-blinds .animate-fade-slide-in .expanded.item,.animate-blinds .animate-fade-slide-in-right .expanded .item,.animate-blinds .animate-fade-slide-in-right .expanded.item,.animate-blinds .animate-ripple .expanded .item,.animate-blinds .animate-ripple .expanded.item,.animate-blinds .card-avatar-small .expanded .card.card-comment,.animate-blinds .card-avatar-small .expanded .item,.animate-blinds .card-avatar-small.expanded .card.card-comment,.animate-blinds .card-avatar-small.expanded .item,.animate-blinds .in,.animate-blinds.done,.animate-fade-slide-in .animate-blinds .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item,.animate-fade-slide-in .expanded .animate-blinds .item,.animate-fade-slide-in .expanded .animate-blinds.item,.animate-fade-slide-in-right .animate-blinds .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds .item,.animate-fade-slide-in-right .expanded .animate-blinds.item,.animate-ripple .animate-blinds .expanded.item,.animate-ripple .animate-blinds.expanded.item,.animate-ripple .expanded .animate-blinds .item,.animate-ripple .expanded .animate-blinds.item,.card-avatar-small .expanded .animate-blinds .card.card-comment,.card-avatar-small .expanded .animate-blinds .item,.card-avatar-small .expanded .animate-blinds.card.card-comment,.card-avatar-small .expanded .animate-blinds.item,.card-avatar-small.expanded .animate-blinds .card.card-comment,.card-avatar-small.expanded .animate-blinds .item,.card-avatar-small.expanded .animate-blinds.card.card-comment,.card-avatar-small.expanded .animate-blinds.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;opacity:1;filter:alpha(opacity=100);visibility:visible}.animate-blinds.done .animate-fade-slide-in .expanded .item,.animate-blinds.done .animate-fade-slide-in .expanded.item,.animate-blinds.done .animate-fade-slide-in-right .expanded .item,.animate-blinds.done .animate-fade-slide-in-right .expanded.item,.animate-blinds.done .animate-ripple .expanded .item,.animate-blinds.done .animate-ripple .expanded.item,.animate-blinds.done .card-avatar-small .expanded .card.card-comment,.animate-blinds.done .card-avatar-small .expanded .item,.animate-blinds.done .card-avatar-small.expanded .card.card-comment,.animate-blinds.done .card-avatar-small.expanded .item,.animate-blinds.done .in,.animate-fade-slide-in .animate-blinds.done .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .animate-blinds.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .in,.animate-fade-slide-in .animate-blinds.expanded.item .item,.animate-fade-slide-in .animate-fade-slide-in-right .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .animate-blinds.expanded.item .item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-blinds.item .item,.animate-fade-slide-in .animate-ripple .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in .animate-ripple .animate-blinds.expanded.item .item,.animate-fade-slide-in .animate-ripple .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .animate-ripple .expanded .animate-blinds.item .item,.animate-fade-slide-in .card-avatar-small .animate-blinds.expanded.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .animate-blinds.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.card.card-comment .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.item .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.card.card-comment .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.item .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.item .item,.animate-fade-slide-in .expanded .animate-blinds.done .item,.animate-fade-slide-in .expanded .animate-blinds.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .expanded .animate-blinds.item .animate-ripple .expanded.item,.animate-fade-slide-in .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .expanded .animate-blinds.item .in,.animate-fade-slide-in .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .animate-blinds.done .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .animate-blinds.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in-right .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .in,.animate-fade-slide-in-right .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .animate-ripple .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .card-avatar-small .animate-blinds.expanded.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.item .item,.animate-fade-slide-in-right .expanded .animate-blinds.done .item,.animate-fade-slide-in-right .expanded .animate-blinds.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds.item .in,.animate-fade-slide-in-right .expanded .animate-blinds.item .item,.animate-ripple .animate-blinds.done .expanded.item,.animate-ripple .animate-blinds.expanded.item .animate-fade-slide-in .expanded.item,.animate-ripple .animate-blinds.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .animate-blinds.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-ripple .animate-blinds.expanded.item .card-avatar-small.expanded .item,.animate-ripple .animate-blinds.expanded.item .expanded.item,.animate-ripple .animate-blinds.expanded.item .in,.animate-ripple .animate-blinds.expanded.item .item,.animate-ripple .animate-fade-slide-in .animate-blinds.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in .animate-blinds.expanded.item .item,.animate-ripple .animate-fade-slide-in .expanded .animate-blinds.item .expanded.item,.animate-ripple .animate-fade-slide-in .expanded .animate-blinds.item .item,.animate-ripple .animate-fade-slide-in-right .animate-blinds.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .animate-blinds.expanded.item .item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-blinds.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-blinds.item .item,.animate-ripple .card-avatar-small .animate-blinds.expanded.item .card.card-comment,.animate-ripple .card-avatar-small .animate-blinds.expanded.item .item,.animate-ripple .card-avatar-small .expanded .animate-blinds.card.card-comment .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-blinds.card.card-comment .item,.animate-ripple .card-avatar-small .expanded .animate-blinds.item .card.card-comment,.animate-ripple .card-avatar-small .expanded .animate-blinds.item .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-blinds.item .item,.animate-ripple .card-avatar-small.expanded .animate-blinds.card.card-comment .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-blinds.card.card-comment .item,.animate-ripple .card-avatar-small.expanded .animate-blinds.item .card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-blinds.item .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-blinds.item .item,.animate-ripple .expanded .animate-blinds.done .item,.animate-ripple .expanded .animate-blinds.item .animate-fade-slide-in .expanded.item,.animate-ripple .expanded .animate-blinds.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .expanded .animate-blinds.item .expanded.item,.animate-ripple .expanded .animate-blinds.item .in,.animate-ripple .expanded .animate-blinds.item .item,.card-avatar-small .animate-fade-slide-in .animate-blinds.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .animate-blinds.expanded.item .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-blinds.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .expanded .animate-blinds.item .item,.card-avatar-small .animate-fade-slide-in-right .animate-blinds.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .animate-blinds.expanded.item .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-blinds.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-blinds.item .item,.card-avatar-small .animate-ripple .animate-blinds.expanded.item .card.card-comment,.card-avatar-small .animate-ripple .animate-blinds.expanded.item .item,.card-avatar-small .animate-ripple .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .animate-ripple .expanded .animate-blinds.item .card.card-comment,.card-avatar-small .animate-ripple .expanded .animate-blinds.item .item,.card-avatar-small .expanded .animate-blinds.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-blinds.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-blinds.card.card-comment .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-blinds.card.card-comment .card.card-comment,.card-avatar-small .expanded .animate-blinds.card.card-comment .in,.card-avatar-small .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .expanded .animate-blinds.done .card.card-comment,.card-avatar-small .expanded .animate-blinds.done .item,.card-avatar-small .expanded .animate-blinds.item .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-blinds.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-blinds.item .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-blinds.item .card.card-comment,.card-avatar-small .expanded .animate-blinds.item .in,.card-avatar-small .expanded .animate-blinds.item .item,.card-avatar-small.expanded .animate-blinds.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-blinds.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-blinds.card.card-comment .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-blinds.card.card-comment .card.card-comment,.card-avatar-small.expanded .animate-blinds.card.card-comment .expanded .card.card-comment,.card-avatar-small.expanded .animate-blinds.card.card-comment .expanded .item,.card-avatar-small.expanded .animate-blinds.card.card-comment .in,.card-avatar-small.expanded .animate-blinds.card.card-comment .item,.card-avatar-small.expanded .animate-blinds.done .card.card-comment,.card-avatar-small.expanded .animate-blinds.done .item,.card-avatar-small.expanded .animate-blinds.item .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-blinds.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-blinds.item .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-blinds.item .card.card-comment,.card-avatar-small.expanded .animate-blinds.item .expanded .card.card-comment,.card-avatar-small.expanded .animate-blinds.item .expanded .item,.card-avatar-small.expanded .animate-blinds.item .in,.card-avatar-small.expanded .animate-blinds.item .item,.card-avatar-small.expanded .animate-fade-slide-in .animate-blinds.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .animate-blinds.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-blinds.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-blinds.expanded.item .item,.card-avatar-small.expanded .animate-ripple .animate-blinds.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-ripple .animate-blinds.expanded.item .item,.card-avatar-small.expanded .expanded .animate-blinds.card.card-comment .card.card-comment,.card-avatar-small.expanded .expanded .animate-blinds.card.card-comment .item,.card-avatar-small.expanded .expanded .animate-blinds.item .card.card-comment,.card-avatar-small.expanded .expanded .animate-blinds.item .item{opacity:1;filter:alpha(opacity=100)}.animate-blinds .has-mask-reverse:after{opacity:0;filter:alpha(opacity=0);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-blinds.done .has-mask-reverse:after,.animate-fade-slide-in .animate-blinds.expanded.item .has-mask-reverse:after,.animate-fade-slide-in .expanded .animate-blinds.item .has-mask-reverse:after,.animate-fade-slide-in-right .animate-blinds.expanded.item .has-mask-reverse:after,.animate-fade-slide-in-right .expanded .animate-blinds.item .has-mask-reverse:after,.animate-ripple .animate-blinds.expanded.item .has-mask-reverse:after,.animate-ripple .expanded .animate-blinds.item .has-mask-reverse:after,.card-avatar-small .expanded .animate-blinds.card.card-comment .has-mask-reverse:after,.card-avatar-small .expanded .animate-blinds.item .has-mask-reverse:after,.card-avatar-small.expanded .animate-blinds.card.card-comment .has-mask-reverse:after,.card-avatar-small.expanded .animate-blinds.item .has-mask-reverse:after{opacity:1;filter:alpha(opacity=100)}.animate-blinds .out{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}.animate-pan-in-left{background-position:0 0}.animate-ripple .item-bg-image img.background{box-shadow:none;-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-ripple .item{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1);opacity:0;filter:alpha(opacity=0)}.animate-fade-slide-in .animate-fade-slide-in-right .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .animate-ripple.expanded.item .item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-ripple.item .item,.animate-fade-slide-in .animate-ripple .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in .animate-ripple .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .animate-ripple .expanded .animate-ripple.item .item,.animate-fade-slide-in .animate-ripple.done .expanded.item,.animate-fade-slide-in .animate-ripple.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .animate-ripple.expanded.item .animate-ripple.expanded.item .item,.animate-fade-slide-in .animate-ripple.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .animate-ripple.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in .animate-ripple.expanded.item .expanded .item,.animate-fade-slide-in .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in .animate-ripple.expanded.item .in,.animate-fade-slide-in .animate-ripple.expanded.item .item,.animate-fade-slide-in .card-avatar-small .animate-ripple.expanded.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .animate-ripple.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.card.card-comment .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.item .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.card.card-comment .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.item .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.item .item,.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in .expanded .animate-ripple.done .item,.animate-fade-slide-in .expanded .animate-ripple.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .expanded .animate-ripple.item .expanded .item,.animate-fade-slide-in .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .expanded .animate-ripple.item .in,.animate-fade-slide-in .expanded .animate-ripple.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-ripple.expanded.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-ripple.item .item,.animate-fade-slide-in-right .animate-ripple .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-ripple.item .item,.animate-fade-slide-in-right .animate-ripple.done .expanded.item,.animate-fade-slide-in-right .animate-ripple.expanded.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .animate-ripple.expanded.item .animate-ripple.expanded.item .item,.animate-fade-slide-in-right .animate-ripple.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .animate-ripple.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in-right .animate-ripple.expanded.item .expanded .item,.animate-fade-slide-in-right .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-ripple.expanded.item .in,.animate-fade-slide-in-right .animate-ripple.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .animate-ripple.expanded.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .animate-ripple.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.item .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.item .item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple.done .item,.animate-fade-slide-in-right .expanded .animate-ripple.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple.item .expanded .item,.animate-fade-slide-in-right .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple.item .in,.animate-fade-slide-in-right .expanded .animate-ripple.item .item,.animate-ripple .animate-fade-slide-in .expanded .animate-ripple.item .item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-ripple.item .item,.animate-ripple .animate-ripple.expanded.item .animate-fade-slide-in .expanded.item,.animate-ripple .animate-ripple.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .animate-ripple.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-ripple .animate-ripple.expanded.item .card-avatar-small.expanded .item,.animate-ripple .animate-ripple.expanded.item .in,.animate-ripple .animate-ripple.expanded.item .item,.animate-ripple .card-avatar-small .expanded .animate-ripple.item .card.card-comment,.animate-ripple .card-avatar-small .expanded .animate-ripple.item .item,.animate-ripple .card-avatar-small .expanded .item.card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-ripple.item .card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-ripple.item .item,.animate-ripple .card-avatar-small.expanded .item.card.card-comment,.animate-ripple .expanded .animate-ripple.item .animate-fade-slide-in .expanded.item,.animate-ripple .expanded .animate-ripple.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .expanded .animate-ripple.item .in,.animate-ripple .expanded .animate-ripple.item .item,.animate-ripple .expanded .item,.animate-ripple .item.expanded,.animate-ripple .item.in,.animate-ripple.done .animate-fade-slide-in .expanded .item,.animate-ripple.done .animate-fade-slide-in .expanded.item,.animate-ripple.done .animate-fade-slide-in-right .expanded .item,.animate-ripple.done .animate-fade-slide-in-right .expanded.item,.animate-ripple.done .card-avatar-small .expanded .card.card-comment,.animate-ripple.done .card-avatar-small .expanded .item,.animate-ripple.done .card-avatar-small.expanded .card.card-comment,.animate-ripple.done .card-avatar-small.expanded .item,.animate-ripple.done .expanded .item,.animate-ripple.done .expanded.item,.animate-ripple.done .in,.animate-ripple.expanded.item .animate-ripple.expanded.item .expanded.item,.animate-ripple.item .expanded .animate-ripple.item .expanded.item,.card-avatar-small .animate-fade-slide-in .animate-ripple.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .animate-ripple.expanded.item .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-ripple.card.card-comment .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-ripple.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .expanded .animate-ripple.item .item,.card-avatar-small .animate-fade-slide-in-right .animate-ripple.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .animate-ripple.expanded.item .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-ripple.card.card-comment .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-ripple.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-ripple.item .item,.card-avatar-small .animate-ripple .expanded .animate-ripple.item .card.card-comment,.card-avatar-small .animate-ripple .expanded .animate-ripple.item .item,.card-avatar-small .animate-ripple.expanded.item .animate-ripple.expanded.item .card.card-comment,.card-avatar-small .animate-ripple.expanded.item .animate-ripple.expanded.item .item,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small .expanded .animate-ripple.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-ripple.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-ripple.card.card-comment .card.card-comment,.card-avatar-small .expanded .animate-ripple.card.card-comment .expanded .item,.card-avatar-small .expanded .animate-ripple.card.card-comment .expanded.item,.card-avatar-small .expanded .animate-ripple.card.card-comment .in,.card-avatar-small .expanded .animate-ripple.card.card-comment .item,.card-avatar-small .expanded .animate-ripple.done .card.card-comment,.card-avatar-small .expanded .animate-ripple.done .item,.card-avatar-small .expanded .animate-ripple.item .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-ripple.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-ripple.item .card.card-comment,.card-avatar-small .expanded .animate-ripple.item .expanded .item,.card-avatar-small .expanded .animate-ripple.item .expanded.item,.card-avatar-small .expanded .animate-ripple.item .in,.card-avatar-small .expanded .animate-ripple.item .item,.card-avatar-small.expanded .animate-fade-slide-in .animate-ripple.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .animate-ripple.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-ripple.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-ripple.expanded.item .item,.card-avatar-small.expanded .animate-ripple .animate-ripple.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-ripple .animate-ripple.expanded.item .item,.card-avatar-small.expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-ripple.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-ripple.card.card-comment .card.card-comment,.card-avatar-small.expanded .animate-ripple.card.card-comment .expanded .card.card-comment,.card-avatar-small.expanded .animate-ripple.card.card-comment .expanded .item,.card-avatar-small.expanded .animate-ripple.card.card-comment .expanded.item,.card-avatar-small.expanded .animate-ripple.card.card-comment .in,.card-avatar-small.expanded .animate-ripple.card.card-comment .item,.card-avatar-small.expanded .animate-ripple.done .card.card-comment,.card-avatar-small.expanded .animate-ripple.done .item,.card-avatar-small.expanded .animate-ripple.item .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-ripple.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-ripple.item .card.card-comment,.card-avatar-small.expanded .animate-ripple.item .expanded .card.card-comment,.card-avatar-small.expanded .animate-ripple.item .expanded .item,.card-avatar-small.expanded .animate-ripple.item .expanded.item,.card-avatar-small.expanded .animate-ripple.item .in,.card-avatar-small.expanded .animate-ripple.item .item,.card-avatar-small.expanded .expanded .animate-ripple.card.card-comment .card.card-comment,.card-avatar-small.expanded .expanded .animate-ripple.card.card-comment .item,.card-avatar-small.expanded .expanded .animate-ripple.item .card.card-comment,.card-avatar-small.expanded .expanded .animate-ripple.item .item{opacity:1;filter:alpha(opacity=100)}.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .done,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item{visibility:hidden;-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1);-webkit-transition:-webkit-transform .3s cubic-bezier(.55,0,.1,1);transition:transform .3s cubic-bezier(.55,0,.1,1)}.animate-fade-slide-in .animate-ripple.expanded.item,.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in .expanded .animate-ripple.item,.animate-fade-slide-in-right .animate-ripple.expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple.item,.animate-ripple .animate-ripple.expanded.item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .expanded .animate-ripple.item,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.animate-ripple .in,.animate-ripple.done,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small .expanded .animate-ripple.card.card-comment,.card-avatar-small .expanded .animate-ripple.item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple.card.card-comment,.card-avatar-small.expanded .animate-ripple.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;visibility:visible}.animate-ripple .has-mask-reverse:after{opacity:0;filter:alpha(opacity=0);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-fade-slide-in .animate-ripple.expanded.item .has-mask-reverse:after,.animate-fade-slide-in .expanded .animate-ripple.item .has-mask-reverse:after,.animate-fade-slide-in-right .animate-ripple.expanded.item .has-mask-reverse:after,.animate-fade-slide-in-right .expanded .animate-ripple.item .has-mask-reverse:after,.animate-ripple .animate-ripple.expanded.item .has-mask-reverse:after,.animate-ripple .expanded .animate-ripple.item .has-mask-reverse:after,.animate-ripple.done .has-mask-reverse:after,.card-avatar-small .expanded .animate-ripple.card.card-comment .has-mask-reverse:after,.card-avatar-small .expanded .animate-ripple.item .has-mask-reverse:after,.card-avatar-small.expanded .animate-ripple.card.card-comment .has-mask-reverse:after,.card-avatar-small.expanded .animate-ripple.item .has-mask-reverse:after{opacity:1;filter:alpha(opacity=100)}.animate-ripple .out{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}.animate-fade-slide-in .item{-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1)}.animate-fade-slide-in .item-bg-image img.background{box-shadow:none;-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-fade-slide-in .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .expanded .item,.animate-fade-slide-in .expanded.item,.animate-fade-slide-in .in,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in.done .item,.animate-ripple .animate-fade-slide-in.expanded.item .item,.animate-ripple .expanded .animate-fade-slide-in .item,.animate-ripple .expanded .animate-fade-slide-in.item .item,.card-avatar-small .expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in.item .item,.card-avatar-small.expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in.item .item{-ms-transform:translate3d(0,0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:visible}.list .item.item-bg-image{max-height:150px}.animate-fade-slide-in .item{visibility:hidden;-ms-transform:translate3d(-250px,250px,0);-webkit-transform:translate3d(-250px,250px,0);transform:translate3d(-250px,250px,0);-webkit-transition:-webkit-transform .5s cubic-bezier(.55,0,.1,1);transition:transform .5s cubic-bezier(.55,0,.1,1);opacity:0;filter:alpha(opacity=0)}.animate-fade-slide-in .animate-fade-slide-in.expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .expanded .animate-fade-slide-in.item,.animate-fade-slide-in .expanded .item,.animate-fade-slide-in .expanded.item,.animate-fade-slide-in .in,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item,.animate-fade-slide-in.done,.animate-ripple .animate-fade-slide-in.expanded.item,.animate-ripple .expanded .animate-fade-slide-in .item,.animate-ripple .expanded .animate-fade-slide-in.item,.card-avatar-small .expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.item,.card-avatar-small.expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:all .5s ease-in-out;transition:all .5s ease-in-out;opacity:1;filter:alpha(opacity=100);visibility:visible}.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .in,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in .animate-ripple .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in.item .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .animate-ripple .expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .in,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-fade-slide-in.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .animate-fade-slide-in.done .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .expanded .item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .in,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .animate-ripple .animate-fade-slide-in.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .card-avatar-small .animate-fade-slide-in.expanded.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.done .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .expanded .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .in,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in.done .animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in.done .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in.done .animate-ripple .expanded .item,.animate-fade-slide-in.done .animate-ripple .expanded.item,.animate-fade-slide-in.done .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in.done .card-avatar-small .expanded .item,.animate-fade-slide-in.done .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in.done .card-avatar-small.expanded .item,.animate-fade-slide-in.done .expanded .item,.animate-fade-slide-in.done .expanded.item,.animate-fade-slide-in.done .in,.animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .expanded.item,.animate-fade-slide-in.item .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .animate-fade-slide-in .animate-fade-slide-in.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-ripple .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-ripple .animate-fade-slide-in.done .expanded.item,.animate-ripple .animate-fade-slide-in.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .item,.animate-ripple .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-ripple .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .item,.animate-ripple .animate-fade-slide-in.expanded.item .expanded .item,.animate-ripple .animate-fade-slide-in.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in.expanded.item .in,.animate-ripple .animate-fade-slide-in.expanded.item .item,.animate-ripple .card-avatar-small .animate-fade-slide-in.expanded.item .card.card-comment,.animate-ripple .card-avatar-small .animate-fade-slide-in.expanded.item .item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.item .card.card-comment,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.item .item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.item .card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.item .item,.animate-ripple .expanded .animate-fade-slide-in.done .item,.animate-ripple .expanded .animate-fade-slide-in.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .expanded .animate-fade-slide-in.item .expanded .item,.animate-ripple .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .expanded .animate-fade-slide-in.item .in,.animate-ripple .expanded .animate-fade-slide-in.item .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.card-avatar-small .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.card-avatar-small .animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .item,.card-avatar-small .animate-ripple .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small .animate-ripple .animate-fade-slide-in.expanded.item .item,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in.item .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .expanded .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .in,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in.done .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.done .item,.card-avatar-small .expanded .animate-fade-slide-in.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.item .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.item .expanded .item,.card-avatar-small .expanded .animate-fade-slide-in.item .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.item .in,.card-avatar-small .expanded .animate-fade-slide-in.item .item,.card-avatar-small.expanded .animate-fade-slide-in .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .animate-fade-slide-in.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .in,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in.done .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.done .item,.card-avatar-small.expanded .animate-fade-slide-in.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.item .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.item .expanded .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.item .expanded .item,.card-avatar-small.expanded .animate-fade-slide-in.item .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.item .in,.card-avatar-small.expanded .animate-fade-slide-in.item .item,.card-avatar-small.expanded .animate-ripple .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-ripple .animate-fade-slide-in.expanded.item .item,.card-avatar-small.expanded .expanded .animate-fade-slide-in.card.card-comment .card.card-comment,.card-avatar-small.expanded .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small.expanded .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small.expanded .expanded .animate-fade-slide-in.item .item{opacity:1;filter:alpha(opacity=100)}.animate-fade-slide-in .has-mask-reverse:after{opacity:0;filter:alpha(opacity=0);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-fade-slide-in .animate-fade-slide-in.expanded.item .has-mask-reverse:after,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .has-mask-reverse:after,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .has-mask-reverse:after,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .has-mask-reverse:after,.animate-fade-slide-in.done .has-mask-reverse:after,.animate-ripple .animate-fade-slide-in.expanded.item .has-mask-reverse:after,.animate-ripple .expanded .animate-fade-slide-in.item .has-mask-reverse:after,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .has-mask-reverse:after,.card-avatar-small .expanded .animate-fade-slide-in.item .has-mask-reverse:after,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .has-mask-reverse:after,.card-avatar-small.expanded .animate-fade-slide-in.item .has-mask-reverse:after{opacity:1;filter:alpha(opacity=100)}.animate-fade-slide-in .out{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}.animate-fade-slide-in-right .item{-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1)}.animate-fade-slide-in-right .item-bg-image>img.background{box-shadow:none;-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item>*,.animate-fade-slide-in .expanded .animate-fade-slide-in-right .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item>*,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item>*,.animate-fade-slide-in-right .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item>*,.animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in-right .in,.animate-fade-slide-in-right.done>*,.animate-ripple .animate-fade-slide-in-right.expanded.item>*,.animate-ripple .expanded .animate-fade-slide-in-right .item,.animate-ripple .expanded .animate-fade-slide-in-right.item>*,.card-avatar-small .expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment>*,.card-avatar-small .expanded .animate-fade-slide-in-right.item>*,.card-avatar-small.expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment>*,.card-avatar-small.expanded .animate-fade-slide-in-right.item>*{-ms-transform:translate3d(0,0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in-right .in,.animate-fade-slide-in-right.done .item,.animate-ripple .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .expanded .animate-fade-slide-in-right .item,.animate-ripple .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .item{visibility:visible}.animate-fade-slide-in-right .item{visibility:hidden;-ms-transform:translate3d(250px,250px,0);-webkit-transform:translate3d(250px,250px,0);transform:translate3d(250px,250px,0);-webkit-transition:-webkit-transform .5s cubic-bezier(.55,0,.1,1);transition:transform .5s cubic-bezier(.55,0,.1,1);opacity:0;filter:alpha(opacity=0)}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item,.animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in-right .in,.animate-fade-slide-in-right.done,.animate-ripple .animate-fade-slide-in-right.expanded.item,.animate-ripple .expanded .animate-fade-slide-in-right .item,.animate-ripple .expanded .animate-fade-slide-in-right.item,.card-avatar-small .expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.item,.card-avatar-small.expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;opacity:1;filter:alpha(opacity=100);visibility:visible}.animate-fade-slide-in .animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in .animate-fade-slide-in-right.done .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .expanded .item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .in,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .animate-ripple .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-fade-slide-in .animate-ripple .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .animate-ripple .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .animate-ripple .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in .card-avatar-small .animate-fade-slide-in-right.expanded.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.done .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .animate-ripple .expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .expanded .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .in,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .in,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .in,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right.done .animate-fade-slide-in .expanded .item,.animate-fade-slide-in-right.done .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right.done .animate-ripple .expanded .item,.animate-fade-slide-in-right.done .animate-ripple .expanded.item,.animate-fade-slide-in-right.done .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right.done .card-avatar-small .expanded .item,.animate-fade-slide-in-right.done .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right.done .card-avatar-small.expanded .item,.animate-fade-slide-in-right.done .expanded .item,.animate-fade-slide-in-right.done .expanded.item,.animate-fade-slide-in-right.done .in,.animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-fade-slide-in-right.item .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.animate-ripple .animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.animate-ripple .animate-fade-slide-in-right.done .expanded.item,.animate-ripple .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in .expanded.item,.animate-ripple .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-ripple .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .item,.animate-ripple .animate-fade-slide-in-right.expanded.item .expanded .item,.animate-ripple .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in-right.expanded.item .in,.animate-ripple .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .card-avatar-small .animate-fade-slide-in-right.expanded.item .card.card-comment,.animate-ripple .card-avatar-small .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.item .item,.animate-ripple .expanded .animate-fade-slide-in-right.done .item,.animate-ripple .expanded .animate-fade-slide-in-right.item .animate-fade-slide-in .expanded.item,.animate-ripple .expanded .animate-fade-slide-in-right.item .expanded .item,.animate-ripple .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .expanded .animate-fade-slide-in-right.item .in,.animate-ripple .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small .animate-ripple .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small .animate-ripple .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .expanded .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .in,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in-right.done .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.done .item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.item .expanded .item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .in,.card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small.expanded .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .in,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in-right.done .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.done .item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded .item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .in,.card-avatar-small.expanded .animate-fade-slide-in-right.item .item,.card-avatar-small.expanded .animate-ripple .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-ripple .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small.expanded .expanded .animate-fade-slide-in-right.card.card-comment .card.card-comment,.card-avatar-small.expanded .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small.expanded .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small.expanded .expanded .animate-fade-slide-in-right.item .item{opacity:1;filter:alpha(opacity=100)}.animate-fade-slide-in-right .has-mask-reverse:after{opacity:0;filter:alpha(opacity=0);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .has-mask-reverse:after,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .has-mask-reverse:after,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .has-mask-reverse:after,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .has-mask-reverse:after,.animate-fade-slide-in-right.done .has-mask-reverse:after,.animate-ripple .animate-fade-slide-in-right.expanded.item .has-mask-reverse:after,.animate-ripple .expanded .animate-fade-slide-in-right.item .has-mask-reverse:after,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .has-mask-reverse:after,.card-avatar-small .expanded .animate-fade-slide-in-right.item .has-mask-reverse:after,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .has-mask-reverse:after,.card-avatar-small.expanded .animate-fade-slide-in-right.item .has-mask-reverse:after{opacity:1;filter:alpha(opacity=100)}.animate-fade-slide-in-right .out{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}.hero.slide-up,.slide-up{height:100%;overflow:hidden;text-align:center}.slide-up{-webkit-transition:all 1s cubic-bezier(.55,0,.1,1);transition:all 1s cubic-bezier(.55,0,.1,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.hero.slide-up *,.slide-up *{opacity:0;filter:alpha(opacity=0)}.hero.slide-up+.mid-bar,.slide-up+.mid-bar{height:100%;opacity:.7;filter:alpha(opacity=70);-webkit-transform:translate3d(100%,-240px,0);transform:translate3d(100%,-240px,0)}.button-clear,.button-fab,.button-flat,.button-raised,.button-text,.ink,.popup .button{position:relative;cursor:pointer;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.ink-ripple{position:absolute;width:100px;height:100px;margin-top:-50px;margin-left:-50px;opacity:0;background-color:rgba(255,255,255,.4);-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;-o-transition:all .5s ease-out;transition:all .5s ease-out;-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;-o-transition-property:-o-transform,opacity;transition-property:transform,opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.ink-notransition{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.popover,.popover.ng-enter,.popover.ng-leave{transition:transform .3s ease-in-out,opacity .3s ease-in-out}.button-clear,.button-fab,.button-flat,.button-raised,.button-text,.ink-button,.ink-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.activated.button-text,.button-clear.activated,.button-clear:active,.button-fab.activated,.button-fab:active,.button-flat.activated,.button-flat:active,.button-raised.activated,.button-raised:active,.button-text:active,.ink-button.activated,.ink-button:active,.ink-circle.activated,.ink-circle:active,.ink.activated,.ink:active,.popup .button.activated,.popup .button:active{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.button-clear,.button-clear:link,.button-clear:visited,.button-fab,.button-fab:link,.button-fab:visited,.button-flat,.button-flat:link,.button-flat:visited,.button-raised,.button-raised:link,.button-raised:visited,.button-text,.button-text:link,.button-text:visited,.ink-button,.ink-button-input,.ink-button:link,.ink-button:visited{white-space:nowrap;vertical-align:middle;cursor:pointer;border:none;outline:0;font-size:14px;text-align:center;text-decoration:none;z-index:1}.ink-button{padding:10px 15px;border-radius:2px}.ink-button-input{margin:0;padding:10px 15px}.bar,.ink-input-wrapper.ink-button{padding:0}.ink-input-wrapper{border-radius:2px;vertical-align:bottom}.ink-input-wrapper .ink-button-input{position:relative;top:0;left:0;z-index:1}.ink-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%}.ink-float{-webkit-mask-image:none;-webkit-box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12);box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12)}.ink-float:active{-webkit-box-shadow:0 8px 20px 1px rgba(0,0,0,.3);box-shadow:0 8px 20px 1px rgba(0,0,0,.3)}.ink-block{display:block}.ink-ripple{z-index:0}.button-clear .ink-ripple,.button-text .ink-ripple,.ink-dark .ink-ripple,.list .ink-ripple,[class$="-clear"]>.ink-ripple,[class$="-light"]>.ink-ripple,[class$="-stable"]>.ink-ripple,[class$="-100"]>.ink-ripple{background-color:rgba(0,0,0,.2)}.tab-item{position:relative}*{font-family:RobotoDraft,Roboto,"Helvetica Neue","Segoe UI",sans-serif}.rounded{border-radius:4px}a{cursor:pointer}.has-header.expanded{top:76px}.bar{border-bottom:none}.bar .button{min-height:44px;min-width:44px;max-width:48px;margin-bottom:0;max-height:44px;width:48px}.bar .title+.buttons.buttons-right{top:0}.title-left,.title-right,.title.title-left,.title.title-right{left:48px}.activated.button-text,.bar .activated.button-text,.bar .button-positive,.bar .button-positive.activated,.bar .button-positive:active,.bar .button-positive:hover,.bar .button-text,.bar .button-text:active,.bar .button-text:hover,.bar-positive,.bar-positive.activated,.bar-positive:active,.bar-positive:hover,.button-bar-positive,.button-bar-positive.activated,.button-bar-positive:active,.button-bar-positive:hover,.button-positive,.button-positive.activated,.button-positive:active,.button-positive:hover,.button-text,.button-text:active,.button-text:hover,.header-positive,.header-positive.activated,.header-positive:active,.header-positive:hover,.positive-bg,.positive-bg.activated,.positive-bg:active,.positive-bg:hover,.positive-border,.positive-border.activated,.positive-border:active,.positive-border:hover{background-color:#3F51B5;color:#fff}.bar .button-positive-900,.bar .button-positive-900.activated,.bar .button-positive-900:active,.bar .button-positive-900:hover,.bar-positive-900,.bar-positive-900.activated,.bar-positive-900:active,.bar-positive-900:hover,.button-bar-positive-900,.button-bar-positive-900.activated,.button-bar-positive-900:active,.button-bar-positive-900:hover,.button-positive-900,.button-positive-900.activated,.button-positive-900:active,.button-positive-900:hover,.header-positive-900,.header-positive-900.activated,.header-positive-900:active,.header-positive-900:hover,.positive-900-bg,.positive-900-bg.activated,.positive-900-bg:active,.positive-900-bg:hover,.positive-900-border,.positive-900-border.activated,.positive-900-border:active,.positive-900-border:hover{background-color:#1A237E;color:#fff}.bar .button-positive-100,.bar .button-positive-100.activated,.bar .button-positive-100:active,.bar .button-positive-100:hover,.bar-positive-100,.bar-positive-100.activated,.bar-positive-100:active,.bar-positive-100:hover,.button-bar-positive-100,.button-bar-positive-100.activated,.button-bar-positive-100:active,.button-bar-positive-100:hover,.button-positive-100,.button-positive-100.activated,.button-positive-100:active,.button-positive-100:hover,.header-positive-100,.header-positive-100.activated,.header-positive-100:active,.header-positive-100:hover,.positive-100-bg,.positive-100-bg.activated,.positive-100-bg:active,.positive-100-bg:hover,.positive-100-border,.positive-100-border.activated,.positive-100-border:active,.positive-100-border:hover{background-color:#C5CAE9;color:#fff}.bar .button-calm,.bar .button-calm.activated,.bar .button-calm:active,.bar .button-calm:hover,.bar-calm,.bar-calm.activated,.bar-calm:active,.bar-calm:hover,.button-bar-calm,.button-bar-calm.activated,.button-bar-calm:active,.button-bar-calm:hover,.button-calm,.button-calm.activated,.button-calm:active,.button-calm:hover,.calm-bg,.calm-bg.activated,.calm-bg:active,.calm-bg:hover,.calm-border,.calm-border.activated,.calm-border:active,.calm-border:hover,.header-calm,.header-calm.activated,.header-calm:active,.header-calm:hover{background-color:#2196F3;color:#fff}.bar .button-calm-900,.bar .button-calm-900.activated,.bar .button-calm-900:active,.bar .button-calm-900:hover,.bar-calm-900,.bar-calm-900.activated,.bar-calm-900:active,.bar-calm-900:hover,.button-bar-calm-900,.button-bar-calm-900.activated,.button-bar-calm-900:active,.button-bar-calm-900:hover,.button-calm-900,.button-calm-900.activated,.button-calm-900:active,.button-calm-900:hover,.calm-900-bg,.calm-900-bg.activated,.calm-900-bg:active,.calm-900-bg:hover,.calm-900-border,.calm-900-border.activated,.calm-900-border:active,.calm-900-border:hover,.header-calm-900,.header-calm-900.activated,.header-calm-900:active,.header-calm-900:hover{background-color:#0D47A1;color:#fff}.bar .button-calm-100,.bar .button-calm-100.activated,.bar .button-calm-100:active,.bar .button-calm-100:hover,.bar-calm-100,.bar-calm-100.activated,.bar-calm-100:active,.bar-calm-100:hover,.button-bar-calm-100,.button-bar-calm-100.activated,.button-bar-calm-100:active,.button-bar-calm-100:hover,.button-calm-100,.button-calm-100.activated,.button-calm-100:active,.button-calm-100:hover,.calm-100-bg,.calm-100-bg.activated,.calm-100-bg:active,.calm-100-bg:hover,.calm-100-border,.calm-100-border.activated,.calm-100-border:active,.calm-100-border:hover,.header-calm-100,.header-calm-100.activated,.header-calm-100:active,.header-calm-100:hover{background-color:#BBDEFB;color:#fff}.bar .button-royal,.bar .button-royal.activated,.bar .button-royal:active,.bar .button-royal:hover,.bar-royal,.bar-royal.activated,.bar-royal:active,.bar-royal:hover,.button-bar-royal,.button-bar-royal.activated,.button-bar-royal:active,.button-bar-royal:hover,.button-royal,.button-royal.activated,.button-royal:active,.button-royal:hover,.header-royal,.header-royal.activated,.header-royal:active,.header-royal:hover,.royal-bg,.royal-bg.activated,.royal-bg:active,.royal-bg:hover,.royal-border,.royal-border.activated,.royal-border:active,.royal-border:hover{background-color:#673AB7;color:#fff}.bar .button-royal-900,.bar .button-royal-900.activated,.bar .button-royal-900:active,.bar .button-royal-900:hover,.bar-royal-900,.bar-royal-900.activated,.bar-royal-900:active,.bar-royal-900:hover,.button-bar-royal-900,.button-bar-royal-900.activated,.button-bar-royal-900:active,.button-bar-royal-900:hover,.button-royal-900,.button-royal-900.activated,.button-royal-900:active,.button-royal-900:hover,.header-royal-900,.header-royal-900.activated,.header-royal-900:active,.header-royal-900:hover,.royal-900-bg,.royal-900-bg.activated,.royal-900-bg:active,.royal-900-bg:hover,.royal-900-border,.royal-900-border.activated,.royal-900-border:active,.royal-900-border:hover{background-color:#311B92;color:#fff}.bar .button-royal-100,.bar .button-royal-100.activated,.bar .button-royal-100:active,.bar .button-royal-100:hover,.bar-royal-100,.bar-royal-100.activated,.bar-royal-100:active,.bar-royal-100:hover,.button-bar-royal-100,.button-bar-royal-100.activated,.button-bar-royal-100:active,.button-bar-royal-100:hover,.button-royal-100,.button-royal-100.activated,.button-royal-100:active,.button-royal-100:hover,.header-royal-100,.header-royal-100.activated,.header-royal-100:active,.header-royal-100:hover,.royal-100-bg,.royal-100-bg.activated,.royal-100-bg:active,.royal-100-bg:hover,.royal-100-border,.royal-100-border.activated,.royal-100-border:active,.royal-100-border:hover{background-color:#D1C4E9;color:#fff}.balanced-bg,.balanced-bg.activated,.balanced-bg:active,.balanced-bg:hover,.balanced-border,.balanced-border.activated,.balanced-border:active,.balanced-border:hover,.bar .button-balanced,.bar .button-balanced.activated,.bar .button-balanced:active,.bar .button-balanced:hover,.bar-balanced,.bar-balanced.activated,.bar-balanced:active,.bar-balanced:hover,.button-balanced,.button-balanced.activated,.button-balanced:active,.button-balanced:hover,.button-bar-balanced,.button-bar-balanced.activated,.button-bar-balanced:active,.button-bar-balanced:hover,.header-balanced,.header-balanced.activated,.header-balanced:active,.header-balanced:hover{background-color:#4CAF50;color:#fff}.balanced-900-bg,.balanced-900-bg.activated,.balanced-900-bg:active,.balanced-900-bg:hover,.balanced-900-border,.balanced-900-border.activated,.balanced-900-border:active,.balanced-900-border:hover,.bar .button-balanced-900,.bar .button-balanced-900.activated,.bar .button-balanced-900:active,.bar .button-balanced-900:hover,.bar-balanced-900,.bar-balanced-900.activated,.bar-balanced-900:active,.bar-balanced-900:hover,.button-balanced-900,.button-balanced-900.activated,.button-balanced-900:active,.button-balanced-900:hover,.button-bar-balanced-900,.button-bar-balanced-900.activated,.button-bar-balanced-900:active,.button-bar-balanced-900:hover,.header-balanced-900,.header-balanced-900.activated,.header-balanced-900:active,.header-balanced-900:hover{background-color:#1B5E20;color:#fff}.balanced-100-bg,.balanced-100-bg.activated,.balanced-100-bg:active,.balanced-100-bg:hover,.balanced-100-border,.balanced-100-border.activated,.balanced-100-border:active,.balanced-100-border:hover,.bar .balanced-100-bg:hover,.bar .button-balanced-100,.bar .button-balanced-100.activated,.bar .button-balanced-100:active,.bar-balanced-100,.bar-balanced-100.activated,.bar-balanced-100:active,.bar-balanced-100:hover,.button-balanced-100,.button-balanced-100.activated,.button-balanced-100:active,.button-balanced-100:hover,.button-bar-balanced-100,.button-bar-balanced-100.activated,.button-bar-balanced-100:active,.button-bar-balanced-100:hover,.header-balanced-100,.header-balanced-100.activated,.header-balanced-100:active,.header-balanced-100:hover{background-color:#C8E6C9;color:#fff}.bar .button-energized,.bar .button-energized.activated,.bar .button-energized:active,.bar .button-energized:hover,.bar-energized,.bar-energized.activated,.bar-energized:active,.bar-energized:hover,.button-bar-energized,.button-bar-energized.activated,.button-bar-energized:active,.button-bar-energized:hover,.button-energized,.button-energized.activated,.button-energized:active,.button-energized:hover,.energized-bg,.energized-bg.activated,.energized-bg:active,.energized-bg:hover,.energized-border,.energized-border.activated,.energized-border:active,.energized-border:hover,.header-energized,.header-energized.activated,.header-energized:active,.header-energized:hover{background-color:#FF9800;color:#fff}.bar .button-energized-900,.bar .button-energized-900.activated,.bar .button-energized-900:active,.bar .button-energized-900:hover,.bar-energized-900,.bar-energized-900.activated,.bar-energized-900:active,.bar-energized-900:hover,.button-bar-energized-900,.button-bar-energized-900.activated,.button-bar-energized-900:active,.button-bar-energized-900:hover,.button-energized-900,.button-energized-900.activated,.button-energized-900:active,.button-energized-900:hover,.energized-900-bg,.energized-900-bg.activated,.energized-900-bg:active,.energized-900-bg:hover,.energized-900-border,.energized-900-border.activated,.energized-900-border:active,.energized-900-border:hover,.header-energized-900,.header-energized-900.activated,.header-energized-900:active,.header-energized-900:hover{background-color:#E65100;color:#fff}.bar .button-energized-100,.bar .button-energized-100.activated,.bar .button-energized-100:active,.bar .button-energized-100:hover,.bar-energized-100,.bar-energized-100.activated,.bar-energized-100:active,.bar-energized-100:hover,.button-bar-energized-100,.button-bar-energized-100.activated,.button-bar-energized-100:active,.button-bar-energized-100:hover,.button-energized-100,.button-energized-100.activated,.button-energized-100:active,.button-energized-100:hover,.energized-100-bg,.energized-100-bg.activated,.energized-100-bg:active,.energized-100-bg:hover,.energized-100-border,.energized-100-border.activated,.energized-100-border:active,.energized-100-border:hover,.header-energized-100,.header-energized-100.activated,.header-energized-100:active,.header-energized-100:hover,.modal.modal-help .activated.row.selected,.modal.modal-help .row.selected,.modal.modal-help .row.selected:active,.modal.modal-help .row.selected:hover{background-color:#FFE0B2}.assertive-bg,.assertive-bg.activated,.assertive-bg:active,.assertive-bg:hover,.assertive-border,.assertive-border.activated,.assertive-border:active,.assertive-border:hover,.bar .button-assertive,.bar .button-assertive.activated,.bar .button-assertive:active,.bar .button-assertive:hover,.bar-assertive,.bar-assertive.activated,.bar-assertive:active,.bar-assertive:hover,.button-assertive,.button-assertive.activated,.button-assertive:active,.button-assertive:hover,.button-bar-assertive,.button-bar-assertive.activated,.button-bar-assertive:active,.button-bar-assertive:hover,.header-assertive,.header-assertive.activated,.header-assertive:active,.header-assertive:hover{background-color:#F44336;color:#fff}.assertive-900-bg,.assertive-900-bg.activated,.assertive-900-bg:active,.assertive-900-bg:hover,.assertive-900-border,.assertive-900-border.activated,.assertive-900-border:active,.assertive-900-border:hover,.bar .button-assertive-900,.bar .button-assertive-900.activated,.bar .button-assertive-900:active,.bar .button-assertive-900:hover,.bar-assertive-900,.bar-assertive-900.activated,.bar-assertive-900:active,.bar-assertive-900:hover,.button-assertive-900,.button-assertive-900.activated,.button-assertive-900:active,.button-assertive-900:hover,.button-bar-assertive-900,.button-bar-assertive-900.activated,.button-bar-assertive-900:active,.button-bar-assertive-900:hover,.header-assertive-900,.header-assertive-900.activated,.header-assertive-900:active,.header-assertive-900:hover{background-color:#B71C1C;color:#fff}.assertive-100-bg,.assertive-100-bg.activated,.assertive-100-bg:active,.assertive-100-bg:hover,.assertive-100-border,.assertive-100-border.activated,.assertive-100-border:active,.assertive-100-border:hover,.bar .button-assertive-100,.bar .button-assertive-100.activated,.bar .button-assertive-100:active,.bar .button-assertive-100:hover,.bar-assertive-100,.bar-assertive-100.activated,.bar-assertive-100:active,.bar-assertive-100:hover,.button-assertive-100,.button-assertive-100.activated,.button-assertive-100:active,.button-assertive-100:hover,.button-bar-assertive-100,.button-bar-assertive-100.activated,.button-bar-assertive-100:active,.button-bar-assertive-100:hover,.header-assertive-100,.header-assertive-100.activated,.header-assertive-100:active,.header-assertive-100:hover{background-color:#FFCDD2;color:#fff}.bar .button-stable,.bar .button-stable.activated,.bar .button-stable:active,.bar .button-stable:hover,.bar-stable,.bar-stable.activated,.bar-stable:active,.bar-stable:hover,.button-bar-stable,.button-bar-stable.activated,.button-bar-stable:active,.button-bar-stable:hover,.button-stable,.button-stable.activated,.button-stable:active,.button-stable:hover,.header-stable,.header-stable.activated,.header-stable:active,.header-stable:hover,.stable-bg,.stable-bg.activated,.stable-bg:active,.stable-bg:hover,.stable-border,.stable-border.activated,.stable-border:active,.stable-border:hover{background-color:#E0E0E0;color:#fff}.item,.item-complex .item-content,.item-radio .item-content,.menu{background-color:transparent}.icon-help,.icon-help *,.icon-help:active,.icon-help:active *,.icon-help:hover,.icon-help:hover *,.positive,.positive *,.positive-900,.positive-900 *,.positive-900:active,.positive-900:active *,.positive-900:hover,.positive-900:hover *,.positive:active,.positive:active *,.positive:hover,.positive:hover *,.text-editable:active:hover,.text-editable:active:hover *,.text-editable:hover,.text-editable:hover *{color:#3F51B5}.positive-100,.positive-100 *,.positive-100:active,.positive-100:active *,.positive-100:hover,.positive-100:hover *{color:#C5CAE9}.calm-900,.calm-900 *,.calm-900:active,.calm-900:active *,.calm-900:hover,.calm-900:hover *{color:#0D47A1}.calm-100,.calm-100 *,.calm-100:active,.calm-100:active *,.calm-100:hover,.calm-100:hover *{color:#BBDEFB}.royal,.royal *,.royal:active,.royal:active *,.royal:hover,.royal:hover *{color:#673AB7}.royal-900,.royal-900 *,.royal-900:active,.royal-900:active *,.royal-900:hover,.royal-900:hover *{color:#311B92}.royal-100,.royal-100 *,.royal-100:active,.royal-100:active *,.royal-100:hover,.royal-100:hover *{color:#D1C4E9}.balanced,.balanced *,.balanced:active,.balanced:active *,.balanced:hover,.balanced:hover *{color:#4CAF50}.balanced-900,.balanced-900 *,.balanced-900:active,.balanced-900:active *,.balanced-900:hover,.balanced-900:hover *{color:#1B5E20}.balanced-100,.balanced-100 *,.balanced-100:active,.balanced-100:active *,.balanced-100:hover,.balanced-100:hover *{color:#C8E6C9}.energized,.energized *,.energized:active,.energized:active *,.energized:hover,.energized:hover *{color:#FF9800}.energized-900,.energized-900 *,.energized-900:active,.energized-900:active *,.energized-900:hover,.energized-900:hover *{color:#E65100}.energized-100,.energized-100 *,.energized-100:active,.energized-100:active *,.energized-100:hover,.energized-100:hover *{color:#FFE0B2}.assertive,.assertive *,.assertive:active,.assertive:active *,.assertive:hover,.assertive:hover *,.icon-alert,.icon-alert *,.icon-alert:active,.icon-alert:active *,.icon-alert:hover,.icon-alert:hover *{color:#F44336}.assertive-900,.assertive-900 *,.assertive-900:active,.assertive-900:active *,.assertive-900:hover,.assertive-900:hover *{color:#B71C1C}.assertive-100,.assertive-100 *,.assertive-100:active,.assertive-100:active *,.assertive-100:hover,.assertive-100:hover *{color:#FFCDD2}.stable,.stable *,.stable:active,.stable:active *,.stable:hover,.stable:hover *{color:#E0E0E0}.light,.light *,.light:active,.light:active *,.light:hover,.light:hover *{color:#fff}.button-text-dark,.button-text-dark *,.button-text-dark:active,.button-text-dark:active *,.button-text-dark:hover,.button-text-dark:hover *,.dark,.dark *,.dark:active,.dark:active *,.dark:hover,.dark:hover *{color:#444}.light-border{border-color:#ddd}.navbar-default .navbar-nav>li>a{margin:0;padding-right:26px;padding-left:26px;border-top:3px solid transparent;color:#BFD5C9;opacity:1}.mid-bar{padding:16px}.mid-bar h1,.mid-bar h2,.mid-bar h3,.mid-bar h4,.mid-bar h5,.mid-bar h6{color:#fff;margin-bottom:5px}.mid-bar p{color:rgba(255,255,255,.5);margin-bottom:0}.bar .button.button-clear,.bar .button.button-text,.dark-bg h2,.item.dark-bg h2{color:#fff}.card>.item-avatar,.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{padding-left:95px}.tabs-striped .tabs{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}#menu .footer .bar .button.button-icon .icon-help:before,.bar .button.button-icon #menu .footer .icon-help:before,.bar .button.button-icon .icon-alert:before,.bar .button.button-icon .icon-help:before,.bar .button.button-icon .icon:before,.bar .button.button-icon.icon-left:before,.bar .button.button-icon.icon-right:before,.bar .button.button-icon:before{vertical-align:top;font-size:24px}.button-icon.button.activated,.button-icon.button.active{opacity:initial}.popover{opacity:0;position:absolute;right:8px;transform:translate(50%,-50%) scale(0,0);top:8px}.popover.ng-enter{opacity:1;transform:translate(0,-14px) scale(1,1)}.popover.ng-leave{opacity:0;transform:translate(50%,-50%) scale(0,0)}.button{overflow:hidden!important}@font-face{font-family:Cesiumicons;src:url(../fonts/cesiumicons.eot?v=1.2);src:url(../fonts/cesiumicons.eot?v=1.2#iefix) format("embedded-opentype"),url(../fonts/cesiumicons.ttf?v=1.2) format("truetype"),url(../fonts/cesiumicons.woff?v=1.2) format("woff"),url(../fonts/cesiumicons.woff) format("woff"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9ImNlc2l1bWljb25zIiBob3Jpei1hZHYteD0iMTAyNCI+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMDI0IiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTY0IiAvPgo8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iMTAyNCIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwOyIgaG9yaXotYWR2LXg9IjUxMiIgZD0iIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMDsiIGQ9Ik03MDQuNjMxIDU3MS4xMjhjLTg4LjYxMy0xNDEuNDA5LTIyMC40MDMtMjYzLjQwOC0zODUuNTIxLTMwNS40NzMtNjcuMjUyLTE4LjQ5My0xMzcuMTEyLTI1LjgyMi0yMDYuNzA1LTI3LjAyMiA4NS41NDktMTYzLjA5NSAyNzUuODEtMjYyLjI3MiA0NTguNTQ1LTIzNy45NSAxODEuMTY2IDE5LjA3NiAzNDEuNjYyIDE1Ny4yMTUgMzg4LjMzOCAzMzMuMTYyLTU0LjYwMSAxMDMuOTI0LTE0MS40OSAxOTcuODc0LTI1NC42NTYgMjM3LjI4M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAxOyIgZD0iTTcwNS45MzcgNTcyLjA4OGMtMTYuNzU2LTExMS44MTUtODUuMDg2LTIwNy4yLTEwNy4yNjctMzE3LjIyMS05LjE4OC01MS41NDEgMjYuNzg2LTExMC42NDItMTQuNTc5LTE1NS41MTQtNDYuMjEtNTIuNDAyLTExOC45MDctNjUuMzc5LTE4MS45MzgtODcuNDY2IDE3Ny43My00Ny45MSAzNzkuNjYgMjQuMjE1IDQ4NS45ODIgMTc0Ljc4IDUwLjU1IDY5LjExNiA4MC45OTIgMTUyLjY4OSA4Ni42OTYgMjM4LjEyNS00Ni4wODUgOS40ODMtNjkuNDM2IDU1LjAyMC0xMTAuNTU2IDc0LjIwMS00OS45MTcgMjkuOTkyLTEwMy41NzEgNTMuNTE0LTE1OC4zMzkgNzMuMDk1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDI7IiBkPSJNNzA0LjQyMiA1NjMuNGMtMjMuNzg2LTUxLjQwOC0yNi40MzYtMTA5Ljc1Ny01NC4wODQtMTU5LjcyNi03LjIxMS0zMi45MDktNDEuMDkxLTg0LjI4OC0yOS40OTgtMTA2LjQ4OSAxMDEuNTktMTYuNTQyIDIwMy4xODEtMzMuMDg1IDMwNC43NzEtNDkuNjI3IDE4LjI3OCAzNS42NDkgMzEuODQ1IDczLjcxMSA0MC4yMDEgMTEyLjg5NC03My44NjggNzkuMjY5LTE1MC40NzEgMTYzLjQyNi0yNTUuMzU4IDIwMC42MzVsLTYuMDMyIDIuMzE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDM7IiBkPSJNNjY4LjYxNiA0NDUuNzk0Yy0yMC45ODMtMzEuNjc5LTI3LjI0NS03MC40MDgtNDQuMTA0LTEwNC40MjYtMTYuMjIxLTM1LjY4OS01MS40MTUtMTE5LjQ3MiAxOS42ODQtMTA5Ljg5IDUwLjQ1OSAyNC42NTQgOTUuMDUwLTEzLjM3OSAxNDUuODE5LTE2LjkyOSA0MC4zMTctNS41NjEgODIuMTM3LTQuNjY1IDEyMS4yOTUgNy4yMDEgMTQuOTgzIDMxLjcxNiA1MC42ODYgODIuNTk0IDM4LjcyNiAxMDguMzA1LTQ4LjU2MyA5Ljg2Ny05OS40NzMgMTMuODc5LTE0NS4yMTUgMzMuNjkgMTkuMjczIDQ1LjU5NS01NC45NzQgNTUuNDY1LTg5Ljk3NiA2OC44NC0xNS4zNDEgNC42MzctMzAuNzY1IDguOTk4LTQ2LjIyOSAxMy4yMDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNDsiIGQ9Ik02MDcuNzE0IDE2MC44NzNjLTMwLjE4My04NS4wMDItMTIzLjE4Ni0xMTkuOTQ4LTIwMS44MzItMTQ1Ljk0MyA1LjAyMC0xMS4xODYgNzEuMTg2LTE2LjMyNSAxMDAuNzg3LTE3LjMyNiAxMTcuMTE1LTMuMDY3IDIzNC41NDIgNDEuMDg2IDMyMC40OCAxMjAuNzUyLTc0LjgzMSAyLjgzNC0xNDkuNTQ5IDE0Ljc4NC0yMTkuNDM1IDQyLjUxN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA1OyIgZD0iTTU5OC40ODUgMjY4LjUzNGMtNC4xNzQtNDIuNzY0LTI1LjE4OC0xMTUuOTM2IDM0LjAyOC0xMjguNDk0IDU4LjUzNy0xNC41ODEgMTE5LjQzNC0xOC41MTEgMTc3LjA2Ny0zNy4wMjAgNDUuMjAxIDM3LjQ0NyA4My4xNjcgODMuNTk5IDExMS4xMiAxMzUuMjE3LTEwNy45OC0xLjY4MS0yMTkuNDMxLTEwLjIwNC0zMjIuMjE1IDMwLjI5N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA2OyIgZD0iTTYwNy4yMSA2MDAuNzhjMTguOTU5IDIuMjkgMzUuMjM0IDEuODk2IDI4LjI4OC0yMS43MiA1LjkzNS0xNC42NDQtMzYuNjE0LTE0LjYwNy0yOC4yODggMS44NDEgMCA2LjYyNiAwIDEzLjI1MiAwIDE5Ljg3OXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA3OyIgZD0iTTQ0NC41NDEgNzAyLjk2MmMyMS4wODggMy45NTggMzIuNjU0LTEuNjA0IDI2Ljk1NC0yNC40MzUtNS42NzMtMTEuMDcxLTM3LjY5Ny03LjY1LTI2Ljk1NCAxNC4wMzYgMCAzLjQ2NiAwIDYuOTMzIDAgMTAuMzk5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDg7IiBkPSJNNTA0LjUzMiA2ODEuNzhjMTMuNDc4LTMuMjk4IDQzLjIzNiA5LjY4MiAzNi43NTUtMTMuNTc1IDYuMjU0LTIzLjAzMC03LjA1Ny0yNi40OTYtMjcuMTUtMjMuMTgtMTguNTY3LTUuNDk2LTUuODcxIDI2LjUyNy05LjYwNSAzNi43NTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwOTsiIGQ9Ik01MDIuNTM5IDQxNy40MjZjMTguNzg2IDAgMzcuNTcyIDAgNTYuMzU4IDAgMC0xOC43ODYgMC0zNy41NzIgMC01Ni4zNTgtMTguNzg2IDAtMzcuNTcyIDAtNTYuMzU4IDAgMCAxOC43ODYgMCAzNy41NzIgMCA1Ni4zNTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYTsiIGQ9Ik01MDguODU2IDYzMC4xNTdjMTMuNDc4LTMuMjk4IDQzLjIzNiA5LjY4MiAzNi43NTUtMTMuNTc1IDYuMjU0LTIzLjAzMC03LjA1Ny0yNi40OTYtMjcuMTUtMjMuMTgtMTguNTY3LTUuNDk2LTUuODcxIDI2LjUyNy05LjYwNSAzNi43NTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYjsiIGQ9Ik01NjkuMTAzIDQ3NC4xNGMxOC45NyAxLjkyOSAzNi40OTIgMi40MDkgMjkuNDA0LTIxLjcyIDYuODk0LTE1LjkzMi0zNy4yMzUtMTUuODMzLTI5LjQwNCAwLjcyNSAwIDYuOTk4IDAgMTMuOTk2IDAgMjAuOTk0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGM7IiBkPSJNNjI3LjA4NyA1MzEuNDAzYzE5LjM1IDcuODY5IDI5LjQwOC05LjU4MiAxOS4zMzgtMjIuMDUzLTIxLjU4My00LjE0Ny0yMC44MDEgMy4zODctMTkuMzM4IDIyLjA1M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBkOyIgZD0iTTU0Ny42MjcgNTI1LjIzMWMxMy40NzgtMy4yOTggNDMuMjM2IDkuNjgyIDM2Ljc1NS0xMy41NzUgNi4yNTQtMjMuMDMwLTcuMDU3LTI2LjQ5Ni0yNy4xNS0yMy4xOC0xOC41NjctNS40OTYtNS44NzEgMjYuNTI3LTkuNjA1IDM2Ljc1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBlOyIgZD0iTTQwMy44MDIgMzM1LjAyNGMxNC40MjYtMS45OTggMzYuNzMgMy44ODIgNDYuNTU2LTIuNzE1LTIuMDIwLTE0LjMxNSAzLjkxMy0zNi41ODQtMi43MTUtNDYuMjkyLTEyLjg3OSAzLjU0NS00MC4wMTctNy4xNjktNDMuODQxIDUuNDMgMCAxNC41MjYgMCAyOS4wNTEgMCA0My41Nzd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwZjsiIGQ9Ik00NDcuOTA3IDQwNi4wODRjMTYuODM2LTAuMTE3IDM5LjY3NyA1Ljc3IDMxLjg1NC0xOS4wMDUgNy44Mi0yNC4zNTUtMTYuMDgwLTE2Ljk5LTMxLjg1NC0xNy43NSAwIDEyLjI1MiAwIDI0LjUwMyAwIDM2Ljc1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEwOyIgZD0iTTUxNS4yOTEgNDY4LjU2N2MtMTguOTcxIDEuODk0LTM2LjYxMiAyLjQ1OS0yOS41MS0yMS43Mi0yLjUzOC0xMi45OSAzOS42MjctMTMuMzc0IDI5LjUxIDUuODkxIDAgNS4yNzYgMCAxMC41NTMgMCAxNS44Mjl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxMTsiIGQ9Ik01NzguNDg2IDU3Mi44NjZjMjEuMjMyIDQuOTIgMjkuNDY5LTMuMTU2IDI0LjUwMy0yNC40MzUtMTMuMTA0LTguNTMyLTMyLjk1NS0yLjEwNi0yNC41MDMgMTkuMjAxdjUuMjM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTI7IiBkPSJNNjAxLjQ3MSA2NDEuNjg5Yy0xOC45NzEgMS44OTQtMzYuNjEyIDIuNDU5LTI5LjUxLTIxLjcyLTIuNTM4LTEyLjk5IDM5LjYyNy0xMy4zNzQgMjkuNTEgNS44OTEgMCA1LjI3NiAwIDEwLjU1MyAwIDE1LjgyOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTE1OyIgZ2x5cGgtbmFtZT0iZGlhc3BvcmEiIGhvcml6LWFkdi14PSIxMDY0IiBkPSJNNjcwLjEgMjIuMTA5Yy0yOC42OTIgNDAuMDQ2LTczLjQ1OSAxMDIuNTcxLTk5LjQ4MiAxMzguOTQ1LTI2LjU3OSAzNy4xNTEtNDguMjAyIDY2LjE0Ni00OS4zNCA2Ni4xNjEtMS4xNjkgMC4wMTUtNDIuOTg2LTU2LjE5Ni05OC45MTItMTMyLjk2MS01My4yODgtNzMuMTQzLTk3LjMzLTEzMi45ODctOTcuODcyLTEzMi45ODctMS41MTYgMC0xOTIuMTE0IDEzNC4yNS0xOTIuNjA1IDEzNS42NjMtMC4yMzcgMC42ODQgNDIuODUgNjMuOTM1IDk1Ljc1MSAxNDAuNTU5czk2LjE4MiAxNDAuNTIzIDk2LjE4MiAxNDEuOTk5YzAgMi4zOC0xNy4xNDIgOC4zOTgtMTUxLjYwNSA1My4yMjYtODMuMzgzIDI3Ljc5OC0xNTIuNDIyIDUwLjg2MS0xNTMuNDIgNTEuMjUxLTEuMzg4IDAuNTQyIDYuNTUgMjcuMTAzIDMzLjc4MyAxMTMuMDMyIDE5LjU3OCA2MS43NzggMzYuMDQwIDExMi44MjggMzYuNTgxIDExMy40NDRzNzMuMDExLTIyLjU3NCAxNjEuMDQzLTUxLjUzNGM4OC4wMzMtMjguOTYgMTYwLjc5Ni01Mi42NTQgMTYxLjY5Ni01Mi42NTNzMS45MTkgMS4zNDggMi4yNjMgMi45OTRjMC4zNDQgMS42NDYgMS4xMDQgNzYuNjAxIDEuNjg4IDE2Ni41NjZzMS41NDYgMTY0LjMyMiAyLjEzNyAxNjUuMjM2YzAuODQ3IDEuMzA5IDI1LjU3NiAxLjY1OCAxMTYuMzY0IDEuNjQyIDYzLjQwOC0wLjAxMSAxMTUuOTQ4LTAuNDYgMTE2Ljc1Ni0wLjk5NyAxLjAxOC0wLjY3NyAyLjc1Ny01MC4xMzggNS42Ny0xNjEuMjI2IDQuNzgzLTE4Mi40MDggNC44ODYtMTg0Ljg1MiA3Ljc5NS0xODQuODUyIDEuMTI4IDAgNzAuODk2IDIzLjM1MyAxNTUuMDQxIDUxLjg5NnMxNTMuNCA1MS40MzMgMTUzLjkwMSA1MC44NjhjMS43LTEuOTE4IDcwLjcxNS0yMjYuNjAyIDY5Ljg2NS0yMjcuNDUxLTAuNDY0LTAuNDY0LTcwLjY5LTI0LjUxNC0xNTYuMDU2LTUzLjQ0NC0xMTcuNDMyLTM5Ljc5Ny0xNTUuMzE1LTUzLjE0My0xNTUuNjMzLTU0LjgyNy0wLjIzNS0xLjI0NCA0MC4xNDktNjEuNTk0IDkxLjQ5OS0xMzYuNzM3IDUwLjU1NS03My45ODEgOTEuNzMzLTEzNS4wNjIgOTEuNTA3LTEzNS43MzctMC41MjEtMS41NDktMTg5LjY4MS0xNDAuODg0LTE5MS4yNjMtMTQwLjg4NC0wLjY0MiAwLTI0LjY0MyAzMi43NjUtNTMuMzM1IDcyLjgxeiIgLz4KPC9mb250PjwvZGVmcz48L3N2Zz4=) format("svg");font-weight:400;font-style:normal}.cesiumicons,.cion,.ion-library:before,.ion-office:before,.ion-social-diaspora:before,.ion-social-duniter:before{display:inline-block;font-family:Cesiumicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.text-italic,.view-wallet .item .comment,.view-wallet-tx .item .comment{font-style:italic!important}.ion-social-duniter:before{content:""}.ion-social-diaspora:before{content:""}.ion-office:before{content:""}.ion-library:before{content:""}@media screen and (max-width:767px){.hidden-xs{display:none!important;visibility:hidden!important}.padding-top-xs{padding-top:10px}}@media screen and (min-width:768px){.hidden-xs{display:inherit;visibility:visible}.row.hidden-xs{display:flex!important}.button.hidden-xs{display:inline-block}}@media screen and (max-width:767px){.visible-xs{display:inherit!important;visibility:visible!important}.button.visible-xs{display:inline-block!important}.padding-xs{padding:16px!important}.no-padding-xs{padding:0!important}.no-margin-xs{margin:0!important}}@media screen and (min-width:768px){.visible-xs{display:none!important;visibility:hidden!important}.item-toggle .toggle{right:32px}}@media screen and (min-width:768px) and (max-width:991px){.hidden-sm,.row-header.hidden-sm,.row.hidden-sm{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:400px!important;display:inline-block!important}.badge:empty{display:none!important}.padding-sm{padding:16px!important}.no-padding-sm{padding:0!important}.no-margin-sm{margin:0!important}}@media screen and (min-width:992px){.hidden-sm{display:inherit;visibility:visible}.row.hidden-sm{display:flex!important}.button.hidden-sm{display:flex}#menu .footer .popover-helptip .icon-bottom-center.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-bottom-left.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-bottom-right.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-center.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-left.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-right.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-center.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-left.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-right.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-center.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-left.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-right.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-center.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-center.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-left.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-left.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-right.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-right.icon-help .button.hidden-sm,.popover-helptip .icon-center.icon-alert .button.hidden-sm,.popover-helptip .icon-center.icon-help .button.hidden-sm,.popover-helptip .icon-left.icon-alert .button.hidden-sm,.popover-helptip .icon-left.icon-help .button.hidden-sm,.popover-helptip .icon-right.icon-alert .button.hidden-sm,.popover-helptip .icon-right.icon-help .button.hidden-sm,.popover-helptip .icon.icon-bottom-center .button.hidden-sm,.popover-helptip .icon.icon-bottom-left .button.hidden-sm,.popover-helptip .icon.icon-bottom-right .button.hidden-sm,.popover-helptip .icon.icon-center .button.hidden-sm,.popover-helptip .icon.icon-left .button.hidden-sm,.popover-helptip .icon.icon-right .button.hidden-sm,.pull-left .button.hidden-sm,.pull-right .button.hidden-sm{display:inline-block}}@media screen and (max-width:767px){.hidden-sm{display:inherit;visibility:visible}}@media screen and (max-width:991px){.visible-sm{display:inherit!important;visibility:visible!important}.button.visible-sm{display:inline-block!important}body{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEbSURBVDiNndMxK4ZRGMbx3zmRMrwvM2XCQFFik/IJpCw+hJLPgfIhLBY+gEEGJQPFwGZg9TIoBrfhOfSQHl7XeM7/fw3nvk+KCPWklEawgGlMlOMrnOMoIm6/8B8FKaWMFazhGQ94LFwbg+jHDvYi4u2zIKWUsIk5XNfE72ljHKfYiIjI5WIZMzhrkJW7s8IuQ8IwdnGDpwa5nhbGsJqxiNcuZIV9xWJWvXY3cr1kOmMSnX8UdDCZEb+RDYmMS9WMu80gLrNqw1r/KGjhPOMQvaol+Wva6MFhjoh7bGEUuVGrkgu7HRH3H8IBTjCLgQZ5oDAnxfnymRKWsI4X1Zw7NbGFPmxjP4qYfvjOQ5jHlGpHqCZ1geOIuKvz76QSW1T3cwmnAAAAAElFTkSuQmCC),auto}}@media screen and (max-width:767px){.visible-sm{display:none;visibility:hidden}.no-margin-xs{margin:0!important}}@media screen and (min-width:992px){.visible-sm{display:none;visibility:hidden}body{cursor:inherit}.disable-user-behavior,.scroll,body,html{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;-webkit-touch-callout:default!important;-webkit-tap-highlight-color:#387ef5;-webkit-user-drag:none!important;touch-action:auto!important;-ms-touch-action:auto!important;-ms-content-zooming:none!important}}@media screen and (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:400px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (min-width:1200px){.hidden-md{display:inherit;visibility:visible}}@media screen and (max-width:991px){.hidden-md{display:inherit;visibility:visible}}@media screen and (min-width:992px) and (max-width:1199px){.visible-md{display:inherit!important;visibility:visible!important}}@media screen and (max-width:991px){.visible-md{display:none;visibility:hidden}}@media screen and (min-width:1200px){.visible-md{display:none;visibility:hidden}.hidden-lg{display:none!important;visibility:hidden!important}.visible-lg{display:inherit!important;visibility:visible!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:450px!important;display:block!important}.badge:empty{display:none!important}}.view-wallet .item-text-wrap,.view-wallet-tx .item-text-wrap{white-space:normal!important}@media screen and (max-width:1199px){.hidden-lg{display:inherit;visibility:visible}.visible-lg{display:none;visibility:hidden}}@media screen and (max-width:768px){.no-padding-xs{padding:inherit}}@media screen and (max-width:844px){.hidden-nomenu{display:none!important;visibility:hidden!important}.visible-nomenu{display:inherit!important;visibility:visible!important}}@media screen and (min-width:845px){.hidden-nomenu{display:inherit;visibility:visible}.hidden-menu,.visible-nomenu{display:none!important;visibility:hidden!important}.visible-menu{display:inherit!important;visibility:visible!important}}@media screen and (max-width:844px){.hidden-menu{display:inherit;visibility:visible}.visible-menu{display:none;visibility:hidden}}body,html{position:absolute;top:0;left:0;height:100%;width:100%}.item.item-icon-right .item-select select,.item.item-icon-right.item-select select{right:48px;padding:0 20px 0 16px}.item.item-icon-right .item-select:after,.item.item-icon-right.item-select:after{right:56px}#unitPopover .item.selected,.popover-unit .item.selected{background-color:#f8f8f8}@media (max-width:767px){.popover-share{width:auto}}.ios ion-content{pointer-events:auto}.popover-share{height:110px}.popover-share .bar{box-shadow:none!important}.popover-share .bar-header{height:20px}.popover-share .bar-header .title{font-size:12px;font-weight:700;height:20px;line-height:19px;max-width:260px;margin:0 5px;text-align:left}.popover-share .bar-header span{font-size:10px;height:20px;position:absolute;right:0;top:0;margin:0 5px;display:block}#home .center,#home .center .button{display:inline-block}.popover-share .has-header{top:20px}.popover-share .has-footer{bottom:40px}.popover-share .bar-footer{color:#387ef5;height:40px}.popover-share .bar-footer .button-icon{padding:0 5px}.popover-share .bar-footer .button-close{position:absolute;right:0;bottom:0}.popover-share .item{padding:5px}.popover-share .item input{border:1px solid grey;border-radius:3px;box-shadow:inset 0 1px 1px rgba(0,0,0,.3)}.popover-share .item input:focus{border-color:#387ef5;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.3),0 0 8px #08c}.popover-share .list .item{border-bottom:0!important}.popover-light .item.unread,.popover-notification .item.unread,.view-notification .item.unread{background-color:#ecf0f7!important;border-color:#dddfe2!important}.popover-light .bar-footer,.popover-light .bar-header,.popover-notification .bar-footer,.popover-notification .bar-header{height:30px}.popover-light .bar-footer .title,.popover-light .bar-header .title,.popover-notification .bar-footer .title,.popover-notification .bar-header .title{color:#000;text-align:left;left:0!important;font-size:14px;line-height:30px}#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-right.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-help,.popover-helptip .popover-light .bar-footer .icon-center.icon-alert,.popover-helptip .popover-light .bar-footer .icon-center.icon-help,.popover-helptip .popover-light .bar-footer .icon-right.icon-alert,.popover-helptip .popover-light .bar-footer .icon-right.icon-help,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-center,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-right,.popover-helptip .popover-light .bar-footer .icon.icon-center,.popover-helptip .popover-light .bar-footer .icon.icon-right,.popover-helptip .popover-light .bar-header .icon-bottom-center.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-center.icon-help,.popover-helptip .popover-light .bar-header .icon-bottom-right.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-right.icon-help,.popover-helptip .popover-light .bar-header .icon-center.icon-alert,.popover-helptip .popover-light .bar-header .icon-center.icon-help,.popover-helptip .popover-light .bar-header .icon-right.icon-alert,.popover-helptip .popover-light .bar-header .icon-right.icon-help,.popover-helptip .popover-light .bar-header .icon.icon-bottom-center,.popover-helptip .popover-light .bar-header .icon.icon-bottom-right,.popover-helptip .popover-light .bar-header .icon.icon-center,.popover-helptip .popover-light .bar-header .icon.icon-right,.popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-help,.popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-help,.popover-helptip .popover-notification .bar-footer .icon-center.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-center.icon-help,.popover-helptip .popover-notification .bar-footer .icon-right.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-right.icon-help,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-center,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-right,.popover-helptip .popover-notification .bar-footer .icon.icon-center,.popover-helptip .popover-notification .bar-footer .icon.icon-right,.popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-help,.popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-help,.popover-helptip .popover-notification .bar-header .icon-center.icon-alert,.popover-helptip .popover-notification .bar-header .icon-center.icon-help,.popover-helptip .popover-notification .bar-header .icon-right.icon-alert,.popover-helptip .popover-notification .bar-header .icon-right.icon-help,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-center,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-right,.popover-helptip .popover-notification .bar-header .icon.icon-center,.popover-helptip .popover-notification .bar-header .icon.icon-right,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-center.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-right.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-center.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-right.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-center.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-right.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-footer .popover-helptip .icon-center.icon-alert,.popover-light .bar-footer .popover-helptip .icon-center.icon-help,.popover-light .bar-footer .popover-helptip .icon-right.icon-alert,.popover-light .bar-footer .popover-helptip .icon-right.icon-help,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-center,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-right,.popover-light .bar-footer .popover-helptip .icon.icon-center,.popover-light .bar-footer .popover-helptip .icon.icon-right,.popover-light .bar-footer .pull-right,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-center.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-right.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-center.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-right.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-center.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-right.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-header .popover-helptip .icon-center.icon-alert,.popover-light .bar-header .popover-helptip .icon-center.icon-help,.popover-light .bar-header .popover-helptip .icon-right.icon-alert,.popover-light .bar-header .popover-helptip .icon-right.icon-help,.popover-light .bar-header .popover-helptip .icon.icon-bottom-center,.popover-light .bar-header .popover-helptip .icon.icon-bottom-right,.popover-light .bar-header .popover-helptip .icon.icon-center,.popover-light .bar-header .popover-helptip .icon.icon-right,.popover-light .bar-header .pull-right,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-center.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-center.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-right.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon-center.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-footer .popover-helptip .icon-right.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-center,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-right,.popover-notification .bar-footer .popover-helptip .icon.icon-center,.popover-notification .bar-footer .popover-helptip .icon.icon-right,.popover-notification .bar-footer .pull-right,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-center.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-right.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-center.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-right.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-header .popover-helptip .icon-center.icon-alert,.popover-notification .bar-header .popover-helptip .icon-center.icon-help,.popover-notification .bar-header .popover-helptip .icon-right.icon-alert,.popover-notification .bar-header .popover-helptip .icon-right.icon-help,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-center,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-right,.popover-notification .bar-header .popover-helptip .icon.icon-center,.popover-notification .bar-header .popover-helptip .icon.icon-right,.popover-notification .bar-header .pull-right{margin-right:10px}#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-left.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-help,.popover-helptip .popover-light .bar-footer .icon-left.icon-alert,.popover-helptip .popover-light .bar-footer .icon-left.icon-help,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-left,.popover-helptip .popover-light .bar-footer .icon.icon-left,.popover-helptip .popover-light .bar-header .icon-bottom-left.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-left.icon-help,.popover-helptip .popover-light .bar-header .icon-left.icon-alert,.popover-helptip .popover-light .bar-header .icon-left.icon-help,.popover-helptip .popover-light .bar-header .icon.icon-bottom-left,.popover-helptip .popover-light .bar-header .icon.icon-left,.popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-help,.popover-helptip .popover-notification .bar-footer .icon-left.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-left.icon-help,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-left,.popover-helptip .popover-notification .bar-footer .icon.icon-left,.popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-help,.popover-helptip .popover-notification .bar-header .icon-left.icon-alert,.popover-helptip .popover-notification .bar-header .icon-left.icon-help,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-left,.popover-helptip .popover-notification .bar-header .icon.icon-left,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-left.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-left.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-left.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-footer .popover-helptip .icon-left.icon-alert,.popover-light .bar-footer .popover-helptip .icon-left.icon-help,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-left,.popover-light .bar-footer .popover-helptip .icon.icon-left,.popover-light .bar-footer .pull-left,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-left.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-left.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-left.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-header .popover-helptip .icon-left.icon-alert,.popover-light .bar-header .popover-helptip .icon-left.icon-help,.popover-light .bar-header .popover-helptip .icon.icon-bottom-left,.popover-light .bar-header .popover-helptip .icon.icon-left,.popover-light .bar-header .pull-left,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-left.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon-left.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-left,.popover-notification .bar-footer .popover-helptip .icon.icon-left,.popover-notification .bar-footer .pull-left,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-left.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-left.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-header .popover-helptip .icon-left.icon-alert,.popover-notification .bar-header .popover-helptip .icon-left.icon-help,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-left,.popover-notification .bar-header .popover-helptip .icon.icon-left,.popover-notification .bar-header .pull-left{margin-left:10px}.popover-light .bar-footer a,.popover-light .bar-header a,.popover-notification .bar-footer a,.popover-notification .bar-header a{font-size:14px;text-decoration:none;line-height:30px}.popover-light .has-footer,.popover-notification .has-footer{bottom:28px}.popover-light .has-header,.popover-notification .has-header{top:30px}.popover-light .item-avatar,.popover-notification .item-avatar{min-height:80px!important;padding:12px 10px 8px 76px}#menu .footer .popover-light .item-avatar h4 i.icon-help,#menu .footer .popover-notification .item-avatar h4 i.icon-help,.popover-light .item-avatar h4 #menu .footer i.icon-help,.popover-light .item-avatar h4 i.icon,.popover-light .item-avatar h4 i.icon-alert,.popover-light .item-avatar h4 i.icon-help,.popover-notification .item-avatar h4 #menu .footer i.icon-help,.popover-notification .item-avatar h4 i.icon,.popover-notification .item-avatar h4 i.icon-alert,.popover-notification .item-avatar h4 i.icon-help{font-size:18px!important;line-height:12px!important;vertical-align:middle!important}.popover-light .item-avatar .item-content .item-image,.popover-light .item-avatar .item-content>img:first-child,.popover-light .item-avatar .item-image,.popover-light .item-avatar>img:first-child,.popover-notification .item-avatar .item-content .item-image,.popover-notification .item-avatar .item-content>img:first-child,.popover-notification .item-avatar .item-image,.popover-notification .item-avatar>img:first-child{top:12px;left:10px}.popover-light .button.button-small,.popover-notification .button.button-small{height:30px;font-size:12px;padding:0 5px!important;line-height:30px}.popover-invitation,.popover-network,.popover-peer-info{width:420px}.popover-endpoints .item .badge,.popover-peer-info .item .badge{right:16px!important}.popover-endpoints .item .badge.badge-secondary,.popover-peer-info .item .badge.badge-secondary{top:35px!important}.popover-unit{height:108px;max-width:115px}#menu .footer .view-notification ion-item h4 i.icon-help,.view-notification ion-item h4 #menu .footer i.icon-help,.view-notification ion-item h4 i.icon,.view-notification ion-item h4 i.icon-alert,.view-notification ion-item h4 i.icon-help{font-size:18px!important;line-height:12px!important;vertical-align:middle!important}.bar.bar-header .button.button-clear.button-icon i.ion-android-more-vertical,.bar.bar-header .button.button-clear.button-icon.ion-android-more-vertical,.bar.bar-header .button.button-icon.button-text i.ion-android-more-vertical,.bar.bar-header .button.button-icon.ion-android-more-vertical.button-text{padding-left:8px;padding-right:8px}#menu .footer .popover-helptip .bar .buttons.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-right.icon-help,.bar .buttons.pull-right,.bar .popover-helptip #menu .footer .buttons.icon-bottom-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-bottom-right.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon-bottom-center.icon-alert,.bar .popover-helptip .buttons.icon-bottom-center.icon-help,.bar .popover-helptip .buttons.icon-bottom-right.icon-alert,.bar .popover-helptip .buttons.icon-bottom-right.icon-help,.bar .popover-helptip .buttons.icon-center.icon-alert,.bar .popover-helptip .buttons.icon-center.icon-help,.bar .popover-helptip .buttons.icon-right.icon-alert,.bar .popover-helptip .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon.icon-bottom-center,.bar .popover-helptip .buttons.icon.icon-bottom-right,.bar .popover-helptip .buttons.icon.icon-center,.bar .popover-helptip .buttons.icon.icon-right,.bar .title+.button:last-child,.bar .title+.buttons,.bar>.button+.button:last-child,.bar>.button.pull-right,.popover-helptip #menu .footer .bar .buttons.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-right.icon-help,.popover-helptip .bar .buttons.icon-bottom-center.icon-alert,.popover-helptip .bar .buttons.icon-bottom-center.icon-help,.popover-helptip .bar .buttons.icon-bottom-right.icon-alert,.popover-helptip .bar .buttons.icon-bottom-right.icon-help,.popover-helptip .bar .buttons.icon-center.icon-alert,.popover-helptip .bar .buttons.icon-center.icon-help,.popover-helptip .bar .buttons.icon-right.icon-alert,.popover-helptip .bar .buttons.icon-right.icon-help,.popover-helptip .bar .buttons.icon.icon-bottom-center,.popover-helptip .bar .buttons.icon.icon-bottom-right,.popover-helptip .bar .buttons.icon.icon-center,.popover-helptip .bar .buttons.icon.icon-right,.popover-helptip .bar>.button.icon-bottom-center.icon-alert,.popover-helptip .bar>.button.icon-bottom-center.icon-help,.popover-helptip .bar>.button.icon-bottom-right.icon-alert,.popover-helptip .bar>.button.icon-bottom-right.icon-help,.popover-helptip .bar>.button.icon-center.icon-alert,.popover-helptip .bar>.button.icon-center.icon-help,.popover-helptip .bar>.button.icon-right.icon-alert,.popover-helptip .bar>.button.icon-right.icon-help,.popover-helptip .bar>.button.icon.icon-bottom-center,.popover-helptip .bar>.button.icon.icon-bottom-right,.popover-helptip .bar>.button.icon.icon-center,.popover-helptip .bar>.button.icon.icon-right{top:0!important}.bar.bar-header{padding-right:5px!important}.bar.bar-header .buttons-right span{margin-left:0!important}.bar .title+.buttons.buttons-right{right:5px}.button-icon{border-color:transparent;box-shadow:none!important}.button-small-padding{padding:0 7px!important}.button-text{color:grey!important;font-size:12px}.button-text.button-small{padding:5px 2px;font-size:12px!important}.button-text-positive{color:#387ef5!important}.button-text-stable{color:#b2b2b2!important}.popup-buttons .button.icon-left,.popup-buttons .button.icon-right{padding-left:32px!important;padding-right:32px!important;line-height:42px}.button-fab-bottom-left.has-footer,.button-fab-bottom-right.has-footer{bottom:64px!important}#home .logo{margin-top:15px;width:100%;background-position:center center;background-repeat:no-repeat}#home .center{float:none;text-align:center}@media screen and (max-width:767px){#home .logo{height:96px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AgRBwUf93UlLAAAIABJREFUeNrtnXd8VkX2/99z71PTewEChBK6VCnSAigIUlVgLeuqq7vq2nddf+vqV9a2rm0XXQvsVxF11Q0qJKFLCSBNqZESOoSEkoTwpD/t3vP7IyEkkEASsO3Xeb2e1+u5be7c85k5M/M558zAz+nn9HP6Of1gSf3UP2DSOxuuMUW1AbAoWfH5Pf33/ZTKb/lJS3+aaIba+mfN9A4FMOA24GcAGi4/0TI+IcIMJlxBlAbh4scGoOv4fVAOIAqXHQr8BeRl3I4nOZ1+CqaIMNkoDGqhVRT+ZOvQDwpAxhwCkkoomnmzKjhTc5NTJMhnR1UIAXYnIVJGuKYR6dHoa4libHI6VwHhUqlAS02rc5vptRdofs8JEfPAhd43OUV0QJ8zRXl/7gMamIalSgdTcZ+CXwOBgBtYpjTSMdipFC1N6ILCIbDT6mXVshvUwfryG71Q7BUVRJcUcHLzb5XvZwDqScNTZYipMQ1hWFVJj4vJGw47M5Zcqwrr6g+GXEVb5WGQMmmlwUm/TsbqsWp3XfkPSZNEzYIvY4zK+RmAmjV+nvQTjSeBsQAi7FXwFiHMyBim3A3NZ0SqxBqK0UAHUXztrWDx+imqouY9ySkSh5W45IlkTlPK/D8NQPJ86YrJC8C4qlP7gLUIZUojRgQNReiZ+0UoBE4oxXFMjiPkorMtY5wqODfvwenSyyKMFY1iND6rWet7p0tAEHQP0Nm5aIwq/j8HwLBUGSgaT4nJNUqhVZ32C2QrOI3iNEKRUpgihAGaQLiCSIF4ReWoqUY6DGxGsUlg1arNbGRaZe0eMk8SlMYvFRheO7PWjVJ5ZzrnfCcD8JOTMUkd/u8GYJpoyb25SgnXi3CzaEQowaqgHOEjMflrxkSOoJQ0JK8hPWiu6bQVoZuC7gJXAl0V1WDmK5iPMF88LM2YokpHpkmiT3GHKeQrgw8zJikXwLD50tvwUr76+rr7jZ80AIMXSrTu5zcCdwL7lRCCoj8gCDN0gyeXX69O1SfogT0J1PwEKRtBmARpGoHqw8ljJC8rSRtwz3Lp/7ts0bAKGLqJQxSdTKE3igEKoqu+1o3wmTL558qJamNyqvRB8VsMFmRMUvMABs+TzladoBXj1Nf/FQCMSJUrDMWDQAcFH5omu5XGe0A74CRwV8Z4Nf+czjHIEkCM3yRGCTEGROnq/DmLvNT+finY31Uf+tgMue6lrXW9X0ApaCnQT+BKBSFVFw4rxVzNZK5PZ6hSRPisvLhulMpLTpeOpkHE6omshwa0xB8jAEPSJFHBc5rCKiYvZUxQm4aly20ivAM4ET7TDe45U+uT0yVKhEQ0Wmsm4TXzig3A2j2SkE7hhMc6aR5sJTjQQuDL9yb32r1lTdifXvrYlTxmqnhNTISSKsF7vCbuMh+lJT7yT7kpOFlByapjxO0tpp/XoE1V9iUIS5TGQUwGicZbGePUv0d8IUk+jajVE9W6n9RMOHmuhCmNJ0whVmk8u3Kcyhq9UOxD0+TfItwMuJTirpXj1cfJKRI0PF36+qGdEoIUYFOYI1sT3j+GpJZBdIl00M6pE1nXu0KCgkCBw24Ns2pgrdT6te6NsNd+5sYqsW8v5NAr2zidU0p3FDeKcFrpfClwdfJ8aWFs4lVrXyzJC6RHxnVq208CgOR0uQW4yYTnV41T68+okwofnynFKIGDojFWPLiS58vVylfeRiSApBAcN7ahfY8oukY76KspAr5r1dg9gsQPh5N4rIwTf9vi25vpsvYTkylKyFEKm/Tk76qUJw0nbUd8IUnLr1d76+ufzoyyfjAABi+UaIufV0XYmbGF8WcKNOILiTQszAf6AxuUxt1K6IBuxqq/tn8wNj6hfPrsjNMxAQwH9Ka9/dJUdIzNG3fquS5xt954X9GGpEe27i+mv8DNaOzwO/jECneLnbZD5knF6onq6Hnf3pfINZD/gwEwLFWuF4PJuuLxZeNUdnUfME8SDI0VQDtN8ZnpY7aycFWbUJz3dNb6rM0c0ybt07cdFcd3Q9tOTXp3xyv64naXEx3bosnlT5n1GseO7qf/lf1Df92D/utOsPfZrWhuP10FksRkqa4Ypym6DEwV19oJqqTm87qgX5Mqzb6coI59r51w8kqxqGJeEEVRxhb+WrMZVtX8NUAn4H1RrOsQSuBDXRjSMZyxmsJaXlbC1GEJtEzsyJv/2fCDTAJdp/KYOqIVfQdfy7NvzK0+bwrmu1ms+WQ/3QXCAJcGN2BgWbGdZeeqnGHzZdTKsWpJU8qgNeWhUYslQkqYrWB+xnj1fM0CjUuXAMNCKtBJQUqonW9e7MtVbw/ixc4RTNIUVoCAwGDuffw1dmVuZH3G/B8EgDdeeBjTMHjgiem1haLQ7u7E0E+uxh/pYDsQZsAS00Kv5J70Oi8jk5yh6TLgeyn0iAWSlJwqc4akSeK513rPEOvQNFmQnCaSnCbpb+yQp8p8clTqSYZhyG3XdZLrB8eJ1+OW7zPt3bVFkjspeW/6Uxe8zxSRd3fLhuRU8VZ916JrPpP252mENHn8uyfM0iU5OU3mjV4oIXX2B2nyWnKayIj5svbbUzK/IYLYsXWdDOuEfDzzxe8VgLsm9ZDx/SLFXVHWoPt3FkrO8HQpqgIhe8h86XROXzh+SKr0/M5U0PA0GW4tK3wyOGfrDOf+jSF1gDNR4GGHTtbn19C8awTXNSTfLj0GcNWIibz/5jRcp/K+l1a8YuGn7N+9jYeffgu7o2Ej3s7hNH9jINkojgMJymRDcrokn7ke5WGBUtz4nQAwPE2GC9waULi/u453oWmRSeeg3wHhA02j4OPhxITaaNWYQjz05zdAYF1G+vcCQGH+CXr0TWbY6CmNeq5zOF1/2Z5vUBxQEBiUt2vFhLc35U56a8MOf8HG7cH5u64dvkBaXVYAhqfKEBPuc1i4F5QFwFQWZ03extSYK2B58ypOhTuIaKxAouNa8PGyg4y54dfnXzQ8cPrbyp8YlwWAG3/1MH+fvbJJz96exNhYBzsQVmt+N0r8zQS6CHTRvWVe0+CeywbA8HTpZWj8nmBuXTRGedxh8a9XhLR4VTT1KUDyLHEoJy8podNN7fimYzgdmyqUyOj4eq6Y4HFV/hB+6KQptBf70U7p2JRp1rLQaWJWICQg0uDhfb0TsZFfSIwXngnQuXnRMOVOXikObwm5JhxdcmuL7MkpYsuzMhlhSridzb/pxODv6JPBEVV72uIpwMidV3nGGoaWcOP3CkLrYLoMi2Pe5hxlqaNOfDN0Pv1Xwfomt4DeM8TqtTLdAvdVm+lcxAFoGnkgKt/OcKUxBgj45yDi1XfFrOp2COtU+VM6P5b0aHcGmxZ7mWmxuQS1F2SHIAc1C/MUTL2kFhAUzyuYvLpswllqAb0SANE4OTidnsogQjQmj23JmhDDlXwqr5zImGb8X0kFR3ZFjh7QdV7KfuJF59+rxqo3aswJ2jaUpNPqGE5ORdiRMUFtqkV5qUqrkkNh0YRYE661ahx5qBtXzXr9f7jp6jbMfusZvB73d//19kj0xNvRE29Ha3F2QFZ2bCOFuz+l+NDS7+zVecezeeLecdwxriu9i1eOtGq4lcnwIfMkocZt24f3pkejW0ByukQh9F81QT1SB+kYJhoet58edjvbPR6m3tOZrRaNNrfd9z+43eXMfnMaX3wwnfv+32uMmvirJn9kWUkRh/btoCDvGOVlxZiGgTMwGKczkBatk2iW0AbNtR78ZZW1KGoQWEPwlR3HXbgHW1D8ZRe8x11OyqxX+fDt51Cazp0PPkvPXlcFjN5DYdphWqC4HpgOoBQrBQYBWxpFxg1Ll2eC4MX0caq85vnJKWIrcHC7qRFlMXjXD390WBi9aAwdahi/2bdrCy/9+dfsz9pG+869ePz592jbsXuDPvDIgd0sTf2AtStSOXLgwjZxXbfQqWM7evdMYkRyf1r0+Q3KHklpzlo8rgNYnJGEtr3usgl/7Yo0XnnqLlynCxg68gYefupNwiJjADjt5vgNyzkoJvkEc1NG1YBFipmxaoL6VYMBGJYuYzA4tXKi2nge/5MqsSbcic5Jr8EcqyL3d13ZcWMi5xFQIsLy+R/z+vMPUlpymlETbuOex14hNDyqzgIcP3qQGa8+zuovv0DMxts1lKb45V2/545HXq5dDvdJMN2gB6HskU1TNyeO8sS94ziQtZ2kLr3543Pv1lmhHljL3B2nSBR4dNUEtbJKnikrx6kpZ+02otXl/KUBDEgRp0CzuoRfOfEiCkW8YbDVChN0RfGk1vStUyBKcfW4W0hZmc0v7vwjy+d/SvbBrDo/cP6cf/Hrid1ZteSzOoWv6ToRUXHExLckMDi0bnOMKfQZdH5tl9NbME98iRTvbHLND4+IISgkjKf/nsKMzzbV25pvbU+M0vAqmFKD0j5ek7BMn4+j3j7AbmMgQbxfX0FEo79mkm3qFGkmU0Y0J0tXNL9Q4R3OQH7z+xf5xa8fIyTs/Br47vQn+eid5887f+WgUQy55nr6DBxJbLNWKHVWSxa7TrE/axub1y3jq+XzyD6YRc/+w+l2ZXLjpev3gsV2wVusNjv/mJ1x0ayujKafVZHhUfRNnithGZOUS1NsFugNHAJwKuxUudvXAmBgqgSbGkdWD1P+egwvQZQQLFBs86FMnavv7EiDXfjqEn7KrFfPE377Tj25/8/TuaL34Avm1av/CHr1H8Hdj/6VzE2rCQyq0TJMH+RtAM2KihyAJl5Eq6PiuQ5T+t51+ALjsLfqT8DIZ0HTmtxSNIXlqjhKMo4Rr2AE8LloZCo/I6s1g6fuFqAFGjhXj1P1R5WU0kMJ2QCGheFhdnbGOoltamEzN69hxqu1qfN+Q8bwxsdfXVD4daUr+gypVy0oWxjYY1DWkHN1FmTNozy+M+VdhlBqFOCaMZjTsyfjP7y+ySCMSSAe8Boalc2xjP2mOktKWrW6HQ20pZkU1Jfp6IUSguA3tcoJtzIZOiaB0qYW0jQMpj97P6ZxllTr1X8Ez705r8G08IV7ZAtE9oDwrvXfszedshN7MOI7AOALbUZZt5F4midQuup/yH//Bjy7Gm+h6xVND4uiTKt0jSRjiirVwHlmFOm31M06WC40W/MIPXCzBQeJojAFBoxv3XSXkWULPubgnszq4+DQCP704mwsFuulCV78YFZpUEvAWcpC/JinNqJsYRT5Y9i/IZ3cfevJ37sJX2gkNpuV8NBg4uMiad48BqPtIKzFJyjbOpOib2YR3GkMzr6/bhhjonC0CSNv72muGJkuHZeOU9Ujj+IQguweyhpFxvVOlwBDkFVTVOnQdHEgBNl1fLHOSkqiKWnuv/9Z6/iOB/5CVGzzS674Zv4apLQyOkmLHowK7lB1wc/GFSn8Z+5KMjN3XnCY63TY6ZjUin5XdqFv906ElORSfGIDJR8sJqTbDTh6/uKi5RgQjWNfIYZXkQxkiapsAT6DYDOEokbR0QHQ0YAdZ4BS0KZdCCeaKqSjh/aQlXnW3zUgKOSSZssXSz6vhxeeuIsnnn6d7du+vegco8LtYWvmXt55dy6rN+7EHdMeHT8S1wxXbgb5H/4C39FvLphHvxiamQpDhG4ASqiYnCK6CeHR+eePgC7QAkQpIWzNOHW6Rt+VMDCu6X5E33xV22tj+OipBAQGXxZhK6WfsRVV16m//+Vevkz7d635Sdeu3YjWSwmIqyQNS0rLyD2Wz6Hs4xj+yn4pMMDJ4KsqO3ZPRGusJXkoDbyJnTi1/h84vw4ldNLroJ0viqRQOipFFpB0ZryVD07NT0h9gYF1CvTqdBIMk9wa02VBI/rKaKKaKqRvt66tddytz+UzH6joIajoIdXH+7O2seiLWdXHfXp259HHniA+Pp4Ti17FaF/bdl5e4WbL9j1s2rybhBax2G1n5we+4Bh0dxE2Vw7eZkmU+91437+eiDEvoMfV7ux1DUeIlfJiLy2SZ4nDVPjsFgK8Wv2apk4ADGhffILVtT5SiE4Mbpytt2Y6dzbcpUfT3GjchfswvSXojjDsYW1qXTu14wMMTxErl571pQ0KCOCZ51/C6XRinDqEFhzAuYbNAKeDQf27M6h/3UNawxEKKGynj+INT8Cb1Jv8L6cR2m0yzh61qf8YB95iL7qKpK0Ifr+DYAz8DaajJ6eIDeDcEE5dR7do2JsKwPGjB2upg/jmiU1jSo+tw3UgnfIT5+tjv/s0fncheSeqGy8tWrbE6aw0YRdvW4wvrkOT3ms4QjCcIdhclXkbid0oykqjbOOsWvclhqBVcWztAAwvzUwfpxoMwPEAWig/h8+honWR+lFsyPjfXVFWqwPW9Mtv3bIFNcMWnEBQjdlxbk4uHo8bTBOf99Ji8AxHKKbNgaWs0hfXaJFESU4GxYufqr6nZTCBCjRTiFGKQA0CNGv9zrvnqSAdmkf62Hh+t4xLqqC9upsNw187xnn8L+7hkaffrlttuMsROWs8DQoOa7IQIrvcWpmXOt8CGt5xMhheOsdvYF7VuZLSEv7xj79zb3I7jFadLhlkf0Ak1uITHM7ay5Ovfnz2wiPPAfC7WZlAN5QiBiEIDUfyWAozGtYCRCmw+wo2fjTx7Q2ZE9/a8OyZTlhMigwTz5kmcR6SFyC2bPbaNIjffwkB6kpHISh/KfiKzv7ED34PZM5myNjJxETHVD+yePEiHnrtAzZ8m41hXno4sC8kDoe/pO75xJrnWldJKEYUEZi4LxSDXKsFDF5IlDI5LUp1USKdDYujoKr2mwgej8Fxi0brZd82ToAWixWHM7BaDZUWuxr3xd5CEANR1kqOpyIHs6A2b6OFXQkHMiC+A3almPaXZ/jDY7+nvKzynYfzinj9nRQiwkMYPqQPw4b0IjQkqMkgxHXpxWcvhOCOru0muj8rv6hK2lFKiNNsHL0gkVerpvqI93s4hqan+QIiT/sCooKqxqGiwOfycbKpBQ4OPRv25XGX4/N6GjHT/aqS2y/cVM/QqAj2zodmHatVU6dOnXn7rRl06FDbVanwdDGfpa7gwcf/zjvvzuXQkWNNbIkKb2iz6k757GmbW4GhhAiBQKOU7AYDYGhE6BHkp/62z5/KI9p94g5pHjQsVTpg4EZhFFTQZOfN8MjaBOqhfTsuT89bfBLysiC27XmXWrZsyduvT+fhCb1JbFXbY8PwG3y1YTtPPTeT516axZbtexo/uLAFVgrRe3aSW64HlCqoUOBU4M2YokobDICYqIwqu4Cq9PHHhAla5UIZlmNlHG+qnDp07VPreHdmI8JwraFgi0DZzqGW8/ZC2TGIqN8IX/rNHPpeey3PPvkbnnniboYO6onNVpv8y9p3hNf++QmvvfkJ5RWN8+rwhjXHVlzZiixuF4UB7Q4KlJtCNIr9F7UlnPkzTURTGtXKvd1RVlIZ0TjeVBxDYd1f1PQW0Ll7/1rHWzYsb7jBI2YoWvy1qIhKK6jowagTx1AhzVGxvVABrRC9TnsH5cUnMavY1jaJzbn7VxN4/W+PMPX6q4kMr23m3LJtD8+//D5er6+RILTA5spFHT/M2sipG4ASTSNMGuAVUQ3AmuWEo6juHWf+VvkQlgARGrQX0DNP1T+huFjq2vOqWsfrVqRxKr8JDSp/F2rvfFTClajQjihni8qf7jx/tHJkM4SfT94GBQUwbvQgXnvhQaZMGlGLejhy9ATpi75qnCqyOFCmD79Yjd1uZ4VoVJhCgGayq8EAGD6CTX9tytTUSamiJiYqsB0oodxtNK0jbtE6iXYde9Qaip5LT5+tUqeh7NDZn1EOhhd2poBrN8S0bZAJ0bVvHf6o+ulu3aIzfsxgnnzs9lpqafW6xocFe8MS8LqNUkzQIECDALGwucEAmAZOo0YLAFg9Vu0W2KiEAYpKm+bxCpoctDzxlt/VOv7Pe6+wP+v87KQ8G7NgffVP9s2HnR9DRCwExzRwxlSBmA1bmSyxdTNGX3OWmzpVWERFI/sCS1kBJSGdjlT1pWGi8EWXXTx8tRoAXbCtnXC+uVHXmQVgSKVr4o5CmrySyKgJt9G8ZbuzMvJ5ee4PN1NYUI+ZoeAQ6tA6sJqVtV413HBeunkuRssuDb4/Pra284ApjXOFtx7OZH3XaXPFJEIUIUDhnCnKaLgK0jDrWphixRjWCOzXNKJNIfTLoxxpKgAWq41H//IOqob6OHJgNw/cMojc7KoBgwjkbEEdWQ+aF4luAVZH40m74lOYF3E7qZlycs+OLxx2G4EBzsZNCywBsuKkJU9pODGIEhqmqs+2AAOzngmHaML7CH6lMXRHIeUl3nPIukakXv1HcPv902qdO5Z9gDvHd2Xmn2+gZMPbqIAAiL8CFdQCZYtEaeeTsH6/j127dpK1+/wGmZ46j3U7D2IYDYuoyT56guWrzk7yrujarnEkYP5hPK1HHs8rIxQ4qTRClFx4BnweFaEM6lV6UR7m5zs5AfRAsXaXi4x+MdzeVBBuu/cpKspK+fTdl852Yh4Pn3zxBSmpqXTp0pUePXoSGxtLWGgYcApXkYvCwlOcPn2aPXuy2Lt3Lz6fjylTptKxU22Sbd+W1aSv3kzgsl307JZE506JtE6IIzoqHKfTjuE3KCop42ReIZu2ZbFy9ebqoaeuaYwbPahxLfvEPr4eO+sLthFnCLGa4pSCkkYB4HPWbbMEmDNFeZPTZSbC0yYMm3eEJf0u0hd6PW4++d+/0a5jDwaOmFDFQRRD7jfgLeG3o7uRGHQfr787m7LSs1S1YRhkZm4nM3N70xnLispvLyur4KsN2/lqw9m8lKYQs279rjTF7bdcV2vWXOH2sGffEXp0S6p7JOUrxxaeyEd7KVMKlwb3A6eFhjmvVQPgL+bC5EwQ71DM4yjafX2czNMessLtdceErUp/n3+88CiuIhe3Tp7MwHgPGG6w6BDaAgIigUhGTmxFnyEj+fiTj1i4YAEVFRWN07uaRljY+dR2YlwoAU5HnbPa+oTfLD6KX04dTbcutSmNNWu38cGni2jfNoG7fjWe5vHRta7bd6/BddOKPcfW4jAhFHCgyDFpmANDNaneO10CNp/jln5uGpouC5VJm0BKnX8IWHIwOUFPxnBXEmCmwZGj2bz81v+yc98BWrZqyeN//BOdOzdsJOLxuNm4cSPbt2/j4MGDuFwuiopcFBUX4XA4seg6ERGRxMTE0KplK9onJdGnTx/Cw88PyjyxdDplzTvw7c797Nx9iNzj+ZzMK8Tj8VHuduOw2XA47cRGR9AyIZY+PTrSMak1mna+jUFE2LhpF+//ewFl5RUM7HcFt0wdRXBQAHrZaUJLiuWZVu/965uT7PIL92iKr0VIUhr/WjlWvddgAOpzn66ZktPkDxoM1MTbv4slu/CVHsfbWjTsJSXFzJw5gwUL5xMYGMT9v7ufkSOvreVY+32mE0unY7Tpdlnz9Hi9pC5Yw4Ila9F1nRsnDOP6mCKyp6z75JGvtW+VSXNR3GFzu54ydfutFl/FGwOyImZPu0iYUrUKatDCpUKGqYg1lK3NPl98wsbCwgMDozydZ73/HosXL+Lmm27hl7+8DbvdwQ+bLj/wdpuNKZNGMGxQL979MJ2P5ywl8b67i6Zv1dYhmMB9CmYGFuz5W5Vc39sWap8LuC5bSavW10w1DVJ03Xi+uZzU3ut1MLqirMjqdlcQExPLjyHlL38Hb6uk7+4FhsHx1UvMlGs2PvxNAYUKJogwHgvtwg5vPMyZxac89vB5j/R0NZiOvliaM0UZAid9XpYj+to8M8ox80BEXkhIyI9G+AB253e74plz51LZPPKzF7YUsEmZtBRhLIp3KlfklVwgD+GkR/eYl72tDkuXEQgdxMpC8bIkkPKYvyV9a3YN80b8WAAwDm/kVOEBfCFxlz1v28HNbHWOWPHXwId+rwzaCkxDEeXU6dCUpY8bHZWwcjMrgf4Zo9VhCzxboZzlL+xt7Sv3qYofCwB6dBu00tOXPV/L6aPs8bXe96LzoRcsQjHCDUBXJTzU1HWnGx8WMk2ZArlXp0vL5RPUR6A+P0mUenF7UK78GBZzAFBWxDAuL6gVJRzM9uQ+Ff36g1FjyfDDJNG4EVi1crxKaWq+TYrL0U0+9MMdAA4Lj5mavnOddAualdm0ha8vyU2lrvxyt2NGXL5YYc1TYe7bnXviz60+/E20hy/z0+iJyWMiVFgUt11S3k15aPlEtUtB7OQU0ReNUR6Lg9tNpbs+qehrT93rb/SGCM899yzT/vL0ZRNYac5u/IH1h6aapsniZRvYmrn34v2Jz+vZvuPE8RcTZt4jm1maX4YVxf+KIkaDO2uuFPm9AVBZMmbnORkDsOwalW36uNOv2TxvFg801h4oOtrQbLJ272b16gzatml7eaRvmngqii6soZRi1dqt/Gt2Kn5//R6X5adPFW7a4cqb0fzlu8szgxdkPI0hUaQA3RW8u3K8+vySW1dTH1w5UW3UhGo/71XXq/Wm4n6/2Jh2alTZjv3HsrmIUUNEePmVlwgLC+cXv7jpssi/6Kt3MVt3vSgAv71jIsUlZaTVY//NOXLi6LrsgILprd6cMG9yzKKMaco/NJ3pShgHbKeABy6LervE+eZXyalS7W+yepxaaJg84cMa8MjpycXb9ufn4KufXlq6dDEHDx7g0Uf/gNVqveSPKft2MRWawrRd3JjSumU8/Xp3IW3hGlyus8xxhc9wbco8tn9rcfPD77d9cdTqCWpr1fD7TwoeUIqDaNyacYdy/+AArBivVkBtRnT1RPWxUjzjRwv8Q9ENheuP23dSdKxO8u2tN9+kQ8eODBp06cEaJRvnUOI6ihHXpsHP3HbTaFCK2Z8uwjQxdhdUbFuXWVp8yN593udRT47LGF05qEhOlWkivKAUuUrn4Yyx6jJ5lV0iAABYyTh3obqM8epdBY/4BdsTJ5P5oHTgEk4eEIyzjPes92dRUlrK43/806WNePIPULDoNUrtghEUwp5tAAAGFUlEQVTfuH4kNCSICdcOlm+27OLTpbuzj+Yq+9Ko+6Y+ctd9f1w2RRVNThHb0HR5F8XTqnJ2+4IdLutaOJcMQMYYlaM4P3Bj5XiVqsPvBDyzjrVo9Uf37Z8ZbvGRtx8xDfZk7ebaa68lMbFpgRpSWsDhea+ya+3nFLfqjBnUuOgpQ/DtK2Knpe2V3wQEBvuz9mXvndPmr/3/fWv7DaBkxBcSme9giRLuFDhqKl71CvMWjVGeywnAZaENe88Qa3ASel3bTA1Lky6m8A8NWkY5OfLWAHfXqJzF8Xhd+MJaYLU1LujGvfNLinN3IhaNl+fvYPO2LB6+Zyp9ejXM97/Yy6k9xWp/ToEhTrc3xir+bZ9y3UOLHhxWPXyu2tEpDUgEtuuK9/zC+lXjVb1hkpPXiXPOANwN2vum5uz6cgBQFc5UazY16c31d5tK3a+OblSGxfppSXyv6Hw319y00pH7SPeJ+8e08wy2HvwSXLkQFg22+iMmPftWU3J0J4a3FIlvjdHmiipScjuqAXWo2MupI6VyZF+pPd/qKmtpFSMyFHP9+63/duOKcSoXXqlZYW4Qk1lAMDBfUyzwC0dWjaNO1+wRqRLr0wgpdZHdWOFfNgDqVBGailPCFSgQ3XFUabwlgssPo17eSvS8w/aFL/Yd2zPCQTzHt4DrEHiLICwebEF49iynJGcvhq8EiWuF0bJhsV0iSsp8RmF+hco/WqEV5FQEFIeUF7XSff6wEMo1V0DCix9FPTC3chn6s04BoxZLhMfD6wK3AB4NnhfIFsEV42b5ucIdtVji3T76i5/M1RNUk3dw/X428xTApLmC40pYampcta+ITpOXU9E1gmVjE3odbxbbKzTMSnRwwdfxLH0lzlecazWtNt0SGIy3yivaFIVflN8veH2GuCt8ZoAgjv2FnoPuE/qJ0369zFviDQ7weqNElNUUPTpez7PkWdu/lt7s7qUZ33KMB5QJD57L8I7xeJlJ5RI8ezTFg6aQgOC3eFhSM8Z3SJokaopRHi85MW7SGuJ89Z33AXWlsW+va25VeksA5fcf87W6Kr9IiNUgVkFzEwYqoYdSJImiWAmrlWKbSG3/pK5Fa1t1KF07yO4rDfbruq5M06LhtyKK/VnbA0+dyHW069anMDK2ebkhyuO3Bm/7Kvz6uSedrY7iI+fMHmF1qo8vJNLQmY7iFgBRvKdrPGOYDFeg42Vxxg0qh2miDe3JUKUxVAnfSjCpGfUs7/OjAaAhaViqdFBWhpsmvUUYqIQSEZYpja+ViWmCXemV1iUBQ4zKEF8d/GiUmVBuMSnzaVSIjiuutGHugANSxOmw84Ao/h8QjuKAMnlI9/CVz8F4FA5lshIbfs3HOEORAKzvcIz5My/zDqw/+FaGk1NEL7TTxdRJEJP2UrmXZJgSFioL86PK2HSpzfwslS7a0J7coBR/qxrhVCC8FHpqawp+6eBxxPT1RLQoEUFTQrypOGwoPv9qbP3b4/7kAagBhC3PQXdlEmqCTdO5AhihBBuQgcY63c6GZdeooqYIflgvxgk8D3Sp6pVSLRq/17yU2gp3vWLxlvxSlGYUt7hyughzko6zeeb3sN/wj2472+SVYtErSPL7aC46OVYDq0+nj2bSTaCzUvgQdgBZunDEp5FjmJw4d3MdgIGpEmxT3GTCQwo6V53erjRWmIIPE4umKA3M29XO4i25GVT5vPv6BX6f3/sj3lFb1NXpJPhMOugKwzQ4yHZyPP0JsfvoDMQBsUqIEUUMEKZMSkRRpiBUoBuKrggOQFDsBP5jGqywKg4sn6CqvZcnvLOhsyZcIeCbd2//z38G4Jw0eqHYywxaIiRoGprh51iQjZyadthRiyXC42USMFVghKrc9rZQwQcoZmTUWMHqx5R+EgCcq6KC927/H01840CzidKDyyMSC3yOkK7KxFr1RZsVzAxSfJR+EXfLnwFoQprw1oZ/KqiOdyqN6ojfGbobWAUs1032+gTBxG+zUuaHcpuNitAi3HMmYzaFMviukoX/ghRQevz2tClhs3+KZdf+GwDQvUXHfqpl/2m2AI23BBZW61G/2vJTBeD/A62herFIRO47AAAAAElFTkSuQmCC);background-size:96px 96px}#home .footer{display:none}}@media screen and (min-width:768px) and (max-width:991px){#home .logo{height:144px;background-image:url(../img/logo_144px.png);background-size:144px 144px}#home .button{max-width:350px;margin-top:20px}}@media screen and (min-width:992px){#home .logo{height:200px;background-image:url(../img/logo_200px.png);background-size:200px 200px}#home .button{max-width:350px;margin-top:20px}.circle-bg-dark{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42MDgyNjEsIDAsIDAsIDAuNjA4MjYxLCAtMjAuMDg0OTc2LCAzLjI1NTczNikiPgogICAgPGc+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC43ODsiIGlkPSJwYXRoLTEwIiBkPSJNIDQxOS4xMzMgODUuNzM4IEMgNDE3LjI5NSA4NS43MzkgNDE1LjQ1NSA4NS43NTQgNDEzLjYxMSA4NS43NzggQyAzNTQuODUyIDg2LjU2MSAyOTkuMDIzIDk5LjE3NCAyNDguMzU4IDEyMS4zMiBDIDU4NC4xMjEgMTMuMjA2IDc5Ni4xNzUgMjExLjI2IDgzMS43IDUwOC43NzMgTCA4NDYuMzgzIDUwNy4xMjQgQyA4MTUuNTg2IDIzNS44MDEgNjUyLjQ3NyA4NS41ODggNDE5LjEzMyA4NS43MzggWiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjM3MywgMC4yNjY4NzgsIC0wLjI2Njg3OCwgMC45NjM3MywgODkuNTA1MjMxLCAtMTM2LjYxNTA2MSkiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDE7IiBpZD0icGF0aC0zIiBkPSJNIDE0Ni4wMzcgMTk0LjA2NSBDIDE0NC4yMDEgMTk0LjA2NiAxNDIuMzYxIDE5NC4wODEgMTQwLjUxNyAxOTQuMTA0IEMgODEuNzYgMTk0Ljg4OCAyNS45MzEgMjA3LjUwMyAtMjQuNzM2IDIyOS42NDggQyAzMTEuMDI5IDEyMS41MzEgNTIzLjA4MyAzMTkuNTgzIDU1OC42MDQgNjE3LjA5MyBMIDU3My4yODQgNjE1LjQ0MyBDIDU0Mi40OSAzNDQuMTIyIDM3OS4zODUgMTkzLjkxMyAxNDYuMDM3IDE5NC4wNjUgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMTgwOTg4LCAtMC45ODM0ODUsIDAuOTgzNDg1LCAtMC4xODA5ODgsIC0zOS4yOTg1ODEsIDcwNS44OTc1NDQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMSIgZD0iTSA0ODcuNzQ0IDE5My4wODQgQyA0ODUuOTA2IDE5My4wODUgNDg0LjA2NyAxOTMuMSA0ODIuMjIzIDE5My4xMjMgQyA0MjMuNDY0IDE5My45MDcgMzY3LjYzNSAyMDYuNTIgMzE2Ljk3NSAyMjguNjY4IEMgNjUyLjcyNiAxMjAuNTUyIDg2NC43NzUgMzE4LjYwNSA5MDAuMjk5IDYxNi4xMDkgTCA5MTQuOTc5IDYxNC40NiBDIDg4NC4xODQgMzQzLjE0NCA3MjEuMDgxIDE5Mi45MzUgNDg3Ljc0NCAxOTMuMDg0IFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE5OTk3LCAwLjc4NDYwNSwgLTAuNzg0NjA1LCAwLjYxOTk5NywgNTIzLjA2NzIzMSwgLTM0My4zMzE1MzkpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjg0OyIgaWQ9InBhdGgtMTIiIGQ9Ik0gMjk1Ljk2OSA0MzIuNzU3IEMgMjk0LjEzMSA0MzIuNzU4IDI5Mi4yOTMgNDMyLjc3MyAyOTAuNDQ5IDQzMi43OTcgQyAyMzEuNjg4IDQzMy41OCAxNzUuODYgNDQ2LjE5NCAxMjUuMTk4IDQ2OC4zNDEgQyA0NjAuOTU3IDM2MC4yMjYgNjczLjAwNSA1NTguMjggNzA4LjUyNiA4NTUuNzg2IEwgNzIzLjIwNyA4NTQuMTM5IEMgNjkyLjQxMiA1ODIuODE5IDUyOS4zMSA0MzIuNjA5IDI5NS45NjkgNDMyLjc1NyBaIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45Nzg4NDksIDAuMjA0NTg0LCAtMC4yMDQ1ODQsIC0wLjk3ODg0OSwgOTYzLjgyMDc5NiwgMTExNi4zNjcyOTMpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMyIgZD0iTSAxNTguMDM2IDE0OC44MyBDIDE1Ni4yIDE0OC44MzMgMTU0LjM2IDE0OC44NDYgMTUyLjUxNiAxNDguODcyIEMgOTMuNzU5IDE0OS42NTMgMzcuOTMgMTYyLjI2NyAtMTIuNzM0IDE4NC40MTEgQyAzMjMuMDIyIDc2LjMwMSA1MzUuMDc2IDI3NC4zNTIgNTcwLjYwNCA1NzEuODU3IEwgNTg1LjI4NiA1NzAuMjA4IEMgNTU0LjQ4MyAyOTguODkxIDM5MS4zOCAxNDguNjgzIDE1OC4wMzYgMTQ4LjgzIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM4NjE0LCAtMC45NDA5MjYsIDAuOTQwOTI2LCAwLjMzODYxNCwgLTExNS41OTUxNTgsIDQ4My43MDU5ODQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAxOyIgaWQ9InBhdGgtMTQiIGQ9Ik0gNTAxLjAxOSAyODguMjkyIEMgNDk5LjE4MSAyODguMjkzIDQ5Ny4zNCAyODguMzA4IDQ5NS40OTYgMjg4LjMzMSBDIDQzNi43MzYgMjg5LjExNSAzODAuOTA4IDMwMS43MjYgMzMwLjI0MyAzMjMuODc0IEMgNjY2LjAwNCAyMTUuNzU3IDg3OC4wNjIgNDEzLjgxMiA5MTMuNTg2IDcxMS4zMjIgTCA5MjguMjY4IDcwOS42NzMgQyA4OTcuNDY4IDQzOC4zNTIgNzM0LjM2MSAyODguMTQxIDUwMS4wMTkgMjg4LjI5MiBaIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2NDY1NiwgMC45ODYzNTEsIC0wLjk4NjM1MSwgMC4xNjQ2NTYsIDk4Mi44NTcyNjYsIC0yMzMuNDUyMDYzKSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC40OyIgaWQ9InBhdGgtMTUiIGQ9Ik0gMTkyLjk1NCAzNzYuNTIxIEMgMTkxLjExNSAzNzYuNTIyIDE4OS4yNzcgMzc2LjUzNyAxODcuNDMzIDM3Ni41NjEgQyAxMjguNjc0IDM3Ny4zNDQgNzIuODQ1IDM4OS45NTggMjIuMTgxIDQxMi4xMDMgQyAzNTcuOTQgMzAzLjk4OSA1NjkuOTg3IDUwMi4wNDUgNjA1LjUwNSA3OTkuNTUzIEwgNjIwLjE4OCA3OTcuOTA1IEMgNTg5LjM5MiA1MjYuNTg0IDQyNi4yOTUgMzc2LjM2OSAxOTIuOTU0IDM3Ni41MjEgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTMxNDA0LCAtMC4zNjM5ODgsIDAuMzYzOTg4LCAtMC45MzE0MDQsIDQxOS40OTkwMDYsIDExODIuNTk5ODA5KSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMTsiIGlkPSJwYXRoLTE2IiBkPSJNIDIyMS42MTQgNjMuOTczIEMgMjE5Ljc3NyA2My45NzYgMjE3LjkzOCA2My45OSAyMTYuMDk0IDY0LjAxNSBDIDE1Ny4zMzQgNjQuNzk1IDEwMS41MDYgNzcuNDA5IDUwLjg0MSA5OS41NTQgQyAzODYuNTk4IC04LjU1OSA1OTguNjUxIDE4OS40OTcgNjM0LjE3MyA0ODcuMDAxIEwgNjQ4Ljg1NCA0ODUuMzU0IEMgNjE4LjA1OCAyMTQuMDM3IDQ1NC45NTQgNjMuODI0IDIyMS42MTQgNjMuOTczIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwNDUyLCAtMC42NjA5MjUsIDAuNjYwOTI1LCAwLjc1MDQ1MiwgLTcwLjgwMzMyMiwgMjkwLjkyMDI3MykiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDAuNDsiIGlkPSJwYXRoLTE3IiBkPSJNIDQ0MS44ODggMzQyLjA5OCBDIDQ0MC4wNDcgMzQyLjA5OCA0MzguMjA3IDM0Mi4xMTQgNDM2LjM2MiAzNDIuMTM4IEMgMzc3LjYwMSAzNDIuOTIyIDMyMS43NjUgMzU1LjUzNSAyNzEuMTAzIDM3Ny42ODEgQyA2MDYuODg2IDI2OS41NjcgODE4Ljk0NCA0NjcuNjE1IDg1NC40NjIgNzY1LjEzMyBMIDg2OS4xNDIgNzYzLjQ4MyBDIDgzOC4zNTQgNDkyLjE1NCA2NzUuMjQyIDM0MS45NDggNDQxLjg4OCAzNDIuMDk4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjM1NjU4MiwgMC45MzQyNjQsIC0wLjkzNDI2NCwgLTAuMzU2NTgyLCAxMjU2Ljc1OTQ5MywgMTY5LjE4MjU1MikiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2MjQ5MywgMCwgMCwgMC43NjI0OTMsIDE5LjI5NDY0NywgLTcxNi4zMjI4MTUpIj4KICAgICAgICA8cGF0aCBkPSJNIDU2Ni40NjYgMTA4OS4xMzcgTCA1NjYuNDY2IDExNDguMjIyIEMgNTY1Ljg2NyAxMTQ4LjIxOSA1NjUuMjY3IDExNDguMjE3IDU2NC42NjcgMTE0OC4yMTcgQyA1NjEuNDgxIDExNDguMjE3IDU1OC4zMSAxMTQ4LjI1OSA1NTUuMTU0IDExNDguMzQxIEwgNTU1LjE1NCAxMDg5LjEzNyBaIE0gOTA4LjI5IDE0NzcuMTQ2IEwgOTU2Ljk4NyAxNDc3LjE0NiBMIDk1Ni45ODcgMTQ4OC40NTggTCA5MDguNTY5IDE0ODguNDU4IEMgOTA4LjUzOSAxNDg0LjY5MyA5MDguNDQ3IDE0ODAuOTIyIDkwOC4yOSAxNDc3LjE0NiBaIE0gNTY2LjQ2NiAxODM1LjAxMyBMIDU2Ni40NjYgMTg3Ni40NjcgTCA1NTUuMTU0IDE4NzYuNDY3IEwgNTU1LjE1NCAxODM0Ljg4NiBDIDU1OC4zMTggMTgzNC45NzMgNTYxLjQ5IDE4MzUuMDE3IDU2NC42NjcgMTgzNS4wMTcgQyA1NjUuMjY3IDE4MzUuMDE3IDU2NS44NjcgMTgzNS4wMTYgNTY2LjQ2NiAxODM1LjAxMyBaIE0gMjIwLjc3NSAxNDg4LjQ1OCBMIDE2OS42NTcgMTQ4OC40NTggTCAxNjkuNjU3IDE0NzcuMTQ2IEwgMjIxLjA4OSAxNDc3LjE0NiBDIDIyMC45MjEgMTQ4MC45MDkgMjIwLjgxNiAxNDg0LjY4IDIyMC43NzUgMTQ4OC40NTggWiIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgc3Ryb2tlOiBub25lOyIgYng6b3JpZ2luPSIwIDAiLz4KICAgICAgICA8cGF0aCBkPSJNIDc2MC4xMjEgMTE0My4zMTEgTCA3MTcuMzM2IDEyMTcuNDE3IEMgNzE1LjcyIDEyMTYuNTE4IDcxNC4wOTYgMTIxNS42MzIgNzEyLjQ2NSAxMjE0Ljc2MSBMIDc1NS4zMTggMTE0MC41MzcgWiBNIDgzMC4xMjIgMTMyNC4yMDMgTCA5MDAuNDI0IDEyODMuNjE0IEwgOTAzLjE5OCAxMjg4LjQxNyBMIDgzMy4wNCAxMzI4LjkyMyBDIDgzMi4wOCAxMzI3LjMzOSA4MzEuMTA3IDEzMjUuNzY2IDgzMC4xMjIgMTMyNC4yMDMgWiBNIDg0MC41OTkgMTY0MS4xMzcgTCA5MDMuMTk3IDE2NzcuMjc4IEwgOTAwLjQyNCAxNjgyLjA4MiBMIDgzNy45MTEgMTY0NS45OSBDIDgzOC44MjEgMTY0NC4zOCA4MzkuNzE3IDE2NDIuNzYyIDg0MC41OTkgMTY0MS4xMzcgWiBNIDcyNS4xNjggMTc2MS44NDMgTCA3NjAuMTIyIDE4MjIuMzg1IEwgNzU1LjMxOCAxODI1LjE1OCBMIDcyMC4zNzkgMTc2NC42NDEgQyA3MjEuOTg1IDE3NjMuNzIyIDcyMy41ODIgMTc2Mi43ODkgNzI1LjE2OCAxNzYxLjg0MyBaIE0gNDAzLjUzOCAxNzYwLjkzMiBMIDM2Ni40NTYgMTgyNS4xNTkgTCAzNjEuNjUzIDE4MjIuMzg2IEwgMzk4LjgwMiAxNzU4LjA0MiBDIDQwMC4zNzIgMTc1OS4wMTkgNDAxLjk1MSAxNzU5Ljk4MiA0MDMuNTM4IDE3NjAuOTMyIFogTSAyODkuNTggMTY0Mi42ODkgTCAyMjEuMzUgMTY4Mi4wODIgTCAyMTguNTc3IDE2NzcuMjc5IEwgMjg2Ljk0NCAxNjM3LjgwNyBDIDI4Ny44MDcgMTYzOS40MzcgMjg4LjY4NSAxNjQxLjA2NSAyODkuNTggMTY0Mi42ODkgWiBNIDI5NC4zNTQgMTMzMi4xNjggTCAyMTguNTc2IDEyODguNDE3IEwgMjIxLjM1IDEyODMuNjE0IEwgMjk3LjIxMyAxMzI3LjQxNCBDIDI5Ni4yNDYgMTMyOC45OSAyOTUuMjkzIDEzMzAuNTc1IDI5NC4zNTQgMTMzMi4xNjggWiBNIDQwNi4wNzkgMTIyMC4yNTkgTCAzNjEuNjUzIDExNDMuMzExIEwgMzY2LjQ1NyAxMTQwLjUzNyBMIDQxMC44ODkgMTIxNy40OTUgQyA0MDkuMjc2IDEyMTguNDAzIDQwNy42NzMgMTIxOS4zMjQgNDA2LjA3OSAxMjIwLjI1OSBaIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBzdHJva2U6IG5vbmU7IiBieDpvcmlnaW49IjAgMCIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdCB4PSI0MjkuMzY3IiB5PSI0MjUuOTc5IiB3aWR0aD0iMjAuMDAzIiBoZWlnaHQ9IjIxLjczNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTkxIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAwLjk5OTk5OSwgLTMwMS4zNzcwNzUsIC0yMTkuNDk4NDM0KSIvPgogICAgPHJlY3QgeD0iNDQ2Ljg1MyIgeT0iMjUuNDYyIiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05MyIvPgogICAgPHJlY3QgeD0iLTEzNS45NTYiIHk9IjYwNS4xNDEiIHdpZHRoPSIzOS44NTEiIGhlaWdodD0iMzkuODUxIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk5LCAwLCAwLCAxLCA4NDYuMTc2NzU2LCAtMzk0Ljk1NjAyNCkiLz4KICAgIDxyZWN0IHg9IjIyNS43NzkiIHk9IjY4OS44MzYiIHdpZHRoPSIyNS45OSIgaGVpZ2h0PSIyNS45OSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk1Ii8+CiAgICA8cmVjdCB4PSI1OTQuMDEzIiB5PSI3MzcuMTQyIiB3aWR0aD0iMjAuNzkyIiBoZWlnaHQ9IjIyLjUyNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk2Ii8+CiAgICA8cmVjdCB4PSIzODcuMjM1IiB5PSI0NzkuMzk3IiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05OCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDEsIDAsIDAsIDAuOTk5OTk5LCAzNjUuMjc0OTY2LCA3OS4yOTUyNDEpIi8+CiAgICA8cmVjdCB4PSI0MjEuOTYyIiB5PSI3NzUuOTM3IiB3aWR0aD0iMzIuOTIiIGhlaWdodD0iMzQuNjUzIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTkiLz4KICAgIDxyZWN0IHg9Ii02Ni45MzkiIHk9Ii01NjguOTc4IiB3aWR0aD0iMjAuODY3IiBoZWlnaHQ9IjIwLjc5MiIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTEwMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEsIDAsIDAsIDAuOTk5OTk3LCAzMS4zNTY5MjgsIDk4NC43MzYzMDYpIi8+CiAgPC9nPgo8L3N2Zz4=);background-repeat:no-repeat;background-position:-725px -145px;background-size:1024px 1024px}}.gray,.gray b,.popover-helptip .button-close,.popover-helptip .button-close b,.popover-share .bar-footer .button-close,.popover-share .bar-footer .button-close b,.popover-share .bar-header span,.popover-share .bar-header span b{color:grey!important}.gray a,.gray a:hover,.gray a:visited,.icon-help a,.icon-help a:hover,.icon-help a:visited,.popover-helptip .button-close a,.popover-helptip .button-close a:hover,.popover-helptip .button-close a:visited,.popover-share .bar-footer .button-close a,.popover-share .bar-footer .button-close a:hover,.popover-share .bar-footer .button-close a:visited,.popover-share .bar-header span a,.popover-share .bar-header span a:hover,.popover-share .bar-header span a:visited,.positive a,.positive a:hover,.positive a:visited,.text-editable:hover a,.text-editable:hover a:hover,.text-editable:hover a:visited{color:inherit}.popup-container.confirm .popup-head h1,.popup-container.confirm .popup-head h2,.popup-container.confirm .popup-head h3,.popup-container.confirm .popup-head h5,.popup-container.confirm .popup-head h6,.popup-container.confirm .popup-head p,.popup-container.warning .popup-head h1,.popup-container.warning .popup-head h2,.popup-container.warning .popup-head h3,.popup-container.warning .popup-head h5,.popup-container.warning .popup-head h6,.popup-container.warning .popup-head p,.refresher-dark-100-bg .scroll-refresher .ionic-refresher-content,.refresher-light .scroll-refresher .ionic-refresher-content,.refresher-positive-900-bg .scroll-refresher .ionic-refresher-content{color:#fff}.item a{text-decoration:none}.no-padding{padding:0!important}.avatar-member{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAQAAABpN6lAAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgBA0LKSJACf7RAAAFqElEQVR42u2dbUjdZRjGf+c4dTndFnO+TRcD3ZIxdVlJL2PSIHDZBqtRaINojWRrgR8a4fDbIOrzoIKIMay2iGpQsg0y4xRZIk5i1NTaik3TZeRcvmzl0wc7qTPz6Lnv5/kfz/86XzxyuM59Xf/r//o893MCBqtIoYgSSsgjndWkk8RV+v959dFPP9/wm82CAtYM2MCTPMZGgnN87iZNvMdH1mww+q8Es9e0m/nhhjltnjG361enL3+HOT9P8ZMYNC+YhFg2IN2cWbD4MNrN3bFqQIm5FLV8Y4wZMbtj0YBdZlhEvjHGjJsXY82A+8yomPwJ1OhUqnMazKOVTGHOUe7lW/lS5zorLwSJnBKXD0s5SUpsGHCAzQqsUMgr8qTyu8AqulmpYgCMcQd9spTyCahTkw/JHJCmlE5AIj2kqxkAA6xlWJJQOgEVqvJhFY/LEkobUKUqH2Cbtw0oVTdgqyyd7DEgiWES1C1YxyU5MtkEFFiQD/dLkskacKcF+ZAb7waIXmbHogEZ3jVANJyxaEDAigHJ8W6AKDRuh2MKfgJcF+AafgJ8A+IcfgJcF+AafgJcF+AafgJE2URvU2aFqM2SzwSXM8ASCwaMkc9lKTLJBNRbkQ/JvCRHJpeANPpZasUAuEa21PiQXAJ2WJMPy9ktRSVnwBPW5IPgCJScAXdZNSDHewbcsGpAmvcMGLVqgNhkGTkDfrVqQLv3DHjfqgGnpYjkrgMyuGLpQgigkO9liOQS0M+H1uS/JSVf9l5gBV9RaEH+TxRxTYpM8l5gkEcZUJc/zB45+dK3wz9QhW4LiuERQpKE0k+EzvKuqgENNMsSyj8SO6lqwFFpQvmpskv4kTwl+e3ydxzyCfhTfiv9i9flKTX6BVZymWUK8ofI4bo0qcZj8d85psAKDfLytRonC7ig8Ii8hA75UnUGRrr4RJyzRUO+3sjQq8J8hjqdQrUMCAkfsV/jM51C9Zqnl3GOfCGuixRpHABBc3D0D/bwlwiTYa+WfN3R4RZeFuFRiz9orx+QSEvUF6+K8Qft+QE3eSpqDsX4g40VJKL9AuU5B/4MEdcFuIZvgOsCXEPbgFQPMDg1INsDDL4BLg2IfqRIeaxJ24CdHmD4X+heCaZxNerJk2OsZkivRN0EVAvMHU2mWrNEzQSk0C1yCOslX3bViKnQTECt0BE8m1q9IvUSUEaz2NTJUcr5OrYMyKWVLEG+X7hHboL0VOjsArk0isqHLBp1WrM1DCijlU3irJtopcz7BqRwmGbhrR9GFs0cFl9PTHBpujRTY3qEF9GbiR5TY9K8tJxeKtlkU8hOHrLUMgNjNHGK7+ilN9pHpvMxYAXVPKu0Upwc2nmTtxmM+PMRRiXB7DcD6vGWwoDZH+lqtJEl4EGOUux6084THTzPF3N/bO6zQA4NhGJOPhQToiGCxoo5InLQDLnOc1QYMgcXvgsk8QZPu96QAjjGc7P3s8xuQAYf8IDr2oXwJbvon58BG2lkreu6BfEz2zkfuQEb+FxhYVy36GMrFyIzYB0h1riuVwFX2MLFW/858zSYR9OilA9raJo5i/nWBGQSosB1pYroYsv0lYmnJyDIiUUtHwo4MV3zdAPqKXddoTrKqZ/6duouUM6ncTFcPs62yb6TSQPS6ZBrSfY4eigOd7qGt3iA43EjH3I4Hp58FTZgHxWuq7KKCvZN/DGxC6TSveiu/OZCH/lcDyfgUNzJh0wOwUQCcujS+PEKz2OYAnqCwJG4lA8pHIGAKaI9Ls7+/4VxNgfMGR52XYdDnA0Yyz846DXEa/h9A3wDfAN8A3wDfAOAIL2uS3CK3iBtrmtwira4NyBg1nOO21zX4QgjlATp1OrMjwHU0RkwEOBjtruuxQEaqcQEAUMltYy4rscqRqilEjN1XGA9VZRSqt2k5By9tNHGO3ROvP0bpkYvBeY8k00AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDQtMTNUMTE6NDE6MzQrMDI6MDCAxbwoAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTEzVDExOjQxOjM0KzAyOjAw8ZgElAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=)}.avatar.disable{opacity:.7}.avatar-wallet{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAQAAABpN6lAAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgBA0JMBOJU4OdAAAB2klEQVR42u3au0ocUQCH8e+IxFRKUohrkG0Eu4BiLrCFDxDBNtjoI1gYTJnGQrRInc4HyBuopNHgBVZIwCJFsHBXLURtQiIyKYyFN3B3zJyd3e/X7e7MmXP+e26zOyBJkiRJkiRJkiRJkiRJkppVSF9E0sk0r+jKuOYnrLMQTqMHkHSzQTHS17fLy3CYroi21JWYj9Z8KDIfvwdUKAC7bGfc+CH6gGrojTyJJBemMr/u+4sLpy2njRZnAAZgAK2t/YHKGUzeZlzz5w2yFU6/EKVsQHAIGIABGIABGIABRN4ILbOVcc1fM9IQCfp7gHOAARiAAbgMXpuhH/GJ0brK/sG78OVfKR0cXPnsQ/iYkwAYY6LOM4eZpXR5q3/t77bH+RkCO5HObZQeEL4nQ7ypcwh8boIAIJQpuwoYQMsugwBJ/73L/h1+3vr+OYtXXn/Lzz7gCV8ZqOH4LUrhz4155IzJvA6B0VqaDwzHu7f/PwEsc1zT8RXWmmoOCJWkl9L95wBWbw6AvO8DfrHkMmgABmAABtDw0j8gUaWHeA9K7odC7GVwhXGgGOmB2ZX4PaDAJs8i9d89XoRq5AAgecoMg3Rm3PhTysyFIyRJkiRJkiRJkiRJkiRJku7wFyuiadmIs5Q9AAAAAElFTkSuQmCC)}.popup-container.confirm .popup,.popup-container.warning .popup{min-width:250px!important;width:350px!important}.popup-container.warning .popup-head{background-color:#ef473a}.popup-container.confirm .popup-head{background-color:#387ef5}body{--refresher-bg-height:100px;--refresher-background-color:inherit}.refresher-positive-900-bg{--refresher-background-color:#1A237E}.refresher-dark-100-bg{--refresher-background-color:#555}.platform-android .refresher-dark-100-bg:before,.platform-android .refresher-positive-900-bg:before{background-color:var(--refresher-background-color);position:absolute;display:block;top:0;width:100%;height:var(--refresher-bg-height,100px);z-index:-10;content:" "}.view-wallet .list .item span,.view-wallet-tx .list .item span{display:inline}.platform-android .scroll-refresher{z-index:50}.platform-ios .refresher-dark-100-bg,.platform-ios .refresher-positive-900-bg{background-color:var(--refresher-background-color)!important}.platform-ios .refresher-dark-100-bg .scroll,.platform-ios .refresher-positive-900-bg .scroll{background-color:#fff;bottom:auto;min-height:100%}.refresher-dark-100-bg .scroll-refresher .spinner,.refresher-light .scroll-refresher .spinner,.refresher-positive-900-bg .scroll-refresher .spinner{stroke:#fff;fill:#fff}.view-wallet{--refresher-bg-height:200px}.view-wallet .hero{height:200px}.view-wallet .qrcode{position:absolute;top:30px;padding:3px;background:#fff;width:90px;max-width:30%;right:-170px;-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.view-wallet .qrcode img{width:100%}.view-wallet .qrcode.on{right:30px}.view-wallet .qrcode.active{top:0!important;right:0!important;padding:10px;width:200px;max-width:50%}.popover-helptip .view-wallet .item h3 .button-close,.popover-share .bar-footer .view-wallet .item h3 .button-close,.popover-share .bar-header .view-wallet .item h3 span,.view-wallet .item h3 .gray,.view-wallet .item h3 .popover-helptip .button-close,.view-wallet .item h3 .popover-share .bar-footer .button-close,.view-wallet .item h3 .popover-share .bar-header span{font-size:11px!important}.view-wallet .item-divider .badge{top:16px!important}.view-wallet .item.item-wallet-event{padding-top:5px;padding-bottom:5px;min-height:30px;max-height:auto;height:auto}.view-wallet .item.item-wallet-event:last-child{min-height:48px}#menu .footer .view-wallet .item.item-icon-left.item-wallet-event .icon-help,.view-wallet .item.item-icon-left.item-wallet-event #menu .footer .icon-help,.view-wallet .item.item-icon-left.item-wallet-event .icon,.view-wallet .item.item-icon-left.item-wallet-event .icon-alert,.view-wallet .item.item-icon-left.item-wallet-event .icon-help{font-size:17px;height:18px;top:6px}.popover-wallet-actions{height:400px}@media screen and (max-width:991px){.view-wallet .qrcode{top:8px;width:60px;max-width:30%}.view-wallet .qrcode.on{right:8px}.view-wallet .hero.hero-qrcode-active h1,.view-wallet .hero.hero-qrcode-active h2,.view-wallet .hero.hero-qrcode-active h3,.view-wallet .hero.hero-qrcode-active h4,.view-wallet .hero.hero-qrcode-active h5,.view-wallet .hero.hero-qrcode-active i{margin-right:200px}.view-wallet-tx{--refresher-bg-height:100px}.view-wallet-tx .hero{height:100px}}@media screen and (min-width:992px){.view-wallet-tx{--refresher-bg-height:140px}.view-wallet-tx .hero{height:140px}}.popover-helptip .view-wallet-tx .item h3 .button-close,.popover-share .bar-footer .view-wallet-tx .item h3 .button-close,.popover-share .bar-header .view-wallet-tx .item h3 span,.view-wallet-tx .item h3 .gray,.view-wallet-tx .item h3 .popover-helptip .button-close,.view-wallet-tx .item h3 .popover-share .bar-footer .button-close,.view-wallet-tx .item h3 .popover-share .bar-header span{font-size:11px!important}.view-wallet-tx .item-divider .badge{top:16px!important}.stable-100-bg{background-color:#f2f2f2!important}.item-tx .badge-energized{background-color:rgba(255,201,0,.3);color:#888!important}.view-identity{--refresher-bg-height:200px;--refresher-background-color:#555}.view-identity .member{--refresher-background-color:#1A237E}.view-identity .hero{height:200px;background-color:var(--refresher-background-color)}.card .card-header{font-size:90%;opacity:.8;filter:alpha(opacity=80);padding-top:5px!important;padding-bottom:0!important;min-height:25px}.card .stable-900-bg,.card.stable-900-bg,.item .stable-900-bg,.item-complex .item-content .stable-900-bg,.item-radio .item-content .stable-900-bg,.item.stable-900-bg{background-color:#e0e0e0!important}.card .item{background:inherit}.card .stable-bg,.card.stable-bg,.item .stable-bg,.item-complex .item-content .stable-bg,.item-radio .item-content .stable-bg,.item.stable-bg{background-color:#f8f8f8!important}.card .item .card-footer{margin-bottom:5px}.card .card-avatar .avatar,.card.card-avatar .avatar{box-shadow:0 3px 4px 0 rgba(0,0,0,.26);top:7px;background-color:#D9D9D9}.card .card-avatar img.avatar,.card.card-avatar img.avatar{border:0;min-height:54px;min-width:54px}.card .card-avatar .item.item-avatar,.card.card-avatar .item.item-avatar{padding-top:10px;padding-bottom:2px;min-height:45px!important}.card .card-avatar .card-footer,.card.card-avatar .card-footer{padding-left:88px;overflow:hidden}#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-center.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-right.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-center.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-right.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-center.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-center.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-center.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-center.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-right.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon.icon-bottom-center a,.card .card-avatar .card-footer .popover-helptip .icon.icon-bottom-right a,.card .card-avatar .card-footer .popover-helptip .icon.icon-center a,.card .card-avatar .card-footer .popover-helptip .icon.icon-right a,.card .card-avatar .card-footer .pull-right a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-center.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-center.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-center.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-center.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-right.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon.icon-bottom-center a,.card.card-avatar .card-footer .popover-helptip .icon.icon-bottom-right a,.card.card-avatar .card-footer .popover-helptip .icon.icon-center a,.card.card-avatar .card-footer .popover-helptip .icon.icon-right a,.card.card-avatar .card-footer .pull-right a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-center.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-right.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-center.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-center.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-center.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-right.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon.icon-bottom-center a,.popover-helptip .card .card-avatar .card-footer .icon.icon-bottom-right a,.popover-helptip .card .card-avatar .card-footer .icon.icon-center a,.popover-helptip .card .card-avatar .card-footer .icon.icon-right a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-center.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-center.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-right.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon.icon-bottom-center a,.popover-helptip .card.card-avatar .card-footer .icon.icon-bottom-right a,.popover-helptip .card.card-avatar .card-footer .icon.icon-center a,.popover-helptip .card.card-avatar .card-footer .icon.icon-right a{margin-right:8px}.a.underline:active,.underline a:active,.underline a:focus,.underline a:hover,a.underline:focus,a.underline:hover{outline:1px!important;text-decoration:underline!important}.card-avatar-small .card,.card-avatar-small .card .card-avatar,.card-avatar-small .card.card-avatar,.card-avatar-small.card{min-height:45px}.card-avatar-small .card .avatar,.card-avatar-small .card .card-avatar .avatar,.card-avatar-small .card .card-avatar .item-avatar .avatar,.card-avatar-small .card .item-avatar .avatar,.card-avatar-small .card.card-avatar .avatar,.card-avatar-small .card.card-avatar .item-avatar .avatar,.card-avatar-small.card .avatar,.card-avatar-small.card .item-avatar .avatar{box-shadow:0 2px 2px 0 rgba(0,0,0,.26);height:30px!important;width:30px!important;left:5px!important}.card-avatar-small .card .card-avatar .item.item-avatar,.card-avatar-small .card .item.item-avatar,.card-avatar-small .card.card-avatar .item.item-avatar,.card-avatar-small.card .item.item-avatar{min-height:25px!important;padding-left:42px!important}.card-avatar-small .card .card-avatar .card-footer,.card-avatar-small .card .card-footer,.card-avatar-small .card.card-avatar .card-footer,.card-avatar-small.card .card-footer{padding-top:0;padding-left:42px!important}.gallery .card-gallery,.gallery .card.card-gallery{margin-bottom:15px!important;float:left;display:block}.gallery .card-gallery img,.gallery .card.card-gallery img{max-height:150px}.gallery .card-gallery-new{max-height:199px}.list .item.text-left{text-align:left!important}.list .item.large-button-bar,.list .item.text-center{text-align:center!important}.list .item.text-right{text-align:right!important}.list .item-divider.item-divider-top-border{border-top:solid 1px rgba(0,0,0,.12)}.lookupForm .list .item.item-avatar{min-height:80px!important}.lookupForm .list .item.item-avatar.item-checkbox .item-content{padding-left:47px;min-height:auto!important;height:auto!important}.fade-in{opacity:0;filter:alpha(opacity=0);-webkit-transform:translate3d(-30px,1px,0);-webkit-transition:all 1s ease-in-out}.fade-in.on{opacity:1;filter:alpha(opacity=100);-webkit-transform:translate3d(0,0,0)}.item-avatar{min-height:80px!important}.item-avatar .item-content i.item-image:first-child,.item-avatar .item-content img.item-image:first-child,.item-avatar .item-content>i:first-child,.item-avatar .item-content>img:first-child,.item-avatar i.item-image:first-child,.item-avatar img.item-image:first-child,.item-avatar-left .item-content i.item-image:first-child,.item-avatar-left .item-content img.item-image:first-child,.item-avatar-left .item-content>i:first-child,.item-avatar-left .item-content>img:first-child,.item-avatar-left i.item-image:first-child,.item-avatar-left img.item-image:first-child,.item-avatar-left>i:first-child,.item-avatar-left>img:first-child,.item-avatar>i:first-child,.item-avatar>img:first-child{color:#D9D9D9;background-color:#f8f8f8;border:1px solid #D9D9D9;overflow:hidden!important;font-size:45px!important;line-height:56px;width:100%!important;max-height:56px!important;max-width:56px!important;top:12px!important}#menu .footer .item-avatar .item-content>.icon-help:first-child:before,#menu .footer .item-avatar .item-image.icon-help:first-child:before,#menu .footer .item-avatar.item-icon-right .icon-help:first-child:before,#menu .footer .item-avatar>.icon-help:first-child:before,.item-avatar #menu .footer .item-content>.icon-help:first-child:before,.item-avatar #menu .footer .item-image.icon-help:first-child:before,.item-avatar .icon.item-image:first-child:before,.item-avatar .item-content>.icon-alert:first-child:before,.item-avatar .item-content>.icon-help:first-child:before,.item-avatar .item-content>.icon:first-child:before,.item-avatar .item-image.icon-alert:first-child:before,.item-avatar .item-image.icon-help:first-child:before,.item-avatar.item-icon-right #menu .footer .icon-help:first-child:before,.item-avatar.item-icon-right .icon-alert:first-child:before,.item-avatar.item-icon-right .icon-help:first-child:before,.item-avatar.item-icon-right .icon:first-child:before,.item-avatar>.icon-alert:first-child:before,.item-avatar>.icon-help:first-child:before,.item-avatar>.icon:first-child:before{width:56px!important}#menu .footer .item-avatar.item-icon-right .icon-help:last-child,#menu .footer .item-avatar.item-icon-right.ink .ion-ios-arrow-right.icon-help,.item-avatar.item-icon-right #menu .footer .icon-help:last-child,.item-avatar.item-icon-right .icon-alert:last-child,.item-avatar.item-icon-right .icon-help:last-child,.item-avatar.item-icon-right .icon:last-child,.item-avatar.item-icon-right.ink #menu .footer .ion-ios-arrow-right.icon-help,.item-avatar.item-icon-right.ink .icon.ion-ios-arrow-right,.item-avatar.item-icon-right.ink .ion-ios-arrow-right.icon-alert,.item-avatar.item-icon-right.ink .ion-ios-arrow-right.icon-help{left:auto}.item.item-icon-left>i.avatar:first-child{position:absolute;display:flex;height:100%;align-items:center;font-size:16px;left:16px;top:8px;max-height:32px;max-width:32px}.item.item-checkbox.item-avatar * .item-content>i.avatar:first-child,.item.item-checkbox.item-avatar * .item-content>i.item-image:first-child,.item.item-checkbox.item-avatar *>i.avatar:first-child,.item.item-checkbox.item-avatar *>i.item-image:first-child,.item.item-checkbox.item-avatar .item-content>i.avatar:first-child,.item.item-checkbox.item-avatar .item-content>i.item-image:first-child,.item.item-checkbox.item-avatar>i.avatar:first-child,.item.item-checkbox.item-avatar>i.item-image:first-child{left:65px}.item.item-checkbox .item-content .item-avatar,.item.item-checkbox.item-avatar .item-content{padding-left:65px}#menu .footer .item-icon-left.item-icon-right.ink .ion-ios-arrow-right.icon-help,.item-icon-left.item-icon-right.ink #menu .footer .ion-ios-arrow-right.icon-help,.item-icon-left.item-icon-right.ink .icon.ion-ios-arrow-right,.item-icon-left.item-icon-right.ink .ion-ios-arrow-right.icon-alert,.item-icon-left.item-icon-right.ink .ion-ios-arrow-right.icon-help{left:auto}@media screen and (max-width:767px){#menu .footer .item.item-icon-right>.icon-help:last-child,#menu .footer .item.item-icon-right>.ion-ios-arrow-right.icon-help,.item.item-icon-right>.icon-alert:last-child,.item.item-icon-right>.icon-help:last-child,.item.item-icon-right>.icon.ion-ios-arrow-right,.item.item-icon-right>.icon:last-child,.item.item-icon-right>.ion-ios-arrow-right.icon-alert,.item.item-icon-right>.ion-ios-arrow-right.icon-help{right:1px}}.item em{font-weight:700!important}@media screen and (min-width:992px){.list .item.item-border-large,.list.item-border-large .item{border-bottom:solid 1px #ccc!important}.list.item-border-large .item{margin:0}.list.item-border-large .item-divider{border-top:0}}.list .item.item-border{border-bottom:solid 1px #ccc!important}.list .item.item-small-height{padding-top:2px;padding-bottom:0;min-height:24px}.list .item.item-small-height .badge{padding-top:0!important;top:inherit}.list .item.item-small-height .badge.badge-assertive,.list .item.item-small-height .badge.badge-balanced,.list .item.item-small-height .badge.badge-calm,.list .item.item-small-height .badge.badge-editable:hover,.list .item.item-small-height .badge.badge-energized,.list .item.item-small-height .badge.badge-positive,.list .item.item-small-height .badge.badge-royal{top:1px!important;padding-top:3px!important;padding-bottom:2px!important}.form-errors:first-child{margin:5px 0}.form-errors:last-child{margin:5px 0 0}.form-error{padding:0 16px;font-size:12px;color:red;vertical-align:middle;text-align:end;top:0;position:relative}.item-input-error{border-bottom:2px solid red!important}.item-input.item-button-right input,.item-input.item-button-right textarea{margin-right:100px}.item-input.item-button-right .button,.item-input.item-button-right button{top:6px}.item-input.item-button-right.item-floating-label input,.item-input.item-button-right.item-floating-label textarea{padding-right:100px}.item-input.item-button-right.item-floating-label .button{top:inherit;bottom:6px}.item-input.item-button-right.item-floating-label .button-icon{height:inherit}.item.item-button-right .badge,.item.item-icon-right .badge{right:43px}@media screen and (max-width:767px){.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:300px!important;display:block!important}.badge:empty{display:none!important}.item .badge{right:26px!important}}.badge-editable:hover{cursor:pointer}.badge-editable:hover:before{content:" "}.platform-ipad .bar-title{border-color:#111;background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%)}.platform-ipad .bar-title .title{background-color:#fff;margin-left:0;margin-right:0;height:44px}.bar .badge-button{margin:0!important;padding:0 4px!important;font-size:10px;position:absolute!important;top:5px;right:3px}.item h2 .text-editable:hover:after,.item-button-right .item-content>.button.button-small,.item-button-right .item-content>.buttons .button-small,.item-button-right>.button.button-small,.item-button-right>.buttons .button-small{font-size:14px}.text-editable:hover{cursor:pointer}.text-editable:hover:after{content:""}.modal.modal-full-height{bottom:0}@media screen and (max-width:767px){.modal{top:0!important;left:0!important;bottom:0;min-height:100%!important;width:100%!important}}@media screen and (max-width:991px){.modal{bottom:0}.modal .swiper-pagination{visibility:hidden!important}.modal.modal-full-height{top:0}.modal.modal-full-height ion-content.keyboard-up .scroll{min-height:calc(100% + 67px)}}@media (min-width:992px){.modal.modal-full-height{min-height:80%}}.modal.about .bar.bar-header .button+.title{left:0!important}.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.button,.item-button-right>.buttons{top:16px}.item.large-button-bar{margin-bottom:10px}.item-avatar-left-padding{padding-left:95px}.item-thumbnail-left-padding{padding-left:106px}.item-thumbnail-left,.item.item-thumbnail-left{min-height:100px!important}.item-thumbnail-left .item-content i.item-image,.item-thumbnail-left .item-content>i:first-child,.item-thumbnail-left i.item-image,.item-thumbnail-left>i:first-child{color:#D9D9D9;background-color:#f8f8f8;overflow:hidden!important;font-size:50px!important;line-height:80px;padding:0 15px;background-position:center;background-size:cover;display:inline-block}@media screen and (max-width:400px){@-ms-viewport{width:320px}.card>.item.item-thumbnail-left,.item-thumbnail-left,.item-thumbnail-left .item-content{padding-left:84px!important}.item-thumbnail-left .item-content img.item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left img.item-image,.item-thumbnail-left>img:first-child{max-width:70px;max-height:70px}.item h2{font-size:13px!important}}.item-icon-left-padding{padding-left:40px}.item-icon-right-padding{padding-right:40px}.text-keep-lines{white-space:pre-line!important}.menu.menu-left{background-color:#f5f5f5}.menu.menu-left .item{opacity:.75;color:#000}.menu.menu-left .item-button-right .item-content>.button,.menu.menu-left .item-button-right .item-content>.buttons,.menu.menu-left .item-button-right>.button,.menu.menu-left .item-button-right>.buttons{top:8px!important}.menu.menu-left .item.active{background-color:#b2e0ff!important}.menu.menu-left .item.active .item-content{background-color:transparent}.menu.menu-left .item-menu-disable{color:#444!important}@media screen and (max-width:991px){.menu.menu-left .item.item-divider{min-height:2px;height:2px;padding-top:0;padding-bottom:0}.menu.menu-left .item,.menu.menu-left .item.item-complex .item-content{height:40px;min-height:40px;padding-top:12px}.menu.menu-left .item.item-complex{padding-top:0}.menu.menu-left .item.item-button-right .button{height:30px;min-height:30px;top:4px}.menu.menu-left ion-content.has-footer{bottom:0!important}.menu.menu-left .bar-header{background-color:#1A237E;color:#fff;height:150px;padding-right:0!important}.platform-ios.platform-cordova .menu.menu-left .bar-header{height:calc(constant(safe-area-inset-top) + 150px);height:calc(env(safe-area-inset-top) + 150px)}.menu.menu-left .bar-header .hero{height:150px;box-shadow:none}.menu.menu-left .bar-header .hero .content{bottom:0}.menu.menu-left .has-header{top:150px}.platform-ios.platform-cordova .menu.menu-left .has-header{top:calc(constant(safe-area-inset-top) + 150px);top:calc(env(safe-area-inset-top) + 150px)}}@media screen and (min-width:768px){.menu.menu-left .item.item-divider{min-height:5px;height:5px}.menu.menu-left .footer a{font-size:14px!important;color:grey!important}}@media screen and (min-width:992px){.menu.menu-left{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42MDgyNjEsIDAsIDAsIDAuNjA4MjYxLCAtMjAuMDg0OTc2LCAzLjI1NTczNikiPgogICAgPGc+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC43ODsiIGlkPSJwYXRoLTEwIiBkPSJNIDQxOS4xMzMgODUuNzM4IEMgNDE3LjI5NSA4NS43MzkgNDE1LjQ1NSA4NS43NTQgNDEzLjYxMSA4NS43NzggQyAzNTQuODUyIDg2LjU2MSAyOTkuMDIzIDk5LjE3NCAyNDguMzU4IDEyMS4zMiBDIDU4NC4xMjEgMTMuMjA2IDc5Ni4xNzUgMjExLjI2IDgzMS43IDUwOC43NzMgTCA4NDYuMzgzIDUwNy4xMjQgQyA4MTUuNTg2IDIzNS44MDEgNjUyLjQ3NyA4NS41ODggNDE5LjEzMyA4NS43MzggWiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjM3MywgMC4yNjY4NzgsIC0wLjI2Njg3OCwgMC45NjM3MywgODkuNTA1MjMxLCAtMTM2LjYxNTA2MSkiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDE7IiBpZD0icGF0aC0zIiBkPSJNIDE0Ni4wMzcgMTk0LjA2NSBDIDE0NC4yMDEgMTk0LjA2NiAxNDIuMzYxIDE5NC4wODEgMTQwLjUxNyAxOTQuMTA0IEMgODEuNzYgMTk0Ljg4OCAyNS45MzEgMjA3LjUwMyAtMjQuNzM2IDIyOS42NDggQyAzMTEuMDI5IDEyMS41MzEgNTIzLjA4MyAzMTkuNTgzIDU1OC42MDQgNjE3LjA5MyBMIDU3My4yODQgNjE1LjQ0MyBDIDU0Mi40OSAzNDQuMTIyIDM3OS4zODUgMTkzLjkxMyAxNDYuMDM3IDE5NC4wNjUgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMTgwOTg4LCAtMC45ODM0ODUsIDAuOTgzNDg1LCAtMC4xODA5ODgsIC0zOS4yOTg1ODEsIDcwNS44OTc1NDQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMSIgZD0iTSA0ODcuNzQ0IDE5My4wODQgQyA0ODUuOTA2IDE5My4wODUgNDg0LjA2NyAxOTMuMSA0ODIuMjIzIDE5My4xMjMgQyA0MjMuNDY0IDE5My45MDcgMzY3LjYzNSAyMDYuNTIgMzE2Ljk3NSAyMjguNjY4IEMgNjUyLjcyNiAxMjAuNTUyIDg2NC43NzUgMzE4LjYwNSA5MDAuMjk5IDYxNi4xMDkgTCA5MTQuOTc5IDYxNC40NiBDIDg4NC4xODQgMzQzLjE0NCA3MjEuMDgxIDE5Mi45MzUgNDg3Ljc0NCAxOTMuMDg0IFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE5OTk3LCAwLjc4NDYwNSwgLTAuNzg0NjA1LCAwLjYxOTk5NywgNTIzLjA2NzIzMSwgLTM0My4zMzE1MzkpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjg0OyIgaWQ9InBhdGgtMTIiIGQ9Ik0gMjk1Ljk2OSA0MzIuNzU3IEMgMjk0LjEzMSA0MzIuNzU4IDI5Mi4yOTMgNDMyLjc3MyAyOTAuNDQ5IDQzMi43OTcgQyAyMzEuNjg4IDQzMy41OCAxNzUuODYgNDQ2LjE5NCAxMjUuMTk4IDQ2OC4zNDEgQyA0NjAuOTU3IDM2MC4yMjYgNjczLjAwNSA1NTguMjggNzA4LjUyNiA4NTUuNzg2IEwgNzIzLjIwNyA4NTQuMTM5IEMgNjkyLjQxMiA1ODIuODE5IDUyOS4zMSA0MzIuNjA5IDI5NS45NjkgNDMyLjc1NyBaIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45Nzg4NDksIDAuMjA0NTg0LCAtMC4yMDQ1ODQsIC0wLjk3ODg0OSwgOTYzLjgyMDc5NiwgMTExNi4zNjcyOTMpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMyIgZD0iTSAxNTguMDM2IDE0OC44MyBDIDE1Ni4yIDE0OC44MzMgMTU0LjM2IDE0OC44NDYgMTUyLjUxNiAxNDguODcyIEMgOTMuNzU5IDE0OS42NTMgMzcuOTMgMTYyLjI2NyAtMTIuNzM0IDE4NC40MTEgQyAzMjMuMDIyIDc2LjMwMSA1MzUuMDc2IDI3NC4zNTIgNTcwLjYwNCA1NzEuODU3IEwgNTg1LjI4NiA1NzAuMjA4IEMgNTU0LjQ4MyAyOTguODkxIDM5MS4zOCAxNDguNjgzIDE1OC4wMzYgMTQ4LjgzIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM4NjE0LCAtMC45NDA5MjYsIDAuOTQwOTI2LCAwLjMzODYxNCwgLTExNS41OTUxNTgsIDQ4My43MDU5ODQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAxOyIgaWQ9InBhdGgtMTQiIGQ9Ik0gNTAxLjAxOSAyODguMjkyIEMgNDk5LjE4MSAyODguMjkzIDQ5Ny4zNCAyODguMzA4IDQ5NS40OTYgMjg4LjMzMSBDIDQzNi43MzYgMjg5LjExNSAzODAuOTA4IDMwMS43MjYgMzMwLjI0MyAzMjMuODc0IEMgNjY2LjAwNCAyMTUuNzU3IDg3OC4wNjIgNDEzLjgxMiA5MTMuNTg2IDcxMS4zMjIgTCA5MjguMjY4IDcwOS42NzMgQyA4OTcuNDY4IDQzOC4zNTIgNzM0LjM2MSAyODguMTQxIDUwMS4wMTkgMjg4LjI5MiBaIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2NDY1NiwgMC45ODYzNTEsIC0wLjk4NjM1MSwgMC4xNjQ2NTYsIDk4Mi44NTcyNjYsIC0yMzMuNDUyMDYzKSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC40OyIgaWQ9InBhdGgtMTUiIGQ9Ik0gMTkyLjk1NCAzNzYuNTIxIEMgMTkxLjExNSAzNzYuNTIyIDE4OS4yNzcgMzc2LjUzNyAxODcuNDMzIDM3Ni41NjEgQyAxMjguNjc0IDM3Ny4zNDQgNzIuODQ1IDM4OS45NTggMjIuMTgxIDQxMi4xMDMgQyAzNTcuOTQgMzAzLjk4OSA1NjkuOTg3IDUwMi4wNDUgNjA1LjUwNSA3OTkuNTUzIEwgNjIwLjE4OCA3OTcuOTA1IEMgNTg5LjM5MiA1MjYuNTg0IDQyNi4yOTUgMzc2LjM2OSAxOTIuOTU0IDM3Ni41MjEgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTMxNDA0LCAtMC4zNjM5ODgsIDAuMzYzOTg4LCAtMC45MzE0MDQsIDQxOS40OTkwMDYsIDExODIuNTk5ODA5KSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMTsiIGlkPSJwYXRoLTE2IiBkPSJNIDIyMS42MTQgNjMuOTczIEMgMjE5Ljc3NyA2My45NzYgMjE3LjkzOCA2My45OSAyMTYuMDk0IDY0LjAxNSBDIDE1Ny4zMzQgNjQuNzk1IDEwMS41MDYgNzcuNDA5IDUwLjg0MSA5OS41NTQgQyAzODYuNTk4IC04LjU1OSA1OTguNjUxIDE4OS40OTcgNjM0LjE3MyA0ODcuMDAxIEwgNjQ4Ljg1NCA0ODUuMzU0IEMgNjE4LjA1OCAyMTQuMDM3IDQ1NC45NTQgNjMuODI0IDIyMS42MTQgNjMuOTczIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwNDUyLCAtMC42NjA5MjUsIDAuNjYwOTI1LCAwLjc1MDQ1MiwgLTcwLjgwMzMyMiwgMjkwLjkyMDI3MykiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDAuNDsiIGlkPSJwYXRoLTE3IiBkPSJNIDQ0MS44ODggMzQyLjA5OCBDIDQ0MC4wNDcgMzQyLjA5OCA0MzguMjA3IDM0Mi4xMTQgNDM2LjM2MiAzNDIuMTM4IEMgMzc3LjYwMSAzNDIuOTIyIDMyMS43NjUgMzU1LjUzNSAyNzEuMTAzIDM3Ny42ODEgQyA2MDYuODg2IDI2OS41NjcgODE4Ljk0NCA0NjcuNjE1IDg1NC40NjIgNzY1LjEzMyBMIDg2OS4xNDIgNzYzLjQ4MyBDIDgzOC4zNTQgNDkyLjE1NCA2NzUuMjQyIDM0MS45NDggNDQxLjg4OCAzNDIuMDk4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjM1NjU4MiwgMC45MzQyNjQsIC0wLjkzNDI2NCwgLTAuMzU2NTgyLCAxMjU2Ljc1OTQ5MywgMTY5LjE4MjU1MikiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2MjQ5MywgMCwgMCwgMC43NjI0OTMsIDE5LjI5NDY0NywgLTcxNi4zMjI4MTUpIj4KICAgICAgICA8cGF0aCBkPSJNIDU2Ni40NjYgMTA4OS4xMzcgTCA1NjYuNDY2IDExNDguMjIyIEMgNTY1Ljg2NyAxMTQ4LjIxOSA1NjUuMjY3IDExNDguMjE3IDU2NC42NjcgMTE0OC4yMTcgQyA1NjEuNDgxIDExNDguMjE3IDU1OC4zMSAxMTQ4LjI1OSA1NTUuMTU0IDExNDguMzQxIEwgNTU1LjE1NCAxMDg5LjEzNyBaIE0gOTA4LjI5IDE0NzcuMTQ2IEwgOTU2Ljk4NyAxNDc3LjE0NiBMIDk1Ni45ODcgMTQ4OC40NTggTCA5MDguNTY5IDE0ODguNDU4IEMgOTA4LjUzOSAxNDg0LjY5MyA5MDguNDQ3IDE0ODAuOTIyIDkwOC4yOSAxNDc3LjE0NiBaIE0gNTY2LjQ2NiAxODM1LjAxMyBMIDU2Ni40NjYgMTg3Ni40NjcgTCA1NTUuMTU0IDE4NzYuNDY3IEwgNTU1LjE1NCAxODM0Ljg4NiBDIDU1OC4zMTggMTgzNC45NzMgNTYxLjQ5IDE4MzUuMDE3IDU2NC42NjcgMTgzNS4wMTcgQyA1NjUuMjY3IDE4MzUuMDE3IDU2NS44NjcgMTgzNS4wMTYgNTY2LjQ2NiAxODM1LjAxMyBaIE0gMjIwLjc3NSAxNDg4LjQ1OCBMIDE2OS42NTcgMTQ4OC40NTggTCAxNjkuNjU3IDE0NzcuMTQ2IEwgMjIxLjA4OSAxNDc3LjE0NiBDIDIyMC45MjEgMTQ4MC45MDkgMjIwLjgxNiAxNDg0LjY4IDIyMC43NzUgMTQ4OC40NTggWiIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgc3Ryb2tlOiBub25lOyIgYng6b3JpZ2luPSIwIDAiLz4KICAgICAgICA8cGF0aCBkPSJNIDc2MC4xMjEgMTE0My4zMTEgTCA3MTcuMzM2IDEyMTcuNDE3IEMgNzE1LjcyIDEyMTYuNTE4IDcxNC4wOTYgMTIxNS42MzIgNzEyLjQ2NSAxMjE0Ljc2MSBMIDc1NS4zMTggMTE0MC41MzcgWiBNIDgzMC4xMjIgMTMyNC4yMDMgTCA5MDAuNDI0IDEyODMuNjE0IEwgOTAzLjE5OCAxMjg4LjQxNyBMIDgzMy4wNCAxMzI4LjkyMyBDIDgzMi4wOCAxMzI3LjMzOSA4MzEuMTA3IDEzMjUuNzY2IDgzMC4xMjIgMTMyNC4yMDMgWiBNIDg0MC41OTkgMTY0MS4xMzcgTCA5MDMuMTk3IDE2NzcuMjc4IEwgOTAwLjQyNCAxNjgyLjA4MiBMIDgzNy45MTEgMTY0NS45OSBDIDgzOC44MjEgMTY0NC4zOCA4MzkuNzE3IDE2NDIuNzYyIDg0MC41OTkgMTY0MS4xMzcgWiBNIDcyNS4xNjggMTc2MS44NDMgTCA3NjAuMTIyIDE4MjIuMzg1IEwgNzU1LjMxOCAxODI1LjE1OCBMIDcyMC4zNzkgMTc2NC42NDEgQyA3MjEuOTg1IDE3NjMuNzIyIDcyMy41ODIgMTc2Mi43ODkgNzI1LjE2OCAxNzYxLjg0MyBaIE0gNDAzLjUzOCAxNzYwLjkzMiBMIDM2Ni40NTYgMTgyNS4xNTkgTCAzNjEuNjUzIDE4MjIuMzg2IEwgMzk4LjgwMiAxNzU4LjA0MiBDIDQwMC4zNzIgMTc1OS4wMTkgNDAxLjk1MSAxNzU5Ljk4MiA0MDMuNTM4IDE3NjAuOTMyIFogTSAyODkuNTggMTY0Mi42ODkgTCAyMjEuMzUgMTY4Mi4wODIgTCAyMTguNTc3IDE2NzcuMjc5IEwgMjg2Ljk0NCAxNjM3LjgwNyBDIDI4Ny44MDcgMTYzOS40MzcgMjg4LjY4NSAxNjQxLjA2NSAyODkuNTggMTY0Mi42ODkgWiBNIDI5NC4zNTQgMTMzMi4xNjggTCAyMTguNTc2IDEyODguNDE3IEwgMjIxLjM1IDEyODMuNjE0IEwgMjk3LjIxMyAxMzI3LjQxNCBDIDI5Ni4yNDYgMTMyOC45OSAyOTUuMjkzIDEzMzAuNTc1IDI5NC4zNTQgMTMzMi4xNjggWiBNIDQwNi4wNzkgMTIyMC4yNTkgTCAzNjEuNjUzIDExNDMuMzExIEwgMzY2LjQ1NyAxMTQwLjUzNyBMIDQxMC44ODkgMTIxNy40OTUgQyA0MDkuMjc2IDEyMTguNDAzIDQwNy42NzMgMTIxOS4zMjQgNDA2LjA3OSAxMjIwLjI1OSBaIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBzdHJva2U6IG5vbmU7IiBieDpvcmlnaW49IjAgMCIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdCB4PSI0MjkuMzY3IiB5PSI0MjUuOTc5IiB3aWR0aD0iMjAuMDAzIiBoZWlnaHQ9IjIxLjczNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTkxIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAwLjk5OTk5OSwgLTMwMS4zNzcwNzUsIC0yMTkuNDk4NDM0KSIvPgogICAgPHJlY3QgeD0iNDQ2Ljg1MyIgeT0iMjUuNDYyIiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05MyIvPgogICAgPHJlY3QgeD0iLTEzNS45NTYiIHk9IjYwNS4xNDEiIHdpZHRoPSIzOS44NTEiIGhlaWdodD0iMzkuODUxIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk5LCAwLCAwLCAxLCA4NDYuMTc2NzU2LCAtMzk0Ljk1NjAyNCkiLz4KICAgIDxyZWN0IHg9IjIyNS43NzkiIHk9IjY4OS44MzYiIHdpZHRoPSIyNS45OSIgaGVpZ2h0PSIyNS45OSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk1Ii8+CiAgICA8cmVjdCB4PSI1OTQuMDEzIiB5PSI3MzcuMTQyIiB3aWR0aD0iMjAuNzkyIiBoZWlnaHQ9IjIyLjUyNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk2Ii8+CiAgICA8cmVjdCB4PSIzODcuMjM1IiB5PSI0NzkuMzk3IiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05OCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDEsIDAsIDAsIDAuOTk5OTk5LCAzNjUuMjc0OTY2LCA3OS4yOTUyNDEpIi8+CiAgICA8cmVjdCB4PSI0MjEuOTYyIiB5PSI3NzUuOTM3IiB3aWR0aD0iMzIuOTIiIGhlaWdodD0iMzQuNjUzIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTkiLz4KICAgIDxyZWN0IHg9Ii02Ni45MzkiIHk9Ii01NjguOTc4IiB3aWR0aD0iMjAuODY3IiBoZWlnaHQ9IjIwLjc5MiIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTEwMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEsIDAsIDAsIDAuOTk5OTk3LCAzMS4zNTY5MjgsIDk4NC43MzYzMDYpIi8+CiAgPC9nPgo8L3N2Zz4=);background-repeat:no-repeat;background-position:-500px -100px;background-size:1024px 1024px;background-color:#f5f5f5;height:100%}}.certifications .item-divider .badge{top:16px!important}.certifications-lg .avatar-large{left:auto;position:relative;font-size:55px!important;height:88px;width:88px;color:#D9D9D9;background-color:#e0e0e0;border:1px solid #D9D9D9}.icon-alert,.icon-help{font-size:38px;vertical-align:middle}#menu .footer .icon-help{font-size:25px!important;position:absolute;left:12px;top:8px;z-index:99}.popover-helptip{background-color:rgba(68,68,68,.85)!important;height:auto!important}.popover-helptip .button-close{padding:8px;height:25px;font-size:18.2px}.popover-helptip a,.popover-helptip a:active,.popover-helptip a:hover{text-decoration:underline}.nobackdrop .popover-backdrop.active{background-color:transparent!important}.helptip-anchor,.helptip-anchor-center,.helptip-anchor-left,.helptip-anchor-right{display:block;position:absolute;width:100%;bottom:0}.helptip-anchor-center{text-align:center}.helptip-anchor-left{text-align:left}.helptip-anchor-right{text-align:right}.helptip-anchor a:before,.helptip-anchor-center a:before,.helptip-anchor-left a:before,.helptip-anchor-right a:before{content:" "}@media (max-width:767px){.popover-helptip{width:auto}}#menu .footer .popover-helptip .icon-left.icon-help,.popover-helptip #menu .footer .icon-left.icon-help,.popover-helptip .icon-left.icon-alert,.popover-helptip .icon-left.icon-help,.popover-helptip .icon.icon-left{font-size:30px;position:relative;top:8px;left:8px}#menu .footer .popover-helptip .icon-right.icon-help,.popover-helptip #menu .footer .icon-right.icon-help,.popover-helptip .icon-right.icon-alert,.popover-helptip .icon-right.icon-help,.popover-helptip .icon.icon-right{font-size:30px;position:relative;top:8px;right:8px}#menu .footer .popover-helptip .icon-center.icon-help,.popover-helptip #menu .footer .icon-center.icon-help,.popover-helptip .icon-center.icon-alert,.popover-helptip .icon-center.icon-help,.popover-helptip .icon.icon-center{font-size:30px;width:100%;text-align:center;position:relative;top:8px;height:0}#menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-helptip .icon-bottom-right.icon-alert,.popover-helptip .icon-bottom-right.icon-help,.popover-helptip .icon.icon-bottom-right{font-size:30px;position:relative;bottom:8px;right:8px}#menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-helptip .icon-bottom-left.icon-alert,.popover-helptip .icon-bottom-left.icon-help,.popover-helptip .icon.icon-bottom-left{font-size:30px;position:relative;bottom:8px;left:8px}#menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-helptip .icon-bottom-center.icon-alert,.popover-helptip .icon-bottom-center.icon-help,.popover-helptip .icon.icon-bottom-center{font-size:30px;position:relative;width:100%;bottom:8px;text-align:center;height:0}.popover.popover-profile{height:200px}.popover.popover-profile .avatar{height:90px;width:90px;left:20px;top:20px;border:1px solid #D9D9D9}.popover.popover-profile .bar.bar-footer{height:58px}.popover.popover-profile .bar.bar-footer .col .button{max-width:inherit;width:100%;padding:5px 0;margin:0}.popover.popover-profile .bar .button-positive,.popover.popover-profile .bar .button-text{background-color:#387ef5!important}.popover.popover-profile .bar .button-stable{color:#444!important}.bar-header .button-icon .avatar{border:1px solid #D9D9D9;height:31px;width:31px;position:relative;left:0;top:6px}.bar-header .button-icon .avatar.active{background-color:#e0e0e0}.list .badge .badge-secondary,.list .badge.badge-secondary{font-size:12px;font-style:italic;top:37px;font-weight:400!important;margin-right:0;padding-right:0}.list .item-avatar .badge.badge-avatar{position:absolute!important;left:60px!important;right:inherit!important;top:15px!important;margin:0!important;padding:0 4px!important;font-size:10px}.popover.popover-login-methods{height:280px;width:290px}.popover.popover-login-methods.auth{height:204px}@media (max-width:767px){.popover.popover-login-methods{height:256px}.popover.popover-login-methods.auth{height:204px}}.ion-spinner-small,.ion-spinner-small svg{height:14px;width:14px}.ion-es-user-api:before{content:url(../img/logo.small.cs.dune.svg)}.ion-bma-tor-api:before{content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAATEAYAAAChBNO0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAB3lJREFUWMPNmGtUVNcVx/93mBlmgEGeAyhYUoSERhmM9ZHSCL4AqURFEmSBEZOgWGqh0pqYNkREiIlxxSXqYpUoJhqVRWJ41tooKNYIGR8R8QlKAsj7PQ9k7tx7++Gc6VpQnctK4lo9X35zz+x79v7vM2fffYfB/8lYty4iIjFx/Oz0TEJpD2HTLwj1RmqwvbDw9OmjR3+8XylxHPBPcuk1QucbKIUn3GeZ/45eJlCWEfJfEJp3Ew6qqIADhNw3lsDHCrf1I9SMEi6XERpOEV7YRLn950q8lODUfcLJWVRIpkgCLGMG5S5q/kfKRXR+D0H7TSrIhfD2+B33JUiII0xZR6i4QljwiLC23HLDT915y2BIIIKY0J84DFsII/5NePHS2O9dqdDT8YTBdOezUwlzHxKyOT+XcMuQUCY93QQwv6TudkAKbygBhKAEMZMiuA7uGtc601HIETYL259loYASikNbif2uWU9LuGXQI2CqI5Q/rQw4Uvq6/86rUq0DpB9KG2xWrmzybvMt8FFnyBvmX6m5sbN/qiFT3294Pq9HUi1RSq4YE3+s8McXVUkela0g5BxoAr5MJgycR8i8Q+OmP1nfY3S+zbrbrgrKNdQ+gPDBNcIWvxFvw7GRBkChV+bbajvbg34951pwcYDUrDLfM2fZpGtrapK/XR1ikLCSQxKPG/8VIpaIxwv2CSNcyRH+ZgehcwFhz1l6BJLoDi2IIgwtpsvSwAevWxcu+BBmLiZ8iZ7d0BrC+C19tl2He9f+cKcitXhhaar8kGyJ/Dl5+txbihi7EuV+mZ1sozxavt9mhcQoiZTIVx3Hi1iE36pN1gU+aX6BPWHpAsI9VHBcJ2F4NGFCNWN9wUBavM7fInQvx2MHq6WZbiGsjL3N1JfdqgDWx2ZoNu4FKtnil8oLnhkMUsz+SPPu1mURbas+XuqX+KW7ndc2dYVS3Tjjps89CVA+fGxJaTY/YDira9GvO/cv5gFjwzx8fwNZt9qbkLv5+DiC/k5Y/AFhQBNEhsT613wppVnkF0AbE65EOCDkCHnAkYozyuNNQM2bpz87lxKuXey/PDo8unRnkmt66xs+yYemF866PENQqtllplzWH5g27Vce/ksBzRtzZJp7EmfhIr9X+HphHBgwYIrayfoZ9GlgmzXWv00rYZr/RIVPNAGhlG+JrEMbFcFTtlwmk20Gco9t/ir76gtVizetKAnPP1ATv3BDbYJqxvsqT6cwx2z4DysHzw7nA85rXZ2d2wAunq3mQgDNxrlzZnYBCg+7VMVqAJ8Je4VCFzuyflY9YcpHY917ORGGFU1MthBLqJOLJEAIox/iRVbsoPaOB9dUag4XSouDN80Nmdm/9fXIPaviohr8NhtN+lhjEcDam15kWwCPbVNe8wwFdMuH5uk6AVOaKce0CFAE2mUpUwHVQadGRwdA8BZG4GZxo6C1Jo2eZb+phPafEqpU1sM0BBK+R/uMcEYkAaiiwr4RsRsFBw4cfz6mbl7wy/y0Rv/h5+UB3qGZ/B4hht8B8LuFFfx2wCXHLcXFFeg/2VPcNxlQJtg/tDsOyJbKOGkqYC5idWwuYDNV8pZEAwiXUPW/3n19CWfT2oRXCSRfWQ/zPu0r9tNOs9YkloA+ygEROw5deIhOYZFdmMOAfZ7DC47tzsGT4pS8/s7QXf0WwKnTJdc5BeiWd6R0xQIOMY7xqn8A8lrbM/IRgPFkIphngJFso/ej+QDrZYpihwDmbWYX87fx7phuwilrqfA/j92wJ+5TCSGrscyIJeA8ZZ2I3SBsoYAtWvlWbhdfL+SzR9ledpugtmmXJtlwwPCRgSVDQYDiO6WXwgmQVksTpU3AUFR/xYAWQC860Qv0ft25vscDMMzXbzV0AEwxapnSJ7k10scZQ99JmG+th2mm/Y7wygQTIFgeiH8SScBtuEINN2Ztt7LjD11xP5R9H9Ho2BzedFBoFIqFemCgo8+jfw0gmybn5NHA4M6+GwM2gPRz2UaZFjCFjEaa7IG2qmbPlruA6dToSdMOAMuY1Yge7073HmE9rQ6S+TQB90X0PEf5yUQTcJiQvyxiRxsn5vfT5bMWB6X28tdwafBqRt65u6jfd+fCSMOw20Dd8BGgc1ZbZEcGwJawJnY3wDfwb/M1gL5E12B4Beha1v5x1z4AznCHCwAj9DCO91dOH3PafYRS+pbJXBDZKNqvWIq2aAK412gCSq3bWYoQ79K/t/uDPjNwVXpReznt875qTWXOWb+c9d+nNYU2pw/trw/QFlwvA/rcux/1vQv0xHfoesqgbyy6mX33HfT2nux8tccOECqFE0IZADd4wp1LosLpa/ZfHQhN9H8MNNONyLUeJm9L7dSWGan1G4y0pexeRTg5nS5Eqyi6CPrpe/yQgpkpeZMJwRlV3aRc1WyTtEpdrj0z5cMSvXF4jc7jtp9tgCJfEb+p9Eaydsn183OTZa/Lm2VHld2tUQ8+bY2Gg+nEaORooPkE8xfGh6lt3EAaoSO0un9Ci1xPztg4hxtpnLQfcaA1QaBHhKH/U7Q/S8g6We78Dzmv92D5rFiKAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEwLTE0VDExOjU4OjIwKzA1OjAwUOI3hwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0xMC0xNFQxMTo1ODoyMCswNTowMCG/jzsAAAAvdEVYdHN2Zzpjb21tZW50AD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/5MH3awAAAABJRU5ErkJggg==)}.row-header{border-bottom:solid 1px #ccc!important;margin:0;min-height:28px!important}.col-header{text-align:center;display:block!important}.col-15{-webkit-box-flex:0;-webkit-flex:0 0 15%;-moz-box-flex:0;-moz-flex:0 0 15%;-ms-flex:0 0 15%;flex:0 0 15%;max-width:15%}.col-border-left{border-left:solid 1px #ccc!important}.col-border-right{border-right:solid 1px #ccc!important}.ion-spinner-small{line-height:14px;margin:0;padding:0}.icon-secondary{position:absolute;height:100%;display:flex;align-items:center;font-size:16px;left:25px;top:-7px}div[dropzone]{border:2px dashed #bbb;border-radius:5px;padding:15px;text-align:center;font:20pt 700;color:#bbb;margin-bottom:20px;cursor:pointer}div[dropzone] .item,div[dropzone] .list .item{text-align:left}div[dropzone]:hover{background-color:#f2f2f2}.button-fab-hero.button-fab-top-left,.button-fab-hero.button-fab-top-right,.hero .button-fab-top-left,.hero .button-fab-top-right{top:170px!important}.bar .button.button-fab.mini,.button.button-fab.mini{min-width:40px;min-height:40px}.button-fab-hero.button-fab-top-left.mini,.button-fab-hero.button-fab-top-right.mini,.hero .button-fab-top-left.mini,.hero .button-fab-top-right.mini{top:178px!important}.text-no-transform{text-transform:inherit}.button-icon-event,.item-icon-event{text-transform:inherit;pointer-events:none!important}#menu .footer .button-icon-event .icon-help,#menu .footer .item-icon-event .icon-help,.button-icon-event #menu .footer .icon-help,.button-icon-event .icon,.button-icon-event .icon-alert,.button-icon-event .icon-event,.button-icon-event .icon-help,.item-icon-event #menu .footer .icon-help,.item-icon-event .icon,.item-icon-event .icon-alert,.item-icon-event .icon-event,.item-icon-event .icon-help{pointer-events:all!important}.hero.dark-100-bg{background-color:#555}.hero.positive-900-bg{background-color:#1A237E!important}.hero.stable-bg{background-color:#f8f8f8!important}.popover-locked-outputs .item .badge{right:16px!important}.animate-show-hide.ng-hide{opacity:0}.animate-show-hide.ng-hide-add,.animate-show-hide.ng-hide-remove{transition:all linear .3s}.modal iframe.iframe-license{width:100%;height:calc(100% - 171px)!important}@media screen and (max-width:767px){.modal iframe.iframe-license{height:calc(100% - 104px)}.modal.modal-help .row .col:first-child{font-weight:700}.modal.modal-help h2{padding-left:10px}}@media screen and (min-width:768px) and (max-width:991px) and (min-height:600px){.modal iframe.iframe-license{height:calc(100% - 171px)}}@media screen and (min-width:992px){.modal iframe.iframe-license{height:calc(100% - 171px)}.modal.modal-license iframe.iframe-license{height:calc(100% - 111px)!important}}.modal.modal-help .row.selected .col:first-child{font-weight:700}.modal.modal-login .item.item-icon-right.item-text-wrap .item-content{margin-right:58px;text-overflow:ellipsis;overflow:hidden}.popover-locales{height:284px;width:200px}.popover-locales .item{height:48px}.buttons-tabs{display:block;height:57px;border:0;padding:16px 16px 0;overflow:hidden}.buttons-tabs .button.button-tab:first-child{border-top-left-radius:15px}.buttons-tabs .button.button-tab:last-child{border-top-right-radius:15px}.buttons-tabs .button.button-tab.active{background-color:#b2e0ff}.buttons-tabs.border-bottom{border-bottom:solid 1px #ccc!important}@media screen and (max-width:767px){.buttons-tabs{padding:10px 10px 0}.buttons-tabs .button.button-tab{padding:2px 10px 0!important}}
\ No newline at end of file
+@charset "UTF-8";/*!
+  Ionicons, v2.0.1
+  Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
+  https://twitter.com/benjsperry  https://twitter.com/ionicframework
+  MIT License: https://github.com/ionic-team/ionicons
+
+  Android-style icons originally built by Google’s
+  Material Design Icons: https://github.com/google/material-design-icons
+  used under CC BY http://creativecommons.org/licenses/by/4.0/
+  Modified icons to fit ionicon’s grid from original.
+*/@font-face{font-family:Ionicons;src:url(../lib/ionic/fonts/ionicons.eot?v=2.0.1);src:url(../lib/ionic/fonts/ionicons.eot?v=2.0.1#iefix) format("embedded-opentype"),url(../lib/ionic/fonts/ionicons.ttf?v=2.0.1) format("truetype"),url(../lib/ionic/fonts/ionicons.woff?v=2.0.1) format("woff"),url(../lib/ionic/fonts/ionicons.woff) format("woff"),url(../lib/ionic/fonts/ionicons.svg?v=2.0.1#Ionicons) format("svg");font-weight:400;font-style:normal}#menu .footer .icon-help:before,.badge-editable:hover:before,.icon-alert:before,.icon-help:before,.ion,.ion-alert-circled:before,.ion-alert:before,.ion-android-add-circle:before,.ion-android-add:before,.ion-android-alarm-clock:before,.ion-android-alert:before,.ion-android-apps:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down:before,.ion-android-arrow-dropdown-circle:before,.ion-android-arrow-dropdown:before,.ion-android-arrow-dropleft-circle:before,.ion-android-arrow-dropleft:before,.ion-android-arrow-dropright-circle:before,.ion-android-arrow-dropright:before,.ion-android-arrow-dropup-circle:before,.ion-android-arrow-dropup:before,.ion-android-arrow-forward:before,.ion-android-arrow-up:before,.ion-android-attach:before,.ion-android-bar:before,.ion-android-bicycle:before,.ion-android-boat:before,.ion-android-bookmark:before,.ion-android-bulb:before,.ion-android-bus:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-cancel:before,.ion-android-car:before,.ion-android-cart:before,.ion-android-chat:before,.ion-android-checkbox-blank:before,.ion-android-checkbox-outline-blank:before,.ion-android-checkbox-outline:before,.ion-android-checkbox:before,.ion-android-checkmark-circle:before,.ion-android-clipboard:before,.ion-android-close:before,.ion-android-cloud-circle:before,.ion-android-cloud-done:before,.ion-android-cloud-outline:before,.ion-android-cloud:before,.ion-android-color-palette:before,.ion-android-compass:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-contract:before,.ion-android-create:before,.ion-android-delete:before,.ion-android-desktop:before,.ion-android-document:before,.ion-android-done-all:before,.ion-android-done:before,.ion-android-download:before,.ion-android-drafts:before,.ion-android-exit:before,.ion-android-expand:before,.ion-android-favorite-outline:before,.ion-android-favorite:before,.ion-android-film:before,.ion-android-folder-open:before,.ion-android-folder:before,.ion-android-funnel:before,.ion-android-globe:before,.ion-android-hand:before,.ion-android-hangout:before,.ion-android-happy:before,.ion-android-home:before,.ion-android-image:before,.ion-android-laptop:before,.ion-android-list:before,.ion-android-locate:before,.ion-android-lock:before,.ion-android-mail:before,.ion-android-map:before,.ion-android-menu:before,.ion-android-microphone-off:before,.ion-android-microphone:before,.ion-android-more-horizontal:before,.ion-android-more-vertical:before,.ion-android-navigate:before,.ion-android-notifications-none:before,.ion-android-notifications-off:before,.ion-android-notifications:before,.ion-android-open:before,.ion-android-options:before,.ion-android-people:before,.ion-android-person-add:before,.ion-android-person:before,.ion-android-phone-landscape:before,.ion-android-phone-portrait:before,.ion-android-pin:before,.ion-android-plane:before,.ion-android-playstore:before,.ion-android-print:before,.ion-android-radio-button-off:before,.ion-android-radio-button-on:before,.ion-android-refresh:before,.ion-android-remove-circle:before,.ion-android-remove:before,.ion-android-restaurant:before,.ion-android-sad:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share-alt:before,.ion-android-share:before,.ion-android-star-half:before,.ion-android-star-outline:before,.ion-android-star:before,.ion-android-stopwatch:before,.ion-android-subway:before,.ion-android-sunny:before,.ion-android-sync:before,.ion-android-textsms:before,.ion-android-time:before,.ion-android-train:before,.ion-android-unlock:before,.ion-android-upload:before,.ion-android-volume-down:before,.ion-android-volume-mute:before,.ion-android-volume-off:before,.ion-android-volume-up:before,.ion-android-walk:before,.ion-android-warning:before,.ion-android-watch:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-backspace-outline:before,.ion-backspace:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-bowtie:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox-working:before,.ion-chatbox:before,.ion-chatboxes:before,.ion-chatbubble-working:before,.ion-chatbubble:before,.ion-chatbubbles:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-checkmark:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close-circled:before,.ion-close-round:before,.ion-close:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code-download:before,.ion-code-working:before,.ion-code:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-crop:before,.ion-cube:before,.ion-disc:before,.ion-document-text:before,.ion-document:before,.ion-drag:before,.ion-earth:before,.ion-easel:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email-unread:before,.ion-email:before,.ion-erlenmeyer-flask-bubbles:before,.ion-erlenmeyer-flask:before,.ion-eye-disabled:before,.ion-eye:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash-off:before,.ion-flash:before,.ion-folder:before,.ion-fork-repo:before,.ion-fork:before,.ion-forward:before,.ion-funnel:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy-outline:before,.ion-happy:before,.ion-headphone:before,.ion-heart-broken:before,.ion-heart:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-help:before,.ion-home:before,.ion-icecream:before,.ion-image:before,.ion-images:before,.ion-information-circled:before,.ion-information:before,.ion-ionic:before,.ion-ios-alarm-outline:before,.ion-ios-alarm:before,.ion-ios-albums-outline:before,.ion-ios-albums:before,.ion-ios-americanfootball-outline:before,.ion-ios-americanfootball:before,.ion-ios-analytics-outline:before,.ion-ios-analytics:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-left:before,.ion-ios-arrow-right:before,.ion-ios-arrow-thin-down:before,.ion-ios-arrow-thin-left:before,.ion-ios-arrow-thin-right:before,.ion-ios-arrow-thin-up:before,.ion-ios-arrow-up:before,.ion-ios-at-outline:before,.ion-ios-at:before,.ion-ios-barcode-outline:before,.ion-ios-barcode:before,.ion-ios-baseball-outline:before,.ion-ios-baseball:before,.ion-ios-basketball-outline:before,.ion-ios-basketball:before,.ion-ios-bell-outline:before,.ion-ios-bell:before,.ion-ios-body-outline:before,.ion-ios-body:before,.ion-ios-bolt-outline:before,.ion-ios-bolt:before,.ion-ios-book-outline:before,.ion-ios-book:before,.ion-ios-bookmarks-outline:before,.ion-ios-bookmarks:before,.ion-ios-box-outline:before,.ion-ios-box:before,.ion-ios-briefcase-outline:before,.ion-ios-briefcase:before,.ion-ios-browsers-outline:before,.ion-ios-browsers:before,.ion-ios-calculator-outline:before,.ion-ios-calculator:before,.ion-ios-calendar-outline:before,.ion-ios-calendar:before,.ion-ios-camera-outline:before,.ion-ios-camera:before,.ion-ios-cart-outline:before,.ion-ios-cart:before,.ion-ios-chatboxes-outline:before,.ion-ios-chatboxes:before,.ion-ios-chatbubble-outline:before,.ion-ios-chatbubble:before,.ion-ios-checkmark-empty:before,.ion-ios-checkmark-outline:before,.ion-ios-checkmark:before,.ion-ios-circle-filled:before,.ion-ios-circle-outline:before,.ion-ios-clock-outline:before,.ion-ios-clock:before,.ion-ios-close-empty:before,.ion-ios-close-outline:before,.ion-ios-close:before,.ion-ios-cloud-download-outline:before,.ion-ios-cloud-download:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloud:before,.ion-ios-cloudy-night-outline:before,.ion-ios-cloudy-night:before,.ion-ios-cloudy-outline:before,.ion-ios-cloudy:before,.ion-ios-cog-outline:before,.ion-ios-cog:before,.ion-ios-color-filter-outline:before,.ion-ios-color-filter:before,.ion-ios-color-wand-outline:before,.ion-ios-color-wand:before,.ion-ios-compose-outline:before,.ion-ios-compose:before,.ion-ios-contact-outline:before,.ion-ios-contact:before,.ion-ios-copy-outline:before,.ion-ios-copy:before,.ion-ios-crop-strong:before,.ion-ios-crop:before,.ion-ios-download-outline:before,.ion-ios-download:before,.ion-ios-drag:before,.ion-ios-email-outline:before,.ion-ios-email:before,.ion-ios-eye-outline:before,.ion-ios-eye:before,.ion-ios-fastforward-outline:before,.ion-ios-fastforward:before,.ion-ios-filing-outline:before,.ion-ios-filing:before,.ion-ios-film-outline:before,.ion-ios-film:before,.ion-ios-flag-outline:before,.ion-ios-flag:before,.ion-ios-flame-outline:before,.ion-ios-flame:before,.ion-ios-flask-outline:before,.ion-ios-flask:before,.ion-ios-flower-outline:before,.ion-ios-flower:before,.ion-ios-folder-outline:before,.ion-ios-folder:before,.ion-ios-football-outline:before,.ion-ios-football:before,.ion-ios-game-controller-a-outline:before,.ion-ios-game-controller-a:before,.ion-ios-game-controller-b-outline:before,.ion-ios-game-controller-b:before,.ion-ios-gear-outline:before,.ion-ios-gear:before,.ion-ios-glasses-outline:before,.ion-ios-glasses:before,.ion-ios-grid-view-outline:before,.ion-ios-grid-view:before,.ion-ios-heart-outline:before,.ion-ios-heart:before,.ion-ios-help-empty:before,.ion-ios-help-outline:before,.ion-ios-help:before,.ion-ios-home-outline:before,.ion-ios-home:before,.ion-ios-infinite-outline:before,.ion-ios-infinite:before,.ion-ios-information-empty:before,.ion-ios-information-outline:before,.ion-ios-information:before,.ion-ios-ionic-outline:before,.ion-ios-keypad-outline:before,.ion-ios-keypad:before,.ion-ios-lightbulb-outline:before,.ion-ios-lightbulb:before,.ion-ios-list-outline:before,.ion-ios-list:before,.ion-ios-location-outline:before,.ion-ios-location:before,.ion-ios-locked-outline:before,.ion-ios-locked:before,.ion-ios-loop-strong:before,.ion-ios-loop:before,.ion-ios-medical-outline:before,.ion-ios-medical:before,.ion-ios-medkit-outline:before,.ion-ios-medkit:before,.ion-ios-mic-off:before,.ion-ios-mic-outline:before,.ion-ios-mic:before,.ion-ios-minus-empty:before,.ion-ios-minus-outline:before,.ion-ios-minus:before,.ion-ios-monitor-outline:before,.ion-ios-monitor:before,.ion-ios-moon-outline:before,.ion-ios-moon:before,.ion-ios-more-outline:before,.ion-ios-more:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate-outline:before,.ion-ios-navigate:before,.ion-ios-nutrition-outline:before,.ion-ios-nutrition:before,.ion-ios-paper-outline:before,.ion-ios-paper:before,.ion-ios-paperplane-outline:before,.ion-ios-paperplane:before,.ion-ios-partlysunny-outline:before,.ion-ios-partlysunny:before,.ion-ios-pause-outline:before,.ion-ios-pause:before,.ion-ios-paw-outline:before,.ion-ios-paw:before,.ion-ios-people-outline:before,.ion-ios-people:before,.ion-ios-person-outline:before,.ion-ios-person:before,.ion-ios-personadd-outline:before,.ion-ios-personadd:before,.ion-ios-photos-outline:before,.ion-ios-photos:before,.ion-ios-pie-outline:before,.ion-ios-pie:before,.ion-ios-pint-outline:before,.ion-ios-pint:before,.ion-ios-play-outline:before,.ion-ios-play:before,.ion-ios-plus-empty:before,.ion-ios-plus-outline:before,.ion-ios-plus:before,.ion-ios-pricetag-outline:before,.ion-ios-pricetag:before,.ion-ios-pricetags-outline:before,.ion-ios-pricetags:before,.ion-ios-printer-outline:before,.ion-ios-printer:before,.ion-ios-pulse-strong:before,.ion-ios-pulse:before,.ion-ios-rainy-outline:before,.ion-ios-rainy:before,.ion-ios-recording-outline:before,.ion-ios-recording:before,.ion-ios-redo-outline:before,.ion-ios-redo:before,.ion-ios-refresh-empty:before,.ion-ios-refresh-outline:before,.ion-ios-refresh:before,.ion-ios-reload:before,.ion-ios-reverse-camera-outline:before,.ion-ios-reverse-camera:before,.ion-ios-rewind-outline:before,.ion-ios-rewind:before,.ion-ios-rose-outline:before,.ion-ios-rose:before,.ion-ios-search-strong:before,.ion-ios-search:before,.ion-ios-settings-strong:before,.ion-ios-settings:before,.ion-ios-shuffle-strong:before,.ion-ios-shuffle:before,.ion-ios-skipbackward-outline:before,.ion-ios-skipbackward:before,.ion-ios-skipforward-outline:before,.ion-ios-skipforward:before,.ion-ios-snowy:before,.ion-ios-speedometer-outline:before,.ion-ios-speedometer:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-star:before,.ion-ios-stopwatch-outline:before,.ion-ios-stopwatch:before,.ion-ios-sunny-outline:before,.ion-ios-sunny:before,.ion-ios-telephone-outline:before,.ion-ios-telephone:before,.ion-ios-tennisball-outline:before,.ion-ios-tennisball:before,.ion-ios-thunderstorm-outline:before,.ion-ios-thunderstorm:before,.ion-ios-time-outline:before,.ion-ios-time:before,.ion-ios-timer-outline:before,.ion-ios-timer:before,.ion-ios-toggle-outline:before,.ion-ios-toggle:before,.ion-ios-trash-outline:before,.ion-ios-trash:before,.ion-ios-undo-outline:before,.ion-ios-undo:before,.ion-ios-unlocked-outline:before,.ion-ios-unlocked:before,.ion-ios-upload-outline:before,.ion-ios-upload:before,.ion-ios-videocam-outline:before,.ion-ios-videocam:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-wineglass-outline:before,.ion-ios-wineglass:before,.ion-ios-world-outline:before,.ion-ios-world:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-location:before,.ion-lock-combination:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-minus:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon-round:before,.ion-navicon:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paintbrush:before,.ion-paintbucket:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person-add:before,.ion-person-stalker:before,.ion-person:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-plus:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-reply-all:before,.ion-reply:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad-outline:before,.ion-sad:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android-outline:before,.ion-social-android:before,.ion-social-angular-outline:before,.ion-social-angular:before,.ion-social-apple-outline:before,.ion-social-apple:before,.ion-social-bitcoin-outline:before,.ion-social-bitcoin:before,.ion-social-buffer-outline:before,.ion-social-buffer:before,.ion-social-chrome-outline:before,.ion-social-chrome:before,.ion-social-codepen-outline:before,.ion-social-codepen:before,.ion-social-css3-outline:before,.ion-social-css3:before,.ion-social-designernews-outline:before,.ion-social-designernews:before,.ion-social-dribbble-outline:before,.ion-social-dribbble:before,.ion-social-dropbox-outline:before,.ion-social-dropbox:before,.ion-social-euro-outline:before,.ion-social-euro:before,.ion-social-facebook-outline:before,.ion-social-facebook:before,.ion-social-foursquare-outline:before,.ion-social-foursquare:before,.ion-social-freebsd-devil:before,.ion-social-github-outline:before,.ion-social-github:before,.ion-social-google-outline:before,.ion-social-google:before,.ion-social-googleplus-outline:before,.ion-social-googleplus:before,.ion-social-hackernews-outline:before,.ion-social-hackernews:before,.ion-social-html5-outline:before,.ion-social-html5:before,.ion-social-instagram-outline:before,.ion-social-instagram:before,.ion-social-javascript-outline:before,.ion-social-javascript:before,.ion-social-linkedin-outline:before,.ion-social-linkedin:before,.ion-social-markdown:before,.ion-social-nodejs:before,.ion-social-octocat:before,.ion-social-pinterest-outline:before,.ion-social-pinterest:before,.ion-social-python:before,.ion-social-reddit-outline:before,.ion-social-reddit:before,.ion-social-rss-outline:before,.ion-social-rss:before,.ion-social-sass:before,.ion-social-skype-outline:before,.ion-social-skype:before,.ion-social-snapchat-outline:before,.ion-social-snapchat:before,.ion-social-tumblr-outline:before,.ion-social-tumblr:before,.ion-social-tux:before,.ion-social-twitch-outline:before,.ion-social-twitch:before,.ion-social-twitter-outline:before,.ion-social-twitter:before,.ion-social-usd-outline:before,.ion-social-usd:before,.ion-social-vimeo-outline:before,.ion-social-vimeo:before,.ion-social-whatsapp-outline:before,.ion-social-whatsapp:before,.ion-social-windows-outline:before,.ion-social-windows:before,.ion-social-wordpress-outline:before,.ion-social-wordpress:before,.ion-social-yahoo-outline:before,.ion-social-yahoo:before,.ion-social-yen-outline:before,.ion-social-yen:before,.ion-social-youtube-outline:before,.ion-social-youtube:before,.ion-soup-can-outline:before,.ion-soup-can:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle-filled:before,.ion-toggle:before,.ion-transgender:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-tshirt-outline:before,.ion-tshirt:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before,.ionicons,.text-editable:hover:after{display:inline-block;font-family:Ionicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-alert:before{content:""}.ion-alert-circled:before{content:""}.ion-android-add:before{content:""}.ion-android-add-circle:before{content:""}.ion-android-alarm-clock:before{content:""}.icon-alert:before,.ion-android-alert:before{content:""}.ion-android-apps:before{content:""}.ion-android-archive:before{content:""}.ion-android-arrow-back:before{content:""}.ion-android-arrow-down:before{content:""}.ion-android-arrow-dropdown:before{content:""}.ion-android-arrow-dropdown-circle:before{content:""}.ion-android-arrow-dropleft:before{content:""}.ion-android-arrow-dropleft-circle:before{content:""}.ion-android-arrow-dropright:before{content:""}.ion-android-arrow-dropright-circle:before{content:""}.ion-android-arrow-dropup:before{content:""}.ion-android-arrow-dropup-circle:before{content:""}.ion-android-arrow-forward:before{content:""}.ion-android-arrow-up:before{content:""}.ion-android-attach:before{content:""}.ion-android-bar:before{content:""}.ion-android-bicycle:before{content:""}.ion-android-boat:before{content:""}.ion-android-bookmark:before{content:""}.ion-android-bulb:before{content:""}.ion-android-bus:before{content:""}.ion-android-calendar:before{content:""}.ion-android-call:before{content:""}.ion-android-camera:before{content:""}.ion-android-cancel:before{content:""}.ion-android-car:before{content:""}.ion-android-cart:before{content:""}.ion-android-chat:before{content:""}.ion-android-checkbox:before{content:""}.ion-android-checkbox-blank:before{content:""}.ion-android-checkbox-outline:before{content:""}.ion-android-checkbox-outline-blank:before{content:""}.ion-android-checkmark-circle:before{content:""}.ion-android-clipboard:before{content:""}.ion-android-close:before{content:""}.ion-android-cloud:before{content:""}.ion-android-cloud-circle:before{content:""}.ion-android-cloud-done:before{content:""}.ion-android-cloud-outline:before{content:""}.ion-android-color-palette:before{content:""}.ion-android-compass:before{content:""}.ion-android-contact:before{content:""}.ion-android-contacts:before{content:""}.ion-android-contract:before{content:""}.ion-android-create:before{content:""}.ion-android-delete:before{content:""}.ion-android-desktop:before{content:""}.ion-android-document:before{content:""}.ion-android-done:before{content:""}.ion-android-done-all:before{content:""}.ion-android-download:before{content:""}.ion-android-drafts:before{content:""}.ion-android-exit:before{content:""}.ion-android-expand:before{content:""}.ion-android-favorite:before{content:""}.ion-android-favorite-outline:before{content:""}.ion-android-film:before{content:""}.ion-android-folder:before{content:""}.ion-android-folder-open:before{content:""}.ion-android-funnel:before{content:""}.ion-android-globe:before{content:""}.ion-android-hand:before{content:""}.ion-android-hangout:before{content:""}.ion-android-happy:before{content:""}.ion-android-home:before{content:""}.ion-android-image:before{content:""}.ion-android-laptop:before{content:""}.ion-android-list:before{content:""}.ion-android-locate:before{content:""}.ion-android-lock:before{content:""}.ion-android-mail:before{content:""}.ion-android-map:before{content:""}.ion-android-menu:before{content:""}.ion-android-microphone:before{content:""}.ion-android-microphone-off:before{content:""}.ion-android-more-horizontal:before{content:""}.ion-android-more-vertical:before{content:""}.ion-android-navigate:before{content:""}.ion-android-notifications:before{content:""}.ion-android-notifications-none:before{content:""}.ion-android-notifications-off:before{content:""}.ion-android-open:before{content:""}.ion-android-options:before{content:""}.ion-android-people:before{content:""}.ion-android-person:before{content:""}.ion-android-person-add:before{content:""}.ion-android-phone-landscape:before{content:""}.ion-android-phone-portrait:before{content:""}.ion-android-pin:before{content:""}.ion-android-plane:before{content:""}.ion-android-playstore:before{content:""}.ion-android-print:before{content:""}.ion-android-radio-button-off:before{content:""}.ion-android-radio-button-on:before{content:""}.ion-android-refresh:before{content:""}.ion-android-remove:before{content:""}.ion-android-remove-circle:before{content:""}.ion-android-restaurant:before{content:""}.ion-android-sad:before{content:""}.ion-android-search:before{content:""}.ion-android-send:before{content:""}.ion-android-settings:before{content:""}.ion-android-share:before{content:""}.ion-android-share-alt:before{content:""}.ion-android-star:before{content:""}.ion-android-star-half:before{content:""}.ion-android-star-outline:before{content:""}.ion-android-stopwatch:before{content:""}.ion-android-subway:before{content:""}.ion-android-sunny:before{content:""}.ion-android-sync:before{content:""}.ion-android-textsms:before{content:""}.ion-android-time:before{content:""}.ion-android-train:before{content:""}.ion-android-unlock:before{content:""}.ion-android-upload:before{content:""}.ion-android-volume-down:before{content:""}.ion-android-volume-mute:before{content:""}.ion-android-volume-off:before{content:""}.ion-android-volume-up:before{content:""}.ion-android-walk:before{content:""}.ion-android-warning:before{content:""}.ion-android-watch:before{content:""}.ion-android-wifi:before{content:""}.ion-aperture:before{content:""}.ion-archive:before{content:""}.ion-arrow-down-a:before{content:""}.ion-arrow-down-b:before{content:""}.ion-arrow-down-c:before{content:""}.ion-arrow-expand:before{content:""}.ion-arrow-graph-down-left:before{content:""}.ion-arrow-graph-down-right:before{content:""}.ion-arrow-graph-up-left:before{content:""}.ion-arrow-graph-up-right:before{content:""}.ion-arrow-left-a:before{content:""}.ion-arrow-left-b:before{content:""}.ion-arrow-left-c:before{content:""}.ion-arrow-move:before{content:""}.ion-arrow-resize:before{content:""}.ion-arrow-return-left:before{content:""}.ion-arrow-return-right:before{content:""}.ion-arrow-right-a:before{content:""}.ion-arrow-right-b:before{content:""}.ion-arrow-right-c:before{content:""}.ion-arrow-shrink:before{content:""}.ion-arrow-swap:before{content:""}.ion-arrow-up-a:before{content:""}.ion-arrow-up-b:before{content:""}.ion-arrow-up-c:before{content:""}.ion-asterisk:before{content:""}.ion-at:before{content:""}.ion-backspace:before{content:""}.ion-backspace-outline:before{content:""}.ion-bag:before{content:""}.ion-battery-charging:before{content:""}.ion-battery-empty:before{content:""}.ion-battery-full:before{content:""}.ion-battery-half:before{content:""}.ion-battery-low:before{content:""}.ion-beaker:before{content:""}.ion-beer:before{content:""}.ion-bluetooth:before{content:""}.ion-bonfire:before{content:""}.ion-bookmark:before{content:""}.ion-bowtie:before{content:""}.ion-briefcase:before{content:""}.ion-bug:before{content:""}.ion-calculator:before{content:""}.ion-calendar:before{content:""}.ion-camera:before{content:""}.ion-card:before{content:""}.ion-cash:before{content:""}.ion-chatbox:before{content:""}.ion-chatbox-working:before{content:""}.ion-chatboxes:before{content:""}.ion-chatbubble:before{content:""}.ion-chatbubble-working:before{content:""}.ion-chatbubbles:before{content:""}.ion-checkmark:before{content:""}.ion-checkmark-circled:before{content:""}.ion-checkmark-round:before{content:""}.ion-chevron-down:before{content:""}.ion-chevron-left:before{content:""}.ion-chevron-right:before{content:""}.ion-chevron-up:before{content:""}.ion-clipboard:before{content:""}.ion-clock:before{content:""}.ion-close:before{content:""}.ion-close-circled:before{content:""}.ion-close-round:before{content:""}.ion-closed-captioning:before{content:""}.ion-cloud:before{content:""}.ion-code:before{content:""}.ion-code-download:before{content:""}.ion-code-working:before{content:""}.ion-coffee:before{content:""}.ion-compass:before{content:""}.ion-compose:before{content:""}.ion-connection-bars:before{content:""}.ion-contrast:before{content:""}.ion-crop:before{content:""}.ion-cube:before{content:""}.ion-disc:before{content:""}.ion-document:before{content:""}.ion-document-text:before{content:""}.ion-drag:before{content:""}.ion-earth:before{content:""}.ion-easel:before{content:""}.ion-edit:before{content:""}.ion-egg:before{content:""}.ion-eject:before{content:""}.ion-email:before{content:""}.ion-email-unread:before{content:""}.ion-erlenmeyer-flask:before{content:""}.ion-erlenmeyer-flask-bubbles:before{content:""}.ion-eye:before{content:""}.ion-eye-disabled:before{content:""}.ion-female:before{content:""}.ion-filing:before{content:""}.ion-film-marker:before{content:""}.ion-fireball:before{content:""}.ion-flag:before{content:""}.ion-flame:before{content:""}.ion-flash:before{content:""}.ion-flash-off:before{content:""}.ion-folder:before{content:""}.ion-fork:before{content:""}.ion-fork-repo:before{content:""}.ion-forward:before{content:""}.ion-funnel:before{content:""}.ion-gear-a:before{content:""}.ion-gear-b:before{content:""}.ion-grid:before{content:""}.ion-hammer:before{content:""}.ion-happy:before{content:""}.ion-happy-outline:before{content:""}.ion-headphone:before{content:""}.ion-heart:before{content:""}.ion-heart-broken:before{content:""}.ion-help:before{content:""}.ion-help-buoy:before{content:""}.ion-help-circled:before{content:""}.ion-home:before{content:""}.ion-icecream:before{content:""}.ion-image:before{content:""}.ion-images:before{content:""}.ion-information:before{content:""}.ion-information-circled:before{content:""}.ion-ionic:before{content:""}.ion-ios-alarm:before{content:""}.ion-ios-alarm-outline:before{content:""}.ion-ios-albums:before{content:""}.ion-ios-albums-outline:before{content:""}.ion-ios-americanfootball:before{content:""}.ion-ios-americanfootball-outline:before{content:""}.ion-ios-analytics:before{content:""}.ion-ios-analytics-outline:before{content:""}.ion-ios-arrow-back:before{content:""}.ion-ios-arrow-down:before{content:""}.ion-ios-arrow-forward:before{content:""}.ion-ios-arrow-left:before{content:""}.ion-ios-arrow-right:before{content:""}.ion-ios-arrow-thin-down:before{content:""}.ion-ios-arrow-thin-left:before{content:""}.ion-ios-arrow-thin-right:before{content:""}.ion-ios-arrow-thin-up:before{content:""}.ion-ios-arrow-up:before{content:""}.ion-ios-at:before{content:""}.ion-ios-at-outline:before{content:""}.ion-ios-barcode:before{content:""}.ion-ios-barcode-outline:before{content:""}.ion-ios-baseball:before{content:""}.ion-ios-baseball-outline:before{content:""}.ion-ios-basketball:before{content:""}.ion-ios-basketball-outline:before{content:""}.ion-ios-bell:before{content:""}.ion-ios-bell-outline:before{content:""}.ion-ios-body:before{content:""}.ion-ios-body-outline:before{content:""}.ion-ios-bolt:before{content:""}.ion-ios-bolt-outline:before{content:""}.ion-ios-book:before{content:""}.ion-ios-book-outline:before{content:""}.ion-ios-bookmarks:before{content:""}.ion-ios-bookmarks-outline:before{content:""}.ion-ios-box:before{content:""}.ion-ios-box-outline:before{content:""}.ion-ios-briefcase:before{content:""}.ion-ios-briefcase-outline:before{content:""}.ion-ios-browsers:before{content:""}.ion-ios-browsers-outline:before{content:""}.ion-ios-calculator:before{content:""}.ion-ios-calculator-outline:before{content:""}.ion-ios-calendar:before{content:""}.ion-ios-calendar-outline:before{content:""}.ion-ios-camera:before{content:""}.ion-ios-camera-outline:before{content:""}.ion-ios-cart:before{content:""}.ion-ios-cart-outline:before{content:""}.ion-ios-chatboxes:before{content:""}.ion-ios-chatboxes-outline:before{content:""}.ion-ios-chatbubble:before{content:""}.ion-ios-chatbubble-outline:before{content:""}.ion-ios-checkmark:before{content:""}.ion-ios-checkmark-empty:before{content:""}.ion-ios-checkmark-outline:before{content:""}.ion-ios-circle-filled:before{content:""}.ion-ios-circle-outline:before{content:""}.ion-ios-clock:before{content:""}.ion-ios-clock-outline:before{content:""}.ion-ios-close:before{content:""}.ion-ios-close-empty:before{content:""}.ion-ios-close-outline:before{content:""}.ion-ios-cloud:before{content:""}.ion-ios-cloud-download:before{content:""}.ion-ios-cloud-download-outline:before{content:""}.ion-ios-cloud-outline:before{content:""}.ion-ios-cloud-upload:before{content:""}.ion-ios-cloud-upload-outline:before{content:""}.ion-ios-cloudy:before{content:""}.ion-ios-cloudy-night:before{content:""}.ion-ios-cloudy-night-outline:before{content:""}.ion-ios-cloudy-outline:before{content:""}.ion-ios-cog:before{content:""}.ion-ios-cog-outline:before{content:""}.ion-ios-color-filter:before{content:""}.ion-ios-color-filter-outline:before{content:""}.ion-ios-color-wand:before{content:""}.ion-ios-color-wand-outline:before{content:""}.ion-ios-compose:before{content:""}.ion-ios-compose-outline:before{content:""}.ion-ios-contact:before{content:""}.ion-ios-contact-outline:before{content:""}.ion-ios-copy:before{content:""}.ion-ios-copy-outline:before{content:""}.ion-ios-crop:before{content:""}.ion-ios-crop-strong:before{content:""}.ion-ios-download:before{content:""}.ion-ios-download-outline:before{content:""}.ion-ios-drag:before{content:""}.ion-ios-email:before{content:""}.ion-ios-email-outline:before{content:""}.ion-ios-eye:before{content:""}.ion-ios-eye-outline:before{content:""}.ion-ios-fastforward:before{content:""}.ion-ios-fastforward-outline:before{content:""}.ion-ios-filing:before{content:""}.ion-ios-filing-outline:before{content:""}.ion-ios-film:before{content:""}.ion-ios-film-outline:before{content:""}.ion-ios-flag:before{content:""}.ion-ios-flag-outline:before{content:""}.ion-ios-flame:before{content:""}.ion-ios-flame-outline:before{content:""}.ion-ios-flask:before{content:""}.ion-ios-flask-outline:before{content:""}.ion-ios-flower:before{content:""}.ion-ios-flower-outline:before{content:""}.ion-ios-folder:before{content:""}.ion-ios-folder-outline:before{content:""}.ion-ios-football:before{content:""}.ion-ios-football-outline:before{content:""}.ion-ios-game-controller-a:before{content:""}.ion-ios-game-controller-a-outline:before{content:""}.ion-ios-game-controller-b:before{content:""}.ion-ios-game-controller-b-outline:before{content:""}.ion-ios-gear:before{content:""}.ion-ios-gear-outline:before{content:""}.ion-ios-glasses:before{content:""}.ion-ios-glasses-outline:before{content:""}.ion-ios-grid-view:before{content:""}.ion-ios-grid-view-outline:before{content:""}.ion-ios-heart:before{content:""}.ion-ios-heart-outline:before{content:""}.ion-ios-help:before{content:""}.ion-ios-help-empty:before{content:""}#menu .footer .icon-help:before,.icon-help:before,.ion-ios-help-outline:before{content:""}.ion-ios-home:before{content:""}.ion-ios-home-outline:before{content:""}.ion-ios-infinite:before{content:""}.ion-ios-infinite-outline:before{content:""}.ion-ios-information:before{content:""}.ion-ios-information-empty:before{content:""}.ion-ios-information-outline:before{content:""}.ion-ios-ionic-outline:before{content:""}.ion-ios-keypad:before{content:""}.ion-ios-keypad-outline:before{content:""}.ion-ios-lightbulb:before{content:""}.ion-ios-lightbulb-outline:before{content:""}.ion-ios-list:before{content:""}.ion-ios-list-outline:before{content:""}.ion-ios-location:before{content:""}.ion-ios-location-outline:before{content:""}.ion-ios-locked:before{content:""}.ion-ios-locked-outline:before{content:""}.ion-ios-loop:before{content:""}.ion-ios-loop-strong:before{content:""}.ion-ios-medical:before{content:""}.ion-ios-medical-outline:before{content:""}.ion-ios-medkit:before{content:""}.ion-ios-medkit-outline:before{content:""}.ion-ios-mic:before{content:""}.ion-ios-mic-off:before{content:""}.ion-ios-mic-outline:before{content:""}.ion-ios-minus:before{content:""}.ion-ios-minus-empty:before{content:""}.ion-ios-minus-outline:before{content:""}.ion-ios-monitor:before{content:""}.ion-ios-monitor-outline:before{content:""}.ion-ios-moon:before{content:""}.ion-ios-moon-outline:before{content:""}.ion-ios-more:before{content:""}.ion-ios-more-outline:before{content:""}.ion-ios-musical-note:before{content:""}.ion-ios-musical-notes:before{content:""}.ion-ios-navigate:before{content:""}.ion-ios-navigate-outline:before{content:""}.ion-ios-nutrition:before{content:""}.ion-ios-nutrition-outline:before{content:""}.ion-ios-paper:before{content:""}.ion-ios-paper-outline:before{content:""}.ion-ios-paperplane:before{content:""}.ion-ios-paperplane-outline:before{content:""}.ion-ios-partlysunny:before{content:""}.ion-ios-partlysunny-outline:before{content:""}.ion-ios-pause:before{content:""}.ion-ios-pause-outline:before{content:""}.ion-ios-paw:before{content:""}.ion-ios-paw-outline:before{content:""}.ion-ios-people:before{content:""}.ion-ios-people-outline:before{content:""}.ion-ios-person:before{content:""}.ion-ios-person-outline:before{content:""}.ion-ios-personadd:before{content:""}.ion-ios-personadd-outline:before{content:""}.ion-ios-photos:before{content:""}.ion-ios-photos-outline:before{content:""}.ion-ios-pie:before{content:""}.ion-ios-pie-outline:before{content:""}.ion-ios-pint:before{content:""}.ion-ios-pint-outline:before{content:""}.ion-ios-play:before{content:""}.ion-ios-play-outline:before{content:""}.ion-ios-plus:before{content:""}.ion-ios-plus-empty:before{content:""}.ion-ios-plus-outline:before{content:""}.ion-ios-pricetag:before{content:""}.ion-ios-pricetag-outline:before{content:""}.ion-ios-pricetags:before{content:""}.ion-ios-pricetags-outline:before{content:""}.ion-ios-printer:before{content:""}.ion-ios-printer-outline:before{content:""}.ion-ios-pulse:before{content:""}.ion-ios-pulse-strong:before{content:""}.ion-ios-rainy:before{content:""}.ion-ios-rainy-outline:before{content:""}.ion-ios-recording:before{content:""}.ion-ios-recording-outline:before{content:""}.ion-ios-redo:before{content:""}.ion-ios-redo-outline:before{content:""}.ion-ios-refresh:before{content:""}.ion-ios-refresh-empty:before{content:""}.ion-ios-refresh-outline:before{content:""}.ion-ios-reload:before{content:""}.ion-ios-reverse-camera:before{content:""}.ion-ios-reverse-camera-outline:before{content:""}.ion-ios-rewind:before{content:""}.ion-ios-rewind-outline:before{content:""}.ion-ios-rose:before{content:""}.ion-ios-rose-outline:before{content:""}.ion-ios-search:before{content:""}.ion-ios-search-strong:before{content:""}.ion-ios-settings:before{content:""}.ion-ios-settings-strong:before{content:""}.ion-ios-shuffle:before{content:""}.ion-ios-shuffle-strong:before{content:""}.ion-ios-skipbackward:before{content:""}.ion-ios-skipbackward-outline:before{content:""}.ion-ios-skipforward:before{content:""}.ion-ios-skipforward-outline:before{content:""}.ion-ios-snowy:before{content:""}.ion-ios-speedometer:before{content:""}.ion-ios-speedometer-outline:before{content:""}.ion-ios-star:before{content:""}.ion-ios-star-half:before{content:""}.ion-ios-star-outline:before{content:""}.ion-ios-stopwatch:before{content:""}.ion-ios-stopwatch-outline:before{content:""}.ion-ios-sunny:before{content:""}.ion-ios-sunny-outline:before{content:""}.ion-ios-telephone:before{content:""}.ion-ios-telephone-outline:before{content:""}.ion-ios-tennisball:before{content:""}.ion-ios-tennisball-outline:before{content:""}.ion-ios-thunderstorm:before{content:""}.ion-ios-thunderstorm-outline:before{content:""}.ion-ios-time:before{content:""}.ion-ios-time-outline:before{content:""}.ion-ios-timer:before{content:""}.ion-ios-timer-outline:before{content:""}.ion-ios-toggle:before{content:""}.ion-ios-toggle-outline:before{content:""}.ion-ios-trash:before{content:""}.ion-ios-trash-outline:before{content:""}.ion-ios-undo:before{content:""}.ion-ios-undo-outline:before{content:""}.ion-ios-unlocked:before{content:""}.ion-ios-unlocked-outline:before{content:""}.ion-ios-upload:before{content:""}.ion-ios-upload-outline:before{content:""}.ion-ios-videocam:before{content:""}.ion-ios-videocam-outline:before{content:""}.ion-ios-volume-high:before{content:""}.ion-ios-volume-low:before{content:""}.ion-ios-wineglass:before{content:""}.ion-ios-wineglass-outline:before{content:""}.ion-ios-world:before{content:""}.ion-ios-world-outline:before{content:""}.ion-ipad:before{content:""}.ion-iphone:before{content:""}.ion-ipod:before{content:""}.ion-jet:before{content:""}.ion-key:before{content:""}.ion-knife:before{content:""}.ion-laptop:before{content:""}.ion-leaf:before{content:""}.ion-levels:before{content:""}.ion-lightbulb:before{content:""}.ion-link:before{content:""}.ion-load-a:before{content:""}.ion-load-b:before{content:""}.ion-load-c:before{content:""}.ion-load-d:before{content:""}.ion-location:before{content:""}.ion-lock-combination:before{content:""}.ion-locked:before{content:""}.ion-log-in:before{content:""}.ion-log-out:before{content:""}.ion-loop:before{content:""}.ion-magnet:before{content:""}.ion-male:before{content:""}.ion-man:before{content:""}.ion-map:before{content:""}.ion-medkit:before{content:""}.ion-merge:before{content:""}.ion-mic-a:before{content:""}.ion-mic-b:before{content:""}.ion-mic-c:before{content:""}.ion-minus:before{content:""}.ion-minus-circled:before{content:""}.ion-minus-round:before{content:""}.ion-model-s:before{content:""}.ion-monitor:before{content:""}.ion-more:before{content:""}.ion-mouse:before{content:""}.ion-music-note:before{content:""}.ion-navicon:before{content:""}.ion-navicon-round:before{content:""}.ion-navigate:before{content:""}.ion-network:before{content:""}.ion-no-smoking:before{content:""}.ion-nuclear:before{content:""}.ion-outlet:before{content:""}.ion-paintbrush:before{content:""}.ion-paintbucket:before{content:""}.ion-paper-airplane:before{content:""}.ion-paperclip:before{content:""}.ion-pause:before{content:""}.ion-person:before{content:""}.ion-person-add:before{content:""}.ion-person-stalker:before{content:""}.ion-pie-graph:before{content:""}.ion-pin:before{content:""}.ion-pinpoint:before{content:""}.ion-pizza:before{content:""}.ion-plane:before{content:""}.ion-planet:before{content:""}.ion-play:before{content:""}.ion-playstation:before{content:""}.ion-plus:before{content:""}.ion-plus-circled:before{content:""}.ion-plus-round:before{content:""}.ion-podium:before{content:""}.ion-pound:before{content:""}.ion-power:before{content:""}.ion-pricetag:before{content:""}.ion-pricetags:before{content:""}.ion-printer:before{content:""}.ion-pull-request:before{content:""}.ion-qr-scanner:before{content:""}.ion-quote:before{content:""}.ion-radio-waves:before{content:""}.ion-record:before{content:""}.ion-refresh:before{content:""}.ion-reply:before{content:""}.ion-reply-all:before{content:""}.ion-ribbon-a:before{content:""}.ion-ribbon-b:before{content:""}.ion-sad:before{content:""}.ion-sad-outline:before{content:""}.ion-scissors:before{content:""}.ion-search:before{content:""}.ion-settings:before{content:""}.ion-share:before{content:""}.ion-shuffle:before{content:""}.ion-skip-backward:before{content:""}.ion-skip-forward:before{content:""}.ion-social-android:before{content:""}.ion-social-android-outline:before{content:""}.ion-social-angular:before{content:""}.ion-social-angular-outline:before{content:""}.ion-social-apple:before{content:""}.ion-social-apple-outline:before{content:""}.ion-social-bitcoin:before{content:""}.ion-social-bitcoin-outline:before{content:""}.ion-social-buffer:before{content:""}.ion-social-buffer-outline:before{content:""}.ion-social-chrome:before{content:""}.ion-social-chrome-outline:before{content:""}.ion-social-codepen:before{content:""}.ion-social-codepen-outline:before{content:""}.ion-social-css3:before{content:""}.ion-social-css3-outline:before{content:""}.ion-social-designernews:before{content:""}.ion-social-designernews-outline:before{content:""}.ion-social-dribbble:before{content:""}.ion-social-dribbble-outline:before{content:""}.ion-social-dropbox:before{content:""}.ion-social-dropbox-outline:before{content:""}.ion-social-euro:before{content:""}.ion-social-euro-outline:before{content:""}.ion-social-facebook:before{content:""}.ion-social-facebook-outline:before{content:""}.ion-social-foursquare:before{content:""}.ion-social-foursquare-outline:before{content:""}.ion-social-freebsd-devil:before{content:""}.ion-social-github:before{content:""}.ion-social-github-outline:before{content:""}.ion-social-google:before{content:""}.ion-social-google-outline:before{content:""}.ion-social-googleplus:before{content:""}.ion-social-googleplus-outline:before{content:""}.ion-social-hackernews:before{content:""}.ion-social-hackernews-outline:before{content:""}.ion-social-html5:before{content:""}.ion-social-html5-outline:before{content:""}.ion-social-instagram:before{content:""}.ion-social-instagram-outline:before{content:""}.ion-social-javascript:before{content:""}.ion-social-javascript-outline:before{content:""}.ion-social-linkedin:before{content:""}.ion-social-linkedin-outline:before{content:""}.ion-social-markdown:before{content:""}.ion-social-nodejs:before{content:""}.ion-social-octocat:before{content:""}.ion-social-pinterest:before{content:""}.ion-social-pinterest-outline:before{content:""}.ion-social-python:before{content:""}.ion-social-reddit:before{content:""}.ion-social-reddit-outline:before{content:""}.ion-social-rss:before{content:""}.ion-social-rss-outline:before{content:""}.ion-social-sass:before{content:""}.ion-social-skype:before{content:""}.ion-social-skype-outline:before{content:""}.ion-social-snapchat:before{content:""}.ion-social-snapchat-outline:before{content:""}.ion-social-tumblr:before{content:""}.ion-social-tumblr-outline:before{content:""}.ion-social-tux:before{content:""}.ion-social-twitch:before{content:""}.ion-social-twitch-outline:before{content:""}.ion-social-twitter:before{content:""}.ion-social-twitter-outline:before{content:""}.ion-social-usd:before{content:""}.ion-social-usd-outline:before{content:""}.ion-social-vimeo:before{content:""}.ion-social-vimeo-outline:before{content:""}.ion-social-whatsapp:before{content:""}.ion-social-whatsapp-outline:before{content:""}.ion-social-windows:before{content:""}.ion-social-windows-outline:before{content:""}.ion-social-wordpress:before{content:""}.ion-social-wordpress-outline:before{content:""}.ion-social-yahoo:before{content:""}.ion-social-yahoo-outline:before{content:""}.ion-social-yen:before{content:""}.ion-social-yen-outline:before{content:""}.ion-social-youtube:before{content:""}.ion-social-youtube-outline:before{content:""}.ion-soup-can:before{content:""}.ion-soup-can-outline:before{content:""}.ion-speakerphone:before{content:""}.ion-speedometer:before{content:""}.ion-spoon:before{content:""}.ion-star:before{content:""}.ion-stats-bars:before{content:""}.ion-steam:before{content:""}.ion-stop:before{content:""}.ion-thermometer:before{content:""}.ion-thumbsdown:before{content:""}.ion-thumbsup:before{content:""}.ion-toggle:before{content:""}.ion-toggle-filled:before{content:""}.ion-transgender:before{content:""}.ion-trash-a:before{content:""}.ion-trash-b:before{content:""}.ion-trophy:before{content:""}.ion-tshirt:before{content:""}.ion-tshirt-outline:before{content:""}.ion-umbrella:before{content:""}.ion-university:before{content:""}.ion-unlocked:before{content:""}.ion-upload:before{content:""}.ion-usb:before{content:""}.ion-videocamera:before{content:""}.ion-volume-high:before{content:""}.ion-volume-low:before{content:""}.ion-volume-medium:before{content:""}.ion-volume-mute:before{content:""}.ion-wand:before{content:""}.ion-waterdrop:before{content:""}.ion-wifi:before{content:""}.ion-wineglass:before{content:""}.ion-woman:before{content:""}.ion-wrench:before{content:""}.ion-xbox:before{content:""}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;vertical-align:baseline;font:inherit;font-size:100%}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}audio:not([controls]){display:none;height:0}[hidden],template{display:none}script{display:none!important}html{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;line-height:1}:focus,a,a:active,a:focus,a:hover,button,button:focus{outline:0}a{-webkit-user-drag:none;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent}a[href]:hover{cursor:pointer}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}code,kbd,pre,samp{font-size:1em;font-family:monospace,serif}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;vertical-align:baseline;font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}fieldset{margin:0 2px;padding:.35em .625em .75em;border:1px solid silver}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-size:100%;font-family:inherit;outline-offset:0;outline-style:none;outline-width:0;-webkit-font-smoothing:inherit;background-image:none}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}img{-webkit-user-drag:none}table{border-spacing:0;border-collapse:collapse}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{overflow:hidden;-ms-touch-action:pan-y;touch-action:pan-y}.ionic-body,body{-webkit-touch-callout:none;-webkit-font-smoothing:antialiased;font-smoothing:antialiased;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0;padding:0;color:#000;word-wrap:break-word;font-size:14px;font-family:-apple-system;font-family:"-apple-system","Helvetica Neue",Roboto,"Segoe UI",sans-serif;line-height:20px;text-rendering:optimizeLegibility;-webkit-backface-visibility:hidden;-webkit-user-drag:none;-ms-content-zooming:none}body.grade-b,body.grade-c{text-rendering:auto}.content{position:relative}.scroll-content{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;margin-top:-1px;padding-top:1px;margin-bottom:-1px;width:auto;height:auto}.menu .scroll-content.scroll-content-false{z-index:11}.scroll-view{position:relative;display:block;overflow:hidden;margin-top:-1px}.scroll-view.overflow-scroll{position:relative}.scroll-view.scroll-x{overflow-x:scroll;overflow-y:hidden}.scroll-view.scroll-y{overflow-x:hidden;overflow-y:scroll}.scroll-view.scroll-xy{overflow-x:scroll;overflow-y:scroll}.scroll{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-transform-origin:left top;transform-origin:left top}@-ms-viewport{width:device-width}.scroll-bar{position:absolute;z-index:9999}.ng-animate .scroll-bar{visibility:hidden}.scroll-bar-h{right:2px;bottom:3px;left:2px;height:3px}.scroll-bar-h .scroll-bar-indicator{height:100%}.scroll-bar-v{top:2px;right:3px;bottom:2px;width:3px}.scroll-bar-v .scroll-bar-indicator{width:100%}.scroll-bar-indicator{position:absolute;border-radius:4px;background:rgba(0,0,0,.3);opacity:1;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.scroll-bar-indicator.scroll-bar-fade-out{opacity:0}.platform-android .scroll-bar-indicator{border-radius:0}.grade-b .scroll-bar-indicator,.grade-c .scroll-bar-indicator{background:#aaa}.grade-b .scroll-bar-indicator.scroll-bar-fade-out,.grade-c .scroll-bar-indicator.scroll-bar-fade-out{-webkit-transition:none;transition:none}ion-infinite-scroll{height:60px;width:100%;display:block;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}#menu .footer ion-infinite-scroll .icon-help,ion-infinite-scroll #menu .footer .icon-help,ion-infinite-scroll .icon,ion-infinite-scroll .icon-alert,ion-infinite-scroll .icon-help{color:#666;font-size:30px;color:#666}#menu .footer ion-infinite-scroll:not(.active) .icon-help:before,ion-infinite-scroll:not(.active) #menu .footer .icon-help:before,ion-infinite-scroll:not(.active) .icon-alert:before,ion-infinite-scroll:not(.active) .icon-help:before,ion-infinite-scroll:not(.active) .icon:before,ion-infinite-scroll:not(.active) .spinner{display:none}.overflow-scroll{overflow-x:hidden;overflow-y:scroll;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;top:0;right:0;bottom:0;left:0;position:absolute}.overflow-scroll.pane{overflow-x:hidden;overflow-y:scroll}.overflow-scroll .scroll{position:static;height:100%;-webkit-transform:translate3d(0,0,0)}.has-header{top:44px}.no-header{top:0}.has-subheader{top:88px}.has-tabs-top{top:93px}.has-header.has-subheader.has-tabs-top{top:137px}.has-footer{bottom:44px}.has-subfooter{bottom:88px}.bar-footer.has-tabs,.has-tabs{bottom:49px}.bar-footer.has-tabs.pane,.has-tabs.pane{bottom:49px;height:auto}.bar-subfooter.has-tabs{bottom:93px}.has-footer.has-tabs{bottom:93px}.pane{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition-duration:0;transition-duration:0;z-index:1}.view{z-index:1}.pane,.view{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;background-color:#fff;overflow:hidden}.view-container{position:absolute;display:block;width:100%;height:100%}p{margin:0 0 10px}small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.item.large-button-bar,.text-center{text-align:center}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:#000;font-weight:500;font-family:"-apple-system","Helvetica Neue",Roboto,"Segoe UI",sans-serif;line-height:1.2}.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1:first-child,.h2:first-child,.h3:first-child,h1:first-child,h2:first-child,h3:first-child{margin-top:0}.h1+.h1,.h1+.h2,.h1+.h3,.h1+h1,.h1+h2,.h1+h3,.h2+.h1,.h2+.h2,.h2+.h3,.h2+h1,.h2+h2,.h2+h3,.h3+.h1,.h3+.h2,.h3+.h3,.h3+h1,.h3+h2,.h3+h3,h1+.h1,h1+.h2,h1+.h3,h1+h1,h1+h2,h1+h3,h2+.h1,h2+.h2,h2+.h3,h2+h1,h2+h2,h2+h3,h3+.h1,h3+.h2,h3+.h3,h3+h1,h3+h2,h3+h3{margin-top:10px}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}.h1 small,h1 small{font-size:24px}.h2 small,h2 small{font-size:18px}.h3 small,.h4 small,h3 small,h4 small{font-size:14px}dl{margin-bottom:20px}dd,dt{line-height:1.42857}dt{font-weight:700}blockquote{margin:0 0 20px;padding:10px 20px;border-left:5px solid gray}blockquote p{font-weight:300;font-size:17.5px;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857}blockquote small:before{content:'\2014 \00A0'}blockquote:after,blockquote:before,q:after,q:before{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.42857}a{color:#387ef5}a.subdued{padding-right:10px;color:#888;text-decoration:none}a.subdued:hover{text-decoration:none}a.subdued:last-child{padding-right:0}.action-sheet-backdrop{-webkit-transition:background-color 150ms ease-in-out;transition:background-color 150ms ease-in-out;position:fixed;top:0;left:0;z-index:11;width:100%;height:100%;background-color:rgba(0,0,0,0)}.action-sheet-backdrop.active{background-color:rgba(0,0,0,.4)}.action-sheet-wrapper{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:all cubic-bezier(.36,.66,.04,1) .5s;transition:all cubic-bezier(.36,.66,.04,1) .5s;position:absolute;bottom:0;left:0;right:0;width:100%;max-width:500px;margin:auto}.action-sheet-up{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.action-sheet{margin-left:8px;margin-right:8px;width:auto;z-index:11;overflow:hidden}.action-sheet .button{display:block;padding:1px;width:100%;border-radius:0;border-color:#d1d3d6;background-color:transparent;color:#007aff;font-size:21px}.action-sheet .button:hover{color:#007aff}.action-sheet .button.destructive{color:#ff3b30}.action-sheet .button.destructive:hover{color:#ff3b30}.action-sheet .button.activated,.action-sheet .button.active{box-shadow:none;border-color:#d1d3d6;color:#007aff;background:#e4e5e7}#menu .footer .action-sheet-has-icons .icon-help,.action-sheet-has-icons #menu .footer .icon-help,.action-sheet-has-icons .icon,.action-sheet-has-icons .icon-alert,.action-sheet-has-icons .icon-help{position:absolute;left:16px}.action-sheet-title{padding:16px;color:#8f8f8f;text-align:center;font-size:13px}.action-sheet-group{margin-bottom:8px;border-radius:4px;background-color:#fff;overflow:hidden}.action-sheet-group .button{border-width:1px 0 0 0}.action-sheet-group .button:first-child:last-child{border-width:0}.action-sheet-options{background:#f1f2f3}.action-sheet-cancel .button{font-weight:500}.action-sheet-open{pointer-events:none}.action-sheet-open.modal-open .modal{pointer-events:none}.action-sheet-open .action-sheet-backdrop{pointer-events:auto}.platform-android .action-sheet-backdrop.active{background-color:rgba(0,0,0,.2)}.platform-android .action-sheet{margin:0}.platform-android .action-sheet .action-sheet-title,.platform-android .action-sheet .button{text-align:left;border-color:transparent;font-size:16px;color:inherit}.platform-android .action-sheet .action-sheet-title{font-size:14px;padding:16px;color:#666}.platform-android .action-sheet .button.activated,.platform-android .action-sheet .button.active{background:#e8e8e8}.platform-android .action-sheet-group{margin:0;border-radius:0;background-color:#fafafa}.platform-android .action-sheet-cancel{display:none}.platform-android .action-sheet-has-icons .button{padding-left:56px}.backdrop{position:fixed;top:0;left:0;z-index:11;width:100%;height:100%;background-color:rgba(0,0,0,.4);visibility:hidden;opacity:0;-webkit-transition:.1s opacity linear;transition:.1s opacity linear}.backdrop.visible{visibility:visible}.backdrop.active{opacity:1}.bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;right:0;left:0;z-index:9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:5px;width:100%;height:44px;border-width:0;border-style:solid;border-top:1px solid transparent;border-bottom:1px solid #ddd;background-color:#fff;background-size:0}@media (min--moz-device-pixel-ratio:1.5),(-webkit-min-device-pixel-ratio:1.5),(min-device-pixel-ratio:1.5),(min-resolution:144dpi),(min-resolution:1.5dppx){.bar{border:none;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);background-position:bottom;background-size:100% 1px;background-repeat:no-repeat}}.bar.bar-clear{border:none;background:0 0;color:#fff}.bar.bar-clear .button{color:#fff}.bar.bar-clear .title{color:#fff}.bar.item-input-inset .item-input-wrapper{margin-top:-1px}.bar.item-input-inset .item-input-wrapper input{padding-left:8px;width:94%;height:28px;background:0 0}.bar.bar-light{border-color:#ddd;background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);color:#444}.bar.bar-light .title{color:#444}.bar.bar-light.bar-footer{background-image:linear-gradient(180deg,#ddd,#ddd 50%,transparent 50%)}.bar.bar-stable{border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444}.bar.bar-stable .title{color:#444}.bar.bar-stable.bar-footer{background-image:linear-gradient(180deg,#b2b2b2,#b2b2b2 50%,transparent 50%)}.bar.bar-positive{border-color:#0c60ee;background-color:#387ef5;background-image:linear-gradient(0deg,#0c60ee,#0c60ee 50%,transparent 50%);color:#fff}.bar.bar-positive .title{color:#fff}.bar.bar-positive.bar-footer{background-image:linear-gradient(180deg,#0c60ee,#0c60ee 50%,transparent 50%)}.bar.bar-calm{border-color:#0a9dc7;background-color:#11c1f3;background-image:linear-gradient(0deg,#0a9dc7,#0a9dc7 50%,transparent 50%);color:#fff}.bar.bar-calm .title{color:#fff}.bar.bar-calm.bar-footer{background-image:linear-gradient(180deg,#0a9dc7,#0a9dc7 50%,transparent 50%)}.bar.bar-assertive{border-color:#e42112;background-color:#ef473a;background-image:linear-gradient(0deg,#e42112,#e42112 50%,transparent 50%);color:#fff}.bar.bar-assertive .title{color:#fff}.bar.bar-assertive.bar-footer{background-image:linear-gradient(180deg,#e42112,#e42112 50%,transparent 50%)}.bar.bar-balanced{border-color:#28a54c;background-color:#33cd5f;background-image:linear-gradient(0deg,#28a54c,#28a54c 50%,transparent 50%);color:#fff}.bar.bar-balanced .title{color:#fff}.bar.bar-balanced.bar-footer{background-image:linear-gradient(180deg,#28a54c,#28a54c 50%,transparent 50%)}.bar.bar-energized{border-color:#e6b500;background-color:#ffc900;background-image:linear-gradient(0deg,#e6b500,#e6b500 50%,transparent 50%);color:#fff}.bar.bar-energized .title{color:#fff}.bar.bar-energized.bar-footer{background-image:linear-gradient(180deg,#e6b500,#e6b500 50%,transparent 50%)}.bar.bar-royal{border-color:#6b46e5;background-color:#886aea;background-image:linear-gradient(0deg,#6b46e5,#6b46e5 50%,transparent 50%);color:#fff}.bar.bar-royal .title{color:#fff}.bar.bar-royal.bar-footer{background-image:linear-gradient(180deg,#6b46e5,#6b46e5 50%,transparent 50%)}.bar.bar-dark{border-color:#111;background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);color:#fff}.bar.bar-dark .title{color:#fff}.bar.bar-dark.bar-footer{background-image:linear-gradient(180deg,#111,#111 50%,transparent 50%)}.bar .title{display:block;position:absolute;top:0;right:0;left:0;z-index:0;overflow:hidden;margin:0 10px;min-width:30px;height:43px;text-align:center;text-overflow:ellipsis;white-space:nowrap;font-size:17px;font-weight:500;line-height:44px}.bar .title.title-left{text-align:left}.bar .title.title-right{text-align:right}.bar .title a{color:inherit}.bar .button,.bar button{z-index:1;padding:0 8px;min-width:initial;min-height:31px;font-weight:400;font-size:13px;line-height:32px}#menu .footer .bar .button .icon-help:before,#menu .footer .bar .button.icon-help:before,#menu .footer .bar button .icon-help:before,#menu .footer .bar button.icon-help:before,.bar #menu .footer .button.icon-help:before,.bar #menu .footer button.icon-help:before,.bar .button #menu .footer .icon-help:before,.bar .button .icon-alert:before,.bar .button .icon-help:before,.bar .button .icon:before,.bar .button.button-icon:before,.bar .button.icon-alert:before,.bar .button.icon-help:before,.bar .button.icon-left:before,.bar .button.icon-right:before,.bar .button.icon:before,.bar button #menu .footer .icon-help:before,.bar button .icon-alert:before,.bar button .icon-help:before,.bar button .icon:before,.bar button.button-icon:before,.bar button.icon-alert:before,.bar button.icon-help:before,.bar button.icon-left:before,.bar button.icon-right:before,.bar button.icon:before{padding-right:2px;padding-left:2px;font-size:20px;line-height:32px}.bar .button.button-icon,.bar button.button-icon{font-size:17px}#menu .footer .bar .button.button-icon .icon-help:before,#menu .footer .bar button.button-icon .icon-help:before,.bar .button.button-icon #menu .footer .icon-help:before,.bar .button.button-icon .icon-alert:before,.bar .button.button-icon .icon-help:before,.bar .button.button-icon .icon:before,.bar .button.button-icon.icon-left:before,.bar .button.button-icon.icon-right:before,.bar .button.button-icon:before,.bar button.button-icon #menu .footer .icon-help:before,.bar button.button-icon .icon-alert:before,.bar button.button-icon .icon-help:before,.bar button.button-icon .icon:before,.bar button.button-icon.icon-left:before,.bar button.button-icon.icon-right:before,.bar button.button-icon:before{vertical-align:top;font-size:32px;line-height:32px}.bar .button.button-clear,.bar .button.button-text,.bar button.button-clear,.bar button.button-text{padding-right:2px;padding-left:2px;font-weight:300;font-size:17px}#menu .footer .bar .button.button-clear .icon-help:before,#menu .footer .bar .button.button-clear.icon-help:before,#menu .footer .bar .button.button-text .icon-help:before,#menu .footer .bar .button.button-text.icon-help:before,#menu .footer .bar button.button-clear .icon-help:before,#menu .footer .bar button.button-clear.icon-help:before,#menu .footer .bar button.button-text .icon-help:before,#menu .footer .bar button.button-text.icon-help:before,.bar #menu .footer .button.button-clear.icon-help:before,.bar #menu .footer .button.button-text.icon-help:before,.bar #menu .footer button.button-clear.icon-help:before,.bar #menu .footer button.button-text.icon-help:before,.bar .button.button-clear #menu .footer .icon-help:before,.bar .button.button-clear .icon-alert:before,.bar .button.button-clear .icon-help:before,.bar .button.button-clear .icon:before,.bar .button.button-clear.icon-alert:before,.bar .button.button-clear.icon-help:before,.bar .button.button-clear.icon-left:before,.bar .button.button-clear.icon-right:before,.bar .button.button-clear.icon:before,.bar .button.button-text #menu .footer .icon-help:before,.bar .button.button-text .icon-alert:before,.bar .button.button-text .icon-help:before,.bar .button.button-text .icon:before,.bar .button.button-text.icon-alert:before,.bar .button.button-text.icon-help:before,.bar .button.icon-left.button-text:before,.bar .button.icon-right.button-text:before,.bar .button.icon.button-text:before,.bar button.button-clear #menu .footer .icon-help:before,.bar button.button-clear .icon-alert:before,.bar button.button-clear .icon-help:before,.bar button.button-clear .icon:before,.bar button.button-clear.icon-alert:before,.bar button.button-clear.icon-help:before,.bar button.button-clear.icon-left:before,.bar button.button-clear.icon-right:before,.bar button.button-clear.icon:before,.bar button.button-text #menu .footer .icon-help:before,.bar button.button-text .icon-alert:before,.bar button.button-text .icon-help:before,.bar button.button-text .icon:before,.bar button.button-text.icon-alert:before,.bar button.button-text.icon-help:before,.bar button.icon-left.button-text:before,.bar button.icon-right.button-text:before,.bar button.icon.button-text:before{font-size:32px;line-height:32px}.bar .button.back-button,.bar button.back-button{display:block;margin-right:5px;padding:0;white-space:nowrap;font-weight:400}.bar .button.back-button.activated,.bar .button.back-button.active,.bar button.back-button.activated,.bar button.back-button.active{opacity:.2}.bar .button-bar>.button,.bar .buttons>.button{min-height:31px;line-height:32px}.bar .button+.button-bar,.bar .button-bar+.button{margin-left:5px}.bar .buttons,.bar .buttons.primary-buttons,.bar .buttons.secondary-buttons{display:inherit}.bar .buttons span{display:inline-block}.bar .buttons-left span{margin-right:5px;display:inherit}.bar .buttons-right span{margin-left:5px;display:inherit}#menu .footer .popover-helptip .bar .buttons.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-right.icon-help,.bar .buttons.pull-right,.bar .popover-helptip #menu .footer .buttons.icon-bottom-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-bottom-right.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon-bottom-center.icon-alert,.bar .popover-helptip .buttons.icon-bottom-center.icon-help,.bar .popover-helptip .buttons.icon-bottom-right.icon-alert,.bar .popover-helptip .buttons.icon-bottom-right.icon-help,.bar .popover-helptip .buttons.icon-center.icon-alert,.bar .popover-helptip .buttons.icon-center.icon-help,.bar .popover-helptip .buttons.icon-right.icon-alert,.bar .popover-helptip .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon.icon-bottom-center,.bar .popover-helptip .buttons.icon.icon-bottom-right,.bar .popover-helptip .buttons.icon.icon-center,.bar .popover-helptip .buttons.icon.icon-right,.bar .title+.button:last-child,.bar .title+.buttons,.bar>.button+.button:last-child,.bar>.button.pull-right,.popover-helptip #menu .footer .bar .buttons.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-right.icon-help,.popover-helptip .bar .buttons.icon-bottom-center.icon-alert,.popover-helptip .bar .buttons.icon-bottom-center.icon-help,.popover-helptip .bar .buttons.icon-bottom-right.icon-alert,.popover-helptip .bar .buttons.icon-bottom-right.icon-help,.popover-helptip .bar .buttons.icon-center.icon-alert,.popover-helptip .bar .buttons.icon-center.icon-help,.popover-helptip .bar .buttons.icon-right.icon-alert,.popover-helptip .bar .buttons.icon-right.icon-help,.popover-helptip .bar .buttons.icon.icon-bottom-center,.popover-helptip .bar .buttons.icon.icon-bottom-right,.popover-helptip .bar .buttons.icon.icon-center,.popover-helptip .bar .buttons.icon.icon-right,.popover-helptip .bar>.button.icon-bottom-center.icon-alert,.popover-helptip .bar>.button.icon-bottom-center.icon-help,.popover-helptip .bar>.button.icon-bottom-right.icon-alert,.popover-helptip .bar>.button.icon-bottom-right.icon-help,.popover-helptip .bar>.button.icon-center.icon-alert,.popover-helptip .bar>.button.icon-center.icon-help,.popover-helptip .bar>.button.icon-right.icon-alert,.popover-helptip .bar>.button.icon-right.icon-help,.popover-helptip .bar>.button.icon.icon-bottom-center,.popover-helptip .bar>.button.icon.icon-bottom-right,.popover-helptip .bar>.button.icon.icon-center,.popover-helptip .bar>.button.icon.icon-right{position:absolute;top:5px;right:5px;bottom:5px}.platform-android .nav-bar-has-subheader .bar{background-image:none}#menu .footer .platform-android .bar .back-button .icon-help:before,.platform-android .bar .back-button #menu .footer .icon-help:before,.platform-android .bar .back-button .icon-alert:before,.platform-android .bar .back-button .icon-help:before,.platform-android .bar .back-button .icon:before{font-size:24px}.platform-android .bar .title{font-size:19px;line-height:44px}.bar-light .button{border-color:#ddd;background-color:#fff;color:#444}.bar-light .button:hover{color:#444;text-decoration:none}.bar-light .button.activated,.bar-light .button.active{border-color:#ccc;background-color:#fafafa}.bar-light .button.button-clear,.bar-light .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#444;font-size:17px}.bar-light .button.button-icon{border-color:transparent;background:0 0}.bar-stable .button{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.bar-stable .button:hover{color:#444;text-decoration:none}.bar-stable .button.activated,.bar-stable .button.active{border-color:#a2a2a2;background-color:#e5e5e5}.bar-stable .button.button-clear,.bar-stable .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#444;font-size:17px}.bar-stable .button.button-icon{border-color:transparent;background:0 0}.bar-positive .button{border-color:#0c60ee;background-color:#387ef5;color:#fff}.bar-positive .button:hover{color:#fff;text-decoration:none}.bar-positive .button.activated,.bar-positive .button.active{border-color:#0c60ee;background-color:#0c60ee}.bar-positive .button.button-clear,.bar-positive .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-positive .button.button-icon{border-color:transparent;background:0 0}.bar-calm .button{border-color:#0a9dc7;background-color:#11c1f3;color:#fff}.bar-calm .button:hover{color:#fff;text-decoration:none}.bar-calm .button.activated,.bar-calm .button.active{border-color:#0a9dc7;background-color:#0a9dc7}.bar-calm .button.button-clear,.bar-calm .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-calm .button.button-icon{border-color:transparent;background:0 0}.bar-assertive .button{border-color:#e42112;background-color:#ef473a;color:#fff}.bar-assertive .button:hover{color:#fff;text-decoration:none}.bar-assertive .button.activated,.bar-assertive .button.active{border-color:#e42112;background-color:#e42112}.bar-assertive .button.button-clear,.bar-assertive .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-assertive .button.button-icon{border-color:transparent;background:0 0}.bar-balanced .button{border-color:#28a54c;background-color:#33cd5f;color:#fff}.bar-balanced .button:hover{color:#fff;text-decoration:none}.bar-balanced .button.activated,.bar-balanced .button.active{border-color:#28a54c;background-color:#28a54c}.bar-balanced .button.button-clear,.bar-balanced .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-balanced .button.button-icon{border-color:transparent;background:0 0}.bar-energized .button{border-color:#e6b500;background-color:#ffc900;color:#fff}.bar-energized .button:hover{color:#fff;text-decoration:none}.bar-energized .button.activated,.bar-energized .button.active{border-color:#e6b500;background-color:#e6b500}.bar-energized .button.button-clear,.bar-energized .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-energized .button.button-icon{border-color:transparent;background:0 0}.bar-royal .button{border-color:#6b46e5;background-color:#886aea;color:#fff}.bar-royal .button:hover{color:#fff;text-decoration:none}.bar-royal .button.activated,.bar-royal .button.active{border-color:#6b46e5;background-color:#6b46e5}.bar-royal .button.button-clear,.bar-royal .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-royal .button.button-icon{border-color:transparent;background:0 0}.bar-dark .button{border-color:#111;background-color:#444;color:#fff}.bar-dark .button:hover{color:#fff;text-decoration:none}.bar-dark .button.activated,.bar-dark .button.active{border-color:#000;background-color:#262626}.bar-dark .button.button-clear,.bar-dark .button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#fff;font-size:17px}.bar-dark .button.button-icon{border-color:transparent;background:0 0}.bar-header{top:0;border-top-width:0;border-bottom-width:1px}.bar-header.has-tabs-top{border-bottom-width:0;background-image:none}.tabs-top .bar-header{border-bottom-width:0;background-image:none}.bar-footer{bottom:0;border-top-width:1px;border-bottom-width:0;background-position:top;height:44px}.bar-footer.item-input-inset{position:absolute}.bar-footer .title{height:43px;line-height:44px}.bar-tabs{padding:0}.bar-subheader{top:44px;height:44px}.bar-subheader .title{height:43px;line-height:44px}.bar-subfooter{bottom:44px;height:44px}.bar-subfooter .title{height:43px;line-height:44px}.nav-bar-block{position:absolute;top:0;right:0;left:0;z-index:9}.bar .back-button.hide,.bar .buttons .hide{display:none}.nav-bar-tabs-top .bar{background-image:none}.tabs{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:horizontal;-moz-flex-direction:horizontal;-ms-flex-direction:horizontal;flex-direction:horizontal;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444;position:absolute;bottom:0;z-index:5;width:100%;height:49px;border-style:solid;border-top-width:1px;background-size:0;line-height:49px}.tabs .tab-item .badge{background-color:#444;color:#f8f8f8}@media (min--moz-device-pixel-ratio:1.5),(-webkit-min-device-pixel-ratio:1.5),(min-device-pixel-ratio:1.5),(min-resolution:144dpi),(min-resolution:1.5dppx){.tabs{padding-top:2px;border-top:none!important;border-bottom:none;background-position:top;background-size:100% 1px;background-repeat:no-repeat}}.tabs-light>.tabs,.tabs.tabs-light{border-color:#ddd;background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);color:#444}.tabs-light>.tabs .tab-item .badge,.tabs.tabs-light .tab-item .badge{background-color:#444;color:#fff}.tabs-stable>.tabs,.tabs.tabs-stable{border-color:#b2b2b2;background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);color:#444}.tabs-stable>.tabs .tab-item .badge,.tabs.tabs-stable .tab-item .badge{background-color:#444;color:#f8f8f8}.tabs-positive>.tabs,.tabs.tabs-positive{border-color:#0c60ee;background-color:#387ef5;background-image:linear-gradient(0deg,#0c60ee,#0c60ee 50%,transparent 50%);color:#fff}.tabs-positive>.tabs .tab-item .badge,.tabs.tabs-positive .tab-item .badge{background-color:#fff;color:#387ef5}.tabs-calm>.tabs,.tabs.tabs-calm{border-color:#0a9dc7;background-color:#11c1f3;background-image:linear-gradient(0deg,#0a9dc7,#0a9dc7 50%,transparent 50%);color:#fff}.tabs-calm>.tabs .tab-item .badge,.tabs.tabs-calm .tab-item .badge{background-color:#fff;color:#11c1f3}.tabs-assertive>.tabs,.tabs.tabs-assertive{border-color:#e42112;background-color:#ef473a;background-image:linear-gradient(0deg,#e42112,#e42112 50%,transparent 50%);color:#fff}.tabs-assertive>.tabs .tab-item .badge,.tabs.tabs-assertive .tab-item .badge{background-color:#fff;color:#ef473a}.tabs-balanced>.tabs,.tabs.tabs-balanced{border-color:#28a54c;background-color:#33cd5f;background-image:linear-gradient(0deg,#28a54c,#28a54c 50%,transparent 50%);color:#fff}.tabs-balanced>.tabs .tab-item .badge,.tabs.tabs-balanced .tab-item .badge{background-color:#fff;color:#33cd5f}.tabs-energized>.tabs,.tabs.tabs-energized{border-color:#e6b500;background-color:#ffc900;background-image:linear-gradient(0deg,#e6b500,#e6b500 50%,transparent 50%);color:#fff}.tabs-energized>.tabs .tab-item .badge,.tabs.tabs-energized .tab-item .badge{background-color:#fff;color:#ffc900}.tabs-royal>.tabs,.tabs.tabs-royal{border-color:#6b46e5;background-color:#886aea;background-image:linear-gradient(0deg,#6b46e5,#6b46e5 50%,transparent 50%);color:#fff}.tabs-royal>.tabs .tab-item .badge,.tabs.tabs-royal .tab-item .badge{background-color:#fff;color:#886aea}.tabs-dark>.tabs,.tabs.tabs-dark{border-color:#111;background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);color:#fff}.tabs-dark>.tabs .tab-item .badge,.tabs.tabs-dark .tab-item .badge{background-color:#fff;color:#444}.tabs-striped .tabs{background-color:#fff;background-image:none;border:none;border-bottom:1px solid #ddd;padding-top:2px}.tabs-striped .tab-item.activated,.tabs-striped .tab-item.active,.tabs-striped .tab-item.tab-item-active{margin-top:-2px;border-style:solid;border-width:2px 0 0 0;border-color:#444}.tabs-striped .tab-item.activated .badge,.tabs-striped .tab-item.active .badge,.tabs-striped .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-light .tabs{background-color:#fff}.tabs-striped.tabs-light .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-striped.tabs-light .tab-item .badge{opacity:.4}.tabs-striped.tabs-light .tab-item.activated,.tabs-striped.tabs-light .tab-item.active,.tabs-striped.tabs-light .tab-item.tab-item-active{margin-top:-2px;color:#444;border-style:solid;border-width:2px 0 0 0;border-color:#444}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-stable .tabs{background-color:#f8f8f8}.tabs-striped.tabs-stable .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-striped.tabs-stable .tab-item .badge{opacity:.4}.tabs-striped.tabs-stable .tab-item.activated,.tabs-striped.tabs-stable .tab-item.active,.tabs-striped.tabs-stable .tab-item.tab-item-active{margin-top:-2px;color:#444;border-style:solid;border-width:2px 0 0 0;border-color:#444}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-positive .tabs{background-color:#387ef5}.tabs-striped.tabs-positive .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-positive .tab-item .badge{opacity:.4}.tabs-striped.tabs-positive .tab-item.activated,.tabs-striped.tabs-positive .tab-item.active,.tabs-striped.tabs-positive .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0 0;border-color:#fff}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-calm .tabs{background-color:#11c1f3}.tabs-striped.tabs-calm .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-calm .tab-item .badge{opacity:.4}.tabs-striped.tabs-calm .tab-item.activated,.tabs-striped.tabs-calm .tab-item.active,.tabs-striped.tabs-calm .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0 0;border-color:#fff}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-assertive .tabs{background-color:#ef473a}.tabs-striped.tabs-assertive .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-assertive .tab-item .badge{opacity:.4}.tabs-striped.tabs-assertive .tab-item.activated,.tabs-striped.tabs-assertive .tab-item.active,.tabs-striped.tabs-assertive .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0 0;border-color:#fff}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-balanced .tabs{background-color:#33cd5f}.tabs-striped.tabs-balanced .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-balanced .tab-item .badge{opacity:.4}.tabs-striped.tabs-balanced .tab-item.activated,.tabs-striped.tabs-balanced .tab-item.active,.tabs-striped.tabs-balanced .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0 0;border-color:#fff}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-energized .tabs{background-color:#ffc900}.tabs-striped.tabs-energized .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-energized .tab-item .badge{opacity:.4}.tabs-striped.tabs-energized .tab-item.activated,.tabs-striped.tabs-energized .tab-item.active,.tabs-striped.tabs-energized .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0 0;border-color:#fff}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-royal .tabs{background-color:#886aea}.tabs-striped.tabs-royal .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-royal .tab-item .badge{opacity:.4}.tabs-striped.tabs-royal .tab-item.activated,.tabs-striped.tabs-royal .tab-item.active,.tabs-striped.tabs-royal .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0 0;border-color:#fff}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-dark .tabs{background-color:#444}.tabs-striped.tabs-dark .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-dark .tab-item .badge{opacity:.4}.tabs-striped.tabs-dark .tab-item.activated,.tabs-striped.tabs-dark .tab-item.active,.tabs-striped.tabs-dark .tab-item.tab-item-active{margin-top:-2px;color:#fff;border-style:solid;border-width:2px 0 0 0;border-color:#fff}.tabs-striped.tabs-top .tab-item.activated .badge,.tabs-striped.tabs-top .tab-item.active .badge,.tabs-striped.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-striped.tabs-background-light .tabs{background-color:#fff;background-image:none}.tabs-striped.tabs-background-stable .tabs{background-color:#f8f8f8;background-image:none}.tabs-striped.tabs-background-positive .tabs{background-color:#387ef5;background-image:none}.tabs-striped.tabs-background-calm .tabs{background-color:#11c1f3;background-image:none}.tabs-striped.tabs-background-assertive .tabs{background-color:#ef473a;background-image:none}.tabs-striped.tabs-background-balanced .tabs{background-color:#33cd5f;background-image:none}.tabs-striped.tabs-background-energized .tabs{background-color:#ffc900;background-image:none}.tabs-striped.tabs-background-royal .tabs{background-color:#886aea;background-image:none}.tabs-striped.tabs-background-dark .tabs{background-color:#444;background-image:none}.tabs-striped.tabs-color-light .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-striped.tabs-color-light .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-light .tab-item.activated,.tabs-striped.tabs-color-light .tab-item.active,.tabs-striped.tabs-color-light .tab-item.tab-item-active{margin-top:-2px;color:#fff;border:0 solid #fff;border-top-width:2px}.tabs-striped.tabs-color-light .tab-item.activated .badge,.tabs-striped.tabs-color-light .tab-item.active .badge,.tabs-striped.tabs-color-light .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-stable .tab-item{color:rgba(248,248,248,.4);opacity:1}.tabs-striped.tabs-color-stable .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-stable .tab-item.activated,.tabs-striped.tabs-color-stable .tab-item.active,.tabs-striped.tabs-color-stable .tab-item.tab-item-active{margin-top:-2px;color:#f8f8f8;border:0 solid #f8f8f8;border-top-width:2px}.tabs-striped.tabs-color-stable .tab-item.activated .badge,.tabs-striped.tabs-color-stable .tab-item.active .badge,.tabs-striped.tabs-color-stable .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-positive .tab-item{color:rgba(56,126,245,.4);opacity:1}.tabs-striped.tabs-color-positive .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-positive .tab-item.activated,.tabs-striped.tabs-color-positive .tab-item.active,.tabs-striped.tabs-color-positive .tab-item.tab-item-active{margin-top:-2px;color:#387ef5;border:0 solid #387ef5;border-top-width:2px}.tabs-striped.tabs-color-positive .tab-item.activated .badge,.tabs-striped.tabs-color-positive .tab-item.active .badge,.tabs-striped.tabs-color-positive .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-calm .tab-item{color:rgba(17,193,243,.4);opacity:1}.tabs-striped.tabs-color-calm .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-calm .tab-item.activated,.tabs-striped.tabs-color-calm .tab-item.active,.tabs-striped.tabs-color-calm .tab-item.tab-item-active{margin-top:-2px;color:#11c1f3;border:0 solid #11c1f3;border-top-width:2px}.tabs-striped.tabs-color-calm .tab-item.activated .badge,.tabs-striped.tabs-color-calm .tab-item.active .badge,.tabs-striped.tabs-color-calm .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-assertive .tab-item{color:rgba(239,71,58,.4);opacity:1}.tabs-striped.tabs-color-assertive .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-assertive .tab-item.activated,.tabs-striped.tabs-color-assertive .tab-item.active,.tabs-striped.tabs-color-assertive .tab-item.tab-item-active{margin-top:-2px;color:#ef473a;border:0 solid #ef473a;border-top-width:2px}.tabs-striped.tabs-color-assertive .tab-item.activated .badge,.tabs-striped.tabs-color-assertive .tab-item.active .badge,.tabs-striped.tabs-color-assertive .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-balanced .tab-item{color:rgba(51,205,95,.4);opacity:1}.tabs-striped.tabs-color-balanced .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-balanced .tab-item.activated,.tabs-striped.tabs-color-balanced .tab-item.active,.tabs-striped.tabs-color-balanced .tab-item.tab-item-active{margin-top:-2px;color:#33cd5f;border:0 solid #33cd5f;border-top-width:2px}.tabs-striped.tabs-color-balanced .tab-item.activated .badge,.tabs-striped.tabs-color-balanced .tab-item.active .badge,.tabs-striped.tabs-color-balanced .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-energized .tab-item{color:rgba(255,201,0,.4);opacity:1}.tabs-striped.tabs-color-energized .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-energized .tab-item.activated,.tabs-striped.tabs-color-energized .tab-item.active,.tabs-striped.tabs-color-energized .tab-item.tab-item-active{margin-top:-2px;color:#ffc900;border:0 solid #ffc900;border-top-width:2px}.tabs-striped.tabs-color-energized .tab-item.activated .badge,.tabs-striped.tabs-color-energized .tab-item.active .badge,.tabs-striped.tabs-color-energized .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-royal .tab-item{color:rgba(136,106,234,.4);opacity:1}.tabs-striped.tabs-color-royal .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-royal .tab-item.activated,.tabs-striped.tabs-color-royal .tab-item.active,.tabs-striped.tabs-color-royal .tab-item.tab-item-active{margin-top:-2px;color:#886aea;border:0 solid #886aea;border-top-width:2px}.tabs-striped.tabs-color-royal .tab-item.activated .badge,.tabs-striped.tabs-color-royal .tab-item.active .badge,.tabs-striped.tabs-color-royal .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-striped.tabs-color-dark .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-striped.tabs-color-dark .tab-item .badge{opacity:.4}.tabs-striped.tabs-color-dark .tab-item.activated,.tabs-striped.tabs-color-dark .tab-item.active,.tabs-striped.tabs-color-dark .tab-item.tab-item-active{margin-top:-2px;color:#444;border:0 solid #444;border-top-width:2px}.tabs-striped.tabs-color-dark .tab-item.activated .badge,.tabs-striped.tabs-color-dark .tab-item.active .badge,.tabs-striped.tabs-color-dark .tab-item.tab-item-active .badge{top:2px;opacity:1}.tabs-background-light .tabs,.tabs-background-light>.tabs{background-color:#fff;background-image:linear-gradient(0deg,#ddd,#ddd 50%,transparent 50%);border-color:#ddd}.tabs-background-stable .tabs,.tabs-background-stable>.tabs{background-color:#f8f8f8;background-image:linear-gradient(0deg,#b2b2b2,#b2b2b2 50%,transparent 50%);border-color:#b2b2b2}.tabs-background-positive .tabs,.tabs-background-positive>.tabs{background-color:#387ef5;background-image:linear-gradient(0deg,#0c60ee,#0c60ee 50%,transparent 50%);border-color:#0c60ee}.tabs-background-calm .tabs,.tabs-background-calm>.tabs{background-color:#11c1f3;background-image:linear-gradient(0deg,#0a9dc7,#0a9dc7 50%,transparent 50%);border-color:#0a9dc7}.tabs-background-assertive .tabs,.tabs-background-assertive>.tabs{background-color:#ef473a;background-image:linear-gradient(0deg,#e42112,#e42112 50%,transparent 50%);border-color:#e42112}.tabs-background-balanced .tabs,.tabs-background-balanced>.tabs{background-color:#33cd5f;background-image:linear-gradient(0deg,#28a54c,#28a54c 50%,transparent 50%);border-color:#28a54c}.tabs-background-energized .tabs,.tabs-background-energized>.tabs{background-color:#ffc900;background-image:linear-gradient(0deg,#e6b500,#e6b500 50%,transparent 50%);border-color:#e6b500}.tabs-background-royal .tabs,.tabs-background-royal>.tabs{background-color:#886aea;background-image:linear-gradient(0deg,#6b46e5,#6b46e5 50%,transparent 50%);border-color:#6b46e5}.tabs-background-dark .tabs,.tabs-background-dark>.tabs{background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%);border-color:#111}.tabs-color-light .tab-item{color:rgba(255,255,255,.4);opacity:1}.tabs-color-light .tab-item .badge{opacity:.4}.tabs-color-light .tab-item.activated,.tabs-color-light .tab-item.active,.tabs-color-light .tab-item.tab-item-active{color:#fff;border:0 solid #fff}.tabs-color-light .tab-item.activated .badge,.tabs-color-light .tab-item.active .badge,.tabs-color-light .tab-item.tab-item-active .badge{opacity:1}.tabs-color-stable .tab-item{color:rgba(248,248,248,.4);opacity:1}.tabs-color-stable .tab-item .badge{opacity:.4}.tabs-color-stable .tab-item.activated,.tabs-color-stable .tab-item.active,.tabs-color-stable .tab-item.tab-item-active{color:#f8f8f8;border:0 solid #f8f8f8}.tabs-color-stable .tab-item.activated .badge,.tabs-color-stable .tab-item.active .badge,.tabs-color-stable .tab-item.tab-item-active .badge{opacity:1}.tabs-color-positive .tab-item{color:rgba(56,126,245,.4);opacity:1}.tabs-color-positive .tab-item .badge{opacity:.4}.tabs-color-positive .tab-item.activated,.tabs-color-positive .tab-item.active,.tabs-color-positive .tab-item.tab-item-active{color:#387ef5;border:0 solid #387ef5}.tabs-color-positive .tab-item.activated .badge,.tabs-color-positive .tab-item.active .badge,.tabs-color-positive .tab-item.tab-item-active .badge{opacity:1}.tabs-color-calm .tab-item{color:rgba(17,193,243,.4);opacity:1}.tabs-color-calm .tab-item .badge{opacity:.4}.tabs-color-calm .tab-item.activated,.tabs-color-calm .tab-item.active,.tabs-color-calm .tab-item.tab-item-active{color:#11c1f3;border:0 solid #11c1f3}.tabs-color-calm .tab-item.activated .badge,.tabs-color-calm .tab-item.active .badge,.tabs-color-calm .tab-item.tab-item-active .badge{opacity:1}.tabs-color-assertive .tab-item{color:rgba(239,71,58,.4);opacity:1}.tabs-color-assertive .tab-item .badge{opacity:.4}.tabs-color-assertive .tab-item.activated,.tabs-color-assertive .tab-item.active,.tabs-color-assertive .tab-item.tab-item-active{color:#ef473a;border:0 solid #ef473a}.tabs-color-assertive .tab-item.activated .badge,.tabs-color-assertive .tab-item.active .badge,.tabs-color-assertive .tab-item.tab-item-active .badge{opacity:1}.tabs-color-balanced .tab-item{color:rgba(51,205,95,.4);opacity:1}.tabs-color-balanced .tab-item .badge{opacity:.4}.tabs-color-balanced .tab-item.activated,.tabs-color-balanced .tab-item.active,.tabs-color-balanced .tab-item.tab-item-active{color:#33cd5f;border:0 solid #33cd5f}.tabs-color-balanced .tab-item.activated .badge,.tabs-color-balanced .tab-item.active .badge,.tabs-color-balanced .tab-item.tab-item-active .badge{opacity:1}.tabs-color-energized .tab-item{color:rgba(255,201,0,.4);opacity:1}.tabs-color-energized .tab-item .badge{opacity:.4}.tabs-color-energized .tab-item.activated,.tabs-color-energized .tab-item.active,.tabs-color-energized .tab-item.tab-item-active{color:#ffc900;border:0 solid #ffc900}.tabs-color-energized .tab-item.activated .badge,.tabs-color-energized .tab-item.active .badge,.tabs-color-energized .tab-item.tab-item-active .badge{opacity:1}.tabs-color-royal .tab-item{color:rgba(136,106,234,.4);opacity:1}.tabs-color-royal .tab-item .badge{opacity:.4}.tabs-color-royal .tab-item.activated,.tabs-color-royal .tab-item.active,.tabs-color-royal .tab-item.tab-item-active{color:#886aea;border:0 solid #886aea}.tabs-color-royal .tab-item.activated .badge,.tabs-color-royal .tab-item.active .badge,.tabs-color-royal .tab-item.tab-item-active .badge{opacity:1}.tabs-color-dark .tab-item{color:rgba(68,68,68,.4);opacity:1}.tabs-color-dark .tab-item .badge{opacity:.4}.tabs-color-dark .tab-item.activated,.tabs-color-dark .tab-item.active,.tabs-color-dark .tab-item.tab-item-active{color:#444;border:0 solid #444}.tabs-color-dark .tab-item.activated .badge,.tabs-color-dark .tab-item.active .badge,.tabs-color-dark .tab-item.tab-item-active .badge{opacity:1}ion-tabs.tabs-color-active-light .tab-item{color:#444}ion-tabs.tabs-color-active-light .tab-item.activated,ion-tabs.tabs-color-active-light .tab-item.active,ion-tabs.tabs-color-active-light .tab-item.tab-item-active{color:#fff}ion-tabs.tabs-striped.tabs-color-active-light .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-light .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-light .tab-item.tab-item-active{border-color:#fff;color:#fff}ion-tabs.tabs-color-active-stable .tab-item{color:#444}ion-tabs.tabs-color-active-stable .tab-item.activated,ion-tabs.tabs-color-active-stable .tab-item.active,ion-tabs.tabs-color-active-stable .tab-item.tab-item-active{color:#f8f8f8}ion-tabs.tabs-striped.tabs-color-active-stable .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-stable .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-stable .tab-item.tab-item-active{border-color:#f8f8f8;color:#f8f8f8}ion-tabs.tabs-color-active-positive .tab-item{color:#444}ion-tabs.tabs-color-active-positive .tab-item.activated,ion-tabs.tabs-color-active-positive .tab-item.active,ion-tabs.tabs-color-active-positive .tab-item.tab-item-active{color:#387ef5}ion-tabs.tabs-striped.tabs-color-active-positive .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-positive .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-positive .tab-item.tab-item-active{border-color:#387ef5;color:#387ef5}ion-tabs.tabs-color-active-calm .tab-item{color:#444}ion-tabs.tabs-color-active-calm .tab-item.activated,ion-tabs.tabs-color-active-calm .tab-item.active,ion-tabs.tabs-color-active-calm .tab-item.tab-item-active{color:#11c1f3}ion-tabs.tabs-striped.tabs-color-active-calm .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-calm .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-calm .tab-item.tab-item-active{border-color:#11c1f3;color:#11c1f3}ion-tabs.tabs-color-active-assertive .tab-item{color:#444}ion-tabs.tabs-color-active-assertive .tab-item.activated,ion-tabs.tabs-color-active-assertive .tab-item.active,ion-tabs.tabs-color-active-assertive .tab-item.tab-item-active{color:#ef473a}ion-tabs.tabs-striped.tabs-color-active-assertive .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-assertive .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-assertive .tab-item.tab-item-active{border-color:#ef473a;color:#ef473a}ion-tabs.tabs-color-active-balanced .tab-item{color:#444}ion-tabs.tabs-color-active-balanced .tab-item.activated,ion-tabs.tabs-color-active-balanced .tab-item.active,ion-tabs.tabs-color-active-balanced .tab-item.tab-item-active{color:#33cd5f}ion-tabs.tabs-striped.tabs-color-active-balanced .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-balanced .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-balanced .tab-item.tab-item-active{border-color:#33cd5f;color:#33cd5f}ion-tabs.tabs-color-active-energized .tab-item{color:#444}ion-tabs.tabs-color-active-energized .tab-item.activated,ion-tabs.tabs-color-active-energized .tab-item.active,ion-tabs.tabs-color-active-energized .tab-item.tab-item-active{color:#ffc900}ion-tabs.tabs-striped.tabs-color-active-energized .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-energized .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-energized .tab-item.tab-item-active{border-color:#ffc900;color:#ffc900}ion-tabs.tabs-color-active-royal .tab-item{color:#444}ion-tabs.tabs-color-active-royal .tab-item.activated,ion-tabs.tabs-color-active-royal .tab-item.active,ion-tabs.tabs-color-active-royal .tab-item.tab-item-active{color:#886aea}ion-tabs.tabs-striped.tabs-color-active-royal .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-royal .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-royal .tab-item.tab-item-active{border-color:#886aea;color:#886aea}ion-tabs.tabs-color-active-dark .tab-item{color:#fff}ion-tabs.tabs-color-active-dark .tab-item.activated,ion-tabs.tabs-color-active-dark .tab-item.active,ion-tabs.tabs-color-active-dark .tab-item.tab-item-active{color:#444}ion-tabs.tabs-striped.tabs-color-active-dark .tab-item.activated,ion-tabs.tabs-striped.tabs-color-active-dark .tab-item.active,ion-tabs.tabs-striped.tabs-color-active-dark .tab-item.tab-item-active{border-color:#444;color:#444}.tabs-top.tabs-striped{padding-bottom:0}.tabs-top.tabs-striped .tab-item{background:0 0;-webkit-transition:color .1s ease;-moz-transition:color .1s ease;-ms-transition:color .1s ease;-o-transition:color .1s ease;transition:color .1s ease}.tabs-top.tabs-striped .tab-item.activated,.tabs-top.tabs-striped .tab-item.active,.tabs-top.tabs-striped .tab-item.tab-item-active{margin-top:1px;border-width:0 0 2px 0!important;border-style:solid}.tabs-top.tabs-striped .tab-item.activated>.badge,.tabs-top.tabs-striped .tab-item.activated>i,.tabs-top.tabs-striped .tab-item.active>.badge,.tabs-top.tabs-striped .tab-item.active>i,.tabs-top.tabs-striped .tab-item.tab-item-active>.badge,.tabs-top.tabs-striped .tab-item.tab-item-active>i{margin-top:-1px}.tabs-top.tabs-striped .tab-item .badge{-webkit-transition:color .2s ease;-moz-transition:color .2s ease;-ms-transition:color .2s ease;-o-transition:color .2s ease;transition:color .2s ease}.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.activated .tab-title,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.activated i,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.active .tab-title,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.active i,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.tab-item-active .tab-title,.tabs-top.tabs-striped:not(.tabs-icon-left):not(.tabs-icon-top) .tab-item.tab-item-active i{display:block;margin-top:-1px}.tabs-top.tabs-striped.tabs-icon-left .tab-item{margin-top:1px}.tabs-top.tabs-striped.tabs-icon-left .tab-item.activated .tab-title,.tabs-top.tabs-striped.tabs-icon-left .tab-item.activated i,.tabs-top.tabs-striped.tabs-icon-left .tab-item.active .tab-title,.tabs-top.tabs-striped.tabs-icon-left .tab-item.active i,.tabs-top.tabs-striped.tabs-icon-left .tab-item.tab-item-active .tab-title,.tabs-top.tabs-striped.tabs-icon-left .tab-item.tab-item-active i{margin-top:-.1em}.tabs-top>.tabs,.tabs.tabs-top{top:44px;padding-top:0;background-position:bottom;border-top-width:0;border-bottom-width:1px}.tabs-top>.tabs .tab-item.activated .badge,.tabs-top>.tabs .tab-item.active .badge,.tabs-top>.tabs .tab-item.tab-item-active .badge,.tabs.tabs-top .tab-item.activated .badge,.tabs.tabs-top .tab-item.active .badge,.tabs.tabs-top .tab-item.tab-item-active .badge{top:4%}.tabs-top~.bar-header{border-bottom-width:0}.tab-item{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;max-width:150px;height:100%;color:inherit;text-align:center;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;font-weight:400;font-size:14px;font-family:"-apple-system","Helvetica Neue",Roboto,"Segoe UI",sans-serif;opacity:.7}.tab-item:hover{cursor:pointer}.tab-item.tab-hidden{display:none}.tabs-item-hide>.tabs,.tabs.tabs-item-hide{display:none}.tabs-icon-bottom.tabs .tab-item,.tabs-icon-bottom>.tabs .tab-item,.tabs-icon-top.tabs .tab-item,.tabs-icon-top>.tabs .tab-item{font-size:10px;line-height:14px}#menu .footer .tab-item .icon-help,.tab-item #menu .footer .icon-help,.tab-item .icon,.tab-item .icon-alert,.tab-item .icon-help{display:block;margin:0 auto;height:32px;font-size:32px}.tabs-icon-left.tabs .tab-item,.tabs-icon-left>.tabs .tab-item,.tabs-icon-right.tabs .tab-item,.tabs-icon-right>.tabs .tab-item{font-size:10px}#menu .footer .tabs-icon-left.tabs .tab-item .icon-help,#menu .footer .tabs-icon-left>.tabs .tab-item .icon-help,#menu .footer .tabs-icon-right.tabs .tab-item .icon-help,#menu .footer .tabs-icon-right>.tabs .tab-item .icon-help,.tabs-icon-left.tabs .tab-item #menu .footer .icon-help,.tabs-icon-left.tabs .tab-item .icon,.tabs-icon-left.tabs .tab-item .icon-alert,.tabs-icon-left.tabs .tab-item .icon-help,.tabs-icon-left.tabs .tab-item .tab-title,.tabs-icon-left>.tabs .tab-item #menu .footer .icon-help,.tabs-icon-left>.tabs .tab-item .icon,.tabs-icon-left>.tabs .tab-item .icon-alert,.tabs-icon-left>.tabs .tab-item .icon-help,.tabs-icon-left>.tabs .tab-item .tab-title,.tabs-icon-right.tabs .tab-item #menu .footer .icon-help,.tabs-icon-right.tabs .tab-item .icon,.tabs-icon-right.tabs .tab-item .icon-alert,.tabs-icon-right.tabs .tab-item .icon-help,.tabs-icon-right.tabs .tab-item .tab-title,.tabs-icon-right>.tabs .tab-item #menu .footer .icon-help,.tabs-icon-right>.tabs .tab-item .icon,.tabs-icon-right>.tabs .tab-item .icon-alert,.tabs-icon-right>.tabs .tab-item .icon-help,.tabs-icon-right>.tabs .tab-item .tab-title{display:inline-block;vertical-align:top;margin-top:-.1em}#menu .footer .tabs-icon-left.tabs .tab-item .icon-help:before,#menu .footer .tabs-icon-left>.tabs .tab-item .icon-help:before,#menu .footer .tabs-icon-right.tabs .tab-item .icon-help:before,#menu .footer .tabs-icon-right>.tabs .tab-item .icon-help:before,.tabs-icon-left.tabs .tab-item #menu .footer .icon-help:before,.tabs-icon-left.tabs .tab-item .icon-alert:before,.tabs-icon-left.tabs .tab-item .icon-help:before,.tabs-icon-left.tabs .tab-item .icon:before,.tabs-icon-left.tabs .tab-item .tab-title:before,.tabs-icon-left>.tabs .tab-item #menu .footer .icon-help:before,.tabs-icon-left>.tabs .tab-item .icon-alert:before,.tabs-icon-left>.tabs .tab-item .icon-help:before,.tabs-icon-left>.tabs .tab-item .icon:before,.tabs-icon-left>.tabs .tab-item .tab-title:before,.tabs-icon-right.tabs .tab-item #menu .footer .icon-help:before,.tabs-icon-right.tabs .tab-item .icon-alert:before,.tabs-icon-right.tabs .tab-item .icon-help:before,.tabs-icon-right.tabs .tab-item .icon:before,.tabs-icon-right.tabs .tab-item .tab-title:before,.tabs-icon-right>.tabs .tab-item #menu .footer .icon-help:before,.tabs-icon-right>.tabs .tab-item .icon-alert:before,.tabs-icon-right>.tabs .tab-item .icon-help:before,.tabs-icon-right>.tabs .tab-item .icon:before,.tabs-icon-right>.tabs .tab-item .tab-title:before{font-size:24px;line-height:49px}#menu .footer .tabs-icon-left.tabs .tab-item .icon-help,#menu .footer .tabs-icon-left>.tabs .tab-item .icon-help,.tabs-icon-left.tabs .tab-item #menu .footer .icon-help,.tabs-icon-left.tabs .tab-item .icon,.tabs-icon-left.tabs .tab-item .icon-alert,.tabs-icon-left.tabs .tab-item .icon-help,.tabs-icon-left>.tabs .tab-item #menu .footer .icon-help,.tabs-icon-left>.tabs .tab-item .icon,.tabs-icon-left>.tabs .tab-item .icon-alert,.tabs-icon-left>.tabs .tab-item .icon-help{padding-right:3px}#menu .footer .tabs-icon-right.tabs .tab-item .icon-help,#menu .footer .tabs-icon-right>.tabs .tab-item .icon-help,.tabs-icon-right.tabs .tab-item #menu .footer .icon-help,.tabs-icon-right.tabs .tab-item .icon,.tabs-icon-right.tabs .tab-item .icon-alert,.tabs-icon-right.tabs .tab-item .icon-help,.tabs-icon-right>.tabs .tab-item #menu .footer .icon-help,.tabs-icon-right>.tabs .tab-item .icon,.tabs-icon-right>.tabs .tab-item .icon-alert,.tabs-icon-right>.tabs .tab-item .icon-help{padding-left:3px}#menu .footer .tabs-icon-only.tabs .icon-help,#menu .footer .tabs-icon-only>.tabs .icon-help,.tabs-icon-only.tabs #menu .footer .icon-help,.tabs-icon-only.tabs .icon,.tabs-icon-only.tabs .icon-alert,.tabs-icon-only.tabs .icon-help,.tabs-icon-only>.tabs #menu .footer .icon-help,.tabs-icon-only>.tabs .icon,.tabs-icon-only>.tabs .icon-alert,.tabs-icon-only>.tabs .icon-help{line-height:inherit}.tab-item.has-badge{position:relative}.tab-item .badge{position:absolute;top:4%;right:33%;right:calc(50% - 26px);padding:1px 6px;height:auto;font-size:12px;line-height:16px}.tab-item.activated,.tab-item.active,.tab-item.tab-item-active{opacity:1}.tab-item.activated.tab-item-light,.tab-item.active.tab-item-light,.tab-item.tab-item-active.tab-item-light{color:#fff}.tab-item.activated.tab-item-stable,.tab-item.active.tab-item-stable,.tab-item.tab-item-active.tab-item-stable{color:#f8f8f8}.tab-item.activated.tab-item-positive,.tab-item.active.tab-item-positive,.tab-item.tab-item-active.tab-item-positive{color:#387ef5}.tab-item.activated.tab-item-calm,.tab-item.active.tab-item-calm,.tab-item.tab-item-active.tab-item-calm{color:#11c1f3}.tab-item.activated.tab-item-assertive,.tab-item.active.tab-item-assertive,.tab-item.tab-item-active.tab-item-assertive{color:#ef473a}.tab-item.activated.tab-item-balanced,.tab-item.active.tab-item-balanced,.tab-item.tab-item-active.tab-item-balanced{color:#33cd5f}.tab-item.activated.tab-item-energized,.tab-item.active.tab-item-energized,.tab-item.tab-item-active.tab-item-energized{color:#ffc900}.tab-item.activated.tab-item-royal,.tab-item.active.tab-item-royal,.tab-item.tab-item-active.tab-item-royal{color:#886aea}.tab-item.activated.tab-item-dark,.tab-item.active.tab-item-dark,.tab-item.tab-item-active.tab-item-dark{color:#444}.item.tabs{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;padding:0}#menu .footer .item.tabs .icon-help:before,.item.tabs #menu .footer .icon-help:before,.item.tabs .icon-alert:before,.item.tabs .icon-help:before,.item.tabs .icon:before{position:relative}.tab-item.disabled,.tab-item[disabled]{opacity:.4;cursor:default;pointer-events:none}.nav-bar-tabs-top.hide~.view-container .tabs-top .tabs{top:0}.pane[hide-nav-bar=true] .has-tabs-top{top:49px}.menu{position:absolute;top:0;bottom:0;z-index:0;overflow:hidden;min-height:100%;max-height:100%;width:275px;background-color:#fff}.menu .scroll-content{z-index:10}.menu .bar-header{z-index:11}.menu-content{-webkit-transform:none;transform:none;box-shadow:-1px 0 2px rgba(0,0,0,.2),1px 0 2px rgba(0,0,0,.2)}.menu-open .menu-content .pane,.menu-open .menu-content .scroll-content{pointer-events:none}.menu-open .menu-content .scroll-content .scroll{pointer-events:none}.menu-open .menu-content .scroll-content:not(.overflow-scroll){overflow:hidden}.grade-b .menu-content,.grade-c .menu-content{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;right:-1px;left:-1px;border-right:1px solid #ccc;border-left:1px solid #ccc;box-shadow:none}.menu-left{left:0}.menu-right{right:0}.aside-open.aside-resizing .menu-right{display:none}.menu-animated{-webkit-transition:-webkit-transform .2s ease;transition:transform .2s ease}.modal-backdrop,.modal-backdrop-bg{position:fixed;top:0;left:0;z-index:10;width:100%;height:100%}.modal-backdrop-bg{pointer-events:none}.modal{display:block;position:absolute;top:0;z-index:10;overflow:hidden;min-height:100%;width:100%;background-color:#fff}@media (min-width:680px){.modal{top:20%;right:20%;bottom:20%;left:20%;min-height:240px;width:60%}.modal.ng-leave-active{bottom:0}.platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader){height:44px}.platform-ios.platform-cordova .modal-wrapper .modal .bar-header:not(.bar-subheader)>*{margin-top:0}.platform-ios.platform-cordova .modal-wrapper .modal .tabs-top>.tabs,.platform-ios.platform-cordova .modal-wrapper .modal .tabs.tabs-top{top:44px}.platform-ios.platform-cordova .modal-wrapper .modal .bar-subheader,.platform-ios.platform-cordova .modal-wrapper .modal .has-header{top:44px}.platform-ios.platform-cordova .modal-wrapper .modal .has-subheader{top:88px}.platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-tabs-top{top:93px}.platform-ios.platform-cordova .modal-wrapper .modal .has-header.has-subheader.has-tabs-top{top:137px}.modal-backdrop-bg{-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;background-color:#000;opacity:0}.active .modal-backdrop-bg{opacity:.5}}.modal-open{pointer-events:none}.modal-open .modal,.modal-open .modal-backdrop{pointer-events:auto}.modal-open.loading-active .modal,.modal-open.loading-active .modal-backdrop{pointer-events:none}.popover-backdrop{position:fixed;top:0;left:0;z-index:10;width:100%;height:100%;background-color:rgba(0,0,0,0)}.popover-backdrop.active{background-color:rgba(0,0,0,.1)}.popover{position:absolute;top:25%;left:50%;z-index:10;display:block;margin-top:12px;margin-left:-110px;height:280px;width:220px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4);opacity:0}.popover .item:first-child{border-top:0}.popover .item:last-child{border-bottom:0}.popover.popover-bottom{margin-top:-12px}.popover,.popover .bar-header{border-radius:2px}.popover .scroll-content{z-index:1;margin:2px 0}.popover .bar-header{border-bottom-right-radius:0;border-bottom-left-radius:0}.popover .has-header{border-top-right-radius:0;border-top-left-radius:0}.popover-arrow{display:none}.platform-ios .popover{box-shadow:0 0 40px rgba(0,0,0,.08);border-radius:10px}.platform-ios .popover .bar-header{-webkit-border-top-right-radius:10px;border-top-right-radius:10px;-webkit-border-top-left-radius:10px;border-top-left-radius:10px}.platform-ios .popover .scroll-content{margin:8px 0;border-radius:10px}.platform-ios .popover .scroll-content.has-header{margin-top:0}.platform-ios .popover-arrow{position:absolute;display:block;top:-17px;width:30px;height:19px;overflow:hidden}.platform-ios .popover-arrow:after{position:absolute;top:12px;left:5px;width:20px;height:20px;background-color:#fff;border-radius:3px;content:'';-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.platform-ios .popover-bottom .popover-arrow{top:auto;bottom:-10px}.platform-ios .popover-bottom .popover-arrow:after{top:-6px}.platform-android .popover{margin-top:-32px;background-color:#fafafa;box-shadow:0 2px 6px rgba(0,0,0,.35)}.platform-android .popover .item{border-color:#fafafa;background-color:#fafafa;color:#4d4d4d}.platform-android .popover.popover-bottom{margin-top:32px}.platform-android .popover-backdrop,.platform-android .popover-backdrop.active{background-color:transparent}.popover-open{pointer-events:none}.popover-open .popover,.popover-open .popover-backdrop{pointer-events:auto}.popover-open.loading-active .popover,.popover-open.loading-active .popover-backdrop{pointer-events:none}@media (min-width:680px){.popover{width:360px;margin-left:-180px}}.popup-container{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,0);display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;z-index:12;visibility:hidden}.popup-container.popup-showing{visibility:visible}.popup-container.popup-hidden .popup{-webkit-animation-name:scaleOut;animation-name:scaleOut;-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.popup-container.active .popup{-webkit-animation-name:superScaleIn;animation-name:superScaleIn;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.popup-container .popup{width:250px;max-width:100%;max-height:90%;border-radius:0;background-color:rgba(255,255,255,.9);display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:vertical;-webkit-flex-direction:column;-moz-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.popup-container input,.popup-container textarea{width:100%}.popup-head{padding:15px 10px;border-bottom:1px solid #eee;text-align:center}.popup-title{margin:0;padding:0;font-size:15px}.popup-sub-title{margin:5px 0 0 0;padding:0;font-weight:400;font-size:11px}.popup-body{padding:10px;overflow:auto}.popup-buttons{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-orient:horizontal;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row;padding:10px;min-height:65px}.popup-buttons .button{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;min-height:45px;border-radius:2px;line-height:20px;margin-right:5px}.popup-buttons .button:last-child{margin-right:0}.popup-open{pointer-events:none}.popup-open.modal-open .modal{pointer-events:none}.popup-open .popup,.popup-open .popup-backdrop{pointer-events:auto}.loading-container{position:absolute;left:0;top:0;right:0;bottom:0;z-index:13;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;-moz-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-transition:.2s opacity linear;transition:.2s opacity linear;visibility:hidden;opacity:0}#menu .footer .loading-container:not(.visible) .icon-help,.loading-container:not(.visible) #menu .footer .icon-help,.loading-container:not(.visible) .icon,.loading-container:not(.visible) .icon-alert,.loading-container:not(.visible) .icon-help,.loading-container:not(.visible) .spinner{display:none}.loading-container.visible{visibility:visible}.loading-container.active{opacity:1}.loading-container .loading{padding:20px;border-radius:5px;background-color:rgba(0,0,0,.7);color:#fff;text-align:center;text-overflow:ellipsis;font-size:15px}.loading-container .loading h1,.loading-container .loading h2,.loading-container .loading h3,.loading-container .loading h4,.loading-container .loading h5,.loading-container .loading h6{color:#fff}.item{border-color:#ddd;background-color:#fff;color:#444;position:relative;z-index:2;display:block;margin:-1px;padding:16px;border-width:1px;border-style:solid;font-size:16px}.item h2{margin:0 0 2px 0;font-size:16px;font-weight:400}.item h3{margin:0 0 4px 0;font-size:14px}.item h4{margin:0 0 4px 0;font-size:12px}.item h5,.item h6{margin:0 0 3px 0;font-size:10px}.item p{color:#666;font-size:14px;margin-bottom:2px}.item h1:last-child,.item h2:last-child,.item h3:last-child,.item h4:last-child,.item h5:last-child,.item h6:last-child,.item p:last-child{margin-bottom:0}.item .badge{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;position:absolute;top:16px;right:32px}.item.item-button-right .badge{right:67px}.item.item-divider .badge{top:8px}.item .badge+.badge{margin-right:5px}.item.item-light{border-color:#ddd;background-color:#fff;color:#444}.item.item-stable{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.item.item-positive{border-color:#0c60ee;background-color:#387ef5;color:#fff}.item.item-calm{border-color:#0a9dc7;background-color:#11c1f3;color:#fff}.item.item-assertive{border-color:#e42112;background-color:#ef473a;color:#fff}.item.item-balanced{border-color:#28a54c;background-color:#33cd5f;color:#fff}.item.item-energized{border-color:#e6b500;background-color:#ffc900;color:#fff}.item.item-royal{border-color:#6b46e5;background-color:#886aea;color:#fff}.item.item-dark{border-color:#111;background-color:#444;color:#fff}.item[ng-click]:hover{cursor:pointer}.item-borderless,.list-borderless .item{border-width:0}.item .item-content.activated,.item .item-content.active,.item-complex.activated .item-content,.item-complex.active .item-content,.item.activated,.item.active{border-color:#ccc;background-color:#d9d9d9}.item .item-content.activated.item-complex>.item-content,.item .item-content.active.item-complex>.item-content,.item-complex.activated .item-content.item-complex>.item-content,.item-complex.active .item-content.item-complex>.item-content,.item.activated.item-complex>.item-content,.item.active.item-complex>.item-content{border-color:#ccc;background-color:#d9d9d9}.item .item-content.activated.item-light,.item .item-content.active.item-light,.item-complex.activated .item-content.item-light,.item-complex.active .item-content.item-light,.item.activated.item-light,.item.active.item-light{border-color:#ccc;background-color:#fafafa}.item .item-content.activated.item-light.item-complex>.item-content,.item .item-content.active.item-light.item-complex>.item-content,.item-complex.activated .item-content.item-light.item-complex>.item-content,.item-complex.active .item-content.item-light.item-complex>.item-content,.item.activated.item-light.item-complex>.item-content,.item.active.item-light.item-complex>.item-content{border-color:#ccc;background-color:#fafafa}.item .item-content.activated.item-stable,.item .item-content.active.item-stable,.item-complex.activated .item-content.item-stable,.item-complex.active .item-content.item-stable,.item.activated.item-stable,.item.active.item-stable{border-color:#a2a2a2;background-color:#e5e5e5}.item .item-content.activated.item-stable.item-complex>.item-content,.item .item-content.active.item-stable.item-complex>.item-content,.item-complex.activated .item-content.item-stable.item-complex>.item-content,.item-complex.active .item-content.item-stable.item-complex>.item-content,.item.activated.item-stable.item-complex>.item-content,.item.active.item-stable.item-complex>.item-content{border-color:#a2a2a2;background-color:#e5e5e5}.item .item-content.activated.item-positive,.item .item-content.active.item-positive,.item-complex.activated .item-content.item-positive,.item-complex.active .item-content.item-positive,.item.activated.item-positive,.item.active.item-positive{border-color:#0c60ee;background-color:#0c60ee}.item .item-content.activated.item-positive.item-complex>.item-content,.item .item-content.active.item-positive.item-complex>.item-content,.item-complex.activated .item-content.item-positive.item-complex>.item-content,.item-complex.active .item-content.item-positive.item-complex>.item-content,.item.activated.item-positive.item-complex>.item-content,.item.active.item-positive.item-complex>.item-content{border-color:#0c60ee;background-color:#0c60ee}.item .item-content.activated.item-calm,.item .item-content.active.item-calm,.item-complex.activated .item-content.item-calm,.item-complex.active .item-content.item-calm,.item.activated.item-calm,.item.active.item-calm{border-color:#0a9dc7;background-color:#0a9dc7}.item .item-content.activated.item-calm.item-complex>.item-content,.item .item-content.active.item-calm.item-complex>.item-content,.item-complex.activated .item-content.item-calm.item-complex>.item-content,.item-complex.active .item-content.item-calm.item-complex>.item-content,.item.activated.item-calm.item-complex>.item-content,.item.active.item-calm.item-complex>.item-content{border-color:#0a9dc7;background-color:#0a9dc7}.item .item-content.activated.item-assertive,.item .item-content.active.item-assertive,.item-complex.activated .item-content.item-assertive,.item-complex.active .item-content.item-assertive,.item.activated.item-assertive,.item.active.item-assertive{border-color:#e42112;background-color:#e42112}.item .item-content.activated.item-assertive.item-complex>.item-content,.item .item-content.active.item-assertive.item-complex>.item-content,.item-complex.activated .item-content.item-assertive.item-complex>.item-content,.item-complex.active .item-content.item-assertive.item-complex>.item-content,.item.activated.item-assertive.item-complex>.item-content,.item.active.item-assertive.item-complex>.item-content{border-color:#e42112;background-color:#e42112}.item .item-content.activated.item-balanced,.item .item-content.active.item-balanced,.item-complex.activated .item-content.item-balanced,.item-complex.active .item-content.item-balanced,.item.activated.item-balanced,.item.active.item-balanced{border-color:#28a54c;background-color:#28a54c}.item .item-content.activated.item-balanced.item-complex>.item-content,.item .item-content.active.item-balanced.item-complex>.item-content,.item-complex.activated .item-content.item-balanced.item-complex>.item-content,.item-complex.active .item-content.item-balanced.item-complex>.item-content,.item.activated.item-balanced.item-complex>.item-content,.item.active.item-balanced.item-complex>.item-content{border-color:#28a54c;background-color:#28a54c}.item .item-content.activated.item-energized,.item .item-content.active.item-energized,.item-complex.activated .item-content.item-energized,.item-complex.active .item-content.item-energized,.item.activated.item-energized,.item.active.item-energized{border-color:#e6b500;background-color:#e6b500}.item .item-content.activated.item-energized.item-complex>.item-content,.item .item-content.active.item-energized.item-complex>.item-content,.item-complex.activated .item-content.item-energized.item-complex>.item-content,.item-complex.active .item-content.item-energized.item-complex>.item-content,.item.activated.item-energized.item-complex>.item-content,.item.active.item-energized.item-complex>.item-content{border-color:#e6b500;background-color:#e6b500}.item .item-content.activated.item-royal,.item .item-content.active.item-royal,.item-complex.activated .item-content.item-royal,.item-complex.active .item-content.item-royal,.item.activated.item-royal,.item.active.item-royal{border-color:#6b46e5;background-color:#6b46e5}.item .item-content.activated.item-royal.item-complex>.item-content,.item .item-content.active.item-royal.item-complex>.item-content,.item-complex.activated .item-content.item-royal.item-complex>.item-content,.item-complex.active .item-content.item-royal.item-complex>.item-content,.item.activated.item-royal.item-complex>.item-content,.item.active.item-royal.item-complex>.item-content{border-color:#6b46e5;background-color:#6b46e5}.item .item-content.activated.item-dark,.item .item-content.active.item-dark,.item-complex.activated .item-content.item-dark,.item-complex.active .item-content.item-dark,.item.activated.item-dark,.item.active.item-dark{border-color:#000;background-color:#262626}.item .item-content.activated.item-dark.item-complex>.item-content,.item .item-content.active.item-dark.item-complex>.item-content,.item-complex.activated .item-content.item-dark.item-complex>.item-content,.item-complex.active .item-content.item-dark.item-complex>.item-content,.item.activated.item-dark.item-complex>.item-content,.item.active.item-dark.item-complex>.item-content{border-color:#000;background-color:#262626}.item,.item h1,.item h2,.item h3,.item h4,.item h5,.item h6,.item p,.item-content,.item-content h1,.item-content h2,.item-content h3,.item-content h4,.item-content h5,.item-content h6,.item-content p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a.item{color:inherit;text-decoration:none}a.item:focus,a.item:hover{text-decoration:none}.item-complex,a.item.item-complex,button.item.item-complex{padding:0}.item-complex .item-content,.item-radio .item-content{position:relative;z-index:2;padding:16px 49px 16px 16px;border:none;background-color:#fff}a.item-content{display:block;color:inherit;text-decoration:none}.item-body h1,.item-body h2,.item-body h3,.item-body h4,.item-body h5,.item-body h6,.item-body p,.item-complex.item-text-wrap .item-content,.item-text-wrap,.item-text-wrap .item,.item-text-wrap .item-content,.item-text-wrap h1,.item-text-wrap h2,.item-text-wrap h3,.item-text-wrap h4,.item-text-wrap h5,.item-text-wrap h6,.item-text-wrap p{overflow:visible;white-space:normal}.item-complex.item-text-wrap,.item-complex.item-text-wrap h1,.item-complex.item-text-wrap h2,.item-complex.item-text-wrap h3,.item-complex.item-text-wrap h4,.item-complex.item-text-wrap h5,.item-complex.item-text-wrap h6,.item-complex.item-text-wrap p{overflow:visible;white-space:normal}.item-complex.item-light>.item-content{border-color:#ddd;background-color:#fff;color:#444}.item-complex.item-light>.item-content.active,.item-complex.item-light>.item-content:active{border-color:#ccc;background-color:#fafafa}.item-complex.item-light>.item-content.active.item-complex>.item-content,.item-complex.item-light>.item-content:active.item-complex>.item-content{border-color:#ccc;background-color:#fafafa}.item-complex.item-stable>.item-content{border-color:#b2b2b2;background-color:#f8f8f8;color:#444}.item-complex.item-stable>.item-content.active,.item-complex.item-stable>.item-content:active{border-color:#a2a2a2;background-color:#e5e5e5}.item-complex.item-stable>.item-content.active.item-complex>.item-content,.item-complex.item-stable>.item-content:active.item-complex>.item-content{border-color:#a2a2a2;background-color:#e5e5e5}.item-complex.item-positive>.item-content{border-color:#0c60ee;background-color:#387ef5;color:#fff}.item-complex.item-positive>.item-content.active,.item-complex.item-positive>.item-content:active{border-color:#0c60ee;background-color:#0c60ee}.item-complex.item-positive>.item-content.active.item-complex>.item-content,.item-complex.item-positive>.item-content:active.item-complex>.item-content{border-color:#0c60ee;background-color:#0c60ee}.item-complex.item-calm>.item-content{border-color:#0a9dc7;background-color:#11c1f3;color:#fff}.item-complex.item-calm>.item-content.active,.item-complex.item-calm>.item-content:active{border-color:#0a9dc7;background-color:#0a9dc7}.item-complex.item-calm>.item-content.active.item-complex>.item-content,.item-complex.item-calm>.item-content:active.item-complex>.item-content{border-color:#0a9dc7;background-color:#0a9dc7}.item-complex.item-assertive>.item-content{border-color:#e42112;background-color:#ef473a;color:#fff}.item-complex.item-assertive>.item-content.active,.item-complex.item-assertive>.item-content:active{border-color:#e42112;background-color:#e42112}.item-complex.item-assertive>.item-content.active.item-complex>.item-content,.item-complex.item-assertive>.item-content:active.item-complex>.item-content{border-color:#e42112;background-color:#e42112}.item-complex.item-balanced>.item-content{border-color:#28a54c;background-color:#33cd5f;color:#fff}.item-complex.item-balanced>.item-content.active,.item-complex.item-balanced>.item-content:active{border-color:#28a54c;background-color:#28a54c}.item-complex.item-balanced>.item-content.active.item-complex>.item-content,.item-complex.item-balanced>.item-content:active.item-complex>.item-content{border-color:#28a54c;background-color:#28a54c}.item-complex.item-energized>.item-content{border-color:#e6b500;background-color:#ffc900;color:#fff}.item-complex.item-energized>.item-content.active,.item-complex.item-energized>.item-content:active{border-color:#e6b500;background-color:#e6b500}.item-complex.item-energized>.item-content.active.item-complex>.item-content,.item-complex.item-energized>.item-content:active.item-complex>.item-content{border-color:#e6b500;background-color:#e6b500}.item-complex.item-royal>.item-content{border-color:#6b46e5;background-color:#886aea;color:#fff}.item-complex.item-royal>.item-content.active,.item-complex.item-royal>.item-content:active{border-color:#6b46e5;background-color:#6b46e5}.item-complex.item-royal>.item-content.active.item-complex>.item-content,.item-complex.item-royal>.item-content:active.item-complex>.item-content{border-color:#6b46e5;background-color:#6b46e5}.item-complex.item-dark>.item-content{border-color:#111;background-color:#444;color:#fff}.item-complex.item-dark>.item-content.active,.item-complex.item-dark>.item-content:active{border-color:#000;background-color:#262626}.item-complex.item-dark>.item-content.active.item-complex>.item-content,.item-complex.item-dark>.item-content:active.item-complex>.item-content{border-color:#000;background-color:#262626}#menu .footer .item-icon-left .icon-help,#menu .footer .item-icon-right .icon-help,.item-icon-left #menu .footer .icon-help,.item-icon-left .icon,.item-icon-left .icon-alert,.item-icon-left .icon-help,.item-icon-right #menu .footer .icon-help,.item-icon-right .icon,.item-icon-right .icon-alert,.item-icon-right .icon-help{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%;font-size:32px}#menu .footer .item-icon-left .icon-help:before,#menu .footer .item-icon-right .icon-help:before,.item-icon-left #menu .footer .icon-help:before,.item-icon-left .icon-alert:before,.item-icon-left .icon-help:before,.item-icon-left .icon:before,.item-icon-right #menu .footer .icon-help:before,.item-icon-right .icon-alert:before,.item-icon-right .icon-help:before,.item-icon-right .icon:before{display:block;width:32px;text-align:center}.item .fill-icon{min-width:30px;min-height:30px;font-size:28px}.item-icon-left{padding-left:54px}#menu .footer .item-icon-left .icon-help,.item-icon-left #menu .footer .icon-help,.item-icon-left .icon,.item-icon-left .icon-alert,.item-icon-left .icon-help{left:11px}.item-complex.item-icon-left{padding-left:0}.item-complex.item-icon-left .item-content{padding-left:54px}.item-icon-right{padding-right:54px}#menu .footer .item-icon-right .icon-help,.item-icon-right #menu .footer .icon-help,.item-icon-right .icon,.item-icon-right .icon-alert,.item-icon-right .icon-help{right:11px}.item-complex.item-icon-right{padding-right:0}.item-complex.item-icon-right .item-content{padding-right:54px}#menu .footer .item-icon-left.item-icon-right .icon-help:first-child,.item-icon-left.item-icon-right #menu .footer .icon-help:first-child,.item-icon-left.item-icon-right .icon-alert:first-child,.item-icon-left.item-icon-right .icon-help:first-child,.item-icon-left.item-icon-right .icon:first-child{right:auto}#menu .footer .item-icon-left .item-delete .icon-help,#menu .footer .item-icon-left.item-icon-right .icon-help:last-child,.item-icon-left .item-delete #menu .footer .icon-help,.item-icon-left .item-delete .icon,.item-icon-left .item-delete .icon-alert,.item-icon-left .item-delete .icon-help,.item-icon-left.item-icon-right #menu .footer .icon-help:last-child,.item-icon-left.item-icon-right .icon-alert:last-child,.item-icon-left.item-icon-right .icon-help:last-child,.item-icon-left.item-icon-right .icon:last-child{left:auto}.item-icon-left .icon-accessory,.item-icon-right .icon-accessory{color:#ccc;font-size:16px}.item-icon-left .icon-accessory{left:3px}.item-icon-right .icon-accessory{right:3px}.item-button-left{padding-left:72px}.item-button-left .item-content>.button,.item-button-left>.button{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:8px;left:11px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}#menu .footer .item-button-left .item-content>.button .icon-help:before,#menu .footer .item-button-left>.button .icon-help:before,.item-button-left .item-content>.button #menu .footer .icon-help:before,.item-button-left .item-content>.button .icon-alert:before,.item-button-left .item-content>.button .icon-help:before,.item-button-left .item-content>.button .icon:before,.item-button-left>.button #menu .footer .icon-help:before,.item-button-left>.button .icon-alert:before,.item-button-left>.button .icon-help:before,.item-button-left>.button .icon:before{position:relative;left:auto;width:auto;line-height:31px}.item-button-left .item-content>.button>.button,.item-button-left>.button>.button{margin:0 2px;min-height:34px;font-size:18px;line-height:32px}.item-button-right,a.item.item-button-right,button.item.item-button-right{padding-right:80px}.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.button,.item-button-right>.buttons{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:8px;right:16px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}#menu .footer .item-button-right .item-content>.button .icon-help:before,#menu .footer .item-button-right .item-content>.buttons .icon-help:before,#menu .footer .item-button-right>.button .icon-help:before,#menu .footer .item-button-right>.buttons .icon-help:before,.item-button-right .item-content>.button #menu .footer .icon-help:before,.item-button-right .item-content>.button .icon-alert:before,.item-button-right .item-content>.button .icon-help:before,.item-button-right .item-content>.button .icon:before,.item-button-right .item-content>.buttons #menu .footer .icon-help:before,.item-button-right .item-content>.buttons .icon-alert:before,.item-button-right .item-content>.buttons .icon-help:before,.item-button-right .item-content>.buttons .icon:before,.item-button-right>.button #menu .footer .icon-help:before,.item-button-right>.button .icon-alert:before,.item-button-right>.button .icon-help:before,.item-button-right>.button .icon:before,.item-button-right>.buttons #menu .footer .icon-help:before,.item-button-right>.buttons .icon-alert:before,.item-button-right>.buttons .icon-help:before,.item-button-right>.buttons .icon:before{position:relative;left:auto;width:auto;line-height:31px}.item-button-right .item-content>.button>.button,.item-button-right .item-content>.buttons>.button,.item-button-right>.button>.button,.item-button-right>.buttons>.button{margin:0 2px;min-width:34px;min-height:34px;font-size:18px;line-height:32px}.item-button-left.item-button-right .button:first-child{right:auto}.item-button-left.item-button-right .button:last-child{left:auto}.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{padding-left:72px;min-height:72px}.item-avatar .item-content .item-image,.item-avatar .item-content>img:first-child,.item-avatar .item-image,.item-avatar-left .item-content .item-image,.item-avatar-left .item-content>img:first-child,.item-avatar-left .item-image,.item-avatar-left>img:first-child,.item-avatar>img:first-child{position:absolute;top:16px;left:16px;max-width:40px;max-height:40px;width:100%;height:100%;border-radius:50%}.item-avatar-right,.item-avatar-right .item-content{padding-right:72px;min-height:72px}.item-avatar-right .item-content .item-image,.item-avatar-right .item-content>img:first-child,.item-avatar-right .item-image,.item-avatar-right>img:first-child{position:absolute;top:16px;right:16px;max-width:40px;max-height:40px;width:100%;height:100%;border-radius:50%}.item-thumbnail-left,.item-thumbnail-left .item-content{padding-top:8px;padding-left:106px;min-height:100px}.item-thumbnail-left .item-content .item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left .item-image,.item-thumbnail-left>img:first-child{position:absolute;top:10px;left:10px;max-width:80px;max-height:80px;width:100%;height:100%}.item-avatar-left.item-complex,.item-avatar.item-complex,.item-thumbnail-left.item-complex{padding-top:0;padding-left:0}.item-thumbnail-right,.item-thumbnail-right .item-content{padding-top:8px;padding-right:106px;min-height:100px}.item-thumbnail-right .item-content .item-image,.item-thumbnail-right .item-content>img:first-child,.item-thumbnail-right .item-image,.item-thumbnail-right>img:first-child{position:absolute;top:10px;right:10px;max-width:80px;max-height:80px;width:100%;height:100%}.item-avatar-right.item-complex,.item-thumbnail-right.item-complex{padding-top:0;padding-right:0}.item-image{padding:0;text-align:center}.item-image .list-img,.item-image img:first-child{width:100%;vertical-align:middle}.item-body{overflow:auto;padding:16px;text-overflow:inherit;white-space:normal}.item-body h1,.item-body h2,.item-body h3,.item-body h4,.item-body h5,.item-body h6,.item-body p{margin-top:16px;margin-bottom:16px}.item-divider{padding-top:8px;padding-bottom:8px;min-height:30px;background-color:#f5f5f5;color:#222;font-weight:500}.item-divider-ios,.platform-ios .item-divider-platform{padding-top:26px;text-transform:uppercase;font-weight:300;font-size:13px;background-color:#efeff4;color:#555}.item-divider-android,.platform-android .item-divider-platform{font-weight:300;font-size:13px}.item-note{float:right;color:#aaa;font-size:14px}.item-left-editable .item-content,.item-right-editable .item-content{-webkit-transition-duration:250ms;transition-duration:250ms;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;transition-property:transform}.item-left-editing.item-left-editable .item-content,.list-left-editing .item-left-editable .item-content{-webkit-transform:translate3d(50px,0,0);transform:translate3d(50px,0,0)}.item-remove-animate.ng-leave{-webkit-transition-duration:.3s;transition-duration:.3s}.item-remove-animate.ng-leave .item-content,.item-remove-animate.ng-leave:last-of-type{-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;-webkit-transition-property:all;transition-property:all}.item-remove-animate.ng-leave.ng-leave-active .item-content{opacity:0;-webkit-transform:translate3d(-100%,0,0)!important;transform:translate3d(-100%,0,0)!important}.item-remove-animate.ng-leave.ng-leave-active:last-of-type{opacity:0}.item-remove-animate.ng-leave.ng-leave-active~ion-item:not(.ng-leave){-webkit-transform:translate3d(0,-webkit-calc(-100% + 1px),0);transform:translate3d(0,calc(-100% + 1px),0);-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:cubic-bezier(.25,.81,.24,1);transition-timing-function:cubic-bezier(.25,.81,.24,1);-webkit-transition-property:all;transition-property:all}.item-left-edit{-webkit-transition:all ease-in-out 125ms;transition:all ease-in-out 125ms;position:absolute;top:0;left:0;z-index:0;width:50px;height:100%;line-height:100%;display:none;opacity:0;-webkit-transform:translate3d(-21px,0,0);transform:translate3d(-21px,0,0)}.item-left-edit .button{height:100%}#menu .footer .item-left-edit .button.icon-help,.item-left-edit #menu .footer .button.icon-help,.item-left-edit .button.icon,.item-left-edit .button.icon-alert,.item-left-edit .button.icon-help{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%}.item-left-edit.visible{display:block}.item-left-edit.visible.active{opacity:1;-webkit-transform:translate3d(8px,0,0);transform:translate3d(8px,0,0)}.list-left-editing .item-left-edit{-webkit-transition-delay:125ms;transition-delay:125ms}#menu .footer .item-delete .button.icon-help,.item-delete #menu .footer .button.icon-help,.item-delete .button.icon,.item-delete .button.icon-alert,.item-delete .button.icon-help{color:#ef473a;font-size:24px}#menu .footer .item-delete .button.icon-help:hover,.item-delete #menu .footer .button.icon-help:hover,.item-delete .button.icon-alert:hover,.item-delete .button.icon-help:hover,.item-delete .button.icon:hover{opacity:.7}.item-right-edit{-webkit-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms;position:absolute;top:0;right:0;z-index:3;width:75px;height:100%;background:inherit;padding-left:20px;display:block;opacity:0;-webkit-transform:translate3d(75px,0,0);transform:translate3d(75px,0,0)}.item-right-edit .button{min-width:50px;height:100%}#menu .footer .item-right-edit .button.icon-help,.item-right-edit #menu .footer .button.icon-help,.item-right-edit .button.icon,.item-right-edit .button.icon-alert,.item-right-edit .button.icon-help{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:absolute;top:0;height:100%;font-size:32px}.item-right-edit.visible{display:block}.item-right-edit.visible.active{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}#menu .footer .item-reorder .button.icon-help,.item-reorder #menu .footer .button.icon-help,.item-reorder .button.icon,.item-reorder .button.icon-alert,.item-reorder .button.icon-help{color:#444;font-size:32px}.item-reordering{position:absolute;left:0;top:0;z-index:9;width:100%;box-shadow:0 0 10px 0 #aaa}.item-reordering .item-reorder{z-index:9}.item-placeholder{opacity:.7}.item-options{position:absolute;top:0;right:0;z-index:1;height:100%}.item-options .button{height:100%;border:none;border-radius:0;display:-webkit-inline-box;display:-webkit-inline-flex;display:-moz-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}.item-options .button:before{margin:0 auto}.item-options ion-option-button:last-child{padding-right:calc(constant(safe-area-inset-right) + 12px);padding-right:calc(env(safe-area-inset-right) + 12px)}.list{position:relative;padding-top:1px;padding-bottom:1px;padding-left:0;margin-bottom:20px}.list:last-child{margin-bottom:0}.list:last-child.card{margin-bottom:40px}.list-header{margin-top:20px;padding:5px 15px;background-color:transparent;color:#222;font-weight:700}.card.list .list-item{padding-right:1px;padding-left:1px}.card,.list-inset{overflow:hidden;margin:20px 10px;border-radius:2px;background-color:#fff}.card{padding-top:1px;padding-bottom:1px;box-shadow:0 1px 3px rgba(0,0,0,.3)}.card .item{border-left:0;border-right:0}.card .item:first-child{border-top:0}.card .item:last-child{border-bottom:0}.item.large-button-bar .card,.item.large-button-bar .list-inset,.padding .card,.padding .list-inset{margin-left:0;margin-right:0}.card .item:first-child,.item.large-button-bar>.list .item:first-child,.list-inset .item:first-child,.padding>.list .item:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.card .item:first-child .item-content,.item.large-button-bar>.list .item:first-child .item-content,.list-inset .item:first-child .item-content,.padding>.list .item:first-child .item-content{border-top-left-radius:2px;border-top-right-radius:2px}.card .item:last-child,.item.large-button-bar>.list .item:last-child,.list-inset .item:last-child,.padding>.list .item:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.card .item:last-child .item-content,.item.large-button-bar>.list .item:last-child .item-content,.list-inset .item:last-child .item-content,.padding>.list .item:last-child .item-content{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.card .item:last-child,.list-inset .item:last-child{margin-bottom:-1px}.card .item,.item.large-button-bar>.list .item,.list-inset .item,.padding-horizontal>.list .item,.padding>.list .item{margin-right:0;margin-left:0}.card .item.item-input input,.item.large-button-bar>.list .item.item-input input,.list-inset .item.item-input input,.padding-horizontal>.list .item.item-input input,.padding>.list .item.item-input input{padding-right:44px}.padding-left>.list .item{margin-left:0}.padding-right>.list .item,.popover-share .bar-footer .button-close>.list .item{margin-right:0}.badge{background-color:transparent;color:#aaa;z-index:1;display:inline-block;padding:3px 8px;min-width:10px;border-radius:10px;vertical-align:baseline;text-align:center;white-space:nowrap;font-weight:700;font-size:14px;line-height:16px}.badge:empty{display:none}.badge.badge-light,.tabs .tab-item .badge.badge-light{background-color:#fff;color:#444}.badge.badge-stable,.tabs .tab-item .badge.badge-stable{background-color:#f8f8f8;color:#444}.badge.badge-positive,.tabs .tab-item .badge.badge-positive{background-color:#387ef5;color:#fff}.badge.badge-calm,.tabs .tab-item .badge.badge-calm{background-color:#11c1f3;color:#fff}.badge.badge-assertive,.badge.badge-editable:hover,.tabs .tab-item .badge.badge-assertive,.tabs .tab-item .badge.badge-editable:hover{background-color:#ef473a;color:#fff}.badge.badge-balanced,.tabs .tab-item .badge.badge-balanced{background-color:#33cd5f;color:#fff}.badge.badge-energized,.tabs .tab-item .badge.badge-energized{background-color:#ffc900;color:#fff}.badge.badge-royal,.tabs .tab-item .badge.badge-royal{background-color:#886aea;color:#fff}.badge.badge-dark,.tabs .tab-item .badge.badge-dark{background-color:#444;color:#fff}.button .badge{position:relative;top:-1px}.slider{position:relative;visibility:hidden;overflow:hidden}.slider-slides{position:relative;height:100%}.slider-slide{position:relative;display:block;float:left;width:100%;height:100%;vertical-align:top}.slider-slide-image>img{width:100%}.slider-pager{position:absolute;bottom:20px;z-index:1;width:100%;height:15px;text-align:center}.slider-pager .slider-pager-page{display:inline-block;margin:0 3px;width:15px;color:#000;text-decoration:none;opacity:.3}.slider-pager .slider-pager-page.active{-webkit-transition:opacity .4s ease-in;transition:opacity .4s ease-in;opacity:1}.slider-pager-page.ng-animate,.slider-pager-page.ng-enter,.slider-pager-page.ng-leave,.slider-slide.ng-animate,.slider-slide.ng-enter,.slider-slide.ng-leave{-webkit-transition:none!important;transition:none!important}.slider-pager-page.ng-animate,.slider-slide.ng-animate{-webkit-animation:none 0s;animation:none 0s}.swiper-container{margin:0 auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-moz-box-orient:vertical;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate(0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-box-lines:multiple;-moz-box-lines:multiple;-ms-flex-wrap:wrap;-webkit-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{display:block;-webkit-flex-shrink:0;-ms-flex:0 0 auto;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;-webkit-transition-property:-webkit-transform,height;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform,height}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-moz-background-size:27px 44px;-webkit-background-size:27px 44px;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-moz-appearance:none;-ms-appearance:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);-moz-transform:translate3d(0,-50%,0);-o-transform:translate(0,-50%);-ms-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination{bottom:10px;left:0;width:100%}.swiper-container-horizontal>.swiper-pagination .swiper-pagination-bullet{margin:0 5px}.swiper-container-3d{-webkit-perspective:1200px;-moz-perspective:1200px;-o-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-moz-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-ms-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;visibility:hidden;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;width:100%;height:100%;z-index:1}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-moz-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;-moz-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;-webkit-background-size:100%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}ion-slides{width:100%;height:100%;display:block}.slide-zoom{display:block;width:100%;text-align:center}.swiper-container{width:100%;height:100%;padding:0;overflow:hidden}.swiper-wrapper{position:absolute;left:0;top:0;width:100%;height:100%;padding:0}.swiper-slide{width:100%;height:100%;box-sizing:border-box}.swiper-slide img{width:auto;height:auto;max-width:100%;max-height:100%}.scroll-refresher{position:absolute;top:-60px;right:0;left:0;overflow:hidden;margin:auto;height:60px}.scroll-refresher .ionic-refresher-content{position:absolute;bottom:15px;left:0;width:100%;color:#666;text-align:center;font-size:30px}.scroll-refresher .ionic-refresher-content .text-pulling,.scroll-refresher .ionic-refresher-content .text-refreshing{font-size:16px;line-height:16px}.scroll-refresher .ionic-refresher-content.ionic-refresher-with-text{bottom:10px}.scroll-refresher .icon-pulling,.scroll-refresher .icon-refreshing{width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.scroll-refresher .icon-pulling{-webkit-animation-name:refresh-spin-back;animation-name:refresh-spin-back;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:none;animation-fill-mode:none;-webkit-transform:translate3d(0,0,0) rotate(0);transform:translate3d(0,0,0) rotate(0)}.scroll-refresher .icon-refreshing,.scroll-refresher .text-refreshing{display:none}.scroll-refresher .icon-refreshing{-webkit-animation-duration:1.5s;animation-duration:1.5s}.scroll-refresher.active .icon-pulling:not(.pulling-rotation-disabled){-webkit-animation-name:refresh-spin;animation-name:refresh-spin;-webkit-transform:translate3d(0,0,0) rotate(-180deg);transform:translate3d(0,0,0) rotate(-180deg)}.scroll-refresher.active.refreshing{-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;-webkit-transition:transform .2s;transition:transform .2s;-webkit-transform:scale(1,1);transform:scale(1,1)}.scroll-refresher.active.refreshing .icon-pulling,.scroll-refresher.active.refreshing .text-pulling{display:none}.scroll-refresher.active.refreshing .icon-refreshing,.scroll-refresher.active.refreshing .text-refreshing{display:block}.scroll-refresher.active.refreshing.refreshing-tail{-webkit-transform:scale(0,0);transform:scale(0,0)}.overflow-scroll>.scroll{-webkit-overflow-scrolling:touch;width:100%}.overflow-scroll>.scroll.overscroll{position:fixed;right:0;left:0}.overflow-scroll.item.large-button-bar>.scroll.overscroll,.overflow-scroll.padding>.scroll.overscroll{padding:10px}@-webkit-keyframes refresh-spin{0%{-webkit-transform:translate3d(0,0,0) rotate(0)}100%{-webkit-transform:translate3d(0,0,0) rotate(180deg)}}@keyframes refresh-spin{0%{transform:translate3d(0,0,0) rotate(0)}100%{transform:translate3d(0,0,0) rotate(180deg)}}@-webkit-keyframes refresh-spin-back{0%{-webkit-transform:translate3d(0,0,0) rotate(180deg)}100%{-webkit-transform:translate3d(0,0,0) rotate(0)}}@keyframes refresh-spin-back{0%{transform:translate3d(0,0,0) rotate(180deg)}100%{transform:translate3d(0,0,0) rotate(0)}}.spinner{stroke:#444;fill:#444}.spinner svg{width:28px;height:28px}.spinner.spinner-light{stroke:#fff;fill:#fff}.spinner.spinner-stable{stroke:#f8f8f8;fill:#f8f8f8}.spinner.spinner-positive{stroke:#387ef5;fill:#387ef5}.spinner.spinner-calm{stroke:#11c1f3;fill:#11c1f3}.spinner.spinner-balanced{stroke:#33cd5f;fill:#33cd5f}.spinner.spinner-assertive{stroke:#ef473a;fill:#ef473a}.spinner.spinner-energized{stroke:#ffc900;fill:#ffc900}.spinner.spinner-royal{stroke:#886aea;fill:#886aea}.spinner.spinner-dark{stroke:#444;fill:#444}.spinner-android{stroke:#4b8bf4}.spinner-ios,.spinner-ios-small{stroke:#69717d}.spinner-spiral .stop1{stop-color:#fff;stop-opacity:0}.spinner-spiral.spinner-light .stop1{stop-color:#444}.spinner-spiral.spinner-light .stop2{stop-color:#fff}.spinner-spiral.spinner-stable .stop2{stop-color:#f8f8f8}.spinner-spiral.spinner-positive .stop2{stop-color:#387ef5}.spinner-spiral.spinner-calm .stop2{stop-color:#11c1f3}.spinner-spiral.spinner-balanced .stop2{stop-color:#33cd5f}.spinner-spiral.spinner-assertive .stop2{stop-color:#ef473a}.spinner-spiral.spinner-energized .stop2{stop-color:#ffc900}.spinner-spiral.spinner-royal .stop2{stop-color:#886aea}.spinner-spiral.spinner-dark .stop2{stop-color:#444}form{margin:0 0 1.42857}legend{display:block;margin-bottom:1.42857;padding:0;width:100%;border:1px solid #ddd;color:#444;font-size:21px;line-height:2.85714}legend small{color:#f8f8f8;font-size:1.07143}button,input,label,select,textarea{font-weight:400;font-size:14px;line-height:1.42857}button,input,select,textarea{font-family:"-apple-system","Helvetica Neue",Roboto,"Segoe UI",sans-serif}.item-input{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:relative;overflow:hidden;padding:6px 0 5px 16px}.item-input input{-webkit-border-radius:0;border-radius:0;-webkit-box-flex:1;-webkit-flex:1 220px;-moz-box-flex:1;-moz-flex:1 220px;-ms-flex:1 220px;flex:1 220px;-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;padding-right:24px;background-color:transparent}#menu .footer .item-input .button .icon-help,.item-input .button #menu .footer .icon-help,.item-input .button .icon,.item-input .button .icon-alert,.item-input .button .icon-help{-webkit-box-flex:0;-webkit-flex:0 0 24px;-moz-box-flex:0;-moz-flex:0 0 24px;-ms-flex:0 0 24px;flex:0 0 24px;position:static;display:inline-block;height:auto;text-align:center;font-size:16px}.item-input .button-bar{-webkit-border-radius:0;border-radius:0;-webkit-box-flex:1;-webkit-flex:1 0 220px;-moz-box-flex:1;-moz-flex:1 0 220px;-ms-flex:1 0 220px;flex:1 0 220px;-webkit-appearance:none;-moz-appearance:none;appearance:none}#menu .footer .item-input .icon-help,.item-input #menu .footer .icon-help,.item-input .icon,.item-input .icon-alert,.item-input .icon-help{min-width:14px}.platform-windowsphone .item-input input{flex-shrink:1}.item-input-inset{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;position:relative;overflow:hidden;padding:10.66667px}.item-input-wrapper{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1 0;-moz-box-flex:1;-moz-flex:1 0;-ms-flex:1 0;flex:1 0;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;-webkit-border-radius:4px;border-radius:4px;padding-right:8px;padding-left:8px;background:#eee}.item-input-inset .item-input-wrapper input{padding-left:4px;height:29px;background:0 0;line-height:18px}.item-input-wrapper~.button{margin-left:10.66667px}.input-label{display:table;padding:7px 10px 7px 0;max-width:200px;width:35%;color:#444;font-size:16px}.placeholder-icon{color:#aaa}.placeholder-icon:first-child{padding-right:6px}.placeholder-icon:last-child{padding-left:6px}.item-stacked-label{display:block;background-color:transparent;box-shadow:none}#menu .footer .item-stacked-label .icon-help,.item-stacked-label #menu .footer .icon-help,.item-stacked-label .icon,.item-stacked-label .icon-alert,.item-stacked-label .icon-help,.item-stacked-label .input-label{display:inline-block;padding:4px 0 0 0;vertical-align:middle}.item-stacked-label input,.item-stacked-label textarea{-webkit-border-radius:2px;border-radius:2px;padding:4px 8px 3px 0;border:none;background-color:#fff}.item-stacked-label input{overflow:hidden;height:46px}.item-select.item-stacked-label select{position:relative;padding:0;max-width:90%;direction:ltr;white-space:pre-wrap;margin:-3px}.item-floating-label{display:block;background-color:transparent;box-shadow:none}.item-floating-label .input-label{position:relative;padding:5px 0 0 0;opacity:0;top:10px;-webkit-transition:opacity .15s ease-in,top .2s linear;transition:opacity .15s ease-in,top .2s linear}.item-floating-label .input-label.has-input{opacity:1;top:0;-webkit-transition:opacity .15s ease-in,top .2s linear;transition:opacity .15s ease-in,top .2s linear}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{display:block;padding-top:2px;padding-left:0;height:34px;color:#111;vertical-align:middle;font-size:14px;line-height:16px}.platform-android input[type=date],.platform-android input[type=datetime-local],.platform-android input[type=month],.platform-android input[type=time],.platform-android input[type=week],.platform-ios input[type=date],.platform-ios input[type=datetime-local],.platform-ios input[type=month],.platform-ios input[type=time],.platform-ios input[type=week]{padding-top:8px}.item-input input,.item-input textarea{width:100%}textarea{padding-left:0}textarea::-moz-placeholder{color:#aaa}textarea:-ms-input-placeholder{color:#aaa}textarea::-webkit-input-placeholder{color:#aaa;text-indent:-3px}textarea{height:auto}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{border:0}input[type=checkbox],input[type=radio]{margin:0;line-height:normal}.item-input input[type=button],.item-input input[type=checkbox],.item-input input[type=file],.item-input input[type=image],.item-input input[type=radio],.item-input input[type=reset],.item-input input[type=submit]{width:auto}input[type=file]{line-height:34px}.cloned-text-input+input,.cloned-text-input+textarea,.previous-input-focus{position:absolute!important;left:-9999px;width:200px}input::-moz-placeholder,textarea::-moz-placeholder{color:#aaa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#aaa}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#aaa;text-indent:0}input[disabled],input[readonly]:not(.cloned-text-input),select[disabled],select[readonly],textarea[disabled],textarea[readonly]:not(.cloned-text-input){background-color:#f8f8f8;cursor:not-allowed}input[type=checkbox][disabled],input[type=checkbox][readonly],input[type=radio][disabled],input[type=radio][readonly]{background-color:transparent}.checkbox{position:relative;display:inline-block;padding:7px 7px;cursor:pointer}.checkbox .checkbox-icon:before,.checkbox input:before{border-color:#ddd}.checkbox input:checked+.checkbox-icon:before,.checkbox input:checked:before{background:#387ef5;border-color:#387ef5}.checkbox-light .checkbox-icon:before,.checkbox-light input:before{border-color:#ddd}.checkbox-light input:checked+.checkbox-icon:before,.checkbox-light input:checked:before{background:#ddd;border-color:#ddd}.checkbox-stable .checkbox-icon:before,.checkbox-stable input:before{border-color:#b2b2b2}.checkbox-stable input:checked+.checkbox-icon:before,.checkbox-stable input:checked:before{background:#b2b2b2;border-color:#b2b2b2}.checkbox-positive .checkbox-icon:before,.checkbox-positive input:before{border-color:#387ef5}.checkbox-positive input:checked+.checkbox-icon:before,.checkbox-positive input:checked:before{background:#387ef5;border-color:#387ef5}.checkbox-calm .checkbox-icon:before,.checkbox-calm input:before{border-color:#11c1f3}.checkbox-calm input:checked+.checkbox-icon:before,.checkbox-calm input:checked:before{background:#11c1f3;border-color:#11c1f3}.checkbox-assertive .checkbox-icon:before,.checkbox-assertive input:before{border-color:#ef473a}.checkbox-assertive input:checked+.checkbox-icon:before,.checkbox-assertive input:checked:before{background:#ef473a;border-color:#ef473a}.checkbox-balanced .checkbox-icon:before,.checkbox-balanced input:before{border-color:#33cd5f}.checkbox-balanced input:checked+.checkbox-icon:before,.checkbox-balanced input:checked:before{background:#33cd5f;border-color:#33cd5f}.checkbox-energized .checkbox-icon:before,.checkbox-energized input:before{border-color:#ffc900}.checkbox-energized input:checked+.checkbox-icon:before,.checkbox-energized input:checked:before{background:#ffc900;border-color:#ffc900}.checkbox-royal .checkbox-icon:before,.checkbox-royal input:before{border-color:#886aea}.checkbox-royal input:checked+.checkbox-icon:before,.checkbox-royal input:checked:before{background:#886aea;border-color:#886aea}.checkbox-dark .checkbox-icon:before,.checkbox-dark input:before{border-color:#444}.checkbox-dark input:checked+.checkbox-icon:before,.checkbox-dark input:checked:before{background:#444;border-color:#444}.checkbox input:disabled+.checkbox-icon:before,.checkbox input:disabled:before{border-color:#ddd}.checkbox input:disabled:checked+.checkbox-icon:before,.checkbox input:disabled:checked:before{background:#ddd}.checkbox.checkbox-input-hidden input{display:none!important}.checkbox input,.checkbox-icon{position:relative;width:28px;height:28px;display:block;border:0;background:0 0;cursor:pointer;-webkit-appearance:none}.checkbox input:before,.checkbox-icon:before{display:table;width:100%;height:100%;border-width:1px;border-style:solid;border-radius:28px;background:#fff;content:' ';-webkit-transition:background-color 20ms ease-in-out;transition:background-color 20ms ease-in-out}.checkbox input:checked:before,input:checked+.checkbox-icon:before{border-width:2px}.checkbox input:after,.checkbox-icon:after{-webkit-transition:opacity 50ms ease-in-out;transition:opacity 50ms ease-in-out;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);position:absolute;top:33%;left:25%;display:table;width:14px;height:6px;border:1px solid #fff;border-top:0;border-right:0;content:' ';opacity:0}.checkbox-square .checkbox-icon:before,.checkbox-square input:before,.platform-android .checkbox-platform .checkbox-icon:before,.platform-android .checkbox-platform input:before{border-radius:2px;width:72%;height:72%;margin-top:14%;margin-left:14%;border-width:2px}.checkbox-square .checkbox-icon:after,.checkbox-square input:after,.platform-android .checkbox-platform .checkbox-icon:after,.platform-android .checkbox-platform input:after{border-width:2px;top:19%;left:25%;width:13px;height:7px}.platform-android .item-checkbox-right .checkbox-square .checkbox-icon::after{top:31%}.grade-c .checkbox input:after,.grade-c .checkbox-icon:after{-webkit-transform:rotate(0);transform:rotate(0);top:3px;left:4px;border:none;color:#fff;content:'\2713';font-weight:700;font-size:20px}.checkbox input:checked:after,input:checked+.checkbox-icon:after{opacity:1}.item-checkbox{padding-left:60px}.item-checkbox.active{box-shadow:none}.item-checkbox .checkbox{position:absolute;top:50%;right:8px;left:8px;z-index:3;margin-top:-21px}.item-checkbox.item-checkbox-right{padding-right:60px;padding-left:16px}.item-checkbox-right .checkbox input,.item-checkbox-right .checkbox-icon{float:right}.item-toggle{pointer-events:none}.toggle{position:relative;display:inline-block;pointer-events:auto;margin:-5px;padding:5px}.toggle input:checked+.track{border-color:#4cd964;background-color:#4cd964}.toggle.dragging .handle{background-color:#f2f2f2!important}.toggle.toggle-light input:checked+.track{border-color:#ddd;background-color:#ddd}.toggle.toggle-stable input:checked+.track{border-color:#b2b2b2;background-color:#b2b2b2}.toggle.toggle-positive input:checked+.track{border-color:#387ef5;background-color:#387ef5}.toggle.toggle-calm input:checked+.track{border-color:#11c1f3;background-color:#11c1f3}.toggle.toggle-assertive input:checked+.track{border-color:#ef473a;background-color:#ef473a}.toggle.toggle-balanced input:checked+.track{border-color:#33cd5f;background-color:#33cd5f}.toggle.toggle-energized input:checked+.track{border-color:#ffc900;background-color:#ffc900}.toggle.toggle-royal input:checked+.track{border-color:#886aea;background-color:#886aea}.toggle.toggle-dark input:checked+.track{border-color:#444;background-color:#444}.toggle input{display:none}.toggle .track{-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-property:background-color,border;transition-property:background-color,border;display:inline-block;box-sizing:border-box;width:51px;height:31px;border:solid 2px #e6e6e6;border-radius:20px;background-color:#fff;content:' ';cursor:pointer;pointer-events:none}.platform-android4_2 .toggle .track{-webkit-background-clip:padding-box}.toggle .handle{-webkit-transition:.3s cubic-bezier(0,1.1,1,1.1);transition:.3s cubic-bezier(0,1.1,1,1.1);-webkit-transition-property:background-color,transform;transition-property:background-color,transform;position:absolute;display:block;width:27px;height:27px;border-radius:27px;background-color:#fff;top:7px;left:7px;box-shadow:0 2px 7px rgba(0,0,0,.35),0 1px 1px rgba(0,0,0,.15)}.toggle .handle:before{position:absolute;top:-4px;left:-21.5px;padding:18.5px 34px;content:" "}.toggle input:checked+.track .handle{-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0);background-color:#fff}.item-toggle.active{box-shadow:none}.item-toggle,.item-toggle.item-complex .item-content{padding-right:99px}.item-toggle.item-complex{padding-right:0}.item-toggle .toggle{position:absolute;top:10px;right:16px;z-index:3}.toggle input:disabled+.track{opacity:.6}.toggle-small .track{border:0;width:34px;height:15px;background:#9e9e9e}.toggle-small input:checked+.track{background:rgba(0,150,137,.5)}.toggle-small .handle{top:2px;left:4px;width:21px;height:21px;box-shadow:0 2px 5px rgba(0,0,0,.25)}.toggle-small input:checked+.track .handle{-webkit-transform:translate3d(16px,0,0);transform:translate3d(16px,0,0);background:#009689}.toggle-small.item-toggle .toggle{top:19px}.toggle-small .toggle-light input:checked+.track{background-color:rgba(221,221,221,.5)}.toggle-small .toggle-light input:checked+.track .handle{background-color:#ddd}.toggle-small .toggle-stable input:checked+.track{background-color:rgba(178,178,178,.5)}.toggle-small .toggle-stable input:checked+.track .handle{background-color:#b2b2b2}.toggle-small .toggle-positive input:checked+.track{background-color:rgba(56,126,245,.5)}.toggle-small .toggle-positive input:checked+.track .handle{background-color:#387ef5}.toggle-small .toggle-calm input:checked+.track{background-color:rgba(17,193,243,.5)}.toggle-small .toggle-calm input:checked+.track .handle{background-color:#11c1f3}.toggle-small .toggle-assertive input:checked+.track{background-color:rgba(239,71,58,.5)}.toggle-small .toggle-assertive input:checked+.track .handle{background-color:#ef473a}.toggle-small .toggle-balanced input:checked+.track{background-color:rgba(51,205,95,.5)}.toggle-small .toggle-balanced input:checked+.track .handle{background-color:#33cd5f}.toggle-small .toggle-energized input:checked+.track{background-color:rgba(255,201,0,.5)}.toggle-small .toggle-energized input:checked+.track .handle{background-color:#ffc900}.toggle-small .toggle-royal input:checked+.track{background-color:rgba(136,106,234,.5)}.toggle-small .toggle-royal input:checked+.track .handle{background-color:#886aea}.toggle-small .toggle-dark input:checked+.track{background-color:rgba(68,68,68,.5)}.toggle-small .toggle-dark input:checked+.track .handle{background-color:#444}.item-radio{padding:0}.item-radio:hover{cursor:pointer}.item-radio .item-content{padding-right:64px}.item-radio .radio-icon{position:absolute;top:0;right:0;z-index:3;visibility:hidden;padding:14px;height:100%;font-size:24px}.item-radio input{position:absolute;left:-9999px}.item-radio input:checked+.radio-content .item-content{background:#f7f7f7}.item-radio input:checked+.radio-content .radio-icon{visibility:visible}.range input{display:inline-block;overflow:hidden;margin-top:5px;margin-bottom:5px;padding-right:2px;padding-left:1px;width:auto;height:43px;outline:0;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0,#ccc),color-stop(100%,#ccc));background:linear-gradient(to right,#ccc 0,#ccc 100%);background-position:center;background-size:99% 2px;background-repeat:no-repeat;-webkit-appearance:none}.range input::-moz-focus-outer{border:0}.range input::-webkit-slider-thumb{position:relative;width:28px;height:28px;border-radius:50%;background-color:#fff;box-shadow:0 0 2px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2);cursor:pointer;-webkit-appearance:none;border:0}.range input::-webkit-slider-thumb:before{position:absolute;top:13px;left:-2001px;width:2000px;height:2px;background:#444;content:' '}.range input::-webkit-slider-thumb:after{position:absolute;top:-15px;left:-15px;padding:30px;content:' '}.range input::-ms-fill-lower{height:2px;background:#444}.range{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center;padding:2px 11px}.range.range-light input::-webkit-slider-thumb:before{background:#ddd}.range.range-light input::-ms-fill-lower{background:#ddd}.range.range-stable input::-webkit-slider-thumb:before{background:#b2b2b2}.range.range-stable input::-ms-fill-lower{background:#b2b2b2}.range.range-positive input::-webkit-slider-thumb:before{background:#387ef5}.range.range-positive input::-ms-fill-lower{background:#387ef5}.range.range-calm input::-webkit-slider-thumb:before{background:#11c1f3}.range.range-calm input::-ms-fill-lower{background:#11c1f3}.range.range-balanced input::-webkit-slider-thumb:before{background:#33cd5f}.range.range-balanced input::-ms-fill-lower{background:#33cd5f}.range.range-assertive input::-webkit-slider-thumb:before{background:#ef473a}.range.range-assertive input::-ms-fill-lower{background:#ef473a}.range.range-energized input::-webkit-slider-thumb:before{background:#ffc900}.range.range-energized input::-ms-fill-lower{background:#ffc900}.range.range-royal input::-webkit-slider-thumb:before{background:#886aea}.range.range-royal input::-ms-fill-lower{background:#886aea}.range.range-dark input::-webkit-slider-thumb:before{background:#444}.range.range-dark input::-ms-fill-lower{background:#444}#menu .footer .range .icon-help,.range #menu .footer .icon-help,.range .icon,.range .icon-alert,.range .icon-help{-webkit-box-flex:0;-webkit-flex:0;-moz-box-flex:0;-moz-flex:0;-ms-flex:0;flex:0;display:block;min-width:24px;text-align:center;font-size:24px}.range input{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;margin-right:10px;margin-left:10px}.range-label{-webkit-box-flex:0;-webkit-flex:0 0 auto;-moz-box-flex:0;-moz-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;display:block;white-space:nowrap}.range-label:first-child{padding-left:5px}.range input+.range-label{padding-right:5px;padding-left:0}.platform-windowsphone .range input{height:auto}.item-select{position:relative}.item-select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:absolute;top:0;bottom:0;right:0;padding:0 48px 0 16px;max-width:65%;border:none;background:#fff;color:#333;text-indent:.01px;text-overflow:'';white-space:nowrap;font-size:14px;cursor:pointer;direction:rtl}.item-select select::-ms-expand{display:none}.item-select option{direction:ltr}.item-select:after{position:absolute;top:50%;right:16px;margin-top:-3px;width:0;height:0;border-top:5px solid;border-right:5px solid transparent;border-left:5px solid transparent;color:#999;content:"";pointer-events:none}.item-select.item-light select{background:#fff;color:#444}.item-select.item-stable select{background:#f8f8f8;color:#444}.item-select.item-stable .input-label,.item-select.item-stable:after{color:#666}.item-select.item-positive select{background:#387ef5;color:#fff}.item-select.item-positive .input-label,.item-select.item-positive:after{color:#fff}.item-select.item-calm select{background:#11c1f3;color:#fff}.item-select.item-calm .input-label,.item-select.item-calm:after{color:#fff}.item-select.item-assertive select{background:#ef473a;color:#fff}.item-select.item-assertive .input-label,.item-select.item-assertive:after{color:#fff}.item-select.item-balanced select{background:#33cd5f;color:#fff}.item-select.item-balanced .input-label,.item-select.item-balanced:after{color:#fff}.item-select.item-energized select{background:#ffc900;color:#fff}.item-select.item-energized .input-label,.item-select.item-energized:after{color:#fff}.item-select.item-royal select{background:#886aea;color:#fff}.item-select.item-royal .input-label,.item-select.item-royal:after{color:#fff}.item-select.item-dark select{background:#444;color:#fff}.item-select.item-dark .input-label,.item-select.item-dark:after{color:#fff}select[multiple],select[size]{height:auto}progress{display:block;margin:15px auto;width:100%}.button{border-color:transparent;background-color:#f8f8f8;color:#444;position:relative;display:inline-block;margin:0;padding:0 12px;min-width:52px;min-height:47px;border-width:1px;border-style:solid;border-radius:4px;vertical-align:top;text-align:center;text-overflow:ellipsis;font-size:16px;line-height:42px;cursor:pointer}.button:hover{color:#444;text-decoration:none}.button.activated,.button.active{border-color:#a2a2a2;background-color:#e5e5e5}.button:after{position:absolute;top:-6px;right:-6px;bottom:-6px;left:-6px;content:' '}#menu .footer .button .icon-help,.button #menu .footer .icon-help,.button .icon,.button .icon-alert,.button .icon-help{vertical-align:top;pointer-events:none}#menu .footer .button .icon-help:before,#menu .footer .button.icon-help:before,.button #menu .footer .icon-help:before,.button .icon-alert:before,.button .icon-help:before,.button .icon:before,.button.icon-alert:before,.button.icon-help:before,.button.icon-left:before,.button.icon-right:before,.button.icon:before{display:inline-block;padding:0 0 1px 0;vertical-align:inherit;font-size:24px;line-height:41px;pointer-events:none}.button.icon-left:before{float:left;padding-right:.2em;padding-left:0}.button.icon-right:before{float:right;padding-right:0;padding-left:.2em}.button.button-block,.button.button-full{margin-top:10px;margin-bottom:10px}.button.button-light{border-color:transparent;background-color:#fff;color:#444}.button.button-light:hover{color:#444;text-decoration:none}.button.button-light.activated,.button.button-light.active{border-color:#a2a2a2;background-color:#fafafa}.button.button-light.button-clear,.button.button-light.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#ddd}.button.button-light.button-icon{border-color:transparent;background:0 0}.button.button-light.button-outline{border-color:#ddd;background:0 0;color:#ddd}.button.button-light.button-outline.activated,.button.button-light.button-outline.active{background-color:#ddd;box-shadow:none;color:#fff}.button.button-stable{border-color:transparent;background-color:#f8f8f8;color:#444}.button.button-stable:hover{color:#444;text-decoration:none}.button.button-stable.activated,.button.button-stable.active{border-color:#a2a2a2;background-color:#e5e5e5}.button.button-stable.button-clear,.button.button-stable.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#b2b2b2}.button.button-stable.button-icon{border-color:transparent;background:0 0}.button.button-stable.button-outline{border-color:#b2b2b2;background:0 0;color:#b2b2b2}.button.button-stable.button-outline.activated,.button.button-stable.button-outline.active{background-color:#b2b2b2;box-shadow:none;color:#fff}.button.button-positive,.button.button-text{border-color:transparent;background-color:#387ef5;color:#fff}.button.button-positive:hover,.button.button-text:hover{color:#fff;text-decoration:none}.button.activated.button-text,.button.active.button-text,.button.button-positive.activated,.button.button-positive.active{border-color:#a2a2a2;background-color:#0c60ee}.button.button-positive.button-clear,.button.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#387ef5}.button.button-icon.button-text,.button.button-positive.button-icon{border-color:transparent;background:0 0}.button.button-outline.button-text,.button.button-positive.button-outline{border-color:#387ef5;background:0 0;color:#387ef5}.button.button-outline.activated.button-text,.button.button-outline.active.button-text,.button.button-positive.button-outline.activated,.button.button-positive.button-outline.active{background-color:#387ef5;box-shadow:none;color:#fff}.button.button-calm{border-color:transparent;background-color:#11c1f3;color:#fff}.button.button-calm:hover{color:#fff;text-decoration:none}.button.button-calm.activated,.button.button-calm.active{border-color:#a2a2a2;background-color:#0a9dc7}.button.button-calm.button-clear,.button.button-calm.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#11c1f3}.button.button-calm.button-icon{border-color:transparent;background:0 0}.button.button-calm.button-outline{border-color:#11c1f3;background:0 0;color:#11c1f3}.button.button-calm.button-outline.activated,.button.button-calm.button-outline.active{background-color:#11c1f3;box-shadow:none;color:#fff}.button.button-assertive{border-color:transparent;background-color:#ef473a;color:#fff}.button.button-assertive:hover{color:#fff;text-decoration:none}.button.button-assertive.activated,.button.button-assertive.active{border-color:#a2a2a2;background-color:#e42112}.button.button-assertive.button-clear,.button.button-assertive.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#ef473a}.button.button-assertive.button-icon{border-color:transparent;background:0 0}.button.button-assertive.button-outline{border-color:#ef473a;background:0 0;color:#ef473a}.button.button-assertive.button-outline.activated,.button.button-assertive.button-outline.active{background-color:#ef473a;box-shadow:none;color:#fff}.button.button-balanced{border-color:transparent;background-color:#33cd5f;color:#fff}.button.button-balanced:hover{color:#fff;text-decoration:none}.button.button-balanced.activated,.button.button-balanced.active{border-color:#a2a2a2;background-color:#28a54c}.button.button-balanced.button-clear,.button.button-balanced.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#33cd5f}.button.button-balanced.button-icon{border-color:transparent;background:0 0}.button.button-balanced.button-outline{border-color:#33cd5f;background:0 0;color:#33cd5f}.button.button-balanced.button-outline.activated,.button.button-balanced.button-outline.active{background-color:#33cd5f;box-shadow:none;color:#fff}.button.button-energized{border-color:transparent;background-color:#ffc900;color:#fff}.button.button-energized:hover{color:#fff;text-decoration:none}.button.button-energized.activated,.button.button-energized.active{border-color:#a2a2a2;background-color:#e6b500}.button.button-energized.button-clear,.button.button-energized.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#ffc900}.button.button-energized.button-icon{border-color:transparent;background:0 0}.button.button-energized.button-outline{border-color:#ffc900;background:0 0;color:#ffc900}.button.button-energized.button-outline.activated,.button.button-energized.button-outline.active{background-color:#ffc900;box-shadow:none;color:#fff}.button.button-royal{border-color:transparent;background-color:#886aea;color:#fff}.button.button-royal:hover{color:#fff;text-decoration:none}.button.button-royal.activated,.button.button-royal.active{border-color:#a2a2a2;background-color:#6b46e5}.button.button-royal.button-clear,.button.button-royal.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#886aea}.button.button-royal.button-icon{border-color:transparent;background:0 0}.button.button-royal.button-outline{border-color:#886aea;background:0 0;color:#886aea}.button.button-royal.button-outline.activated,.button.button-royal.button-outline.active{background-color:#886aea;box-shadow:none;color:#fff}.button.button-dark{border-color:transparent;background-color:#444;color:#fff}.button.button-dark:hover{color:#fff;text-decoration:none}.button.button-dark.activated,.button.button-dark.active{border-color:#a2a2a2;background-color:#262626}.button.button-dark.button-clear,.button.button-dark.button-text{border-color:transparent;background:0 0;box-shadow:none;color:#444}.button.button-dark.button-icon{border-color:transparent;background:0 0}.button.button-dark.button-outline{border-color:#444;background:0 0;color:#444}.button.button-dark.button-outline.activated,.button.button-dark.button-outline.active{background-color:#444;box-shadow:none;color:#fff}.button-small,.button-text.button-small{padding:2px 4px 1px;min-width:28px;min-height:30px;font-size:12px;line-height:26px}#menu .footer .button-small .icon-help:before,#menu .footer .button-small.icon-help:before,.button-small #menu .footer .icon-help:before,.button-small .icon-alert:before,.button-small .icon-help:before,.button-small .icon:before,.button-small.icon-alert:before,.button-small.icon-help:before,.button-small.icon-left:before,.button-small.icon-right:before,.button-small.icon:before{font-size:16px;line-height:19px;margin-top:3px}.button-large{padding:0 16px;min-width:68px;min-height:59px;font-size:20px;line-height:53px}#menu .footer .button-large .icon-help:before,#menu .footer .button-large.icon-help:before,.button-large #menu .footer .icon-help:before,.button-large .icon-alert:before,.button-large .icon-help:before,.button-large .icon:before,.button-large.icon-alert:before,.button-large.icon-help:before,.button-large.icon-left:before,.button-large.icon-right:before,.button-large.icon:before{padding-bottom:2px;font-size:32px;line-height:51px}.button-icon{-webkit-transition:opacity .1s;transition:opacity .1s;padding:0 6px;min-width:initial;border-color:transparent;background:0 0}.button-icon.button.activated,.button-icon.button.active{border-color:transparent;background:0 0;box-shadow:none;opacity:.3}#menu .footer .button-icon .icon-help:before,#menu .footer .button-icon.icon-help:before,.button-icon #menu .footer .icon-help:before,.button-icon .icon-alert:before,.button-icon .icon-help:before,.button-icon .icon:before,.button-icon.icon-alert:before,.button-icon.icon-help:before,.button-icon.icon:before{font-size:32px}.button-clear,.button-text{-webkit-transition:opacity .1s;transition:opacity .1s;padding:0 6px;max-height:42px;border-color:transparent;background:0 0;box-shadow:none}.button-clear.button-clear,.button-text{border-color:transparent;background:0 0;box-shadow:none;color:transparent}.button-clear.button-icon,.button-icon.button-text{border-color:transparent;background:0 0}.activated.button-text,.active.button-text,.button-clear.activated,.button-clear.active{opacity:.3}.button-outline{-webkit-transition:opacity .1s;transition:opacity .1s;background:0 0;box-shadow:none}.button-outline.button-outline{border-color:transparent;background:0 0;color:transparent}.button-outline.button-outline.activated,.button-outline.button-outline.active{background-color:transparent;box-shadow:none;color:#fff}.item.large-button-bar>.button.button-block:first-child,.padding>.button.button-block:first-child{margin-top:0}.button-block{display:block;clear:both}.button-block:after{clear:both}.button-full,.button-full>.button{display:block;margin-right:0;margin-left:0;border-right-width:0;border-left-width:0;border-radius:0}.button-full>button.button,button.button-block,button.button-full,input.button.button-block{width:100%}a.button{text-decoration:none}#menu .footer a.button .icon-help:before,#menu .footer a.button.icon-help:before,a.button #menu .footer .icon-help:before,a.button .icon-alert:before,a.button .icon-help:before,a.button .icon:before,a.button.icon-alert:before,a.button.icon-help:before,a.button.icon-left:before,a.button.icon-right:before,a.button.icon:before{margin-top:2px}.button.disabled,.button[disabled]{opacity:.4;cursor:default!important;pointer-events:none}.button-bar{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;width:100%}.button-bar.button-bar-inline{display:block;width:auto}.button-bar.button-bar-inline:after,.button-bar.button-bar-inline:before{display:table;content:"";line-height:0}.button-bar.button-bar-inline:after{clear:both}.button-bar.button-bar-inline>.button{width:auto;display:inline-block;float:left}.button-bar.bar-light>.button{border-color:#ddd}.button-bar.bar-stable>.button{border-color:#b2b2b2}.button-bar.bar-positive>.button{border-color:#0c60ee}.button-bar.bar-calm>.button{border-color:#0a9dc7}.button-bar.bar-assertive>.button{border-color:#e42112}.button-bar.bar-balanced>.button{border-color:#28a54c}.button-bar.bar-energized>.button{border-color:#e6b500}.button-bar.bar-royal>.button{border-color:#6b46e5}.button-bar.bar-dark>.button{border-color:#111}.button-bar>.button{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;padding:0 16px;width:0;border-width:1px 0 1px 1px;border-radius:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}#menu .footer .button-bar>.button .icon-help:before,.button-bar>.button #menu .footer .icon-help:before,.button-bar>.button .icon-alert:before,.button-bar>.button .icon-help:before,.button-bar>.button .icon:before,.button-bar>.button:before{line-height:44px}.button-bar>.button:first-child{border-radius:4px 0 0 4px}.button-bar>.button:last-child{border-right-width:1px;border-radius:0 4px 4px 0}.button-bar>.button:only-child{border-radius:4px}#menu .footer .button-bar>.button-small .icon-help:before,.button-bar>.button-small #menu .footer .icon-help:before,.button-bar>.button-small .icon-alert:before,.button-bar>.button-small .icon-help:before,.button-bar>.button-small .icon:before,.button-bar>.button-small:before{line-height:28px}.row{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;padding:5px;width:100%}.row-wrap{-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.row-no-padding{padding:0}.row-no-padding>.col{padding:0}.row+.row{margin-top:-5px;padding-top:0}.col{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;display:block;padding:5px;width:100%}.row-top{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;-moz-align-items:flex-start;align-items:flex-start}.row-bottom{-webkit-box-align:end;-ms-flex-align:end;-webkit-align-items:flex-end;-moz-align-items:flex-end;align-items:flex-end}.row-center{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;align-items:center}.row-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;-webkit-align-items:stretch;-moz-align-items:stretch;align-items:stretch}.row-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;-webkit-align-items:baseline;-moz-align-items:baseline;align-items:baseline}.col-top{-webkit-align-self:flex-start;-moz-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.col-bottom{-webkit-align-self:flex-end;-moz-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.col-center{-webkit-align-self:center;-moz-align-self:center;-ms-flex-item-align:center;align-self:center}.col-offset-10{margin-left:10%}.col-offset-20{margin-left:20%}.col-offset-25{margin-left:25%}.col-offset-33,.col-offset-34{margin-left:33.3333%}.col-offset-50{margin-left:50%}.col-offset-66,.col-offset-67{margin-left:66.6666%}.col-offset-75{margin-left:75%}.col-offset-80{margin-left:80%}.col-offset-90{margin-left:90%}.col-10{-webkit-box-flex:0;-webkit-flex:0 0 10%;-moz-box-flex:0;-moz-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%;max-width:10%}.col-20{-webkit-box-flex:0;-webkit-flex:0 0 20%;-moz-box-flex:0;-moz-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.col-25{-webkit-box-flex:0;-webkit-flex:0 0 25%;-moz-box-flex:0;-moz-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-33,.col-34{-webkit-box-flex:0;-webkit-flex:0 0 33.3333%;-moz-box-flex:0;-moz-flex:0 0 33.3333%;-ms-flex:0 0 33.3333%;flex:0 0 33.3333%;max-width:33.3333%}.col-40{-webkit-box-flex:0;-webkit-flex:0 0 40%;-moz-box-flex:0;-moz-flex:0 0 40%;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}.col-50{-webkit-box-flex:0;-webkit-flex:0 0 50%;-moz-box-flex:0;-moz-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-60{-webkit-box-flex:0;-webkit-flex:0 0 60%;-moz-box-flex:0;-moz-flex:0 0 60%;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}.col-66,.col-67{-webkit-box-flex:0;-webkit-flex:0 0 66.6666%;-moz-box-flex:0;-moz-flex:0 0 66.6666%;-ms-flex:0 0 66.6666%;flex:0 0 66.6666%;max-width:66.6666%}.col-75{-webkit-box-flex:0;-webkit-flex:0 0 75%;-moz-box-flex:0;-moz-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-80{-webkit-box-flex:0;-webkit-flex:0 0 80%;-moz-box-flex:0;-moz-flex:0 0 80%;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}.col-90{-webkit-box-flex:0;-webkit-flex:0 0 90%;-moz-box-flex:0;-moz-flex:0 0 90%;-ms-flex:0 0 90%;flex:0 0 90%;max-width:90%}@media (max-width:567px){.responsive-sm{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-sm .col,.responsive-sm .col-10,.responsive-sm .col-20,.responsive-sm .col-25,.responsive-sm .col-33,.responsive-sm .col-34,.responsive-sm .col-50,.responsive-sm .col-66,.responsive-sm .col-67,.responsive-sm .col-75,.responsive-sm .col-80,.responsive-sm .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}@media (max-width:767px){.responsive-md{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-md .col,.responsive-md .col-10,.responsive-md .col-20,.responsive-md .col-25,.responsive-md .col-33,.responsive-md .col-34,.responsive-md .col-50,.responsive-md .col-66,.responsive-md .col-67,.responsive-md .col-75,.responsive-md .col-80,.responsive-md .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}@media (max-width:1023px){.responsive-lg{-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:vertical;-moz-box-orient:vertical;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.responsive-lg .col,.responsive-lg .col-10,.responsive-lg .col-20,.responsive-lg .col-25,.responsive-lg .col-33,.responsive-lg .col-34,.responsive-lg .col-50,.responsive-lg .col-66,.responsive-lg .col-67,.responsive-lg .col-75,.responsive-lg .col-80,.responsive-lg .col-90{-webkit-box-flex:1;-webkit-flex:1;-moz-box-flex:1;-moz-flex:1;-ms-flex:1;flex:1;margin-bottom:15px;margin-left:0;max-width:100%;width:100%}}.hide{display:none}.opacity-hide{opacity:0}.grade-b .opacity-hide,.grade-c .opacity-hide{opacity:1;display:none}.show{display:block}.opacity-show{opacity:1}.invisible{visibility:hidden}.keyboard-open .hide-on-keyboard-open{display:none}.keyboard-open .bar-footer.hide-on-keyboard-open+.pane .has-footer,.keyboard-open .tabs.hide-on-keyboard-open+.pane .has-tabs{bottom:0}.inline{display:inline-block}.disable-pointer-events{pointer-events:none}.enable-pointer-events{pointer-events:auto}.disable-user-behavior{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;-ms-touch-action:none;-ms-content-zooming:none}.click-block{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;z-index:99999;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);overflow:hidden}.click-block-hide{-webkit-transform:translate3d(-9999px,0,0);transform:translate3d(-9999px,0,0)}.no-resize{resize:none}.block{display:block;clear:both}.block:after{display:block;visibility:hidden;clear:both;height:0;content:"."}.full-image{width:100%}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.item.large-button-bar,.padding{padding:10px}.padding-top,.padding-vertical{padding-top:10px}.padding-horizontal,.padding-right,.popover-share .bar-footer .button-close{padding-right:10px}.padding-bottom,.padding-vertical,.popover-share .bar-footer .button-close{padding-bottom:10px}.padding-horizontal,.padding-left{padding-left:10px}.iframe-wrapper{position:fixed;-webkit-overflow-scrolling:touch;overflow:scroll}.iframe-wrapper iframe{height:100%;width:100%}.rounded{border-radius:4px}.light,a.light{color:#fff}.light-bg{background-color:#fff}.light-border{border-color:#ddd}.stable,a.stable{color:#f8f8f8}.stable-bg{background-color:#f8f8f8}.stable-border{border-color:#b2b2b2}.icon-help,.positive,.text-editable:hover,a.icon-help,a.positive,a.text-editable:hover{color:#387ef5}.positive-bg{background-color:#387ef5}.positive-border{border-color:#0c60ee}#menu .footer .icon-help,#menu .footer a.icon-help,.calm,a.calm{color:#11c1f3}.calm-bg{background-color:#11c1f3}.calm-border{border-color:#0a9dc7}.assertive,.icon-alert,a.assertive,a.icon-alert{color:#ef473a}.assertive-bg{background-color:#ef473a}.assertive-border{border-color:#e42112}.balanced,a.balanced{color:#33cd5f}.balanced-bg{background-color:#33cd5f}.balanced-border{border-color:#28a54c}.energized,a.energized{color:#ffc900}.energized-bg{background-color:#ffc900}.energized-border{border-color:#e6b500}.royal,a.royal{color:#886aea}.royal-bg{background-color:#886aea}.royal-border{border-color:#6b46e5}.button-text-dark,.dark,a.button-text-dark,a.dark{color:#444}.dark-bg{background-color:#444}.dark-border{border-color:#111}[collection-repeat]{left:0!important;top:0!important;position:absolute!important;z-index:1}.collection-repeat-container{position:relative;z-index:1}.collection-repeat-after-container{z-index:0;display:block}.collection-repeat-after-container.horizontal{display:inline-block}.ng-cloak,.ng-hide:not(.ng-hide-animate),.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none!important}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader){height:64px;height:calc(constant(safe-area-inset-top) + 44px);height:calc(env(safe-area-inset-top) + 44px)}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper{margin-top:19px!important}.platform-ios.platform-cordova:not(.fullscreen) .bar-header:not(.bar-subheader)>*{margin-top:20px;margin-top:constant(safe-area-inset-top);margin-top:env(safe-area-inset-top)}.platform-ios.platform-cordova:not(.fullscreen) .bar-header{padding-left:calc(constant(safe-area-inset-left) + 5px);padding-left:calc(env(safe-area-inset-left) + 5px);padding-right:calc(constant(safe-area-inset-right) + 5px);padding-right:calc(env(safe-area-inset-right) + 5px)}.platform-ios.platform-cordova:not(.fullscreen) .bar-header .buttons:last-child{right:calc(constant(safe-area-inset-right) + 5px);right:calc(env(safe-area-inset-right) + 5px)}.platform-ios.platform-cordova:not(.fullscreen) .bar-footer.has-tabs,.platform-ios.platform-cordova:not(.fullscreen) .has-tabs{bottom:calc(constant(safe-area-inset-bottom) + 49px);bottom:calc(env(safe-area-inset-bottom) + 49px)}.platform-ios.platform-cordova:not(.fullscreen) .tabs-top>.tabs,.platform-ios.platform-cordova:not(.fullscreen) .tabs.tabs-top{top:64px}.platform-ios.platform-cordova:not(.fullscreen) .tabs{padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom);height:calc(constant(safe-area-inset-bottom) + 49px);height:calc(env(safe-area-inset-bottom) + 49px)}.platform-ios.platform-cordova:not(.fullscreen) .bar-subheader,.platform-ios.platform-cordova:not(.fullscreen) .has-header{top:64px;top:calc(constant(safe-area-inset-top) + 44px);top:calc(env(safe-area-inset-top) + 44px)}.platform-ios.platform-cordova:not(.fullscreen) .has-subheader{top:108px;top:calc(constant(safe-area-inset-top) + 88px);top:calc(env(safe-area-inset-top) + 88px)}.platform-ios.platform-cordova:not(.fullscreen) .has-header.has-tabs-top{top:113px;top:calc(93px + constant(safe-area-inset-top));top:calc(93px + env(safe-area-inset-top))}.platform-ios.platform-cordova:not(.fullscreen) .has-header.has-subheader.has-tabs-top{top:157px;top:calc(137px + constant(safe-area-inset-right));top:calc(137px + env(safe-area-inset-right))}.platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader){height:44px}.platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader).item-input-inset .item-input-wrapper{margin-top:-1px}.platform-ios.platform-cordova .popover .bar-header:not(.bar-subheader)>*{margin-top:0}.platform-ios.platform-cordova .popover .bar-subheader,.platform-ios.platform-cordova .popover .has-header{top:44px}.platform-ios.platform-cordova .popover .has-subheader{top:88px}.platform-ios.platform-cordova.status-bar-hide{margin-bottom:20px}@media (orientation:landscape){.item{padding:16px calc(constant(safe-area-inset-right) + 16px)}.item .badge{right:calc(constant(safe-area-inset-right) + 32px)}.item-icon-left{padding-left:calc(constant(safe-area-inset-left) + 54px)}#menu .footer .item-icon-left .icon-help,.item-icon-left #menu .footer .icon-help,.item-icon-left .icon,.item-icon-left .icon-alert,.item-icon-left .icon-help{left:calc(constant(safe-area-inset-left) + 11px)}.item-icon-right{padding-right:calc(constant(safe-area-inset-right) + 54px)}#menu .footer .item-icon-right .icon-help,.item-icon-right #menu .footer .icon-help,.item-icon-right .icon,.item-icon-right .icon-alert,.item-icon-right .icon-help{right:calc(constant(safe-area-inset-right) + 11px)}.item-complex,a.item.item-complex,button.item.item-complex{padding:0}.item-complex .item-content,a.item.item-complex .item-content,button.item.item-complex .item-content{padding:16px calc(constant(safe-area-inset-right) + 49px) 16px calc(constant(safe-area-inset-left) + 16px)}.item-left-edit.visible.active{-webkit-transform:translate3d(calc(constant(safe-area-inset-left) + 8px),0,0);transform:translate3d(calc(constant(safe-area-inset-left) + 8px),0,0)}.item-left-editing.item-left-editable .item-content,.list-left-editing .item-left-editable .item-content{-webkit-transform:translate3d(calc(constant(safe-area-inset-left) + 50px),0,0);transform:translate3d(calc(constant(safe-area-inset-left) + 50px),0,0)}.item-right-edit{right:constant(safe-area-inset-right);right:env(safe-area-inset-right)}.platform-ios.platform-browser.platform-ipad{position:fixed}}.platform-c:not(.enable-transitions) *{-webkit-transition:none!important;transition:none!important}.slide-in-up{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.slide-in-up.ng-enter,.slide-in-up>.ng-enter{-webkit-transition:all cubic-bezier(.1,.7,.1,1) .4s;transition:all cubic-bezier(.1,.7,.1,1) .4s}.slide-in-up.ng-enter-active,.slide-in-up>.ng-enter-active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slide-in-up.ng-leave,.slide-in-up>.ng-leave{-webkit-transition:all ease-in-out 250ms;transition:all ease-in-out 250ms}@-webkit-keyframes scaleOut{from{-webkit-transform:scale(1);opacity:1}to{-webkit-transform:scale(.8);opacity:0}}@keyframes scaleOut{from{transform:scale(1);opacity:1}to{transform:scale(.8);opacity:0}}@-webkit-keyframes superScaleIn{from{-webkit-transform:scale(1.2);opacity:0}to{-webkit-transform:scale(1);opacity:1}}@keyframes superScaleIn{from{transform:scale(1.2);opacity:0}to{transform:scale(1);opacity:1}}[nav-view-transition=ios] [nav-view=entering],[nav-view-transition=ios] [nav-view=leaving]{-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:cubic-bezier(.36,.66,.04,1);transition-timing-function:cubic-bezier(.36,.66,.04,1);-webkit-transition-property:opacity,-webkit-transform,box-shadow;transition-property:opacity,transform,box-shadow}[nav-view-transition=ios][nav-view-direction=back],[nav-view-transition=ios][nav-view-direction=forward]{background-color:#000}[nav-view-transition=ios] [nav-view=active],[nav-view-transition=ios][nav-view-direction=back] [nav-view=leaving],[nav-view-transition=ios][nav-view-direction=forward] [nav-view=entering]{z-index:3}[nav-view-transition=ios][nav-view-direction=back] [nav-view=entering],[nav-view-transition=ios][nav-view-direction=forward] [nav-view=leaving]{z-index:2}[nav-bar-transition=ios] .back-text,[nav-bar-transition=ios] .buttons,[nav-bar-transition=ios] .title{-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transition-timing-function:cubic-bezier(.36,.66,.04,1);transition-timing-function:cubic-bezier(.36,.66,.04,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,transform}[nav-bar-transition=ios] [nav-bar=active],[nav-bar-transition=ios] [nav-bar=entering]{z-index:10}[nav-bar-transition=ios] [nav-bar=active] .bar,[nav-bar-transition=ios] [nav-bar=entering] .bar{background:0 0}[nav-bar-transition=ios] [nav-bar=cached]{display:block}[nav-bar-transition=ios] [nav-bar=cached] .header-item{display:none}[nav-view-transition=android] [nav-view=entering],[nav-view-transition=android] [nav-view=leaving]{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,.6,.2,1);transition-timing-function:cubic-bezier(.4,.6,.2,1);-webkit-transition-property:-webkit-transform;transition-property:transform}[nav-view-transition=android] [nav-view=active],[nav-view-transition=android][nav-view-direction=back] [nav-view=leaving],[nav-view-transition=android][nav-view-direction=forward] [nav-view=entering]{z-index:3}[nav-view-transition=android][nav-view-direction=back] [nav-view=entering],[nav-view-transition=android][nav-view-direction=forward] [nav-view=leaving]{z-index:2}[nav-bar-transition=android] .buttons,[nav-bar-transition=android] .title{-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:cubic-bezier(.4,.6,.2,1);transition-timing-function:cubic-bezier(.4,.6,.2,1);-webkit-transition-property:opacity;transition-property:opacity}[nav-bar-transition=android] [nav-bar=active],[nav-bar-transition=android] [nav-bar=entering]{z-index:10}[nav-bar-transition=android] [nav-bar=active] .bar,[nav-bar-transition=android] [nav-bar=entering] .bar{background:0 0}[nav-bar-transition=android] [nav-bar=cached]{display:block}[nav-bar-transition=android] [nav-bar=cached] .header-item{display:none}[nav-swipe=fast] .back-text,[nav-swipe=fast] .buttons,[nav-swipe=fast] .title,[nav-swipe=fast] [nav-view]{-webkit-transition-duration:50ms;transition-duration:50ms;-webkit-transition-timing-function:linear;transition-timing-function:linear}[nav-swipe=slow] .back-text,[nav-swipe=slow] .buttons,[nav-swipe=slow] .title,[nav-swipe=slow] [nav-view]{-webkit-transition-duration:160ms;transition-duration:160ms;-webkit-transition-timing-function:linear;transition-timing-function:linear}[nav-bar=cached],[nav-view=cached]{display:none}[nav-view=stage]{opacity:0;-webkit-transition-duration:0;transition-duration:0}[nav-bar=stage] .back-text,[nav-bar=stage] .buttons,[nav-bar=stage] .title{position:absolute;opacity:0;-webkit-transition-duration:0s;transition-duration:0s}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Thin/RobotoDraft-Thin.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Thin/RobotoDraft-Thin.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Thin/RobotoDraft-Thin.ttf?v=1.1.0) format("truetype");font-weight:100;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Light/RobotoDraft-Light.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Light/RobotoDraft-Light.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Light/RobotoDraft-Light.ttf?v=1.1.0) format("truetype");font-weight:300;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.ttf?v=1.1.0) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Regular/RobotoDraft-Regular.ttf?v=1.1.0) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.ttf?v=1.1.0) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Italic/RobotoDraft-Italic.ttf?v=1.1.0) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Medium/RobotoDraft-Medium.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Medium/RobotoDraft-Medium.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Medium/RobotoDraft-Medium.ttf?v=1.1.0) format("truetype");font-weight:500;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.ttf?v=1.1.0) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Bold/RobotoDraft-Bold.ttf?v=1.1.0) format("truetype");font-weight:700;font-style:normal}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.ttf?v=1.1.0) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/BoldItalic/RobotoDraft-BoldItalic.ttf?v=1.1.0) format("truetype");font-weight:700;font-style:italic}@font-face{font-family:RobotoDraft;src:url(../lib/ionic/fonts/robotdraft/Black/RobotoDraft-Black.woff2?v=1.1.0) format("woff2"),url(../lib/ionic/fonts/robotdraft/Black/RobotoDraft-Black.woff?v=1.1.0) format("woff"),url(../lib/ionic/fonts/robotdraft/Black/RobotoDraft-Black.ttf?v=1.1.0) format("truetype");font-weight:900;font-style:normal}.item-md-label{display:block;background:0 0;box-shadow:none;margin-left:12px;margin-right:12px;padding:30px 0 0}.item-md-label .input-label{position:absolute;padding:5px 0 0;z-index:2;-webkit-transform:translate3d(0,-30px,0) scale(1);transform:translate3d(0,-30px,0) scale(1);-webkit-transition:all .2s ease;transition:all .2s ease;color:#fff;opacity:.5;-webkit-transform-origin:0;-ms-transform-origin:0;transform-origin:0}.item-md-label input{background-color:rgba(0,0,0,.6);bottom:0;color:#fff;letter-spacing:.25rem;padding:20px 10px;position:relative;z-index:1}.item-md-label .highlight{position:absolute;bottom:0;height:2px;left:0;width:100%;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:all .15s ease;transition:all .15s ease;z-index:1}.item-md-label .highlight-light{background:#fff}.item-md-label .highlight-stable{background:#f8f8f8}.item-md-label .highlight-positive{background:#387ef5}.item-md-label .highlight-calm{background:#11c1f3}.item-md-label .highlight-balanced{background:#33cd5f}.item-md-label .highlight-energized{background:#ffc900}.item-md-label .highlight-assertive{background:#ef473a}.item-md-label .highlight-royal{background:#886aea}.item-md-label .highlight-dark{background:#444}.item-md-label .input-label{letter-spacing:.25rem;padding:0 10px}.item-md-label input.used~.input-label,.item-md-label input:focus~.input-label{font-weight:700;opacity:.7;padding:0;text-transform:uppercase;-webkit-transform:translate3d(0,-60px,0) scale(.9);transform:translate3d(0,-60px,0) scale(.9)}.item-md-label input:focus~.highlight{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.bar.bar-header.expanded,.expanded .bar.bar-header{height:75px}.bar.bar-header.expanded .title,.expanded.bar.bar-header .title{bottom:0;top:initial;padding-left:16px}.bar.bar-header.expanded .title.fab-left,.expanded .bar.bar-header .title.fab-left{bottom:0;left:90px;position:absolute;right:initial;top:initial}.bar.bar-header.expanded .title.fab-right,.expanded .bar.bar-header .title.fab-right{bottom:0;left:4px;position:absolute;top:initial;right:initial}.bar.bar-header.expanded+.button-fab,.expanded .bar.bar-header+.button-fab{top:50px}.bar.bar-header.expanded.push-down,.expanded .bar.bar-header.push-down{height:44px;overflow:hidden}.bar.bar-header.expanded,.expanded .bar.bar-header{-webkit-transition:height 1s cubic-bezier(.55,0,.1,1);transition:height 1s cubic-bezier(.55,0,.1,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.bar.bar-header.expanded+.button-fab,.expanded .bar.bar-header+.button-fab{-webkit-transition:all 1.1s cubic-bezier(.55,0,.1,1);transition:all 1.1s cubic-bezier(.55,0,.1,1);-webkit-transform:translate3d(0,0,0) scale(1);transform:translate3d(0,0,0) scale(1)}.bar.bar-header.expanded.push-down+.button-fab,.expanded .bar.bar-header.push-down+.button-fab{top:0;-webkit-transform:translate3d(-100px,-100px,0) scale(2.5);transform:translate3d(-100px,-100px,0) scale(2.5)}.bar.bar-header.expanded.push-down .title,.expanded .bar.bar-header.push-down .title{opacity:0;left:initial;right:initial}.bar.bar-header.expanded .title,.expanded .bar.bar-header .title{opacity:1;-webkit-transition:all 2s cubic-bezier(.55,0,.1,1);transition:all 2s cubic-bezier(.55,0,.1,1)}.bar.bar-header.expanded .title,.expanded .bar.bar-header .title{bottom:0;left:42px!important;top:initial}.bar.bar-header.expanded.has-header-fab-left .title,.expanded.has-header-fab-left .bar.bar-header .title{left:76px!important}.bar{z-index:2;font-size:1.3em;width:100%;box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.bar .button{min-width:38px;z-index:3}.bar .no-text span.back-text{display:none}.bar .title sup{opacity:.7}.bar.bar-header .button+.title{text-align:left;left:35px;line-height:46px}.button-bar{box-shadow:0 1px 3px rgba(0,0,0,.15)}.button-bar>.button{box-shadow:none}#menu .footer .button-bar>.button .icon-help:before,.button-bar>.button #menu .footer .icon-help:before,.button-bar>.button .icon-alert:before,.button-bar>.button .icon-help:before,.button-bar>.button .icon:before,.button-bar>.button:before{line-height:initial}.bar-footer .button-fab{position:absolute;top:-26px;bottom:initial}.bar-footer .buttons-left .button-fab{left:8px}.bar-footer .buttons-right .button-fab{right:8px}.bar .button.button-clear,.bar .button.button-text{box-shadow:none}.left-buttons .button-fab{left:8px;top:16px}.right-buttons .button-fab{right:8px;top:16px}.fab-left.title-left,.fab-left.title.title-left{left:68px}.bar .button.button-fab,.button.button-fab{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);z-index:9999;width:56px;height:56px;max-height:initial;max-width:initial;border-radius:50%;border-radius:50%;overflow:hidden;padding:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:.3s fade-in-out;transition:.3s fade-in-out;-webkit-transition-property:-webkit-transform,box-shadow;transition-property:transform,box-shadow}.bar .button.button-fab.button-fab-bottom-right,.button.button-fab.button-fab-bottom-right{top:auto;right:16px;bottom:16px;left:auto;position:absolute}.bar .button.button-fab.button-fab-bottom-left,.button.button-fab.button-fab-bottom-left{top:auto;right:auto;bottom:16px;left:16px;position:absolute}.bar .button.button-fab.button-fab-top-right,.button.button-fab.button-fab-top-right{top:32px;right:16px;bottom:auto;left:auto;position:absolute}.bar .button.button-fab.button-fab-top-left,.button.button-fab.button-fab-top-left{top:32px;right:auto;bottom:auto;left:16px;position:absolute}.bar .button.button-fab.button-fab-top-left.expanded,.bar .button.button-fab.button-fab-top-right.expanded,.button.button-fab.button-fab-top-left.expanded,.button.button-fab.button-fab-top-right.expanded{top:48px}.bar .button.button-fab i,.button.button-fab i{font-size:2.5rem;margin-top:0}.bar .button.button-fab.mini,.button.button-fab.mini{width:40px;height:40px}.bar .button.button-fab.mini i,.button.button-fab.mini i{font-size:2rem}.motion{-webkit-transition:all .5s ease-out;transition:all .5s ease-out}.fade{opacity:0;-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.spin-back{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(360deg) scale(0)!important;transform:translateZ(0) rotate(360deg) scale(0)!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.spiral{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(-360deg) scale(0) translate(-120px)!important;transform:translateZ(0) rotate(-360deg) scale(0) translate(-120px)!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.spiral-back{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(360deg) scale(0) translate(120px)!important;transform:translateZ(0) rotate(360deg) scale(0) translate(120px)!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.menu-open .avatar{opacity:1;-webkit-transform:translateZ(0) rotate(0) scale(1)!important;transform:translateZ(0) rotate(0) scale(1)!important;-webkit-transition:all .3s ease-out!important;transition:all .3s ease-out!important}.button.button-fab.button-fab-top-left.motion{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(-120px,60px,0);transform:translate3d(-120px,60px,0);-webkit-transition:all .1s ease-out;transition:all .1s ease-out}.button.button-fab.button-fab-top-right.motion{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(120px,60px,0);transform:translate3d(120px,60px,0);-webkit-transition:all .1s ease-out;transition:all .1s ease-out}.button.button-fab.button-fab-bottom-left.motion{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(-120px,60px,0);transform:translate3d(-120px,60px,0);-webkit-transition:all .1s ease-out;transition:all .1s ease-out}.button.button-fab.button-fab-bottom-right.motion{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(120px,60px,0);transform:translate3d(120px,60px,0);-webkit-transition:all .1s ease-out;transition:all .1s ease-out}.spin{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(0) scale(0)!important;transform:translateZ(0) rotate(0) scale(0)!important;-webkit-transition:all .3s ease-out!important;transition:all .3s ease-out!important}.spin.on{-webkit-transform:translateZ(0) rotate(-360deg) scale(1)!important;transform:translateZ(0) rotate(-360deg) scale(1)!important}.flap{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotateX(0) scale(0) translate(-120px)!important;transform:translateZ(0) rotateX(0) scale(0) translate(-120px)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.flap.on{-webkit-transform:translateZ(0) rotateX(-720deg) scale(1) translate(0)!important;transform:translateZ(0) rotateX(-720deg) scale(1) translate(0)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.drop{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) scale(3)!important;transform:translateZ(0) scale(3)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.drop.on{-webkit-transform:translateZ(0) scale(1)!important;transform:translateZ(0) scale(1)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.flip{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotateY(0) scale(0)!important;transform:translateZ(0) rotateY(0) scale(0)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.flip.on{-webkit-transform:translateZ(0) rotateY(-720deg) scale(1)!important;transform:translateZ(0) rotateY(-720deg) scale(1)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.bar .button.button-floating,.button.button-floating{display:inline-block;color:#fff;position:relative;z-index:1;width:37px;height:37px;line-height:37px;padding:0;border-radius:50%;background-clip:padding-box;-webkit-transition:.3s;transition:.3s;cursor:pointer}.bar .button.button-floating i,.button.button-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:37px}.bar .button.button-floating.button-large,.button.button-floating.button-large{width:55.5px;height:55.5px}.bar .button.button-floating.button-large i,.button.button-floating.button-large i{line-height:55.5px}.bar .button,.bar .button.button-flat,.bar .button.button-large,.button,.button.button-flat,.button.button-large{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);display:inline-block;height:36px;padding:0 2rem;border-radius:2px;background-clip:padding-box;text-transform:uppercase;border:none;outline:0;-webkit-tap-highlight-color:transparent}.bar .button.button-floating.disabled,.bar .button.button-floating:disabled,.bar .button.button-large.disabled,.bar .button.button-large:disabled,.bar .button.button:disabled,.bar .button.disabled,.bar .button.disabled.button-large,.button.button-floating.disabled,.button.button-floating:disabled,.button.button-large.disabled,.button.button-large:disabled,.button.button:disabled,.button.disabled,.button.disabled.button-large{background-color:#dfdfdf;box-shadow:none;color:#9f9f9f}.bar .button.button-floating.disabled:hover,.bar .button.button-floating:disabled:hover,.bar .button.button-large.disabled:hover,.bar .button.button-large:disabled:hover,.bar .button.button:disabled:hover,.bar .button.disabled.button-large:hover,.bar .button.disabled:hover,.button.button-floating.disabled:hover,.button.button-floating:disabled:hover,.button.button-large.disabled:hover,.button.button-large:disabled:hover,.button.button:disabled:hover,.button.disabled.button-large:hover,.button.disabled:hover{background-color:#dfdfdf;color:#9f9f9f}.bar .button i,.bar .button.button-flat i,.bar .button.button-floating i,.bar .button.button-large i,.button i,.button.button-flat i,.button.button-floating i,.button.button-large i{font-size:1.3rem}.button-bar .button{border-radius:0}.bar .button,.bar .button-large,.button,.button-large{text-decoration:none;text-align:center;letter-spacing:.5px;-webkit-transition:.2s ease-out;transition:.2s ease-out;cursor:pointer}.button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;outline:0;margin:0;white-space:nowrap;text-align:center;text-transform:uppercase;font-weight:500;font-style:inherit;font-variant:inherit;font-size:inherit;text-decoration:none;cursor:pointer;overflow:hidden;-webkit-transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1),-webkit-transform .4s cubic-bezier(.25,.8,.25,1);transition:box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1),transform .4s cubic-bezier(.25,.8,.25,1)}.button:focus{outline:0}.button.ng-hide{-webkit-transition:none;transition:none}.button.cornered{border-radius:0}.button.raised{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.button-outline,.button-outline:active,.button-outline:hover{border-style:solid;border-width:1px}.button.button-outline,.button.button-outline.button-assertive,.button.button-outline.button-balanced,.button.button-outline.button-calm,.button.button-outline.button-dark,.button.button-outline.button-energized,.button.button-outline.button-light,.button.button-outline.button-positive,.button.button-outline.button-royal,.button.button-outline.button-stable,.button.button-outline.button-text{border-color:rgba(0,0,0,.1)}.bar .button-flat,.button-flat{box-shadow:none;background-color:transparent;color:#343434;cursor:pointer}.bar .button.button-flat.disabled,.button.button-flat.disabled{color:#b3b3b3}.bar .button.button-large i,.button.button-large i{font-size:1.6rem}.button-pin-header.button-floating{position:absolute;z-index:1000}.button-pin-header.button-pin-left{left:24px;top:-24px}.button-pin-header.button-pin-right{right:24px;top:-24px}.button:not([disabled]).floating:focus,.button:not([disabled]).floating:hover,.button:not([disabled]).raised:focus,.button:not([disabled]).raised:hover{-webkit-transform:translate3d(0,-1px,0);transform:translate3d(0,-1px,0)}.button.button-flat{box-shadow:none;color:inherit}.button.button-flat:hover{color:inherit}.button.button-flat,.button.button-flat:active,.button.button-flat:hover{color:#fff}.button.button-clear,.button.button-clear:active,.button.button-clear:hover,.button.button-text,.button.button-text:active,.button.button-text:hover{background:0 0}.button-block.ink,.button-full.ink{display:block}.card-item.item{border:none;padding-bottom:4px;padding-top:4px}.card-item.item:first-child{padding-top:16px}.card{box-shadow:0 2px 5px 0 rgba(0,0,0,.26);display:block;margin:8px;padding:0;position:relative}.card .image{display:block;margin-top:10px;margin-bottom:5px}.card img{box-shadow:0 2px 5px 0 rgba(0,0,0,.26);display:block;max-width:100%;max-height:initial;position:static}.card.card-gallery img{border:none;box-shadow:none;display:block}.card .card-footer{font-size:90%;opacity:.8;padding-top:10px}.card>.item{border:none}.card.card-gallery>.item{background:inherit}#menu .footer .card .icon+.icon-help,#menu .footer .card .icon-alert+.icon-help,#menu .footer .card .icon-help+.icon,#menu .footer .card .icon-help+.icon-alert,#menu .footer .card .icon-help+.icon-help,.card #menu .footer .icon+.icon-help,.card #menu .footer .icon-alert+.icon-help,.card #menu .footer .icon-help+.icon,.card #menu .footer .icon-help+.icon-alert,.card #menu .footer .icon-help+.icon-help,.card .icon+.icon,.card .icon+.icon-alert,.card .icon+.icon-help,.card .icon-alert+.icon,.card .icon-alert+.icon-alert,.card .icon-alert+.icon-help,.card .icon-help+.icon,.card .icon-help+.icon-alert,.card .icon-help+.icon-help{padding-left:1rem}.card.animate-fade-in{opacity:0;-webkit-transform:translate3d(-30px,1px,0);-webkit-transition:all 1s ease-in-out}.animate-fade-slide-in .card.animate-fade-in.expanded.item,.animate-fade-slide-in .expanded .card.animate-fade-in.item,.animate-fade-slide-in-right .card.animate-fade-in.expanded.item,.animate-fade-slide-in-right .expanded .card.animate-fade-in.item,.animate-ripple .card.animate-fade-in.expanded.item,.animate-ripple .expanded .card.animate-fade-in.item,.card-avatar-small .expanded .card.animate-fade-in.card-comment,.card-avatar-small .expanded .card.animate-fade-in.item,.card-avatar-small.expanded .card.animate-fade-in.card-comment,.card-avatar-small.expanded .card.animate-fade-in.item,.card.animate-fade-in.done{opacity:1;-webkit-transform:translate3d(0,0,0)}.card .item.item-avatar{min-height:88px;padding-left:88px}.hero{background-size:cover;box-shadow:0 2px 5px 0 rgba(0,0,0,.26);color:#fff;height:200px;position:relative;text-align:center;-webkit-transition:all 1s cubic-bezier(.55,0,.1,1);transition:all 1s cubic-bezier(.55,0,.1,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);width:100%}.hero>*{-webkit-transition:opacity 2.5s cubic-bezier(.55,0,.1,1);transition:opacity 2.5s cubic-bezier(.55,0,.1,1);opacity:1}.hero+.mid-bar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:all 1s cubic-bezier(.55,0,.1,1);transition:all 1s cubic-bezier(.55,0,.1,1);height:initial;opacity:1}.hero .hero-icon{box-shadow:0 0 2px 0 rgba(0,0,0,.26);border-radius:50%;display:inline-block;font-size:65px;height:150px;padding:10px 30px;line-height:136px;width:150px}.hero.no-header{height:244px}.hero>.content{bottom:0;position:absolute;text-align:center;width:100%;z-index:1}.hero>.content>.avatar{background-position:center;background-size:cover;border:solid 1px rgba(255,255,255,.8);border-radius:50%;display:inline-block;height:88px;left:auto;margin-bottom:10px;position:relative;width:88px}.hero h1 .hero h2,.hero h3,.hero h4,.hero h5,.hero h6{color:#fff;margin:0}.hero h4{color:rgba(255,255,255,.7);margin:3px 0 16px}.hero h1>a,.hero h2>a,.hero h3>a,.hero h4>a,.hero h5>a,.hero h6>a{text-decoration:none}.hero+.button-bar{border-radius:0;margin-top:0}.hero+.button-bar>.button:first-child,.hero+.button-bar>.button:last-child{border-radius:0}.hero .hero-icon{color:#fff;font-size:96px}.hero .hero-icon+h1{color:#fff;letter-spacing:.15rem}.hero .button,.hero .button.button-flat,.hero .button.button-large{margin:0}.hero h1.title{color:#fff;font-size:23px;margin:0;text-align:left;padding-left:80px;line-height:59px}.hero+.mid-bar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:all 1s cubic-bezier(.55,0,.1,1);transition:all 1s cubic-bezier(.55,0,.1,1);height:initial;opacity:1}.hero>*{-webkit-transition:opacity 2.5s cubic-bezier(.55,0,.1,1);transition:opacity 2.5s cubic-bezier(.55,0,.1,1);opacity:1}.item{font-size:14px;width:100%}#menu .footer .item-icon-left .icon-help,.item-icon-left #menu .footer .icon-help,.item-icon-left .icon,.item-icon-left .icon-alert,.item-icon-left .icon-help{left:16px}#menu .footer .item-icon-right .icon-help,.item-icon-right #menu .footer .icon-help,.item-icon-right .icon,.item-icon-right .icon-alert,.item-icon-right .icon-help{right:16px}.item-thumbnail-left .item-content .item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left .item-image,.item-thumbnail-left>img:first-child{border-radius:50%}.tab-item.activated{height:calc(100% + 3px)}.content+.list{padding-top:0}.list .item{border:none;min-height:48px;text-align:left}.list .item.tabs{padding:initial}.list .item.item-bg-image{max-height:150px;min-height:150px}.list .item.item-bg-image>img{height:100%;left:0;max-width:initial;opacity:.65;position:absolute;top:0;width:100%;z-index:0}.list a.item{opacity:1}.list .item.item-bg-image h1,.list .item.item-bg-image h2,.list .item.item-bg-image h3,.list .item.item-bg-image h4,.list .item.item-bg-image h5,.list .item.item-bg-image h6{color:#fff;font-weight:700;position:relative;text-shadow:0 0 3px rgba(0,0,0,.95);z-index:1}.list .item.item-bg-image h2{font-size:24px}.list .item.item-bg-image h2{font-size:24px}.list .item.item-bg-image p{color:#fff;font-size:17px;position:relative;text-shadow:0 0 4px rgba(0,0,0,.95);z-index:1}.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{min-height:80px}.card>.item.item-thumbnail-left,.item-thumbnail-left,.item-thumbnail-left .item-content{padding-left:106px}.card>.item.item-thumbnail-right,.item-thumbnail-right,.item-thumbnail-right .item-content{padding-right:106px}.item-avatar .item-content .item-image,.item-avatar .item-content>img:first-child,.item-avatar .item-image,.item-avatar-left .item-content .item-image,.item-avatar-left .item-content>img:first-child,.item-avatar-left .item-image,.item-avatar-left>img:first-child,.item-avatar>img:first-child{border-radius:50%;left:16px;max-height:40px;max-width:40px}.avatar,.item-avatar .avatar{background-position:center;background-size:cover;border-radius:50%;display:inline-block;height:56px;left:16px;position:absolute;width:56px}.list.half{display:inline-block;float:left;margin:0;padding:0;width:50%}.list.half:first-child{padding:16px 8px 16px 16px}.list.half:last-child{padding:16px 16px 16px 8px}.list.half:first-child .card.card-gallery{margin-left:0;margin-right:0}.list.half:last-child .card.card-gallery{margin-left:0;margin-right:0}.list.condensed-space>.card,.list.condensed-space>.item{margin:0 0 2px}.list .card.card-gallery{display:block;float:left;margin:0 0 0 13px;padding:0;width:auto}.list.half .item{width:100%}.list.half .item.card{margin-bottom:16px}.list .card.card-gallery.item h2{padding:12px}.list .item.item-gallery img{width:100%}.item.item-divider{border-top:solid 1px rgba(0,0,0,.12);font-size:14px;font-weight:700;height:48px;line-height:48px;color:rgba(0,0,0,.54)}.item.item-divider:first-child{border:none}.card>.item-avatar,.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{padding-left:72px}.item .item-content.activated,.item .item-content.active,.item-complex.activated .item-content,.item-complex.active .item-content,.item.activated,.item.active{background-color:transparent}.list-inset{margin:20px 30px;border-left:solid 1px #ccc;border-radius:0;background-color:#fff}.item-floating-label,.list .item.item-floating-label{border-bottom:solid 1px #ccc}.loader{position:relative;margin:0 auto;width:100px;height:100px;zoom:1.7}.circular{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:100px;position:relative;width:100px}.path{stroke-dasharray:1,200;stroke-dashoffset:0;-webkit-animation:dash 1.5s ease-in-out infinite,color 6s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite,color 6s ease-in-out infinite;stroke-linecap:round}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}100%{stroke-dasharray:89,200;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}100%{stroke-dasharray:89,200;stroke-dashoffset:-124}}@-webkit-keyframes color{0%,100%{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}@keyframes color{0%,100%{stroke:#d62d20}40%{stroke:#0057e7}66%{stroke:#008744}80%,90%{stroke:#ffa700}}.login{background-position:25% 25%;background-size:180% 180%;height:100%;-webkit-transition:all 1.5s ease-in-out;transition:all 1.5s ease-in-out}.login .item{margin:0 12px;padding-left:0;padding-right:0;width:initial}.login .button-bar{bottom:0;margin:28px 12px 0;width:initial}.login .light-bg{background-color:#fff}#menu .footer .hero-icon.icon-help:before,.hero-icon.icon-alert:before,.hero-icon.icon-help:before,.icon.hero-icon:before{line-height:130px}.card.has-mask:after,.hero.has-mask:after,.item.has-mask:after{content:'';background:-webkit-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,.6) 100%);height:100%;left:0;position:absolute;top:0;z-index:0;width:100%}.card.has-mask-reverse:after,.hero.has-mask-reverse:after,.item.has-mask-reverse:after{content:'';background:-webkit-linear-gradient(top,rgba(0,0,0,.6) 0,rgba(0,0,0,0) 100%);height:100%;left:0;position:absolute;top:0;z-index:0;width:100%}.menu-bottom{bottom:16px;left:16px;right:16px;position:absolute}.menu-top{top:16px;left:16px;right:16px;position:absolute}.menu .avatar{top:16px;left:16px;height:65px;width:65px}.menu .bar.bar-header.expanded{box-shadow:none;min-height:150px;color:#fff}.menu-open .bar.bar-header.expanded{background-position:0;background-size:100%}.has-expanded-header{top:150px!important}.motion{-webkit-transition:all .5s ease-out;transition:all .5s ease-out}.fade{opacity:0;-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.spin-back{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(360deg) scale(0)!important;transform:translateZ(0) rotate(360deg) scale(0)!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.spiral{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(-360deg) scale(0) translate(-120px)!important;transform:translateZ(0) rotate(-360deg) scale(0) translate(-120px)!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.spiral-back{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(360deg) scale(0) translate(120px)!important;transform:translateZ(0) rotate(360deg) scale(0) translate(120px)!important;-webkit-transition:all .1s ease-out!important;transition:all .1s ease-out!important}.menu-open .avatar{opacity:1;-webkit-transform:translateZ(0) rotate(0) scale(1)!important;transform:translateZ(0) rotate(0) scale(1)!important;-webkit-transition:all .3s ease-out!important;transition:all .3s ease-out!important}.spin{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotate(0) scale(0)!important;transform:translateZ(0) rotate(0) scale(0)!important;-webkit-transition:all .3s ease-out!important;transition:all .3s ease-out!important}.spin.on{-webkit-transform:translateZ(0) rotate(-360deg) scale(1)!important;transform:translateZ(0) rotate(-360deg) scale(1)!important}.flap{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotateX(0) scale(0) translate(-120px)!important;transform:translateZ(0) rotateX(0) scale(0) translate(-120px)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.flap.on{-webkit-transform:translateZ(0) rotateX(-720deg) scale(1) translate(0)!important;transform:translateZ(0) rotateX(-720deg) scale(1) translate(0)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.drop{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) scale(3)!important;transform:translateZ(0) scale(3)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.drop.on{-webkit-transform:translateZ(0) scale(1)!important;transform:translateZ(0) scale(1)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.flip{-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transform:translateZ(0) rotateY(0) scale(0)!important;transform:translateZ(0) rotateY(0) scale(0)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.flip.on{-webkit-transform:translateZ(0) rotateY(-720deg) scale(1)!important;transform:translateZ(0) rotateY(-720deg) scale(1)!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important}.bold{font-weight:700}.static{position:static}#menu .footer .popover-helptip .icon-bottom-left.icon-help,#menu .footer .popover-helptip .icon-left.icon-help,.popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .icon-left.icon-help,.popover-helptip .icon-bottom-left.icon-alert,.popover-helptip .icon-bottom-left.icon-help,.popover-helptip .icon-left.icon-alert,.popover-helptip .icon-left.icon-help,.popover-helptip .icon.icon-bottom-left,.popover-helptip .icon.icon-left,.pull-left{float:left}#menu .footer .popover-helptip .icon-bottom-center.icon-help,#menu .footer .popover-helptip .icon-bottom-right.icon-help,#menu .footer .popover-helptip .icon-center.icon-help,#menu .footer .popover-helptip .icon-right.icon-help,.popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .icon-center.icon-help,.popover-helptip #menu .footer .icon-right.icon-help,.popover-helptip .icon-bottom-center.icon-alert,.popover-helptip .icon-bottom-center.icon-help,.popover-helptip .icon-bottom-right.icon-alert,.popover-helptip .icon-bottom-right.icon-help,.popover-helptip .icon-center.icon-alert,.popover-helptip .icon-center.icon-help,.popover-helptip .icon-right.icon-alert,.popover-helptip .icon-right.icon-help,.popover-helptip .icon.icon-bottom-center,.popover-helptip .icon.icon-bottom-right,.popover-helptip .icon.icon-center,.popover-helptip .icon.icon-right,.pull-right{float:right}.double-padding,.ionic-content.double-padding{padding:16px}.double-padding-x{padding-left:16px;padding-right:16px}.double-padding-y{padding-top:16px;padding-bottom:16px}.outline{border-style:solid;border-width:1px}.border-top{border-top:solid 1px #ccc;padding-top:30px}.no-border{border:none}.circle{border-radius:50%}.bar.no-padding,.button-bar.no-padding,.button.no-padding,.card.no-padding,.item.no-padding,.list.no-padding,.no-padding{padding:0}#menu .footer .flat.button.icon-help,.flat,.flat.button,.flat.button.icon,.flat.button.icon-alert,.flat.button.icon-help,.flat.hero,.flat.tabs{box-shadow:none;-webkit-box-shadow:none}.im-wrapper,.item.large-button-bar,.padding{padding:16px!important}.padding-bottom,.popover-share .bar-footer .button-close{padding-bottom:16px!important}.padding-top{padding-top:16px!important}.padding-left{padding-left:16px!important}.padding-right,.popover-share .bar-footer .button-close{padding-right:16px!important}.no-padding-bottom{padding-bottom:0!important}.no-padding-top{padding-top:0!important}.no-padding-left{padding-left:0!important}.no-padding-right{padding-right:0!important}.z1{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.bar.bar-positive.darker{background-color:#164fab}.bar.bar-positive.dark-positive-bg{background-color:#2c5cad}.muted{color:#c3c3c3}.clear-bg{background:0 0}.animate-blinds .item{visibility:hidden}.animate-blinds .item{-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1);-webkit-transition:-webkit-transform .3s cubic-bezier(.55,0,.1,1);transition:transform .3s cubic-bezier(.55,0,.1,1)}.animate-blinds .item-bg-image>img.background{box-shadow:none;-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-blinds .animate-fade-slide-in .expanded .item,.animate-blinds .animate-fade-slide-in .expanded.item,.animate-blinds .animate-fade-slide-in-right .expanded .item,.animate-blinds .animate-fade-slide-in-right .expanded.item,.animate-blinds .animate-ripple .expanded .item,.animate-blinds .animate-ripple .expanded.item,.animate-blinds .card-avatar-small .expanded .card.card-comment,.animate-blinds .card-avatar-small .expanded .item,.animate-blinds .card-avatar-small.expanded .card.card-comment,.animate-blinds .card-avatar-small.expanded .item,.animate-blinds .in,.animate-blinds.done>*,.animate-fade-slide-in .animate-blinds .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item>*,.animate-fade-slide-in .expanded .animate-blinds .item,.animate-fade-slide-in .expanded .animate-blinds.item>*,.animate-fade-slide-in-right .animate-blinds .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item>*,.animate-fade-slide-in-right .expanded .animate-blinds .item,.animate-fade-slide-in-right .expanded .animate-blinds.item>*,.animate-ripple .animate-blinds .expanded.item,.animate-ripple .animate-blinds.expanded.item>*,.animate-ripple .expanded .animate-blinds .item,.animate-ripple .expanded .animate-blinds.item>*,.card-avatar-small .expanded .animate-blinds .card.card-comment,.card-avatar-small .expanded .animate-blinds .item,.card-avatar-small .expanded .animate-blinds.card.card-comment>*,.card-avatar-small .expanded .animate-blinds.item>*,.card-avatar-small.expanded .animate-blinds .card.card-comment,.card-avatar-small.expanded .animate-blinds .item,.card-avatar-small.expanded .animate-blinds.card.card-comment>*,.card-avatar-small.expanded .animate-blinds.item>*{-ms-transform:translate3d(0,0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.animate-blinds .animate-fade-slide-in .expanded .item,.animate-blinds .animate-fade-slide-in .expanded.item,.animate-blinds .animate-fade-slide-in-right .expanded .item,.animate-blinds .animate-fade-slide-in-right .expanded.item,.animate-blinds .animate-ripple .expanded .item,.animate-blinds .animate-ripple .expanded.item,.animate-blinds .card-avatar-small .expanded .card.card-comment,.animate-blinds .card-avatar-small .expanded .item,.animate-blinds .card-avatar-small.expanded .card.card-comment,.animate-blinds .card-avatar-small.expanded .item,.animate-blinds .in,.animate-blinds.done .item,.animate-fade-slide-in .animate-blinds .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .item,.animate-fade-slide-in .expanded .animate-blinds .item,.animate-fade-slide-in .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .animate-blinds .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .expanded .animate-blinds .item,.animate-fade-slide-in-right .expanded .animate-blinds.item .item,.animate-ripple .animate-blinds .expanded.item,.animate-ripple .animate-blinds.expanded.item .item,.animate-ripple .expanded .animate-blinds .item,.animate-ripple .expanded .animate-blinds.item .item,.card-avatar-small .expanded .animate-blinds .card.card-comment,.card-avatar-small .expanded .animate-blinds .item,.card-avatar-small .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .expanded .animate-blinds.item .item,.card-avatar-small.expanded .animate-blinds .card.card-comment,.card-avatar-small.expanded .animate-blinds .item,.card-avatar-small.expanded .animate-blinds.card.card-comment .item,.card-avatar-small.expanded .animate-blinds.item .item{visibility:visible}.animate-blinds .item{visibility:hidden}.animate-blinds .item{opacity:0}.animate-blinds .animate-fade-slide-in .expanded .item,.animate-blinds .animate-fade-slide-in .expanded.item,.animate-blinds .animate-fade-slide-in-right .expanded .item,.animate-blinds .animate-fade-slide-in-right .expanded.item,.animate-blinds .animate-ripple .expanded .item,.animate-blinds .animate-ripple .expanded.item,.animate-blinds .card-avatar-small .expanded .card.card-comment,.animate-blinds .card-avatar-small .expanded .item,.animate-blinds .card-avatar-small.expanded .card.card-comment,.animate-blinds .card-avatar-small.expanded .item,.animate-blinds .in,.animate-blinds.done,.animate-fade-slide-in .animate-blinds .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item,.animate-fade-slide-in .expanded .animate-blinds .item,.animate-fade-slide-in .expanded .animate-blinds.item,.animate-fade-slide-in-right .animate-blinds .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds .item,.animate-fade-slide-in-right .expanded .animate-blinds.item,.animate-ripple .animate-blinds .expanded.item,.animate-ripple .animate-blinds.expanded.item,.animate-ripple .expanded .animate-blinds .item,.animate-ripple .expanded .animate-blinds.item,.card-avatar-small .expanded .animate-blinds .card.card-comment,.card-avatar-small .expanded .animate-blinds .item,.card-avatar-small .expanded .animate-blinds.card.card-comment,.card-avatar-small .expanded .animate-blinds.item,.card-avatar-small.expanded .animate-blinds .card.card-comment,.card-avatar-small.expanded .animate-blinds .item,.card-avatar-small.expanded .animate-blinds.card.card-comment,.card-avatar-small.expanded .animate-blinds.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;opacity:1}.animate-blinds .animate-fade-slide-in .expanded .item,.animate-blinds .animate-fade-slide-in .expanded.item,.animate-blinds .animate-fade-slide-in-right .expanded .item,.animate-blinds .animate-fade-slide-in-right .expanded.item,.animate-blinds .animate-ripple .expanded .item,.animate-blinds .animate-ripple .expanded.item,.animate-blinds .card-avatar-small .expanded .card.card-comment,.animate-blinds .card-avatar-small .expanded .item,.animate-blinds .card-avatar-small.expanded .card.card-comment,.animate-blinds .card-avatar-small.expanded .item,.animate-blinds .in,.animate-blinds.done,.animate-fade-slide-in .animate-blinds .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item,.animate-fade-slide-in .expanded .animate-blinds .item,.animate-fade-slide-in .expanded .animate-blinds.item,.animate-fade-slide-in-right .animate-blinds .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds .item,.animate-fade-slide-in-right .expanded .animate-blinds.item,.animate-ripple .animate-blinds .expanded.item,.animate-ripple .animate-blinds.expanded.item,.animate-ripple .expanded .animate-blinds .item,.animate-ripple .expanded .animate-blinds.item,.card-avatar-small .expanded .animate-blinds .card.card-comment,.card-avatar-small .expanded .animate-blinds .item,.card-avatar-small .expanded .animate-blinds.card.card-comment,.card-avatar-small .expanded .animate-blinds.item,.card-avatar-small.expanded .animate-blinds .card.card-comment,.card-avatar-small.expanded .animate-blinds .item,.card-avatar-small.expanded .animate-blinds.card.card-comment,.card-avatar-small.expanded .animate-blinds.item{visibility:visible}.animate-blinds.done .animate-fade-slide-in .expanded .item,.animate-blinds.done .animate-fade-slide-in .expanded.item,.animate-blinds.done .animate-fade-slide-in-right .expanded .item,.animate-blinds.done .animate-fade-slide-in-right .expanded.item,.animate-blinds.done .animate-ripple .expanded .item,.animate-blinds.done .animate-ripple .expanded.item,.animate-blinds.done .card-avatar-small .expanded .card.card-comment,.animate-blinds.done .card-avatar-small .expanded .item,.animate-blinds.done .card-avatar-small.expanded .card.card-comment,.animate-blinds.done .card-avatar-small.expanded .item,.animate-blinds.done .in,.animate-fade-slide-in .animate-blinds.done .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .animate-blinds.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in .animate-blinds.expanded.item .in,.animate-fade-slide-in .animate-blinds.expanded.item .item,.animate-fade-slide-in .animate-fade-slide-in-right .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .animate-blinds.expanded.item .item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-blinds.item .item,.animate-fade-slide-in .animate-ripple .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in .animate-ripple .animate-blinds.expanded.item .item,.animate-fade-slide-in .animate-ripple .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .animate-ripple .expanded .animate-blinds.item .item,.animate-fade-slide-in .card-avatar-small .animate-blinds.expanded.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .animate-blinds.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.card.card-comment .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-blinds.item .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.card.card-comment .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.item .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-blinds.item .item,.animate-fade-slide-in .expanded .animate-blinds.done .item,.animate-fade-slide-in .expanded .animate-blinds.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .expanded .animate-blinds.item .animate-ripple .expanded.item,.animate-fade-slide-in .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in .expanded .animate-blinds.item .in,.animate-fade-slide-in .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .animate-blinds.done .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .animate-blinds.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in-right .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-blinds.expanded.item .in,.animate-fade-slide-in-right .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .animate-ripple .animate-blinds.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .card-avatar-small .animate-blinds.expanded.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .animate-blinds.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-blinds.item .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-blinds.item .item,.animate-fade-slide-in-right .expanded .animate-blinds.done .item,.animate-fade-slide-in-right .expanded .animate-blinds.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds.item .expanded.item,.animate-fade-slide-in-right .expanded .animate-blinds.item .in,.animate-fade-slide-in-right .expanded .animate-blinds.item .item,.animate-ripple .animate-blinds.done .expanded.item,.animate-ripple .animate-blinds.expanded.item .animate-fade-slide-in .expanded.item,.animate-ripple .animate-blinds.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .animate-blinds.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-ripple .animate-blinds.expanded.item .card-avatar-small.expanded .item,.animate-ripple .animate-blinds.expanded.item .expanded.item,.animate-ripple .animate-blinds.expanded.item .in,.animate-ripple .animate-blinds.expanded.item .item,.animate-ripple .animate-fade-slide-in .animate-blinds.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in .animate-blinds.expanded.item .item,.animate-ripple .animate-fade-slide-in .expanded .animate-blinds.item .expanded.item,.animate-ripple .animate-fade-slide-in .expanded .animate-blinds.item .item,.animate-ripple .animate-fade-slide-in-right .animate-blinds.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .animate-blinds.expanded.item .item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-blinds.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-blinds.item .item,.animate-ripple .card-avatar-small .animate-blinds.expanded.item .card.card-comment,.animate-ripple .card-avatar-small .animate-blinds.expanded.item .item,.animate-ripple .card-avatar-small .expanded .animate-blinds.card.card-comment .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-blinds.card.card-comment .item,.animate-ripple .card-avatar-small .expanded .animate-blinds.item .card.card-comment,.animate-ripple .card-avatar-small .expanded .animate-blinds.item .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-blinds.item .item,.animate-ripple .card-avatar-small.expanded .animate-blinds.card.card-comment .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-blinds.card.card-comment .item,.animate-ripple .card-avatar-small.expanded .animate-blinds.item .card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-blinds.item .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-blinds.item .item,.animate-ripple .expanded .animate-blinds.done .item,.animate-ripple .expanded .animate-blinds.item .animate-fade-slide-in .expanded.item,.animate-ripple .expanded .animate-blinds.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .expanded .animate-blinds.item .expanded.item,.animate-ripple .expanded .animate-blinds.item .in,.animate-ripple .expanded .animate-blinds.item .item,.card-avatar-small .animate-fade-slide-in .animate-blinds.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .animate-blinds.expanded.item .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-blinds.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .expanded .animate-blinds.item .item,.card-avatar-small .animate-fade-slide-in-right .animate-blinds.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .animate-blinds.expanded.item .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-blinds.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-blinds.item .item,.card-avatar-small .animate-ripple .animate-blinds.expanded.item .card.card-comment,.card-avatar-small .animate-ripple .animate-blinds.expanded.item .item,.card-avatar-small .animate-ripple .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .animate-ripple .expanded .animate-blinds.item .card.card-comment,.card-avatar-small .animate-ripple .expanded .animate-blinds.item .item,.card-avatar-small .expanded .animate-blinds.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-blinds.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-blinds.card.card-comment .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-blinds.card.card-comment .card.card-comment,.card-avatar-small .expanded .animate-blinds.card.card-comment .in,.card-avatar-small .expanded .animate-blinds.card.card-comment .item,.card-avatar-small .expanded .animate-blinds.done .card.card-comment,.card-avatar-small .expanded .animate-blinds.done .item,.card-avatar-small .expanded .animate-blinds.item .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-blinds.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-blinds.item .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-blinds.item .card.card-comment,.card-avatar-small .expanded .animate-blinds.item .in,.card-avatar-small .expanded .animate-blinds.item .item,.card-avatar-small.expanded .animate-blinds.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-blinds.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-blinds.card.card-comment .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-blinds.card.card-comment .card.card-comment,.card-avatar-small.expanded .animate-blinds.card.card-comment .expanded .card.card-comment,.card-avatar-small.expanded .animate-blinds.card.card-comment .expanded .item,.card-avatar-small.expanded .animate-blinds.card.card-comment .in,.card-avatar-small.expanded .animate-blinds.card.card-comment .item,.card-avatar-small.expanded .animate-blinds.done .card.card-comment,.card-avatar-small.expanded .animate-blinds.done .item,.card-avatar-small.expanded .animate-blinds.item .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-blinds.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-blinds.item .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-blinds.item .card.card-comment,.card-avatar-small.expanded .animate-blinds.item .expanded .card.card-comment,.card-avatar-small.expanded .animate-blinds.item .expanded .item,.card-avatar-small.expanded .animate-blinds.item .in,.card-avatar-small.expanded .animate-blinds.item .item,.card-avatar-small.expanded .animate-fade-slide-in .animate-blinds.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .animate-blinds.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-blinds.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-blinds.expanded.item .item,.card-avatar-small.expanded .animate-ripple .animate-blinds.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-ripple .animate-blinds.expanded.item .item,.card-avatar-small.expanded .expanded .animate-blinds.card.card-comment .card.card-comment,.card-avatar-small.expanded .expanded .animate-blinds.card.card-comment .item,.card-avatar-small.expanded .expanded .animate-blinds.item .card.card-comment,.card-avatar-small.expanded .expanded .animate-blinds.item .item{opacity:1}.animate-blinds .has-mask-reverse:after{opacity:0;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-blinds.done .has-mask-reverse:after,.animate-fade-slide-in .animate-blinds.expanded.item .has-mask-reverse:after,.animate-fade-slide-in .expanded .animate-blinds.item .has-mask-reverse:after,.animate-fade-slide-in-right .animate-blinds.expanded.item .has-mask-reverse:after,.animate-fade-slide-in-right .expanded .animate-blinds.item .has-mask-reverse:after,.animate-ripple .animate-blinds.expanded.item .has-mask-reverse:after,.animate-ripple .expanded .animate-blinds.item .has-mask-reverse:after,.card-avatar-small .expanded .animate-blinds.card.card-comment .has-mask-reverse:after,.card-avatar-small .expanded .animate-blinds.item .has-mask-reverse:after,.card-avatar-small.expanded .animate-blinds.card.card-comment .has-mask-reverse:after,.card-avatar-small.expanded .animate-blinds.item .has-mask-reverse:after{opacity:1}.animate-blinds .out{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}.animate-pan-in-left{background-position:0 0}.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .done,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item{visibility:hidden}.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .done,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item{-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1);-webkit-transition:-webkit-transform .3s cubic-bezier(.55,0,.1,1);transition:transform .3s cubic-bezier(.55,0,.1,1)}.animate-ripple .item-bg-image img.background{box-shadow:none;-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-fade-slide-in .animate-ripple.expanded.item,.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in .expanded .animate-ripple.item,.animate-fade-slide-in-right .animate-ripple.expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple.item,.animate-ripple .animate-ripple.expanded.item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .expanded .animate-ripple.item,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.animate-ripple .in,.animate-ripple.done,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small .expanded .animate-ripple.card.card-comment,.card-avatar-small .expanded .animate-ripple.item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple.card.card-comment,.card-avatar-small.expanded .animate-ripple.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-fade-slide-in .animate-ripple.expanded.item,.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in .expanded .animate-ripple.item,.animate-fade-slide-in-right .animate-ripple.expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple.item,.animate-ripple .animate-ripple.expanded.item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .expanded .animate-ripple.item,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.animate-ripple .in,.animate-ripple.done,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small .expanded .animate-ripple.card.card-comment,.card-avatar-small .expanded .animate-ripple.item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple.card.card-comment,.card-avatar-small.expanded .animate-ripple.item{visibility:visible}.animate-ripple .item{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1);opacity:0}.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-ripple .card-avatar-small .expanded .item.card.card-comment,.animate-ripple .card-avatar-small.expanded .item.card.card-comment,.animate-ripple .expanded .item,.animate-ripple .item.expanded,.animate-ripple .item.in,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple .item{opacity:1}.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .done,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item{visibility:hidden}.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .done,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item{-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1);-webkit-transition:-webkit-transform .3s cubic-bezier(.55,0,.1,1);transition:transform .3s cubic-bezier(.55,0,.1,1)}.animate-fade-slide-in .animate-ripple.expanded.item,.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in .expanded .animate-ripple.item,.animate-fade-slide-in-right .animate-ripple.expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple.item,.animate-ripple .animate-ripple.expanded.item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .expanded .animate-ripple.item,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.animate-ripple .in,.animate-ripple.done,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small .expanded .animate-ripple.card.card-comment,.card-avatar-small .expanded .animate-ripple.item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple.card.card-comment,.card-avatar-small.expanded .animate-ripple.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-fade-slide-in .animate-ripple.expanded.item,.animate-fade-slide-in .expanded .animate-ripple .item,.animate-fade-slide-in .expanded .animate-ripple.item,.animate-fade-slide-in-right .animate-ripple.expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple .item,.animate-fade-slide-in-right .expanded .animate-ripple.item,.animate-ripple .animate-ripple.expanded.item,.animate-ripple .card-avatar-small .expanded .card.card-comment,.animate-ripple .card-avatar-small.expanded .card.card-comment,.animate-ripple .expanded .animate-ripple.item,.animate-ripple .expanded .item,.animate-ripple .expanded.item,.animate-ripple .in,.animate-ripple.done,.card-avatar-small .expanded .animate-ripple .card.card-comment,.card-avatar-small .expanded .animate-ripple .item,.card-avatar-small .expanded .animate-ripple.card.card-comment,.card-avatar-small .expanded .animate-ripple.item,.card-avatar-small.expanded .animate-ripple .card.card-comment,.card-avatar-small.expanded .animate-ripple .item,.card-avatar-small.expanded .animate-ripple.card.card-comment,.card-avatar-small.expanded .animate-ripple.item{visibility:visible}.animate-fade-slide-in .animate-fade-slide-in-right .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .animate-ripple.expanded.item .item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-ripple.item .item,.animate-fade-slide-in .animate-ripple .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in .animate-ripple .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .animate-ripple .expanded .animate-ripple.item .item,.animate-fade-slide-in .animate-ripple.done .expanded.item,.animate-fade-slide-in .animate-ripple.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .animate-ripple.expanded.item .animate-ripple.expanded.item .item,.animate-fade-slide-in .animate-ripple.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .animate-ripple.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in .animate-ripple.expanded.item .expanded .item,.animate-fade-slide-in .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in .animate-ripple.expanded.item .in,.animate-fade-slide-in .animate-ripple.expanded.item .item,.animate-fade-slide-in .card-avatar-small .animate-ripple.expanded.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .animate-ripple.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.card.card-comment .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-ripple.item .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.card.card-comment .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.item .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-ripple.item .item,.animate-fade-slide-in .expanded .animate-ripple.done .item,.animate-fade-slide-in .expanded .animate-ripple.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .expanded .animate-ripple.item .expanded .item,.animate-fade-slide-in .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in .expanded .animate-ripple.item .in,.animate-fade-slide-in .expanded .animate-ripple.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-ripple.expanded.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-ripple.item .item,.animate-fade-slide-in-right .animate-ripple .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-ripple.item .item,.animate-fade-slide-in-right .animate-ripple.done .expanded.item,.animate-fade-slide-in-right .animate-ripple.expanded.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .animate-ripple.expanded.item .animate-ripple.expanded.item .item,.animate-fade-slide-in-right .animate-ripple.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .animate-ripple.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in-right .animate-ripple.expanded.item .expanded .item,.animate-fade-slide-in-right .animate-ripple.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-ripple.expanded.item .in,.animate-fade-slide-in-right .animate-ripple.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .animate-ripple.expanded.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .animate-ripple.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-ripple.item .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-ripple.item .item,.animate-fade-slide-in-right .expanded .animate-ripple.done .item,.animate-fade-slide-in-right .expanded .animate-ripple.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple.item .expanded .item,.animate-fade-slide-in-right .expanded .animate-ripple.item .expanded.item,.animate-fade-slide-in-right .expanded .animate-ripple.item .in,.animate-fade-slide-in-right .expanded .animate-ripple.item .item,.animate-ripple .animate-fade-slide-in .expanded .animate-ripple.item .item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-ripple.item .item,.animate-ripple .animate-ripple.expanded.item .animate-fade-slide-in .expanded.item,.animate-ripple .animate-ripple.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .animate-ripple.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-ripple .animate-ripple.expanded.item .card-avatar-small.expanded .item,.animate-ripple .animate-ripple.expanded.item .in,.animate-ripple .animate-ripple.expanded.item .item,.animate-ripple .card-avatar-small .expanded .animate-ripple.item .card.card-comment,.animate-ripple .card-avatar-small .expanded .animate-ripple.item .item,.animate-ripple .card-avatar-small.expanded .animate-ripple.item .card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-ripple.item .item,.animate-ripple .expanded .animate-ripple.item .animate-fade-slide-in .expanded.item,.animate-ripple .expanded .animate-ripple.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .expanded .animate-ripple.item .in,.animate-ripple .expanded .animate-ripple.item .item,.animate-ripple.done .animate-fade-slide-in .expanded .item,.animate-ripple.done .animate-fade-slide-in .expanded.item,.animate-ripple.done .animate-fade-slide-in-right .expanded .item,.animate-ripple.done .animate-fade-slide-in-right .expanded.item,.animate-ripple.done .card-avatar-small .expanded .card.card-comment,.animate-ripple.done .card-avatar-small .expanded .item,.animate-ripple.done .card-avatar-small.expanded .card.card-comment,.animate-ripple.done .card-avatar-small.expanded .item,.animate-ripple.done .expanded .item,.animate-ripple.done .expanded.item,.animate-ripple.done .in,.animate-ripple.expanded.item .animate-ripple.expanded.item .expanded.item,.animate-ripple.item .expanded .animate-ripple.item .expanded.item,.card-avatar-small .animate-fade-slide-in .animate-ripple.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .animate-ripple.expanded.item .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-ripple.card.card-comment .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-ripple.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .expanded .animate-ripple.item .item,.card-avatar-small .animate-fade-slide-in-right .animate-ripple.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .animate-ripple.expanded.item .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-ripple.card.card-comment .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-ripple.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-ripple.item .item,.card-avatar-small .animate-ripple .expanded .animate-ripple.item .card.card-comment,.card-avatar-small .animate-ripple .expanded .animate-ripple.item .item,.card-avatar-small .animate-ripple.expanded.item .animate-ripple.expanded.item .card.card-comment,.card-avatar-small .animate-ripple.expanded.item .animate-ripple.expanded.item .item,.card-avatar-small .expanded .animate-ripple.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-ripple.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-ripple.card.card-comment .card.card-comment,.card-avatar-small .expanded .animate-ripple.card.card-comment .expanded .item,.card-avatar-small .expanded .animate-ripple.card.card-comment .expanded.item,.card-avatar-small .expanded .animate-ripple.card.card-comment .in,.card-avatar-small .expanded .animate-ripple.card.card-comment .item,.card-avatar-small .expanded .animate-ripple.done .card.card-comment,.card-avatar-small .expanded .animate-ripple.done .item,.card-avatar-small .expanded .animate-ripple.item .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-ripple.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-ripple.item .card.card-comment,.card-avatar-small .expanded .animate-ripple.item .expanded .item,.card-avatar-small .expanded .animate-ripple.item .expanded.item,.card-avatar-small .expanded .animate-ripple.item .in,.card-avatar-small .expanded .animate-ripple.item .item,.card-avatar-small.expanded .animate-fade-slide-in .animate-ripple.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .animate-ripple.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-ripple.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-ripple.expanded.item .item,.card-avatar-small.expanded .animate-ripple .animate-ripple.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-ripple .animate-ripple.expanded.item .item,.card-avatar-small.expanded .animate-ripple.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-ripple.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-ripple.card.card-comment .card.card-comment,.card-avatar-small.expanded .animate-ripple.card.card-comment .expanded .card.card-comment,.card-avatar-small.expanded .animate-ripple.card.card-comment .expanded .item,.card-avatar-small.expanded .animate-ripple.card.card-comment .expanded.item,.card-avatar-small.expanded .animate-ripple.card.card-comment .in,.card-avatar-small.expanded .animate-ripple.card.card-comment .item,.card-avatar-small.expanded .animate-ripple.done .card.card-comment,.card-avatar-small.expanded .animate-ripple.done .item,.card-avatar-small.expanded .animate-ripple.item .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-ripple.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-ripple.item .card.card-comment,.card-avatar-small.expanded .animate-ripple.item .expanded .card.card-comment,.card-avatar-small.expanded .animate-ripple.item .expanded .item,.card-avatar-small.expanded .animate-ripple.item .expanded.item,.card-avatar-small.expanded .animate-ripple.item .in,.card-avatar-small.expanded .animate-ripple.item .item,.card-avatar-small.expanded .expanded .animate-ripple.card.card-comment .card.card-comment,.card-avatar-small.expanded .expanded .animate-ripple.card.card-comment .item,.card-avatar-small.expanded .expanded .animate-ripple.item .card.card-comment,.card-avatar-small.expanded .expanded .animate-ripple.item .item{opacity:1}.animate-ripple .has-mask-reverse:after{opacity:0;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-fade-slide-in .animate-ripple.expanded.item .has-mask-reverse:after,.animate-fade-slide-in .expanded .animate-ripple.item .has-mask-reverse:after,.animate-fade-slide-in-right .animate-ripple.expanded.item .has-mask-reverse:after,.animate-fade-slide-in-right .expanded .animate-ripple.item .has-mask-reverse:after,.animate-ripple .animate-ripple.expanded.item .has-mask-reverse:after,.animate-ripple .expanded .animate-ripple.item .has-mask-reverse:after,.animate-ripple.done .has-mask-reverse:after,.card-avatar-small .expanded .animate-ripple.card.card-comment .has-mask-reverse:after,.card-avatar-small .expanded .animate-ripple.item .has-mask-reverse:after,.card-avatar-small.expanded .animate-ripple.card.card-comment .has-mask-reverse:after,.card-avatar-small.expanded .animate-ripple.item .has-mask-reverse:after{opacity:1}.animate-ripple .out{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}.animate-fade-slide-in .item{visibility:hidden}.animate-fade-slide-in .item{-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1);-webkit-transition:-webkit-transform .3s cubic-bezier(.55,0,.1,1);transition:transform .3s cubic-bezier(.55,0,.1,1)}.animate-fade-slide-in .item-bg-image img.background{box-shadow:none;-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-fade-slide-in .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .expanded .item,.animate-fade-slide-in .expanded.item,.animate-fade-slide-in .in,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in.done .item,.animate-ripple .animate-fade-slide-in.expanded.item .item,.animate-ripple .expanded .animate-fade-slide-in .item,.animate-ripple .expanded .animate-fade-slide-in.item .item,.card-avatar-small .expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in.item .item,.card-avatar-small.expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in.item .item{-ms-transform:translate3d(0,0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.animate-fade-slide-in .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .expanded .item,.animate-fade-slide-in .expanded.item,.animate-fade-slide-in .in,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in.done .item,.animate-ripple .animate-fade-slide-in.expanded.item .item,.animate-ripple .expanded .animate-fade-slide-in .item,.animate-ripple .expanded .animate-fade-slide-in.item .item,.card-avatar-small .expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in.item .item,.card-avatar-small.expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in.item .item{visibility:visible}.list .item.item-bg-image{max-height:150px}.animate-fade-slide-in .item{visibility:hidden}.animate-fade-slide-in .item{-ms-transform:translate3d(-250px,250px,0);-webkit-transform:translate3d(-250px,250px,0);transform:translate3d(-250px,250px,0);-webkit-transition:-webkit-transform .5s cubic-bezier(.55,0,.1,1);transition:transform .5s cubic-bezier(.55,0,.1,1);opacity:0}.animate-fade-slide-in .animate-fade-slide-in.expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .expanded .animate-fade-slide-in.item,.animate-fade-slide-in .expanded .item,.animate-fade-slide-in .expanded.item,.animate-fade-slide-in .in,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item,.animate-fade-slide-in.done,.animate-ripple .animate-fade-slide-in.expanded.item,.animate-ripple .expanded .animate-fade-slide-in .item,.animate-ripple .expanded .animate-fade-slide-in.item,.card-avatar-small .expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.item,.card-avatar-small.expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:all .5s ease-in-out;transition:all .5s ease-in-out;opacity:1}.animate-fade-slide-in .animate-fade-slide-in.expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .expanded .animate-fade-slide-in.item,.animate-fade-slide-in .expanded .item,.animate-fade-slide-in .expanded.item,.animate-fade-slide-in .in,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item,.animate-fade-slide-in.done,.animate-ripple .animate-fade-slide-in.expanded.item,.animate-ripple .expanded .animate-fade-slide-in .item,.animate-ripple .expanded .animate-fade-slide-in.item,.card-avatar-small .expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.item,.card-avatar-small.expanded .animate-fade-slide-in .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.item{visibility:visible}.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .in,.animate-fade-slide-in .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in .animate-ripple .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in.item .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .animate-ripple .expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .in,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .animate-fade-slide-in.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .animate-fade-slide-in.done .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .expanded .item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .in,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .animate-ripple .animate-fade-slide-in.expanded.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .card-avatar-small .animate-fade-slide-in.expanded.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .animate-fade-slide-in.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.done .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .expanded .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .in,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-fade-slide-in.done .animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in.done .animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in.done .animate-ripple .expanded .item,.animate-fade-slide-in.done .animate-ripple .expanded.item,.animate-fade-slide-in.done .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in.done .card-avatar-small .expanded .item,.animate-fade-slide-in.done .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in.done .card-avatar-small.expanded .item,.animate-fade-slide-in.done .expanded .item,.animate-fade-slide-in.done .expanded.item,.animate-fade-slide-in.done .in,.animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .expanded.item,.animate-fade-slide-in.item .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .animate-fade-slide-in .animate-fade-slide-in.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.animate-ripple .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.animate-ripple .animate-fade-slide-in.done .expanded.item,.animate-ripple .animate-fade-slide-in.expanded.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .item,.animate-ripple .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-ripple .animate-fade-slide-in.expanded.item .card-avatar-small.expanded .item,.animate-ripple .animate-fade-slide-in.expanded.item .expanded .item,.animate-ripple .animate-fade-slide-in.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in.expanded.item .in,.animate-ripple .animate-fade-slide-in.expanded.item .item,.animate-ripple .card-avatar-small .animate-fade-slide-in.expanded.item .card.card-comment,.animate-ripple .card-avatar-small .animate-fade-slide-in.expanded.item .item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.item .card.card-comment,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in.item .item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.item .card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in.item .item,.animate-ripple .expanded .animate-fade-slide-in.done .item,.animate-ripple .expanded .animate-fade-slide-in.item .animate-fade-slide-in-right .expanded.item,.animate-ripple .expanded .animate-fade-slide-in.item .expanded .item,.animate-ripple .expanded .animate-fade-slide-in.item .expanded.item,.animate-ripple .expanded .animate-fade-slide-in.item .in,.animate-ripple .expanded .animate-fade-slide-in.item .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in.item .item,.card-avatar-small .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .item,.card-avatar-small .animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in.expanded.item .animate-fade-slide-in.expanded.item .item,.card-avatar-small .animate-ripple .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small .animate-ripple .animate-fade-slide-in.expanded.item .item,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in.item .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .expanded .item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .in,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in.done .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.done .item,.card-avatar-small .expanded .animate-fade-slide-in.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.item .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in.item .expanded .item,.card-avatar-small .expanded .animate-fade-slide-in.item .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in.item .in,.card-avatar-small .expanded .animate-fade-slide-in.item .item,.card-avatar-small.expanded .animate-fade-slide-in .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .animate-fade-slide-in.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded .item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .in,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in.done .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.done .item,.card-avatar-small.expanded .animate-fade-slide-in.item .animate-fade-slide-in-right .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.item .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.item .expanded .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in.item .expanded .item,.card-avatar-small.expanded .animate-fade-slide-in.item .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in.item .in,.card-avatar-small.expanded .animate-fade-slide-in.item .item,.card-avatar-small.expanded .animate-ripple .animate-fade-slide-in.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-ripple .animate-fade-slide-in.expanded.item .item,.card-avatar-small.expanded .expanded .animate-fade-slide-in.card.card-comment .card.card-comment,.card-avatar-small.expanded .expanded .animate-fade-slide-in.card.card-comment .item,.card-avatar-small.expanded .expanded .animate-fade-slide-in.item .card.card-comment,.card-avatar-small.expanded .expanded .animate-fade-slide-in.item .item{opacity:1}.animate-fade-slide-in .has-mask-reverse:after{opacity:0;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-fade-slide-in .animate-fade-slide-in.expanded.item .has-mask-reverse:after,.animate-fade-slide-in .expanded .animate-fade-slide-in.item .has-mask-reverse:after,.animate-fade-slide-in-right .animate-fade-slide-in.expanded.item .has-mask-reverse:after,.animate-fade-slide-in-right .expanded .animate-fade-slide-in.item .has-mask-reverse:after,.animate-fade-slide-in.done .has-mask-reverse:after,.animate-ripple .animate-fade-slide-in.expanded.item .has-mask-reverse:after,.animate-ripple .expanded .animate-fade-slide-in.item .has-mask-reverse:after,.card-avatar-small .expanded .animate-fade-slide-in.card.card-comment .has-mask-reverse:after,.card-avatar-small .expanded .animate-fade-slide-in.item .has-mask-reverse:after,.card-avatar-small.expanded .animate-fade-slide-in.card.card-comment .has-mask-reverse:after,.card-avatar-small.expanded .animate-fade-slide-in.item .has-mask-reverse:after{opacity:1}.animate-fade-slide-in .out{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}.animate-fade-slide-in-right .item{visibility:hidden}.animate-fade-slide-in-right .item{-ms-transform:scale3d(.8,0,1);-webkit-transform:scale3d(.8,0,1);transform:scale3d(.8,0,1);-webkit-transition:-webkit-transform .3s cubic-bezier(.55,0,.1,1);transition:transform .3s cubic-bezier(.55,0,.1,1)}.animate-fade-slide-in-right .item-bg-image>img.background{box-shadow:none;-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item>*,.animate-fade-slide-in .expanded .animate-fade-slide-in-right .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item>*,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item>*,.animate-fade-slide-in-right .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item>*,.animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in-right .in,.animate-fade-slide-in-right.done>*,.animate-ripple .animate-fade-slide-in-right.expanded.item>*,.animate-ripple .expanded .animate-fade-slide-in-right .item,.animate-ripple .expanded .animate-fade-slide-in-right.item>*,.card-avatar-small .expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment>*,.card-avatar-small .expanded .animate-fade-slide-in-right.item>*,.card-avatar-small.expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment>*,.card-avatar-small.expanded .animate-fade-slide-in-right.item>*{-ms-transform:translate3d(0,0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in-right .in,.animate-fade-slide-in-right.done .item,.animate-ripple .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .expanded .animate-fade-slide-in-right .item,.animate-ripple .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .item{visibility:visible}.animate-fade-slide-in-right .item{visibility:hidden}.animate-fade-slide-in-right .item{-ms-transform:translate3d(250px,250px,0);-webkit-transform:translate3d(250px,250px,0);transform:translate3d(250px,250px,0);-webkit-transition:-webkit-transform .5s cubic-bezier(.55,0,.1,1);transition:transform .5s cubic-bezier(.55,0,.1,1);opacity:0}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item,.animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in-right .in,.animate-fade-slide-in-right.done,.animate-ripple .animate-fade-slide-in-right.expanded.item,.animate-ripple .expanded .animate-fade-slide-in-right .item,.animate-ripple .expanded .animate-fade-slide-in-right.item,.card-avatar-small .expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.item,.card-avatar-small.expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.item{-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out;opacity:1}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item,.animate-fade-slide-in-right .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item,.animate-fade-slide-in-right .expanded .item,.animate-fade-slide-in-right .expanded.item,.animate-fade-slide-in-right .in,.animate-fade-slide-in-right.done,.animate-ripple .animate-fade-slide-in-right.expanded.item,.animate-ripple .expanded .animate-fade-slide-in-right .item,.animate-ripple .expanded .animate-fade-slide-in-right.item,.card-avatar-small .expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.item,.card-avatar-small.expanded .animate-fade-slide-in-right .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.item{visibility:visible}.animate-fade-slide-in .animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in .animate-fade-slide-in-right.done .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .expanded .item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .in,.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .animate-ripple .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-fade-slide-in .animate-ripple .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .animate-ripple .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .animate-ripple .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in .card-avatar-small .animate-fade-slide-in-right.expanded.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .card-avatar-small.expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.done .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .animate-ripple .expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .expanded .item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .in,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .item,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .in,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .item,.animate-fade-slide-in-right .animate-ripple .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-fade-slide-in-right .card-avatar-small.expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .animate-ripple .expanded.item,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .in,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.animate-fade-slide-in-right.done .animate-fade-slide-in .expanded .item,.animate-fade-slide-in-right.done .animate-fade-slide-in .expanded.item,.animate-fade-slide-in-right.done .animate-ripple .expanded .item,.animate-fade-slide-in-right.done .animate-ripple .expanded.item,.animate-fade-slide-in-right.done .card-avatar-small .expanded .card.card-comment,.animate-fade-slide-in-right.done .card-avatar-small .expanded .item,.animate-fade-slide-in-right.done .card-avatar-small.expanded .card.card-comment,.animate-fade-slide-in-right.done .card-avatar-small.expanded .item,.animate-fade-slide-in-right.done .expanded .item,.animate-fade-slide-in-right.done .expanded.item,.animate-fade-slide-in-right.done .in,.animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-fade-slide-in-right.item .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.animate-ripple .animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.animate-ripple .animate-fade-slide-in-right.done .expanded.item,.animate-ripple .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in .expanded.item,.animate-ripple .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .card.card-comment,.animate-ripple .animate-fade-slide-in-right.expanded.item .card-avatar-small.expanded .item,.animate-ripple .animate-fade-slide-in-right.expanded.item .expanded .item,.animate-ripple .animate-fade-slide-in-right.expanded.item .expanded.item,.animate-ripple .animate-fade-slide-in-right.expanded.item .in,.animate-ripple .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .card-avatar-small .animate-fade-slide-in-right.expanded.item .card.card-comment,.animate-ripple .card-avatar-small .animate-fade-slide-in-right.expanded.item .item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.item .card.card-comment,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .card-avatar-small.expanded .animate-fade-slide-in-right.item .item,.animate-ripple .expanded .animate-fade-slide-in-right.done .item,.animate-ripple .expanded .animate-fade-slide-in-right.item .animate-fade-slide-in .expanded.item,.animate-ripple .expanded .animate-fade-slide-in-right.item .expanded .item,.animate-ripple .expanded .animate-fade-slide-in-right.item .expanded.item,.animate-ripple .expanded .animate-fade-slide-in-right.item .in,.animate-ripple .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small .animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small .animate-fade-slide-in-right.expanded.item .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small .animate-ripple .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small .animate-ripple .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small .animate-ripple .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .expanded .item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .in,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small .expanded .animate-fade-slide-in-right.done .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.done .item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .animate-fade-slide-in .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .animate-ripple .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small .expanded .animate-fade-slide-in-right.item .expanded .item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .expanded.item,.card-avatar-small .expanded .animate-fade-slide-in-right.item .in,.card-avatar-small .expanded .animate-fade-slide-in-right.item .item,.card-avatar-small.expanded .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded .item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .in,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small.expanded .animate-fade-slide-in-right.done .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.done .item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .animate-fade-slide-in .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .animate-ripple .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded .card.card-comment,.card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded .item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .expanded.item,.card-avatar-small.expanded .animate-fade-slide-in-right.item .in,.card-avatar-small.expanded .animate-fade-slide-in-right.item .item,.card-avatar-small.expanded .animate-ripple .animate-fade-slide-in-right.expanded.item .card.card-comment,.card-avatar-small.expanded .animate-ripple .animate-fade-slide-in-right.expanded.item .item,.card-avatar-small.expanded .expanded .animate-fade-slide-in-right.card.card-comment .card.card-comment,.card-avatar-small.expanded .expanded .animate-fade-slide-in-right.card.card-comment .item,.card-avatar-small.expanded .expanded .animate-fade-slide-in-right.item .card.card-comment,.card-avatar-small.expanded .expanded .animate-fade-slide-in-right.item .item{opacity:1}.animate-fade-slide-in-right .has-mask-reverse:after{opacity:0;-webkit-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.animate-fade-slide-in .animate-fade-slide-in-right.expanded.item .has-mask-reverse:after,.animate-fade-slide-in .expanded .animate-fade-slide-in-right.item .has-mask-reverse:after,.animate-fade-slide-in-right .animate-fade-slide-in-right.expanded.item .has-mask-reverse:after,.animate-fade-slide-in-right .expanded .animate-fade-slide-in-right.item .has-mask-reverse:after,.animate-fade-slide-in-right.done .has-mask-reverse:after,.animate-ripple .animate-fade-slide-in-right.expanded.item .has-mask-reverse:after,.animate-ripple .expanded .animate-fade-slide-in-right.item .has-mask-reverse:after,.card-avatar-small .expanded .animate-fade-slide-in-right.card.card-comment .has-mask-reverse:after,.card-avatar-small .expanded .animate-fade-slide-in-right.item .has-mask-reverse:after,.card-avatar-small.expanded .animate-fade-slide-in-right.card.card-comment .has-mask-reverse:after,.card-avatar-small.expanded .animate-fade-slide-in-right.item .has-mask-reverse:after{opacity:1}.animate-fade-slide-in-right .out{-ms-transform:scale3d(0,0,1);-webkit-transform:scale3d(0,0,1);transform:scale3d(0,0,1)}.hero.slide-up,.slide-up{height:100%;overflow:hidden;text-align:center}.slide-up{-webkit-transition:all 1s cubic-bezier(.55,0,.1,1);transition:all 1s cubic-bezier(.55,0,.1,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.hero.slide-up *,.slide-up *{opacity:0}.hero.slide-up+.mid-bar,.slide-up+.mid-bar{height:100%;opacity:.7;-webkit-transform:translate3d(100%,-240px,0);transform:translate3d(100%,-240px,0)}/*!
+ * Waves v0.5.4
+ * http://fian.my.id/Waves 
+ * 
+ * Copyright 2014 Alfiana E. Sibuea and other contributors 
+ * Forked by Zach Fitzgerald and other contributors for Ionic Material
+ *
+ * Released under the MIT license 
+ * https://github.com/fians/Waves/blob/master/LICENSE 
+ *
+ */.button-clear,.button-fab,.button-flat,.button-raised,.button-text,.ink,.popup .button{position:relative;cursor:pointer;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.ink-ripple{position:absolute;border-radius:50%;width:100px;height:100px;margin-top:-50px;margin-left:-50px;opacity:0;background-color:rgba(255,255,255,.4);-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;-o-transition:all .5s ease-out;transition:all .5s ease-out;-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform,opacity;-o-transition-property:-o-transform,opacity;transition-property:transform,opacity;-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);pointer-events:none}.ink-notransition{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.button-clear,.button-fab,.button-flat,.button-raised,.button-text,.ink-button,.ink-circle{-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}.activated.button-text,.button-clear.activated,.button-clear:active,.button-fab.activated,.button-fab:active,.button-flat.activated,.button-flat:active,.button-raised.activated,.button-raised:active,.button-text:active,.ink-button.activated,.ink-button:active,.ink-circle.activated,.ink-circle:active,.ink.activated,.ink:active,.popup .button.activated,.popup .button:active{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 100%)}.button-clear,.button-clear:link,.button-clear:visited,.button-fab,.button-fab:link,.button-fab:visited,.button-flat,.button-flat:link,.button-flat:visited,.button-raised,.button-raised:link,.button-raised:visited,.button-text,.button-text:link,.button-text:visited,.ink-button,.ink-button-input,.ink-button:link,.ink-button:visited{white-space:nowrap;vertical-align:middle;cursor:pointer;border:none;outline:0;font-size:14px;text-align:center;text-decoration:none;z-index:1}.ink-button{padding:10px 15px;border-radius:2px}.ink-button-input{margin:0;padding:10px 15px}.ink-input-wrapper{border-radius:2px;vertical-align:bottom}.ink-input-wrapper.ink-button{padding:0}.ink-input-wrapper .ink-button-input{position:relative;top:0;left:0;z-index:1}.ink-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%}.ink-float{-webkit-mask-image:none;-webkit-box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12);box-shadow:0 1px 1.5px 1px rgba(0,0,0,.12)}.ink-float:active{-webkit-box-shadow:0 8px 20px 1px rgba(0,0,0,.3);box-shadow:0 8px 20px 1px rgba(0,0,0,.3)}.ink-block{display:block}.ink-ripple{z-index:0}.button-clear .ink-ripple,.button-text .ink-ripple,.ink-dark .ink-ripple,.list .ink-ripple,[class$="-100"]>.ink-ripple,[class$="-clear"]>.ink-ripple,[class$="-light"]>.ink-ripple,[class$="-stable"]>.ink-ripple{background-color:rgba(0,0,0,.2)}.tab-item{position:relative}*{font-family:RobotoDraft,Roboto,"Helvetica Neue","Segoe UI",sans-serif}.rounded{border-radius:4px}a{cursor:pointer}.has-header.expanded{top:76px}.bar{border-bottom:none;padding:0}.bar .button{min-height:44px;min-width:44px;max-width:48px;margin-bottom:0;max-height:44px;width:48px}.bar .title+.buttons.buttons-right{right:0;top:0}.title-left,.title.title-left{left:48px}.title-right,.title.title-right{left:48px}.activated.button-text,.bar .activated.button-text,.bar .button-positive,.bar .button-positive.activated,.bar .button-positive:active,.bar .button-positive:hover,.bar .button-text,.bar .button-text:active,.bar .button-text:hover,.bar-positive,.bar-positive.activated,.bar-positive:active,.bar-positive:hover,.button-bar-positive,.button-bar-positive.activated,.button-bar-positive:active,.button-bar-positive:hover,.button-positive,.button-positive.activated,.button-positive:active,.button-positive:hover,.button-text,.button-text:active,.button-text:hover,.header-positive,.header-positive.activated,.header-positive:active,.header-positive:hover,.positive-bg,.positive-bg.activated,.positive-bg:active,.positive-bg:hover,.positive-border,.positive-border.activated,.positive-border:active,.positive-border:hover{background-color:#3f51b5;color:#fff}.bar .button-positive-900,.bar .button-positive-900.activated,.bar .button-positive-900:active,.bar .button-positive-900:hover,.bar-positive-900,.bar-positive-900.activated,.bar-positive-900:active,.bar-positive-900:hover,.button-bar-positive-900,.button-bar-positive-900.activated,.button-bar-positive-900:active,.button-bar-positive-900:hover,.button-positive-900,.button-positive-900.activated,.button-positive-900:active,.button-positive-900:hover,.header-positive-900,.header-positive-900.activated,.header-positive-900:active,.header-positive-900:hover,.positive-900-bg,.positive-900-bg.activated,.positive-900-bg:active,.positive-900-bg:hover,.positive-900-border,.positive-900-border.activated,.positive-900-border:active,.positive-900-border:hover{background-color:#1a237e;color:#fff}.bar .button-positive-100,.bar .button-positive-100.activated,.bar .button-positive-100:active,.bar .button-positive-100:hover,.bar-positive-100,.bar-positive-100.activated,.bar-positive-100:active,.bar-positive-100:hover,.button-bar-positive-100,.button-bar-positive-100.activated,.button-bar-positive-100:active,.button-bar-positive-100:hover,.button-positive-100,.button-positive-100.activated,.button-positive-100:active,.button-positive-100:hover,.header-positive-100,.header-positive-100.activated,.header-positive-100:active,.header-positive-100:hover,.positive-100-bg,.positive-100-bg.activated,.positive-100-bg:active,.positive-100-bg:hover,.positive-100-border,.positive-100-border.activated,.positive-100-border:active,.positive-100-border:hover{background-color:#c5cae9;color:#fff}.bar .button-calm,.bar .button-calm.activated,.bar .button-calm:active,.bar .button-calm:hover,.bar-calm,.bar-calm.activated,.bar-calm:active,.bar-calm:hover,.button-bar-calm,.button-bar-calm.activated,.button-bar-calm:active,.button-bar-calm:hover,.button-calm,.button-calm.activated,.button-calm:active,.button-calm:hover,.calm-bg,.calm-bg.activated,.calm-bg:active,.calm-bg:hover,.calm-border,.calm-border.activated,.calm-border:active,.calm-border:hover,.header-calm,.header-calm.activated,.header-calm:active,.header-calm:hover{background-color:#2196f3;color:#fff}.bar .button-calm-900,.bar .button-calm-900.activated,.bar .button-calm-900:active,.bar .button-calm-900:hover,.bar-calm-900,.bar-calm-900.activated,.bar-calm-900:active,.bar-calm-900:hover,.button-bar-calm-900,.button-bar-calm-900.activated,.button-bar-calm-900:active,.button-bar-calm-900:hover,.button-calm-900,.button-calm-900.activated,.button-calm-900:active,.button-calm-900:hover,.calm-900-bg,.calm-900-bg.activated,.calm-900-bg:active,.calm-900-bg:hover,.calm-900-border,.calm-900-border.activated,.calm-900-border:active,.calm-900-border:hover,.header-calm-900,.header-calm-900.activated,.header-calm-900:active,.header-calm-900:hover{background-color:#0d47a1;color:#fff}.bar .button-calm-100,.bar .button-calm-100.activated,.bar .button-calm-100:active,.bar .button-calm-100:hover,.bar-calm-100,.bar-calm-100.activated,.bar-calm-100:active,.bar-calm-100:hover,.button-bar-calm-100,.button-bar-calm-100.activated,.button-bar-calm-100:active,.button-bar-calm-100:hover,.button-calm-100,.button-calm-100.activated,.button-calm-100:active,.button-calm-100:hover,.calm-100-bg,.calm-100-bg.activated,.calm-100-bg:active,.calm-100-bg:hover,.calm-100-border,.calm-100-border.activated,.calm-100-border:active,.calm-100-border:hover,.header-calm-100,.header-calm-100.activated,.header-calm-100:active,.header-calm-100:hover{background-color:#bbdefb;color:#fff}.bar .button-royal,.bar .button-royal.activated,.bar .button-royal:active,.bar .button-royal:hover,.bar-royal,.bar-royal.activated,.bar-royal:active,.bar-royal:hover,.button-bar-royal,.button-bar-royal.activated,.button-bar-royal:active,.button-bar-royal:hover,.button-royal,.button-royal.activated,.button-royal:active,.button-royal:hover,.header-royal,.header-royal.activated,.header-royal:active,.header-royal:hover,.royal-bg,.royal-bg.activated,.royal-bg:active,.royal-bg:hover,.royal-border,.royal-border.activated,.royal-border:active,.royal-border:hover{background-color:#673ab7;color:#fff}.bar .button-royal-900,.bar .button-royal-900.activated,.bar .button-royal-900:active,.bar .button-royal-900:hover,.bar-royal-900,.bar-royal-900.activated,.bar-royal-900:active,.bar-royal-900:hover,.button-bar-royal-900,.button-bar-royal-900.activated,.button-bar-royal-900:active,.button-bar-royal-900:hover,.button-royal-900,.button-royal-900.activated,.button-royal-900:active,.button-royal-900:hover,.header-royal-900,.header-royal-900.activated,.header-royal-900:active,.header-royal-900:hover,.royal-900-bg,.royal-900-bg.activated,.royal-900-bg:active,.royal-900-bg:hover,.royal-900-border,.royal-900-border.activated,.royal-900-border:active,.royal-900-border:hover{background-color:#311b92;color:#fff}.bar .button-royal-100,.bar .button-royal-100.activated,.bar .button-royal-100:active,.bar .button-royal-100:hover,.bar-royal-100,.bar-royal-100.activated,.bar-royal-100:active,.bar-royal-100:hover,.button-bar-royal-100,.button-bar-royal-100.activated,.button-bar-royal-100:active,.button-bar-royal-100:hover,.button-royal-100,.button-royal-100.activated,.button-royal-100:active,.button-royal-100:hover,.header-royal-100,.header-royal-100.activated,.header-royal-100:active,.header-royal-100:hover,.royal-100-bg,.royal-100-bg.activated,.royal-100-bg:active,.royal-100-bg:hover,.royal-100-border,.royal-100-border.activated,.royal-100-border:active,.royal-100-border:hover{background-color:#d1c4e9;color:#fff}.balanced-bg,.balanced-bg.activated,.balanced-bg:active,.balanced-bg:hover,.balanced-border,.balanced-border.activated,.balanced-border:active,.balanced-border:hover,.bar .button-balanced,.bar .button-balanced.activated,.bar .button-balanced:active,.bar .button-balanced:hover,.bar-balanced,.bar-balanced.activated,.bar-balanced:active,.bar-balanced:hover,.button-balanced,.button-balanced.activated,.button-balanced:active,.button-balanced:hover,.button-bar-balanced,.button-bar-balanced.activated,.button-bar-balanced:active,.button-bar-balanced:hover,.header-balanced,.header-balanced.activated,.header-balanced:active,.header-balanced:hover{background-color:#4caf50;color:#fff}.balanced-900-bg,.balanced-900-bg.activated,.balanced-900-bg:active,.balanced-900-bg:hover,.balanced-900-border,.balanced-900-border.activated,.balanced-900-border:active,.balanced-900-border:hover,.bar .button-balanced-900,.bar .button-balanced-900.activated,.bar .button-balanced-900:active,.bar .button-balanced-900:hover,.bar-balanced-900,.bar-balanced-900.activated,.bar-balanced-900:active,.bar-balanced-900:hover,.button-balanced-900,.button-balanced-900.activated,.button-balanced-900:active,.button-balanced-900:hover,.button-bar-balanced-900,.button-bar-balanced-900.activated,.button-bar-balanced-900:active,.button-bar-balanced-900:hover,.header-balanced-900,.header-balanced-900.activated,.header-balanced-900:active,.header-balanced-900:hover{background-color:#1b5e20;color:#fff}.balanced-100-bg,.balanced-100-bg.activated,.balanced-100-bg:active,.balanced-100-bg:hover,.balanced-100-border,.balanced-100-border.activated,.balanced-100-border:active,.balanced-100-border:hover,.bar .balanced-100-bg:hover,.bar .button-balanced-100,.bar .button-balanced-100.activated,.bar .button-balanced-100:active,.bar-balanced-100,.bar-balanced-100.activated,.bar-balanced-100:active,.bar-balanced-100:hover,.button-balanced-100,.button-balanced-100.activated,.button-balanced-100:active,.button-balanced-100:hover,.button-bar-balanced-100,.button-bar-balanced-100.activated,.button-bar-balanced-100:active,.button-bar-balanced-100:hover,.header-balanced-100,.header-balanced-100.activated,.header-balanced-100:active,.header-balanced-100:hover{background-color:#c8e6c9;color:#fff}.bar .button-energized,.bar .button-energized.activated,.bar .button-energized:active,.bar .button-energized:hover,.bar-energized,.bar-energized.activated,.bar-energized:active,.bar-energized:hover,.button-bar-energized,.button-bar-energized.activated,.button-bar-energized:active,.button-bar-energized:hover,.button-energized,.button-energized.activated,.button-energized:active,.button-energized:hover,.energized-bg,.energized-bg.activated,.energized-bg:active,.energized-bg:hover,.energized-border,.energized-border.activated,.energized-border:active,.energized-border:hover,.header-energized,.header-energized.activated,.header-energized:active,.header-energized:hover{background-color:#ff9800;color:#fff}.bar .button-energized-900,.bar .button-energized-900.activated,.bar .button-energized-900:active,.bar .button-energized-900:hover,.bar-energized-900,.bar-energized-900.activated,.bar-energized-900:active,.bar-energized-900:hover,.button-bar-energized-900,.button-bar-energized-900.activated,.button-bar-energized-900:active,.button-bar-energized-900:hover,.button-energized-900,.button-energized-900.activated,.button-energized-900:active,.button-energized-900:hover,.energized-900-bg,.energized-900-bg.activated,.energized-900-bg:active,.energized-900-bg:hover,.energized-900-border,.energized-900-border.activated,.energized-900-border:active,.energized-900-border:hover,.header-energized-900,.header-energized-900.activated,.header-energized-900:active,.header-energized-900:hover{background-color:#e65100;color:#fff}.bar .button-energized-100,.bar .button-energized-100.activated,.bar .button-energized-100:active,.bar .button-energized-100:hover,.bar-energized-100,.bar-energized-100.activated,.bar-energized-100:active,.bar-energized-100:hover,.button-bar-energized-100,.button-bar-energized-100.activated,.button-bar-energized-100:active,.button-bar-energized-100:hover,.button-energized-100,.button-energized-100.activated,.button-energized-100:active,.button-energized-100:hover,.energized-100-bg,.energized-100-bg.activated,.energized-100-bg:active,.energized-100-bg:hover,.energized-100-border,.energized-100-border.activated,.energized-100-border:active,.energized-100-border:hover,.header-energized-100,.header-energized-100.activated,.header-energized-100:active,.header-energized-100:hover,.modal.modal-help .activated.row.selected,.modal.modal-help .row.selected,.modal.modal-help .row.selected:active,.modal.modal-help .row.selected:hover{background-color:#ffe0b2}.assertive-bg,.assertive-bg.activated,.assertive-bg:active,.assertive-bg:hover,.assertive-border,.assertive-border.activated,.assertive-border:active,.assertive-border:hover,.bar .button-assertive,.bar .button-assertive.activated,.bar .button-assertive:active,.bar .button-assertive:hover,.bar-assertive,.bar-assertive.activated,.bar-assertive:active,.bar-assertive:hover,.button-assertive,.button-assertive.activated,.button-assertive:active,.button-assertive:hover,.button-bar-assertive,.button-bar-assertive.activated,.button-bar-assertive:active,.button-bar-assertive:hover,.header-assertive,.header-assertive.activated,.header-assertive:active,.header-assertive:hover{background-color:#f44336;color:#fff}.assertive-900-bg,.assertive-900-bg.activated,.assertive-900-bg:active,.assertive-900-bg:hover,.assertive-900-border,.assertive-900-border.activated,.assertive-900-border:active,.assertive-900-border:hover,.bar .button-assertive-900,.bar .button-assertive-900.activated,.bar .button-assertive-900:active,.bar .button-assertive-900:hover,.bar-assertive-900,.bar-assertive-900.activated,.bar-assertive-900:active,.bar-assertive-900:hover,.button-assertive-900,.button-assertive-900.activated,.button-assertive-900:active,.button-assertive-900:hover,.button-bar-assertive-900,.button-bar-assertive-900.activated,.button-bar-assertive-900:active,.button-bar-assertive-900:hover,.header-assertive-900,.header-assertive-900.activated,.header-assertive-900:active,.header-assertive-900:hover{background-color:#b71c1c;color:#fff}.assertive-100-bg,.assertive-100-bg.activated,.assertive-100-bg:active,.assertive-100-bg:hover,.assertive-100-border,.assertive-100-border.activated,.assertive-100-border:active,.assertive-100-border:hover,.bar .button-assertive-100,.bar .button-assertive-100.activated,.bar .button-assertive-100:active,.bar .button-assertive-100:hover,.bar-assertive-100,.bar-assertive-100.activated,.bar-assertive-100:active,.bar-assertive-100:hover,.button-assertive-100,.button-assertive-100.activated,.button-assertive-100:active,.button-assertive-100:hover,.button-bar-assertive-100,.button-bar-assertive-100.activated,.button-bar-assertive-100:active,.button-bar-assertive-100:hover,.header-assertive-100,.header-assertive-100.activated,.header-assertive-100:active,.header-assertive-100:hover{background-color:#ffcdd2;color:#fff}.bar .button-stable,.bar .button-stable.activated,.bar .button-stable:active,.bar .button-stable:hover,.bar-stable,.bar-stable.activated,.bar-stable:active,.bar-stable:hover,.button-bar-stable,.button-bar-stable.activated,.button-bar-stable:active,.button-bar-stable:hover,.button-stable,.button-stable.activated,.button-stable:active,.button-stable:hover,.header-stable,.header-stable.activated,.header-stable:active,.header-stable:hover,.stable-bg,.stable-bg.activated,.stable-bg:active,.stable-bg:hover,.stable-border,.stable-border.activated,.stable-border:active,.stable-border:hover{background-color:#e0e0e0;color:#fff}.icon-help,.icon-help *,.icon-help:active,.icon-help:active *,.icon-help:hover,.icon-help:hover *,.positive,.positive *,.positive:active,.positive:active *,.positive:hover,.positive:hover *,.text-editable:active:hover,.text-editable:active:hover *,.text-editable:hover,.text-editable:hover *{color:#3f51b5}.positive-900,.positive-900 *,.positive-900:active,.positive-900:active *,.positive-900:hover,.positive-900:hover *{color:#3f51b5}.positive-100,.positive-100 *,.positive-100:active,.positive-100:active *,.positive-100:hover,.positive-100:hover *{color:#c5cae9}.calm-100,.calm-100 *,.calm-100:active,.calm-100:active *,.calm-100:hover,.calm-100:hover *{color:#2196f3}.calm-900,.calm-900 *,.calm-900:active,.calm-900:active *,.calm-900:hover,.calm-900:hover *{color:#0d47a1}.calm-100,.calm-100 *,.calm-100:active,.calm-100:active *,.calm-100:hover,.calm-100:hover *{color:#bbdefb}.royal,.royal *,.royal:active,.royal:active *,.royal:hover,.royal:hover *{color:#673ab7}.royal-900,.royal-900 *,.royal-900:active,.royal-900:active *,.royal-900:hover,.royal-900:hover *{color:#311b92}.royal-100,.royal-100 *,.royal-100:active,.royal-100:active *,.royal-100:hover,.royal-100:hover *{color:#d1c4e9}.balanced,.balanced *,.balanced:active,.balanced:active *,.balanced:hover,.balanced:hover *{color:#4caf50}.balanced-900,.balanced-900 *,.balanced-900:active,.balanced-900:active *,.balanced-900:hover,.balanced-900:hover *{color:#1b5e20}.balanced-100,.balanced-100 *,.balanced-100:active,.balanced-100:active *,.balanced-100:hover,.balanced-100:hover *{color:#c8e6c9}.energized,.energized *,.energized:active,.energized:active *,.energized:hover,.energized:hover *{color:#ff9800}.energized-900,.energized-900 *,.energized-900:active,.energized-900:active *,.energized-900:hover,.energized-900:hover *{color:#e65100}.energized-100,.energized-100 *,.energized-100:active,.energized-100:active *,.energized-100:hover,.energized-100:hover *{color:#ffe0b2}.assertive,.assertive *,.assertive:active,.assertive:active *,.assertive:hover,.assertive:hover *,.icon-alert,.icon-alert *,.icon-alert:active,.icon-alert:active *,.icon-alert:hover,.icon-alert:hover *{color:#f44336}.assertive-900,.assertive-900 *,.assertive-900:active,.assertive-900:active *,.assertive-900:hover,.assertive-900:hover *{color:#b71c1c}.assertive-100,.assertive-100 *,.assertive-100:active,.assertive-100:active *,.assertive-100:hover,.assertive-100:hover *{color:#ffcdd2}.stable,.stable *,.stable:active,.stable:active *,.stable:hover,.stable:hover *{color:#e0e0e0}.light,.light *,.light:active,.light:active *,.light:hover,.light:hover *{color:#fff}.button-text-dark,.button-text-dark *,.button-text-dark:active,.button-text-dark:active *,.button-text-dark:hover,.button-text-dark:hover *,.dark,.dark *,.dark:active,.dark:active *,.dark:hover,.dark:hover *{color:#444}.light-border{border-color:#ddd}.navbar-default .navbar-nav>li>a{margin:0;padding-right:26px;padding-left:26px;border-top:3px solid transparent;color:#bfd5c9;opacity:1}.mid-bar{padding:16px}.mid-bar h1,.mid-bar h2,.mid-bar h3,.mid-bar h4,.mid-bar h5,.mid-bar h6{color:#fff;margin-bottom:5px}.mid-bar p{color:rgba(255,255,255,.5);margin-bottom:0}.card>.item-avatar,.item-avatar,.item-avatar .item-content,.item-avatar-left,.item-avatar-left .item-content{padding-left:95px}.item,.item-complex .item-content,.item-radio .item-content{background-color:transparent}.dark-bg h2,.item.dark-bg h2{color:#fff}.tabs-striped .tabs{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.bar .button.button-clear,.bar .button.button-text{color:#fff}#menu .footer .bar .button.button-icon .icon-help:before,.bar .button.button-icon #menu .footer .icon-help:before,.bar .button.button-icon .icon-alert:before,.bar .button.button-icon .icon-help:before,.bar .button.button-icon .icon:before,.bar .button.button-icon.icon-left:before,.bar .button.button-icon.icon-right:before,.bar .button.button-icon:before{vertical-align:top;font-size:24px}.menu{background-color:transparent}.button-icon.button.activated,.button-icon.button.active{opacity:initial}.popover{opacity:0;position:absolute;right:8px;transform:translate(50%,-50%) scale(0,0);transition:transform .3s ease-in-out,opacity .3s ease-in-out;top:8px}.popover.ng-enter{opacity:1;transform:translate(0,-14px) scale(1,1);transition:transform .3s ease-in-out,opacity .3s ease-in-out}.popover.ng-leave{opacity:0;transform:translate(50%,-50%) scale(0,0);transition:transform .3s ease-in-out,opacity .3s ease-in-out}.button{overflow:hidden!important}@font-face{font-family:Cesiumicons;src:url(../fonts/cesiumicons.eot?v=1.2);src:url(../fonts/cesiumicons.eot?v=1.2#iefix) format("embedded-opentype"),url(../fonts/cesiumicons.ttf?v=1.2) format("truetype"),url(../fonts/cesiumicons.woff?v=1.2) format("woff"),url(../fonts/cesiumicons.woff) format("woff"),url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+R2VuZXJhdGVkIGJ5IEljb01vb248L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9ImNlc2l1bWljb25zIiBob3Jpei1hZHYteD0iMTAyNCI+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMDI0IiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTY0IiAvPgo8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iMTAyNCIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwOyIgaG9yaXotYWR2LXg9IjUxMiIgZD0iIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwMDsiIGQ9Ik03MDQuNjMxIDU3MS4xMjhjLTg4LjYxMy0xNDEuNDA5LTIyMC40MDMtMjYzLjQwOC0zODUuNTIxLTMwNS40NzMtNjcuMjUyLTE4LjQ5My0xMzcuMTEyLTI1LjgyMi0yMDYuNzA1LTI3LjAyMiA4NS41NDktMTYzLjA5NSAyNzUuODEtMjYyLjI3MiA0NTguNTQ1LTIzNy45NSAxODEuMTY2IDE5LjA3NiAzNDEuNjYyIDE1Ny4yMTUgMzg4LjMzOCAzMzMuMTYyLTU0LjYwMSAxMDMuOTI0LTE0MS40OSAxOTcuODc0LTI1NC42NTYgMjM3LjI4M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTAxOyIgZD0iTTcwNS45MzcgNTcyLjA4OGMtMTYuNzU2LTExMS44MTUtODUuMDg2LTIwNy4yLTEwNy4yNjctMzE3LjIyMS05LjE4OC01MS41NDEgMjYuNzg2LTExMC42NDItMTQuNTc5LTE1NS41MTQtNDYuMjEtNTIuNDAyLTExOC45MDctNjUuMzc5LTE4MS45MzgtODcuNDY2IDE3Ny43My00Ny45MSAzNzkuNjYgMjQuMjE1IDQ4NS45ODIgMTc0Ljc4IDUwLjU1IDY5LjExNiA4MC45OTIgMTUyLjY4OSA4Ni42OTYgMjM4LjEyNS00Ni4wODUgOS40ODMtNjkuNDM2IDU1LjAyMC0xMTAuNTU2IDc0LjIwMS00OS45MTcgMjkuOTkyLTEwMy41NzEgNTMuNTE0LTE1OC4zMzkgNzMuMDk1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDI7IiBkPSJNNzA0LjQyMiA1NjMuNGMtMjMuNzg2LTUxLjQwOC0yNi40MzYtMTA5Ljc1Ny01NC4wODQtMTU5LjcyNi03LjIxMS0zMi45MDktNDEuMDkxLTg0LjI4OC0yOS40OTgtMTA2LjQ4OSAxMDEuNTktMTYuNTQyIDIwMy4xODEtMzMuMDg1IDMwNC43NzEtNDkuNjI3IDE4LjI3OCAzNS42NDkgMzEuODQ1IDczLjcxMSA0MC4yMDEgMTEyLjg5NC03My44NjggNzkuMjY5LTE1MC40NzEgMTYzLjQyNi0yNTUuMzU4IDIwMC42MzVsLTYuMDMyIDIuMzE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDM7IiBkPSJNNjY4LjYxNiA0NDUuNzk0Yy0yMC45ODMtMzEuNjc5LTI3LjI0NS03MC40MDgtNDQuMTA0LTEwNC40MjYtMTYuMjIxLTM1LjY4OS01MS40MTUtMTE5LjQ3MiAxOS42ODQtMTA5Ljg5IDUwLjQ1OSAyNC42NTQgOTUuMDUwLTEzLjM3OSAxNDUuODE5LTE2LjkyOSA0MC4zMTctNS41NjEgODIuMTM3LTQuNjY1IDEyMS4yOTUgNy4yMDEgMTQuOTgzIDMxLjcxNiA1MC42ODYgODIuNTk0IDM4LjcyNiAxMDguMzA1LTQ4LjU2MyA5Ljg2Ny05OS40NzMgMTMuODc5LTE0NS4yMTUgMzMuNjkgMTkuMjczIDQ1LjU5NS01NC45NzQgNTUuNDY1LTg5Ljk3NiA2OC44NC0xNS4zNDEgNC42MzctMzAuNzY1IDguOTk4LTQ2LjIyOSAxMy4yMDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwNDsiIGQ9Ik02MDcuNzE0IDE2MC44NzNjLTMwLjE4My04NS4wMDItMTIzLjE4Ni0xMTkuOTQ4LTIwMS44MzItMTQ1Ljk0MyA1LjAyMC0xMS4xODYgNzEuMTg2LTE2LjMyNSAxMDAuNzg3LTE3LjMyNiAxMTcuMTE1LTMuMDY3IDIzNC41NDIgNDEuMDg2IDMyMC40OCAxMjAuNzUyLTc0LjgzMSAyLjgzNC0xNDkuNTQ5IDE0Ljc4NC0yMTkuNDM1IDQyLjUxN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA1OyIgZD0iTTU5OC40ODUgMjY4LjUzNGMtNC4xNzQtNDIuNzY0LTI1LjE4OC0xMTUuOTM2IDM0LjAyOC0xMjguNDk0IDU4LjUzNy0xNC41ODEgMTE5LjQzNC0xOC41MTEgMTc3LjA2Ny0zNy4wMjAgNDUuMjAxIDM3LjQ0NyA4My4xNjcgODMuNTk5IDExMS4xMiAxMzUuMjE3LTEwNy45OC0xLjY4MS0yMTkuNDMxLTEwLjIwNC0zMjIuMjE1IDMwLjI5N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA2OyIgZD0iTTYwNy4yMSA2MDAuNzhjMTguOTU5IDIuMjkgMzUuMjM0IDEuODk2IDI4LjI4OC0yMS43MiA1LjkzNS0xNC42NDQtMzYuNjE0LTE0LjYwNy0yOC4yODggMS44NDEgMCA2LjYyNiAwIDEzLjI1MiAwIDE5Ljg3OXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTA3OyIgZD0iTTQ0NC41NDEgNzAyLjk2MmMyMS4wODggMy45NTggMzIuNjU0LTEuNjA0IDI2Ljk1NC0yNC40MzUtNS42NzMtMTEuMDcxLTM3LjY5Ny03LjY1LTI2Ljk1NCAxNC4wMzYgMCAzLjQ2NiAwIDYuOTMzIDAgMTAuMzk5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MDg7IiBkPSJNNTA0LjUzMiA2ODEuNzhjMTMuNDc4LTMuMjk4IDQzLjIzNiA5LjY4MiAzNi43NTUtMTMuNTc1IDYuMjU0LTIzLjAzMC03LjA1Ny0yNi40OTYtMjcuMTUtMjMuMTgtMTguNTY3LTUuNDk2LTUuODcxIDI2LjUyNy05LjYwNSAzNi43NTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwOTsiIGQ9Ik01MDIuNTM5IDQxNy40MjZjMTguNzg2IDAgMzcuNTcyIDAgNTYuMzU4IDAgMC0xOC43ODYgMC0zNy41NzIgMC01Ni4zNTgtMTguNzg2IDAtMzcuNTcyIDAtNTYuMzU4IDAgMCAxOC43ODYgMCAzNy41NzIgMCA1Ni4zNTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYTsiIGQ9Ik01MDguODU2IDYzMC4xNTdjMTMuNDc4LTMuMjk4IDQzLjIzNiA5LjY4MiAzNi43NTUtMTMuNTc1IDYuMjU0LTIzLjAzMC03LjA1Ny0yNi40OTYtMjcuMTUtMjMuMTgtMTguNTY3LTUuNDk2LTUuODcxIDI2LjUyNy05LjYwNSAzNi43NTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwYjsiIGQ9Ik01NjkuMTAzIDQ3NC4xNGMxOC45NyAxLjkyOSAzNi40OTIgMi40MDkgMjkuNDA0LTIxLjcyIDYuODk0LTE1LjkzMi0zNy4yMzUtMTUuODMzLTI5LjQwNCAwLjcyNSAwIDYuOTk4IDAgMTMuOTk2IDAgMjAuOTk0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MGM7IiBkPSJNNjI3LjA4NyA1MzEuNDAzYzE5LjM1IDcuODY5IDI5LjQwOC05LjU4MiAxOS4zMzgtMjIuMDUzLTIxLjU4My00LjE0Ny0yMC44MDEgMy4zODctMTkuMzM4IDIyLjA1M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBkOyIgZD0iTTU0Ny42MjcgNTI1LjIzMWMxMy40NzgtMy4yOTggNDMuMjM2IDkuNjgyIDM2Ljc1NS0xMy41NzUgNi4yNTQtMjMuMDMwLTcuMDU3LTI2LjQ5Ni0yNy4xNS0yMy4xOC0xOC41NjctNS40OTYtNS44NzEgMjYuNTI3LTkuNjA1IDM2Ljc1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTBlOyIgZD0iTTQwMy44MDIgMzM1LjAyNGMxNC40MjYtMS45OTggMzYuNzMgMy44ODIgNDYuNTU2LTIuNzE1LTIuMDIwLTE0LjMxNSAzLjkxMy0zNi41ODQtMi43MTUtNDYuMjkyLTEyLjg3OSAzLjU0NS00MC4wMTctNy4xNjktNDMuODQxIDUuNDMgMCAxNC41MjYgMCAyOS4wNTEgMCA0My41Nzd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkwZjsiIGQ9Ik00NDcuOTA3IDQwNi4wODRjMTYuODM2LTAuMTE3IDM5LjY3NyA1Ljc3IDMxLjg1NC0xOS4wMDUgNy44Mi0yNC4zNTUtMTYuMDgwLTE2Ljk5LTMxLjg1NC0xNy43NSAwIDEyLjI1MiAwIDI0LjUwMyAwIDM2Ljc1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTEwOyIgZD0iTTUxNS4yOTEgNDY4LjU2N2MtMTguOTcxIDEuODk0LTM2LjYxMiAyLjQ1OS0yOS41MS0yMS43Mi0yLjUzOC0xMi45OSAzOS42MjctMTMuMzc0IDI5LjUxIDUuODkxIDAgNS4yNzYgMCAxMC41NTMgMCAxNS44Mjl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTkxMTsiIGQ9Ik01NzguNDg2IDU3Mi44NjZjMjEuMjMyIDQuOTIgMjkuNDY5LTMuMTU2IDI0LjUwMy0yNC40MzUtMTMuMTA0LTguNTMyLTMyLjk1NS0yLjEwNi0yNC41MDMgMTkuMjAxdjUuMjM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGU5MTI7IiBkPSJNNjAxLjQ3MSA2NDEuNjg5Yy0xOC45NzEgMS44OTQtMzYuNjEyIDIuNDU5LTI5LjUxLTIxLjcyLTIuNTM4LTEyLjk5IDM5LjYyNy0xMy4zNzQgMjkuNTEgNS44OTEgMCA1LjI3NiAwIDEwLjU1MyAwIDE1LjgyOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlOTE1OyIgZ2x5cGgtbmFtZT0iZGlhc3BvcmEiIGhvcml6LWFkdi14PSIxMDY0IiBkPSJNNjcwLjEgMjIuMTA5Yy0yOC42OTIgNDAuMDQ2LTczLjQ1OSAxMDIuNTcxLTk5LjQ4MiAxMzguOTQ1LTI2LjU3OSAzNy4xNTEtNDguMjAyIDY2LjE0Ni00OS4zNCA2Ni4xNjEtMS4xNjkgMC4wMTUtNDIuOTg2LTU2LjE5Ni05OC45MTItMTMyLjk2MS01My4yODgtNzMuMTQzLTk3LjMzLTEzMi45ODctOTcuODcyLTEzMi45ODctMS41MTYgMC0xOTIuMTE0IDEzNC4yNS0xOTIuNjA1IDEzNS42NjMtMC4yMzcgMC42ODQgNDIuODUgNjMuOTM1IDk1Ljc1MSAxNDAuNTU5czk2LjE4MiAxNDAuNTIzIDk2LjE4MiAxNDEuOTk5YzAgMi4zOC0xNy4xNDIgOC4zOTgtMTUxLjYwNSA1My4yMjYtODMuMzgzIDI3Ljc5OC0xNTIuNDIyIDUwLjg2MS0xNTMuNDIgNTEuMjUxLTEuMzg4IDAuNTQyIDYuNTUgMjcuMTAzIDMzLjc4MyAxMTMuMDMyIDE5LjU3OCA2MS43NzggMzYuMDQwIDExMi44MjggMzYuNTgxIDExMy40NDRzNzMuMDExLTIyLjU3NCAxNjEuMDQzLTUxLjUzNGM4OC4wMzMtMjguOTYgMTYwLjc5Ni01Mi42NTQgMTYxLjY5Ni01Mi42NTNzMS45MTkgMS4zNDggMi4yNjMgMi45OTRjMC4zNDQgMS42NDYgMS4xMDQgNzYuNjAxIDEuNjg4IDE2Ni41NjZzMS41NDYgMTY0LjMyMiAyLjEzNyAxNjUuMjM2YzAuODQ3IDEuMzA5IDI1LjU3NiAxLjY1OCAxMTYuMzY0IDEuNjQyIDYzLjQwOC0wLjAxMSAxMTUuOTQ4LTAuNDYgMTE2Ljc1Ni0wLjk5NyAxLjAxOC0wLjY3NyAyLjc1Ny01MC4xMzggNS42Ny0xNjEuMjI2IDQuNzgzLTE4Mi40MDggNC44ODYtMTg0Ljg1MiA3Ljc5NS0xODQuODUyIDEuMTI4IDAgNzAuODk2IDIzLjM1MyAxNTUuMDQxIDUxLjg5NnMxNTMuNCA1MS40MzMgMTUzLjkwMSA1MC44NjhjMS43LTEuOTE4IDcwLjcxNS0yMjYuNjAyIDY5Ljg2NS0yMjcuNDUxLTAuNDY0LTAuNDY0LTcwLjY5LTI0LjUxNC0xNTYuMDU2LTUzLjQ0NC0xMTcuNDMyLTM5Ljc5Ny0xNTUuMzE1LTUzLjE0My0xNTUuNjMzLTU0LjgyNy0wLjIzNS0xLjI0NCA0MC4xNDktNjEuNTk0IDkxLjQ5OS0xMzYuNzM3IDUwLjU1NS03My45ODEgOTEuNzMzLTEzNS4wNjIgOTEuNTA3LTEzNS43MzctMC41MjEtMS41NDktMTg5LjY4MS0xNDAuODg0LTE5MS4yNjMtMTQwLjg4NC0wLjY0MiAwLTI0LjY0MyAzMi43NjUtNTMuMzM1IDcyLjgxeiIgLz4KPC9mb250PjwvZGVmcz48L3N2Zz4=) format("svg");font-weight:400;font-style:normal}.cesiumicons,.cion,.ion-library:before,.ion-office:before,.ion-social-diaspora:before,.ion-social-duniter:before{display:inline-block;font-family:Cesiumicons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-social-duniter:before{content:""}.ion-social-diaspora:before{content:""}.ion-office:before{content:""}.ion-library:before{content:""}.digit-keyboard{position:absolute;left:0;right:0;bottom:0;background:0 0;font-size:24px;z-index:5000}.digit-keyboard *{box-sizing:border-box}.digit-keyboard .digit-keyboard-row{display:flex;flex-direction:row;border-bottom:1px solid #333}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper{flex:1;text-align:center;position:relative;height:60px}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key{display:block;margin:0 auto;position:absolute;left:0;top:0;right:0;bottom:0;border-right:1px solid #333;border-left:1px solid #333;line-height:60px;-webkit-transition:background-color .1s linear;-moz-transition:background-color .1s linear;-o-transition:background-color .1s linear;-ms-transition:background-color .1s linear;transition:background-color .1s linear}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number{font-size:1em;vertical-align:middle;display:inline-block;line-height:normal;text-align:center;margin-top:-.4em}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number .digit-keyboard-key-letters{font-size:9.6px;line-height:9.6px;height:9.6px;margin-top:-.25em}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number .digit-keyboard-key-letters.hidden{visibility:hidden}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-action{position:absolute;left:0;top:0;right:0;bottom:0;line-height:60px;font-size:24px}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper.hidden{visibility:hidden}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper:first-child .digit-keyboard-key{border-right:none}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper:last-child .digit-keyboard-key{border-left:none}.digit-keyboard .digit-keyboard-row:first-child{border-top:1px solid #333}.digit-keyboard .digit-keyboard-row:last-child{border:none}.digit-keyboard .digit-keyboard-row:last-child .digit-keyboard-key-wrapper .digit-keyboard-key{border-bottom:1px solid #333}.digit-keyboard.align-center{margin:0 auto}.digit-keyboard.align-left{margin-right:auto}.digit-keyboard.align-right{margin-left:auto}.digit-keyboard.no-letters .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number{margin-top:-.3em}.digit-keyboard.no-letters .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number .digit-keyboard-key-letters{display:none}.digit-keyboard.round-buttons .digit-keyboard-row{border:none}.digit-keyboard.round-buttons .digit-keyboard-row .digit-keyboard-key-wrapper{margin:10px 0 0 0}.digit-keyboard.round-buttons .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key{width:60px;-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;border:1px solid #333}.digit-keyboard.round-buttons .digit-keyboard-row:last-child .digit-keyboard-key-wrapper{margin-bottom:10px}.digit-keyboard.round-buttons.no-letters .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number{height:57.6px;line-height:57.6px}.digit-keyboard.keyboard-light *{border-color:#e6e6e6!important}.digit-keyboard.keyboard-light .digit-keyboard-key{background:#fff;color:#444}.digit-keyboard.keyboard-light .digit-keyboard-key.activated{background:#e6e6e6}.digit-keyboard.keyboard-stable *{border-color:#dfdfdf!important}.digit-keyboard.keyboard-stable .digit-keyboard-key{background:#f8f8f8;color:#444}.digit-keyboard.keyboard-stable .digit-keyboard-key.activated{background:#dfdfdf}.digit-keyboard.keyboard-positive *{border-color:#0c60ee!important}.digit-keyboard.keyboard-positive .digit-keyboard-key{background:#387ef5;color:#fff}.digit-keyboard.keyboard-positive .digit-keyboard-key.activated{background:#0c60ee}.digit-keyboard.keyboard-calm *{border-color:#0a9dc7!important}.digit-keyboard.keyboard-calm .digit-keyboard-key{background:#11c1f3;color:#fff}.digit-keyboard.keyboard-calm .digit-keyboard-key.activated{background:#0a9dc7}.digit-keyboard.keyboard-balanced *{border-color:#28a54c!important}.digit-keyboard.keyboard-balanced .digit-keyboard-key{background:#33cd5f;color:#fff}.digit-keyboard.keyboard-balanced .digit-keyboard-key.activated{background:#28a54c}.digit-keyboard.keyboard-energized *{border-color:#e6b500!important}.digit-keyboard.keyboard-energized .digit-keyboard-key{background:#ffc900;color:#fff}.digit-keyboard.keyboard-energized .digit-keyboard-key.activated{background:#e6b500}.digit-keyboard.keyboard-assertive *{border-color:#e42112!important}.digit-keyboard.keyboard-assertive .digit-keyboard-key{background:#ef473a;color:#fff}.digit-keyboard.keyboard-assertive .digit-keyboard-key.activated{background:#e42112}.digit-keyboard.keyboard-royal *{border-color:#6b46e5!important}.digit-keyboard.keyboard-royal .digit-keyboard-key{background:#886aea;color:#fff}.digit-keyboard.keyboard-royal .digit-keyboard-key.activated{background:#6b46e5}.digit-keyboard.keyboard-dark *{border-color:#2b2b2b!important}.digit-keyboard.keyboard-dark .digit-keyboard-key{background:#444;color:#fff}.digit-keyboard.keyboard-dark .digit-keyboard-key.activated{background:#2b2b2b}.digit-keyboard.keyboard-opaque-black *{border-color:rgba(0,0,0,.75)!important}.digit-keyboard.keyboard-opaque-black .digit-keyboard-key{background:rgba(0,0,0,.15);color:rgba(0,0,0,.75)}.digit-keyboard.keyboard-opaque-black .digit-keyboard-key.activated{background:rgba(0,0,0,.25)}.digit-keyboard.keyboard-opaque-white *{border-color:rgba(255,255,255,.75)!important}.digit-keyboard.keyboard-opaque-white .digit-keyboard-key{background:rgba(255,255,255,.15);color:rgba(255,255,255,.75)}.digit-keyboard.keyboard-opaque-white .digit-keyboard-key.activated{background:rgba(255,255,255,.25)}.digit-keyboard.animation-slide-up{-webkit-transition:transform linear 150ms;transition:transform linear 150ms;transform:translate3d(0,0,0)}.digit-keyboard.animation-slide-up.ng-hide{transform:translate3d(0,100%,0)}.digit-keyboard.animation-pop{-webkit-transition:transform linear 150ms;transition:transform linear 150ms;transform:scale3d(1,1,1)}.digit-keyboard.animation-pop.ng-hide{transform:scale3d(0,0,1)}@media screen and (max-width:400px){@-ms-viewport{width:320px}}@media screen and (max-width:767px){.hidden-xs{display:none!important;visibility:hidden!important}.padding-top-xs{padding-top:10px}}@media screen and (min-width:768px){.hidden-xs{display:inherit;visibility:visible}.row.hidden-xs{display:flex!important}.button.hidden-xs{display:inline-block}}@media screen and (max-width:767px){.visible-xs{display:inherit!important;visibility:visible!important}.button.visible-xs{display:inline-block!important}}@media screen and (min-width:768px){.visible-xs{display:none!important;visibility:hidden!important}}@media screen and (max-width:767px){.padding-xs{padding:16px!important}.no-padding-xs{padding:0!important}.no-margin-xs{margin:0!important}}@media screen and (min-width:768px) and (max-width:991px){.hidden-sm,.row-header.hidden-sm,.row.hidden-sm{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:400px!important;display:inline-block!important}.badge:empty{display:none!important}.padding-sm{padding:16px!important}.no-padding-sm{padding:0!important}.no-margin-sm{margin:0!important}}@media screen and (min-width:768px){.item-toggle .toggle{right:32px}}@media screen and (min-width:992px){.hidden-sm{display:inherit;visibility:visible}.row.hidden-sm{display:flex!important}.button.hidden-sm{display:flex}#menu .footer .popover-helptip .icon-bottom-center.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-bottom-left.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-bottom-right.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-center.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-left.icon-help .button.hidden-sm,#menu .footer .popover-helptip .icon-right.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-center.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-left.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-bottom-right.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-center.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-left.icon-help .button.hidden-sm,.popover-helptip #menu .footer .icon-right.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-center.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-center.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-left.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-left.icon-help .button.hidden-sm,.popover-helptip .icon-bottom-right.icon-alert .button.hidden-sm,.popover-helptip .icon-bottom-right.icon-help .button.hidden-sm,.popover-helptip .icon-center.icon-alert .button.hidden-sm,.popover-helptip .icon-center.icon-help .button.hidden-sm,.popover-helptip .icon-left.icon-alert .button.hidden-sm,.popover-helptip .icon-left.icon-help .button.hidden-sm,.popover-helptip .icon-right.icon-alert .button.hidden-sm,.popover-helptip .icon-right.icon-help .button.hidden-sm,.popover-helptip .icon.icon-bottom-center .button.hidden-sm,.popover-helptip .icon.icon-bottom-left .button.hidden-sm,.popover-helptip .icon.icon-bottom-right .button.hidden-sm,.popover-helptip .icon.icon-center .button.hidden-sm,.popover-helptip .icon.icon-left .button.hidden-sm,.popover-helptip .icon.icon-right .button.hidden-sm,.pull-left .button.hidden-sm,.pull-right .button.hidden-sm{display:inline-block}}@media screen and (max-width:767px){.hidden-sm{display:inherit;visibility:visible}}@media screen and (max-width:991px){.visible-sm{display:inherit!important;visibility:visible!important}.button.visible-sm{display:inline-block!important}}@media screen and (min-width:992px){.visible-sm{display:none;visibility:hidden}}@media screen and (max-width:767px){.visible-sm{display:none;visibility:hidden}}@media screen and (max-width:991px){body{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEbSURBVDiNndMxK4ZRGMbx3zmRMrwvM2XCQFFik/IJpCw+hJLPgfIhLBY+gEEGJQPFwGZg9TIoBrfhOfSQHl7XeM7/fw3nvk+KCPWklEawgGlMlOMrnOMoIm6/8B8FKaWMFazhGQ94LFwbg+jHDvYi4u2zIKWUsIk5XNfE72ljHKfYiIjI5WIZMzhrkJW7s8IuQ8IwdnGDpwa5nhbGsJqxiNcuZIV9xWJWvXY3cr1kOmMSnX8UdDCZEb+RDYmMS9WMu80gLrNqw1r/KGjhPOMQvaol+Wva6MFhjoh7bGEUuVGrkgu7HRH3H8IBTjCLgQZ5oDAnxfnymRKWsI4X1Zw7NbGFPmxjP4qYfvjOQ5jHlGpHqCZ1geOIuKvz76QSW1T3cwmnAAAAAElFTkSuQmCC),auto}}@media screen and (min-width:992px){body{cursor:inherit}}@media screen and (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important;visibility:hidden!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:400px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (min-width:1200px){.hidden-md{display:inherit;visibility:visible}}@media screen and (max-width:991px){.hidden-md{display:inherit;visibility:visible}}@media screen and (min-width:992px) and (max-width:1199px){.visible-md{display:inherit!important;visibility:visible!important}}@media screen and (min-width:1200px){.visible-md{display:none;visibility:hidden}}@media screen and (max-width:991px){.visible-md{display:none;visibility:hidden}}@media screen and (min-width:1200px){.hidden-lg{display:none!important;visibility:hidden!important}.visible-lg{display:inherit!important;visibility:visible!important}.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:450px!important;display:block!important}.badge:empty{display:none!important}}@media screen and (max-width:1199px){.hidden-lg{display:inherit;visibility:visible}}@media screen and (max-width:1199px){.visible-lg{display:none;visibility:hidden}}@media screen and (max-width:768px){.no-padding-xs{padding:inherit}}@media screen and (max-width:767px){.no-margin-xs{margin:0!important}}@media screen and (min-width:992px){.disable-user-behavior,.scroll,body,html{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important;-webkit-touch-callout:default!important;-webkit-tap-highlight-color:#387ef5;-webkit-user-drag:none!important;touch-action:auto!important;-ms-touch-action:auto!important;-ms-content-zooming:none!important}}@media screen and (max-width:844px){.hidden-nomenu{display:none!important;visibility:hidden!important}.visible-nomenu{display:inherit!important;visibility:visible!important}}@media screen and (min-width:845px){.hidden-nomenu{display:inherit;visibility:visible}.visible-nomenu{display:none!important;visibility:hidden!important}}@media screen and (min-width:845px){.hidden-menu{display:none!important;visibility:hidden!important}.visible-menu{display:inherit!important;visibility:visible!important}}@media screen and (max-width:844px){.hidden-menu{display:inherit;visibility:visible}.visible-menu{display:none;visibility:hidden}}body,html{position:absolute;top:0;left:0;height:100%;width:100%}.item.item-icon-right .item-select select,.item.item-icon-right.item-select select{right:48px;padding:0 20px 0 16px}.item.item-icon-right .item-select:after,.item.item-icon-right.item-select:after{right:56px}#unitPopover .item.selected,.popover-unit .item.selected{background-color:#f8f8f8}@media (max-width:767px){.popover-share{width:auto}}.ios ion-content{pointer-events:auto}.popover-share{height:110px}.popover-share .bar{box-shadow:none!important}.popover-share .bar-header{height:20px}.popover-share .bar-header .title{font-size:12px;font-weight:700;height:20px;line-height:19px;max-width:260px;margin:0 5px;text-align:left}.popover-share .bar-header span{font-size:10px;height:20px;position:absolute;right:0;top:0;margin:0 5px;display:block}.popover-share .has-header{top:20px}.popover-share .has-footer{bottom:40px}.popover-share .bar-footer{color:#387ef5;height:40px}.popover-share .bar-footer .button-icon{padding:0 5px}.popover-share .bar-footer .button-close{position:absolute;right:0;bottom:0}.popover-share .item{padding:5px}.popover-share .item input{border:1px solid grey;border-radius:3px;box-shadow:inset 0 1px 1px rgba(0,0,0,.3)}.popover-share .item input:focus{border-color:#387ef5;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.3),0 0 8px #08c}.popover-share .list .item{border-bottom:0!important}.popover-light .bar-footer,.popover-light .bar-header,.popover-notification .bar-footer,.popover-notification .bar-header{height:30px}.popover-light .bar-footer .title,.popover-light .bar-header .title,.popover-notification .bar-footer .title,.popover-notification .bar-header .title{color:#000;text-align:left;left:0!important;font-size:14px;line-height:30px}#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-center.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-center.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-center.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-right.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-center.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-right.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-center.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-right.icon-help,.popover-helptip .popover-light .bar-footer .icon-center.icon-alert,.popover-helptip .popover-light .bar-footer .icon-center.icon-help,.popover-helptip .popover-light .bar-footer .icon-right.icon-alert,.popover-helptip .popover-light .bar-footer .icon-right.icon-help,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-center,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-right,.popover-helptip .popover-light .bar-footer .icon.icon-center,.popover-helptip .popover-light .bar-footer .icon.icon-right,.popover-helptip .popover-light .bar-header .icon-bottom-center.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-center.icon-help,.popover-helptip .popover-light .bar-header .icon-bottom-right.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-right.icon-help,.popover-helptip .popover-light .bar-header .icon-center.icon-alert,.popover-helptip .popover-light .bar-header .icon-center.icon-help,.popover-helptip .popover-light .bar-header .icon-right.icon-alert,.popover-helptip .popover-light .bar-header .icon-right.icon-help,.popover-helptip .popover-light .bar-header .icon.icon-bottom-center,.popover-helptip .popover-light .bar-header .icon.icon-bottom-right,.popover-helptip .popover-light .bar-header .icon.icon-center,.popover-helptip .popover-light .bar-header .icon.icon-right,.popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-center.icon-help,.popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-right.icon-help,.popover-helptip .popover-notification .bar-footer .icon-center.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-center.icon-help,.popover-helptip .popover-notification .bar-footer .icon-right.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-right.icon-help,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-center,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-right,.popover-helptip .popover-notification .bar-footer .icon.icon-center,.popover-helptip .popover-notification .bar-footer .icon.icon-right,.popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-center.icon-help,.popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-right.icon-help,.popover-helptip .popover-notification .bar-header .icon-center.icon-alert,.popover-helptip .popover-notification .bar-header .icon-center.icon-help,.popover-helptip .popover-notification .bar-header .icon-right.icon-alert,.popover-helptip .popover-notification .bar-header .icon-right.icon-help,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-center,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-right,.popover-helptip .popover-notification .bar-header .icon.icon-center,.popover-helptip .popover-notification .bar-header .icon.icon-right,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-center.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-right.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-center.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-right.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-center.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-right.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-footer .popover-helptip .icon-center.icon-alert,.popover-light .bar-footer .popover-helptip .icon-center.icon-help,.popover-light .bar-footer .popover-helptip .icon-right.icon-alert,.popover-light .bar-footer .popover-helptip .icon-right.icon-help,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-center,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-right,.popover-light .bar-footer .popover-helptip .icon.icon-center,.popover-light .bar-footer .popover-helptip .icon.icon-right,.popover-light .bar-footer .pull-right,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-center.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-right.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-center.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-right.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-center.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-center.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-right.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-right.icon-help,.popover-light .bar-header .popover-helptip .icon-center.icon-alert,.popover-light .bar-header .popover-helptip .icon-center.icon-help,.popover-light .bar-header .popover-helptip .icon-right.icon-alert,.popover-light .bar-header .popover-helptip .icon-right.icon-help,.popover-light .bar-header .popover-helptip .icon.icon-bottom-center,.popover-light .bar-header .popover-helptip .icon.icon-bottom-right,.popover-light .bar-header .popover-helptip .icon.icon-center,.popover-light .bar-header .popover-helptip .icon.icon-right,.popover-light .bar-header .pull-right,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-center.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-center.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-right.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon-center.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-footer .popover-helptip .icon-right.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-center,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-right,.popover-notification .bar-footer .popover-helptip .icon.icon-center,.popover-notification .bar-footer .popover-helptip .icon.icon-right,.popover-notification .bar-footer .pull-right,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-center.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-right.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-center.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-right.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-center.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-center.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-right.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-right.icon-help,.popover-notification .bar-header .popover-helptip .icon-center.icon-alert,.popover-notification .bar-header .popover-helptip .icon-center.icon-help,.popover-notification .bar-header .popover-helptip .icon-right.icon-alert,.popover-notification .bar-header .popover-helptip .icon-right.icon-help,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-center,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-right,.popover-notification .bar-header .popover-helptip .icon.icon-center,.popover-notification .bar-header .popover-helptip .icon.icon-right,.popover-notification .bar-header .pull-right{margin-right:10px}#menu .footer .popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-footer .icon-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-light .bar-header .icon-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-footer .icon-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-help,#menu .footer .popover-helptip .popover-notification .bar-header .icon-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-footer .icon-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-light .bar-header .icon-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-footer .icon-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-bottom-left.icon-help,.popover-helptip #menu .footer .popover-notification .bar-header .icon-left.icon-help,.popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-alert,.popover-helptip .popover-light .bar-footer .icon-bottom-left.icon-help,.popover-helptip .popover-light .bar-footer .icon-left.icon-alert,.popover-helptip .popover-light .bar-footer .icon-left.icon-help,.popover-helptip .popover-light .bar-footer .icon.icon-bottom-left,.popover-helptip .popover-light .bar-footer .icon.icon-left,.popover-helptip .popover-light .bar-header .icon-bottom-left.icon-alert,.popover-helptip .popover-light .bar-header .icon-bottom-left.icon-help,.popover-helptip .popover-light .bar-header .icon-left.icon-alert,.popover-helptip .popover-light .bar-header .icon-left.icon-help,.popover-helptip .popover-light .bar-header .icon.icon-bottom-left,.popover-helptip .popover-light .bar-header .icon.icon-left,.popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-bottom-left.icon-help,.popover-helptip .popover-notification .bar-footer .icon-left.icon-alert,.popover-helptip .popover-notification .bar-footer .icon-left.icon-help,.popover-helptip .popover-notification .bar-footer .icon.icon-bottom-left,.popover-helptip .popover-notification .bar-footer .icon.icon-left,.popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-alert,.popover-helptip .popover-notification .bar-header .icon-bottom-left.icon-help,.popover-helptip .popover-notification .bar-header .icon-left.icon-alert,.popover-helptip .popover-notification .bar-header .icon-left.icon-help,.popover-helptip .popover-notification .bar-header .icon.icon-bottom-left,.popover-helptip .popover-notification .bar-header .icon.icon-left,.popover-light .bar-footer #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-footer #menu .footer .popover-helptip .icon-left.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-light .bar-footer .popover-helptip #menu .footer .icon-left.icon-help,.popover-light .bar-footer .popover-helptip .icon-bottom-left.icon-alert,.popover-light .bar-footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-footer .popover-helptip .icon-left.icon-alert,.popover-light .bar-footer .popover-helptip .icon-left.icon-help,.popover-light .bar-footer .popover-helptip .icon.icon-bottom-left,.popover-light .bar-footer .popover-helptip .icon.icon-left,.popover-light .bar-footer .pull-left,.popover-light .bar-header #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-header #menu .footer .popover-helptip .icon-left.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-light .bar-header .popover-helptip #menu .footer .icon-left.icon-help,.popover-light .bar-header .popover-helptip .icon-bottom-left.icon-alert,.popover-light .bar-header .popover-helptip .icon-bottom-left.icon-help,.popover-light .bar-header .popover-helptip .icon-left.icon-alert,.popover-light .bar-header .popover-helptip .icon-left.icon-help,.popover-light .bar-header .popover-helptip .icon.icon-bottom-left,.popover-light .bar-header .popover-helptip .icon.icon-left,.popover-light .bar-header .pull-left,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-footer #menu .footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-notification .bar-footer .popover-helptip #menu .footer .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon-bottom-left.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon-left.icon-alert,.popover-notification .bar-footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-footer .popover-helptip .icon.icon-bottom-left,.popover-notification .bar-footer .popover-helptip .icon.icon-left,.popover-notification .bar-footer .pull-left,.popover-notification .bar-header #menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-header #menu .footer .popover-helptip .icon-left.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-notification .bar-header .popover-helptip #menu .footer .icon-left.icon-help,.popover-notification .bar-header .popover-helptip .icon-bottom-left.icon-alert,.popover-notification .bar-header .popover-helptip .icon-bottom-left.icon-help,.popover-notification .bar-header .popover-helptip .icon-left.icon-alert,.popover-notification .bar-header .popover-helptip .icon-left.icon-help,.popover-notification .bar-header .popover-helptip .icon.icon-bottom-left,.popover-notification .bar-header .popover-helptip .icon.icon-left,.popover-notification .bar-header .pull-left{margin-left:10px}.popover-light .bar-footer a,.popover-light .bar-header a,.popover-notification .bar-footer a,.popover-notification .bar-header a{font-size:14px;text-decoration:none;line-height:30px}.popover-light .has-footer,.popover-notification .has-footer{bottom:28px}.popover-light .has-header,.popover-notification .has-header{top:30px}.popover-light .item.unread,.popover-notification .item.unread{background-color:#ecf0f7!important;border-color:#dddfe2!important}.popover-light .item-avatar,.popover-notification .item-avatar{padding-top:12px;padding-bottom:8px;padding-left:76px;padding-right:10px;min-height:80px!important}#menu .footer .popover-light .item-avatar h4 i.icon-help,#menu .footer .popover-notification .item-avatar h4 i.icon-help,.popover-light .item-avatar h4 #menu .footer i.icon-help,.popover-light .item-avatar h4 i.icon,.popover-light .item-avatar h4 i.icon-alert,.popover-light .item-avatar h4 i.icon-help,.popover-notification .item-avatar h4 #menu .footer i.icon-help,.popover-notification .item-avatar h4 i.icon,.popover-notification .item-avatar h4 i.icon-alert,.popover-notification .item-avatar h4 i.icon-help{font-size:18px!important;line-height:12px!important;vertical-align:middle!important}.popover-light .item-avatar .item-content .item-image,.popover-light .item-avatar .item-content>img:first-child,.popover-light .item-avatar .item-image,.popover-light .item-avatar>img:first-child,.popover-notification .item-avatar .item-content .item-image,.popover-notification .item-avatar .item-content>img:first-child,.popover-notification .item-avatar .item-image,.popover-notification .item-avatar>img:first-child{top:12px;left:10px}.popover-light .button.button-small,.popover-notification .button.button-small{height:30px;font-size:12px;padding:0 5px!important;line-height:30px}.popover-invitation,.popover-network,.popover-peer-info{width:420px}.popover-wallets .item-avatar{padding-left:95px!important}#menu .footer .popover-wallets .item-avatar .icon-help:last-child,.popover-wallets .item-avatar #menu .footer .icon-help:last-child,.popover-wallets .item-avatar .icon-alert:last-child,.popover-wallets .item-avatar .icon-help:last-child,.popover-wallets .item-avatar .icon:last-child{display:none}.popover-endpoints .item .badge,.popover-peer-info .item .badge{right:16px!important}.popover-endpoints .item .badge.badge-secondary,.popover-peer-info .item .badge.badge-secondary{top:35px!important}.popover-unit{height:108px;max-width:115px}.view-notification .item.unread{background-color:#ecf0f7!important;border-color:#dddfe2!important}#menu .footer .view-notification ion-item h4 i.icon-help,.view-notification ion-item h4 #menu .footer i.icon-help,.view-notification ion-item h4 i.icon,.view-notification ion-item h4 i.icon-alert,.view-notification ion-item h4 i.icon-help{font-size:18px!important;line-height:12px!important;vertical-align:middle!important}.bar.bar-header .button.button-clear.button-icon i.ion-android-more-vertical,.bar.bar-header .button.button-clear.button-icon.ion-android-more-vertical,.bar.bar-header .button.button-icon.button-text i.ion-android-more-vertical,.bar.bar-header .button.button-icon.ion-android-more-vertical.button-text{padding-left:8px;padding-right:8px}#menu .footer .popover-helptip .bar .buttons.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-center.icon-help,#menu .footer .popover-helptip .bar .buttons.icon-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-bottom-right.icon-help,#menu .footer .popover-helptip .bar>.button.icon-center.icon-help,#menu .footer .popover-helptip .bar>.button.icon-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-bottom-right.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-center.icon-help,.bar #menu .footer .popover-helptip .buttons.icon-right.icon-help,.bar .buttons.pull-right,.bar .popover-helptip #menu .footer .buttons.icon-bottom-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-bottom-right.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-center.icon-help,.bar .popover-helptip #menu .footer .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon-bottom-center.icon-alert,.bar .popover-helptip .buttons.icon-bottom-center.icon-help,.bar .popover-helptip .buttons.icon-bottom-right.icon-alert,.bar .popover-helptip .buttons.icon-bottom-right.icon-help,.bar .popover-helptip .buttons.icon-center.icon-alert,.bar .popover-helptip .buttons.icon-center.icon-help,.bar .popover-helptip .buttons.icon-right.icon-alert,.bar .popover-helptip .buttons.icon-right.icon-help,.bar .popover-helptip .buttons.icon.icon-bottom-center,.bar .popover-helptip .buttons.icon.icon-bottom-right,.bar .popover-helptip .buttons.icon.icon-center,.bar .popover-helptip .buttons.icon.icon-right,.bar .title+.button:last-child,.bar .title+.buttons,.bar>.button+.button:last-child,.bar>.button.pull-right,.popover-helptip #menu .footer .bar .buttons.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-center.icon-help,.popover-helptip #menu .footer .bar .buttons.icon-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-bottom-right.icon-help,.popover-helptip #menu .footer .bar>.button.icon-center.icon-help,.popover-helptip #menu .footer .bar>.button.icon-right.icon-help,.popover-helptip .bar .buttons.icon-bottom-center.icon-alert,.popover-helptip .bar .buttons.icon-bottom-center.icon-help,.popover-helptip .bar .buttons.icon-bottom-right.icon-alert,.popover-helptip .bar .buttons.icon-bottom-right.icon-help,.popover-helptip .bar .buttons.icon-center.icon-alert,.popover-helptip .bar .buttons.icon-center.icon-help,.popover-helptip .bar .buttons.icon-right.icon-alert,.popover-helptip .bar .buttons.icon-right.icon-help,.popover-helptip .bar .buttons.icon.icon-bottom-center,.popover-helptip .bar .buttons.icon.icon-bottom-right,.popover-helptip .bar .buttons.icon.icon-center,.popover-helptip .bar .buttons.icon.icon-right,.popover-helptip .bar>.button.icon-bottom-center.icon-alert,.popover-helptip .bar>.button.icon-bottom-center.icon-help,.popover-helptip .bar>.button.icon-bottom-right.icon-alert,.popover-helptip .bar>.button.icon-bottom-right.icon-help,.popover-helptip .bar>.button.icon-center.icon-alert,.popover-helptip .bar>.button.icon-center.icon-help,.popover-helptip .bar>.button.icon-right.icon-alert,.popover-helptip .bar>.button.icon-right.icon-help,.popover-helptip .bar>.button.icon.icon-bottom-center,.popover-helptip .bar>.button.icon.icon-bottom-right,.popover-helptip .bar>.button.icon.icon-center,.popover-helptip .bar>.button.icon.icon-right{top:0!important}.bar.bar-header{padding-right:5px!important}.bar.bar-header .buttons-right span{margin-left:0!important}.bar .title+.buttons.buttons-right{right:5px}.button-icon{border-color:transparent;box-shadow:none!important}.button-small-padding{padding:0 7px!important}.button-text{color:grey!important;font-size:12px}.button-text.button-small{padding:5px 2px;font-size:12px!important}.button-text-positive{color:#387ef5!important}.button-text-stable{color:#b2b2b2!important}.popup-buttons .button.icon-left,.popup-buttons .button.icon-right{padding-left:32px!important;padding-right:32px!important;line-height:42px}.button-fab-bottom-left.has-footer,.button-fab-bottom-right.has-footer{bottom:64px!important}#home .logo{margin-top:15px;width:100%;background-position:center center;background-repeat:no-repeat}#home .center{float:none;text-align:center;display:inline-block}#home .center .button{display:inline-block}@media screen and (max-width:767px){#home .logo{height:96px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4AgRBwUf93UlLAAAIABJREFUeNrtnXd8VkX2/99z71PTewEChBK6VCnSAigIUlVgLeuqq7vq2nddf+vqV9a2rm0XXQvsVxF11Q0qJKFLCSBNqZESOoSEkoTwpD/t3vP7IyEkkEASsO3Xeb2e1+u5be7c85k5M/M558zAz+nn9HP6Of1gSf3UP2DSOxuuMUW1AbAoWfH5Pf33/ZTKb/lJS3+aaIba+mfN9A4FMOA24GcAGi4/0TI+IcIMJlxBlAbh4scGoOv4fVAOIAqXHQr8BeRl3I4nOZ1+CqaIMNkoDGqhVRT+ZOvQDwpAxhwCkkoomnmzKjhTc5NTJMhnR1UIAXYnIVJGuKYR6dHoa4libHI6VwHhUqlAS02rc5vptRdofs8JEfPAhd43OUV0QJ8zRXl/7gMamIalSgdTcZ+CXwOBgBtYpjTSMdipFC1N6ILCIbDT6mXVshvUwfryG71Q7BUVRJcUcHLzb5XvZwDqScNTZYipMQ1hWFVJj4vJGw47M5Zcqwrr6g+GXEVb5WGQMmmlwUm/TsbqsWp3XfkPSZNEzYIvY4zK+RmAmjV+nvQTjSeBsQAi7FXwFiHMyBim3A3NZ0SqxBqK0UAHUXztrWDx+imqouY9ySkSh5W45IlkTlPK/D8NQPJ86YrJC8C4qlP7gLUIZUojRgQNReiZ+0UoBE4oxXFMjiPkorMtY5wqODfvwenSyyKMFY1iND6rWet7p0tAEHQP0Nm5aIwq/j8HwLBUGSgaT4nJNUqhVZ32C2QrOI3iNEKRUpgihAGaQLiCSIF4ReWoqUY6DGxGsUlg1arNbGRaZe0eMk8SlMYvFRheO7PWjVJ5ZzrnfCcD8JOTMUkd/u8GYJpoyb25SgnXi3CzaEQowaqgHOEjMflrxkSOoJQ0JK8hPWiu6bQVoZuC7gJXAl0V1WDmK5iPMF88LM2YokpHpkmiT3GHKeQrgw8zJikXwLD50tvwUr76+rr7jZ80AIMXSrTu5zcCdwL7lRCCoj8gCDN0gyeXX69O1SfogT0J1PwEKRtBmARpGoHqw8ljJC8rSRtwz3Lp/7ts0bAKGLqJQxSdTKE3igEKoqu+1o3wmTL558qJamNyqvRB8VsMFmRMUvMABs+TzladoBXj1Nf/FQCMSJUrDMWDQAcFH5omu5XGe0A74CRwV8Z4Nf+czjHIEkCM3yRGCTEGROnq/DmLvNT+finY31Uf+tgMue6lrXW9X0ApaCnQT+BKBSFVFw4rxVzNZK5PZ6hSRPisvLhulMpLTpeOpkHE6omshwa0xB8jAEPSJFHBc5rCKiYvZUxQm4aly20ivAM4ET7TDe45U+uT0yVKhEQ0Wmsm4TXzig3A2j2SkE7hhMc6aR5sJTjQQuDL9yb32r1lTdifXvrYlTxmqnhNTISSKsF7vCbuMh+lJT7yT7kpOFlByapjxO0tpp/XoE1V9iUIS5TGQUwGicZbGePUv0d8IUk+jajVE9W6n9RMOHmuhCmNJ0whVmk8u3Kcyhq9UOxD0+TfItwMuJTirpXj1cfJKRI0PF36+qGdEoIUYFOYI1sT3j+GpJZBdIl00M6pE1nXu0KCgkCBw24Ns2pgrdT6te6NsNd+5sYqsW8v5NAr2zidU0p3FDeKcFrpfClwdfJ8aWFs4lVrXyzJC6RHxnVq208CgOR0uQW4yYTnV41T68+okwofnynFKIGDojFWPLiS58vVylfeRiSApBAcN7ahfY8oukY76KspAr5r1dg9gsQPh5N4rIwTf9vi25vpsvYTkylKyFEKm/Tk76qUJw0nbUd8IUnLr1d76+ufzoyyfjAABi+UaIufV0XYmbGF8WcKNOILiTQszAf6AxuUxt1K6IBuxqq/tn8wNj6hfPrsjNMxAQwH9Ka9/dJUdIzNG3fquS5xt954X9GGpEe27i+mv8DNaOzwO/jECneLnbZD5knF6onq6Hnf3pfINZD/gwEwLFWuF4PJuuLxZeNUdnUfME8SDI0VQDtN8ZnpY7aycFWbUJz3dNb6rM0c0ybt07cdFcd3Q9tOTXp3xyv64naXEx3bosnlT5n1GseO7qf/lf1Df92D/utOsPfZrWhuP10FksRkqa4Ypym6DEwV19oJqqTm87qgX5Mqzb6coI59r51w8kqxqGJeEEVRxhb+WrMZVtX8NUAn4H1RrOsQSuBDXRjSMZyxmsJaXlbC1GEJtEzsyJv/2fCDTAJdp/KYOqIVfQdfy7NvzK0+bwrmu1ms+WQ/3QXCAJcGN2BgWbGdZeeqnGHzZdTKsWpJU8qgNeWhUYslQkqYrWB+xnj1fM0CjUuXAMNCKtBJQUqonW9e7MtVbw/ixc4RTNIUVoCAwGDuffw1dmVuZH3G/B8EgDdeeBjTMHjgiem1haLQ7u7E0E+uxh/pYDsQZsAS00Kv5J70Oi8jk5yh6TLgeyn0iAWSlJwqc4akSeK513rPEOvQNFmQnCaSnCbpb+yQp8p8clTqSYZhyG3XdZLrB8eJ1+OW7zPt3bVFkjspeW/6Uxe8zxSRd3fLhuRU8VZ916JrPpP252mENHn8uyfM0iU5OU3mjV4oIXX2B2nyWnKayIj5svbbUzK/IYLYsXWdDOuEfDzzxe8VgLsm9ZDx/SLFXVHWoPt3FkrO8HQpqgIhe8h86XROXzh+SKr0/M5U0PA0GW4tK3wyOGfrDOf+jSF1gDNR4GGHTtbn19C8awTXNSTfLj0GcNWIibz/5jRcp/K+l1a8YuGn7N+9jYeffgu7o2Ej3s7hNH9jINkojgMJymRDcrokn7ke5WGBUtz4nQAwPE2GC9waULi/u453oWmRSeeg3wHhA02j4OPhxITaaNWYQjz05zdAYF1G+vcCQGH+CXr0TWbY6CmNeq5zOF1/2Z5vUBxQEBiUt2vFhLc35U56a8MOf8HG7cH5u64dvkBaXVYAhqfKEBPuc1i4F5QFwFQWZ03extSYK2B58ypOhTuIaKxAouNa8PGyg4y54dfnXzQ8cPrbyp8YlwWAG3/1MH+fvbJJz96exNhYBzsQVmt+N0r8zQS6CHTRvWVe0+CeywbA8HTpZWj8nmBuXTRGedxh8a9XhLR4VTT1KUDyLHEoJy8podNN7fimYzgdmyqUyOj4eq6Y4HFV/hB+6KQptBf70U7p2JRp1rLQaWJWICQg0uDhfb0TsZFfSIwXngnQuXnRMOVOXikObwm5JhxdcmuL7MkpYsuzMhlhSridzb/pxODv6JPBEVV72uIpwMidV3nGGoaWcOP3CkLrYLoMi2Pe5hxlqaNOfDN0Pv1Xwfomt4DeM8TqtTLdAvdVm+lcxAFoGnkgKt/OcKUxBgj45yDi1XfFrOp2COtU+VM6P5b0aHcGmxZ7mWmxuQS1F2SHIAc1C/MUTL2kFhAUzyuYvLpswllqAb0SANE4OTidnsogQjQmj23JmhDDlXwqr5zImGb8X0kFR3ZFjh7QdV7KfuJF59+rxqo3aswJ2jaUpNPqGE5ORdiRMUFtqkV5qUqrkkNh0YRYE661ahx5qBtXzXr9f7jp6jbMfusZvB73d//19kj0xNvRE29Ha3F2QFZ2bCOFuz+l+NDS7+zVecezeeLecdwxriu9i1eOtGq4lcnwIfMkocZt24f3pkejW0ByukQh9F81QT1SB+kYJhoet58edjvbPR6m3tOZrRaNNrfd9z+43eXMfnMaX3wwnfv+32uMmvirJn9kWUkRh/btoCDvGOVlxZiGgTMwGKczkBatk2iW0AbNtR78ZZW1KGoQWEPwlR3HXbgHW1D8ZRe8x11OyqxX+fDt51Cazp0PPkvPXlcFjN5DYdphWqC4HpgOoBQrBQYBWxpFxg1Ll2eC4MX0caq85vnJKWIrcHC7qRFlMXjXD390WBi9aAwdahi/2bdrCy/9+dfsz9pG+869ePz592jbsXuDPvDIgd0sTf2AtStSOXLgwjZxXbfQqWM7evdMYkRyf1r0+Q3KHklpzlo8rgNYnJGEtr3usgl/7Yo0XnnqLlynCxg68gYefupNwiJjADjt5vgNyzkoJvkEc1NG1YBFipmxaoL6VYMBGJYuYzA4tXKi2nge/5MqsSbcic5Jr8EcqyL3d13ZcWMi5xFQIsLy+R/z+vMPUlpymlETbuOex14hNDyqzgIcP3qQGa8+zuovv0DMxts1lKb45V2/545HXq5dDvdJMN2gB6HskU1TNyeO8sS94ziQtZ2kLr3543Pv1lmhHljL3B2nSBR4dNUEtbJKnikrx6kpZ+02otXl/KUBDEgRp0CzuoRfOfEiCkW8YbDVChN0RfGk1vStUyBKcfW4W0hZmc0v7vwjy+d/SvbBrDo/cP6cf/Hrid1ZteSzOoWv6ToRUXHExLckMDi0bnOMKfQZdH5tl9NbME98iRTvbHLND4+IISgkjKf/nsKMzzbV25pvbU+M0vAqmFKD0j5ek7BMn4+j3j7AbmMgQbxfX0FEo79mkm3qFGkmU0Y0J0tXNL9Q4R3OQH7z+xf5xa8fIyTs/Br47vQn+eid5887f+WgUQy55nr6DBxJbLNWKHVWSxa7TrE/axub1y3jq+XzyD6YRc/+w+l2ZXLjpev3gsV2wVusNjv/mJ1x0ayujKafVZHhUfRNnithGZOUS1NsFugNHAJwKuxUudvXAmBgqgSbGkdWD1P+egwvQZQQLFBs86FMnavv7EiDXfjqEn7KrFfPE377Tj25/8/TuaL34Avm1av/CHr1H8Hdj/6VzE2rCQyq0TJMH+RtAM2KihyAJl5Eq6PiuQ5T+t51+ALjsLfqT8DIZ0HTmtxSNIXlqjhKMo4Rr2AE8LloZCo/I6s1g6fuFqAFGjhXj1P1R5WU0kMJ2QCGheFhdnbGOoltamEzN69hxqu1qfN+Q8bwxsdfXVD4daUr+gypVy0oWxjYY1DWkHN1FmTNozy+M+VdhlBqFOCaMZjTsyfjP7y+ySCMSSAe8Boalc2xjP2mOktKWrW6HQ20pZkU1Jfp6IUSguA3tcoJtzIZOiaB0qYW0jQMpj97P6ZxllTr1X8Ez705r8G08IV7ZAtE9oDwrvXfszedshN7MOI7AOALbUZZt5F4midQuup/yH//Bjy7Gm+h6xVND4uiTKt0jSRjiirVwHlmFOm31M06WC40W/MIPXCzBQeJojAFBoxv3XSXkWULPubgnszq4+DQCP704mwsFuulCV78YFZpUEvAWcpC/JinNqJsYRT5Y9i/IZ3cfevJ37sJX2gkNpuV8NBg4uMiad48BqPtIKzFJyjbOpOib2YR3GkMzr6/bhhjonC0CSNv72muGJkuHZeOU9Ujj+IQguweyhpFxvVOlwBDkFVTVOnQdHEgBNl1fLHOSkqiKWnuv/9Z6/iOB/5CVGzzS674Zv4apLQyOkmLHowK7lB1wc/GFSn8Z+5KMjN3XnCY63TY6ZjUin5XdqFv906ElORSfGIDJR8sJqTbDTh6/uKi5RgQjWNfIYZXkQxkiapsAT6DYDOEokbR0QHQ0YAdZ4BS0KZdCCeaKqSjh/aQlXnW3zUgKOSSZssXSz6vhxeeuIsnnn6d7du+vegco8LtYWvmXt55dy6rN+7EHdMeHT8S1wxXbgb5H/4C39FvLphHvxiamQpDhG4ASqiYnCK6CeHR+eePgC7QAkQpIWzNOHW6Rt+VMDCu6X5E33xV22tj+OipBAQGXxZhK6WfsRVV16m//+Vevkz7d635Sdeu3YjWSwmIqyQNS0rLyD2Wz6Hs4xj+yn4pMMDJ4KsqO3ZPRGusJXkoDbyJnTi1/h84vw4ldNLroJ0viqRQOipFFpB0ZryVD07NT0h9gYF1CvTqdBIMk9wa02VBI/rKaKKaKqRvt66tddytz+UzH6joIajoIdXH+7O2seiLWdXHfXp259HHniA+Pp4Ti17FaF/bdl5e4WbL9j1s2rybhBax2G1n5we+4Bh0dxE2Vw7eZkmU+91437+eiDEvoMfV7ux1DUeIlfJiLy2SZ4nDVPjsFgK8Wv2apk4ADGhffILVtT5SiE4Mbpytt2Y6dzbcpUfT3GjchfswvSXojjDsYW1qXTu14wMMTxErl571pQ0KCOCZ51/C6XRinDqEFhzAuYbNAKeDQf27M6h/3UNawxEKKGynj+INT8Cb1Jv8L6cR2m0yzh61qf8YB95iL7qKpK0Ifr+DYAz8DaajJ6eIDeDcEE5dR7do2JsKwPGjB2upg/jmiU1jSo+tw3UgnfIT5+tjv/s0fncheSeqGy8tWrbE6aw0YRdvW4wvrkOT3ms4QjCcIdhclXkbid0oykqjbOOsWvclhqBVcWztAAwvzUwfpxoMwPEAWig/h8+honWR+lFsyPjfXVFWqwPW9Mtv3bIFNcMWnEBQjdlxbk4uHo8bTBOf99Ji8AxHKKbNgaWs0hfXaJFESU4GxYufqr6nZTCBCjRTiFGKQA0CNGv9zrvnqSAdmkf62Hh+t4xLqqC9upsNw187xnn8L+7hkaffrlttuMsROWs8DQoOa7IQIrvcWpmXOt8CGt5xMhheOsdvYF7VuZLSEv7xj79zb3I7jFadLhlkf0Ak1uITHM7ay5Ovfnz2wiPPAfC7WZlAN5QiBiEIDUfyWAozGtYCRCmw+wo2fjTx7Q2ZE9/a8OyZTlhMigwTz5kmcR6SFyC2bPbaNIjffwkB6kpHISh/KfiKzv7ED34PZM5myNjJxETHVD+yePEiHnrtAzZ8m41hXno4sC8kDoe/pO75xJrnWldJKEYUEZi4LxSDXKsFDF5IlDI5LUp1USKdDYujoKr2mwgej8Fxi0brZd82ToAWixWHM7BaDZUWuxr3xd5CEANR1kqOpyIHs6A2b6OFXQkHMiC+A3almPaXZ/jDY7+nvKzynYfzinj9nRQiwkMYPqQPw4b0IjQkqMkgxHXpxWcvhOCOru0muj8rv6hK2lFKiNNsHL0gkVerpvqI93s4hqan+QIiT/sCooKqxqGiwOfycbKpBQ4OPRv25XGX4/N6GjHT/aqS2y/cVM/QqAj2zodmHatVU6dOnXn7rRl06FDbVanwdDGfpa7gwcf/zjvvzuXQkWNNbIkKb2iz6k757GmbW4GhhAiBQKOU7AYDYGhE6BHkp/62z5/KI9p94g5pHjQsVTpg4EZhFFTQZOfN8MjaBOqhfTsuT89bfBLysiC27XmXWrZsyduvT+fhCb1JbFXbY8PwG3y1YTtPPTeT516axZbtexo/uLAFVgrRe3aSW64HlCqoUOBU4M2YokobDICYqIwqu4Cq9PHHhAla5UIZlmNlHG+qnDp07VPreHdmI8JwraFgi0DZzqGW8/ZC2TGIqN8IX/rNHPpeey3PPvkbnnniboYO6onNVpv8y9p3hNf++QmvvfkJ5RWN8+rwhjXHVlzZiixuF4UB7Q4KlJtCNIr9F7UlnPkzTURTGtXKvd1RVlIZ0TjeVBxDYd1f1PQW0Ll7/1rHWzYsb7jBI2YoWvy1qIhKK6jowagTx1AhzVGxvVABrRC9TnsH5cUnMavY1jaJzbn7VxN4/W+PMPX6q4kMr23m3LJtD8+//D5er6+RILTA5spFHT/M2sipG4ASTSNMGuAVUQ3AmuWEo6juHWf+VvkQlgARGrQX0DNP1T+huFjq2vOqWsfrVqRxKr8JDSp/F2rvfFTClajQjihni8qf7jx/tHJkM4SfT94GBQUwbvQgXnvhQaZMGlGLejhy9ATpi75qnCqyOFCmD79Yjd1uZ4VoVJhCgGayq8EAGD6CTX9tytTUSamiJiYqsB0oodxtNK0jbtE6iXYde9Qaip5LT5+tUqeh7NDZn1EOhhd2poBrN8S0bZAJ0bVvHf6o+ulu3aIzfsxgnnzs9lpqafW6xocFe8MS8LqNUkzQIECDALGwucEAmAZOo0YLAFg9Vu0W2KiEAYpKm+bxCpoctDzxlt/VOv7Pe6+wP+v87KQ8G7NgffVP9s2HnR9DRCwExzRwxlSBmA1bmSyxdTNGX3OWmzpVWERFI/sCS1kBJSGdjlT1pWGi8EWXXTx8tRoAXbCtnXC+uVHXmQVgSKVr4o5CmrySyKgJt9G8ZbuzMvJ5ee4PN1NYUI+ZoeAQ6tA6sJqVtV413HBeunkuRssuDb4/Pra284ApjXOFtx7OZH3XaXPFJEIUIUDhnCnKaLgK0jDrWphixRjWCOzXNKJNIfTLoxxpKgAWq41H//IOqob6OHJgNw/cMojc7KoBgwjkbEEdWQ+aF4luAVZH40m74lOYF3E7qZlycs+OLxx2G4EBzsZNCywBsuKkJU9pODGIEhqmqs+2AAOzngmHaML7CH6lMXRHIeUl3nPIukakXv1HcPv902qdO5Z9gDvHd2Xmn2+gZMPbqIAAiL8CFdQCZYtEaeeTsH6/j127dpK1+/wGmZ46j3U7D2IYDYuoyT56guWrzk7yrujarnEkYP5hPK1HHs8rIxQ4qTRClFx4BnweFaEM6lV6UR7m5zs5AfRAsXaXi4x+MdzeVBBuu/cpKspK+fTdl852Yh4Pn3zxBSmpqXTp0pUePXoSGxtLWGgYcApXkYvCwlOcPn2aPXuy2Lt3Lz6fjylTptKxU22Sbd+W1aSv3kzgsl307JZE506JtE6IIzoqHKfTjuE3KCop42ReIZu2ZbFy9ebqoaeuaYwbPahxLfvEPr4eO+sLthFnCLGa4pSCkkYB4HPWbbMEmDNFeZPTZSbC0yYMm3eEJf0u0hd6PW4++d+/0a5jDwaOmFDFQRRD7jfgLeG3o7uRGHQfr787m7LSs1S1YRhkZm4nM3N70xnLispvLyur4KsN2/lqw9m8lKYQs279rjTF7bdcV2vWXOH2sGffEXp0S6p7JOUrxxaeyEd7KVMKlwb3A6eFhjmvVQPgL+bC5EwQ71DM4yjafX2czNMessLtdceErUp/n3+88CiuIhe3Tp7MwHgPGG6w6BDaAgIigUhGTmxFnyEj+fiTj1i4YAEVFRWN07uaRljY+dR2YlwoAU5HnbPa+oTfLD6KX04dTbcutSmNNWu38cGni2jfNoG7fjWe5vHRta7bd6/BddOKPcfW4jAhFHCgyDFpmANDNaneO10CNp/jln5uGpouC5VJm0BKnX8IWHIwOUFPxnBXEmCmwZGj2bz81v+yc98BWrZqyeN//BOdOzdsJOLxuNm4cSPbt2/j4MGDuFwuiopcFBUX4XA4seg6ERGRxMTE0KplK9onJdGnTx/Cw88PyjyxdDplzTvw7c797Nx9iNzj+ZzMK8Tj8VHuduOw2XA47cRGR9AyIZY+PTrSMak1mna+jUFE2LhpF+//ewFl5RUM7HcFt0wdRXBQAHrZaUJLiuWZVu/965uT7PIL92iKr0VIUhr/WjlWvddgAOpzn66ZktPkDxoM1MTbv4slu/CVHsfbWjTsJSXFzJw5gwUL5xMYGMT9v7ufkSOvreVY+32mE0unY7Tpdlnz9Hi9pC5Yw4Ila9F1nRsnDOP6mCKyp6z75JGvtW+VSXNR3GFzu54ydfutFl/FGwOyImZPu0iYUrUKatDCpUKGqYg1lK3NPl98wsbCwgMDozydZ73/HosXL+Lmm27hl7+8DbvdwQ+bLj/wdpuNKZNGMGxQL979MJ2P5ywl8b67i6Zv1dYhmMB9CmYGFuz5W5Vc39sWap8LuC5bSavW10w1DVJ03Xi+uZzU3ut1MLqirMjqdlcQExPLjyHlL38Hb6uk7+4FhsHx1UvMlGs2PvxNAYUKJogwHgvtwg5vPMyZxac89vB5j/R0NZiOvliaM0UZAid9XpYj+to8M8ox80BEXkhIyI9G+AB253e74plz51LZPPKzF7YUsEmZtBRhLIp3KlfklVwgD+GkR/eYl72tDkuXEQgdxMpC8bIkkPKYvyV9a3YN80b8WAAwDm/kVOEBfCFxlz1v28HNbHWOWPHXwId+rwzaCkxDEeXU6dCUpY8bHZWwcjMrgf4Zo9VhCzxboZzlL+xt7Sv3qYofCwB6dBu00tOXPV/L6aPs8bXe96LzoRcsQjHCDUBXJTzU1HWnGx8WMk2ZArlXp0vL5RPUR6A+P0mUenF7UK78GBZzAFBWxDAuL6gVJRzM9uQ+Ff36g1FjyfDDJNG4EVi1crxKaWq+TYrL0U0+9MMdAA4Lj5mavnOddAualdm0ha8vyU2lrvxyt2NGXL5YYc1TYe7bnXviz60+/E20hy/z0+iJyWMiVFgUt11S3k15aPlEtUtB7OQU0ReNUR6Lg9tNpbs+qehrT93rb/SGCM899yzT/vL0ZRNYac5u/IH1h6aapsniZRvYmrn34v2Jz+vZvuPE8RcTZt4jm1maX4YVxf+KIkaDO2uuFPm9AVBZMmbnORkDsOwalW36uNOv2TxvFg801h4oOtrQbLJ272b16gzatml7eaRvmngqii6soZRi1dqt/Gt2Kn5//R6X5adPFW7a4cqb0fzlu8szgxdkPI0hUaQA3RW8u3K8+vySW1dTH1w5UW3UhGo/71XXq/Wm4n6/2Jh2alTZjv3HsrmIUUNEePmVlwgLC+cXv7jpssi/6Kt3MVt3vSgAv71jIsUlZaTVY//NOXLi6LrsgILprd6cMG9yzKKMaco/NJ3pShgHbKeABy6LervE+eZXyalS7W+yepxaaJg84cMa8MjpycXb9ufn4KufXlq6dDEHDx7g0Uf/gNVqveSPKft2MRWawrRd3JjSumU8/Xp3IW3hGlyus8xxhc9wbco8tn9rcfPD77d9cdTqCWpr1fD7TwoeUIqDaNyacYdy/+AArBivVkBtRnT1RPWxUjzjRwv8Q9ENheuP23dSdKxO8u2tN9+kQ8eODBp06cEaJRvnUOI6ihHXpsHP3HbTaFCK2Z8uwjQxdhdUbFuXWVp8yN593udRT47LGF05qEhOlWkivKAUuUrn4Yyx6jJ5lV0iAABYyTh3obqM8epdBY/4BdsTJ5P5oHTgEk4eEIyzjPes92dRUlrK43/806WNePIPULDoNUrtghEUwp5tAAAGFUlEQVTfuH4kNCSICdcOlm+27OLTpbuzj+Yq+9Ko+6Y+ctd9f1w2RRVNThHb0HR5F8XTqnJ2+4IdLutaOJcMQMYYlaM4P3Bj5XiVqsPvBDyzjrVo9Uf37Z8ZbvGRtx8xDfZk7ebaa68lMbFpgRpSWsDhea+ya+3nFLfqjBnUuOgpQ/DtK2Knpe2V3wQEBvuz9mXvndPmr/3/fWv7DaBkxBcSme9giRLuFDhqKl71CvMWjVGeywnAZaENe88Qa3ASel3bTA1Lky6m8A8NWkY5OfLWAHfXqJzF8Xhd+MJaYLU1LujGvfNLinN3IhaNl+fvYPO2LB6+Zyp9ejXM97/Yy6k9xWp/ToEhTrc3xir+bZ9y3UOLHhxWPXyu2tEpDUgEtuuK9/zC+lXjVb1hkpPXiXPOANwN2vum5uz6cgBQFc5UazY16c31d5tK3a+OblSGxfppSXyv6Hw319y00pH7SPeJ+8e08wy2HvwSXLkQFg22+iMmPftWU3J0J4a3FIlvjdHmiipScjuqAXWo2MupI6VyZF+pPd/qKmtpFSMyFHP9+63/duOKcSoXXqlZYW4Qk1lAMDBfUyzwC0dWjaNO1+wRqRLr0wgpdZHdWOFfNgDqVBGailPCFSgQ3XFUabwlgssPo17eSvS8w/aFL/Yd2zPCQTzHt4DrEHiLICwebEF49iynJGcvhq8EiWuF0bJhsV0iSsp8RmF+hco/WqEV5FQEFIeUF7XSff6wEMo1V0DCix9FPTC3chn6s04BoxZLhMfD6wK3AB4NnhfIFsEV42b5ucIdtVji3T76i5/M1RNUk3dw/X428xTApLmC40pYampcta+ITpOXU9E1gmVjE3odbxbbKzTMSnRwwdfxLH0lzlecazWtNt0SGIy3yivaFIVflN8veH2GuCt8ZoAgjv2FnoPuE/qJ0369zFviDQ7weqNElNUUPTpez7PkWdu/lt7s7qUZ33KMB5QJD57L8I7xeJlJ5RI8ezTFg6aQgOC3eFhSM8Z3SJokaopRHi85MW7SGuJ89Z33AXWlsW+va25VeksA5fcf87W6Kr9IiNUgVkFzEwYqoYdSJImiWAmrlWKbSG3/pK5Fa1t1KF07yO4rDfbruq5M06LhtyKK/VnbA0+dyHW069anMDK2ebkhyuO3Bm/7Kvz6uSedrY7iI+fMHmF1qo8vJNLQmY7iFgBRvKdrPGOYDFeg42Vxxg0qh2miDe3JUKUxVAnfSjCpGfUs7/OjAaAhaViqdFBWhpsmvUUYqIQSEZYpja+ViWmCXemV1iUBQ4zKEF8d/GiUmVBuMSnzaVSIjiuutGHugANSxOmw84Ao/h8QjuKAMnlI9/CVz8F4FA5lshIbfs3HOEORAKzvcIz5My/zDqw/+FaGk1NEL7TTxdRJEJP2UrmXZJgSFioL86PK2HSpzfwslS7a0J7coBR/qxrhVCC8FHpqawp+6eBxxPT1RLQoEUFTQrypOGwoPv9qbP3b4/7kAagBhC3PQXdlEmqCTdO5AhihBBuQgcY63c6GZdeooqYIflgvxgk8D3Sp6pVSLRq/17yU2gp3vWLxlvxSlGYUt7hyughzko6zeeb3sN/wj2472+SVYtErSPL7aC46OVYDq0+nj2bSTaCzUvgQdgBZunDEp5FjmJw4d3MdgIGpEmxT3GTCQwo6V53erjRWmIIPE4umKA3M29XO4i25GVT5vPv6BX6f3/sj3lFb1NXpJPhMOugKwzQ4yHZyPP0JsfvoDMQBsUqIEUUMEKZMSkRRpiBUoBuKrggOQFDsBP5jGqywKg4sn6CqvZcnvLOhsyZcIeCbd2//z38G4Jw0eqHYywxaIiRoGprh51iQjZyadthRiyXC42USMFVghKrc9rZQwQcoZmTUWMHqx5R+EgCcq6KC927/H01840CzidKDyyMSC3yOkK7KxFr1RZsVzAxSfJR+EXfLnwFoQprw1oZ/KqiOdyqN6ojfGbobWAUs1032+gTBxG+zUuaHcpuNitAi3HMmYzaFMviukoX/ghRQevz2tClhs3+KZdf+GwDQvUXHfqpl/2m2AI23BBZW61G/2vJTBeD/A62herFIRO47AAAAAElFTkSuQmCC);background-size:96px 96px}#home .footer{display:none}}@media screen and (min-width:768px) and (max-width:991px){#home .logo{height:144px;background-image:url(../img/logo_144px.png);background-size:144px 144px}#home .button{max-width:350px;margin-top:20px}}@media screen and (min-width:992px){#home .logo{height:200px;background-image:url(../img/logo_200px.png);background-size:200px 200px}#home .button{max-width:350px;margin-top:20px}}@media screen and (min-width:992px){.circle-bg-dark{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42MDgyNjEsIDAsIDAsIDAuNjA4MjYxLCAtMjAuMDg0OTc2LCAzLjI1NTczNikiPgogICAgPGc+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC43ODsiIGlkPSJwYXRoLTEwIiBkPSJNIDQxOS4xMzMgODUuNzM4IEMgNDE3LjI5NSA4NS43MzkgNDE1LjQ1NSA4NS43NTQgNDEzLjYxMSA4NS43NzggQyAzNTQuODUyIDg2LjU2MSAyOTkuMDIzIDk5LjE3NCAyNDguMzU4IDEyMS4zMiBDIDU4NC4xMjEgMTMuMjA2IDc5Ni4xNzUgMjExLjI2IDgzMS43IDUwOC43NzMgTCA4NDYuMzgzIDUwNy4xMjQgQyA4MTUuNTg2IDIzNS44MDEgNjUyLjQ3NyA4NS41ODggNDE5LjEzMyA4NS43MzggWiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjM3MywgMC4yNjY4NzgsIC0wLjI2Njg3OCwgMC45NjM3MywgODkuNTA1MjMxLCAtMTM2LjYxNTA2MSkiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDE7IiBpZD0icGF0aC0zIiBkPSJNIDE0Ni4wMzcgMTk0LjA2NSBDIDE0NC4yMDEgMTk0LjA2NiAxNDIuMzYxIDE5NC4wODEgMTQwLjUxNyAxOTQuMTA0IEMgODEuNzYgMTk0Ljg4OCAyNS45MzEgMjA3LjUwMyAtMjQuNzM2IDIyOS42NDggQyAzMTEuMDI5IDEyMS41MzEgNTIzLjA4MyAzMTkuNTgzIDU1OC42MDQgNjE3LjA5MyBMIDU3My4yODQgNjE1LjQ0MyBDIDU0Mi40OSAzNDQuMTIyIDM3OS4zODUgMTkzLjkxMyAxNDYuMDM3IDE5NC4wNjUgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMTgwOTg4LCAtMC45ODM0ODUsIDAuOTgzNDg1LCAtMC4xODA5ODgsIC0zOS4yOTg1ODEsIDcwNS44OTc1NDQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMSIgZD0iTSA0ODcuNzQ0IDE5My4wODQgQyA0ODUuOTA2IDE5My4wODUgNDg0LjA2NyAxOTMuMSA0ODIuMjIzIDE5My4xMjMgQyA0MjMuNDY0IDE5My45MDcgMzY3LjYzNSAyMDYuNTIgMzE2Ljk3NSAyMjguNjY4IEMgNjUyLjcyNiAxMjAuNTUyIDg2NC43NzUgMzE4LjYwNSA5MDAuMjk5IDYxNi4xMDkgTCA5MTQuOTc5IDYxNC40NiBDIDg4NC4xODQgMzQzLjE0NCA3MjEuMDgxIDE5Mi45MzUgNDg3Ljc0NCAxOTMuMDg0IFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE5OTk3LCAwLjc4NDYwNSwgLTAuNzg0NjA1LCAwLjYxOTk5NywgNTIzLjA2NzIzMSwgLTM0My4zMzE1MzkpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjg0OyIgaWQ9InBhdGgtMTIiIGQ9Ik0gMjk1Ljk2OSA0MzIuNzU3IEMgMjk0LjEzMSA0MzIuNzU4IDI5Mi4yOTMgNDMyLjc3MyAyOTAuNDQ5IDQzMi43OTcgQyAyMzEuNjg4IDQzMy41OCAxNzUuODYgNDQ2LjE5NCAxMjUuMTk4IDQ2OC4zNDEgQyA0NjAuOTU3IDM2MC4yMjYgNjczLjAwNSA1NTguMjggNzA4LjUyNiA4NTUuNzg2IEwgNzIzLjIwNyA4NTQuMTM5IEMgNjkyLjQxMiA1ODIuODE5IDUyOS4zMSA0MzIuNjA5IDI5NS45NjkgNDMyLjc1NyBaIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45Nzg4NDksIDAuMjA0NTg0LCAtMC4yMDQ1ODQsIC0wLjk3ODg0OSwgOTYzLjgyMDc5NiwgMTExNi4zNjcyOTMpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMyIgZD0iTSAxNTguMDM2IDE0OC44MyBDIDE1Ni4yIDE0OC44MzMgMTU0LjM2IDE0OC44NDYgMTUyLjUxNiAxNDguODcyIEMgOTMuNzU5IDE0OS42NTMgMzcuOTMgMTYyLjI2NyAtMTIuNzM0IDE4NC40MTEgQyAzMjMuMDIyIDc2LjMwMSA1MzUuMDc2IDI3NC4zNTIgNTcwLjYwNCA1NzEuODU3IEwgNTg1LjI4NiA1NzAuMjA4IEMgNTU0LjQ4MyAyOTguODkxIDM5MS4zOCAxNDguNjgzIDE1OC4wMzYgMTQ4LjgzIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM4NjE0LCAtMC45NDA5MjYsIDAuOTQwOTI2LCAwLjMzODYxNCwgLTExNS41OTUxNTgsIDQ4My43MDU5ODQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAxOyIgaWQ9InBhdGgtMTQiIGQ9Ik0gNTAxLjAxOSAyODguMjkyIEMgNDk5LjE4MSAyODguMjkzIDQ5Ny4zNCAyODguMzA4IDQ5NS40OTYgMjg4LjMzMSBDIDQzNi43MzYgMjg5LjExNSAzODAuOTA4IDMwMS43MjYgMzMwLjI0MyAzMjMuODc0IEMgNjY2LjAwNCAyMTUuNzU3IDg3OC4wNjIgNDEzLjgxMiA5MTMuNTg2IDcxMS4zMjIgTCA5MjguMjY4IDcwOS42NzMgQyA4OTcuNDY4IDQzOC4zNTIgNzM0LjM2MSAyODguMTQxIDUwMS4wMTkgMjg4LjI5MiBaIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2NDY1NiwgMC45ODYzNTEsIC0wLjk4NjM1MSwgMC4xNjQ2NTYsIDk4Mi44NTcyNjYsIC0yMzMuNDUyMDYzKSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC40OyIgaWQ9InBhdGgtMTUiIGQ9Ik0gMTkyLjk1NCAzNzYuNTIxIEMgMTkxLjExNSAzNzYuNTIyIDE4OS4yNzcgMzc2LjUzNyAxODcuNDMzIDM3Ni41NjEgQyAxMjguNjc0IDM3Ny4zNDQgNzIuODQ1IDM4OS45NTggMjIuMTgxIDQxMi4xMDMgQyAzNTcuOTQgMzAzLjk4OSA1NjkuOTg3IDUwMi4wNDUgNjA1LjUwNSA3OTkuNTUzIEwgNjIwLjE4OCA3OTcuOTA1IEMgNTg5LjM5MiA1MjYuNTg0IDQyNi4yOTUgMzc2LjM2OSAxOTIuOTU0IDM3Ni41MjEgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTMxNDA0LCAtMC4zNjM5ODgsIDAuMzYzOTg4LCAtMC45MzE0MDQsIDQxOS40OTkwMDYsIDExODIuNTk5ODA5KSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMTsiIGlkPSJwYXRoLTE2IiBkPSJNIDIyMS42MTQgNjMuOTczIEMgMjE5Ljc3NyA2My45NzYgMjE3LjkzOCA2My45OSAyMTYuMDk0IDY0LjAxNSBDIDE1Ny4zMzQgNjQuNzk1IDEwMS41MDYgNzcuNDA5IDUwLjg0MSA5OS41NTQgQyAzODYuNTk4IC04LjU1OSA1OTguNjUxIDE4OS40OTcgNjM0LjE3MyA0ODcuMDAxIEwgNjQ4Ljg1NCA0ODUuMzU0IEMgNjE4LjA1OCAyMTQuMDM3IDQ1NC45NTQgNjMuODI0IDIyMS42MTQgNjMuOTczIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwNDUyLCAtMC42NjA5MjUsIDAuNjYwOTI1LCAwLjc1MDQ1MiwgLTcwLjgwMzMyMiwgMjkwLjkyMDI3MykiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDAuNDsiIGlkPSJwYXRoLTE3IiBkPSJNIDQ0MS44ODggMzQyLjA5OCBDIDQ0MC4wNDcgMzQyLjA5OCA0MzguMjA3IDM0Mi4xMTQgNDM2LjM2MiAzNDIuMTM4IEMgMzc3LjYwMSAzNDIuOTIyIDMyMS43NjUgMzU1LjUzNSAyNzEuMTAzIDM3Ny42ODEgQyA2MDYuODg2IDI2OS41NjcgODE4Ljk0NCA0NjcuNjE1IDg1NC40NjIgNzY1LjEzMyBMIDg2OS4xNDIgNzYzLjQ4MyBDIDgzOC4zNTQgNDkyLjE1NCA2NzUuMjQyIDM0MS45NDggNDQxLjg4OCAzNDIuMDk4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjM1NjU4MiwgMC45MzQyNjQsIC0wLjkzNDI2NCwgLTAuMzU2NTgyLCAxMjU2Ljc1OTQ5MywgMTY5LjE4MjU1MikiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2MjQ5MywgMCwgMCwgMC43NjI0OTMsIDE5LjI5NDY0NywgLTcxNi4zMjI4MTUpIj4KICAgICAgICA8cGF0aCBkPSJNIDU2Ni40NjYgMTA4OS4xMzcgTCA1NjYuNDY2IDExNDguMjIyIEMgNTY1Ljg2NyAxMTQ4LjIxOSA1NjUuMjY3IDExNDguMjE3IDU2NC42NjcgMTE0OC4yMTcgQyA1NjEuNDgxIDExNDguMjE3IDU1OC4zMSAxMTQ4LjI1OSA1NTUuMTU0IDExNDguMzQxIEwgNTU1LjE1NCAxMDg5LjEzNyBaIE0gOTA4LjI5IDE0NzcuMTQ2IEwgOTU2Ljk4NyAxNDc3LjE0NiBMIDk1Ni45ODcgMTQ4OC40NTggTCA5MDguNTY5IDE0ODguNDU4IEMgOTA4LjUzOSAxNDg0LjY5MyA5MDguNDQ3IDE0ODAuOTIyIDkwOC4yOSAxNDc3LjE0NiBaIE0gNTY2LjQ2NiAxODM1LjAxMyBMIDU2Ni40NjYgMTg3Ni40NjcgTCA1NTUuMTU0IDE4NzYuNDY3IEwgNTU1LjE1NCAxODM0Ljg4NiBDIDU1OC4zMTggMTgzNC45NzMgNTYxLjQ5IDE4MzUuMDE3IDU2NC42NjcgMTgzNS4wMTcgQyA1NjUuMjY3IDE4MzUuMDE3IDU2NS44NjcgMTgzNS4wMTYgNTY2LjQ2NiAxODM1LjAxMyBaIE0gMjIwLjc3NSAxNDg4LjQ1OCBMIDE2OS42NTcgMTQ4OC40NTggTCAxNjkuNjU3IDE0NzcuMTQ2IEwgMjIxLjA4OSAxNDc3LjE0NiBDIDIyMC45MjEgMTQ4MC45MDkgMjIwLjgxNiAxNDg0LjY4IDIyMC43NzUgMTQ4OC40NTggWiIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgc3Ryb2tlOiBub25lOyIgYng6b3JpZ2luPSIwIDAiLz4KICAgICAgICA8cGF0aCBkPSJNIDc2MC4xMjEgMTE0My4zMTEgTCA3MTcuMzM2IDEyMTcuNDE3IEMgNzE1LjcyIDEyMTYuNTE4IDcxNC4wOTYgMTIxNS42MzIgNzEyLjQ2NSAxMjE0Ljc2MSBMIDc1NS4zMTggMTE0MC41MzcgWiBNIDgzMC4xMjIgMTMyNC4yMDMgTCA5MDAuNDI0IDEyODMuNjE0IEwgOTAzLjE5OCAxMjg4LjQxNyBMIDgzMy4wNCAxMzI4LjkyMyBDIDgzMi4wOCAxMzI3LjMzOSA4MzEuMTA3IDEzMjUuNzY2IDgzMC4xMjIgMTMyNC4yMDMgWiBNIDg0MC41OTkgMTY0MS4xMzcgTCA5MDMuMTk3IDE2NzcuMjc4IEwgOTAwLjQyNCAxNjgyLjA4MiBMIDgzNy45MTEgMTY0NS45OSBDIDgzOC44MjEgMTY0NC4zOCA4MzkuNzE3IDE2NDIuNzYyIDg0MC41OTkgMTY0MS4xMzcgWiBNIDcyNS4xNjggMTc2MS44NDMgTCA3NjAuMTIyIDE4MjIuMzg1IEwgNzU1LjMxOCAxODI1LjE1OCBMIDcyMC4zNzkgMTc2NC42NDEgQyA3MjEuOTg1IDE3NjMuNzIyIDcyMy41ODIgMTc2Mi43ODkgNzI1LjE2OCAxNzYxLjg0MyBaIE0gNDAzLjUzOCAxNzYwLjkzMiBMIDM2Ni40NTYgMTgyNS4xNTkgTCAzNjEuNjUzIDE4MjIuMzg2IEwgMzk4LjgwMiAxNzU4LjA0MiBDIDQwMC4zNzIgMTc1OS4wMTkgNDAxLjk1MSAxNzU5Ljk4MiA0MDMuNTM4IDE3NjAuOTMyIFogTSAyODkuNTggMTY0Mi42ODkgTCAyMjEuMzUgMTY4Mi4wODIgTCAyMTguNTc3IDE2NzcuMjc5IEwgMjg2Ljk0NCAxNjM3LjgwNyBDIDI4Ny44MDcgMTYzOS40MzcgMjg4LjY4NSAxNjQxLjA2NSAyODkuNTggMTY0Mi42ODkgWiBNIDI5NC4zNTQgMTMzMi4xNjggTCAyMTguNTc2IDEyODguNDE3IEwgMjIxLjM1IDEyODMuNjE0IEwgMjk3LjIxMyAxMzI3LjQxNCBDIDI5Ni4yNDYgMTMyOC45OSAyOTUuMjkzIDEzMzAuNTc1IDI5NC4zNTQgMTMzMi4xNjggWiBNIDQwNi4wNzkgMTIyMC4yNTkgTCAzNjEuNjUzIDExNDMuMzExIEwgMzY2LjQ1NyAxMTQwLjUzNyBMIDQxMC44ODkgMTIxNy40OTUgQyA0MDkuMjc2IDEyMTguNDAzIDQwNy42NzMgMTIxOS4zMjQgNDA2LjA3OSAxMjIwLjI1OSBaIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBzdHJva2U6IG5vbmU7IiBieDpvcmlnaW49IjAgMCIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdCB4PSI0MjkuMzY3IiB5PSI0MjUuOTc5IiB3aWR0aD0iMjAuMDAzIiBoZWlnaHQ9IjIxLjczNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTkxIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAwLjk5OTk5OSwgLTMwMS4zNzcwNzUsIC0yMTkuNDk4NDM0KSIvPgogICAgPHJlY3QgeD0iNDQ2Ljg1MyIgeT0iMjUuNDYyIiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05MyIvPgogICAgPHJlY3QgeD0iLTEzNS45NTYiIHk9IjYwNS4xNDEiIHdpZHRoPSIzOS44NTEiIGhlaWdodD0iMzkuODUxIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk5LCAwLCAwLCAxLCA4NDYuMTc2NzU2LCAtMzk0Ljk1NjAyNCkiLz4KICAgIDxyZWN0IHg9IjIyNS43NzkiIHk9IjY4OS44MzYiIHdpZHRoPSIyNS45OSIgaGVpZ2h0PSIyNS45OSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk1Ii8+CiAgICA8cmVjdCB4PSI1OTQuMDEzIiB5PSI3MzcuMTQyIiB3aWR0aD0iMjAuNzkyIiBoZWlnaHQ9IjIyLjUyNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk2Ii8+CiAgICA8cmVjdCB4PSIzODcuMjM1IiB5PSI0NzkuMzk3IiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05OCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDEsIDAsIDAsIDAuOTk5OTk5LCAzNjUuMjc0OTY2LCA3OS4yOTUyNDEpIi8+CiAgICA8cmVjdCB4PSI0MjEuOTYyIiB5PSI3NzUuOTM3IiB3aWR0aD0iMzIuOTIiIGhlaWdodD0iMzQuNjUzIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTkiLz4KICAgIDxyZWN0IHg9Ii02Ni45MzkiIHk9Ii01NjguOTc4IiB3aWR0aD0iMjAuODY3IiBoZWlnaHQ9IjIwLjc5MiIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTEwMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEsIDAsIDAsIDAuOTk5OTk3LCAzMS4zNTY5MjgsIDk4NC43MzYzMDYpIi8+CiAgPC9nPgo8L3N2Zz4=);background-repeat:no-repeat;background-position:-725px -145px;background-size:1024px 1024px}}.gray,.popover-helptip .button-close,.popover-share .bar-footer .button-close,.popover-share .bar-header span{color:grey!important}.gray b,.popover-helptip .button-close b,.popover-share .bar-footer .button-close b,.popover-share .bar-header span b{color:grey!important}.gray a,.icon-help a,.popover-helptip .button-close a,.popover-share .bar-footer .button-close a,.popover-share .bar-header span a,.positive a,.text-editable:hover a{color:inherit}.gray a:hover,.icon-help a:hover,.popover-helptip .button-close a:hover,.popover-share .bar-footer .button-close a:hover,.popover-share .bar-header span a:hover,.positive a:hover,.text-editable:hover a:hover{color:inherit}.gray a:visited,.icon-help a:visited,.popover-helptip .button-close a:visited,.popover-share .bar-footer .button-close a:visited,.popover-share .bar-header span a:visited,.positive a:visited,.text-editable:hover a:visited{color:inherit}.item a{text-decoration:none}.no-padding{padding:0!important}.avatar-member{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAQAAABpN6lAAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgBA0LKSJACf7RAAAFqElEQVR42u2dbUjdZRjGf+c4dTndFnO+TRcD3ZIxdVlJL2PSIHDZBqtRaINojWRrgR8a4fDbIOrzoIKIMay2iGpQsg0y4xRZIk5i1NTaik3TZeRcvmzl0wc7qTPz6Lnv5/kfz/86XzxyuM59Xf/r//o893MCBqtIoYgSSsgjndWkk8RV+v959dFPP9/wm82CAtYM2MCTPMZGgnN87iZNvMdH1mww+q8Es9e0m/nhhjltnjG361enL3+HOT9P8ZMYNC+YhFg2IN2cWbD4MNrN3bFqQIm5FLV8Y4wZMbtj0YBdZlhEvjHGjJsXY82A+8yomPwJ1OhUqnMazKOVTGHOUe7lW/lS5zorLwSJnBKXD0s5SUpsGHCAzQqsUMgr8qTyu8AqulmpYgCMcQd9spTyCahTkw/JHJCmlE5AIj2kqxkAA6xlWJJQOgEVqvJhFY/LEkobUKUqH2Cbtw0oVTdgqyyd7DEgiWES1C1YxyU5MtkEFFiQD/dLkskacKcF+ZAb7waIXmbHogEZ3jVANJyxaEDAigHJ8W6AKDRuh2MKfgJcF+AafgJ8A+IcfgJcF+AafgJcF+AafgJE2URvU2aFqM2SzwSXM8ASCwaMkc9lKTLJBNRbkQ/JvCRHJpeANPpZasUAuEa21PiQXAJ2WJMPy9ktRSVnwBPW5IPgCJScAXdZNSDHewbcsGpAmvcMGLVqgNhkGTkDfrVqQLv3DHjfqgGnpYjkrgMyuGLpQgigkO9liOQS0M+H1uS/JSVf9l5gBV9RaEH+TxRxTYpM8l5gkEcZUJc/zB45+dK3wz9QhW4LiuERQpKE0k+EzvKuqgENNMsSyj8SO6lqwFFpQvmpskv4kTwl+e3ydxzyCfhTfiv9i9flKTX6BVZymWUK8ofI4bo0qcZj8d85psAKDfLytRonC7ig8Ii8hA75UnUGRrr4RJyzRUO+3sjQq8J8hjqdQrUMCAkfsV/jM51C9Zqnl3GOfCGuixRpHABBc3D0D/bwlwiTYa+WfN3R4RZeFuFRiz9orx+QSEvUF6+K8Qft+QE3eSpqDsX4g40VJKL9AuU5B/4MEdcFuIZvgOsCXEPbgFQPMDg1INsDDL4BLg2IfqRIeaxJ24CdHmD4X+heCaZxNerJk2OsZkivRN0EVAvMHU2mWrNEzQSk0C1yCOslX3bViKnQTECt0BE8m1q9IvUSUEaz2NTJUcr5OrYMyKWVLEG+X7hHboL0VOjsArk0isqHLBp1WrM1DCijlU3irJtopcz7BqRwmGbhrR9GFs0cFl9PTHBpujRTY3qEF9GbiR5TY9K8tJxeKtlkU8hOHrLUMgNjNHGK7+ilN9pHpvMxYAXVPKu0Upwc2nmTtxmM+PMRRiXB7DcD6vGWwoDZH+lqtJEl4EGOUux6084THTzPF3N/bO6zQA4NhGJOPhQToiGCxoo5InLQDLnOc1QYMgcXvgsk8QZPu96QAjjGc7P3s8xuQAYf8IDr2oXwJbvon58BG2lkreu6BfEz2zkfuQEb+FxhYVy36GMrFyIzYB0h1riuVwFX2MLFW/858zSYR9OilA9raJo5i/nWBGQSosB1pYroYsv0lYmnJyDIiUUtHwo4MV3zdAPqKXddoTrKqZ/6duouUM6ncTFcPs62yb6TSQPS6ZBrSfY4eigOd7qGt3iA43EjH3I4Hp58FTZgHxWuq7KKCvZN/DGxC6TSveiu/OZCH/lcDyfgUNzJh0wOwUQCcujS+PEKz2OYAnqCwJG4lA8pHIGAKaI9Ls7+/4VxNgfMGR52XYdDnA0Yyz846DXEa/h9A3wDfAN8A3wDfAOAIL2uS3CK3iBtrmtwira4NyBg1nOO21zX4QgjlATp1OrMjwHU0RkwEOBjtruuxQEaqcQEAUMltYy4rscqRqilEjN1XGA9VZRSqt2k5By9tNHGO3ROvP0bpkYvBeY8k00AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDQtMTNUMTE6NDE6MzQrMDI6MDCAxbwoAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA0LTEzVDExOjQxOjM0KzAyOjAw8ZgElAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=)}.avatar.disable{opacity:.7}.avatar-wallet{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAQAAABpN6lAAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgBA0JMBOJU4OdAAAB2klEQVR42u3au0ocUQCH8e+IxFRKUohrkG0Eu4BiLrCFDxDBNtjoI1gYTJnGQrRInc4HyBuopNHgBVZIwCJFsHBXLURtQiIyKYyFN3B3zJyd3e/X7e7MmXP+e26zOyBJkiRJkiRJkiRJkiRJkppVSF9E0sk0r+jKuOYnrLMQTqMHkHSzQTHS17fLy3CYroi21JWYj9Z8KDIfvwdUKAC7bGfc+CH6gGrojTyJJBemMr/u+4sLpy2njRZnAAZgAK2t/YHKGUzeZlzz5w2yFU6/EKVsQHAIGIABGIABGIABRN4ILbOVcc1fM9IQCfp7gHOAARiAAbgMXpuhH/GJ0brK/sG78OVfKR0cXPnsQ/iYkwAYY6LOM4eZpXR5q3/t77bH+RkCO5HObZQeEL4nQ7ypcwh8boIAIJQpuwoYQMsugwBJ/73L/h1+3vr+OYtXXn/Lzz7gCV8ZqOH4LUrhz4155IzJvA6B0VqaDwzHu7f/PwEsc1zT8RXWmmoOCJWkl9L95wBWbw6AvO8DfrHkMmgABmAABtDw0j8gUaWHeA9K7odC7GVwhXGgGOmB2ZX4PaDAJs8i9d89XoRq5AAgecoMg3Rm3PhTysyFIyRJkiRJkiRJkiRJkiRJku7wFyuiadmIs5Q9AAAAAElFTkSuQmCC)}.popup-container.confirm .popup,.popup-container.warning .popup{min-width:250px!important;width:350px!important}.popup-container.confirm .popup-head h1,.popup-container.confirm .popup-head h2,.popup-container.confirm .popup-head h3,.popup-container.confirm .popup-head h5,.popup-container.confirm .popup-head h6,.popup-container.confirm .popup-head p,.popup-container.warning .popup-head h1,.popup-container.warning .popup-head h2,.popup-container.warning .popup-head h3,.popup-container.warning .popup-head h5,.popup-container.warning .popup-head h6,.popup-container.warning .popup-head p{color:#fff}.popup-container.warning .popup-head{background-color:#ef473a}.popup-container.confirm .popup-head{background-color:#387ef5}body{--refresher-bg-height:100px;--refresher-background-color:inherit}.refresher-positive-900-bg{--refresher-background-color:#1A237E}.refresher-dark-100-bg{--refresher-background-color:#555}.platform-android .refresher-dark-100-bg:before,.platform-android .refresher-positive-900-bg:before{background-color:var(--refresher-background-color);position:absolute;display:block;top:0;width:100%;height:var(--refresher-bg-height,100px);z-index:-10;content:" "}.platform-android .scroll-refresher{z-index:50}.platform-ios .refresher-dark-100-bg,.platform-ios .refresher-positive-900-bg{background-color:var(--refresher-background-color)!important}.platform-ios .refresher-dark-100-bg .scroll,.platform-ios .refresher-positive-900-bg .scroll{background-color:#fff;bottom:auto;min-height:100%}.refresher-dark-100-bg .scroll-refresher .ionic-refresher-content,.refresher-light .scroll-refresher .ionic-refresher-content,.refresher-positive-900-bg .scroll-refresher .ionic-refresher-content{color:#fff}.refresher-dark-100-bg .scroll-refresher .spinner,.refresher-light .scroll-refresher .spinner,.refresher-positive-900-bg .scroll-refresher .spinner{stroke:#fff;fill:#fff}.view-wallet{--refresher-bg-height:200px}.view-wallet .hero{height:200px}.view-wallet .hero h4:after{content:' ';display:inline-block}.view-wallet .item-text-wrap{white-space:normal!important}.view-wallet .item .comment{font-style:italic!important}.popover-helptip .view-wallet .item h3 .button-close,.popover-share .bar-footer .view-wallet .item h3 .button-close,.popover-share .bar-header .view-wallet .item h3 span,.view-wallet .item h3 .gray,.view-wallet .item h3 .popover-helptip .button-close,.view-wallet .item h3 .popover-share .bar-footer .button-close,.view-wallet .item h3 .popover-share .bar-header span{font-size:11px!important}.view-wallet .list .item span{display:inline}.view-wallet .item-divider .badge{top:16px!important}.view-wallet .item.item-wallet-event{padding-top:5px;padding-bottom:5px;min-height:30px;max-height:auto;height:auto}.view-wallet .item.item-wallet-event:last-child{min-height:48px}#menu .footer .view-wallet .item.item-icon-left.item-wallet-event .icon-help,.view-wallet .item.item-icon-left.item-wallet-event #menu .footer .icon-help,.view-wallet .item.item-icon-left.item-wallet-event .icon,.view-wallet .item.item-icon-left.item-wallet-event .icon-alert,.view-wallet .item.item-icon-left.item-wallet-event .icon-help{font-size:17px;height:18px;top:6px}.view-identity .qrcode,.view-wallet .qrcode{position:absolute;display:block;top:0;right:0;width:0;height:0;background:#fff;z-index:1;-webkit-backface-visibility:hidden!important;backface-visibility:hidden!important;-webkit-transition:all .5s ease-out!important;transition:all .5s ease-out!important;overflow:hidden}.view-identity .qrcode img,.view-wallet .qrcode img{display:float;float:right;width:0;height:0;z-index:1;transition:all .5s ease-out!important}.view-identity .qrcode.on,.view-wallet .qrcode.on{width:50px;height:50px;padding:3px;margin:7px}.view-identity .qrcode.on img,.view-wallet .qrcode.on img{width:44px;height:44px}.view-identity .qrcode.on.active,.view-wallet .qrcode.on.active{margin:0!important;padding:10px;width:200px;height:200px}.view-identity .qrcode.on.active img,.view-wallet .qrcode.on.active img{width:180px;height:180px}@media screen and (max-width:991px){.view-identity .hero.hero-qrcode-active h1,.view-identity .hero.hero-qrcode-active h2,.view-identity .hero.hero-qrcode-active h3,.view-identity .hero.hero-qrcode-active h4,.view-identity .hero.hero-qrcode-active h5,.view-identity .hero.hero-qrcode-active i.avatar,.view-wallet .hero.hero-qrcode-active h1,.view-wallet .hero.hero-qrcode-active h2,.view-wallet .hero.hero-qrcode-active h3,.view-wallet .hero.hero-qrcode-active h4,.view-wallet .hero.hero-qrcode-active h5,.view-wallet .hero.hero-qrcode-active i.avatar{margin-right:200px}}.popover-wallet-actions{height:400px}@media screen and (max-width:991px){.view-wallet-tx{--refresher-bg-height:100px}.view-wallet-tx .hero{height:100px}}@media screen and (min-width:992px){.view-wallet-tx{--refresher-bg-height:140px}.view-wallet-tx .hero{height:140px}}.view-wallet-tx .item-text-wrap{white-space:normal!important}.view-wallet-tx .item .comment{font-style:italic!important}.popover-helptip .view-wallet-tx .item h3 .button-close,.popover-share .bar-footer .view-wallet-tx .item h3 .button-close,.popover-share .bar-header .view-wallet-tx .item h3 span,.view-wallet-tx .item h3 .gray,.view-wallet-tx .item h3 .popover-helptip .button-close,.view-wallet-tx .item h3 .popover-share .bar-footer .button-close,.view-wallet-tx .item h3 .popover-share .bar-header span{font-size:11px!important}.view-wallet-tx .list .item span{display:inline}.view-wallet-tx .item-divider .badge{top:16px!important}.stable-100-bg{background-color:#f2f2f2!important}.item-tx{border-top:solid 1px #d3d3d3!important;padding-bottom:6px;padding-top:8px;margin:0!important}.item-tx .badge-energized{background-color:rgba(255,201,0,.3);color:#888!important}.item-tx .badge{right:1%!important;top:13px}.item-tx .badge-white{background-color:#fff}.item-tx .vertical-center{position:absolute;top:30%;width:40%}.item-tx .width-cup{width:175px}.expert-mode .item-tx .item-note{top:8%}.expert-mode .item-tx .badge-secondary{top:calc(8% + 23px)!important}.view-identity{--refresher-bg-height:200px;--refresher-background-color:#555}.view-identity .member{--refresher-background-color:#1A237E}.view-identity .hero{height:200px;background-color:var(--refresher-background-color)}.card .card-header{font-size:90%;opacity:.8}.card .stable-900-bg,.card.stable-900-bg,.item .stable-900-bg,.item-complex .item-content .stable-900-bg,.item-radio .item-content .stable-900-bg,.item.stable-900-bg{background-color:#e0e0e0!important}.card .item{background:inherit}.card .stable-bg,.card.stable-bg,.item .stable-bg,.item-complex .item-content .stable-bg,.item-radio .item-content .stable-bg,.item.stable-bg{background-color:#f8f8f8!important}.card .card-header{padding-top:5px!important;padding-bottom:0!important;min-height:25px}.card .item .card-footer{margin-bottom:5px}.card .card-avatar .avatar,.card.card-avatar .avatar{box-shadow:0 3px 4px 0 rgba(0,0,0,.26);top:7px;background-color:#d9d9d9}.card .card-avatar img.avatar,.card.card-avatar img.avatar{border:0;min-height:54px;min-width:54px}.card .card-avatar .item.item-avatar,.card.card-avatar .item.item-avatar{padding-top:10px;padding-bottom:2px;min-height:45px!important;margin-bottom:1px}.card .card-avatar .card-footer,.card.card-avatar .card-footer{padding-left:88px;overflow:hidden}#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-center.icon-help a,#menu .footer .popover-helptip .card .card-avatar .card-footer .icon-right.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-center.icon-help a,#menu .footer .popover-helptip .card.card-avatar .card-footer .icon-right.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-center.icon-help a,.card .card-avatar .card-footer #menu .footer .popover-helptip .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-center.icon-help a,.card .card-avatar .card-footer .popover-helptip #menu .footer .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-center.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-center.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon-right.icon-alert a,.card .card-avatar .card-footer .popover-helptip .icon-right.icon-help a,.card .card-avatar .card-footer .popover-helptip .icon.icon-bottom-center a,.card .card-avatar .card-footer .popover-helptip .icon.icon-bottom-right a,.card .card-avatar .card-footer .popover-helptip .icon.icon-center a,.card .card-avatar .card-footer .popover-helptip .icon.icon-right a,.card .card-avatar .card-footer .pull-right a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-center.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-bottom-right.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-center.icon-help a,.card.card-avatar .card-footer #menu .footer .popover-helptip .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-center.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-bottom-right.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-center.icon-help a,.card.card-avatar .card-footer .popover-helptip #menu .footer .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-center.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-bottom-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-center.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-center.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon-right.icon-alert a,.card.card-avatar .card-footer .popover-helptip .icon-right.icon-help a,.card.card-avatar .card-footer .popover-helptip .icon.icon-bottom-center a,.card.card-avatar .card-footer .popover-helptip .icon.icon-bottom-right a,.card.card-avatar .card-footer .popover-helptip .icon.icon-center a,.card.card-avatar .card-footer .popover-helptip .icon.icon-right a,.card.card-avatar .card-footer .pull-right a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-center.icon-help a,.popover-helptip #menu .footer .card .card-avatar .card-footer .icon-right.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-center.icon-help a,.popover-helptip #menu .footer .card.card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-center.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-center.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon-right.icon-alert a,.popover-helptip .card .card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card .card-avatar .card-footer .icon.icon-bottom-center a,.popover-helptip .card .card-avatar .card-footer .icon.icon-bottom-right a,.popover-helptip .card .card-avatar .card-footer .icon.icon-center a,.popover-helptip .card .card-avatar .card-footer .icon.icon-right a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-center.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-bottom-right.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-center.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-center.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon-right.icon-alert a,.popover-helptip .card.card-avatar .card-footer .icon-right.icon-help a,.popover-helptip .card.card-avatar .card-footer .icon.icon-bottom-center a,.popover-helptip .card.card-avatar .card-footer .icon.icon-bottom-right a,.popover-helptip .card.card-avatar .card-footer .icon.icon-center a,.popover-helptip .card.card-avatar .card-footer .icon.icon-right a{margin-right:8px}.a.underline:active,.underline a:active,.underline a:focus,.underline a:hover,a.underline:focus,a.underline:hover{outline:1px!important;text-decoration:underline!important}.card-avatar-small .card,.card-avatar-small .card .card-avatar,.card-avatar-small .card.card-avatar,.card-avatar-small.card{min-height:45px}.card-avatar-small .card .avatar,.card-avatar-small .card .card-avatar .avatar,.card-avatar-small .card .card-avatar .item-avatar .avatar,.card-avatar-small .card .item-avatar .avatar,.card-avatar-small .card.card-avatar .avatar,.card-avatar-small .card.card-avatar .item-avatar .avatar,.card-avatar-small.card .avatar,.card-avatar-small.card .item-avatar .avatar{box-shadow:0 2px 2px 0 rgba(0,0,0,.26);height:30px!important;width:30px!important;left:5px!important}.card-avatar-small .card .card-avatar .item.item-avatar,.card-avatar-small .card .item.item-avatar,.card-avatar-small .card.card-avatar .item.item-avatar,.card-avatar-small.card .item.item-avatar{min-height:25px!important;padding-left:42px!important}.card-avatar-small .card .card-avatar .card-footer,.card-avatar-small .card .card-footer,.card-avatar-small .card.card-avatar .card-footer,.card-avatar-small.card .card-footer{padding-top:0;padding-left:42px!important}.gallery .card-gallery,.gallery .card.card-gallery{margin-bottom:15px!important;float:left;display:block}.gallery .card-gallery img,.gallery .card.card-gallery img{max-height:150px}.gallery .card-gallery-new{max-height:199px}.list .item.text-left{text-align:left!important}.list .item.large-button-bar,.list .item.text-center{text-align:center!important}.list .item.text-right{text-align:right!important}.list .item-divider.item-divider-top-border{border-top:solid 1px rgba(0,0,0,.12)}.lookupForm .list .item.item-avatar{min-height:80px!important}.lookupForm .list .item.item-avatar.item-checkbox .item-content{padding-left:47px;min-height:auto!important;height:auto!important}.fade-in{opacity:0;-webkit-transform:translate3d(-30px,1px,0);-webkit-transition:all 1s ease-in-out}.fade-in.on{opacity:1;-webkit-transform:translate3d(0,0,0)}.item-avatar{min-height:80px!important}.item-avatar .item-content i.item-image:first-child,.item-avatar .item-content img.item-image:first-child,.item-avatar .item-content>i:first-child,.item-avatar .item-content>img:first-child,.item-avatar i.item-image:first-child,.item-avatar img.item-image:first-child,.item-avatar-left .item-content i.item-image:first-child,.item-avatar-left .item-content img.item-image:first-child,.item-avatar-left .item-content>i:first-child,.item-avatar-left .item-content>img:first-child,.item-avatar-left i.item-image:first-child,.item-avatar-left img.item-image:first-child,.item-avatar-left>i:first-child,.item-avatar-left>img:first-child,.item-avatar>i:first-child,.item-avatar>img:first-child{color:#d9d9d9;background-color:#f8f8f8;border:solid 1px #d9d9d9;overflow:hidden!important;font-size:45px!important;line-height:56px;width:100%!important;max-height:56px!important;max-width:56px!important;top:12px!important}#menu .footer .item-avatar .item-content>.icon-help:first-child:before,#menu .footer .item-avatar .item-image.icon-help:first-child:before,#menu .footer .item-avatar.item-icon-right .icon-help:first-child:before,#menu .footer .item-avatar>.icon-help:first-child:before,.item-avatar #menu .footer .item-content>.icon-help:first-child:before,.item-avatar #menu .footer .item-image.icon-help:first-child:before,.item-avatar .icon.item-image:first-child:before,.item-avatar .item-content>.icon-alert:first-child:before,.item-avatar .item-content>.icon-help:first-child:before,.item-avatar .item-content>.icon:first-child:before,.item-avatar .item-image.icon-alert:first-child:before,.item-avatar .item-image.icon-help:first-child:before,.item-avatar.item-icon-right #menu .footer .icon-help:first-child:before,.item-avatar.item-icon-right .icon-alert:first-child:before,.item-avatar.item-icon-right .icon-help:first-child:before,.item-avatar.item-icon-right .icon:first-child:before,.item-avatar>.icon-alert:first-child:before,.item-avatar>.icon-help:first-child:before,.item-avatar>.icon:first-child:before{width:56px!important}#menu .footer .item-avatar.item-icon-right .icon-help:last-child,#menu .footer .item-avatar.item-icon-right.ink .ion-ios-arrow-right.icon-help,.item-avatar.item-icon-right #menu .footer .icon-help:last-child,.item-avatar.item-icon-right .icon-alert:last-child,.item-avatar.item-icon-right .icon-help:last-child,.item-avatar.item-icon-right .icon:last-child,.item-avatar.item-icon-right.ink #menu .footer .ion-ios-arrow-right.icon-help,.item-avatar.item-icon-right.ink .icon.ion-ios-arrow-right,.item-avatar.item-icon-right.ink .ion-ios-arrow-right.icon-alert,.item-avatar.item-icon-right.ink .ion-ios-arrow-right.icon-help{left:auto}.item.item-icon-left>i.avatar:first-child{position:absolute;display:flex;height:100%;align-items:center;font-size:16px;left:16px;top:8px;max-height:32px;max-width:32px}.item.item-checkbox.item-avatar * .item-content>i.avatar:first-child,.item.item-checkbox.item-avatar * .item-content>i.item-image:first-child,.item.item-checkbox.item-avatar *>i.avatar:first-child,.item.item-checkbox.item-avatar *>i.item-image:first-child,.item.item-checkbox.item-avatar .item-content>i.avatar:first-child,.item.item-checkbox.item-avatar .item-content>i.item-image:first-child,.item.item-checkbox.item-avatar>i.avatar:first-child,.item.item-checkbox.item-avatar>i.item-image:first-child{left:65px}.item.item-checkbox .item-content .item-avatar,.item.item-checkbox.item-avatar .item-content{padding-left:65px}#menu .footer .item-icon-left.item-icon-right.ink .ion-ios-arrow-right.icon-help,.item-icon-left.item-icon-right.ink #menu .footer .ion-ios-arrow-right.icon-help,.item-icon-left.item-icon-right.ink .icon.ion-ios-arrow-right,.item-icon-left.item-icon-right.ink .ion-ios-arrow-right.icon-alert,.item-icon-left.item-icon-right.ink .ion-ios-arrow-right.icon-help{left:auto}@media screen and (max-width:767px){#menu .footer .item.item-icon-right>.icon-help:last-child,#menu .footer .item.item-icon-right>.ion-ios-arrow-right.icon-help,.item.item-icon-right>.icon-alert:last-child,.item.item-icon-right>.icon-help:last-child,.item.item-icon-right>.icon.ion-ios-arrow-right,.item.item-icon-right>.icon:last-child,.item.item-icon-right>.ion-ios-arrow-right.icon-alert,.item.item-icon-right>.ion-ios-arrow-right.icon-help{right:1px}}.item em{font-weight:700!important}@media screen and (max-width:991px){.item .badge{right:16px}}@media screen and (min-width:992px){.list .item.item-border-large{margin-bottom:1px;border-bottom:solid 1px #ccc!important}.list.item-border-large .item{border-bottom:solid 1px #ccc!important;margin:0 0 1px}.list.item-border-large .item-divider{border-top:0}}.list .item.item-border{border-bottom:solid 1px #ccc!important;margin-bottom:1px}.list .item.item-small-height{padding-top:2px;padding-bottom:0;min-height:24px}.list .item.item-small-height .badge{padding-top:0!important;top:inherit}.list .item.item-small-height .badge.badge-assertive,.list .item.item-small-height .badge.badge-balanced,.list .item.item-small-height .badge.badge-calm,.list .item.item-small-height .badge.badge-editable:hover,.list .item.item-small-height .badge.badge-energized,.list .item.item-small-height .badge.badge-positive,.list .item.item-small-height .badge.badge-royal{top:1px!important;padding-top:3px!important;padding-bottom:2px!important}.form-errors:first-child{margin:5px 0}.form-errors:last-child{margin:5px 0 0}.form-error{padding:0 16px;font-size:12px;color:red;vertical-align:middle;text-align:end;top:0;position:relative}.item-input-error{border-bottom:2px solid red!important}.item-input.item-button-right input,.item-input.item-button-right textarea{margin-right:100px}.item-input.item-button-right .button,.item-input.item-button-right button{top:6px}.item-input.item-button-right.item-floating-label input,.item-input.item-button-right.item-floating-label textarea{padding-right:100px}.item-input.item-button-right.item-floating-label .button{top:inherit;bottom:6px}.item-input.item-button-right.item-floating-label .button-icon{height:inherit}.item.item-button-right .badge,.item.item-icon-right .badge{right:43px}@media screen and (max-width:767px){.badge{text-overflow:ellipsis!important;white-space:nowrap;overflow:hidden!important;max-width:300px!important;display:block!important}.badge:empty{display:none!important}.item.item-button-right .badge,.item.item-icon-right .badge{right:26px!important}}.badge-editable:hover{cursor:pointer}.badge-editable:hover:before{content:" "}.platform-ipad .bar-title{border-color:#111;background-color:#444;background-image:linear-gradient(0deg,#111,#111 50%,transparent 50%)}.platform-ipad .bar-title .title{background-color:#fff;margin-left:0;margin-right:0;height:44px}.bar .badge-button{margin:0!important;padding:0 4px!important;font-size:10px;position:absolute!important;top:5px;right:3px}.text-editable:hover{cursor:pointer}.text-editable:hover:after{content:""}.item h2 .text-editable:hover:after{font-size:14px}.modal.modal-full-height{bottom:0}@media screen and (max-width:767px){.modal{top:0!important;left:0!important;bottom:0;min-height:100%!important;width:100%!important}}@media screen and (max-width:991px){.modal{bottom:0}.modal .swiper-pagination{visibility:hidden!important}.modal.modal-full-height{top:0}.modal.modal-full-height ion-content.keyboard-up .scroll{min-height:calc(100% + 67px)}}@media (min-width:992px){.modal.modal-full-height{min-height:80%}}.modal.about .bar.bar-header .button+.title{left:0!important}.item-button-right .item-content>.button,.item-button-right .item-content>.buttons,.item-button-right>.button,.item-button-right>.buttons{top:16px}.item-button-right .item-content>.button.button-small,.item-button-right .item-content>.buttons .button-small,.item-button-right>.button.button-small,.item-button-right>.buttons .button-small{font-size:14px}.item.large-button-bar{margin-bottom:10px}.item-avatar-left-padding{padding-left:95px}.item-thumbnail-left-padding{padding-left:106px}.item-thumbnail-left,.item.item-thumbnail-left{min-height:100px!important}.item-thumbnail-left .item-content i.item-image,.item-thumbnail-left .item-content>i:first-child,.item-thumbnail-left i.item-image,.item-thumbnail-left>i:first-child{color:#d9d9d9;background-color:#f8f8f8;overflow:hidden!important;font-size:50px!important;line-height:80px;padding:0 15px;background-position:center;background-size:cover;display:inline-block}@media screen and (max-width:400px){.card>.item.item-thumbnail-left,.item-thumbnail-left,.item-thumbnail-left .item-content{padding-left:84px!important}.item-thumbnail-left .item-content img.item-image,.item-thumbnail-left .item-content>img:first-child,.item-thumbnail-left img.item-image,.item-thumbnail-left>img:first-child{max-width:70px;max-height:70px}.item h2{font-size:13px!important}}.item-icon-left-padding{padding-left:40px}.item-icon-right-padding{padding-right:40px}.text-keep-lines{white-space:pre-line!important}.text-italic{font-style:italic!important}.menu.menu-left{background-color:#f5f5f5}.menu.menu-left .item{opacity:.75;color:#000}.menu.menu-left .item-button-right .item-content>.button,.menu.menu-left .item-button-right .item-content>.buttons,.menu.menu-left .item-button-right>.button,.menu.menu-left .item-button-right>.buttons{top:8px!important}.menu.menu-left .item.active{background-color:#b2e0ff!important}.menu.menu-left .item.active .item-content{background-color:transparent}.menu.menu-left .item-menu-disable{color:#444!important}@media screen and (max-width:991px){.menu.menu-left .item.item-divider{min-height:2px;height:2px;padding-top:0;padding-bottom:0}.menu.menu-left .item,.menu.menu-left .item.item-complex .item-content{height:40px;min-height:40px;padding-top:12px}.menu.menu-left .item.item-complex{padding-top:0}.menu.menu-left .item.item-button-right .button{height:30px;min-height:30px;top:4px}.menu.menu-left ion-content.has-footer{bottom:0!important}.menu.menu-left .bar-header{background-color:#1a237e;color:#fff;height:150px;padding-right:0!important}.platform-ios.platform-cordova .menu.menu-left .bar-header{height:calc(constant(safe-area-inset-top) + 150px);height:calc(env(safe-area-inset-top) + 150px)}.menu.menu-left .bar-header .hero{height:150px;box-shadow:none}.menu.menu-left .bar-header .hero .content{bottom:0}.menu.menu-left .has-header{top:150px}.platform-ios.platform-cordova .menu.menu-left .has-header{top:calc(constant(safe-area-inset-top) + 150px);top:calc(env(safe-area-inset-top) + 150px)}}@media screen and (min-width:768px){.menu.menu-left .item.item-divider{min-height:5px;height:5px}.menu.menu-left .footer a{font-size:14px!important;color:grey!important}}@media screen and (min-width:992px){.menu.menu-left{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iNTEycHgiIGhlaWdodD0iNTEycHgiIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+CiAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC42MDgyNjEsIDAsIDAsIDAuNjA4MjYxLCAtMjAuMDg0OTc2LCAzLjI1NTczNikiPgogICAgPGc+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC43ODsiIGlkPSJwYXRoLTEwIiBkPSJNIDQxOS4xMzMgODUuNzM4IEMgNDE3LjI5NSA4NS43MzkgNDE1LjQ1NSA4NS43NTQgNDEzLjYxMSA4NS43NzggQyAzNTQuODUyIDg2LjU2MSAyOTkuMDIzIDk5LjE3NCAyNDguMzU4IDEyMS4zMiBDIDU4NC4xMjEgMTMuMjA2IDc5Ni4xNzUgMjExLjI2IDgzMS43IDUwOC43NzMgTCA4NDYuMzgzIDUwNy4xMjQgQyA4MTUuNTg2IDIzNS44MDEgNjUyLjQ3NyA4NS41ODggNDE5LjEzMyA4NS43MzggWiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45NjM3MywgMC4yNjY4NzgsIC0wLjI2Njg3OCwgMC45NjM3MywgODkuNTA1MjMxLCAtMTM2LjYxNTA2MSkiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDE7IiBpZD0icGF0aC0zIiBkPSJNIDE0Ni4wMzcgMTk0LjA2NSBDIDE0NC4yMDEgMTk0LjA2NiAxNDIuMzYxIDE5NC4wODEgMTQwLjUxNyAxOTQuMTA0IEMgODEuNzYgMTk0Ljg4OCAyNS45MzEgMjA3LjUwMyAtMjQuNzM2IDIyOS42NDggQyAzMTEuMDI5IDEyMS41MzEgNTIzLjA4MyAzMTkuNTgzIDU1OC42MDQgNjE3LjA5MyBMIDU3My4yODQgNjE1LjQ0MyBDIDU0Mi40OSAzNDQuMTIyIDM3OS4zODUgMTkzLjkxMyAxNDYuMDM3IDE5NC4wNjUgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuMTgwOTg4LCAtMC45ODM0ODUsIDAuOTgzNDg1LCAtMC4xODA5ODgsIC0zOS4yOTg1ODEsIDcwNS44OTc1NDQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMSIgZD0iTSA0ODcuNzQ0IDE5My4wODQgQyA0ODUuOTA2IDE5My4wODUgNDg0LjA2NyAxOTMuMSA0ODIuMjIzIDE5My4xMjMgQyA0MjMuNDY0IDE5My45MDcgMzY3LjYzNSAyMDYuNTIgMzE2Ljk3NSAyMjguNjY4IEMgNjUyLjcyNiAxMjAuNTUyIDg2NC43NzUgMzE4LjYwNSA5MDAuMjk5IDYxNi4xMDkgTCA5MTQuOTc5IDYxNC40NiBDIDg4NC4xODQgMzQzLjE0NCA3MjEuMDgxIDE5Mi45MzUgNDg3Ljc0NCAxOTMuMDg0IFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE5OTk3LCAwLjc4NDYwNSwgLTAuNzg0NjA1LCAwLjYxOTk5NywgNTIzLjA2NzIzMSwgLTM0My4zMzE1MzkpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjg0OyIgaWQ9InBhdGgtMTIiIGQ9Ik0gMjk1Ljk2OSA0MzIuNzU3IEMgMjk0LjEzMSA0MzIuNzU4IDI5Mi4yOTMgNDMyLjc3MyAyOTAuNDQ5IDQzMi43OTcgQyAyMzEuNjg4IDQzMy41OCAxNzUuODYgNDQ2LjE5NCAxMjUuMTk4IDQ2OC4zNDEgQyA0NjAuOTU3IDM2MC4yMjYgNjczLjAwNSA1NTguMjggNzA4LjUyNiA4NTUuNzg2IEwgNzIzLjIwNyA4NTQuMTM5IEMgNjkyLjQxMiA1ODIuODE5IDUyOS4zMSA0MzIuNjA5IDI5NS45NjkgNDMyLjc1NyBaIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45Nzg4NDksIDAuMjA0NTg0LCAtMC4yMDQ1ODQsIC0wLjk3ODg0OSwgOTYzLjgyMDc5NiwgMTExNi4zNjcyOTMpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAwLjQ7IiBpZD0icGF0aC0xMyIgZD0iTSAxNTguMDM2IDE0OC44MyBDIDE1Ni4yIDE0OC44MzMgMTU0LjM2IDE0OC44NDYgMTUyLjUxNiAxNDguODcyIEMgOTMuNzU5IDE0OS42NTMgMzcuOTMgMTYyLjI2NyAtMTIuNzM0IDE4NC40MTEgQyAzMjMuMDIyIDc2LjMwMSA1MzUuMDc2IDI3NC4zNTIgNTcwLjYwNCA1NzEuODU3IEwgNTg1LjI4NiA1NzAuMjA4IEMgNTU0LjQ4MyAyOTguODkxIDM5MS4zOCAxNDguNjgzIDE1OC4wMzYgMTQ4LjgzIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM4NjE0LCAtMC45NDA5MjYsIDAuOTQwOTI2LCAwLjMzODYxNCwgLTExNS41OTUxNTgsIDQ4My43MDU5ODQpIiBieDpvcmlnaW49IjAuNSAwLjUiLz4KICAgICAgPHBhdGggc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IGZpbGwtcnVsZTogZXZlbm9kZDsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDFweDsgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS1saW5lam9pbjogbWl0ZXI7IHN0cm9rZS1vcGFjaXR5OiAxOyBvcGFjaXR5OiAxOyIgaWQ9InBhdGgtMTQiIGQ9Ik0gNTAxLjAxOSAyODguMjkyIEMgNDk5LjE4MSAyODguMjkzIDQ5Ny4zNCAyODguMzA4IDQ5NS40OTYgMjg4LjMzMSBDIDQzNi43MzYgMjg5LjExNSAzODAuOTA4IDMwMS43MjYgMzMwLjI0MyAzMjMuODc0IEMgNjY2LjAwNCAyMTUuNzU3IDg3OC4wNjIgNDEzLjgxMiA5MTMuNTg2IDcxMS4zMjIgTCA5MjguMjY4IDcwOS42NzMgQyA4OTcuNDY4IDQzOC4zNTIgNzM0LjM2MSAyODguMTQxIDUwMS4wMTkgMjg4LjI5MiBaIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2NDY1NiwgMC45ODYzNTEsIC0wLjk4NjM1MSwgMC4xNjQ2NTYsIDk4Mi44NTcyNjYsIC0yMzMuNDUyMDYzKSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMC40OyIgaWQ9InBhdGgtMTUiIGQ9Ik0gMTkyLjk1NCAzNzYuNTIxIEMgMTkxLjExNSAzNzYuNTIyIDE4OS4yNzcgMzc2LjUzNyAxODcuNDMzIDM3Ni41NjEgQyAxMjguNjc0IDM3Ny4zNDQgNzIuODQ1IDM4OS45NTggMjIuMTgxIDQxMi4xMDMgQyAzNTcuOTQgMzAzLjk4OSA1NjkuOTg3IDUwMi4wNDUgNjA1LjUwNSA3OTkuNTUzIEwgNjIwLjE4OCA3OTcuOTA1IEMgNTg5LjM5MiA1MjYuNTg0IDQyNi4yOTUgMzc2LjM2OSAxOTIuOTU0IDM3Ni41MjEgWiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTMxNDA0LCAtMC4zNjM5ODgsIDAuMzYzOTg4LCAtMC45MzE0MDQsIDQxOS40OTkwMDYsIDExODIuNTk5ODA5KSIgYng6b3JpZ2luPSIwLjUgMC41Ii8+CiAgICAgIDxwYXRoIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBmaWxsLXJ1bGU6IGV2ZW5vZGQ7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAxcHg7IHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2UtbGluZWpvaW46IG1pdGVyOyBzdHJva2Utb3BhY2l0eTogMTsgb3BhY2l0eTogMTsiIGlkPSJwYXRoLTE2IiBkPSJNIDIyMS42MTQgNjMuOTczIEMgMjE5Ljc3NyA2My45NzYgMjE3LjkzOCA2My45OSAyMTYuMDk0IDY0LjAxNSBDIDE1Ny4zMzQgNjQuNzk1IDEwMS41MDYgNzcuNDA5IDUwLjg0MSA5OS41NTQgQyAzODYuNTk4IC04LjU1OSA1OTguNjUxIDE4OS40OTcgNjM0LjE3MyA0ODcuMDAxIEwgNjQ4Ljg1NCA0ODUuMzU0IEMgNjE4LjA1OCAyMTQuMDM3IDQ1NC45NTQgNjMuODI0IDIyMS42MTQgNjMuOTczIFoiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzUwNDUyLCAtMC42NjA5MjUsIDAuNjYwOTI1LCAwLjc1MDQ1MiwgLTcwLjgwMzMyMiwgMjkwLjkyMDI3MykiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8cGF0aCBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgZmlsbC1ydWxlOiBldmVub2RkOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMXB4OyBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLWxpbmVqb2luOiBtaXRlcjsgc3Ryb2tlLW9wYWNpdHk6IDE7IG9wYWNpdHk6IDAuNDsiIGlkPSJwYXRoLTE3IiBkPSJNIDQ0MS44ODggMzQyLjA5OCBDIDQ0MC4wNDcgMzQyLjA5OCA0MzguMjA3IDM0Mi4xMTQgNDM2LjM2MiAzNDIuMTM4IEMgMzc3LjYwMSAzNDIuOTIyIDMyMS43NjUgMzU1LjUzNSAyNzEuMTAzIDM3Ny42ODEgQyA2MDYuODg2IDI2OS41NjcgODE4Ljk0NCA0NjcuNjE1IDg1NC40NjIgNzY1LjEzMyBMIDg2OS4xNDIgNzYzLjQ4MyBDIDgzOC4zNTQgNDkyLjE1NCA2NzUuMjQyIDM0MS45NDggNDQxLjg4OCAzNDIuMDk4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjM1NjU4MiwgMC45MzQyNjQsIC0wLjkzNDI2NCwgLTAuMzU2NTgyLCAxMjU2Ljc1OTQ5MywgMTY5LjE4MjU1MikiIGJ4Om9yaWdpbj0iMC41IDAuNSIvPgogICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc2MjQ5MywgMCwgMCwgMC43NjI0OTMsIDE5LjI5NDY0NywgLTcxNi4zMjI4MTUpIj4KICAgICAgICA8cGF0aCBkPSJNIDU2Ni40NjYgMTA4OS4xMzcgTCA1NjYuNDY2IDExNDguMjIyIEMgNTY1Ljg2NyAxMTQ4LjIxOSA1NjUuMjY3IDExNDguMjE3IDU2NC42NjcgMTE0OC4yMTcgQyA1NjEuNDgxIDExNDguMjE3IDU1OC4zMSAxMTQ4LjI1OSA1NTUuMTU0IDExNDguMzQxIEwgNTU1LjE1NCAxMDg5LjEzNyBaIE0gOTA4LjI5IDE0NzcuMTQ2IEwgOTU2Ljk4NyAxNDc3LjE0NiBMIDk1Ni45ODcgMTQ4OC40NTggTCA5MDguNTY5IDE0ODguNDU4IEMgOTA4LjUzOSAxNDg0LjY5MyA5MDguNDQ3IDE0ODAuOTIyIDkwOC4yOSAxNDc3LjE0NiBaIE0gNTY2LjQ2NiAxODM1LjAxMyBMIDU2Ni40NjYgMTg3Ni40NjcgTCA1NTUuMTU0IDE4NzYuNDY3IEwgNTU1LjE1NCAxODM0Ljg4NiBDIDU1OC4zMTggMTgzNC45NzMgNTYxLjQ5IDE4MzUuMDE3IDU2NC42NjcgMTgzNS4wMTcgQyA1NjUuMjY3IDE4MzUuMDE3IDU2NS44NjcgMTgzNS4wMTYgNTY2LjQ2NiAxODM1LjAxMyBaIE0gMjIwLjc3NSAxNDg4LjQ1OCBMIDE2OS42NTcgMTQ4OC40NTggTCAxNjkuNjU3IDE0NzcuMTQ2IEwgMjIxLjA4OSAxNDc3LjE0NiBDIDIyMC45MjEgMTQ4MC45MDkgMjIwLjgxNiAxNDg0LjY4IDIyMC43NzUgMTQ4OC40NTggWiIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgc3Ryb2tlOiBub25lOyIgYng6b3JpZ2luPSIwIDAiLz4KICAgICAgICA8cGF0aCBkPSJNIDc2MC4xMjEgMTE0My4zMTEgTCA3MTcuMzM2IDEyMTcuNDE3IEMgNzE1LjcyIDEyMTYuNTE4IDcxNC4wOTYgMTIxNS42MzIgNzEyLjQ2NSAxMjE0Ljc2MSBMIDc1NS4zMTggMTE0MC41MzcgWiBNIDgzMC4xMjIgMTMyNC4yMDMgTCA5MDAuNDI0IDEyODMuNjE0IEwgOTAzLjE5OCAxMjg4LjQxNyBMIDgzMy4wNCAxMzI4LjkyMyBDIDgzMi4wOCAxMzI3LjMzOSA4MzEuMTA3IDEzMjUuNzY2IDgzMC4xMjIgMTMyNC4yMDMgWiBNIDg0MC41OTkgMTY0MS4xMzcgTCA5MDMuMTk3IDE2NzcuMjc4IEwgOTAwLjQyNCAxNjgyLjA4MiBMIDgzNy45MTEgMTY0NS45OSBDIDgzOC44MjEgMTY0NC4zOCA4MzkuNzE3IDE2NDIuNzYyIDg0MC41OTkgMTY0MS4xMzcgWiBNIDcyNS4xNjggMTc2MS44NDMgTCA3NjAuMTIyIDE4MjIuMzg1IEwgNzU1LjMxOCAxODI1LjE1OCBMIDcyMC4zNzkgMTc2NC42NDEgQyA3MjEuOTg1IDE3NjMuNzIyIDcyMy41ODIgMTc2Mi43ODkgNzI1LjE2OCAxNzYxLjg0MyBaIE0gNDAzLjUzOCAxNzYwLjkzMiBMIDM2Ni40NTYgMTgyNS4xNTkgTCAzNjEuNjUzIDE4MjIuMzg2IEwgMzk4LjgwMiAxNzU4LjA0MiBDIDQwMC4zNzIgMTc1OS4wMTkgNDAxLjk1MSAxNzU5Ljk4MiA0MDMuNTM4IDE3NjAuOTMyIFogTSAyODkuNTggMTY0Mi42ODkgTCAyMjEuMzUgMTY4Mi4wODIgTCAyMTguNTc3IDE2NzcuMjc5IEwgMjg2Ljk0NCAxNjM3LjgwNyBDIDI4Ny44MDcgMTYzOS40MzcgMjg4LjY4NSAxNjQxLjA2NSAyODkuNTggMTY0Mi42ODkgWiBNIDI5NC4zNTQgMTMzMi4xNjggTCAyMTguNTc2IDEyODguNDE3IEwgMjIxLjM1IDEyODMuNjE0IEwgMjk3LjIxMyAxMzI3LjQxNCBDIDI5Ni4yNDYgMTMyOC45OSAyOTUuMjkzIDEzMzAuNTc1IDI5NC4zNTQgMTMzMi4xNjggWiBNIDQwNi4wNzkgMTIyMC4yNTkgTCAzNjEuNjUzIDExNDMuMzExIEwgMzY2LjQ1NyAxMTQwLjUzNyBMIDQxMC44ODkgMTIxNy40OTUgQyA0MDkuMjc2IDEyMTguNDAzIDQwNy42NzMgMTIxOS4zMjQgNDA2LjA3OSAxMjIwLjI1OSBaIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBzdHJva2U6IG5vbmU7IiBieDpvcmlnaW49IjAgMCIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8cmVjdCB4PSI0MjkuMzY3IiB5PSI0MjUuOTc5IiB3aWR0aD0iMjAuMDAzIiBoZWlnaHQ9IjIxLjczNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTkxIiB0cmFuc2Zvcm09Im1hdHJpeCgxLCAwLCAwLCAwLjk5OTk5OSwgLTMwMS4zNzcwNzUsIC0yMTkuNDk4NDM0KSIvPgogICAgPHJlY3QgeD0iNDQ2Ljg1MyIgeT0iMjUuNDYyIiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05MyIvPgogICAgPHJlY3QgeD0iLTEzNS45NTYiIHk9IjYwNS4xNDEiIHdpZHRoPSIzOS44NTEiIGhlaWdodD0iMzkuODUxIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk5OTk5LCAwLCAwLCAxLCA4NDYuMTc2NzU2LCAtMzk0Ljk1NjAyNCkiLz4KICAgIDxyZWN0IHg9IjIyNS43NzkiIHk9IjY4OS44MzYiIHdpZHRoPSIyNS45OSIgaGVpZ2h0PSIyNS45OSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk1Ii8+CiAgICA8cmVjdCB4PSI1OTQuMDEzIiB5PSI3MzcuMTQyIiB3aWR0aD0iMjAuNzkyIiBoZWlnaHQ9IjIyLjUyNSIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTk2Ii8+CiAgICA8cmVjdCB4PSIzODcuMjM1IiB5PSI0NzkuMzk3IiB3aWR0aD0iMjUuOTkiIGhlaWdodD0iMjUuOTkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmU7IG9wYWNpdHk6IDE7IGZpbGw6IHJnYigyNTUsIDI1NSwgMjU1KTsgZmlsbC1vcGFjaXR5OiAxOyBzdHJva2U6IG5vbmU7IHN0cm9rZS13aWR0aDogMzQuOTsgc3Ryb2tlLW1pdGVybGltaXQ6IDQ7IHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7IHN0cm9rZS1kYXNob2Zmc2V0OiAwOyBzdHJva2Utb3BhY2l0eTogMC45OTYwNzg7IiBpZD0icGF0aC05OCIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMDAwMDEsIDAsIDAsIDAuOTk5OTk5LCAzNjUuMjc0OTY2LCA3OS4yOTUyNDEpIi8+CiAgICA8cmVjdCB4PSI0MjEuOTYyIiB5PSI3NzUuOTM3IiB3aWR0aD0iMzIuOTIiIGhlaWdodD0iMzQuNjUzIiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBvcGFjaXR5OiAxOyBmaWxsOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGZpbGwtb3BhY2l0eTogMTsgc3Ryb2tlOiBub25lOyBzdHJva2Utd2lkdGg6IDM0Ljk7IHN0cm9rZS1taXRlcmxpbWl0OiA0OyBzdHJva2UtZGFzaGFycmF5OiBub25lOyBzdHJva2UtZGFzaG9mZnNldDogMDsgc3Ryb2tlLW9wYWNpdHk6IDAuOTk2MDc4OyIgaWQ9InBhdGgtOTkiLz4KICAgIDxyZWN0IHg9Ii02Ni45MzkiIHk9Ii01NjguOTc4IiB3aWR0aD0iMjAuODY3IiBoZWlnaHQ9IjIwLjc5MiIgc3R5bGU9ImRpc3BsYXk6IGlubGluZTsgb3BhY2l0eTogMTsgZmlsbDogcmdiKDI1NSwgMjU1LCAyNTUpOyBmaWxsLW9wYWNpdHk6IDE7IHN0cm9rZTogbm9uZTsgc3Ryb2tlLXdpZHRoOiAzNC45OyBzdHJva2UtbWl0ZXJsaW1pdDogNDsgc3Ryb2tlLWRhc2hhcnJheTogbm9uZTsgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7IHN0cm9rZS1vcGFjaXR5OiAwLjk5NjA3ODsiIGlkPSJwYXRoLTEwMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEsIDAsIDAsIDAuOTk5OTk3LCAzMS4zNTY5MjgsIDk4NC43MzYzMDYpIi8+CiAgPC9nPgo8L3N2Zz4=);background-repeat:no-repeat;background-position:-500px -100px;background-size:1024px 1024px;background-color:#f5f5f5;height:100%}}.certifications .item-divider .badge{top:16px!important}.certifications-lg .avatar-large{left:auto;position:relative;font-size:55px!important;height:88px;width:88px;color:#d9d9d9;background-color:#e0e0e0;border:solid 1px #d9d9d9}.icon-help{font-size:38px;vertical-align:middle}.icon-alert{font-size:38px;vertical-align:middle}#menu .footer .icon-help{font-size:25px!important;position:absolute;left:12px;top:8px;z-index:99}.popover-helptip{background-color:rgba(68,68,68,.85)!important;height:auto!important}.popover-helptip .button-close{padding:8px;height:25px;font-size:18.2px}.popover-helptip a,.popover-helptip a:active,.popover-helptip a:hover{text-decoration:underline}.nobackdrop .popover-backdrop.active{background-color:transparent!important}.helptip-anchor,.helptip-anchor-center,.helptip-anchor-left,.helptip-anchor-right{display:block;position:absolute;width:100%;bottom:0}.helptip-anchor-center{text-align:center}.helptip-anchor-left{text-align:left}.helptip-anchor-right{text-align:right}.helptip-anchor a:before,.helptip-anchor-center a:before,.helptip-anchor-left a:before,.helptip-anchor-right a:before{content:" "}@media (max-width:767px){.popover-helptip{width:auto}}#menu .footer .popover-helptip .icon-left.icon-help,.popover-helptip #menu .footer .icon-left.icon-help,.popover-helptip .icon-left.icon-alert,.popover-helptip .icon-left.icon-help,.popover-helptip .icon.icon-left{font-size:30px;position:relative;top:8px;left:8px}#menu .footer .popover-helptip .icon-right.icon-help,.popover-helptip #menu .footer .icon-right.icon-help,.popover-helptip .icon-right.icon-alert,.popover-helptip .icon-right.icon-help,.popover-helptip .icon.icon-right{font-size:30px;position:relative;top:8px;right:8px}#menu .footer .popover-helptip .icon-center.icon-help,.popover-helptip #menu .footer .icon-center.icon-help,.popover-helptip .icon-center.icon-alert,.popover-helptip .icon-center.icon-help,.popover-helptip .icon.icon-center{font-size:30px;width:100%;text-align:center;position:relative;top:8px;height:0}#menu .footer .popover-helptip .icon-bottom-right.icon-help,.popover-helptip #menu .footer .icon-bottom-right.icon-help,.popover-helptip .icon-bottom-right.icon-alert,.popover-helptip .icon-bottom-right.icon-help,.popover-helptip .icon.icon-bottom-right{font-size:30px;position:relative;bottom:8px;right:8px}#menu .footer .popover-helptip .icon-bottom-left.icon-help,.popover-helptip #menu .footer .icon-bottom-left.icon-help,.popover-helptip .icon-bottom-left.icon-alert,.popover-helptip .icon-bottom-left.icon-help,.popover-helptip .icon.icon-bottom-left{font-size:30px;position:relative;bottom:8px;left:8px}#menu .footer .popover-helptip .icon-bottom-center.icon-help,.popover-helptip #menu .footer .icon-bottom-center.icon-help,.popover-helptip .icon-bottom-center.icon-alert,.popover-helptip .icon-bottom-center.icon-help,.popover-helptip .icon.icon-bottom-center{font-size:30px;position:relative;width:100%;bottom:8px;text-align:center;height:0}.popover.popover-profile{height:200px}.popover.popover-profile .avatar{height:90px;width:90px;left:20px;top:20px}.popover.popover-profile .avatar{border:solid 1px #d9d9d9}.popover.popover-profile .bar.bar-footer{height:58px}.popover.popover-profile .bar.bar-footer .col .button{max-width:inherit;width:100%;padding:5px 0;margin:0}.popover.popover-profile .bar .button-positive,.popover.popover-profile .bar .button-text{background-color:#387ef5!important}.popover.popover-profile .bar .button-stable{color:#444!important}.bar-header .button-icon .avatar{height:35px;width:35px;position:relative;left:0;top:4px;border:solid 1px #d9d9d9}.bar-header .button-icon .avatar.active{background-color:#e0e0e0}.bar-header .button-icon .avatar{height:31px;width:31px;position:relative;left:0;top:6px}.list .badge .badge-secondary,.list .badge.badge-secondary{font-size:12px;font-style:italic;top:37px;font-weight:400!important;margin-right:0;padding:3px 8px}.list .item-avatar .badge.badge-avatar{position:absolute!important;left:60px!important;right:inherit!important;top:15px!important;margin:0!important;padding:0 4px!important;font-size:10px}.popover.popover-login-methods{height:280px;width:290px}.popover.popover-login-methods.auth{height:204px}@media (max-width:767px){.popover.popover-login-methods{height:256px}.popover.popover-login-methods.auth{height:204px}}.ion-es-user-api:before{content:url(../img/logo.small.cs.dune.svg)}.ion-bma-tor-api:before{content:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAATEAYAAAChBNO0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA+UO7fwAAB3lJREFUWMPNmGtUVNcVx/93mBlmgEGeAyhYUoSERhmM9ZHSCL4AqURFEmSBEZOgWGqh0pqYNkREiIlxxSXqYpUoJhqVRWJ41tooKNYIGR8R8QlKAsj7PQ9k7tx7++Gc6VpQnctK4lo9X35zz+x79v7vM2fffYfB/8lYty4iIjFx/Oz0TEJpD2HTLwj1RmqwvbDw9OmjR3+8XylxHPBPcuk1QucbKIUn3GeZ/45eJlCWEfJfEJp3Ew6qqIADhNw3lsDHCrf1I9SMEi6XERpOEV7YRLn950q8lODUfcLJWVRIpkgCLGMG5S5q/kfKRXR+D0H7TSrIhfD2+B33JUiII0xZR6i4QljwiLC23HLDT915y2BIIIKY0J84DFsII/5NePHS2O9dqdDT8YTBdOezUwlzHxKyOT+XcMuQUCY93QQwv6TudkAKbygBhKAEMZMiuA7uGtc601HIETYL259loYASikNbif2uWU9LuGXQI2CqI5Q/rQw4Uvq6/86rUq0DpB9KG2xWrmzybvMt8FFnyBvmX6m5sbN/qiFT3294Pq9HUi1RSq4YE3+s8McXVUkela0g5BxoAr5MJgycR8i8Q+OmP1nfY3S+zbrbrgrKNdQ+gPDBNcIWvxFvw7GRBkChV+bbajvbg34951pwcYDUrDLfM2fZpGtrapK/XR1ikLCSQxKPG/8VIpaIxwv2CSNcyRH+ZgehcwFhz1l6BJLoDi2IIgwtpsvSwAevWxcu+BBmLiZ8iZ7d0BrC+C19tl2He9f+cKcitXhhaar8kGyJ/Dl5+txbihi7EuV+mZ1sozxavt9mhcQoiZTIVx3Hi1iE36pN1gU+aX6BPWHpAsI9VHBcJ2F4NGFCNWN9wUBavM7fInQvx2MHq6WZbiGsjL3N1JfdqgDWx2ZoNu4FKtnil8oLnhkMUsz+SPPu1mURbas+XuqX+KW7ndc2dYVS3Tjjps89CVA+fGxJaTY/YDira9GvO/cv5gFjwzx8fwNZt9qbkLv5+DiC/k5Y/AFhQBNEhsT613wppVnkF0AbE65EOCDkCHnAkYozyuNNQM2bpz87lxKuXey/PDo8unRnkmt66xs+yYemF866PENQqtllplzWH5g27Vce/ksBzRtzZJp7EmfhIr9X+HphHBgwYIrayfoZ9GlgmzXWv00rYZr/RIVPNAGhlG+JrEMbFcFTtlwmk20Gco9t/ir76gtVizetKAnPP1ATv3BDbYJqxvsqT6cwx2z4DysHzw7nA85rXZ2d2wAunq3mQgDNxrlzZnYBCg+7VMVqAJ8Je4VCFzuyflY9YcpHY917ORGGFU1MthBLqJOLJEAIox/iRVbsoPaOB9dUag4XSouDN80Nmdm/9fXIPaviohr8NhtN+lhjEcDam15kWwCPbVNe8wwFdMuH5uk6AVOaKce0CFAE2mUpUwHVQadGRwdA8BZG4GZxo6C1Jo2eZb+phPafEqpU1sM0BBK+R/uMcEYkAaiiwr4RsRsFBw4cfz6mbl7wy/y0Rv/h5+UB3qGZ/B4hht8B8LuFFfx2wCXHLcXFFeg/2VPcNxlQJtg/tDsOyJbKOGkqYC5idWwuYDNV8pZEAwiXUPW/3n19CWfT2oRXCSRfWQ/zPu0r9tNOs9YkloA+ygEROw5deIhOYZFdmMOAfZ7DC47tzsGT4pS8/s7QXf0WwKnTJdc5BeiWd6R0xQIOMY7xqn8A8lrbM/IRgPFkIphngJFso/ej+QDrZYpihwDmbWYX87fx7phuwilrqfA/j92wJ+5TCSGrscyIJeA8ZZ2I3SBsoYAtWvlWbhdfL+SzR9ledpugtmmXJtlwwPCRgSVDQYDiO6WXwgmQVksTpU3AUFR/xYAWQC860Qv0ft25vscDMMzXbzV0AEwxapnSJ7k10scZQ99JmG+th2mm/Y7wygQTIFgeiH8SScBtuEINN2Ztt7LjD11xP5R9H9Ho2BzedFBoFIqFemCgo8+jfw0gmybn5NHA4M6+GwM2gPRz2UaZFjCFjEaa7IG2qmbPlruA6dToSdMOAMuY1Yge7073HmE9rQ6S+TQB90X0PEf5yUQTcJiQvyxiRxsn5vfT5bMWB6X28tdwafBqRt65u6jfd+fCSMOw20Dd8BGgc1ZbZEcGwJawJnY3wDfwb/M1gL5E12B4Beha1v5x1z4AznCHCwAj9DCO91dOH3PafYRS+pbJXBDZKNqvWIq2aAK412gCSq3bWYoQ79K/t/uDPjNwVXpReznt875qTWXOWb+c9d+nNYU2pw/trw/QFlwvA/rcux/1vQv0xHfoesqgbyy6mX33HfT2nux8tccOECqFE0IZADd4wp1LosLpa/ZfHQhN9H8MNNONyLUeJm9L7dSWGan1G4y0pexeRTg5nS5Eqyi6CPrpe/yQgpkpeZMJwRlV3aRc1WyTtEpdrj0z5cMSvXF4jc7jtp9tgCJfEb+p9Eaydsn183OTZa/Lm2VHld2tUQ8+bY2Gg+nEaORooPkE8xfGh6lt3EAaoSO0un9Ci1xPztg4hxtpnLQfcaA1QaBHhKH/U7Q/S8g6We78Dzmv92D5rFiKAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEwLTE0VDExOjU4OjIwKzA1OjAwUOI3hwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0xMC0xNFQxMTo1ODoyMCswNTowMCG/jzsAAAAvdEVYdHN2Zzpjb21tZW50AD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/5MH3awAAAABJRU5ErkJggg==)}.row-header{border-bottom:solid 1px #ccc!important;margin:0;min-height:28px!important}.col-header{text-align:center;display:block!important}.col-15{-webkit-box-flex:0;-webkit-flex:0 0 15%;-moz-box-flex:0;-moz-flex:0 0 15%;-ms-flex:0 0 15%;flex:0 0 15%;max-width:15%}.col-border-left{border-left:solid 1px #ccc!important}.col-border-right{border-right:solid 1px #ccc!important}.ion-spinner-small{height:14px;width:14px;line-height:14px;margin:0;padding:0}.ion-spinner-small svg{height:14px;width:14px}.icon-secondary{position:absolute;height:100%;display:flex;align-items:center;font-size:16px;left:25px;top:-7px}div[dropzone]{border:2px dashed #bbb;border-radius:5px;padding:15px;text-align:center;font:20pt bold;color:#bbb;margin-bottom:20px;cursor:pointer}div[dropzone] .item,div[dropzone] .list .item{text-align:left}div[dropzone]:hover{background-color:#f2f2f2}.button-fab-hero.button-fab-top-left,.button-fab-hero.button-fab-top-right,.hero .button-fab-top-left,.hero .button-fab-top-right{top:170px!important}.bar .button.button-fab.mini,.button.button-fab.mini{min-width:40px;min-height:40px}.button-fab-hero.button-fab-top-left.mini,.button-fab-hero.button-fab-top-right.mini,.hero .button-fab-top-left.mini,.hero .button-fab-top-right.mini{top:178px!important}.text-no-transform{text-transform:inherit}.button-icon-event,.item-icon-event{text-transform:inherit;pointer-events:none!important}#menu .footer .button-icon-event .icon-help,#menu .footer .item-icon-event .icon-help,.button-icon-event #menu .footer .icon-help,.button-icon-event .icon,.button-icon-event .icon-alert,.button-icon-event .icon-event,.button-icon-event .icon-help,.item-icon-event #menu .footer .icon-help,.item-icon-event .icon,.item-icon-event .icon-alert,.item-icon-event .icon-event,.item-icon-event .icon-help{pointer-events:all!important}.hero.dark-100-bg{background-color:#555}.hero.positive-900-bg{background-color:#1a237e!important}.hero.stable-bg{background-color:#f8f8f8!important}.popover-locked-outputs .item .badge{right:16px!important}.animate-show-hide.ng-hide{opacity:0}.animate-show-hide.ng-hide-add,.animate-show-hide.ng-hide-remove{transition:all linear .3s}.modal iframe.iframe-license{width:100%;height:calc(100% - 171px)!important}@media screen and (max-width:767px){.modal iframe.iframe-license{height:calc(100% - 104px)}}@media screen and (min-width:768px) and (max-width:991px) and (min-height:600px){.modal iframe.iframe-license{height:calc(100% - 171px)}}@media screen and (min-width:992px){.modal iframe.iframe-license{height:calc(100% - 171px)}.modal.modal-license iframe.iframe-license{height:calc(100% - 111px)!important}}.modal.modal-help .row.selected .col:first-child{font-weight:700}@media screen and (max-width:767px){.modal.modal-help .row .col:first-child{font-weight:700}.modal.modal-help h2{padding-left:10px}}.modal.modal-login .item.item-icon-right.item-text-wrap .item-content{margin-right:58px;text-overflow:ellipsis;overflow:hidden}.popover-locales{height:284px;width:200px}.popover-locales .item{height:48px}.buttons-tabs{display:block;height:57px;border:0;padding:16px 16px 0 16px;overflow:hidden}.buttons-tabs .button.button-tab:first-child{border-top-left-radius:15px}.buttons-tabs .button.button-tab:last-child{border-top-right-radius:15px}.buttons-tabs .button.button-tab.active{background-color:#b2e0ff}.buttons-tabs.border-bottom{border-bottom:solid 1px #ccc!important}@media screen and (max-width:767px){.buttons-tabs{padding:10px 10px 0 10px}.buttons-tabs .button.button-tab{padding:2px 10px 0 10px!important}}
\ No newline at end of file
diff --git a/www/css/style.css b/www/css/style.css
index bd8c79dc9259d6b73f7b523994675512b0689463..f8bcc3291f97fd076feaeb9af87b52816740a00d 100644
--- a/www/css/style.css
+++ b/www/css/style.css
@@ -226,17 +226,17 @@
 .item-block.item-block-empty {
   min-height: 24px !important;
   max-height: 24px !important;
-  padding-top: 0px;
-  padding-bottom: 0px;
+  padding-top: 0;
+  padding-bottom: 0;
 }
 
 .item-block.item-block-empty .badge {
-  padding-top: 0px !important;
+  padding-top: 0 !important;
   top: inherit;
 }
 
 .item-block.item-block-empty .badge.badge-balanced {
-  top: 0px !important;
+  top: 0 !important;
   padding-top: 3px !important;
   padding-bottom: 2px !important;
 }
@@ -244,50 +244,13 @@
 .item-block-empty.compacted {
   min-height: 3px !important;
   max-height: 3px !important;
-  border-bottom: 0px !important;
+  border-bottom: 0 !important;
 }
 
 .item-block.item-block-empty.compacted {
   border-bottom: double 1px #eee !important;
 }
 
-
-/**********
-   TX items
-**********/
-
-.item-tx{
-  border-top: solid 1px lightgray !important;
-  margin-bottom: 4px ;
-  padding-bottom: 6px;
-  padding-top: 8px;
-  margin: 0 !important;
-}
-
-.item-tx .badge{
-  right : 1%;
-  top: 13px;
-}
-
-.item-tx .vertical-center{
-  position: absolute;
-  top: 30%;
-  width: 40%;
-}
-
-.item-tx .width-cup{
-  width: 175px;
-}
-
-.expert-mode .item-tx .item-note {
-  top : 8%;
-}
-
-.expert-mode .item-tx .badge-secondary {
-  top : 52% !important;
-}
-
-
 /**********
    List of wallet
 **********/
diff --git a/www/img/marker-icon-2x.png b/www/img/marker-icon-2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..0015b6495fa458ad39d51cb4b913430016f48d33
Binary files /dev/null and b/www/img/marker-icon-2x.png differ
diff --git a/www/img/marker-icon.png b/www/img/marker-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2e9f757f515ded172e6f72c3ce55bbe15579649
Binary files /dev/null and b/www/img/marker-icon.png differ
diff --git a/www/img/marker-shadow.png b/www/img/marker-shadow.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1e773c715a9b508ebea055c4bb4b0a2ad7f6e52
Binary files /dev/null and b/www/img/marker-shadow.png differ
diff --git a/www/img/markers-matte.png b/www/img/markers-matte.png
new file mode 100644
index 0000000000000000000000000000000000000000..178258665dd06a9e387d85d48553beef8161650c
Binary files /dev/null and b/www/img/markers-matte.png differ
diff --git a/www/img/markers-matte@2x.png b/www/img/markers-matte@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..c981244dd3bba2fa7eb186253fdad64d8a2fdc06
Binary files /dev/null and b/www/img/markers-matte@2x.png differ
diff --git a/www/img/markers-plain.png b/www/img/markers-plain.png
new file mode 100644
index 0000000000000000000000000000000000000000..763f358932496cf5f83cb092156e8653113d339e
Binary files /dev/null and b/www/img/markers-plain.png differ
diff --git a/www/img/markers-soft.png b/www/img/markers-soft.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ee4c348dde1a740fd946c4212b0642ed5ab137c
Binary files /dev/null and b/www/img/markers-soft.png differ
diff --git a/www/img/markers-soft@2x.png b/www/img/markers-soft@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..540ce63759f8a8c7c46d136c14a4392c5802d635
Binary files /dev/null and b/www/img/markers-soft@2x.png differ
diff --git a/www/index.html b/www/index.html
index ab6fecd6b57c6573481e9c3b7ffb86a8fd84de9e..67aa45854cafb99748c1020779d0c8d25649414c 100644
--- a/www/index.html
+++ b/www/index.html
@@ -14,15 +14,16 @@
 
     <link rel="manifest" href="manifest.json">
     <!-- build:css dist_css/cesium.css -->
-    <link rel="stylesheet" type="text/css" href="css/ionic.app.min.css">
+    <link rel="stylesheet" type="text/css" href="css/ionic.app.css">
     <link rel="stylesheet" type="text/css" href="css/style.css">
-    <link rel="stylesheet" type="text/css" href="css/angular-image-crop.css">
+    <link rel="stylesheet" type="text/css" href="lib/angular-image-crop/image-crop-styles.css">
     <!-- removeIf(device) -->
     <link rel="stylesheet" type="text/css" href="css/style-no-device.css">
     <!-- endRemoveIf(device) -->
 
     <!-- removeIf(no-plugin) -->
     <link rel="stylesheet" type="text/css" href="css/leaflet.app.min.css">
+    <link rel="stylesheet" type="text/css" href="lib/chart.js/dist/Chart.min.css">
     <link rel="stylesheet" type="text/css" href="dist/dist_css/plugins/es/css/style.css">
     <link rel="stylesheet" type="text/css" href="dist/dist_css/plugins/graph/css/style.css">
     <link rel="stylesheet" type="text/css" href="dist/dist_css/plugins/graph/css/style.css">
@@ -53,9 +54,6 @@
   </head>
   <body id="cesium" ng-strict-di="true" window-exit-unauth="true"
         ng-class="{'nobackdrop': $root.tour, 'expert-mode': $root.settings.expertMode}">
-
-
-
     <ion-nav-view>
       <div class="loader">
         <h3 style="text-align: center; padding-top: 25px; "><b>Cesium</b></h3>
@@ -65,61 +63,68 @@
 
     <!-- build:js dist_js/vendor.js -->
     <!-- vendor js -->
-    <script src="js/vendor/moment.min.js"></script>
-    <script src="js/vendor/moment.fr.js"></script>
-    <script src="js/vendor/moment.nl.js"></script>
-    <script src="js/vendor/moment.es.js"></script>
-    <script src="js/vendor/numeral.js"></script>
-    <script src="js/vendor/numeral.fr.js"></script>
-    <script src="js/vendor/numeral.en.js"></script>
-    <script src="js/vendor/numeral.nl.js"></script>
-    <script src="js/vendor/numeral.es.js"></script>
+    <script src="lib/moment/min/moment-with-locales.min.js"></script>
+
+    <script src="lib/numeral/numeral.js"></script>
+    <script src="lib/numeral/languages/fr.js"></script>
+    <script src="lib/numeral/languages/en-gb.js"></script>
+    <script src="lib/numeral/languages/nl-nl.js"></script>
+    <script src="lib/numeral/languages/es.js"></script>
+    <script src="lib/numeral/languages/it.js"></script>
+    <script src="js/vendor/numeral.eo.js"></script>
+
     <script src="js/vendor/socket-io.js"></script>
-    <script src="js/vendor/underscore.js"></script>
-    <script src="js/vendor/qrcode.min.js"></script>
-    <script src="js/vendor/aes-js.js"></script>
-    <script src="js/vendor/Chart.js"></script>
+    <script src="lib/underscore/underscore-min.js"></script>
+    <script src="lib/qrcode.js/qrcode.js"></script>
+
+    <script src="lib/aes-js/index.js"></script>
+    <script src="lib/chart.js/dist/Chart.min.js"></script>
 
-    <!-- ionic/angularjs js -->
-    <script src="lib/ionic/js/ionic.bundle.js"></script>
-    <script src="lib/ionic/js/ionic.material.js"></script>
-    <script src="lib/ionic/js/angular/angular-resource.js"></script>
-    <script src="lib/ionic/js/angular/angular-translate.js"></script>
-    <script src="lib/ionic/js/angular/angular-messages.js"></script>
-    <script src="lib/ionic/js/angular/angular-api.js"></script>
-    <script src="lib/ionic/js/angular/angular-cache.js"></script>
-    <script src="lib/ionic/js/angular/angular-screenmatch.min.js"></script>
-    <script src="lib/ionic/js/angular/angular-bind-notifier.min.js"></script>
-    <script src="lib/ionic/js/angular/angular-image-crop.js"></script>
-    <script src="lib/ionic/js/angular/angular-file-saver.bundle.js"></script>
-    <script src="lib/ionic/js/angular/angular-idle.js"></script>
-    <script src="lib/ionic/js/angular/angular-simple-logger.light.js"></script>
-    <script src="lib/ionic/js/angular/ui-leaflet.js"></script>
-    <script src="js/vendor/ion-digit-keyboard.min.js"></script>
-    <script src="lib/ionic/js/angular/angular-chart.min.js"></script>
-    <script src="lib/ionic/js/angular/angular-fullscreen.js"></script>
+    <!-- ionic/angular js -->
+    <script src="lib/ionic/js/ionic.js"></script>
+    <script src="lib/angular/angular.js"></script>
+    <script src="lib/angular-animate/angular-animate.js"></script>
+    <script src="lib/angular-sanitize/angular-sanitize.js"></script>
+    <script src="lib/angular-ui-router/release/angular-ui-router.js"></script>
+    <script src="lib/ionic/js/ionic-angular.js"></script>
+    <script src="lib/ionic-material/dist/ionic.material.js"></script>
+    <script src="lib/angular-resource/angular-resource.js"></script>
+    <script src="lib/angular-translate/angular-translate.js"></script>
+    <script src="lib/angular-messages/angular-messages.js"></script>
+    <script src="lib/angular-api/angular-api.js"></script>
+    <script src="lib/angular-cache/dist/angular-cache.js"></script>
+    <script src="lib/angular-screenmatch/dist/angular-screenmatch.min.js"></script>
+    <script src="lib/angular-bind-notifier/dist/angular-bind-notifier.min.js"></script>
+    <script src="lib/angular-image-crop/image-crop.js"></script>
+    <script src="lib/angular-file-saver/dist/angular-file-saver.bundle.js"></script>
+    <script src="lib/ng-idle/angular-idle.js"></script>
+    <script src="lib/angular-simple-logger/dist/angular-simple-logger.light.js"></script>
+    <script src="lib/ui-leaflet/dist/ui-leaflet.js"></script>
+    <script src="lib/ion-digit-keyboard/dist/ion-digit-keyboard.min.js"></script>
+    <script src="lib/angular-chart.js/dist/angular-chart.min.js"></script>
+    <script src="lib/angular-fullscreen/src/angular-fullscreen.js"></script>
 
     <script src="js/vendor/base58.js" async></script>
     <!--removeIf(android)-->
     <!--removeIf(ios)-->
-    <script src="js/vendor/nacl_factory.js" async></script>
-    <script src="js/vendor/scrypt-em.js" async></script>
+    <script src="lib/js-nacl/lib/nacl_factory.js" async></script>
+    <script src="lib/js-scrypt/browser/scrypt.js" async></script>
     <script src="js/vendor/base64.js" async></script>
     <!--endRemoveIf(ios)-->
     <!--endRemoveIf(android)-->
     <!--removeIf(no-device)-->
     <script src="js/vendor/sha256.min.js" async></script>
-    <script src="js/vendor/ng-cordova.min.js"></script>
+    <script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
     <!--endRemoveIf(no-device)-->
 
     <!--removeIf(no-plugin)-->
-    <script src="js/vendor/leaflet.js"></script>
-    <script src="js/vendor/leaflet.awesome-markers.min.js"></script>
-    <script src="js/vendor/leaflet.search.min.js"></script>
-    <script src="js/vendor/leaflet.easy-button.js"></script>
-    <script src="js/vendor/leaflet.loading.js"></script>
-    <script src="js/vendor/leaflet.markercluster.js"></script>
-    <script src="js/vendor/leaflet.featuregroup.subgroup-src.js"></script>
+    <script src="lib/leaflet/dist/leaflet.js"></script>
+    <script src="lib/Leaflet.awesome-markers/dist/leaflet.awesome-markers.min.js"></script>
+    <script src="lib/leaflet-search/dist/leaflet-search.src.js"></script>
+    <script src="lib/Leaflet.EasyButton/src/easy-button.js"></script>
+    <script src="lib/leaflet.loading/src/Control.Loading.js"></script>
+    <script src="lib/leaflet.markercluster/dist/leaflet.markercluster.js"></script>
+    <script src="lib/Leaflet.FeatureGroup.SubGroup/leaflet.featuregroup.subgroup-src.js"></script>
     <!--endRemoveIf(no-plugin)-->
 
     <!-- endbuild -->
@@ -156,7 +161,6 @@
     <script src="dist/dist_js/app/entities/block.js"></script>
     <script src="dist/dist_js/app/entities/ws2pmessage.js"></script>
 
-
     <!-- controllers -->
     <script src="dist/dist_js/app/controllers/app-controllers.js"></script>
     <script src="dist/dist_js/app/controllers/join-controllers.js"></script>
diff --git a/www/js/app.js b/www/js/app.js
index 478af2680b797222545e54616a1b94351ad34882..2c8db1246555b2660c1bdfc0c854adbb49de1518 100644
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -4,7 +4,7 @@
 // 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
 // the 2nd parameter is an array of 'requires'
 // 'starter.controllers' is found in controllers.js
-angular.module('cesium', ['ionic', 'ionic-material', 'ngMessages', 'pascalprecht.translate',
+angular.module('cesium', ['ionic', 'ionic-material', 'ngMessages', 'ngSanitize', 'pascalprecht.translate',
   'ngApi', 'angular-cache', 'angular.screenmatch', 'angular.bind.notifier', 'ImageCropper', 'ion-digit-keyboard',
   'FBAngular', // = angular-fullscreen
   // removeIf(no-device)
diff --git a/www/js/config.js b/www/js/config.js
index de9aeab2edbf99fa8450cd6ceaaf3743cb652826..7b80d11dc2cbcfae6612e34b19e6e95f6ac59a95 100644
--- a/www/js/config.js
+++ b/www/js/config.js
@@ -94,7 +94,7 @@ angular.module("cesium.config", [])
 		}
 	},
 	"version": "1.4.12",
-	"build": "2019-11-16T13:39:37.358Z",
+	"build": "2019-12-23T16:20:00.370Z",
 	"newIssueUrl": "https://git.duniter.org/clients/cesium-grp/cesium/issues/new"
 })
 
diff --git a/www/js/controllers/blockchain-controllers.js b/www/js/controllers/blockchain-controllers.js
index 983f762ca47035d24a1e7261530ff620e7a86bbf..efd8e141c1b8840d7b480972446c3d2957ae466a 100644
--- a/www/js/controllers/blockchain-controllers.js
+++ b/www/js/controllers/blockchain-controllers.js
@@ -331,12 +331,12 @@ function BlockLookupController($scope, $timeout, $focus, $filter, $state, $ancho
 
     $scope.smallscreen = UIUtils.screen.isSmall();
 
+    $scope.$broadcast('$$rebind::rebind'); // notify binder
+
     // Set Motion
     if (res && res.length) {
       $scope.motion.show({selector: '.list-blocks .item-block'});
     }
-
-    $scope.$broadcast('$$rebind::rebind'); // notify binder
   };
 
   $scope.showMore = function() {
diff --git a/www/js/controllers/currency-controllers.js b/www/js/controllers/currency-controllers.js
index 30467cb70447b99c0156ecfef2f94383716a9abb..985276bed83d6228a889182210340a4832666980 100644
--- a/www/js/controllers/currency-controllers.js
+++ b/www/js/controllers/currency-controllers.js
@@ -235,7 +235,7 @@ function CurrencyViewController($scope, $q, $timeout, $ionicPopover, Modals, BMA
 
       console.debug("[currency] Parameters loaded in " + (Date.now() - now) + 'ms' );
       $scope.loading = false;
-      $scope.$broadcast('$$rebind::' + 'rebind'); // force bind of currency name
+      $scope.$broadcast('$$rebind::rebind'); // force bind of currency name
 
       // Set Ink
       UIUtils.ink();
diff --git a/www/js/controllers/join-controllers.js b/www/js/controllers/join-controllers.js
index 80a261a84edf0478e15cda9d63ee33a63ba1e679..f05651cad4eec6e8223a02aa340a2631b8021502 100644
--- a/www/js/controllers/join-controllers.js
+++ b/www/js/controllers/join-controllers.js
@@ -113,11 +113,12 @@ function JoinChooseAccountTypeModalController($scope, $state, Modals, UIUtils, c
 }
 
 
-function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtils, CryptoUtils, csSettings, Modals, csWallet, BMA, parameters) {
+function JoinModalController($scope, $state, $interval, $q, $timeout, Device, UIUtils, CryptoUtils, csSettings, Modals, csWallet, BMA, parameters) {
   'ngInject';
 
   $scope.formData = {
-    pseudo: ''
+    pseudo: parameters.uid || '',
+    pubkey: parameters.pubkey || undefined
   };
   $scope.slides = {
     slider: null,
@@ -138,15 +139,26 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
   $scope.formData.computing=false;
   $scope.smallscreen = UIUtils.screen.isSmall();
   $scope.userIdPattern = BMA.constants.regexp.USER_ID;
+  $scope.accountAvailable = !!parameters.pubkey;
 
   // Read input parameters
   $scope.currency = parameters.currency;
   $scope.accountType = parameters.accountType || 'member';
 
+  var wallet;
+
   $scope.load = function() {
     if ($scope.loading) {
 
-      if ($scope.accountType == 'member') {
+      // Get the wallet
+      wallet = (parameters.walletId && csWallet.children.get(parameters.walletId)) ||
+        (parameters.pubkey && csWallet.children.getByPubkey(parameters.pubkey)) ||
+        ((!parameters.pubkey || csWallet.isUserPubkey(parameters.pubkey)) && csWallet);
+      if (!wallet) throw new Error("Cannot found the corresponding wallet, from parameters.pubkey or parameters.walletId");
+
+      console.debug("[join] Starting join modal on wallet {0}".format(wallet.id));
+
+      if ($scope.accountType === 'member') {
         $scope.licenseFileUrl = csSettings.getLicenseUrl();
         if ($scope.licenseFileUrl) {
           // Use HTML in iframe, when original file is markdown (fix #538)
@@ -190,6 +202,12 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
   };
 
   $scope.showAccountPubkey = function() {
+    if (parameters.pubkey && parameters.pseudo === $scope.formData.pseudo) {
+      $scope.formData.pubkey = parameters.pubkey;
+      $scope.formData.computing = false;
+      return;
+    }
+
     $scope.formData.computing=true;
 
     CryptoUtils.scryptKeypair($scope.formData.username, $scope.formData.password)
@@ -218,6 +236,7 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
     var index = $scope.slides.slider.activeIndex;
     if($scope.accountType === 'member') {
       index += ($scope.licenseFileUrl ? 0 : 1); // skip index 0, when no license file
+      index += (parameters.pubkey && index >= 2 ? 2 : 0); // skip salt+pass, if already a pubkey
       if (index === 0) return "licenseForm";
       if (index === 1) return "pseudoForm";
       if (index === 2) return "saltForm";
@@ -235,14 +254,14 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
     var formName = $scope.getCurrentFormName();
 
     var behavior;
-    if (formName == "licenseForm") {
+    if (formName === "licenseForm") {
       behavior = {
         hasPreviousButton: false,
         hasNextButton: false,
         hasAcceptButton: true
       };
     }
-    else if (formName == "pseudoForm") {
+    else if (formName === "pseudoForm") {
       behavior = {
         helpAnchor: 'join-pseudo',
         hasPreviousButton: $scope.licenseFileUrl && true,
@@ -250,7 +269,7 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
         focus: 'pseudo'
       };
     }
-    else if (formName == "saltForm") {
+    else if (formName === "saltForm") {
       behavior = {
         helpAnchor: 'join-salt',
         hasPreviousButton: $scope.accountType === 'member',
@@ -258,7 +277,7 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
         focus: 'salt'
       };
     }
-    else if (formName == "passwordForm") {
+    else if (formName === "passwordForm") {
       behavior = {
         helpAnchor: 'join-password',
         hasPreviousButton: true,
@@ -266,7 +285,7 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
         focus: 'password'
       };
     }
-    else if (formName == "confirmForm") {
+    else if (formName === "confirmForm") {
       behavior = {
         hasPreviousButton: true,
         hasNextButton: false,
@@ -342,16 +361,25 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
 
     var onErrorLogout = function(message) {
       return function(err) {
-        csWallet.logout()
-        .then(function(){
-          UIUtils.onError(message)(err);
-        });
+        if (parameter.uid) {
+          wallet.unauth()
+            .then(function(){
+              UIUtils.onError(message)(err);
+            });
+        }
+        else {
+          wallet.logout()
+            .then(function(){
+              UIUtils.onError(message)(err);
+            });
+        }
+        throw new Error('CANCELLED');
       };
     };
 
     UIUtils.loading.show();
 
-    return csWallet.login({
+    return wallet.login({
         auth: true,
         isNew: true,
         method: 'SCRYPT_DEFAULT',
@@ -364,44 +392,74 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
           csSettings.data.wallet = csSettings.data.wallet || {};
           csSettings.data.wallet.alertIfUnusedWallet = false; // do not alert if empty
 
-          // Send self
-          return csWallet.self($scope.formData.pseudo, false/*do NOT load membership here*/)
+          var needSelf = angular.isUndefined(parameters.uid) || angular.isUndefined(parameters.blockUid) ||
+            (parameters.uid.toUpperCase() !== $scope.formData.pseudo.toUpperCase());
+          if (!needSelf) {
+            wallet.setSelf(parameters.uid, parameters.blockUid)
+          }
+
+          // Self promise (if need)
+          var selfPromise = needSelf ?
+            wallet.self($scope.formData.pseudo, false/*do NOT load membership here*/)
+              .catch(onErrorLogout('ERROR.SEND_IDENTITY_FAILED')) :
+            $q.when();
+
+          return selfPromise
             .then(function() {
               // Send membership IN
-              csWallet.membership.inside()
-              .then(function() {
-
-                $scope.closeModal();
-
-                // Redirect to wallet
-                $state.go('app.view_wallet')
-                  .then(function() {
-                    // Wait 12s (for wallet load)
-                    // then ask to download revocation file
-                    return $timeout(
-                      $scope.downloadRevocationRegistration,
-                      2000);
-                  });
-              })
-              .catch(function(err) {
-                if (err && err.ucode != BMA.errorCodes.MEMBERSHIP_ALREADY_SEND) return;
-                onErrorLogout('ERROR.SEND_MEMBERSHIP_IN_FAILED')(err);
-              });
+              return wallet.membership.inside()
+                .catch(function(err) {
+                  if (err && err.ucode != BMA.errorCodes.MEMBERSHIP_ALREADY_SEND) return;
+                  onErrorLogout('ERROR.SEND_MEMBERSHIP_IN_FAILED')(err);
+                });
+            })
+            .then(function() {
+
+              $scope.closeModal();
+
+              // Redirect to wallet
+              if (wallet.isDefault()) {
+                return $state.go('app.view_wallet');
+              } else {
+                return $state.go('app.view_wallet_by_id', {id: wallet.id});
+              }
             })
-            .catch(onErrorLogout('ERROR.SEND_IDENTITY_FAILED'));
+            .then(function() {
+              // Wait 2s (for wallet load)
+              // then ask to download revocation file
+              return $timeout(function() {
+                // Hide the loading indicator, if wallet already loaded
+                if (wallet.isDataLoaded({requirements: true})) {
+                  UIUtils.loading.hide();
+                }
+                return $scope.downloadRevocationRegistration();
+              },
+              2000);
+            });
         }
         else{
           $scope.closeModal();
 
           // Redirect to wallet
-          $state.go('app.view_wallet');
+          if (wallet.isDefault()) {
+            $state.go('app.view_wallet');
+          }
+          else {
+            $state.go('app.view_wallet_by_id', {id: wallet.id});
+          }
 
         }
       })
       .catch(function(err) {
         UIUtils.loading.hide();
-        console.error('>>>>>>>' , err);
-        UIUtils.alert.error('ERROR.CRYPTO_UNKNOWN_ERROR');
+        if (err === 'CANCELLED') return;
+        if (err && err.ucode != BMA.errorCodes.MEMBERSHIP_ALREADY_SEND) {
+          console.error("[wallet] Node: already membership", err);
+          return; // OK
+        }
+        else {
+          UIUtils.alert.error('ERROR.UNKNOWN_ERROR');
+        }
       });
   };
 
@@ -414,7 +472,7 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
       })
     .then(function(confirm) {
       if (!confirm) return;
-      return csWallet.downloadRevocation();
+      return wallet.downloadRevocation();
     });
   };
 
@@ -460,25 +518,38 @@ function JoinModalController($scope, $state, $interval, $timeout, Device, UIUtil
     var uid = $scope.formData.pseudo.toUpperCase();
     $scope.formData.computing=true;
 
-    // search on uid
-    BMA.wot.lookup({ search: uid })
-      .then(function(res) {
-        $scope.uiAlreadyUsed = (res.results || []).some(function(pub){
-            return (pub.uids || []).some(function(idty) {
-                return (idty.uid.toUpperCase() === uid); // same Uid
-              });
-          });
-        $scope.formData.computing=false;
-      })
-      .catch(function(err){
-        console.error(err);
-        $scope.formData.computing=false;
-        $scope.uiAlreadyUsed = false;
-      });
+    // Same has given uid + self block: skip control
+    if (parameters.uid && uid === parameters.uid.toUpperCase()) {
+      $scope.formData.computing=false;
+      $scope.uiAlreadyUsed = false;
+      return;
+    }
+    else {
+      // search on uid
+      BMA.wot.lookup({ search: uid })
+        .then(function(res) {
+          $scope.uiAlreadyUsed = (res.results || []).some(function(pub){
+              return (pub.uids || []).some(function(idty) {
+                  return (idty.uid.toUpperCase() === uid); // same Uid
+                });
+            });
+          $scope.formData.computing=false;
+        })
+        .catch(function(err){
+          console.error(err);
+          $scope.formData.computing=false;
+          $scope.uiAlreadyUsed = false;
+        });
+    }
   };
   $scope.$watch('formData.pseudo', $scope.checkUid, true);
 
   $scope.checkAccountAvailable = function() {
+    if (parameters.pubkey) {
+      $scope.accountAvailable = true;
+      return;
+    }
+
     delete $scope.accountAvailable;
     // Search for tx source, from pubkey
     return BMA.tx.sources({ pubkey:  $scope.formData.pubkey })
diff --git a/www/js/controllers/network-controllers.js b/www/js/controllers/network-controllers.js
index bfeb74bbfe0e52a2db07b5a879f64338d831ece6..0fdbb64ea890aebab28ba3d786e140a83113a3c5 100644
--- a/www/js/controllers/network-controllers.js
+++ b/www/js/controllers/network-controllers.js
@@ -179,17 +179,17 @@ function NetworkLookupController($scope,  $state, $location, $ionicPopover, $win
 
   $scope.updateView = function(data) {
     console.debug("[peers] Updating UI");
-    $scope.$broadcast('$$rebind::' + 'rebind'); // force data binding
+    $scope.$broadcast('$$rebind::rebind'); // force data binding
     $scope.search.results = data.peers;
     $scope.search.memberPeersCount = data.memberPeersCount;
     // Always tru if network not started (e.g. after leave+renter the view)
     $scope.search.loading = !$scope.networkStarted || csNetwork.isBusy();
+    if (!$scope.loading) {
+      $scope.$broadcast('$$rebind::rebind'); // force data binding
+    }
     if ($scope.motion && $scope.search.results && $scope.search.results.length > 0) {
       $scope.motion.show({selector: '.item-peer'});
     }
-    if (!$scope.loading) {
-      $scope.$broadcast('$$rebind::' + 'rebind'); // force data binding
-    }
   };
 
   $scope.refresh = function() {
@@ -248,7 +248,7 @@ function NetworkLookupController($scope,  $state, $location, $ionicPopover, $win
 
   $scope.toggleCompactMode = function() {
     $scope.compactMode = !$scope.compactMode;
-    $scope.$broadcast('$$rebind::' + 'rebind'); // force data binding
+    $scope.$broadcast('$$rebind::rebind'); // force data binding
   };
 
   $scope.selectPeer = function(peer) {
@@ -506,7 +506,7 @@ function PeerInfoPopoverController($scope, $q, csSettings, csCurrency, csHttp, B
           $scope.formData.hasNewRelease = false;
         }
         $scope.loading = false;
-        $scope.$broadcast('$$rebind::' + 'rebind'); // force data binding
+        $scope.$broadcast('$$rebind::rebind'); // force data binding
       });
   };
 
diff --git a/www/js/controllers/transfer-controllers.js b/www/js/controllers/transfer-controllers.js
index 61c1d16e7d200ecb913425fd69b7a0628891bda3..cedbccf90a3554a822429829010abc576dac59a0 100644
--- a/www/js/controllers/transfer-controllers.js
+++ b/www/js/controllers/transfer-controllers.js
@@ -257,7 +257,7 @@ function TransferModalController($scope, $q, $translate, $timeout, $filter, $foc
     }
 
     $scope.form.$valid = valid;
-    $scope.form.amount.$invalid = !valid;
+    if ($scope.form.amount) $scope.form.amount.$invalid = !valid;
 
     if (!valid || !$scope.formData.all || !amount) {
       $scope.formData.restAmount = undefined;
diff --git a/www/js/controllers/wallet-controllers.js b/www/js/controllers/wallet-controllers.js
index 5fe49a977d7baa44af98b4af9c613d45f24a058c..e2b6be452d68822e4b464e6a8a1044d6d20f6ae5 100644
--- a/www/js/controllers/wallet-controllers.js
+++ b/www/js/controllers/wallet-controllers.js
@@ -64,6 +64,8 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state,
   $scope.loading = true;
   $scope.settings = csSettings.data;
   $scope.qrcodeId = 'qrcode-wallet-' + $scope.$id;
+  $scope.toggleQRCode = false;
+
 
   var wallet;
 
@@ -114,7 +116,7 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state,
 
   $scope.updateView = function() {
     $scope.motion.show({selector: '#wallet .item'});
-    $scope.$broadcast('$$rebind::' + 'rebind'); // force rebind
+    $scope.$broadcast('$$rebind::rebind'); // force rebind
   };
 
 
@@ -247,44 +249,23 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state,
       return UIUtils.alert.info("INFO.NOT_NEED_MEMBERSHIP");
     }
 
-    // Select uid (or reuse it)
-    return ((keepSelf && !!$scope.formData.blockUid) ?
-        $q.when($scope.formData.uid) :
-        $scope.showUidPopup())
-
-      // Ask user confirmation
-      .then(function(uid) {
-        return UIUtils.alert.confirm("CONFIRM.MEMBERSHIP")
-          .then(function(confirm) {
-            if (!confirm) throw 'CANCELLED';
-            return uid;
-          });
-      })
-
-      // Send self (identity) - if need
-      .then(function (uid) {
-        UIUtils.loading.show();
-
-        // If uid changed, or self blockUid not retrieve : do self() first
-        if (!$scope.formData.blockUid || uid != $scope.formData.uid) {
-          $scope.formData.blockUid = null;
-          $scope.formData.uid = uid;
+    var uid = angular.isDefined($scope.formData.blockUid) && $scope.formData.uid || undefined;
 
-          return wallet.self(uid, false/*do NOT load membership here*/);
-        }
-      })
-
-      // Send membership
-      .then($scope.doMembershipIn)
-      .catch(function(err) {
-        if (err === 'CANCELLED') return;
-        if (!wallet.data.uid) {
-          UIUtils.onError('ERROR.SEND_IDENTITY_FAILED')(err);
-        }
-        else {
-          UIUtils.onError('ERROR.SEND_MEMBERSHIP_IN_FAILED')(err);
-        }
-      });
+    // Approve the license
+    return Modals.showJoinMember({
+      uid : uid,
+      blockUid: uid && $scope.formData.blockUid,
+      pubkey: $scope.formData.pubkey
+    })
+    .catch(function(err) {
+      if (err === 'CANCELLED') return;
+      if (!wallet.data.uid) {
+        UIUtils.onError('ERROR.SEND_IDENTITY_FAILED')(err);
+      }
+      else {
+        UIUtils.onError('ERROR.SEND_MEMBERSHIP_IN_FAILED')(err);
+      }
+    });
   };
 
   // Send membership OUT
@@ -447,16 +428,16 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state,
    * @param fix
    */
   $scope.doQuickFix = function(event) {
-    if (event == 'renew') {
+    if (event === 'renew') {
       $scope.renewMembership();
     }
-    else if (event == 'membership') {
+    else if (event === 'membership') {
       $scope.membershipIn(true/*keep self*/);
     }
-    else if (event == 'fixMembership') {
-      $scope.fixMembership();
+    else if (event === 'fixMembership') {
+      $scope.fixMembership(false);
     }
-    else if (event == 'fixIdentity') {
+    else if (event === 'fixIdentity') {
       $scope.fixIdentity();
     }
   };
@@ -485,8 +466,8 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state,
         $scope.qrcodeId,
         {
           text: $scope.formData.pubkey,
-          width: 200,
-          height: 200,
+          width: 180,
+          height: 180,
           correctLevel: QRCode.CorrectLevel.L
         });
       UIUtils.motion.toggleOn({selector: '#'+$scope.qrcodeId}, timeout || 1100);
@@ -558,7 +539,7 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state,
       .then(function(done){
         if (done) {
           UIUtils.toast.show('INFO.TRANSFER_SENT');
-          $scope.$broadcast('$$rebind::' + 'balance'); // force rebind balance
+          $scope.$broadcast('$$rebind::balance'); // force rebind balance
           $scope.motion.show({selector: '.item-pending'});
         }
       });
@@ -600,9 +581,28 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state,
       });
   };
 
+  $scope.showSelectWalletModal = function() {
+    if (!csWallet.children.count()) return;
 
-  /* -- popovers -- */
+    return Modals.showSelectWallet({
+      parameters: {
+        showDefault: true,
+        showBalance: false,
+        excludedWalletId: $scope.walletId
+      }
+    })
+      .then(function(newWallet) {
+        if (!newWallet || wallet && newWallet.id === wallet.id) return;
+        $scope.removeListeners();
+        $scope.loading = true;
+        wallet = newWallet;
+        console.debug("[transfer] Using wallet {" + wallet.id + "}");
+        $scope.formData = {};
+        return $scope.load();
+      });
+  };
 
+  /* -- popovers -- */
 
   $scope.showActionsPopover = function(event) {
     UIUtils.popover.show(event, {
@@ -645,11 +645,13 @@ function WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state,
   };
 
   $scope.showSelectWalletPopover = function(event) {
+
     return csPopovers.showSelectWallet(event, {
-        scope: $scope
-      })
+      parameters: {
+        excludedWalletId: $scope.walletId
+      }})
       .then(function(newWallet) {
-        if (!newWallet || newWallet.id === wallet.id) return;
+        if (!newWallet || newWallet.id === $scope.walletId) return; // nothing changed
         if (newWallet.isDefault()) {
           return $state.go('app.view_wallet');
         }
@@ -692,6 +694,8 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location,
         return $scope.showHome();
       }
 
+      $scope.walletId = wallet.id;
+
       $scope.cleanLocationHref(state);
 
       return $scope.load();
@@ -754,8 +758,8 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location,
   // Update view
   $scope.updateView = function() {
     if (!$scope.formData || $scope.loading) return;
-    $scope.$broadcast('$$rebind::' + 'balance'); // force rebind balance
-    $scope.$broadcast('$$rebind::' + 'rebind'); // force rebind
+    $scope.$broadcast('$$rebind::balance'); // force rebind balance
+    $scope.$broadcast('$$rebind::rebind'); // force rebind
     $scope.motion.show({selector: '.view-wallet-tx .item', ink: false});
   };
 
@@ -841,7 +845,7 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location,
       .then(function(done){
         if (done) {
           UIUtils.toast.show('INFO.TRANSFER_SENT');
-          $scope.$broadcast('$$rebind::' + 'balance'); // force rebind balance
+          $scope.$broadcast('$$rebind::balance'); // force rebind balance
           $scope.motion.show({selector: '.item-pending'});
         }
       });
@@ -887,8 +891,11 @@ function WalletTxController($scope, $ionicPopover, $state, $timeout, $location,
     if (!csWallet.children.count()) return;
 
     return Modals.showSelectWallet({
-      showDefault: true,
-      showBalance: false
+      parameters: {
+        showDefault: true,
+        showBalance: false,
+        excludedWalletId: $scope.walletId
+      }
     })
     .then(function(newWallet) {
       if (!newWallet || wallet && newWallet.id === wallet.id) return;
diff --git a/www/js/controllers/wallets-controllers.js b/www/js/controllers/wallets-controllers.js
index 5d399f787c84993ada6c47e605013c2c1d79b2cc..5e9a7cfc0eb3307091d9f4ab64b46199a399ffd8 100644
--- a/www/js/controllers/wallets-controllers.js
+++ b/www/js/controllers/wallets-controllers.js
@@ -9,7 +9,7 @@ angular.module('cesium.wallets.controllers', ['cesium.services', 'cesium.currenc
         views: {
           'menuContent': {
             templateUrl: "templates/wallet/list/view_wallets.html",
-            controller: 'WalletListCtrl'
+            controller: 'WalletListViewCtrl'
           }
         },
         data: {
@@ -59,119 +59,220 @@ angular.module('cesium.wallets.controllers', ['cesium.services', 'cesium.currenc
       })
     ;
   })
+  .controller('WalletListAbstractCtrl', WalletListAbstractController)
 
-
-  .controller('WalletListCtrl', WalletListController)
+  .controller('WalletListViewCtrl', WalletListViewController)
 
   .controller('WalletSelectModalCtrl', WalletSelectModalController)
 
   .controller('WalletListImportModalCtrl', WalletListImportModalController)
 
-  .controller('PopoverWalletSelectModalCtrl', PopoverWalletSelectModalController)
+  .controller('WalletSelectPopoverCtrl', WalletSelectPopoverController)
 ;
 
-function WalletListController($scope, $controller, $state, $timeout, $q, $translate, $ionicPopover, $ionicPopup,
-                              ModalUtils, UIUtils, Modals, csCurrency, csSettings, csWallet){
+
+function WalletListAbstractController($scope, $q, $timeout, UIUtils, filterTranslations, csSettings, csCurrency, csWallet) {
   'ngInject';
 
-  $scope.settings = csSettings.data;
-  $scope.listeners = [];
+  $scope.loading = true;
+  $scope.wallets = null;
+  $scope.formData = {
+    useRelative: csSettings.data.useRelative,
+    showDefault: true,
+    showBalance: false,
+    balance: undefined,
+    updatingWalletId: undefined,
+    stopped: false,
+    minData: true
+  };
+  $scope.motion = null; // no animation
 
-  // Initialize the super class and extend it.
-  angular.extend(this, $controller('WalletSelectModalCtrl', {$scope: $scope, parameters: {}}));
+  $scope.setParameters = function(parameters) {
+    parameters = parameters || {};
 
-  // Override defaults
-  $scope.formData.name = undefined;
-  $scope.motion = UIUtils.motion.default;
-  $scope.entered = false;
+    $scope.formData.useRelative = angular.isDefined(parameters.useRelative) ? parameters.useRelative : $scope.formData.useRelative;
+    $scope.formData.showBalance = angular.isDefined(parameters.showBalance) ? parameters.showBalance : $scope.formData.showBalance;
+    $scope.formData.minData = angular.isDefined(parameters.minData) ? parameters.minData : $scope.formData.minData;
+    $scope.formData.excludedWalletId = parameters.excludedWalletId;
+    $scope.formData.showDefault = (angular.isDefined(parameters.showDefault) ? parameters.showDefault : $scope.formData.showDefault) &&
+       ($scope.formData.excludedWalletId !== 'default');
 
-  $scope.enter = function(e, state) {
-    // First enter
-    if (!$scope.entered) {
-      $scope.entered = true;
-      $scope.setParameters({
-        showDefault: true,
-        showBalance: true,
-        minData: false
-      });
+  };
 
-      return $scope.load()
-        .then(function() {
-          UIUtils.loading.hide();
-          if (!$scope.wallets) return; // user cancel, or error
-          $scope.addListeners();
-          $scope.showFab('fab-add-wallet');
-        });
+  $scope.load = function(options) {
+
+    options = options || {};
+    $scope.loading = (options.silent !== false);
+    $scope.formData.balance = undefined;
+    $scope.formData.updatingWalletId = undefined;
+    $scope.formData.stopped = false;
+
+    // Load currency, and filter translations (need by 'formatAmount' filter)
+    var jobs = [];
+
+    jobs.push(csCurrency.name()
+      .then(function(currency) {
+        $scope.currency = currency;
+        return filterTranslations.ready();
+      }));
+
+    // Get children wallets
+    $scope.defaultWallet = $scope.formData.showDefault ? csWallet : undefined;
+    if (!$scope.wallets) {
+      jobs.push(
+        csWallet.children.all()
+          .then(function(children) {
+            $scope.wallets=children;
+            UIUtils.loading.hide();
+          })
+      );
     }
-    // If already enter
-    else {
-      // Re-add listeners
-      $scope.addListeners();
-      if ($scope.formData.stopped) {
-        $scope.loading = false;
-        $scope.formData.stopped = false;
+
+    // Prepare load options
+    var walletLoadOptions = {
+      silent: true,
+      minData: $scope.formData.minData,
+      sources: $scope.formData.showBalance,
+      tx: {
+        enable: false
+      },
+      api: true
+    };
+    var hasLoadError = false;
+    var loadCounter = 0;
+    var now = Date.now();
+    var balance = 0;
+    return (jobs.length ? $q.all(jobs) : $q.when())
+      // Load wallet data (apply a timeout between each wallet)
+      .then(function() {
+        var wallets = $scope.formData.showDefault ? [csWallet].concat($scope.wallets) : $scope.wallets;
+        if (!wallets.length) return;
+        console.debug("[wallets] Loading {0} wallets...".format(wallets.length));
+        return wallets.reduce(function(res, wallet) {
+            var skip= !options.refresh && wallet.isDataLoaded(walletLoadOptions);
+            if (skip) {
+              console.debug("[wallets] Wallet #{0} already loaded. Skipping".format(wallet.id));
+              return res.then(function(){
+                balance += wallet.data.balance;
+                $scope.updateWalletView(wallet.id);
+              });
+            }
+            loadCounter++;
+            return res.then(function() {
+              if ($scope.formData.stopped) return; // skip if stopped
+              // Loading next wallet, after waiting some time
+                $scope.formData.updatingWalletId = wallet.id;
+                var loadPromise;
+                if (options.refresh && wallet.data.loaded) {
+                  var refreshOptions = angular.merge({
+                    // Refresh requirements if member account
+                    requirements: (!wallet.data.requirements.loaded || wallet.data.requirements.isMember || wallet.data.requirements.wasMember || wallet.data.requirements.pendingMembership)
+                  }, walletLoadOptions);
+                  loadPromise = wallet.refreshData(refreshOptions);
+                }
+                else {
+                  loadPromise = wallet.loadData(walletLoadOptions);
+                }
+
+                loadPromise.then(function(walletData) {
+                  balance += walletData.balance;
+                  $scope.updateWalletView(wallet.id);
+                })
+                .catch(function(err) {
+                  console.error("[wallets] Error while loading data of wallet #{0}".format(wallet.id), err);
+                  hasLoadError = true;
+                });
+                return loadPromise;
+            });
+          }, $q.when());
+      })
+      .then(function() {
+        if (hasLoadError) {
+          return UIUtils.alert.error('ERROR.LOAD_WALLET_LIST_FAILED')
+            .then(function() {
+              $scope.resetData();
+              $scope.cancel();
+            });
+        }
+        // Stop
+        if ($scope.formData.stopped) return;
+        if (loadCounter) {
+          console.debug("[wallets] Loaded data of {0} wallet(s) in {1}ms".format(loadCounter, (Date.now() - now)));
+        }
+        $scope.formData.balance = balance;
         $scope.formData.updatingWalletId = undefined;
+        $scope.loading = false;
+        UIUtils.loading.hide();
         $scope.updateView();
-      }
-    }
+      })
+      .catch(function(err) {
+        $scope.resetData();
+        if (err && err === 'CANCELLED') {
+          $scope.cancel();
+          throw err;
+        }
+        return UIUtils.onError('ERROR.LOAD_WALLET_LIST_FAILED')(err);
+      });
   };
-  $scope.$on('$ionicView.enter', $scope.enter);
 
-  $scope.leave = function() {
-    $scope.formData.stopped = true;
-    $scope.formData.updatingWalletId = undefined;
-    $scope.loading = false;
-    $scope.removeListeners();
+  $scope.filterFn = function(parameters) {
+    return function(wallet) {
+      return !parameters || wallet.id !== parameters.excludedWalletId;
+    };
   };
-  $scope.$on('$ionicView.leave', $scope.leave);
 
-  $scope.cancel = function() {
-    $scope.showHome();
+
+  // Clean controller data
+  $scope.resetData = function() {
+    console.debug("[wallets] Cleaning wallet list");
+    $scope.wallets = null;
+    $scope.loading = true;
+    $scope.entered = false;
+    $scope.formData.balance = undefined;
+    $scope.formData.updatingWalletId = undefined;
   };
 
-  $scope.select = function(event, wallet) {
-    if (event.isDefaultPrevented() || !wallet || $scope.selectPrevented) return;
-    if (wallet.isDefault()) {
-      $state.go('app.view_wallet');
+  $scope.updateView = function(walletId) {
+    if (!$scope.wallets || !$scope.wallets.length) return;
+
+    var selectorSuffix = walletId && (' #wallet-' + walletId) || '';
+
+    if ($scope.motion) {
+      $scope.motion.show({selector: '.list .item.item-wallet' + selectorSuffix, ink: true});
     }
     else {
-      $state.go('app.view_wallet_by_id', {id: wallet.id});
+      UIUtils.ink({selector: '.list .item.item-wallet' + selectorSuffix});
     }
-    event.preventDefault();
   };
 
-  $scope.editWallet = function(event, wallet) {
-
-    event.preventDefault();
+  $scope.updateWalletView = function(walletId) {
+    if ($scope.motion) {
+      $scope.motion.show({selector: '.list #wallet-' + walletId, ink: true});
+    }
+    else {
+      UIUtils.ink({selector: '.list #wallet-' + walletId});
+    }
+  };
 
-    return $scope.showEditPopup(wallet)
-      .then(function(newName) {
-        if (!newName) return;
+  $scope.doUpdate = function(silent) {
+    if ($scope.loading || !$scope.wallets || !$scope.wallets.length || $scope.formData.updatingWalletId) return $q.when();
 
-        // Auth (if encryption is need)
-        return (csSettings.data.useLocalStorageEncryption ? csWallet.auth({minData: true}) : $q.when())
+    $scope.selectPrevented = true;
+    $timeout(function() {
+      $scope.selectPrevented = false;
+    }, 1000);
 
-          // Save changes
-          .then(function() {
-            wallet.data.localName = newName;
-            csWallet.storeData();
-            UIUtils.loading.hide();
-            $scope.updateView();
-          })
-          .catch(function(err) {
-            if (err === 'CANCELLED') {
-              return UIUtils.loading.hide();
-            }
-            UIUtils.onError('ERROR.SAVE_WALLET_LIST_FAILED')(err);
-          });
+    return $scope.load({silent: silent, refresh: true})
+      .then(function() {
+        $scope.loading = false;
+        $scope.selectPrevented = false;
+        if (silent) {
+          $scope.$broadcast('$$rebind::rebind'); // force rebind
+        }
+        $scope.updateView();
       });
   };
 
-  $scope.downloadAsFile = function() {
-    if (!$scope.wallets) return; // user cancel
-    return csWallet.children.downloadFile();
-  };
-
   $scope.addNewWallet = function(wallet) {
 
     if (!wallet) return $q.reject("Missing 'wallet' argument");
@@ -222,43 +323,188 @@ function WalletListController($scope, $controller, $state, $timeout, $q, $transl
           return;
         }
 
-        // Avoid to add main wallet again
-        if (csWallet.isUserPubkey(walletData.pubkey)) {
-          UIUtils.loading.hide();
-          UIUtils.alert.error('ERROR.COULD_NOT_ADD_MAIN_WALLET');
-          return;
-        }
+        // Avoid to add main wallet again
+        if (csWallet.isUserPubkey(walletData.pubkey)) {
+          UIUtils.loading.hide();
+          UIUtils.alert.error('ERROR.COULD_NOT_ADD_MAIN_WALLET');
+          return;
+        }
+
+        // Avoid to add exists wallet again
+        if (csWallet.children.hasPubkey(walletData.pubkey)) {
+          UIUtils.loading.hide();
+          UIUtils.alert.error('ERROR.COULD_NOT_ADD_EXISTING_WALLET');
+          return;
+        }
+
+        console.debug("[wallet] Adding secondary wallet {"+walletData.pubkey.substring(0,8)+"}");
+
+        // Add the child wallet
+        return $scope.addNewWallet(wallet)
+          .then(function() {
+            UIUtils.loading.hide();
+            $scope.updateView();
+          });
+      })
+      .catch(function(err) {
+        if (err === 'CANCELLED') {
+          // Silent
+          UIUtils.loading.hide();
+        }
+      });
+  };
+
+  /* -- Method to override by subclasses-- */
+
+  $scope.addListenersOnWallet = function(wallet) {
+    // Can be override by subclass
+  };
+
+  $scope.cancel = function() {
+    console.warn("cancel() must be implement by subclass");
+  };
+
+  $scope.select = function(event, wallet) {
+    console.warn("select() must be implement by subclass");
+  };
+}
+
+function WalletSelectModalController($scope, $controller, parameters) {
+  'ngInject';
+
+  // Initialize the super class and extend it.
+  angular.extend(this, $controller('WalletListAbstractCtrl', {$scope: $scope}));
+
+  $scope.$on('modal.shown', function() {
+    $scope.setParameters(parameters);
+    $scope.load();
+  });
+
+  $scope.cancel = function() {
+    $scope.closeModal();
+  };
+
+  $scope.select = function(event, wallet) {
+    if (event.isDefaultPrevented() || !wallet || $scope.selectPrevented) return;
+    $scope.closeModal(wallet);
+  };
+
+  // Default actions
+  if (parameters) {
+    $scope.setParameters(parameters);
+  }
+}
+
+function WalletListViewController($scope, $controller, $state, $timeout, $q, $translate, $ionicPopover, $ionicPopup,
+                              ModalUtils, UIUtils, Modals, csCurrency, csSettings, csWallet){
+  'ngInject';
+
+  $scope.settings = csSettings.data;
+  $scope.listeners = [];
+
+  // Initialize the super class and extend it.
+  angular.extend(this, $controller('WalletListAbstractCtrl', {$scope: $scope, parameters: {}}));
+
+  // Override defaults
+  $scope.formData.name = undefined;
+  $scope.motion = UIUtils.motion.default;
+  $scope.entered = false;
+
+  $scope.enter = function(e, state) {
+    // First enter
+    if (!$scope.entered) {
+      $scope.entered = true;
+      $scope.setParameters({
+        showDefault: true,
+        showBalance: true,
+        minData: false
+      });
+
+      return $scope.load()
+        .then(function() {
+          UIUtils.loading.hide();
+          if (!$scope.wallets) return; // user cancel, or error
+          $scope.addListeners();
+          $scope.showFab('fab-add-wallet');
+        });
+    }
+    // If already enter
+    else {
+      // Re-add listeners
+      $scope.addListeners();
+      if ($scope.formData.stopped) {
+        $scope.loading = false;
+        $scope.formData.stopped = false;
+        $scope.formData.updatingWalletId = undefined;
+        $scope.updateView();
+      }
+    }
+  };
+  $scope.$on('$ionicView.enter', $scope.enter);
+
+  $scope.leave = function() {
+    $scope.formData.stopped = true;
+    $scope.formData.updatingWalletId = undefined;
+    $scope.loading = false;
+    $scope.removeListeners();
+  };
+  $scope.$on('$ionicView.leave', $scope.leave);
+
+  $scope.cancel = function() {
+    $scope.showHome();
+  };
+
+  $scope.select = function(event, wallet) {
+    if (event.isDefaultPrevented() || !wallet || $scope.selectPrevented) return;
+    if (wallet.isDefault()) {
+      $state.go('app.view_wallet');
+    }
+    else {
+      $state.go('app.view_wallet_by_id', {id: wallet.id});
+    }
+    event.preventDefault();
+  };
+
+  $scope.editWallet = function(event, wallet) {
+
+    event.preventDefault();
 
-        // Avoid to add exists wallet again
-        if (csWallet.children.hasPubkey(walletData.pubkey)) {
-          UIUtils.loading.hide();
-          UIUtils.alert.error('ERROR.COULD_NOT_ADD_EXISTING_WALLET');
-          return;
-        }
+    return $scope.showEditPopup(wallet)
+      .then(function(newName) {
+        if (!newName) return;
 
-        console.debug("[wallet] Adding secondary wallet {"+walletData.pubkey.substring(0,8)+"}");
+        // Auth (if encryption is need)
+        return (csSettings.data.useLocalStorageEncryption ? csWallet.auth({minData: true}) : $q.when())
 
-        // Add the child wallet
-        return $scope.addNewWallet(wallet)
+          // Save changes
           .then(function() {
+            wallet.data.localName = newName;
+            csWallet.storeData();
             UIUtils.loading.hide();
             $scope.updateView();
+          })
+          .catch(function(err) {
+            if (err === 'CANCELLED') {
+              return UIUtils.loading.hide();
+            }
+            UIUtils.onError('ERROR.SAVE_WALLET_LIST_FAILED')(err);
           });
-      })
-      .catch(function(err) {
-        if (err === 'CANCELLED') {
-          // Silent
-          UIUtils.loading.hide();
-        }
       });
   };
 
+  $scope.downloadAsFile = function() {
+    if (!$scope.wallets) return; // user cancel
+    return csWallet.children.downloadFile();
+  };
+
+
+
   $scope.selectAndRemoveWallet = function() {
     $scope.hideActionsPopover();
     return Modals.showSelectWallet({
-        wallets: $scope.wallets,
-        showDefault: false
-      })
+      wallets: $scope.wallets,
+      showDefault: false
+    })
       .then(function(wallet) {
         if (!wallet || !wallet.id) return;
 
@@ -287,13 +533,13 @@ function WalletListController($scope, $controller, $state, $timeout, $q, $transl
       console.debug("[wallet] Adding secondary wallet {"+authData.pubkey.substring(0,8)+"}");
       var wallet = csWallet.children.instance();
       return wallet.login({
-          authData: authData,
-          // Load data options :
-          minData: true,
-          sources: true,
-          api: false,
-          success: UIUtils.loading.show
-        })
+        authData: authData,
+        // Load data options :
+        minData: true,
+        sources: true,
+        api: false,
+        success: UIUtils.loading.show
+      })
         .then(function(walletData) {
           walletData.localName = authData.localName;
           return $scope.addNewWallet(wallet);
@@ -301,8 +547,8 @@ function WalletListController($scope, $controller, $state, $timeout, $q, $transl
     };
 
     return ModalUtils.show(
-        'templates/wallet/list/modal_import_file.html',
-        'WalletListImportModalCtrl'
+      'templates/wallet/list/modal_import_file.html',
+      'WalletListImportModalCtrl'
     )
       .then(function(items){
         if (!items || !items.length) return; // User cancel
@@ -451,13 +697,13 @@ function WalletListController($scope, $controller, $state, $timeout, $q, $transl
   var inheritedUpdateView = $scope.updateView;
   $scope.updateView = function() {
     inheritedUpdateView();
-    $scope.$broadcast('$$rebind::' + 'rebind'); // force rebind
+    $scope.$broadcast('$$rebind::rebind'); // force rebind
   };
 
   var inheritedUpdateWalletView = $scope.updateWalletView;
   $scope.updateWalletView = function(walletId) {
     inheritedUpdateWalletView(walletId);
-    $scope.$broadcast('$$rebind::' + 'rebind'); // force rebind
+    $scope.$broadcast('$$rebind::rebind'); // force rebind
   };
 
   // Detect changes in settings useRelative
@@ -468,233 +714,19 @@ function WalletListController($scope, $controller, $state, $timeout, $q, $transl
   }, true);
 }
 
-function WalletSelectModalController($scope, $q, $timeout, UIUtils, filterTranslations, csSettings, csCurrency, csWallet, parameters){
-  'ngInject';
-
-  $scope.loading = true;
-  $scope.wallets = null;
-  $scope.formData = {
-    useRelative: csSettings.data.useRelative,
-    showDefault: true,
-    showBalance: false,
-    balance: undefined,
-    updatingWalletId: undefined,
-    stopped: false,
-    minData: true
-  };
-  $scope.motion = null; // no animation
-
-  $scope.setParameters = function(parameters) {
-    parameters = parameters || {};
-
-    $scope.formData.useRelative = angular.isDefined(parameters.useRelative) ? parameters.useRelative : $scope.formData.useRelative;
-
-    $scope.formData.showDefault = angular.isDefined(parameters.showDefault) ? parameters.showDefault : $scope.formData.showDefault;
-
-    $scope.formData.showBalance = angular.isDefined(parameters.showBalance) ? parameters.showBalance : $scope.formData.showBalance;
-
-    $scope.formData.minData = angular.isDefined(parameters.minData) ? parameters.minData : $scope.formData.minData;
-  };
-
-  $scope.load = function(options) {
-
-    options = options || {};
-    $scope.loading = angular.isUndefined(options.silent) || !options.silent;
-    $scope.formData.balance = undefined;
-    $scope.formData.updatingWalletId = undefined;
-    $scope.formData.stopped = false;
-
-    // Load currency, and filter translations (need by 'formatAmount' filter)
-    var jobs = [];
-
-    jobs.push(csCurrency.name()
-      .then(function(currency) {
-        $scope.currency = currency;
-        return filterTranslations.ready();
-      }));
-
-    // Get children wallets
-    $scope.defaultWallet = $scope.formData.showDefault ? csWallet : undefined;
-    if (!$scope.wallets) {
-      jobs.push(
-        csWallet.children.all()
-          .then(function(children) {
-            $scope.wallets=children;
-            UIUtils.loading.hide();
-          })
-      );
-    }
-
-    // Prepare load options
-    var walletLoadOptions = {
-      silent: true,
-      minData: $scope.formData.minData,
-      sources: $scope.formData.showBalance,
-      tx: {
-        enable: false
-      },
-      api: true
-    };
-    var hasLoadError = false;
-    var loadCounter = 0;
-    var now = Date.now();
-    var balance = 0;
-    return (jobs.length ? $q.all(jobs) : $q.when())
-      // Load wallet data (apply a timeout between each wallet)
-      .then(function() {
-        var wallets = $scope.formData.showDefault ? [csWallet].concat($scope.wallets) : $scope.wallets;
-        if (!wallets.length) return;
-        console.debug("[wallets] Loading {0} wallets...".format(wallets.length));
-        return wallets.reduce(function(res, wallet) {
-            var skip= !options.refresh && wallet.isDataLoaded(walletLoadOptions);
-            if (skip) {
-              console.debug("[wallets] Wallet #{0} already loaded. Skipping".format(wallet.id));
-              return res.then(function(){
-                balance += wallet.data.balance;
-                $scope.updateWalletView(wallet.id);
-              });
-            }
-            loadCounter++;
-            return res.then(function() {
-              if ($scope.formData.stopped) return; // skip if stopped
-              // Loading next wallet, after waiting some time
-                $scope.formData.updatingWalletId = wallet.id;
-                var loadPromise;
-                if (options.refresh && wallet.data.loaded) {
-                  var refreshOptions = angular.merge({
-                    // Refresh requirements if member account
-                    requirements: (!wallet.data.requirements.loaded || wallet.data.requirements.isMember || wallet.data.requirements.wasMember || wallet.data.requirements.pendingMembership)
-                  }, walletLoadOptions);
-                  loadPromise = wallet.refreshData(refreshOptions);
-                }
-                else {
-                  loadPromise = wallet.loadData(walletLoadOptions);
-                }
-
-                loadPromise.then(function(walletData) {
-                  balance += walletData.balance;
-                  $scope.updateWalletView(wallet.id);
-                })
-                .catch(function(err) {
-                  console.error("[wallets] Error while loading data of wallet #{0}".format(wallet.id), err);
-                  hasLoadError = true;
-                });
-                return loadPromise;
-            });
-          }, $q.when());
-      })
-      .then(function() {
-        if (hasLoadError) {
-          return UIUtils.alert.error('ERROR.LOAD_WALLET_LIST_FAILED')
-            .then(function() {
-              $scope.resetData();
-              $scope.cancel();
-            });
-        }
-        // Stop
-        if ($scope.formData.stopped) return;
-        if (loadCounter) {
-          console.debug("[wallets] Loaded data of {0} wallet(s) in {1}ms".format(loadCounter, (Date.now() - now)));
-        }
-        $scope.formData.balance = balance;
-        $scope.formData.updatingWalletId = undefined;
-        $scope.loading = false;
-        UIUtils.loading.hide();
-        $scope.updateView();
-      })
-      .catch(function(err) {
-        $scope.resetData();
-        if (err && err === 'CANCELLED') {
-          $scope.cancel();
-          throw err;
-        }
-        return UIUtils.onError('ERROR.LOAD_WALLET_LIST_FAILED')(err);
-      });
-  };
-
-  $scope.$on('modal.shown', function() {
-    $scope.load();
-  });
-
-  $scope.cancel = function() {
-    $scope.closeModal();
-  };
-
-  $scope.select = function(event, wallet) {
-    if (event.isDefaultPrevented() || !wallet || $scope.selectPrevented) return;
-    $scope.closeModal(wallet);
-  };
-
-  // Clean controller data
-  $scope.resetData = function() {
-    console.debug("[wallets] Cleaning wallet list");
-    $scope.wallets = null;
-    $scope.loading = true;
-    $scope.entered = false;
-    $scope.formData.balance = undefined;
-    $scope.formData.updatingWalletId = undefined;
-  };
-
-  $scope.updateView = function(walletId) {
-    if (!$scope.wallets || !$scope.wallets.length) return;
-
-    var selectorSuffix = walletId && (' #wallet-' + walletId) || '';
-
-    if ($scope.motion) {
-      $scope.motion.show({selector: '.list .item.item-wallet' + selectorSuffix, ink: true});
-    }
-    else {
-      UIUtils.ink({selector: '.list .item.item-wallet' + selectorSuffix});
-    }
-  };
-
-  $scope.updateWalletView = function(walletId) {
-    if ($scope.motion) {
-      $scope.motion.show({selector: '.list #wallet-' + walletId, ink: true});
-    }
-    else {
-      UIUtils.ink({selector: '.list #wallet-' + walletId});
-    }
-  };
-
-  $scope.doUpdate = function(silent, event) {
-    if ($scope.loading || !$scope.wallets || !$scope.wallets.length || $scope.formData.updatingWalletId) return $q.when();
-
-    $scope.selectPrevented = true;
-    $timeout(function() {
-      $scope.selectPrevented = false;
-    }, 1000);
-
-    return $scope.load({silent: silent, refresh: true})
-      .then(function() {
-        $scope.loading = false;
-        $scope.selectPrevented = false;
-        if (silent) {
-          $scope.$broadcast('$$rebind::' + 'rebind'); // force rebind
-        }
-        $scope.updateView();
-      });
-  };
-
-  // Default actions
-  $scope.setParameters(parameters);
-
-}
 
-function PopoverWalletSelectModalController($scope, $controller, UIUtils) {
+function WalletSelectPopoverController($scope, $controller, UIUtils, parameters) {
   'ngInject';
 
   // Initialize the super class and extend it.
-  angular.extend(this, $controller('WalletSelectModalCtrl', {$scope: $scope, parameters: {
-    showDefault: true,
-    showBalance: false
-  }}));
+  angular.extend(this, $controller('WalletListAbstractCtrl', {$scope: $scope}));
 
   // Disable list motion
   $scope.motion = null;
 
   $scope.$on('popover.shown', function() {
     if ($scope.loading) {
+      $scope.setParameters(parameters);
       $scope.load();
     }
   });
@@ -703,12 +735,14 @@ function PopoverWalletSelectModalController($scope, $controller, UIUtils) {
     if (!$scope.wallets || !$scope.wallets.length) return;
 
     UIUtils.ink({selector: '.popover-wallets .list .item'});
+    $scope.$broadcast('$$rebind::rebind'); // force rebind
   };
 
   $scope.select = function(event, wallet) {
     if (event.isDefaultPrevented() || !wallet || $scope.selectPrevented) return; // no selection
     $scope.closePopover(wallet);
   };
+
 }
 
 function WalletListImportModalController($scope, $timeout, BMA, csWallet) {
diff --git a/www/js/controllers/wot-controllers.js b/www/js/controllers/wot-controllers.js
index 82e2f5ac59a98ca8f1eca01edadf20ecd2b5fccb..3b35469a2d23c32cb62de2b40956a45733837501 100644
--- a/www/js/controllers/wot-controllers.js
+++ b/www/js/controllers/wot-controllers.js
@@ -334,7 +334,7 @@ function WotLookupController($scope, $state, $q, $timeout, $focus, $location, $i
 
     return  csWot.newcomers(offset, size)
       .then(function(res){
-        if ($scope.search.type != 'newcomers') return false; // could have change
+        if ($scope.search.type !== 'newcomers') return false; // could have change
         $scope.doDisplayResult(res && res.hits, offset, size, res && res.total);
         return true;
       })
@@ -1038,9 +1038,9 @@ function WotIdentityViewController($scope, $rootScope, $controller, $timeout, $s
   angular.extend(this, $controller('WotIdentityAbstractCtrl', {$scope: $scope}));
 
   $scope.motion = UIUtils.motion.fadeSlideInRight;
+  $scope.qrcodeId = 'qrcode-wot-' + $scope.$id;
 
   $scope.$on('$ionicView.enter', function(e, state) {
-
     var onLoadSuccess = function() {
       $scope.doMotion();
       if (state.stateParams && state.stateParams.action) {
@@ -1050,6 +1050,8 @@ function WotIdentityViewController($scope, $rootScope, $controller, $timeout, $s
 
         $scope.removeActionParamInLocationHref(state);
       }
+
+      $scope.showQRCode();
     };
     var options = {
       cache: true,
@@ -1075,15 +1077,6 @@ function WotIdentityViewController($scope, $rootScope, $controller, $timeout, $s
       }
     }
 
-    // Load from wallet pubkey
-    else if (csWallet.isLogin()){
-
-      if ($scope.loading) {
-        return $scope.load(csWallet.data.pubkey, csWallet.data.uid, options)
-          .then(onLoadSuccess);
-      }
-    }
-
     // Redirect to home
     else {
       $scope.showHome();
@@ -1127,6 +1120,32 @@ function WotIdentityViewController($scope, $rootScope, $controller, $timeout, $s
       });
     });
   };
+
+  $scope.showQRCode = function(timeout) {
+    if (!$scope.qrcode) {
+      $scope.qrcode = new QRCode(
+        $scope.qrcodeId,
+        {
+          text: $scope.formData.pubkey,
+          width: 180,
+          height: 180,
+          correctLevel: QRCode.CorrectLevel.L
+        });
+      UIUtils.motion.toggleOn({selector: '#'+$scope.qrcodeId}, timeout || 1100);
+    }
+    else {
+      $scope.qrcode.clear();
+      $scope.qrcode.makeCode($scope.formData.pubkey);
+      UIUtils.motion.toggleOn({selector: '#'+$scope.qrcodeId}, timeout || 1100);
+    }
+  };
+
+  $scope.hideQRCode = function() {
+    if ($scope.qrcode) {
+      $scope.qrcode.clear();
+      UIUtils.motion.toggleOff({selector: '#'+$scope.qrcodeId});
+    }
+  };
 }
 
 /**
@@ -1180,8 +1199,8 @@ function WotIdentityTxViewController($scope, $timeout, $q, BMA, csSettings, csWo
 
   // Update view
   $scope.updateView = function() {
-    $scope.$broadcast('$$rebind::' + 'balance'); // force rebind balance
-    $scope.$broadcast('$$rebind::' + 'rebind'); // force rebind
+    $scope.$broadcast('$$rebind::balance'); // force rebind balance
+    $scope.$broadcast('$$rebind::rebind'); // force rebind
     $scope.motion.show();
   };
 
diff --git a/www/js/services/bma-services.js b/www/js/services/bma-services.js
index 76dd2e3841492b8cf5d398d95802b6b59ea47d25..8c19c2e9b83cef421fc88db6535970894ea19f2b 100644
--- a/www/js/services/bma-services.js
+++ b/www/js/services/bma-services.js
@@ -154,7 +154,7 @@ angular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.
 
         if (!that.started) {
           if (!that._startPromise) {
-            console.error('[BMA] Trying to get [{0}] before start()...'.format(path));
+            console.warn('[BMA] Trying to get [{0}] before start(). Waiting...'.format(path));
           }
           return that.ready().then(function() {
             return getRequestFn(params);
@@ -178,7 +178,7 @@ angular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.
             if (err && err.ucode == exports.errorCodes.HTTP_LIMITATION) {
               // If max number of retry not reach
               if (execCount <= exports.constants.LIMIT_REQUEST_COUNT) {
-                if (execCount == 1) {
+                if (execCount === 1) {
                   console.warn("[BMA] Too many HTTP requests: Will wait then retry...");
                   // Update the loading message (if exists)
                   UIUtils.loading.update({template: "COMMON.LOADING_WAIT"});
@@ -399,7 +399,7 @@ angular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.
       node: {
         summary: get('/node/summary', csHttp.cache.LONG),
         same: function(host2, port2) {
-          return host2 == that.host && ((!that.port && !port2) || (that.port == port2||80)) && (that.useSsl == (port2 && port2 === 443));
+          return host2 === that.host && ((!that.port && !port2) || (that.port == port2||80)) && (that.useSsl == (port2 && port2 === 443));
         },
         forceUseSsl: that.forceUseSsl
       },
@@ -415,34 +415,38 @@ angular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.
         }
       },
       wot: {
-        lookup: get('/wot/lookup/:search'),
+        lookup: get('/wot/lookup/:search', csHttp.cache.MEDIUM),
         certifiedBy: get('/wot/certified-by/:pubkey'),
         certifiersOf: get('/wot/certifiers-of/:pubkey'),
         member: {
           all: get('/wot/members', csHttp.cache.LONG),
           pending: get('/wot/pending', csHttp.cache.SHORT)
         },
-        requirements: get('/wot/requirements/:pubkey'),
+        requirements: function(params, withCache) {
+          // No cache by default
+          if (withCache !== true) return exports.raw.requirementsNoCache(params);
+          return exports.raw.requirementsWithCache(params);
+        },
         add: post('/wot/add'),
         certify: post('/wot/certify'),
         revoke: post('/wot/revoke')
       },
       blockchain: {
-        parameters: get('/blockchain/parameters', csHttp.cache.LONG),
+        parameters: get('/blockchain/parameters', csHttp.cache.VERY_LONG),
         block: get('/blockchain/block/:block', csHttp.cache.SHORT),
         blocksSlice: get('/blockchain/blocks/:count/:from'),
-        current: get('/blockchain/current'),
+        current: get('/blockchain/current', csHttp.cache.SHORT),
         membership: post('/blockchain/membership'),
         stats: {
-          ud: get('/blockchain/with/ud', csHttp.cache.SHORT),
+          ud: get('/blockchain/with/ud', csHttp.cache.MEDIUM),
           tx: get('/blockchain/with/tx'),
-          newcomers: get('/blockchain/with/newcomers'),
+          newcomers: get('/blockchain/with/newcomers', csHttp.cache.MEDIUM),
           hardship: get('/blockchain/hardship/:pubkey'),
           difficulties: get('/blockchain/difficulties')
         }
       },
       tx: {
-        sources: get('/tx/sources/:pubkey'),
+        sources: get('/tx/sources/:pubkey', csHttp.cache.SHORT),
         process: post('/tx/process'),
         history: {
           all: get('/tx/history/:pubkey'),
@@ -457,7 +461,10 @@ angular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.
       },
       uri: {},
       version: {},
-      raw: {}
+      raw: {
+        requirementsWithCache: get('/wot/requirements/:pubkey', csHttp.cache.LONG),
+        requirementsNoCache: get('/wot/requirements/:pubkey')
+      }
     };
     exports.regex = exports.regexp; // deprecated
 
@@ -642,11 +649,14 @@ angular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.
 
     exports.copy = function(otherNode) {
       var wasStarted = that.started;
-      // Stop, if need
-      if (wasStarted) that.stop();
-      that.init(otherNode.host, otherNode.port, otherNode.useSsl, that.useCache/*keep original value*/);
-      // Restart (only if was already started)
-      return wasStarted ? that.start() : $q.when();
+
+      var server = csHttp.getUrl(otherNode.host, otherNode.port, ''/*path*/, otherNode.useSsl);
+      var hasChanged = (server !== that.url);
+      if (hasChanged) {
+        that.init(otherNode.host, otherNode.port, otherNode.useSsl, that.useCache/*keep original value*/);
+        // Restart (only if was already started)
+        return wasStarted ? that.restart() : $q.when();
+      }
     };
 
     exports.wot.member.uids = function() {
diff --git a/www/js/services/cache-services.js b/www/js/services/cache-services.js
index c84a8812e7d29d3db84edb9e309193f2a6e52956..3ea97aca857be305ba233ef0c9679b73899cb73e 100644
--- a/www/js/services/cache-services.js
+++ b/www/js/services/cache-services.js
@@ -1,13 +1,15 @@
 angular.module('cesium.cache.services', ['angular-cache'])
 
-.factory('csCache', function($http, csSettings, CacheFactory) {
+.factory('csCache', function($http, $window, csSettings, CacheFactory) {
   'ngInject';
 
+  console.log('')
   var
     constants = {
+      VERY_LONG: 54000000, /*15 days*/
       LONG: 1 * 60  * 60 * 1000 /*1 hour*/,
       MEDIUM: 5  * 60 * 1000 /*5 min*/,
-      SHORT: csSettings.defaultSettings.cacheTimeMs
+      SHORT: csSettings.defaultSettings.cacheTimeMs // around 1min
     },
     cacheNames = []
   ;
@@ -16,19 +18,22 @@ angular.module('cesium.cache.services', ['angular-cache'])
     prefix = prefix || 'csCache-';
     maxAge = maxAge || constants.SHORT;
     var cacheName = prefix + maxAge;
+
+    // FIXME : enable this when cache is cleaning on rollback
+    var storageMode = csSettings.data.useLocalStorage && $window.localStorage ? 'localStorage' : 'memory';
+
     if (!onExpire) {
       if (!cacheNames[cacheName]) {
         cacheNames[cacheName] = true;
+        console.debug("[cache] Creating cache {0}...".format(cacheName));
       }
       return CacheFactory.get(cacheName) ||
         CacheFactory.createCache(cacheName, {
           maxAge: maxAge,
-          deleteOnExpire: 'aggressive',
+          deleteOnExpire: 'passive',
           //cacheFlushInterval: 60 * 60 * 1000, //  clear itself every hour
           recycleFreq: Math.max(maxAge - 1000, 5 * 60 * 1000 /*5min*/),
-          storageMode: 'memory'
-            // FIXME : enable this when cache is cleaning on rollback
-            //csSettings.data.useLocalStorage ? 'localStorage' : 'memory'
+          storageMode: storageMode
         });
     }
     else {
@@ -40,15 +45,14 @@ angular.module('cesium.cache.services', ['angular-cache'])
       if (!cacheNames[cacheName]) {
         cacheNames[cacheName] = true;
       }
+      console.debug("[cache] Creating cache {0} with 'onExpire' option...".format(cacheName));
       return CacheFactory.createCache(cacheName, {
           maxAge: maxAge,
           deleteOnExpire: 'aggressive',
           //cacheFlushInterval: 60 * 60 * 1000, // This cache will clear itself every hour
           recycleFreq: maxAge,
           onExpire: onExpire,
-          storageMode: 'memory'
-            // FIXME : enable this when cache is cleaning on rollback
-            //csSettings.data.useLocalStorage ? 'localStorage' : 'memory'
+          storageMode: storageMode
         });
     }
   }
@@ -66,7 +70,7 @@ angular.module('cesium.cache.services', ['angular-cache'])
   function clearFromPrefix(cachePrefix) {
     _.forEach(_.keys(cacheNames), function(cacheName) {
       if (cacheName.startsWith(cachePrefix)) {
-        var cache = CacheFactory.get(cacheNames);
+        var cache = CacheFactory.get(cacheName);
         if (cache) {
           cache.removeAll();
         }
@@ -78,10 +82,7 @@ angular.module('cesium.cache.services', ['angular-cache'])
     get: getOrCreateCache,
     clear: clearFromPrefix,
     clearAll: clearAllCaches,
-    constants: {
-      LONG : constants.LONG,
-      SHORT: constants.SHORT
-    }
+    constants: constants
   };
 })
 ;
diff --git a/www/js/services/crypto-services.js b/www/js/services/crypto-services.js
index 47ec1f574d1bf548c5bf599e7f8130a553d9c372..e60613a0dd7205da164783c8e00a838f198d3d92 100644
--- a/www/js/services/crypto-services.js
+++ b/www/js/services/crypto-services.js
@@ -91,9 +91,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
 
     CryptoAbstractService.prototype.async_load_scrypt = function(on_ready, options) {
       var that = this;
-      if (scrypt_module_factory !== null){
-        on_ready(scrypt_module_factory(options.requested_total_memory));
-      }
+      if (scrypt_module_factory !== null){scrypt_module_factory(on_ready, options);}
       else {$timeout(function(){that.async_load_scrypt(on_ready, options);}, 100);}
     };
 
@@ -116,7 +114,12 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
     };
 
     CryptoAbstractService.prototype.seed_from_signSk = function(signSk) {
-      var that = this;
+      var seed = new Uint8Array(that.constants.SEED_LENGTH);
+      for (var i = 0; i < seed.length; i++) seed[i] = signSk[i];
+      return seed;
+    };
+
+    CryptoAbstractService.prototype.seed_from_signSk = function(signSk) {
       var seed = new Uint8Array(that.constants.SEED_LENGTH);
       for (var i = 0; i < seed.length; i++) seed[i] = signSk[i];
       return seed;
@@ -133,16 +136,6 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
         return $q.when(nonce);
       };
     }
-    else {
-      // TODO: add a default function ?
-      //CryptoAbstractService.prototype.random_nonce = function() {
-      // var nonce = new Uint8Array(crypto_secretbox_NONCEBYTES);
-      // var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
-      // for(var i = 0; i < length; i++) {
-      //   text += possible.charAt(Math.floor(Math.random() * possible.length));
-      // }
-      //}
-    }
 
     function FullJSServiceFactory() {
       this.id = 'FullJS';
@@ -224,18 +217,47 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
        */
       this.box_keypair_from_sign = function (signKeyPair) {
         if (signKeyPair.boxSk && signKeyPair.boxPk) return $q.when(signKeyPair);
-        return $q.when(that.nacl.crypto_box_keypair_from_sign_sk(signKeyPair.signSk));
+        return $q(function (resolve, reject) {
+          try {
+            // TODO: waiting for a new version of js-nacl, with missing functions expose
+            //resolve(that.nacl.crypto_box_keypair_from_sign_sk(signPk);
+
+            resolve(crypto_box_keypair_from_sign_sk(signPk));
+          }
+          catch(err) {
+            reject(err);
+          }
+        });
       };
 
       /**
        * Compute the box public key, from a sign public key
        */
       this.box_pk_from_sign = function (signPk) {
-        return $q.when(that.nacl.crypto_box_pk_from_sign_pk(signPk));
+        return $q(function(resolve, reject) {
+          try {
+            // TODO: waiting for a new version of js-nacl, with missing functions expose
+            //resolve(that.nacl.crypto_box_pk_from_sign_pk(signPk));
+
+            resolve(crypto_box_pk_from_sign_pk(signPk));
+          }
+          catch(err) {
+            reject(err);
+          }
+        });
       };
 
       this.box_sk_from_sign = function (signSk) {
-        return $q.when(that.nacl.crypto_box_sk_from_sign_sk(signSk));
+        return $q(function(resolve, reject) {
+          try {
+            // TODO: waiting for a new version of js-nacl, with missing functions expose
+            //resolve(that.nacl.crypto_box_sk_from_sign_sk(signSk));
+            resolve(crypto_box_sk_from_sign_sk(signSk));
+          }
+          catch(err) {
+            reject(err);
+          }
+        });
       };
 
       /**
@@ -247,17 +269,14 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
             resolve(message);
             return;
           }
-          var messageBin = that.util.decode_utf8(message);
+          var messageBin = that.nacl.encode_utf8(message);
           if (typeof recipientPk === "string") {
             recipientPk = that.util.decode_base58(recipientPk);
           }
 
-          //console.debug('Original message: ' + message);
           try {
             var ciphertextBin = that.nacl.crypto_box(messageBin, nonce, recipientPk, senderSk);
             var ciphertext = that.util.encode_base64(ciphertextBin);
-
-            //console.debug('Encrypted message: ' + ciphertext);
             resolve(ciphertext);
           }
           catch (err) {
@@ -275,6 +294,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
             resolve(cypherText);
             return;
           }
+
           var ciphertextBin = that.util.decode_base64(cypherText);
           if (typeof senderPk === "string") {
             senderPk = that.util.decode_base58(senderPk);
@@ -282,10 +302,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
 
           try {
             var message = that.nacl.crypto_box_open(ciphertextBin, nonce, senderPk, recipientSk);
-            that.util.array_to_string(message, function (result) {
-              //console.debug('Decrypted text: ' + result);
-              resolve(result);
-            });
+            resolve(that.nacl.decode_utf8(message));
           }
           catch (err) {
             reject(err);
@@ -418,7 +435,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
           that.base58 = lib;
           checkAllLibLoaded();
         });
-        this.async_load_base64(function(lib) {
+        that.async_load_base64(function(lib) {
           that.base64 = lib;
           checkAllLibLoaded();
         });
@@ -436,6 +453,109 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
         pack: that.box,
         open: that.box_open
       };
+
+      /*--
+        start WORKAROUND - Publish missing functions (see PR js-nacl: https://github.com/tonyg/js-nacl/pull/54)
+      -- */
+
+      function crypto_box_keypair_from_sign_sk(sk) {
+        var ska = check_injectBytes("crypto_box_keypair_from_sign_sk", "sk", sk,
+          that.nacl.nacl_raw._crypto_sign_secretkeybytes());
+        var skb = new Target(that.nacl.nacl_raw._crypto_box_secretkeybytes());
+        check("_crypto_sign_ed25519_sk_to_curve25519",
+          that.nacl.nacl_raw._crypto_sign_ed25519_sk_to_curve25519(skb.address, ska));
+        FREE(ska);
+        return that.nacl.crypto_box_keypair_from_raw_sk(skb.extractBytes());
+      }
+
+      function crypto_box_pk_from_sign_pk(pk) {
+        var pka = check_injectBytes("crypto_box_pk_from_sign_pk", "pk", pk,
+          that.nacl.nacl_raw._crypto_sign_publickeybytes());
+        var pkb = new Target(that.nacl.nacl_raw._crypto_box_publickeybytes());
+        check("_crypto_sign_ed25519_pk_to_curve25519",
+          that.nacl.nacl_raw._crypto_sign_ed25519_pk_to_curve25519(pkb.address, pka));
+        FREE(pka);
+        return pkb.extractBytes();
+      }
+
+      function crypto_box_sk_from_sign_sk(sk) {
+        var ska = check_injectBytes("crypto_box_sk_from_sign_sk", "sk", sk,
+          that.nacl.nacl_raw._crypto_sign_secretkeybytes());
+        var skb = new Target(that.nacl.nacl_raw._crypto_box_secretkeybytes());
+        check("_crypto_sign_ed25519_sk_to_curve25519",
+          that.nacl.nacl_raw._crypto_sign_ed25519_sk_to_curve25519(skb.address, ska));
+        FREE(ska);
+        return skb.extractBytes();
+      }
+
+      function check_length(function_name, what, thing, expected_length) {
+        if (thing.length !== expected_length) {
+          throw {message: "nacl." + function_name + " expected " +
+              expected_length + "-byte " + what + " but got length " + thing.length};
+        }
+      }
+
+      function check(function_name, result) {
+        if (result !== 0) {
+          throw {message: "nacl_raw." + function_name + " signalled an error"};
+        }
+      }
+
+      function check_injectBytes(function_name, what, thing, expected_length, leftPadding) {
+        check_length(function_name, what, thing, expected_length);
+        return injectBytes(thing, leftPadding);
+      }
+
+      function injectBytes(bs, leftPadding) {
+        var p = leftPadding || 0;
+        var address = MALLOC(bs.length + p);
+        that.nacl.nacl_raw.HEAPU8.set(bs, address + p);
+        for (var i = address; i < address + p; i++) {
+          that.nacl.nacl_raw.HEAPU8[i] = 0;
+        }
+        return address;
+      }
+
+      function MALLOC(nbytes) {
+        var result = that.nacl.nacl_raw._malloc(nbytes);
+        if (result === 0) {
+          throw {message: "malloc() failed", nbytes: nbytes};
+        }
+        return result;
+      }
+
+      function FREE(pointer) {
+        that.nacl.nacl_raw._free(pointer);
+      }
+
+      function free_all(addresses) {
+        for (var i = 0; i < addresses.length; i++) {
+          FREE(addresses[i]);
+        }
+      }
+
+      function extractBytes(address, length) {
+        var result = new Uint8Array(length);
+        result.set(that.nacl.nacl_raw.HEAPU8.subarray(address, address + length));
+        return result;
+      }
+
+      function Target(length) {
+        this.length = length;
+        this.address = MALLOC(length);
+      }
+
+      Target.prototype.extractBytes = function (offset) {
+        var result = extractBytes(this.address + (offset || 0), this.length - (offset || 0));
+        FREE(this.address);
+        this.address = null;
+        return result;
+      };
+
+      /*--
+        end of WORKAROUND
+      -- */
+
     }
     FullJSServiceFactory.prototype = new CryptoAbstractService();
 
diff --git a/www/js/services/http-services.js b/www/js/services/http-services.js
index 25974e689047533df16f26a601a8240b2e01511a..94e57bfc2ef75b81a3063c1dca0002bb3d55c101 100644
--- a/www/js/services/http-services.js
+++ b/www/js/services/http-services.js
@@ -7,7 +7,7 @@ angular.module('cesium.http.services', ['cesium.cache.services'])
 
   var
     sockets = [],
-    cachePrefix = 'csHttp'
+    cachePrefix = 'csHttp-'
   ;
 
   if (!timeout) {
@@ -48,14 +48,14 @@ angular.module('cesium.http.services', ['cesium.cache.services'])
 
   function prepare(url, params, config, callback) {
     var pkeys = [], queryParams = {}, newUri = url;
-    if (typeof params == 'object') {
+    if (typeof params === 'object') {
       pkeys = _.keys(params);
     }
 
     _.forEach(pkeys, function(pkey){
       var prevURI = newUri;
       newUri = newUri.replace(':' + pkey, params[pkey]);
-      if (prevURI == newUri) {
+      if (prevURI === newUri) {
         queryParams[pkey] = params[pkey];
       }
     });
@@ -89,7 +89,7 @@ angular.module('cesium.http.services', ['cesium.cache.services'])
     };
   }
 
-  function getResourceWithCache(host, port, path, useSsl, maxAge, autoRefresh, forcedTimeout) {
+  function getResourceWithCache(host, port, path, useSsl, maxAge, autoRefresh, forcedTimeout, cachePrefix) {
     var url = getUrl(host, port, path, useSsl);
     maxAge = maxAge || csCache.constants.LONG;
     //console.debug('[http] will cache ['+url+'] ' + maxAge + 'ms' + (autoRefresh ? ' with auto-refresh' : ''));
@@ -101,11 +101,12 @@ angular.module('cesium.http.services', ['cesium.cache.services'])
           responseType: 'json'
         };
         if (autoRefresh) { // redo the request if need
-          config.cache = csCache.get(cachePrefix, maxAge, function (key, value) {
+          config.cache = csCache.get(cachePrefix, maxAge, function (key, value, done) {
               console.debug('[http] Refreshing cache for ['+key+'] ');
               $http.get(key, config)
                 .success(function (data) {
                   config.cache.put(key, data);
+                  if (done) done(key, data);
               });
             });
         }
diff --git a/www/js/services/modal-services.js b/www/js/services/modal-services.js
index e1d792480984db413245bd9a0d849580b366a18f..fd024fff98d7910057a61dcd06102da8b91c7039 100644
--- a/www/js/services/modal-services.js
+++ b/www/js/services/modal-services.js
@@ -111,11 +111,11 @@ angular.module('cesium.modal.services', ['cesium.utils.services'])
     options = options ? options : {} ;
     options.animation = options.animation || 'slide-in-up';
 
-    // var focusFirstInput = false;
-    // // removeIf(device)
-    // focusFirstInput = angular.isDefined(options.focusFirstInput) ? options.focusFirstInput : false;
-    // // endRemoveIf(device)
-    // options.focusFirstInput = focusFirstInput;
+    var focusFirstInput = false;
+    // removeIf(device)
+    focusFirstInput = angular.isDefined(options.focusFirstInput) ? options.focusFirstInput : false;
+    // endRemoveIf(device)
+    options.focusFirstInput = focusFirstInput;
 
     // If modal has a controller
     if (controller) {
@@ -298,18 +298,41 @@ angular.module('cesium.modal.services', ['cesium.utils.services'])
 
 })
 
-.factory('csPopovers', function($rootScope, $translate, $ionicPopup, $timeout, UIUtils) {
+.factory('csPopovers', function($rootScope, $translate, $ionicPopup, $timeout, UIUtils, $controller) {
     'ngInject';
 
     function showSelectWallet(event, options) {
-      options = options || {};
+      options = options || {};
+
+      var parameters = options.parameters || {};
+      delete options.parameters;
+
       var scope = options.scope && options.scope.$new() || $rootScope.$new(true);
-      scope.parameters = options;
-      delete options.scope;
-      return UIUtils.popover.show(event, angular.merge({
-        templateUrl :'templates/wallet/list/popover_wallets.html',
-        autoremove: true
-      }, options));
+      options.scope = scope;
+      options.templateUrl = 'templates/wallet/list/popover_wallets.html';
+      options.autoremove = true;
+
+      // Initialize the popover controller, with parameters
+      angular.extend(this, $controller('WalletSelectPopoverCtrl', {$scope: options.scope, parameters: parameters}));
+
+      var afterShowSaved = options.afterShow;
+      options.afterShow = function(popover) {
+
+        // Add a missing method, to close the popover
+        scope.closePopover = function(res) {
+          popover.scope.closePopover(res);
+        };
+
+        // Execute default afterShow fn, if any
+        if (afterShowSaved) afterShowSaved(popover);
+      };
+      // Show the popover
+      return UIUtils.popover.show(event, options)
+        .then(function(res) {
+          // Then destroy the scope
+          scope.$destroy();
+          return res;
+        });
     }
 
     return {
diff --git a/www/js/services/settings-services.js b/www/js/services/settings-services.js
index 1a819e680b78669da72cc19c9e1c65bfb5fd2f9c..6ac96e2e07b87f77af1f20544f489b389d96de89 100644
--- a/www/js/services/settings-services.js
+++ b/www/js/services/settings-services.js
@@ -264,20 +264,30 @@ angular.module('cesium.settings.services', ['ngApi', 'cesium.config'])
 
     // config moment lib
     try {
-      moment.locale(locale.substr(0,2));
+      moment.locale(locale.toLowerCase());
     }
     catch(err) {
-      moment.locale('en');
-      console.warn('[settings] Unknown local for moment lib. Using default [en]');
+      try {
+        moment.locale(locale.substr(0,2));
+      }
+      catch(err) {
+        moment.locale('en-gb');
+        console.warn('[settings] Unknown local for moment lib. Using default [en]');
+      }
     }
 
     // config numeral lib
     try {
-      numeral.language(locale.substr(0,2));
+      numeral.language(locale.toLowerCase());
     }
     catch(err) {
-      numeral.language('en');
-      console.warn('[settings] Unknown local for numeral lib. Using default [en]');
+      try {
+        numeral.language(locale.substring(0, 2));
+      }
+      catch(err) {
+        numeral.language('en-gb');
+        console.warn('[settings] Unknown local for numeral lib. Using default [en]');
+      }
     }
 
     // Emit event
diff --git a/www/js/services/storage-services.js b/www/js/services/storage-services.js
index a134ad66585f9b8a9f2bea728d72529756326183..4f92253dddd5269e880a68435f3a34f17c6b8176 100644
--- a/www/js/services/storage-services.js
+++ b/www/js/services/storage-services.js
@@ -64,6 +64,11 @@ angular.module('cesium.storage.services', [ 'cesium.config'])
       return $q.when();
     };
 
+    exports.standard.remove = function(key, value) {
+      exports.standard.storage.removeItem(key);
+      return $q.when();
+    };
+
     exports.standard.get = function(key, defaultValue) {
       return $q.when(exports.standard.storage[key] || defaultValue);
     };
@@ -165,7 +170,7 @@ angular.module('cesium.storage.services', [ 'cesium.config'])
         });
       }
 
-      // Fallback to session storage (locaStorage could have been disabled on some browser)
+      // Fallback to session storage (localStorage could have been disabled on some browser)
       else {
         console.debug('[storage] Starting {session} storage...');
         // Set standard storage as default
diff --git a/www/js/services/utils-services.js b/www/js/services/utils-services.js
index 9c9b84107c553ac0d206406b1825a515fc2fd511..3c18ed4f932b202b9ccb08b38b83f6b171404b4f 100644
--- a/www/js/services/utils-services.js
+++ b/www/js/services/utils-services.js
@@ -412,10 +412,9 @@ angular.module('cesium.utils.services', [])
 
     options = options || {};
     options.templateUrl = options.templateUrl ? options.templateUrl : 'templates/common/popover_copy.html';
-    options.scope = options.scope && options.scope || $rootScope;
+    options.scope = options.scope || $rootScope;
     options.scope.popovers = options.scope.popovers || {};
     options.autoselect = options.autoselect || false;
-    options.bindings = options.bindings || {};
     options.autoremove = angular.isDefined(options.autoremove) ? options.autoremove : true;
     options.backdropClickToClose = angular.isDefined(options.backdropClickToClose) ? options.backdropClickToClose : true;
     options.focusFirstInput = angular.isDefined(options.focusFirstInput) ? options.focusFirstInput : false;
@@ -426,7 +425,9 @@ angular.module('cesium.utils.services', [])
       popover.deferred=deferred;
       popover.options=options;
       // Fill the popover scope
-      angular.merge(popover.scope, options.bindings);
+      if (options.bindings) {
+        angular.merge(popover.scope, options.bindings);
+      }
       $timeout(function() { // This is need for Firefox
         popover.show(event)
           .then(function() {
diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js
index 97b4a431bd149038cedeb50e28a4bbb12c1d6056..5477306815f9bc1dd31b1aff27b77ac9c353b528 100644
--- a/www/js/services/wallet-services.js
+++ b/www/js/services/wallet-services.js
@@ -688,12 +688,12 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
       return data;
     },
 
-    loadRequirements = function() {
+    loadRequirements = function(withCache) {
       // Clean existing events
       cleanEventsByContext('requirements');
 
       // Get requirements
-      return csWot.loadRequirements(data);
+      return csWot.loadRequirements(data, withCache);
     },
 
     loadTxAndSources = function(fromTime) {
@@ -896,7 +896,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
       return $q.all([
 
           // Get requirements
-          loadRequirements()
+          loadRequirements(true)
             .then(function(data) {
               if (data.requirements && (data.requirements.isMember || data.requirements.wasMember)) {
                 // Load sigStock
@@ -973,7 +973,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
         cleanEventsByContext('requirements');
 
         jobs.push(
-          loadRequirements()
+          loadRequirements(true)
 
             // Add wallet events
             .then(addEvents)
@@ -1532,7 +1532,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
         .then(function () {
           if (!!needToLoadRequirements) {
             // Refresh membership data (if need)
-            return loadRequirements()
+            return loadRequirements(false/*no cache*/)
 
               // Add wallet events
               .then(addEvents);
@@ -1583,7 +1583,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
           })
           .then(function() {
             return $timeout(function() {
-              return loadRequirements();
+              return loadRequirements(false /*no cache*/);
             }, 1000); // waiting for node to process membership doc
           })
 
@@ -1838,7 +1838,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
         .then(function() {
 
           return $timeout(function() {
-            return loadRequirements();
+            return loadRequirements(false/*no cache*/);
           }, 1000); // waiting for node to process membership doc
         })
 
@@ -1865,7 +1865,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
         .then(function(res) {
           if (isLogin()) {
             return $timeout(function () {
-              return loadRequirements();
+              return loadRequirements(false/*no cache*/);
             }, 1000) // waiting for node to process membership doc
 
              // Add wallet events
@@ -1997,7 +1997,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
     },
 
     getChildWalletById = function(id) {
-      return _.find(data.children|| [], function(child) {return child.id == id;});
+      return (id !== 'default') && _.find(data.children|| [], function(child) {return child.id == id;}) || undefined;
     },
 
     getChildWalletByPubkey = function(pubkey) {
diff --git a/www/js/services/wot-services.js b/www/js/services/wot-services.js
index 5de7c98f33decf3c98060e415a81a05bacafaa8d..f3bc1e3e008af25e7399a661d5fcbbcd5cfe1db7 100644
--- a/www/js/services/wot-services.js
+++ b/www/js/services/wot-services.js
@@ -2,14 +2,16 @@
 angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.crypto.services', 'cesium.utils.services',
   'cesium.settings.services'])
 
-.factory('csWot', function($q, $timeout, BMA, Api, CacheFactory, csConfig, csCurrency, csSettings, csCache) {
+.factory('csWot', function($rootScope, $q, $timeout, BMA, Api, CacheFactory, csConfig, csCurrency, csSettings, csCache) {
   'ngInject';
 
   function factory(id) {
 
     var
       api = new Api(this, "csWot-" + id),
-      identityCache = csCache.get('csWot-idty-', csCache.constants.SHORT),
+      cachePrefix = 'csWot-',
+      identityCache = csCache.get(cachePrefix + 'idty-', csCache.constants.MEDIUM),
+      requirementsCache = csCache.get(cachePrefix + 'requirements-', csCache.constants.MEDIUM),
 
       // Add id, and remove duplicated id
       _addUniqueIds = function(idties) {
@@ -174,8 +176,18 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c
           });
       },
 
-      loadRequirements = function(data) {
-        if (!data || (!data.pubkey && !data.uid)) return $q.when(data);
+      loadRequirements = function(inputData, withCache) {
+        if (!inputData || (!inputData.pubkey && !inputData.uid)) return $q.when(inputData);
+
+        var cacheKey =  inputData.pubkey||inputData.uid;
+        var data = (withCache !== false) ? requirementsCache.get(cacheKey) : null;
+        if (data) {
+          console.debug("[wot] Requirements " + cacheKey + " found in cache");
+          // Update data with cache
+          angular.merge(inputData, data);
+          return $q.when(data)
+        }
+        data = {pubkey: inputData.pubkey, uid: inputData.uid};
 
         var now = Date.now();
 
@@ -184,7 +196,7 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c
           csCurrency.get(),
 
           // Get requirements
-          BMA.wot.requirements({pubkey: data.pubkey||data.uid})
+          BMA.wot.requirements({pubkey: data.pubkey||data.uid}, false/*no cache*/)
             .then(function(res) {
               return _fillIdentitiesMeta(res && res.identities);
             })
@@ -244,18 +256,23 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c
               });
             }
 
+            /// Save to cache
+            requirementsCache.put(cacheKey, data);
+
+            angular.merge(inputData, data); // Update the input data
+
             console.debug("[wot] Requirements for '{0}' loaded in {1}ms".format((data.pubkey && data.pubkey.substring(0,8))||data.uid, Date.now() - now));
 
-            return data;
+            return inputData;
           })
           .catch(function(err) {
-            _resetRequirements(data);
+            _resetRequirements(inputData);
             // If not a member: continue
             if (!!err &&
                 (err.ucode == BMA.errorCodes.NO_MATCHING_MEMBER ||
                  err.ucode == BMA.errorCodes.NO_IDTY_MATCHING_PUB_OR_UID)) {
-              data.requirements.loaded = true;
-              return data;
+              inputData.requirements.loaded = true;
+              return inputData;
             }
             throw err;
           });
@@ -650,15 +667,17 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c
         if (!pubkey && uid && !options.force) {
           return BMA.wot.member.getByUid(uid)
             .then(function(member) {
-              if (member) return loadData(member.pubkey, member.uid, options); // recursive call
+              if (member) return loadData(member.pubkey, member.uid, options); // recursive call, with a pubkey
               //throw {message: 'NOT_A_MEMBER'};
-              return loadData(pubkey, uid, angular.copy(options, {force: true}));
+              var options = angular.copy(options || {});
+              options.force = true;
+              return loadData(pubkey, uid, options); // Loop with force=true
             });
         }
 
         // Check cached data
         if (pubkey) {
-          data = (!angular.isDefined(options.cache) || options.cache) ? identityCache.get(pubkey) : null;
+          data = (options.cache !== false) ? identityCache.get(pubkey) : null;
           if (data && (!uid || data.uid === uid) && (!options.blockUid || data.blockUid === options.blockUid)) {
             console.debug("[wot] Identity " + pubkey.substring(0, 8) + " found in cache");
             return $q.when(data);
@@ -705,7 +724,7 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c
               }),
 
             // Get requirements
-            loadRequirements(data),
+            loadRequirements(data, options.cache !== false),
 
             // Get identity using lookup
             loadIdentityByLookup(pubkey, uid)
@@ -1158,6 +1177,11 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c
         event.messageParams = event.messageParams || {};
         data.events = data.events || [];
         data.events.push(event);
+      },
+
+      cleanCache = function() {
+        console.debug("[wot] Cleaning cache...");
+        csCache.clear(cachePrefix);
       }
     ;
 
@@ -1165,6 +1189,9 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c
     api.registerEvent('data', 'load');
     api.registerEvent('data', 'search');
 
+    // Listen if node changed
+    BMA.api.node.on.stop($rootScope, cleanCache, this);
+
     return {
       id: id,
       load: loadData,
diff --git a/www/js/vendor/Chart.js b/www/js/vendor/Chart.js
deleted file mode 100644
index bfd195ff09b5e2ae1def1892f71c019541d4864f..0000000000000000000000000000000000000000
--- a/www/js/vendor/Chart.js
+++ /dev/null
@@ -1,12269 +0,0 @@
-/*!
- * Chart.js
- * http://chartjs.org/
- * Version: 2.5.0
- *
- * Copyright 2017 Nick Downie
- * Released under the MIT license
- * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
- */
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Chart = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-
-},{}],2:[function(require,module,exports){
-  /* MIT license */
-  var colorNames = require(6);
-
-  module.exports = {
-    getRgba: getRgba,
-    getHsla: getHsla,
-    getRgb: getRgb,
-    getHsl: getHsl,
-    getHwb: getHwb,
-    getAlpha: getAlpha,
-
-    hexString: hexString,
-    rgbString: rgbString,
-    rgbaString: rgbaString,
-    percentString: percentString,
-    percentaString: percentaString,
-    hslString: hslString,
-    hslaString: hslaString,
-    hwbString: hwbString,
-    keyword: keyword
-  }
-
-  function getRgba(string) {
-    if (!string) {
-      return;
-    }
-    var abbr =  /^#([a-fA-F0-9]{3})$/,
-      hex =  /^#([a-fA-F0-9]{6})$/,
-      rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,
-      per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,
-      keyword = /(\w+)/;
-
-    var rgb = [0, 0, 0],
-      a = 1,
-      match = string.match(abbr);
-    if (match) {
-      match = match[1];
-      for (var i = 0; i < rgb.length; i++) {
-        rgb[i] = parseInt(match[i] + match[i], 16);
-      }
-    }
-    else if (match = string.match(hex)) {
-      match = match[1];
-      for (var i = 0; i < rgb.length; i++) {
-        rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);
-      }
-    }
-    else if (match = string.match(rgba)) {
-      for (var i = 0; i < rgb.length; i++) {
-        rgb[i] = parseInt(match[i + 1]);
-      }
-      a = parseFloat(match[4]);
-    }
-    else if (match = string.match(per)) {
-      for (var i = 0; i < rgb.length; i++) {
-        rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);
-      }
-      a = parseFloat(match[4]);
-    }
-    else if (match = string.match(keyword)) {
-      if (match[1] == "transparent") {
-        return [0, 0, 0, 0];
-      }
-      rgb = colorNames[match[1]];
-      if (!rgb) {
-        return;
-      }
-    }
-
-    for (var i = 0; i < rgb.length; i++) {
-      rgb[i] = scale(rgb[i], 0, 255);
-    }
-    if (!a && a != 0) {
-      a = 1;
-    }
-    else {
-      a = scale(a, 0, 1);
-    }
-    rgb[3] = a;
-    return rgb;
-  }
-
-  function getHsla(string) {
-    if (!string) {
-      return;
-    }
-    var hsl = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
-    var match = string.match(hsl);
-    if (match) {
-      var alpha = parseFloat(match[4]);
-      var h = scale(parseInt(match[1]), 0, 360),
-        s = scale(parseFloat(match[2]), 0, 100),
-        l = scale(parseFloat(match[3]), 0, 100),
-        a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
-      return [h, s, l, a];
-    }
-  }
-
-  function getHwb(string) {
-    if (!string) {
-      return;
-    }
-    var hwb = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
-    var match = string.match(hwb);
-    if (match) {
-      var alpha = parseFloat(match[4]);
-      var h = scale(parseInt(match[1]), 0, 360),
-        w = scale(parseFloat(match[2]), 0, 100),
-        b = scale(parseFloat(match[3]), 0, 100),
-        a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
-      return [h, w, b, a];
-    }
-  }
-
-  function getRgb(string) {
-    var rgba = getRgba(string);
-    return rgba && rgba.slice(0, 3);
-  }
-
-  function getHsl(string) {
-    var hsla = getHsla(string);
-    return hsla && hsla.slice(0, 3);
-  }
-
-  function getAlpha(string) {
-    var vals = getRgba(string);
-    if (vals) {
-      return vals[3];
-    }
-    else if (vals = getHsla(string)) {
-      return vals[3];
-    }
-    else if (vals = getHwb(string)) {
-      return vals[3];
-    }
-  }
-
-// generators
-  function hexString(rgb) {
-    return "#" + hexDouble(rgb[0]) + hexDouble(rgb[1])
-      + hexDouble(rgb[2]);
-  }
-
-  function rgbString(rgba, alpha) {
-    if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
-      return rgbaString(rgba, alpha);
-    }
-    return "rgb(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ")";
-  }
-
-  function rgbaString(rgba, alpha) {
-    if (alpha === undefined) {
-      alpha = (rgba[3] !== undefined ? rgba[3] : 1);
-    }
-    return "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2]
-      + ", " + alpha + ")";
-  }
-
-  function percentString(rgba, alpha) {
-    if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
-      return percentaString(rgba, alpha);
-    }
-    var r = Math.round(rgba[0]/255 * 100),
-      g = Math.round(rgba[1]/255 * 100),
-      b = Math.round(rgba[2]/255 * 100);
-
-    return "rgb(" + r + "%, " + g + "%, " + b + "%)";
-  }
-
-  function percentaString(rgba, alpha) {
-    var r = Math.round(rgba[0]/255 * 100),
-      g = Math.round(rgba[1]/255 * 100),
-      b = Math.round(rgba[2]/255 * 100);
-    return "rgba(" + r + "%, " + g + "%, " + b + "%, " + (alpha || rgba[3] || 1) + ")";
-  }
-
-  function hslString(hsla, alpha) {
-    if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {
-      return hslaString(hsla, alpha);
-    }
-    return "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)";
-  }
-
-  function hslaString(hsla, alpha) {
-    if (alpha === undefined) {
-      alpha = (hsla[3] !== undefined ? hsla[3] : 1);
-    }
-    return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, "
-      + alpha + ")";
-  }
-
-// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
-// (hwb have alpha optional & 1 is default value)
-  function hwbString(hwb, alpha) {
-    if (alpha === undefined) {
-      alpha = (hwb[3] !== undefined ? hwb[3] : 1);
-    }
-    return "hwb(" + hwb[0] + ", " + hwb[1] + "%, " + hwb[2] + "%"
-      + (alpha !== undefined && alpha !== 1 ? ", " + alpha : "") + ")";
-  }
-
-  function keyword(rgb) {
-    return reverseNames[rgb.slice(0, 3)];
-  }
-
-// helpers
-  function scale(num, min, max) {
-    return Math.min(Math.max(min, num), max);
-  }
-
-  function hexDouble(num) {
-    var str = num.toString(16).toUpperCase();
-    return (str.length < 2) ? "0" + str : str;
-  }
-
-
-//create a list of reverse color names
-  var reverseNames = {};
-  for (var name in colorNames) {
-    reverseNames[colorNames[name]] = name;
-  }
-
-},{"6":6}],3:[function(require,module,exports){
-  /* MIT license */
-  var convert = require(5);
-  var string = require(2);
-
-  var Color = function (obj) {
-    if (obj instanceof Color) {
-      return obj;
-    }
-    if (!(this instanceof Color)) {
-      return new Color(obj);
-    }
-
-    this.values = {
-      rgb: [0, 0, 0],
-      hsl: [0, 0, 0],
-      hsv: [0, 0, 0],
-      hwb: [0, 0, 0],
-      cmyk: [0, 0, 0, 0],
-      alpha: 1
-    };
-
-    // parse Color() argument
-    var vals;
-    if (typeof obj === 'string') {
-      vals = string.getRgba(obj);
-      if (vals) {
-        this.setValues('rgb', vals);
-      } else if (vals = string.getHsla(obj)) {
-        this.setValues('hsl', vals);
-      } else if (vals = string.getHwb(obj)) {
-        this.setValues('hwb', vals);
-      } else {
-        throw new Error('Unable to parse color from string "' + obj + '"');
-      }
-    } else if (typeof obj === 'object') {
-      vals = obj;
-      if (vals.r !== undefined || vals.red !== undefined) {
-        this.setValues('rgb', vals);
-      } else if (vals.l !== undefined || vals.lightness !== undefined) {
-        this.setValues('hsl', vals);
-      } else if (vals.v !== undefined || vals.value !== undefined) {
-        this.setValues('hsv', vals);
-      } else if (vals.w !== undefined || vals.whiteness !== undefined) {
-        this.setValues('hwb', vals);
-      } else if (vals.c !== undefined || vals.cyan !== undefined) {
-        this.setValues('cmyk', vals);
-      } else {
-        throw new Error('Unable to parse color from object ' + JSON.stringify(obj));
-      }
-    }
-  };
-
-  Color.prototype = {
-    rgb: function () {
-      return this.setSpace('rgb', arguments);
-    },
-    hsl: function () {
-      return this.setSpace('hsl', arguments);
-    },
-    hsv: function () {
-      return this.setSpace('hsv', arguments);
-    },
-    hwb: function () {
-      return this.setSpace('hwb', arguments);
-    },
-    cmyk: function () {
-      return this.setSpace('cmyk', arguments);
-    },
-
-    rgbArray: function () {
-      return this.values.rgb;
-    },
-    hslArray: function () {
-      return this.values.hsl;
-    },
-    hsvArray: function () {
-      return this.values.hsv;
-    },
-    hwbArray: function () {
-      var values = this.values;
-      if (values.alpha !== 1) {
-        return values.hwb.concat([values.alpha]);
-      }
-      return values.hwb;
-    },
-    cmykArray: function () {
-      return this.values.cmyk;
-    },
-    rgbaArray: function () {
-      var values = this.values;
-      return values.rgb.concat([values.alpha]);
-    },
-    hslaArray: function () {
-      var values = this.values;
-      return values.hsl.concat([values.alpha]);
-    },
-    alpha: function (val) {
-      if (val === undefined) {
-        return this.values.alpha;
-      }
-      this.setValues('alpha', val);
-      return this;
-    },
-
-    red: function (val) {
-      return this.setChannel('rgb', 0, val);
-    },
-    green: function (val) {
-      return this.setChannel('rgb', 1, val);
-    },
-    blue: function (val) {
-      return this.setChannel('rgb', 2, val);
-    },
-    hue: function (val) {
-      if (val) {
-        val %= 360;
-        val = val < 0 ? 360 + val : val;
-      }
-      return this.setChannel('hsl', 0, val);
-    },
-    saturation: function (val) {
-      return this.setChannel('hsl', 1, val);
-    },
-    lightness: function (val) {
-      return this.setChannel('hsl', 2, val);
-    },
-    saturationv: function (val) {
-      return this.setChannel('hsv', 1, val);
-    },
-    whiteness: function (val) {
-      return this.setChannel('hwb', 1, val);
-    },
-    blackness: function (val) {
-      return this.setChannel('hwb', 2, val);
-    },
-    value: function (val) {
-      return this.setChannel('hsv', 2, val);
-    },
-    cyan: function (val) {
-      return this.setChannel('cmyk', 0, val);
-    },
-    magenta: function (val) {
-      return this.setChannel('cmyk', 1, val);
-    },
-    yellow: function (val) {
-      return this.setChannel('cmyk', 2, val);
-    },
-    black: function (val) {
-      return this.setChannel('cmyk', 3, val);
-    },
-
-    hexString: function () {
-      return string.hexString(this.values.rgb);
-    },
-    rgbString: function () {
-      return string.rgbString(this.values.rgb, this.values.alpha);
-    },
-    rgbaString: function () {
-      return string.rgbaString(this.values.rgb, this.values.alpha);
-    },
-    percentString: function () {
-      return string.percentString(this.values.rgb, this.values.alpha);
-    },
-    hslString: function () {
-      return string.hslString(this.values.hsl, this.values.alpha);
-    },
-    hslaString: function () {
-      return string.hslaString(this.values.hsl, this.values.alpha);
-    },
-    hwbString: function () {
-      return string.hwbString(this.values.hwb, this.values.alpha);
-    },
-    keyword: function () {
-      return string.keyword(this.values.rgb, this.values.alpha);
-    },
-
-    rgbNumber: function () {
-      var rgb = this.values.rgb;
-      return (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];
-    },
-
-    luminosity: function () {
-      // http://www.w3.org/TR/WCAG20/#relativeluminancedef
-      var rgb = this.values.rgb;
-      var lum = [];
-      for (var i = 0; i < rgb.length; i++) {
-        var chan = rgb[i] / 255;
-        lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);
-      }
-      return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];
-    },
-
-    contrast: function (color2) {
-      // http://www.w3.org/TR/WCAG20/#contrast-ratiodef
-      var lum1 = this.luminosity();
-      var lum2 = color2.luminosity();
-      if (lum1 > lum2) {
-        return (lum1 + 0.05) / (lum2 + 0.05);
-      }
-      return (lum2 + 0.05) / (lum1 + 0.05);
-    },
-
-    level: function (color2) {
-      var contrastRatio = this.contrast(color2);
-      if (contrastRatio >= 7.1) {
-        return 'AAA';
-      }
-
-      return (contrastRatio >= 4.5) ? 'AA' : '';
-    },
-
-    dark: function () {
-      // YIQ equation from http://24ways.org/2010/calculating-color-contrast
-      var rgb = this.values.rgb;
-      var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
-      return yiq < 128;
-    },
-
-    light: function () {
-      return !this.dark();
-    },
-
-    negate: function () {
-      var rgb = [];
-      for (var i = 0; i < 3; i++) {
-        rgb[i] = 255 - this.values.rgb[i];
-      }
-      this.setValues('rgb', rgb);
-      return this;
-    },
-
-    lighten: function (ratio) {
-      var hsl = this.values.hsl;
-      hsl[2] += hsl[2] * ratio;
-      this.setValues('hsl', hsl);
-      return this;
-    },
-
-    darken: function (ratio) {
-      var hsl = this.values.hsl;
-      hsl[2] -= hsl[2] * ratio;
-      this.setValues('hsl', hsl);
-      return this;
-    },
-
-    saturate: function (ratio) {
-      var hsl = this.values.hsl;
-      hsl[1] += hsl[1] * ratio;
-      this.setValues('hsl', hsl);
-      return this;
-    },
-
-    desaturate: function (ratio) {
-      var hsl = this.values.hsl;
-      hsl[1] -= hsl[1] * ratio;
-      this.setValues('hsl', hsl);
-      return this;
-    },
-
-    whiten: function (ratio) {
-      var hwb = this.values.hwb;
-      hwb[1] += hwb[1] * ratio;
-      this.setValues('hwb', hwb);
-      return this;
-    },
-
-    blacken: function (ratio) {
-      var hwb = this.values.hwb;
-      hwb[2] += hwb[2] * ratio;
-      this.setValues('hwb', hwb);
-      return this;
-    },
-
-    greyscale: function () {
-      var rgb = this.values.rgb;
-      // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
-      var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;
-      this.setValues('rgb', [val, val, val]);
-      return this;
-    },
-
-    clearer: function (ratio) {
-      var alpha = this.values.alpha;
-      this.setValues('alpha', alpha - (alpha * ratio));
-      return this;
-    },
-
-    opaquer: function (ratio) {
-      var alpha = this.values.alpha;
-      this.setValues('alpha', alpha + (alpha * ratio));
-      return this;
-    },
-
-    rotate: function (degrees) {
-      var hsl = this.values.hsl;
-      var hue = (hsl[0] + degrees) % 360;
-      hsl[0] = hue < 0 ? 360 + hue : hue;
-      this.setValues('hsl', hsl);
-      return this;
-    },
-
-    /**
-     * Ported from sass implementation in C
-     * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209
-     */
-    mix: function (mixinColor, weight) {
-      var color1 = this;
-      var color2 = mixinColor;
-      var p = weight === undefined ? 0.5 : weight;
-
-      var w = 2 * p - 1;
-      var a = color1.alpha() - color2.alpha();
-
-      var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
-      var w2 = 1 - w1;
-
-      return this
-        .rgb(
-          w1 * color1.red() + w2 * color2.red(),
-          w1 * color1.green() + w2 * color2.green(),
-          w1 * color1.blue() + w2 * color2.blue()
-        )
-        .alpha(color1.alpha() * p + color2.alpha() * (1 - p));
-    },
-
-    toJSON: function () {
-      return this.rgb();
-    },
-
-    clone: function () {
-      // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,
-      // making the final build way to big to embed in Chart.js. So let's do it manually,
-      // assuming that values to clone are 1 dimension arrays containing only numbers,
-      // except 'alpha' which is a number.
-      var result = new Color();
-      var source = this.values;
-      var target = result.values;
-      var value, type;
-
-      for (var prop in source) {
-        if (source.hasOwnProperty(prop)) {
-          value = source[prop];
-          type = ({}).toString.call(value);
-          if (type === '[object Array]') {
-            target[prop] = value.slice(0);
-          } else if (type === '[object Number]') {
-            target[prop] = value;
-          } else {
-            console.error('unexpected color value:', value);
-          }
-        }
-      }
-
-      return result;
-    }
-  };
-
-  Color.prototype.spaces = {
-    rgb: ['red', 'green', 'blue'],
-    hsl: ['hue', 'saturation', 'lightness'],
-    hsv: ['hue', 'saturation', 'value'],
-    hwb: ['hue', 'whiteness', 'blackness'],
-    cmyk: ['cyan', 'magenta', 'yellow', 'black']
-  };
-
-  Color.prototype.maxes = {
-    rgb: [255, 255, 255],
-    hsl: [360, 100, 100],
-    hsv: [360, 100, 100],
-    hwb: [360, 100, 100],
-    cmyk: [100, 100, 100, 100]
-  };
-
-  Color.prototype.getValues = function (space) {
-    var values = this.values;
-    var vals = {};
-
-    for (var i = 0; i < space.length; i++) {
-      vals[space.charAt(i)] = values[space][i];
-    }
-
-    if (values.alpha !== 1) {
-      vals.a = values.alpha;
-    }
-
-    // {r: 255, g: 255, b: 255, a: 0.4}
-    return vals;
-  };
-
-  Color.prototype.setValues = function (space, vals) {
-    var values = this.values;
-    var spaces = this.spaces;
-    var maxes = this.maxes;
-    var alpha = 1;
-    var i;
-
-    if (space === 'alpha') {
-      alpha = vals;
-    } else if (vals.length) {
-      // [10, 10, 10]
-      values[space] = vals.slice(0, space.length);
-      alpha = vals[space.length];
-    } else if (vals[space.charAt(0)] !== undefined) {
-      // {r: 10, g: 10, b: 10}
-      for (i = 0; i < space.length; i++) {
-        values[space][i] = vals[space.charAt(i)];
-      }
-
-      alpha = vals.a;
-    } else if (vals[spaces[space][0]] !== undefined) {
-      // {red: 10, green: 10, blue: 10}
-      var chans = spaces[space];
-
-      for (i = 0; i < space.length; i++) {
-        values[space][i] = vals[chans[i]];
-      }
-
-      alpha = vals.alpha;
-    }
-
-    values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));
-
-    if (space === 'alpha') {
-      return false;
-    }
-
-    var capped;
-
-    // cap values of the space prior converting all values
-    for (i = 0; i < space.length; i++) {
-      capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));
-      values[space][i] = Math.round(capped);
-    }
-
-    // convert to all the other color spaces
-    for (var sname in spaces) {
-      if (sname !== space) {
-        values[sname] = convert[space][sname](values[space]);
-      }
-    }
-
-    return true;
-  };
-
-  Color.prototype.setSpace = function (space, args) {
-    var vals = args[0];
-
-    if (vals === undefined) {
-      // color.rgb()
-      return this.getValues(space);
-    }
-
-    // color.rgb(10, 10, 10)
-    if (typeof vals === 'number') {
-      vals = Array.prototype.slice.call(args);
-    }
-
-    this.setValues(space, vals);
-    return this;
-  };
-
-  Color.prototype.setChannel = function (space, index, val) {
-    var svalues = this.values[space];
-    if (val === undefined) {
-      // color.red()
-      return svalues[index];
-    } else if (val === svalues[index]) {
-      // color.red(color.red())
-      return this;
-    }
-
-    // color.red(100)
-    svalues[index] = val;
-    this.setValues(space, svalues);
-
-    return this;
-  };
-
-  if (typeof window !== 'undefined') {
-    window.Color = Color;
-  }
-
-  module.exports = Color;
-
-},{"2":2,"5":5}],4:[function(require,module,exports){
-  /* MIT license */
-
-  module.exports = {
-    rgb2hsl: rgb2hsl,
-    rgb2hsv: rgb2hsv,
-    rgb2hwb: rgb2hwb,
-    rgb2cmyk: rgb2cmyk,
-    rgb2keyword: rgb2keyword,
-    rgb2xyz: rgb2xyz,
-    rgb2lab: rgb2lab,
-    rgb2lch: rgb2lch,
-
-    hsl2rgb: hsl2rgb,
-    hsl2hsv: hsl2hsv,
-    hsl2hwb: hsl2hwb,
-    hsl2cmyk: hsl2cmyk,
-    hsl2keyword: hsl2keyword,
-
-    hsv2rgb: hsv2rgb,
-    hsv2hsl: hsv2hsl,
-    hsv2hwb: hsv2hwb,
-    hsv2cmyk: hsv2cmyk,
-    hsv2keyword: hsv2keyword,
-
-    hwb2rgb: hwb2rgb,
-    hwb2hsl: hwb2hsl,
-    hwb2hsv: hwb2hsv,
-    hwb2cmyk: hwb2cmyk,
-    hwb2keyword: hwb2keyword,
-
-    cmyk2rgb: cmyk2rgb,
-    cmyk2hsl: cmyk2hsl,
-    cmyk2hsv: cmyk2hsv,
-    cmyk2hwb: cmyk2hwb,
-    cmyk2keyword: cmyk2keyword,
-
-    keyword2rgb: keyword2rgb,
-    keyword2hsl: keyword2hsl,
-    keyword2hsv: keyword2hsv,
-    keyword2hwb: keyword2hwb,
-    keyword2cmyk: keyword2cmyk,
-    keyword2lab: keyword2lab,
-    keyword2xyz: keyword2xyz,
-
-    xyz2rgb: xyz2rgb,
-    xyz2lab: xyz2lab,
-    xyz2lch: xyz2lch,
-
-    lab2xyz: lab2xyz,
-    lab2rgb: lab2rgb,
-    lab2lch: lab2lch,
-
-    lch2lab: lch2lab,
-    lch2xyz: lch2xyz,
-    lch2rgb: lch2rgb
-  }
-
-
-  function rgb2hsl(rgb) {
-    var r = rgb[0]/255,
-      g = rgb[1]/255,
-      b = rgb[2]/255,
-      min = Math.min(r, g, b),
-      max = Math.max(r, g, b),
-      delta = max - min,
-      h, s, l;
-
-    if (max == min)
-      h = 0;
-    else if (r == max)
-      h = (g - b) / delta;
-    else if (g == max)
-      h = 2 + (b - r) / delta;
-    else if (b == max)
-      h = 4 + (r - g)/ delta;
-
-    h = Math.min(h * 60, 360);
-
-    if (h < 0)
-      h += 360;
-
-    l = (min + max) / 2;
-
-    if (max == min)
-      s = 0;
-    else if (l <= 0.5)
-      s = delta / (max + min);
-    else
-      s = delta / (2 - max - min);
-
-    return [h, s * 100, l * 100];
-  }
-
-  function rgb2hsv(rgb) {
-    var r = rgb[0],
-      g = rgb[1],
-      b = rgb[2],
-      min = Math.min(r, g, b),
-      max = Math.max(r, g, b),
-      delta = max - min,
-      h, s, v;
-
-    if (max == 0)
-      s = 0;
-    else
-      s = (delta/max * 1000)/10;
-
-    if (max == min)
-      h = 0;
-    else if (r == max)
-      h = (g - b) / delta;
-    else if (g == max)
-      h = 2 + (b - r) / delta;
-    else if (b == max)
-      h = 4 + (r - g) / delta;
-
-    h = Math.min(h * 60, 360);
-
-    if (h < 0)
-      h += 360;
-
-    v = ((max / 255) * 1000) / 10;
-
-    return [h, s, v];
-  }
-
-  function rgb2hwb(rgb) {
-    var r = rgb[0],
-      g = rgb[1],
-      b = rgb[2],
-      h = rgb2hsl(rgb)[0],
-      w = 1/255 * Math.min(r, Math.min(g, b)),
-      b = 1 - 1/255 * Math.max(r, Math.max(g, b));
-
-    return [h, w * 100, b * 100];
-  }
-
-  function rgb2cmyk(rgb) {
-    var r = rgb[0] / 255,
-      g = rgb[1] / 255,
-      b = rgb[2] / 255,
-      c, m, y, k;
-
-    k = Math.min(1 - r, 1 - g, 1 - b);
-    c = (1 - r - k) / (1 - k) || 0;
-    m = (1 - g - k) / (1 - k) || 0;
-    y = (1 - b - k) / (1 - k) || 0;
-    return [c * 100, m * 100, y * 100, k * 100];
-  }
-
-  function rgb2keyword(rgb) {
-    return reverseKeywords[JSON.stringify(rgb)];
-  }
-
-  function rgb2xyz(rgb) {
-    var r = rgb[0] / 255,
-      g = rgb[1] / 255,
-      b = rgb[2] / 255;
-
-    // assume sRGB
-    r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
-    g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
-    b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
-
-    var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
-    var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
-    var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
-
-    return [x * 100, y *100, z * 100];
-  }
-
-  function rgb2lab(rgb) {
-    var xyz = rgb2xyz(rgb),
-      x = xyz[0],
-      y = xyz[1],
-      z = xyz[2],
-      l, a, b;
-
-    x /= 95.047;
-    y /= 100;
-    z /= 108.883;
-
-    x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);
-    y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);
-    z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);
-
-    l = (116 * y) - 16;
-    a = 500 * (x - y);
-    b = 200 * (y - z);
-
-    return [l, a, b];
-  }
-
-  function rgb2lch(args) {
-    return lab2lch(rgb2lab(args));
-  }
-
-  function hsl2rgb(hsl) {
-    var h = hsl[0] / 360,
-      s = hsl[1] / 100,
-      l = hsl[2] / 100,
-      t1, t2, t3, rgb, val;
-
-    if (s == 0) {
-      val = l * 255;
-      return [val, val, val];
-    }
-
-    if (l < 0.5)
-      t2 = l * (1 + s);
-    else
-      t2 = l + s - l * s;
-    t1 = 2 * l - t2;
-
-    rgb = [0, 0, 0];
-    for (var i = 0; i < 3; i++) {
-      t3 = h + 1 / 3 * - (i - 1);
-      t3 < 0 && t3++;
-      t3 > 1 && t3--;
-
-      if (6 * t3 < 1)
-        val = t1 + (t2 - t1) * 6 * t3;
-      else if (2 * t3 < 1)
-        val = t2;
-      else if (3 * t3 < 2)
-        val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
-      else
-        val = t1;
-
-      rgb[i] = val * 255;
-    }
-
-    return rgb;
-  }
-
-  function hsl2hsv(hsl) {
-    var h = hsl[0],
-      s = hsl[1] / 100,
-      l = hsl[2] / 100,
-      sv, v;
-
-    if(l === 0) {
-      // no need to do calc on black
-      // also avoids divide by 0 error
-      return [0, 0, 0];
-    }
-
-    l *= 2;
-    s *= (l <= 1) ? l : 2 - l;
-    v = (l + s) / 2;
-    sv = (2 * s) / (l + s);
-    return [h, sv * 100, v * 100];
-  }
-
-  function hsl2hwb(args) {
-    return rgb2hwb(hsl2rgb(args));
-  }
-
-  function hsl2cmyk(args) {
-    return rgb2cmyk(hsl2rgb(args));
-  }
-
-  function hsl2keyword(args) {
-    return rgb2keyword(hsl2rgb(args));
-  }
-
-
-  function hsv2rgb(hsv) {
-    var h = hsv[0] / 60,
-      s = hsv[1] / 100,
-      v = hsv[2] / 100,
-      hi = Math.floor(h) % 6;
-
-    var f = h - Math.floor(h),
-      p = 255 * v * (1 - s),
-      q = 255 * v * (1 - (s * f)),
-      t = 255 * v * (1 - (s * (1 - f))),
-      v = 255 * v;
-
-    switch(hi) {
-      case 0:
-        return [v, t, p];
-      case 1:
-        return [q, v, p];
-      case 2:
-        return [p, v, t];
-      case 3:
-        return [p, q, v];
-      case 4:
-        return [t, p, v];
-      case 5:
-        return [v, p, q];
-    }
-  }
-
-  function hsv2hsl(hsv) {
-    var h = hsv[0],
-      s = hsv[1] / 100,
-      v = hsv[2] / 100,
-      sl, l;
-
-    l = (2 - s) * v;
-    sl = s * v;
-    sl /= (l <= 1) ? l : 2 - l;
-    sl = sl || 0;
-    l /= 2;
-    return [h, sl * 100, l * 100];
-  }
-
-  function hsv2hwb(args) {
-    return rgb2hwb(hsv2rgb(args))
-  }
-
-  function hsv2cmyk(args) {
-    return rgb2cmyk(hsv2rgb(args));
-  }
-
-  function hsv2keyword(args) {
-    return rgb2keyword(hsv2rgb(args));
-  }
-
-// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
-  function hwb2rgb(hwb) {
-    var h = hwb[0] / 360,
-      wh = hwb[1] / 100,
-      bl = hwb[2] / 100,
-      ratio = wh + bl,
-      i, v, f, n;
-
-    // wh + bl cant be > 1
-    if (ratio > 1) {
-      wh /= ratio;
-      bl /= ratio;
-    }
-
-    i = Math.floor(6 * h);
-    v = 1 - bl;
-    f = 6 * h - i;
-    if ((i & 0x01) != 0) {
-      f = 1 - f;
-    }
-    n = wh + f * (v - wh);  // linear interpolation
-
-    switch (i) {
-      default:
-      case 6:
-      case 0: r = v; g = n; b = wh; break;
-      case 1: r = n; g = v; b = wh; break;
-      case 2: r = wh; g = v; b = n; break;
-      case 3: r = wh; g = n; b = v; break;
-      case 4: r = n; g = wh; b = v; break;
-      case 5: r = v; g = wh; b = n; break;
-    }
-
-    return [r * 255, g * 255, b * 255];
-  }
-
-  function hwb2hsl(args) {
-    return rgb2hsl(hwb2rgb(args));
-  }
-
-  function hwb2hsv(args) {
-    return rgb2hsv(hwb2rgb(args));
-  }
-
-  function hwb2cmyk(args) {
-    return rgb2cmyk(hwb2rgb(args));
-  }
-
-  function hwb2keyword(args) {
-    return rgb2keyword(hwb2rgb(args));
-  }
-
-  function cmyk2rgb(cmyk) {
-    var c = cmyk[0] / 100,
-      m = cmyk[1] / 100,
-      y = cmyk[2] / 100,
-      k = cmyk[3] / 100,
-      r, g, b;
-
-    r = 1 - Math.min(1, c * (1 - k) + k);
-    g = 1 - Math.min(1, m * (1 - k) + k);
-    b = 1 - Math.min(1, y * (1 - k) + k);
-    return [r * 255, g * 255, b * 255];
-  }
-
-  function cmyk2hsl(args) {
-    return rgb2hsl(cmyk2rgb(args));
-  }
-
-  function cmyk2hsv(args) {
-    return rgb2hsv(cmyk2rgb(args));
-  }
-
-  function cmyk2hwb(args) {
-    return rgb2hwb(cmyk2rgb(args));
-  }
-
-  function cmyk2keyword(args) {
-    return rgb2keyword(cmyk2rgb(args));
-  }
-
-
-  function xyz2rgb(xyz) {
-    var x = xyz[0] / 100,
-      y = xyz[1] / 100,
-      z = xyz[2] / 100,
-      r, g, b;
-
-    r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
-    g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
-    b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
-
-    // assume sRGB
-    r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
-      : r = (r * 12.92);
-
-    g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
-      : g = (g * 12.92);
-
-    b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
-      : b = (b * 12.92);
-
-    r = Math.min(Math.max(0, r), 1);
-    g = Math.min(Math.max(0, g), 1);
-    b = Math.min(Math.max(0, b), 1);
-
-    return [r * 255, g * 255, b * 255];
-  }
-
-  function xyz2lab(xyz) {
-    var x = xyz[0],
-      y = xyz[1],
-      z = xyz[2],
-      l, a, b;
-
-    x /= 95.047;
-    y /= 100;
-    z /= 108.883;
-
-    x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);
-    y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);
-    z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);
-
-    l = (116 * y) - 16;
-    a = 500 * (x - y);
-    b = 200 * (y - z);
-
-    return [l, a, b];
-  }
-
-  function xyz2lch(args) {
-    return lab2lch(xyz2lab(args));
-  }
-
-  function lab2xyz(lab) {
-    var l = lab[0],
-      a = lab[1],
-      b = lab[2],
-      x, y, z, y2;
-
-    if (l <= 8) {
-      y = (l * 100) / 903.3;
-      y2 = (7.787 * (y / 100)) + (16 / 116);
-    } else {
-      y = 100 * Math.pow((l + 16) / 116, 3);
-      y2 = Math.pow(y / 100, 1/3);
-    }
-
-    x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);
-
-    z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);
-
-    return [x, y, z];
-  }
-
-  function lab2lch(lab) {
-    var l = lab[0],
-      a = lab[1],
-      b = lab[2],
-      hr, h, c;
-
-    hr = Math.atan2(b, a);
-    h = hr * 360 / 2 / Math.PI;
-    if (h < 0) {
-      h += 360;
-    }
-    c = Math.sqrt(a * a + b * b);
-    return [l, c, h];
-  }
-
-  function lab2rgb(args) {
-    return xyz2rgb(lab2xyz(args));
-  }
-
-  function lch2lab(lch) {
-    var l = lch[0],
-      c = lch[1],
-      h = lch[2],
-      a, b, hr;
-
-    hr = h / 360 * 2 * Math.PI;
-    a = c * Math.cos(hr);
-    b = c * Math.sin(hr);
-    return [l, a, b];
-  }
-
-  function lch2xyz(args) {
-    return lab2xyz(lch2lab(args));
-  }
-
-  function lch2rgb(args) {
-    return lab2rgb(lch2lab(args));
-  }
-
-  function keyword2rgb(keyword) {
-    return cssKeywords[keyword];
-  }
-
-  function keyword2hsl(args) {
-    return rgb2hsl(keyword2rgb(args));
-  }
-
-  function keyword2hsv(args) {
-    return rgb2hsv(keyword2rgb(args));
-  }
-
-  function keyword2hwb(args) {
-    return rgb2hwb(keyword2rgb(args));
-  }
-
-  function keyword2cmyk(args) {
-    return rgb2cmyk(keyword2rgb(args));
-  }
-
-  function keyword2lab(args) {
-    return rgb2lab(keyword2rgb(args));
-  }
-
-  function keyword2xyz(args) {
-    return rgb2xyz(keyword2rgb(args));
-  }
-
-  var cssKeywords = {
-    aliceblue:  [240,248,255],
-    antiquewhite: [250,235,215],
-    aqua: [0,255,255],
-    aquamarine: [127,255,212],
-    azure:  [240,255,255],
-    beige:  [245,245,220],
-    bisque: [255,228,196],
-    black:  [0,0,0],
-    blanchedalmond: [255,235,205],
-    blue: [0,0,255],
-    blueviolet: [138,43,226],
-    brown:  [165,42,42],
-    burlywood:  [222,184,135],
-    cadetblue:  [95,158,160],
-    chartreuse: [127,255,0],
-    chocolate:  [210,105,30],
-    coral:  [255,127,80],
-    cornflowerblue: [100,149,237],
-    cornsilk: [255,248,220],
-    crimson:  [220,20,60],
-    cyan: [0,255,255],
-    darkblue: [0,0,139],
-    darkcyan: [0,139,139],
-    darkgoldenrod:  [184,134,11],
-    darkgray: [169,169,169],
-    darkgreen:  [0,100,0],
-    darkgrey: [169,169,169],
-    darkkhaki:  [189,183,107],
-    darkmagenta:  [139,0,139],
-    darkolivegreen: [85,107,47],
-    darkorange: [255,140,0],
-    darkorchid: [153,50,204],
-    darkred:  [139,0,0],
-    darksalmon: [233,150,122],
-    darkseagreen: [143,188,143],
-    darkslateblue:  [72,61,139],
-    darkslategray:  [47,79,79],
-    darkslategrey:  [47,79,79],
-    darkturquoise:  [0,206,209],
-    darkviolet: [148,0,211],
-    deeppink: [255,20,147],
-    deepskyblue:  [0,191,255],
-    dimgray:  [105,105,105],
-    dimgrey:  [105,105,105],
-    dodgerblue: [30,144,255],
-    firebrick:  [178,34,34],
-    floralwhite:  [255,250,240],
-    forestgreen:  [34,139,34],
-    fuchsia:  [255,0,255],
-    gainsboro:  [220,220,220],
-    ghostwhite: [248,248,255],
-    gold: [255,215,0],
-    goldenrod:  [218,165,32],
-    gray: [128,128,128],
-    green:  [0,128,0],
-    greenyellow:  [173,255,47],
-    grey: [128,128,128],
-    honeydew: [240,255,240],
-    hotpink:  [255,105,180],
-    indianred:  [205,92,92],
-    indigo: [75,0,130],
-    ivory:  [255,255,240],
-    khaki:  [240,230,140],
-    lavender: [230,230,250],
-    lavenderblush:  [255,240,245],
-    lawngreen:  [124,252,0],
-    lemonchiffon: [255,250,205],
-    lightblue:  [173,216,230],
-    lightcoral: [240,128,128],
-    lightcyan:  [224,255,255],
-    lightgoldenrodyellow: [250,250,210],
-    lightgray:  [211,211,211],
-    lightgreen: [144,238,144],
-    lightgrey:  [211,211,211],
-    lightpink:  [255,182,193],
-    lightsalmon:  [255,160,122],
-    lightseagreen:  [32,178,170],
-    lightskyblue: [135,206,250],
-    lightslategray: [119,136,153],
-    lightslategrey: [119,136,153],
-    lightsteelblue: [176,196,222],
-    lightyellow:  [255,255,224],
-    lime: [0,255,0],
-    limegreen:  [50,205,50],
-    linen:  [250,240,230],
-    magenta:  [255,0,255],
-    maroon: [128,0,0],
-    mediumaquamarine: [102,205,170],
-    mediumblue: [0,0,205],
-    mediumorchid: [186,85,211],
-    mediumpurple: [147,112,219],
-    mediumseagreen: [60,179,113],
-    mediumslateblue:  [123,104,238],
-    mediumspringgreen:  [0,250,154],
-    mediumturquoise:  [72,209,204],
-    mediumvioletred:  [199,21,133],
-    midnightblue: [25,25,112],
-    mintcream:  [245,255,250],
-    mistyrose:  [255,228,225],
-    moccasin: [255,228,181],
-    navajowhite:  [255,222,173],
-    navy: [0,0,128],
-    oldlace:  [253,245,230],
-    olive:  [128,128,0],
-    olivedrab:  [107,142,35],
-    orange: [255,165,0],
-    orangered:  [255,69,0],
-    orchid: [218,112,214],
-    palegoldenrod:  [238,232,170],
-    palegreen:  [152,251,152],
-    paleturquoise:  [175,238,238],
-    palevioletred:  [219,112,147],
-    papayawhip: [255,239,213],
-    peachpuff:  [255,218,185],
-    peru: [205,133,63],
-    pink: [255,192,203],
-    plum: [221,160,221],
-    powderblue: [176,224,230],
-    purple: [128,0,128],
-    rebeccapurple: [102, 51, 153],
-    red:  [255,0,0],
-    rosybrown:  [188,143,143],
-    royalblue:  [65,105,225],
-    saddlebrown:  [139,69,19],
-    salmon: [250,128,114],
-    sandybrown: [244,164,96],
-    seagreen: [46,139,87],
-    seashell: [255,245,238],
-    sienna: [160,82,45],
-    silver: [192,192,192],
-    skyblue:  [135,206,235],
-    slateblue:  [106,90,205],
-    slategray:  [112,128,144],
-    slategrey:  [112,128,144],
-    snow: [255,250,250],
-    springgreen:  [0,255,127],
-    steelblue:  [70,130,180],
-    tan:  [210,180,140],
-    teal: [0,128,128],
-    thistle:  [216,191,216],
-    tomato: [255,99,71],
-    turquoise:  [64,224,208],
-    violet: [238,130,238],
-    wheat:  [245,222,179],
-    white:  [255,255,255],
-    whitesmoke: [245,245,245],
-    yellow: [255,255,0],
-    yellowgreen:  [154,205,50]
-  };
-
-  var reverseKeywords = {};
-  for (var key in cssKeywords) {
-    reverseKeywords[JSON.stringify(cssKeywords[key])] = key;
-  }
-
-},{}],5:[function(require,module,exports){
-  var conversions = require(4);
-
-  var convert = function() {
-    return new Converter();
-  }
-
-  for (var func in conversions) {
-    // export Raw versions
-    convert[func + "Raw"] =  (function(func) {
-      // accept array or plain args
-      return function(arg) {
-        if (typeof arg == "number")
-          arg = Array.prototype.slice.call(arguments);
-        return conversions[func](arg);
-      }
-    })(func);
-
-    var pair = /(\w+)2(\w+)/.exec(func),
-      from = pair[1],
-      to = pair[2];
-
-    // export rgb2hsl and ["rgb"]["hsl"]
-    convert[from] = convert[from] || {};
-
-    convert[from][to] = convert[func] = (function(func) {
-      return function(arg) {
-        if (typeof arg == "number")
-          arg = Array.prototype.slice.call(arguments);
-
-        var val = conversions[func](arg);
-        if (typeof val == "string" || val === undefined)
-          return val; // keyword
-
-        for (var i = 0; i < val.length; i++)
-          val[i] = Math.round(val[i]);
-        return val;
-      }
-    })(func);
-  }
-
-
-  /* Converter does lazy conversion and caching */
-  var Converter = function() {
-    this.convs = {};
-  };
-
-  /* Either get the values for a space or
-   set the values for a space, depending on args */
-  Converter.prototype.routeSpace = function(space, args) {
-    var values = args[0];
-    if (values === undefined) {
-      // color.rgb()
-      return this.getValues(space);
-    }
-    // color.rgb(10, 10, 10)
-    if (typeof values == "number") {
-      values = Array.prototype.slice.call(args);
-    }
-
-    return this.setValues(space, values);
-  };
-
-  /* Set the values for a space, invalidating cache */
-  Converter.prototype.setValues = function(space, values) {
-    this.space = space;
-    this.convs = {};
-    this.convs[space] = values;
-    return this;
-  };
-
-  /* Get the values for a space. If there's already
-   a conversion for the space, fetch it, otherwise
-   compute it */
-  Converter.prototype.getValues = function(space) {
-    var vals = this.convs[space];
-    if (!vals) {
-      var fspace = this.space,
-        from = this.convs[fspace];
-      vals = convert[fspace][space](from);
-
-      this.convs[space] = vals;
-    }
-    return vals;
-  };
-
-  ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function(space) {
-    Converter.prototype[space] = function(vals) {
-      return this.routeSpace(space, arguments);
-    }
-  });
-
-  module.exports = convert;
-},{"4":4}],6:[function(require,module,exports){
-  module.exports = {
-    "aliceblue": [240, 248, 255],
-    "antiquewhite": [250, 235, 215],
-    "aqua": [0, 255, 255],
-    "aquamarine": [127, 255, 212],
-    "azure": [240, 255, 255],
-    "beige": [245, 245, 220],
-    "bisque": [255, 228, 196],
-    "black": [0, 0, 0],
-    "blanchedalmond": [255, 235, 205],
-    "blue": [0, 0, 255],
-    "blueviolet": [138, 43, 226],
-    "brown": [165, 42, 42],
-    "burlywood": [222, 184, 135],
-    "cadetblue": [95, 158, 160],
-    "chartreuse": [127, 255, 0],
-    "chocolate": [210, 105, 30],
-    "coral": [255, 127, 80],
-    "cornflowerblue": [100, 149, 237],
-    "cornsilk": [255, 248, 220],
-    "crimson": [220, 20, 60],
-    "cyan": [0, 255, 255],
-    "darkblue": [0, 0, 139],
-    "darkcyan": [0, 139, 139],
-    "darkgoldenrod": [184, 134, 11],
-    "darkgray": [169, 169, 169],
-    "darkgreen": [0, 100, 0],
-    "darkgrey": [169, 169, 169],
-    "darkkhaki": [189, 183, 107],
-    "darkmagenta": [139, 0, 139],
-    "darkolivegreen": [85, 107, 47],
-    "darkorange": [255, 140, 0],
-    "darkorchid": [153, 50, 204],
-    "darkred": [139, 0, 0],
-    "darksalmon": [233, 150, 122],
-    "darkseagreen": [143, 188, 143],
-    "darkslateblue": [72, 61, 139],
-    "darkslategray": [47, 79, 79],
-    "darkslategrey": [47, 79, 79],
-    "darkturquoise": [0, 206, 209],
-    "darkviolet": [148, 0, 211],
-    "deeppink": [255, 20, 147],
-    "deepskyblue": [0, 191, 255],
-    "dimgray": [105, 105, 105],
-    "dimgrey": [105, 105, 105],
-    "dodgerblue": [30, 144, 255],
-    "firebrick": [178, 34, 34],
-    "floralwhite": [255, 250, 240],
-    "forestgreen": [34, 139, 34],
-    "fuchsia": [255, 0, 255],
-    "gainsboro": [220, 220, 220],
-    "ghostwhite": [248, 248, 255],
-    "gold": [255, 215, 0],
-    "goldenrod": [218, 165, 32],
-    "gray": [128, 128, 128],
-    "green": [0, 128, 0],
-    "greenyellow": [173, 255, 47],
-    "grey": [128, 128, 128],
-    "honeydew": [240, 255, 240],
-    "hotpink": [255, 105, 180],
-    "indianred": [205, 92, 92],
-    "indigo": [75, 0, 130],
-    "ivory": [255, 255, 240],
-    "khaki": [240, 230, 140],
-    "lavender": [230, 230, 250],
-    "lavenderblush": [255, 240, 245],
-    "lawngreen": [124, 252, 0],
-    "lemonchiffon": [255, 250, 205],
-    "lightblue": [173, 216, 230],
-    "lightcoral": [240, 128, 128],
-    "lightcyan": [224, 255, 255],
-    "lightgoldenrodyellow": [250, 250, 210],
-    "lightgray": [211, 211, 211],
-    "lightgreen": [144, 238, 144],
-    "lightgrey": [211, 211, 211],
-    "lightpink": [255, 182, 193],
-    "lightsalmon": [255, 160, 122],
-    "lightseagreen": [32, 178, 170],
-    "lightskyblue": [135, 206, 250],
-    "lightslategray": [119, 136, 153],
-    "lightslategrey": [119, 136, 153],
-    "lightsteelblue": [176, 196, 222],
-    "lightyellow": [255, 255, 224],
-    "lime": [0, 255, 0],
-    "limegreen": [50, 205, 50],
-    "linen": [250, 240, 230],
-    "magenta": [255, 0, 255],
-    "maroon": [128, 0, 0],
-    "mediumaquamarine": [102, 205, 170],
-    "mediumblue": [0, 0, 205],
-    "mediumorchid": [186, 85, 211],
-    "mediumpurple": [147, 112, 219],
-    "mediumseagreen": [60, 179, 113],
-    "mediumslateblue": [123, 104, 238],
-    "mediumspringgreen": [0, 250, 154],
-    "mediumturquoise": [72, 209, 204],
-    "mediumvioletred": [199, 21, 133],
-    "midnightblue": [25, 25, 112],
-    "mintcream": [245, 255, 250],
-    "mistyrose": [255, 228, 225],
-    "moccasin": [255, 228, 181],
-    "navajowhite": [255, 222, 173],
-    "navy": [0, 0, 128],
-    "oldlace": [253, 245, 230],
-    "olive": [128, 128, 0],
-    "olivedrab": [107, 142, 35],
-    "orange": [255, 165, 0],
-    "orangered": [255, 69, 0],
-    "orchid": [218, 112, 214],
-    "palegoldenrod": [238, 232, 170],
-    "palegreen": [152, 251, 152],
-    "paleturquoise": [175, 238, 238],
-    "palevioletred": [219, 112, 147],
-    "papayawhip": [255, 239, 213],
-    "peachpuff": [255, 218, 185],
-    "peru": [205, 133, 63],
-    "pink": [255, 192, 203],
-    "plum": [221, 160, 221],
-    "powderblue": [176, 224, 230],
-    "purple": [128, 0, 128],
-    "rebeccapurple": [102, 51, 153],
-    "red": [255, 0, 0],
-    "rosybrown": [188, 143, 143],
-    "royalblue": [65, 105, 225],
-    "saddlebrown": [139, 69, 19],
-    "salmon": [250, 128, 114],
-    "sandybrown": [244, 164, 96],
-    "seagreen": [46, 139, 87],
-    "seashell": [255, 245, 238],
-    "sienna": [160, 82, 45],
-    "silver": [192, 192, 192],
-    "skyblue": [135, 206, 235],
-    "slateblue": [106, 90, 205],
-    "slategray": [112, 128, 144],
-    "slategrey": [112, 128, 144],
-    "snow": [255, 250, 250],
-    "springgreen": [0, 255, 127],
-    "steelblue": [70, 130, 180],
-    "tan": [210, 180, 140],
-    "teal": [0, 128, 128],
-    "thistle": [216, 191, 216],
-    "tomato": [255, 99, 71],
-    "turquoise": [64, 224, 208],
-    "violet": [238, 130, 238],
-    "wheat": [245, 222, 179],
-    "white": [255, 255, 255],
-    "whitesmoke": [245, 245, 245],
-    "yellow": [255, 255, 0],
-    "yellowgreen": [154, 205, 50]
-  };
-},{}],7:[function(require,module,exports){
-  /**
-   * @namespace Chart
-   */
-  var Chart = require(28)();
-
-  require(26)(Chart);
-  require(42)(Chart);
-  require(22)(Chart);
-  require(31)(Chart);
-  require(25)(Chart);
-  require(21)(Chart);
-  require(23)(Chart);
-  require(24)(Chart);
-  require(29)(Chart);
-  require(33)(Chart);
-  require(34)(Chart);
-  require(32)(Chart);
-  require(35)(Chart);
-  require(30)(Chart);
-  require(27)(Chart);
-  require(36)(Chart);
-
-  require(37)(Chart);
-  require(38)(Chart);
-  require(39)(Chart);
-  require(40)(Chart);
-
-  require(45)(Chart);
-  require(43)(Chart);
-  require(44)(Chart);
-  require(46)(Chart);
-  require(47)(Chart);
-  require(48)(Chart);
-
-// Controllers must be loaded after elements
-// See Chart.core.datasetController.dataElementType
-  require(15)(Chart);
-  require(16)(Chart);
-  require(17)(Chart);
-  require(18)(Chart);
-  require(19)(Chart);
-  require(20)(Chart);
-
-  require(8)(Chart);
-  require(9)(Chart);
-  require(10)(Chart);
-  require(11)(Chart);
-  require(12)(Chart);
-  require(13)(Chart);
-  require(14)(Chart);
-
-  window.Chart = module.exports = Chart;
-
-},{"10":10,"11":11,"12":12,"13":13,"14":14,"15":15,"16":16,"17":17,"18":18,"19":19,"20":20,"21":21,"22":22,"23":23,"24":24,"25":25,"26":26,"27":27,"28":28,"29":29,"30":30,"31":31,"32":32,"33":33,"34":34,"35":35,"36":36,"37":37,"38":38,"39":39,"40":40,"42":42,"43":43,"44":44,"45":45,"46":46,"47":47,"48":48,"8":8,"9":9}],8:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    Chart.Bar = function(context, config) {
-      config.type = 'bar';
-
-      return new Chart(context, config);
-    };
-
-  };
-
-},{}],9:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    Chart.Bubble = function(context, config) {
-      config.type = 'bubble';
-      return new Chart(context, config);
-    };
-
-  };
-
-},{}],10:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    Chart.Doughnut = function(context, config) {
-      config.type = 'doughnut';
-
-      return new Chart(context, config);
-    };
-
-  };
-
-},{}],11:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    Chart.Line = function(context, config) {
-      config.type = 'line';
-
-      return new Chart(context, config);
-    };
-
-  };
-
-},{}],12:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    Chart.PolarArea = function(context, config) {
-      config.type = 'polarArea';
-
-      return new Chart(context, config);
-    };
-
-  };
-
-},{}],13:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    Chart.Radar = function(context, config) {
-      config.type = 'radar';
-
-      return new Chart(context, config);
-    };
-
-  };
-
-},{}],14:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var defaultConfig = {
-      hover: {
-        mode: 'single'
-      },
-
-      scales: {
-        xAxes: [{
-          type: 'linear', // scatter should not use a category axis
-          position: 'bottom',
-          id: 'x-axis-1' // need an ID so datasets can reference the scale
-        }],
-        yAxes: [{
-          type: 'linear',
-          position: 'left',
-          id: 'y-axis-1'
-        }]
-      },
-
-      tooltips: {
-        callbacks: {
-          title: function() {
-            // Title doesn't make sense for scatter since we format the data as a point
-            return '';
-          },
-          label: function(tooltipItem) {
-            return '(' + tooltipItem.xLabel + ', ' + tooltipItem.yLabel + ')';
-          }
-        }
-      }
-    };
-
-    // Register the default config for this type
-    Chart.defaults.scatter = defaultConfig;
-
-    // Scatter charts use line controllers
-    Chart.controllers.scatter = Chart.controllers.line;
-
-    Chart.Scatter = function(context, config) {
-      config.type = 'scatter';
-      return new Chart(context, config);
-    };
-
-  };
-
-},{}],15:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.bar = {
-      hover: {
-        mode: 'label'
-      },
-
-      scales: {
-        xAxes: [{
-          type: 'category',
-
-          // Specific to Bar Controller
-          categoryPercentage: 0.8,
-          barPercentage: 0.9,
-
-          // grid line settings
-          gridLines: {
-            offsetGridLines: true
-          }
-        }],
-        yAxes: [{
-          type: 'linear'
-        }]
-      }
-    };
-
-    Chart.controllers.bar = Chart.DatasetController.extend({
-
-      dataElementType: Chart.elements.Rectangle,
-
-      initialize: function(chart, datasetIndex) {
-        Chart.DatasetController.prototype.initialize.call(this, chart, datasetIndex);
-
-        var me = this;
-        var meta = me.getMeta();
-        var dataset = me.getDataset();
-
-        meta.stack = dataset.stack;
-        // Use this to indicate that this is a bar dataset.
-        meta.bar = true;
-      },
-
-      // Correctly calculate the bar width accounting for stacks and the fact that not all bars are visible
-      getStackCount: function() {
-        var me = this;
-        var meta = me.getMeta();
-        var yScale = me.getScaleForId(meta.yAxisID);
-
-        var stacks = [];
-        helpers.each(me.chart.data.datasets, function(dataset, datasetIndex) {
-          var dsMeta = me.chart.getDatasetMeta(datasetIndex);
-          if (dsMeta.bar && me.chart.isDatasetVisible(datasetIndex) &&
-            (yScale.options.stacked === false ||
-            (yScale.options.stacked === true && stacks.indexOf(dsMeta.stack) === -1) ||
-            (yScale.options.stacked === undefined && (dsMeta.stack === undefined || stacks.indexOf(dsMeta.stack) === -1)))) {
-            stacks.push(dsMeta.stack);
-          }
-        }, me);
-
-        return stacks.length;
-      },
-
-      update: function(reset) {
-        var me = this;
-        helpers.each(me.getMeta().data, function(rectangle, index) {
-          me.updateElement(rectangle, index, reset);
-        }, me);
-      },
-
-      updateElement: function(rectangle, index, reset) {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var scaleBase = yScale.getBasePixel();
-        var rectangleElementOptions = me.chart.options.elements.rectangle;
-        var custom = rectangle.custom || {};
-        var dataset = me.getDataset();
-
-        rectangle._xScale = xScale;
-        rectangle._yScale = yScale;
-        rectangle._datasetIndex = me.index;
-        rectangle._index = index;
-
-        var ruler = me.getRuler(index); // The index argument for compatible
-        rectangle._model = {
-          x: me.calculateBarX(index, me.index, ruler),
-          y: reset ? scaleBase : me.calculateBarY(index, me.index),
-
-          // Tooltip
-          label: me.chart.data.labels[index],
-          datasetLabel: dataset.label,
-
-          // Appearance
-          horizontal: false,
-          base: reset ? scaleBase : me.calculateBarBase(me.index, index),
-          width: me.calculateBarWidth(ruler),
-          backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor),
-          borderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped,
-          borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor),
-          borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth)
-        };
-
-        rectangle.pivot();
-      },
-
-      calculateBarBase: function(datasetIndex, index) {
-        var me = this;
-        var meta = me.getMeta();
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var base = yScale.getBaseValue();
-        var original = base;
-
-        if ((yScale.options.stacked === true) ||
-          (yScale.options.stacked === undefined && meta.stack !== undefined)) {
-          var chart = me.chart;
-          var datasets = chart.data.datasets;
-          var value = Number(datasets[datasetIndex].data[index]);
-
-          for (var i = 0; i < datasetIndex; i++) {
-            var currentDs = datasets[i];
-            var currentDsMeta = chart.getDatasetMeta(i);
-            if (currentDsMeta.bar && currentDsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i) &&
-              meta.stack === currentDsMeta.stack) {
-              var currentVal = Number(currentDs.data[index]);
-              base += value < 0 ? Math.min(currentVal, original) : Math.max(currentVal, original);
-            }
-          }
-
-          return yScale.getPixelForValue(base);
-        }
-
-        return yScale.getBasePixel();
-      },
-
-      getRuler: function() {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var stackCount = me.getStackCount();
-
-        var tickWidth = xScale.width / xScale.ticks.length;
-        var categoryWidth = tickWidth * xScale.options.categoryPercentage;
-        var categorySpacing = (tickWidth - (tickWidth * xScale.options.categoryPercentage)) / 2;
-        var fullBarWidth = categoryWidth / stackCount;
-
-        var barWidth = fullBarWidth * xScale.options.barPercentage;
-        var barSpacing = fullBarWidth - (fullBarWidth * xScale.options.barPercentage);
-
-        return {
-          stackCount: stackCount,
-          tickWidth: tickWidth,
-          categoryWidth: categoryWidth,
-          categorySpacing: categorySpacing,
-          fullBarWidth: fullBarWidth,
-          barWidth: barWidth,
-          barSpacing: barSpacing
-        };
-      },
-
-      calculateBarWidth: function(ruler) {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-        if (xScale.options.barThickness) {
-          return xScale.options.barThickness;
-        }
-        return ruler.barWidth;
-      },
-
-      // Get stack index from the given dataset index accounting for stacks and the fact that not all bars are visible
-      getStackIndex: function(datasetIndex) {
-        var me = this;
-        var meta = me.chart.getDatasetMeta(datasetIndex);
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var dsMeta, j;
-        var stacks = [meta.stack];
-
-        for (j = 0; j < datasetIndex; ++j) {
-          dsMeta = this.chart.getDatasetMeta(j);
-          if (dsMeta.bar && this.chart.isDatasetVisible(j) &&
-            (yScale.options.stacked === false ||
-            (yScale.options.stacked === true && stacks.indexOf(dsMeta.stack) === -1) ||
-            (yScale.options.stacked === undefined && (dsMeta.stack === undefined || stacks.indexOf(dsMeta.stack) === -1)))) {
-            stacks.push(dsMeta.stack);
-          }
-        }
-
-        return stacks.length - 1;
-      },
-
-      calculateBarX: function(index, datasetIndex, ruler) {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var stackIndex = me.getStackIndex(datasetIndex);
-        var leftTick = xScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo);
-        leftTick -= me.chart.isCombo ? (ruler.tickWidth / 2) : 0;
-
-        return leftTick +
-          (ruler.barWidth / 2) +
-          ruler.categorySpacing +
-          (ruler.barWidth * stackIndex) +
-          (ruler.barSpacing / 2) +
-          (ruler.barSpacing * stackIndex);
-      },
-
-      calculateBarY: function(index, datasetIndex) {
-        var me = this;
-        var meta = me.getMeta();
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var value = Number(me.getDataset().data[index]);
-
-        if (yScale.options.stacked ||
-          (yScale.options.stacked === undefined && meta.stack !== undefined)) {
-          var base = yScale.getBaseValue();
-          var sumPos = base,
-            sumNeg = base;
-
-          for (var i = 0; i < datasetIndex; i++) {
-            var ds = me.chart.data.datasets[i];
-            var dsMeta = me.chart.getDatasetMeta(i);
-            if (dsMeta.bar && dsMeta.yAxisID === yScale.id && me.chart.isDatasetVisible(i) &&
-              meta.stack === dsMeta.stack) {
-              var stackedVal = Number(ds.data[index]);
-              if (stackedVal < 0) {
-                sumNeg += stackedVal || 0;
-              } else {
-                sumPos += stackedVal || 0;
-              }
-            }
-          }
-
-          if (value < 0) {
-            return yScale.getPixelForValue(sumNeg + value);
-          }
-          return yScale.getPixelForValue(sumPos + value);
-        }
-
-        return yScale.getPixelForValue(value);
-      },
-
-      draw: function(ease) {
-        var me = this;
-        var easingDecimal = ease || 1;
-        var metaData = me.getMeta().data;
-        var dataset = me.getDataset();
-        var i, len;
-
-        Chart.canvasHelpers.clipArea(me.chart.chart.ctx, me.chart.chartArea);
-        for (i = 0, len = metaData.length; i < len; ++i) {
-          var d = dataset.data[i];
-          if (d !== null && d !== undefined && !isNaN(d)) {
-            metaData[i].transition(easingDecimal).draw();
-          }
-        }
-        Chart.canvasHelpers.unclipArea(me.chart.chart.ctx);
-      },
-
-      setHoverStyle: function(rectangle) {
-        var dataset = this.chart.data.datasets[rectangle._datasetIndex];
-        var index = rectangle._index;
-
-        var custom = rectangle.custom || {};
-        var model = rectangle._model;
-        model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.hoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));
-        model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.hoverBorderColor, index, helpers.getHoverColor(model.borderColor));
-        model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);
-      },
-
-      removeHoverStyle: function(rectangle) {
-        var dataset = this.chart.data.datasets[rectangle._datasetIndex];
-        var index = rectangle._index;
-        var custom = rectangle.custom || {};
-        var model = rectangle._model;
-        var rectangleElementOptions = this.chart.options.elements.rectangle;
-
-        model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor);
-        model.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor);
-        model.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth);
-      }
-
-    });
-
-
-    // including horizontalBar in the bar file, instead of a file of its own
-    // it extends bar (like pie extends doughnut)
-    Chart.defaults.horizontalBar = {
-      hover: {
-        mode: 'label'
-      },
-
-      scales: {
-        xAxes: [{
-          type: 'linear',
-          position: 'bottom'
-        }],
-        yAxes: [{
-          position: 'left',
-          type: 'category',
-
-          // Specific to Horizontal Bar Controller
-          categoryPercentage: 0.8,
-          barPercentage: 0.9,
-
-          // grid line settings
-          gridLines: {
-            offsetGridLines: true
-          }
-        }]
-      },
-      elements: {
-        rectangle: {
-          borderSkipped: 'left'
-        }
-      },
-      tooltips: {
-        callbacks: {
-          title: function(tooltipItems, data) {
-            // Pick first xLabel for now
-            var title = '';
-
-            if (tooltipItems.length > 0) {
-              if (tooltipItems[0].yLabel) {
-                title = tooltipItems[0].yLabel;
-              } else if (data.labels.length > 0 && tooltipItems[0].index < data.labels.length) {
-                title = data.labels[tooltipItems[0].index];
-              }
-            }
-
-            return title;
-          },
-          label: function(tooltipItem, data) {
-            var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';
-            return datasetLabel + ': ' + tooltipItem.xLabel;
-          }
-        }
-      }
-    };
-
-    Chart.controllers.horizontalBar = Chart.controllers.bar.extend({
-
-      // Correctly calculate the bar width accounting for stacks and the fact that not all bars are visible
-      getStackCount: function() {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-
-        var stacks = [];
-        helpers.each(me.chart.data.datasets, function(dataset, datasetIndex) {
-          var dsMeta = me.chart.getDatasetMeta(datasetIndex);
-          if (dsMeta.bar && me.chart.isDatasetVisible(datasetIndex) &&
-            (xScale.options.stacked === false ||
-            (xScale.options.stacked === true && stacks.indexOf(dsMeta.stack) === -1) ||
-            (xScale.options.stacked === undefined && (dsMeta.stack === undefined || stacks.indexOf(dsMeta.stack) === -1)))) {
-            stacks.push(dsMeta.stack);
-          }
-        }, me);
-
-        return stacks.length;
-      },
-
-      updateElement: function(rectangle, index, reset) {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var scaleBase = xScale.getBasePixel();
-        var custom = rectangle.custom || {};
-        var dataset = me.getDataset();
-        var rectangleElementOptions = me.chart.options.elements.rectangle;
-
-        rectangle._xScale = xScale;
-        rectangle._yScale = yScale;
-        rectangle._datasetIndex = me.index;
-        rectangle._index = index;
-
-        var ruler = me.getRuler(index); // The index argument for compatible
-        rectangle._model = {
-          x: reset ? scaleBase : me.calculateBarX(index, me.index),
-          y: me.calculateBarY(index, me.index, ruler),
-
-          // Tooltip
-          label: me.chart.data.labels[index],
-          datasetLabel: dataset.label,
-
-          // Appearance
-          horizontal: true,
-          base: reset ? scaleBase : me.calculateBarBase(me.index, index),
-          height: me.calculateBarHeight(ruler),
-          backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor),
-          borderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped,
-          borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor),
-          borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth)
-        };
-
-        rectangle.pivot();
-      },
-
-      calculateBarBase: function(datasetIndex, index) {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var base = xScale.getBaseValue();
-        var originalBase = base;
-
-        if (xScale.options.stacked ||
-          (xScale.options.stacked === undefined && meta.stack !== undefined)) {
-          var chart = me.chart;
-          var datasets = chart.data.datasets;
-          var value = Number(datasets[datasetIndex].data[index]);
-
-          for (var i = 0; i < datasetIndex; i++) {
-            var currentDs = datasets[i];
-            var currentDsMeta = chart.getDatasetMeta(i);
-            if (currentDsMeta.bar && currentDsMeta.xAxisID === xScale.id && chart.isDatasetVisible(i) &&
-              meta.stack === currentDsMeta.stack) {
-              var currentVal = Number(currentDs.data[index]);
-              base += value < 0 ? Math.min(currentVal, originalBase) : Math.max(currentVal, originalBase);
-            }
-          }
-
-          return xScale.getPixelForValue(base);
-        }
-
-        return xScale.getBasePixel();
-      },
-
-      getRuler: function() {
-        var me = this;
-        var meta = me.getMeta();
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var stackCount = me.getStackCount();
-
-        var tickHeight = yScale.height / yScale.ticks.length;
-        var categoryHeight = tickHeight * yScale.options.categoryPercentage;
-        var categorySpacing = (tickHeight - (tickHeight * yScale.options.categoryPercentage)) / 2;
-        var fullBarHeight = categoryHeight / stackCount;
-
-        var barHeight = fullBarHeight * yScale.options.barPercentage;
-        var barSpacing = fullBarHeight - (fullBarHeight * yScale.options.barPercentage);
-
-        return {
-          stackCount: stackCount,
-          tickHeight: tickHeight,
-          categoryHeight: categoryHeight,
-          categorySpacing: categorySpacing,
-          fullBarHeight: fullBarHeight,
-          barHeight: barHeight,
-          barSpacing: barSpacing
-        };
-      },
-
-      calculateBarHeight: function(ruler) {
-        var me = this;
-        var meta = me.getMeta();
-        var yScale = me.getScaleForId(meta.yAxisID);
-        if (yScale.options.barThickness) {
-          return yScale.options.barThickness;
-        }
-        return ruler.barHeight;
-      },
-
-      // Get stack index from the given dataset index accounting for stacks and the fact that not all bars are visible
-      getStackIndex: function(datasetIndex) {
-        var me = this;
-        var meta = me.chart.getDatasetMeta(datasetIndex);
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var dsMeta, j;
-        var stacks = [meta.stack];
-
-        for (j = 0; j < datasetIndex; ++j) {
-          dsMeta = this.chart.getDatasetMeta(j);
-          if (dsMeta.bar && this.chart.isDatasetVisible(j) &&
-            (xScale.options.stacked === false ||
-            (xScale.options.stacked === true && stacks.indexOf(dsMeta.stack) === -1) ||
-            (xScale.options.stacked === undefined && (dsMeta.stack === undefined || stacks.indexOf(dsMeta.stack) === -1)))) {
-            stacks.push(dsMeta.stack);
-          }
-        }
-
-        return stacks.length - 1;
-      },
-
-      calculateBarX: function(index, datasetIndex) {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var value = Number(me.getDataset().data[index]);
-
-        if (xScale.options.stacked ||
-          (xScale.options.stacked === undefined && meta.stack !== undefined)) {
-          var base = xScale.getBaseValue();
-          var sumPos = base,
-            sumNeg = base;
-
-          for (var i = 0; i < datasetIndex; i++) {
-            var ds = me.chart.data.datasets[i];
-            var dsMeta = me.chart.getDatasetMeta(i);
-            if (dsMeta.bar && dsMeta.xAxisID === xScale.id && me.chart.isDatasetVisible(i) &&
-              meta.stack === dsMeta.stack) {
-              var stackedVal = Number(ds.data[index]);
-              if (stackedVal < 0) {
-                sumNeg += stackedVal || 0;
-              } else {
-                sumPos += stackedVal || 0;
-              }
-            }
-          }
-
-          if (value < 0) {
-            return xScale.getPixelForValue(sumNeg + value);
-          }
-          return xScale.getPixelForValue(sumPos + value);
-        }
-
-        return xScale.getPixelForValue(value);
-      },
-
-      calculateBarY: function(index, datasetIndex, ruler) {
-        var me = this;
-        var meta = me.getMeta();
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var stackIndex = me.getStackIndex(datasetIndex);
-        var topTick = yScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo);
-        topTick -= me.chart.isCombo ? (ruler.tickHeight / 2) : 0;
-
-        return topTick +
-          (ruler.barHeight / 2) +
-          ruler.categorySpacing +
-          (ruler.barHeight * stackIndex) +
-          (ruler.barSpacing / 2) +
-          (ruler.barSpacing * stackIndex);
-      }
-    });
-  };
-
-},{}],16:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.bubble = {
-      hover: {
-        mode: 'single'
-      },
-
-      scales: {
-        xAxes: [{
-          type: 'linear', // bubble should probably use a linear scale by default
-          position: 'bottom',
-          id: 'x-axis-0' // need an ID so datasets can reference the scale
-        }],
-        yAxes: [{
-          type: 'linear',
-          position: 'left',
-          id: 'y-axis-0'
-        }]
-      },
-
-      tooltips: {
-        callbacks: {
-          title: function() {
-            // Title doesn't make sense for scatter since we format the data as a point
-            return '';
-          },
-          label: function(tooltipItem, data) {
-            var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';
-            var dataPoint = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
-            return datasetLabel + ': (' + tooltipItem.xLabel + ', ' + tooltipItem.yLabel + ', ' + dataPoint.r + ')';
-          }
-        }
-      }
-    };
-
-    Chart.controllers.bubble = Chart.DatasetController.extend({
-
-      dataElementType: Chart.elements.Point,
-
-      update: function(reset) {
-        var me = this;
-        var meta = me.getMeta();
-        var points = meta.data;
-
-        // Update Points
-        helpers.each(points, function(point, index) {
-          me.updateElement(point, index, reset);
-        });
-      },
-
-      updateElement: function(point, index, reset) {
-        var me = this;
-        var meta = me.getMeta();
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var yScale = me.getScaleForId(meta.yAxisID);
-
-        var custom = point.custom || {};
-        var dataset = me.getDataset();
-        var data = dataset.data[index];
-        var pointElementOptions = me.chart.options.elements.point;
-        var dsIndex = me.index;
-
-        helpers.extend(point, {
-          // Utility
-          _xScale: xScale,
-          _yScale: yScale,
-          _datasetIndex: dsIndex,
-          _index: index,
-
-          // Desired view properties
-          _model: {
-            x: reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex, me.chart.isCombo),
-            y: reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex),
-            // Appearance
-            radius: reset ? 0 : custom.radius ? custom.radius : me.getRadius(data),
-
-            // Tooltip
-            hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius)
-          }
-        });
-
-        // Trick to reset the styles of the point
-        Chart.DatasetController.prototype.removeHoverStyle.call(me, point, pointElementOptions);
-
-        var model = point._model;
-        model.skip = custom.skip ? custom.skip : (isNaN(model.x) || isNaN(model.y));
-
-        point.pivot();
-      },
-
-      getRadius: function(value) {
-        return value.r || this.chart.options.elements.point.radius;
-      },
-
-      setHoverStyle: function(point) {
-        var me = this;
-        Chart.DatasetController.prototype.setHoverStyle.call(me, point);
-
-        // Radius
-        var dataset = me.chart.data.datasets[point._datasetIndex];
-        var index = point._index;
-        var custom = point.custom || {};
-        var model = point._model;
-        model.radius = custom.hoverRadius ? custom.hoverRadius : (helpers.getValueAtIndexOrDefault(dataset.hoverRadius, index, me.chart.options.elements.point.hoverRadius)) + me.getRadius(dataset.data[index]);
-      },
-
-      removeHoverStyle: function(point) {
-        var me = this;
-        Chart.DatasetController.prototype.removeHoverStyle.call(me, point, me.chart.options.elements.point);
-
-        var dataVal = me.chart.data.datasets[point._datasetIndex].data[point._index];
-        var custom = point.custom || {};
-        var model = point._model;
-
-        model.radius = custom.radius ? custom.radius : me.getRadius(dataVal);
-      }
-    });
-  };
-
-},{}],17:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers,
-      defaults = Chart.defaults;
-
-    defaults.doughnut = {
-      animation: {
-        // Boolean - Whether we animate the rotation of the Doughnut
-        animateRotate: true,
-        // Boolean - Whether we animate scaling the Doughnut from the centre
-        animateScale: false
-      },
-      aspectRatio: 1,
-      hover: {
-        mode: 'single'
-      },
-      legendCallback: function(chart) {
-        var text = [];
-        text.push('<ul class="' + chart.id + '-legend">');
-
-        var data = chart.data;
-        var datasets = data.datasets;
-        var labels = data.labels;
-
-        if (datasets.length) {
-          for (var i = 0; i < datasets[0].data.length; ++i) {
-            text.push('<li><span style="background-color:' + datasets[0].backgroundColor[i] + '"></span>');
-            if (labels[i]) {
-              text.push(labels[i]);
-            }
-            text.push('</li>');
-          }
-        }
-
-        text.push('</ul>');
-        return text.join('');
-      },
-      legend: {
-        labels: {
-          generateLabels: function(chart) {
-            var data = chart.data;
-            if (data.labels.length && data.datasets.length) {
-              return data.labels.map(function(label, i) {
-                var meta = chart.getDatasetMeta(0);
-                var ds = data.datasets[0];
-                var arc = meta.data[i];
-                var custom = arc && arc.custom || {};
-                var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;
-                var arcOpts = chart.options.elements.arc;
-                var fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);
-                var stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);
-                var bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);
-
-                return {
-                  text: label,
-                  fillStyle: fill,
-                  strokeStyle: stroke,
-                  lineWidth: bw,
-                  hidden: isNaN(ds.data[i]) || meta.data[i].hidden,
-
-                  // Extra data used for toggling the correct item
-                  index: i
-                };
-              });
-            }
-            return [];
-          }
-        },
-
-        onClick: function(e, legendItem) {
-          var index = legendItem.index;
-          var chart = this.chart;
-          var i, ilen, meta;
-
-          for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
-            meta = chart.getDatasetMeta(i);
-            // toggle visibility of index if exists
-            if (meta.data[index]) {
-              meta.data[index].hidden = !meta.data[index].hidden;
-            }
-          }
-
-          chart.update();
-        }
-      },
-
-      // The percentage of the chart that we cut out of the middle.
-      cutoutPercentage: 50,
-
-      // The rotation of the chart, where the first data arc begins.
-      rotation: Math.PI * -0.5,
-
-      // The total circumference of the chart.
-      circumference: Math.PI * 2.0,
-
-      // Need to override these to give a nice default
-      tooltips: {
-        callbacks: {
-          title: function() {
-            return '';
-          },
-          label: function(tooltipItem, data) {
-            var dataLabel = data.labels[tooltipItem.index];
-            var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
-
-            if (helpers.isArray(dataLabel)) {
-              // show value on first line of multiline label
-              // need to clone because we are changing the value
-              dataLabel = dataLabel.slice();
-              dataLabel[0] += value;
-            } else {
-              dataLabel += value;
-            }
-
-            return dataLabel;
-          }
-        }
-      }
-    };
-
-    defaults.pie = helpers.clone(defaults.doughnut);
-    helpers.extend(defaults.pie, {
-      cutoutPercentage: 0
-    });
-
-
-    Chart.controllers.doughnut = Chart.controllers.pie = Chart.DatasetController.extend({
-
-      dataElementType: Chart.elements.Arc,
-
-      linkScales: helpers.noop,
-
-      // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly
-      getRingIndex: function(datasetIndex) {
-        var ringIndex = 0;
-
-        for (var j = 0; j < datasetIndex; ++j) {
-          if (this.chart.isDatasetVisible(j)) {
-            ++ringIndex;
-          }
-        }
-
-        return ringIndex;
-      },
-
-      update: function(reset) {
-        var me = this;
-        var chart = me.chart,
-          chartArea = chart.chartArea,
-          opts = chart.options,
-          arcOpts = opts.elements.arc,
-          availableWidth = chartArea.right - chartArea.left - arcOpts.borderWidth,
-          availableHeight = chartArea.bottom - chartArea.top - arcOpts.borderWidth,
-          minSize = Math.min(availableWidth, availableHeight),
-          offset = {
-            x: 0,
-            y: 0
-          },
-          meta = me.getMeta(),
-          cutoutPercentage = opts.cutoutPercentage,
-          circumference = opts.circumference;
-
-        // If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc
-        if (circumference < Math.PI * 2.0) {
-          var startAngle = opts.rotation % (Math.PI * 2.0);
-          startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);
-          var endAngle = startAngle + circumference;
-          var start = {x: Math.cos(startAngle), y: Math.sin(startAngle)};
-          var end = {x: Math.cos(endAngle), y: Math.sin(endAngle)};
-          var contains0 = (startAngle <= 0 && 0 <= endAngle) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle);
-          var contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle);
-          var contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle);
-          var contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle);
-          var cutout = cutoutPercentage / 100.0;
-          var min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))};
-          var max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))};
-          var size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5};
-          minSize = Math.min(availableWidth / size.width, availableHeight / size.height);
-          offset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5};
-        }
-
-        chart.borderWidth = me.getMaxBorderWidth(meta.data);
-        chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);
-        chart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 0, 0);
-        chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();
-        chart.offsetX = offset.x * chart.outerRadius;
-        chart.offsetY = offset.y * chart.outerRadius;
-
-        meta.total = me.calculateTotal();
-
-        me.outerRadius = chart.outerRadius - (chart.radiusLength * me.getRingIndex(me.index));
-        me.innerRadius = Math.max(me.outerRadius - chart.radiusLength, 0);
-
-        helpers.each(meta.data, function(arc, index) {
-          me.updateElement(arc, index, reset);
-        });
-      },
-
-      updateElement: function(arc, index, reset) {
-        var me = this;
-        var chart = me.chart,
-          chartArea = chart.chartArea,
-          opts = chart.options,
-          animationOpts = opts.animation,
-          centerX = (chartArea.left + chartArea.right) / 2,
-          centerY = (chartArea.top + chartArea.bottom) / 2,
-          startAngle = opts.rotation, // non reset case handled later
-          endAngle = opts.rotation, // non reset case handled later
-          dataset = me.getDataset(),
-          circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI)),
-          innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius,
-          outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius,
-          valueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;
-
-        helpers.extend(arc, {
-          // Utility
-          _datasetIndex: me.index,
-          _index: index,
-
-          // Desired view properties
-          _model: {
-            x: centerX + chart.offsetX,
-            y: centerY + chart.offsetY,
-            startAngle: startAngle,
-            endAngle: endAngle,
-            circumference: circumference,
-            outerRadius: outerRadius,
-            innerRadius: innerRadius,
-            label: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])
-          }
-        });
-
-        var model = arc._model;
-        // Resets the visual styles
-        this.removeHoverStyle(arc);
-
-        // Set correct angles if not resetting
-        if (!reset || !animationOpts.animateRotate) {
-          if (index === 0) {
-            model.startAngle = opts.rotation;
-          } else {
-            model.startAngle = me.getMeta().data[index - 1]._model.endAngle;
-          }
-
-          model.endAngle = model.startAngle + model.circumference;
-        }
-
-        arc.pivot();
-      },
-
-      removeHoverStyle: function(arc) {
-        Chart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);
-      },
-
-      calculateTotal: function() {
-        var dataset = this.getDataset();
-        var meta = this.getMeta();
-        var total = 0;
-        var value;
-
-        helpers.each(meta.data, function(element, index) {
-          value = dataset.data[index];
-          if (!isNaN(value) && !element.hidden) {
-            total += Math.abs(value);
-          }
-        });
-
-        /* if (total === 0) {
-         total = NaN;
-         }*/
-
-        return total;
-      },
-
-      calculateCircumference: function(value) {
-        var total = this.getMeta().total;
-        if (total > 0 && !isNaN(value)) {
-          return (Math.PI * 2.0) * (value / total);
-        }
-        return 0;
-      },
-
-      // gets the max border or hover width to properly scale pie charts
-      getMaxBorderWidth: function(elements) {
-        var max = 0,
-          index = this.index,
-          length = elements.length,
-          borderWidth,
-          hoverWidth;
-
-        for (var i = 0; i < length; i++) {
-          borderWidth = elements[i]._model ? elements[i]._model.borderWidth : 0;
-          hoverWidth = elements[i]._chart ? elements[i]._chart.config.data.datasets[index].hoverBorderWidth : 0;
-
-          max = borderWidth > max ? borderWidth : max;
-          max = hoverWidth > max ? hoverWidth : max;
-        }
-        return max;
-      }
-    });
-  };
-
-},{}],18:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.line = {
-      showLines: true,
-      spanGaps: false,
-
-      hover: {
-        mode: 'label'
-      },
-
-      scales: {
-        xAxes: [{
-          type: 'category',
-          id: 'x-axis-0'
-        }],
-        yAxes: [{
-          type: 'linear',
-          id: 'y-axis-0'
-        }]
-      }
-    };
-
-    function lineEnabled(dataset, options) {
-      return helpers.getValueOrDefault(dataset.showLine, options.showLines);
-    }
-
-    Chart.controllers.line = Chart.DatasetController.extend({
-
-      datasetElementType: Chart.elements.Line,
-
-      dataElementType: Chart.elements.Point,
-
-      update: function(reset) {
-        var me = this;
-        var meta = me.getMeta();
-        var line = meta.dataset;
-        var points = meta.data || [];
-        var options = me.chart.options;
-        var lineElementOptions = options.elements.line;
-        var scale = me.getScaleForId(meta.yAxisID);
-        var i, ilen, custom;
-        var dataset = me.getDataset();
-        var showLine = lineEnabled(dataset, options);
-
-        // Update Line
-        if (showLine) {
-          custom = line.custom || {};
-
-          // Compatibility: If the properties are defined with only the old name, use those values
-          if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {
-            dataset.lineTension = dataset.tension;
-          }
-
-          // Utility
-          line._scale = scale;
-          line._datasetIndex = me.index;
-          // Data
-          line._children = points;
-          // Model
-          line._model = {
-            // Appearance
-            // The default behavior of lines is to break at null values, according
-            // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158
-            // This option gives lines the ability to span gaps
-            spanGaps: dataset.spanGaps ? dataset.spanGaps : options.spanGaps,
-            tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension),
-            backgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),
-            borderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),
-            borderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),
-            borderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),
-            borderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),
-            borderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),
-            borderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),
-            fill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),
-            steppedLine: custom.steppedLine ? custom.steppedLine : helpers.getValueOrDefault(dataset.steppedLine, lineElementOptions.stepped),
-            cubicInterpolationMode: custom.cubicInterpolationMode ? custom.cubicInterpolationMode : helpers.getValueOrDefault(dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode),
-            // Scale
-            scaleTop: scale.top,
-            scaleBottom: scale.bottom,
-            scaleZero: scale.getBasePixel()
-          };
-
-          line.pivot();
-        }
-
-        // Update Points
-        for (i=0, ilen=points.length; i<ilen; ++i) {
-          me.updateElement(points[i], i, reset);
-        }
-
-        if (showLine && line._model.tension !== 0) {
-          me.updateBezierControlPoints();
-        }
-
-        // Now pivot the point for animation
-        for (i=0, ilen=points.length; i<ilen; ++i) {
-          points[i].pivot();
-        }
-      },
-
-      getPointBackgroundColor: function(point, index) {
-        var backgroundColor = this.chart.options.elements.point.backgroundColor;
-        var dataset = this.getDataset();
-        var custom = point.custom || {};
-
-        if (custom.backgroundColor) {
-          backgroundColor = custom.backgroundColor;
-        } else if (dataset.pointBackgroundColor) {
-          backgroundColor = helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, backgroundColor);
-        } else if (dataset.backgroundColor) {
-          backgroundColor = dataset.backgroundColor;
-        }
-
-        return backgroundColor;
-      },
-
-      getPointBorderColor: function(point, index) {
-        var borderColor = this.chart.options.elements.point.borderColor;
-        var dataset = this.getDataset();
-        var custom = point.custom || {};
-
-        if (custom.borderColor) {
-          borderColor = custom.borderColor;
-        } else if (dataset.pointBorderColor) {
-          borderColor = helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, borderColor);
-        } else if (dataset.borderColor) {
-          borderColor = dataset.borderColor;
-        }
-
-        return borderColor;
-      },
-
-      getPointBorderWidth: function(point, index) {
-        var borderWidth = this.chart.options.elements.point.borderWidth;
-        var dataset = this.getDataset();
-        var custom = point.custom || {};
-
-        if (!isNaN(custom.borderWidth)) {
-          borderWidth = custom.borderWidth;
-        } else if (!isNaN(dataset.pointBorderWidth)) {
-          borderWidth = helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, borderWidth);
-        } else if (!isNaN(dataset.borderWidth)) {
-          borderWidth = dataset.borderWidth;
-        }
-
-        return borderWidth;
-      },
-
-      updateElement: function(point, index, reset) {
-        var me = this;
-        var meta = me.getMeta();
-        var custom = point.custom || {};
-        var dataset = me.getDataset();
-        var datasetIndex = me.index;
-        var value = dataset.data[index];
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var xScale = me.getScaleForId(meta.xAxisID);
-        var pointOptions = me.chart.options.elements.point;
-        var x, y;
-        var labels = me.chart.data.labels || [];
-        var includeOffset = (labels.length === 1 || dataset.data.length === 1) || me.chart.isCombo;
-
-        // Compatibility: If the properties are defined with only the old name, use those values
-        if ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {
-          dataset.pointRadius = dataset.radius;
-        }
-        if ((dataset.hitRadius !== undefined) && (dataset.pointHitRadius === undefined)) {
-          dataset.pointHitRadius = dataset.hitRadius;
-        }
-
-        x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex, includeOffset);
-        y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);
-
-        // Utility
-        point._xScale = xScale;
-        point._yScale = yScale;
-        point._datasetIndex = datasetIndex;
-        point._index = index;
-
-        // Desired view properties
-        point._model = {
-          x: x,
-          y: y,
-          skip: custom.skip || isNaN(x) || isNaN(y),
-          // Appearance
-          radius: custom.radius || helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, pointOptions.radius),
-          pointStyle: custom.pointStyle || helpers.getValueAtIndexOrDefault(dataset.pointStyle, index, pointOptions.pointStyle),
-          backgroundColor: me.getPointBackgroundColor(point, index),
-          borderColor: me.getPointBorderColor(point, index),
-          borderWidth: me.getPointBorderWidth(point, index),
-          tension: meta.dataset._model ? meta.dataset._model.tension : 0,
-          steppedLine: meta.dataset._model ? meta.dataset._model.steppedLine : false,
-          // Tooltip
-          hitRadius: custom.hitRadius || helpers.getValueAtIndexOrDefault(dataset.pointHitRadius, index, pointOptions.hitRadius)
-        };
-      },
-
-      calculatePointY: function(value, index, datasetIndex) {
-        var me = this;
-        var chart = me.chart;
-        var meta = me.getMeta();
-        var yScale = me.getScaleForId(meta.yAxisID);
-        var sumPos = 0;
-        var sumNeg = 0;
-        var i, ds, dsMeta;
-
-        if (yScale.options.stacked) {
-          for (i = 0; i < datasetIndex; i++) {
-            ds = chart.data.datasets[i];
-            dsMeta = chart.getDatasetMeta(i);
-            if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {
-              var stackedRightValue = Number(yScale.getRightValue(ds.data[index]));
-              if (stackedRightValue < 0) {
-                sumNeg += stackedRightValue || 0;
-              } else {
-                sumPos += stackedRightValue || 0;
-              }
-            }
-          }
-
-          var rightValue = Number(yScale.getRightValue(value));
-          if (rightValue < 0) {
-            return yScale.getPixelForValue(sumNeg + rightValue);
-          }
-          return yScale.getPixelForValue(sumPos + rightValue);
-        }
-
-        return yScale.getPixelForValue(value);
-      },
-
-      updateBezierControlPoints: function() {
-        var me = this;
-        var meta = me.getMeta();
-        var area = me.chart.chartArea;
-        var points = (meta.data || []);
-        var i, ilen, point, model, controlPoints;
-
-        // Only consider points that are drawn in case the spanGaps option is used
-        if (meta.dataset._model.spanGaps) {
-          points = points.filter(function(pt) {
-            return !pt._model.skip;
-          });
-        }
-
-        function capControlPoint(pt, min, max) {
-          return Math.max(Math.min(pt, max), min);
-        }
-
-        if (meta.dataset._model.cubicInterpolationMode === 'monotone') {
-          helpers.splineCurveMonotone(points);
-        } else {
-          for (i = 0, ilen = points.length; i < ilen; ++i) {
-            point = points[i];
-            model = point._model;
-            controlPoints = helpers.splineCurve(
-              helpers.previousItem(points, i)._model,
-              model,
-              helpers.nextItem(points, i)._model,
-              meta.dataset._model.tension
-            );
-            model.controlPointPreviousX = controlPoints.previous.x;
-            model.controlPointPreviousY = controlPoints.previous.y;
-            model.controlPointNextX = controlPoints.next.x;
-            model.controlPointNextY = controlPoints.next.y;
-          }
-        }
-
-        if (me.chart.options.elements.line.capBezierPoints) {
-          for (i = 0, ilen = points.length; i < ilen; ++i) {
-            model = points[i]._model;
-            model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);
-            model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);
-            model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);
-            model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);
-          }
-        }
-      },
-
-      draw: function(ease) {
-        var me = this;
-        var meta = me.getMeta();
-        var points = meta.data || [];
-        var easingDecimal = ease || 1;
-        var i, ilen;
-
-        // Transition Point Locations
-        for (i=0, ilen=points.length; i<ilen; ++i) {
-          points[i].transition(easingDecimal);
-        }
-
-        Chart.canvasHelpers.clipArea(me.chart.chart.ctx, me.chart.chartArea);
-        // Transition and Draw the line
-        if (lineEnabled(me.getDataset(), me.chart.options)) {
-          meta.dataset.transition(easingDecimal).draw();
-        }
-        Chart.canvasHelpers.unclipArea(me.chart.chart.ctx);
-
-        // Draw the points
-        for (i=0, ilen=points.length; i<ilen; ++i) {
-          points[i].draw(me.chart.chartArea);
-        }
-      },
-
-      setHoverStyle: function(point) {
-        // Point
-        var dataset = this.chart.data.datasets[point._datasetIndex];
-        var index = point._index;
-        var custom = point.custom || {};
-        var model = point._model;
-
-        model.radius = custom.hoverRadius || helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);
-        model.backgroundColor = custom.hoverBackgroundColor || helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));
-        model.borderColor = custom.hoverBorderColor || helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));
-        model.borderWidth = custom.hoverBorderWidth || helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);
-      },
-
-      removeHoverStyle: function(point) {
-        var me = this;
-        var dataset = me.chart.data.datasets[point._datasetIndex];
-        var index = point._index;
-        var custom = point.custom || {};
-        var model = point._model;
-
-        // Compatibility: If the properties are defined with only the old name, use those values
-        if ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {
-          dataset.pointRadius = dataset.radius;
-        }
-
-        model.radius = custom.radius || helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, me.chart.options.elements.point.radius);
-        model.backgroundColor = me.getPointBackgroundColor(point, index);
-        model.borderColor = me.getPointBorderColor(point, index);
-        model.borderWidth = me.getPointBorderWidth(point, index);
-      }
-    });
-  };
-
-},{}],19:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.polarArea = {
-
-      scale: {
-        type: 'radialLinear',
-        lineArc: true, // so that lines are circular
-        ticks: {
-          beginAtZero: true
-        }
-      },
-
-      // Boolean - Whether to animate the rotation of the chart
-      animation: {
-        animateRotate: true,
-        animateScale: true
-      },
-
-      startAngle: -0.5 * Math.PI,
-      aspectRatio: 1,
-      legendCallback: function(chart) {
-        var text = [];
-        text.push('<ul class="' + chart.id + '-legend">');
-
-        var data = chart.data;
-        var datasets = data.datasets;
-        var labels = data.labels;
-
-        if (datasets.length) {
-          for (var i = 0; i < datasets[0].data.length; ++i) {
-            text.push('<li><span style="background-color:' + datasets[0].backgroundColor[i] + '"></span>');
-            if (labels[i]) {
-              text.push(labels[i]);
-            }
-            text.push('</li>');
-          }
-        }
-
-        text.push('</ul>');
-        return text.join('');
-      },
-      legend: {
-        labels: {
-          generateLabels: function(chart) {
-            var data = chart.data;
-            if (data.labels.length && data.datasets.length) {
-              return data.labels.map(function(label, i) {
-                var meta = chart.getDatasetMeta(0);
-                var ds = data.datasets[0];
-                var arc = meta.data[i];
-                var custom = arc.custom || {};
-                var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;
-                var arcOpts = chart.options.elements.arc;
-                var fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);
-                var stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);
-                var bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);
-
-                return {
-                  text: label,
-                  fillStyle: fill,
-                  strokeStyle: stroke,
-                  lineWidth: bw,
-                  hidden: isNaN(ds.data[i]) || meta.data[i].hidden,
-
-                  // Extra data used for toggling the correct item
-                  index: i
-                };
-              });
-            }
-            return [];
-          }
-        },
-
-        onClick: function(e, legendItem) {
-          var index = legendItem.index;
-          var chart = this.chart;
-          var i, ilen, meta;
-
-          for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
-            meta = chart.getDatasetMeta(i);
-            meta.data[index].hidden = !meta.data[index].hidden;
-          }
-
-          chart.update();
-        }
-      },
-
-      // Need to override these to give a nice default
-      tooltips: {
-        callbacks: {
-          title: function() {
-            return '';
-          },
-          label: function(tooltipItem, data) {
-            return data.labels[tooltipItem.index] + ': ' + tooltipItem.yLabel;
-          }
-        }
-      }
-    };
-
-    Chart.controllers.polarArea = Chart.DatasetController.extend({
-
-      dataElementType: Chart.elements.Arc,
-
-      linkScales: helpers.noop,
-
-      update: function(reset) {
-        var me = this;
-        var chart = me.chart;
-        var chartArea = chart.chartArea;
-        var meta = me.getMeta();
-        var opts = chart.options;
-        var arcOpts = opts.elements.arc;
-        var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
-        chart.outerRadius = Math.max((minSize - arcOpts.borderWidth / 2) / 2, 0);
-        chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);
-        chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();
-
-        me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);
-        me.innerRadius = me.outerRadius - chart.radiusLength;
-
-        meta.count = me.countVisibleElements();
-
-        helpers.each(meta.data, function(arc, index) {
-          me.updateElement(arc, index, reset);
-        });
-      },
-
-      updateElement: function(arc, index, reset) {
-        var me = this;
-        var chart = me.chart;
-        var dataset = me.getDataset();
-        var opts = chart.options;
-        var animationOpts = opts.animation;
-        var scale = chart.scale;
-        var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault;
-        var labels = chart.data.labels;
-
-        var circumference = me.calculateCircumference(dataset.data[index]);
-        var centerX = scale.xCenter;
-        var centerY = scale.yCenter;
-
-        // If there is NaN data before us, we need to calculate the starting angle correctly.
-        // We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data
-        var visibleCount = 0;
-        var meta = me.getMeta();
-        for (var i = 0; i < index; ++i) {
-          if (!isNaN(dataset.data[i]) && !meta.data[i].hidden) {
-            ++visibleCount;
-          }
-        }
-
-        // var negHalfPI = -0.5 * Math.PI;
-        var datasetStartAngle = opts.startAngle;
-        var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
-        var startAngle = datasetStartAngle + (circumference * visibleCount);
-        var endAngle = startAngle + (arc.hidden ? 0 : circumference);
-
-        var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
-
-        helpers.extend(arc, {
-          // Utility
-          _datasetIndex: me.index,
-          _index: index,
-          _scale: scale,
-
-          // Desired view properties
-          _model: {
-            x: centerX,
-            y: centerY,
-            innerRadius: 0,
-            outerRadius: reset ? resetRadius : distance,
-            startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,
-            endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,
-            label: getValueAtIndexOrDefault(labels, index, labels[index])
-          }
-        });
-
-        // Apply border and fill style
-        me.removeHoverStyle(arc);
-
-        arc.pivot();
-      },
-
-      removeHoverStyle: function(arc) {
-        Chart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);
-      },
-
-      countVisibleElements: function() {
-        var dataset = this.getDataset();
-        var meta = this.getMeta();
-        var count = 0;
-
-        helpers.each(meta.data, function(element, index) {
-          if (!isNaN(dataset.data[index]) && !element.hidden) {
-            count++;
-          }
-        });
-
-        return count;
-      },
-
-      calculateCircumference: function(value) {
-        var count = this.getMeta().count;
-        if (count > 0 && !isNaN(value)) {
-          return (2 * Math.PI) / count;
-        }
-        return 0;
-      }
-    });
-  };
-
-},{}],20:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.radar = {
-      aspectRatio: 1,
-      scale: {
-        type: 'radialLinear'
-      },
-      elements: {
-        line: {
-          tension: 0 // no bezier in radar
-        }
-      }
-    };
-
-    Chart.controllers.radar = Chart.DatasetController.extend({
-
-      datasetElementType: Chart.elements.Line,
-
-      dataElementType: Chart.elements.Point,
-
-      linkScales: helpers.noop,
-
-      update: function(reset) {
-        var me = this;
-        var meta = me.getMeta();
-        var line = meta.dataset;
-        var points = meta.data;
-        var custom = line.custom || {};
-        var dataset = me.getDataset();
-        var lineElementOptions = me.chart.options.elements.line;
-        var scale = me.chart.scale;
-
-        // Compatibility: If the properties are defined with only the old name, use those values
-        if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {
-          dataset.lineTension = dataset.tension;
-        }
-
-        helpers.extend(meta.dataset, {
-          // Utility
-          _datasetIndex: me.index,
-          // Data
-          _children: points,
-          _loop: true,
-          // Model
-          _model: {
-            // Appearance
-            tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension),
-            backgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),
-            borderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),
-            borderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),
-            fill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),
-            borderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),
-            borderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),
-            borderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),
-            borderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),
-
-            // Scale
-            scaleTop: scale.top,
-            scaleBottom: scale.bottom,
-            scaleZero: scale.getBasePosition()
-          }
-        });
-
-        meta.dataset.pivot();
-
-        // Update Points
-        helpers.each(points, function(point, index) {
-          me.updateElement(point, index, reset);
-        }, me);
-
-        // Update bezier control points
-        me.updateBezierControlPoints();
-      },
-      updateElement: function(point, index, reset) {
-        var me = this;
-        var custom = point.custom || {};
-        var dataset = me.getDataset();
-        var scale = me.chart.scale;
-        var pointElementOptions = me.chart.options.elements.point;
-        var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);
-
-        helpers.extend(point, {
-          // Utility
-          _datasetIndex: me.index,
-          _index: index,
-          _scale: scale,
-
-          // Desired view properties
-          _model: {
-            x: reset ? scale.xCenter : pointPosition.x, // value not used in dataset scale, but we want a consistent API between scales
-            y: reset ? scale.yCenter : pointPosition.y,
-
-            // Appearance
-            tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, me.chart.options.elements.line.tension),
-            radius: custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius),
-            backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor),
-            borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor),
-            borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth),
-            pointStyle: custom.pointStyle ? custom.pointStyle : helpers.getValueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle),
-
-            // Tooltip
-            hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius)
-          }
-        });
-
-        point._model.skip = custom.skip ? custom.skip : (isNaN(point._model.x) || isNaN(point._model.y));
-      },
-      updateBezierControlPoints: function() {
-        var chartArea = this.chart.chartArea;
-        var meta = this.getMeta();
-
-        helpers.each(meta.data, function(point, index) {
-          var model = point._model;
-          var controlPoints = helpers.splineCurve(
-            helpers.previousItem(meta.data, index, true)._model,
-            model,
-            helpers.nextItem(meta.data, index, true)._model,
-            model.tension
-          );
-
-          // Prevent the bezier going outside of the bounds of the graph
-          model.controlPointPreviousX = Math.max(Math.min(controlPoints.previous.x, chartArea.right), chartArea.left);
-          model.controlPointPreviousY = Math.max(Math.min(controlPoints.previous.y, chartArea.bottom), chartArea.top);
-
-          model.controlPointNextX = Math.max(Math.min(controlPoints.next.x, chartArea.right), chartArea.left);
-          model.controlPointNextY = Math.max(Math.min(controlPoints.next.y, chartArea.bottom), chartArea.top);
-
-          // Now pivot the point for animation
-          point.pivot();
-        });
-      },
-
-      draw: function(ease) {
-        var meta = this.getMeta();
-        var easingDecimal = ease || 1;
-
-        // Transition Point Locations
-        helpers.each(meta.data, function(point) {
-          point.transition(easingDecimal);
-        });
-
-        // Transition and Draw the line
-        meta.dataset.transition(easingDecimal).draw();
-
-        // Draw the points
-        helpers.each(meta.data, function(point) {
-          point.draw();
-        });
-      },
-
-      setHoverStyle: function(point) {
-        // Point
-        var dataset = this.chart.data.datasets[point._datasetIndex];
-        var custom = point.custom || {};
-        var index = point._index;
-        var model = point._model;
-
-        model.radius = custom.hoverRadius ? custom.hoverRadius : helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);
-        model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));
-        model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));
-        model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);
-      },
-
-      removeHoverStyle: function(point) {
-        var dataset = this.chart.data.datasets[point._datasetIndex];
-        var custom = point.custom || {};
-        var index = point._index;
-        var model = point._model;
-        var pointElementOptions = this.chart.options.elements.point;
-
-        model.radius = custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.radius, index, pointElementOptions.radius);
-        model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor);
-        model.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor);
-        model.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth);
-      }
-    });
-  };
-
-},{}],21:[function(require,module,exports){
-  /* global window: false */
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.global.animation = {
-      duration: 1000,
-      easing: 'easeOutQuart',
-      onProgress: helpers.noop,
-      onComplete: helpers.noop
-    };
-
-    Chart.Animation = Chart.Element.extend({
-      currentStep: null, // the current animation step
-      numSteps: 60, // default number of steps
-      easing: '', // the easing to use for this animation
-      render: null, // render function used by the animation service
-
-      onAnimationProgress: null, // user specified callback to fire on each step of the animation
-      onAnimationComplete: null // user specified callback to fire when the animation finishes
-    });
-
-    Chart.animationService = {
-      frameDuration: 17,
-      animations: [],
-      dropFrames: 0,
-      request: null,
-
-      /**
-       * @function Chart.animationService.addAnimation
-       * @param chartInstance {ChartController} the chart to animate
-       * @param animationObject {IAnimation} the animation that we will animate
-       * @param duration {Number} length of animation in ms
-       * @param lazy {Boolean} if true, the chart is not marked as animating to enable more responsive interactions
-       */
-      addAnimation: function(chartInstance, animationObject, duration, lazy) {
-        var me = this;
-
-        if (!lazy) {
-          chartInstance.animating = true;
-        }
-
-        for (var index = 0; index < me.animations.length; ++index) {
-          if (me.animations[index].chartInstance === chartInstance) {
-            // replacing an in progress animation
-            me.animations[index].animationObject = animationObject;
-            return;
-          }
-        }
-
-        me.animations.push({
-          chartInstance: chartInstance,
-          animationObject: animationObject
-        });
-
-        // If there are no animations queued, manually kickstart a digest, for lack of a better word
-        if (me.animations.length === 1) {
-          me.requestAnimationFrame();
-        }
-      },
-      // Cancel the animation for a given chart instance
-      cancelAnimation: function(chartInstance) {
-        var index = helpers.findIndex(this.animations, function(animationWrapper) {
-          return animationWrapper.chartInstance === chartInstance;
-        });
-
-        if (index !== -1) {
-          this.animations.splice(index, 1);
-          chartInstance.animating = false;
-        }
-      },
-      requestAnimationFrame: function() {
-        var me = this;
-        if (me.request === null) {
-          // Skip animation frame requests until the active one is executed.
-          // This can happen when processing mouse events, e.g. 'mousemove'
-          // and 'mouseout' events will trigger multiple renders.
-          me.request = helpers.requestAnimFrame.call(window, function() {
-            me.request = null;
-            me.startDigest();
-          });
-        }
-      },
-      startDigest: function() {
-        var me = this;
-
-        var startTime = Date.now();
-        var framesToDrop = 0;
-
-        if (me.dropFrames > 1) {
-          framesToDrop = Math.floor(me.dropFrames);
-          me.dropFrames = me.dropFrames % 1;
-        }
-
-        var i = 0;
-        while (i < me.animations.length) {
-          if (me.animations[i].animationObject.currentStep === null) {
-            me.animations[i].animationObject.currentStep = 0;
-          }
-
-          me.animations[i].animationObject.currentStep += 1 + framesToDrop;
-
-          if (me.animations[i].animationObject.currentStep > me.animations[i].animationObject.numSteps) {
-            me.animations[i].animationObject.currentStep = me.animations[i].animationObject.numSteps;
-          }
-
-          me.animations[i].animationObject.render(me.animations[i].chartInstance, me.animations[i].animationObject);
-          if (me.animations[i].animationObject.onAnimationProgress && me.animations[i].animationObject.onAnimationProgress.call) {
-            me.animations[i].animationObject.onAnimationProgress.call(me.animations[i].chartInstance, me.animations[i]);
-          }
-
-          if (me.animations[i].animationObject.currentStep === me.animations[i].animationObject.numSteps) {
-            if (me.animations[i].animationObject.onAnimationComplete && me.animations[i].animationObject.onAnimationComplete.call) {
-              me.animations[i].animationObject.onAnimationComplete.call(me.animations[i].chartInstance, me.animations[i]);
-            }
-
-            // executed the last frame. Remove the animation.
-            me.animations[i].chartInstance.animating = false;
-
-            me.animations.splice(i, 1);
-          } else {
-            ++i;
-          }
-        }
-
-        var endTime = Date.now();
-        var dropFrames = (endTime - startTime) / me.frameDuration;
-
-        me.dropFrames += dropFrames;
-
-        // Do we have more stuff to animate?
-        if (me.animations.length > 0) {
-          me.requestAnimationFrame();
-        }
-      }
-    };
-  };
-
-},{}],22:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-    // Global Chart canvas helpers object for drawing items to canvas
-    var helpers = Chart.canvasHelpers = {};
-
-    helpers.drawPoint = function(ctx, pointStyle, radius, x, y) {
-      var type, edgeLength, xOffset, yOffset, height, size;
-
-      if (typeof pointStyle === 'object') {
-        type = pointStyle.toString();
-        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
-          ctx.drawImage(pointStyle, x - pointStyle.width / 2, y - pointStyle.height / 2);
-          return;
-        }
-      }
-
-      if (isNaN(radius) || radius <= 0) {
-        return;
-      }
-
-      switch (pointStyle) {
-        // Default includes circle
-        default:
-          ctx.beginPath();
-          ctx.arc(x, y, radius, 0, Math.PI * 2);
-          ctx.closePath();
-          ctx.fill();
-          break;
-        case 'triangle':
-          ctx.beginPath();
-          edgeLength = 3 * radius / Math.sqrt(3);
-          height = edgeLength * Math.sqrt(3) / 2;
-          ctx.moveTo(x - edgeLength / 2, y + height / 3);
-          ctx.lineTo(x + edgeLength / 2, y + height / 3);
-          ctx.lineTo(x, y - 2 * height / 3);
-          ctx.closePath();
-          ctx.fill();
-          break;
-        case 'rect':
-          size = 1 / Math.SQRT2 * radius;
-          ctx.beginPath();
-          ctx.fillRect(x - size, y - size, 2 * size, 2 * size);
-          ctx.strokeRect(x - size, y - size, 2 * size, 2 * size);
-          break;
-        case 'rectRounded':
-          var offset = radius / Math.SQRT2;
-          var leftX = x - offset;
-          var topY = y - offset;
-          var sideSize = Math.SQRT2 * radius;
-          Chart.helpers.drawRoundedRectangle(ctx, leftX, topY, sideSize, sideSize, radius / 2);
-          ctx.fill();
-          break;
-        case 'rectRot':
-          size = 1 / Math.SQRT2 * radius;
-          ctx.beginPath();
-          ctx.moveTo(x - size, y);
-          ctx.lineTo(x, y + size);
-          ctx.lineTo(x + size, y);
-          ctx.lineTo(x, y - size);
-          ctx.closePath();
-          ctx.fill();
-          break;
-        case 'cross':
-          ctx.beginPath();
-          ctx.moveTo(x, y + radius);
-          ctx.lineTo(x, y - radius);
-          ctx.moveTo(x - radius, y);
-          ctx.lineTo(x + radius, y);
-          ctx.closePath();
-          break;
-        case 'crossRot':
-          ctx.beginPath();
-          xOffset = Math.cos(Math.PI / 4) * radius;
-          yOffset = Math.sin(Math.PI / 4) * radius;
-          ctx.moveTo(x - xOffset, y - yOffset);
-          ctx.lineTo(x + xOffset, y + yOffset);
-          ctx.moveTo(x - xOffset, y + yOffset);
-          ctx.lineTo(x + xOffset, y - yOffset);
-          ctx.closePath();
-          break;
-        case 'star':
-          ctx.beginPath();
-          ctx.moveTo(x, y + radius);
-          ctx.lineTo(x, y - radius);
-          ctx.moveTo(x - radius, y);
-          ctx.lineTo(x + radius, y);
-          xOffset = Math.cos(Math.PI / 4) * radius;
-          yOffset = Math.sin(Math.PI / 4) * radius;
-          ctx.moveTo(x - xOffset, y - yOffset);
-          ctx.lineTo(x + xOffset, y + yOffset);
-          ctx.moveTo(x - xOffset, y + yOffset);
-          ctx.lineTo(x + xOffset, y - yOffset);
-          ctx.closePath();
-          break;
-        case 'line':
-          ctx.beginPath();
-          ctx.moveTo(x - radius, y);
-          ctx.lineTo(x + radius, y);
-          ctx.closePath();
-          break;
-        case 'dash':
-          ctx.beginPath();
-          ctx.moveTo(x, y);
-          ctx.lineTo(x + radius, y);
-          ctx.closePath();
-          break;
-      }
-
-      ctx.stroke();
-    };
-
-    helpers.clipArea = function(ctx, clipArea) {
-      ctx.save();
-      ctx.beginPath();
-      ctx.rect(clipArea.left, clipArea.top, clipArea.right - clipArea.left, clipArea.bottom - clipArea.top);
-      ctx.clip();
-    };
-
-    helpers.unclipArea = function(ctx) {
-      ctx.restore();
-    };
-
-  };
-
-},{}],23:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-    var plugins = Chart.plugins;
-    var platform = Chart.platform;
-
-    // Create a dictionary of chart types, to allow for extension of existing types
-    Chart.types = {};
-
-    // Store a reference to each instance - allowing us to globally resize chart instances on window resize.
-    // Destroy method on the chart will remove the instance of the chart from this reference.
-    Chart.instances = {};
-
-    // Controllers available for dataset visualization eg. bar, line, slice, etc.
-    Chart.controllers = {};
-
-    /**
-     * Initializes the given config with global and chart default values.
-     */
-    function initConfig(config) {
-      config = config || {};
-
-      // Do NOT use configMerge() for the data object because this method merges arrays
-      // and so would change references to labels and datasets, preventing data updates.
-      var data = config.data = config.data || {};
-      data.datasets = data.datasets || [];
-      data.labels = data.labels || [];
-
-      config.options = helpers.configMerge(
-        Chart.defaults.global,
-        Chart.defaults[config.type],
-        config.options || {});
-
-      return config;
-    }
-
-    /**
-     * Updates the config of the chart
-     * @param chart {Chart.Controller} chart to update the options for
-     */
-    function updateConfig(chart) {
-      var newOptions = chart.options;
-
-      // Update Scale(s) with options
-      if (newOptions.scale) {
-        chart.scale.options = newOptions.scale;
-      } else if (newOptions.scales) {
-        newOptions.scales.xAxes.concat(newOptions.scales.yAxes).forEach(function(scaleOptions) {
-          chart.scales[scaleOptions.id].options = scaleOptions;
-        });
-      }
-
-      // Tooltip
-      chart.tooltip._options = newOptions.tooltips;
-    }
-
-    /**
-     * @class Chart.Controller
-     * The main controller of a chart.
-     */
-    Chart.Controller = function(item, config, instance) {
-      var me = this;
-
-      config = initConfig(config);
-
-      var context = platform.acquireContext(item, config);
-      var canvas = context && context.canvas;
-      var height = canvas && canvas.height;
-      var width = canvas && canvas.width;
-
-      instance.ctx = context;
-      instance.canvas = canvas;
-      instance.config = config;
-      instance.width = width;
-      instance.height = height;
-      instance.aspectRatio = height? width / height : null;
-
-      me.id = helpers.uid();
-      me.chart = instance;
-      me.config = config;
-      me.options = config.options;
-      me._bufferedRender = false;
-
-      // Add the chart instance to the global namespace
-      Chart.instances[me.id] = me;
-
-      Object.defineProperty(me, 'data', {
-        get: function() {
-          return me.config.data;
-        }
-      });
-
-      if (!context || !canvas) {
-        // The given item is not a compatible context2d element, let's return before finalizing
-        // the chart initialization but after setting basic chart / controller properties that
-        // can help to figure out that the chart is not valid (e.g chart.canvas !== null);
-        // https://github.com/chartjs/Chart.js/issues/2807
-        console.error("Failed to create chart: can't acquire context from the given item");
-        return me;
-      }
-
-      me.initialize();
-      me.update();
-
-      return me;
-    };
-
-    helpers.extend(Chart.Controller.prototype, /** @lends Chart.Controller.prototype */ {
-      initialize: function() {
-        var me = this;
-
-        // Before init plugin notification
-        plugins.notify(me, 'beforeInit');
-
-        helpers.retinaScale(me.chart);
-
-        me.bindEvents();
-
-        if (me.options.responsive) {
-          // Initial resize before chart draws (must be silent to preserve initial animations).
-          me.resize(true);
-        }
-
-        // Make sure scales have IDs and are built before we build any controllers.
-        me.ensureScalesHaveIDs();
-        me.buildScales();
-        me.initToolTip();
-
-        // After init plugin notification
-        plugins.notify(me, 'afterInit');
-
-        return me;
-      },
-
-      clear: function() {
-        helpers.clear(this.chart);
-        return this;
-      },
-
-      stop: function() {
-        // Stops any current animation loop occurring
-        Chart.animationService.cancelAnimation(this);
-        return this;
-      },
-
-      resize: function(silent) {
-        var me = this;
-        var chart = me.chart;
-        var options = me.options;
-        var canvas = chart.canvas;
-        var aspectRatio = (options.maintainAspectRatio && chart.aspectRatio) || null;
-
-        // the canvas render width and height will be casted to integers so make sure that
-        // the canvas display style uses the same integer values to avoid blurring effect.
-        var newWidth = Math.floor(helpers.getMaximumWidth(canvas));
-        var newHeight = Math.floor(aspectRatio? newWidth / aspectRatio : helpers.getMaximumHeight(canvas));
-
-        if (chart.width === newWidth && chart.height === newHeight) {
-          return;
-        }
-
-        canvas.width = chart.width = newWidth;
-        canvas.height = chart.height = newHeight;
-        canvas.style.width = newWidth + 'px';
-        canvas.style.height = newHeight + 'px';
-
-        helpers.retinaScale(chart);
-
-        if (!silent) {
-          // Notify any plugins about the resize
-          var newSize = {width: newWidth, height: newHeight};
-          plugins.notify(me, 'resize', [newSize]);
-
-          // Notify of resize
-          if (me.options.onResize) {
-            me.options.onResize(me, newSize);
-          }
-
-          me.stop();
-          me.update(me.options.responsiveAnimationDuration);
-        }
-      },
-
-      ensureScalesHaveIDs: function() {
-        var options = this.options;
-        var scalesOptions = options.scales || {};
-        var scaleOptions = options.scale;
-
-        helpers.each(scalesOptions.xAxes, function(xAxisOptions, index) {
-          xAxisOptions.id = xAxisOptions.id || ('x-axis-' + index);
-        });
-
-        helpers.each(scalesOptions.yAxes, function(yAxisOptions, index) {
-          yAxisOptions.id = yAxisOptions.id || ('y-axis-' + index);
-        });
-
-        if (scaleOptions) {
-          scaleOptions.id = scaleOptions.id || 'scale';
-        }
-      },
-
-      /**
-       * Builds a map of scale ID to scale object for future lookup.
-       */
-      buildScales: function() {
-        var me = this;
-        var options = me.options;
-        var scales = me.scales = {};
-        var items = [];
-
-        if (options.scales) {
-          items = items.concat(
-            (options.scales.xAxes || []).map(function(xAxisOptions) {
-              return {options: xAxisOptions, dtype: 'category'};
-            }),
-            (options.scales.yAxes || []).map(function(yAxisOptions) {
-              return {options: yAxisOptions, dtype: 'linear'};
-            })
-          );
-        }
-
-        if (options.scale) {
-          items.push({options: options.scale, dtype: 'radialLinear', isDefault: true});
-        }
-
-        helpers.each(items, function(item) {
-          var scaleOptions = item.options;
-          var scaleType = helpers.getValueOrDefault(scaleOptions.type, item.dtype);
-          var scaleClass = Chart.scaleService.getScaleConstructor(scaleType);
-          if (!scaleClass) {
-            return;
-          }
-
-          var scale = new scaleClass({
-            id: scaleOptions.id,
-            options: scaleOptions,
-            ctx: me.chart.ctx,
-            chart: me
-          });
-
-          scales[scale.id] = scale;
-
-          // TODO(SB): I think we should be able to remove this custom case (options.scale)
-          // and consider it as a regular scale part of the "scales"" map only! This would
-          // make the logic easier and remove some useless? custom code.
-          if (item.isDefault) {
-            me.scale = scale;
-          }
-        });
-
-        Chart.scaleService.addScalesToLayout(this);
-      },
-
-      buildOrUpdateControllers: function() {
-        var me = this;
-        var types = [];
-        var newControllers = [];
-
-        helpers.each(me.data.datasets, function(dataset, datasetIndex) {
-          var meta = me.getDatasetMeta(datasetIndex);
-          if (!meta.type) {
-            meta.type = dataset.type || me.config.type;
-          }
-
-          types.push(meta.type);
-
-          if (meta.controller) {
-            meta.controller.updateIndex(datasetIndex);
-          } else {
-            meta.controller = new Chart.controllers[meta.type](me, datasetIndex);
-            newControllers.push(meta.controller);
-          }
-        }, me);
-
-        if (types.length > 1) {
-          for (var i = 1; i < types.length; i++) {
-            if (types[i] !== types[i - 1]) {
-              me.isCombo = true;
-              break;
-            }
-          }
-        }
-
-        return newControllers;
-      },
-
-      /**
-       * Reset the elements of all datasets
-       * @private
-       */
-      resetElements: function() {
-        var me = this;
-        helpers.each(me.data.datasets, function(dataset, datasetIndex) {
-          me.getDatasetMeta(datasetIndex).controller.reset();
-        }, me);
-      },
-
-      /**
-       * Resets the chart back to it's state before the initial animation
-       */
-      reset: function() {
-        this.resetElements();
-        this.tooltip.initialize();
-      },
-
-      update: function(animationDuration, lazy) {
-        var me = this;
-
-        updateConfig(me);
-
-        if (plugins.notify(me, 'beforeUpdate') === false) {
-          return;
-        }
-
-        // In case the entire data object changed
-        me.tooltip._data = me.data;
-
-        // Make sure dataset controllers are updated and new controllers are reset
-        var newControllers = me.buildOrUpdateControllers();
-
-        // Make sure all dataset controllers have correct meta data counts
-        helpers.each(me.data.datasets, function(dataset, datasetIndex) {
-          me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();
-        }, me);
-
-        me.updateLayout();
-
-        // Can only reset the new controllers after the scales have been updated
-        helpers.each(newControllers, function(controller) {
-          controller.reset();
-        });
-
-        me.updateDatasets();
-
-        // Do this before render so that any plugins that need final scale updates can use it
-        plugins.notify(me, 'afterUpdate');
-
-        if (me._bufferedRender) {
-          me._bufferedRequest = {
-            lazy: lazy,
-            duration: animationDuration
-          };
-        } else {
-          me.render(animationDuration, lazy);
-        }
-      },
-
-      /**
-       * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`
-       * hook, in which case, plugins will not be called on `afterLayout`.
-       * @private
-       */
-      updateLayout: function() {
-        var me = this;
-
-        if (plugins.notify(me, 'beforeLayout') === false) {
-          return;
-        }
-
-        Chart.layoutService.update(this, this.chart.width, this.chart.height);
-
-        /**
-         * Provided for backward compatibility, use `afterLayout` instead.
-         * @method IPlugin#afterScaleUpdate
-         * @deprecated since version 2.5.0
-         * @todo remove at version 3
-         */
-        plugins.notify(me, 'afterScaleUpdate');
-        plugins.notify(me, 'afterLayout');
-      },
-
-      /**
-       * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`
-       * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.
-       * @private
-       */
-      updateDatasets: function() {
-        var me = this;
-
-        if (plugins.notify(me, 'beforeDatasetsUpdate') === false) {
-          return;
-        }
-
-        for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
-          me.getDatasetMeta(i).controller.update();
-        }
-
-        plugins.notify(me, 'afterDatasetsUpdate');
-      },
-
-      render: function(duration, lazy) {
-        var me = this;
-
-        if (plugins.notify(me, 'beforeRender') === false) {
-          return;
-        }
-
-        var animationOptions = me.options.animation;
-        var onComplete = function() {
-          plugins.notify(me, 'afterRender');
-          var callback = animationOptions && animationOptions.onComplete;
-          if (callback && callback.call) {
-            callback.call(me);
-          }
-        };
-
-        if (animationOptions && ((typeof duration !== 'undefined' && duration !== 0) || (typeof duration === 'undefined' && animationOptions.duration !== 0))) {
-          var animation = new Chart.Animation();
-          animation.numSteps = (duration || animationOptions.duration) / 16.66; // 60 fps
-          animation.easing = animationOptions.easing;
-
-          // render function
-          animation.render = function(chartInstance, animationObject) {
-            var easingFunction = helpers.easingEffects[animationObject.easing];
-            var stepDecimal = animationObject.currentStep / animationObject.numSteps;
-            var easeDecimal = easingFunction(stepDecimal);
-
-            chartInstance.draw(easeDecimal, stepDecimal, animationObject.currentStep);
-          };
-
-          // user events
-          animation.onAnimationProgress = animationOptions.onProgress;
-          animation.onAnimationComplete = onComplete;
-
-          Chart.animationService.addAnimation(me, animation, duration, lazy);
-        } else {
-          me.draw();
-          onComplete();
-        }
-
-        return me;
-      },
-
-      draw: function(easingValue) {
-        var me = this;
-
-        me.clear();
-
-        if (easingValue === undefined || easingValue === null) {
-          easingValue = 1;
-        }
-
-        if (plugins.notify(me, 'beforeDraw', [easingValue]) === false) {
-          return;
-        }
-
-        // Draw all the scales
-        helpers.each(me.boxes, function(box) {
-          box.draw(me.chartArea);
-        }, me);
-
-        if (me.scale) {
-          me.scale.draw();
-        }
-
-        me.drawDatasets(easingValue);
-
-        // Finally draw the tooltip
-        me.tooltip.transition(easingValue).draw();
-
-        plugins.notify(me, 'afterDraw', [easingValue]);
-      },
-
-      /**
-       * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`
-       * hook, in which case, plugins will not be called on `afterDatasetsDraw`.
-       * @private
-       */
-      drawDatasets: function(easingValue) {
-        var me = this;
-
-        if (plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {
-          return;
-        }
-
-        // Draw each dataset via its respective controller (reversed to support proper line stacking)
-        helpers.each(me.data.datasets, function(dataset, datasetIndex) {
-          if (me.isDatasetVisible(datasetIndex)) {
-            me.getDatasetMeta(datasetIndex).controller.draw(easingValue);
-          }
-        }, me, true);
-
-        plugins.notify(me, 'afterDatasetsDraw', [easingValue]);
-      },
-
-      // Get the single element that was clicked on
-      // @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw
-      getElementAtEvent: function(e) {
-        return Chart.Interaction.modes.single(this, e);
-      },
-
-      getElementsAtEvent: function(e) {
-        return Chart.Interaction.modes.label(this, e, {intersect: true});
-      },
-
-      getElementsAtXAxis: function(e) {
-        return Chart.Interaction.modes['x-axis'](this, e, {intersect: true});
-      },
-
-      getElementsAtEventForMode: function(e, mode, options) {
-        var method = Chart.Interaction.modes[mode];
-        if (typeof method === 'function') {
-          return method(this, e, options);
-        }
-
-        return [];
-      },
-
-      getDatasetAtEvent: function(e) {
-        return Chart.Interaction.modes.dataset(this, e, {intersect: true});
-      },
-
-      getDatasetMeta: function(datasetIndex) {
-        var me = this;
-        var dataset = me.data.datasets[datasetIndex];
-        if (!dataset._meta) {
-          dataset._meta = {};
-        }
-
-        var meta = dataset._meta[me.id];
-        if (!meta) {
-          meta = dataset._meta[me.id] = {
-            type: null,
-            data: [],
-            dataset: null,
-            controller: null,
-            hidden: null,			// See isDatasetVisible() comment
-            xAxisID: null,
-            yAxisID: null
-          };
-        }
-
-        return meta;
-      },
-
-      getVisibleDatasetCount: function() {
-        var count = 0;
-        for (var i = 0, ilen = this.data.datasets.length; i<ilen; ++i) {
-          if (this.isDatasetVisible(i)) {
-            count++;
-          }
-        }
-        return count;
-      },
-
-      isDatasetVisible: function(datasetIndex) {
-        var meta = this.getDatasetMeta(datasetIndex);
-
-        // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,
-        // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.
-        return typeof meta.hidden === 'boolean'? !meta.hidden : !this.data.datasets[datasetIndex].hidden;
-      },
-
-      generateLegend: function() {
-        return this.options.legendCallback(this);
-      },
-
-      destroy: function() {
-        var me = this;
-        var canvas = me.chart.canvas;
-        var meta, i, ilen;
-
-        me.stop();
-
-        // dataset controllers need to cleanup associated data
-        for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {
-          meta = me.getDatasetMeta(i);
-          if (meta.controller) {
-            meta.controller.destroy();
-            meta.controller = null;
-          }
-        }
-
-        if (canvas) {
-          me.unbindEvents();
-          helpers.clear(me.chart);
-          platform.releaseContext(me.chart.ctx);
-          me.chart.canvas = null;
-          me.chart.ctx = null;
-        }
-
-        plugins.notify(me, 'destroy');
-
-        delete Chart.instances[me.id];
-      },
-
-      toBase64Image: function() {
-        return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments);
-      },
-
-      initToolTip: function() {
-        var me = this;
-        me.tooltip = new Chart.Tooltip({
-          _chart: me.chart,
-          _chartInstance: me,
-          _data: me.data,
-          _options: me.options.tooltips
-        }, me);
-        me.tooltip.initialize();
-      },
-
-      /**
-       * @private
-       */
-      bindEvents: function() {
-        var me = this;
-        var listeners = me._listeners = {};
-        var listener = function() {
-          me.eventHandler.apply(me, arguments);
-        };
-
-        helpers.each(me.options.events, function(type) {
-          platform.addEventListener(me, type, listener);
-          listeners[type] = listener;
-        });
-
-        // Responsiveness is currently based on the use of an iframe, however this method causes
-        // performance issues and could be troublesome when used with ad blockers. So make sure
-        // that the user is still able to create a chart without iframe when responsive is false.
-        // See https://github.com/chartjs/Chart.js/issues/2210
-        if (me.options.responsive) {
-          listener = function() {
-            me.resize();
-          };
-
-          platform.addEventListener(me, 'resize', listener);
-          listeners.resize = listener;
-        }
-      },
-
-      /**
-       * @private
-       */
-      unbindEvents: function() {
-        var me = this;
-        var listeners = me._listeners;
-        if (!listeners) {
-          return;
-        }
-
-        delete me._listeners;
-        helpers.each(listeners, function(listener, type) {
-          platform.removeEventListener(me, type, listener);
-        });
-      },
-
-      updateHoverStyle: function(elements, mode, enabled) {
-        var method = enabled? 'setHoverStyle' : 'removeHoverStyle';
-        var element, i, ilen;
-
-        for (i=0, ilen=elements.length; i<ilen; ++i) {
-          element = elements[i];
-          if (element) {
-            this.getDatasetMeta(element._datasetIndex).controller[method](element);
-          }
-        }
-      },
-
-      /**
-       * @private
-       */
-      eventHandler: function(e) {
-        var me = this;
-        var tooltip = me.tooltip;
-
-        if (plugins.notify(me, 'beforeEvent', [e]) === false) {
-          return;
-        }
-
-        // Buffer any update calls so that renders do not occur
-        me._bufferedRender = true;
-        me._bufferedRequest = null;
-
-        var changed = me.handleEvent(e);
-        changed |= tooltip && tooltip.handleEvent(e);
-
-        plugins.notify(me, 'afterEvent', [e]);
-
-        var bufferedRequest = me._bufferedRequest;
-        if (bufferedRequest) {
-          // If we have an update that was triggered, we need to do a normal render
-          me.render(bufferedRequest.duration, bufferedRequest.lazy);
-        } else if (changed && !me.animating) {
-          // If entering, leaving, or changing elements, animate the change via pivot
-          me.stop();
-
-          // We only need to render at this point. Updating will cause scales to be
-          // recomputed generating flicker & using more memory than necessary.
-          me.render(me.options.hover.animationDuration, true);
-        }
-
-        me._bufferedRender = false;
-        me._bufferedRequest = null;
-
-        return me;
-      },
-
-      /**
-       * Handle an event
-       * @private
-       * @param {IEvent} event the event to handle
-       * @return {Boolean} true if the chart needs to re-render
-       */
-      handleEvent: function(e) {
-        var me = this;
-        var options = me.options || {};
-        var hoverOptions = options.hover;
-        var changed = false;
-
-        me.lastActive = me.lastActive || [];
-
-        // Find Active Elements for hover and tooltips
-        if (e.type === 'mouseout') {
-          me.active = [];
-        } else {
-          me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);
-        }
-
-        // On Hover hook
-        if (hoverOptions.onHover) {
-          // Need to call with native event here to not break backwards compatibility
-          hoverOptions.onHover.call(me, e.native, me.active);
-        }
-
-        if (e.type === 'mouseup' || e.type === 'click') {
-          if (options.onClick) {
-            // Use e.native here for backwards compatibility
-            options.onClick.call(me, e.native, me.active);
-          }
-        }
-
-        // Remove styling for last active (even if it may still be active)
-        if (me.lastActive.length) {
-          me.updateHoverStyle(me.lastActive, hoverOptions.mode, false);
-        }
-
-        // Built in hover styling
-        if (me.active.length && hoverOptions.mode) {
-          me.updateHoverStyle(me.active, hoverOptions.mode, true);
-        }
-
-        changed = !helpers.arrayEquals(me.active, me.lastActive);
-
-        // Remember Last Actives
-        me.lastActive = me.active;
-
-        return changed;
-      }
-    });
-  };
-
-},{}],24:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];
-
-    /**
-     * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',
-     * 'unshift') and notify the listener AFTER the array has been altered. Listeners are
-     * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.
-     */
-    function listenArrayEvents(array, listener) {
-      if (array._chartjs) {
-        array._chartjs.listeners.push(listener);
-        return;
-      }
-
-      Object.defineProperty(array, '_chartjs', {
-        configurable: true,
-        enumerable: false,
-        value: {
-          listeners: [listener]
-        }
-      });
-
-      arrayEvents.forEach(function(key) {
-        var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);
-        var base = array[key];
-
-        Object.defineProperty(array, key, {
-          configurable: true,
-          enumerable: false,
-          value: function() {
-            var args = Array.prototype.slice.call(arguments);
-            var res = base.apply(this, args);
-
-            helpers.each(array._chartjs.listeners, function(object) {
-              if (typeof object[method] === 'function') {
-                object[method].apply(object, args);
-              }
-            });
-
-            return res;
-          }
-        });
-      });
-    }
-
-    /**
-     * Removes the given array event listener and cleanup extra attached properties (such as
-     * the _chartjs stub and overridden methods) if array doesn't have any more listeners.
-     */
-    function unlistenArrayEvents(array, listener) {
-      var stub = array._chartjs;
-      if (!stub) {
-        return;
-      }
-
-      var listeners = stub.listeners;
-      var index = listeners.indexOf(listener);
-      if (index !== -1) {
-        listeners.splice(index, 1);
-      }
-
-      if (listeners.length > 0) {
-        return;
-      }
-
-      arrayEvents.forEach(function(key) {
-        delete array[key];
-      });
-
-      delete array._chartjs;
-    }
-
-    // Base class for all dataset controllers (line, bar, etc)
-    Chart.DatasetController = function(chart, datasetIndex) {
-      this.initialize(chart, datasetIndex);
-    };
-
-    helpers.extend(Chart.DatasetController.prototype, {
-
-      /**
-       * Element type used to generate a meta dataset (e.g. Chart.element.Line).
-       * @type {Chart.core.element}
-       */
-      datasetElementType: null,
-
-      /**
-       * Element type used to generate a meta data (e.g. Chart.element.Point).
-       * @type {Chart.core.element}
-       */
-      dataElementType: null,
-
-      initialize: function(chart, datasetIndex) {
-        var me = this;
-        me.chart = chart;
-        me.index = datasetIndex;
-        me.linkScales();
-        me.addElements();
-      },
-
-      updateIndex: function(datasetIndex) {
-        this.index = datasetIndex;
-      },
-
-      linkScales: function() {
-        var me = this;
-        var meta = me.getMeta();
-        var dataset = me.getDataset();
-
-        if (meta.xAxisID === null) {
-          meta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;
-        }
-        if (meta.yAxisID === null) {
-          meta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;
-        }
-      },
-
-      getDataset: function() {
-        return this.chart.data.datasets[this.index];
-      },
-
-      getMeta: function() {
-        return this.chart.getDatasetMeta(this.index);
-      },
-
-      getScaleForId: function(scaleID) {
-        return this.chart.scales[scaleID];
-      },
-
-      reset: function() {
-        this.update(true);
-      },
-
-      /**
-       * @private
-       */
-      destroy: function() {
-        if (this._data) {
-          unlistenArrayEvents(this._data, this);
-        }
-      },
-
-      createMetaDataset: function() {
-        var me = this;
-        var type = me.datasetElementType;
-        return type && new type({
-            _chart: me.chart.chart,
-            _datasetIndex: me.index
-          });
-      },
-
-      createMetaData: function(index) {
-        var me = this;
-        var type = me.dataElementType;
-        return type && new type({
-            _chart: me.chart.chart,
-            _datasetIndex: me.index,
-            _index: index
-          });
-      },
-
-      addElements: function() {
-        var me = this;
-        var meta = me.getMeta();
-        var data = me.getDataset().data || [];
-        var metaData = meta.data;
-        var i, ilen;
-
-        for (i=0, ilen=data.length; i<ilen; ++i) {
-          metaData[i] = metaData[i] || me.createMetaData(i);
-        }
-
-        meta.dataset = meta.dataset || me.createMetaDataset();
-      },
-
-      addElementAndReset: function(index) {
-        var element = this.createMetaData(index);
-        this.getMeta().data.splice(index, 0, element);
-        this.updateElement(element, index, true);
-      },
-
-      buildOrUpdateElements: function() {
-        var me = this;
-        var dataset = me.getDataset();
-        var data = dataset.data || (dataset.data = []);
-
-        // In order to correctly handle data addition/deletion animation (an thus simulate
-        // real-time charts), we need to monitor these data modifications and synchronize
-        // the internal meta data accordingly.
-        if (me._data !== data) {
-          if (me._data) {
-            // This case happens when the user replaced the data array instance.
-            unlistenArrayEvents(me._data, me);
-          }
-
-          listenArrayEvents(data, me);
-          me._data = data;
-        }
-
-        // Re-sync meta data in case the user replaced the data array or if we missed
-        // any updates and so make sure that we handle number of datapoints changing.
-        me.resyncElements();
-      },
-
-      update: helpers.noop,
-
-      draw: function(ease) {
-        var easingDecimal = ease || 1;
-        var i, len;
-        var metaData = this.getMeta().data;
-        for (i = 0, len = metaData.length; i < len; ++i) {
-          metaData[i].transition(easingDecimal).draw();
-        }
-      },
-
-      removeHoverStyle: function(element, elementOpts) {
-        var dataset = this.chart.data.datasets[element._datasetIndex],
-          index = element._index,
-          custom = element.custom || {},
-          valueOrDefault = helpers.getValueAtIndexOrDefault,
-          model = element._model;
-
-        model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : valueOrDefault(dataset.backgroundColor, index, elementOpts.backgroundColor);
-        model.borderColor = custom.borderColor ? custom.borderColor : valueOrDefault(dataset.borderColor, index, elementOpts.borderColor);
-        model.borderWidth = custom.borderWidth ? custom.borderWidth : valueOrDefault(dataset.borderWidth, index, elementOpts.borderWidth);
-      },
-
-      setHoverStyle: function(element) {
-        var dataset = this.chart.data.datasets[element._datasetIndex],
-          index = element._index,
-          custom = element.custom || {},
-          valueOrDefault = helpers.getValueAtIndexOrDefault,
-          getHoverColor = helpers.getHoverColor,
-          model = element._model;
-
-        model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : valueOrDefault(dataset.hoverBackgroundColor, index, getHoverColor(model.backgroundColor));
-        model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : valueOrDefault(dataset.hoverBorderColor, index, getHoverColor(model.borderColor));
-        model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : valueOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);
-      },
-
-      /**
-       * @private
-       */
-      resyncElements: function() {
-        var me = this;
-        var meta = me.getMeta();
-        var data = me.getDataset().data;
-        var numMeta = meta.data.length;
-        var numData = data.length;
-
-        if (numData < numMeta) {
-          meta.data.splice(numData, numMeta - numData);
-        } else if (numData > numMeta) {
-          me.insertElements(numMeta, numData - numMeta);
-        }
-      },
-
-      /**
-       * @private
-       */
-      insertElements: function(start, count) {
-        for (var i=0; i<count; ++i) {
-          this.addElementAndReset(start + i);
-        }
-      },
-
-      /**
-       * @private
-       */
-      onDataPush: function() {
-        this.insertElements(this.getDataset().data.length-1, arguments.length);
-      },
-
-      /**
-       * @private
-       */
-      onDataPop: function() {
-        this.getMeta().data.pop();
-      },
-
-      /**
-       * @private
-       */
-      onDataShift: function() {
-        this.getMeta().data.shift();
-      },
-
-      /**
-       * @private
-       */
-      onDataSplice: function(start, count) {
-        this.getMeta().data.splice(start, count);
-        this.insertElements(start, arguments.length - 2);
-      },
-
-      /**
-       * @private
-       */
-      onDataUnshift: function() {
-        this.insertElements(0, arguments.length);
-      }
-    });
-
-    Chart.DatasetController.extend = helpers.inherits;
-  };
-
-},{}],25:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.elements = {};
-
-    Chart.Element = function(configuration) {
-      helpers.extend(this, configuration);
-      this.initialize.apply(this, arguments);
-    };
-
-    helpers.extend(Chart.Element.prototype, {
-
-      initialize: function() {
-        this.hidden = false;
-      },
-
-      pivot: function() {
-        var me = this;
-        if (!me._view) {
-          me._view = helpers.clone(me._model);
-        }
-        me._start = helpers.clone(me._view);
-        return me;
-      },
-
-      transition: function(ease) {
-        var me = this;
-
-        if (!me._view) {
-          me._view = helpers.clone(me._model);
-        }
-
-        // No animation -> No Transition
-        if (ease === 1) {
-          me._view = me._model;
-          me._start = null;
-          return me;
-        }
-
-        if (!me._start) {
-          me.pivot();
-        }
-
-        helpers.each(me._model, function(value, key) {
-
-          if (key[0] === '_') {
-            // Only non-underscored properties
-            // Init if doesn't exist
-          } else if (!me._view.hasOwnProperty(key)) {
-            if (typeof value === 'number' && !isNaN(me._view[key])) {
-              me._view[key] = value * ease;
-            } else {
-              me._view[key] = value;
-            }
-            // No unnecessary computations
-          } else if (value === me._view[key]) {
-            // It's the same! Woohoo!
-            // Color transitions if possible
-          } else if (typeof value === 'string') {
-            try {
-              var color = helpers.color(me._model[key]).mix(helpers.color(me._start[key]), ease);
-              me._view[key] = color.rgbString();
-            } catch (err) {
-              me._view[key] = value;
-            }
-            // Number transitions
-          } else if (typeof value === 'number') {
-            var startVal = me._start[key] !== undefined && isNaN(me._start[key]) === false ? me._start[key] : 0;
-            me._view[key] = ((me._model[key] - startVal) * ease) + startVal;
-            // Everything else
-          } else {
-            me._view[key] = value;
-          }
-        }, me);
-
-        return me;
-      },
-
-      tooltipPosition: function() {
-        return {
-          x: this._model.x,
-          y: this._model.y
-        };
-      },
-
-      hasValue: function() {
-        return helpers.isNumber(this._model.x) && helpers.isNumber(this._model.y);
-      }
-    });
-
-    Chart.Element.extend = helpers.inherits;
-
-  };
-
-},{}],26:[function(require,module,exports){
-  /* global window: false */
-  /* global document: false */
-  'use strict';
-
-  var color = require(3);
-
-  module.exports = function(Chart) {
-    // Global Chart helpers object for utility methods and classes
-    var helpers = Chart.helpers = {};
-
-    // -- Basic js utility methods
-    helpers.each = function(loopable, callback, self, reverse) {
-      // Check to see if null or undefined firstly.
-      var i, len;
-      if (helpers.isArray(loopable)) {
-        len = loopable.length;
-        if (reverse) {
-          for (i = len - 1; i >= 0; i--) {
-            callback.call(self, loopable[i], i);
-          }
-        } else {
-          for (i = 0; i < len; i++) {
-            callback.call(self, loopable[i], i);
-          }
-        }
-      } else if (typeof loopable === 'object') {
-        var keys = Object.keys(loopable);
-        len = keys.length;
-        for (i = 0; i < len; i++) {
-          callback.call(self, loopable[keys[i]], keys[i]);
-        }
-      }
-    };
-    helpers.clone = function(obj) {
-      var objClone = {};
-      helpers.each(obj, function(value, key) {
-        if (helpers.isArray(value)) {
-          objClone[key] = value.slice(0);
-        } else if (typeof value === 'object' && value !== null) {
-          objClone[key] = helpers.clone(value);
-        } else {
-          objClone[key] = value;
-        }
-      });
-      return objClone;
-    };
-    helpers.extend = function(base) {
-      var setFn = function(value, key) {
-        base[key] = value;
-      };
-      for (var i = 1, ilen = arguments.length; i < ilen; i++) {
-        helpers.each(arguments[i], setFn);
-      }
-      return base;
-    };
-    // Need a special merge function to chart configs since they are now grouped
-    helpers.configMerge = function(_base) {
-      var base = helpers.clone(_base);
-      helpers.each(Array.prototype.slice.call(arguments, 1), function(extension) {
-        helpers.each(extension, function(value, key) {
-          var baseHasProperty = base.hasOwnProperty(key);
-          var baseVal = baseHasProperty ? base[key] : {};
-
-          if (key === 'scales') {
-            // Scale config merging is complex. Add our own function here for that
-            base[key] = helpers.scaleMerge(baseVal, value);
-          } else if (key === 'scale') {
-            // Used in polar area & radar charts since there is only one scale
-            base[key] = helpers.configMerge(baseVal, Chart.scaleService.getScaleDefaults(value.type), value);
-          } else if (baseHasProperty
-            && typeof baseVal === 'object'
-            && !helpers.isArray(baseVal)
-            && baseVal !== null
-            && typeof value === 'object'
-            && !helpers.isArray(value)) {
-            // If we are overwriting an object with an object, do a merge of the properties.
-            base[key] = helpers.configMerge(baseVal, value);
-          } else {
-            // can just overwrite the value in this case
-            base[key] = value;
-          }
-        });
-      });
-
-      return base;
-    };
-    helpers.scaleMerge = function(_base, extension) {
-      var base = helpers.clone(_base);
-
-      helpers.each(extension, function(value, key) {
-        if (key === 'xAxes' || key === 'yAxes') {
-          // These properties are arrays of items
-          if (base.hasOwnProperty(key)) {
-            helpers.each(value, function(valueObj, index) {
-              var axisType = helpers.getValueOrDefault(valueObj.type, key === 'xAxes' ? 'category' : 'linear');
-              var axisDefaults = Chart.scaleService.getScaleDefaults(axisType);
-              if (index >= base[key].length || !base[key][index].type) {
-                base[key].push(helpers.configMerge(axisDefaults, valueObj));
-              } else if (valueObj.type && valueObj.type !== base[key][index].type) {
-                // Type changed. Bring in the new defaults before we bring in valueObj so that valueObj can override the correct scale defaults
-                base[key][index] = helpers.configMerge(base[key][index], axisDefaults, valueObj);
-              } else {
-                // Type is the same
-                base[key][index] = helpers.configMerge(base[key][index], valueObj);
-              }
-            });
-          } else {
-            base[key] = [];
-            helpers.each(value, function(valueObj) {
-              var axisType = helpers.getValueOrDefault(valueObj.type, key === 'xAxes' ? 'category' : 'linear');
-              base[key].push(helpers.configMerge(Chart.scaleService.getScaleDefaults(axisType), valueObj));
-            });
-          }
-        } else if (base.hasOwnProperty(key) && typeof base[key] === 'object' && base[key] !== null && typeof value === 'object') {
-          // If we are overwriting an object with an object, do a merge of the properties.
-          base[key] = helpers.configMerge(base[key], value);
-
-        } else {
-          // can just overwrite the value in this case
-          base[key] = value;
-        }
-      });
-
-      return base;
-    };
-    helpers.getValueAtIndexOrDefault = function(value, index, defaultValue) {
-      if (value === undefined || value === null) {
-        return defaultValue;
-      }
-
-      if (helpers.isArray(value)) {
-        return index < value.length ? value[index] : defaultValue;
-      }
-
-      return value;
-    };
-    helpers.getValueOrDefault = function(value, defaultValue) {
-      return value === undefined ? defaultValue : value;
-    };
-    helpers.indexOf = Array.prototype.indexOf?
-      function(array, item) {
-        return array.indexOf(item);
-      }:
-      function(array, item) {
-        for (var i = 0, ilen = array.length; i < ilen; ++i) {
-          if (array[i] === item) {
-            return i;
-          }
-        }
-        return -1;
-      };
-    helpers.where = function(collection, filterCallback) {
-      if (helpers.isArray(collection) && Array.prototype.filter) {
-        return collection.filter(filterCallback);
-      }
-      var filtered = [];
-
-      helpers.each(collection, function(item) {
-        if (filterCallback(item)) {
-          filtered.push(item);
-        }
-      });
-
-      return filtered;
-    };
-    helpers.findIndex = Array.prototype.findIndex?
-      function(array, callback, scope) {
-        return array.findIndex(callback, scope);
-      } :
-      function(array, callback, scope) {
-        scope = scope === undefined? array : scope;
-        for (var i = 0, ilen = array.length; i < ilen; ++i) {
-          if (callback.call(scope, array[i], i, array)) {
-            return i;
-          }
-        }
-        return -1;
-      };
-    helpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {
-      // Default to start of the array
-      if (startIndex === undefined || startIndex === null) {
-        startIndex = -1;
-      }
-      for (var i = startIndex + 1; i < arrayToSearch.length; i++) {
-        var currentItem = arrayToSearch[i];
-        if (filterCallback(currentItem)) {
-          return currentItem;
-        }
-      }
-    };
-    helpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {
-      // Default to end of the array
-      if (startIndex === undefined || startIndex === null) {
-        startIndex = arrayToSearch.length;
-      }
-      for (var i = startIndex - 1; i >= 0; i--) {
-        var currentItem = arrayToSearch[i];
-        if (filterCallback(currentItem)) {
-          return currentItem;
-        }
-      }
-    };
-    helpers.inherits = function(extensions) {
-      // Basic javascript inheritance based on the model created in Backbone.js
-      var me = this;
-      var ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {
-        return me.apply(this, arguments);
-      };
-
-      var Surrogate = function() {
-        this.constructor = ChartElement;
-      };
-      Surrogate.prototype = me.prototype;
-      ChartElement.prototype = new Surrogate();
-
-      ChartElement.extend = helpers.inherits;
-
-      if (extensions) {
-        helpers.extend(ChartElement.prototype, extensions);
-      }
-
-      ChartElement.__super__ = me.prototype;
-
-      return ChartElement;
-    };
-    helpers.noop = function() {};
-    helpers.uid = (function() {
-      var id = 0;
-      return function() {
-        return id++;
-      };
-    }());
-    // -- Math methods
-    helpers.isNumber = function(n) {
-      return !isNaN(parseFloat(n)) && isFinite(n);
-    };
-    helpers.almostEquals = function(x, y, epsilon) {
-      return Math.abs(x - y) < epsilon;
-    };
-    helpers.almostWhole = function(x, epsilon) {
-      var rounded = Math.round(x);
-      return (((rounded - epsilon) < x) && ((rounded + epsilon) > x));
-    };
-    helpers.max = function(array) {
-      return array.reduce(function(max, value) {
-        if (!isNaN(value)) {
-          return Math.max(max, value);
-        }
-        return max;
-      }, Number.NEGATIVE_INFINITY);
-    };
-    helpers.min = function(array) {
-      return array.reduce(function(min, value) {
-        if (!isNaN(value)) {
-          return Math.min(min, value);
-        }
-        return min;
-      }, Number.POSITIVE_INFINITY);
-    };
-    helpers.sign = Math.sign?
-      function(x) {
-        return Math.sign(x);
-      } :
-      function(x) {
-        x = +x; // convert to a number
-        if (x === 0 || isNaN(x)) {
-          return x;
-        }
-        return x > 0 ? 1 : -1;
-      };
-    helpers.log10 = Math.log10?
-      function(x) {
-        return Math.log10(x);
-      } :
-      function(x) {
-        return Math.log(x) / Math.LN10;
-      };
-    helpers.toRadians = function(degrees) {
-      return degrees * (Math.PI / 180);
-    };
-    helpers.toDegrees = function(radians) {
-      return radians * (180 / Math.PI);
-    };
-    // Gets the angle from vertical upright to the point about a centre.
-    helpers.getAngleFromPoint = function(centrePoint, anglePoint) {
-      var distanceFromXCenter = anglePoint.x - centrePoint.x,
-        distanceFromYCenter = anglePoint.y - centrePoint.y,
-        radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
-
-      var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
-
-      if (angle < (-0.5 * Math.PI)) {
-        angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]
-      }
-
-      return {
-        angle: angle,
-        distance: radialDistanceFromCenter
-      };
-    };
-    helpers.distanceBetweenPoints = function(pt1, pt2) {
-      return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
-    };
-    helpers.aliasPixel = function(pixelWidth) {
-      return (pixelWidth % 2 === 0) ? 0 : 0.5;
-    };
-    helpers.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {
-      // Props to Rob Spencer at scaled innovation for his post on splining between points
-      // http://scaledinnovation.com/analytics/splines/aboutSplines.html
-
-      // This function must also respect "skipped" points
-
-      var previous = firstPoint.skip ? middlePoint : firstPoint,
-        current = middlePoint,
-        next = afterPoint.skip ? middlePoint : afterPoint;
-
-      var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));
-      var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));
-
-      var s01 = d01 / (d01 + d12);
-      var s12 = d12 / (d01 + d12);
-
-      // If all points are the same, s01 & s02 will be inf
-      s01 = isNaN(s01) ? 0 : s01;
-      s12 = isNaN(s12) ? 0 : s12;
-
-      var fa = t * s01; // scaling factor for triangle Ta
-      var fb = t * s12;
-
-      return {
-        previous: {
-          x: current.x - fa * (next.x - previous.x),
-          y: current.y - fa * (next.y - previous.y)
-        },
-        next: {
-          x: current.x + fb * (next.x - previous.x),
-          y: current.y + fb * (next.y - previous.y)
-        }
-      };
-    };
-    helpers.EPSILON = Number.EPSILON || 1e-14;
-    helpers.splineCurveMonotone = function(points) {
-      // This function calculates Bézier control points in a similar way than |splineCurve|,
-      // but preserves monotonicity of the provided data and ensures no local extremums are added
-      // between the dataset discrete points due to the interpolation.
-      // See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation
-
-      var pointsWithTangents = (points || []).map(function(point) {
-        return {
-          model: point._model,
-          deltaK: 0,
-          mK: 0
-        };
-      });
-
-      // Calculate slopes (deltaK) and initialize tangents (mK)
-      var pointsLen = pointsWithTangents.length;
-      var i, pointBefore, pointCurrent, pointAfter;
-      for (i = 0; i < pointsLen; ++i) {
-        pointCurrent = pointsWithTangents[i];
-        if (pointCurrent.model.skip) {
-          continue;
-        }
-
-        pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;
-        pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;
-        if (pointAfter && !pointAfter.model.skip) {
-          var slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);
-
-          // In the case of two points that appear at the same x pixel, slopeDeltaX is 0
-          pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;
-        }
-
-        if (!pointBefore || pointBefore.model.skip) {
-          pointCurrent.mK = pointCurrent.deltaK;
-        } else if (!pointAfter || pointAfter.model.skip) {
-          pointCurrent.mK = pointBefore.deltaK;
-        } else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {
-          pointCurrent.mK = 0;
-        } else {
-          pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;
-        }
-      }
-
-      // Adjust tangents to ensure monotonic properties
-      var alphaK, betaK, tauK, squaredMagnitude;
-      for (i = 0; i < pointsLen - 1; ++i) {
-        pointCurrent = pointsWithTangents[i];
-        pointAfter = pointsWithTangents[i + 1];
-        if (pointCurrent.model.skip || pointAfter.model.skip) {
-          continue;
-        }
-
-        if (helpers.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {
-          pointCurrent.mK = pointAfter.mK = 0;
-          continue;
-        }
-
-        alphaK = pointCurrent.mK / pointCurrent.deltaK;
-        betaK = pointAfter.mK / pointCurrent.deltaK;
-        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);
-        if (squaredMagnitude <= 9) {
-          continue;
-        }
-
-        tauK = 3 / Math.sqrt(squaredMagnitude);
-        pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;
-        pointAfter.mK = betaK * tauK * pointCurrent.deltaK;
-      }
-
-      // Compute control points
-      var deltaX;
-      for (i = 0; i < pointsLen; ++i) {
-        pointCurrent = pointsWithTangents[i];
-        if (pointCurrent.model.skip) {
-          continue;
-        }
-
-        pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;
-        pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;
-        if (pointBefore && !pointBefore.model.skip) {
-          deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;
-          pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;
-          pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;
-        }
-        if (pointAfter && !pointAfter.model.skip) {
-          deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;
-          pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;
-          pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;
-        }
-      }
-    };
-    helpers.nextItem = function(collection, index, loop) {
-      if (loop) {
-        return index >= collection.length - 1 ? collection[0] : collection[index + 1];
-      }
-      return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];
-    };
-    helpers.previousItem = function(collection, index, loop) {
-      if (loop) {
-        return index <= 0 ? collection[collection.length - 1] : collection[index - 1];
-      }
-      return index <= 0 ? collection[0] : collection[index - 1];
-    };
-    // Implementation of the nice number algorithm used in determining where axis labels will go
-    helpers.niceNum = function(range, round) {
-      var exponent = Math.floor(helpers.log10(range));
-      var fraction = range / Math.pow(10, exponent);
-      var niceFraction;
-
-      if (round) {
-        if (fraction < 1.5) {
-          niceFraction = 1;
-        } else if (fraction < 3) {
-          niceFraction = 2;
-        } else if (fraction < 7) {
-          niceFraction = 5;
-        } else {
-          niceFraction = 10;
-        }
-      } else if (fraction <= 1.0) {
-        niceFraction = 1;
-      } else if (fraction <= 2) {
-        niceFraction = 2;
-      } else if (fraction <= 5) {
-        niceFraction = 5;
-      } else {
-        niceFraction = 10;
-      }
-
-      return niceFraction * Math.pow(10, exponent);
-    };
-    // Easing functions adapted from Robert Penner's easing equations
-    // http://www.robertpenner.com/easing/
-    var easingEffects = helpers.easingEffects = {
-      linear: function(t) {
-        return t;
-      },
-      easeInQuad: function(t) {
-        return t * t;
-      },
-      easeOutQuad: function(t) {
-        return -1 * t * (t - 2);
-      },
-      easeInOutQuad: function(t) {
-        if ((t /= 1 / 2) < 1) {
-          return 1 / 2 * t * t;
-        }
-        return -1 / 2 * ((--t) * (t - 2) - 1);
-      },
-      easeInCubic: function(t) {
-        return t * t * t;
-      },
-      easeOutCubic: function(t) {
-        return 1 * ((t = t / 1 - 1) * t * t + 1);
-      },
-      easeInOutCubic: function(t) {
-        if ((t /= 1 / 2) < 1) {
-          return 1 / 2 * t * t * t;
-        }
-        return 1 / 2 * ((t -= 2) * t * t + 2);
-      },
-      easeInQuart: function(t) {
-        return t * t * t * t;
-      },
-      easeOutQuart: function(t) {
-        return -1 * ((t = t / 1 - 1) * t * t * t - 1);
-      },
-      easeInOutQuart: function(t) {
-        if ((t /= 1 / 2) < 1) {
-          return 1 / 2 * t * t * t * t;
-        }
-        return -1 / 2 * ((t -= 2) * t * t * t - 2);
-      },
-      easeInQuint: function(t) {
-        return 1 * (t /= 1) * t * t * t * t;
-      },
-      easeOutQuint: function(t) {
-        return 1 * ((t = t / 1 - 1) * t * t * t * t + 1);
-      },
-      easeInOutQuint: function(t) {
-        if ((t /= 1 / 2) < 1) {
-          return 1 / 2 * t * t * t * t * t;
-        }
-        return 1 / 2 * ((t -= 2) * t * t * t * t + 2);
-      },
-      easeInSine: function(t) {
-        return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1;
-      },
-      easeOutSine: function(t) {
-        return 1 * Math.sin(t / 1 * (Math.PI / 2));
-      },
-      easeInOutSine: function(t) {
-        return -1 / 2 * (Math.cos(Math.PI * t / 1) - 1);
-      },
-      easeInExpo: function(t) {
-        return (t === 0) ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1));
-      },
-      easeOutExpo: function(t) {
-        return (t === 1) ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1);
-      },
-      easeInOutExpo: function(t) {
-        if (t === 0) {
-          return 0;
-        }
-        if (t === 1) {
-          return 1;
-        }
-        if ((t /= 1 / 2) < 1) {
-          return 1 / 2 * Math.pow(2, 10 * (t - 1));
-        }
-        return 1 / 2 * (-Math.pow(2, -10 * --t) + 2);
-      },
-      easeInCirc: function(t) {
-        if (t >= 1) {
-          return t;
-        }
-        return -1 * (Math.sqrt(1 - (t /= 1) * t) - 1);
-      },
-      easeOutCirc: function(t) {
-        return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t);
-      },
-      easeInOutCirc: function(t) {
-        if ((t /= 1 / 2) < 1) {
-          return -1 / 2 * (Math.sqrt(1 - t * t) - 1);
-        }
-        return 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);
-      },
-      easeInElastic: function(t) {
-        var s = 1.70158;
-        var p = 0;
-        var a = 1;
-        if (t === 0) {
-          return 0;
-        }
-        if ((t /= 1) === 1) {
-          return 1;
-        }
-        if (!p) {
-          p = 1 * 0.3;
-        }
-        if (a < Math.abs(1)) {
-          a = 1;
-          s = p / 4;
-        } else {
-          s = p / (2 * Math.PI) * Math.asin(1 / a);
-        }
-        return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));
-      },
-      easeOutElastic: function(t) {
-        var s = 1.70158;
-        var p = 0;
-        var a = 1;
-        if (t === 0) {
-          return 0;
-        }
-        if ((t /= 1) === 1) {
-          return 1;
-        }
-        if (!p) {
-          p = 1 * 0.3;
-        }
-        if (a < Math.abs(1)) {
-          a = 1;
-          s = p / 4;
-        } else {
-          s = p / (2 * Math.PI) * Math.asin(1 / a);
-        }
-        return a * Math.pow(2, -10 * t) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) + 1;
-      },
-      easeInOutElastic: function(t) {
-        var s = 1.70158;
-        var p = 0;
-        var a = 1;
-        if (t === 0) {
-          return 0;
-        }
-        if ((t /= 1 / 2) === 2) {
-          return 1;
-        }
-        if (!p) {
-          p = 1 * (0.3 * 1.5);
-        }
-        if (a < Math.abs(1)) {
-          a = 1;
-          s = p / 4;
-        } else {
-          s = p / (2 * Math.PI) * Math.asin(1 / a);
-        }
-        if (t < 1) {
-          return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));
-        }
-        return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) * 0.5 + 1;
-      },
-      easeInBack: function(t) {
-        var s = 1.70158;
-        return 1 * (t /= 1) * t * ((s + 1) * t - s);
-      },
-      easeOutBack: function(t) {
-        var s = 1.70158;
-        return 1 * ((t = t / 1 - 1) * t * ((s + 1) * t + s) + 1);
-      },
-      easeInOutBack: function(t) {
-        var s = 1.70158;
-        if ((t /= 1 / 2) < 1) {
-          return 1 / 2 * (t * t * (((s *= (1.525)) + 1) * t - s));
-        }
-        return 1 / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);
-      },
-      easeInBounce: function(t) {
-        return 1 - easingEffects.easeOutBounce(1 - t);
-      },
-      easeOutBounce: function(t) {
-        if ((t /= 1) < (1 / 2.75)) {
-          return 1 * (7.5625 * t * t);
-        } else if (t < (2 / 2.75)) {
-          return 1 * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75);
-        } else if (t < (2.5 / 2.75)) {
-          return 1 * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375);
-        }
-        return 1 * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375);
-      },
-      easeInOutBounce: function(t) {
-        if (t < 1 / 2) {
-          return easingEffects.easeInBounce(t * 2) * 0.5;
-        }
-        return easingEffects.easeOutBounce(t * 2 - 1) * 0.5 + 1 * 0.5;
-      }
-    };
-    // Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/
-    helpers.requestAnimFrame = (function() {
-      return window.requestAnimationFrame ||
-        window.webkitRequestAnimationFrame ||
-        window.mozRequestAnimationFrame ||
-        window.oRequestAnimationFrame ||
-        window.msRequestAnimationFrame ||
-        function(callback) {
-          return window.setTimeout(callback, 1000 / 60);
-        };
-    }());
-    // -- DOM methods
-    helpers.getRelativePosition = function(evt, chart) {
-      var mouseX, mouseY;
-      var e = evt.originalEvent || evt,
-        canvas = evt.currentTarget || evt.srcElement,
-        boundingRect = canvas.getBoundingClientRect();
-
-      var touches = e.touches;
-      if (touches && touches.length > 0) {
-        mouseX = touches[0].clientX;
-        mouseY = touches[0].clientY;
-
-      } else {
-        mouseX = e.clientX;
-        mouseY = e.clientY;
-      }
-
-      // Scale mouse coordinates into canvas coordinates
-      // by following the pattern laid out by 'jerryj' in the comments of
-      // http://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/
-      var paddingLeft = parseFloat(helpers.getStyle(canvas, 'padding-left'));
-      var paddingTop = parseFloat(helpers.getStyle(canvas, 'padding-top'));
-      var paddingRight = parseFloat(helpers.getStyle(canvas, 'padding-right'));
-      var paddingBottom = parseFloat(helpers.getStyle(canvas, 'padding-bottom'));
-      var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;
-      var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;
-
-      // We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However
-      // the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here
-      mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);
-      mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);
-
-      return {
-        x: mouseX,
-        y: mouseY
-      };
-
-    };
-    helpers.addEvent = function(node, eventType, method) {
-      if (node.addEventListener) {
-        node.addEventListener(eventType, method);
-      } else if (node.attachEvent) {
-        node.attachEvent('on' + eventType, method);
-      } else {
-        node['on' + eventType] = method;
-      }
-    };
-    helpers.removeEvent = function(node, eventType, handler) {
-      if (node.removeEventListener) {
-        node.removeEventListener(eventType, handler, false);
-      } else if (node.detachEvent) {
-        node.detachEvent('on' + eventType, handler);
-      } else {
-        node['on' + eventType] = helpers.noop;
-      }
-    };
-
-    // Private helper function to convert max-width/max-height values that may be percentages into a number
-    function parseMaxStyle(styleValue, node, parentProperty) {
-      var valueInPixels;
-      if (typeof(styleValue) === 'string') {
-        valueInPixels = parseInt(styleValue, 10);
-
-        if (styleValue.indexOf('%') !== -1) {
-          // percentage * size in dimension
-          valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
-        }
-      } else {
-        valueInPixels = styleValue;
-      }
-
-      return valueInPixels;
-    }
-
-    /**
-     * Returns if the given value contains an effective constraint.
-     * @private
-     */
-    function isConstrainedValue(value) {
-      return value !== undefined && value !== null && value !== 'none';
-    }
-
-    // Private helper to get a constraint dimension
-    // @param domNode : the node to check the constraint on
-    // @param maxStyle : the style that defines the maximum for the direction we are using (maxWidth / maxHeight)
-    // @param percentageProperty : property of parent to use when calculating width as a percentage
-    // @see http://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser
-    function getConstraintDimension(domNode, maxStyle, percentageProperty) {
-      var view = document.defaultView;
-      var parentNode = domNode.parentNode;
-      var constrainedNode = view.getComputedStyle(domNode)[maxStyle];
-      var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];
-      var hasCNode = isConstrainedValue(constrainedNode);
-      var hasCContainer = isConstrainedValue(constrainedContainer);
-      var infinity = Number.POSITIVE_INFINITY;
-
-      if (hasCNode || hasCContainer) {
-        return Math.min(
-          hasCNode? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,
-          hasCContainer? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);
-      }
-
-      return 'none';
-    }
-    // returns Number or undefined if no constraint
-    helpers.getConstraintWidth = function(domNode) {
-      return getConstraintDimension(domNode, 'max-width', 'clientWidth');
-    };
-    // returns Number or undefined if no constraint
-    helpers.getConstraintHeight = function(domNode) {
-      return getConstraintDimension(domNode, 'max-height', 'clientHeight');
-    };
-    helpers.getMaximumWidth = function(domNode) {
-      var container = domNode.parentNode;
-      var paddingLeft = parseInt(helpers.getStyle(container, 'padding-left'), 10);
-      var paddingRight = parseInt(helpers.getStyle(container, 'padding-right'), 10);
-      var w = container.clientWidth - paddingLeft - paddingRight;
-      var cw = helpers.getConstraintWidth(domNode);
-      return isNaN(cw)? w : Math.min(w, cw);
-    };
-    helpers.getMaximumHeight = function(domNode) {
-      var container = domNode.parentNode;
-      var paddingTop = parseInt(helpers.getStyle(container, 'padding-top'), 10);
-      var paddingBottom = parseInt(helpers.getStyle(container, 'padding-bottom'), 10);
-      var h = container.clientHeight - paddingTop - paddingBottom;
-      var ch = helpers.getConstraintHeight(domNode);
-      return isNaN(ch)? h : Math.min(h, ch);
-    };
-    helpers.getStyle = function(el, property) {
-      return el.currentStyle ?
-        el.currentStyle[property] :
-        document.defaultView.getComputedStyle(el, null).getPropertyValue(property);
-    };
-    helpers.retinaScale = function(chart) {
-      var pixelRatio = chart.currentDevicePixelRatio = window.devicePixelRatio || 1;
-      if (pixelRatio === 1) {
-        return;
-      }
-
-      var canvas = chart.canvas;
-      var height = chart.height;
-      var width = chart.width;
-
-      canvas.height = height * pixelRatio;
-      canvas.width = width * pixelRatio;
-      chart.ctx.scale(pixelRatio, pixelRatio);
-
-      // If no style has been set on the canvas, the render size is used as display size,
-      // making the chart visually bigger, so let's enforce it to the "correct" values.
-      // See https://github.com/chartjs/Chart.js/issues/3575
-      canvas.style.height = height + 'px';
-      canvas.style.width = width + 'px';
-    };
-    // -- Canvas methods
-    helpers.clear = function(chart) {
-      chart.ctx.clearRect(0, 0, chart.width, chart.height);
-    };
-    helpers.fontString = function(pixelSize, fontStyle, fontFamily) {
-      return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
-    };
-    helpers.longestText = function(ctx, font, arrayOfThings, cache) {
-      cache = cache || {};
-      var data = cache.data = cache.data || {};
-      var gc = cache.garbageCollect = cache.garbageCollect || [];
-
-      if (cache.font !== font) {
-        data = cache.data = {};
-        gc = cache.garbageCollect = [];
-        cache.font = font;
-      }
-
-      ctx.font = font;
-      var longest = 0;
-      helpers.each(arrayOfThings, function(thing) {
-        // Undefined strings and arrays should not be measured
-        if (thing !== undefined && thing !== null && helpers.isArray(thing) !== true) {
-          longest = helpers.measureText(ctx, data, gc, longest, thing);
-        } else if (helpers.isArray(thing)) {
-          // if it is an array lets measure each element
-          // to do maybe simplify this function a bit so we can do this more recursively?
-          helpers.each(thing, function(nestedThing) {
-            // Undefined strings and arrays should not be measured
-            if (nestedThing !== undefined && nestedThing !== null && !helpers.isArray(nestedThing)) {
-              longest = helpers.measureText(ctx, data, gc, longest, nestedThing);
-            }
-          });
-        }
-      });
-
-      var gcLen = gc.length / 2;
-      if (gcLen > arrayOfThings.length) {
-        for (var i = 0; i < gcLen; i++) {
-          delete data[gc[i]];
-        }
-        gc.splice(0, gcLen);
-      }
-      return longest;
-    };
-    helpers.measureText = function(ctx, data, gc, longest, string) {
-      var textWidth = data[string];
-      if (!textWidth) {
-        textWidth = data[string] = ctx.measureText(string).width;
-        gc.push(string);
-      }
-      if (textWidth > longest) {
-        longest = textWidth;
-      }
-      return longest;
-    };
-    helpers.numberOfLabelLines = function(arrayOfThings) {
-      var numberOfLines = 1;
-      helpers.each(arrayOfThings, function(thing) {
-        if (helpers.isArray(thing)) {
-          if (thing.length > numberOfLines) {
-            numberOfLines = thing.length;
-          }
-        }
-      });
-      return numberOfLines;
-    };
-    helpers.drawRoundedRectangle = function(ctx, x, y, width, height, radius) {
-      ctx.beginPath();
-      ctx.moveTo(x + radius, y);
-      ctx.lineTo(x + width - radius, y);
-      ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
-      ctx.lineTo(x + width, y + height - radius);
-      ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
-      ctx.lineTo(x + radius, y + height);
-      ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
-      ctx.lineTo(x, y + radius);
-      ctx.quadraticCurveTo(x, y, x + radius, y);
-      ctx.closePath();
-    };
-    helpers.color = function(c) {
-      if (!color) {
-        console.error('Color.js not found!');
-        return c;
-      }
-
-      /* global CanvasGradient */
-      if (c instanceof CanvasGradient) {
-        return color(Chart.defaults.global.defaultColor);
-      }
-
-      return color(c);
-    };
-    helpers.isArray = Array.isArray?
-      function(obj) {
-        return Array.isArray(obj);
-      } :
-      function(obj) {
-        return Object.prototype.toString.call(obj) === '[object Array]';
-      };
-    // ! @see http://stackoverflow.com/a/14853974
-    helpers.arrayEquals = function(a0, a1) {
-      var i, ilen, v0, v1;
-
-      if (!a0 || !a1 || a0.length !== a1.length) {
-        return false;
-      }
-
-      for (i = 0, ilen=a0.length; i < ilen; ++i) {
-        v0 = a0[i];
-        v1 = a1[i];
-
-        if (v0 instanceof Array && v1 instanceof Array) {
-          if (!helpers.arrayEquals(v0, v1)) {
-            return false;
-          }
-        } else if (v0 !== v1) {
-          // NOTE: two different object instances will never be equal: {x:20} != {x:20}
-          return false;
-        }
-      }
-
-      return true;
-    };
-    helpers.callCallback = function(fn, args, _tArg) {
-      if (fn && typeof fn.call === 'function') {
-        fn.apply(_tArg, args);
-      }
-    };
-    helpers.getHoverColor = function(colorValue) {
-      /* global CanvasPattern */
-      return (colorValue instanceof CanvasPattern) ?
-        colorValue :
-        helpers.color(colorValue).saturate(0.5).darken(0.1).rgbString();
-    };
-  };
-
-},{"3":3}],27:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-    var helpers = Chart.helpers;
-
-    /**
-     * Helper function to get relative position for an event
-     * @param {Event|IEvent} event - The event to get the position for
-     * @param {Chart} chart - The chart
-     * @returns {Point} the event position
-     */
-    function getRelativePosition(e, chart) {
-      if (e.native) {
-        return {
-          x: e.x,
-          y: e.y
-        };
-      }
-
-      return helpers.getRelativePosition(e, chart);
-    }
-
-    /**
-     * Helper function to traverse all of the visible elements in the chart
-     * @param chart {chart} the chart
-     * @param handler {Function} the callback to execute for each visible item
-     */
-    function parseVisibleItems(chart, handler) {
-      var datasets = chart.data.datasets;
-      var meta, i, j, ilen, jlen;
-
-      for (i = 0, ilen = datasets.length; i < ilen; ++i) {
-        if (!chart.isDatasetVisible(i)) {
-          continue;
-        }
-
-        meta = chart.getDatasetMeta(i);
-        for (j = 0, jlen = meta.data.length; j < jlen; ++j) {
-          var element = meta.data[j];
-          if (!element._view.skip) {
-            handler(element);
-          }
-        }
-      }
-    }
-
-    /**
-     * Helper function to get the items that intersect the event position
-     * @param items {ChartElement[]} elements to filter
-     * @param position {Point} the point to be nearest to
-     * @return {ChartElement[]} the nearest items
-     */
-    function getIntersectItems(chart, position) {
-      var elements = [];
-
-      parseVisibleItems(chart, function(element) {
-        if (element.inRange(position.x, position.y)) {
-          elements.push(element);
-        }
-      });
-
-      return elements;
-    }
-
-    /**
-     * Helper function to get the items nearest to the event position considering all visible items in teh chart
-     * @param chart {Chart} the chart to look at elements from
-     * @param position {Point} the point to be nearest to
-     * @param intersect {Boolean} if true, only consider items that intersect the position
-     * @param distanceMetric {Function} Optional function to provide the distance between
-     * @return {ChartElement[]} the nearest items
-     */
-    function getNearestItems(chart, position, intersect, distanceMetric) {
-      var minDistance = Number.POSITIVE_INFINITY;
-      var nearestItems = [];
-
-      if (!distanceMetric) {
-        distanceMetric = helpers.distanceBetweenPoints;
-      }
-
-      parseVisibleItems(chart, function(element) {
-        if (intersect && !element.inRange(position.x, position.y)) {
-          return;
-        }
-
-        var center = element.getCenterPoint();
-        var distance = distanceMetric(position, center);
-
-        if (distance < minDistance) {
-          nearestItems = [element];
-          minDistance = distance;
-        } else if (distance === minDistance) {
-          // Can have multiple items at the same distance in which case we sort by size
-          nearestItems.push(element);
-        }
-      });
-
-      return nearestItems;
-    }
-
-    function indexMode(chart, e, options) {
-      var position = getRelativePosition(e, chart.chart);
-      var distanceMetric = function(pt1, pt2) {
-        return Math.abs(pt1.x - pt2.x);
-      };
-      var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);
-      var elements = [];
-
-      if (!items.length) {
-        return [];
-      }
-
-      chart.data.datasets.forEach(function(dataset, datasetIndex) {
-        if (chart.isDatasetVisible(datasetIndex)) {
-          var meta = chart.getDatasetMeta(datasetIndex),
-            element = meta.data[items[0]._index];
-
-          // don't count items that are skipped (null data)
-          if (element && !element._view.skip) {
-            elements.push(element);
-          }
-        }
-      });
-
-      return elements;
-    }
-
-    /**
-     * @interface IInteractionOptions
-     */
-    /**
-     * If true, only consider items that intersect the point
-     * @name IInterfaceOptions#boolean
-     * @type Boolean
-     */
-
-    /**
-     * Contains interaction related functions
-     * @namespace Chart.Interaction
-     */
-    Chart.Interaction = {
-      // Helper function for different modes
-      modes: {
-        single: function(chart, e) {
-          var position = getRelativePosition(e, chart.chart);
-          var elements = [];
-
-          parseVisibleItems(chart, function(element) {
-            if (element.inRange(position.x, position.y)) {
-              elements.push(element);
-              return elements;
-            }
-          });
-
-          return elements.slice(0, 1);
-        },
-
-        /**
-         * @function Chart.Interaction.modes.label
-         * @deprecated since version 2.4.0
-         */
-        label: indexMode,
-
-        /**
-         * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something
-         * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item
-         * @function Chart.Interaction.modes.index
-         * @since v2.4.0
-         * @param chart {chart} the chart we are returning items from
-         * @param e {Event} the event we are find things at
-         * @param options {IInteractionOptions} options to use during interaction
-         * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
-         */
-        index: indexMode,
-
-        /**
-         * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something
-         * If the options.intersect is false, we find the nearest item and return the items in that dataset
-         * @function Chart.Interaction.modes.dataset
-         * @param chart {chart} the chart we are returning items from
-         * @param e {Event} the event we are find things at
-         * @param options {IInteractionOptions} options to use during interaction
-         * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
-         */
-        dataset: function(chart, e, options) {
-          var position = getRelativePosition(e, chart.chart);
-          var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false);
-
-          if (items.length > 0) {
-            items = chart.getDatasetMeta(items[0]._datasetIndex).data;
-          }
-
-          return items;
-        },
-
-        /**
-         * @function Chart.Interaction.modes.x-axis
-         * @deprecated since version 2.4.0. Use index mode and intersect == true
-         */
-        'x-axis': function(chart, e) {
-          return indexMode(chart, e, true);
-        },
-
-        /**
-         * Point mode returns all elements that hit test based on the event position
-         * of the event
-         * @function Chart.Interaction.modes.intersect
-         * @param chart {chart} the chart we are returning items from
-         * @param e {Event} the event we are find things at
-         * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
-         */
-        point: function(chart, e) {
-          var position = getRelativePosition(e, chart.chart);
-          return getIntersectItems(chart, position);
-        },
-
-        /**
-         * nearest mode returns the element closest to the point
-         * @function Chart.Interaction.modes.intersect
-         * @param chart {chart} the chart we are returning items from
-         * @param e {Event} the event we are find things at
-         * @param options {IInteractionOptions} options to use
-         * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
-         */
-        nearest: function(chart, e, options) {
-          var position = getRelativePosition(e, chart.chart);
-          var nearestItems = getNearestItems(chart, position, options.intersect);
-
-          // We have multiple items at the same distance from the event. Now sort by smallest
-          if (nearestItems.length > 1) {
-            nearestItems.sort(function(a, b) {
-              var sizeA = a.getArea();
-              var sizeB = b.getArea();
-              var ret = sizeA - sizeB;
-
-              if (ret === 0) {
-                // if equal sort by dataset index
-                ret = a._datasetIndex - b._datasetIndex;
-              }
-
-              return ret;
-            });
-          }
-
-          // Return only 1 item
-          return nearestItems.slice(0, 1);
-        },
-
-        /**
-         * x mode returns the elements that hit-test at the current x coordinate
-         * @function Chart.Interaction.modes.x
-         * @param chart {chart} the chart we are returning items from
-         * @param e {Event} the event we are find things at
-         * @param options {IInteractionOptions} options to use
-         * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
-         */
-        x: function(chart, e, options) {
-          var position = getRelativePosition(e, chart.chart);
-          var items = [];
-          var intersectsItem = false;
-
-          parseVisibleItems(chart, function(element) {
-            if (element.inXRange(position.x)) {
-              items.push(element);
-            }
-
-            if (element.inRange(position.x, position.y)) {
-              intersectsItem = true;
-            }
-          });
-
-          // If we want to trigger on an intersect and we don't have any items
-          // that intersect the position, return nothing
-          if (options.intersect && !intersectsItem) {
-            items = [];
-          }
-          return items;
-        },
-
-        /**
-         * y mode returns the elements that hit-test at the current y coordinate
-         * @function Chart.Interaction.modes.y
-         * @param chart {chart} the chart we are returning items from
-         * @param e {Event} the event we are find things at
-         * @param options {IInteractionOptions} options to use
-         * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
-         */
-        y: function(chart, e, options) {
-          var position = getRelativePosition(e, chart.chart);
-          var items = [];
-          var intersectsItem = false;
-
-          parseVisibleItems(chart, function(element) {
-            if (element.inYRange(position.y)) {
-              items.push(element);
-            }
-
-            if (element.inRange(position.x, position.y)) {
-              intersectsItem = true;
-            }
-          });
-
-          // If we want to trigger on an intersect and we don't have any items
-          // that intersect the position, return nothing
-          if (options.intersect && !intersectsItem) {
-            items = [];
-          }
-          return items;
-        }
-      }
-    };
-  };
-
-},{}],28:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function() {
-
-    // Occupy the global variable of Chart, and create a simple base class
-    var Chart = function(item, config) {
-      this.controller = new Chart.Controller(item, config, this);
-      return this.controller;
-    };
-
-    // Globally expose the defaults to allow for user updating/changing
-    Chart.defaults = {
-      global: {
-        responsive: true,
-        responsiveAnimationDuration: 0,
-        maintainAspectRatio: true,
-        events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],
-        hover: {
-          onHover: null,
-          mode: 'nearest',
-          intersect: true,
-          animationDuration: 400
-        },
-        onClick: null,
-        defaultColor: 'rgba(0,0,0,0.1)',
-        defaultFontColor: '#666',
-        defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
-        defaultFontSize: 12,
-        defaultFontStyle: 'normal',
-        showLines: true,
-
-        // Element defaults defined in element extensions
-        elements: {},
-
-        // Legend callback string
-        legendCallback: function(chart) {
-          var text = [];
-          text.push('<ul class="' + chart.id + '-legend">');
-          for (var i = 0; i < chart.data.datasets.length; i++) {
-            text.push('<li><span style="background-color:' + chart.data.datasets[i].backgroundColor + '"></span>');
-            if (chart.data.datasets[i].label) {
-              text.push(chart.data.datasets[i].label);
-            }
-            text.push('</li>');
-          }
-          text.push('</ul>');
-
-          return text.join('');
-        }
-      }
-    };
-
-    Chart.Chart = Chart;
-
-    return Chart;
-  };
-
-},{}],29:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    // The layout service is very self explanatory.  It's responsible for the layout within a chart.
-    // Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need
-    // It is this service's responsibility of carrying out that layout.
-    Chart.layoutService = {
-      defaults: {},
-
-      // Register a box to a chartInstance. A box is simply a reference to an object that requires layout. eg. Scales, Legend, Plugins.
-      addBox: function(chartInstance, box) {
-        if (!chartInstance.boxes) {
-          chartInstance.boxes = [];
-        }
-        chartInstance.boxes.push(box);
-      },
-
-      removeBox: function(chartInstance, box) {
-        if (!chartInstance.boxes) {
-          return;
-        }
-        chartInstance.boxes.splice(chartInstance.boxes.indexOf(box), 1);
-      },
-
-      // The most important function
-      update: function(chartInstance, width, height) {
-
-        if (!chartInstance) {
-          return;
-        }
-
-        var layoutOptions = chartInstance.options.layout;
-        var padding = layoutOptions ? layoutOptions.padding : null;
-
-        var leftPadding = 0;
-        var rightPadding = 0;
-        var topPadding = 0;
-        var bottomPadding = 0;
-
-        if (!isNaN(padding)) {
-          // options.layout.padding is a number. assign to all
-          leftPadding = padding;
-          rightPadding = padding;
-          topPadding = padding;
-          bottomPadding = padding;
-        } else {
-          leftPadding = padding.left || 0;
-          rightPadding = padding.right || 0;
-          topPadding = padding.top || 0;
-          bottomPadding = padding.bottom || 0;
-        }
-
-        var leftBoxes = helpers.where(chartInstance.boxes, function(box) {
-          return box.options.position === 'left';
-        });
-        var rightBoxes = helpers.where(chartInstance.boxes, function(box) {
-          return box.options.position === 'right';
-        });
-        var topBoxes = helpers.where(chartInstance.boxes, function(box) {
-          return box.options.position === 'top';
-        });
-        var bottomBoxes = helpers.where(chartInstance.boxes, function(box) {
-          return box.options.position === 'bottom';
-        });
-
-        // Boxes that overlay the chartarea such as the radialLinear scale
-        var chartAreaBoxes = helpers.where(chartInstance.boxes, function(box) {
-          return box.options.position === 'chartArea';
-        });
-
-        // Ensure that full width boxes are at the very top / bottom
-        topBoxes.sort(function(a, b) {
-          return (b.options.fullWidth ? 1 : 0) - (a.options.fullWidth ? 1 : 0);
-        });
-        bottomBoxes.sort(function(a, b) {
-          return (a.options.fullWidth ? 1 : 0) - (b.options.fullWidth ? 1 : 0);
-        });
-
-        // Essentially we now have any number of boxes on each of the 4 sides.
-        // Our canvas looks like the following.
-        // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and
-        // B1 is the bottom axis
-        // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays
-        // These locations are single-box locations only, when trying to register a chartArea location that is already taken,
-        // an error will be thrown.
-        //
-        // |----------------------------------------------------|
-        // |                  T1 (Full Width)                   |
-        // |----------------------------------------------------|
-        // |    |    |                 T2                  |    |
-        // |    |----|-------------------------------------|----|
-        // |    |    | C1 |                           | C2 |    |
-        // |    |    |----|                           |----|    |
-        // |    |    |                                     |    |
-        // | L1 | L2 |           ChartArea (C0)            | R1 |
-        // |    |    |                                     |    |
-        // |    |    |----|                           |----|    |
-        // |    |    | C3 |                           | C4 |    |
-        // |    |----|-------------------------------------|----|
-        // |    |    |                 B1                  |    |
-        // |----------------------------------------------------|
-        // |                  B2 (Full Width)                   |
-        // |----------------------------------------------------|
-        //
-        // What we do to find the best sizing, we do the following
-        // 1. Determine the minimum size of the chart area.
-        // 2. Split the remaining width equally between each vertical axis
-        // 3. Split the remaining height equally between each horizontal axis
-        // 4. Give each layout the maximum size it can be. The layout will return it's minimum size
-        // 5. Adjust the sizes of each axis based on it's minimum reported size.
-        // 6. Refit each axis
-        // 7. Position each axis in the final location
-        // 8. Tell the chart the final location of the chart area
-        // 9. Tell any axes that overlay the chart area the positions of the chart area
-
-        // Step 1
-        var chartWidth = width - leftPadding - rightPadding;
-        var chartHeight = height - topPadding - bottomPadding;
-        var chartAreaWidth = chartWidth / 2; // min 50%
-        var chartAreaHeight = chartHeight / 2; // min 50%
-
-        // Step 2
-        var verticalBoxWidth = (width - chartAreaWidth) / (leftBoxes.length + rightBoxes.length);
-
-        // Step 3
-        var horizontalBoxHeight = (height - chartAreaHeight) / (topBoxes.length + bottomBoxes.length);
-
-        // Step 4
-        var maxChartAreaWidth = chartWidth;
-        var maxChartAreaHeight = chartHeight;
-        var minBoxSizes = [];
-
-        function getMinimumBoxSize(box) {
-          var minSize;
-          var isHorizontal = box.isHorizontal();
-
-          if (isHorizontal) {
-            minSize = box.update(box.options.fullWidth ? chartWidth : maxChartAreaWidth, horizontalBoxHeight);
-            maxChartAreaHeight -= minSize.height;
-          } else {
-            minSize = box.update(verticalBoxWidth, chartAreaHeight);
-            maxChartAreaWidth -= minSize.width;
-          }
-
-          minBoxSizes.push({
-            horizontal: isHorizontal,
-            minSize: minSize,
-            box: box,
-          });
-        }
-
-        helpers.each(leftBoxes.concat(rightBoxes, topBoxes, bottomBoxes), getMinimumBoxSize);
-
-        // If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)
-        var maxHorizontalLeftPadding = 0;
-        var maxHorizontalRightPadding = 0;
-        var maxVerticalTopPadding = 0;
-        var maxVerticalBottomPadding = 0;
-
-        helpers.each(topBoxes.concat(bottomBoxes), function(horizontalBox) {
-          if (horizontalBox.getPadding) {
-            var boxPadding = horizontalBox.getPadding();
-            maxHorizontalLeftPadding = Math.max(maxHorizontalLeftPadding, boxPadding.left);
-            maxHorizontalRightPadding = Math.max(maxHorizontalRightPadding, boxPadding.right);
-          }
-        });
-
-        helpers.each(leftBoxes.concat(rightBoxes), function(verticalBox) {
-          if (verticalBox.getPadding) {
-            var boxPadding = verticalBox.getPadding();
-            maxVerticalTopPadding = Math.max(maxVerticalTopPadding, boxPadding.top);
-            maxVerticalBottomPadding = Math.max(maxVerticalBottomPadding, boxPadding.bottom);
-          }
-        });
-
-        // At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could
-        // be if the axes are drawn at their minimum sizes.
-        // Steps 5 & 6
-        var totalLeftBoxesWidth = leftPadding;
-        var totalRightBoxesWidth = rightPadding;
-        var totalTopBoxesHeight = topPadding;
-        var totalBottomBoxesHeight = bottomPadding;
-
-        // Function to fit a box
-        function fitBox(box) {
-          var minBoxSize = helpers.findNextWhere(minBoxSizes, function(minBox) {
-            return minBox.box === box;
-          });
-
-          if (minBoxSize) {
-            if (box.isHorizontal()) {
-              var scaleMargin = {
-                left: Math.max(totalLeftBoxesWidth, maxHorizontalLeftPadding),
-                right: Math.max(totalRightBoxesWidth, maxHorizontalRightPadding),
-                top: 0,
-                bottom: 0
-              };
-
-              // Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends
-              // on the margin. Sometimes they need to increase in size slightly
-              box.update(box.options.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);
-            } else {
-              box.update(minBoxSize.minSize.width, maxChartAreaHeight);
-            }
-          }
-        }
-
-        // Update, and calculate the left and right margins for the horizontal boxes
-        helpers.each(leftBoxes.concat(rightBoxes), fitBox);
-
-        helpers.each(leftBoxes, function(box) {
-          totalLeftBoxesWidth += box.width;
-        });
-
-        helpers.each(rightBoxes, function(box) {
-          totalRightBoxesWidth += box.width;
-        });
-
-        // Set the Left and Right margins for the horizontal boxes
-        helpers.each(topBoxes.concat(bottomBoxes), fitBox);
-
-        // Figure out how much margin is on the top and bottom of the vertical boxes
-        helpers.each(topBoxes, function(box) {
-          totalTopBoxesHeight += box.height;
-        });
-
-        helpers.each(bottomBoxes, function(box) {
-          totalBottomBoxesHeight += box.height;
-        });
-
-        function finalFitVerticalBox(box) {
-          var minBoxSize = helpers.findNextWhere(minBoxSizes, function(minSize) {
-            return minSize.box === box;
-          });
-
-          var scaleMargin = {
-            left: 0,
-            right: 0,
-            top: totalTopBoxesHeight,
-            bottom: totalBottomBoxesHeight
-          };
-
-          if (minBoxSize) {
-            box.update(minBoxSize.minSize.width, maxChartAreaHeight, scaleMargin);
-          }
-        }
-
-        // Let the left layout know the final margin
-        helpers.each(leftBoxes.concat(rightBoxes), finalFitVerticalBox);
-
-        // Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)
-        totalLeftBoxesWidth = leftPadding;
-        totalRightBoxesWidth = rightPadding;
-        totalTopBoxesHeight = topPadding;
-        totalBottomBoxesHeight = bottomPadding;
-
-        helpers.each(leftBoxes, function(box) {
-          totalLeftBoxesWidth += box.width;
-        });
-
-        helpers.each(rightBoxes, function(box) {
-          totalRightBoxesWidth += box.width;
-        });
-
-        helpers.each(topBoxes, function(box) {
-          totalTopBoxesHeight += box.height;
-        });
-        helpers.each(bottomBoxes, function(box) {
-          totalBottomBoxesHeight += box.height;
-        });
-
-        // We may be adding some padding to account for rotated x axis labels
-        var leftPaddingAddition = Math.max(maxHorizontalLeftPadding - totalLeftBoxesWidth, 0);
-        totalLeftBoxesWidth += leftPaddingAddition;
-        totalRightBoxesWidth += Math.max(maxHorizontalRightPadding - totalRightBoxesWidth, 0);
-
-        var topPaddingAddition = Math.max(maxVerticalTopPadding - totalTopBoxesHeight, 0);
-        totalTopBoxesHeight += topPaddingAddition;
-        totalBottomBoxesHeight += Math.max(maxVerticalBottomPadding - totalBottomBoxesHeight, 0);
-
-        // Figure out if our chart area changed. This would occur if the dataset layout label rotation
-        // changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do
-        // without calling `fit` again
-        var newMaxChartAreaHeight = height - totalTopBoxesHeight - totalBottomBoxesHeight;
-        var newMaxChartAreaWidth = width - totalLeftBoxesWidth - totalRightBoxesWidth;
-
-        if (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {
-          helpers.each(leftBoxes, function(box) {
-            box.height = newMaxChartAreaHeight;
-          });
-
-          helpers.each(rightBoxes, function(box) {
-            box.height = newMaxChartAreaHeight;
-          });
-
-          helpers.each(topBoxes, function(box) {
-            if (!box.options.fullWidth) {
-              box.width = newMaxChartAreaWidth;
-            }
-          });
-
-          helpers.each(bottomBoxes, function(box) {
-            if (!box.options.fullWidth) {
-              box.width = newMaxChartAreaWidth;
-            }
-          });
-
-          maxChartAreaHeight = newMaxChartAreaHeight;
-          maxChartAreaWidth = newMaxChartAreaWidth;
-        }
-
-        // Step 7 - Position the boxes
-        var left = leftPadding + leftPaddingAddition;
-        var top = topPadding + topPaddingAddition;
-
-        function placeBox(box) {
-          if (box.isHorizontal()) {
-            box.left = box.options.fullWidth ? leftPadding : totalLeftBoxesWidth;
-            box.right = box.options.fullWidth ? width - rightPadding : totalLeftBoxesWidth + maxChartAreaWidth;
-            box.top = top;
-            box.bottom = top + box.height;
-
-            // Move to next point
-            top = box.bottom;
-
-          } else {
-
-            box.left = left;
-            box.right = left + box.width;
-            box.top = totalTopBoxesHeight;
-            box.bottom = totalTopBoxesHeight + maxChartAreaHeight;
-
-            // Move to next point
-            left = box.right;
-          }
-        }
-
-        helpers.each(leftBoxes.concat(topBoxes), placeBox);
-
-        // Account for chart width and height
-        left += maxChartAreaWidth;
-        top += maxChartAreaHeight;
-
-        helpers.each(rightBoxes, placeBox);
-        helpers.each(bottomBoxes, placeBox);
-
-        // Step 8
-        chartInstance.chartArea = {
-          left: totalLeftBoxesWidth,
-          top: totalTopBoxesHeight,
-          right: totalLeftBoxesWidth + maxChartAreaWidth,
-          bottom: totalTopBoxesHeight + maxChartAreaHeight
-        };
-
-        // Step 9
-        helpers.each(chartAreaBoxes, function(box) {
-          box.left = chartInstance.chartArea.left;
-          box.top = chartInstance.chartArea.top;
-          box.right = chartInstance.chartArea.right;
-          box.bottom = chartInstance.chartArea.bottom;
-
-          box.update(maxChartAreaWidth, maxChartAreaHeight);
-        });
-      }
-    };
-  };
-
-},{}],30:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-    var noop = helpers.noop;
-
-    Chart.defaults.global.legend = {
-
-      display: true,
-      position: 'top',
-      fullWidth: true, // marks that this box should take the full width of the canvas (pushing down other boxes)
-      reverse: false,
-
-      // a callback that will handle
-      onClick: function(e, legendItem) {
-        var index = legendItem.datasetIndex;
-        var ci = this.chart;
-        var meta = ci.getDatasetMeta(index);
-
-        // See controller.isDatasetVisible comment
-        meta.hidden = meta.hidden === null? !ci.data.datasets[index].hidden : null;
-
-        // We hid a dataset ... rerender the chart
-        ci.update();
-      },
-
-      onHover: null,
-
-      labels: {
-        boxWidth: 40,
-        padding: 10,
-        // Generates labels shown in the legend
-        // Valid properties to return:
-        // text : text to display
-        // fillStyle : fill of coloured box
-        // strokeStyle: stroke of coloured box
-        // hidden : if this legend item refers to a hidden item
-        // lineCap : cap style for line
-        // lineDash
-        // lineDashOffset :
-        // lineJoin :
-        // lineWidth :
-        generateLabels: function(chart) {
-          var data = chart.data;
-          return helpers.isArray(data.datasets) ? data.datasets.map(function(dataset, i) {
-            return {
-              text: dataset.label,
-              fillStyle: (!helpers.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),
-              hidden: !chart.isDatasetVisible(i),
-              lineCap: dataset.borderCapStyle,
-              lineDash: dataset.borderDash,
-              lineDashOffset: dataset.borderDashOffset,
-              lineJoin: dataset.borderJoinStyle,
-              lineWidth: dataset.borderWidth,
-              strokeStyle: dataset.borderColor,
-              pointStyle: dataset.pointStyle,
-
-              // Below is extra data used for toggling the datasets
-              datasetIndex: i
-            };
-          }, this) : [];
-        }
-      }
-    };
-
-    /**
-     * Helper function to get the box width based on the usePointStyle option
-     * @param labelopts {Object} the label options on the legend
-     * @param fontSize {Number} the label font size
-     * @return {Number} width of the color box area
-     */
-    function getBoxWidth(labelOpts, fontSize) {
-      return labelOpts.usePointStyle ?
-      fontSize * Math.SQRT2 :
-        labelOpts.boxWidth;
-    }
-
-    Chart.Legend = Chart.Element.extend({
-
-      initialize: function(config) {
-        helpers.extend(this, config);
-
-        // Contains hit boxes for each dataset (in dataset order)
-        this.legendHitBoxes = [];
-
-        // Are we in doughnut mode which has a different data type
-        this.doughnutMode = false;
-      },
-
-      // These methods are ordered by lifecycle. Utilities then follow.
-      // Any function defined here is inherited by all legend types.
-      // Any function can be extended by the legend type
-
-      beforeUpdate: noop,
-      update: function(maxWidth, maxHeight, margins) {
-        var me = this;
-
-        // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
-        me.beforeUpdate();
-
-        // Absorb the master measurements
-        me.maxWidth = maxWidth;
-        me.maxHeight = maxHeight;
-        me.margins = margins;
-
-        // Dimensions
-        me.beforeSetDimensions();
-        me.setDimensions();
-        me.afterSetDimensions();
-        // Labels
-        me.beforeBuildLabels();
-        me.buildLabels();
-        me.afterBuildLabels();
-
-        // Fit
-        me.beforeFit();
-        me.fit();
-        me.afterFit();
-        //
-        me.afterUpdate();
-
-        return me.minSize;
-      },
-      afterUpdate: noop,
-
-      //
-
-      beforeSetDimensions: noop,
-      setDimensions: function() {
-        var me = this;
-        // Set the unconstrained dimension before label rotation
-        if (me.isHorizontal()) {
-          // Reset position before calculating rotation
-          me.width = me.maxWidth;
-          me.left = 0;
-          me.right = me.width;
-        } else {
-          me.height = me.maxHeight;
-
-          // Reset position before calculating rotation
-          me.top = 0;
-          me.bottom = me.height;
-        }
-
-        // Reset padding
-        me.paddingLeft = 0;
-        me.paddingTop = 0;
-        me.paddingRight = 0;
-        me.paddingBottom = 0;
-
-        // Reset minSize
-        me.minSize = {
-          width: 0,
-          height: 0
-        };
-      },
-      afterSetDimensions: noop,
-
-      //
-
-      beforeBuildLabels: noop,
-      buildLabels: function() {
-        var me = this;
-        var labelOpts = me.options.labels;
-        var legendItems = labelOpts.generateLabels.call(me, me.chart);
-
-        if (labelOpts.filter) {
-          legendItems = legendItems.filter(function(item) {
-            return labelOpts.filter(item, me.chart.data);
-          });
-        }
-
-        if (me.options.reverse) {
-          legendItems.reverse();
-        }
-
-        me.legendItems = legendItems;
-      },
-      afterBuildLabels: noop,
-
-      //
-
-      beforeFit: noop,
-      fit: function() {
-        var me = this;
-        var opts = me.options;
-        var labelOpts = opts.labels;
-        var display = opts.display;
-
-        var ctx = me.ctx;
-
-        var globalDefault = Chart.defaults.global,
-          itemOrDefault = helpers.getValueOrDefault,
-          fontSize = itemOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize),
-          fontStyle = itemOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle),
-          fontFamily = itemOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily),
-          labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);
-
-        // Reset hit boxes
-        var hitboxes = me.legendHitBoxes = [];
-
-        var minSize = me.minSize;
-        var isHorizontal = me.isHorizontal();
-
-        if (isHorizontal) {
-          minSize.width = me.maxWidth; // fill all the width
-          minSize.height = display ? 10 : 0;
-        } else {
-          minSize.width = display ? 10 : 0;
-          minSize.height = me.maxHeight; // fill all the height
-        }
-
-        // Increase sizes here
-        if (display) {
-          ctx.font = labelFont;
-
-          if (isHorizontal) {
-            // Labels
-
-            // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one
-            var lineWidths = me.lineWidths = [0];
-            var totalHeight = me.legendItems.length ? fontSize + (labelOpts.padding) : 0;
-
-            ctx.textAlign = 'left';
-            ctx.textBaseline = 'top';
-
-            helpers.each(me.legendItems, function(legendItem, i) {
-              var boxWidth = getBoxWidth(labelOpts, fontSize);
-              var width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;
-
-              if (lineWidths[lineWidths.length - 1] + width + labelOpts.padding >= me.width) {
-                totalHeight += fontSize + (labelOpts.padding);
-                lineWidths[lineWidths.length] = me.left;
-              }
-
-              // Store the hitbox width and height here. Final position will be updated in `draw`
-              hitboxes[i] = {
-                left: 0,
-                top: 0,
-                width: width,
-                height: fontSize
-              };
-
-              lineWidths[lineWidths.length - 1] += width + labelOpts.padding;
-            });
-
-            minSize.height += totalHeight;
-
-          } else {
-            var vPadding = labelOpts.padding;
-            var columnWidths = me.columnWidths = [];
-            var totalWidth = labelOpts.padding;
-            var currentColWidth = 0;
-            var currentColHeight = 0;
-            var itemHeight = fontSize + vPadding;
-
-            helpers.each(me.legendItems, function(legendItem, i) {
-              var boxWidth = getBoxWidth(labelOpts, fontSize);
-              var itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;
-
-              // If too tall, go to new column
-              if (currentColHeight + itemHeight > minSize.height) {
-                totalWidth += currentColWidth + labelOpts.padding;
-                columnWidths.push(currentColWidth); // previous column width
-
-                currentColWidth = 0;
-                currentColHeight = 0;
-              }
-
-              // Get max width
-              currentColWidth = Math.max(currentColWidth, itemWidth);
-              currentColHeight += itemHeight;
-
-              // Store the hitbox width and height here. Final position will be updated in `draw`
-              hitboxes[i] = {
-                left: 0,
-                top: 0,
-                width: itemWidth,
-                height: fontSize
-              };
-            });
-
-            totalWidth += currentColWidth;
-            columnWidths.push(currentColWidth);
-            minSize.width += totalWidth;
-          }
-        }
-
-        me.width = minSize.width;
-        me.height = minSize.height;
-      },
-      afterFit: noop,
-
-      // Shared Methods
-      isHorizontal: function() {
-        return this.options.position === 'top' || this.options.position === 'bottom';
-      },
-
-      // Actually draw the legend on the canvas
-      draw: function() {
-        var me = this;
-        var opts = me.options;
-        var labelOpts = opts.labels;
-        var globalDefault = Chart.defaults.global,
-          lineDefault = globalDefault.elements.line,
-          legendWidth = me.width,
-          lineWidths = me.lineWidths;
-
-        if (opts.display) {
-          var ctx = me.ctx,
-            cursor,
-            itemOrDefault = helpers.getValueOrDefault,
-            fontColor = itemOrDefault(labelOpts.fontColor, globalDefault.defaultFontColor),
-            fontSize = itemOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize),
-            fontStyle = itemOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle),
-            fontFamily = itemOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily),
-            labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);
-
-          // Canvas setup
-          ctx.textAlign = 'left';
-          ctx.textBaseline = 'top';
-          ctx.lineWidth = 0.5;
-          ctx.strokeStyle = fontColor; // for strikethrough effect
-          ctx.fillStyle = fontColor; // render in correct colour
-          ctx.font = labelFont;
-
-          var boxWidth = getBoxWidth(labelOpts, fontSize),
-            hitboxes = me.legendHitBoxes;
-
-          // current position
-          var drawLegendBox = function(x, y, legendItem) {
-            if (isNaN(boxWidth) || boxWidth <= 0) {
-              return;
-            }
-
-            // Set the ctx for the box
-            ctx.save();
-
-            ctx.fillStyle = itemOrDefault(legendItem.fillStyle, globalDefault.defaultColor);
-            ctx.lineCap = itemOrDefault(legendItem.lineCap, lineDefault.borderCapStyle);
-            ctx.lineDashOffset = itemOrDefault(legendItem.lineDashOffset, lineDefault.borderDashOffset);
-            ctx.lineJoin = itemOrDefault(legendItem.lineJoin, lineDefault.borderJoinStyle);
-            ctx.lineWidth = itemOrDefault(legendItem.lineWidth, lineDefault.borderWidth);
-            ctx.strokeStyle = itemOrDefault(legendItem.strokeStyle, globalDefault.defaultColor);
-            var isLineWidthZero = (itemOrDefault(legendItem.lineWidth, lineDefault.borderWidth) === 0);
-
-            if (ctx.setLineDash) {
-              // IE 9 and 10 do not support line dash
-              ctx.setLineDash(itemOrDefault(legendItem.lineDash, lineDefault.borderDash));
-            }
-
-            if (opts.labels && opts.labels.usePointStyle) {
-              // Recalculate x and y for drawPoint() because its expecting
-              // x and y to be center of figure (instead of top left)
-              var radius = fontSize * Math.SQRT2 / 2;
-              var offSet = radius / Math.SQRT2;
-              var centerX = x + offSet;
-              var centerY = y + offSet;
-
-              // Draw pointStyle as legend symbol
-              Chart.canvasHelpers.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);
-            } else {
-              // Draw box as legend symbol
-              if (!isLineWidthZero) {
-                ctx.strokeRect(x, y, boxWidth, fontSize);
-              }
-              ctx.fillRect(x, y, boxWidth, fontSize);
-            }
-
-            ctx.restore();
-          };
-          var fillText = function(x, y, legendItem, textWidth) {
-            ctx.fillText(legendItem.text, boxWidth + (fontSize / 2) + x, y);
-
-            if (legendItem.hidden) {
-              // Strikethrough the text if hidden
-              ctx.beginPath();
-              ctx.lineWidth = 2;
-              ctx.moveTo(boxWidth + (fontSize / 2) + x, y + (fontSize / 2));
-              ctx.lineTo(boxWidth + (fontSize / 2) + x + textWidth, y + (fontSize / 2));
-              ctx.stroke();
-            }
-          };
-
-          // Horizontal
-          var isHorizontal = me.isHorizontal();
-          if (isHorizontal) {
-            cursor = {
-              x: me.left + ((legendWidth - lineWidths[0]) / 2),
-              y: me.top + labelOpts.padding,
-              line: 0
-            };
-          } else {
-            cursor = {
-              x: me.left + labelOpts.padding,
-              y: me.top + labelOpts.padding,
-              line: 0
-            };
-          }
-
-          var itemHeight = fontSize + labelOpts.padding;
-          helpers.each(me.legendItems, function(legendItem, i) {
-            var textWidth = ctx.measureText(legendItem.text).width,
-              width = boxWidth + (fontSize / 2) + textWidth,
-              x = cursor.x,
-              y = cursor.y;
-
-            if (isHorizontal) {
-              if (x + width >= legendWidth) {
-                y = cursor.y += itemHeight;
-                cursor.line++;
-                x = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2);
-              }
-            } else if (y + itemHeight > me.bottom) {
-              x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;
-              y = cursor.y = me.top + labelOpts.padding;
-              cursor.line++;
-            }
-
-            drawLegendBox(x, y, legendItem);
-
-            hitboxes[i].left = x;
-            hitboxes[i].top = y;
-
-            // Fill the actual label
-            fillText(x, y, legendItem, textWidth);
-
-            if (isHorizontal) {
-              cursor.x += width + (labelOpts.padding);
-            } else {
-              cursor.y += itemHeight;
-            }
-
-          });
-        }
-      },
-
-      /**
-       * Handle an event
-       * @private
-       * @param {IEvent} event - The event to handle
-       * @return {Boolean} true if a change occured
-       */
-      handleEvent: function(e) {
-        var me = this;
-        var opts = me.options;
-        var type = e.type === 'mouseup' ? 'click' : e.type;
-        var changed = false;
-
-        if (type === 'mousemove') {
-          if (!opts.onHover) {
-            return;
-          }
-        } else if (type === 'click') {
-          if (!opts.onClick) {
-            return;
-          }
-        } else {
-          return;
-        }
-
-        // Chart event already has relative position in it
-        var x = e.x,
-          y = e.y;
-
-        if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {
-          // See if we are touching one of the dataset boxes
-          var lh = me.legendHitBoxes;
-          for (var i = 0; i < lh.length; ++i) {
-            var hitBox = lh[i];
-
-            if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {
-              // Touching an element
-              if (type === 'click') {
-                // use e.native for backwards compatibility
-                opts.onClick.call(me, e.native, me.legendItems[i]);
-                changed = true;
-                break;
-              } else if (type === 'mousemove') {
-                // use e.native for backwards compatibility
-                opts.onHover.call(me, e.native, me.legendItems[i]);
-                changed = true;
-                break;
-              }
-            }
-          }
-        }
-
-        return changed;
-      }
-    });
-
-    function createNewLegendAndAttach(chartInstance, legendOpts) {
-      var legend = new Chart.Legend({
-        ctx: chartInstance.chart.ctx,
-        options: legendOpts,
-        chart: chartInstance
-      });
-      chartInstance.legend = legend;
-      Chart.layoutService.addBox(chartInstance, legend);
-    }
-
-    // Register the legend plugin
-    Chart.plugins.register({
-      beforeInit: function(chartInstance) {
-        var legendOpts = chartInstance.options.legend;
-
-        if (legendOpts) {
-          createNewLegendAndAttach(chartInstance, legendOpts);
-        }
-      },
-      beforeUpdate: function(chartInstance) {
-        var legendOpts = chartInstance.options.legend;
-
-        if (legendOpts) {
-          legendOpts = helpers.configMerge(Chart.defaults.global.legend, legendOpts);
-
-          if (chartInstance.legend) {
-            chartInstance.legend.options = legendOpts;
-          } else {
-            createNewLegendAndAttach(chartInstance, legendOpts);
-          }
-        } else {
-          Chart.layoutService.removeBox(chartInstance, chartInstance.legend);
-          delete chartInstance.legend;
-        }
-      },
-      afterEvent: function(chartInstance, e) {
-        var legend = chartInstance.legend;
-        if (legend) {
-          legend.handleEvent(e);
-        }
-      }
-    });
-  };
-
-},{}],31:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.global.plugins = {};
-
-    /**
-     * The plugin service singleton
-     * @namespace Chart.plugins
-     * @since 2.1.0
-     */
-    Chart.plugins = {
-      /**
-       * Globally registered plugins.
-       * @private
-       */
-      _plugins: [],
-
-      /**
-       * This identifier is used to invalidate the descriptors cache attached to each chart
-       * when a global plugin is registered or unregistered. In this case, the cache ID is
-       * incremented and descriptors are regenerated during following API calls.
-       * @private
-       */
-      _cacheId: 0,
-
-      /**
-       * Registers the given plugin(s) if not already registered.
-       * @param {Array|Object} plugins plugin instance(s).
-       */
-      register: function(plugins) {
-        var p = this._plugins;
-        ([]).concat(plugins).forEach(function(plugin) {
-          if (p.indexOf(plugin) === -1) {
-            p.push(plugin);
-          }
-        });
-
-        this._cacheId++;
-      },
-
-      /**
-       * Unregisters the given plugin(s) only if registered.
-       * @param {Array|Object} plugins plugin instance(s).
-       */
-      unregister: function(plugins) {
-        var p = this._plugins;
-        ([]).concat(plugins).forEach(function(plugin) {
-          var idx = p.indexOf(plugin);
-          if (idx !== -1) {
-            p.splice(idx, 1);
-          }
-        });
-
-        this._cacheId++;
-      },
-
-      /**
-       * Remove all registered plugins.
-       * @since 2.1.5
-       */
-      clear: function() {
-        this._plugins = [];
-        this._cacheId++;
-      },
-
-      /**
-       * Returns the number of registered plugins?
-       * @returns {Number}
-       * @since 2.1.5
-       */
-      count: function() {
-        return this._plugins.length;
-      },
-
-      /**
-       * Returns all registered plugin instances.
-       * @returns {Array} array of plugin objects.
-       * @since 2.1.5
-       */
-      getAll: function() {
-        return this._plugins;
-      },
-
-      /**
-       * Calls enabled plugins for `chart` on the specified hook and with the given args.
-       * This method immediately returns as soon as a plugin explicitly returns false. The
-       * returned value can be used, for instance, to interrupt the current action.
-       * @param {Object} chart - The chart instance for which plugins should be called.
-       * @param {String} hook - The name of the plugin method to call (e.g. 'beforeUpdate').
-       * @param {Array} [args] - Extra arguments to apply to the hook call.
-       * @returns {Boolean} false if any of the plugins return false, else returns true.
-       */
-      notify: function(chart, hook, args) {
-        var descriptors = this.descriptors(chart);
-        var ilen = descriptors.length;
-        var i, descriptor, plugin, params, method;
-
-        for (i=0; i<ilen; ++i) {
-          descriptor = descriptors[i];
-          plugin = descriptor.plugin;
-          method = plugin[hook];
-          if (typeof method === 'function') {
-            params = [chart].concat(args || []);
-            params.push(descriptor.options);
-            if (method.apply(plugin, params) === false) {
-              return false;
-            }
-          }
-        }
-
-        return true;
-      },
-
-      /**
-       * Returns descriptors of enabled plugins for the given chart.
-       * @returns {Array} [{ plugin, options }]
-       * @private
-       */
-      descriptors: function(chart) {
-        var cache = chart._plugins || (chart._plugins = {});
-        if (cache.id === this._cacheId) {
-          return cache.descriptors;
-        }
-
-        var plugins = [];
-        var descriptors = [];
-        var config = (chart && chart.config) || {};
-        var defaults = Chart.defaults.global.plugins;
-        var options = (config.options && config.options.plugins) || {};
-
-        this._plugins.concat(config.plugins || []).forEach(function(plugin) {
-          var idx = plugins.indexOf(plugin);
-          if (idx !== -1) {
-            return;
-          }
-
-          var id = plugin.id;
-          var opts = options[id];
-          if (opts === false) {
-            return;
-          }
-
-          if (opts === true) {
-            opts = helpers.clone(defaults[id]);
-          }
-
-          plugins.push(plugin);
-          descriptors.push({
-            plugin: plugin,
-            options: opts || {}
-          });
-        });
-
-        cache.descriptors = descriptors;
-        cache.id = this._cacheId;
-        return descriptors;
-      }
-    };
-
-    /**
-     * Plugin extension hooks.
-     * @interface IPlugin
-     * @since 2.1.0
-     */
-    /**
-     * @method IPlugin#beforeInit
-     * @desc Called before initializing `chart`.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#afterInit
-     * @desc Called after `chart` has been initialized and before the first update.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#beforeUpdate
-     * @desc Called before updating `chart`. If any plugin returns `false`, the update
-     * is cancelled (and thus subsequent render(s)) until another `update` is triggered.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     * @returns {Boolean} `false` to cancel the chart update.
-     */
-    /**
-     * @method IPlugin#afterUpdate
-     * @desc Called after `chart` has been updated and before rendering. Note that this
-     * hook will not be called if the chart update has been previously cancelled.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#beforeDatasetsUpdate
-     * @desc Called before updating the `chart` datasets. If any plugin returns `false`,
-     * the datasets update is cancelled until another `update` is triggered.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     * @returns {Boolean} false to cancel the datasets update.
-     * @since version 2.1.5
-     */
-    /**
-     * @method IPlugin#afterDatasetsUpdate
-     * @desc Called after the `chart` datasets have been updated. Note that this hook
-     * will not be called if the datasets update has been previously cancelled.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     * @since version 2.1.5
-     */
-    /**
-     * @method IPlugin#beforeLayout
-     * @desc Called before laying out `chart`. If any plugin returns `false`,
-     * the layout update is cancelled until another `update` is triggered.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     * @returns {Boolean} `false` to cancel the chart layout.
-     */
-    /**
-     * @method IPlugin#afterLayout
-     * @desc Called after the `chart` has been layed out. Note that this hook will not
-     * be called if the layout update has been previously cancelled.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#beforeRender
-     * @desc Called before rendering `chart`. If any plugin returns `false`,
-     * the rendering is cancelled until another `render` is triggered.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     * @returns {Boolean} `false` to cancel the chart rendering.
-     */
-    /**
-     * @method IPlugin#afterRender
-     * @desc Called after the `chart` has been fully rendered (and animation completed). Note
-     * that this hook will not be called if the rendering has been previously cancelled.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#beforeDraw
-     * @desc Called before drawing `chart` at every animation frame specified by the given
-     * easing value. If any plugin returns `false`, the frame drawing is cancelled until
-     * another `render` is triggered.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.
-     * @param {Object} options - The plugin options.
-     * @returns {Boolean} `false` to cancel the chart drawing.
-     */
-    /**
-     * @method IPlugin#afterDraw
-     * @desc Called after the `chart` has been drawn for the specific easing value. Note
-     * that this hook will not be called if the drawing has been previously cancelled.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#beforeDatasetsDraw
-     * @desc Called before drawing the `chart` datasets. If any plugin returns `false`,
-     * the datasets drawing is cancelled until another `render` is triggered.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.
-     * @param {Object} options - The plugin options.
-     * @returns {Boolean} `false` to cancel the chart datasets drawing.
-     */
-    /**
-     * @method IPlugin#afterDatasetsDraw
-     * @desc Called after the `chart` datasets have been drawn. Note that this hook
-     * will not be called if the datasets drawing has been previously cancelled.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#beforeEvent
-     * @desc Called before processing the specified `event`. If any plugin returns `false`,
-     * the event will be discarded.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {IEvent} event - The event object.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#afterEvent
-     * @desc Called after the `event` has been consumed. Note that this hook
-     * will not be called if the `event` has been previously discarded.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {IEvent} event - The event object.
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#resize
-     * @desc Called after the chart as been resized.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Number} size - The new canvas display size (eq. canvas.style width & height).
-     * @param {Object} options - The plugin options.
-     */
-    /**
-     * @method IPlugin#destroy
-     * @desc Called after the chart as been destroyed.
-     * @param {Chart.Controller} chart - The chart instance.
-     * @param {Object} options - The plugin options.
-     */
-
-    /**
-     * Provided for backward compatibility, use Chart.plugins instead
-     * @namespace Chart.pluginService
-     * @deprecated since version 2.1.5
-     * @todo remove at version 3
-     * @private
-     */
-    Chart.pluginService = Chart.plugins;
-
-    /**
-     * Provided for backward compatibility, inheriting from Chart.PlugingBase has no
-     * effect, instead simply create/register plugins via plain JavaScript objects.
-     * @interface Chart.PluginBase
-     * @deprecated since version 2.5.0
-     * @todo remove at version 3
-     * @private
-     */
-    Chart.PluginBase = helpers.inherits({});
-  };
-
-},{}],32:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.scale = {
-      display: true,
-      position: 'left',
-
-      // grid line settings
-      gridLines: {
-        display: true,
-        color: 'rgba(0, 0, 0, 0.1)',
-        lineWidth: 1,
-        drawBorder: true,
-        drawOnChartArea: true,
-        drawTicks: true,
-        tickMarkLength: 10,
-        zeroLineWidth: 1,
-        zeroLineColor: 'rgba(0,0,0,0.25)',
-        offsetGridLines: false,
-        borderDash: [],
-        borderDashOffset: 0.0
-      },
-
-      // scale label
-      scaleLabel: {
-        // actual label
-        labelString: '',
-
-        // display property
-        display: false
-      },
-
-      // label settings
-      ticks: {
-        beginAtZero: false,
-        minRotation: 0,
-        maxRotation: 50,
-        mirror: false,
-        padding: 0,
-        reverse: false,
-        display: true,
-        autoSkip: true,
-        autoSkipPadding: 0,
-        labelOffset: 0,
-        // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.
-        callback: Chart.Ticks.formatters.values
-      }
-    };
-
-    function computeTextSize(context, tick, font) {
-      return helpers.isArray(tick) ?
-        helpers.longestText(context, font, tick) :
-        context.measureText(tick).width;
-    }
-
-    function parseFontOptions(options) {
-      var getValueOrDefault = helpers.getValueOrDefault;
-      var globalDefaults = Chart.defaults.global;
-      var size = getValueOrDefault(options.fontSize, globalDefaults.defaultFontSize);
-      var style = getValueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle);
-      var family = getValueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily);
-
-      return {
-        size: size,
-        style: style,
-        family: family,
-        font: helpers.fontString(size, style, family)
-      };
-    }
-
-    Chart.Scale = Chart.Element.extend({
-      /**
-       * Get the padding needed for the scale
-       * @method getPadding
-       * @private
-       * @returns {Padding} the necessary padding
-       */
-      getPadding: function() {
-        var me = this;
-        return {
-          left: me.paddingLeft || 0,
-          top: me.paddingTop || 0,
-          right: me.paddingRight || 0,
-          bottom: me.paddingBottom || 0
-        };
-      },
-
-      // These methods are ordered by lifecyle. Utilities then follow.
-      // Any function defined here is inherited by all scale types.
-      // Any function can be extended by the scale type
-
-      beforeUpdate: function() {
-        helpers.callCallback(this.options.beforeUpdate, [this]);
-      },
-      update: function(maxWidth, maxHeight, margins) {
-        var me = this;
-
-        // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
-        me.beforeUpdate();
-
-        // Absorb the master measurements
-        me.maxWidth = maxWidth;
-        me.maxHeight = maxHeight;
-        me.margins = helpers.extend({
-          left: 0,
-          right: 0,
-          top: 0,
-          bottom: 0
-        }, margins);
-        me.longestTextCache = me.longestTextCache || {};
-
-        // Dimensions
-        me.beforeSetDimensions();
-        me.setDimensions();
-        me.afterSetDimensions();
-
-        // Data min/max
-        me.beforeDataLimits();
-        me.determineDataLimits();
-        me.afterDataLimits();
-
-        // Ticks
-        me.beforeBuildTicks();
-        me.buildTicks();
-        me.afterBuildTicks();
-
-        me.beforeTickToLabelConversion();
-        me.convertTicksToLabels();
-        me.afterTickToLabelConversion();
-
-        // Tick Rotation
-        me.beforeCalculateTickRotation();
-        me.calculateTickRotation();
-        me.afterCalculateTickRotation();
-        // Fit
-        me.beforeFit();
-        me.fit();
-        me.afterFit();
-        //
-        me.afterUpdate();
-
-        return me.minSize;
-
-      },
-      afterUpdate: function() {
-        helpers.callCallback(this.options.afterUpdate, [this]);
-      },
-
-      //
-
-      beforeSetDimensions: function() {
-        helpers.callCallback(this.options.beforeSetDimensions, [this]);
-      },
-      setDimensions: function() {
-        var me = this;
-        // Set the unconstrained dimension before label rotation
-        if (me.isHorizontal()) {
-          // Reset position before calculating rotation
-          me.width = me.maxWidth;
-          me.left = 0;
-          me.right = me.width;
-        } else {
-          me.height = me.maxHeight;
-
-          // Reset position before calculating rotation
-          me.top = 0;
-          me.bottom = me.height;
-        }
-
-        // Reset padding
-        me.paddingLeft = 0;
-        me.paddingTop = 0;
-        me.paddingRight = 0;
-        me.paddingBottom = 0;
-      },
-      afterSetDimensions: function() {
-        helpers.callCallback(this.options.afterSetDimensions, [this]);
-      },
-
-      // Data limits
-      beforeDataLimits: function() {
-        helpers.callCallback(this.options.beforeDataLimits, [this]);
-      },
-      determineDataLimits: helpers.noop,
-      afterDataLimits: function() {
-        helpers.callCallback(this.options.afterDataLimits, [this]);
-      },
-
-      //
-      beforeBuildTicks: function() {
-        helpers.callCallback(this.options.beforeBuildTicks, [this]);
-      },
-      buildTicks: helpers.noop,
-      afterBuildTicks: function() {
-        helpers.callCallback(this.options.afterBuildTicks, [this]);
-      },
-
-      beforeTickToLabelConversion: function() {
-        helpers.callCallback(this.options.beforeTickToLabelConversion, [this]);
-      },
-      convertTicksToLabels: function() {
-        var me = this;
-        // Convert ticks to strings
-        var tickOpts = me.options.ticks;
-        me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback);
-      },
-      afterTickToLabelConversion: function() {
-        helpers.callCallback(this.options.afterTickToLabelConversion, [this]);
-      },
-
-      //
-
-      beforeCalculateTickRotation: function() {
-        helpers.callCallback(this.options.beforeCalculateTickRotation, [this]);
-      },
-      calculateTickRotation: function() {
-        var me = this;
-        var context = me.ctx;
-        var tickOpts = me.options.ticks;
-
-        // Get the width of each grid by calculating the difference
-        // between x offsets between 0 and 1.
-        var tickFont = parseFontOptions(tickOpts);
-        context.font = tickFont.font;
-
-        var labelRotation = tickOpts.minRotation || 0;
-
-        if (me.options.display && me.isHorizontal()) {
-          var originalLabelWidth = helpers.longestText(context, tickFont.font, me.ticks, me.longestTextCache);
-          var labelWidth = originalLabelWidth;
-          var cosRotation;
-          var sinRotation;
-
-          // Allow 3 pixels x2 padding either side for label readability
-          var tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6;
-
-          // Max label rotation can be set or default to 90 - also act as a loop counter
-          while (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {
-            var angleRadians = helpers.toRadians(labelRotation);
-            cosRotation = Math.cos(angleRadians);
-            sinRotation = Math.sin(angleRadians);
-
-            if (sinRotation * originalLabelWidth > me.maxHeight) {
-              // go back one step
-              labelRotation--;
-              break;
-            }
-
-            labelRotation++;
-            labelWidth = cosRotation * originalLabelWidth;
-          }
-        }
-
-        me.labelRotation = labelRotation;
-      },
-      afterCalculateTickRotation: function() {
-        helpers.callCallback(this.options.afterCalculateTickRotation, [this]);
-      },
-
-      //
-
-      beforeFit: function() {
-        helpers.callCallback(this.options.beforeFit, [this]);
-      },
-      fit: function() {
-        var me = this;
-        // Reset
-        var minSize = me.minSize = {
-          width: 0,
-          height: 0
-        };
-
-        var opts = me.options;
-        var tickOpts = opts.ticks;
-        var scaleLabelOpts = opts.scaleLabel;
-        var gridLineOpts = opts.gridLines;
-        var display = opts.display;
-        var isHorizontal = me.isHorizontal();
-
-        var tickFont = parseFontOptions(tickOpts);
-        var scaleLabelFontSize = parseFontOptions(scaleLabelOpts).size * 1.5;
-        var tickMarkLength = opts.gridLines.tickMarkLength;
-
-        // Width
-        if (isHorizontal) {
-          // subtract the margins to line up with the chartArea if we are a full width scale
-          minSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;
-        } else {
-          minSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;
-        }
-
-        // height
-        if (isHorizontal) {
-          minSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;
-        } else {
-          minSize.height = me.maxHeight; // fill all the height
-        }
-
-        // Are we showing a title for the scale?
-        if (scaleLabelOpts.display && display) {
-          if (isHorizontal) {
-            minSize.height += scaleLabelFontSize;
-          } else {
-            minSize.width += scaleLabelFontSize;
-          }
-        }
-
-        // Don't bother fitting the ticks if we are not showing them
-        if (tickOpts.display && display) {
-          var largestTextWidth = helpers.longestText(me.ctx, tickFont.font, me.ticks, me.longestTextCache);
-          var tallestLabelHeightInLines = helpers.numberOfLabelLines(me.ticks);
-          var lineSpace = tickFont.size * 0.5;
-
-          if (isHorizontal) {
-            // A horizontal axis is more constrained by the height.
-            me.longestLabelWidth = largestTextWidth;
-
-            var angleRadians = helpers.toRadians(me.labelRotation);
-            var cosRotation = Math.cos(angleRadians);
-            var sinRotation = Math.sin(angleRadians);
-
-            // TODO - improve this calculation
-            var labelHeight = (sinRotation * largestTextWidth)
-              + (tickFont.size * tallestLabelHeightInLines)
-              + (lineSpace * tallestLabelHeightInLines);
-
-            minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight);
-            me.ctx.font = tickFont.font;
-
-            var firstTick = me.ticks[0];
-            var firstLabelWidth = computeTextSize(me.ctx, firstTick, tickFont.font);
-
-            var lastTick = me.ticks[me.ticks.length - 1];
-            var lastLabelWidth = computeTextSize(me.ctx, lastTick, tickFont.font);
-
-            // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned which means that the right padding is dominated
-            // by the font height
-            if (me.labelRotation !== 0) {
-              me.paddingLeft = opts.position === 'bottom'? (cosRotation * firstLabelWidth) + 3: (cosRotation * lineSpace) + 3; // add 3 px to move away from canvas edges
-              me.paddingRight = opts.position === 'bottom'? (cosRotation * lineSpace) + 3: (cosRotation * lastLabelWidth) + 3;
-            } else {
-              me.paddingLeft = firstLabelWidth / 2 + 3; // add 3 px to move away from canvas edges
-              me.paddingRight = lastLabelWidth / 2 + 3;
-            }
-          } else {
-            // A vertical axis is more constrained by the width. Labels are the dominant factor here, so get that length first
-            // Account for padding
-
-            if (tickOpts.mirror) {
-              largestTextWidth = 0;
-            } else {
-              largestTextWidth += me.options.ticks.padding;
-            }
-            minSize.width += largestTextWidth;
-            me.paddingTop = tickFont.size / 2;
-            me.paddingBottom = tickFont.size / 2;
-          }
-        }
-
-        me.handleMargins();
-
-        me.width = minSize.width;
-        me.height = minSize.height;
-      },
-
-      /**
-       * Handle margins and padding interactions
-       * @private
-       */
-      handleMargins: function() {
-        var me = this;
-        if (me.margins) {
-          me.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);
-          me.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);
-          me.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);
-          me.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);
-        }
-      },
-
-      afterFit: function() {
-        helpers.callCallback(this.options.afterFit, [this]);
-      },
-
-      // Shared Methods
-      isHorizontal: function() {
-        return this.options.position === 'top' || this.options.position === 'bottom';
-      },
-      isFullWidth: function() {
-        return (this.options.fullWidth);
-      },
-
-      // Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not
-      getRightValue: function(rawValue) {
-        // Null and undefined values first
-        if (rawValue === null || typeof(rawValue) === 'undefined') {
-          return NaN;
-        }
-        // isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values
-        if (typeof(rawValue) === 'number' && !isFinite(rawValue)) {
-          return NaN;
-        }
-        // If it is in fact an object, dive in one more level
-        if (typeof(rawValue) === 'object') {
-          if ((rawValue instanceof Date) || (rawValue.isValid)) {
-            return rawValue;
-          }
-          return this.getRightValue(this.isHorizontal() ? rawValue.x : rawValue.y);
-        }
-
-        // Value is good, return it
-        return rawValue;
-      },
-
-      // Used to get the value to display in the tooltip for the data at the given index
-      // function getLabelForIndex(index, datasetIndex)
-      getLabelForIndex: helpers.noop,
-
-      // Used to get data value locations.  Value can either be an index or a numerical value
-      getPixelForValue: helpers.noop,
-
-      // Used to get the data value from a given pixel. This is the inverse of getPixelForValue
-      getValueForPixel: helpers.noop,
-
-      // Used for tick location, should
-      getPixelForTick: function(index, includeOffset) {
-        var me = this;
-        if (me.isHorizontal()) {
-          var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
-          var tickWidth = innerWidth / Math.max((me.ticks.length - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
-          var pixel = (tickWidth * index) + me.paddingLeft;
-
-          if (includeOffset) {
-            pixel += tickWidth / 2;
-          }
-
-          var finalVal = me.left + Math.round(pixel);
-          finalVal += me.isFullWidth() ? me.margins.left : 0;
-          return finalVal;
-        }
-        var innerHeight = me.height - (me.paddingTop + me.paddingBottom);
-        return me.top + (index * (innerHeight / (me.ticks.length - 1)));
-      },
-
-      // Utility for getting the pixel location of a percentage of scale
-      getPixelForDecimal: function(decimal /* , includeOffset*/) {
-        var me = this;
-        if (me.isHorizontal()) {
-          var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
-          var valueOffset = (innerWidth * decimal) + me.paddingLeft;
-
-          var finalVal = me.left + Math.round(valueOffset);
-          finalVal += me.isFullWidth() ? me.margins.left : 0;
-          return finalVal;
-        }
-        return me.top + (decimal * me.height);
-      },
-
-      getBasePixel: function() {
-        return this.getPixelForValue(this.getBaseValue());
-      },
-
-      getBaseValue: function() {
-        var me = this;
-        var min = me.min;
-        var max = me.max;
-
-        return me.beginAtZero ? 0:
-          min < 0 && max < 0? max :
-            min > 0 && max > 0? min :
-              0;
-      },
-
-      // Actually draw the scale on the canvas
-      // @param {rectangle} chartArea : the area of the chart to draw full grid lines on
-      draw: function(chartArea) {
-        var me = this;
-        var options = me.options;
-        if (!options.display) {
-          return;
-        }
-
-        var context = me.ctx;
-        var globalDefaults = Chart.defaults.global;
-        var optionTicks = options.ticks;
-        var gridLines = options.gridLines;
-        var scaleLabel = options.scaleLabel;
-
-        var isRotated = me.labelRotation !== 0;
-        var skipRatio;
-        var useAutoskipper = optionTicks.autoSkip;
-        var isHorizontal = me.isHorizontal();
-
-        // figure out the maximum number of gridlines to show
-        var maxTicks;
-        if (optionTicks.maxTicksLimit) {
-          maxTicks = optionTicks.maxTicksLimit;
-        }
-
-        var tickFontColor = helpers.getValueOrDefault(optionTicks.fontColor, globalDefaults.defaultFontColor);
-        var tickFont = parseFontOptions(optionTicks);
-
-        var tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;
-        var borderDash = helpers.getValueOrDefault(gridLines.borderDash, globalDefaults.borderDash);
-        var borderDashOffset = helpers.getValueOrDefault(gridLines.borderDashOffset, globalDefaults.borderDashOffset);
-
-        var scaleLabelFontColor = helpers.getValueOrDefault(scaleLabel.fontColor, globalDefaults.defaultFontColor);
-        var scaleLabelFont = parseFontOptions(scaleLabel);
-
-        var labelRotationRadians = helpers.toRadians(me.labelRotation);
-        var cosRotation = Math.cos(labelRotationRadians);
-        var longestRotatedLabel = me.longestLabelWidth * cosRotation;
-
-        // Make sure we draw text in the correct color and font
-        context.fillStyle = tickFontColor;
-
-        var itemsToDraw = [];
-
-        if (isHorizontal) {
-          skipRatio = false;
-
-          // Only calculate the skip ratio with the half width of longestRotateLabel if we got an actual rotation
-          // See #2584
-          if (isRotated) {
-            longestRotatedLabel /= 2;
-          }
-
-          if ((longestRotatedLabel + optionTicks.autoSkipPadding) * me.ticks.length > (me.width - (me.paddingLeft + me.paddingRight))) {
-            skipRatio = 1 + Math.floor(((longestRotatedLabel + optionTicks.autoSkipPadding) * me.ticks.length) / (me.width - (me.paddingLeft + me.paddingRight)));
-          }
-
-          // if they defined a max number of optionTicks,
-          // increase skipRatio until that number is met
-          if (maxTicks && me.ticks.length > maxTicks) {
-            while (!skipRatio || me.ticks.length / (skipRatio || 1) > maxTicks) {
-              if (!skipRatio) {
-                skipRatio = 1;
-              }
-              skipRatio += 1;
-            }
-          }
-
-          if (!useAutoskipper) {
-            skipRatio = false;
-          }
-        }
-
-
-        var xTickStart = options.position === 'right' ? me.left : me.right - tl;
-        var xTickEnd = options.position === 'right' ? me.left + tl : me.right;
-        var yTickStart = options.position === 'bottom' ? me.top : me.bottom - tl;
-        var yTickEnd = options.position === 'bottom' ? me.top + tl : me.bottom;
-
-        helpers.each(me.ticks, function(label, index) {
-          // If the callback returned a null or undefined value, do not draw this line
-          if (label === undefined || label === null) {
-            return;
-          }
-
-          var isLastTick = me.ticks.length === index + 1;
-
-          // Since we always show the last tick,we need may need to hide the last shown one before
-          var shouldSkip = (skipRatio > 1 && index % skipRatio > 0) || (index % skipRatio === 0 && index + skipRatio >= me.ticks.length);
-          if (shouldSkip && !isLastTick || (label === undefined || label === null)) {
-            return;
-          }
-
-          var lineWidth, lineColor;
-          if (index === (typeof me.zeroLineIndex !== 'undefined' ? me.zeroLineIndex : 0)) {
-            // Draw the first index specially
-            lineWidth = gridLines.zeroLineWidth;
-            lineColor = gridLines.zeroLineColor;
-          } else {
-            lineWidth = helpers.getValueAtIndexOrDefault(gridLines.lineWidth, index);
-            lineColor = helpers.getValueAtIndexOrDefault(gridLines.color, index);
-          }
-
-          // Common properties
-          var tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY;
-          var textAlign = 'middle';
-          var textBaseline = 'middle';
-
-          if (isHorizontal) {
-
-            if (options.position === 'bottom') {
-              // bottom
-              textBaseline = !isRotated? 'top':'middle';
-              textAlign = !isRotated? 'center': 'right';
-              labelY = me.top + tl;
-            } else {
-              // top
-              textBaseline = !isRotated? 'bottom':'middle';
-              textAlign = !isRotated? 'center': 'left';
-              labelY = me.bottom - tl;
-            }
-
-            var xLineValue = me.getPixelForTick(index) + helpers.aliasPixel(lineWidth); // xvalues for grid lines
-            labelX = me.getPixelForTick(index, gridLines.offsetGridLines) + optionTicks.labelOffset; // x values for optionTicks (need to consider offsetLabel option)
-
-            tx1 = tx2 = x1 = x2 = xLineValue;
-            ty1 = yTickStart;
-            ty2 = yTickEnd;
-            y1 = chartArea.top;
-            y2 = chartArea.bottom;
-          } else {
-            var isLeft = options.position === 'left';
-            var tickPadding = optionTicks.padding;
-            var labelXOffset;
-
-            if (optionTicks.mirror) {
-              textAlign = isLeft ? 'left' : 'right';
-              labelXOffset = tickPadding;
-            } else {
-              textAlign = isLeft ? 'right' : 'left';
-              labelXOffset = tl + tickPadding;
-            }
-
-            labelX = isLeft ? me.right - labelXOffset : me.left + labelXOffset;
-
-            var yLineValue = me.getPixelForTick(index); // xvalues for grid lines
-            yLineValue += helpers.aliasPixel(lineWidth);
-            labelY = me.getPixelForTick(index, gridLines.offsetGridLines);
-
-            tx1 = xTickStart;
-            tx2 = xTickEnd;
-            x1 = chartArea.left;
-            x2 = chartArea.right;
-            ty1 = ty2 = y1 = y2 = yLineValue;
-          }
-
-          itemsToDraw.push({
-            tx1: tx1,
-            ty1: ty1,
-            tx2: tx2,
-            ty2: ty2,
-            x1: x1,
-            y1: y1,
-            x2: x2,
-            y2: y2,
-            labelX: labelX,
-            labelY: labelY,
-            glWidth: lineWidth,
-            glColor: lineColor,
-            glBorderDash: borderDash,
-            glBorderDashOffset: borderDashOffset,
-            rotation: -1 * labelRotationRadians,
-            label: label,
-            textBaseline: textBaseline,
-            textAlign: textAlign
-          });
-        });
-
-        // Draw all of the tick labels, tick marks, and grid lines at the correct places
-        helpers.each(itemsToDraw, function(itemToDraw) {
-          if (gridLines.display) {
-            context.save();
-            context.lineWidth = itemToDraw.glWidth;
-            context.strokeStyle = itemToDraw.glColor;
-            if (context.setLineDash) {
-              context.setLineDash(itemToDraw.glBorderDash);
-              context.lineDashOffset = itemToDraw.glBorderDashOffset;
-            }
-
-            context.beginPath();
-
-            if (gridLines.drawTicks) {
-              context.moveTo(itemToDraw.tx1, itemToDraw.ty1);
-              context.lineTo(itemToDraw.tx2, itemToDraw.ty2);
-            }
-
-            if (gridLines.drawOnChartArea) {
-              context.moveTo(itemToDraw.x1, itemToDraw.y1);
-              context.lineTo(itemToDraw.x2, itemToDraw.y2);
-            }
-
-            context.stroke();
-            context.restore();
-          }
-
-          if (optionTicks.display) {
-            context.save();
-            context.translate(itemToDraw.labelX, itemToDraw.labelY);
-            context.rotate(itemToDraw.rotation);
-            context.font = tickFont.font;
-            context.textBaseline = itemToDraw.textBaseline;
-            context.textAlign = itemToDraw.textAlign;
-
-            var label = itemToDraw.label;
-            if (helpers.isArray(label)) {
-              for (var i = 0, y = 0; i < label.length; ++i) {
-                // We just make sure the multiline element is a string here..
-                context.fillText('' + label[i], 0, y);
-                // apply same lineSpacing as calculated @ L#320
-                y += (tickFont.size * 1.5);
-              }
-            } else {
-              context.fillText(label, 0, 0);
-            }
-            context.restore();
-          }
-        });
-
-        if (scaleLabel.display) {
-          // Draw the scale label
-          var scaleLabelX;
-          var scaleLabelY;
-          var rotation = 0;
-
-          if (isHorizontal) {
-            scaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width
-            scaleLabelY = options.position === 'bottom' ? me.bottom - (scaleLabelFont.size / 2) : me.top + (scaleLabelFont.size / 2);
-          } else {
-            var isLeft = options.position === 'left';
-            scaleLabelX = isLeft ? me.left + (scaleLabelFont.size / 2) : me.right - (scaleLabelFont.size / 2);
-            scaleLabelY = me.top + ((me.bottom - me.top) / 2);
-            rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;
-          }
-
-          context.save();
-          context.translate(scaleLabelX, scaleLabelY);
-          context.rotate(rotation);
-          context.textAlign = 'center';
-          context.textBaseline = 'middle';
-          context.fillStyle = scaleLabelFontColor; // render in correct colour
-          context.font = scaleLabelFont.font;
-          context.fillText(scaleLabel.labelString, 0, 0);
-          context.restore();
-        }
-
-        if (gridLines.drawBorder) {
-          // Draw the line at the edge of the axis
-          context.lineWidth = helpers.getValueAtIndexOrDefault(gridLines.lineWidth, 0);
-          context.strokeStyle = helpers.getValueAtIndexOrDefault(gridLines.color, 0);
-          var x1 = me.left,
-            x2 = me.right,
-            y1 = me.top,
-            y2 = me.bottom;
-
-          var aliasPixel = helpers.aliasPixel(context.lineWidth);
-          if (isHorizontal) {
-            y1 = y2 = options.position === 'top' ? me.bottom : me.top;
-            y1 += aliasPixel;
-            y2 += aliasPixel;
-          } else {
-            x1 = x2 = options.position === 'left' ? me.right : me.left;
-            x1 += aliasPixel;
-            x2 += aliasPixel;
-          }
-
-          context.beginPath();
-          context.moveTo(x1, y1);
-          context.lineTo(x2, y2);
-          context.stroke();
-        }
-      }
-    });
-  };
-
-},{}],33:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.scaleService = {
-      // Scale registration object. Extensions can register new scale types (such as log or DB scales) and then
-      // use the new chart options to grab the correct scale
-      constructors: {},
-      // Use a registration function so that we can move to an ES6 map when we no longer need to support
-      // old browsers
-
-      // Scale config defaults
-      defaults: {},
-      registerScaleType: function(type, scaleConstructor, defaults) {
-        this.constructors[type] = scaleConstructor;
-        this.defaults[type] = helpers.clone(defaults);
-      },
-      getScaleConstructor: function(type) {
-        return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;
-      },
-      getScaleDefaults: function(type) {
-        // Return the scale defaults merged with the global settings so that we always use the latest ones
-        return this.defaults.hasOwnProperty(type) ? helpers.scaleMerge(Chart.defaults.scale, this.defaults[type]) : {};
-      },
-      updateScaleDefaults: function(type, additions) {
-        var defaults = this.defaults;
-        if (defaults.hasOwnProperty(type)) {
-          defaults[type] = helpers.extend(defaults[type], additions);
-        }
-      },
-      addScalesToLayout: function(chartInstance) {
-        // Adds each scale to the chart.boxes array to be sized accordingly
-        helpers.each(chartInstance.scales, function(scale) {
-          Chart.layoutService.addBox(chartInstance, scale);
-        });
-      }
-    };
-  };
-
-},{}],34:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    /**
-     * Namespace to hold static tick generation functions
-     * @namespace Chart.Ticks
-     */
-    Chart.Ticks = {
-      /**
-       * Namespace to hold generators for different types of ticks
-       * @namespace Chart.Ticks.generators
-       */
-      generators: {
-        /**
-         * Interface for the options provided to the numeric tick generator
-         * @interface INumericTickGenerationOptions
-         */
-        /**
-         * The maximum number of ticks to display
-         * @name INumericTickGenerationOptions#maxTicks
-         * @type Number
-         */
-        /**
-         * The distance between each tick.
-         * @name INumericTickGenerationOptions#stepSize
-         * @type Number
-         * @optional
-         */
-        /**
-         * Forced minimum for the ticks. If not specified, the minimum of the data range is used to calculate the tick minimum
-         * @name INumericTickGenerationOptions#min
-         * @type Number
-         * @optional
-         */
-        /**
-         * The maximum value of the ticks. If not specified, the maximum of the data range is used to calculate the tick maximum
-         * @name INumericTickGenerationOptions#max
-         * @type Number
-         * @optional
-         */
-
-        /**
-         * Generate a set of linear ticks
-         * @method Chart.Ticks.generators.linear
-         * @param generationOptions {INumericTickGenerationOptions} the options used to generate the ticks
-         * @param dataRange {IRange} the range of the data
-         * @returns {Array<Number>} array of tick values
-         */
-        linear: function(generationOptions, dataRange) {
-          var ticks = [];
-          // To get a "nice" value for the tick spacing, we will use the appropriately named
-          // "nice number" algorithm. See http://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks
-          // for details.
-
-          var spacing;
-          if (generationOptions.stepSize && generationOptions.stepSize > 0) {
-            spacing = generationOptions.stepSize;
-          } else {
-            var niceRange = helpers.niceNum(dataRange.max - dataRange.min, false);
-            spacing = helpers.niceNum(niceRange / (generationOptions.maxTicks - 1), true);
-          }
-          var niceMin = Math.floor(dataRange.min / spacing) * spacing;
-          var niceMax = Math.ceil(dataRange.max / spacing) * spacing;
-
-          // If min, max and stepSize is set and they make an evenly spaced scale use it.
-          if (generationOptions.min && generationOptions.max && generationOptions.stepSize) {
-            // If very close to our whole number, use it.
-            if (helpers.almostWhole((generationOptions.max - generationOptions.min) / generationOptions.stepSize, spacing / 1000)) {
-              niceMin = generationOptions.min;
-              niceMax = generationOptions.max;
-            }
-          }
-
-          var numSpaces = (niceMax - niceMin) / spacing;
-          // If very close to our rounded value, use it.
-          if (helpers.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {
-            numSpaces = Math.round(numSpaces);
-          } else {
-            numSpaces = Math.ceil(numSpaces);
-          }
-
-          // Put the values into the ticks array
-          ticks.push(generationOptions.min !== undefined ? generationOptions.min : niceMin);
-          for (var j = 1; j < numSpaces; ++j) {
-            ticks.push(niceMin + (j * spacing));
-          }
-          ticks.push(generationOptions.max !== undefined ? generationOptions.max : niceMax);
-
-          return ticks;
-        },
-
-        /**
-         * Generate a set of logarithmic ticks
-         * @method Chart.Ticks.generators.logarithmic
-         * @param generationOptions {INumericTickGenerationOptions} the options used to generate the ticks
-         * @param dataRange {IRange} the range of the data
-         * @returns {Array<Number>} array of tick values
-         */
-        logarithmic: function(generationOptions, dataRange) {
-          var ticks = [];
-          var getValueOrDefault = helpers.getValueOrDefault;
-
-          // Figure out what the max number of ticks we can support it is based on the size of
-          // the axis area. For now, we say that the minimum tick spacing in pixels must be 50
-          // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on
-          // the graph
-          var tickVal = getValueOrDefault(generationOptions.min, Math.pow(10, Math.floor(helpers.log10(dataRange.min))));
-
-          var endExp = Math.floor(helpers.log10(dataRange.max));
-          var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));
-          var exp;
-          var significand;
-
-          if (tickVal === 0) {
-            exp = Math.floor(helpers.log10(dataRange.minNotZero));
-            significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));
-
-            ticks.push(tickVal);
-            tickVal = significand * Math.pow(10, exp);
-          } else {
-            exp = Math.floor(helpers.log10(tickVal));
-            significand = Math.floor(tickVal / Math.pow(10, exp));
-          }
-
-          do {
-            ticks.push(tickVal);
-
-            ++significand;
-            if (significand === 10) {
-              significand = 1;
-              ++exp;
-            }
-
-            tickVal = significand * Math.pow(10, exp);
-          } while (exp < endExp || (exp === endExp && significand < endSignificand));
-
-          var lastTick = getValueOrDefault(generationOptions.max, tickVal);
-          ticks.push(lastTick);
-
-          return ticks;
-        }
-      },
-
-      /**
-       * Namespace to hold formatters for different types of ticks
-       * @namespace Chart.Ticks.formatters
-       */
-      formatters: {
-        /**
-         * Formatter for value labels
-         * @method Chart.Ticks.formatters.values
-         * @param value the value to display
-         * @return {String|Array} the label to display
-         */
-        values: function(value) {
-          return helpers.isArray(value) ? value : '' + value;
-        },
-
-        /**
-         * Formatter for linear numeric ticks
-         * @method Chart.Ticks.formatters.linear
-         * @param tickValue {Number} the value to be formatted
-         * @param index {Number} the position of the tickValue parameter in the ticks array
-         * @param ticks {Array<Number>} the list of ticks being converted
-         * @return {String} string representation of the tickValue parameter
-         */
-        linear: function(tickValue, index, ticks) {
-          // If we have lots of ticks, don't use the ones
-          var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];
-
-          // If we have a number like 2.5 as the delta, figure out how many decimal places we need
-          if (Math.abs(delta) > 1) {
-            if (tickValue !== Math.floor(tickValue)) {
-              // not an integer
-              delta = tickValue - Math.floor(tickValue);
-            }
-          }
-
-          var logDelta = helpers.log10(Math.abs(delta));
-          var tickString = '';
-
-          if (tickValue !== 0) {
-            var numDecimal = -1 * Math.floor(logDelta);
-            numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places
-            tickString = tickValue.toFixed(numDecimal);
-          } else {
-            tickString = '0'; // never show decimal places for 0
-          }
-
-          return tickString;
-        },
-
-        logarithmic: function(tickValue, index, ticks) {
-          var remain = tickValue / (Math.pow(10, Math.floor(helpers.log10(tickValue))));
-
-          if (tickValue === 0) {
-            return '0';
-          } else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {
-            return tickValue.toExponential();
-          }
-          return '';
-        }
-      }
-    };
-  };
-
-},{}],35:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    Chart.defaults.global.title = {
-      display: false,
-      position: 'top',
-      fullWidth: true, // marks that this box should take the full width of the canvas (pushing down other boxes)
-
-      fontStyle: 'bold',
-      padding: 10,
-
-      // actual title
-      text: ''
-    };
-
-    var noop = helpers.noop;
-    Chart.Title = Chart.Element.extend({
-
-      initialize: function(config) {
-        var me = this;
-        helpers.extend(me, config);
-
-        // Contains hit boxes for each dataset (in dataset order)
-        me.legendHitBoxes = [];
-      },
-
-      // These methods are ordered by lifecycle. Utilities then follow.
-
-      beforeUpdate: noop,
-      update: function(maxWidth, maxHeight, margins) {
-        var me = this;
-
-        // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)
-        me.beforeUpdate();
-
-        // Absorb the master measurements
-        me.maxWidth = maxWidth;
-        me.maxHeight = maxHeight;
-        me.margins = margins;
-
-        // Dimensions
-        me.beforeSetDimensions();
-        me.setDimensions();
-        me.afterSetDimensions();
-        // Labels
-        me.beforeBuildLabels();
-        me.buildLabels();
-        me.afterBuildLabels();
-
-        // Fit
-        me.beforeFit();
-        me.fit();
-        me.afterFit();
-        //
-        me.afterUpdate();
-
-        return me.minSize;
-
-      },
-      afterUpdate: noop,
-
-      //
-
-      beforeSetDimensions: noop,
-      setDimensions: function() {
-        var me = this;
-        // Set the unconstrained dimension before label rotation
-        if (me.isHorizontal()) {
-          // Reset position before calculating rotation
-          me.width = me.maxWidth;
-          me.left = 0;
-          me.right = me.width;
-        } else {
-          me.height = me.maxHeight;
-
-          // Reset position before calculating rotation
-          me.top = 0;
-          me.bottom = me.height;
-        }
-
-        // Reset padding
-        me.paddingLeft = 0;
-        me.paddingTop = 0;
-        me.paddingRight = 0;
-        me.paddingBottom = 0;
-
-        // Reset minSize
-        me.minSize = {
-          width: 0,
-          height: 0
-        };
-      },
-      afterSetDimensions: noop,
-
-      //
-
-      beforeBuildLabels: noop,
-      buildLabels: noop,
-      afterBuildLabels: noop,
-
-      //
-
-      beforeFit: noop,
-      fit: function() {
-        var me = this,
-          valueOrDefault = helpers.getValueOrDefault,
-          opts = me.options,
-          globalDefaults = Chart.defaults.global,
-          display = opts.display,
-          fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize),
-          minSize = me.minSize;
-
-        if (me.isHorizontal()) {
-          minSize.width = me.maxWidth; // fill all the width
-          minSize.height = display ? fontSize + (opts.padding * 2) : 0;
-        } else {
-          minSize.width = display ? fontSize + (opts.padding * 2) : 0;
-          minSize.height = me.maxHeight; // fill all the height
-        }
-
-        me.width = minSize.width;
-        me.height = minSize.height;
-
-      },
-      afterFit: noop,
-
-      // Shared Methods
-      isHorizontal: function() {
-        var pos = this.options.position;
-        return pos === 'top' || pos === 'bottom';
-      },
-
-      // Actually draw the title block on the canvas
-      draw: function() {
-        var me = this,
-          ctx = me.ctx,
-          valueOrDefault = helpers.getValueOrDefault,
-          opts = me.options,
-          globalDefaults = Chart.defaults.global;
-
-        if (opts.display) {
-          var fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize),
-            fontStyle = valueOrDefault(opts.fontStyle, globalDefaults.defaultFontStyle),
-            fontFamily = valueOrDefault(opts.fontFamily, globalDefaults.defaultFontFamily),
-            titleFont = helpers.fontString(fontSize, fontStyle, fontFamily),
-            rotation = 0,
-            titleX,
-            titleY,
-            top = me.top,
-            left = me.left,
-            bottom = me.bottom,
-            right = me.right,
-            maxWidth;
-
-          ctx.fillStyle = valueOrDefault(opts.fontColor, globalDefaults.defaultFontColor); // render in correct colour
-          ctx.font = titleFont;
-
-          // Horizontal
-          if (me.isHorizontal()) {
-            titleX = left + ((right - left) / 2); // midpoint of the width
-            titleY = top + ((bottom - top) / 2); // midpoint of the height
-            maxWidth = right - left;
-          } else {
-            titleX = opts.position === 'left' ? left + (fontSize / 2) : right - (fontSize / 2);
-            titleY = top + ((bottom - top) / 2);
-            maxWidth = bottom - top;
-            rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);
-          }
-
-          ctx.save();
-          ctx.translate(titleX, titleY);
-          ctx.rotate(rotation);
-          ctx.textAlign = 'center';
-          ctx.textBaseline = 'middle';
-          ctx.fillText(opts.text, 0, 0, maxWidth);
-          ctx.restore();
-        }
-      }
-    });
-
-    function createNewTitleBlockAndAttach(chartInstance, titleOpts) {
-      var title = new Chart.Title({
-        ctx: chartInstance.chart.ctx,
-        options: titleOpts,
-        chart: chartInstance
-      });
-      chartInstance.titleBlock = title;
-      Chart.layoutService.addBox(chartInstance, title);
-    }
-
-    // Register the title plugin
-    Chart.plugins.register({
-      beforeInit: function(chartInstance) {
-        var titleOpts = chartInstance.options.title;
-
-        if (titleOpts) {
-          createNewTitleBlockAndAttach(chartInstance, titleOpts);
-        }
-      },
-      beforeUpdate: function(chartInstance) {
-        var titleOpts = chartInstance.options.title;
-
-        if (titleOpts) {
-          titleOpts = helpers.configMerge(Chart.defaults.global.title, titleOpts);
-
-          if (chartInstance.titleBlock) {
-            chartInstance.titleBlock.options = titleOpts;
-          } else {
-            createNewTitleBlockAndAttach(chartInstance, titleOpts);
-          }
-        } else {
-          Chart.layoutService.removeBox(chartInstance, chartInstance.titleBlock);
-          delete chartInstance.titleBlock;
-        }
-      }
-    });
-  };
-
-},{}],36:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    /**
-     * Helper method to merge the opacity into a color
-     */
-    function mergeOpacity(colorString, opacity) {
-      var color = helpers.color(colorString);
-      return color.alpha(opacity * color.alpha()).rgbaString();
-    }
-
-    Chart.defaults.global.tooltips = {
-      enabled: true,
-      custom: null,
-      mode: 'nearest',
-      position: 'average',
-      intersect: true,
-      backgroundColor: 'rgba(0,0,0,0.8)',
-      titleFontStyle: 'bold',
-      titleSpacing: 2,
-      titleMarginBottom: 6,
-      titleFontColor: '#fff',
-      titleAlign: 'left',
-      bodySpacing: 2,
-      bodyFontColor: '#fff',
-      bodyAlign: 'left',
-      footerFontStyle: 'bold',
-      footerSpacing: 2,
-      footerMarginTop: 6,
-      footerFontColor: '#fff',
-      footerAlign: 'left',
-      yPadding: 6,
-      xPadding: 6,
-      caretSize: 5,
-      cornerRadius: 6,
-      multiKeyBackground: '#fff',
-      displayColors: true,
-      callbacks: {
-        // Args are: (tooltipItems, data)
-        beforeTitle: helpers.noop,
-        title: function(tooltipItems, data) {
-          // Pick first xLabel for now
-          var title = '';
-          var labels = data.labels;
-          var labelCount = labels ? labels.length : 0;
-
-          if (tooltipItems.length > 0) {
-            var item = tooltipItems[0];
-
-            if (item.xLabel) {
-              title = item.xLabel;
-            } else if (labelCount > 0 && item.index < labelCount) {
-              title = labels[item.index];
-            }
-          }
-
-          return title;
-        },
-        afterTitle: helpers.noop,
-
-        // Args are: (tooltipItems, data)
-        beforeBody: helpers.noop,
-
-        // Args are: (tooltipItem, data)
-        beforeLabel: helpers.noop,
-        label: function(tooltipItem, data) {
-          var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || '';
-          return datasetLabel + ': ' + tooltipItem.yLabel;
-        },
-        labelColor: function(tooltipItem, chartInstance) {
-          var meta = chartInstance.getDatasetMeta(tooltipItem.datasetIndex);
-          var activeElement = meta.data[tooltipItem.index];
-          var view = activeElement._view;
-          return {
-            borderColor: view.borderColor,
-            backgroundColor: view.backgroundColor
-          };
-        },
-        afterLabel: helpers.noop,
-
-        // Args are: (tooltipItems, data)
-        afterBody: helpers.noop,
-
-        // Args are: (tooltipItems, data)
-        beforeFooter: helpers.noop,
-        footer: helpers.noop,
-        afterFooter: helpers.noop
-      }
-    };
-
-    // Helper to push or concat based on if the 2nd parameter is an array or not
-    function pushOrConcat(base, toPush) {
-      if (toPush) {
-        if (helpers.isArray(toPush)) {
-          // base = base.concat(toPush);
-          Array.prototype.push.apply(base, toPush);
-        } else {
-          base.push(toPush);
-        }
-      }
-
-      return base;
-    }
-
-    // Private helper to create a tooltip item model
-    // @param element : the chart element (point, arc, bar) to create the tooltip item for
-    // @return : new tooltip item
-    function createTooltipItem(element) {
-      var xScale = element._xScale;
-      var yScale = element._yScale || element._scale; // handle radar || polarArea charts
-      var index = element._index,
-        datasetIndex = element._datasetIndex;
-
-      return {
-        xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',
-        yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',
-        index: index,
-        datasetIndex: datasetIndex,
-        x: element._model.x,
-        y: element._model.y
-      };
-    }
-
-    /**
-     * Helper to get the reset model for the tooltip
-     * @param tooltipOpts {Object} the tooltip options
-     */
-    function getBaseModel(tooltipOpts) {
-      var globalDefaults = Chart.defaults.global;
-      var getValueOrDefault = helpers.getValueOrDefault;
-
-      return {
-        // Positioning
-        xPadding: tooltipOpts.xPadding,
-        yPadding: tooltipOpts.yPadding,
-        xAlign: tooltipOpts.xAlign,
-        yAlign: tooltipOpts.yAlign,
-
-        // Body
-        bodyFontColor: tooltipOpts.bodyFontColor,
-        _bodyFontFamily: getValueOrDefault(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),
-        _bodyFontStyle: getValueOrDefault(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),
-        _bodyAlign: tooltipOpts.bodyAlign,
-        bodyFontSize: getValueOrDefault(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),
-        bodySpacing: tooltipOpts.bodySpacing,
-
-        // Title
-        titleFontColor: tooltipOpts.titleFontColor,
-        _titleFontFamily: getValueOrDefault(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),
-        _titleFontStyle: getValueOrDefault(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),
-        titleFontSize: getValueOrDefault(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),
-        _titleAlign: tooltipOpts.titleAlign,
-        titleSpacing: tooltipOpts.titleSpacing,
-        titleMarginBottom: tooltipOpts.titleMarginBottom,
-
-        // Footer
-        footerFontColor: tooltipOpts.footerFontColor,
-        _footerFontFamily: getValueOrDefault(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),
-        _footerFontStyle: getValueOrDefault(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),
-        footerFontSize: getValueOrDefault(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),
-        _footerAlign: tooltipOpts.footerAlign,
-        footerSpacing: tooltipOpts.footerSpacing,
-        footerMarginTop: tooltipOpts.footerMarginTop,
-
-        // Appearance
-        caretSize: tooltipOpts.caretSize,
-        cornerRadius: tooltipOpts.cornerRadius,
-        backgroundColor: tooltipOpts.backgroundColor,
-        opacity: 0,
-        legendColorBackground: tooltipOpts.multiKeyBackground,
-        displayColors: tooltipOpts.displayColors
-      };
-    }
-
-    /**
-     * Get the size of the tooltip
-     */
-    function getTooltipSize(tooltip, model) {
-      var ctx = tooltip._chart.ctx;
-
-      var height = model.yPadding * 2; // Tooltip Padding
-      var width = 0;
-
-      // Count of all lines in the body
-      var body = model.body;
-      var combinedBodyLength = body.reduce(function(count, bodyItem) {
-        return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;
-      }, 0);
-      combinedBodyLength += model.beforeBody.length + model.afterBody.length;
-
-      var titleLineCount = model.title.length;
-      var footerLineCount = model.footer.length;
-      var titleFontSize = model.titleFontSize,
-        bodyFontSize = model.bodyFontSize,
-        footerFontSize = model.footerFontSize;
-
-      height += titleLineCount * titleFontSize; // Title Lines
-      height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing
-      height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin
-      height += combinedBodyLength * bodyFontSize; // Body Lines
-      height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing
-      height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin
-      height += footerLineCount * (footerFontSize); // Footer Lines
-      height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing
-
-      // Title width
-      var widthPadding = 0;
-      var maxLineWidth = function(line) {
-        width = Math.max(width, ctx.measureText(line).width + widthPadding);
-      };
-
-      ctx.font = helpers.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);
-      helpers.each(model.title, maxLineWidth);
-
-      // Body width
-      ctx.font = helpers.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);
-      helpers.each(model.beforeBody.concat(model.afterBody), maxLineWidth);
-
-      // Body lines may include some extra width due to the color box
-      widthPadding = model.displayColors ? (bodyFontSize + 2) : 0;
-      helpers.each(body, function(bodyItem) {
-        helpers.each(bodyItem.before, maxLineWidth);
-        helpers.each(bodyItem.lines, maxLineWidth);
-        helpers.each(bodyItem.after, maxLineWidth);
-      });
-
-      // Reset back to 0
-      widthPadding = 0;
-
-      // Footer width
-      ctx.font = helpers.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);
-      helpers.each(model.footer, maxLineWidth);
-
-      // Add padding
-      width += 2 * model.xPadding;
-
-      return {
-        width: width,
-        height: height
-      };
-    }
-
-    /**
-     * Helper to get the alignment of a tooltip given the size
-     */
-    function determineAlignment(tooltip, size) {
-      var model = tooltip._model;
-      var chart = tooltip._chart;
-      var chartArea = tooltip._chartInstance.chartArea;
-      var xAlign = 'center';
-      var yAlign = 'center';
-
-      if (model.y < size.height) {
-        yAlign = 'top';
-      } else if (model.y > (chart.height - size.height)) {
-        yAlign = 'bottom';
-      }
-
-      var lf, rf; // functions to determine left, right alignment
-      var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart
-      var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges
-      var midX = (chartArea.left + chartArea.right) / 2;
-      var midY = (chartArea.top + chartArea.bottom) / 2;
-
-      if (yAlign === 'center') {
-        lf = function(x) {
-          return x <= midX;
-        };
-        rf = function(x) {
-          return x > midX;
-        };
-      } else {
-        lf = function(x) {
-          return x <= (size.width / 2);
-        };
-        rf = function(x) {
-          return x >= (chart.width - (size.width / 2));
-        };
-      }
-
-      olf = function(x) {
-        return x + size.width > chart.width;
-      };
-      orf = function(x) {
-        return x - size.width < 0;
-      };
-      yf = function(y) {
-        return y <= midY ? 'top' : 'bottom';
-      };
-
-      if (lf(model.x)) {
-        xAlign = 'left';
-
-        // Is tooltip too wide and goes over the right side of the chart.?
-        if (olf(model.x)) {
-          xAlign = 'center';
-          yAlign = yf(model.y);
-        }
-      } else if (rf(model.x)) {
-        xAlign = 'right';
-
-        // Is tooltip too wide and goes outside left edge of canvas?
-        if (orf(model.x)) {
-          xAlign = 'center';
-          yAlign = yf(model.y);
-        }
-      }
-
-      var opts = tooltip._options;
-      return {
-        xAlign: opts.xAlign ? opts.xAlign : xAlign,
-        yAlign: opts.yAlign ? opts.yAlign : yAlign
-      };
-    }
-
-    /**
-     * @Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment
-     */
-    function getBackgroundPoint(vm, size, alignment) {
-      // Background Position
-      var x = vm.x;
-      var y = vm.y;
-
-      var caretSize = vm.caretSize,
-        caretPadding = vm.caretPadding,
-        cornerRadius = vm.cornerRadius,
-        xAlign = alignment.xAlign,
-        yAlign = alignment.yAlign,
-        paddingAndSize = caretSize + caretPadding,
-        radiusAndPadding = cornerRadius + caretPadding;
-
-      if (xAlign === 'right') {
-        x -= size.width;
-      } else if (xAlign === 'center') {
-        x -= (size.width / 2);
-      }
-
-      if (yAlign === 'top') {
-        y += paddingAndSize;
-      } else if (yAlign === 'bottom') {
-        y -= size.height + paddingAndSize;
-      } else {
-        y -= (size.height / 2);
-      }
-
-      if (yAlign === 'center') {
-        if (xAlign === 'left') {
-          x += paddingAndSize;
-        } else if (xAlign === 'right') {
-          x -= paddingAndSize;
-        }
-      } else if (xAlign === 'left') {
-        x -= radiusAndPadding;
-      } else if (xAlign === 'right') {
-        x += radiusAndPadding;
-      }
-
-      return {
-        x: x,
-        y: y
-      };
-    }
-
-    Chart.Tooltip = Chart.Element.extend({
-      initialize: function() {
-        this._model = getBaseModel(this._options);
-      },
-
-      // Get the title
-      // Args are: (tooltipItem, data)
-      getTitle: function() {
-        var me = this;
-        var opts = me._options;
-        var callbacks = opts.callbacks;
-
-        var beforeTitle = callbacks.beforeTitle.apply(me, arguments),
-          title = callbacks.title.apply(me, arguments),
-          afterTitle = callbacks.afterTitle.apply(me, arguments);
-
-        var lines = [];
-        lines = pushOrConcat(lines, beforeTitle);
-        lines = pushOrConcat(lines, title);
-        lines = pushOrConcat(lines, afterTitle);
-
-        return lines;
-      },
-
-      // Args are: (tooltipItem, data)
-      getBeforeBody: function() {
-        var lines = this._options.callbacks.beforeBody.apply(this, arguments);
-        return helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];
-      },
-
-      // Args are: (tooltipItem, data)
-      getBody: function(tooltipItems, data) {
-        var me = this;
-        var callbacks = me._options.callbacks;
-        var bodyItems = [];
-
-        helpers.each(tooltipItems, function(tooltipItem) {
-          var bodyItem = {
-            before: [],
-            lines: [],
-            after: []
-          };
-          pushOrConcat(bodyItem.before, callbacks.beforeLabel.call(me, tooltipItem, data));
-          pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));
-          pushOrConcat(bodyItem.after, callbacks.afterLabel.call(me, tooltipItem, data));
-
-          bodyItems.push(bodyItem);
-        });
-
-        return bodyItems;
-      },
-
-      // Args are: (tooltipItem, data)
-      getAfterBody: function() {
-        var lines = this._options.callbacks.afterBody.apply(this, arguments);
-        return helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];
-      },
-
-      // Get the footer and beforeFooter and afterFooter lines
-      // Args are: (tooltipItem, data)
-      getFooter: function() {
-        var me = this;
-        var callbacks = me._options.callbacks;
-
-        var beforeFooter = callbacks.beforeFooter.apply(me, arguments);
-        var footer = callbacks.footer.apply(me, arguments);
-        var afterFooter = callbacks.afterFooter.apply(me, arguments);
-
-        var lines = [];
-        lines = pushOrConcat(lines, beforeFooter);
-        lines = pushOrConcat(lines, footer);
-        lines = pushOrConcat(lines, afterFooter);
-
-        return lines;
-      },
-
-      update: function(changed) {
-        var me = this;
-        var opts = me._options;
-
-        // Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition
-        // that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time
-        // which breaks any animations.
-        var existingModel = me._model;
-        var model = me._model = getBaseModel(opts);
-        var active = me._active;
-
-        var data = me._data;
-        var chartInstance = me._chartInstance;
-
-        // In the case where active.length === 0 we need to keep these at existing values for good animations
-        var alignment = {
-          xAlign: existingModel.xAlign,
-          yAlign: existingModel.yAlign
-        };
-        var backgroundPoint = {
-          x: existingModel.x,
-          y: existingModel.y
-        };
-        var tooltipSize = {
-          width: existingModel.width,
-          height: existingModel.height
-        };
-        var tooltipPosition = {
-          x: existingModel.caretX,
-          y: existingModel.caretY
-        };
-
-        var i, len;
-
-        if (active.length) {
-          model.opacity = 1;
-
-          var labelColors = [];
-          tooltipPosition = Chart.Tooltip.positioners[opts.position](active, me._eventPosition);
-
-          var tooltipItems = [];
-          for (i = 0, len = active.length; i < len; ++i) {
-            tooltipItems.push(createTooltipItem(active[i]));
-          }
-
-          // If the user provided a filter function, use it to modify the tooltip items
-          if (opts.filter) {
-            tooltipItems = tooltipItems.filter(function(a) {
-              return opts.filter(a, data);
-            });
-          }
-
-          // If the user provided a sorting function, use it to modify the tooltip items
-          if (opts.itemSort) {
-            tooltipItems = tooltipItems.sort(function(a, b) {
-              return opts.itemSort(a, b, data);
-            });
-          }
-
-          // Determine colors for boxes
-          helpers.each(tooltipItems, function(tooltipItem) {
-            labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, chartInstance));
-          });
-
-          // Build the Text Lines
-          model.title = me.getTitle(tooltipItems, data);
-          model.beforeBody = me.getBeforeBody(tooltipItems, data);
-          model.body = me.getBody(tooltipItems, data);
-          model.afterBody = me.getAfterBody(tooltipItems, data);
-          model.footer = me.getFooter(tooltipItems, data);
-
-          // Initial positioning and colors
-          model.x = Math.round(tooltipPosition.x);
-          model.y = Math.round(tooltipPosition.y);
-          model.caretPadding = helpers.getValueOrDefault(tooltipPosition.padding, 2);
-          model.labelColors = labelColors;
-
-          // data points
-          model.dataPoints = tooltipItems;
-
-          // We need to determine alignment of the tooltip
-          tooltipSize = getTooltipSize(this, model);
-          alignment = determineAlignment(this, tooltipSize);
-          // Final Size and Position
-          backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment);
-        } else {
-          model.opacity = 0;
-        }
-
-        model.xAlign = alignment.xAlign;
-        model.yAlign = alignment.yAlign;
-        model.x = backgroundPoint.x;
-        model.y = backgroundPoint.y;
-        model.width = tooltipSize.width;
-        model.height = tooltipSize.height;
-
-        // Point where the caret on the tooltip points to
-        model.caretX = tooltipPosition.x;
-        model.caretY = tooltipPosition.y;
-
-        me._model = model;
-
-        if (changed && opts.custom) {
-          opts.custom.call(me, model);
-        }
-
-        return me;
-      },
-      drawCaret: function(tooltipPoint, size, opacity) {
-        var vm = this._view;
-        var ctx = this._chart.ctx;
-        var x1, x2, x3;
-        var y1, y2, y3;
-        var caretSize = vm.caretSize;
-        var cornerRadius = vm.cornerRadius;
-        var xAlign = vm.xAlign,
-          yAlign = vm.yAlign;
-        var ptX = tooltipPoint.x,
-          ptY = tooltipPoint.y;
-        var width = size.width,
-          height = size.height;
-
-        if (yAlign === 'center') {
-          // Left or right side
-          if (xAlign === 'left') {
-            x1 = ptX;
-            x2 = x1 - caretSize;
-            x3 = x1;
-          } else {
-            x1 = ptX + width;
-            x2 = x1 + caretSize;
-            x3 = x1;
-          }
-
-          y2 = ptY + (height / 2);
-          y1 = y2 - caretSize;
-          y3 = y2 + caretSize;
-        } else {
-          if (xAlign === 'left') {
-            x1 = ptX + cornerRadius;
-            x2 = x1 + caretSize;
-            x3 = x2 + caretSize;
-          } else if (xAlign === 'right') {
-            x1 = ptX + width - cornerRadius;
-            x2 = x1 - caretSize;
-            x3 = x2 - caretSize;
-          } else {
-            x2 = ptX + (width / 2);
-            x1 = x2 - caretSize;
-            x3 = x2 + caretSize;
-          }
-
-          if (yAlign === 'top') {
-            y1 = ptY;
-            y2 = y1 - caretSize;
-            y3 = y1;
-          } else {
-            y1 = ptY + height;
-            y2 = y1 + caretSize;
-            y3 = y1;
-          }
-        }
-
-        ctx.fillStyle = mergeOpacity(vm.backgroundColor, opacity);
-        ctx.beginPath();
-        ctx.moveTo(x1, y1);
-        ctx.lineTo(x2, y2);
-        ctx.lineTo(x3, y3);
-        ctx.closePath();
-        ctx.fill();
-      },
-      drawTitle: function(pt, vm, ctx, opacity) {
-        var title = vm.title;
-
-        if (title.length) {
-          ctx.textAlign = vm._titleAlign;
-          ctx.textBaseline = 'top';
-
-          var titleFontSize = vm.titleFontSize,
-            titleSpacing = vm.titleSpacing;
-
-          ctx.fillStyle = mergeOpacity(vm.titleFontColor, opacity);
-          ctx.font = helpers.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);
-
-          var i, len;
-          for (i = 0, len = title.length; i < len; ++i) {
-            ctx.fillText(title[i], pt.x, pt.y);
-            pt.y += titleFontSize + titleSpacing; // Line Height and spacing
-
-            if (i + 1 === title.length) {
-              pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing
-            }
-          }
-        }
-      },
-      drawBody: function(pt, vm, ctx, opacity) {
-        var bodyFontSize = vm.bodyFontSize;
-        var bodySpacing = vm.bodySpacing;
-        var body = vm.body;
-
-        ctx.textAlign = vm._bodyAlign;
-        ctx.textBaseline = 'top';
-
-        var textColor = mergeOpacity(vm.bodyFontColor, opacity);
-        ctx.fillStyle = textColor;
-        ctx.font = helpers.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);
-
-        // Before Body
-        var xLinePadding = 0;
-        var fillLineOfText = function(line) {
-          ctx.fillText(line, pt.x + xLinePadding, pt.y);
-          pt.y += bodyFontSize + bodySpacing;
-        };
-
-        // Before body lines
-        helpers.each(vm.beforeBody, fillLineOfText);
-
-        var drawColorBoxes = vm.displayColors;
-        xLinePadding = drawColorBoxes ? (bodyFontSize + 2) : 0;
-
-        // Draw body lines now
-        helpers.each(body, function(bodyItem, i) {
-          helpers.each(bodyItem.before, fillLineOfText);
-
-          helpers.each(bodyItem.lines, function(line) {
-            // Draw Legend-like boxes if needed
-            if (drawColorBoxes) {
-              // Fill a white rect so that colours merge nicely if the opacity is < 1
-              ctx.fillStyle = mergeOpacity(vm.legendColorBackground, opacity);
-              ctx.fillRect(pt.x, pt.y, bodyFontSize, bodyFontSize);
-
-              // Border
-              ctx.strokeStyle = mergeOpacity(vm.labelColors[i].borderColor, opacity);
-              ctx.strokeRect(pt.x, pt.y, bodyFontSize, bodyFontSize);
-
-              // Inner square
-              ctx.fillStyle = mergeOpacity(vm.labelColors[i].backgroundColor, opacity);
-              ctx.fillRect(pt.x + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);
-
-              ctx.fillStyle = textColor;
-            }
-
-            fillLineOfText(line);
-          });
-
-          helpers.each(bodyItem.after, fillLineOfText);
-        });
-
-        // Reset back to 0 for after body
-        xLinePadding = 0;
-
-        // After body lines
-        helpers.each(vm.afterBody, fillLineOfText);
-        pt.y -= bodySpacing; // Remove last body spacing
-      },
-      drawFooter: function(pt, vm, ctx, opacity) {
-        var footer = vm.footer;
-
-        if (footer.length) {
-          pt.y += vm.footerMarginTop;
-
-          ctx.textAlign = vm._footerAlign;
-          ctx.textBaseline = 'top';
-
-          ctx.fillStyle = mergeOpacity(vm.footerFontColor, opacity);
-          ctx.font = helpers.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);
-
-          helpers.each(footer, function(line) {
-            ctx.fillText(line, pt.x, pt.y);
-            pt.y += vm.footerFontSize + vm.footerSpacing;
-          });
-        }
-      },
-      drawBackground: function(pt, vm, ctx, tooltipSize, opacity) {
-        ctx.fillStyle = mergeOpacity(vm.backgroundColor, opacity);
-        helpers.drawRoundedRectangle(ctx, pt.x, pt.y, tooltipSize.width, tooltipSize.height, vm.cornerRadius);
-        ctx.fill();
-      },
-      draw: function() {
-        var ctx = this._chart.ctx;
-        var vm = this._view;
-
-        if (vm.opacity === 0) {
-          return;
-        }
-
-        var tooltipSize = {
-          width: vm.width,
-          height: vm.height
-        };
-        var pt = {
-          x: vm.x,
-          y: vm.y
-        };
-
-        // IE11/Edge does not like very small opacities, so snap to 0
-        var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;
-
-        if (this._options.enabled) {
-          // Draw Background
-          this.drawBackground(pt, vm, ctx, tooltipSize, opacity);
-
-          // Draw Caret
-          this.drawCaret(pt, tooltipSize, opacity);
-
-          // Draw Title, Body, and Footer
-          pt.x += vm.xPadding;
-          pt.y += vm.yPadding;
-
-          // Titles
-          this.drawTitle(pt, vm, ctx, opacity);
-
-          // Body
-          this.drawBody(pt, vm, ctx, opacity);
-
-          // Footer
-          this.drawFooter(pt, vm, ctx, opacity);
-        }
-      },
-
-      /**
-       * Handle an event
-       * @private
-       * @param {IEvent} event - The event to handle
-       * @returns {Boolean} true if the tooltip changed
-       */
-      handleEvent: function(e) {
-        var me = this;
-        var options = me._options;
-        var changed = false;
-
-        me._lastActive = me._lastActive || [];
-
-        // Find Active Elements for tooltips
-        if (e.type === 'mouseout') {
-          me._active = [];
-        } else {
-          me._active = me._chartInstance.getElementsAtEventForMode(e, options.mode, options);
-        }
-
-        // Remember Last Actives
-        changed = !helpers.arrayEquals(me._active, me._lastActive);
-        me._lastActive = me._active;
-
-        if (options.enabled || options.custom) {
-          me._eventPosition = {
-            x: e.x,
-            y: e.y
-          };
-
-          var model = me._model;
-          me.update(true);
-          me.pivot();
-
-          // See if our tooltip position changed
-          changed |= (model.x !== me._model.x) || (model.y !== me._model.y);
-        }
-
-        return changed;
-      }
-    });
-
-    /**
-     * @namespace Chart.Tooltip.positioners
-     */
-    Chart.Tooltip.positioners = {
-      /**
-       * Average mode places the tooltip at the average position of the elements shown
-       * @function Chart.Tooltip.positioners.average
-       * @param elements {ChartElement[]} the elements being displayed in the tooltip
-       * @returns {Point} tooltip position
-       */
-      average: function(elements) {
-        if (!elements.length) {
-          return false;
-        }
-
-        var i, len;
-        var x = 0;
-        var y = 0;
-        var count = 0;
-
-        for (i = 0, len = elements.length; i < len; ++i) {
-          var el = elements[i];
-          if (el && el.hasValue()) {
-            var pos = el.tooltipPosition();
-            x += pos.x;
-            y += pos.y;
-            ++count;
-          }
-        }
-
-        return {
-          x: Math.round(x / count),
-          y: Math.round(y / count)
-        };
-      },
-
-      /**
-       * Gets the tooltip position nearest of the item nearest to the event position
-       * @function Chart.Tooltip.positioners.nearest
-       * @param elements {Chart.Element[]} the tooltip elements
-       * @param eventPosition {Point} the position of the event in canvas coordinates
-       * @returns {Point} the tooltip position
-       */
-      nearest: function(elements, eventPosition) {
-        var x = eventPosition.x;
-        var y = eventPosition.y;
-
-        var nearestElement;
-        var minDistance = Number.POSITIVE_INFINITY;
-        var i, len;
-        for (i = 0, len = elements.length; i < len; ++i) {
-          var el = elements[i];
-          if (el && el.hasValue()) {
-            var center = el.getCenterPoint();
-            var d = helpers.distanceBetweenPoints(eventPosition, center);
-
-            if (d < minDistance) {
-              minDistance = d;
-              nearestElement = el;
-            }
-          }
-        }
-
-        if (nearestElement) {
-          var tp = nearestElement.tooltipPosition();
-          x = tp.x;
-          y = tp.y;
-        }
-
-        return {
-          x: x,
-          y: y
-        };
-      }
-    };
-  };
-
-},{}],37:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers,
-      globalOpts = Chart.defaults.global;
-
-    globalOpts.elements.arc = {
-      backgroundColor: globalOpts.defaultColor,
-      borderColor: '#fff',
-      borderWidth: 2
-    };
-
-    Chart.elements.Arc = Chart.Element.extend({
-      inLabelRange: function(mouseX) {
-        var vm = this._view;
-
-        if (vm) {
-          return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));
-        }
-        return false;
-      },
-      inRange: function(chartX, chartY) {
-        var vm = this._view;
-
-        if (vm) {
-          var pointRelativePosition = helpers.getAngleFromPoint(vm, {
-              x: chartX,
-              y: chartY
-            }),
-            angle = pointRelativePosition.angle,
-            distance = pointRelativePosition.distance;
-
-          // Sanitise angle range
-          var startAngle = vm.startAngle;
-          var endAngle = vm.endAngle;
-          while (endAngle < startAngle) {
-            endAngle += 2.0 * Math.PI;
-          }
-          while (angle > endAngle) {
-            angle -= 2.0 * Math.PI;
-          }
-          while (angle < startAngle) {
-            angle += 2.0 * Math.PI;
-          }
-
-          // Check if within the range of the open/close angle
-          var betweenAngles = (angle >= startAngle && angle <= endAngle),
-            withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);
-
-          return (betweenAngles && withinRadius);
-        }
-        return false;
-      },
-      getCenterPoint: function() {
-        var vm = this._view;
-        var halfAngle = (vm.startAngle + vm.endAngle) / 2;
-        var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;
-        return {
-          x: vm.x + Math.cos(halfAngle) * halfRadius,
-          y: vm.y + Math.sin(halfAngle) * halfRadius
-        };
-      },
-      getArea: function() {
-        var vm = this._view;
-        return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));
-      },
-      tooltipPosition: function() {
-        var vm = this._view;
-
-        var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2),
-          rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;
-        return {
-          x: vm.x + (Math.cos(centreAngle) * rangeFromCentre),
-          y: vm.y + (Math.sin(centreAngle) * rangeFromCentre)
-        };
-      },
-      draw: function() {
-
-        var ctx = this._chart.ctx,
-          vm = this._view,
-          sA = vm.startAngle,
-          eA = vm.endAngle;
-
-        ctx.beginPath();
-
-        ctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);
-        ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);
-
-        ctx.closePath();
-        ctx.strokeStyle = vm.borderColor;
-        ctx.lineWidth = vm.borderWidth;
-
-        ctx.fillStyle = vm.backgroundColor;
-
-        ctx.fill();
-        ctx.lineJoin = 'bevel';
-
-        if (vm.borderWidth) {
-          ctx.stroke();
-        }
-      }
-    });
-  };
-
-},{}],38:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-    var globalDefaults = Chart.defaults.global;
-
-    Chart.defaults.global.elements.line = {
-      tension: 0.4,
-      backgroundColor: globalDefaults.defaultColor,
-      borderWidth: 3,
-      borderColor: globalDefaults.defaultColor,
-      borderCapStyle: 'butt',
-      borderDash: [],
-      borderDashOffset: 0.0,
-      borderJoinStyle: 'miter',
-      capBezierPoints: true,
-      fill: true, // do we fill in the area between the line and its base axis
-    };
-
-    Chart.elements.Line = Chart.Element.extend({
-      draw: function() {
-        var me = this;
-        var vm = me._view;
-        var spanGaps = vm.spanGaps;
-        var fillPoint = vm.scaleZero;
-        var loop = me._loop;
-
-        // Handle different fill modes for cartesian lines
-        if (!loop) {
-          if (vm.fill === 'top') {
-            fillPoint = vm.scaleTop;
-          } else if (vm.fill === 'bottom') {
-            fillPoint = vm.scaleBottom;
-          }
-        }
-
-        var ctx = me._chart.ctx;
-        ctx.save();
-
-        // Helper function to draw a line to a point
-        function lineToPoint(previousPoint, point) {
-          var pointVM = point._view;
-          if (point._view.steppedLine === true) {
-            ctx.lineTo(pointVM.x, previousPoint._view.y);
-            ctx.lineTo(pointVM.x, pointVM.y);
-          } else if (point._view.tension === 0) {
-            ctx.lineTo(pointVM.x, pointVM.y);
-          } else {
-            ctx.bezierCurveTo(
-              previousPoint._view.controlPointNextX,
-              previousPoint._view.controlPointNextY,
-              pointVM.controlPointPreviousX,
-              pointVM.controlPointPreviousY,
-              pointVM.x,
-              pointVM.y
-            );
-          }
-        }
-
-        var points = me._children.slice(); // clone array
-        var lastDrawnIndex = -1;
-
-        // If we are looping, adding the first point again
-        if (loop && points.length) {
-          points.push(points[0]);
-        }
-
-        var index, current, previous, currentVM;
-
-        // Fill Line
-        if (points.length && vm.fill) {
-          ctx.beginPath();
-
-          for (index = 0; index < points.length; ++index) {
-            current = points[index];
-            previous = helpers.previousItem(points, index);
-            currentVM = current._view;
-
-            // First point moves to it's starting position no matter what
-            if (index === 0) {
-              if (loop) {
-                ctx.moveTo(fillPoint.x, fillPoint.y);
-              } else {
-                ctx.moveTo(currentVM.x, fillPoint);
-              }
-
-              if (!currentVM.skip) {
-                lastDrawnIndex = index;
-                ctx.lineTo(currentVM.x, currentVM.y);
-              }
-            } else {
-              previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];
-
-              if (currentVM.skip) {
-                // Only do this if this is the first point that is skipped
-                if (!spanGaps && lastDrawnIndex === (index - 1)) {
-                  if (loop) {
-                    ctx.lineTo(fillPoint.x, fillPoint.y);
-                  } else {
-                    ctx.lineTo(previous._view.x, fillPoint);
-                  }
-                }
-              } else {
-                if (lastDrawnIndex !== (index - 1)) {
-                  // There was a gap and this is the first point after the gap. If we've never drawn a point, this is a special case.
-                  // If the first data point is NaN, then there is no real gap to skip
-                  if (spanGaps && lastDrawnIndex !== -1) {
-                    // We are spanning the gap, so simple draw a line to this point
-                    lineToPoint(previous, current);
-                  } else if (loop) {
-                    ctx.lineTo(currentVM.x, currentVM.y);
-                  } else {
-                    ctx.lineTo(currentVM.x, fillPoint);
-                    ctx.lineTo(currentVM.x, currentVM.y);
-                  }
-                } else {
-                  // Line to next point
-                  lineToPoint(previous, current);
-                }
-                lastDrawnIndex = index;
-              }
-            }
-          }
-
-          if (!loop && lastDrawnIndex !== -1) {
-            ctx.lineTo(points[lastDrawnIndex]._view.x, fillPoint);
-          }
-
-          ctx.fillStyle = vm.backgroundColor || globalDefaults.defaultColor;
-          ctx.closePath();
-          ctx.fill();
-        }
-
-        // Stroke Line Options
-        var globalOptionLineElements = globalDefaults.elements.line;
-        ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;
-
-        // IE 9 and 10 do not support line dash
-        if (ctx.setLineDash) {
-          ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);
-        }
-
-        ctx.lineDashOffset = vm.borderDashOffset || globalOptionLineElements.borderDashOffset;
-        ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;
-        ctx.lineWidth = vm.borderWidth || globalOptionLineElements.borderWidth;
-        ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;
-
-        // Stroke Line
-        ctx.beginPath();
-        lastDrawnIndex = -1;
-
-        for (index = 0; index < points.length; ++index) {
-          current = points[index];
-          previous = helpers.previousItem(points, index);
-          currentVM = current._view;
-
-          // First point moves to it's starting position no matter what
-          if (index === 0) {
-            if (!currentVM.skip) {
-              ctx.moveTo(currentVM.x, currentVM.y);
-              lastDrawnIndex = index;
-            }
-          } else {
-            previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];
-
-            if (!currentVM.skip) {
-              if ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {
-                // There was a gap and this is the first point after the gap
-                ctx.moveTo(currentVM.x, currentVM.y);
-              } else {
-                // Line to next point
-                lineToPoint(previous, current);
-              }
-              lastDrawnIndex = index;
-            }
-          }
-        }
-
-        ctx.stroke();
-        ctx.restore();
-      }
-    });
-  };
-
-},{}],39:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers,
-      globalOpts = Chart.defaults.global,
-      defaultColor = globalOpts.defaultColor;
-
-    globalOpts.elements.point = {
-      radius: 3,
-      pointStyle: 'circle',
-      backgroundColor: defaultColor,
-      borderWidth: 1,
-      borderColor: defaultColor,
-      // Hover
-      hitRadius: 1,
-      hoverRadius: 4,
-      hoverBorderWidth: 1
-    };
-
-    function xRange(mouseX) {
-      var vm = this._view;
-      return vm ? (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hitRadius, 2)) : false;
-    }
-
-    function yRange(mouseY) {
-      var vm = this._view;
-      return vm ? (Math.pow(mouseY - vm.y, 2) < Math.pow(vm.radius + vm.hitRadius, 2)) : false;
-    }
-
-    Chart.elements.Point = Chart.Element.extend({
-      inRange: function(mouseX, mouseY) {
-        var vm = this._view;
-        return vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;
-      },
-
-      inLabelRange: xRange,
-      inXRange: xRange,
-      inYRange: yRange,
-
-      getCenterPoint: function() {
-        var vm = this._view;
-        return {
-          x: vm.x,
-          y: vm.y
-        };
-      },
-      getArea: function() {
-        return Math.PI * Math.pow(this._view.radius, 2);
-      },
-      tooltipPosition: function() {
-        var vm = this._view;
-        return {
-          x: vm.x,
-          y: vm.y,
-          padding: vm.radius + vm.borderWidth
-        };
-      },
-      draw: function(chartArea) {
-        var vm = this._view;
-        var model = this._model;
-        var ctx = this._chart.ctx;
-        var pointStyle = vm.pointStyle;
-        var radius = vm.radius;
-        var x = vm.x;
-        var y = vm.y;
-        var color = Chart.helpers.color;
-        var errMargin = 1.01; // 1.01 is margin for Accumulated error. (Especially Edge, IE.)
-        var ratio = 0;
-
-        if (vm.skip) {
-          return;
-        }
-
-        ctx.strokeStyle = vm.borderColor || defaultColor;
-        ctx.lineWidth = helpers.getValueOrDefault(vm.borderWidth, globalOpts.elements.point.borderWidth);
-        ctx.fillStyle = vm.backgroundColor || defaultColor;
-
-        // Cliping for Points.
-        // going out from inner charArea?
-        if ((chartArea !== undefined) && ((model.x < chartArea.left) || (chartArea.right*errMargin < model.x) || (model.y < chartArea.top) || (chartArea.bottom*errMargin < model.y))) {
-          // Point fade out
-          if (model.x < chartArea.left) {
-            ratio = (x - model.x) / (chartArea.left - model.x);
-          } else if (chartArea.right*errMargin < model.x) {
-            ratio = (model.x - x) / (model.x - chartArea.right);
-          } else if (model.y < chartArea.top) {
-            ratio = (y - model.y) / (chartArea.top - model.y);
-          } else if (chartArea.bottom*errMargin < model.y) {
-            ratio = (model.y - y) / (model.y - chartArea.bottom);
-          }
-          ratio = Math.round(ratio*100) / 100;
-          ctx.strokeStyle = color(ctx.strokeStyle).alpha(ratio).rgbString();
-          ctx.fillStyle = color(ctx.fillStyle).alpha(ratio).rgbString();
-        }
-
-        Chart.canvasHelpers.drawPoint(ctx, pointStyle, radius, x, y);
-      }
-    });
-  };
-
-},{}],40:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var globalOpts = Chart.defaults.global;
-
-    globalOpts.elements.rectangle = {
-      backgroundColor: globalOpts.defaultColor,
-      borderWidth: 0,
-      borderColor: globalOpts.defaultColor,
-      borderSkipped: 'bottom'
-    };
-
-    function isVertical(bar) {
-      return bar._view.width !== undefined;
-    }
-
-    /**
-     * Helper function to get the bounds of the bar regardless of the orientation
-     * @private
-     * @param bar {Chart.Element.Rectangle} the bar
-     * @return {Bounds} bounds of the bar
-     */
-    function getBarBounds(bar) {
-      var vm = bar._view;
-      var x1, x2, y1, y2;
-
-      if (isVertical(bar)) {
-        // vertical
-        var halfWidth = vm.width / 2;
-        x1 = vm.x - halfWidth;
-        x2 = vm.x + halfWidth;
-        y1 = Math.min(vm.y, vm.base);
-        y2 = Math.max(vm.y, vm.base);
-      } else {
-        // horizontal bar
-        var halfHeight = vm.height / 2;
-        x1 = Math.min(vm.x, vm.base);
-        x2 = Math.max(vm.x, vm.base);
-        y1 = vm.y - halfHeight;
-        y2 = vm.y + halfHeight;
-      }
-
-      return {
-        left: x1,
-        top: y1,
-        right: x2,
-        bottom: y2
-      };
-    }
-
-    Chart.elements.Rectangle = Chart.Element.extend({
-      draw: function() {
-        var ctx = this._chart.ctx;
-        var vm = this._view;
-        var left, right, top, bottom, signX, signY, borderSkipped;
-        var borderWidth = vm.borderWidth;
-
-        if (!vm.horizontal) {
-          // bar
-          left = vm.x - vm.width / 2;
-          right = vm.x + vm.width / 2;
-          top = vm.y;
-          bottom = vm.base;
-          signX = 1;
-          signY = bottom > top? 1: -1;
-          borderSkipped = vm.borderSkipped || 'bottom';
-        } else {
-          // horizontal bar
-          left = vm.base;
-          right = vm.x;
-          top = vm.y - vm.height / 2;
-          bottom = vm.y + vm.height / 2;
-          signX = right > left? 1: -1;
-          signY = 1;
-          borderSkipped = vm.borderSkipped || 'left';
-        }
-
-        // Canvas doesn't allow us to stroke inside the width so we can
-        // adjust the sizes to fit if we're setting a stroke on the line
-        if (borderWidth) {
-          // borderWidth shold be less than bar width and bar height.
-          var barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom));
-          borderWidth = borderWidth > barSize? barSize: borderWidth;
-          var halfStroke = borderWidth / 2;
-          // Adjust borderWidth when bar top position is near vm.base(zero).
-          var borderLeft = left + (borderSkipped !== 'left'? halfStroke * signX: 0);
-          var borderRight = right + (borderSkipped !== 'right'? -halfStroke * signX: 0);
-          var borderTop = top + (borderSkipped !== 'top'? halfStroke * signY: 0);
-          var borderBottom = bottom + (borderSkipped !== 'bottom'? -halfStroke * signY: 0);
-          // not become a vertical line?
-          if (borderLeft !== borderRight) {
-            top = borderTop;
-            bottom = borderBottom;
-          }
-          // not become a horizontal line?
-          if (borderTop !== borderBottom) {
-            left = borderLeft;
-            right = borderRight;
-          }
-        }
-
-        ctx.beginPath();
-        ctx.fillStyle = vm.backgroundColor;
-        ctx.strokeStyle = vm.borderColor;
-        ctx.lineWidth = borderWidth;
-
-        // Corner points, from bottom-left to bottom-right clockwise
-        // | 1 2 |
-        // | 0 3 |
-        var corners = [
-          [left, bottom],
-          [left, top],
-          [right, top],
-          [right, bottom]
-        ];
-
-        // Find first (starting) corner with fallback to 'bottom'
-        var borders = ['bottom', 'left', 'top', 'right'];
-        var startCorner = borders.indexOf(borderSkipped, 0);
-        if (startCorner === -1) {
-          startCorner = 0;
-        }
-
-        function cornerAt(index) {
-          return corners[(startCorner + index) % 4];
-        }
-
-        // Draw rectangle from 'startCorner'
-        var corner = cornerAt(0);
-        ctx.moveTo(corner[0], corner[1]);
-
-        for (var i = 1; i < 4; i++) {
-          corner = cornerAt(i);
-          ctx.lineTo(corner[0], corner[1]);
-        }
-
-        ctx.fill();
-        if (borderWidth) {
-          ctx.stroke();
-        }
-      },
-      height: function() {
-        var vm = this._view;
-        return vm.base - vm.y;
-      },
-      inRange: function(mouseX, mouseY) {
-        var inRange = false;
-
-        if (this._view) {
-          var bounds = getBarBounds(this);
-          inRange = mouseX >= bounds.left && mouseX <= bounds.right && mouseY >= bounds.top && mouseY <= bounds.bottom;
-        }
-
-        return inRange;
-      },
-      inLabelRange: function(mouseX, mouseY) {
-        var me = this;
-        if (!me._view) {
-          return false;
-        }
-
-        var inRange = false;
-        var bounds = getBarBounds(me);
-
-        if (isVertical(me)) {
-          inRange = mouseX >= bounds.left && mouseX <= bounds.right;
-        } else {
-          inRange = mouseY >= bounds.top && mouseY <= bounds.bottom;
-        }
-
-        return inRange;
-      },
-      inXRange: function(mouseX) {
-        var bounds = getBarBounds(this);
-        return mouseX >= bounds.left && mouseX <= bounds.right;
-      },
-      inYRange: function(mouseY) {
-        var bounds = getBarBounds(this);
-        return mouseY >= bounds.top && mouseY <= bounds.bottom;
-      },
-      getCenterPoint: function() {
-        var vm = this._view;
-        var x, y;
-        if (isVertical(this)) {
-          x = vm.x;
-          y = (vm.y + vm.base) / 2;
-        } else {
-          x = (vm.x + vm.base) / 2;
-          y = vm.y;
-        }
-
-        return {x: x, y: y};
-      },
-      getArea: function() {
-        var vm = this._view;
-        return vm.width * Math.abs(vm.y - vm.base);
-      },
-      tooltipPosition: function() {
-        var vm = this._view;
-        return {
-          x: vm.x,
-          y: vm.y
-        };
-      }
-    });
-
-  };
-
-},{}],41:[function(require,module,exports){
-  'use strict';
-
-// Chart.Platform implementation for targeting a web browser
-  module.exports = function(Chart) {
-    var helpers = Chart.helpers;
-
-    // DOM event types -> Chart.js event types.
-    // Note: only events with different types are mapped.
-    // https://developer.mozilla.org/en-US/docs/Web/Events
-    var eventTypeMap = {
-      // Touch events
-      touchstart: 'mousedown',
-      touchmove: 'mousemove',
-      touchend: 'mouseup',
-
-      // Pointer events
-      pointerenter: 'mouseenter',
-      pointerdown: 'mousedown',
-      pointermove: 'mousemove',
-      pointerup: 'mouseup',
-      pointerleave: 'mouseout',
-      pointerout: 'mouseout'
-    };
-
-    /**
-     * The "used" size is the final value of a dimension property after all calculations have
-     * been performed. This method uses the computed style of `element` but returns undefined
-     * if the computed style is not expressed in pixels. That can happen in some cases where
-     * `element` has a size relative to its parent and this last one is not yet displayed,
-     * for example because of `display: none` on a parent node.
-     * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
-     * @returns {Number} Size in pixels or undefined if unknown.
-     */
-    function readUsedSize(element, property) {
-      var value = helpers.getStyle(element, property);
-      var matches = value && value.match(/(\d+)px/);
-      return matches? Number(matches[1]) : undefined;
-    }
-
-    /**
-     * Initializes the canvas style and render size without modifying the canvas display size,
-     * since responsiveness is handled by the controller.resize() method. The config is used
-     * to determine the aspect ratio to apply in case no explicit height has been specified.
-     */
-    function initCanvas(canvas, config) {
-      var style = canvas.style;
-
-      // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it
-      // returns null or '' if no explicit value has been set to the canvas attribute.
-      var renderHeight = canvas.getAttribute('height');
-      var renderWidth = canvas.getAttribute('width');
-
-      // Chart.js modifies some canvas values that we want to restore on destroy
-      canvas._chartjs = {
-        initial: {
-          height: renderHeight,
-          width: renderWidth,
-          style: {
-            display: style.display,
-            height: style.height,
-            width: style.width
-          }
-        }
-      };
-
-      // Force canvas to display as block to avoid extra space caused by inline
-      // elements, which would interfere with the responsive resize process.
-      // https://github.com/chartjs/Chart.js/issues/2538
-      style.display = style.display || 'block';
-
-      if (renderWidth === null || renderWidth === '') {
-        var displayWidth = readUsedSize(canvas, 'width');
-        if (displayWidth !== undefined) {
-          canvas.width = displayWidth;
-        }
-      }
-
-      if (renderHeight === null || renderHeight === '') {
-        if (canvas.style.height === '') {
-          // If no explicit render height and style height, let's apply the aspect ratio,
-          // which one can be specified by the user but also by charts as default option
-          // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.
-          canvas.height = canvas.width / (config.options.aspectRatio || 2);
-        } else {
-          var displayHeight = readUsedSize(canvas, 'height');
-          if (displayWidth !== undefined) {
-            canvas.height = displayHeight;
-          }
-        }
-      }
-
-      return canvas;
-    }
-
-    function createEvent(type, chart, x, y, native) {
-      return {
-        type: type,
-        chart: chart,
-        native: native || null,
-        x: x !== undefined? x : null,
-        y: y !== undefined? y : null,
-      };
-    }
-
-    function fromNativeEvent(event, chart) {
-      var type = eventTypeMap[event.type] || event.type;
-      var pos = helpers.getRelativePosition(event, chart);
-      return createEvent(type, chart, pos.x, pos.y, event);
-    }
-
-    function createResizer(handler) {
-      var iframe = document.createElement('iframe');
-      iframe.className = 'chartjs-hidden-iframe';
-      iframe.style.cssText =
-        'display:block;'+
-        'overflow:hidden;'+
-        'border:0;'+
-        'margin:0;'+
-        'top:0;'+
-        'left:0;'+
-        'bottom:0;'+
-        'right:0;'+
-        'height:100%;'+
-        'width:100%;'+
-        'position:absolute;'+
-        'pointer-events:none;'+
-        'z-index:-1;';
-
-      // Prevent the iframe to gain focus on tab.
-      // https://github.com/chartjs/Chart.js/issues/3090
-      iframe.tabIndex = -1;
-
-      // If the iframe is re-attached to the DOM, the resize listener is removed because the
-      // content is reloaded, so make sure to install the handler after the iframe is loaded.
-      // https://github.com/chartjs/Chart.js/issues/3521
-      helpers.addEvent(iframe, 'load', function() {
-        helpers.addEvent(iframe.contentWindow || iframe, 'resize', handler);
-
-        // The iframe size might have changed while loading, which can also
-        // happen if the size has been changed while detached from the DOM.
-        handler();
-      });
-
-      return iframe;
-    }
-
-    function addResizeListener(node, listener, chart) {
-      var stub = node._chartjs = {
-        ticking: false
-      };
-
-      // Throttle the callback notification until the next animation frame.
-      var notify = function() {
-        if (!stub.ticking) {
-          stub.ticking = true;
-          helpers.requestAnimFrame.call(window, function() {
-            if (stub.resizer) {
-              stub.ticking = false;
-              return listener(createEvent('resize', chart));
-            }
-          });
-        }
-      };
-
-      // Let's keep track of this added iframe and thus avoid DOM query when removing it.
-      stub.resizer = createResizer(notify);
-
-      node.insertBefore(stub.resizer, node.firstChild);
-    }
-
-    function removeResizeListener(node) {
-      if (!node || !node._chartjs) {
-        return;
-      }
-
-      var resizer = node._chartjs.resizer;
-      if (resizer) {
-        resizer.parentNode.removeChild(resizer);
-        node._chartjs.resizer = null;
-      }
-
-      delete node._chartjs;
-    }
-
-    return {
-      acquireContext: function(item, config) {
-        if (typeof item === 'string') {
-          item = document.getElementById(item);
-        } else if (item.length) {
-          // Support for array based queries (such as jQuery)
-          item = item[0];
-        }
-
-        if (item && item.canvas) {
-          // Support for any object associated to a canvas (including a context2d)
-          item = item.canvas;
-        }
-
-        if (item instanceof HTMLCanvasElement) {
-          // To prevent canvas fingerprinting, some add-ons undefine the getContext
-          // method, for example: https://github.com/kkapsner/CanvasBlocker
-          // https://github.com/chartjs/Chart.js/issues/2807
-          var context = item.getContext && item.getContext('2d');
-          if (context instanceof CanvasRenderingContext2D) {
-            initCanvas(item, config);
-            return context;
-          }
-        }
-
-        return null;
-      },
-
-      releaseContext: function(context) {
-        var canvas = context.canvas;
-        if (!canvas._chartjs) {
-          return;
-        }
-
-        var initial = canvas._chartjs.initial;
-        ['height', 'width'].forEach(function(prop) {
-          var value = initial[prop];
-          if (value === undefined || value === null) {
-            canvas.removeAttribute(prop);
-          } else {
-            canvas.setAttribute(prop, value);
-          }
-        });
-
-        helpers.each(initial.style || {}, function(value, key) {
-          canvas.style[key] = value;
-        });
-
-        // The canvas render size might have been changed (and thus the state stack discarded),
-        // we can't use save() and restore() to restore the initial state. So make sure that at
-        // least the canvas context is reset to the default state by setting the canvas width.
-        // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html
-        canvas.width = canvas.width;
-
-        delete canvas._chartjs;
-      },
-
-      addEventListener: function(chart, type, listener) {
-        var canvas = chart.chart.canvas;
-        if (type === 'resize') {
-          // Note: the resize event is not supported on all browsers.
-          addResizeListener(canvas.parentNode, listener, chart.chart);
-          return;
-        }
-
-        var stub = listener._chartjs || (listener._chartjs = {});
-        var proxies = stub.proxies || (stub.proxies = {});
-        var proxy = proxies[chart.id + '_' + type] = function(event) {
-          listener(fromNativeEvent(event, chart.chart));
-        };
-
-        helpers.addEvent(canvas, type, proxy);
-      },
-
-      removeEventListener: function(chart, type, listener) {
-        var canvas = chart.chart.canvas;
-        if (type === 'resize') {
-          // Note: the resize event is not supported on all browsers.
-          removeResizeListener(canvas.parentNode, listener);
-          return;
-        }
-
-        var stub = listener._chartjs || {};
-        var proxies = stub.proxies || {};
-        var proxy = proxies[chart.id + '_' + type];
-        if (!proxy) {
-          return;
-        }
-
-        helpers.removeEvent(canvas, type, proxy);
-      }
-    };
-  };
-
-},{}],42:[function(require,module,exports){
-  'use strict';
-
-// By default, select the browser (DOM) platform.
-// @TODO Make possible to select another platform at build time.
-  var implementation = require(41);
-
-  module.exports = function(Chart) {
-    /**
-     * @namespace Chart.platform
-     * @see https://chartjs.gitbooks.io/proposals/content/Platform.html
-     * @since 2.4.0
-     */
-    Chart.platform = {
-      /**
-       * Called at chart construction time, returns a context2d instance implementing
-       * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.
-       * @param {*} item - The native item from which to acquire context (platform specific)
-       * @param {Object} options - The chart options
-       * @returns {CanvasRenderingContext2D} context2d instance
-       */
-      acquireContext: function() {},
-
-      /**
-       * Called at chart destruction time, releases any resources associated to the context
-       * previously returned by the acquireContext() method.
-       * @param {CanvasRenderingContext2D} context - The context2d instance
-       * @returns {Boolean} true if the method succeeded, else false
-       */
-      releaseContext: function() {},
-
-      /**
-       * Registers the specified listener on the given chart.
-       * @param {Chart} chart - Chart from which to listen for event
-       * @param {String} type - The ({@link IEvent}) type to listen for
-       * @param {Function} listener - Receives a notification (an object that implements
-       * the {@link IEvent} interface) when an event of the specified type occurs.
-       */
-      addEventListener: function() {},
-
-      /**
-       * Removes the specified listener previously registered with addEventListener.
-       * @param {Chart} chart -Chart from which to remove the listener
-       * @param {String} type - The ({@link IEvent}) type to remove
-       * @param {Function} listener - The listener function to remove from the event target.
-       */
-      removeEventListener: function() {}
-    };
-
-    /**
-     * @interface IPlatform
-     * Allows abstracting platform dependencies away from the chart
-     * @borrows Chart.platform.acquireContext as acquireContext
-     * @borrows Chart.platform.releaseContext as releaseContext
-     * @borrows Chart.platform.addEventListener as addEventListener
-     * @borrows Chart.platform.removeEventListener as removeEventListener
-     */
-
-    /**
-     * @interface IEvent
-     * @prop {String} type - The event type name, possible values are:
-     * 'contextmenu', 'mouseenter', 'mousedown', 'mousemove', 'mouseup', 'mouseout',
-     * 'click', 'dblclick', 'keydown', 'keypress', 'keyup' and 'resize'
-     * @prop {*} native - The original native event (null for emulated events, e.g. 'resize')
-     * @prop {Number} x - The mouse x position, relative to the canvas (null for incompatible events)
-     * @prop {Number} y - The mouse y position, relative to the canvas (null for incompatible events)
-     */
-
-    Chart.helpers.extend(Chart.platform, implementation(Chart));
-  };
-
-},{"41":41}],43:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-    // Default config for a category scale
-    var defaultConfig = {
-      position: 'bottom'
-    };
-
-    var DatasetScale = Chart.Scale.extend({
-      /**
-       * Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those
-       * else fall back to data.labels
-       * @private
-       */
-      getLabels: function() {
-        var data = this.chart.data;
-        return (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;
-      },
-      // Implement this so that
-      determineDataLimits: function() {
-        var me = this;
-        var labels = me.getLabels();
-        me.minIndex = 0;
-        me.maxIndex = labels.length - 1;
-        var findIndex;
-
-        if (me.options.ticks.min !== undefined) {
-          // user specified min value
-          findIndex = helpers.indexOf(labels, me.options.ticks.min);
-          me.minIndex = findIndex !== -1 ? findIndex : me.minIndex;
-        }
-
-        if (me.options.ticks.max !== undefined) {
-          // user specified max value
-          findIndex = helpers.indexOf(labels, me.options.ticks.max);
-          me.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;
-        }
-
-        me.min = labels[me.minIndex];
-        me.max = labels[me.maxIndex];
-      },
-
-      buildTicks: function() {
-        var me = this;
-        var labels = me.getLabels();
-        // If we are viewing some subset of labels, slice the original array
-        me.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);
-      },
-
-      getLabelForIndex: function(index, datasetIndex) {
-        var me = this;
-        var data = me.chart.data;
-        var isHorizontal = me.isHorizontal();
-
-        if (data.yLabels && !isHorizontal) {
-          return me.getRightValue(data.datasets[datasetIndex].data[index]);
-        }
-        return me.ticks[index - me.minIndex];
-      },
-
-      // Used to get data value locations.  Value can either be an index or a numerical value
-      getPixelForValue: function(value, index, datasetIndex, includeOffset) {
-        var me = this;
-        // 1 is added because we need the length but we have the indexes
-        var offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
-
-        if (value !== undefined && isNaN(index)) {
-          var labels = me.getLabels();
-          var idx = labels.indexOf(value);
-          index = idx !== -1 ? idx : index;
-        }
-
-        if (me.isHorizontal()) {
-          var valueWidth = me.width / offsetAmt;
-          var widthOffset = (valueWidth * (index - me.minIndex));
-
-          if (me.options.gridLines.offsetGridLines && includeOffset || me.maxIndex === me.minIndex && includeOffset) {
-            widthOffset += (valueWidth / 2);
-          }
-
-          return me.left + Math.round(widthOffset);
-        }
-        var valueHeight = me.height / offsetAmt;
-        var heightOffset = (valueHeight * (index - me.minIndex));
-
-        if (me.options.gridLines.offsetGridLines && includeOffset) {
-          heightOffset += (valueHeight / 2);
-        }
-
-        return me.top + Math.round(heightOffset);
-      },
-      getPixelForTick: function(index, includeOffset) {
-        return this.getPixelForValue(this.ticks[index], index + this.minIndex, null, includeOffset);
-      },
-      getValueForPixel: function(pixel) {
-        var me = this;
-        var value;
-        var offsetAmt = Math.max((me.ticks.length - ((me.options.gridLines.offsetGridLines) ? 0 : 1)), 1);
-        var horz = me.isHorizontal();
-        var valueDimension = (horz ? me.width : me.height) / offsetAmt;
-
-        pixel -= horz ? me.left : me.top;
-
-        if (me.options.gridLines.offsetGridLines) {
-          pixel -= (valueDimension / 2);
-        }
-
-        if (pixel <= 0) {
-          value = 0;
-        } else {
-          value = Math.round(pixel / valueDimension);
-        }
-
-        return value;
-      },
-      getBasePixel: function() {
-        return this.bottom;
-      }
-    });
-
-    Chart.scaleService.registerScaleType('category', DatasetScale, defaultConfig);
-
-  };
-
-},{}],44:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    var defaultConfig = {
-      position: 'left',
-      ticks: {
-        callback: Chart.Ticks.formatters.linear
-      }
-    };
-
-    var LinearScale = Chart.LinearScaleBase.extend({
-      determineDataLimits: function() {
-        var me = this;
-        var opts = me.options;
-        var chart = me.chart;
-        var data = chart.data;
-        var datasets = data.datasets;
-        var isHorizontal = me.isHorizontal();
-
-        function IDMatches(meta) {
-          return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;
-        }
-
-        // First Calculate the range
-        me.min = null;
-        me.max = null;
-
-        var hasStacks = opts.stacked;
-        if (hasStacks === undefined) {
-          helpers.each(datasets, function(dataset, datasetIndex) {
-            if (hasStacks) {
-              return;
-            }
-
-            var meta = chart.getDatasetMeta(datasetIndex);
-            if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&
-              meta.stack !== undefined) {
-              hasStacks = true;
-            }
-          });
-        }
-
-        if (opts.stacked || hasStacks) {
-          var valuesPerStack = {};
-
-          helpers.each(datasets, function(dataset, datasetIndex) {
-            var meta = chart.getDatasetMeta(datasetIndex);
-            var key = [
-              meta.type,
-              // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined
-              ((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),
-              meta.stack
-            ].join('.');
-
-            if (valuesPerStack[key] === undefined) {
-              valuesPerStack[key] = {
-                positiveValues: [],
-                negativeValues: []
-              };
-            }
-
-            // Store these per type
-            var positiveValues = valuesPerStack[key].positiveValues;
-            var negativeValues = valuesPerStack[key].negativeValues;
-
-            if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
-              helpers.each(dataset.data, function(rawValue, index) {
-                var value = +me.getRightValue(rawValue);
-                if (isNaN(value) || meta.data[index].hidden) {
-                  return;
-                }
-
-                positiveValues[index] = positiveValues[index] || 0;
-                negativeValues[index] = negativeValues[index] || 0;
-
-                if (opts.relativePoints) {
-                  positiveValues[index] = 100;
-                } else if (value < 0) {
-                  negativeValues[index] += value;
-                } else {
-                  positiveValues[index] += value;
-                }
-              });
-            }
-          });
-
-          helpers.each(valuesPerStack, function(valuesForType) {
-            var values = valuesForType.positiveValues.concat(valuesForType.negativeValues);
-            var minVal = helpers.min(values);
-            var maxVal = helpers.max(values);
-            me.min = me.min === null ? minVal : Math.min(me.min, minVal);
-            me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);
-          });
-
-        } else {
-          helpers.each(datasets, function(dataset, datasetIndex) {
-            var meta = chart.getDatasetMeta(datasetIndex);
-            if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
-              helpers.each(dataset.data, function(rawValue, index) {
-                var value = +me.getRightValue(rawValue);
-                if (isNaN(value) || meta.data[index].hidden) {
-                  return;
-                }
-
-                if (me.min === null) {
-                  me.min = value;
-                } else if (value < me.min) {
-                  me.min = value;
-                }
-
-                if (me.max === null) {
-                  me.max = value;
-                } else if (value > me.max) {
-                  me.max = value;
-                }
-              });
-            }
-          });
-        }
-
-        // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero
-        this.handleTickRangeOptions();
-      },
-      getTickLimit: function() {
-        var maxTicks;
-        var me = this;
-        var tickOpts = me.options.ticks;
-
-        if (me.isHorizontal()) {
-          maxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.width / 50));
-        } else {
-          // The factor of 2 used to scale the font size has been experimentally determined.
-          var tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, Chart.defaults.global.defaultFontSize);
-          maxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.height / (2 * tickFontSize)));
-        }
-
-        return maxTicks;
-      },
-      // Called after the ticks are built. We need
-      handleDirectionalChanges: function() {
-        if (!this.isHorizontal()) {
-          // We are in a vertical orientation. The top value is the highest. So reverse the array
-          this.ticks.reverse();
-        }
-      },
-      getLabelForIndex: function(index, datasetIndex) {
-        return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
-      },
-      // Utils
-      getPixelForValue: function(value) {
-        // This must be called after fit has been run so that
-        // this.left, this.top, this.right, and this.bottom have been defined
-        var me = this;
-        var start = me.start;
-
-        var rightValue = +me.getRightValue(value);
-        var pixel;
-        var range = me.end - start;
-
-        if (me.isHorizontal()) {
-          pixel = me.left + (me.width / range * (rightValue - start));
-          return Math.round(pixel);
-        }
-
-        pixel = me.bottom - (me.height / range * (rightValue - start));
-        return Math.round(pixel);
-      },
-      getValueForPixel: function(pixel) {
-        var me = this;
-        var isHorizontal = me.isHorizontal();
-        var innerDimension = isHorizontal ? me.width : me.height;
-        var offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;
-        return me.start + ((me.end - me.start) * offset);
-      },
-      getPixelForTick: function(index) {
-        return this.getPixelForValue(this.ticksAsNumbers[index]);
-      }
-    });
-    Chart.scaleService.registerScaleType('linear', LinearScale, defaultConfig);
-
-  };
-
-},{}],45:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers,
-      noop = helpers.noop;
-
-    Chart.LinearScaleBase = Chart.Scale.extend({
-      handleTickRangeOptions: function() {
-        var me = this;
-        var opts = me.options;
-        var tickOpts = opts.ticks;
-
-        // If we are forcing it to begin at 0, but 0 will already be rendered on the chart,
-        // do nothing since that would make the chart weird. If the user really wants a weird chart
-        // axis, they can manually override it
-        if (tickOpts.beginAtZero) {
-          var minSign = helpers.sign(me.min);
-          var maxSign = helpers.sign(me.max);
-
-          if (minSign < 0 && maxSign < 0) {
-            // move the top up to 0
-            me.max = 0;
-          } else if (minSign > 0 && maxSign > 0) {
-            // move the bottom down to 0
-            me.min = 0;
-          }
-        }
-
-        if (tickOpts.min !== undefined) {
-          me.min = tickOpts.min;
-        } else if (tickOpts.suggestedMin !== undefined) {
-          me.min = Math.min(me.min, tickOpts.suggestedMin);
-        }
-
-        if (tickOpts.max !== undefined) {
-          me.max = tickOpts.max;
-        } else if (tickOpts.suggestedMax !== undefined) {
-          me.max = Math.max(me.max, tickOpts.suggestedMax);
-        }
-
-        if (me.min === me.max) {
-          me.max++;
-
-          if (!tickOpts.beginAtZero) {
-            me.min--;
-          }
-        }
-      },
-      getTickLimit: noop,
-      handleDirectionalChanges: noop,
-
-      buildTicks: function() {
-        var me = this;
-        var opts = me.options;
-        var tickOpts = opts.ticks;
-
-        // Figure out what the max number of ticks we can support it is based on the size of
-        // the axis area. For now, we say that the minimum tick spacing in pixels must be 50
-        // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on
-        // the graph. Make sure we always have at least 2 ticks
-        var maxTicks = me.getTickLimit();
-        maxTicks = Math.max(2, maxTicks);
-
-        var numericGeneratorOptions = {
-          maxTicks: maxTicks,
-          min: tickOpts.min,
-          max: tickOpts.max,
-          stepSize: helpers.getValueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)
-        };
-        var ticks = me.ticks = Chart.Ticks.generators.linear(numericGeneratorOptions, me);
-
-        me.handleDirectionalChanges();
-
-        // At this point, we need to update our max and min given the tick values since we have expanded the
-        // range of the scale
-        me.max = helpers.max(ticks);
-        me.min = helpers.min(ticks);
-
-        if (tickOpts.reverse) {
-          ticks.reverse();
-
-          me.start = me.max;
-          me.end = me.min;
-        } else {
-          me.start = me.min;
-          me.end = me.max;
-        }
-      },
-      convertTicksToLabels: function() {
-        var me = this;
-        me.ticksAsNumbers = me.ticks.slice();
-        me.zeroLineIndex = me.ticks.indexOf(0);
-
-        Chart.Scale.prototype.convertTicksToLabels.call(me);
-      }
-    });
-  };
-
-},{}],46:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-
-    var defaultConfig = {
-      position: 'left',
-
-      // label settings
-      ticks: {
-        callback: Chart.Ticks.formatters.logarithmic
-      }
-    };
-
-    var LogarithmicScale = Chart.Scale.extend({
-      determineDataLimits: function() {
-        var me = this;
-        var opts = me.options;
-        var tickOpts = opts.ticks;
-        var chart = me.chart;
-        var data = chart.data;
-        var datasets = data.datasets;
-        var getValueOrDefault = helpers.getValueOrDefault;
-        var isHorizontal = me.isHorizontal();
-        function IDMatches(meta) {
-          return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;
-        }
-
-        // Calculate Range
-        me.min = null;
-        me.max = null;
-        me.minNotZero = null;
-
-        var hasStacks = opts.stacked;
-        if (hasStacks === undefined) {
-          helpers.each(datasets, function(dataset, datasetIndex) {
-            if (hasStacks) {
-              return;
-            }
-
-            var meta = chart.getDatasetMeta(datasetIndex);
-            if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&
-              meta.stack !== undefined) {
-              hasStacks = true;
-            }
-          });
-        }
-
-        if (opts.stacked || hasStacks) {
-          var valuesPerStack = {};
-
-          helpers.each(datasets, function(dataset, datasetIndex) {
-            var meta = chart.getDatasetMeta(datasetIndex);
-            var key = [
-              meta.type,
-              // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined
-              ((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),
-              meta.stack
-            ].join('.');
-
-            if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
-              if (valuesPerStack[key] === undefined) {
-                valuesPerStack[key] = [];
-              }
-
-              helpers.each(dataset.data, function(rawValue, index) {
-                var values = valuesPerStack[key];
-                var value = +me.getRightValue(rawValue);
-                if (isNaN(value) || meta.data[index].hidden) {
-                  return;
-                }
-
-                values[index] = values[index] || 0;
-
-                if (opts.relativePoints) {
-                  values[index] = 100;
-                } else {
-                  // Don't need to split positive and negative since the log scale can't handle a 0 crossing
-                  values[index] += value;
-                }
-              });
-            }
-          });
-
-          helpers.each(valuesPerStack, function(valuesForType) {
-            var minVal = helpers.min(valuesForType);
-            var maxVal = helpers.max(valuesForType);
-            me.min = me.min === null ? minVal : Math.min(me.min, minVal);
-            me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);
-          });
-
-        } else {
-          helpers.each(datasets, function(dataset, datasetIndex) {
-            var meta = chart.getDatasetMeta(datasetIndex);
-            if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {
-              helpers.each(dataset.data, function(rawValue, index) {
-                var value = +me.getRightValue(rawValue);
-                if (isNaN(value) || meta.data[index].hidden) {
-                  return;
-                }
-
-                if (me.min === null) {
-                  me.min = value;
-                } else if (value < me.min) {
-                  me.min = value;
-                }
-
-                if (me.max === null) {
-                  me.max = value;
-                } else if (value > me.max) {
-                  me.max = value;
-                }
-
-                if (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {
-                  me.minNotZero = value;
-                }
-              });
-            }
-          });
-        }
-
-        me.min = getValueOrDefault(tickOpts.min, me.min);
-        me.max = getValueOrDefault(tickOpts.max, me.max);
-
-        if (me.min === me.max) {
-          if (me.min !== 0 && me.min !== null) {
-            me.min = Math.pow(10, Math.floor(helpers.log10(me.min)) - 1);
-            me.max = Math.pow(10, Math.floor(helpers.log10(me.max)) + 1);
-          } else {
-            me.min = 1;
-            me.max = 10;
-          }
-        }
-      },
-      buildTicks: function() {
-        var me = this;
-        var opts = me.options;
-        var tickOpts = opts.ticks;
-
-        var generationOptions = {
-          min: tickOpts.min,
-          max: tickOpts.max
-        };
-        var ticks = me.ticks = Chart.Ticks.generators.logarithmic(generationOptions, me);
-
-        if (!me.isHorizontal()) {
-          // We are in a vertical orientation. The top value is the highest. So reverse the array
-          ticks.reverse();
-        }
-
-        // At this point, we need to update our max and min given the tick values since we have expanded the
-        // range of the scale
-        me.max = helpers.max(ticks);
-        me.min = helpers.min(ticks);
-
-        if (tickOpts.reverse) {
-          ticks.reverse();
-
-          me.start = me.max;
-          me.end = me.min;
-        } else {
-          me.start = me.min;
-          me.end = me.max;
-        }
-      },
-      convertTicksToLabels: function() {
-        this.tickValues = this.ticks.slice();
-
-        Chart.Scale.prototype.convertTicksToLabels.call(this);
-      },
-      // Get the correct tooltip label
-      getLabelForIndex: function(index, datasetIndex) {
-        return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
-      },
-      getPixelForTick: function(index) {
-        return this.getPixelForValue(this.tickValues[index]);
-      },
-      getPixelForValue: function(value) {
-        var me = this;
-        var innerDimension;
-        var pixel;
-
-        var start = me.start;
-        var newVal = +me.getRightValue(value);
-        var range;
-        var opts = me.options;
-        var tickOpts = opts.ticks;
-
-        if (me.isHorizontal()) {
-          range = helpers.log10(me.end) - helpers.log10(start); // todo: if start === 0
-          if (newVal === 0) {
-            pixel = me.left;
-          } else {
-            innerDimension = me.width;
-            pixel = me.left + (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));
-          }
-        } else {
-          // Bottom - top since pixels increase downward on a screen
-          innerDimension = me.height;
-          if (start === 0 && !tickOpts.reverse) {
-            range = helpers.log10(me.end) - helpers.log10(me.minNotZero);
-            if (newVal === start) {
-              pixel = me.bottom;
-            } else if (newVal === me.minNotZero) {
-              pixel = me.bottom - innerDimension * 0.02;
-            } else {
-              pixel = me.bottom - innerDimension * 0.02 - (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));
-            }
-          } else if (me.end === 0 && tickOpts.reverse) {
-            range = helpers.log10(me.start) - helpers.log10(me.minNotZero);
-            if (newVal === me.end) {
-              pixel = me.top;
-            } else if (newVal === me.minNotZero) {
-              pixel = me.top + innerDimension * 0.02;
-            } else {
-              pixel = me.top + innerDimension * 0.02 + (innerDimension * 0.98/ range * (helpers.log10(newVal)-helpers.log10(me.minNotZero)));
-            }
-          } else {
-            range = helpers.log10(me.end) - helpers.log10(start);
-            innerDimension = me.height;
-            pixel = me.bottom - (innerDimension / range * (helpers.log10(newVal) - helpers.log10(start)));
-          }
-        }
-        return pixel;
-      },
-      getValueForPixel: function(pixel) {
-        var me = this;
-        var range = helpers.log10(me.end) - helpers.log10(me.start);
-        var value, innerDimension;
-
-        if (me.isHorizontal()) {
-          innerDimension = me.width;
-          value = me.start * Math.pow(10, (pixel - me.left) * range / innerDimension);
-        } else {  // todo: if start === 0
-          innerDimension = me.height;
-          value = Math.pow(10, (me.bottom - pixel) * range / innerDimension) / me.start;
-        }
-        return value;
-      }
-    });
-    Chart.scaleService.registerScaleType('logarithmic', LogarithmicScale, defaultConfig);
-
-  };
-
-},{}],47:[function(require,module,exports){
-  'use strict';
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-    var globalDefaults = Chart.defaults.global;
-
-    var defaultConfig = {
-      display: true,
-
-      // Boolean - Whether to animate scaling the chart from the centre
-      animate: true,
-      lineArc: false,
-      position: 'chartArea',
-
-      angleLines: {
-        display: true,
-        color: 'rgba(0, 0, 0, 0.1)',
-        lineWidth: 1
-      },
-
-      // label settings
-      ticks: {
-        // Boolean - Show a backdrop to the scale label
-        showLabelBackdrop: true,
-
-        // String - The colour of the label backdrop
-        backdropColor: 'rgba(255,255,255,0.75)',
-
-        // Number - The backdrop padding above & below the label in pixels
-        backdropPaddingY: 2,
-
-        // Number - The backdrop padding to the side of the label in pixels
-        backdropPaddingX: 2,
-
-        callback: Chart.Ticks.formatters.linear
-      },
-
-      pointLabels: {
-        // Number - Point label font size in pixels
-        fontSize: 10,
-
-        // Function - Used to convert point labels
-        callback: function(label) {
-          return label;
-        }
-      }
-    };
-
-    function getValueCount(scale) {
-      return !scale.options.lineArc ? scale.chart.data.labels.length : 0;
-    }
-
-    function getPointLabelFontOptions(scale) {
-      var pointLabelOptions = scale.options.pointLabels;
-      var fontSize = helpers.getValueOrDefault(pointLabelOptions.fontSize, globalDefaults.defaultFontSize);
-      var fontStyle = helpers.getValueOrDefault(pointLabelOptions.fontStyle, globalDefaults.defaultFontStyle);
-      var fontFamily = helpers.getValueOrDefault(pointLabelOptions.fontFamily, globalDefaults.defaultFontFamily);
-      var font = helpers.fontString(fontSize, fontStyle, fontFamily);
-
-      return {
-        size: fontSize,
-        style: fontStyle,
-        family: fontFamily,
-        font: font
-      };
-    }
-
-    function measureLabelSize(ctx, fontSize, label) {
-      if (helpers.isArray(label)) {
-        return {
-          w: helpers.longestText(ctx, ctx.font, label),
-          h: (label.length * fontSize) + ((label.length - 1) * 1.5 * fontSize)
-        };
-      }
-
-      return {
-        w: ctx.measureText(label).width,
-        h: fontSize
-      };
-    }
-
-    function determineLimits(angle, pos, size, min, max) {
-      if (angle === min || angle === max) {
-        return {
-          start: pos - (size / 2),
-          end: pos + (size / 2)
-        };
-      } else if (angle < min || angle > max) {
-        return {
-          start: pos - size - 5,
-          end: pos
-        };
-      }
-
-      return {
-        start: pos,
-        end: pos + size + 5
-      };
-    }
-
-    /**
-     * Helper function to fit a radial linear scale with point labels
-     */
-    function fitWithPointLabels(scale) {
-      /*
-       * Right, this is really confusing and there is a lot of maths going on here
-       * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9
-       *
-       * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif
-       *
-       * Solution:
-       *
-       * We assume the radius of the polygon is half the size of the canvas at first
-       * at each index we check if the text overlaps.
-       *
-       * Where it does, we store that angle and that index.
-       *
-       * After finding the largest index and angle we calculate how much we need to remove
-       * from the shape radius to move the point inwards by that x.
-       *
-       * We average the left and right distances to get the maximum shape radius that can fit in the box
-       * along with labels.
-       *
-       * Once we have that, we can find the centre point for the chart, by taking the x text protrusion
-       * on each side, removing that from the size, halving it and adding the left x protrusion width.
-       *
-       * This will mean we have a shape fitted to the canvas, as large as it can be with the labels
-       * and position it in the most space efficient manner
-       *
-       * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif
-       */
-
-      var plFont = getPointLabelFontOptions(scale);
-
-      // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.
-      // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points
-      var largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);
-      var furthestLimits = {
-        l: scale.width,
-        r: 0,
-        t: scale.height,
-        b: 0
-      };
-      var furthestAngles = {};
-      var i;
-      var textSize;
-      var pointPosition;
-
-      scale.ctx.font = plFont.font;
-      scale._pointLabelSizes = [];
-
-      var valueCount = getValueCount(scale);
-      for (i = 0; i < valueCount; i++) {
-        pointPosition = scale.getPointPosition(i, largestPossibleRadius);
-        textSize = measureLabelSize(scale.ctx, plFont.size, scale.pointLabels[i] || '');
-        scale._pointLabelSizes[i] = textSize;
-
-        // Add quarter circle to make degree 0 mean top of circle
-        var angleRadians = scale.getIndexAngle(i);
-        var angle = helpers.toDegrees(angleRadians) % 360;
-        var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
-        var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
-
-        if (hLimits.start < furthestLimits.l) {
-          furthestLimits.l = hLimits.start;
-          furthestAngles.l = angleRadians;
-        }
-
-        if (hLimits.end > furthestLimits.r) {
-          furthestLimits.r = hLimits.end;
-          furthestAngles.r = angleRadians;
-        }
-
-        if (vLimits.start < furthestLimits.t) {
-          furthestLimits.t = vLimits.start;
-          furthestAngles.t = angleRadians;
-        }
-
-        if (vLimits.end > furthestLimits.b) {
-          furthestLimits.b = vLimits.end;
-          furthestAngles.b = angleRadians;
-        }
-      }
-
-      scale.setReductions(largestPossibleRadius, furthestLimits, furthestAngles);
-    }
-
-    /**
-     * Helper function to fit a radial linear scale with no point labels
-     */
-    function fit(scale) {
-      var largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);
-      scale.drawingArea = Math.round(largestPossibleRadius);
-      scale.setCenterPoint(0, 0, 0, 0);
-    }
-
-    function getTextAlignForAngle(angle) {
-      if (angle === 0 || angle === 180) {
-        return 'center';
-      } else if (angle < 180) {
-        return 'left';
-      }
-
-      return 'right';
-    }
-
-    function fillText(ctx, text, position, fontSize) {
-      if (helpers.isArray(text)) {
-        var y = position.y;
-        var spacing = 1.5 * fontSize;
-
-        for (var i = 0; i < text.length; ++i) {
-          ctx.fillText(text[i], position.x, y);
-          y+= spacing;
-        }
-      } else {
-        ctx.fillText(text, position.x, position.y);
-      }
-    }
-
-    function adjustPointPositionForLabelHeight(angle, textSize, position) {
-      if (angle === 90 || angle === 270) {
-        position.y -= (textSize.h / 2);
-      } else if (angle > 270 || angle < 90) {
-        position.y -= textSize.h;
-      }
-    }
-
-    function drawPointLabels(scale) {
-      var ctx = scale.ctx;
-      var getValueOrDefault = helpers.getValueOrDefault;
-      var opts = scale.options;
-      var angleLineOpts = opts.angleLines;
-      var pointLabelOpts = opts.pointLabels;
-
-      ctx.lineWidth = angleLineOpts.lineWidth;
-      ctx.strokeStyle = angleLineOpts.color;
-
-      var outerDistance = scale.getDistanceFromCenterForValue(opts.reverse ? scale.min : scale.max);
-
-      // Point Label Font
-      var plFont = getPointLabelFontOptions(scale);
-
-      ctx.textBaseline = 'top';
-
-      for (var i = getValueCount(scale) - 1; i >= 0; i--) {
-        if (angleLineOpts.display) {
-          var outerPosition = scale.getPointPosition(i, outerDistance);
-          ctx.beginPath();
-          ctx.moveTo(scale.xCenter, scale.yCenter);
-          ctx.lineTo(outerPosition.x, outerPosition.y);
-          ctx.stroke();
-          ctx.closePath();
-        }
-        // Extra 3px out for some label spacing
-        var pointLabelPosition = scale.getPointPosition(i, outerDistance + 5);
-
-        // Keep this in loop since we may support array properties here
-        var pointLabelFontColor = getValueOrDefault(pointLabelOpts.fontColor, globalDefaults.defaultFontColor);
-        ctx.font = plFont.font;
-        ctx.fillStyle = pointLabelFontColor;
-
-        var angleRadians = scale.getIndexAngle(i);
-        var angle = helpers.toDegrees(angleRadians);
-        ctx.textAlign = getTextAlignForAngle(angle);
-        adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);
-        fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.size);
-      }
-    }
-
-    function drawRadiusLine(scale, gridLineOpts, radius, index) {
-      var ctx = scale.ctx;
-      ctx.strokeStyle = helpers.getValueAtIndexOrDefault(gridLineOpts.color, index - 1);
-      ctx.lineWidth = helpers.getValueAtIndexOrDefault(gridLineOpts.lineWidth, index - 1);
-
-      if (scale.options.lineArc) {
-        // Draw circular arcs between the points
-        ctx.beginPath();
-        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);
-        ctx.closePath();
-        ctx.stroke();
-      } else {
-        // Draw straight lines connecting each index
-        var valueCount = getValueCount(scale);
-
-        if (valueCount === 0) {
-          return;
-        }
-
-        ctx.beginPath();
-        var pointPosition = scale.getPointPosition(0, radius);
-        ctx.moveTo(pointPosition.x, pointPosition.y);
-
-        for (var i = 1; i < valueCount; i++) {
-          pointPosition = scale.getPointPosition(i, radius);
-          ctx.lineTo(pointPosition.x, pointPosition.y);
-        }
-
-        ctx.closePath();
-        ctx.stroke();
-      }
-    }
-
-    function numberOrZero(param) {
-      return helpers.isNumber(param) ? param : 0;
-    }
-
-    var LinearRadialScale = Chart.LinearScaleBase.extend({
-      setDimensions: function() {
-        var me = this;
-        var opts = me.options;
-        var tickOpts = opts.ticks;
-        // Set the unconstrained dimension before label rotation
-        me.width = me.maxWidth;
-        me.height = me.maxHeight;
-        me.xCenter = Math.round(me.width / 2);
-        me.yCenter = Math.round(me.height / 2);
-
-        var minSize = helpers.min([me.height, me.width]);
-        var tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);
-        me.drawingArea = opts.display ? (minSize / 2) - (tickFontSize / 2 + tickOpts.backdropPaddingY) : (minSize / 2);
-      },
-      determineDataLimits: function() {
-        var me = this;
-        var chart = me.chart;
-        var min = Number.POSITIVE_INFINITY;
-        var max = Number.NEGATIVE_INFINITY;
-
-        helpers.each(chart.data.datasets, function(dataset, datasetIndex) {
-          if (chart.isDatasetVisible(datasetIndex)) {
-            var meta = chart.getDatasetMeta(datasetIndex);
-
-            helpers.each(dataset.data, function(rawValue, index) {
-              var value = +me.getRightValue(rawValue);
-              if (isNaN(value) || meta.data[index].hidden) {
-                return;
-              }
-
-              min = Math.min(value, min);
-              max = Math.max(value, max);
-            });
-          }
-        });
-
-        me.min = (min === Number.POSITIVE_INFINITY ? 0 : min);
-        me.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);
-
-        // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero
-        me.handleTickRangeOptions();
-      },
-      getTickLimit: function() {
-        var tickOpts = this.options.ticks;
-        var tickFontSize = helpers.getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);
-        return Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * tickFontSize)));
-      },
-      convertTicksToLabels: function() {
-        var me = this;
-        Chart.LinearScaleBase.prototype.convertTicksToLabels.call(me);
-
-        // Point labels
-        me.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);
-      },
-      getLabelForIndex: function(index, datasetIndex) {
-        return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);
-      },
-      fit: function() {
-        if (this.options.lineArc) {
-          fit(this);
-        } else {
-          fitWithPointLabels(this);
-        }
-      },
-      /**
-       * Set radius reductions and determine new radius and center point
-       * @private
-       */
-      setReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {
-        var me = this;
-        var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);
-        var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);
-        var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);
-        var radiusReductionBottom = -Math.max(furthestLimits.b - me.height, 0) / Math.cos(furthestAngles.b);
-
-        radiusReductionLeft = numberOrZero(radiusReductionLeft);
-        radiusReductionRight = numberOrZero(radiusReductionRight);
-        radiusReductionTop = numberOrZero(radiusReductionTop);
-        radiusReductionBottom = numberOrZero(radiusReductionBottom);
-
-        me.drawingArea = Math.min(
-          Math.round(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),
-          Math.round(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));
-        me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);
-      },
-      setCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {
-        var me = this;
-        var maxRight = me.width - rightMovement - me.drawingArea,
-          maxLeft = leftMovement + me.drawingArea,
-          maxTop = topMovement + me.drawingArea,
-          maxBottom = me.height - bottomMovement - me.drawingArea;
-
-        me.xCenter = Math.round(((maxLeft + maxRight) / 2) + me.left);
-        me.yCenter = Math.round(((maxTop + maxBottom) / 2) + me.top);
-      },
-
-      getIndexAngle: function(index) {
-        var angleMultiplier = (Math.PI * 2) / getValueCount(this);
-        var startAngle = this.chart.options && this.chart.options.startAngle ?
-          this.chart.options.startAngle :
-          0;
-
-        var startAngleRadians = startAngle * Math.PI * 2 / 360;
-
-        // Start from the top instead of right, so remove a quarter of the circle
-        return index * angleMultiplier + startAngleRadians;
-      },
-      getDistanceFromCenterForValue: function(value) {
-        var me = this;
-
-        if (value === null) {
-          return 0; // null always in center
-        }
-
-        // Take into account half font size + the yPadding of the top value
-        var scalingFactor = me.drawingArea / (me.max - me.min);
-        if (me.options.reverse) {
-          return (me.max - value) * scalingFactor;
-        }
-        return (value - me.min) * scalingFactor;
-      },
-      getPointPosition: function(index, distanceFromCenter) {
-        var me = this;
-        var thisAngle = me.getIndexAngle(index) - (Math.PI / 2);
-        return {
-          x: Math.round(Math.cos(thisAngle) * distanceFromCenter) + me.xCenter,
-          y: Math.round(Math.sin(thisAngle) * distanceFromCenter) + me.yCenter
-        };
-      },
-      getPointPositionForValue: function(index, value) {
-        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
-      },
-
-      getBasePosition: function() {
-        var me = this;
-        var min = me.min;
-        var max = me.max;
-
-        return me.getPointPositionForValue(0,
-          me.beginAtZero? 0:
-            min < 0 && max < 0? max :
-              min > 0 && max > 0? min :
-                0);
-      },
-
-      draw: function() {
-        var me = this;
-        var opts = me.options;
-        var gridLineOpts = opts.gridLines;
-        var tickOpts = opts.ticks;
-        var getValueOrDefault = helpers.getValueOrDefault;
-
-        if (opts.display) {
-          var ctx = me.ctx;
-
-          // Tick Font
-          var tickFontSize = getValueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);
-          var tickFontStyle = getValueOrDefault(tickOpts.fontStyle, globalDefaults.defaultFontStyle);
-          var tickFontFamily = getValueOrDefault(tickOpts.fontFamily, globalDefaults.defaultFontFamily);
-          var tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);
-
-          helpers.each(me.ticks, function(label, index) {
-            // Don't draw a centre value (if it is minimum)
-            if (index > 0 || opts.reverse) {
-              var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);
-              var yHeight = me.yCenter - yCenterOffset;
-
-              // Draw circular lines around the scale
-              if (gridLineOpts.display && index !== 0) {
-                drawRadiusLine(me, gridLineOpts, yCenterOffset, index);
-              }
-
-              if (tickOpts.display) {
-                var tickFontColor = getValueOrDefault(tickOpts.fontColor, globalDefaults.defaultFontColor);
-                ctx.font = tickLabelFont;
-
-                if (tickOpts.showLabelBackdrop) {
-                  var labelWidth = ctx.measureText(label).width;
-                  ctx.fillStyle = tickOpts.backdropColor;
-                  ctx.fillRect(
-                    me.xCenter - labelWidth / 2 - tickOpts.backdropPaddingX,
-                    yHeight - tickFontSize / 2 - tickOpts.backdropPaddingY,
-                    labelWidth + tickOpts.backdropPaddingX * 2,
-                    tickFontSize + tickOpts.backdropPaddingY * 2
-                  );
-                }
-
-                ctx.textAlign = 'center';
-                ctx.textBaseline = 'middle';
-                ctx.fillStyle = tickFontColor;
-                ctx.fillText(label, me.xCenter, yHeight);
-              }
-            }
-          });
-
-          if (!opts.lineArc) {
-            drawPointLabels(me);
-          }
-        }
-      }
-    });
-    Chart.scaleService.registerScaleType('radialLinear', LinearRadialScale, defaultConfig);
-
-  };
-
-},{}],48:[function(require,module,exports){
-  /* global window: false */
-  'use strict';
-
-  var moment = require(1);
-  moment = typeof(moment) === 'function' ? moment : window.moment;
-
-  module.exports = function(Chart) {
-
-    var helpers = Chart.helpers;
-    var time = {
-      units: [{
-        name: 'millisecond',
-        steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]
-      }, {
-        name: 'second',
-        steps: [1, 2, 5, 10, 30]
-      }, {
-        name: 'minute',
-        steps: [1, 2, 5, 10, 30]
-      }, {
-        name: 'hour',
-        steps: [1, 2, 3, 6, 12]
-      }, {
-        name: 'day',
-        steps: [1, 2, 5]
-      }, {
-        name: 'week',
-        maxStep: 4
-      }, {
-        name: 'month',
-        maxStep: 3
-      }, {
-        name: 'quarter',
-        maxStep: 4
-      }, {
-        name: 'year',
-        maxStep: false
-      }]
-    };
-
-    var defaultConfig = {
-      position: 'bottom',
-
-      time: {
-        parser: false, // false == a pattern string from http://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment
-        format: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from http://momentjs.com/docs/#/parsing/string-format/
-        unit: false, // false == automatic or override with week, month, year, etc.
-        round: false, // none, or override with week, month, year, etc.
-        displayFormat: false, // DEPRECATED
-        isoWeekday: false, // override week start day - see http://momentjs.com/docs/#/get-set/iso-weekday/
-        minUnit: 'millisecond',
-
-        // defaults to unit's corresponding unitFormat below or override using pattern string from http://momentjs.com/docs/#/displaying/format/
-        displayFormats: {
-          millisecond: 'h:mm:ss.SSS a', // 11:20:01.123 AM,
-          second: 'h:mm:ss a', // 11:20:01 AM
-          minute: 'h:mm:ss a', // 11:20:01 AM
-          hour: 'MMM D, hA', // Sept 4, 5PM
-          day: 'll', // Sep 4 2015
-          week: 'll', // Week 46, or maybe "[W]WW - YYYY" ?
-          month: 'MMM YYYY', // Sept 2015
-          quarter: '[Q]Q - YYYY', // Q3
-          year: 'YYYY' // 2015
-        }
-      },
-      ticks: {
-        autoSkip: false
-      }
-    };
-
-    var TimeScale = Chart.Scale.extend({
-      initialize: function() {
-        if (!moment) {
-          throw new Error('Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com');
-        }
-
-        Chart.Scale.prototype.initialize.call(this);
-      },
-      getLabelMoment: function(datasetIndex, index) {
-        if (datasetIndex === null || index === null) {
-          return null;
-        }
-
-        if (typeof this.labelMoments[datasetIndex] !== 'undefined') {
-          return this.labelMoments[datasetIndex][index];
-        }
-
-        return null;
-      },
-      getLabelDiff: function(datasetIndex, index) {
-        var me = this;
-        if (datasetIndex === null || index === null) {
-          return null;
-        }
-
-        if (me.labelDiffs === undefined) {
-          me.buildLabelDiffs();
-        }
-
-        if (typeof me.labelDiffs[datasetIndex] !== 'undefined') {
-          return me.labelDiffs[datasetIndex][index];
-        }
-
-        return null;
-      },
-      getMomentStartOf: function(tick) {
-        var me = this;
-        if (me.options.time.unit === 'week' && me.options.time.isoWeekday !== false) {
-          return tick.clone().startOf('isoWeek').isoWeekday(me.options.time.isoWeekday);
-        }
-        return tick.clone().startOf(me.tickUnit);
-      },
-      determineDataLimits: function() {
-        var me = this;
-        me.labelMoments = [];
-
-        // Only parse these once. If the dataset does not have data as x,y pairs, we will use
-        // these
-        var scaleLabelMoments = [];
-        if (me.chart.data.labels && me.chart.data.labels.length > 0) {
-          helpers.each(me.chart.data.labels, function(label) {
-            var labelMoment = me.parseTime(label);
-
-            if (labelMoment.isValid()) {
-              if (me.options.time.round) {
-                labelMoment.startOf(me.options.time.round);
-              }
-              scaleLabelMoments.push(labelMoment);
-            }
-          }, me);
-
-          me.firstTick = moment.min.call(me, scaleLabelMoments);
-          me.lastTick = moment.max.call(me, scaleLabelMoments);
-        } else {
-          me.firstTick = null;
-          me.lastTick = null;
-        }
-
-        helpers.each(me.chart.data.datasets, function(dataset, datasetIndex) {
-          var momentsForDataset = [];
-          var datasetVisible = me.chart.isDatasetVisible(datasetIndex);
-
-          if (typeof dataset.data[0] === 'object' && dataset.data[0] !== null) {
-            helpers.each(dataset.data, function(value) {
-              var labelMoment = me.parseTime(me.getRightValue(value));
-
-              if (labelMoment.isValid()) {
-                if (me.options.time.round) {
-                  labelMoment.startOf(me.options.time.round);
-                }
-                momentsForDataset.push(labelMoment);
-
-                if (datasetVisible) {
-                  // May have gone outside the scale ranges, make sure we keep the first and last ticks updated
-                  me.firstTick = me.firstTick !== null ? moment.min(me.firstTick, labelMoment) : labelMoment;
-                  me.lastTick = me.lastTick !== null ? moment.max(me.lastTick, labelMoment) : labelMoment;
-                }
-              }
-            }, me);
-          } else {
-            // We have no labels. Use the ones from the scale
-            momentsForDataset = scaleLabelMoments;
-          }
-
-          me.labelMoments.push(momentsForDataset);
-        }, me);
-
-        // Set these after we've done all the data
-        if (me.options.time.min) {
-          me.firstTick = me.parseTime(me.options.time.min);
-        }
-
-        if (me.options.time.max) {
-          me.lastTick = me.parseTime(me.options.time.max);
-        }
-
-        // We will modify these, so clone for later
-        me.firstTick = (me.firstTick || moment()).clone();
-        me.lastTick = (me.lastTick || moment()).clone();
-      },
-      buildLabelDiffs: function() {
-        var me = this;
-        me.labelDiffs = [];
-        var scaleLabelDiffs = [];
-        // Parse common labels once
-        if (me.chart.data.labels && me.chart.data.labels.length > 0) {
-          helpers.each(me.chart.data.labels, function(label) {
-            var labelMoment = me.parseTime(label);
-
-            if (labelMoment.isValid()) {
-              if (me.options.time.round) {
-                labelMoment.startOf(me.options.time.round);
-              }
-              scaleLabelDiffs.push(labelMoment.diff(me.firstTick, me.tickUnit, true));
-            }
-          }, me);
-        }
-
-        helpers.each(me.chart.data.datasets, function(dataset) {
-          var diffsForDataset = [];
-
-          if (typeof dataset.data[0] === 'object' && dataset.data[0] !== null) {
-            helpers.each(dataset.data, function(value) {
-              var labelMoment = me.parseTime(me.getRightValue(value));
-
-              if (labelMoment.isValid()) {
-                if (me.options.time.round) {
-                  labelMoment.startOf(me.options.time.round);
-                }
-                diffsForDataset.push(labelMoment.diff(me.firstTick, me.tickUnit, true));
-              }
-            }, me);
-          } else {
-            // We have no labels. Use common ones
-            diffsForDataset = scaleLabelDiffs;
-          }
-
-          me.labelDiffs.push(diffsForDataset);
-        }, me);
-      },
-      buildTicks: function() {
-        var me = this;
-
-        me.ctx.save();
-        var tickFontSize = helpers.getValueOrDefault(me.options.ticks.fontSize, Chart.defaults.global.defaultFontSize);
-        var tickFontStyle = helpers.getValueOrDefault(me.options.ticks.fontStyle, Chart.defaults.global.defaultFontStyle);
-        var tickFontFamily = helpers.getValueOrDefault(me.options.ticks.fontFamily, Chart.defaults.global.defaultFontFamily);
-        var tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);
-        me.ctx.font = tickLabelFont;
-
-        me.ticks = [];
-        me.unitScale = 1; // How much we scale the unit by, ie 2 means 2x unit per step
-        me.scaleSizeInUnits = 0; // How large the scale is in the base unit (seconds, minutes, etc)
-
-        // Set unit override if applicable
-        if (me.options.time.unit) {
-          me.tickUnit = me.options.time.unit || 'day';
-          me.displayFormat = me.options.time.displayFormats[me.tickUnit];
-          me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);
-          me.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, 1);
-        } else {
-          // Determine the smallest needed unit of the time
-          var innerWidth = me.isHorizontal() ? me.width : me.height;
-
-          // Crude approximation of what the label length might be
-          var tempFirstLabel = me.tickFormatFunction(me.firstTick, 0, []);
-          var tickLabelWidth = me.ctx.measureText(tempFirstLabel).width;
-          var cosRotation = Math.cos(helpers.toRadians(me.options.ticks.maxRotation));
-          var sinRotation = Math.sin(helpers.toRadians(me.options.ticks.maxRotation));
-          tickLabelWidth = (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);
-          var labelCapacity = innerWidth / (tickLabelWidth);
-
-          // Start as small as possible
-          me.tickUnit = me.options.time.minUnit;
-          me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);
-          me.displayFormat = me.options.time.displayFormats[me.tickUnit];
-
-          var unitDefinitionIndex = 0;
-          var unitDefinition = time.units[unitDefinitionIndex];
-
-          // While we aren't ideal and we don't have units left
-          while (unitDefinitionIndex < time.units.length) {
-            // Can we scale this unit. If `false` we can scale infinitely
-            me.unitScale = 1;
-
-            if (helpers.isArray(unitDefinition.steps) && Math.ceil(me.scaleSizeInUnits / labelCapacity) < helpers.max(unitDefinition.steps)) {
-              // Use one of the predefined steps
-              for (var idx = 0; idx < unitDefinition.steps.length; ++idx) {
-                if (unitDefinition.steps[idx] >= Math.ceil(me.scaleSizeInUnits / labelCapacity)) {
-                  me.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, unitDefinition.steps[idx]);
-                  break;
-                }
-              }
-
-              break;
-            } else if ((unitDefinition.maxStep === false) || (Math.ceil(me.scaleSizeInUnits / labelCapacity) < unitDefinition.maxStep)) {
-              // We have a max step. Scale this unit
-              me.unitScale = helpers.getValueOrDefault(me.options.time.unitStepSize, Math.ceil(me.scaleSizeInUnits / labelCapacity));
-              break;
-            } else {
-              // Move to the next unit up
-              ++unitDefinitionIndex;
-              unitDefinition = time.units[unitDefinitionIndex];
-
-              me.tickUnit = unitDefinition.name;
-              var leadingUnitBuffer = me.firstTick.diff(me.getMomentStartOf(me.firstTick), me.tickUnit, true);
-              var trailingUnitBuffer = me.getMomentStartOf(me.lastTick.clone().add(1, me.tickUnit)).diff(me.lastTick, me.tickUnit, true);
-              me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true) + leadingUnitBuffer + trailingUnitBuffer;
-              me.displayFormat = me.options.time.displayFormats[unitDefinition.name];
-            }
-          }
-        }
-
-        var roundedStart;
-
-        // Only round the first tick if we have no hard minimum
-        if (!me.options.time.min) {
-          me.firstTick = me.getMomentStartOf(me.firstTick);
-          roundedStart = me.firstTick;
-        } else {
-          roundedStart = me.getMomentStartOf(me.firstTick);
-        }
-
-        // Only round the last tick if we have no hard maximum
-        if (!me.options.time.max) {
-          var roundedEnd = me.getMomentStartOf(me.lastTick);
-          var delta = roundedEnd.diff(me.lastTick, me.tickUnit, true);
-          if (delta < 0) {
-            // Do not use end of because we need me to be in the next time unit
-            me.lastTick = me.getMomentStartOf(me.lastTick.add(1, me.tickUnit));
-          } else if (delta >= 0) {
-            me.lastTick = roundedEnd;
-          }
-
-          me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);
-        }
-
-        // Tick displayFormat override
-        if (me.options.time.displayFormat) {
-          me.displayFormat = me.options.time.displayFormat;
-        }
-
-        // first tick. will have been rounded correctly if options.time.min is not specified
-        me.ticks.push(me.firstTick.clone());
-
-        // For every unit in between the first and last moment, create a moment and add it to the ticks tick
-        for (var i = me.unitScale; i <= me.scaleSizeInUnits; i += me.unitScale) {
-          var newTick = roundedStart.clone().add(i, me.tickUnit);
-
-          // Are we greater than the max time
-          if (me.options.time.max && newTick.diff(me.lastTick, me.tickUnit, true) >= 0) {
-            break;
-          }
-
-          me.ticks.push(newTick);
-        }
-
-        // Always show the right tick
-        var diff = me.ticks[me.ticks.length - 1].diff(me.lastTick, me.tickUnit);
-        if (diff !== 0 || me.scaleSizeInUnits === 0) {
-          // this is a weird case. If the <max> option is the same as the end option, we can't just diff the times because the tick was created from the roundedStart
-          // but the last tick was not rounded.
-          if (me.options.time.max) {
-            me.ticks.push(me.lastTick.clone());
-            me.scaleSizeInUnits = me.lastTick.diff(me.ticks[0], me.tickUnit, true);
-          } else {
-            me.ticks.push(me.lastTick.clone());
-            me.scaleSizeInUnits = me.lastTick.diff(me.firstTick, me.tickUnit, true);
-          }
-        }
-
-        me.ctx.restore();
-
-        // Invalidate label diffs cache
-        me.labelDiffs = undefined;
-      },
-      // Get tooltip label
-      getLabelForIndex: function(index, datasetIndex) {
-        var me = this;
-        var label = me.chart.data.labels && index < me.chart.data.labels.length ? me.chart.data.labels[index] : '';
-        var value = me.chart.data.datasets[datasetIndex].data[index];
-
-        if (value !== null && typeof value === 'object') {
-          label = me.getRightValue(value);
-        }
-
-        // Format nicely
-        if (me.options.time.tooltipFormat) {
-          label = me.parseTime(label).format(me.options.time.tooltipFormat);
-        }
-
-        return label;
-      },
-      // Function to format an individual tick mark
-      tickFormatFunction: function(tick, index, ticks) {
-        var formattedTick = tick.format(this.displayFormat);
-        var tickOpts = this.options.ticks;
-        var callback = helpers.getValueOrDefault(tickOpts.callback, tickOpts.userCallback);
-
-        if (callback) {
-          return callback(formattedTick, index, ticks);
-        }
-        return formattedTick;
-      },
-      convertTicksToLabels: function() {
-        var me = this;
-        me.tickMoments = me.ticks;
-        me.ticks = me.ticks.map(me.tickFormatFunction, me);
-      },
-      getPixelForValue: function(value, index, datasetIndex) {
-        var me = this;
-        var offset = null;
-        if (index !== undefined && datasetIndex !== undefined) {
-          offset = me.getLabelDiff(datasetIndex, index);
-        }
-
-        if (offset === null) {
-          if (!value || !value.isValid) {
-            // not already a moment object
-            value = me.parseTime(me.getRightValue(value));
-          }
-          if (value && value.isValid && value.isValid()) {
-            offset = value.diff(me.firstTick, me.tickUnit, true);
-          }
-        }
-
-        if (offset !== null) {
-          var decimal = offset !== 0 ? offset / me.scaleSizeInUnits : offset;
-
-          if (me.isHorizontal()) {
-            var valueOffset = (me.width * decimal);
-            return me.left + Math.round(valueOffset);
-          }
-
-          var heightOffset = (me.height * decimal);
-          return me.top + Math.round(heightOffset);
-        }
-      },
-      getPixelForTick: function(index) {
-        return this.getPixelForValue(this.tickMoments[index], null, null);
-      },
-      getValueForPixel: function(pixel) {
-        var me = this;
-        var innerDimension = me.isHorizontal() ? me.width : me.height;
-        var offset = (pixel - (me.isHorizontal() ? me.left : me.top)) / innerDimension;
-        offset *= me.scaleSizeInUnits;
-        return me.firstTick.clone().add(moment.duration(offset, me.tickUnit).asSeconds(), 'seconds');
-      },
-      parseTime: function(label) {
-        var me = this;
-        if (typeof me.options.time.parser === 'string') {
-          return moment(label, me.options.time.parser);
-        }
-        if (typeof me.options.time.parser === 'function') {
-          return me.options.time.parser(label);
-        }
-        // Date objects
-        if (typeof label.getMonth === 'function' || typeof label === 'number') {
-          return moment(label);
-        }
-        // Moment support
-        if (label.isValid && label.isValid()) {
-          return label;
-        }
-        // Custom parsing (return an instance of moment)
-        if (typeof me.options.time.format !== 'string' && me.options.time.format.call) {
-          console.warn('options.time.format is deprecated and replaced by options.time.parser. See http://nnnick.github.io/Chart.js/docs-v2/#scales-time-scale');
-          return me.options.time.format(label);
-        }
-        // Moment format parsing
-        return moment(label, me.options.time.format);
-      }
-    });
-    Chart.scaleService.registerScaleType('time', TimeScale, defaultConfig);
-
-  };
-
-},{"1":1}]},{},[7])(7)
-});
diff --git a/www/js/vendor/aes-js.js b/www/js/vendor/aes-js.js
deleted file mode 100644
index f18d95436b0d59930703da4e6cde4b3952db1be6..0000000000000000000000000000000000000000
--- a/www/js/vendor/aes-js.js
+++ /dev/null
@@ -1,803 +0,0 @@
-// source: https://github.com/ricmoo/aes-js - version 3.3.1
-(function(root) {
-  "use strict";
-
-  function checkInt(value) {
-    return (parseInt(value) === value);
-  }
-
-  function checkInts(arrayish) {
-    if (!checkInt(arrayish.length)) { return false; }
-
-    for (var i = 0; i < arrayish.length; i++) {
-      if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {
-        return false;
-      }
-    }
-
-    return true;
-  }
-
-  function coerceArray(arg, copy) {
-
-    // ArrayBuffer view
-    if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {
-
-      if (copy) {
-        if (arg.slice) {
-          arg = arg.slice();
-        } else {
-          arg = Array.prototype.slice.call(arg);
-        }
-      }
-
-      return arg;
-    }
-
-    // It's an array; check it is a valid representation of a byte
-    if (Array.isArray(arg)) {
-      if (!checkInts(arg)) {
-        throw new Error('Array contains invalid value: ' + arg);
-      }
-
-      return new Uint8Array(arg);
-    }
-
-    // Something else, but behaves like an array (maybe a Buffer? Arguments?)
-    if (checkInt(arg.length) && checkInts(arg)) {
-      return new Uint8Array(arg);
-    }
-
-    throw new Error('unsupported array-like object');
-  }
-
-  function createArray(length) {
-    return new Uint8Array(length);
-  }
-
-  function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {
-    if (sourceStart != null || sourceEnd != null) {
-      if (sourceArray.slice) {
-        sourceArray = sourceArray.slice(sourceStart, sourceEnd);
-      } else {
-        sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);
-      }
-    }
-    targetArray.set(sourceArray, targetStart);
-  }
-
-
-
-  var convertUtf8 = (function() {
-    function toBytes(text) {
-      var result = [], i = 0;
-      text = encodeURI(text);
-      while (i < text.length) {
-        var c = text.charCodeAt(i++);
-
-        // if it is a % sign, encode the following 2 bytes as a hex value
-        if (c === 37) {
-          result.push(parseInt(text.substr(i, 2), 16))
-          i += 2;
-
-          // otherwise, just the actual byte
-        } else {
-          result.push(c)
-        }
-      }
-
-      return coerceArray(result);
-    }
-
-    function fromBytes(bytes) {
-      var result = [], i = 0;
-
-      while (i < bytes.length) {
-        var c = bytes[i];
-
-        if (c < 128) {
-          result.push(String.fromCharCode(c));
-          i++;
-        } else if (c > 191 && c < 224) {
-          result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));
-          i += 2;
-        } else {
-          result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));
-          i += 3;
-        }
-      }
-
-      return result.join('');
-    }
-
-    return {
-      toBytes: toBytes,
-      fromBytes: fromBytes,
-    }
-  })();
-
-  var convertHex = (function() {
-    function toBytes(text) {
-      var result = [];
-      for (var i = 0; i < text.length; i += 2) {
-        result.push(parseInt(text.substr(i, 2), 16));
-      }
-
-      return result;
-    }
-
-    // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html
-    var Hex = '0123456789abcdef';
-
-    function fromBytes(bytes) {
-      var result = [];
-      for (var i = 0; i < bytes.length; i++) {
-        var v = bytes[i];
-        result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);
-      }
-      return result.join('');
-    }
-
-    return {
-      toBytes: toBytes,
-      fromBytes: fromBytes,
-    }
-  })();
-
-
-  // Number of rounds by keysize
-  var numberOfRounds = {16: 10, 24: 12, 32: 14}
-
-  // Round constant words
-  var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];
-
-  // S-box and Inverse S-box (S is for Substitution)
-  var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];
-  var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];
-
-  // Transformations for encryption
-  var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];
-  var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];
-  var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];
-  var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];
-
-  // Transformations for decryption
-  var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];
-  var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];
-  var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];
-  var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];
-
-  // Transformations for decryption key expansion
-  var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];
-  var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];
-  var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];
-  var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];
-
-  function convertToInt32(bytes) {
-    var result = [];
-    for (var i = 0; i < bytes.length; i += 4) {
-      result.push(
-        (bytes[i    ] << 24) |
-        (bytes[i + 1] << 16) |
-        (bytes[i + 2] <<  8) |
-        bytes[i + 3]
-      );
-    }
-    return result;
-  }
-
-  var AES = function(key) {
-    if (!(this instanceof AES)) {
-      throw Error('AES must be instanitated with `new`');
-    }
-
-    Object.defineProperty(this, 'key', {
-      value: coerceArray(key, true)
-    });
-
-    this._prepare();
-  }
-
-
-  AES.prototype._prepare = function() {
-
-    var rounds = numberOfRounds[this.key.length];
-    if (rounds == null) {
-      throw new Error('invalid key size (must be 16, 24 or 32 bytes)');
-    }
-
-    // encryption round keys
-    this._Ke = [];
-
-    // decryption round keys
-    this._Kd = [];
-
-    for (var i = 0; i <= rounds; i++) {
-      this._Ke.push([0, 0, 0, 0]);
-      this._Kd.push([0, 0, 0, 0]);
-    }
-
-    var roundKeyCount = (rounds + 1) * 4;
-    var KC = this.key.length / 4;
-
-    // convert the key into ints
-    var tk = convertToInt32(this.key);
-
-    // copy values into round key arrays
-    var index;
-    for (var i = 0; i < KC; i++) {
-      index = i >> 2;
-      this._Ke[index][i % 4] = tk[i];
-      this._Kd[rounds - index][i % 4] = tk[i];
-    }
-
-    // key expansion (fips-197 section 5.2)
-    var rconpointer = 0;
-    var t = KC, tt;
-    while (t < roundKeyCount) {
-      tt = tk[KC - 1];
-      tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^
-      (S[(tt >>  8) & 0xFF] << 16) ^
-      (S[ tt        & 0xFF] <<  8) ^
-      S[(tt >> 24) & 0xFF]        ^
-      (rcon[rconpointer] << 24));
-      rconpointer += 1;
-
-      // key expansion (for non-256 bit)
-      if (KC != 8) {
-        for (var i = 1; i < KC; i++) {
-          tk[i] ^= tk[i - 1];
-        }
-
-        // key expansion for 256-bit keys is "slightly different" (fips-197)
-      } else {
-        for (var i = 1; i < (KC / 2); i++) {
-          tk[i] ^= tk[i - 1];
-        }
-        tt = tk[(KC / 2) - 1];
-
-        tk[KC / 2] ^= (S[ tt        & 0xFF]        ^
-        (S[(tt >>  8) & 0xFF] <<  8) ^
-        (S[(tt >> 16) & 0xFF] << 16) ^
-        (S[(tt >> 24) & 0xFF] << 24));
-
-        for (var i = (KC / 2) + 1; i < KC; i++) {
-          tk[i] ^= tk[i - 1];
-        }
-      }
-
-      // copy values into round key arrays
-      var i = 0, r, c;
-      while (i < KC && t < roundKeyCount) {
-        r = t >> 2;
-        c = t % 4;
-        this._Ke[r][c] = tk[i];
-        this._Kd[rounds - r][c] = tk[i++];
-        t++;
-      }
-    }
-
-    // inverse-cipher-ify the decryption round key (fips-197 section 5.3)
-    for (var r = 1; r < rounds; r++) {
-      for (var c = 0; c < 4; c++) {
-        tt = this._Kd[r][c];
-        this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^
-        U2[(tt >> 16) & 0xFF] ^
-        U3[(tt >>  8) & 0xFF] ^
-        U4[ tt        & 0xFF]);
-      }
-    }
-  }
-
-  AES.prototype.encrypt = function(plaintext) {
-    if (plaintext.length != 16) {
-      throw new Error('invalid plaintext size (must be 16 bytes)');
-    }
-
-    var rounds = this._Ke.length - 1;
-    var a = [0, 0, 0, 0];
-
-    // convert plaintext to (ints ^ key)
-    var t = convertToInt32(plaintext);
-    for (var i = 0; i < 4; i++) {
-      t[i] ^= this._Ke[0][i];
-    }
-
-    // apply round transforms
-    for (var r = 1; r < rounds; r++) {
-      for (var i = 0; i < 4; i++) {
-        a[i] = (T1[(t[ i         ] >> 24) & 0xff] ^
-        T2[(t[(i + 1) % 4] >> 16) & 0xff] ^
-        T3[(t[(i + 2) % 4] >>  8) & 0xff] ^
-        T4[ t[(i + 3) % 4]        & 0xff] ^
-        this._Ke[r][i]);
-      }
-      t = a.slice();
-    }
-
-    // the last round is special
-    var result = createArray(16), tt;
-    for (var i = 0; i < 4; i++) {
-      tt = this._Ke[rounds][i];
-      result[4 * i    ] = (S[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;
-      result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;
-      result[4 * i + 2] = (S[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;
-      result[4 * i + 3] = (S[ t[(i + 3) % 4]        & 0xff] ^  tt       ) & 0xff;
-    }
-
-    return result;
-  }
-
-  AES.prototype.decrypt = function(ciphertext) {
-    if (ciphertext.length != 16) {
-      throw new Error('invalid ciphertext size (must be 16 bytes)');
-    }
-
-    var rounds = this._Kd.length - 1;
-    var a = [0, 0, 0, 0];
-
-    // convert plaintext to (ints ^ key)
-    var t = convertToInt32(ciphertext);
-    for (var i = 0; i < 4; i++) {
-      t[i] ^= this._Kd[0][i];
-    }
-
-    // apply round transforms
-    for (var r = 1; r < rounds; r++) {
-      for (var i = 0; i < 4; i++) {
-        a[i] = (T5[(t[ i          ] >> 24) & 0xff] ^
-        T6[(t[(i + 3) % 4] >> 16) & 0xff] ^
-        T7[(t[(i + 2) % 4] >>  8) & 0xff] ^
-        T8[ t[(i + 1) % 4]        & 0xff] ^
-        this._Kd[r][i]);
-      }
-      t = a.slice();
-    }
-
-    // the last round is special
-    var result = createArray(16), tt;
-    for (var i = 0; i < 4; i++) {
-      tt = this._Kd[rounds][i];
-      result[4 * i    ] = (Si[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;
-      result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;
-      result[4 * i + 2] = (Si[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;
-      result[4 * i + 3] = (Si[ t[(i + 1) % 4]        & 0xff] ^  tt       ) & 0xff;
-    }
-
-    return result;
-  }
-
-
-  /**
-   *  Mode Of Operation - Electonic Codebook (ECB)
-   */
-  var ModeOfOperationECB = function(key) {
-    if (!(this instanceof ModeOfOperationECB)) {
-      throw Error('AES must be instanitated with `new`');
-    }
-
-    this.description = "Electronic Code Block";
-    this.name = "ecb";
-
-    this._aes = new AES(key);
-  }
-
-  ModeOfOperationECB.prototype.encrypt = function(plaintext) {
-    plaintext = coerceArray(plaintext);
-
-    if ((plaintext.length % 16) !== 0) {
-      throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
-    }
-
-    var ciphertext = createArray(plaintext.length);
-    var block = createArray(16);
-
-    for (var i = 0; i < plaintext.length; i += 16) {
-      copyArray(plaintext, block, 0, i, i + 16);
-      block = this._aes.encrypt(block);
-      copyArray(block, ciphertext, i);
-    }
-
-    return ciphertext;
-  }
-
-  ModeOfOperationECB.prototype.decrypt = function(ciphertext) {
-    ciphertext = coerceArray(ciphertext);
-
-    if ((ciphertext.length % 16) !== 0) {
-      throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
-    }
-
-    var plaintext = createArray(ciphertext.length);
-    var block = createArray(16);
-
-    for (var i = 0; i < ciphertext.length; i += 16) {
-      copyArray(ciphertext, block, 0, i, i + 16);
-      block = this._aes.decrypt(block);
-      copyArray(block, plaintext, i);
-    }
-
-    return plaintext;
-  }
-
-
-  /**
-   *  Mode Of Operation - Cipher Block Chaining (CBC)
-   */
-  var ModeOfOperationCBC = function(key, iv) {
-    if (!(this instanceof ModeOfOperationCBC)) {
-      throw Error('AES must be instanitated with `new`');
-    }
-
-    this.description = "Cipher Block Chaining";
-    this.name = "cbc";
-
-    if (!iv) {
-      iv = createArray(16);
-
-    } else if (iv.length != 16) {
-      throw new Error('invalid initialation vector size (must be 16 bytes)');
-    }
-
-    this._lastCipherblock = coerceArray(iv, true);
-
-    this._aes = new AES(key);
-  }
-
-  ModeOfOperationCBC.prototype.encrypt = function(plaintext) {
-    plaintext = coerceArray(plaintext);
-
-    if ((plaintext.length % 16) !== 0) {
-      throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
-    }
-
-    var ciphertext = createArray(plaintext.length);
-    var block = createArray(16);
-
-    for (var i = 0; i < plaintext.length; i += 16) {
-      copyArray(plaintext, block, 0, i, i + 16);
-
-      for (var j = 0; j < 16; j++) {
-        block[j] ^= this._lastCipherblock[j];
-      }
-
-      this._lastCipherblock = this._aes.encrypt(block);
-      copyArray(this._lastCipherblock, ciphertext, i);
-    }
-
-    return ciphertext;
-  }
-
-  ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {
-    ciphertext = coerceArray(ciphertext);
-
-    if ((ciphertext.length % 16) !== 0) {
-      throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
-    }
-
-    var plaintext = createArray(ciphertext.length);
-    var block = createArray(16);
-
-    for (var i = 0; i < ciphertext.length; i += 16) {
-      copyArray(ciphertext, block, 0, i, i + 16);
-      block = this._aes.decrypt(block);
-
-      for (var j = 0; j < 16; j++) {
-        plaintext[i + j] = block[j] ^ this._lastCipherblock[j];
-      }
-
-      copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);
-    }
-
-    return plaintext;
-  }
-
-
-  /**
-   *  Mode Of Operation - Cipher Feedback (CFB)
-   */
-  var ModeOfOperationCFB = function(key, iv, segmentSize) {
-    if (!(this instanceof ModeOfOperationCFB)) {
-      throw Error('AES must be instanitated with `new`');
-    }
-
-    this.description = "Cipher Feedback";
-    this.name = "cfb";
-
-    if (!iv) {
-      iv = createArray(16);
-
-    } else if (iv.length != 16) {
-      throw new Error('invalid initialation vector size (must be 16 size)');
-    }
-
-    if (!segmentSize) { segmentSize = 1; }
-
-    this.segmentSize = segmentSize;
-
-    this._shiftRegister = coerceArray(iv, true);
-
-    this._aes = new AES(key);
-  }
-
-  ModeOfOperationCFB.prototype.encrypt = function(plaintext) {
-    if ((plaintext.length % this.segmentSize) != 0) {
-      throw new Error('invalid plaintext size (must be segmentSize bytes)');
-    }
-
-    var encrypted = coerceArray(plaintext, true);
-
-    var xorSegment;
-    for (var i = 0; i < encrypted.length; i += this.segmentSize) {
-      xorSegment = this._aes.encrypt(this._shiftRegister);
-      for (var j = 0; j < this.segmentSize; j++) {
-        encrypted[i + j] ^= xorSegment[j];
-      }
-
-      // Shift the register
-      copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
-      copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);
-    }
-
-    return encrypted;
-  }
-
-  ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {
-    if ((ciphertext.length % this.segmentSize) != 0) {
-      throw new Error('invalid ciphertext size (must be segmentSize bytes)');
-    }
-
-    var plaintext = coerceArray(ciphertext, true);
-
-    var xorSegment;
-    for (var i = 0; i < plaintext.length; i += this.segmentSize) {
-      xorSegment = this._aes.encrypt(this._shiftRegister);
-
-      for (var j = 0; j < this.segmentSize; j++) {
-        plaintext[i + j] ^= xorSegment[j];
-      }
-
-      // Shift the register
-      copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
-      copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);
-    }
-
-    return plaintext;
-  }
-
-  /**
-   *  Mode Of Operation - Output Feedback (OFB)
-   */
-  var ModeOfOperationOFB = function(key, iv) {
-    if (!(this instanceof ModeOfOperationOFB)) {
-      throw Error('AES must be instanitated with `new`');
-    }
-
-    this.description = "Output Feedback";
-    this.name = "ofb";
-
-    if (!iv) {
-      iv = createArray(16);
-
-    } else if (iv.length != 16) {
-      throw new Error('invalid initialation vector size (must be 16 bytes)');
-    }
-
-    this._lastPrecipher = coerceArray(iv, true);
-    this._lastPrecipherIndex = 16;
-
-    this._aes = new AES(key);
-  }
-
-  ModeOfOperationOFB.prototype.encrypt = function(plaintext) {
-    var encrypted = coerceArray(plaintext, true);
-
-    for (var i = 0; i < encrypted.length; i++) {
-      if (this._lastPrecipherIndex === 16) {
-        this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);
-        this._lastPrecipherIndex = 0;
-      }
-      encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];
-    }
-
-    return encrypted;
-  }
-
-  // Decryption is symetric
-  ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;
-
-
-  /**
-   *  Counter object for CTR common mode of operation
-   */
-  var Counter = function(initialValue) {
-    if (!(this instanceof Counter)) {
-      throw Error('Counter must be instanitated with `new`');
-    }
-
-    // We allow 0, but anything false-ish uses the default 1
-    if (initialValue !== 0 && !initialValue) { initialValue = 1; }
-
-    if (typeof(initialValue) === 'number') {
-      this._counter = createArray(16);
-      this.setValue(initialValue);
-
-    } else {
-      this.setBytes(initialValue);
-    }
-  }
-
-  Counter.prototype.setValue = function(value) {
-    if (typeof(value) !== 'number' || parseInt(value) != value) {
-      throw new Error('invalid counter value (must be an integer)');
-    }
-
-    // We cannot safely handle numbers beyond the safe range for integers
-    if (value > Number.MAX_SAFE_INTEGER) {
-      throw new Error('integer value out of safe range');
-    }
-
-    for (var index = 15; index >= 0; --index) {
-      this._counter[index] = value % 256;
-      value = parseInt(value / 256);
-    }
-  }
-
-  Counter.prototype.setBytes = function(bytes) {
-    bytes = coerceArray(bytes, true);
-
-    if (bytes.length != 16) {
-      throw new Error('invalid counter bytes size (must be 16 bytes)');
-    }
-
-    this._counter = bytes;
-  };
-
-  Counter.prototype.increment = function() {
-    for (var i = 15; i >= 0; i--) {
-      if (this._counter[i] === 255) {
-        this._counter[i] = 0;
-      } else {
-        this._counter[i]++;
-        break;
-      }
-    }
-  }
-
-
-  /**
-   *  Mode Of Operation - Counter (CTR)
-   */
-  var ModeOfOperationCTR = function(key, counter) {
-    if (!(this instanceof ModeOfOperationCTR)) {
-      throw Error('AES must be instanitated with `new`');
-    }
-
-    this.description = "Counter";
-    this.name = "ctr";
-
-    if (!(counter instanceof Counter)) {
-      counter = new Counter(counter)
-    }
-
-    this._counter = counter;
-
-    this._remainingCounter = null;
-    this._remainingCounterIndex = 16;
-
-    this._aes = new AES(key);
-  }
-
-  ModeOfOperationCTR.prototype.encrypt = function(plaintext) {
-    var encrypted = coerceArray(plaintext, true);
-
-    for (var i = 0; i < encrypted.length; i++) {
-      if (this._remainingCounterIndex === 16) {
-        this._remainingCounter = this._aes.encrypt(this._counter._counter);
-        this._remainingCounterIndex = 0;
-        this._counter.increment();
-      }
-      encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];
-    }
-
-    return encrypted;
-  }
-
-  // Decryption is symetric
-  ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;
-
-
-  ///////////////////////
-  // Padding
-
-  // See:https://tools.ietf.org/html/rfc2315
-  function pkcs7pad(data) {
-    data = coerceArray(data, true);
-    var padder = 16 - (data.length % 16);
-    var result = createArray(data.length + padder);
-    copyArray(data, result);
-    for (var i = data.length; i < result.length; i++) {
-      result[i] = padder;
-    }
-    return result;
-  }
-
-  function pkcs7strip(data) {
-    data = coerceArray(data, true);
-    if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }
-
-    var padder = data[data.length - 1];
-    if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }
-
-    var length = data.length - padder;
-    for (var i = 0; i < padder; i++) {
-      if (data[length + i] !== padder) {
-        throw new Error('PKCS#7 invalid padding byte');
-      }
-    }
-
-    var result = createArray(length);
-    copyArray(data, result, 0, 0, length);
-    return result;
-  }
-
-  ///////////////////////
-  // Exporting
-
-
-  // The block cipher
-  var aesjs = {
-    AES: AES,
-    Counter: Counter,
-
-    ModeOfOperation: {
-      ecb: ModeOfOperationECB,
-      cbc: ModeOfOperationCBC,
-      cfb: ModeOfOperationCFB,
-      ofb: ModeOfOperationOFB,
-      ctr: ModeOfOperationCTR
-    },
-
-    utils: {
-      hex: convertHex,
-      utf8: convertUtf8
-    },
-
-    padding: {
-      pkcs7: {
-        pad: pkcs7pad,
-        strip: pkcs7strip
-      }
-    },
-
-    _arrayTest: {
-      coerceArray: coerceArray,
-      createArray: createArray,
-      copyArray: copyArray,
-    }
-  };
-
-
-  // node.js
-  if (typeof exports !== 'undefined') {
-    module.exports = aesjs
-
-    // RequireJS/AMD
-    // http://www.requirejs.org/docs/api.html
-    // https://github.com/amdjs/amdjs-api/wiki/AMD
-  } else if (typeof(define) === 'function' && define.amd) {
-    define(aesjs);
-
-    // Web Browsers
-  } else {
-
-    // If there was an existing library at "aesjs" make sure it's still available
-    if (root.aesjs) {
-      aesjs._aesjs = root.aesjs;
-    }
-
-    root.aesjs = aesjs;
-  }
-
-
-})(this);
diff --git a/www/js/vendor/ion-digit-keyboard.min.js b/www/js/vendor/ion-digit-keyboard.min.js
deleted file mode 100644
index 629f661888024d2fbd731baffb8b579ed3678ae8..0000000000000000000000000000000000000000
--- a/www/js/vendor/ion-digit-keyboard.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){var i=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(i),i.styleSheet)i.styleSheet.disabled||(i.styleSheet.cssText=t);else try{i.innerHTML=t}catch(d){i.innerText=t}}(document,".digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number .digit-keyboard-key-letters.hidden,.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper.hidden{visibility:hidden}.digit-keyboard{position:absolute;left:0;right:0;bottom:0;background:0 0;font-size:24px;z-index:5000}.digit-keyboard *{box-sizing:border-box}.digit-keyboard .digit-keyboard-row{display:flex;flex-direction:row;border-bottom:1px solid #333}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper{flex:1;text-align:center;position:relative;height:60px}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key{display:block;margin:0 auto;position:absolute;left:0;top:0;right:0;bottom:0;border-right:1px solid #333;border-left:1px solid #333;line-height:60px;-webkit-transition:background-color .1s linear;-moz-transition:background-color .1s linear;-o-transition:background-color .1s linear;-ms-transition:background-color .1s linear;transition:background-color .1s linear}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number{font-size:1em;vertical-align:middle;display:inline-block;line-height:normal;text-align:center;margin-top:-.4em}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number .digit-keyboard-key-letters{font-size:9.6px;line-height:9.6px;height:9.6px;margin-top:-.25em}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-action{position:absolute;left:0;top:0;right:0;bottom:0;line-height:60px;font-size:24px}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper:first-child .digit-keyboard-key{border-right:none}.digit-keyboard .digit-keyboard-row .digit-keyboard-key-wrapper:last-child .digit-keyboard-key{border-left:none}.digit-keyboard .digit-keyboard-row:first-child{border-top:1px solid #333}.digit-keyboard .digit-keyboard-row:last-child{border:none}.digit-keyboard .digit-keyboard-row:last-child .digit-keyboard-key-wrapper .digit-keyboard-key{border-bottom:1px solid #333}.digit-keyboard.align-center{margin:0 auto}.digit-keyboard.align-left{margin-right:auto}.digit-keyboard.align-right{margin-left:auto}.digit-keyboard.no-letters .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number{margin-top:-.3em}.digit-keyboard.no-letters .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number .digit-keyboard-key-letters{display:none}.digit-keyboard.round-buttons .digit-keyboard-row{border:none}.digit-keyboard.round-buttons .digit-keyboard-row .digit-keyboard-key-wrapper{margin:10px 0 0}.digit-keyboard.round-buttons .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key{width:60px;-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;border:1px solid #333}.digit-keyboard.round-buttons .digit-keyboard-row:last-child .digit-keyboard-key-wrapper{margin-bottom:10px}.digit-keyboard.round-buttons.no-letters .digit-keyboard-row .digit-keyboard-key-wrapper .digit-keyboard-key .digit-keyboard-key-number{height:57.6px;line-height:57.6px}.digit-keyboard.keyboard-light *{border-color:#e6e6e6!important}.digit-keyboard.keyboard-light .digit-keyboard-key{background:#fff;color:#444}.digit-keyboard.keyboard-light .digit-keyboard-key.activated{background:#e6e6e6}.digit-keyboard.keyboard-stable *{border-color:#dfdfdf!important}.digit-keyboard.keyboard-stable .digit-keyboard-key{background:#f8f8f8;color:#444}.digit-keyboard.keyboard-stable .digit-keyboard-key.activated{background:#dfdfdf}.digit-keyboard.keyboard-positive *{border-color:#0c60ee!important}.digit-keyboard.keyboard-positive .digit-keyboard-key{background:#387ef5;color:#fff}.digit-keyboard.keyboard-positive .digit-keyboard-key.activated{background:#0c60ee}.digit-keyboard.keyboard-calm *{border-color:#0a9dc7!important}.digit-keyboard.keyboard-calm .digit-keyboard-key{background:#11c1f3;color:#fff}.digit-keyboard.keyboard-calm .digit-keyboard-key.activated{background:#0a9dc7}.digit-keyboard.keyboard-balanced *{border-color:#28a54c!important}.digit-keyboard.keyboard-balanced .digit-keyboard-key{background:#33cd5f;color:#fff}.digit-keyboard.keyboard-balanced .digit-keyboard-key.activated{background:#28a54c}.digit-keyboard.keyboard-energized *{border-color:#e6b500!important}.digit-keyboard.keyboard-energized .digit-keyboard-key{background:#ffc900;color:#fff}.digit-keyboard.keyboard-energized .digit-keyboard-key.activated{background:#e6b500}.digit-keyboard.keyboard-assertive *{border-color:#e42112!important}.digit-keyboard.keyboard-assertive .digit-keyboard-key{background:#ef473a;color:#fff}.digit-keyboard.keyboard-assertive .digit-keyboard-key.activated{background:#e42112}.digit-keyboard.keyboard-royal *{border-color:#6b46e5!important}.digit-keyboard.keyboard-royal .digit-keyboard-key{background:#886aea;color:#fff}.digit-keyboard.keyboard-royal .digit-keyboard-key.activated{background:#6b46e5}.digit-keyboard.keyboard-dark *{border-color:#2b2b2b!important}.digit-keyboard.keyboard-dark .digit-keyboard-key{background:#444;color:#fff}.digit-keyboard.keyboard-dark .digit-keyboard-key.activated{background:#2b2b2b}.digit-keyboard.keyboard-opaque-black *{border-color:rgba(0,0,0,.75)!important}.digit-keyboard.keyboard-opaque-black .digit-keyboard-key{background:rgba(0,0,0,.15);color:rgba(0,0,0,.75)}.digit-keyboard.keyboard-opaque-black .digit-keyboard-key.activated{background:rgba(0,0,0,.25)}.digit-keyboard.keyboard-opaque-white *{border-color:rgba(255,255,255,.75)!important}.digit-keyboard.keyboard-opaque-white .digit-keyboard-key{background:rgba(255,255,255,.15);color:rgba(255,255,255,.75)}.digit-keyboard.keyboard-opaque-white .digit-keyboard-key.activated{background:rgba(255,255,255,.25)}.digit-keyboard.animation-slide-up{-webkit-transition:transform linear 150ms;transition:transform linear 150ms;transform:translate3d(0,0,0)}.digit-keyboard.animation-slide-up.ng-hide{transform:translate3d(0,100%,0)}.digit-keyboard.animation-pop{-webkit-transition:transform linear 150ms;transition:transform linear 150ms;transform:scale3d(1,1,1)}.digit-keyboard.animation-pop.ng-hide{transform:scale3d(0,0,1)}"),!function(e){try{e=angular.module("ion-digit-keyboard.templates")}catch(t){e=angular.module("ion-digit-keyboard.templates",[])}e.run(["$templateCache",function(e){e.put("keyboard.tpl.html","<div class=\"digit-keyboard align-{{align}} keyboard-{{theme}} animation-{{animation}} {{roundButtons ? 'round-buttons' : ''}} {{showLetters == false ? 'no-letters' : ''}} {{(ngShow == false || ngHide == true) ? 'ng-hide' : ''}}\" style=\"width: {{width}};\"><div class=digit-keyboard-row><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(1)><div class=digit-keyboard-key-number>1<div class=digit-keyboard-key-letters></div></div></div></div><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(2)><div class=digit-keyboard-key-number>2<div class=digit-keyboard-key-letters>ABC</div></div></div></div><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(3)><div class=digit-keyboard-key-number>3<div class=digit-keyboard-key-letters>DEF</div></div></div></div></div><div class=digit-keyboard-row><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(4)><div class=digit-keyboard-key-number>4<div class=digit-keyboard-key-letters>GHI</div></div></div></div><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(5)><div class=digit-keyboard-key-number>5<div class=digit-keyboard-key-letters>JKL</div></div></div></div><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(6)><div class=digit-keyboard-key-number>6<div class=digit-keyboard-key-letters>MNO</div></div></div></div></div><div class=digit-keyboard-row><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(7)><div class=digit-keyboard-key-number>7<div class=digit-keyboard-key-letters>PQRS</div></div></div></div><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(8)><div class=digit-keyboard-key-number>8<div class=digit-keyboard-key-letters>TUV</div></div></div></div><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(9)><div class=digit-keyboard-key-number>9<div class=digit-keyboard-key-letters>WXYZ</div></div></div></div></div><div class=digit-keyboard-row><div class=\"digit-keyboard-key-wrapper {{showLeftAction == false ? 'hidden' : ''}}\"><div class=digit-keyboard-key ng-click=leftAction($event) style={{leftStyle}}><div class=digit-keyboard-key-action ng-bind-html=leftHtml style={{leftFontSize}}></div></div></div><div class=digit-keyboard-key-wrapper><div class=digit-keyboard-key ng-click=numberAction(0)><div class=digit-keyboard-key-number style=\"margin-top: -0.30em;\">0</div></div></div><div class=\"digit-keyboard-key-wrapper {{showRightAction == false ? 'hidden' : ''}}\"><div class=digit-keyboard-key ng-click=rightAction($event) style={{rightStyle}}><div class=digit-keyboard-key-action ng-bind-html=rightHtml style={{rightFontSize}}></div></div></div></div></div>")}])}(),angular.module("ion-digit-keyboard.directive",[]).directive("ionDigitKeyboard",["$timeout","$ionicScrollDelegate","$templateCache",function(e,t,i){var d=150;return{restrict:"EA",template:i.get("keyboard.tpl.html"),replace:!0,scope:{settings:"=settings",ngShow:"=",ngHide:"="},link:function(i,o,r){function a(){1==b&&(k.style.bottom="0px",k.style.height=s)}function n(){e(function(){if(1==b){var e=o[0].offsetHeight;s=k.style.height,k.style.height="auto",k.style.bottom=e+1+"px"}},d+10)}function y(){i.ngShow===!0?n():i.ngShow===!1&&a(),t.resize()}function g(){i.ngHide===!0?a():i.ngHide===!1&&n(),t.resize()}"undefined"==typeof i.settings&&(i.settings={});var k,s,b=!0,l="ion-content",c={},u={};if(i.leftStyle="",i.rightStyle="",i.leftFontSize="",i.rightFontSize="",i.showLetters="undefined"==typeof i.settings.showLetters?!1:i.settings.showLetters,i.roundButtons="undefined"==typeof i.settings.roundButtons?!1:i.settings.roundButtons,i.numberAction=i.settings.action||function(){},i.width=i.settings.width||"100%",i.align=i.settings.align||"center",i.animation=i.settings.animation||"slide-up",i.theme=i.settings.theme||"stable","undefined"!=typeof i.settings.leftButton&&"object"==typeof i.settings.leftButton.style&&("undefined"!=typeof i.settings.leftButton.style.color&&(i.leftStyle+="color: "+i.settings.leftButton.style.color+";"),"undefined"!=typeof i.settings.leftButton.style.bgColor&&(c["default"]=i.settings.leftButton.style.bgColor,i.leftStyle+="background-color: "+c["default"]+";"),"undefined"!=typeof i.settings.leftButton.style.activeBgColor&&(c.active=i.settings.leftButton.style.activeBgColor),"undefined"!=typeof i.settings.leftButton.style.borderColor&&(i.leftStyle+="border-color: "+i.settings.leftButton.style.borderColor+" !important;"),"undefined"!=typeof i.settings.leftButton.style.fontSize&&(i.leftFontSize="font-size: "+i.settings.leftButton.style.fontSize+" !important;")),"undefined"!=typeof i.settings.rightButton&&"object"==typeof i.settings.rightButton.style&&("undefined"!=typeof i.settings.rightButton.style.color&&(i.rightStyle+="color: "+i.settings.rightButton.style.color+";"),"undefined"!=typeof i.settings.rightButton.style.bgColor&&(u["default"]=i.settings.rightButton.style.bgColor,i.rightStyle+="background-color: "+u["default"]+";"),"undefined"!=typeof i.settings.rightButton.style.activeBgColor&&(u.active=i.settings.rightButton.style.activeBgColor),"undefined"!=typeof i.settings.rightButton.style.borderColor&&(i.rightStyle+="border-color: "+i.settings.rightButton.style.borderColor+" !important;"),"undefined"!=typeof i.settings.rightButton.style.fontSize&&(i.rightFontSize="font-size: "+i.settings.rightButton.style.fontSize+" !important;")),i.showLeftAction=!1,"undefined"!=typeof i.settings.leftButton&&(i.leftHtml=i.settings.leftButton.html,i.showLeftAction=!0,i.leftAction=function(e){if(c.active){var t=e.target;"I"==t.tagName?t=t.parentNode.parentNode:t.className.indexOf("digit-keyboard-key-action")>-1&&(t=t.parentNode),"undefined"==typeof c["default"]&&(c["default"]=t.style.backgroundColor),t.style.backgroundColor=c.active,setTimeout(function(){t.style.backgroundColor=c["default"]},100)}i.settings.leftButton.action()}),i.showRightAction=!1,"undefined"!=typeof i.settings.rightButton&&(i.rightHtml=i.settings.rightButton.html,i.showRightAction=!0,i.rightAction=function(e){if(u.active){var t=e.target;"I"==t.tagName?t=t.parentNode.parentNode:t.className.indexOf("digit-keyboard-key-action")>-1&&(t=t.parentNode),"undefined"==typeof u["default"]&&(u["default"]=t.style.backgroundColor),t.style.backgroundColor=u.active,setTimeout(function(){t.style.backgroundColor=u["default"]},100)}i.settings.rightButton.action()}),"object"==typeof i.settings.resizeContent||"boolean"==typeof i.settings.resizeContent)if("object"==typeof i.settings.resizeContent)var b="undefined"==typeof i.settings.resizeContent.enable?!0:i.settings.resizeContent.enable,l="undefined"==typeof i.settings.resizeContent.element?"ion-content":i.settings.resizeContent.element;else"boolean"==typeof i.settings.resizeContent&&(b=i.settings.resizeContent);k=o[0].parentElement.querySelectorAll(l)[0],i.$watch("ngShow",y),i.$watch("ngHide",g)}}}]),angular.module("ion-digit-keyboard",["ionic","ion-digit-keyboard.templates","ion-digit-keyboard.directive"]);
\ No newline at end of file
diff --git a/www/js/vendor/leaflet-src.js b/www/js/vendor/leaflet-src.js
deleted file mode 100644
index d3d5635741c2dc68a16e0a3b72ed000ede34e3a4..0000000000000000000000000000000000000000
--- a/www/js/vendor/leaflet-src.js
+++ /dev/null
@@ -1,9168 +0,0 @@
-/*
- Leaflet, a JavaScript library for mobile-friendly interactive maps. http://leafletjs.com
- (c) 2010-2013, Vladimir Agafonkin
- (c) 2010-2011, CloudMade
-*/
-(function (window, document, undefined) {
-var oldL = window.L,
-    L = {};
-
-L.version = '0.7.7';
-
-// define Leaflet for Node module pattern loaders, including Browserify
-if (typeof module === 'object' && typeof module.exports === 'object') {
-	module.exports = L;
-
-// define Leaflet as an AMD module
-} else if (typeof define === 'function' && define.amd) {
-	define(L);
-}
-
-// define Leaflet as a global L variable, saving the original L to restore later if needed
-
-L.noConflict = function () {
-	window.L = oldL;
-	return this;
-};
-
-window.L = L;
-
-
-/*
- * L.Util contains various utility functions used throughout Leaflet code.
- */
-
-L.Util = {
-	extend: function (dest) { // (Object[, Object, ...]) ->
-		var sources = Array.prototype.slice.call(arguments, 1),
-		    i, j, len, src;
-
-		for (j = 0, len = sources.length; j < len; j++) {
-			src = sources[j] || {};
-			for (i in src) {
-				if (src.hasOwnProperty(i)) {
-					dest[i] = src[i];
-				}
-			}
-		}
-		return dest;
-	},
-
-	bind: function (fn, obj) { // (Function, Object) -> Function
-		var args = arguments.length > 2 ? Array.prototype.slice.call(arguments, 2) : null;
-		return function () {
-			return fn.apply(obj, args || arguments);
-		};
-	},
-
-	stamp: (function () {
-		var lastId = 0,
-		    key = '_leaflet_id';
-		return function (obj) {
-			obj[key] = obj[key] || ++lastId;
-			return obj[key];
-		};
-	}()),
-
-	invokeEach: function (obj, method, context) {
-		var i, args;
-
-		if (typeof obj === 'object') {
-			args = Array.prototype.slice.call(arguments, 3);
-
-			for (i in obj) {
-				method.apply(context, [i, obj[i]].concat(args));
-			}
-			return true;
-		}
-
-		return false;
-	},
-
-	limitExecByInterval: function (fn, time, context) {
-		var lock, execOnUnlock;
-
-		return function wrapperFn() {
-			var args = arguments;
-
-			if (lock) {
-				execOnUnlock = true;
-				return;
-			}
-
-			lock = true;
-
-			setTimeout(function () {
-				lock = false;
-
-				if (execOnUnlock) {
-					wrapperFn.apply(context, args);
-					execOnUnlock = false;
-				}
-			}, time);
-
-			fn.apply(context, args);
-		};
-	},
-
-	falseFn: function () {
-		return false;
-	},
-
-	formatNum: function (num, digits) {
-		var pow = Math.pow(10, digits || 5);
-		return Math.round(num * pow) / pow;
-	},
-
-	trim: function (str) {
-		return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
-	},
-
-	splitWords: function (str) {
-		return L.Util.trim(str).split(/\s+/);
-	},
-
-	setOptions: function (obj, options) {
-		obj.options = L.extend({}, obj.options, options);
-		return obj.options;
-	},
-
-	getParamString: function (obj, existingUrl, uppercase) {
-		var params = [];
-		for (var i in obj) {
-			params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));
-		}
-		return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
-	},
-	template: function (str, data) {
-		return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
-			var value = data[key];
-			if (value === undefined) {
-				throw new Error('No value provided for variable ' + str);
-			} else if (typeof value === 'function') {
-				value = value(data);
-			}
-			return value;
-		});
-	},
-
-	isArray: Array.isArray || function (obj) {
-		return (Object.prototype.toString.call(obj) === '[object Array]');
-	},
-
-	emptyImageUrl: 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='
-};
-
-(function () {
-
-	// inspired by http://paulirish.com/2011/requestanimationframe-for-smart-animating/
-
-	function getPrefixed(name) {
-		var i, fn,
-		    prefixes = ['webkit', 'moz', 'o', 'ms'];
-
-		for (i = 0; i < prefixes.length && !fn; i++) {
-			fn = window[prefixes[i] + name];
-		}
-
-		return fn;
-	}
-
-	var lastTime = 0;
-
-	function timeoutDefer(fn) {
-		var time = +new Date(),
-		    timeToCall = Math.max(0, 16 - (time - lastTime));
-
-		lastTime = time + timeToCall;
-		return window.setTimeout(fn, timeToCall);
-	}
-
-	var requestFn = window.requestAnimationFrame ||
-	        getPrefixed('RequestAnimationFrame') || timeoutDefer;
-
-	var cancelFn = window.cancelAnimationFrame ||
-	        getPrefixed('CancelAnimationFrame') ||
-	        getPrefixed('CancelRequestAnimationFrame') ||
-	        function (id) { window.clearTimeout(id); };
-
-
-	L.Util.requestAnimFrame = function (fn, context, immediate, element) {
-		fn = L.bind(fn, context);
-
-		if (immediate && requestFn === timeoutDefer) {
-			fn();
-		} else {
-			return requestFn.call(window, fn, element);
-		}
-	};
-
-	L.Util.cancelAnimFrame = function (id) {
-		if (id) {
-			cancelFn.call(window, id);
-		}
-	};
-
-}());
-
-// shortcuts for most used utility functions
-L.extend = L.Util.extend;
-L.bind = L.Util.bind;
-L.stamp = L.Util.stamp;
-L.setOptions = L.Util.setOptions;
-
-
-/*
- * L.Class powers the OOP facilities of the library.
- * Thanks to John Resig and Dean Edwards for inspiration!
- */
-
-L.Class = function () {};
-
-L.Class.extend = function (props) {
-
-	// extended class with the new prototype
-	var NewClass = function () {
-
-		// call the constructor
-		if (this.initialize) {
-			this.initialize.apply(this, arguments);
-		}
-
-		// call all constructor hooks
-		if (this._initHooks) {
-			this.callInitHooks();
-		}
-	};
-
-	// instantiate class without calling constructor
-	var F = function () {};
-	F.prototype = this.prototype;
-
-	var proto = new F();
-	proto.constructor = NewClass;
-
-	NewClass.prototype = proto;
-
-	//inherit parent's statics
-	for (var i in this) {
-		if (this.hasOwnProperty(i) && i !== 'prototype') {
-			NewClass[i] = this[i];
-		}
-	}
-
-	// mix static properties into the class
-	if (props.statics) {
-		L.extend(NewClass, props.statics);
-		delete props.statics;
-	}
-
-	// mix includes into the prototype
-	if (props.includes) {
-		L.Util.extend.apply(null, [proto].concat(props.includes));
-		delete props.includes;
-	}
-
-	// merge options
-	if (props.options && proto.options) {
-		props.options = L.extend({}, proto.options, props.options);
-	}
-
-	// mix given properties into the prototype
-	L.extend(proto, props);
-
-	proto._initHooks = [];
-
-	var parent = this;
-	// jshint camelcase: false
-	NewClass.__super__ = parent.prototype;
-
-	// add method for calling all hooks
-	proto.callInitHooks = function () {
-
-		if (this._initHooksCalled) { return; }
-
-		if (parent.prototype.callInitHooks) {
-			parent.prototype.callInitHooks.call(this);
-		}
-
-		this._initHooksCalled = true;
-
-		for (var i = 0, len = proto._initHooks.length; i < len; i++) {
-			proto._initHooks[i].call(this);
-		}
-	};
-
-	return NewClass;
-};
-
-
-// method for adding properties to prototype
-L.Class.include = function (props) {
-	L.extend(this.prototype, props);
-};
-
-// merge new default options to the Class
-L.Class.mergeOptions = function (options) {
-	L.extend(this.prototype.options, options);
-};
-
-// add a constructor hook
-L.Class.addInitHook = function (fn) { // (Function) || (String, args...)
-	var args = Array.prototype.slice.call(arguments, 1);
-
-	var init = typeof fn === 'function' ? fn : function () {
-		this[fn].apply(this, args);
-	};
-
-	this.prototype._initHooks = this.prototype._initHooks || [];
-	this.prototype._initHooks.push(init);
-};
-
-
-/*
- * L.Mixin.Events is used to add custom events functionality to Leaflet classes.
- */
-
-var eventsKey = '_leaflet_events';
-
-L.Mixin = {};
-
-L.Mixin.Events = {
-
-	addEventListener: function (types, fn, context) { // (String, Function[, Object]) or (Object[, Object])
-
-		// types can be a map of types/handlers
-		if (L.Util.invokeEach(types, this.addEventListener, this, fn, context)) { return this; }
-
-		var events = this[eventsKey] = this[eventsKey] || {},
-		    contextId = context && context !== this && L.stamp(context),
-		    i, len, event, type, indexKey, indexLenKey, typeIndex;
-
-		// types can be a string of space-separated words
-		types = L.Util.splitWords(types);
-
-		for (i = 0, len = types.length; i < len; i++) {
-			event = {
-				action: fn,
-				context: context || this
-			};
-			type = types[i];
-
-			if (contextId) {
-				// store listeners of a particular context in a separate hash (if it has an id)
-				// gives a major performance boost when removing thousands of map layers
-
-				indexKey = type + '_idx';
-				indexLenKey = indexKey + '_len';
-
-				typeIndex = events[indexKey] = events[indexKey] || {};
-
-				if (!typeIndex[contextId]) {
-					typeIndex[contextId] = [];
-
-					// keep track of the number of keys in the index to quickly check if it's empty
-					events[indexLenKey] = (events[indexLenKey] || 0) + 1;
-				}
-
-				typeIndex[contextId].push(event);
-
-
-			} else {
-				events[type] = events[type] || [];
-				events[type].push(event);
-			}
-		}
-
-		return this;
-	},
-
-	hasEventListeners: function (type) { // (String) -> Boolean
-		var events = this[eventsKey];
-		return !!events && ((type in events && events[type].length > 0) ||
-		                    (type + '_idx' in events && events[type + '_idx_len'] > 0));
-	},
-
-	removeEventListener: function (types, fn, context) { // ([String, Function, Object]) or (Object[, Object])
-
-		if (!this[eventsKey]) {
-			return this;
-		}
-
-		if (!types) {
-			return this.clearAllEventListeners();
-		}
-
-		if (L.Util.invokeEach(types, this.removeEventListener, this, fn, context)) { return this; }
-
-		var events = this[eventsKey],
-		    contextId = context && context !== this && L.stamp(context),
-		    i, len, type, listeners, j, indexKey, indexLenKey, typeIndex, removed;
-
-		types = L.Util.splitWords(types);
-
-		for (i = 0, len = types.length; i < len; i++) {
-			type = types[i];
-			indexKey = type + '_idx';
-			indexLenKey = indexKey + '_len';
-
-			typeIndex = events[indexKey];
-
-			if (!fn) {
-				// clear all listeners for a type if function isn't specified
-				delete events[type];
-				delete events[indexKey];
-				delete events[indexLenKey];
-
-			} else {
-				listeners = contextId && typeIndex ? typeIndex[contextId] : events[type];
-
-				if (listeners) {
-					for (j = listeners.length - 1; j >= 0; j--) {
-						if ((listeners[j].action === fn) && (!context || (listeners[j].context === context))) {
-							removed = listeners.splice(j, 1);
-							// set the old action to a no-op, because it is possible
-							// that the listener is being iterated over as part of a dispatch
-							removed[0].action = L.Util.falseFn;
-						}
-					}
-
-					if (context && typeIndex && (listeners.length === 0)) {
-						delete typeIndex[contextId];
-						events[indexLenKey]--;
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	clearAllEventListeners: function () {
-		delete this[eventsKey];
-		return this;
-	},
-
-	fireEvent: function (type, data) { // (String[, Object])
-		if (!this.hasEventListeners(type)) {
-			return this;
-		}
-
-		var event = L.Util.extend({}, data, { type: type, target: this });
-
-		var events = this[eventsKey],
-		    listeners, i, len, typeIndex, contextId;
-
-		if (events[type]) {
-			// make sure adding/removing listeners inside other listeners won't cause infinite loop
-			listeners = events[type].slice();
-
-			for (i = 0, len = listeners.length; i < len; i++) {
-				listeners[i].action.call(listeners[i].context, event);
-			}
-		}
-
-		// fire event for the context-indexed listeners as well
-		typeIndex = events[type + '_idx'];
-
-		for (contextId in typeIndex) {
-			listeners = typeIndex[contextId].slice();
-
-			if (listeners) {
-				for (i = 0, len = listeners.length; i < len; i++) {
-					listeners[i].action.call(listeners[i].context, event);
-				}
-			}
-		}
-
-		return this;
-	},
-
-	addOneTimeEventListener: function (types, fn, context) {
-
-		if (L.Util.invokeEach(types, this.addOneTimeEventListener, this, fn, context)) { return this; }
-
-		var handler = L.bind(function () {
-			this
-			    .removeEventListener(types, fn, context)
-			    .removeEventListener(types, handler, context);
-		}, this);
-
-		return this
-		    .addEventListener(types, fn, context)
-		    .addEventListener(types, handler, context);
-	}
-};
-
-L.Mixin.Events.on = L.Mixin.Events.addEventListener;
-L.Mixin.Events.off = L.Mixin.Events.removeEventListener;
-L.Mixin.Events.once = L.Mixin.Events.addOneTimeEventListener;
-L.Mixin.Events.fire = L.Mixin.Events.fireEvent;
-
-
-/*
- * L.Browser handles different browser and feature detections for internal Leaflet use.
- */
-
-(function () {
-
-	var ie = 'ActiveXObject' in window,
-		ielt9 = ie && !document.addEventListener,
-
-	    // terrible browser detection to work around Safari / iOS / Android browser bugs
-	    ua = navigator.userAgent.toLowerCase(),
-	    webkit = ua.indexOf('webkit') !== -1,
-	    chrome = ua.indexOf('chrome') !== -1,
-	    phantomjs = ua.indexOf('phantom') !== -1,
-	    android = ua.indexOf('android') !== -1,
-	    android23 = ua.search('android [23]') !== -1,
-		gecko = ua.indexOf('gecko') !== -1,
-
-	    mobile = typeof orientation !== undefined + '',
-	    msPointer = !window.PointerEvent && window.MSPointerEvent,
-		pointer = (window.PointerEvent && window.navigator.pointerEnabled) ||
-				  msPointer,
-	    retina = ('devicePixelRatio' in window && window.devicePixelRatio > 1) ||
-	             ('matchMedia' in window && window.matchMedia('(min-resolution:144dpi)') &&
-	              window.matchMedia('(min-resolution:144dpi)').matches),
-
-	    doc = document.documentElement,
-	    ie3d = ie && ('transition' in doc.style),
-	    webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23,
-	    gecko3d = 'MozPerspective' in doc.style,
-	    opera3d = 'OTransition' in doc.style,
-	    any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d || opera3d) && !phantomjs;
-
-	var touch = !window.L_NO_TOUCH && !phantomjs && (pointer || 'ontouchstart' in window ||
-		(window.DocumentTouch && document instanceof window.DocumentTouch));
-
-	L.Browser = {
-		ie: ie,
-		ielt9: ielt9,
-		webkit: webkit,
-		gecko: gecko && !webkit && !window.opera && !ie,
-
-		android: android,
-		android23: android23,
-
-		chrome: chrome,
-
-		ie3d: ie3d,
-		webkit3d: webkit3d,
-		gecko3d: gecko3d,
-		opera3d: opera3d,
-		any3d: any3d,
-
-		mobile: mobile,
-		mobileWebkit: mobile && webkit,
-		mobileWebkit3d: mobile && webkit3d,
-		mobileOpera: mobile && window.opera,
-
-		touch: touch,
-		msPointer: msPointer,
-		pointer: pointer,
-
-		retina: retina
-	};
-
-}());
-
-
-/*
- * L.Point represents a point with x and y coordinates.
- */
-
-L.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
-	this.x = (round ? Math.round(x) : x);
-	this.y = (round ? Math.round(y) : y);
-};
-
-L.Point.prototype = {
-
-	clone: function () {
-		return new L.Point(this.x, this.y);
-	},
-
-	// non-destructive, returns a new point
-	add: function (point) {
-		return this.clone()._add(L.point(point));
-	},
-
-	// destructive, used directly for performance in situations where it's safe to modify existing point
-	_add: function (point) {
-		this.x += point.x;
-		this.y += point.y;
-		return this;
-	},
-
-	subtract: function (point) {
-		return this.clone()._subtract(L.point(point));
-	},
-
-	_subtract: function (point) {
-		this.x -= point.x;
-		this.y -= point.y;
-		return this;
-	},
-
-	divideBy: function (num) {
-		return this.clone()._divideBy(num);
-	},
-
-	_divideBy: function (num) {
-		this.x /= num;
-		this.y /= num;
-		return this;
-	},
-
-	multiplyBy: function (num) {
-		return this.clone()._multiplyBy(num);
-	},
-
-	_multiplyBy: function (num) {
-		this.x *= num;
-		this.y *= num;
-		return this;
-	},
-
-	round: function () {
-		return this.clone()._round();
-	},
-
-	_round: function () {
-		this.x = Math.round(this.x);
-		this.y = Math.round(this.y);
-		return this;
-	},
-
-	floor: function () {
-		return this.clone()._floor();
-	},
-
-	_floor: function () {
-		this.x = Math.floor(this.x);
-		this.y = Math.floor(this.y);
-		return this;
-	},
-
-	distanceTo: function (point) {
-		point = L.point(point);
-
-		var x = point.x - this.x,
-		    y = point.y - this.y;
-
-		return Math.sqrt(x * x + y * y);
-	},
-
-	equals: function (point) {
-		point = L.point(point);
-
-		return point.x === this.x &&
-		       point.y === this.y;
-	},
-
-	contains: function (point) {
-		point = L.point(point);
-
-		return Math.abs(point.x) <= Math.abs(this.x) &&
-		       Math.abs(point.y) <= Math.abs(this.y);
-	},
-
-	toString: function () {
-		return 'Point(' +
-		        L.Util.formatNum(this.x) + ', ' +
-		        L.Util.formatNum(this.y) + ')';
-	}
-};
-
-L.point = function (x, y, round) {
-	if (x instanceof L.Point) {
-		return x;
-	}
-	if (L.Util.isArray(x)) {
-		return new L.Point(x[0], x[1]);
-	}
-	if (x === undefined || x === null) {
-		return x;
-	}
-	return new L.Point(x, y, round);
-};
-
-
-/*
- * L.Bounds represents a rectangular area on the screen in pixel coordinates.
- */
-
-L.Bounds = function (a, b) { //(Point, Point) or Point[]
-	if (!a) { return; }
-
-	var points = b ? [a, b] : a;
-
-	for (var i = 0, len = points.length; i < len; i++) {
-		this.extend(points[i]);
-	}
-};
-
-L.Bounds.prototype = {
-	// extend the bounds to contain the given point
-	extend: function (point) { // (Point)
-		point = L.point(point);
-
-		if (!this.min && !this.max) {
-			this.min = point.clone();
-			this.max = point.clone();
-		} else {
-			this.min.x = Math.min(point.x, this.min.x);
-			this.max.x = Math.max(point.x, this.max.x);
-			this.min.y = Math.min(point.y, this.min.y);
-			this.max.y = Math.max(point.y, this.max.y);
-		}
-		return this;
-	},
-
-	getCenter: function (round) { // (Boolean) -> Point
-		return new L.Point(
-		        (this.min.x + this.max.x) / 2,
-		        (this.min.y + this.max.y) / 2, round);
-	},
-
-	getBottomLeft: function () { // -> Point
-		return new L.Point(this.min.x, this.max.y);
-	},
-
-	getTopRight: function () { // -> Point
-		return new L.Point(this.max.x, this.min.y);
-	},
-
-	getSize: function () {
-		return this.max.subtract(this.min);
-	},
-
-	contains: function (obj) { // (Bounds) or (Point) -> Boolean
-		var min, max;
-
-		if (typeof obj[0] === 'number' || obj instanceof L.Point) {
-			obj = L.point(obj);
-		} else {
-			obj = L.bounds(obj);
-		}
-
-		if (obj instanceof L.Bounds) {
-			min = obj.min;
-			max = obj.max;
-		} else {
-			min = max = obj;
-		}
-
-		return (min.x >= this.min.x) &&
-		       (max.x <= this.max.x) &&
-		       (min.y >= this.min.y) &&
-		       (max.y <= this.max.y);
-	},
-
-	intersects: function (bounds) { // (Bounds) -> Boolean
-		bounds = L.bounds(bounds);
-
-		var min = this.min,
-		    max = this.max,
-		    min2 = bounds.min,
-		    max2 = bounds.max,
-		    xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
-		    yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
-
-		return xIntersects && yIntersects;
-	},
-
-	isValid: function () {
-		return !!(this.min && this.max);
-	}
-};
-
-L.bounds = function (a, b) { // (Bounds) or (Point, Point) or (Point[])
-	if (!a || a instanceof L.Bounds) {
-		return a;
-	}
-	return new L.Bounds(a, b);
-};
-
-
-/*
- * L.Transformation is an utility class to perform simple point transformations through a 2d-matrix.
- */
-
-L.Transformation = function (a, b, c, d) {
-	this._a = a;
-	this._b = b;
-	this._c = c;
-	this._d = d;
-};
-
-L.Transformation.prototype = {
-	transform: function (point, scale) { // (Point, Number) -> Point
-		return this._transform(point.clone(), scale);
-	},
-
-	// destructive transform (faster)
-	_transform: function (point, scale) {
-		scale = scale || 1;
-		point.x = scale * (this._a * point.x + this._b);
-		point.y = scale * (this._c * point.y + this._d);
-		return point;
-	},
-
-	untransform: function (point, scale) {
-		scale = scale || 1;
-		return new L.Point(
-		        (point.x / scale - this._b) / this._a,
-		        (point.y / scale - this._d) / this._c);
-	}
-};
-
-
-/*
- * L.DomUtil contains various utility functions for working with DOM.
- */
-
-L.DomUtil = {
-	get: function (id) {
-		return (typeof id === 'string' ? document.getElementById(id) : id);
-	},
-
-	getStyle: function (el, style) {
-
-		var value = el.style[style];
-
-		if (!value && el.currentStyle) {
-			value = el.currentStyle[style];
-		}
-
-		if ((!value || value === 'auto') && document.defaultView) {
-			var css = document.defaultView.getComputedStyle(el, null);
-			value = css ? css[style] : null;
-		}
-
-		return value === 'auto' ? null : value;
-	},
-
-	getViewportOffset: function (element) {
-
-		var top = 0,
-		    left = 0,
-		    el = element,
-		    docBody = document.body,
-		    docEl = document.documentElement,
-		    pos;
-
-		do {
-			top  += el.offsetTop  || 0;
-			left += el.offsetLeft || 0;
-
-			//add borders
-			top += parseInt(L.DomUtil.getStyle(el, 'borderTopWidth'), 10) || 0;
-			left += parseInt(L.DomUtil.getStyle(el, 'borderLeftWidth'), 10) || 0;
-
-			pos = L.DomUtil.getStyle(el, 'position');
-
-			if (el.offsetParent === docBody && pos === 'absolute') { break; }
-
-			if (pos === 'fixed') {
-				top  += docBody.scrollTop  || docEl.scrollTop  || 0;
-				left += docBody.scrollLeft || docEl.scrollLeft || 0;
-				break;
-			}
-
-			if (pos === 'relative' && !el.offsetLeft) {
-				var width = L.DomUtil.getStyle(el, 'width'),
-				    maxWidth = L.DomUtil.getStyle(el, 'max-width'),
-				    r = el.getBoundingClientRect();
-
-				if (width !== 'none' || maxWidth !== 'none') {
-					left += r.left + el.clientLeft;
-				}
-
-				//calculate full y offset since we're breaking out of the loop
-				top += r.top + (docBody.scrollTop  || docEl.scrollTop  || 0);
-
-				break;
-			}
-
-			el = el.offsetParent;
-
-		} while (el);
-
-		el = element;
-
-		do {
-			if (el === docBody) { break; }
-
-			top  -= el.scrollTop  || 0;
-			left -= el.scrollLeft || 0;
-
-			el = el.parentNode;
-		} while (el);
-
-		return new L.Point(left, top);
-	},
-
-	documentIsLtr: function () {
-		if (!L.DomUtil._docIsLtrCached) {
-			L.DomUtil._docIsLtrCached = true;
-			L.DomUtil._docIsLtr = L.DomUtil.getStyle(document.body, 'direction') === 'ltr';
-		}
-		return L.DomUtil._docIsLtr;
-	},
-
-	create: function (tagName, className, container) {
-
-		var el = document.createElement(tagName);
-		el.className = className;
-
-		if (container) {
-			container.appendChild(el);
-		}
-
-		return el;
-	},
-
-	hasClass: function (el, name) {
-		if (el.classList !== undefined) {
-			return el.classList.contains(name);
-		}
-		var className = L.DomUtil._getClass(el);
-		return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className);
-	},
-
-	addClass: function (el, name) {
-		if (el.classList !== undefined) {
-			var classes = L.Util.splitWords(name);
-			for (var i = 0, len = classes.length; i < len; i++) {
-				el.classList.add(classes[i]);
-			}
-		} else if (!L.DomUtil.hasClass(el, name)) {
-			var className = L.DomUtil._getClass(el);
-			L.DomUtil._setClass(el, (className ? className + ' ' : '') + name);
-		}
-	},
-
-	removeClass: function (el, name) {
-		if (el.classList !== undefined) {
-			el.classList.remove(name);
-		} else {
-			L.DomUtil._setClass(el, L.Util.trim((' ' + L.DomUtil._getClass(el) + ' ').replace(' ' + name + ' ', ' ')));
-		}
-	},
-
-	_setClass: function (el, name) {
-		if (el.className.baseVal === undefined) {
-			el.className = name;
-		} else {
-			// in case of SVG element
-			el.className.baseVal = name;
-		}
-	},
-
-	_getClass: function (el) {
-		return el.className.baseVal === undefined ? el.className : el.className.baseVal;
-	},
-
-	setOpacity: function (el, value) {
-
-		if ('opacity' in el.style) {
-			el.style.opacity = value;
-
-		} else if ('filter' in el.style) {
-
-			var filter = false,
-			    filterName = 'DXImageTransform.Microsoft.Alpha';
-
-			// filters collection throws an error if we try to retrieve a filter that doesn't exist
-			try {
-				filter = el.filters.item(filterName);
-			} catch (e) {
-				// don't set opacity to 1 if we haven't already set an opacity,
-				// it isn't needed and breaks transparent pngs.
-				if (value === 1) { return; }
-			}
-
-			value = Math.round(value * 100);
-
-			if (filter) {
-				filter.Enabled = (value !== 100);
-				filter.Opacity = value;
-			} else {
-				el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';
-			}
-		}
-	},
-
-	testProp: function (props) {
-
-		var style = document.documentElement.style;
-
-		for (var i = 0; i < props.length; i++) {
-			if (props[i] in style) {
-				return props[i];
-			}
-		}
-		return false;
-	},
-
-	getTranslateString: function (point) {
-		// on WebKit browsers (Chrome/Safari/iOS Safari/Android) using translate3d instead of translate
-		// makes animation smoother as it ensures HW accel is used. Firefox 13 doesn't care
-		// (same speed either way), Opera 12 doesn't support translate3d
-
-		var is3d = L.Browser.webkit3d,
-		    open = 'translate' + (is3d ? '3d' : '') + '(',
-		    close = (is3d ? ',0' : '') + ')';
-
-		return open + point.x + 'px,' + point.y + 'px' + close;
-	},
-
-	getScaleString: function (scale, origin) {
-
-		var preTranslateStr = L.DomUtil.getTranslateString(origin.add(origin.multiplyBy(-1 * scale))),
-		    scaleStr = ' scale(' + scale + ') ';
-
-		return preTranslateStr + scaleStr;
-	},
-
-	setPosition: function (el, point, disable3D) { // (HTMLElement, Point[, Boolean])
-
-		// jshint camelcase: false
-		el._leaflet_pos = point;
-
-		if (!disable3D && L.Browser.any3d) {
-			el.style[L.DomUtil.TRANSFORM] =  L.DomUtil.getTranslateString(point);
-		} else {
-			el.style.left = point.x + 'px';
-			el.style.top = point.y + 'px';
-		}
-	},
-
-	getPosition: function (el) {
-		// this method is only used for elements previously positioned using setPosition,
-		// so it's safe to cache the position for performance
-
-		// jshint camelcase: false
-		return el._leaflet_pos;
-	}
-};
-
-
-// prefix style property names
-
-L.DomUtil.TRANSFORM = L.DomUtil.testProp(
-        ['transform', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']);
-
-// webkitTransition comes first because some browser versions that drop vendor prefix don't do
-// the same for the transitionend event, in particular the Android 4.1 stock browser
-
-L.DomUtil.TRANSITION = L.DomUtil.testProp(
-        ['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);
-
-L.DomUtil.TRANSITION_END =
-        L.DomUtil.TRANSITION === 'webkitTransition' || L.DomUtil.TRANSITION === 'OTransition' ?
-        L.DomUtil.TRANSITION + 'End' : 'transitionend';
-
-(function () {
-    if ('onselectstart' in document) {
-        L.extend(L.DomUtil, {
-            disableTextSelection: function () {
-                L.DomEvent.on(window, 'selectstart', L.DomEvent.preventDefault);
-            },
-
-            enableTextSelection: function () {
-                L.DomEvent.off(window, 'selectstart', L.DomEvent.preventDefault);
-            }
-        });
-    } else {
-        var userSelectProperty = L.DomUtil.testProp(
-            ['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);
-
-        L.extend(L.DomUtil, {
-            disableTextSelection: function () {
-                if (userSelectProperty) {
-                    var style = document.documentElement.style;
-                    this._userSelect = style[userSelectProperty];
-                    style[userSelectProperty] = 'none';
-                }
-            },
-
-            enableTextSelection: function () {
-                if (userSelectProperty) {
-                    document.documentElement.style[userSelectProperty] = this._userSelect;
-                    delete this._userSelect;
-                }
-            }
-        });
-    }
-
-	L.extend(L.DomUtil, {
-		disableImageDrag: function () {
-			L.DomEvent.on(window, 'dragstart', L.DomEvent.preventDefault);
-		},
-
-		enableImageDrag: function () {
-			L.DomEvent.off(window, 'dragstart', L.DomEvent.preventDefault);
-		}
-	});
-})();
-
-
-/*
- * L.LatLng represents a geographical point with latitude and longitude coordinates.
- */
-
-L.LatLng = function (lat, lng, alt) { // (Number, Number, Number)
-	lat = parseFloat(lat);
-	lng = parseFloat(lng);
-
-	if (isNaN(lat) || isNaN(lng)) {
-		throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
-	}
-
-	this.lat = lat;
-	this.lng = lng;
-
-	if (alt !== undefined) {
-		this.alt = parseFloat(alt);
-	}
-};
-
-L.extend(L.LatLng, {
-	DEG_TO_RAD: Math.PI / 180,
-	RAD_TO_DEG: 180 / Math.PI,
-	MAX_MARGIN: 1.0E-9 // max margin of error for the "equals" check
-});
-
-L.LatLng.prototype = {
-	equals: function (obj) { // (LatLng) -> Boolean
-		if (!obj) { return false; }
-
-		obj = L.latLng(obj);
-
-		var margin = Math.max(
-		        Math.abs(this.lat - obj.lat),
-		        Math.abs(this.lng - obj.lng));
-
-		return margin <= L.LatLng.MAX_MARGIN;
-	},
-
-	toString: function (precision) { // (Number) -> String
-		return 'LatLng(' +
-		        L.Util.formatNum(this.lat, precision) + ', ' +
-		        L.Util.formatNum(this.lng, precision) + ')';
-	},
-
-	// Haversine distance formula, see http://en.wikipedia.org/wiki/Haversine_formula
-	// TODO move to projection code, LatLng shouldn't know about Earth
-	distanceTo: function (other) { // (LatLng) -> Number
-		other = L.latLng(other);
-
-		var R = 6378137, // earth radius in meters
-		    d2r = L.LatLng.DEG_TO_RAD,
-		    dLat = (other.lat - this.lat) * d2r,
-		    dLon = (other.lng - this.lng) * d2r,
-		    lat1 = this.lat * d2r,
-		    lat2 = other.lat * d2r,
-		    sin1 = Math.sin(dLat / 2),
-		    sin2 = Math.sin(dLon / 2);
-
-		var a = sin1 * sin1 + sin2 * sin2 * Math.cos(lat1) * Math.cos(lat2);
-
-		return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
-	},
-
-	wrap: function (a, b) { // (Number, Number) -> LatLng
-		var lng = this.lng;
-
-		a = a || -180;
-		b = b ||  180;
-
-		lng = (lng + b) % (b - a) + (lng < a || lng === b ? b : a);
-
-		return new L.LatLng(this.lat, lng);
-	}
-};
-
-L.latLng = function (a, b) { // (LatLng) or ([Number, Number]) or (Number, Number)
-	if (a instanceof L.LatLng) {
-		return a;
-	}
-	if (L.Util.isArray(a)) {
-		if (typeof a[0] === 'number' || typeof a[0] === 'string') {
-			return new L.LatLng(a[0], a[1], a[2]);
-		} else {
-			return null;
-		}
-	}
-	if (a === undefined || a === null) {
-		return a;
-	}
-	if (typeof a === 'object' && 'lat' in a) {
-		return new L.LatLng(a.lat, 'lng' in a ? a.lng : a.lon);
-	}
-	if (b === undefined) {
-		return null;
-	}
-	return new L.LatLng(a, b);
-};
-
-
-
-/*
- * L.LatLngBounds represents a rectangular area on the map in geographical coordinates.
- */
-
-L.LatLngBounds = function (southWest, northEast) { // (LatLng, LatLng) or (LatLng[])
-	if (!southWest) { return; }
-
-	var latlngs = northEast ? [southWest, northEast] : southWest;
-
-	for (var i = 0, len = latlngs.length; i < len; i++) {
-		this.extend(latlngs[i]);
-	}
-};
-
-L.LatLngBounds.prototype = {
-	// extend the bounds to contain the given point or bounds
-	extend: function (obj) { // (LatLng) or (LatLngBounds)
-		if (!obj) { return this; }
-
-		var latLng = L.latLng(obj);
-		if (latLng !== null) {
-			obj = latLng;
-		} else {
-			obj = L.latLngBounds(obj);
-		}
-
-		if (obj instanceof L.LatLng) {
-			if (!this._southWest && !this._northEast) {
-				this._southWest = new L.LatLng(obj.lat, obj.lng);
-				this._northEast = new L.LatLng(obj.lat, obj.lng);
-			} else {
-				this._southWest.lat = Math.min(obj.lat, this._southWest.lat);
-				this._southWest.lng = Math.min(obj.lng, this._southWest.lng);
-
-				this._northEast.lat = Math.max(obj.lat, this._northEast.lat);
-				this._northEast.lng = Math.max(obj.lng, this._northEast.lng);
-			}
-		} else if (obj instanceof L.LatLngBounds) {
-			this.extend(obj._southWest);
-			this.extend(obj._northEast);
-		}
-		return this;
-	},
-
-	// extend the bounds by a percentage
-	pad: function (bufferRatio) { // (Number) -> LatLngBounds
-		var sw = this._southWest,
-		    ne = this._northEast,
-		    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,
-		    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;
-
-		return new L.LatLngBounds(
-		        new L.LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),
-		        new L.LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));
-	},
-
-	getCenter: function () { // -> LatLng
-		return new L.LatLng(
-		        (this._southWest.lat + this._northEast.lat) / 2,
-		        (this._southWest.lng + this._northEast.lng) / 2);
-	},
-
-	getSouthWest: function () {
-		return this._southWest;
-	},
-
-	getNorthEast: function () {
-		return this._northEast;
-	},
-
-	getNorthWest: function () {
-		return new L.LatLng(this.getNorth(), this.getWest());
-	},
-
-	getSouthEast: function () {
-		return new L.LatLng(this.getSouth(), this.getEast());
-	},
-
-	getWest: function () {
-		return this._southWest.lng;
-	},
-
-	getSouth: function () {
-		return this._southWest.lat;
-	},
-
-	getEast: function () {
-		return this._northEast.lng;
-	},
-
-	getNorth: function () {
-		return this._northEast.lat;
-	},
-
-	contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean
-		if (typeof obj[0] === 'number' || obj instanceof L.LatLng) {
-			obj = L.latLng(obj);
-		} else {
-			obj = L.latLngBounds(obj);
-		}
-
-		var sw = this._southWest,
-		    ne = this._northEast,
-		    sw2, ne2;
-
-		if (obj instanceof L.LatLngBounds) {
-			sw2 = obj.getSouthWest();
-			ne2 = obj.getNorthEast();
-		} else {
-			sw2 = ne2 = obj;
-		}
-
-		return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
-		       (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
-	},
-
-	intersects: function (bounds) { // (LatLngBounds)
-		bounds = L.latLngBounds(bounds);
-
-		var sw = this._southWest,
-		    ne = this._northEast,
-		    sw2 = bounds.getSouthWest(),
-		    ne2 = bounds.getNorthEast(),
-
-		    latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
-		    lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
-
-		return latIntersects && lngIntersects;
-	},
-
-	toBBoxString: function () {
-		return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');
-	},
-
-	equals: function (bounds) { // (LatLngBounds)
-		if (!bounds) { return false; }
-
-		bounds = L.latLngBounds(bounds);
-
-		return this._southWest.equals(bounds.getSouthWest()) &&
-		       this._northEast.equals(bounds.getNorthEast());
-	},
-
-	isValid: function () {
-		return !!(this._southWest && this._northEast);
-	}
-};
-
-//TODO International date line?
-
-L.latLngBounds = function (a, b) { // (LatLngBounds) or (LatLng, LatLng)
-	if (!a || a instanceof L.LatLngBounds) {
-		return a;
-	}
-	return new L.LatLngBounds(a, b);
-};
-
-
-/*
- * L.Projection contains various geographical projections used by CRS classes.
- */
-
-L.Projection = {};
-
-
-/*
- * Spherical Mercator is the most popular map projection, used by EPSG:3857 CRS used by default.
- */
-
-L.Projection.SphericalMercator = {
-	MAX_LATITUDE: 85.0511287798,
-
-	project: function (latlng) { // (LatLng) -> Point
-		var d = L.LatLng.DEG_TO_RAD,
-		    max = this.MAX_LATITUDE,
-		    lat = Math.max(Math.min(max, latlng.lat), -max),
-		    x = latlng.lng * d,
-		    y = lat * d;
-
-		y = Math.log(Math.tan((Math.PI / 4) + (y / 2)));
-
-		return new L.Point(x, y);
-	},
-
-	unproject: function (point) { // (Point, Boolean) -> LatLng
-		var d = L.LatLng.RAD_TO_DEG,
-		    lng = point.x * d,
-		    lat = (2 * Math.atan(Math.exp(point.y)) - (Math.PI / 2)) * d;
-
-		return new L.LatLng(lat, lng);
-	}
-};
-
-
-/*
- * Simple equirectangular (Plate Carree) projection, used by CRS like EPSG:4326 and Simple.
- */
-
-L.Projection.LonLat = {
-	project: function (latlng) {
-		return new L.Point(latlng.lng, latlng.lat);
-	},
-
-	unproject: function (point) {
-		return new L.LatLng(point.y, point.x);
-	}
-};
-
-
-/*
- * L.CRS is a base object for all defined CRS (Coordinate Reference Systems) in Leaflet.
- */
-
-L.CRS = {
-	latLngToPoint: function (latlng, zoom) { // (LatLng, Number) -> Point
-		var projectedPoint = this.projection.project(latlng),
-		    scale = this.scale(zoom);
-
-		return this.transformation._transform(projectedPoint, scale);
-	},
-
-	pointToLatLng: function (point, zoom) { // (Point, Number[, Boolean]) -> LatLng
-		var scale = this.scale(zoom),
-		    untransformedPoint = this.transformation.untransform(point, scale);
-
-		return this.projection.unproject(untransformedPoint);
-	},
-
-	project: function (latlng) {
-		return this.projection.project(latlng);
-	},
-
-	scale: function (zoom) {
-		return 256 * Math.pow(2, zoom);
-	},
-
-	getSize: function (zoom) {
-		var s = this.scale(zoom);
-		return L.point(s, s);
-	}
-};
-
-
-/*
- * A simple CRS that can be used for flat non-Earth maps like panoramas or game maps.
- */
-
-L.CRS.Simple = L.extend({}, L.CRS, {
-	projection: L.Projection.LonLat,
-	transformation: new L.Transformation(1, 0, -1, 0),
-
-	scale: function (zoom) {
-		return Math.pow(2, zoom);
-	}
-});
-
-
-/*
- * L.CRS.EPSG3857 (Spherical Mercator) is the most common CRS for web mapping
- * and is used by Leaflet by default.
- */
-
-L.CRS.EPSG3857 = L.extend({}, L.CRS, {
-	code: 'EPSG:3857',
-
-	projection: L.Projection.SphericalMercator,
-	transformation: new L.Transformation(0.5 / Math.PI, 0.5, -0.5 / Math.PI, 0.5),
-
-	project: function (latlng) { // (LatLng) -> Point
-		var projectedPoint = this.projection.project(latlng),
-		    earthRadius = 6378137;
-		return projectedPoint.multiplyBy(earthRadius);
-	}
-});
-
-L.CRS.EPSG900913 = L.extend({}, L.CRS.EPSG3857, {
-	code: 'EPSG:900913'
-});
-
-
-/*
- * L.CRS.EPSG4326 is a CRS popular among advanced GIS specialists.
- */
-
-L.CRS.EPSG4326 = L.extend({}, L.CRS, {
-	code: 'EPSG:4326',
-
-	projection: L.Projection.LonLat,
-	transformation: new L.Transformation(1 / 360, 0.5, -1 / 360, 0.5)
-});
-
-
-/*
- * L.Map is the central class of the API - it is used to create a map.
- */
-
-L.Map = L.Class.extend({
-
-	includes: L.Mixin.Events,
-
-	options: {
-		crs: L.CRS.EPSG3857,
-
-		/*
-		center: LatLng,
-		zoom: Number,
-		layers: Array,
-		*/
-
-		fadeAnimation: L.DomUtil.TRANSITION && !L.Browser.android23,
-		trackResize: true,
-		markerZoomAnimation: L.DomUtil.TRANSITION && L.Browser.any3d
-	},
-
-	initialize: function (id, options) { // (HTMLElement or String, Object)
-		options = L.setOptions(this, options);
-
-
-		this._initContainer(id);
-		this._initLayout();
-
-		// hack for https://github.com/Leaflet/Leaflet/issues/1980
-		this._onResize = L.bind(this._onResize, this);
-
-		this._initEvents();
-
-		if (options.maxBounds) {
-			this.setMaxBounds(options.maxBounds);
-		}
-
-		if (options.center && options.zoom !== undefined) {
-			this.setView(L.latLng(options.center), options.zoom, {reset: true});
-		}
-
-		this._handlers = [];
-
-		this._layers = {};
-		this._zoomBoundLayers = {};
-		this._tileLayersNum = 0;
-
-		this.callInitHooks();
-
-		this._addLayers(options.layers);
-	},
-
-
-	// public methods that modify map state
-
-	// replaced by animation-powered implementation in Map.PanAnimation.js
-	setView: function (center, zoom) {
-		zoom = zoom === undefined ? this.getZoom() : zoom;
-		this._resetView(L.latLng(center), this._limitZoom(zoom));
-		return this;
-	},
-
-	setZoom: function (zoom, options) {
-		if (!this._loaded) {
-			this._zoom = this._limitZoom(zoom);
-			return this;
-		}
-		return this.setView(this.getCenter(), zoom, {zoom: options});
-	},
-
-	zoomIn: function (delta, options) {
-		return this.setZoom(this._zoom + (delta || 1), options);
-	},
-
-	zoomOut: function (delta, options) {
-		return this.setZoom(this._zoom - (delta || 1), options);
-	},
-
-	setZoomAround: function (latlng, zoom, options) {
-		var scale = this.getZoomScale(zoom),
-		    viewHalf = this.getSize().divideBy(2),
-		    containerPoint = latlng instanceof L.Point ? latlng : this.latLngToContainerPoint(latlng),
-
-		    centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),
-		    newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));
-
-		return this.setView(newCenter, zoom, {zoom: options});
-	},
-
-	fitBounds: function (bounds, options) {
-
-		options = options || {};
-		bounds = bounds.getBounds ? bounds.getBounds() : L.latLngBounds(bounds);
-
-		var paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]),
-		    paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]),
-
-		    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));
-
-		zoom = (options.maxZoom) ? Math.min(options.maxZoom, zoom) : zoom;
-
-		var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),
-
-		    swPoint = this.project(bounds.getSouthWest(), zoom),
-		    nePoint = this.project(bounds.getNorthEast(), zoom),
-		    center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);
-
-		return this.setView(center, zoom, options);
-	},
-
-	fitWorld: function (options) {
-		return this.fitBounds([[-90, -180], [90, 180]], options);
-	},
-
-	panTo: function (center, options) { // (LatLng)
-		return this.setView(center, this._zoom, {pan: options});
-	},
-
-	panBy: function (offset) { // (Point)
-		// replaced with animated panBy in Map.PanAnimation.js
-		this.fire('movestart');
-
-		this._rawPanBy(L.point(offset));
-
-		this.fire('move');
-		return this.fire('moveend');
-	},
-
-	setMaxBounds: function (bounds) {
-		bounds = L.latLngBounds(bounds);
-
-		this.options.maxBounds = bounds;
-
-		if (!bounds) {
-			return this.off('moveend', this._panInsideMaxBounds, this);
-		}
-
-		if (this._loaded) {
-			this._panInsideMaxBounds();
-		}
-
-		return this.on('moveend', this._panInsideMaxBounds, this);
-	},
-
-	panInsideBounds: function (bounds, options) {
-		var center = this.getCenter(),
-			newCenter = this._limitCenter(center, this._zoom, bounds);
-
-		if (center.equals(newCenter)) { return this; }
-
-		return this.panTo(newCenter, options);
-	},
-
-	addLayer: function (layer) {
-		// TODO method is too big, refactor
-
-		var id = L.stamp(layer);
-
-		if (this._layers[id]) { return this; }
-
-		this._layers[id] = layer;
-
-		// TODO getMaxZoom, getMinZoom in ILayer (instead of options)
-		if (layer.options && (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom))) {
-			this._zoomBoundLayers[id] = layer;
-			this._updateZoomLevels();
-		}
-
-		// TODO looks ugly, refactor!!!
-		if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
-			this._tileLayersNum++;
-			this._tileLayersToLoad++;
-			layer.on('load', this._onTileLayerLoad, this);
-		}
-
-		if (this._loaded) {
-			this._layerAdd(layer);
-		}
-
-		return this;
-	},
-
-	removeLayer: function (layer) {
-		var id = L.stamp(layer);
-
-		if (!this._layers[id]) { return this; }
-
-		if (this._loaded) {
-			layer.onRemove(this);
-		}
-
-		delete this._layers[id];
-
-		if (this._loaded) {
-			this.fire('layerremove', {layer: layer});
-		}
-
-		if (this._zoomBoundLayers[id]) {
-			delete this._zoomBoundLayers[id];
-			this._updateZoomLevels();
-		}
-
-		// TODO looks ugly, refactor
-		if (this.options.zoomAnimation && L.TileLayer && (layer instanceof L.TileLayer)) {
-			this._tileLayersNum--;
-			this._tileLayersToLoad--;
-			layer.off('load', this._onTileLayerLoad, this);
-		}
-
-		return this;
-	},
-
-	hasLayer: function (layer) {
-		if (!layer) { return false; }
-
-		return (L.stamp(layer) in this._layers);
-	},
-
-	eachLayer: function (method, context) {
-		for (var i in this._layers) {
-			method.call(context, this._layers[i]);
-		}
-		return this;
-	},
-
-	invalidateSize: function (options) {
-		if (!this._loaded) { return this; }
-
-		options = L.extend({
-			animate: false,
-			pan: true
-		}, options === true ? {animate: true} : options);
-
-		var oldSize = this.getSize();
-		this._sizeChanged = true;
-		this._initialCenter = null;
-
-		var newSize = this.getSize(),
-		    oldCenter = oldSize.divideBy(2).round(),
-		    newCenter = newSize.divideBy(2).round(),
-		    offset = oldCenter.subtract(newCenter);
-
-		if (!offset.x && !offset.y) { return this; }
-
-		if (options.animate && options.pan) {
-			this.panBy(offset);
-
-		} else {
-			if (options.pan) {
-				this._rawPanBy(offset);
-			}
-
-			this.fire('move');
-
-			if (options.debounceMoveend) {
-				clearTimeout(this._sizeTimer);
-				this._sizeTimer = setTimeout(L.bind(this.fire, this, 'moveend'), 200);
-			} else {
-				this.fire('moveend');
-			}
-		}
-
-		return this.fire('resize', {
-			oldSize: oldSize,
-			newSize: newSize
-		});
-	},
-
-	// TODO handler.addTo
-	addHandler: function (name, HandlerClass) {
-		if (!HandlerClass) { return this; }
-
-		var handler = this[name] = new HandlerClass(this);
-
-		this._handlers.push(handler);
-
-		if (this.options[name]) {
-			handler.enable();
-		}
-
-		return this;
-	},
-
-	remove: function () {
-		if (this._loaded) {
-			this.fire('unload');
-		}
-
-		this._initEvents('off');
-
-		try {
-			// throws error in IE6-8
-			delete this._container._leaflet;
-		} catch (e) {
-			this._container._leaflet = undefined;
-		}
-
-		this._clearPanes();
-		if (this._clearControlPos) {
-			this._clearControlPos();
-		}
-
-		this._clearHandlers();
-
-		return this;
-	},
-
-
-	// public methods for getting map state
-
-	getCenter: function () { // (Boolean) -> LatLng
-		this._checkIfLoaded();
-
-		if (this._initialCenter && !this._moved()) {
-			return this._initialCenter;
-		}
-		return this.layerPointToLatLng(this._getCenterLayerPoint());
-	},
-
-	getZoom: function () {
-		return this._zoom;
-	},
-
-	getBounds: function () {
-		var bounds = this.getPixelBounds(),
-		    sw = this.unproject(bounds.getBottomLeft()),
-		    ne = this.unproject(bounds.getTopRight());
-
-		return new L.LatLngBounds(sw, ne);
-	},
-
-	getMinZoom: function () {
-		return this.options.minZoom === undefined ?
-			(this._layersMinZoom === undefined ? 0 : this._layersMinZoom) :
-			this.options.minZoom;
-	},
-
-	getMaxZoom: function () {
-		return this.options.maxZoom === undefined ?
-			(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :
-			this.options.maxZoom;
-	},
-
-	getBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number
-		bounds = L.latLngBounds(bounds);
-
-		var zoom = this.getMinZoom() - (inside ? 1 : 0),
-		    maxZoom = this.getMaxZoom(),
-		    size = this.getSize(),
-
-		    nw = bounds.getNorthWest(),
-		    se = bounds.getSouthEast(),
-
-		    zoomNotFound = true,
-		    boundsSize;
-
-		padding = L.point(padding || [0, 0]);
-
-		do {
-			zoom++;
-			boundsSize = this.project(se, zoom).subtract(this.project(nw, zoom)).add(padding);
-			zoomNotFound = !inside ? size.contains(boundsSize) : boundsSize.x < size.x || boundsSize.y < size.y;
-
-		} while (zoomNotFound && zoom <= maxZoom);
-
-		if (zoomNotFound && inside) {
-			return null;
-		}
-
-		return inside ? zoom : zoom - 1;
-	},
-
-	getSize: function () {
-		if (!this._size || this._sizeChanged) {
-			this._size = new L.Point(
-				this._container.clientWidth,
-				this._container.clientHeight);
-
-			this._sizeChanged = false;
-		}
-		return this._size.clone();
-	},
-
-	getPixelBounds: function () {
-		var topLeftPoint = this._getTopLeftPoint();
-		return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
-	},
-
-	getPixelOrigin: function () {
-		this._checkIfLoaded();
-		return this._initialTopLeftPoint;
-	},
-
-	getPanes: function () {
-		return this._panes;
-	},
-
-	getContainer: function () {
-		return this._container;
-	},
-
-
-	// TODO replace with universal implementation after refactoring projections
-
-	getZoomScale: function (toZoom) {
-		var crs = this.options.crs;
-		return crs.scale(toZoom) / crs.scale(this._zoom);
-	},
-
-	getScaleZoom: function (scale) {
-		return this._zoom + (Math.log(scale) / Math.LN2);
-	},
-
-
-	// conversion methods
-
-	project: function (latlng, zoom) { // (LatLng[, Number]) -> Point
-		zoom = zoom === undefined ? this._zoom : zoom;
-		return this.options.crs.latLngToPoint(L.latLng(latlng), zoom);
-	},
-
-	unproject: function (point, zoom) { // (Point[, Number]) -> LatLng
-		zoom = zoom === undefined ? this._zoom : zoom;
-		return this.options.crs.pointToLatLng(L.point(point), zoom);
-	},
-
-	layerPointToLatLng: function (point) { // (Point)
-		var projectedPoint = L.point(point).add(this.getPixelOrigin());
-		return this.unproject(projectedPoint);
-	},
-
-	latLngToLayerPoint: function (latlng) { // (LatLng)
-		var projectedPoint = this.project(L.latLng(latlng))._round();
-		return projectedPoint._subtract(this.getPixelOrigin());
-	},
-
-	containerPointToLayerPoint: function (point) { // (Point)
-		return L.point(point).subtract(this._getMapPanePos());
-	},
-
-	layerPointToContainerPoint: function (point) { // (Point)
-		return L.point(point).add(this._getMapPanePos());
-	},
-
-	containerPointToLatLng: function (point) {
-		var layerPoint = this.containerPointToLayerPoint(L.point(point));
-		return this.layerPointToLatLng(layerPoint);
-	},
-
-	latLngToContainerPoint: function (latlng) {
-		return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
-	},
-
-	mouseEventToContainerPoint: function (e) { // (MouseEvent)
-		return L.DomEvent.getMousePosition(e, this._container);
-	},
-
-	mouseEventToLayerPoint: function (e) { // (MouseEvent)
-		return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
-	},
-
-	mouseEventToLatLng: function (e) { // (MouseEvent)
-		return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
-	},
-
-
-	// map initialization methods
-
-	_initContainer: function (id) {
-		var container = this._container = L.DomUtil.get(id);
-
-		if (!container) {
-			throw new Error('Map container not found.');
-		} else if (container._leaflet) {
-			throw new Error('Map container is already initialized.');
-		}
-
-		container._leaflet = true;
-	},
-
-	_initLayout: function () {
-		var container = this._container;
-
-		L.DomUtil.addClass(container, 'leaflet-container' +
-			(L.Browser.touch ? ' leaflet-touch' : '') +
-			(L.Browser.retina ? ' leaflet-retina' : '') +
-			(L.Browser.ielt9 ? ' leaflet-oldie' : '') +
-			(this.options.fadeAnimation ? ' leaflet-fade-anim' : ''));
-
-		var position = L.DomUtil.getStyle(container, 'position');
-
-		if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {
-			container.style.position = 'relative';
-		}
-
-		this._initPanes();
-
-		if (this._initControlPos) {
-			this._initControlPos();
-		}
-	},
-
-	_initPanes: function () {
-		var panes = this._panes = {};
-
-		this._mapPane = panes.mapPane = this._createPane('leaflet-map-pane', this._container);
-
-		this._tilePane = panes.tilePane = this._createPane('leaflet-tile-pane', this._mapPane);
-		panes.objectsPane = this._createPane('leaflet-objects-pane', this._mapPane);
-		panes.shadowPane = this._createPane('leaflet-shadow-pane');
-		panes.overlayPane = this._createPane('leaflet-overlay-pane');
-		panes.markerPane = this._createPane('leaflet-marker-pane');
-		panes.popupPane = this._createPane('leaflet-popup-pane');
-
-		var zoomHide = ' leaflet-zoom-hide';
-
-		if (!this.options.markerZoomAnimation) {
-			L.DomUtil.addClass(panes.markerPane, zoomHide);
-			L.DomUtil.addClass(panes.shadowPane, zoomHide);
-			L.DomUtil.addClass(panes.popupPane, zoomHide);
-		}
-	},
-
-	_createPane: function (className, container) {
-		return L.DomUtil.create('div', className, container || this._panes.objectsPane);
-	},
-
-	_clearPanes: function () {
-		this._container.removeChild(this._mapPane);
-	},
-
-	_addLayers: function (layers) {
-		layers = layers ? (L.Util.isArray(layers) ? layers : [layers]) : [];
-
-		for (var i = 0, len = layers.length; i < len; i++) {
-			this.addLayer(layers[i]);
-		}
-	},
-
-
-	// private methods that modify map state
-
-	_resetView: function (center, zoom, preserveMapOffset, afterZoomAnim) {
-
-		var zoomChanged = (this._zoom !== zoom);
-
-		if (!afterZoomAnim) {
-			this.fire('movestart');
-
-			if (zoomChanged) {
-				this.fire('zoomstart');
-			}
-		}
-
-		this._zoom = zoom;
-		this._initialCenter = center;
-
-		this._initialTopLeftPoint = this._getNewTopLeftPoint(center);
-
-		if (!preserveMapOffset) {
-			L.DomUtil.setPosition(this._mapPane, new L.Point(0, 0));
-		} else {
-			this._initialTopLeftPoint._add(this._getMapPanePos());
-		}
-
-		this._tileLayersToLoad = this._tileLayersNum;
-
-		var loading = !this._loaded;
-		this._loaded = true;
-
-		this.fire('viewreset', {hard: !preserveMapOffset});
-
-		if (loading) {
-			this.fire('load');
-			this.eachLayer(this._layerAdd, this);
-		}
-
-		this.fire('move');
-
-		if (zoomChanged || afterZoomAnim) {
-			this.fire('zoomend');
-		}
-
-		this.fire('moveend', {hard: !preserveMapOffset});
-	},
-
-	_rawPanBy: function (offset) {
-		L.DomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));
-	},
-
-	_getZoomSpan: function () {
-		return this.getMaxZoom() - this.getMinZoom();
-	},
-
-	_updateZoomLevels: function () {
-		var i,
-			minZoom = Infinity,
-			maxZoom = -Infinity,
-			oldZoomSpan = this._getZoomSpan();
-
-		for (i in this._zoomBoundLayers) {
-			var layer = this._zoomBoundLayers[i];
-			if (!isNaN(layer.options.minZoom)) {
-				minZoom = Math.min(minZoom, layer.options.minZoom);
-			}
-			if (!isNaN(layer.options.maxZoom)) {
-				maxZoom = Math.max(maxZoom, layer.options.maxZoom);
-			}
-		}
-
-		if (i === undefined) { // we have no tilelayers
-			this._layersMaxZoom = this._layersMinZoom = undefined;
-		} else {
-			this._layersMaxZoom = maxZoom;
-			this._layersMinZoom = minZoom;
-		}
-
-		if (oldZoomSpan !== this._getZoomSpan()) {
-			this.fire('zoomlevelschange');
-		}
-	},
-
-	_panInsideMaxBounds: function () {
-		this.panInsideBounds(this.options.maxBounds);
-	},
-
-	_checkIfLoaded: function () {
-		if (!this._loaded) {
-			throw new Error('Set map center and zoom first.');
-		}
-	},
-
-	// map events
-
-	_initEvents: function (onOff) {
-		if (!L.DomEvent) { return; }
-
-		onOff = onOff || 'on';
-
-		L.DomEvent[onOff](this._container, 'click', this._onMouseClick, this);
-
-		var events = ['dblclick', 'mousedown', 'mouseup', 'mouseenter',
-		              'mouseleave', 'mousemove', 'contextmenu'],
-		    i, len;
-
-		for (i = 0, len = events.length; i < len; i++) {
-			L.DomEvent[onOff](this._container, events[i], this._fireMouseEvent, this);
-		}
-
-		if (this.options.trackResize) {
-			L.DomEvent[onOff](window, 'resize', this._onResize, this);
-		}
-	},
-
-	_onResize: function () {
-		L.Util.cancelAnimFrame(this._resizeRequest);
-		this._resizeRequest = L.Util.requestAnimFrame(
-		        function () { this.invalidateSize({debounceMoveend: true}); }, this, false, this._container);
-	},
-
-	_onMouseClick: function (e) {
-		if (!this._loaded || (!e._simulated &&
-		        ((this.dragging && this.dragging.moved()) ||
-		         (this.boxZoom  && this.boxZoom.moved()))) ||
-		            L.DomEvent._skipped(e)) { return; }
-
-		this.fire('preclick');
-		this._fireMouseEvent(e);
-	},
-
-	_fireMouseEvent: function (e) {
-		if (!this._loaded || L.DomEvent._skipped(e)) { return; }
-
-		var type = e.type;
-
-		type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
-
-		if (!this.hasEventListeners(type)) { return; }
-
-		if (type === 'contextmenu') {
-			L.DomEvent.preventDefault(e);
-		}
-
-		var containerPoint = this.mouseEventToContainerPoint(e),
-		    layerPoint = this.containerPointToLayerPoint(containerPoint),
-		    latlng = this.layerPointToLatLng(layerPoint);
-
-		this.fire(type, {
-			latlng: latlng,
-			layerPoint: layerPoint,
-			containerPoint: containerPoint,
-			originalEvent: e
-		});
-	},
-
-	_onTileLayerLoad: function () {
-		this._tileLayersToLoad--;
-		if (this._tileLayersNum && !this._tileLayersToLoad) {
-			this.fire('tilelayersload');
-		}
-	},
-
-	_clearHandlers: function () {
-		for (var i = 0, len = this._handlers.length; i < len; i++) {
-			this._handlers[i].disable();
-		}
-	},
-
-	whenReady: function (callback, context) {
-		if (this._loaded) {
-			callback.call(context || this, this);
-		} else {
-			this.on('load', callback, context);
-		}
-		return this;
-	},
-
-	_layerAdd: function (layer) {
-		layer.onAdd(this);
-		this.fire('layeradd', {layer: layer});
-	},
-
-
-	// private methods for getting map state
-
-	_getMapPanePos: function () {
-		return L.DomUtil.getPosition(this._mapPane);
-	},
-
-	_moved: function () {
-		var pos = this._getMapPanePos();
-		return pos && !pos.equals([0, 0]);
-	},
-
-	_getTopLeftPoint: function () {
-		return this.getPixelOrigin().subtract(this._getMapPanePos());
-	},
-
-	_getNewTopLeftPoint: function (center, zoom) {
-		var viewHalf = this.getSize()._divideBy(2);
-		// TODO round on display, not calculation to increase precision?
-		return this.project(center, zoom)._subtract(viewHalf)._round();
-	},
-
-	_latLngToNewLayerPoint: function (latlng, newZoom, newCenter) {
-		var topLeft = this._getNewTopLeftPoint(newCenter, newZoom).add(this._getMapPanePos());
-		return this.project(latlng, newZoom)._subtract(topLeft);
-	},
-
-	// layer point of the current center
-	_getCenterLayerPoint: function () {
-		return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
-	},
-
-	// offset of the specified place to the current center in pixels
-	_getCenterOffset: function (latlng) {
-		return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());
-	},
-
-	// adjust center for view to get inside bounds
-	_limitCenter: function (center, zoom, bounds) {
-
-		if (!bounds) { return center; }
-
-		var centerPoint = this.project(center, zoom),
-		    viewHalf = this.getSize().divideBy(2),
-		    viewBounds = new L.Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),
-		    offset = this._getBoundsOffset(viewBounds, bounds, zoom);
-
-		return this.unproject(centerPoint.add(offset), zoom);
-	},
-
-	// adjust offset for view to get inside bounds
-	_limitOffset: function (offset, bounds) {
-		if (!bounds) { return offset; }
-
-		var viewBounds = this.getPixelBounds(),
-		    newBounds = new L.Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));
-
-		return offset.add(this._getBoundsOffset(newBounds, bounds));
-	},
-
-	// returns offset needed for pxBounds to get inside maxBounds at a specified zoom
-	_getBoundsOffset: function (pxBounds, maxBounds, zoom) {
-		var nwOffset = this.project(maxBounds.getNorthWest(), zoom).subtract(pxBounds.min),
-		    seOffset = this.project(maxBounds.getSouthEast(), zoom).subtract(pxBounds.max),
-
-		    dx = this._rebound(nwOffset.x, -seOffset.x),
-		    dy = this._rebound(nwOffset.y, -seOffset.y);
-
-		return new L.Point(dx, dy);
-	},
-
-	_rebound: function (left, right) {
-		return left + right > 0 ?
-			Math.round(left - right) / 2 :
-			Math.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));
-	},
-
-	_limitZoom: function (zoom) {
-		var min = this.getMinZoom(),
-		    max = this.getMaxZoom();
-
-		return Math.max(min, Math.min(max, zoom));
-	}
-});
-
-L.map = function (id, options) {
-	return new L.Map(id, options);
-};
-
-
-/*
- * Mercator projection that takes into account that the Earth is not a perfect sphere.
- * Less popular than spherical mercator; used by projections like EPSG:3395.
- */
-
-L.Projection.Mercator = {
-	MAX_LATITUDE: 85.0840591556,
-
-	R_MINOR: 6356752.314245179,
-	R_MAJOR: 6378137,
-
-	project: function (latlng) { // (LatLng) -> Point
-		var d = L.LatLng.DEG_TO_RAD,
-		    max = this.MAX_LATITUDE,
-		    lat = Math.max(Math.min(max, latlng.lat), -max),
-		    r = this.R_MAJOR,
-		    r2 = this.R_MINOR,
-		    x = latlng.lng * d * r,
-		    y = lat * d,
-		    tmp = r2 / r,
-		    eccent = Math.sqrt(1.0 - tmp * tmp),
-		    con = eccent * Math.sin(y);
-
-		con = Math.pow((1 - con) / (1 + con), eccent * 0.5);
-
-		var ts = Math.tan(0.5 * ((Math.PI * 0.5) - y)) / con;
-		y = -r * Math.log(ts);
-
-		return new L.Point(x, y);
-	},
-
-	unproject: function (point) { // (Point, Boolean) -> LatLng
-		var d = L.LatLng.RAD_TO_DEG,
-		    r = this.R_MAJOR,
-		    r2 = this.R_MINOR,
-		    lng = point.x * d / r,
-		    tmp = r2 / r,
-		    eccent = Math.sqrt(1 - (tmp * tmp)),
-		    ts = Math.exp(- point.y / r),
-		    phi = (Math.PI / 2) - 2 * Math.atan(ts),
-		    numIter = 15,
-		    tol = 1e-7,
-		    i = numIter,
-		    dphi = 0.1,
-		    con;
-
-		while ((Math.abs(dphi) > tol) && (--i > 0)) {
-			con = eccent * Math.sin(phi);
-			dphi = (Math.PI / 2) - 2 * Math.atan(ts *
-			            Math.pow((1.0 - con) / (1.0 + con), 0.5 * eccent)) - phi;
-			phi += dphi;
-		}
-
-		return new L.LatLng(phi * d, lng);
-	}
-};
-
-
-
-L.CRS.EPSG3395 = L.extend({}, L.CRS, {
-	code: 'EPSG:3395',
-
-	projection: L.Projection.Mercator,
-
-	transformation: (function () {
-		var m = L.Projection.Mercator,
-		    r = m.R_MAJOR,
-		    scale = 0.5 / (Math.PI * r);
-
-		return new L.Transformation(scale, 0.5, -scale, 0.5);
-	}())
-});
-
-
-/*
- * L.TileLayer is used for standard xyz-numbered tile layers.
- */
-
-L.TileLayer = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	options: {
-		minZoom: 0,
-		maxZoom: 18,
-		tileSize: 256,
-		subdomains: 'abc',
-		errorTileUrl: '',
-		attribution: '',
-		zoomOffset: 0,
-		opacity: 1,
-		/*
-		maxNativeZoom: null,
-		zIndex: null,
-		tms: false,
-		continuousWorld: false,
-		noWrap: false,
-		zoomReverse: false,
-		detectRetina: false,
-		reuseTiles: false,
-		bounds: false,
-		*/
-		unloadInvisibleTiles: L.Browser.mobile,
-		updateWhenIdle: L.Browser.mobile
-	},
-
-	initialize: function (url, options) {
-		options = L.setOptions(this, options);
-
-		// detecting retina displays, adjusting tileSize and zoom levels
-		if (options.detectRetina && L.Browser.retina && options.maxZoom > 0) {
-
-			options.tileSize = Math.floor(options.tileSize / 2);
-			options.zoomOffset++;
-
-			if (options.minZoom > 0) {
-				options.minZoom--;
-			}
-			this.options.maxZoom--;
-		}
-
-		if (options.bounds) {
-			options.bounds = L.latLngBounds(options.bounds);
-		}
-
-		this._url = url;
-
-		var subdomains = this.options.subdomains;
-
-		if (typeof subdomains === 'string') {
-			this.options.subdomains = subdomains.split('');
-		}
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-		this._animated = map._zoomAnimated;
-
-		// create a container div for tiles
-		this._initContainer();
-
-		// set up events
-		map.on({
-			'viewreset': this._reset,
-			'moveend': this._update
-		}, this);
-
-		if (this._animated) {
-			map.on({
-				'zoomanim': this._animateZoom,
-				'zoomend': this._endZoomAnim
-			}, this);
-		}
-
-		if (!this.options.updateWhenIdle) {
-			this._limitedUpdate = L.Util.limitExecByInterval(this._update, 150, this);
-			map.on('move', this._limitedUpdate, this);
-		}
-
-		this._reset();
-		this._update();
-	},
-
-	addTo: function (map) {
-		map.addLayer(this);
-		return this;
-	},
-
-	onRemove: function (map) {
-		this._container.parentNode.removeChild(this._container);
-
-		map.off({
-			'viewreset': this._reset,
-			'moveend': this._update
-		}, this);
-
-		if (this._animated) {
-			map.off({
-				'zoomanim': this._animateZoom,
-				'zoomend': this._endZoomAnim
-			}, this);
-		}
-
-		if (!this.options.updateWhenIdle) {
-			map.off('move', this._limitedUpdate, this);
-		}
-
-		this._container = null;
-		this._map = null;
-	},
-
-	bringToFront: function () {
-		var pane = this._map._panes.tilePane;
-
-		if (this._container) {
-			pane.appendChild(this._container);
-			this._setAutoZIndex(pane, Math.max);
-		}
-
-		return this;
-	},
-
-	bringToBack: function () {
-		var pane = this._map._panes.tilePane;
-
-		if (this._container) {
-			pane.insertBefore(this._container, pane.firstChild);
-			this._setAutoZIndex(pane, Math.min);
-		}
-
-		return this;
-	},
-
-	getAttribution: function () {
-		return this.options.attribution;
-	},
-
-	getContainer: function () {
-		return this._container;
-	},
-
-	setOpacity: function (opacity) {
-		this.options.opacity = opacity;
-
-		if (this._map) {
-			this._updateOpacity();
-		}
-
-		return this;
-	},
-
-	setZIndex: function (zIndex) {
-		this.options.zIndex = zIndex;
-		this._updateZIndex();
-
-		return this;
-	},
-
-	setUrl: function (url, noRedraw) {
-		this._url = url;
-
-		if (!noRedraw) {
-			this.redraw();
-		}
-
-		return this;
-	},
-
-	redraw: function () {
-		if (this._map) {
-			this._reset({hard: true});
-			this._update();
-		}
-		return this;
-	},
-
-	_updateZIndex: function () {
-		if (this._container && this.options.zIndex !== undefined) {
-			this._container.style.zIndex = this.options.zIndex;
-		}
-	},
-
-	_setAutoZIndex: function (pane, compare) {
-
-		var layers = pane.children,
-		    edgeZIndex = -compare(Infinity, -Infinity), // -Infinity for max, Infinity for min
-		    zIndex, i, len;
-
-		for (i = 0, len = layers.length; i < len; i++) {
-
-			if (layers[i] !== this._container) {
-				zIndex = parseInt(layers[i].style.zIndex, 10);
-
-				if (!isNaN(zIndex)) {
-					edgeZIndex = compare(edgeZIndex, zIndex);
-				}
-			}
-		}
-
-		this.options.zIndex = this._container.style.zIndex =
-		        (isFinite(edgeZIndex) ? edgeZIndex : 0) + compare(1, -1);
-	},
-
-	_updateOpacity: function () {
-		var i,
-		    tiles = this._tiles;
-
-		if (L.Browser.ielt9) {
-			for (i in tiles) {
-				L.DomUtil.setOpacity(tiles[i], this.options.opacity);
-			}
-		} else {
-			L.DomUtil.setOpacity(this._container, this.options.opacity);
-		}
-	},
-
-	_initContainer: function () {
-		var tilePane = this._map._panes.tilePane;
-
-		if (!this._container) {
-			this._container = L.DomUtil.create('div', 'leaflet-layer');
-
-			this._updateZIndex();
-
-			if (this._animated) {
-				var className = 'leaflet-tile-container';
-
-				this._bgBuffer = L.DomUtil.create('div', className, this._container);
-				this._tileContainer = L.DomUtil.create('div', className, this._container);
-
-			} else {
-				this._tileContainer = this._container;
-			}
-
-			tilePane.appendChild(this._container);
-
-			if (this.options.opacity < 1) {
-				this._updateOpacity();
-			}
-		}
-	},
-
-	_reset: function (e) {
-		for (var key in this._tiles) {
-			this.fire('tileunload', {tile: this._tiles[key]});
-		}
-
-		this._tiles = {};
-		this._tilesToLoad = 0;
-
-		if (this.options.reuseTiles) {
-			this._unusedTiles = [];
-		}
-
-		this._tileContainer.innerHTML = '';
-
-		if (this._animated && e && e.hard) {
-			this._clearBgBuffer();
-		}
-
-		this._initContainer();
-	},
-
-	_getTileSize: function () {
-		var map = this._map,
-		    zoom = map.getZoom() + this.options.zoomOffset,
-		    zoomN = this.options.maxNativeZoom,
-		    tileSize = this.options.tileSize;
-
-		if (zoomN && zoom > zoomN) {
-			tileSize = Math.round(map.getZoomScale(zoom) / map.getZoomScale(zoomN) * tileSize);
-		}
-
-		return tileSize;
-	},
-
-	_update: function () {
-
-		if (!this._map) { return; }
-
-		var map = this._map,
-		    bounds = map.getPixelBounds(),
-		    zoom = map.getZoom(),
-		    tileSize = this._getTileSize();
-
-		if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {
-			return;
-		}
-
-		var tileBounds = L.bounds(
-		        bounds.min.divideBy(tileSize)._floor(),
-		        bounds.max.divideBy(tileSize)._floor());
-
-		this._addTilesFromCenterOut(tileBounds);
-
-		if (this.options.unloadInvisibleTiles || this.options.reuseTiles) {
-			this._removeOtherTiles(tileBounds);
-		}
-	},
-
-	_addTilesFromCenterOut: function (bounds) {
-		var queue = [],
-		    center = bounds.getCenter();
-
-		var j, i, point;
-
-		for (j = bounds.min.y; j <= bounds.max.y; j++) {
-			for (i = bounds.min.x; i <= bounds.max.x; i++) {
-				point = new L.Point(i, j);
-
-				if (this._tileShouldBeLoaded(point)) {
-					queue.push(point);
-				}
-			}
-		}
-
-		var tilesToLoad = queue.length;
-
-		if (tilesToLoad === 0) { return; }
-
-		// load tiles in order of their distance to center
-		queue.sort(function (a, b) {
-			return a.distanceTo(center) - b.distanceTo(center);
-		});
-
-		var fragment = document.createDocumentFragment();
-
-		// if its the first batch of tiles to load
-		if (!this._tilesToLoad) {
-			this.fire('loading');
-		}
-
-		this._tilesToLoad += tilesToLoad;
-
-		for (i = 0; i < tilesToLoad; i++) {
-			this._addTile(queue[i], fragment);
-		}
-
-		this._tileContainer.appendChild(fragment);
-	},
-
-	_tileShouldBeLoaded: function (tilePoint) {
-		if ((tilePoint.x + ':' + tilePoint.y) in this._tiles) {
-			return false; // already loaded
-		}
-
-		var options = this.options;
-
-		if (!options.continuousWorld) {
-			var limit = this._getWrapTileNum();
-
-			// don't load if exceeds world bounds
-			if ((options.noWrap && (tilePoint.x < 0 || tilePoint.x >= limit.x)) ||
-				tilePoint.y < 0 || tilePoint.y >= limit.y) { return false; }
-		}
-
-		if (options.bounds) {
-			var tileSize = this._getTileSize(),
-			    nwPoint = tilePoint.multiplyBy(tileSize),
-			    sePoint = nwPoint.add([tileSize, tileSize]),
-			    nw = this._map.unproject(nwPoint),
-			    se = this._map.unproject(sePoint);
-
-			// TODO temporary hack, will be removed after refactoring projections
-			// https://github.com/Leaflet/Leaflet/issues/1618
-			if (!options.continuousWorld && !options.noWrap) {
-				nw = nw.wrap();
-				se = se.wrap();
-			}
-
-			if (!options.bounds.intersects([nw, se])) { return false; }
-		}
-
-		return true;
-	},
-
-	_removeOtherTiles: function (bounds) {
-		var kArr, x, y, key;
-
-		for (key in this._tiles) {
-			kArr = key.split(':');
-			x = parseInt(kArr[0], 10);
-			y = parseInt(kArr[1], 10);
-
-			// remove tile if it's out of bounds
-			if (x < bounds.min.x || x > bounds.max.x || y < bounds.min.y || y > bounds.max.y) {
-				this._removeTile(key);
-			}
-		}
-	},
-
-	_removeTile: function (key) {
-		var tile = this._tiles[key];
-
-		this.fire('tileunload', {tile: tile, url: tile.src});
-
-		if (this.options.reuseTiles) {
-			L.DomUtil.removeClass(tile, 'leaflet-tile-loaded');
-			this._unusedTiles.push(tile);
-
-		} else if (tile.parentNode === this._tileContainer) {
-			this._tileContainer.removeChild(tile);
-		}
-
-		// for https://github.com/CloudMade/Leaflet/issues/137
-		if (!L.Browser.android) {
-			tile.onload = null;
-			tile.src = L.Util.emptyImageUrl;
-		}
-
-		delete this._tiles[key];
-	},
-
-	_addTile: function (tilePoint, container) {
-		var tilePos = this._getTilePos(tilePoint);
-
-		// get unused tile - or create a new tile
-		var tile = this._getTile();
-
-		/*
-		Chrome 20 layouts much faster with top/left (verify with timeline, frames)
-		Android 4 browser has display issues with top/left and requires transform instead
-		(other browsers don't currently care) - see debug/hacks/jitter.html for an example
-		*/
-		L.DomUtil.setPosition(tile, tilePos, L.Browser.chrome);
-
-		this._tiles[tilePoint.x + ':' + tilePoint.y] = tile;
-
-		this._loadTile(tile, tilePoint);
-
-		if (tile.parentNode !== this._tileContainer) {
-			container.appendChild(tile);
-		}
-	},
-
-	_getZoomForUrl: function () {
-
-		var options = this.options,
-		    zoom = this._map.getZoom();
-
-		if (options.zoomReverse) {
-			zoom = options.maxZoom - zoom;
-		}
-
-		zoom += options.zoomOffset;
-
-		return options.maxNativeZoom ? Math.min(zoom, options.maxNativeZoom) : zoom;
-	},
-
-	_getTilePos: function (tilePoint) {
-		var origin = this._map.getPixelOrigin(),
-		    tileSize = this._getTileSize();
-
-		return tilePoint.multiplyBy(tileSize).subtract(origin);
-	},
-
-	// image-specific code (override to implement e.g. Canvas or SVG tile layer)
-
-	getTileUrl: function (tilePoint) {
-		return L.Util.template(this._url, L.extend({
-			s: this._getSubdomain(tilePoint),
-			z: tilePoint.z,
-			x: tilePoint.x,
-			y: tilePoint.y
-		}, this.options));
-	},
-
-	_getWrapTileNum: function () {
-		var crs = this._map.options.crs,
-		    size = crs.getSize(this._map.getZoom());
-		return size.divideBy(this._getTileSize())._floor();
-	},
-
-	_adjustTilePoint: function (tilePoint) {
-
-		var limit = this._getWrapTileNum();
-
-		// wrap tile coordinates
-		if (!this.options.continuousWorld && !this.options.noWrap) {
-			tilePoint.x = ((tilePoint.x % limit.x) + limit.x) % limit.x;
-		}
-
-		if (this.options.tms) {
-			tilePoint.y = limit.y - tilePoint.y - 1;
-		}
-
-		tilePoint.z = this._getZoomForUrl();
-	},
-
-	_getSubdomain: function (tilePoint) {
-		var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;
-		return this.options.subdomains[index];
-	},
-
-	_getTile: function () {
-		if (this.options.reuseTiles && this._unusedTiles.length > 0) {
-			var tile = this._unusedTiles.pop();
-			this._resetTile(tile);
-			return tile;
-		}
-		return this._createTile();
-	},
-
-	// Override if data stored on a tile needs to be cleaned up before reuse
-	_resetTile: function (/*tile*/) {},
-
-	_createTile: function () {
-		var tile = L.DomUtil.create('img', 'leaflet-tile');
-		tile.style.width = tile.style.height = this._getTileSize() + 'px';
-		tile.galleryimg = 'no';
-
-		tile.onselectstart = tile.onmousemove = L.Util.falseFn;
-
-		if (L.Browser.ielt9 && this.options.opacity !== undefined) {
-			L.DomUtil.setOpacity(tile, this.options.opacity);
-		}
-		// without this hack, tiles disappear after zoom on Chrome for Android
-		// https://github.com/Leaflet/Leaflet/issues/2078
-		if (L.Browser.mobileWebkit3d) {
-			tile.style.WebkitBackfaceVisibility = 'hidden';
-		}
-		return tile;
-	},
-
-	_loadTile: function (tile, tilePoint) {
-		tile._layer  = this;
-		tile.onload  = this._tileOnLoad;
-		tile.onerror = this._tileOnError;
-
-		this._adjustTilePoint(tilePoint);
-		tile.src     = this.getTileUrl(tilePoint);
-
-		this.fire('tileloadstart', {
-			tile: tile,
-			url: tile.src
-		});
-	},
-
-	_tileLoaded: function () {
-		this._tilesToLoad--;
-
-		if (this._animated) {
-			L.DomUtil.addClass(this._tileContainer, 'leaflet-zoom-animated');
-		}
-
-		if (!this._tilesToLoad) {
-			this.fire('load');
-
-			if (this._animated) {
-				// clear scaled tiles after all new tiles are loaded (for performance)
-				clearTimeout(this._clearBgBufferTimer);
-				this._clearBgBufferTimer = setTimeout(L.bind(this._clearBgBuffer, this), 500);
-			}
-		}
-	},
-
-	_tileOnLoad: function () {
-		var layer = this._layer;
-
-		//Only if we are loading an actual image
-		if (this.src !== L.Util.emptyImageUrl) {
-			L.DomUtil.addClass(this, 'leaflet-tile-loaded');
-
-			layer.fire('tileload', {
-				tile: this,
-				url: this.src
-			});
-		}
-
-		layer._tileLoaded();
-	},
-
-	_tileOnError: function () {
-		var layer = this._layer;
-
-		layer.fire('tileerror', {
-			tile: this,
-			url: this.src
-		});
-
-		var newUrl = layer.options.errorTileUrl;
-		if (newUrl) {
-			this.src = newUrl;
-		}
-
-		layer._tileLoaded();
-	}
-});
-
-L.tileLayer = function (url, options) {
-	return new L.TileLayer(url, options);
-};
-
-
-/*
- * L.TileLayer.WMS is used for putting WMS tile layers on the map.
- */
-
-L.TileLayer.WMS = L.TileLayer.extend({
-
-	defaultWmsParams: {
-		service: 'WMS',
-		request: 'GetMap',
-		version: '1.1.1',
-		layers: '',
-		styles: '',
-		format: 'image/jpeg',
-		transparent: false
-	},
-
-	initialize: function (url, options) { // (String, Object)
-
-		this._url = url;
-
-		var wmsParams = L.extend({}, this.defaultWmsParams),
-		    tileSize = options.tileSize || this.options.tileSize;
-
-		if (options.detectRetina && L.Browser.retina) {
-			wmsParams.width = wmsParams.height = tileSize * 2;
-		} else {
-			wmsParams.width = wmsParams.height = tileSize;
-		}
-
-		for (var i in options) {
-			// all keys that are not TileLayer options go to WMS params
-			if (!this.options.hasOwnProperty(i) && i !== 'crs') {
-				wmsParams[i] = options[i];
-			}
-		}
-
-		this.wmsParams = wmsParams;
-
-		L.setOptions(this, options);
-	},
-
-	onAdd: function (map) {
-
-		this._crs = this.options.crs || map.options.crs;
-
-		this._wmsVersion = parseFloat(this.wmsParams.version);
-
-		var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';
-		this.wmsParams[projectionKey] = this._crs.code;
-
-		L.TileLayer.prototype.onAdd.call(this, map);
-	},
-
-	getTileUrl: function (tilePoint) { // (Point, Number) -> String
-
-		var map = this._map,
-		    tileSize = this.options.tileSize,
-
-		    nwPoint = tilePoint.multiplyBy(tileSize),
-		    sePoint = nwPoint.add([tileSize, tileSize]),
-
-		    nw = this._crs.project(map.unproject(nwPoint, tilePoint.z)),
-		    se = this._crs.project(map.unproject(sePoint, tilePoint.z)),
-		    bbox = this._wmsVersion >= 1.3 && this._crs === L.CRS.EPSG4326 ?
-		        [se.y, nw.x, nw.y, se.x].join(',') :
-		        [nw.x, se.y, se.x, nw.y].join(','),
-
-		    url = L.Util.template(this._url, {s: this._getSubdomain(tilePoint)});
-
-		return url + L.Util.getParamString(this.wmsParams, url, true) + '&BBOX=' + bbox;
-	},
-
-	setParams: function (params, noRedraw) {
-
-		L.extend(this.wmsParams, params);
-
-		if (!noRedraw) {
-			this.redraw();
-		}
-
-		return this;
-	}
-});
-
-L.tileLayer.wms = function (url, options) {
-	return new L.TileLayer.WMS(url, options);
-};
-
-
-/*
- * L.TileLayer.Canvas is a class that you can use as a base for creating
- * dynamically drawn Canvas-based tile layers.
- */
-
-L.TileLayer.Canvas = L.TileLayer.extend({
-	options: {
-		async: false
-	},
-
-	initialize: function (options) {
-		L.setOptions(this, options);
-	},
-
-	redraw: function () {
-		if (this._map) {
-			this._reset({hard: true});
-			this._update();
-		}
-
-		for (var i in this._tiles) {
-			this._redrawTile(this._tiles[i]);
-		}
-		return this;
-	},
-
-	_redrawTile: function (tile) {
-		this.drawTile(tile, tile._tilePoint, this._map._zoom);
-	},
-
-	_createTile: function () {
-		var tile = L.DomUtil.create('canvas', 'leaflet-tile');
-		tile.width = tile.height = this.options.tileSize;
-		tile.onselectstart = tile.onmousemove = L.Util.falseFn;
-		return tile;
-	},
-
-	_loadTile: function (tile, tilePoint) {
-		tile._layer = this;
-		tile._tilePoint = tilePoint;
-
-		this._redrawTile(tile);
-
-		if (!this.options.async) {
-			this.tileDrawn(tile);
-		}
-	},
-
-	drawTile: function (/*tile, tilePoint*/) {
-		// override with rendering code
-	},
-
-	tileDrawn: function (tile) {
-		this._tileOnLoad.call(tile);
-	}
-});
-
-
-L.tileLayer.canvas = function (options) {
-	return new L.TileLayer.Canvas(options);
-};
-
-
-/*
- * L.ImageOverlay is used to overlay images over the map (to specific geographical bounds).
- */
-
-L.ImageOverlay = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	options: {
-		opacity: 1
-	},
-
-	initialize: function (url, bounds, options) { // (String, LatLngBounds, Object)
-		this._url = url;
-		this._bounds = L.latLngBounds(bounds);
-
-		L.setOptions(this, options);
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		if (!this._image) {
-			this._initImage();
-		}
-
-		map._panes.overlayPane.appendChild(this._image);
-
-		map.on('viewreset', this._reset, this);
-
-		if (map.options.zoomAnimation && L.Browser.any3d) {
-			map.on('zoomanim', this._animateZoom, this);
-		}
-
-		this._reset();
-	},
-
-	onRemove: function (map) {
-		map.getPanes().overlayPane.removeChild(this._image);
-
-		map.off('viewreset', this._reset, this);
-
-		if (map.options.zoomAnimation) {
-			map.off('zoomanim', this._animateZoom, this);
-		}
-	},
-
-	addTo: function (map) {
-		map.addLayer(this);
-		return this;
-	},
-
-	setOpacity: function (opacity) {
-		this.options.opacity = opacity;
-		this._updateOpacity();
-		return this;
-	},
-
-	// TODO remove bringToFront/bringToBack duplication from TileLayer/Path
-	bringToFront: function () {
-		if (this._image) {
-			this._map._panes.overlayPane.appendChild(this._image);
-		}
-		return this;
-	},
-
-	bringToBack: function () {
-		var pane = this._map._panes.overlayPane;
-		if (this._image) {
-			pane.insertBefore(this._image, pane.firstChild);
-		}
-		return this;
-	},
-
-	setUrl: function (url) {
-		this._url = url;
-		this._image.src = this._url;
-	},
-
-	getAttribution: function () {
-		return this.options.attribution;
-	},
-
-	_initImage: function () {
-		this._image = L.DomUtil.create('img', 'leaflet-image-layer');
-
-		if (this._map.options.zoomAnimation && L.Browser.any3d) {
-			L.DomUtil.addClass(this._image, 'leaflet-zoom-animated');
-		} else {
-			L.DomUtil.addClass(this._image, 'leaflet-zoom-hide');
-		}
-
-		this._updateOpacity();
-
-		//TODO createImage util method to remove duplication
-		L.extend(this._image, {
-			galleryimg: 'no',
-			onselectstart: L.Util.falseFn,
-			onmousemove: L.Util.falseFn,
-			onload: L.bind(this._onImageLoad, this),
-			src: this._url
-		});
-	},
-
-	_animateZoom: function (e) {
-		var map = this._map,
-		    image = this._image,
-		    scale = map.getZoomScale(e.zoom),
-		    nw = this._bounds.getNorthWest(),
-		    se = this._bounds.getSouthEast(),
-
-		    topLeft = map._latLngToNewLayerPoint(nw, e.zoom, e.center),
-		    size = map._latLngToNewLayerPoint(se, e.zoom, e.center)._subtract(topLeft),
-		    origin = topLeft._add(size._multiplyBy((1 / 2) * (1 - 1 / scale)));
-
-		image.style[L.DomUtil.TRANSFORM] =
-		        L.DomUtil.getTranslateString(origin) + ' scale(' + scale + ') ';
-	},
-
-	_reset: function () {
-		var image   = this._image,
-		    topLeft = this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
-		    size = this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(topLeft);
-
-		L.DomUtil.setPosition(image, topLeft);
-
-		image.style.width  = size.x + 'px';
-		image.style.height = size.y + 'px';
-	},
-
-	_onImageLoad: function () {
-		this.fire('load');
-	},
-
-	_updateOpacity: function () {
-		L.DomUtil.setOpacity(this._image, this.options.opacity);
-	}
-});
-
-L.imageOverlay = function (url, bounds, options) {
-	return new L.ImageOverlay(url, bounds, options);
-};
-
-
-/*
- * L.Icon is an image-based icon class that you can use with L.Marker for custom markers.
- */
-
-L.Icon = L.Class.extend({
-	options: {
-		/*
-		iconUrl: (String) (required)
-		iconRetinaUrl: (String) (optional, used for retina devices if detected)
-		iconSize: (Point) (can be set through CSS)
-		iconAnchor: (Point) (centered by default, can be set in CSS with negative margins)
-		popupAnchor: (Point) (if not specified, popup opens in the anchor point)
-		shadowUrl: (String) (no shadow by default)
-		shadowRetinaUrl: (String) (optional, used for retina devices if detected)
-		shadowSize: (Point)
-		shadowAnchor: (Point)
-		*/
-		className: ''
-	},
-
-	initialize: function (options) {
-		L.setOptions(this, options);
-	},
-
-	createIcon: function (oldIcon) {
-		return this._createIcon('icon', oldIcon);
-	},
-
-	createShadow: function (oldIcon) {
-		return this._createIcon('shadow', oldIcon);
-	},
-
-	_createIcon: function (name, oldIcon) {
-		var src = this._getIconUrl(name);
-
-		if (!src) {
-			if (name === 'icon') {
-				throw new Error('iconUrl not set in Icon options (see the docs).');
-			}
-			return null;
-		}
-
-		var img;
-		if (!oldIcon || oldIcon.tagName !== 'IMG') {
-			img = this._createImg(src);
-		} else {
-			img = this._createImg(src, oldIcon);
-		}
-		this._setIconStyles(img, name);
-
-		return img;
-	},
-
-	_setIconStyles: function (img, name) {
-		var options = this.options,
-		    size = L.point(options[name + 'Size']),
-		    anchor;
-
-		if (name === 'shadow') {
-			anchor = L.point(options.shadowAnchor || options.iconAnchor);
-		} else {
-			anchor = L.point(options.iconAnchor);
-		}
-
-		if (!anchor && size) {
-			anchor = size.divideBy(2, true);
-		}
-
-		img.className = 'leaflet-marker-' + name + ' ' + options.className;
-
-		if (anchor) {
-			img.style.marginLeft = (-anchor.x) + 'px';
-			img.style.marginTop  = (-anchor.y) + 'px';
-		}
-
-		if (size) {
-			img.style.width  = size.x + 'px';
-			img.style.height = size.y + 'px';
-		}
-	},
-
-	_createImg: function (src, el) {
-		el = el || document.createElement('img');
-		el.src = src;
-		return el;
-	},
-
-	_getIconUrl: function (name) {
-		if (L.Browser.retina && this.options[name + 'RetinaUrl']) {
-			return this.options[name + 'RetinaUrl'];
-		}
-		return this.options[name + 'Url'];
-	}
-});
-
-L.icon = function (options) {
-	return new L.Icon(options);
-};
-
-
-/*
- * L.Icon.Default is the blue marker icon used by default in Leaflet.
- */
-
-L.Icon.Default = L.Icon.extend({
-
-	options: {
-		iconSize: [25, 41],
-		iconAnchor: [12, 41],
-		popupAnchor: [1, -34],
-
-		shadowSize: [41, 41]
-	},
-
-	_getIconUrl: function (name) {
-		var key = name + 'Url';
-
-		if (this.options[key]) {
-			return this.options[key];
-		}
-
-		if (L.Browser.retina && name === 'icon') {
-			name += '-2x';
-		}
-
-		var path = L.Icon.Default.imagePath;
-
-		if (!path) {
-			throw new Error('Couldn\'t autodetect L.Icon.Default.imagePath, set it manually.');
-		}
-
-		return path + '/marker-' + name + '.png';
-	}
-});
-
-L.Icon.Default.imagePath = (function () {
-	var scripts = document.getElementsByTagName('script'),
-	    leafletRe = /[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;
-
-	var i, len, src, matches, path;
-
-	for (i = 0, len = scripts.length; i < len; i++) {
-		src = scripts[i].src;
-		matches = src.match(leafletRe);
-
-		if (matches) {
-			path = src.split(leafletRe)[0];
-			return (path ? path + '/' : '') + 'images';
-		}
-	}
-}());
-
-
-/*
- * L.Marker is used to display clickable/draggable icons on the map.
- */
-
-L.Marker = L.Class.extend({
-
-	includes: L.Mixin.Events,
-
-	options: {
-		icon: new L.Icon.Default(),
-		title: '',
-		alt: '',
-		clickable: true,
-		draggable: false,
-		keyboard: true,
-		zIndexOffset: 0,
-		opacity: 1,
-		riseOnHover: false,
-		riseOffset: 250
-	},
-
-	initialize: function (latlng, options) {
-		L.setOptions(this, options);
-		this._latlng = L.latLng(latlng);
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		map.on('viewreset', this.update, this);
-
-		this._initIcon();
-		this.update();
-		this.fire('add');
-
-		if (map.options.zoomAnimation && map.options.markerZoomAnimation) {
-			map.on('zoomanim', this._animateZoom, this);
-		}
-	},
-
-	addTo: function (map) {
-		map.addLayer(this);
-		return this;
-	},
-
-	onRemove: function (map) {
-		if (this.dragging) {
-			this.dragging.disable();
-		}
-
-		this._removeIcon();
-		this._removeShadow();
-
-		this.fire('remove');
-
-		map.off({
-			'viewreset': this.update,
-			'zoomanim': this._animateZoom
-		}, this);
-
-		this._map = null;
-	},
-
-	getLatLng: function () {
-		return this._latlng;
-	},
-
-	setLatLng: function (latlng) {
-		this._latlng = L.latLng(latlng);
-
-		this.update();
-
-		return this.fire('move', { latlng: this._latlng });
-	},
-
-	setZIndexOffset: function (offset) {
-		this.options.zIndexOffset = offset;
-		this.update();
-
-		return this;
-	},
-
-	setIcon: function (icon) {
-
-		this.options.icon = icon;
-
-		if (this._map) {
-			this._initIcon();
-			this.update();
-		}
-
-		if (this._popup) {
-			this.bindPopup(this._popup);
-		}
-
-		return this;
-	},
-
-	update: function () {
-		if (this._icon) {
-			this._setPos(this._map.latLngToLayerPoint(this._latlng).round());
-		}
-		return this;
-	},
-
-	_initIcon: function () {
-		var options = this.options,
-		    map = this._map,
-		    animation = (map.options.zoomAnimation && map.options.markerZoomAnimation),
-		    classToAdd = animation ? 'leaflet-zoom-animated' : 'leaflet-zoom-hide';
-
-		var icon = options.icon.createIcon(this._icon),
-			addIcon = false;
-
-		// if we're not reusing the icon, remove the old one and init new one
-		if (icon !== this._icon) {
-			if (this._icon) {
-				this._removeIcon();
-			}
-			addIcon = true;
-
-			if (options.title) {
-				icon.title = options.title;
-			}
-
-			if (options.alt) {
-				icon.alt = options.alt;
-			}
-		}
-
-		L.DomUtil.addClass(icon, classToAdd);
-
-		if (options.keyboard) {
-			icon.tabIndex = '0';
-		}
-
-		this._icon = icon;
-
-		this._initInteraction();
-
-		if (options.riseOnHover) {
-			L.DomEvent
-				.on(icon, 'mouseover', this._bringToFront, this)
-				.on(icon, 'mouseout', this._resetZIndex, this);
-		}
-
-		var newShadow = options.icon.createShadow(this._shadow),
-			addShadow = false;
-
-		if (newShadow !== this._shadow) {
-			this._removeShadow();
-			addShadow = true;
-		}
-
-		if (newShadow) {
-			L.DomUtil.addClass(newShadow, classToAdd);
-		}
-		this._shadow = newShadow;
-
-
-		if (options.opacity < 1) {
-			this._updateOpacity();
-		}
-
-
-		var panes = this._map._panes;
-
-		if (addIcon) {
-			panes.markerPane.appendChild(this._icon);
-		}
-
-		if (newShadow && addShadow) {
-			panes.shadowPane.appendChild(this._shadow);
-		}
-	},
-
-	_removeIcon: function () {
-		if (this.options.riseOnHover) {
-			L.DomEvent
-			    .off(this._icon, 'mouseover', this._bringToFront)
-			    .off(this._icon, 'mouseout', this._resetZIndex);
-		}
-
-		this._map._panes.markerPane.removeChild(this._icon);
-
-		this._icon = null;
-	},
-
-	_removeShadow: function () {
-		if (this._shadow) {
-			this._map._panes.shadowPane.removeChild(this._shadow);
-		}
-		this._shadow = null;
-	},
-
-	_setPos: function (pos) {
-		L.DomUtil.setPosition(this._icon, pos);
-
-		if (this._shadow) {
-			L.DomUtil.setPosition(this._shadow, pos);
-		}
-
-		this._zIndex = pos.y + this.options.zIndexOffset;
-
-		this._resetZIndex();
-	},
-
-	_updateZIndex: function (offset) {
-		this._icon.style.zIndex = this._zIndex + offset;
-	},
-
-	_animateZoom: function (opt) {
-		var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();
-
-		this._setPos(pos);
-	},
-
-	_initInteraction: function () {
-
-		if (!this.options.clickable) { return; }
-
-		// TODO refactor into something shared with Map/Path/etc. to DRY it up
-
-		var icon = this._icon,
-		    events = ['dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu'];
-
-		L.DomUtil.addClass(icon, 'leaflet-clickable');
-		L.DomEvent.on(icon, 'click', this._onMouseClick, this);
-		L.DomEvent.on(icon, 'keypress', this._onKeyPress, this);
-
-		for (var i = 0; i < events.length; i++) {
-			L.DomEvent.on(icon, events[i], this._fireMouseEvent, this);
-		}
-
-		if (L.Handler.MarkerDrag) {
-			this.dragging = new L.Handler.MarkerDrag(this);
-
-			if (this.options.draggable) {
-				this.dragging.enable();
-			}
-		}
-	},
-
-	_onMouseClick: function (e) {
-		var wasDragged = this.dragging && this.dragging.moved();
-
-		if (this.hasEventListeners(e.type) || wasDragged) {
-			L.DomEvent.stopPropagation(e);
-		}
-
-		if (wasDragged) { return; }
-
-		if ((!this.dragging || !this.dragging._enabled) && this._map.dragging && this._map.dragging.moved()) { return; }
-
-		this.fire(e.type, {
-			originalEvent: e,
-			latlng: this._latlng
-		});
-	},
-
-	_onKeyPress: function (e) {
-		if (e.keyCode === 13) {
-			this.fire('click', {
-				originalEvent: e,
-				latlng: this._latlng
-			});
-		}
-	},
-
-	_fireMouseEvent: function (e) {
-
-		this.fire(e.type, {
-			originalEvent: e,
-			latlng: this._latlng
-		});
-
-		// TODO proper custom event propagation
-		// this line will always be called if marker is in a FeatureGroup
-		if (e.type === 'contextmenu' && this.hasEventListeners(e.type)) {
-			L.DomEvent.preventDefault(e);
-		}
-		if (e.type !== 'mousedown') {
-			L.DomEvent.stopPropagation(e);
-		} else {
-			L.DomEvent.preventDefault(e);
-		}
-	},
-
-	setOpacity: function (opacity) {
-		this.options.opacity = opacity;
-		if (this._map) {
-			this._updateOpacity();
-		}
-
-		return this;
-	},
-
-	_updateOpacity: function () {
-		L.DomUtil.setOpacity(this._icon, this.options.opacity);
-		if (this._shadow) {
-			L.DomUtil.setOpacity(this._shadow, this.options.opacity);
-		}
-	},
-
-	_bringToFront: function () {
-		this._updateZIndex(this.options.riseOffset);
-	},
-
-	_resetZIndex: function () {
-		this._updateZIndex(0);
-	}
-});
-
-L.marker = function (latlng, options) {
-	return new L.Marker(latlng, options);
-};
-
-
-/*
- * L.DivIcon is a lightweight HTML-based icon class (as opposed to the image-based L.Icon)
- * to use with L.Marker.
- */
-
-L.DivIcon = L.Icon.extend({
-	options: {
-		iconSize: [12, 12], // also can be set through CSS
-		/*
-		iconAnchor: (Point)
-		popupAnchor: (Point)
-		html: (String)
-		bgPos: (Point)
-		*/
-		className: 'leaflet-div-icon',
-		html: false
-	},
-
-	createIcon: function (oldIcon) {
-		var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),
-		    options = this.options;
-
-		if (options.html !== false) {
-			div.innerHTML = options.html;
-		} else {
-			div.innerHTML = '';
-		}
-
-		if (options.bgPos) {
-			div.style.backgroundPosition =
-			        (-options.bgPos.x) + 'px ' + (-options.bgPos.y) + 'px';
-		}
-
-		this._setIconStyles(div, 'icon');
-		return div;
-	},
-
-	createShadow: function () {
-		return null;
-	}
-});
-
-L.divIcon = function (options) {
-	return new L.DivIcon(options);
-};
-
-
-/*
- * L.Popup is used for displaying popups on the map.
- */
-
-L.Map.mergeOptions({
-	closePopupOnClick: true
-});
-
-L.Popup = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	options: {
-		minWidth: 50,
-		maxWidth: 300,
-		// maxHeight: null,
-		autoPan: true,
-		closeButton: true,
-		offset: [0, 7],
-		autoPanPadding: [5, 5],
-		// autoPanPaddingTopLeft: null,
-		// autoPanPaddingBottomRight: null,
-		keepInView: false,
-		className: '',
-		zoomAnimation: true
-	},
-
-	initialize: function (options, source) {
-		L.setOptions(this, options);
-
-		this._source = source;
-		this._animated = L.Browser.any3d && this.options.zoomAnimation;
-		this._isOpen = false;
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		if (!this._container) {
-			this._initLayout();
-		}
-
-		var animFade = map.options.fadeAnimation;
-
-		if (animFade) {
-			L.DomUtil.setOpacity(this._container, 0);
-		}
-		map._panes.popupPane.appendChild(this._container);
-
-		map.on(this._getEvents(), this);
-
-		this.update();
-
-		if (animFade) {
-			L.DomUtil.setOpacity(this._container, 1);
-		}
-
-		this.fire('open');
-
-		map.fire('popupopen', {popup: this});
-
-		if (this._source) {
-			this._source.fire('popupopen', {popup: this});
-		}
-	},
-
-	addTo: function (map) {
-		map.addLayer(this);
-		return this;
-	},
-
-	openOn: function (map) {
-		map.openPopup(this);
-		return this;
-	},
-
-	onRemove: function (map) {
-		map._panes.popupPane.removeChild(this._container);
-
-		L.Util.falseFn(this._container.offsetWidth); // force reflow
-
-		map.off(this._getEvents(), this);
-
-		if (map.options.fadeAnimation) {
-			L.DomUtil.setOpacity(this._container, 0);
-		}
-
-		this._map = null;
-
-		this.fire('close');
-
-		map.fire('popupclose', {popup: this});
-
-		if (this._source) {
-			this._source.fire('popupclose', {popup: this});
-		}
-	},
-
-	getLatLng: function () {
-		return this._latlng;
-	},
-
-	setLatLng: function (latlng) {
-		this._latlng = L.latLng(latlng);
-		if (this._map) {
-			this._updatePosition();
-			this._adjustPan();
-		}
-		return this;
-	},
-
-	getContent: function () {
-		return this._content;
-	},
-
-	setContent: function (content) {
-		this._content = content;
-		this.update();
-		return this;
-	},
-
-	update: function () {
-		if (!this._map) { return; }
-
-		this._container.style.visibility = 'hidden';
-
-		this._updateContent();
-		this._updateLayout();
-		this._updatePosition();
-
-		this._container.style.visibility = '';
-
-		this._adjustPan();
-	},
-
-	_getEvents: function () {
-		var events = {
-			viewreset: this._updatePosition
-		};
-
-		if (this._animated) {
-			events.zoomanim = this._zoomAnimation;
-		}
-		if ('closeOnClick' in this.options ? this.options.closeOnClick : this._map.options.closePopupOnClick) {
-			events.preclick = this._close;
-		}
-		if (this.options.keepInView) {
-			events.moveend = this._adjustPan;
-		}
-
-		return events;
-	},
-
-	_close: function () {
-		if (this._map) {
-			this._map.closePopup(this);
-		}
-	},
-
-	_initLayout: function () {
-		var prefix = 'leaflet-popup',
-			containerClass = prefix + ' ' + this.options.className + ' leaflet-zoom-' +
-			        (this._animated ? 'animated' : 'hide'),
-			container = this._container = L.DomUtil.create('div', containerClass),
-			closeButton;
-
-		if (this.options.closeButton) {
-			closeButton = this._closeButton =
-			        L.DomUtil.create('a', prefix + '-close-button', container);
-			closeButton.href = '#close';
-			closeButton.innerHTML = '&#215;';
-			L.DomEvent.disableClickPropagation(closeButton);
-
-			L.DomEvent.on(closeButton, 'click', this._onCloseButtonClick, this);
-		}
-
-		var wrapper = this._wrapper =
-		        L.DomUtil.create('div', prefix + '-content-wrapper', container);
-		L.DomEvent.disableClickPropagation(wrapper);
-
-		this._contentNode = L.DomUtil.create('div', prefix + '-content', wrapper);
-
-		L.DomEvent.disableScrollPropagation(this._contentNode);
-		L.DomEvent.on(wrapper, 'contextmenu', L.DomEvent.stopPropagation);
-
-		this._tipContainer = L.DomUtil.create('div', prefix + '-tip-container', container);
-		this._tip = L.DomUtil.create('div', prefix + '-tip', this._tipContainer);
-	},
-
-	_updateContent: function () {
-		if (!this._content) { return; }
-
-		if (typeof this._content === 'string') {
-			this._contentNode.innerHTML = this._content;
-		} else {
-			while (this._contentNode.hasChildNodes()) {
-				this._contentNode.removeChild(this._contentNode.firstChild);
-			}
-			this._contentNode.appendChild(this._content);
-		}
-		this.fire('contentupdate');
-	},
-
-	_updateLayout: function () {
-		var container = this._contentNode,
-		    style = container.style;
-
-		style.width = '';
-		style.whiteSpace = 'nowrap';
-
-		var width = container.offsetWidth;
-		width = Math.min(width, this.options.maxWidth);
-		width = Math.max(width, this.options.minWidth);
-
-		style.width = (width + 1) + 'px';
-		style.whiteSpace = '';
-
-		style.height = '';
-
-		var height = container.offsetHeight,
-		    maxHeight = this.options.maxHeight,
-		    scrolledClass = 'leaflet-popup-scrolled';
-
-		if (maxHeight && height > maxHeight) {
-			style.height = maxHeight + 'px';
-			L.DomUtil.addClass(container, scrolledClass);
-		} else {
-			L.DomUtil.removeClass(container, scrolledClass);
-		}
-
-		this._containerWidth = this._container.offsetWidth;
-	},
-
-	_updatePosition: function () {
-		if (!this._map) { return; }
-
-		var pos = this._map.latLngToLayerPoint(this._latlng),
-		    animated = this._animated,
-		    offset = L.point(this.options.offset);
-
-		if (animated) {
-			L.DomUtil.setPosition(this._container, pos);
-		}
-
-		this._containerBottom = -offset.y - (animated ? 0 : pos.y);
-		this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x + (animated ? 0 : pos.x);
-
-		// bottom position the popup in case the height of the popup changes (images loading etc)
-		this._container.style.bottom = this._containerBottom + 'px';
-		this._container.style.left = this._containerLeft + 'px';
-	},
-
-	_zoomAnimation: function (opt) {
-		var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center);
-
-		L.DomUtil.setPosition(this._container, pos);
-	},
-
-	_adjustPan: function () {
-		if (!this.options.autoPan) { return; }
-
-		var map = this._map,
-		    containerHeight = this._container.offsetHeight,
-		    containerWidth = this._containerWidth,
-
-		    layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);
-
-		if (this._animated) {
-			layerPos._add(L.DomUtil.getPosition(this._container));
-		}
-
-		var containerPos = map.layerPointToContainerPoint(layerPos),
-		    padding = L.point(this.options.autoPanPadding),
-		    paddingTL = L.point(this.options.autoPanPaddingTopLeft || padding),
-		    paddingBR = L.point(this.options.autoPanPaddingBottomRight || padding),
-		    size = map.getSize(),
-		    dx = 0,
-		    dy = 0;
-
-		if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right
-			dx = containerPos.x + containerWidth - size.x + paddingBR.x;
-		}
-		if (containerPos.x - dx - paddingTL.x < 0) { // left
-			dx = containerPos.x - paddingTL.x;
-		}
-		if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom
-			dy = containerPos.y + containerHeight - size.y + paddingBR.y;
-		}
-		if (containerPos.y - dy - paddingTL.y < 0) { // top
-			dy = containerPos.y - paddingTL.y;
-		}
-
-		if (dx || dy) {
-			map
-			    .fire('autopanstart')
-			    .panBy([dx, dy]);
-		}
-	},
-
-	_onCloseButtonClick: function (e) {
-		this._close();
-		L.DomEvent.stop(e);
-	}
-});
-
-L.popup = function (options, source) {
-	return new L.Popup(options, source);
-};
-
-
-L.Map.include({
-	openPopup: function (popup, latlng, options) { // (Popup) or (String || HTMLElement, LatLng[, Object])
-		this.closePopup();
-
-		if (!(popup instanceof L.Popup)) {
-			var content = popup;
-
-			popup = new L.Popup(options)
-			    .setLatLng(latlng)
-			    .setContent(content);
-		}
-		popup._isOpen = true;
-
-		this._popup = popup;
-		return this.addLayer(popup);
-	},
-
-	closePopup: function (popup) {
-		if (!popup || popup === this._popup) {
-			popup = this._popup;
-			this._popup = null;
-		}
-		if (popup) {
-			this.removeLayer(popup);
-			popup._isOpen = false;
-		}
-		return this;
-	}
-});
-
-
-/*
- * Popup extension to L.Marker, adding popup-related methods.
- */
-
-L.Marker.include({
-	openPopup: function () {
-		if (this._popup && this._map && !this._map.hasLayer(this._popup)) {
-			this._popup.setLatLng(this._latlng);
-			this._map.openPopup(this._popup);
-		}
-
-		return this;
-	},
-
-	closePopup: function () {
-		if (this._popup) {
-			this._popup._close();
-		}
-		return this;
-	},
-
-	togglePopup: function () {
-		if (this._popup) {
-			if (this._popup._isOpen) {
-				this.closePopup();
-			} else {
-				this.openPopup();
-			}
-		}
-		return this;
-	},
-
-	bindPopup: function (content, options) {
-		var anchor = L.point(this.options.icon.options.popupAnchor || [0, 0]);
-
-		anchor = anchor.add(L.Popup.prototype.options.offset);
-
-		if (options && options.offset) {
-			anchor = anchor.add(options.offset);
-		}
-
-		options = L.extend({offset: anchor}, options);
-
-		if (!this._popupHandlersAdded) {
-			this
-			    .on('click', this.togglePopup, this)
-			    .on('remove', this.closePopup, this)
-			    .on('move', this._movePopup, this);
-			this._popupHandlersAdded = true;
-		}
-
-		if (content instanceof L.Popup) {
-			L.setOptions(content, options);
-			this._popup = content;
-			content._source = this;
-		} else {
-			this._popup = new L.Popup(options, this)
-				.setContent(content);
-		}
-
-		return this;
-	},
-
-	setPopupContent: function (content) {
-		if (this._popup) {
-			this._popup.setContent(content);
-		}
-		return this;
-	},
-
-	unbindPopup: function () {
-		if (this._popup) {
-			this._popup = null;
-			this
-			    .off('click', this.togglePopup, this)
-			    .off('remove', this.closePopup, this)
-			    .off('move', this._movePopup, this);
-			this._popupHandlersAdded = false;
-		}
-		return this;
-	},
-
-	getPopup: function () {
-		return this._popup;
-	},
-
-	_movePopup: function (e) {
-		this._popup.setLatLng(e.latlng);
-	}
-});
-
-
-/*
- * L.LayerGroup is a class to combine several layers into one so that
- * you can manipulate the group (e.g. add/remove it) as one layer.
- */
-
-L.LayerGroup = L.Class.extend({
-	initialize: function (layers) {
-		this._layers = {};
-
-		var i, len;
-
-		if (layers) {
-			for (i = 0, len = layers.length; i < len; i++) {
-				this.addLayer(layers[i]);
-			}
-		}
-	},
-
-	addLayer: function (layer) {
-		var id = this.getLayerId(layer);
-
-		this._layers[id] = layer;
-
-		if (this._map) {
-			this._map.addLayer(layer);
-		}
-
-		return this;
-	},
-
-	removeLayer: function (layer) {
-		var id = layer in this._layers ? layer : this.getLayerId(layer);
-
-		if (this._map && this._layers[id]) {
-			this._map.removeLayer(this._layers[id]);
-		}
-
-		delete this._layers[id];
-
-		return this;
-	},
-
-	hasLayer: function (layer) {
-		if (!layer) { return false; }
-
-		return (layer in this._layers || this.getLayerId(layer) in this._layers);
-	},
-
-	clearLayers: function () {
-		this.eachLayer(this.removeLayer, this);
-		return this;
-	},
-
-	invoke: function (methodName) {
-		var args = Array.prototype.slice.call(arguments, 1),
-		    i, layer;
-
-		for (i in this._layers) {
-			layer = this._layers[i];
-
-			if (layer[methodName]) {
-				layer[methodName].apply(layer, args);
-			}
-		}
-
-		return this;
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-		this.eachLayer(map.addLayer, map);
-	},
-
-	onRemove: function (map) {
-		this.eachLayer(map.removeLayer, map);
-		this._map = null;
-	},
-
-	addTo: function (map) {
-		map.addLayer(this);
-		return this;
-	},
-
-	eachLayer: function (method, context) {
-		for (var i in this._layers) {
-			method.call(context, this._layers[i]);
-		}
-		return this;
-	},
-
-	getLayer: function (id) {
-		return this._layers[id];
-	},
-
-	getLayers: function () {
-		var layers = [];
-
-		for (var i in this._layers) {
-			layers.push(this._layers[i]);
-		}
-		return layers;
-	},
-
-	setZIndex: function (zIndex) {
-		return this.invoke('setZIndex', zIndex);
-	},
-
-	getLayerId: function (layer) {
-		return L.stamp(layer);
-	}
-});
-
-L.layerGroup = function (layers) {
-	return new L.LayerGroup(layers);
-};
-
-
-/*
- * L.FeatureGroup extends L.LayerGroup by introducing mouse events and additional methods
- * shared between a group of interactive layers (like vectors or markers).
- */
-
-L.FeatureGroup = L.LayerGroup.extend({
-	includes: L.Mixin.Events,
-
-	statics: {
-		EVENTS: 'click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose'
-	},
-
-	addLayer: function (layer) {
-		if (this.hasLayer(layer)) {
-			return this;
-		}
-
-		if ('on' in layer) {
-			layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
-		}
-
-		L.LayerGroup.prototype.addLayer.call(this, layer);
-
-		if (this._popupContent && layer.bindPopup) {
-			layer.bindPopup(this._popupContent, this._popupOptions);
-		}
-
-		return this.fire('layeradd', {layer: layer});
-	},
-
-	removeLayer: function (layer) {
-		if (!this.hasLayer(layer)) {
-			return this;
-		}
-		if (layer in this._layers) {
-			layer = this._layers[layer];
-		}
-
-		if ('off' in layer) {
-			layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this);
-		}
-
-		L.LayerGroup.prototype.removeLayer.call(this, layer);
-
-		if (this._popupContent) {
-			this.invoke('unbindPopup');
-		}
-
-		return this.fire('layerremove', {layer: layer});
-	},
-
-	bindPopup: function (content, options) {
-		this._popupContent = content;
-		this._popupOptions = options;
-		return this.invoke('bindPopup', content, options);
-	},
-
-	openPopup: function (latlng) {
-		// open popup on the first layer
-		for (var id in this._layers) {
-			this._layers[id].openPopup(latlng);
-			break;
-		}
-		return this;
-	},
-
-	setStyle: function (style) {
-		return this.invoke('setStyle', style);
-	},
-
-	bringToFront: function () {
-		return this.invoke('bringToFront');
-	},
-
-	bringToBack: function () {
-		return this.invoke('bringToBack');
-	},
-
-	getBounds: function () {
-		var bounds = new L.LatLngBounds();
-
-		this.eachLayer(function (layer) {
-			bounds.extend(layer instanceof L.Marker ? layer.getLatLng() : layer.getBounds());
-		});
-
-		return bounds;
-	},
-
-	_propagateEvent: function (e) {
-		e = L.extend({
-			layer: e.target,
-			target: this
-		}, e);
-		this.fire(e.type, e);
-	}
-});
-
-L.featureGroup = function (layers) {
-	return new L.FeatureGroup(layers);
-};
-
-
-/*
- * L.Path is a base class for rendering vector paths on a map. Inherited by Polyline, Circle, etc.
- */
-
-L.Path = L.Class.extend({
-	includes: [L.Mixin.Events],
-
-	statics: {
-		// how much to extend the clip area around the map view
-		// (relative to its size, e.g. 0.5 is half the screen in each direction)
-		// set it so that SVG element doesn't exceed 1280px (vectors flicker on dragend if it is)
-		CLIP_PADDING: (function () {
-			var max = L.Browser.mobile ? 1280 : 2000,
-			    target = (max / Math.max(window.outerWidth, window.outerHeight) - 1) / 2;
-			return Math.max(0, Math.min(0.5, target));
-		})()
-	},
-
-	options: {
-		stroke: true,
-		color: '#0033ff',
-		dashArray: null,
-		lineCap: null,
-		lineJoin: null,
-		weight: 5,
-		opacity: 0.5,
-
-		fill: false,
-		fillColor: null, //same as color by default
-		fillOpacity: 0.2,
-
-		clickable: true
-	},
-
-	initialize: function (options) {
-		L.setOptions(this, options);
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		if (!this._container) {
-			this._initElements();
-			this._initEvents();
-		}
-
-		this.projectLatlngs();
-		this._updatePath();
-
-		if (this._container) {
-			this._map._pathRoot.appendChild(this._container);
-		}
-
-		this.fire('add');
-
-		map.on({
-			'viewreset': this.projectLatlngs,
-			'moveend': this._updatePath
-		}, this);
-	},
-
-	addTo: function (map) {
-		map.addLayer(this);
-		return this;
-	},
-
-	onRemove: function (map) {
-		map._pathRoot.removeChild(this._container);
-
-		// Need to fire remove event before we set _map to null as the event hooks might need the object
-		this.fire('remove');
-		this._map = null;
-
-		if (L.Browser.vml) {
-			this._container = null;
-			this._stroke = null;
-			this._fill = null;
-		}
-
-		map.off({
-			'viewreset': this.projectLatlngs,
-			'moveend': this._updatePath
-		}, this);
-	},
-
-	projectLatlngs: function () {
-		// do all projection stuff here
-	},
-
-	setStyle: function (style) {
-		L.setOptions(this, style);
-
-		if (this._container) {
-			this._updateStyle();
-		}
-
-		return this;
-	},
-
-	redraw: function () {
-		if (this._map) {
-			this.projectLatlngs();
-			this._updatePath();
-		}
-		return this;
-	}
-});
-
-L.Map.include({
-	_updatePathViewport: function () {
-		var p = L.Path.CLIP_PADDING,
-		    size = this.getSize(),
-		    panePos = L.DomUtil.getPosition(this._mapPane),
-		    min = panePos.multiplyBy(-1)._subtract(size.multiplyBy(p)._round()),
-		    max = min.add(size.multiplyBy(1 + p * 2)._round());
-
-		this._pathViewport = new L.Bounds(min, max);
-	}
-});
-
-
-/*
- * Extends L.Path with SVG-specific rendering code.
- */
-
-L.Path.SVG_NS = 'http://www.w3.org/2000/svg';
-
-L.Browser.svg = !!(document.createElementNS && document.createElementNS(L.Path.SVG_NS, 'svg').createSVGRect);
-
-L.Path = L.Path.extend({
-	statics: {
-		SVG: L.Browser.svg
-	},
-
-	bringToFront: function () {
-		var root = this._map._pathRoot,
-		    path = this._container;
-
-		if (path && root.lastChild !== path) {
-			root.appendChild(path);
-		}
-		return this;
-	},
-
-	bringToBack: function () {
-		var root = this._map._pathRoot,
-		    path = this._container,
-		    first = root.firstChild;
-
-		if (path && first !== path) {
-			root.insertBefore(path, first);
-		}
-		return this;
-	},
-
-	getPathString: function () {
-		// form path string here
-	},
-
-	_createElement: function (name) {
-		return document.createElementNS(L.Path.SVG_NS, name);
-	},
-
-	_initElements: function () {
-		this._map._initPathRoot();
-		this._initPath();
-		this._initStyle();
-	},
-
-	_initPath: function () {
-		this._container = this._createElement('g');
-
-		this._path = this._createElement('path');
-
-		if (this.options.className) {
-			L.DomUtil.addClass(this._path, this.options.className);
-		}
-
-		this._container.appendChild(this._path);
-	},
-
-	_initStyle: function () {
-		if (this.options.stroke) {
-			this._path.setAttribute('stroke-linejoin', 'round');
-			this._path.setAttribute('stroke-linecap', 'round');
-		}
-		if (this.options.fill) {
-			this._path.setAttribute('fill-rule', 'evenodd');
-		}
-		if (this.options.pointerEvents) {
-			this._path.setAttribute('pointer-events', this.options.pointerEvents);
-		}
-		if (!this.options.clickable && !this.options.pointerEvents) {
-			this._path.setAttribute('pointer-events', 'none');
-		}
-		this._updateStyle();
-	},
-
-	_updateStyle: function () {
-		if (this.options.stroke) {
-			this._path.setAttribute('stroke', this.options.color);
-			this._path.setAttribute('stroke-opacity', this.options.opacity);
-			this._path.setAttribute('stroke-width', this.options.weight);
-			if (this.options.dashArray) {
-				this._path.setAttribute('stroke-dasharray', this.options.dashArray);
-			} else {
-				this._path.removeAttribute('stroke-dasharray');
-			}
-			if (this.options.lineCap) {
-				this._path.setAttribute('stroke-linecap', this.options.lineCap);
-			}
-			if (this.options.lineJoin) {
-				this._path.setAttribute('stroke-linejoin', this.options.lineJoin);
-			}
-		} else {
-			this._path.setAttribute('stroke', 'none');
-		}
-		if (this.options.fill) {
-			this._path.setAttribute('fill', this.options.fillColor || this.options.color);
-			this._path.setAttribute('fill-opacity', this.options.fillOpacity);
-		} else {
-			this._path.setAttribute('fill', 'none');
-		}
-	},
-
-	_updatePath: function () {
-		var str = this.getPathString();
-		if (!str) {
-			// fix webkit empty string parsing bug
-			str = 'M0 0';
-		}
-		this._path.setAttribute('d', str);
-	},
-
-	// TODO remove duplication with L.Map
-	_initEvents: function () {
-		if (this.options.clickable) {
-			if (L.Browser.svg || !L.Browser.vml) {
-				L.DomUtil.addClass(this._path, 'leaflet-clickable');
-			}
-
-			L.DomEvent.on(this._container, 'click', this._onMouseClick, this);
-
-			var events = ['dblclick', 'mousedown', 'mouseover',
-			              'mouseout', 'mousemove', 'contextmenu'];
-			for (var i = 0; i < events.length; i++) {
-				L.DomEvent.on(this._container, events[i], this._fireMouseEvent, this);
-			}
-		}
-	},
-
-	_onMouseClick: function (e) {
-		if (this._map.dragging && this._map.dragging.moved()) { return; }
-
-		this._fireMouseEvent(e);
-	},
-
-	_fireMouseEvent: function (e) {
-		if (!this._map || !this.hasEventListeners(e.type)) { return; }
-
-		var map = this._map,
-		    containerPoint = map.mouseEventToContainerPoint(e),
-		    layerPoint = map.containerPointToLayerPoint(containerPoint),
-		    latlng = map.layerPointToLatLng(layerPoint);
-
-		this.fire(e.type, {
-			latlng: latlng,
-			layerPoint: layerPoint,
-			containerPoint: containerPoint,
-			originalEvent: e
-		});
-
-		if (e.type === 'contextmenu') {
-			L.DomEvent.preventDefault(e);
-		}
-		if (e.type !== 'mousemove') {
-			L.DomEvent.stopPropagation(e);
-		}
-	}
-});
-
-L.Map.include({
-	_initPathRoot: function () {
-		if (!this._pathRoot) {
-			this._pathRoot = L.Path.prototype._createElement('svg');
-			this._panes.overlayPane.appendChild(this._pathRoot);
-
-			if (this.options.zoomAnimation && L.Browser.any3d) {
-				L.DomUtil.addClass(this._pathRoot, 'leaflet-zoom-animated');
-
-				this.on({
-					'zoomanim': this._animatePathZoom,
-					'zoomend': this._endPathZoom
-				});
-			} else {
-				L.DomUtil.addClass(this._pathRoot, 'leaflet-zoom-hide');
-			}
-
-			this.on('moveend', this._updateSvgViewport);
-			this._updateSvgViewport();
-		}
-	},
-
-	_animatePathZoom: function (e) {
-		var scale = this.getZoomScale(e.zoom),
-		    offset = this._getCenterOffset(e.center)._multiplyBy(-scale)._add(this._pathViewport.min);
-
-		this._pathRoot.style[L.DomUtil.TRANSFORM] =
-		        L.DomUtil.getTranslateString(offset) + ' scale(' + scale + ') ';
-
-		this._pathZooming = true;
-	},
-
-	_endPathZoom: function () {
-		this._pathZooming = false;
-	},
-
-	_updateSvgViewport: function () {
-
-		if (this._pathZooming) {
-			// Do not update SVGs while a zoom animation is going on otherwise the animation will break.
-			// When the zoom animation ends we will be updated again anyway
-			// This fixes the case where you do a momentum move and zoom while the move is still ongoing.
-			return;
-		}
-
-		this._updatePathViewport();
-
-		var vp = this._pathViewport,
-		    min = vp.min,
-		    max = vp.max,
-		    width = max.x - min.x,
-		    height = max.y - min.y,
-		    root = this._pathRoot,
-		    pane = this._panes.overlayPane;
-
-		// Hack to make flicker on drag end on mobile webkit less irritating
-		if (L.Browser.mobileWebkit) {
-			pane.removeChild(root);
-		}
-
-		L.DomUtil.setPosition(root, min);
-		root.setAttribute('width', width);
-		root.setAttribute('height', height);
-		root.setAttribute('viewBox', [min.x, min.y, width, height].join(' '));
-
-		if (L.Browser.mobileWebkit) {
-			pane.appendChild(root);
-		}
-	}
-});
-
-
-/*
- * Popup extension to L.Path (polylines, polygons, circles), adding popup-related methods.
- */
-
-L.Path.include({
-
-	bindPopup: function (content, options) {
-
-		if (content instanceof L.Popup) {
-			this._popup = content;
-		} else {
-			if (!this._popup || options) {
-				this._popup = new L.Popup(options, this);
-			}
-			this._popup.setContent(content);
-		}
-
-		if (!this._popupHandlersAdded) {
-			this
-			    .on('click', this._openPopup, this)
-			    .on('remove', this.closePopup, this);
-
-			this._popupHandlersAdded = true;
-		}
-
-		return this;
-	},
-
-	unbindPopup: function () {
-		if (this._popup) {
-			this._popup = null;
-			this
-			    .off('click', this._openPopup)
-			    .off('remove', this.closePopup);
-
-			this._popupHandlersAdded = false;
-		}
-		return this;
-	},
-
-	openPopup: function (latlng) {
-
-		if (this._popup) {
-			// open the popup from one of the path's points if not specified
-			latlng = latlng || this._latlng ||
-			         this._latlngs[Math.floor(this._latlngs.length / 2)];
-
-			this._openPopup({latlng: latlng});
-		}
-
-		return this;
-	},
-
-	closePopup: function () {
-		if (this._popup) {
-			this._popup._close();
-		}
-		return this;
-	},
-
-	_openPopup: function (e) {
-		this._popup.setLatLng(e.latlng);
-		this._map.openPopup(this._popup);
-	}
-});
-
-
-/*
- * Vector rendering for IE6-8 through VML.
- * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
- */
-
-L.Browser.vml = !L.Browser.svg && (function () {
-	try {
-		var div = document.createElement('div');
-		div.innerHTML = '<v:shape adj="1"/>';
-
-		var shape = div.firstChild;
-		shape.style.behavior = 'url(#default#VML)';
-
-		return shape && (typeof shape.adj === 'object');
-
-	} catch (e) {
-		return false;
-	}
-}());
-
-L.Path = L.Browser.svg || !L.Browser.vml ? L.Path : L.Path.extend({
-	statics: {
-		VML: true,
-		CLIP_PADDING: 0.02
-	},
-
-	_createElement: (function () {
-		try {
-			document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
-			return function (name) {
-				return document.createElement('<lvml:' + name + ' class="lvml">');
-			};
-		} catch (e) {
-			return function (name) {
-				return document.createElement(
-				        '<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
-			};
-		}
-	}()),
-
-	_initPath: function () {
-		var container = this._container = this._createElement('shape');
-
-		L.DomUtil.addClass(container, 'leaflet-vml-shape' +
-			(this.options.className ? ' ' + this.options.className : ''));
-
-		if (this.options.clickable) {
-			L.DomUtil.addClass(container, 'leaflet-clickable');
-		}
-
-		container.coordsize = '1 1';
-
-		this._path = this._createElement('path');
-		container.appendChild(this._path);
-
-		this._map._pathRoot.appendChild(container);
-	},
-
-	_initStyle: function () {
-		this._updateStyle();
-	},
-
-	_updateStyle: function () {
-		var stroke = this._stroke,
-		    fill = this._fill,
-		    options = this.options,
-		    container = this._container;
-
-		container.stroked = options.stroke;
-		container.filled = options.fill;
-
-		if (options.stroke) {
-			if (!stroke) {
-				stroke = this._stroke = this._createElement('stroke');
-				stroke.endcap = 'round';
-				container.appendChild(stroke);
-			}
-			stroke.weight = options.weight + 'px';
-			stroke.color = options.color;
-			stroke.opacity = options.opacity;
-
-			if (options.dashArray) {
-				stroke.dashStyle = L.Util.isArray(options.dashArray) ?
-				    options.dashArray.join(' ') :
-				    options.dashArray.replace(/( *, *)/g, ' ');
-			} else {
-				stroke.dashStyle = '';
-			}
-			if (options.lineCap) {
-				stroke.endcap = options.lineCap.replace('butt', 'flat');
-			}
-			if (options.lineJoin) {
-				stroke.joinstyle = options.lineJoin;
-			}
-
-		} else if (stroke) {
-			container.removeChild(stroke);
-			this._stroke = null;
-		}
-
-		if (options.fill) {
-			if (!fill) {
-				fill = this._fill = this._createElement('fill');
-				container.appendChild(fill);
-			}
-			fill.color = options.fillColor || options.color;
-			fill.opacity = options.fillOpacity;
-
-		} else if (fill) {
-			container.removeChild(fill);
-			this._fill = null;
-		}
-	},
-
-	_updatePath: function () {
-		var style = this._container.style;
-
-		style.display = 'none';
-		this._path.v = this.getPathString() + ' '; // the space fixes IE empty path string bug
-		style.display = '';
-	}
-});
-
-L.Map.include(L.Browser.svg || !L.Browser.vml ? {} : {
-	_initPathRoot: function () {
-		if (this._pathRoot) { return; }
-
-		var root = this._pathRoot = document.createElement('div');
-		root.className = 'leaflet-vml-container';
-		this._panes.overlayPane.appendChild(root);
-
-		this.on('moveend', this._updatePathViewport);
-		this._updatePathViewport();
-	}
-});
-
-
-/*
- * Vector rendering for all browsers that support canvas.
- */
-
-L.Browser.canvas = (function () {
-	return !!document.createElement('canvas').getContext;
-}());
-
-L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : L.Path.extend({
-	statics: {
-		//CLIP_PADDING: 0.02, // not sure if there's a need to set it to a small value
-		CANVAS: true,
-		SVG: false
-	},
-
-	redraw: function () {
-		if (this._map) {
-			this.projectLatlngs();
-			this._requestUpdate();
-		}
-		return this;
-	},
-
-	setStyle: function (style) {
-		L.setOptions(this, style);
-
-		if (this._map) {
-			this._updateStyle();
-			this._requestUpdate();
-		}
-		return this;
-	},
-
-	onRemove: function (map) {
-		map
-		    .off('viewreset', this.projectLatlngs, this)
-		    .off('moveend', this._updatePath, this);
-
-		if (this.options.clickable) {
-			this._map.off('click', this._onClick, this);
-			this._map.off('mousemove', this._onMouseMove, this);
-		}
-
-		this._requestUpdate();
-		
-		this.fire('remove');
-		this._map = null;
-	},
-
-	_requestUpdate: function () {
-		if (this._map && !L.Path._updateRequest) {
-			L.Path._updateRequest = L.Util.requestAnimFrame(this._fireMapMoveEnd, this._map);
-		}
-	},
-
-	_fireMapMoveEnd: function () {
-		L.Path._updateRequest = null;
-		this.fire('moveend');
-	},
-
-	_initElements: function () {
-		this._map._initPathRoot();
-		this._ctx = this._map._canvasCtx;
-	},
-
-	_updateStyle: function () {
-		var options = this.options;
-
-		if (options.stroke) {
-			this._ctx.lineWidth = options.weight;
-			this._ctx.strokeStyle = options.color;
-		}
-		if (options.fill) {
-			this._ctx.fillStyle = options.fillColor || options.color;
-		}
-
-		if (options.lineCap) {
-			this._ctx.lineCap = options.lineCap;
-		}
-		if (options.lineJoin) {
-			this._ctx.lineJoin = options.lineJoin;
-		}
-	},
-
-	_drawPath: function () {
-		var i, j, len, len2, point, drawMethod;
-
-		this._ctx.beginPath();
-
-		for (i = 0, len = this._parts.length; i < len; i++) {
-			for (j = 0, len2 = this._parts[i].length; j < len2; j++) {
-				point = this._parts[i][j];
-				drawMethod = (j === 0 ? 'move' : 'line') + 'To';
-
-				this._ctx[drawMethod](point.x, point.y);
-			}
-			// TODO refactor ugly hack
-			if (this instanceof L.Polygon) {
-				this._ctx.closePath();
-			}
-		}
-	},
-
-	_checkIfEmpty: function () {
-		return !this._parts.length;
-	},
-
-	_updatePath: function () {
-		if (this._checkIfEmpty()) { return; }
-
-		var ctx = this._ctx,
-		    options = this.options;
-
-		this._drawPath();
-		ctx.save();
-		this._updateStyle();
-
-		if (options.fill) {
-			ctx.globalAlpha = options.fillOpacity;
-			ctx.fill(options.fillRule || 'evenodd');
-		}
-
-		if (options.stroke) {
-			ctx.globalAlpha = options.opacity;
-			ctx.stroke();
-		}
-
-		ctx.restore();
-
-		// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
-	},
-
-	_initEvents: function () {
-		if (this.options.clickable) {
-			this._map.on('mousemove', this._onMouseMove, this);
-			this._map.on('click dblclick contextmenu', this._fireMouseEvent, this);
-		}
-	},
-
-	_fireMouseEvent: function (e) {
-		if (this._containsPoint(e.layerPoint)) {
-			this.fire(e.type, e);
-		}
-	},
-
-	_onMouseMove: function (e) {
-		if (!this._map || this._map._animatingZoom) { return; }
-
-		// TODO don't do on each move
-		if (this._containsPoint(e.layerPoint)) {
-			this._ctx.canvas.style.cursor = 'pointer';
-			this._mouseInside = true;
-			this.fire('mouseover', e);
-
-		} else if (this._mouseInside) {
-			this._ctx.canvas.style.cursor = '';
-			this._mouseInside = false;
-			this.fire('mouseout', e);
-		}
-	}
-});
-
-L.Map.include((L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? {} : {
-	_initPathRoot: function () {
-		var root = this._pathRoot,
-		    ctx;
-
-		if (!root) {
-			root = this._pathRoot = document.createElement('canvas');
-			root.style.position = 'absolute';
-			ctx = this._canvasCtx = root.getContext('2d');
-
-			ctx.lineCap = 'round';
-			ctx.lineJoin = 'round';
-
-			this._panes.overlayPane.appendChild(root);
-
-			if (this.options.zoomAnimation) {
-				this._pathRoot.className = 'leaflet-zoom-animated';
-				this.on('zoomanim', this._animatePathZoom);
-				this.on('zoomend', this._endPathZoom);
-			}
-			this.on('moveend', this._updateCanvasViewport);
-			this._updateCanvasViewport();
-		}
-	},
-
-	_updateCanvasViewport: function () {
-		// don't redraw while zooming. See _updateSvgViewport for more details
-		if (this._pathZooming) { return; }
-		this._updatePathViewport();
-
-		var vp = this._pathViewport,
-		    min = vp.min,
-		    size = vp.max.subtract(min),
-		    root = this._pathRoot;
-
-		//TODO check if this works properly on mobile webkit
-		L.DomUtil.setPosition(root, min);
-		root.width = size.x;
-		root.height = size.y;
-		root.getContext('2d').translate(-min.x, -min.y);
-	}
-});
-
-
-/*
- * L.LineUtil contains different utility functions for line segments
- * and polylines (clipping, simplification, distances, etc.)
- */
-
-/*jshint bitwise:false */ // allow bitwise operations for this file
-
-L.LineUtil = {
-
-	// Simplify polyline with vertex reduction and Douglas-Peucker simplification.
-	// Improves rendering performance dramatically by lessening the number of points to draw.
-
-	simplify: function (/*Point[]*/ points, /*Number*/ tolerance) {
-		if (!tolerance || !points.length) {
-			return points.slice();
-		}
-
-		var sqTolerance = tolerance * tolerance;
-
-		// stage 1: vertex reduction
-		points = this._reducePoints(points, sqTolerance);
-
-		// stage 2: Douglas-Peucker simplification
-		points = this._simplifyDP(points, sqTolerance);
-
-		return points;
-	},
-
-	// distance from a point to a segment between two points
-	pointToSegmentDistance:  function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
-		return Math.sqrt(this._sqClosestPointOnSegment(p, p1, p2, true));
-	},
-
-	closestPointOnSegment: function (/*Point*/ p, /*Point*/ p1, /*Point*/ p2) {
-		return this._sqClosestPointOnSegment(p, p1, p2);
-	},
-
-	// Douglas-Peucker simplification, see http://en.wikipedia.org/wiki/Douglas-Peucker_algorithm
-	_simplifyDP: function (points, sqTolerance) {
-
-		var len = points.length,
-		    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,
-		    markers = new ArrayConstructor(len);
-
-		markers[0] = markers[len - 1] = 1;
-
-		this._simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
-
-		var i,
-		    newPoints = [];
-
-		for (i = 0; i < len; i++) {
-			if (markers[i]) {
-				newPoints.push(points[i]);
-			}
-		}
-
-		return newPoints;
-	},
-
-	_simplifyDPStep: function (points, markers, sqTolerance, first, last) {
-
-		var maxSqDist = 0,
-		    index, i, sqDist;
-
-		for (i = first + 1; i <= last - 1; i++) {
-			sqDist = this._sqClosestPointOnSegment(points[i], points[first], points[last], true);
-
-			if (sqDist > maxSqDist) {
-				index = i;
-				maxSqDist = sqDist;
-			}
-		}
-
-		if (maxSqDist > sqTolerance) {
-			markers[index] = 1;
-
-			this._simplifyDPStep(points, markers, sqTolerance, first, index);
-			this._simplifyDPStep(points, markers, sqTolerance, index, last);
-		}
-	},
-
-	// reduce points that are too close to each other to a single point
-	_reducePoints: function (points, sqTolerance) {
-		var reducedPoints = [points[0]];
-
-		for (var i = 1, prev = 0, len = points.length; i < len; i++) {
-			if (this._sqDist(points[i], points[prev]) > sqTolerance) {
-				reducedPoints.push(points[i]);
-				prev = i;
-			}
-		}
-		if (prev < len - 1) {
-			reducedPoints.push(points[len - 1]);
-		}
-		return reducedPoints;
-	},
-
-	// Cohen-Sutherland line clipping algorithm.
-	// Used to avoid rendering parts of a polyline that are not currently visible.
-
-	clipSegment: function (a, b, bounds, useLastCode) {
-		var codeA = useLastCode ? this._lastCode : this._getBitCode(a, bounds),
-		    codeB = this._getBitCode(b, bounds),
-
-		    codeOut, p, newCode;
-
-		// save 2nd code to avoid calculating it on the next segment
-		this._lastCode = codeB;
-
-		while (true) {
-			// if a,b is inside the clip window (trivial accept)
-			if (!(codeA | codeB)) {
-				return [a, b];
-			// if a,b is outside the clip window (trivial reject)
-			} else if (codeA & codeB) {
-				return false;
-			// other cases
-			} else {
-				codeOut = codeA || codeB;
-				p = this._getEdgeIntersection(a, b, codeOut, bounds);
-				newCode = this._getBitCode(p, bounds);
-
-				if (codeOut === codeA) {
-					a = p;
-					codeA = newCode;
-				} else {
-					b = p;
-					codeB = newCode;
-				}
-			}
-		}
-	},
-
-	_getEdgeIntersection: function (a, b, code, bounds) {
-		var dx = b.x - a.x,
-		    dy = b.y - a.y,
-		    min = bounds.min,
-		    max = bounds.max;
-
-		if (code & 8) { // top
-			return new L.Point(a.x + dx * (max.y - a.y) / dy, max.y);
-		} else if (code & 4) { // bottom
-			return new L.Point(a.x + dx * (min.y - a.y) / dy, min.y);
-		} else if (code & 2) { // right
-			return new L.Point(max.x, a.y + dy * (max.x - a.x) / dx);
-		} else if (code & 1) { // left
-			return new L.Point(min.x, a.y + dy * (min.x - a.x) / dx);
-		}
-	},
-
-	_getBitCode: function (/*Point*/ p, bounds) {
-		var code = 0;
-
-		if (p.x < bounds.min.x) { // left
-			code |= 1;
-		} else if (p.x > bounds.max.x) { // right
-			code |= 2;
-		}
-		if (p.y < bounds.min.y) { // bottom
-			code |= 4;
-		} else if (p.y > bounds.max.y) { // top
-			code |= 8;
-		}
-
-		return code;
-	},
-
-	// square distance (to avoid unnecessary Math.sqrt calls)
-	_sqDist: function (p1, p2) {
-		var dx = p2.x - p1.x,
-		    dy = p2.y - p1.y;
-		return dx * dx + dy * dy;
-	},
-
-	// return closest point on segment or distance to that point
-	_sqClosestPointOnSegment: function (p, p1, p2, sqDist) {
-		var x = p1.x,
-		    y = p1.y,
-		    dx = p2.x - x,
-		    dy = p2.y - y,
-		    dot = dx * dx + dy * dy,
-		    t;
-
-		if (dot > 0) {
-			t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
-
-			if (t > 1) {
-				x = p2.x;
-				y = p2.y;
-			} else if (t > 0) {
-				x += dx * t;
-				y += dy * t;
-			}
-		}
-
-		dx = p.x - x;
-		dy = p.y - y;
-
-		return sqDist ? dx * dx + dy * dy : new L.Point(x, y);
-	}
-};
-
-
-/*
- * L.Polyline is used to display polylines on a map.
- */
-
-L.Polyline = L.Path.extend({
-	initialize: function (latlngs, options) {
-		L.Path.prototype.initialize.call(this, options);
-
-		this._latlngs = this._convertLatLngs(latlngs);
-	},
-
-	options: {
-		// how much to simplify the polyline on each zoom level
-		// more = better performance and smoother look, less = more accurate
-		smoothFactor: 1.0,
-		noClip: false
-	},
-
-	projectLatlngs: function () {
-		this._originalPoints = [];
-
-		for (var i = 0, len = this._latlngs.length; i < len; i++) {
-			this._originalPoints[i] = this._map.latLngToLayerPoint(this._latlngs[i]);
-		}
-	},
-
-	getPathString: function () {
-		for (var i = 0, len = this._parts.length, str = ''; i < len; i++) {
-			str += this._getPathPartStr(this._parts[i]);
-		}
-		return str;
-	},
-
-	getLatLngs: function () {
-		return this._latlngs;
-	},
-
-	setLatLngs: function (latlngs) {
-		this._latlngs = this._convertLatLngs(latlngs);
-		return this.redraw();
-	},
-
-	addLatLng: function (latlng) {
-		this._latlngs.push(L.latLng(latlng));
-		return this.redraw();
-	},
-
-	spliceLatLngs: function () { // (Number index, Number howMany)
-		var removed = [].splice.apply(this._latlngs, arguments);
-		this._convertLatLngs(this._latlngs, true);
-		this.redraw();
-		return removed;
-	},
-
-	closestLayerPoint: function (p) {
-		var minDistance = Infinity, parts = this._parts, p1, p2, minPoint = null;
-
-		for (var j = 0, jLen = parts.length; j < jLen; j++) {
-			var points = parts[j];
-			for (var i = 1, len = points.length; i < len; i++) {
-				p1 = points[i - 1];
-				p2 = points[i];
-				var sqDist = L.LineUtil._sqClosestPointOnSegment(p, p1, p2, true);
-				if (sqDist < minDistance) {
-					minDistance = sqDist;
-					minPoint = L.LineUtil._sqClosestPointOnSegment(p, p1, p2);
-				}
-			}
-		}
-		if (minPoint) {
-			minPoint.distance = Math.sqrt(minDistance);
-		}
-		return minPoint;
-	},
-
-	getBounds: function () {
-		return new L.LatLngBounds(this.getLatLngs());
-	},
-
-	_convertLatLngs: function (latlngs, overwrite) {
-		var i, len, target = overwrite ? latlngs : [];
-
-		for (i = 0, len = latlngs.length; i < len; i++) {
-			if (L.Util.isArray(latlngs[i]) && typeof latlngs[i][0] !== 'number') {
-				return;
-			}
-			target[i] = L.latLng(latlngs[i]);
-		}
-		return target;
-	},
-
-	_initEvents: function () {
-		L.Path.prototype._initEvents.call(this);
-	},
-
-	_getPathPartStr: function (points) {
-		var round = L.Path.VML;
-
-		for (var j = 0, len2 = points.length, str = '', p; j < len2; j++) {
-			p = points[j];
-			if (round) {
-				p._round();
-			}
-			str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
-		}
-		return str;
-	},
-
-	_clipPoints: function () {
-		var points = this._originalPoints,
-		    len = points.length,
-		    i, k, segment;
-
-		if (this.options.noClip) {
-			this._parts = [points];
-			return;
-		}
-
-		this._parts = [];
-
-		var parts = this._parts,
-		    vp = this._map._pathViewport,
-		    lu = L.LineUtil;
-
-		for (i = 0, k = 0; i < len - 1; i++) {
-			segment = lu.clipSegment(points[i], points[i + 1], vp, i);
-			if (!segment) {
-				continue;
-			}
-
-			parts[k] = parts[k] || [];
-			parts[k].push(segment[0]);
-
-			// if segment goes out of screen, or it's the last one, it's the end of the line part
-			if ((segment[1] !== points[i + 1]) || (i === len - 2)) {
-				parts[k].push(segment[1]);
-				k++;
-			}
-		}
-	},
-
-	// simplify each clipped part of the polyline
-	_simplifyPoints: function () {
-		var parts = this._parts,
-		    lu = L.LineUtil;
-
-		for (var i = 0, len = parts.length; i < len; i++) {
-			parts[i] = lu.simplify(parts[i], this.options.smoothFactor);
-		}
-	},
-
-	_updatePath: function () {
-		if (!this._map) { return; }
-
-		this._clipPoints();
-		this._simplifyPoints();
-
-		L.Path.prototype._updatePath.call(this);
-	}
-});
-
-L.polyline = function (latlngs, options) {
-	return new L.Polyline(latlngs, options);
-};
-
-
-/*
- * L.PolyUtil contains utility functions for polygons (clipping, etc.).
- */
-
-/*jshint bitwise:false */ // allow bitwise operations here
-
-L.PolyUtil = {};
-
-/*
- * Sutherland-Hodgeman polygon clipping algorithm.
- * Used to avoid rendering parts of a polygon that are not currently visible.
- */
-L.PolyUtil.clipPolygon = function (points, bounds) {
-	var clippedPoints,
-	    edges = [1, 4, 2, 8],
-	    i, j, k,
-	    a, b,
-	    len, edge, p,
-	    lu = L.LineUtil;
-
-	for (i = 0, len = points.length; i < len; i++) {
-		points[i]._code = lu._getBitCode(points[i], bounds);
-	}
-
-	// for each edge (left, bottom, right, top)
-	for (k = 0; k < 4; k++) {
-		edge = edges[k];
-		clippedPoints = [];
-
-		for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
-			a = points[i];
-			b = points[j];
-
-			// if a is inside the clip window
-			if (!(a._code & edge)) {
-				// if b is outside the clip window (a->b goes out of screen)
-				if (b._code & edge) {
-					p = lu._getEdgeIntersection(b, a, edge, bounds);
-					p._code = lu._getBitCode(p, bounds);
-					clippedPoints.push(p);
-				}
-				clippedPoints.push(a);
-
-			// else if b is inside the clip window (a->b enters the screen)
-			} else if (!(b._code & edge)) {
-				p = lu._getEdgeIntersection(b, a, edge, bounds);
-				p._code = lu._getBitCode(p, bounds);
-				clippedPoints.push(p);
-			}
-		}
-		points = clippedPoints;
-	}
-
-	return points;
-};
-
-
-/*
- * L.Polygon is used to display polygons on a map.
- */
-
-L.Polygon = L.Polyline.extend({
-	options: {
-		fill: true
-	},
-
-	initialize: function (latlngs, options) {
-		L.Polyline.prototype.initialize.call(this, latlngs, options);
-		this._initWithHoles(latlngs);
-	},
-
-	_initWithHoles: function (latlngs) {
-		var i, len, hole;
-		if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) {
-			this._latlngs = this._convertLatLngs(latlngs[0]);
-			this._holes = latlngs.slice(1);
-
-			for (i = 0, len = this._holes.length; i < len; i++) {
-				hole = this._holes[i] = this._convertLatLngs(this._holes[i]);
-				if (hole[0].equals(hole[hole.length - 1])) {
-					hole.pop();
-				}
-			}
-		}
-
-		// filter out last point if its equal to the first one
-		latlngs = this._latlngs;
-
-		if (latlngs.length >= 2 && latlngs[0].equals(latlngs[latlngs.length - 1])) {
-			latlngs.pop();
-		}
-	},
-
-	projectLatlngs: function () {
-		L.Polyline.prototype.projectLatlngs.call(this);
-
-		// project polygon holes points
-		// TODO move this logic to Polyline to get rid of duplication
-		this._holePoints = [];
-
-		if (!this._holes) { return; }
-
-		var i, j, len, len2;
-
-		for (i = 0, len = this._holes.length; i < len; i++) {
-			this._holePoints[i] = [];
-
-			for (j = 0, len2 = this._holes[i].length; j < len2; j++) {
-				this._holePoints[i][j] = this._map.latLngToLayerPoint(this._holes[i][j]);
-			}
-		}
-	},
-
-	setLatLngs: function (latlngs) {
-		if (latlngs && L.Util.isArray(latlngs[0]) && (typeof latlngs[0][0] !== 'number')) {
-			this._initWithHoles(latlngs);
-			return this.redraw();
-		} else {
-			return L.Polyline.prototype.setLatLngs.call(this, latlngs);
-		}
-	},
-
-	_clipPoints: function () {
-		var points = this._originalPoints,
-		    newParts = [];
-
-		this._parts = [points].concat(this._holePoints);
-
-		if (this.options.noClip) { return; }
-
-		for (var i = 0, len = this._parts.length; i < len; i++) {
-			var clipped = L.PolyUtil.clipPolygon(this._parts[i], this._map._pathViewport);
-			if (clipped.length) {
-				newParts.push(clipped);
-			}
-		}
-
-		this._parts = newParts;
-	},
-
-	_getPathPartStr: function (points) {
-		var str = L.Polyline.prototype._getPathPartStr.call(this, points);
-		return str + (L.Browser.svg ? 'z' : 'x');
-	}
-});
-
-L.polygon = function (latlngs, options) {
-	return new L.Polygon(latlngs, options);
-};
-
-
-/*
- * Contains L.MultiPolyline and L.MultiPolygon layers.
- */
-
-(function () {
-	function createMulti(Klass) {
-
-		return L.FeatureGroup.extend({
-
-			initialize: function (latlngs, options) {
-				this._layers = {};
-				this._options = options;
-				this.setLatLngs(latlngs);
-			},
-
-			setLatLngs: function (latlngs) {
-				var i = 0,
-				    len = latlngs.length;
-
-				this.eachLayer(function (layer) {
-					if (i < len) {
-						layer.setLatLngs(latlngs[i++]);
-					} else {
-						this.removeLayer(layer);
-					}
-				}, this);
-
-				while (i < len) {
-					this.addLayer(new Klass(latlngs[i++], this._options));
-				}
-
-				return this;
-			},
-
-			getLatLngs: function () {
-				var latlngs = [];
-
-				this.eachLayer(function (layer) {
-					latlngs.push(layer.getLatLngs());
-				});
-
-				return latlngs;
-			}
-		});
-	}
-
-	L.MultiPolyline = createMulti(L.Polyline);
-	L.MultiPolygon = createMulti(L.Polygon);
-
-	L.multiPolyline = function (latlngs, options) {
-		return new L.MultiPolyline(latlngs, options);
-	};
-
-	L.multiPolygon = function (latlngs, options) {
-		return new L.MultiPolygon(latlngs, options);
-	};
-}());
-
-
-/*
- * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.
- */
-
-L.Rectangle = L.Polygon.extend({
-	initialize: function (latLngBounds, options) {
-		L.Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
-	},
-
-	setBounds: function (latLngBounds) {
-		this.setLatLngs(this._boundsToLatLngs(latLngBounds));
-	},
-
-	_boundsToLatLngs: function (latLngBounds) {
-		latLngBounds = L.latLngBounds(latLngBounds);
-		return [
-			latLngBounds.getSouthWest(),
-			latLngBounds.getNorthWest(),
-			latLngBounds.getNorthEast(),
-			latLngBounds.getSouthEast()
-		];
-	}
-});
-
-L.rectangle = function (latLngBounds, options) {
-	return new L.Rectangle(latLngBounds, options);
-};
-
-
-/*
- * L.Circle is a circle overlay (with a certain radius in meters).
- */
-
-L.Circle = L.Path.extend({
-	initialize: function (latlng, radius, options) {
-		L.Path.prototype.initialize.call(this, options);
-
-		this._latlng = L.latLng(latlng);
-		this._mRadius = radius;
-	},
-
-	options: {
-		fill: true
-	},
-
-	setLatLng: function (latlng) {
-		this._latlng = L.latLng(latlng);
-		return this.redraw();
-	},
-
-	setRadius: function (radius) {
-		this._mRadius = radius;
-		return this.redraw();
-	},
-
-	projectLatlngs: function () {
-		var lngRadius = this._getLngRadius(),
-		    latlng = this._latlng,
-		    pointLeft = this._map.latLngToLayerPoint([latlng.lat, latlng.lng - lngRadius]);
-
-		this._point = this._map.latLngToLayerPoint(latlng);
-		this._radius = Math.max(this._point.x - pointLeft.x, 1);
-	},
-
-	getBounds: function () {
-		var lngRadius = this._getLngRadius(),
-		    latRadius = (this._mRadius / 40075017) * 360,
-		    latlng = this._latlng;
-
-		return new L.LatLngBounds(
-		        [latlng.lat - latRadius, latlng.lng - lngRadius],
-		        [latlng.lat + latRadius, latlng.lng + lngRadius]);
-	},
-
-	getLatLng: function () {
-		return this._latlng;
-	},
-
-	getPathString: function () {
-		var p = this._point,
-		    r = this._radius;
-
-		if (this._checkIfEmpty()) {
-			return '';
-		}
-
-		if (L.Browser.svg) {
-			return 'M' + p.x + ',' + (p.y - r) +
-			       'A' + r + ',' + r + ',0,1,1,' +
-			       (p.x - 0.1) + ',' + (p.y - r) + ' z';
-		} else {
-			p._round();
-			r = Math.round(r);
-			return 'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r + ' 0,' + (65535 * 360);
-		}
-	},
-
-	getRadius: function () {
-		return this._mRadius;
-	},
-
-	// TODO Earth hardcoded, move into projection code!
-
-	_getLatRadius: function () {
-		return (this._mRadius / 40075017) * 360;
-	},
-
-	_getLngRadius: function () {
-		return this._getLatRadius() / Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
-	},
-
-	_checkIfEmpty: function () {
-		if (!this._map) {
-			return false;
-		}
-		var vp = this._map._pathViewport,
-		    r = this._radius,
-		    p = this._point;
-
-		return p.x - r > vp.max.x || p.y - r > vp.max.y ||
-		       p.x + r < vp.min.x || p.y + r < vp.min.y;
-	}
-});
-
-L.circle = function (latlng, radius, options) {
-	return new L.Circle(latlng, radius, options);
-};
-
-
-/*
- * L.CircleMarker is a circle overlay with a permanent pixel radius.
- */
-
-L.CircleMarker = L.Circle.extend({
-	options: {
-		radius: 10,
-		weight: 2
-	},
-
-	initialize: function (latlng, options) {
-		L.Circle.prototype.initialize.call(this, latlng, null, options);
-		this._radius = this.options.radius;
-	},
-
-	projectLatlngs: function () {
-		this._point = this._map.latLngToLayerPoint(this._latlng);
-	},
-
-	_updateStyle : function () {
-		L.Circle.prototype._updateStyle.call(this);
-		this.setRadius(this.options.radius);
-	},
-
-	setLatLng: function (latlng) {
-		L.Circle.prototype.setLatLng.call(this, latlng);
-		if (this._popup && this._popup._isOpen) {
-			this._popup.setLatLng(latlng);
-		}
-		return this;
-	},
-
-	setRadius: function (radius) {
-		this.options.radius = this._radius = radius;
-		return this.redraw();
-	},
-
-	getRadius: function () {
-		return this._radius;
-	}
-});
-
-L.circleMarker = function (latlng, options) {
-	return new L.CircleMarker(latlng, options);
-};
-
-
-/*
- * Extends L.Polyline to be able to manually detect clicks on Canvas-rendered polylines.
- */
-
-L.Polyline.include(!L.Path.CANVAS ? {} : {
-	_containsPoint: function (p, closed) {
-		var i, j, k, len, len2, dist, part,
-		    w = this.options.weight / 2;
-
-		if (L.Browser.touch) {
-			w += 10; // polyline click tolerance on touch devices
-		}
-
-		for (i = 0, len = this._parts.length; i < len; i++) {
-			part = this._parts[i];
-			for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
-				if (!closed && (j === 0)) {
-					continue;
-				}
-
-				dist = L.LineUtil.pointToSegmentDistance(p, part[k], part[j]);
-
-				if (dist <= w) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-});
-
-
-/*
- * Extends L.Polygon to be able to manually detect clicks on Canvas-rendered polygons.
- */
-
-L.Polygon.include(!L.Path.CANVAS ? {} : {
-	_containsPoint: function (p) {
-		var inside = false,
-		    part, p1, p2,
-		    i, j, k,
-		    len, len2;
-
-		// TODO optimization: check if within bounds first
-
-		if (L.Polyline.prototype._containsPoint.call(this, p, true)) {
-			// click on polygon border
-			return true;
-		}
-
-		// ray casting algorithm for detecting if point is in polygon
-
-		for (i = 0, len = this._parts.length; i < len; i++) {
-			part = this._parts[i];
-
-			for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
-				p1 = part[j];
-				p2 = part[k];
-
-				if (((p1.y > p.y) !== (p2.y > p.y)) &&
-						(p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
-					inside = !inside;
-				}
-			}
-		}
-
-		return inside;
-	}
-});
-
-
-/*
- * Extends L.Circle with Canvas-specific code.
- */
-
-L.Circle.include(!L.Path.CANVAS ? {} : {
-	_drawPath: function () {
-		var p = this._point;
-		this._ctx.beginPath();
-		this._ctx.arc(p.x, p.y, this._radius, 0, Math.PI * 2, false);
-	},
-
-	_containsPoint: function (p) {
-		var center = this._point,
-		    w2 = this.options.stroke ? this.options.weight / 2 : 0;
-
-		return (p.distanceTo(center) <= this._radius + w2);
-	}
-});
-
-
-/*
- * CircleMarker canvas specific drawing parts.
- */
-
-L.CircleMarker.include(!L.Path.CANVAS ? {} : {
-	_updateStyle: function () {
-		L.Path.prototype._updateStyle.call(this);
-	}
-});
-
-
-/*
- * L.GeoJSON turns any GeoJSON data into a Leaflet layer.
- */
-
-L.GeoJSON = L.FeatureGroup.extend({
-
-	initialize: function (geojson, options) {
-		L.setOptions(this, options);
-
-		this._layers = {};
-
-		if (geojson) {
-			this.addData(geojson);
-		}
-	},
-
-	addData: function (geojson) {
-		var features = L.Util.isArray(geojson) ? geojson : geojson.features,
-		    i, len, feature;
-
-		if (features) {
-			for (i = 0, len = features.length; i < len; i++) {
-				// Only add this if geometry or geometries are set and not null
-				feature = features[i];
-				if (feature.geometries || feature.geometry || feature.features || feature.coordinates) {
-					this.addData(features[i]);
-				}
-			}
-			return this;
-		}
-
-		var options = this.options;
-
-		if (options.filter && !options.filter(geojson)) { return; }
-
-		var layer = L.GeoJSON.geometryToLayer(geojson, options.pointToLayer, options.coordsToLatLng, options);
-		layer.feature = L.GeoJSON.asFeature(geojson);
-
-		layer.defaultOptions = layer.options;
-		this.resetStyle(layer);
-
-		if (options.onEachFeature) {
-			options.onEachFeature(geojson, layer);
-		}
-
-		return this.addLayer(layer);
-	},
-
-	resetStyle: function (layer) {
-		var style = this.options.style;
-		if (style) {
-			// reset any custom styles
-			L.Util.extend(layer.options, layer.defaultOptions);
-
-			this._setLayerStyle(layer, style);
-		}
-	},
-
-	setStyle: function (style) {
-		this.eachLayer(function (layer) {
-			this._setLayerStyle(layer, style);
-		}, this);
-	},
-
-	_setLayerStyle: function (layer, style) {
-		if (typeof style === 'function') {
-			style = style(layer.feature);
-		}
-		if (layer.setStyle) {
-			layer.setStyle(style);
-		}
-	}
-});
-
-L.extend(L.GeoJSON, {
-	geometryToLayer: function (geojson, pointToLayer, coordsToLatLng, vectorOptions) {
-		var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
-		    coords = geometry.coordinates,
-		    layers = [],
-		    latlng, latlngs, i, len;
-
-		coordsToLatLng = coordsToLatLng || this.coordsToLatLng;
-
-		switch (geometry.type) {
-		case 'Point':
-			latlng = coordsToLatLng(coords);
-			return pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng);
-
-		case 'MultiPoint':
-			for (i = 0, len = coords.length; i < len; i++) {
-				latlng = coordsToLatLng(coords[i]);
-				layers.push(pointToLayer ? pointToLayer(geojson, latlng) : new L.Marker(latlng));
-			}
-			return new L.FeatureGroup(layers);
-
-		case 'LineString':
-			latlngs = this.coordsToLatLngs(coords, 0, coordsToLatLng);
-			return new L.Polyline(latlngs, vectorOptions);
-
-		case 'Polygon':
-			if (coords.length === 2 && !coords[1].length) {
-				throw new Error('Invalid GeoJSON object.');
-			}
-			latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng);
-			return new L.Polygon(latlngs, vectorOptions);
-
-		case 'MultiLineString':
-			latlngs = this.coordsToLatLngs(coords, 1, coordsToLatLng);
-			return new L.MultiPolyline(latlngs, vectorOptions);
-
-		case 'MultiPolygon':
-			latlngs = this.coordsToLatLngs(coords, 2, coordsToLatLng);
-			return new L.MultiPolygon(latlngs, vectorOptions);
-
-		case 'GeometryCollection':
-			for (i = 0, len = geometry.geometries.length; i < len; i++) {
-
-				layers.push(this.geometryToLayer({
-					geometry: geometry.geometries[i],
-					type: 'Feature',
-					properties: geojson.properties
-				}, pointToLayer, coordsToLatLng, vectorOptions));
-			}
-			return new L.FeatureGroup(layers);
-
-		default:
-			throw new Error('Invalid GeoJSON object.');
-		}
-	},
-
-	coordsToLatLng: function (coords) { // (Array[, Boolean]) -> LatLng
-		return new L.LatLng(coords[1], coords[0], coords[2]);
-	},
-
-	coordsToLatLngs: function (coords, levelsDeep, coordsToLatLng) { // (Array[, Number, Function]) -> Array
-		var latlng, i, len,
-		    latlngs = [];
-
-		for (i = 0, len = coords.length; i < len; i++) {
-			latlng = levelsDeep ?
-			        this.coordsToLatLngs(coords[i], levelsDeep - 1, coordsToLatLng) :
-			        (coordsToLatLng || this.coordsToLatLng)(coords[i]);
-
-			latlngs.push(latlng);
-		}
-
-		return latlngs;
-	},
-
-	latLngToCoords: function (latlng) {
-		var coords = [latlng.lng, latlng.lat];
-
-		if (latlng.alt !== undefined) {
-			coords.push(latlng.alt);
-		}
-		return coords;
-	},
-
-	latLngsToCoords: function (latLngs) {
-		var coords = [];
-
-		for (var i = 0, len = latLngs.length; i < len; i++) {
-			coords.push(L.GeoJSON.latLngToCoords(latLngs[i]));
-		}
-
-		return coords;
-	},
-
-	getFeature: function (layer, newGeometry) {
-		return layer.feature ? L.extend({}, layer.feature, {geometry: newGeometry}) : L.GeoJSON.asFeature(newGeometry);
-	},
-
-	asFeature: function (geoJSON) {
-		if (geoJSON.type === 'Feature') {
-			return geoJSON;
-		}
-
-		return {
-			type: 'Feature',
-			properties: {},
-			geometry: geoJSON
-		};
-	}
-});
-
-var PointToGeoJSON = {
-	toGeoJSON: function () {
-		return L.GeoJSON.getFeature(this, {
-			type: 'Point',
-			coordinates: L.GeoJSON.latLngToCoords(this.getLatLng())
-		});
-	}
-};
-
-L.Marker.include(PointToGeoJSON);
-L.Circle.include(PointToGeoJSON);
-L.CircleMarker.include(PointToGeoJSON);
-
-L.Polyline.include({
-	toGeoJSON: function () {
-		return L.GeoJSON.getFeature(this, {
-			type: 'LineString',
-			coordinates: L.GeoJSON.latLngsToCoords(this.getLatLngs())
-		});
-	}
-});
-
-L.Polygon.include({
-	toGeoJSON: function () {
-		var coords = [L.GeoJSON.latLngsToCoords(this.getLatLngs())],
-		    i, len, hole;
-
-		coords[0].push(coords[0][0]);
-
-		if (this._holes) {
-			for (i = 0, len = this._holes.length; i < len; i++) {
-				hole = L.GeoJSON.latLngsToCoords(this._holes[i]);
-				hole.push(hole[0]);
-				coords.push(hole);
-			}
-		}
-
-		return L.GeoJSON.getFeature(this, {
-			type: 'Polygon',
-			coordinates: coords
-		});
-	}
-});
-
-(function () {
-	function multiToGeoJSON(type) {
-		return function () {
-			var coords = [];
-
-			this.eachLayer(function (layer) {
-				coords.push(layer.toGeoJSON().geometry.coordinates);
-			});
-
-			return L.GeoJSON.getFeature(this, {
-				type: type,
-				coordinates: coords
-			});
-		};
-	}
-
-	L.MultiPolyline.include({toGeoJSON: multiToGeoJSON('MultiLineString')});
-	L.MultiPolygon.include({toGeoJSON: multiToGeoJSON('MultiPolygon')});
-
-	L.LayerGroup.include({
-		toGeoJSON: function () {
-
-			var geometry = this.feature && this.feature.geometry,
-				jsons = [],
-				json;
-
-			if (geometry && geometry.type === 'MultiPoint') {
-				return multiToGeoJSON('MultiPoint').call(this);
-			}
-
-			var isGeometryCollection = geometry && geometry.type === 'GeometryCollection';
-
-			this.eachLayer(function (layer) {
-				if (layer.toGeoJSON) {
-					json = layer.toGeoJSON();
-					jsons.push(isGeometryCollection ? json.geometry : L.GeoJSON.asFeature(json));
-				}
-			});
-
-			if (isGeometryCollection) {
-				return L.GeoJSON.getFeature(this, {
-					geometries: jsons,
-					type: 'GeometryCollection'
-				});
-			}
-
-			return {
-				type: 'FeatureCollection',
-				features: jsons
-			};
-		}
-	});
-}());
-
-L.geoJson = function (geojson, options) {
-	return new L.GeoJSON(geojson, options);
-};
-
-
-/*
- * L.DomEvent contains functions for working with DOM events.
- */
-
-L.DomEvent = {
-	/* inspired by John Resig, Dean Edwards and YUI addEvent implementations */
-	addListener: function (obj, type, fn, context) { // (HTMLElement, String, Function[, Object])
-
-		var id = L.stamp(fn),
-		    key = '_leaflet_' + type + id,
-		    handler, originalHandler, newType;
-
-		if (obj[key]) { return this; }
-
-		handler = function (e) {
-			return fn.call(context || obj, e || L.DomEvent._getEvent());
-		};
-
-		if (L.Browser.pointer && type.indexOf('touch') === 0) {
-			return this.addPointerListener(obj, type, handler, id);
-		}
-		if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
-			this.addDoubleTapListener(obj, handler, id);
-		}
-
-		if ('addEventListener' in obj) {
-
-			if (type === 'mousewheel') {
-				obj.addEventListener('DOMMouseScroll', handler, false);
-				obj.addEventListener(type, handler, false);
-
-			} else if ((type === 'mouseenter') || (type === 'mouseleave')) {
-
-				originalHandler = handler;
-				newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
-
-				handler = function (e) {
-					if (!L.DomEvent._checkMouse(obj, e)) { return; }
-					return originalHandler(e);
-				};
-
-				obj.addEventListener(newType, handler, false);
-
-			} else if (type === 'click' && L.Browser.android) {
-				originalHandler = handler;
-				handler = function (e) {
-					return L.DomEvent._filterClick(e, originalHandler);
-				};
-
-				obj.addEventListener(type, handler, false);
-			} else {
-				obj.addEventListener(type, handler, false);
-			}
-
-		} else if ('attachEvent' in obj) {
-			obj.attachEvent('on' + type, handler);
-		}
-
-		obj[key] = handler;
-
-		return this;
-	},
-
-	removeListener: function (obj, type, fn) {  // (HTMLElement, String, Function)
-
-		var id = L.stamp(fn),
-		    key = '_leaflet_' + type + id,
-		    handler = obj[key];
-
-		if (!handler) { return this; }
-
-		if (L.Browser.pointer && type.indexOf('touch') === 0) {
-			this.removePointerListener(obj, type, id);
-		} else if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
-			this.removeDoubleTapListener(obj, id);
-
-		} else if ('removeEventListener' in obj) {
-
-			if (type === 'mousewheel') {
-				obj.removeEventListener('DOMMouseScroll', handler, false);
-				obj.removeEventListener(type, handler, false);
-
-			} else if ((type === 'mouseenter') || (type === 'mouseleave')) {
-				obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
-			} else {
-				obj.removeEventListener(type, handler, false);
-			}
-		} else if ('detachEvent' in obj) {
-			obj.detachEvent('on' + type, handler);
-		}
-
-		obj[key] = null;
-
-		return this;
-	},
-
-	stopPropagation: function (e) {
-
-		if (e.stopPropagation) {
-			e.stopPropagation();
-		} else {
-			e.cancelBubble = true;
-		}
-		L.DomEvent._skipped(e);
-
-		return this;
-	},
-
-	disableScrollPropagation: function (el) {
-		var stop = L.DomEvent.stopPropagation;
-
-		return L.DomEvent
-			.on(el, 'mousewheel', stop)
-			.on(el, 'MozMousePixelScroll', stop);
-	},
-
-	disableClickPropagation: function (el) {
-		var stop = L.DomEvent.stopPropagation;
-
-		for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
-			L.DomEvent.on(el, L.Draggable.START[i], stop);
-		}
-
-		return L.DomEvent
-			.on(el, 'click', L.DomEvent._fakeStop)
-			.on(el, 'dblclick', stop);
-	},
-
-	preventDefault: function (e) {
-
-		if (e.preventDefault) {
-			e.preventDefault();
-		} else {
-			e.returnValue = false;
-		}
-		return this;
-	},
-
-	stop: function (e) {
-		return L.DomEvent
-			.preventDefault(e)
-			.stopPropagation(e);
-	},
-
-	getMousePosition: function (e, container) {
-		if (!container) {
-			return new L.Point(e.clientX, e.clientY);
-		}
-
-		var rect = container.getBoundingClientRect();
-
-		return new L.Point(
-			e.clientX - rect.left - container.clientLeft,
-			e.clientY - rect.top - container.clientTop);
-	},
-
-	getWheelDelta: function (e) {
-
-		var delta = 0;
-
-		if (e.wheelDelta) {
-			delta = e.wheelDelta / 120;
-		}
-		if (e.detail) {
-			delta = -e.detail / 3;
-		}
-		return delta;
-	},
-
-	_skipEvents: {},
-
-	_fakeStop: function (e) {
-		// fakes stopPropagation by setting a special event flag, checked/reset with L.DomEvent._skipped(e)
-		L.DomEvent._skipEvents[e.type] = true;
-	},
-
-	_skipped: function (e) {
-		var skipped = this._skipEvents[e.type];
-		// reset when checking, as it's only used in map container and propagates outside of the map
-		this._skipEvents[e.type] = false;
-		return skipped;
-	},
-
-	// check if element really left/entered the event target (for mouseenter/mouseleave)
-	_checkMouse: function (el, e) {
-
-		var related = e.relatedTarget;
-
-		if (!related) { return true; }
-
-		try {
-			while (related && (related !== el)) {
-				related = related.parentNode;
-			}
-		} catch (err) {
-			return false;
-		}
-		return (related !== el);
-	},
-
-	_getEvent: function () { // evil magic for IE
-		/*jshint noarg:false */
-		var e = window.event;
-		if (!e) {
-			var caller = arguments.callee.caller;
-			while (caller) {
-				e = caller['arguments'][0];
-				if (e && window.Event === e.constructor) {
-					break;
-				}
-				caller = caller.caller;
-			}
-		}
-		return e;
-	},
-
-	// this is a horrible workaround for a bug in Android where a single touch triggers two click events
-	_filterClick: function (e, handler) {
-		var timeStamp = (e.timeStamp || e.originalEvent.timeStamp),
-			elapsed = L.DomEvent._lastClick && (timeStamp - L.DomEvent._lastClick);
-
-		// are they closer together than 500ms yet more than 100ms?
-		// Android typically triggers them ~300ms apart while multiple listeners
-		// on the same event should be triggered far faster;
-		// or check if click is simulated on the element, and if it is, reject any non-simulated events
-
-		if ((elapsed && elapsed > 100 && elapsed < 500) || (e.target._simulatedClick && !e._simulated)) {
-			L.DomEvent.stop(e);
-			return;
-		}
-		L.DomEvent._lastClick = timeStamp;
-
-		return handler(e);
-	}
-};
-
-L.DomEvent.on = L.DomEvent.addListener;
-L.DomEvent.off = L.DomEvent.removeListener;
-
-
-/*
- * L.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
- */
-
-L.Draggable = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	statics: {
-		START: L.Browser.touch ? ['touchstart', 'mousedown'] : ['mousedown'],
-		END: {
-			mousedown: 'mouseup',
-			touchstart: 'touchend',
-			pointerdown: 'touchend',
-			MSPointerDown: 'touchend'
-		},
-		MOVE: {
-			mousedown: 'mousemove',
-			touchstart: 'touchmove',
-			pointerdown: 'touchmove',
-			MSPointerDown: 'touchmove'
-		}
-	},
-
-	initialize: function (element, dragStartTarget) {
-		this._element = element;
-		this._dragStartTarget = dragStartTarget || element;
-	},
-
-	enable: function () {
-		if (this._enabled) { return; }
-
-		for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
-			L.DomEvent.on(this._dragStartTarget, L.Draggable.START[i], this._onDown, this);
-		}
-
-		this._enabled = true;
-	},
-
-	disable: function () {
-		if (!this._enabled) { return; }
-
-		for (var i = L.Draggable.START.length - 1; i >= 0; i--) {
-			L.DomEvent.off(this._dragStartTarget, L.Draggable.START[i], this._onDown, this);
-		}
-
-		this._enabled = false;
-		this._moved = false;
-	},
-
-	_onDown: function (e) {
-		this._moved = false;
-
-		if (e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }
-
-		L.DomEvent.stopPropagation(e);
-
-		if (L.Draggable._disabled) { return; }
-
-		L.DomUtil.disableImageDrag();
-		L.DomUtil.disableTextSelection();
-
-		if (this._moving) { return; }
-
-		var first = e.touches ? e.touches[0] : e;
-
-		this._startPoint = new L.Point(first.clientX, first.clientY);
-		this._startPos = this._newPos = L.DomUtil.getPosition(this._element);
-
-		L.DomEvent
-		    .on(document, L.Draggable.MOVE[e.type], this._onMove, this)
-		    .on(document, L.Draggable.END[e.type], this._onUp, this);
-	},
-
-	_onMove: function (e) {
-		if (e.touches && e.touches.length > 1) {
-			this._moved = true;
-			return;
-		}
-
-		var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
-		    newPoint = new L.Point(first.clientX, first.clientY),
-		    offset = newPoint.subtract(this._startPoint);
-
-		if (!offset.x && !offset.y) { return; }
-		if (L.Browser.touch && Math.abs(offset.x) + Math.abs(offset.y) < 3) { return; }
-
-		L.DomEvent.preventDefault(e);
-
-		if (!this._moved) {
-			this.fire('dragstart');
-
-			this._moved = true;
-			this._startPos = L.DomUtil.getPosition(this._element).subtract(offset);
-
-			L.DomUtil.addClass(document.body, 'leaflet-dragging');
-			this._lastTarget = e.target || e.srcElement;
-			L.DomUtil.addClass(this._lastTarget, 'leaflet-drag-target');
-		}
-
-		this._newPos = this._startPos.add(offset);
-		this._moving = true;
-
-		L.Util.cancelAnimFrame(this._animRequest);
-		this._animRequest = L.Util.requestAnimFrame(this._updatePosition, this, true, this._dragStartTarget);
-	},
-
-	_updatePosition: function () {
-		this.fire('predrag');
-		L.DomUtil.setPosition(this._element, this._newPos);
-		this.fire('drag');
-	},
-
-	_onUp: function () {
-		L.DomUtil.removeClass(document.body, 'leaflet-dragging');
-
-		if (this._lastTarget) {
-			L.DomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');
-			this._lastTarget = null;
-		}
-
-		for (var i in L.Draggable.MOVE) {
-			L.DomEvent
-			    .off(document, L.Draggable.MOVE[i], this._onMove)
-			    .off(document, L.Draggable.END[i], this._onUp);
-		}
-
-		L.DomUtil.enableImageDrag();
-		L.DomUtil.enableTextSelection();
-
-		if (this._moved && this._moving) {
-			// ensure drag is not fired after dragend
-			L.Util.cancelAnimFrame(this._animRequest);
-
-			this.fire('dragend', {
-				distance: this._newPos.distanceTo(this._startPos)
-			});
-		}
-
-		this._moving = false;
-	}
-});
-
-
-/*
-	L.Handler is a base class for handler classes that are used internally to inject
-	interaction features like dragging to classes like Map and Marker.
-*/
-
-L.Handler = L.Class.extend({
-	initialize: function (map) {
-		this._map = map;
-	},
-
-	enable: function () {
-		if (this._enabled) { return; }
-
-		this._enabled = true;
-		this.addHooks();
-	},
-
-	disable: function () {
-		if (!this._enabled) { return; }
-
-		this._enabled = false;
-		this.removeHooks();
-	},
-
-	enabled: function () {
-		return !!this._enabled;
-	}
-});
-
-
-/*
- * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.
- */
-
-L.Map.mergeOptions({
-	dragging: true,
-
-	inertia: !L.Browser.android23,
-	inertiaDeceleration: 3400, // px/s^2
-	inertiaMaxSpeed: Infinity, // px/s
-	inertiaThreshold: L.Browser.touch ? 32 : 18, // ms
-	easeLinearity: 0.25,
-
-	// TODO refactor, move to CRS
-	worldCopyJump: false
-});
-
-L.Map.Drag = L.Handler.extend({
-	addHooks: function () {
-		if (!this._draggable) {
-			var map = this._map;
-
-			this._draggable = new L.Draggable(map._mapPane, map._container);
-
-			this._draggable.on({
-				'dragstart': this._onDragStart,
-				'drag': this._onDrag,
-				'dragend': this._onDragEnd
-			}, this);
-
-			if (map.options.worldCopyJump) {
-				this._draggable.on('predrag', this._onPreDrag, this);
-				map.on('viewreset', this._onViewReset, this);
-
-				map.whenReady(this._onViewReset, this);
-			}
-		}
-		this._draggable.enable();
-	},
-
-	removeHooks: function () {
-		this._draggable.disable();
-	},
-
-	moved: function () {
-		return this._draggable && this._draggable._moved;
-	},
-
-	_onDragStart: function () {
-		var map = this._map;
-
-		if (map._panAnim) {
-			map._panAnim.stop();
-		}
-
-		map
-		    .fire('movestart')
-		    .fire('dragstart');
-
-		if (map.options.inertia) {
-			this._positions = [];
-			this._times = [];
-		}
-	},
-
-	_onDrag: function () {
-		if (this._map.options.inertia) {
-			var time = this._lastTime = +new Date(),
-			    pos = this._lastPos = this._draggable._newPos;
-
-			this._positions.push(pos);
-			this._times.push(time);
-
-			if (time - this._times[0] > 200) {
-				this._positions.shift();
-				this._times.shift();
-			}
-		}
-
-		this._map
-		    .fire('move')
-		    .fire('drag');
-	},
-
-	_onViewReset: function () {
-		// TODO fix hardcoded Earth values
-		var pxCenter = this._map.getSize()._divideBy(2),
-		    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);
-
-		this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;
-		this._worldWidth = this._map.project([0, 180]).x;
-	},
-
-	_onPreDrag: function () {
-		// TODO refactor to be able to adjust map pane position after zoom
-		var worldWidth = this._worldWidth,
-		    halfWidth = Math.round(worldWidth / 2),
-		    dx = this._initialWorldOffset,
-		    x = this._draggable._newPos.x,
-		    newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
-		    newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
-		    newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
-
-		this._draggable._newPos.x = newX;
-	},
-
-	_onDragEnd: function (e) {
-		var map = this._map,
-		    options = map.options,
-		    delay = +new Date() - this._lastTime,
-
-		    noInertia = !options.inertia || delay > options.inertiaThreshold || !this._positions[0];
-
-		map.fire('dragend', e);
-
-		if (noInertia) {
-			map.fire('moveend');
-
-		} else {
-
-			var direction = this._lastPos.subtract(this._positions[0]),
-			    duration = (this._lastTime + delay - this._times[0]) / 1000,
-			    ease = options.easeLinearity,
-
-			    speedVector = direction.multiplyBy(ease / duration),
-			    speed = speedVector.distanceTo([0, 0]),
-
-			    limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),
-			    limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),
-
-			    decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),
-			    offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();
-
-			if (!offset.x || !offset.y) {
-				map.fire('moveend');
-
-			} else {
-				offset = map._limitOffset(offset, map.options.maxBounds);
-
-				L.Util.requestAnimFrame(function () {
-					map.panBy(offset, {
-						duration: decelerationDuration,
-						easeLinearity: ease,
-						noMoveStart: true
-					});
-				});
-			}
-		}
-	}
-});
-
-L.Map.addInitHook('addHandler', 'dragging', L.Map.Drag);
-
-
-/*
- * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.
- */
-
-L.Map.mergeOptions({
-	doubleClickZoom: true
-});
-
-L.Map.DoubleClickZoom = L.Handler.extend({
-	addHooks: function () {
-		this._map.on('dblclick', this._onDoubleClick, this);
-	},
-
-	removeHooks: function () {
-		this._map.off('dblclick', this._onDoubleClick, this);
-	},
-
-	_onDoubleClick: function (e) {
-		var map = this._map,
-		    zoom = map.getZoom() + (e.originalEvent.shiftKey ? -1 : 1);
-
-		if (map.options.doubleClickZoom === 'center') {
-			map.setZoom(zoom);
-		} else {
-			map.setZoomAround(e.containerPoint, zoom);
-		}
-	}
-});
-
-L.Map.addInitHook('addHandler', 'doubleClickZoom', L.Map.DoubleClickZoom);
-
-
-/*
- * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.
- */
-
-L.Map.mergeOptions({
-	scrollWheelZoom: true
-});
-
-L.Map.ScrollWheelZoom = L.Handler.extend({
-	addHooks: function () {
-		L.DomEvent.on(this._map._container, 'mousewheel', this._onWheelScroll, this);
-		L.DomEvent.on(this._map._container, 'MozMousePixelScroll', L.DomEvent.preventDefault);
-		this._delta = 0;
-	},
-
-	removeHooks: function () {
-		L.DomEvent.off(this._map._container, 'mousewheel', this._onWheelScroll);
-		L.DomEvent.off(this._map._container, 'MozMousePixelScroll', L.DomEvent.preventDefault);
-	},
-
-	_onWheelScroll: function (e) {
-		var delta = L.DomEvent.getWheelDelta(e);
-
-		this._delta += delta;
-		this._lastMousePos = this._map.mouseEventToContainerPoint(e);
-
-		if (!this._startTime) {
-			this._startTime = +new Date();
-		}
-
-		var left = Math.max(40 - (+new Date() - this._startTime), 0);
-
-		clearTimeout(this._timer);
-		this._timer = setTimeout(L.bind(this._performZoom, this), left);
-
-		L.DomEvent.preventDefault(e);
-		L.DomEvent.stopPropagation(e);
-	},
-
-	_performZoom: function () {
-		var map = this._map,
-		    delta = this._delta,
-		    zoom = map.getZoom();
-
-		delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);
-		delta = Math.max(Math.min(delta, 4), -4);
-		delta = map._limitZoom(zoom + delta) - zoom;
-
-		this._delta = 0;
-		this._startTime = null;
-
-		if (!delta) { return; }
-
-		if (map.options.scrollWheelZoom === 'center') {
-			map.setZoom(zoom + delta);
-		} else {
-			map.setZoomAround(this._lastMousePos, zoom + delta);
-		}
-	}
-});
-
-L.Map.addInitHook('addHandler', 'scrollWheelZoom', L.Map.ScrollWheelZoom);
-
-
-/*
- * Extends the event handling code with double tap support for mobile browsers.
- */
-
-L.extend(L.DomEvent, {
-
-	_touchstart: L.Browser.msPointer ? 'MSPointerDown' : L.Browser.pointer ? 'pointerdown' : 'touchstart',
-	_touchend: L.Browser.msPointer ? 'MSPointerUp' : L.Browser.pointer ? 'pointerup' : 'touchend',
-
-	// inspired by Zepto touch code by Thomas Fuchs
-	addDoubleTapListener: function (obj, handler, id) {
-		var last,
-		    doubleTap = false,
-		    delay = 250,
-		    touch,
-		    pre = '_leaflet_',
-		    touchstart = this._touchstart,
-		    touchend = this._touchend,
-		    trackedTouches = [];
-
-		function onTouchStart(e) {
-			var count;
-
-			if (L.Browser.pointer) {
-				trackedTouches.push(e.pointerId);
-				count = trackedTouches.length;
-			} else {
-				count = e.touches.length;
-			}
-			if (count > 1) {
-				return;
-			}
-
-			var now = Date.now(),
-				delta = now - (last || now);
-
-			touch = e.touches ? e.touches[0] : e;
-			doubleTap = (delta > 0 && delta <= delay);
-			last = now;
-		}
-
-		function onTouchEnd(e) {
-			if (L.Browser.pointer) {
-				var idx = trackedTouches.indexOf(e.pointerId);
-				if (idx === -1) {
-					return;
-				}
-				trackedTouches.splice(idx, 1);
-			}
-
-			if (doubleTap) {
-				if (L.Browser.pointer) {
-					// work around .type being readonly with MSPointer* events
-					var newTouch = { },
-						prop;
-
-					// jshint forin:false
-					for (var i in touch) {
-						prop = touch[i];
-						if (typeof prop === 'function') {
-							newTouch[i] = prop.bind(touch);
-						} else {
-							newTouch[i] = prop;
-						}
-					}
-					touch = newTouch;
-				}
-				touch.type = 'dblclick';
-				handler(touch);
-				last = null;
-			}
-		}
-		obj[pre + touchstart + id] = onTouchStart;
-		obj[pre + touchend + id] = onTouchEnd;
-
-		// on pointer we need to listen on the document, otherwise a drag starting on the map and moving off screen
-		// will not come through to us, so we will lose track of how many touches are ongoing
-		var endElement = L.Browser.pointer ? document.documentElement : obj;
-
-		obj.addEventListener(touchstart, onTouchStart, false);
-		endElement.addEventListener(touchend, onTouchEnd, false);
-
-		if (L.Browser.pointer) {
-			endElement.addEventListener(L.DomEvent.POINTER_CANCEL, onTouchEnd, false);
-		}
-
-		return this;
-	},
-
-	removeDoubleTapListener: function (obj, id) {
-		var pre = '_leaflet_';
-
-		obj.removeEventListener(this._touchstart, obj[pre + this._touchstart + id], false);
-		(L.Browser.pointer ? document.documentElement : obj).removeEventListener(
-		        this._touchend, obj[pre + this._touchend + id], false);
-
-		if (L.Browser.pointer) {
-			document.documentElement.removeEventListener(L.DomEvent.POINTER_CANCEL, obj[pre + this._touchend + id],
-				false);
-		}
-
-		return this;
-	}
-});
-
-
-/*
- * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.
- */
-
-L.extend(L.DomEvent, {
-
-	//static
-	POINTER_DOWN: L.Browser.msPointer ? 'MSPointerDown' : 'pointerdown',
-	POINTER_MOVE: L.Browser.msPointer ? 'MSPointerMove' : 'pointermove',
-	POINTER_UP: L.Browser.msPointer ? 'MSPointerUp' : 'pointerup',
-	POINTER_CANCEL: L.Browser.msPointer ? 'MSPointerCancel' : 'pointercancel',
-
-	_pointers: [],
-	_pointerDocumentListener: false,
-
-	// Provides a touch events wrapper for (ms)pointer events.
-	// Based on changes by veproza https://github.com/CloudMade/Leaflet/pull/1019
-	//ref http://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890
-
-	addPointerListener: function (obj, type, handler, id) {
-
-		switch (type) {
-		case 'touchstart':
-			return this.addPointerListenerStart(obj, type, handler, id);
-		case 'touchend':
-			return this.addPointerListenerEnd(obj, type, handler, id);
-		case 'touchmove':
-			return this.addPointerListenerMove(obj, type, handler, id);
-		default:
-			throw 'Unknown touch event type';
-		}
-	},
-
-	addPointerListenerStart: function (obj, type, handler, id) {
-		var pre = '_leaflet_',
-		    pointers = this._pointers;
-
-		var cb = function (e) {
-			if (e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {
-				L.DomEvent.preventDefault(e);
-			}
-
-			var alreadyInArray = false;
-			for (var i = 0; i < pointers.length; i++) {
-				if (pointers[i].pointerId === e.pointerId) {
-					alreadyInArray = true;
-					break;
-				}
-			}
-			if (!alreadyInArray) {
-				pointers.push(e);
-			}
-
-			e.touches = pointers.slice();
-			e.changedTouches = [e];
-
-			handler(e);
-		};
-
-		obj[pre + 'touchstart' + id] = cb;
-		obj.addEventListener(this.POINTER_DOWN, cb, false);
-
-		// need to also listen for end events to keep the _pointers list accurate
-		// this needs to be on the body and never go away
-		if (!this._pointerDocumentListener) {
-			var internalCb = function (e) {
-				for (var i = 0; i < pointers.length; i++) {
-					if (pointers[i].pointerId === e.pointerId) {
-						pointers.splice(i, 1);
-						break;
-					}
-				}
-			};
-			//We listen on the documentElement as any drags that end by moving the touch off the screen get fired there
-			document.documentElement.addEventListener(this.POINTER_UP, internalCb, false);
-			document.documentElement.addEventListener(this.POINTER_CANCEL, internalCb, false);
-
-			this._pointerDocumentListener = true;
-		}
-
-		return this;
-	},
-
-	addPointerListenerMove: function (obj, type, handler, id) {
-		var pre = '_leaflet_',
-		    touches = this._pointers;
-
-		function cb(e) {
-
-			// don't fire touch moves when mouse isn't down
-			if ((e.pointerType === e.MSPOINTER_TYPE_MOUSE || e.pointerType === 'mouse') && e.buttons === 0) { return; }
-
-			for (var i = 0; i < touches.length; i++) {
-				if (touches[i].pointerId === e.pointerId) {
-					touches[i] = e;
-					break;
-				}
-			}
-
-			e.touches = touches.slice();
-			e.changedTouches = [e];
-
-			handler(e);
-		}
-
-		obj[pre + 'touchmove' + id] = cb;
-		obj.addEventListener(this.POINTER_MOVE, cb, false);
-
-		return this;
-	},
-
-	addPointerListenerEnd: function (obj, type, handler, id) {
-		var pre = '_leaflet_',
-		    touches = this._pointers;
-
-		var cb = function (e) {
-			for (var i = 0; i < touches.length; i++) {
-				if (touches[i].pointerId === e.pointerId) {
-					touches.splice(i, 1);
-					break;
-				}
-			}
-
-			e.touches = touches.slice();
-			e.changedTouches = [e];
-
-			handler(e);
-		};
-
-		obj[pre + 'touchend' + id] = cb;
-		obj.addEventListener(this.POINTER_UP, cb, false);
-		obj.addEventListener(this.POINTER_CANCEL, cb, false);
-
-		return this;
-	},
-
-	removePointerListener: function (obj, type, id) {
-		var pre = '_leaflet_',
-		    cb = obj[pre + type + id];
-
-		switch (type) {
-		case 'touchstart':
-			obj.removeEventListener(this.POINTER_DOWN, cb, false);
-			break;
-		case 'touchmove':
-			obj.removeEventListener(this.POINTER_MOVE, cb, false);
-			break;
-		case 'touchend':
-			obj.removeEventListener(this.POINTER_UP, cb, false);
-			obj.removeEventListener(this.POINTER_CANCEL, cb, false);
-			break;
-		}
-
-		return this;
-	}
-});
-
-
-/*
- * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.
- */
-
-L.Map.mergeOptions({
-	touchZoom: L.Browser.touch && !L.Browser.android23,
-	bounceAtZoomLimits: true
-});
-
-L.Map.TouchZoom = L.Handler.extend({
-	addHooks: function () {
-		L.DomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);
-	},
-
-	removeHooks: function () {
-		L.DomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);
-	},
-
-	_onTouchStart: function (e) {
-		var map = this._map;
-
-		if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }
-
-		var p1 = map.mouseEventToLayerPoint(e.touches[0]),
-		    p2 = map.mouseEventToLayerPoint(e.touches[1]),
-		    viewCenter = map._getCenterLayerPoint();
-
-		this._startCenter = p1.add(p2)._divideBy(2);
-		this._startDist = p1.distanceTo(p2);
-
-		this._moved = false;
-		this._zooming = true;
-
-		this._centerOffset = viewCenter.subtract(this._startCenter);
-
-		if (map._panAnim) {
-			map._panAnim.stop();
-		}
-
-		L.DomEvent
-		    .on(document, 'touchmove', this._onTouchMove, this)
-		    .on(document, 'touchend', this._onTouchEnd, this);
-
-		L.DomEvent.preventDefault(e);
-	},
-
-	_onTouchMove: function (e) {
-		var map = this._map;
-
-		if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }
-
-		var p1 = map.mouseEventToLayerPoint(e.touches[0]),
-		    p2 = map.mouseEventToLayerPoint(e.touches[1]);
-
-		this._scale = p1.distanceTo(p2) / this._startDist;
-		this._delta = p1._add(p2)._divideBy(2)._subtract(this._startCenter);
-
-		if (this._scale === 1) { return; }
-
-		if (!map.options.bounceAtZoomLimits) {
-			if ((map.getZoom() === map.getMinZoom() && this._scale < 1) ||
-			    (map.getZoom() === map.getMaxZoom() && this._scale > 1)) { return; }
-		}
-
-		if (!this._moved) {
-			L.DomUtil.addClass(map._mapPane, 'leaflet-touching');
-
-			map
-			    .fire('movestart')
-			    .fire('zoomstart');
-
-			this._moved = true;
-		}
-
-		L.Util.cancelAnimFrame(this._animRequest);
-		this._animRequest = L.Util.requestAnimFrame(
-		        this._updateOnMove, this, true, this._map._container);
-
-		L.DomEvent.preventDefault(e);
-	},
-
-	_updateOnMove: function () {
-		var map = this._map,
-		    origin = this._getScaleOrigin(),
-		    center = map.layerPointToLatLng(origin),
-		    zoom = map.getScaleZoom(this._scale);
-
-		map._animateZoom(center, zoom, this._startCenter, this._scale, this._delta, false, true);
-	},
-
-	_onTouchEnd: function () {
-		if (!this._moved || !this._zooming) {
-			this._zooming = false;
-			return;
-		}
-
-		var map = this._map;
-
-		this._zooming = false;
-		L.DomUtil.removeClass(map._mapPane, 'leaflet-touching');
-		L.Util.cancelAnimFrame(this._animRequest);
-
-		L.DomEvent
-		    .off(document, 'touchmove', this._onTouchMove)
-		    .off(document, 'touchend', this._onTouchEnd);
-
-		var origin = this._getScaleOrigin(),
-		    center = map.layerPointToLatLng(origin),
-
-		    oldZoom = map.getZoom(),
-		    floatZoomDelta = map.getScaleZoom(this._scale) - oldZoom,
-		    roundZoomDelta = (floatZoomDelta > 0 ?
-		            Math.ceil(floatZoomDelta) : Math.floor(floatZoomDelta)),
-
-		    zoom = map._limitZoom(oldZoom + roundZoomDelta),
-		    scale = map.getZoomScale(zoom) / this._scale;
-
-		map._animateZoom(center, zoom, origin, scale);
-	},
-
-	_getScaleOrigin: function () {
-		var centerOffset = this._centerOffset.subtract(this._delta).divideBy(this._scale);
-		return this._startCenter.add(centerOffset);
-	}
-});
-
-L.Map.addInitHook('addHandler', 'touchZoom', L.Map.TouchZoom);
-
-
-/*
- * L.Map.Tap is used to enable mobile hacks like quick taps and long hold.
- */
-
-L.Map.mergeOptions({
-	tap: true,
-	tapTolerance: 15
-});
-
-L.Map.Tap = L.Handler.extend({
-	addHooks: function () {
-		L.DomEvent.on(this._map._container, 'touchstart', this._onDown, this);
-	},
-
-	removeHooks: function () {
-		L.DomEvent.off(this._map._container, 'touchstart', this._onDown, this);
-	},
-
-	_onDown: function (e) {
-		if (!e.touches) { return; }
-
-		L.DomEvent.preventDefault(e);
-
-		this._fireClick = true;
-
-		// don't simulate click or track longpress if more than 1 touch
-		if (e.touches.length > 1) {
-			this._fireClick = false;
-			clearTimeout(this._holdTimeout);
-			return;
-		}
-
-		var first = e.touches[0],
-		    el = first.target;
-
-		this._startPos = this._newPos = new L.Point(first.clientX, first.clientY);
-
-		// if touching a link, highlight it
-		if (el.tagName && el.tagName.toLowerCase() === 'a') {
-			L.DomUtil.addClass(el, 'leaflet-active');
-		}
-
-		// simulate long hold but setting a timeout
-		this._holdTimeout = setTimeout(L.bind(function () {
-			if (this._isTapValid()) {
-				this._fireClick = false;
-				this._onUp();
-				this._simulateEvent('contextmenu', first);
-			}
-		}, this), 1000);
-
-		L.DomEvent
-			.on(document, 'touchmove', this._onMove, this)
-			.on(document, 'touchend', this._onUp, this);
-	},
-
-	_onUp: function (e) {
-		clearTimeout(this._holdTimeout);
-
-		L.DomEvent
-			.off(document, 'touchmove', this._onMove, this)
-			.off(document, 'touchend', this._onUp, this);
-
-		if (this._fireClick && e && e.changedTouches) {
-
-			var first = e.changedTouches[0],
-			    el = first.target;
-
-			if (el && el.tagName && el.tagName.toLowerCase() === 'a') {
-				L.DomUtil.removeClass(el, 'leaflet-active');
-			}
-
-			// simulate click if the touch didn't move too much
-			if (this._isTapValid()) {
-				this._simulateEvent('click', first);
-			}
-		}
-	},
-
-	_isTapValid: function () {
-		return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
-	},
-
-	_onMove: function (e) {
-		var first = e.touches[0];
-		this._newPos = new L.Point(first.clientX, first.clientY);
-	},
-
-	_simulateEvent: function (type, e) {
-		var simulatedEvent = document.createEvent('MouseEvents');
-
-		simulatedEvent._simulated = true;
-		e.target._simulatedClick = true;
-
-		simulatedEvent.initMouseEvent(
-		        type, true, true, window, 1,
-		        e.screenX, e.screenY,
-		        e.clientX, e.clientY,
-		        false, false, false, false, 0, null);
-
-		e.target.dispatchEvent(simulatedEvent);
-	}
-});
-
-if (L.Browser.touch && !L.Browser.pointer) {
-	L.Map.addInitHook('addHandler', 'tap', L.Map.Tap);
-}
-
-
-/*
- * L.Handler.ShiftDragZoom is used to add shift-drag zoom interaction to the map
-  * (zoom to a selected bounding box), enabled by default.
- */
-
-L.Map.mergeOptions({
-	boxZoom: true
-});
-
-L.Map.BoxZoom = L.Handler.extend({
-	initialize: function (map) {
-		this._map = map;
-		this._container = map._container;
-		this._pane = map._panes.overlayPane;
-		this._moved = false;
-	},
-
-	addHooks: function () {
-		L.DomEvent.on(this._container, 'mousedown', this._onMouseDown, this);
-	},
-
-	removeHooks: function () {
-		L.DomEvent.off(this._container, 'mousedown', this._onMouseDown);
-		this._moved = false;
-	},
-
-	moved: function () {
-		return this._moved;
-	},
-
-	_onMouseDown: function (e) {
-		this._moved = false;
-
-		if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
-
-		L.DomUtil.disableTextSelection();
-		L.DomUtil.disableImageDrag();
-
-		this._startLayerPoint = this._map.mouseEventToLayerPoint(e);
-
-		L.DomEvent
-		    .on(document, 'mousemove', this._onMouseMove, this)
-		    .on(document, 'mouseup', this._onMouseUp, this)
-		    .on(document, 'keydown', this._onKeyDown, this);
-	},
-
-	_onMouseMove: function (e) {
-		if (!this._moved) {
-			this._box = L.DomUtil.create('div', 'leaflet-zoom-box', this._pane);
-			L.DomUtil.setPosition(this._box, this._startLayerPoint);
-
-			//TODO refactor: move cursor to styles
-			this._container.style.cursor = 'crosshair';
-			this._map.fire('boxzoomstart');
-		}
-
-		var startPoint = this._startLayerPoint,
-		    box = this._box,
-
-		    layerPoint = this._map.mouseEventToLayerPoint(e),
-		    offset = layerPoint.subtract(startPoint),
-
-		    newPos = new L.Point(
-		        Math.min(layerPoint.x, startPoint.x),
-		        Math.min(layerPoint.y, startPoint.y));
-
-		L.DomUtil.setPosition(box, newPos);
-
-		this._moved = true;
-
-		// TODO refactor: remove hardcoded 4 pixels
-		box.style.width  = (Math.max(0, Math.abs(offset.x) - 4)) + 'px';
-		box.style.height = (Math.max(0, Math.abs(offset.y) - 4)) + 'px';
-	},
-
-	_finish: function () {
-		if (this._moved) {
-			this._pane.removeChild(this._box);
-			this._container.style.cursor = '';
-		}
-
-		L.DomUtil.enableTextSelection();
-		L.DomUtil.enableImageDrag();
-
-		L.DomEvent
-		    .off(document, 'mousemove', this._onMouseMove)
-		    .off(document, 'mouseup', this._onMouseUp)
-		    .off(document, 'keydown', this._onKeyDown);
-	},
-
-	_onMouseUp: function (e) {
-
-		this._finish();
-
-		var map = this._map,
-		    layerPoint = map.mouseEventToLayerPoint(e);
-
-		if (this._startLayerPoint.equals(layerPoint)) { return; }
-
-		var bounds = new L.LatLngBounds(
-		        map.layerPointToLatLng(this._startLayerPoint),
-		        map.layerPointToLatLng(layerPoint));
-
-		map.fitBounds(bounds);
-
-		map.fire('boxzoomend', {
-			boxZoomBounds: bounds
-		});
-	},
-
-	_onKeyDown: function (e) {
-		if (e.keyCode === 27) {
-			this._finish();
-		}
-	}
-});
-
-L.Map.addInitHook('addHandler', 'boxZoom', L.Map.BoxZoom);
-
-
-/*
- * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.
- */
-
-L.Map.mergeOptions({
-	keyboard: true,
-	keyboardPanOffset: 80,
-	keyboardZoomOffset: 1
-});
-
-L.Map.Keyboard = L.Handler.extend({
-
-	keyCodes: {
-		left:    [37],
-		right:   [39],
-		down:    [40],
-		up:      [38],
-		zoomIn:  [187, 107, 61, 171],
-		zoomOut: [189, 109, 173]
-	},
-
-	initialize: function (map) {
-		this._map = map;
-
-		this._setPanOffset(map.options.keyboardPanOffset);
-		this._setZoomOffset(map.options.keyboardZoomOffset);
-	},
-
-	addHooks: function () {
-		var container = this._map._container;
-
-		// make the container focusable by tabbing
-		if (container.tabIndex === -1) {
-			container.tabIndex = '0';
-		}
-
-		L.DomEvent
-		    .on(container, 'focus', this._onFocus, this)
-		    .on(container, 'blur', this._onBlur, this)
-		    .on(container, 'mousedown', this._onMouseDown, this);
-
-		this._map
-		    .on('focus', this._addHooks, this)
-		    .on('blur', this._removeHooks, this);
-	},
-
-	removeHooks: function () {
-		this._removeHooks();
-
-		var container = this._map._container;
-
-		L.DomEvent
-		    .off(container, 'focus', this._onFocus, this)
-		    .off(container, 'blur', this._onBlur, this)
-		    .off(container, 'mousedown', this._onMouseDown, this);
-
-		this._map
-		    .off('focus', this._addHooks, this)
-		    .off('blur', this._removeHooks, this);
-	},
-
-	_onMouseDown: function () {
-		if (this._focused) { return; }
-
-		var body = document.body,
-		    docEl = document.documentElement,
-		    top = body.scrollTop || docEl.scrollTop,
-		    left = body.scrollLeft || docEl.scrollLeft;
-
-		this._map._container.focus();
-
-		window.scrollTo(left, top);
-	},
-
-	_onFocus: function () {
-		this._focused = true;
-		this._map.fire('focus');
-	},
-
-	_onBlur: function () {
-		this._focused = false;
-		this._map.fire('blur');
-	},
-
-	_setPanOffset: function (pan) {
-		var keys = this._panKeys = {},
-		    codes = this.keyCodes,
-		    i, len;
-
-		for (i = 0, len = codes.left.length; i < len; i++) {
-			keys[codes.left[i]] = [-1 * pan, 0];
-		}
-		for (i = 0, len = codes.right.length; i < len; i++) {
-			keys[codes.right[i]] = [pan, 0];
-		}
-		for (i = 0, len = codes.down.length; i < len; i++) {
-			keys[codes.down[i]] = [0, pan];
-		}
-		for (i = 0, len = codes.up.length; i < len; i++) {
-			keys[codes.up[i]] = [0, -1 * pan];
-		}
-	},
-
-	_setZoomOffset: function (zoom) {
-		var keys = this._zoomKeys = {},
-		    codes = this.keyCodes,
-		    i, len;
-
-		for (i = 0, len = codes.zoomIn.length; i < len; i++) {
-			keys[codes.zoomIn[i]] = zoom;
-		}
-		for (i = 0, len = codes.zoomOut.length; i < len; i++) {
-			keys[codes.zoomOut[i]] = -zoom;
-		}
-	},
-
-	_addHooks: function () {
-		L.DomEvent.on(document, 'keydown', this._onKeyDown, this);
-	},
-
-	_removeHooks: function () {
-		L.DomEvent.off(document, 'keydown', this._onKeyDown, this);
-	},
-
-	_onKeyDown: function (e) {
-		var key = e.keyCode,
-		    map = this._map;
-
-		if (key in this._panKeys) {
-
-			if (map._panAnim && map._panAnim._inProgress) { return; }
-
-			map.panBy(this._panKeys[key]);
-
-			if (map.options.maxBounds) {
-				map.panInsideBounds(map.options.maxBounds);
-			}
-
-		} else if (key in this._zoomKeys) {
-			map.setZoom(map.getZoom() + this._zoomKeys[key]);
-
-		} else {
-			return;
-		}
-
-		L.DomEvent.stop(e);
-	}
-});
-
-L.Map.addInitHook('addHandler', 'keyboard', L.Map.Keyboard);
-
-
-/*
- * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
- */
-
-L.Handler.MarkerDrag = L.Handler.extend({
-	initialize: function (marker) {
-		this._marker = marker;
-	},
-
-	addHooks: function () {
-		var icon = this._marker._icon;
-		if (!this._draggable) {
-			this._draggable = new L.Draggable(icon, icon);
-		}
-
-		this._draggable
-			.on('dragstart', this._onDragStart, this)
-			.on('drag', this._onDrag, this)
-			.on('dragend', this._onDragEnd, this);
-		this._draggable.enable();
-		L.DomUtil.addClass(this._marker._icon, 'leaflet-marker-draggable');
-	},
-
-	removeHooks: function () {
-		this._draggable
-			.off('dragstart', this._onDragStart, this)
-			.off('drag', this._onDrag, this)
-			.off('dragend', this._onDragEnd, this);
-
-		this._draggable.disable();
-		L.DomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');
-	},
-
-	moved: function () {
-		return this._draggable && this._draggable._moved;
-	},
-
-	_onDragStart: function () {
-		this._marker
-		    .closePopup()
-		    .fire('movestart')
-		    .fire('dragstart');
-	},
-
-	_onDrag: function () {
-		var marker = this._marker,
-		    shadow = marker._shadow,
-		    iconPos = L.DomUtil.getPosition(marker._icon),
-		    latlng = marker._map.layerPointToLatLng(iconPos);
-
-		// update shadow position
-		if (shadow) {
-			L.DomUtil.setPosition(shadow, iconPos);
-		}
-
-		marker._latlng = latlng;
-
-		marker
-		    .fire('move', {latlng: latlng})
-		    .fire('drag');
-	},
-
-	_onDragEnd: function (e) {
-		this._marker
-		    .fire('moveend')
-		    .fire('dragend', e);
-	}
-});
-
-
-/*
- * L.Control is a base class for implementing map controls. Handles positioning.
- * All other controls extend from this class.
- */
-
-L.Control = L.Class.extend({
-	options: {
-		position: 'topright'
-	},
-
-	initialize: function (options) {
-		L.setOptions(this, options);
-	},
-
-	getPosition: function () {
-		return this.options.position;
-	},
-
-	setPosition: function (position) {
-		var map = this._map;
-
-		if (map) {
-			map.removeControl(this);
-		}
-
-		this.options.position = position;
-
-		if (map) {
-			map.addControl(this);
-		}
-
-		return this;
-	},
-
-	getContainer: function () {
-		return this._container;
-	},
-
-	addTo: function (map) {
-		this._map = map;
-
-		var container = this._container = this.onAdd(map),
-		    pos = this.getPosition(),
-		    corner = map._controlCorners[pos];
-
-		L.DomUtil.addClass(container, 'leaflet-control');
-
-		if (pos.indexOf('bottom') !== -1) {
-			corner.insertBefore(container, corner.firstChild);
-		} else {
-			corner.appendChild(container);
-		}
-
-		return this;
-	},
-
-	removeFrom: function (map) {
-		var pos = this.getPosition(),
-		    corner = map._controlCorners[pos];
-
-		corner.removeChild(this._container);
-		this._map = null;
-
-		if (this.onRemove) {
-			this.onRemove(map);
-		}
-
-		return this;
-	},
-
-	_refocusOnMap: function () {
-		if (this._map) {
-			this._map.getContainer().focus();
-		}
-	}
-});
-
-L.control = function (options) {
-	return new L.Control(options);
-};
-
-
-// adds control-related methods to L.Map
-
-L.Map.include({
-	addControl: function (control) {
-		control.addTo(this);
-		return this;
-	},
-
-	removeControl: function (control) {
-		control.removeFrom(this);
-		return this;
-	},
-
-	_initControlPos: function () {
-		var corners = this._controlCorners = {},
-		    l = 'leaflet-',
-		    container = this._controlContainer =
-		            L.DomUtil.create('div', l + 'control-container', this._container);
-
-		function createCorner(vSide, hSide) {
-			var className = l + vSide + ' ' + l + hSide;
-
-			corners[vSide + hSide] = L.DomUtil.create('div', className, container);
-		}
-
-		createCorner('top', 'left');
-		createCorner('top', 'right');
-		createCorner('bottom', 'left');
-		createCorner('bottom', 'right');
-	},
-
-	_clearControlPos: function () {
-		this._container.removeChild(this._controlContainer);
-	}
-});
-
-
-/*
- * L.Control.Zoom is used for the default zoom buttons on the map.
- */
-
-L.Control.Zoom = L.Control.extend({
-	options: {
-		position: 'topleft',
-		zoomInText: '+',
-		zoomInTitle: 'Zoom in',
-		zoomOutText: '-',
-		zoomOutTitle: 'Zoom out'
-	},
-
-	onAdd: function (map) {
-		var zoomName = 'leaflet-control-zoom',
-		    container = L.DomUtil.create('div', zoomName + ' leaflet-bar');
-
-		this._map = map;
-
-		this._zoomInButton  = this._createButton(
-		        this.options.zoomInText, this.options.zoomInTitle,
-		        zoomName + '-in',  container, this._zoomIn,  this);
-		this._zoomOutButton = this._createButton(
-		        this.options.zoomOutText, this.options.zoomOutTitle,
-		        zoomName + '-out', container, this._zoomOut, this);
-
-		this._updateDisabled();
-		map.on('zoomend zoomlevelschange', this._updateDisabled, this);
-
-		return container;
-	},
-
-	onRemove: function (map) {
-		map.off('zoomend zoomlevelschange', this._updateDisabled, this);
-	},
-
-	_zoomIn: function (e) {
-		this._map.zoomIn(e.shiftKey ? 3 : 1);
-	},
-
-	_zoomOut: function (e) {
-		this._map.zoomOut(e.shiftKey ? 3 : 1);
-	},
-
-	_createButton: function (html, title, className, container, fn, context) {
-		var link = L.DomUtil.create('a', className, container);
-		link.innerHTML = html;
-		link.href = '#';
-		link.title = title;
-
-		var stop = L.DomEvent.stopPropagation;
-
-		L.DomEvent
-		    .on(link, 'click', stop)
-		    .on(link, 'mousedown', stop)
-		    .on(link, 'dblclick', stop)
-		    .on(link, 'click', L.DomEvent.preventDefault)
-		    .on(link, 'click', fn, context)
-		    .on(link, 'click', this._refocusOnMap, context);
-
-		return link;
-	},
-
-	_updateDisabled: function () {
-		var map = this._map,
-			className = 'leaflet-disabled';
-
-		L.DomUtil.removeClass(this._zoomInButton, className);
-		L.DomUtil.removeClass(this._zoomOutButton, className);
-
-		if (map._zoom === map.getMinZoom()) {
-			L.DomUtil.addClass(this._zoomOutButton, className);
-		}
-		if (map._zoom === map.getMaxZoom()) {
-			L.DomUtil.addClass(this._zoomInButton, className);
-		}
-	}
-});
-
-L.Map.mergeOptions({
-	zoomControl: true
-});
-
-L.Map.addInitHook(function () {
-	if (this.options.zoomControl) {
-		this.zoomControl = new L.Control.Zoom();
-		this.addControl(this.zoomControl);
-	}
-});
-
-L.control.zoom = function (options) {
-	return new L.Control.Zoom(options);
-};
-
-
-
-/*
- * L.Control.Attribution is used for displaying attribution on the map (added by default).
- */
-
-L.Control.Attribution = L.Control.extend({
-	options: {
-		position: 'bottomright',
-		prefix: '<a href="http://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'
-	},
-
-	initialize: function (options) {
-		L.setOptions(this, options);
-
-		this._attributions = {};
-	},
-
-	onAdd: function (map) {
-		this._container = L.DomUtil.create('div', 'leaflet-control-attribution');
-		L.DomEvent.disableClickPropagation(this._container);
-
-		for (var i in map._layers) {
-			if (map._layers[i].getAttribution) {
-				this.addAttribution(map._layers[i].getAttribution());
-			}
-		}
-		
-		map
-		    .on('layeradd', this._onLayerAdd, this)
-		    .on('layerremove', this._onLayerRemove, this);
-
-		this._update();
-
-		return this._container;
-	},
-
-	onRemove: function (map) {
-		map
-		    .off('layeradd', this._onLayerAdd)
-		    .off('layerremove', this._onLayerRemove);
-
-	},
-
-	setPrefix: function (prefix) {
-		this.options.prefix = prefix;
-		this._update();
-		return this;
-	},
-
-	addAttribution: function (text) {
-		if (!text) { return; }
-
-		if (!this._attributions[text]) {
-			this._attributions[text] = 0;
-		}
-		this._attributions[text]++;
-
-		this._update();
-
-		return this;
-	},
-
-	removeAttribution: function (text) {
-		if (!text) { return; }
-
-		if (this._attributions[text]) {
-			this._attributions[text]--;
-			this._update();
-		}
-
-		return this;
-	},
-
-	_update: function () {
-		if (!this._map) { return; }
-
-		var attribs = [];
-
-		for (var i in this._attributions) {
-			if (this._attributions[i]) {
-				attribs.push(i);
-			}
-		}
-
-		var prefixAndAttribs = [];
-
-		if (this.options.prefix) {
-			prefixAndAttribs.push(this.options.prefix);
-		}
-		if (attribs.length) {
-			prefixAndAttribs.push(attribs.join(', '));
-		}
-
-		this._container.innerHTML = prefixAndAttribs.join(' | ');
-	},
-
-	_onLayerAdd: function (e) {
-		if (e.layer.getAttribution) {
-			this.addAttribution(e.layer.getAttribution());
-		}
-	},
-
-	_onLayerRemove: function (e) {
-		if (e.layer.getAttribution) {
-			this.removeAttribution(e.layer.getAttribution());
-		}
-	}
-});
-
-L.Map.mergeOptions({
-	attributionControl: true
-});
-
-L.Map.addInitHook(function () {
-	if (this.options.attributionControl) {
-		this.attributionControl = (new L.Control.Attribution()).addTo(this);
-	}
-});
-
-L.control.attribution = function (options) {
-	return new L.Control.Attribution(options);
-};
-
-
-/*
- * L.Control.Scale is used for displaying metric/imperial scale on the map.
- */
-
-L.Control.Scale = L.Control.extend({
-	options: {
-		position: 'bottomleft',
-		maxWidth: 100,
-		metric: true,
-		imperial: true,
-		updateWhenIdle: false
-	},
-
-	onAdd: function (map) {
-		this._map = map;
-
-		var className = 'leaflet-control-scale',
-		    container = L.DomUtil.create('div', className),
-		    options = this.options;
-
-		this._addScales(options, className, container);
-
-		map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
-		map.whenReady(this._update, this);
-
-		return container;
-	},
-
-	onRemove: function (map) {
-		map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
-	},
-
-	_addScales: function (options, className, container) {
-		if (options.metric) {
-			this._mScale = L.DomUtil.create('div', className + '-line', container);
-		}
-		if (options.imperial) {
-			this._iScale = L.DomUtil.create('div', className + '-line', container);
-		}
-	},
-
-	_update: function () {
-		var bounds = this._map.getBounds(),
-		    centerLat = bounds.getCenter().lat,
-		    halfWorldMeters = 6378137 * Math.PI * Math.cos(centerLat * Math.PI / 180),
-		    dist = halfWorldMeters * (bounds.getNorthEast().lng - bounds.getSouthWest().lng) / 180,
-
-		    size = this._map.getSize(),
-		    options = this.options,
-		    maxMeters = 0;
-
-		if (size.x > 0) {
-			maxMeters = dist * (options.maxWidth / size.x);
-		}
-
-		this._updateScales(options, maxMeters);
-	},
-
-	_updateScales: function (options, maxMeters) {
-		if (options.metric && maxMeters) {
-			this._updateMetric(maxMeters);
-		}
-
-		if (options.imperial && maxMeters) {
-			this._updateImperial(maxMeters);
-		}
-	},
-
-	_updateMetric: function (maxMeters) {
-		var meters = this._getRoundNum(maxMeters);
-
-		this._mScale.style.width = this._getScaleWidth(meters / maxMeters) + 'px';
-		this._mScale.innerHTML = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';
-	},
-
-	_updateImperial: function (maxMeters) {
-		var maxFeet = maxMeters * 3.2808399,
-		    scale = this._iScale,
-		    maxMiles, miles, feet;
-
-		if (maxFeet > 5280) {
-			maxMiles = maxFeet / 5280;
-			miles = this._getRoundNum(maxMiles);
-
-			scale.style.width = this._getScaleWidth(miles / maxMiles) + 'px';
-			scale.innerHTML = miles + ' mi';
-
-		} else {
-			feet = this._getRoundNum(maxFeet);
-
-			scale.style.width = this._getScaleWidth(feet / maxFeet) + 'px';
-			scale.innerHTML = feet + ' ft';
-		}
-	},
-
-	_getScaleWidth: function (ratio) {
-		return Math.round(this.options.maxWidth * ratio) - 10;
-	},
-
-	_getRoundNum: function (num) {
-		var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),
-		    d = num / pow10;
-
-		d = d >= 10 ? 10 : d >= 5 ? 5 : d >= 3 ? 3 : d >= 2 ? 2 : 1;
-
-		return pow10 * d;
-	}
-});
-
-L.control.scale = function (options) {
-	return new L.Control.Scale(options);
-};
-
-
-/*
- * L.Control.Layers is a control to allow users to switch between different layers on the map.
- */
-
-L.Control.Layers = L.Control.extend({
-	options: {
-		collapsed: true,
-		position: 'topright',
-		autoZIndex: true
-	},
-
-	initialize: function (baseLayers, overlays, options) {
-		L.setOptions(this, options);
-
-		this._layers = {};
-		this._lastZIndex = 0;
-		this._handlingClick = false;
-
-		for (var i in baseLayers) {
-			this._addLayer(baseLayers[i], i);
-		}
-
-		for (i in overlays) {
-			this._addLayer(overlays[i], i, true);
-		}
-	},
-
-	onAdd: function (map) {
-		this._initLayout();
-		this._update();
-
-		map
-		    .on('layeradd', this._onLayerChange, this)
-		    .on('layerremove', this._onLayerChange, this);
-
-		return this._container;
-	},
-
-	onRemove: function (map) {
-		map
-		    .off('layeradd', this._onLayerChange, this)
-		    .off('layerremove', this._onLayerChange, this);
-	},
-
-	addBaseLayer: function (layer, name) {
-		this._addLayer(layer, name);
-		this._update();
-		return this;
-	},
-
-	addOverlay: function (layer, name) {
-		this._addLayer(layer, name, true);
-		this._update();
-		return this;
-	},
-
-	removeLayer: function (layer) {
-		var id = L.stamp(layer);
-		delete this._layers[id];
-		this._update();
-		return this;
-	},
-
-	_initLayout: function () {
-		var className = 'leaflet-control-layers',
-		    container = this._container = L.DomUtil.create('div', className);
-
-		//Makes this work on IE10 Touch devices by stopping it from firing a mouseout event when the touch is released
-		container.setAttribute('aria-haspopup', true);
-
-		if (!L.Browser.touch) {
-			L.DomEvent
-				.disableClickPropagation(container)
-				.disableScrollPropagation(container);
-		} else {
-			L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation);
-		}
-
-		var form = this._form = L.DomUtil.create('form', className + '-list');
-
-		if (this.options.collapsed) {
-			if (!L.Browser.android) {
-				L.DomEvent
-				    .on(container, 'mouseover', this._expand, this)
-				    .on(container, 'mouseout', this._collapse, this);
-			}
-			var link = this._layersLink = L.DomUtil.create('a', className + '-toggle', container);
-			link.href = '#';
-			link.title = 'Layers';
-
-			if (L.Browser.touch) {
-				L.DomEvent
-				    .on(link, 'click', L.DomEvent.stop)
-				    .on(link, 'click', this._expand, this);
-			}
-			else {
-				L.DomEvent.on(link, 'focus', this._expand, this);
-			}
-			//Work around for Firefox android issue https://github.com/Leaflet/Leaflet/issues/2033
-			L.DomEvent.on(form, 'click', function () {
-				setTimeout(L.bind(this._onInputClick, this), 0);
-			}, this);
-
-			this._map.on('click', this._collapse, this);
-			// TODO keyboard accessibility
-		} else {
-			this._expand();
-		}
-
-		this._baseLayersList = L.DomUtil.create('div', className + '-base', form);
-		this._separator = L.DomUtil.create('div', className + '-separator', form);
-		this._overlaysList = L.DomUtil.create('div', className + '-overlays', form);
-
-		container.appendChild(form);
-	},
-
-	_addLayer: function (layer, name, overlay) {
-		var id = L.stamp(layer);
-
-		this._layers[id] = {
-			layer: layer,
-			name: name,
-			overlay: overlay
-		};
-
-		if (this.options.autoZIndex && layer.setZIndex) {
-			this._lastZIndex++;
-			layer.setZIndex(this._lastZIndex);
-		}
-	},
-
-	_update: function () {
-		if (!this._container) {
-			return;
-		}
-
-		this._baseLayersList.innerHTML = '';
-		this._overlaysList.innerHTML = '';
-
-		var baseLayersPresent = false,
-		    overlaysPresent = false,
-		    i, obj;
-
-		for (i in this._layers) {
-			obj = this._layers[i];
-			this._addItem(obj);
-			overlaysPresent = overlaysPresent || obj.overlay;
-			baseLayersPresent = baseLayersPresent || !obj.overlay;
-		}
-
-		this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';
-	},
-
-	_onLayerChange: function (e) {
-		var obj = this._layers[L.stamp(e.layer)];
-
-		if (!obj) { return; }
-
-		if (!this._handlingClick) {
-			this._update();
-		}
-
-		var type = obj.overlay ?
-			(e.type === 'layeradd' ? 'overlayadd' : 'overlayremove') :
-			(e.type === 'layeradd' ? 'baselayerchange' : null);
-
-		if (type) {
-			this._map.fire(type, obj);
-		}
-	},
-
-	// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see http://bit.ly/PqYLBe)
-	_createRadioElement: function (name, checked) {
-
-		var radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' + name + '"';
-		if (checked) {
-			radioHtml += ' checked="checked"';
-		}
-		radioHtml += '/>';
-
-		var radioFragment = document.createElement('div');
-		radioFragment.innerHTML = radioHtml;
-
-		return radioFragment.firstChild;
-	},
-
-	_addItem: function (obj) {
-		var label = document.createElement('label'),
-		    input,
-		    checked = this._map.hasLayer(obj.layer);
-
-		if (obj.overlay) {
-			input = document.createElement('input');
-			input.type = 'checkbox';
-			input.className = 'leaflet-control-layers-selector';
-			input.defaultChecked = checked;
-		} else {
-			input = this._createRadioElement('leaflet-base-layers', checked);
-		}
-
-		input.layerId = L.stamp(obj.layer);
-
-		L.DomEvent.on(input, 'click', this._onInputClick, this);
-
-		var name = document.createElement('span');
-		name.innerHTML = ' ' + obj.name;
-
-		label.appendChild(input);
-		label.appendChild(name);
-
-		var container = obj.overlay ? this._overlaysList : this._baseLayersList;
-		container.appendChild(label);
-
-		return label;
-	},
-
-	_onInputClick: function () {
-		var i, input, obj,
-		    inputs = this._form.getElementsByTagName('input'),
-		    inputsLen = inputs.length;
-
-		this._handlingClick = true;
-
-		for (i = 0; i < inputsLen; i++) {
-			input = inputs[i];
-			obj = this._layers[input.layerId];
-
-			if (input.checked && !this._map.hasLayer(obj.layer)) {
-				this._map.addLayer(obj.layer);
-
-			} else if (!input.checked && this._map.hasLayer(obj.layer)) {
-				this._map.removeLayer(obj.layer);
-			}
-		}
-
-		this._handlingClick = false;
-
-		this._refocusOnMap();
-	},
-
-	_expand: function () {
-		L.DomUtil.addClass(this._container, 'leaflet-control-layers-expanded');
-	},
-
-	_collapse: function () {
-		this._container.className = this._container.className.replace(' leaflet-control-layers-expanded', '');
-	}
-});
-
-L.control.layers = function (baseLayers, overlays, options) {
-	return new L.Control.Layers(baseLayers, overlays, options);
-};
-
-
-/*
- * L.PosAnimation is used by Leaflet internally for pan animations.
- */
-
-L.PosAnimation = L.Class.extend({
-	includes: L.Mixin.Events,
-
-	run: function (el, newPos, duration, easeLinearity) { // (HTMLElement, Point[, Number, Number])
-		this.stop();
-
-		this._el = el;
-		this._inProgress = true;
-		this._newPos = newPos;
-
-		this.fire('start');
-
-		el.style[L.DomUtil.TRANSITION] = 'all ' + (duration || 0.25) +
-		        's cubic-bezier(0,0,' + (easeLinearity || 0.5) + ',1)';
-
-		L.DomEvent.on(el, L.DomUtil.TRANSITION_END, this._onTransitionEnd, this);
-		L.DomUtil.setPosition(el, newPos);
-
-		// toggle reflow, Chrome flickers for some reason if you don't do this
-		L.Util.falseFn(el.offsetWidth);
-
-		// there's no native way to track value updates of transitioned properties, so we imitate this
-		this._stepTimer = setInterval(L.bind(this._onStep, this), 50);
-	},
-
-	stop: function () {
-		if (!this._inProgress) { return; }
-
-		// if we just removed the transition property, the element would jump to its final position,
-		// so we need to make it stay at the current position
-
-		L.DomUtil.setPosition(this._el, this._getPos());
-		this._onTransitionEnd();
-		L.Util.falseFn(this._el.offsetWidth); // force reflow in case we are about to start a new animation
-	},
-
-	_onStep: function () {
-		var stepPos = this._getPos();
-		if (!stepPos) {
-			this._onTransitionEnd();
-			return;
-		}
-		// jshint camelcase: false
-		// make L.DomUtil.getPosition return intermediate position value during animation
-		this._el._leaflet_pos = stepPos;
-
-		this.fire('step');
-	},
-
-	// you can't easily get intermediate values of properties animated with CSS3 Transitions,
-	// we need to parse computed style (in case of transform it returns matrix string)
-
-	_transformRe: /([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,
-
-	_getPos: function () {
-		var left, top, matches,
-		    el = this._el,
-		    style = window.getComputedStyle(el);
-
-		if (L.Browser.any3d) {
-			matches = style[L.DomUtil.TRANSFORM].match(this._transformRe);
-			if (!matches) { return; }
-			left = parseFloat(matches[1]);
-			top  = parseFloat(matches[2]);
-		} else {
-			left = parseFloat(style.left);
-			top  = parseFloat(style.top);
-		}
-
-		return new L.Point(left, top, true);
-	},
-
-	_onTransitionEnd: function () {
-		L.DomEvent.off(this._el, L.DomUtil.TRANSITION_END, this._onTransitionEnd, this);
-
-		if (!this._inProgress) { return; }
-		this._inProgress = false;
-
-		this._el.style[L.DomUtil.TRANSITION] = '';
-
-		// jshint camelcase: false
-		// make sure L.DomUtil.getPosition returns the final position value after animation
-		this._el._leaflet_pos = this._newPos;
-
-		clearInterval(this._stepTimer);
-
-		this.fire('step').fire('end');
-	}
-
-});
-
-
-/*
- * Extends L.Map to handle panning animations.
- */
-
-L.Map.include({
-
-	setView: function (center, zoom, options) {
-
-		zoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);
-		center = this._limitCenter(L.latLng(center), zoom, this.options.maxBounds);
-		options = options || {};
-
-		if (this._panAnim) {
-			this._panAnim.stop();
-		}
-
-		if (this._loaded && !options.reset && options !== true) {
-
-			if (options.animate !== undefined) {
-				options.zoom = L.extend({animate: options.animate}, options.zoom);
-				options.pan = L.extend({animate: options.animate}, options.pan);
-			}
-
-			// try animating pan or zoom
-			var animated = (this._zoom !== zoom) ?
-				this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :
-				this._tryAnimatedPan(center, options.pan);
-
-			if (animated) {
-				// prevent resize handler call, the view will refresh after animation anyway
-				clearTimeout(this._sizeTimer);
-				return this;
-			}
-		}
-
-		// animation didn't start, just reset the map view
-		this._resetView(center, zoom);
-
-		return this;
-	},
-
-	panBy: function (offset, options) {
-		offset = L.point(offset).round();
-		options = options || {};
-
-		if (!offset.x && !offset.y) {
-			return this;
-		}
-
-		if (!this._panAnim) {
-			this._panAnim = new L.PosAnimation();
-
-			this._panAnim.on({
-				'step': this._onPanTransitionStep,
-				'end': this._onPanTransitionEnd
-			}, this);
-		}
-
-		// don't fire movestart if animating inertia
-		if (!options.noMoveStart) {
-			this.fire('movestart');
-		}
-
-		// animate pan unless animate: false specified
-		if (options.animate !== false) {
-			L.DomUtil.addClass(this._mapPane, 'leaflet-pan-anim');
-
-			var newPos = this._getMapPanePos().subtract(offset);
-			this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);
-		} else {
-			this._rawPanBy(offset);
-			this.fire('move').fire('moveend');
-		}
-
-		return this;
-	},
-
-	_onPanTransitionStep: function () {
-		this.fire('move');
-	},
-
-	_onPanTransitionEnd: function () {
-		L.DomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');
-		this.fire('moveend');
-	},
-
-	_tryAnimatedPan: function (center, options) {
-		// difference between the new and current centers in pixels
-		var offset = this._getCenterOffset(center)._floor();
-
-		// don't animate too far unless animate: true specified in options
-		if ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }
-
-		this.panBy(offset, options);
-
-		return true;
-	}
-});
-
-
-/*
- * L.PosAnimation fallback implementation that powers Leaflet pan animations
- * in browsers that don't support CSS3 Transitions.
- */
-
-L.PosAnimation = L.DomUtil.TRANSITION ? L.PosAnimation : L.PosAnimation.extend({
-
-	run: function (el, newPos, duration, easeLinearity) { // (HTMLElement, Point[, Number, Number])
-		this.stop();
-
-		this._el = el;
-		this._inProgress = true;
-		this._duration = duration || 0.25;
-		this._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);
-
-		this._startPos = L.DomUtil.getPosition(el);
-		this._offset = newPos.subtract(this._startPos);
-		this._startTime = +new Date();
-
-		this.fire('start');
-
-		this._animate();
-	},
-
-	stop: function () {
-		if (!this._inProgress) { return; }
-
-		this._step();
-		this._complete();
-	},
-
-	_animate: function () {
-		// animation loop
-		this._animId = L.Util.requestAnimFrame(this._animate, this);
-		this._step();
-	},
-
-	_step: function () {
-		var elapsed = (+new Date()) - this._startTime,
-		    duration = this._duration * 1000;
-
-		if (elapsed < duration) {
-			this._runFrame(this._easeOut(elapsed / duration));
-		} else {
-			this._runFrame(1);
-			this._complete();
-		}
-	},
-
-	_runFrame: function (progress) {
-		var pos = this._startPos.add(this._offset.multiplyBy(progress));
-		L.DomUtil.setPosition(this._el, pos);
-
-		this.fire('step');
-	},
-
-	_complete: function () {
-		L.Util.cancelAnimFrame(this._animId);
-
-		this._inProgress = false;
-		this.fire('end');
-	},
-
-	_easeOut: function (t) {
-		return 1 - Math.pow(1 - t, this._easeOutPower);
-	}
-});
-
-
-/*
- * Extends L.Map to handle zoom animations.
- */
-
-L.Map.mergeOptions({
-	zoomAnimation: true,
-	zoomAnimationThreshold: 4
-});
-
-if (L.DomUtil.TRANSITION) {
-
-	L.Map.addInitHook(function () {
-		// don't animate on browsers without hardware-accelerated transitions or old Android/Opera
-		this._zoomAnimated = this.options.zoomAnimation && L.DomUtil.TRANSITION &&
-				L.Browser.any3d && !L.Browser.android23 && !L.Browser.mobileOpera;
-
-		// zoom transitions run with the same duration for all layers, so if one of transitionend events
-		// happens after starting zoom animation (propagating to the map pane), we know that it ended globally
-		if (this._zoomAnimated) {
-			L.DomEvent.on(this._mapPane, L.DomUtil.TRANSITION_END, this._catchTransitionEnd, this);
-		}
-	});
-}
-
-L.Map.include(!L.DomUtil.TRANSITION ? {} : {
-
-	_catchTransitionEnd: function (e) {
-		if (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {
-			this._onZoomTransitionEnd();
-		}
-	},
-
-	_nothingToAnimate: function () {
-		return !this._container.getElementsByClassName('leaflet-zoom-animated').length;
-	},
-
-	_tryAnimatedZoom: function (center, zoom, options) {
-
-		if (this._animatingZoom) { return true; }
-
-		options = options || {};
-
-		// don't animate if disabled, not supported or zoom difference is too large
-		if (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||
-		        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }
-
-		// offset is the pixel coords of the zoom origin relative to the current center
-		var scale = this.getZoomScale(zoom),
-		    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale),
-			origin = this._getCenterLayerPoint()._add(offset);
-
-		// don't animate if the zoom origin isn't within one screen from the current center, unless forced
-		if (options.animate !== true && !this.getSize().contains(offset)) { return false; }
-
-		this
-		    .fire('movestart')
-		    .fire('zoomstart');
-
-		this._animateZoom(center, zoom, origin, scale, null, true);
-
-		return true;
-	},
-
-	_animateZoom: function (center, zoom, origin, scale, delta, backwards, forTouchZoom) {
-
-		if (!forTouchZoom) {
-			this._animatingZoom = true;
-		}
-
-		// put transform transition on all layers with leaflet-zoom-animated class
-		L.DomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');
-
-		// remember what center/zoom to set after animation
-		this._animateToCenter = center;
-		this._animateToZoom = zoom;
-
-		// disable any dragging during animation
-		if (L.Draggable) {
-			L.Draggable._disabled = true;
-		}
-
-		L.Util.requestAnimFrame(function () {
-			this.fire('zoomanim', {
-				center: center,
-				zoom: zoom,
-				origin: origin,
-				scale: scale,
-				delta: delta,
-				backwards: backwards
-			});
-			// horrible hack to work around a Chrome bug https://github.com/Leaflet/Leaflet/issues/3689
-			setTimeout(L.bind(this._onZoomTransitionEnd, this), 250);
-		}, this);
-	},
-
-	_onZoomTransitionEnd: function () {
-		if (!this._animatingZoom) { return; }
-
-		this._animatingZoom = false;
-
-		L.DomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');
-
-		L.Util.requestAnimFrame(function () {
-			this._resetView(this._animateToCenter, this._animateToZoom, true, true);
-
-			if (L.Draggable) {
-				L.Draggable._disabled = false;
-			}
-		}, this);
-	}
-});
-
-
-/*
-	Zoom animation logic for L.TileLayer.
-*/
-
-L.TileLayer.include({
-	_animateZoom: function (e) {
-		if (!this._animating) {
-			this._animating = true;
-			this._prepareBgBuffer();
-		}
-
-		var bg = this._bgBuffer,
-		    transform = L.DomUtil.TRANSFORM,
-		    initialTransform = e.delta ? L.DomUtil.getTranslateString(e.delta) : bg.style[transform],
-		    scaleStr = L.DomUtil.getScaleString(e.scale, e.origin);
-
-		bg.style[transform] = e.backwards ?
-				scaleStr + ' ' + initialTransform :
-				initialTransform + ' ' + scaleStr;
-	},
-
-	_endZoomAnim: function () {
-		var front = this._tileContainer,
-		    bg = this._bgBuffer;
-
-		front.style.visibility = '';
-		front.parentNode.appendChild(front); // Bring to fore
-
-		// force reflow
-		L.Util.falseFn(bg.offsetWidth);
-
-		var zoom = this._map.getZoom();
-		if (zoom > this.options.maxZoom || zoom < this.options.minZoom) {
-			this._clearBgBuffer();
-		}
-
-		this._animating = false;
-	},
-
-	_clearBgBuffer: function () {
-		var map = this._map;
-
-		if (map && !map._animatingZoom && !map.touchZoom._zooming) {
-			this._bgBuffer.innerHTML = '';
-			this._bgBuffer.style[L.DomUtil.TRANSFORM] = '';
-		}
-	},
-
-	_prepareBgBuffer: function () {
-
-		var front = this._tileContainer,
-		    bg = this._bgBuffer;
-
-		// if foreground layer doesn't have many tiles but bg layer does,
-		// keep the existing bg layer and just zoom it some more
-
-		var bgLoaded = this._getLoadedTilesPercentage(bg),
-		    frontLoaded = this._getLoadedTilesPercentage(front);
-
-		if (bg && bgLoaded > 0.5 && frontLoaded < 0.5) {
-
-			front.style.visibility = 'hidden';
-			this._stopLoadingImages(front);
-			return;
-		}
-
-		// prepare the buffer to become the front tile pane
-		bg.style.visibility = 'hidden';
-		bg.style[L.DomUtil.TRANSFORM] = '';
-
-		// switch out the current layer to be the new bg layer (and vice-versa)
-		this._tileContainer = bg;
-		bg = this._bgBuffer = front;
-
-		this._stopLoadingImages(bg);
-
-		//prevent bg buffer from clearing right after zoom
-		clearTimeout(this._clearBgBufferTimer);
-	},
-
-	_getLoadedTilesPercentage: function (container) {
-		var tiles = container.getElementsByTagName('img'),
-		    i, len, count = 0;
-
-		for (i = 0, len = tiles.length; i < len; i++) {
-			if (tiles[i].complete) {
-				count++;
-			}
-		}
-		return count / len;
-	},
-
-	// stops loading all tiles in the background layer
-	_stopLoadingImages: function (container) {
-		var tiles = Array.prototype.slice.call(container.getElementsByTagName('img')),
-		    i, len, tile;
-
-		for (i = 0, len = tiles.length; i < len; i++) {
-			tile = tiles[i];
-
-			if (!tile.complete) {
-				tile.onload = L.Util.falseFn;
-				tile.onerror = L.Util.falseFn;
-				tile.src = L.Util.emptyImageUrl;
-
-				tile.parentNode.removeChild(tile);
-			}
-		}
-	}
-});
-
-
-/*
- * Provides L.Map with convenient shortcuts for using browser geolocation features.
- */
-
-L.Map.include({
-	_defaultLocateOptions: {
-		watch: false,
-		setView: false,
-		maxZoom: Infinity,
-		timeout: 10000,
-		maximumAge: 0,
-		enableHighAccuracy: false
-	},
-
-	locate: function (/*Object*/ options) {
-
-		options = this._locateOptions = L.extend(this._defaultLocateOptions, options);
-
-		if (!navigator.geolocation) {
-			this._handleGeolocationError({
-				code: 0,
-				message: 'Geolocation not supported.'
-			});
-			return this;
-		}
-
-		var onResponse = L.bind(this._handleGeolocationResponse, this),
-			onError = L.bind(this._handleGeolocationError, this);
-
-		if (options.watch) {
-			this._locationWatchId =
-			        navigator.geolocation.watchPosition(onResponse, onError, options);
-		} else {
-			navigator.geolocation.getCurrentPosition(onResponse, onError, options);
-		}
-		return this;
-	},
-
-	stopLocate: function () {
-		if (navigator.geolocation) {
-			navigator.geolocation.clearWatch(this._locationWatchId);
-		}
-		if (this._locateOptions) {
-			this._locateOptions.setView = false;
-		}
-		return this;
-	},
-
-	_handleGeolocationError: function (error) {
-		var c = error.code,
-		    message = error.message ||
-		            (c === 1 ? 'permission denied' :
-		            (c === 2 ? 'position unavailable' : 'timeout'));
-
-		if (this._locateOptions.setView && !this._loaded) {
-			this.fitWorld();
-		}
-
-		this.fire('locationerror', {
-			code: c,
-			message: 'Geolocation error: ' + message + '.'
-		});
-	},
-
-	_handleGeolocationResponse: function (pos) {
-		var lat = pos.coords.latitude,
-		    lng = pos.coords.longitude,
-		    latlng = new L.LatLng(lat, lng),
-
-		    latAccuracy = 180 * pos.coords.accuracy / 40075017,
-		    lngAccuracy = latAccuracy / Math.cos(L.LatLng.DEG_TO_RAD * lat),
-
-		    bounds = L.latLngBounds(
-		            [lat - latAccuracy, lng - lngAccuracy],
-		            [lat + latAccuracy, lng + lngAccuracy]),
-
-		    options = this._locateOptions;
-
-		if (options.setView) {
-			var zoom = Math.min(this.getBoundsZoom(bounds), options.maxZoom);
-			this.setView(latlng, zoom);
-		}
-
-		var data = {
-			latlng: latlng,
-			bounds: bounds,
-			timestamp: pos.timestamp
-		};
-
-		for (var i in pos.coords) {
-			if (typeof pos.coords[i] === 'number') {
-				data[i] = pos.coords[i];
-			}
-		}
-
-		this.fire('locationfound', data);
-	}
-});
-
-
-}(window, document));
\ No newline at end of file
diff --git a/www/js/vendor/leaflet.awesome-markers.min.js b/www/js/vendor/leaflet.awesome-markers.min.js
deleted file mode 100644
index 376e57e68d6f93c56f4d683bee3cc150926e710b..0000000000000000000000000000000000000000
--- a/www/js/vendor/leaflet.awesome-markers.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
-  Leaflet.AwesomeMarkers, a plugin that adds colorful iconic markers for Leaflet, based on the Font Awesome icons
-  (c) 2012-2013, Lennard Voogdt
-
-  http://leafletjs.com
-  https://github.com/lvoogdt
-*//*global L*/(function(e,t,n){"use strict";L.AwesomeMarkers={};L.AwesomeMarkers.version="2.0.1";L.AwesomeMarkers.Icon=L.Icon.extend({options:{iconSize:[35,45],iconAnchor:[17,42],popupAnchor:[1,-32],shadowAnchor:[10,12],shadowSize:[36,16],className:"awesome-marker",prefix:"glyphicon",spinClass:"fa-spin",icon:"home",markerColor:"blue",iconColor:"white"},initialize:function(e){e=L.Util.setOptions(this,e)},createIcon:function(){var e=t.createElement("div"),n=this.options;n.icon&&(e.innerHTML=this._createInner());n.bgPos&&(e.style.backgroundPosition=-n.bgPos.x+"px "+ -n.bgPos.y+"px");this._setIconStyles(e,"icon-"+n.markerColor);return e},_createInner:function(){var e,t="",n="",r="",i=this.options;i.icon.slice(0,i.prefix.length+1)===i.prefix+"-"?e=i.icon:e=i.prefix+"-"+i.icon;i.spin&&typeof i.spinClass=="string"&&(t=i.spinClass);i.iconColor&&(i.iconColor==="white"||i.iconColor==="black"?n="icon-"+i.iconColor:r="style='color: "+i.iconColor+"' ");return"<i "+r+"class='"+i.prefix+" "+e+" "+t+" "+n+"'></i>"},_setIconStyles:function(e,t){var n=this.options,r=L.point(n[t==="shadow"?"shadowSize":"iconSize"]),i;t==="shadow"?i=L.point(n.shadowAnchor||n.iconAnchor):i=L.point(n.iconAnchor);!i&&r&&(i=r.divideBy(2,!0));e.className="awesome-marker-"+t+" "+n.className;if(i){e.style.marginLeft=-i.x+"px";e.style.marginTop=-i.y+"px"}if(r){e.style.width=r.x+"px";e.style.height=r.y+"px"}},createShadow:function(){var e=t.createElement("div");this._setIconStyles(e,"shadow");return e}});L.AwesomeMarkers.icon=function(e){return new L.AwesomeMarkers.Icon(e)}})(this,document);
diff --git a/www/js/vendor/leaflet.easy-button.js b/www/js/vendor/leaflet.easy-button.js
deleted file mode 100644
index f71e072905c90e5539b66cc1eed7639f5e3bfc8e..0000000000000000000000000000000000000000
--- a/www/js/vendor/leaflet.easy-button.js
+++ /dev/null
@@ -1,379 +0,0 @@
-(function(){
-
-// This is for grouping buttons into a bar
-// takes an array of `L.easyButton`s and
-// then the usual `.addTo(map)`
-L.Control.EasyBar = L.Control.extend({
-
-  options: {
-    position:       'topleft',  // part of leaflet's defaults
-    id:             null,       // an id to tag the Bar with
-    leafletClasses: true        // use leaflet classes?
-  },
-
-
-  initialize: function(buttons, options){
-
-    if(options){
-      L.Util.setOptions( this, options );
-    }
-
-    this._buildContainer();
-    this._buttons = [];
-
-    for(var i = 0; i < buttons.length; i++){
-      buttons[i]._bar = this;
-      buttons[i]._container = buttons[i].button;
-      this._buttons.push(buttons[i]);
-      this.container.appendChild(buttons[i].button);
-    }
-
-  },
-
-
-  _buildContainer: function(){
-    this._container = this.container = L.DomUtil.create('div', '');
-    this.options.leafletClasses && L.DomUtil.addClass(this.container, 'leaflet-bar easy-button-container leaflet-control');
-    this.options.id && (this.container.id = this.options.id);
-  },
-
-
-  enable: function(){
-    L.DomUtil.addClass(this.container, 'enabled');
-    L.DomUtil.removeClass(this.container, 'disabled');
-    this.container.setAttribute('aria-hidden', 'false');
-    return this;
-  },
-
-
-  disable: function(){
-    L.DomUtil.addClass(this.container, 'disabled');
-    L.DomUtil.removeClass(this.container, 'enabled');
-    this.container.setAttribute('aria-hidden', 'true');
-    return this;
-  },
-
-
-  onAdd: function () {
-    return this.container;
-  },
-
-  addTo: function (map) {
-    this._map = map;
-
-    for(var i = 0; i < this._buttons.length; i++){
-      this._buttons[i]._map = map;
-    }
-
-    var container = this._container = this.onAdd(map),
-        pos = this.getPosition(),
-        corner = map._controlCorners[pos];
-
-    L.DomUtil.addClass(container, 'leaflet-control');
-
-    if (pos.indexOf('bottom') !== -1) {
-      corner.insertBefore(container, corner.firstChild);
-    } else {
-      corner.appendChild(container);
-    }
-
-    return this;
-  }
-
-});
-
-L.easyBar = function(){
-  var args = [L.Control.EasyBar];
-  for(var i = 0; i < arguments.length; i++){
-    args.push( arguments[i] );
-  }
-  return new (Function.prototype.bind.apply(L.Control.EasyBar, args));
-};
-
-// L.EasyButton is the actual buttons
-// can be called without being grouped into a bar
-L.Control.EasyButton = L.Control.extend({
-
-  options: {
-    position:  'topleft',       // part of leaflet's defaults
-
-    id:        null,            // an id to tag the button with
-
-    type:      'replace',       // [(replace|animate)]
-                                // replace swaps out elements
-                                // animate changes classes with all elements inserted
-
-    states:    [],              // state names look like this
-                                // {
-                                //   stateName: 'untracked',
-                                //   onClick: function(){ handle_nav_manually(); };
-                                //   title: 'click to make inactive',
-                                //   icon: 'fa-circle',    // wrapped with <a>
-                                // }
-
-    leafletClasses:   true,     // use leaflet styles for the button
-    tagName:          'button',
-  },
-
-
-
-  initialize: function(icon, onClick, title, id){
-
-    // clear the states manually
-    this.options.states = [];
-
-    // add id to options
-    if(id != null){
-      this.options.id = id;
-    }
-
-    // storage between state functions
-    this.storage = {};
-
-    // is the last item an object?
-    if( typeof arguments[arguments.length-1] === 'object' ){
-
-      // if so, it should be the options
-      L.Util.setOptions( this, arguments[arguments.length-1] );
-    }
-
-    // if there aren't any states in options
-    // use the early params
-    if( this.options.states.length === 0 &&
-        typeof icon  === 'string' &&
-        typeof onClick === 'function'){
-
-      // turn the options object into a state
-      this.options.states.push({
-        icon: icon,
-        onClick: onClick,
-        title: typeof title === 'string' ? title : ''
-      });
-    }
-
-    // curate and move user's states into
-    // the _states for internal use
-    this._states = [];
-
-    for(var i = 0; i < this.options.states.length; i++){
-      this._states.push( new State(this.options.states[i], this) );
-    }
-
-    this._buildButton();
-
-    this._activateState(this._states[0]);
-
-  },
-
-  _buildButton: function(){
-
-    this.button = L.DomUtil.create(this.options.tagName, '');
-
-    // the next three if statements should be collapsed into the options 
-    // when it's time for breaking changes.
-    if (this.tagName === 'button') {
-        this.button.type = 'button';
-    }
-    
-    if (this.options.id ){
-      this.button.id = this.options.id;
-    }
-
-    if (this.options.leafletClasses){
-      L.DomUtil.addClass(this.button, 'easy-button-button leaflet-bar-part leaflet-interactive');
-    }
-
-    // don't let double clicks and mousedown get to the map
-    L.DomEvent.addListener(this.button, 'dblclick', L.DomEvent.stop);
-    L.DomEvent.addListener(this.button, 'mousedown', L.DomEvent.stop);
-
-    // take care of normal clicks
-    L.DomEvent.addListener(this.button,'click', function(e){
-      L.DomEvent.stop(e);
-      this._currentState.onClick(this, this._map ? this._map : null );
-      this._map.getContainer().focus();
-    }, this);
-
-    // prep the contents of the control
-    if(this.options.type == 'replace'){
-      this.button.appendChild(this._currentState.icon);
-    } else {
-      for(var i=0;i<this._states.length;i++){
-        this.button.appendChild(this._states[i].icon);
-      }
-    }
-  },
-
-
-  _currentState: {
-    // placeholder content
-    stateName: 'unnamed',
-    icon: (function(){ return document.createElement('span'); })()
-  },
-
-
-
-  _states: null, // populated on init
-
-
-
-  state: function(newState){
-
-    // activate by name
-    if(typeof newState == 'string'){
-
-      this._activateStateNamed(newState);
-
-    // activate by index
-    } else if (typeof newState == 'number'){
-
-      this._activateState(this._states[newState]);
-    }
-
-    return this;
-  },
-
-
-  _activateStateNamed: function(stateName){
-    for(var i = 0; i < this._states.length; i++){
-      if( this._states[i].stateName == stateName ){
-        this._activateState( this._states[i] );
-      }
-    }
-  },
-
-  _activateState: function(newState){
-
-    if( newState === this._currentState ){
-
-      // don't touch the dom if it'll just be the same after
-      return;
-
-    } else {
-
-      // swap out elements... if you're into that kind of thing
-      if( this.options.type == 'replace' ){
-        this.button.appendChild(newState.icon);
-        this.button.removeChild(this._currentState.icon);
-      }
-
-      if( newState.title ){
-        this.button.title = newState.title;
-      } else {
-        this.button.removeAttribute('title');
-      }
-
-      // update classes for animations
-      for(var i=0;i<this._states.length;i++){
-        L.DomUtil.removeClass(this._states[i].icon, this._currentState.stateName + '-active');
-        L.DomUtil.addClass(this._states[i].icon, newState.stateName + '-active');
-      }
-
-      // update classes for animations
-      L.DomUtil.removeClass(this.button, this._currentState.stateName + '-active');
-      L.DomUtil.addClass(this.button, newState.stateName + '-active');
-
-      // update the record
-      this._currentState = newState;
-
-    }
-  },
-
-
-
-  enable: function(){
-    L.DomUtil.addClass(this.button, 'enabled');
-    L.DomUtil.removeClass(this.button, 'disabled');
-    this.button.setAttribute('aria-hidden', 'false');
-    return this;
-  },
-
-
-
-  disable: function(){
-    L.DomUtil.addClass(this.button, 'disabled');
-    L.DomUtil.removeClass(this.button, 'enabled');
-    this.button.setAttribute('aria-hidden', 'true');
-    return this;
-  },
-
-
-  removeFrom: function (map) {
-
-    this._container.parentNode.removeChild(this._container);
-    this._map = null;
-
-    return this;
-  },
-
-  onAdd: function(){
-    var containerObj = L.easyBar([this], {
-      position: this.options.position,
-      leafletClasses: this.options.leafletClasses
-    });
-    this._container = containerObj.container;
-    return this._container;
-  }
-
-
-});
-
-L.easyButton = function(/* args will pass automatically */){
-  var args = Array.prototype.concat.apply([L.Control.EasyButton],arguments);
-  return new (Function.prototype.bind.apply(L.Control.EasyButton, args));
-};
-
-/*************************
- *
- * util functions
- *
- *************************/
-
-// constructor for states so only curated
-// states end up getting called
-function State(template, easyButton){
-
-  this.title = template.title;
-  this.stateName = template.stateName ? template.stateName : 'unnamed-state';
-
-  // build the wrapper
-  this.icon = L.DomUtil.create('span', '');
-
-  L.DomUtil.addClass(this.icon, 'button-state state-' + this.stateName.replace(/(^\s*|\s*$)/g,''));
-  this.icon.innerHTML = buildIcon(template.icon);
-  this.onClick = L.Util.bind(template.onClick?template.onClick:function(){}, easyButton);
-}
-
-function buildIcon(ambiguousIconString) {
-
-  var tmpIcon;
-
-  // does this look like html? (i.e. not a class)
-  if( ambiguousIconString.match(/[&;=<>"']/) ){
-
-    // if so, the user should have put in html
-    // so move forward as such
-    tmpIcon = ambiguousIconString;
-
-  // then it wasn't html, so
-  // it's a class list, figure out what kind
-  } else {
-      ambiguousIconString = ambiguousIconString.replace(/(^\s*|\s*$)/g,'');
-      tmpIcon = L.DomUtil.create('span', '');
-
-      if( ambiguousIconString.indexOf('fa-') === 0 ){
-        L.DomUtil.addClass(tmpIcon, 'fa '  + ambiguousIconString)
-      } else if ( ambiguousIconString.indexOf('glyphicon-') === 0 ) {
-        L.DomUtil.addClass(tmpIcon, 'glyphicon ' + ambiguousIconString)
-      } else {
-        L.DomUtil.addClass(tmpIcon, /*rollwithit*/ ambiguousIconString)
-      }
-
-      // make this a string so that it's easy to set innerHTML below
-      tmpIcon = tmpIcon.outerHTML;
-  }
-
-  return tmpIcon;
-}
-
-})();
diff --git a/www/js/vendor/leaflet.featuregroup.subgroup-src.js b/www/js/vendor/leaflet.featuregroup.subgroup-src.js
deleted file mode 100644
index 0ce8c355bed261a4f2f1eb8fb77975d7d4f7607d..0000000000000000000000000000000000000000
--- a/www/js/vendor/leaflet.featuregroup.subgroup-src.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * Leaflet.FeatureGroup.SubGroup creates a Feature Group that adds its child
- * layers into a parent group when added to a map (e.g. through L.Control.Layers).
- * (c) 2015-2016 Boris Seang
- * BSD 2-Clause "Simplified" License
- */
-
-(function (root, factory) {
-    if (typeof define === "function" && define.amd) {
-        define(["leaflet"], factory);
-    } else if (typeof module === "object" && module.exports) {
-        factory(require("leaflet"));
-    } else {
-        factory(root.L);
-    }
-}(this, function (L) {
-
-    L.FeatureGroup.SubGroup = L.FeatureGroup.extend({
-
-        statics: {
-            version: '0.1.2'
-        },
-
-        /**
-         * Instantiates a SubGroup.
-         * @param parentGroup (L.LayerGroup) (optional)
-         * @param layersArray (L.Layer[]) (optional)
-         */
-        initialize: function (parentGroup, layersArray) {
-            L.FeatureGroup.prototype.initialize.call(this, layersArray);
-
-            this.setParentGroup(parentGroup);
-        },
-
-        /**
-         * Changes the parent group into which child markers are added to /
-         * removed from.
-         * @param parentGroup (L.LayerGroup)
-         * @returns {SubGroup} this
-         */
-        setParentGroup: function (parentGroup) {
-            var pgInstanceOfLG = parentGroup instanceof L.LayerGroup;
-
-            this._parentGroup = parentGroup;
-
-            // onAdd
-            this.onAdd =
-                pgInstanceOfLG ?
-                    (
-                        typeof parentGroup.addLayers === "function" ?
-                            this._onAddToGroupBatch :
-                            this._onAddToGroup
-                    ) :
-                    this._onAddToMap;
-
-            // onRemove
-            this.onRemove =
-                pgInstanceOfLG ?
-                    (
-                        typeof parentGroup.removeLayers === "function" ?
-                            this._onRemoveFromGroupBatch :
-                            this._onRemoveFromGroup
-                    ) :
-                    this._onRemoveFromMap;
-
-            // addLayer
-            this.addLayer = pgInstanceOfLG ?
-                this._addLayerToGroup :
-                this._addLayerToMap;
-
-            // removeLayer
-            this.removeLayer = pgInstanceOfLG ?
-                this._removeLayerFromGroup :
-                this._removeLayerFromMap;
-
-            return this;
-        },
-
-        /**
-         * Removes the current sub-group from map before changing the parent
-         * group. Re-adds the sub-group to map if it was before changing.
-         * @param parentGroup (L.LayerGroup)
-         * @returns {SubGroup} this
-         */
-        setParentGroupSafe: function (parentGroup) {
-            var map = this._map;
-
-            if (map) {
-                map.removeLayer(this);
-            }
-
-            this.setParentGroup(parentGroup);
-
-            if (map) {
-                map.addLayer(this);
-            }
-
-            return this;
-        },
-
-        /**
-         * Returns the current parent group.
-         * @returns {*}
-         */
-        getParentGroup: function () {
-            return this._parentGroup;
-        },
-
-
-        // For parent groups with batch methods (addLayers and removeLayers)
-        // like MarkerCluster.
-        _onAddToGroupBatch: function (map) {
-            var layersArray = this.getLayers();
-
-            this._map = map;
-            this._parentGroup.addLayers(layersArray);
-        },
-
-        _onRemoveFromGroupBatch: function () {
-            var layersArray = this.getLayers();
-
-            this._parentGroup.removeLayers(layersArray);
-            this._map = null;
-        },
-
-
-        // For other parent layer groups.
-        _onAddToGroup: function (map) {
-            var parentGroup = this._parentGroup;
-
-            this._map = map;
-            this.eachLayer(parentGroup.addLayer, parentGroup);
-        },
-
-        _onRemoveFromGroup: function () {
-            var parentGroup = this._parentGroup;
-
-            this.eachLayer(parentGroup.removeLayer, parentGroup);
-            this._map = null;
-        },
-
-
-        // Defaults to standard FeatureGroup behaviour when parent group is not
-        // specified or is not a type of LayerGroup.
-        _onAddToMap: L.FeatureGroup.prototype.onAdd,
-        _onRemoveFromMap: L.FeatureGroup.prototype.onRemove,
-
-
-        _addLayerToGroup: function (layer) {
-            if (this.hasLayer(layer)) {
-                return this;
-            }
-
-            if (layer.on) {
-                layer.on(L.FeatureGroup.EVENTS, this._propagateEvent, this);
-            }
-
-            var id = this.getLayerId(layer);
-
-            this._layers[id] = layer;
-
-            if (this._map) {
-                // Add to parent group instead of directly to map.
-                this._parentGroup.addLayer(layer);
-            }
-
-            if (this._popupContent && layer.bindPopup) {
-                layer.bindPopup(this._popupContent, this._popupOptions);
-            }
-
-            return this.fire('layeradd', {layer: layer});
-        },
-
-        _removeLayerFromGroup: function (layer) {
-            if (!this.hasLayer(layer)) {
-                return this;
-            }
-            if (layer in this._layers) {
-                layer = this._layers[layer];
-            }
-
-            if (layer.off) {
-                layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this);
-            }
-
-            var id = layer in this._layers ? layer : this.getLayerId(layer);
-
-            if (this._map && this._layers[id]) {
-                // Remove from parent group instead of directly from map.
-                this._parentGroup.removeLayer(id);
-            }
-
-            delete this._layers[id];
-
-            if (this._popupContent) {
-                this.invoke('unbindPopup');
-            }
-
-            return this.fire('layerremove', {layer: layer});
-        },
-
-        // Defaults to standard FeatureGroup behaviour when parent group is not
-        // specified or is not a type of LayerGroup.
-        _addLayerToMap: L.FeatureGroup.prototype.addLayer,
-        _removeLayerFromMap: L.FeatureGroup.prototype.removeLayer
-
-    });
-
-
-
-    // Supply with a factory for consistency with Leaflet.
-    L.featureGroup.subGroup = function (parentGroup, options) {
-        return new L.FeatureGroup.SubGroup(parentGroup, options);
-    };
-
-}));
diff --git a/www/js/vendor/leaflet.js b/www/js/vendor/leaflet.js
deleted file mode 100644
index ee5ff5a1d4bc321e2f521752ecf7c34dc33d3d82..0000000000000000000000000000000000000000
--- a/www/js/vendor/leaflet.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Leaflet, a JavaScript library for mobile-friendly interactive maps. http://leafletjs.com
- (c) 2010-2013, Vladimir Agafonkin
- (c) 2010-2011, CloudMade
-*/
-!function(t,e,i){var n=t.L,o={};o.version="0.7.7","object"==typeof module&&"object"==typeof module.exports?module.exports=o:"function"==typeof define&&define.amd&&define(o),o.noConflict=function(){return t.L=n,this},t.L=o,o.Util={extend:function(t){var e,i,n,o,s=Array.prototype.slice.call(arguments,1);for(i=0,n=s.length;n>i;i++){o=s[i]||{};for(e in o)o.hasOwnProperty(e)&&(t[e]=o[e])}return t},bind:function(t,e){var i=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(e,i||arguments)}},stamp:function(){var t=0,e="_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:function(t,e,i){var n,o;if("object"==typeof t){o=Array.prototype.slice.call(arguments,3);for(n in t)e.apply(i,[n,t[n]].concat(o));return!0}return!1},limitExecByInterval:function(t,e,i){var n,o;return function s(){var a=arguments;return n?void(o=!0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),void t.apply(i,a))}},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){return t.options=o.extend({},t.options,e),t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(/\{ *([\w_]+) *\}/g,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){var i,n,o=["webkit","moz","o","ms"];for(i=0;i<o.length&&!n;i++)n=t[o[i]+e];return n}function i(e){var i=+new Date,o=Math.max(0,16-(i-n));return n=i+o,t.setTimeout(e,o)}var n=0,s=t.requestAnimationFrame||e("RequestAnimationFrame")||i,a=t.cancelAnimationFrame||e("CancelAnimationFrame")||e("CancelRequestAnimationFrame")||function(e){t.clearTimeout(e)};o.Util.requestAnimFrame=function(e,n,a,r){return e=o.bind(e,n),a&&s===i?void e():s.call(t,e,r)},o.Util.cancelAnimFrame=function(e){e&&a.call(t,e)}}(),o.extend=o.Util.extend,o.bind=o.Util.bind,o.stamp=o.Util.stamp,o.setOptions=o.Util.setOptions,o.Class=function(){},o.Class.extend=function(t){var e=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},i=function(){};i.prototype=this.prototype;var n=new i;n.constructor=e,e.prototype=n;for(var s in this)this.hasOwnProperty(s)&&"prototype"!==s&&(e[s]=this[s]);t.statics&&(o.extend(e,t.statics),delete t.statics),t.includes&&(o.Util.extend.apply(null,[n].concat(t.includes)),delete t.includes),t.options&&n.options&&(t.options=o.extend({},n.options,t.options)),o.extend(n,t),n._initHooks=[];var a=this;return e.__super__=a.prototype,n.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,e=n._initHooks.length;e>t;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)};var s="_leaflet_events";o.Mixin={},o.Mixin.Events={addEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d=this[s]=this[s]||{},p=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)r={action:e,context:i||this},h=t[n],p?(l=h+"_idx",u=l+"_len",c=d[l]=d[l]||{},c[p]||(c[p]=[],d[u]=(d[u]||0)+1),c[p].push(r)):(d[h]=d[h]||[],d[h].push(r));return this},hasEventListeners:function(t){var e=this[s];return!!e&&(t in e&&e[t].length>0||t+"_idx"in e&&e[t+"_idx_len"]>0)},removeEventListener:function(t,e,i){if(!this[s])return this;if(!t)return this.clearAllEventListeners();if(o.Util.invokeEach(t,this.removeEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d,p,_=this[s],m=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)if(r=t[n],u=r+"_idx",c=u+"_len",d=_[u],e){if(h=m&&d?d[m]:_[r]){for(l=h.length-1;l>=0;l--)h[l].action!==e||i&&h[l].context!==i||(p=h.splice(l,1),p[0].action=o.Util.falseFn);i&&d&&0===h.length&&(delete d[m],_[c]--)}}else delete _[r],delete _[u],delete _[c];return this},clearAllEventListeners:function(){return delete this[s],this},fireEvent:function(t,e){if(!this.hasEventListeners(t))return this;var i,n,a,r,h,l=o.Util.extend({},e,{type:t,target:this}),u=this[s];if(u[t])for(i=u[t].slice(),n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);r=u[t+"_idx"];for(h in r)if(i=r[h].slice())for(n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);return this},addOneTimeEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addOneTimeEventListener,this,e,i))return this;var n=o.bind(function(){this.removeEventListener(t,e,i).removeEventListener(t,n,i)},this);return this.addEventListener(t,e,i).addEventListener(t,n,i)}},o.Mixin.Events.on=o.Mixin.Events.addEventListener,o.Mixin.Events.off=o.Mixin.Events.removeEventListener,o.Mixin.Events.once=o.Mixin.Events.addOneTimeEventListener,o.Mixin.Events.fire=o.Mixin.Events.fireEvent,function(){var n="ActiveXObject"in t,s=n&&!e.addEventListener,a=navigator.userAgent.toLowerCase(),r=-1!==a.indexOf("webkit"),h=-1!==a.indexOf("chrome"),l=-1!==a.indexOf("phantom"),u=-1!==a.indexOf("android"),c=-1!==a.search("android [23]"),d=-1!==a.indexOf("gecko"),p=typeof orientation!=i+"",_=!t.PointerEvent&&t.MSPointerEvent,m=t.PointerEvent&&t.navigator.pointerEnabled||_,f="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,g=e.documentElement,v=n&&"transition"in g.style,y="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!c,P="MozPerspective"in g.style,L="OTransition"in g.style,x=!t.L_DISABLE_3D&&(v||y||P||L)&&!l,w=!t.L_NO_TOUCH&&!l&&(m||"ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch);o.Browser={ie:n,ielt9:s,webkit:r,gecko:d&&!r&&!t.opera&&!n,android:u,android23:c,chrome:h,ie3d:v,webkit3d:y,gecko3d:P,opera3d:L,any3d:x,mobile:p,mobileWebkit:p&&r,mobileWebkit3d:p&&y,mobileOpera:p&&t.opera,touch:w,msPointer:_,pointer:m,retina:f}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,a=s.x>=e.x&&n.x<=i.x,r=s.y>=e.y&&n.y<=i.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i];if(!n&&t.currentStyle&&(n=t.currentStyle[i]),(!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},getViewportOffset:function(t){var i,n=0,s=0,a=t,r=e.body,h=e.documentElement;do{if(n+=a.offsetTop||0,s+=a.offsetLeft||0,n+=parseInt(o.DomUtil.getStyle(a,"borderTopWidth"),10)||0,s+=parseInt(o.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,i=o.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===i)break;if("fixed"===i){n+=r.scrollTop||h.scrollTop||0,s+=r.scrollLeft||h.scrollLeft||0;break}if("relative"===i&&!a.offsetLeft){var l=o.DomUtil.getStyle(a,"width"),u=o.DomUtil.getStyle(a,"max-width"),c=a.getBoundingClientRect();("none"!==l||"none"!==u)&&(s+=c.left+a.clientLeft),n+=c.top+(r.scrollTop||h.scrollTop||0);break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;n-=a.scrollTop||0,s-=a.scrollLeft||0,a=a.parentNode}while(a);return new o.Point(s,n)},documentIsLtr:function(){return o.DomUtil._docIsLtrCached||(o.DomUtil._docIsLtrCached=!0,o.DomUtil._docIsLtr="ltr"===o.DomUtil.getStyle(e.body,"direction")),o.DomUtil._docIsLtr},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil._getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,a=n.length;a>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var r=o.DomUtil._getClass(t);o.DomUtil._setClass(t,(r?r+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil._setClass(t,o.Util.trim((" "+o.DomUtil._getClass(t)+" ").replace(" "+e+" "," ")))},_setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},_getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}},testProp:function(t){for(var i=e.documentElement.style,n=0;n<t.length;n++)if(t[n]in i)return t[n];return!1},getTranslateString:function(t){var e=o.Browser.webkit3d,i="translate"+(e?"3d":"")+"(",n=(e?",0":"")+")";return i+t.x+"px,"+t.y+"px"+n},getScaleString:function(t,e){var i=o.DomUtil.getTranslateString(e.add(e.multiplyBy(-1*t))),n=" scale("+t+") ";return i+n},setPosition:function(t,e,i){t._leaflet_pos=e,!i&&o.Browser.any3d?t.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(e):(t.style.left=e.x+"px",t.style.top=e.y+"px")},getPosition:function(t){return t._leaflet_pos}},o.DomUtil.TRANSFORM=o.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),o.DomUtil.TRANSITION=o.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),o.DomUtil.TRANSITION_END="webkitTransition"===o.DomUtil.TRANSITION||"OTransition"===o.DomUtil.TRANSITION?o.DomUtil.TRANSITION+"End":"transitionend",function(){if("onselectstart"in e)o.extend(o.DomUtil,{disableTextSelection:function(){o.DomEvent.on(t,"selectstart",o.DomEvent.preventDefault)},enableTextSelection:function(){o.DomEvent.off(t,"selectstart",o.DomEvent.preventDefault)}});else{var i=o.DomUtil.testProp(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);o.extend(o.DomUtil,{disableTextSelection:function(){if(i){var t=e.documentElement.style;this._userSelect=t[i],t[i]="none"}},enableTextSelection:function(){i&&(e.documentElement.style[i]=this._userSelect,delete this._userSelect)}})}o.extend(o.DomUtil,{disableImageDrag:function(){o.DomEvent.on(t,"dragstart",o.DomEvent.preventDefault)},enableImageDrag:function(){o.DomEvent.off(t,"dragstart",o.DomEvent.preventDefault)}})}(),o.LatLng=function(t,e,n){if(t=parseFloat(t),e=parseFloat(e),isNaN(t)||isNaN(e))throw new Error("Invalid LatLng object: ("+t+", "+e+")");this.lat=t,this.lng=e,n!==i&&(this.alt=parseFloat(n))},o.extend(o.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),o.LatLng.prototype={equals:function(t){if(!t)return!1;t=o.latLng(t);var e=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e<=o.LatLng.MAX_MARGIN},toString:function(t){return"LatLng("+o.Util.formatNum(this.lat,t)+", "+o.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=o.latLng(t);var e=6378137,i=o.LatLng.DEG_TO_RAD,n=(t.lat-this.lat)*i,s=(t.lng-this.lng)*i,a=this.lat*i,r=t.lat*i,h=Math.sin(n/2),l=Math.sin(s/2),u=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*e*Math.atan2(Math.sqrt(u),Math.sqrt(1-u))},wrap:function(t,e){var i=this.lng;return t=t||-180,e=e||180,i=(i+e)%(e-t)+(t>i||i===e?e:t),new o.LatLng(this.lat,i)}},o.latLng=function(t,e){return t instanceof o.LatLng?t:o.Util.isArray(t)?"number"==typeof t[0]||"string"==typeof t[0]?new o.LatLng(t[0],t[1],t[2]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon):e===i?null:new o.LatLng(t,e)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){if(!t)return this;var e=o.latLng(t);return t=null!==e?e:o.latLngBounds(t),t instanceof o.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new o.LatLng(t.lat,t.lng),this._northEast=new o.LatLng(t.lat,t.lng)):t instanceof o.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),a=s.lat>=e.lat&&n.lat<=i.lat,r=s.lng>=e.lng&&n.lng<=i.lng;return a&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=t.lng*e,a=n*e;return a=Math.log(Math.tan(Math.PI/4+a/2)),new o.Point(s,a)},unproject:function(t){var e=o.LatLng.RAD_TO_DEG,i=t.x*e,n=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*e;return new o.LatLng(n,i)}},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)}},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)},getSize:function(t){var e=this.scale(t);return o.point(e,e)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),o.CRS.EPSG3857=o.extend({},o.CRS,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:new o.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var e=this.projection.project(t),i=6378137;return e.multiplyBy(i)}}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/360,.5,-1/360,.5)}),o.Map=o.Class.extend({includes:o.Mixin.Events,options:{crs:o.CRS.EPSG3857,fadeAnimation:o.DomUtil.TRANSITION&&!o.Browser.android23,trackResize:!0,markerZoomAnimation:o.DomUtil.TRANSITION&&o.Browser.any3d},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0,this.callInitHooks(),this._addLayers(e.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),this._limitZoom(e)),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=this._limitZoom(t),this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),a=t instanceof o.Point?t:this.latLngToContainerPoint(t),r=a.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(r));return this.setView(h,e,{zoom:i})},fitBounds:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n));s=e.maxZoom?Math.min(e.maxZoom,s):s;var a=n.subtract(i).divideBy(2),r=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(r.add(h).divideBy(2).add(a),s);return this.setView(l,s,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return t=o.latLngBounds(t),this.options.maxBounds=t,t?(this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds,this)):this.off("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(t,e){var i=this.getCenter(),n=this._limitCenter(i,this._zoom,t);return i.equals(n)?this:this.panTo(n,e)},addLayer:function(t){var e=o.stamp(t);return this._layers[e]?this:(this._layers[e]=t,!t.options||isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[e]=t,this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum++,this._tileLayersToLoad++,t.on("load",this._onTileLayerLoad,this)),this._loaded&&this._layerAdd(t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&this.fire("layerremove",{layer:t}),this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum--,this._tileLayersToLoad--,t.off("load",this._onTileLayerLoad,this)),this):this},hasLayer:function(t){return t?o.stamp(t)in this._layers:!1},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._initialCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),a=n.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._loaded&&this.fire("unload"),this._initEvents("off");try{delete this._container._leaflet}catch(t){this._container._leaflet=i}return this._clearPanes(),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this},getCenter:function(){return this._checkIfLoaded(),this._initialCenter&&!this._moved()?this._initialCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom===i?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),a=this.getMaxZoom(),r=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i),u=e?n.x<r.x||n.y<r.y:r.contains(n);while(u&&a>=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new o.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var e=this.options.crs;return e.scale(t)/e.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");e._leaflet=!0},_initLayout:function(){var t=this._container;o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(this.options.fadeAnimation?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var e=" leaflet-zoom-hide";this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,e),o.DomUtil.addClass(t.shadowPane,e),o.DomUtil.addClass(t.popupPane,e))},_createPane:function(t,e){return o.DomUtil.create("div",t,e||this._panes.objectsPane)},_clearPanes:function(){this._container.removeChild(this._mapPane)},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_resetView:function(t,e,i,n){var s=this._zoom!==e;n||(this.fire("movestart"),s&&this.fire("zoomstart")),this._zoom=e,this._initialCenter=t,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),i?this._initialTopLeftPoint._add(this._getMapPanePos()):o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!i}),a&&(this.fire("load"),this.eachLayer(this._layerAdd,this)),this.fire("move"),(s||n)&&this.fire("zoomend"),this.fire("moveend",{hard:!i})},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_updateZoomLevels:function(){var t,e=1/0,n=-(1/0),o=this._getZoomSpan();for(t in this._zoomBoundLayers){var s=this._zoomBoundLayers[t];isNaN(s.options.minZoom)||(e=Math.min(e,s.options.minZoom)),isNaN(s.options.maxZoom)||(n=Math.max(n,s.options.maxZoom))}t===i?this._layersMaxZoom=this._layersMinZoom=i:(this._layersMaxZoom=n,this._layersMinZoom=e),o!==this._getZoomSpan()&&this.fire("zoomlevelschange")},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){e=e||"on",o.DomEvent[e](this._container,"click",this._onMouseClick,this);var i,n,s=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,n=s.length;n>i;i++)o.DomEvent[e](this._container,s[i],this._fireMouseEvent,this);this.options.trackResize&&o.DomEvent[e](t,"resize",this._onResize,this)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this,!1,this._container)},_onMouseClick:function(t){!this._loaded||!t._simulated&&(this.dragging&&this.dragging.moved()||this.boxZoom&&this.boxZoom.moved())||o.DomEvent._skipped(t)||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e=t.type;if(e="mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,this.hasEventListeners(e)){"contextmenu"===e&&o.DomEvent.preventDefault(t);var i=this.mouseEventToContainerPoint(t),n=this.containerPointToLayerPoint(i),s=this.layerPointToLatLng(n);this.fire(e,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this.fire("tilelayersload")},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,this):this.on("load",t,e),this},_layerAdd:function(t){t.onAdd(this),this.fire("layeradd",{layer:t})},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(){return this.getPixelOrigin().subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewTopLeftPoint(i,e).add(this._getMapPanePos());return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),a=new o.Bounds(n.subtract(s),n.add(s)),r=this._getBoundsOffset(a,i,e);return this.unproject(n.add(r),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),a=this._rebound(n.x,-s.x),r=this._rebound(n.y,-s.y);return new o.Point(a,r)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=this.R_MAJOR,a=this.R_MINOR,r=t.lng*e*s,h=n*e,l=a/s,u=Math.sqrt(1-l*l),c=u*Math.sin(h);c=Math.pow((1-c)/(1+c),.5*u);var d=Math.tan(.5*(.5*Math.PI-h))/c;return h=-s*Math.log(d),new o.Point(r,h)},unproject:function(t){for(var e,i=o.LatLng.RAD_TO_DEG,n=this.R_MAJOR,s=this.R_MINOR,a=t.x*i/n,r=s/n,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),u=Math.PI/2-2*Math.atan(l),c=15,d=1e-7,p=c,_=.1;Math.abs(_)>d&&--p>0;)e=h*Math.sin(u),_=Math.PI/2-2*Math.atan(l*Math.pow((1-e)/(1+e),.5*h))-u,u+=_;return new o.LatLng(u*i,a)}},o.CRS.EPSG3395=o.extend({},o.CRS,{code:"EPSG:3395",projection:o.Projection.Mercator,
-transformation:function(){var t=o.Projection.Mercator,e=t.R_MAJOR,i=.5/(Math.PI*e);return new o.Transformation(i,.5,-i,.5)}()}),o.TileLayer=o.Class.extend({includes:o.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:o.Browser.mobile,updateWhenIdle:o.Browser.mobile},initialize:function(t,e){e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom>0&&e.minZoom--,this.options.maxZoom--),e.bounds&&(e.bounds=o.latLngBounds(e.bounds)),this._url=t;var i=this.options.subdomains;"string"==typeof i&&(this.options.subdomains=i.split(""))},onAdd:function(t){this._map=t,this._animated=t._zoomAnimated,this._initContainer(),t.on({viewreset:this._reset,moveend:this._update},this),this._animated&&t.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||(this._limitedUpdate=o.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._reset,moveend:this._update},this),this._animated&&t.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},redraw:function(){return this._map&&(this._reset({hard:!0}),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,e){var i,n,o,s=t.children,a=-e(1/0,-(1/0));for(n=0,o=s.length;o>n;n++)s[n]!==this._container&&(i=parseInt(s[n].style.zIndex,10),isNaN(i)||(a=e(a,i)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+e(1,-1)},_updateOpacity:function(){var t,e=this._tiles;if(o.Browser.ielt9)for(t in e)o.DomUtil.setOpacity(e[t],this.options.opacity);else o.DomUtil.setOpacity(this._container,this.options.opacity)},_initContainer:function(){var t=this._map._panes.tilePane;if(!this._container){if(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this._animated){var e="leaflet-tile-container";this._bgBuffer=o.DomUtil.create("div",e,this._container),this._tileContainer=o.DomUtil.create("div",e,this._container)}else this._tileContainer=this._container;t.appendChild(this._container),this.options.opacity<1&&this._updateOpacity()}},_reset:function(t){for(var e in this._tiles)this.fire("tileunload",{tile:this._tiles[e]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),this._tileContainer.innerHTML="",this._animated&&t&&t.hard&&this._clearBgBuffer(),this._initContainer()},_getTileSize:function(){var t=this._map,e=t.getZoom()+this.options.zoomOffset,i=this.options.maxNativeZoom,n=this.options.tileSize;return i&&e>i&&(n=Math.round(t.getZoomScale(e)/t.getZoomScale(i)*n)),n},_update:function(){if(this._map){var t=this._map,e=t.getPixelBounds(),i=t.getZoom(),n=this._getTileSize();if(!(i>this.options.maxZoom||i<this.options.minZoom)){var s=o.bounds(e.min.divideBy(n)._floor(),e.max.divideBy(n)._floor());this._addTilesFromCenterOut(s),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(s)}}},_addTilesFromCenterOut:function(t){var i,n,s,a=[],r=t.getCenter();for(i=t.min.y;i<=t.max.y;i++)for(n=t.min.x;n<=t.max.x;n++)s=new o.Point(n,i),this._tileShouldBeLoaded(s)&&a.push(s);var h=a.length;if(0!==h){a.sort(function(t,e){return t.distanceTo(r)-e.distanceTo(r)});var l=e.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,n=0;h>n;n++)this._addTile(a[n],l);this._tileContainer.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;var e=this.options;if(!e.continuousWorld){var i=this._getWrapTileNum();if(e.noWrap&&(t.x<0||t.x>=i.x)||t.y<0||t.y>=i.y)return!1}if(e.bounds){var n=this._getTileSize(),o=t.multiplyBy(n),s=o.add([n,n]),a=this._map.unproject(o),r=this._map.unproject(s);if(e.continuousWorld||e.noWrap||(a=a.wrap(),r=r.wrap()),!e.bounds.intersects([a,r]))return!1}return!0},_removeOtherTiles:function(t){var e,i,n,o;for(o in this._tiles)e=o.split(":"),i=parseInt(e[0],10),n=parseInt(e[1],10),(i<t.min.x||i>t.max.x||n<t.min.y||n>t.max.y)&&this._removeTile(o)},_removeTile:function(t){var e=this._tiles[t];this.fire("tileunload",{tile:e,url:e.src}),this.options.reuseTiles?(o.DomUtil.removeClass(e,"leaflet-tile-loaded"),this._unusedTiles.push(e)):e.parentNode===this._tileContainer&&this._tileContainer.removeChild(e),o.Browser.android||(e.onload=null,e.src=o.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,e){var i=this._getTilePos(t),n=this._getTile();o.DomUtil.setPosition(n,i,o.Browser.chrome),this._tiles[t.x+":"+t.y]=n,this._loadTile(n,t),n.parentNode!==this._tileContainer&&e.appendChild(n)},_getZoomForUrl:function(){var t=this.options,e=this._map.getZoom();return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getTilePos:function(t){var e=this._map.getPixelOrigin(),i=this._getTileSize();return t.multiplyBy(i).subtract(e)},getTileUrl:function(t){return o.Util.template(this._url,o.extend({s:this._getSubdomain(t),z:t.z,x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){var t=this._map.options.crs,e=t.getSize(this._map.getZoom());return e.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(t){var e=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%e.x+e.x)%e.x),this.options.tms&&(t.y=e.y-t.y-1),t.z=this._getZoomForUrl()},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=o.DomUtil.create("img","leaflet-tile");return t.style.width=t.style.height=this._getTileSize()+"px",t.galleryimg="no",t.onselectstart=t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity!==i&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden"),t},_loadTile:function(t,e){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,this._adjustTilePoint(e),t.src=this.getTileUrl(e),this.fire("tileloadstart",{tile:t,url:t.src})},_tileLoaded:function(){this._tilesToLoad--,this._animated&&o.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated"),this._tilesToLoad||(this.fire("load"),this._animated&&(clearTimeout(this._clearBgBufferTimer),this._clearBgBufferTimer=setTimeout(o.bind(this._clearBgBuffer,this),500)))},_tileOnLoad:function(){var t=this._layer;this.src!==o.Util.emptyImageUrl&&(o.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var e=t.options.errorTileUrl;e&&(this.src=e),t._tileLoaded()}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams),n=e.tileSize||this.options.tileSize;e.detectRetina&&o.Browser.retina?i.width=i.height=2*n:i.width=i.height=n;for(var s in e)this.options.hasOwnProperty(s)||"crs"===s||(i[s]=e[s]);this.wmsParams=i,o.setOptions(this,e)},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._map,i=this.options.tileSize,n=t.multiplyBy(i),s=n.add([i,i]),a=this._crs.project(e.unproject(n,t.z)),r=this._crs.project(e.unproject(s,t.z)),h=this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[r.y,a.x,a.y,r.x].join(","):[a.x,r.y,r.x,a.y].join(","),l=o.Util.template(this._url,{s:this._getSubdomain(t)});return l+o.Util.getParamString(this.wmsParams,l,!0)+"&BBOX="+h},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.TileLayer.Canvas=o.TileLayer.extend({options:{async:!1},initialize:function(t){o.setOptions(this,t)},redraw:function(){this._map&&(this._reset({hard:!0}),this._update());for(var t in this._tiles)this._redrawTile(this._tiles[t]);return this},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTile:function(){var t=o.DomUtil.create("canvas","leaflet-tile");return t.width=t.height=this.options.tileSize,t.onselectstart=t.onmousemove=o.Util.falseFn,t},_loadTile:function(t,e){t._layer=this,t._tilePoint=e,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),o.tileLayer.canvas=function(t){return new o.TileLayer.Canvas(t)},o.ImageOverlay=o.Class.extend({includes:o.Mixin.Events,options:{opacity:1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&o.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},setUrl:function(t){this._url=t,this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=o.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&o.Browser.any3d?o.DomUtil.addClass(this._image,"leaflet-zoom-animated"):o.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),o.extend(this._image,{galleryimg:"no",onselectstart:o.Util.falseFn,onmousemove:o.Util.falseFn,onload:o.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var e=this._map,i=this._image,n=e.getZoomScale(t.zoom),s=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=e._latLngToNewLayerPoint(s,t.zoom,t.center),h=e._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/n)));i.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(l)+" scale("+n+") "},_reset:function(){var t=this._image,e=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),i=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(e);o.DomUtil.setPosition(t,e),t.style.width=i.x+"px",t.style.height=i.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({options:{className:""},initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n;return n=e&&"IMG"===e.tagName?this._createImg(i,e):this._createImg(i),this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i,n=this.options,s=o.point(n[e+"Size"]);i="shadow"===e?o.point(n.shadowAnchor||n.iconAnchor):o.point(n.iconAnchor),!i&&s&&(i=s.divideBy(2,!0)),t.className="leaflet-marker-"+e+" "+n.className,i&&(t.style.marginLeft=-i.x+"px",t.style.marginTop=-i.y+"px"),s&&(t.style.width=s.x+"px",t.style.height=s.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];o.Browser.retina&&"icon"===t&&(t+="-2x");var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s,a=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=a.length;i>t;t++)if(n=a[t].src,o=n.match(r))return s=n.split(r)[0],(s?s+"/":"")+"images"}(),o.Marker=o.Class.extend({includes:o.Mixin.Events,options:{icon:new o.Icon.Default,title:"",alt:"",clickable:!0,draggable:!1,keyboard:!0,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),this.fire("add"),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this.dragging&&this.dragging.disable(),this._removeIcon(),this._removeShadow(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup),this},update:function(){return this._icon&&this._setPos(this._map.latLngToLayerPoint(this._latlng).round()),this},_initIcon:function(){var t=this.options,e=this._map,i=e.options.zoomAnimation&&e.options.markerZoomAnimation,n=i?"leaflet-zoom-animated":"leaflet-zoom-hide",s=t.icon.createIcon(this._icon),a=!1;s!==this._icon&&(this._icon&&this._removeIcon(),a=!0,t.title&&(s.title=t.title),t.alt&&(s.alt=t.alt)),o.DomUtil.addClass(s,n),t.keyboard&&(s.tabIndex="0"),this._icon=s,this._initInteraction(),t.riseOnHover&&o.DomEvent.on(s,"mouseover",this._bringToFront,this).on(s,"mouseout",this._resetZIndex,this);var r=t.icon.createShadow(this._shadow),h=!1;r!==this._shadow&&(this._removeShadow(),h=!0),r&&o.DomUtil.addClass(r,n),this._shadow=r,t.opacity<1&&this._updateOpacity();var l=this._map._panes;a&&l.markerPane.appendChild(this._icon),r&&h&&l.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&o.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),this._map._panes.markerPane.removeChild(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];o.DomUtil.addClass(t,"leaflet-clickable"),o.DomEvent.on(t,"click",this._onMouseClick,this),o.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;i<e.length;i++)o.DomEvent.on(t,e[i],this._fireMouseEvent,this);o.Handler.MarkerDrag&&(this.dragging=new o.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var e=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||e)&&o.DomEvent.stopPropagation(t),e||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t,latlng:this._latlng})},_onKeyPress:function(t){13===t.keyCode&&this.fire("click",{originalEvent:t,latlng:this._latlng})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t,latlng:this._latlng}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&o.DomEvent.preventDefault(t),"mousedown"!==t.type?o.DomEvent.stopPropagation(t):o.DomEvent.preventDefault(t)},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){o.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&o.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),o.marker=function(t,e){return new o.Marker(t,e)},o.DivIcon=o.Icon.extend({options:{iconSize:[12,12],className:"leaflet-div-icon",html:!1},createIcon:function(t){var i=t&&"DIV"===t.tagName?t:e.createElement("div"),n=this.options;return n.html!==!1?i.innerHTML=n.html:i.innerHTML="",n.bgPos&&(i.style.backgroundPosition=-n.bgPos.x+"px "+-n.bgPos.y+"px"),this._setIconStyles(i,"icon"),i},createShadow:function(){return null}}),o.divIcon=function(t){return new o.DivIcon(t)},o.Map.mergeOptions({closePopupOnClick:!0}),o.Popup=o.Class.extend({includes:o.Mixin.Events,options:{minWidth:50,maxWidth:300,autoPan:!0,closeButton:!0,offset:[0,7],autoPanPadding:[5,5],keepInView:!1,className:"",zoomAnimation:!0},initialize:function(t,e){o.setOptions(this,t),this._source=e,this._animated=o.Browser.any3d&&this.options.zoomAnimation,this._isOpen=!1},onAdd:function(t){this._map=t,this._container||this._initLayout();var e=t.options.fadeAnimation;e&&o.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on(this._getEvents(),this),this.update(),e&&o.DomUtil.setOpacity(this._container,1),this.fire("open"),t.fire("popupopen",{popup:this}),this._source&&this._source.fire("popupopen",{popup:this})},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),o.Util.falseFn(this._container.offsetWidth),t.off(this._getEvents(),this),t.options.fadeAnimation&&o.DomUtil.setOpacity(this._container,0),this._map=null,this.fire("close"),t.fire("popupclose",{popup:this}),this._source&&this._source.fire("popupclose",{popup:this})},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_getEvents:function(){var t={viewreset:this._updatePosition};return this._animated&&(t.zoomanim=this._zoomAnimation),("closeOnClick"in this.options?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this._close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_close:function(){this._map&&this._map.closePopup(this)},_initLayout:function(){var t,e="leaflet-popup",i=e+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),n=this._container=o.DomUtil.create("div",i);this.options.closeButton&&(t=this._closeButton=o.DomUtil.create("a",e+"-close-button",n),t.href="#close",t.innerHTML="&#215;",o.DomEvent.disableClickPropagation(t),o.DomEvent.on(t,"click",this._onCloseButtonClick,this));var s=this._wrapper=o.DomUtil.create("div",e+"-content-wrapper",n);o.DomEvent.disableClickPropagation(s),this._contentNode=o.DomUtil.create("div",e+"-content",s),o.DomEvent.disableScrollPropagation(this._contentNode),o.DomEvent.on(s,"contextmenu",o.DomEvent.stopPropagation),this._tipContainer=o.DomUtil.create("div",e+"-tip-container",n),this._tip=o.DomUtil.create("div",e+"-tip",this._tipContainer)},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,e=t.style;e.width="",e.whiteSpace="nowrap";var i=t.offsetWidth;i=Math.min(i,this.options.maxWidth),i=Math.max(i,this.options.minWidth),e.width=i+1+"px",e.whiteSpace="",e.height="";var n=t.offsetHeight,s=this.options.maxHeight,a="leaflet-popup-scrolled";s&&n>s?(e.height=s+"px",o.DomUtil.addClass(t,a)):o.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=this._animated,i=o.point(this.options.offset);e&&o.DomUtil.setPosition(this._container,t),this._containerBottom=-i.y-(e?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+i.x+(e?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._animated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),a=o.point(this.options.autoPanPadding),r=o.point(this.options.autoPanPaddingTopLeft||a),h=o.point(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){if(this.closePopup(),!(t instanceof o.Popup)){var n=t;t=new o.Popup(i).setLatLng(e).setContent(n)}return t._isOpen=!0,this._popup=t,this.addLayer(t)},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&(this.removeLayer(t),t._isOpen=!1),this}}),o.Marker.include({openPopup:function(){return this._popup&&this._map&&!this._map.hasLayer(this._popup)&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(){return this._popup&&(this._popup._isOpen?this.closePopup():this.openPopup()),this},bindPopup:function(t,e){var i=o.point(this.options.icon.options.popupAnchor||[0,0]);return i=i.add(o.Popup.prototype.options.offset),e&&e.offset&&(i=i.add(e.offset)),e=o.extend({offset:i},e),this._popupHandlersAdded||(this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popupHandlersAdded=!0),t instanceof o.Popup?(o.setOptions(t,e),this._popup=t,t._source=this):this._popup=new o.Popup(e,this).setContent(t),this},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this),this._popupHandlersAdded=!1),this},getPopup:function(){return this._popup},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.LayerGroup=o.Class.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]),delete this._layers[e],this},hasLayer:function(t){return t?t in this._layers||this.getLayerId(t)in this._layers:!1},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({includes:o.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},addLayer:function(t){return this.hasLayer(t)?this:("on"in t&&t.on(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),"off"in t&&t.off(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})):this},bindPopup:function(t,e){return this._popupContent=t,this._popupOptions=e,this.invoke("bindPopup",t,e)},openPopup:function(t){for(var e in this._layers){this._layers[e].openPopup(t);break}return this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;return this.eachLayer(function(e){t.extend(e instanceof o.Marker?e.getLatLng():e.getBounds())}),t},_propagateEvent:function(t){t=o.extend({layer:t.target,target:this},t),this.fire(t.type,t)}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Path=o.Class.extend({includes:[o.Mixin.Events],statics:{CLIP_PADDING:function(){var e=o.Browser.mobile?1280:2e3,i=(e/Math.max(t.outerWidth,t.outerHeight)-1)/2;return Math.max(0,Math.min(.5,i))}()},options:{stroke:!0,color:"#0033ff",dashArray:null,lineCap:null,lineJoin:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){o.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,o.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return o.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),o.Map.include({_updatePathViewport:function(){var t=o.Path.CLIP_PADDING,e=this.getSize(),i=o.DomUtil.getPosition(this._mapPane),n=i.multiplyBy(-1)._subtract(e.multiplyBy(t)._round()),s=n.add(e.multiplyBy(1+2*t)._round());this._pathViewport=new o.Bounds(n,s)}}),o.Path.SVG_NS="http://www.w3.org/2000/svg",o.Browser.svg=!(!e.createElementNS||!e.createElementNS(o.Path.SVG_NS,"svg").createSVGRect),o.Path=o.Path.extend({statics:{SVG:o.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,e=this._container;return e&&t.lastChild!==e&&t.appendChild(e),this},bringToBack:function(){var t=this._map._pathRoot,e=this._container,i=t.firstChild;return e&&i!==e&&t.insertBefore(e,i),this},getPathString:function(){},_createElement:function(t){return e.createElementNS(o.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this.options.className&&o.DomUtil.addClass(this._path,this.options.className),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this.options.pointerEvents&&this._path.setAttribute("pointer-events",this.options.pointerEvents),this.options.clickable||this.options.pointerEvents||this._path.setAttribute("pointer-events","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray"),this.options.lineCap&&this._path.setAttribute("stroke-linecap",this.options.lineCap),this.options.lineJoin&&this._path.setAttribute("stroke-linejoin",this.options.lineJoin)):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(o.Browser.svg||!o.Browser.vml)&&o.DomUtil.addClass(this._path,"leaflet-clickable"),o.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],e=0;e<t.length;e++)o.DomEvent.on(this._container,t[e],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this._map&&this.hasEventListeners(t.type)){var e=this._map,i=e.mouseEventToContainerPoint(t),n=e.containerPointToLayerPoint(i),s=e.layerPointToLatLng(n);this.fire(t.type,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t}),"contextmenu"===t.type&&o.DomEvent.preventDefault(t),"mousemove"!==t.type&&o.DomEvent.stopPropagation(t)}}}),o.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=o.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&o.Browser.any3d?(o.DomUtil.addClass(this._pathRoot,"leaflet-zoom-animated"),
-this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):o.DomUtil.addClass(this._pathRoot,"leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())},_animatePathZoom:function(t){var e=this.getZoomScale(t.zoom),i=this._getCenterOffset(t.center)._multiplyBy(-e)._add(this._pathViewport.min);this._pathRoot.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(i)+" scale("+e+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max,n=i.x-e.x,s=i.y-e.y,a=this._pathRoot,r=this._panes.overlayPane;o.Browser.mobileWebkit&&r.removeChild(a),o.DomUtil.setPosition(a,e),a.setAttribute("width",n),a.setAttribute("height",s),a.setAttribute("viewBox",[e.x,e.y,n,s].join(" ")),o.Browser.mobileWebkit&&r.appendChild(a)}}}),o.Path.include({bindPopup:function(t,e){return t instanceof o.Popup?this._popup=t:((!this._popup||e)&&(this._popup=new o.Popup(e,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),o.Browser.vml=!o.Browser.svg&&function(){try{var t=e.createElement("div");t.innerHTML='<v:shape adj="1"/>';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.Path=o.Browser.svg||!o.Browser.vml?o.Path:o.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("<lvml:"+t+' class="lvml">')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");o.DomUtil.addClass(t,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:"")),this.options.clickable&&o.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,e=this._fill,i=this.options,n=this._container;n.stroked=i.stroke,n.filled=i.fill,i.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",n.appendChild(t)),t.weight=i.weight+"px",t.color=i.color,t.opacity=i.opacity,i.dashArray?t.dashStyle=o.Util.isArray(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):t.dashStyle="",i.lineCap&&(t.endcap=i.lineCap.replace("butt","flat")),i.lineJoin&&(t.joinstyle=i.lineJoin)):t&&(n.removeChild(t),this._stroke=null),i.fill?(e||(e=this._fill=this._createElement("fill"),n.appendChild(e)),e.color=i.fillColor||i.color,e.opacity=i.fillOpacity):e&&(n.removeChild(e),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),o.Map.include(o.Browser.svg||!o.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=e.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.Path=o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?o.Path:o.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return o.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&(this._map.off("click",this._onClick,this),this._map.off("mousemove",this._onMouseMove,this)),this._requestUpdate(),this.fire("remove"),this._map=null},_requestUpdate:function(){this._map&&!o.Path._updateRequest&&(o.Path._updateRequest=o.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){o.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color),t.lineCap&&(this._ctx.lineCap=t.lineCap),t.lineJoin&&(this._ctx.lineJoin=t.lineJoin)},_drawPath:function(){var t,e,i,n,s,a;for(this._ctx.beginPath(),t=0,i=this._parts.length;i>t;t++){for(e=0,n=this._parts[t].length;n>e;e++)s=this._parts[t][e],a=(0===e?"move":"line")+"To",this._ctx[a](s.x,s.y);this instanceof o.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,e=this.options;this._drawPath(),t.save(),this._updateStyle(),e.fill&&(t.globalAlpha=e.fillOpacity,t.fill(e.fillRule||"evenodd")),e.stroke&&(t.globalAlpha=e.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&(this._map.on("mousemove",this._onMouseMove,this),this._map.on("click dblclick contextmenu",this._fireMouseEvent,this))},_fireMouseEvent:function(t){this._containsPoint(t.layerPoint)&&this.fire(t.type,t)},_onMouseMove:function(t){this._map&&!this._map._animatingZoom&&(this._containsPoint(t.layerPoint)?(this._ctx.canvas.style.cursor="pointer",this._mouseInside=!0,this.fire("mouseover",t)):this._mouseInside&&(this._ctx.canvas.style.cursor="",this._mouseInside=!1,this.fire("mouseout",t)))}}),o.Map.include(o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?{}:{_initPathRoot:function(){var t,i=this._pathRoot;i||(i=this._pathRoot=e.createElement("canvas"),i.style.position="absolute",t=this._canvasCtx=i.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(i),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max.subtract(e),n=this._pathRoot;o.DomUtil.setPosition(n,e),n.width=i.x,n.height=i.y,n.getContext("2d").translate(-e.x,-e.y)}}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var a,r=[];for(a=0;n>a;a++)s[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,e,i,n,o){var s,a,r,h=0;for(a=n+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[n],t[o],!0),r>h&&(s=a,h=r);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n){var o,s,a,r=n?this._lastCode:this._getBitCode(t,i),h=this._getBitCode(e,i);for(this._lastCode=h;;){if(!(r|h))return[t,e];if(r&h)return!1;o=r||h,s=this._getEdgeIntersection(t,e,o,i),a=this._getBitCode(s,i),o===r?(t=s,r=a):(e=s,h=a)}},_getEdgeIntersection:function(t,e,i,n){var s=e.x-t.x,a=e.y-t.y,r=n.min,h=n.max;return 8&i?new o.Point(t.x+s*(h.y-t.y)/a,h.y):4&i?new o.Point(t.x+s*(r.y-t.y)/a,r.y):2&i?new o.Point(h.x,t.y+a*(h.x-t.x)/s):1&i?new o.Point(r.x,t.y+a*(r.x-t.x)/s):void 0},_getBitCode:function(t,e){var i=0;return t.x<e.min.x?i|=1:t.x>e.max.x&&(i|=2),t.y<e.min.y?i|=4:t.y>e.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,a=e.x,r=e.y,h=i.x-a,l=i.y-r,u=h*h+l*l;return u>0&&(s=((t.x-a)*h+(t.y-r)*l)/u,s>1?(a=i.x,r=i.y):s>0&&(a+=h*s,r+=l*s)),h=t.x-a,l=t.y-r,n?h*h+l*l:new o.Point(a,r)}},o.Polyline=o.Path.extend({initialize:function(t,e){o.Path.prototype.initialize.call(this,e),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,e=this._latlngs.length;e>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,e=this._parts.length,i="";e>t;t++)i+=this._getPathPartStr(this._parts[t]);return i},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(o.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs,!0),this.redraw(),t},closestLayerPoint:function(t){for(var e,i,n=1/0,s=this._parts,a=null,r=0,h=s.length;h>r;r++)for(var l=s[r],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=o.LineUtil._sqClosestPointOnSegment(t,e,i,!0);n>d&&(n=d,a=o.LineUtil._sqClosestPointOnSegment(t,e,i))}return a&&(a.distance=Math.sqrt(n)),a},getBounds:function(){return new o.LatLngBounds(this.getLatLngs())},_convertLatLngs:function(t,e){var i,n,s=e?t:[];for(i=0,n=t.length;n>i;i++){if(o.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;s[i]=o.latLng(t[i])}return s},_initEvents:function(){o.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var e,i=o.Path.VML,n=0,s=t.length,a="";s>n;n++)e=t[n],i&&e._round(),a+=(n?"L":"M")+e.x+" "+e.y;return a},_clipPoints:function(){var t,e,i,n=this._originalPoints,s=n.length;if(this.options.noClip)return void(this._parts=[n]);this._parts=[];var a=this._parts,r=this._map._pathViewport,h=o.LineUtil;for(t=0,e=0;s-1>t;t++)i=h.clipSegment(n[t],n[t+1],r,t),i&&(a[e]=a[e]||[],a[e].push(i[0]),(i[1]!==n[t+1]||t===s-2)&&(a[e].push(i[1]),e++))},_simplifyPoints:function(){for(var t=this._parts,e=o.LineUtil,i=0,n=t.length;n>i;i++)t[i]=e.simplify(t[i],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),o.Path.prototype._updatePath.call(this))}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e){var i,n,s,a,r,h,l,u,c,d=[1,4,2,8],p=o.LineUtil;for(n=0,l=t.length;l>n;n++)t[n]._code=p._getBitCode(t[n],e);for(a=0;4>a;a++){for(u=d[a],i=[],n=0,l=t.length,s=l-1;l>n;s=n++)r=t[n],h=t[s],r._code&u?h._code&u||(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)):(h._code&u&&(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)),i.push(r));t=i}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},initialize:function(t,e){o.Polyline.prototype.initialize.call(this,t,e),this._initWithHoles(t)},_initWithHoles:function(t){var e,i,n;if(t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0])for(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1),e=0,i=this._holes.length;i>e;e++)n=this._holes[e]=this._convertLatLngs(this._holes[e]),n[0].equals(n[n.length-1])&&n.pop();t=this._latlngs,t.length>=2&&t[0].equals(t[t.length-1])&&t.pop()},projectLatlngs:function(){if(o.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,e,i,n;for(t=0,i=this._holes.length;i>t;t++)for(this._holePoints[t]=[],e=0,n=this._holes[t].length;n>e;e++)this._holePoints[t][e]=this._map.latLngToLayerPoint(this._holes[t][e])}},setLatLngs:function(t){return t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0]?(this._initWithHoles(t),this.redraw()):o.Polyline.prototype.setLatLngs.call(this,t)},_clipPoints:function(){var t=this._originalPoints,e=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var i=0,n=this._parts.length;n>i;i++){var s=o.PolyUtil.clipPolygon(this._parts[i],this._map._pathViewport);s.length&&e.push(s)}this._parts=e}},_getPathPartStr:function(t){var e=o.Polyline.prototype._getPathPartStr.call(this,t);return e+(o.Browser.svg?"z":"x")}}),o.polygon=function(t,e){return new o.Polygon(t,e)},function(){function t(t){return o.FeatureGroup.extend({initialize:function(t,e){this._layers={},this._options=e,this.setLatLngs(t)},setLatLngs:function(e){var i=0,n=e.length;for(this.eachLayer(function(t){n>i?t.setLatLngs(e[i++]):this.removeLayer(t)},this);n>i;)this.addLayer(new t(e[i++],this._options));return this},getLatLngs:function(){var t=[];return this.eachLayer(function(e){t.push(e.getLatLngs())}),t}})}o.MultiPolyline=t(o.Polyline),o.MultiPolygon=t(o.Polygon),o.multiPolyline=function(t,e){return new o.MultiPolyline(t,e)},o.multiPolygon=function(t,e){return new o.MultiPolygon(t,e)}}(),o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.Circle=o.Path.extend({initialize:function(t,e,i){o.Path.prototype.initialize.call(this,i),this._latlng=o.latLng(t),this._mRadius=e},options:{fill:!0},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),e=this._latlng,i=this._map.latLngToLayerPoint([e.lat,e.lng-t]);this._point=this._map.latLngToLayerPoint(e),this._radius=Math.max(this._point.x-i.x,1)},getBounds:function(){var t=this._getLngRadius(),e=this._mRadius/40075017*360,i=this._latlng;return new o.LatLngBounds([i.lat-e,i.lng-t],[i.lat+e,i.lng+t])},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,e=this._radius;return this._checkIfEmpty()?"":o.Browser.svg?"M"+t.x+","+(t.y-e)+"A"+e+","+e+",0,1,1,"+(t.x-.1)+","+(t.y-e)+" z":(t._round(),e=Math.round(e),"AL "+t.x+","+t.y+" "+e+","+e+" 0,23592600")},getRadius:function(){return this._mRadius},_getLatRadius:function(){return this._mRadius/40075017*360},_getLngRadius:function(){return this._getLatRadius()/Math.cos(o.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,e=this._radius,i=this._point;return i.x-e>t.max.x||i.y-e>t.max.y||i.x+e<t.min.x||i.y+e<t.min.y}}),o.circle=function(t,e,i){return new o.Circle(t,e,i)},o.CircleMarker=o.Circle.extend({options:{radius:10,weight:2},initialize:function(t,e){o.Circle.prototype.initialize.call(this,t,null,e),this._radius=this.options.radius},projectLatlngs:function(){this._point=this._map.latLngToLayerPoint(this._latlng)},_updateStyle:function(){o.Circle.prototype._updateStyle.call(this),this.setRadius(this.options.radius)},setLatLng:function(t){return o.Circle.prototype.setLatLng.call(this,t),this._popup&&this._popup._isOpen&&this._popup.setLatLng(t),this},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius}}),o.circleMarker=function(t,e){return new o.CircleMarker(t,e)},o.Polyline.include(o.Path.CANVAS?{_containsPoint:function(t,e){var i,n,s,a,r,h,l,u=this.options.weight/2;for(o.Browser.touch&&(u+=10),i=0,a=this._parts.length;a>i;i++)for(l=this._parts[i],n=0,r=l.length,s=r-1;r>n;s=n++)if((e||0!==n)&&(h=o.LineUtil.pointToSegmentDistance(t,l[s],l[n]),u>=h))return!0;return!1}}:{}),o.Polygon.include(o.Path.CANVAS?{_containsPoint:function(t){var e,i,n,s,a,r,h,l,u=!1;if(o.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],a=0,l=e.length,r=l-1;l>a;r=a++)i=e[a],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u}}:{}),o.Circle.include(o.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var e=this._point,i=this.options.stroke?this.options.weight/2:0;return t.distanceTo(e)<=this._radius+i}}:{}),o.CircleMarker.include(o.Path.CANVAS?{_updateStyle:function(){o.Path.prototype._updateStyle.call(this)}}:{}),o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(s[e]);return this}var a=this.options;if(!a.filter||a.filter(t)){var r=o.GeoJSON.geometryToLayer(t,a.pointToLayer,a.coordsToLatLng,a);return r.feature=o.GeoJSON.asFeature(t),r.defaultOptions=r.options,this.resetStyle(r),a.onEachFeature&&a.onEachFeature(t,r),this.addLayer(r)}},resetStyle:function(t){var e=this.options.style;e&&(o.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,e))},setStyle:function(t){this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e,i,n){var s,a,r,h,l="Feature"===t.type?t.geometry:t,u=l.coordinates,c=[];switch(i=i||this.coordsToLatLng,l.type){case"Point":return s=i(u),e?e(t,s):new o.Marker(s);case"MultiPoint":for(r=0,h=u.length;h>r;r++)s=i(u[r]),c.push(e?e(t,s):new o.Marker(s));return new o.FeatureGroup(c);case"LineString":return a=this.coordsToLatLngs(u,0,i),new o.Polyline(a,n);case"Polygon":if(2===u.length&&!u[1].length)throw new Error("Invalid GeoJSON object.");return a=this.coordsToLatLngs(u,1,i),new o.Polygon(a,n);case"MultiLineString":return a=this.coordsToLatLngs(u,1,i),new o.MultiPolyline(a,n);case"MultiPolygon":return a=this.coordsToLatLngs(u,2,i),new o.MultiPolygon(a,n);case"GeometryCollection":for(r=0,h=l.geometries.length;h>r;r++)c.push(this.geometryToLayer({geometry:l.geometries[r],type:"Feature",properties:t.properties},e,i,n));return new o.FeatureGroup(c);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){var n,o,s,a=[];for(o=0,s=t.length;s>o;o++)n=e?this.coordsToLatLngs(t[o],e-1,i):(i||this.coordsToLatLng)(t[o]),a.push(n);return a},latLngToCoords:function(t){var e=[t.lng,t.lat];return t.alt!==i&&e.push(t.alt),e},latLngsToCoords:function(t){for(var e=[],i=0,n=t.length;n>i;i++)e.push(o.GeoJSON.latLngToCoords(t[i]));return e},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var a={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(a),o.Circle.include(a),o.CircleMarker.include(a),o.Polyline.include({toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"LineString",coordinates:o.GeoJSON.latLngsToCoords(this.getLatLngs())})}}),o.Polygon.include({toGeoJSON:function(){var t,e,i,n=[o.GeoJSON.latLngsToCoords(this.getLatLngs())];if(n[0].push(n[0][0]),this._holes)for(t=0,e=this._holes.length;e>t;t++)i=o.GeoJSON.latLngsToCoords(this._holes[t]),i.push(i[0]),n.push(i);return o.GeoJSON.getFeature(this,{type:"Polygon",coordinates:n})}}),function(){function t(t){return function(){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:t,coordinates:e})}}o.MultiPolyline.include({toGeoJSON:t("MultiLineString")}),o.MultiPolygon.include({toGeoJSON:t("MultiPolygon")}),o.LayerGroup.include({toGeoJSON:function(){var e,i=this.feature&&this.feature.geometry,n=[];if(i&&"MultiPoint"===i.type)return t("MultiPoint").call(this);var s=i&&"GeometryCollection"===i.type;return this.eachLayer(function(t){t.toGeoJSON&&(e=t.toGeoJSON(),n.push(s?e.geometry:o.GeoJSON.asFeature(e)))}),s?o.GeoJSON.getFeature(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}})}(),o.geoJson=function(t,e){return new o.GeoJSON(t,e)},o.DomEvent={addListener:function(t,e,i,n){var s,a,r,h=o.stamp(i),l="_leaflet_"+e+h;return t[l]?this:(s=function(e){return i.call(n||t,e||o.DomEvent._getEvent())},o.Browser.pointer&&0===e.indexOf("touch")?this.addPointerListener(t,e,s,h):(o.Browser.touch&&"dblclick"===e&&this.addDoubleTapListener&&this.addDoubleTapListener(t,s,h),"addEventListener"in t?"mousewheel"===e?(t.addEventListener("DOMMouseScroll",s,!1),t.addEventListener(e,s,!1)):"mouseenter"===e||"mouseleave"===e?(a=s,r="mouseenter"===e?"mouseover":"mouseout",s=function(e){return o.DomEvent._checkMouse(t,e)?a(e):void 0},t.addEventListener(r,s,!1)):"click"===e&&o.Browser.android?(a=s,s=function(t){return o.DomEvent._filterClick(t,a)},t.addEventListener(e,s,!1)):t.addEventListener(e,s,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[l]=s,this))},removeListener:function(t,e,i){var n=o.stamp(i),s="_leaflet_"+e+n,a=t[s];return a?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,n):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,n):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(e,a,!1)):"mouseenter"===e||"mouseleave"===e?t.removeEventListener("mouseenter"===e?"mouseover":"mouseout",a,!1):t.removeEventListener(e,a,!1):"detachEvent"in t&&t.detachEvent("on"+e,a),t[s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,"mousewheel",e).on(t,"MozMousePixelScroll",e)},disableClickPropagation:function(t){for(var e=o.DomEvent.stopPropagation,i=o.Draggable.START.length-1;i>=0;i--)o.DomEvent.on(t,o.Draggable.START[i],e);return o.DomEvent.on(t,"click",o.DomEvent._fakeStop).on(t,"dblclick",e)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_checkMouse:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_getEvent:function(){var e=t.event;if(!e)for(var i=arguments.callee.caller;i&&(e=i.arguments[0],!e||t.Event!==e.constructor);)i=i.caller;return e},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,e(t))}},o.DomEvent.on=o.DomEvent.addListener,o.DomEvent.off=o.DomEvent.removeListener,o.Draggable=o.Class.extend({includes:o.Mixin.Events,statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e){this._element=t,this._dragStartTarget=e||t},enable:function(){if(!this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.on(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.off(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(this._moved=!1,!t.shiftKey&&(1===t.which||1===t.button||t.touches)&&(o.DomEvent.stopPropagation(t),!o.Draggable._disabled&&(o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),!this._moving))){var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)))},_updatePosition:function(){this.fire("predrag"),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove).off(e,o.Draggable.END[t],this._onUp);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:o.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this),t.whenReady(this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,e=this._lastPos=this._draggable._newPos;this._positions.push(e),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,a=Math.abs(o+i)<Math.abs(s+i)?o:s;this._draggable._newPos.x=a},_onDragEnd:function(t){var e=this._map,i=e.options,n=+new Date-this._lastTime,s=!i.inertia||n>i.inertiaThreshold||!this._positions[0];if(e.fire("dragend",t),s)e.fire("moveend");else{var a=this._lastPos.subtract(this._positions[0]),r=(this._lastTime+n-this._times[0])/1e3,h=i.easeLinearity,l=a.multiplyBy(h/r),u=l.distanceTo([0,0]),c=Math.min(i.inertiaMaxSpeed,u),d=l.multiplyBy(c/u),p=c/(i.inertiaDeceleration*h),_=d.multiplyBy(-p/2).round();_.x&&_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:p,easeLinearity:h,noMoveStart:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom()+(t.originalEvent.shiftKey?-1:1);"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),o.DomEvent.on(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll),o.DomEvent.off(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t);this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var i=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),i),o.DomEvent.preventDefault(t),o.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,i,n){function s(t){var e;if(o.Browser.pointer?(_.push(t.pointerId),e=_.length):e=t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);h=t.touches?t.touches[0]:t,l=n>0&&u>=n,r=i}}function a(t){if(o.Browser.pointer){var e=_.indexOf(t.pointerId);if(-1===e)return;_.splice(e,1)}if(l){if(o.Browser.pointer){var n,s={};for(var a in h)n=h[a],"function"==typeof n?s[a]=n.bind(h):s[a]=n;h=s}h.type="dblclick",i(h),r=null}}var r,h,l=!1,u=250,c="_leaflet_",d=this._touchstart,p=this._touchend,_=[];t[c+d+n]=s,t[c+p+n]=a;var m=o.Browser.pointer?e.documentElement:t;return t.addEventListener(d,s,!1),m.addEventListener(p,a,!1),o.Browser.pointer&&m.addEventListener(o.DomEvent.POINTER_CANCEL,a,!1),this},removeDoubleTapListener:function(t,i){var n="_leaflet_";return t.removeEventListener(this._touchstart,t[n+this._touchstart+i],!1),(o.Browser.pointer?e.documentElement:t).removeEventListener(this._touchend,t[n+this._touchend+i],!1),o.Browser.pointer&&e.documentElement.removeEventListener(o.DomEvent.POINTER_CANCEL,t[n+this._touchend+i],!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:!1,addPointerListener:function(t,e,i,n){switch(e){case"touchstart":return this.addPointerListenerStart(t,e,i,n);
-case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&o.DomEvent.preventDefault(t);for(var e=!1,i=0;i<r.length;i++)if(r[i].pointerId===t.pointerId){e=!0;break}e||r.push(t),t.touches=r.slice(),t.changedTouches=[t],n(t)};if(t[a+"touchstart"+s]=h,t.addEventListener(this.POINTER_DOWN,h,!1),!this._pointerDocumentListener){var l=function(t){for(var e=0;e<r.length;e++)if(r[e].pointerId===t.pointerId){r.splice(e,1);break}};e.documentElement.addEventListener(this.POINTER_UP,l,!1),e.documentElement.addEventListener(this.POINTER_CANCEL,l,!1),this._pointerDocumentListener=!0}return this},addPointerListenerMove:function(t,e,i,n){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons){for(var e=0;e<a.length;e++)if(a[e].pointerId===t.pointerId){a[e]=t;break}t.touches=a.slice(),t.changedTouches=[t],i(t)}}var s="_leaflet_",a=this._pointers;return t[s+"touchmove"+n]=o,t.addEventListener(this.POINTER_MOVE,o,!1),this},addPointerListenerEnd:function(t,e,i,n){var o="_leaflet_",s=this._pointers,a=function(t){for(var e=0;e<s.length;e++)if(s[e].pointerId===t.pointerId){s.splice(e,1);break}t.touches=s.slice(),t.changedTouches=[t],i(t)};return t[o+"touchend"+n]=a,t.addEventListener(this.POINTER_UP,a,!1),t.addEventListener(this.POINTER_CANCEL,a,!1),this},removePointerListener:function(t,e,i){var n="_leaflet_",o=t[n+e+i];switch(e){case"touchstart":t.removeEventListener(this.POINTER_DOWN,o,!1);break;case"touchmove":t.removeEventListener(this.POINTER_MOVE,o,!1);break;case"touchend":t.removeEventListener(this.POINTER_UP,o,!1),t.removeEventListener(this.POINTER_CANCEL,o,!1)}return this}}),o.Map.mergeOptions({touchZoom:o.Browser.touch&&!o.Browser.android23,bounceAtZoomLimits:!0}),o.Map.TouchZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var n=i.mouseEventToLayerPoint(t.touches[0]),s=i.mouseEventToLayerPoint(t.touches[1]),a=i._getCenterLayerPoint();this._startCenter=n.add(s)._divideBy(2),this._startDist=n.distanceTo(s),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),i._panAnim&&i._panAnim.stop(),o.DomEvent.on(e,"touchmove",this._onTouchMove,this).on(e,"touchend",this._onTouchEnd,this),o.DomEvent.preventDefault(t)}},_onTouchMove:function(t){var e=this._map;if(t.touches&&2===t.touches.length&&this._zooming){var i=e.mouseEventToLayerPoint(t.touches[0]),n=e.mouseEventToLayerPoint(t.touches[1]);this._scale=i.distanceTo(n)/this._startDist,this._delta=i._add(n)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(e.options.bounceAtZoomLimits||!(e.getZoom()===e.getMinZoom()&&this._scale<1||e.getZoom()===e.getMaxZoom()&&this._scale>1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'<a href="http://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n='<input type="radio" class="leaflet-control-layers-selector" name="'+t+'"';i&&(n+=' checked="checked"'),n+="/>";var o=e.createElement("div");return o.innerHTML=n,o.firstChild},_addItem:function(t){var i,n=e.createElement("label"),s=this._map.hasLayer(t.layer);t.overlay?(i=e.createElement("input"),i.type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=s):i=this._createRadioElement("leaflet-base-layers",s),i.layerId=o.stamp(t.layer),o.DomEvent.on(i,"click",this._onInputClick,this);var a=e.createElement("span");a.innerHTML=" "+t.name,n.appendChild(i),n.appendChild(a);var r=t.overlay?this._overlaysList:this._baseLayersList;return r.appendChild(n),n},_onInputClick:function(){var t,e,i,n=this._form.getElementsByTagName("input"),o=n.length;for(this._handlingClick=!0,t=0;o>t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a}),setTimeout(o.bind(this._onZoomTransitionEnd,this),250)},this)},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),o.Util.requestAnimFrame(function(){this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)},this))}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth);var i=this._map.getZoom();(i>this.options.maxZoom||i<this.options.minZoom)&&this._clearBgBuffer(),this._animating=!1},_clearBgBuffer:function(){var t=this._map;!t||t._animatingZoom||t.touchZoom._zooming||(this._bgBuffer.innerHTML="",this._bgBuffer.style[o.DomUtil.TRANSFORM]="")},_prepareBgBuffer:function(){var t=this._tileContainer,e=this._bgBuffer,i=this._getLoadedTilesPercentage(e),n=this._getLoadedTilesPercentage(t);return e&&i>.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document);
\ No newline at end of file
diff --git a/www/js/vendor/leaflet.loading.js b/www/js/vendor/leaflet.loading.js
deleted file mode 100644
index 7fb7b780878440160ccfbdf7f9ca4b3304fd4297..0000000000000000000000000000000000000000
--- a/www/js/vendor/leaflet.loading.js
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * L.Control.Loading is a control that shows a loading indicator when tiles are
- * loading or when map-related AJAX requests are taking place.
- */
-
-(function () {
-
-    var console = window.console || {
-        error: function () {},
-        warn: function () {}
-    };
-
-    function defineLeafletLoading(L) {
-        L.Control.Loading = L.Control.extend({
-            options: {
-                delayIndicator: null,
-                position: 'topleft',
-                separate: false,
-                zoomControl: null,
-                spinjs: false,
-                spin: { 
-                    lines: 7, 
-                    length: 3, 
-                    width: 3, 
-                    radius: 5, 
-                    rotate: 13, 
-                    top: "83%"
-                }
-            },
-
-            initialize: function(options) {
-                L.setOptions(this, options);
-                this._dataLoaders = {};
-
-                // Try to set the zoom control this control is attached to from the 
-                // options
-                if (this.options.zoomControl !== null) {
-                    this.zoomControl = this.options.zoomControl;
-                }
-            },
-
-            onAdd: function(map) {
-                if (this.options.spinjs && (typeof Spinner !== 'function')) {
-                    return console.error("Leaflet.loading cannot load because you didn't load spin.js (http://fgnass.github.io/spin.js/), even though you set it in options.");
-                }
-                this._addLayerListeners(map);
-                this._addMapListeners(map);
-
-                // Try to set the zoom control this control is attached to from the map
-                // the control is being added to
-                if (!this.options.separate && !this.zoomControl) {
-                    if (map.zoomControl) {
-                        this.zoomControl = map.zoomControl;
-                    } else if (map.zoomsliderControl) {
-                        this.zoomControl = map.zoomsliderControl;
-                    }
-                }
-
-                // Create the loading indicator
-                var classes = 'leaflet-control-loading';
-                var container;
-                if (this.zoomControl && !this.options.separate) {
-                    // If there is a zoom control, hook into the bottom of it
-                    container = this.zoomControl._container;
-                    // These classes are no longer used as of Leaflet 0.6
-                    classes += ' leaflet-bar-part-bottom leaflet-bar-part last';
-
-                    // Loading control will be added to the zoom control. So the visible last element is not the
-                    // last dom element anymore. So add the part-bottom class.
-                    L.DomUtil.addClass(this._getLastControlButton(), 'leaflet-bar-part-bottom');
-                }
-                else {
-                    // Otherwise, create a container for the indicator
-                    container = L.DomUtil.create('div', 'leaflet-control-zoom leaflet-control-layer-container leaflet-bar');
-                }
-                this._indicatorContainer = container;
-                this._indicator = L.DomUtil.create('a', classes, container);
-                if (this.options.spinjs) {
-                    this._spinner = new Spinner(this.options.spin).spin();
-                    this._indicator.appendChild(this._spinner.el);
-                }
-                return container;
-            },
-
-            onRemove: function(map) {
-                this._removeLayerListeners(map);
-                this._removeMapListeners(map);
-            },
-
-            removeFrom: function (map) {
-                if (this.zoomControl && !this.options.separate) {
-                    // Override Control.removeFrom() to avoid clobbering the entire
-                    // _container, which is the same as zoomControl's
-                    this._container.removeChild(this._indicator);
-                    this._map = null;
-                    this.onRemove(map);
-                    return this;
-                }
-                else {
-                    // If this control is separate from the zoomControl, call the
-                    // parent method so we don't leave behind an empty container
-                    return L.Control.prototype.removeFrom.call(this, map);
-                }
-            },
-
-            addLoader: function(id) {
-                this._dataLoaders[id] = true;
-                if (this.options.delayIndicator && !this.delayIndicatorTimeout) {
-                    // If we are delaying showing the indicator and we're not
-                    // already waiting for that delay, set up a timeout.
-                    var that = this;
-                    this.delayIndicatorTimeout = setTimeout(function () {
-                        that.updateIndicator();
-                        that.delayIndicatorTimeout = null;
-                    }, this.options.delayIndicator);
-                }
-                else {
-                    // Otherwise show the indicator immediately
-                    this.updateIndicator();
-                }
-            },
-
-            removeLoader: function(id) {
-                delete this._dataLoaders[id];
-                this.updateIndicator();
-
-                // If removing this loader means we're in no danger of loading,
-                // clear the timeout. This prevents old delays from instantly 
-                // triggering the indicator.
-                if (this.options.delayIndicator && this.delayIndicatorTimeout && !this.isLoading()) {
-                    clearTimeout(this.delayIndicatorTimeout);
-                    this.delayIndicatorTimeout = null;
-                }
-            },
-
-            updateIndicator: function() {
-                if (this.isLoading()) {
-                    this._showIndicator();
-                }
-                else {
-                    this._hideIndicator();
-                }
-            },
-
-            isLoading: function() {
-                return this._countLoaders() > 0;
-            },
-
-            _countLoaders: function() {
-                var size = 0, key;
-                for (key in this._dataLoaders) {
-                    if (this._dataLoaders.hasOwnProperty(key)) size++;
-                }
-                return size;
-            },
-
-            _showIndicator: function() {
-                // Show loading indicator
-                L.DomUtil.addClass(this._indicator, 'is-loading');
-                L.DomUtil.addClass(this._indicatorContainer, 'is-loading');
-
-                // If zoomControl exists, make the zoom-out button not last
-                if (!this.options.separate) {
-                    if (this.zoomControl instanceof L.Control.Zoom) {
-                        L.DomUtil.removeClass(this._getLastControlButton(), 'leaflet-bar-part-bottom');
-                    }
-                    else if (typeof L.Control.Zoomslider === 'function' && this.zoomControl instanceof L.Control.Zoomslider) {
-                        L.DomUtil.removeClass(this.zoomControl._ui.zoomOut, 'leaflet-bar-part-bottom');
-                    }
-                }
-            },
-
-            _hideIndicator: function() {
-                // Hide loading indicator
-                L.DomUtil.removeClass(this._indicator, 'is-loading');
-                L.DomUtil.removeClass(this._indicatorContainer, 'is-loading');
-
-                // If zoomControl exists, make the zoom-out button last
-                if (!this.options.separate) {
-                    if (this.zoomControl instanceof L.Control.Zoom) {
-                        L.DomUtil.addClass(this._getLastControlButton(), 'leaflet-bar-part-bottom');
-                    }
-                    else if (typeof L.Control.Zoomslider === 'function' && this.zoomControl instanceof L.Control.Zoomslider) {
-                        L.DomUtil.addClass(this.zoomControl._ui.zoomOut, 'leaflet-bar-part-bottom');
-                    }
-                }
-            },
-
-            _getLastControlButton: function() {
-                var container = this.zoomControl._container,
-                    index = container.children.length - 1;
-
-                // Find the last visible control button that is not our loading
-                // indicator
-                while (index > 0) {
-                    var button = container.children[index];
-                    if (!(this._indicator === button || button.offsetWidth === 0 || button.offsetHeight === 0)) {
-                        break;
-                    }
-                    index--;
-                }
-
-                return container.children[index];
-            },
-
-            _handleLoading: function(e) {
-                this.addLoader(this.getEventId(e));
-            },
-
-            _handleBaseLayerChange: function (e) {
-                var that = this;
-
-                // Check for a target 'layer' that contains multiple layers, such as
-                // L.LayerGroup. This will happen if you have an L.LayerGroup in an
-                // L.Control.Layers.
-                if (e.layer && e.layer.eachLayer && typeof e.layer.eachLayer === 'function') {
-                    e.layer.eachLayer(function (layer) {
-                        that._handleBaseLayerChange({ layer: layer });
-                    });
-                }
-                else {
-                    // If we're changing to a canvas layer, don't handle loading
-                    // as canvas layers will not fire load events.
-                    if (!(L.TileLayer.Canvas && e.layer instanceof L.TileLayer.Canvas)) {
-                        that._handleLoading(e);
-                    }
-                }
-            },
-
-            _handleLoad: function(e) {
-                this.removeLoader(this.getEventId(e));
-            },
-
-            getEventId: function(e) {
-                if (e.id) {
-                    return e.id;
-                }
-                else if (e.layer) {
-                    return e.layer._leaflet_id;
-                }
-                return e.target._leaflet_id;
-            },
-
-            _layerAdd: function(e) {
-                if (!e.layer || !e.layer.on) return
-                try {
-                    e.layer.on({
-                        loading: this._handleLoading,
-                        load: this._handleLoad
-                    }, this);
-                }
-                catch (exception) {
-                    console.warn('L.Control.Loading: Tried and failed to add ' +
-                                 ' event handlers to layer', e.layer);
-                    console.warn('L.Control.Loading: Full details', exception);
-                }
-            },
-
-            _layerRemove: function(e) {
-                if (!e.layer || !e.layer.off) return;
-                try {
-                    e.layer.off({
-                        loading: this._handleLoading,
-                        load: this._handleLoad
-                    }, this);
-                }
-                catch (exception) {
-                    console.warn('L.Control.Loading: Tried and failed to remove ' +
-                                 'event handlers from layer', e.layer);
-                    console.warn('L.Control.Loading: Full details', exception);
-                }
-            },
-
-            _addLayerListeners: function(map) {
-                // Add listeners for begin and end of load to any layers already on the 
-                // map
-                map.eachLayer(function(layer) {
-                    if (!layer.on) return;
-                    layer.on({
-                        loading: this._handleLoading,
-                        load: this._handleLoad
-                    }, this);
-                }, this);
-
-                // When a layer is added to the map, add listeners for begin and end
-                // of load
-                map.on('layeradd', this._layerAdd, this);
-                map.on('layerremove', this._layerRemove, this);
-            },
-
-            _removeLayerListeners: function(map) {
-                // Remove listeners for begin and end of load from all layers
-                map.eachLayer(function(layer) {
-                    if (!layer.off) return;
-                    layer.off({
-                        loading: this._handleLoading,
-                        load: this._handleLoad
-                    }, this);
-                }, this);
-
-                // Remove layeradd/layerremove listener from map
-                map.off('layeradd', this._layerAdd, this);
-                map.off('layerremove', this._layerRemove, this);
-            },
-
-            _addMapListeners: function(map) {
-                // Add listeners to the map for (custom) dataloading and dataload
-                // events, eg, for AJAX calls that affect the map but will not be
-                // reflected in the above layer events.
-                map.on({
-                    baselayerchange: this._handleBaseLayerChange,
-                    dataloading: this._handleLoading,
-                    dataload: this._handleLoad,
-                    layerremove: this._handleLoad
-                }, this);
-            },
-
-            _removeMapListeners: function(map) {
-                map.off({
-                    baselayerchange: this._handleBaseLayerChange,
-                    dataloading: this._handleLoading,
-                    dataload: this._handleLoad,
-                    layerremove: this._handleLoad
-                }, this);
-            }
-        });
-
-        L.Map.addInitHook(function () {
-            if (this.options.loadingControl) {
-                this.loadingControl = new L.Control.Loading();
-                this.addControl(this.loadingControl);
-            }
-        });
-
-        L.Control.loading = function(options) {
-            return new L.Control.Loading(options);
-        };
-    }
-
-    if (typeof define === 'function' && define.amd) {
-        // Try to add leaflet.loading to Leaflet using AMD
-        define(['leaflet'], function (L) {
-            defineLeafletLoading(L);
-        });
-    }
-    else {
-        // Else use the global L
-        defineLeafletLoading(L);
-    }
-
-})();
diff --git a/www/js/vendor/leaflet.markercluster.js b/www/js/vendor/leaflet.markercluster.js
deleted file mode 100644
index c3fa30e302e1d3e403e867fb79c4c870c8b63237..0000000000000000000000000000000000000000
--- a/www/js/vendor/leaflet.markercluster.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- Leaflet.markercluster, Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps.
- https://github.com/Leaflet/Leaflet.markercluster
- (c) 2012-2013, Dave Leaver, smartrak
-*/
-!function(t,e,i){L.MarkerClusterGroup=L.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:"#222",opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(t){L.Util.setOptions(this,t),this.options.iconCreateFunction||(this.options.iconCreateFunction=this._defaultIconCreateFunction),this._featureGroup=L.featureGroup(),this._featureGroup.on(L.FeatureGroup.EVENTS,this._propagateEvent,this),this._nonPointGroup=L.featureGroup(),this._nonPointGroup.on(L.FeatureGroup.EVENTS,this._propagateEvent,this),this._inZoomAnimation=0,this._needsClustering=[],this._needsRemoving=[],this._currentShownBounds=null,this._queue=[];var e=L.DomUtil.TRANSITION&&this.options.animate;L.extend(this,e?this._withAnimation:this._noAnimation),this._markerCluster=e?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(t){if(t instanceof L.LayerGroup){var e=[];for(var i in t._layers)e.push(t._layers[i]);return this.addLayers(e)}if(!t.getLatLng)return this._nonPointGroup.addLayer(t),this;if(!this._map)return this._needsClustering.push(t),this;if(this.hasLayer(t))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(t,this._maxZoom),this._topClusterLevel._recalculateBounds();var n=t,s=this._map.getZoom();if(t.__parent)for(;n.__parent._zoom>=s;)n=n.__parent;return this._currentShownBounds.contains(n.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(t,n):this._animationAddLayerNonAnimated(t,n)),this},removeLayer:function(t){if(t instanceof L.LayerGroup){var e=[];for(var i in t._layers)e.push(t._layers[i]);return this.removeLayers(e)}return t.getLatLng?this._map?t.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(t)),this._removeLayer(t,!0),this._topClusterLevel._recalculateBounds(),this._featureGroup.hasLayer(t)&&(this._featureGroup.removeLayer(t),t.clusterShow&&t.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,t)&&this.hasLayer(t)&&this._needsRemoving.push(t),this):(this._nonPointGroup.removeLayer(t),this)},addLayers:function(t){var e,i,n,s,r=this._featureGroup,o=this._nonPointGroup,a=this.options.chunkedLoading,h=this.options.chunkInterval,u=this.options.chunkProgress;if(this._map){var _=0,l=(new Date).getTime(),d=L.bind(function(){for(var e=(new Date).getTime();_<t.length;_++){if(a&&0===_%200){var i=(new Date).getTime()-e;if(i>h)break}if(s=t[_],s.getLatLng){if(!this.hasLayer(s)&&(this._addLayer(s,this._maxZoom),s.__parent&&2===s.__parent.getChildCount())){var n=s.__parent.getAllChildMarkers(),c=n[0]===s?n[1]:n[0];r.removeLayer(c)}}else o.addLayer(s)}u&&u(_,t.length,(new Date).getTime()-l),_===t.length?(this._topClusterLevel._recalculateBounds(),this._featureGroup.eachLayer(function(t){t instanceof L.MarkerCluster&&t._iconNeedsUpdate&&t._updateIcon()}),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(d,this.options.chunkDelay)},this);d()}else{for(e=[],i=0,n=t.length;n>i;i++)s=t[i],s.getLatLng?this.hasLayer(s)||e.push(s):o.addLayer(s);this._needsClustering=this._needsClustering.concat(e)}return this},removeLayers:function(t){var e,i,n,s=this._featureGroup,r=this._nonPointGroup;if(!this._map){for(e=0,i=t.length;i>e;e++)n=t[e],this._arraySplice(this._needsClustering,n),r.removeLayer(n),this.hasLayer(n)&&this._needsRemoving.push(n);return this}if(this._unspiderfy)for(this._unspiderfy(),e=0,i=t.length;i>e;e++)n=t[e],this._unspiderfyLayer(n);for(e=0,i=t.length;i>e;e++)n=t[e],n.__parent?(this._removeLayer(n,!0,!0),s.hasLayer(n)&&(s.removeLayer(n),n.clusterShow&&n.clusterShow())):r.removeLayer(n);return this._topClusterLevel._recalculateBounds(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds),s.eachLayer(function(t){t instanceof L.MarkerCluster&&t._updateIcon()}),this},clearLayers:function(){return this._map||(this._needsClustering=[],delete this._gridClusters,delete this._gridUnclustered),this._noanimationUnspiderfy&&this._noanimationUnspiderfy(),this._featureGroup.clearLayers(),this._nonPointGroup.clearLayers(),this.eachLayer(function(t){delete t.__parent}),this._map&&this._generateInitialClusters(),this},getBounds:function(){var t=new L.LatLngBounds;this._topClusterLevel&&t.extend(this._topClusterLevel._bounds);for(var e=this._needsClustering.length-1;e>=0;e--)t.extend(this._needsClustering[e].getLatLng());return t.extend(this._nonPointGroup.getBounds()),t},eachLayer:function(t,e){var i,n=this._needsClustering.slice();for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(n),i=n.length-1;i>=0;i--)t.call(e,n[i]);this._nonPointGroup.eachLayer(t,e)},getLayers:function(){var t=[];return this.eachLayer(function(e){t.push(e)}),t},getLayer:function(t){var e=null;return t=parseInt(t,10),this.eachLayer(function(i){L.stamp(i)===t&&(e=i)}),e},hasLayer:function(t){if(!t)return!1;var e,i=this._needsClustering;for(e=i.length-1;e>=0;e--)if(i[e]===t)return!0;for(i=this._needsRemoving,e=i.length-1;e>=0;e--)if(i[e]===t)return!1;return!(!t.__parent||t.__parent._group!==this)||this._nonPointGroup.hasLayer(t)},zoomToShowLayer:function(t,e){"function"!=typeof e&&(e=function(){});var i=function(){!t._icon&&!t.__parent._icon||this._inZoomAnimation||(this._map.off("moveend",i,this),this.off("animationend",i,this),t._icon?e():t.__parent._icon&&(this.once("spiderfied",e,this),t.__parent.spiderfy()))};if(t._icon&&this._map.getBounds().contains(t.getLatLng()))e();else if(t.__parent._zoom<this._map.getZoom())this._map.on("moveend",i,this),this._map.panTo(t.getLatLng());else{var n=function(){this._map.off("movestart",n,this),n=null};this._map.on("movestart",n,this),this._map.on("moveend",i,this),this.on("animationend",i,this),t.__parent.zoomToBounds(),n&&i.call(this)}},onAdd:function(t){this._map=t;var e,i,n;if(!isFinite(this._map.getMaxZoom()))throw"Map has no maxZoom specified";for(this._featureGroup.onAdd(t),this._nonPointGroup.onAdd(t),this._gridClusters||this._generateInitialClusters(),this._maxLat=t.options.crs.projection.MAX_LATITUDE,e=0,i=this._needsRemoving.length;i>e;e++)n=this._needsRemoving[e],this._removeLayer(n,!0);this._needsRemoving=[],this._zoom=this._map.getZoom(),this._currentShownBounds=this._getExpandedVisibleBounds(),this._map.on("zoomend",this._zoomEnd,this),this._map.on("moveend",this._moveEnd,this),this._spiderfierOnAdd&&this._spiderfierOnAdd(),this._bindEvents(),i=this._needsClustering,this._needsClustering=[],this.addLayers(i)},onRemove:function(t){t.off("zoomend",this._zoomEnd,this),t.off("moveend",this._moveEnd,this),this._unbindEvents(),this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim",""),this._spiderfierOnRemove&&this._spiderfierOnRemove(),delete this._maxLat,this._hideCoverage(),this._featureGroup.onRemove(t),this._nonPointGroup.onRemove(t),this._featureGroup.clearLayers(),this._map=null},getVisibleParent:function(t){for(var e=t;e&&!e._icon;)e=e.__parent;return e||null},_arraySplice:function(t,e){for(var i=t.length-1;i>=0;i--)if(t[i]===e)return t.splice(i,1),!0},_removeFromGridUnclustered:function(t,e){for(var i=this._map,n=this._gridUnclustered;e>=0&&n[e].removeObject(t,i.project(t.getLatLng(),e));e--);},_removeLayer:function(t,e,i){var n=this._gridClusters,s=this._gridUnclustered,r=this._featureGroup,o=this._map;e&&this._removeFromGridUnclustered(t,this._maxZoom);var a,h=t.__parent,u=h._markers;for(this._arraySplice(u,t);h&&(h._childCount--,h._boundsNeedUpdate=!0,!(h._zoom<0));)e&&h._childCount<=1?(a=h._markers[0]===t?h._markers[1]:h._markers[0],n[h._zoom].removeObject(h,o.project(h._cLatLng,h._zoom)),s[h._zoom].addObject(a,o.project(a.getLatLng(),h._zoom)),this._arraySplice(h.__parent._childClusters,h),h.__parent._markers.push(a),a.__parent=h.__parent,h._icon&&(r.removeLayer(h),i||r.addLayer(a))):i&&h._icon||h._updateIcon(),h=h.__parent;delete t.__parent},_isOrIsParent:function(t,e){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},_propagateEvent:function(t){if(t.layer instanceof L.MarkerCluster){if(t.originalEvent&&this._isOrIsParent(t.layer._icon,t.originalEvent.relatedTarget))return;t.type="cluster"+t.type}this.fire(t.type,t)},_defaultIconCreateFunction:function(t){var e=t.getChildCount(),i=" marker-cluster-";return i+=10>e?"small":100>e?"medium":"large",new L.DivIcon({html:"<div><span>"+e+"</span></div>",className:"marker-cluster"+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var t=this._map,e=this.options.spiderfyOnMaxZoom,i=this.options.showCoverageOnHover,n=this.options.zoomToBoundsOnClick;(e||n)&&this.on("clusterclick",this._zoomOrSpiderfy,this),i&&(this.on("clustermouseover",this._showCoverage,this),this.on("clustermouseout",this._hideCoverage,this),t.on("zoomend",this._hideCoverage,this))},_zoomOrSpiderfy:function(t){for(var e=t.layer,i=e;1===i._childClusters.length;)i=i._childClusters[0];i._zoom===this._maxZoom&&i._childCount===e._childCount?this.options.spiderfyOnMaxZoom&&e.spiderfy():this.options.zoomToBoundsOnClick&&e.zoomToBounds(),t.originalEvent&&13===t.originalEvent.keyCode&&this._map._container.focus()},_showCoverage:function(t){var e=this._map;this._inZoomAnimation||(this._shownPolygon&&e.removeLayer(this._shownPolygon),t.layer.getChildCount()>2&&t.layer!==this._spiderfied&&(this._shownPolygon=new L.Polygon(t.layer.getConvexHull(),this.options.polygonOptions),e.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygon=null)},_unbindEvents:function(){var t=this.options.spiderfyOnMaxZoom,e=this.options.showCoverageOnHover,i=this.options.zoomToBoundsOnClick,n=this._map;(t||i)&&this.off("clusterclick",this._zoomOrSpiderfy,this),e&&(this.off("clustermouseover",this._showCoverage,this),this.off("clustermouseout",this._hideCoverage,this),n.off("zoomend",this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoom=this._map._zoom,this._currentShownBounds=this._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var t=this._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,this._zoom,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._map._zoom,t),this._currentShownBounds=t}},_generateInitialClusters:function(){var t=this._map.getMaxZoom(),e=this.options.maxClusterRadius,i=e;"function"!=typeof e&&(i=function(){return e}),this.options.disableClusteringAtZoom&&(t=this.options.disableClusteringAtZoom-1),this._maxZoom=t,this._gridClusters={},this._gridUnclustered={};for(var n=t;n>=0;n--)this._gridClusters[n]=new L.DistanceGrid(i(n)),this._gridUnclustered[n]=new L.DistanceGrid(i(n));this._topClusterLevel=new this._markerCluster(this,-1)},_addLayer:function(t,e){var i,n,s=this._gridClusters,r=this._gridUnclustered;for(this.options.singleMarkerMode&&this._overrideMarkerIcon(t);e>=0;e--){i=this._map.project(t.getLatLng(),e);var o=s[e].getNearObject(i);if(o)return o._addChild(t),t.__parent=o,void 0;if(o=r[e].getNearObject(i)){var a=o.__parent;a&&this._removeLayer(o,!1);var h=new this._markerCluster(this,e,o,t);s[e].addObject(h,this._map.project(h._cLatLng,e)),o.__parent=h,t.__parent=h;var u=h;for(n=e-1;n>a._zoom;n--)u=new this._markerCluster(this,n,u),s[n].addObject(u,this._map.project(o.getLatLng(),n));return a._addChild(u),this._removeFromGridUnclustered(o,e),void 0}r[e].addObject(t,i)}this._topClusterLevel._addChild(t),t.__parent=this._topClusterLevel},_enqueue:function(t){this._queue.push(t),this._queueTimeout||(this._queueTimeout=setTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var t=0;t<this._queue.length;t++)this._queue[t].call(this);this._queue.length=0,clearTimeout(this._queueTimeout),this._queueTimeout=null},_mergeSplitClusters:function(){this._processQueue(),this._zoom<this._map._zoom&&this._currentShownBounds.intersects(this._getExpandedVisibleBounds())?(this._animationStart(),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,this._zoom,this._getExpandedVisibleBounds()),this._animationZoomIn(this._zoom,this._map._zoom)):this._zoom>this._map._zoom?(this._animationStart(),this._animationZoomOut(this._zoom,this._map._zoom)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(t){var e=this._maxLat;return e!==i&&(t.getNorth()>=e&&(t._northEast.lat=1/0),t.getSouth()<=-e&&(t._southWest.lat=-1/0)),t},_animationAddLayerNonAnimated:function(t,e){if(e===t)this._featureGroup.addLayer(t);else if(2===e._childCount){e._addToMap();var i=e.getAllChildMarkers();this._featureGroup.removeLayer(i[0]),this._featureGroup.removeLayer(i[1])}else e._updateIcon()},_overrideMarkerIcon:function(t){var e=t.options.icon=this.options.iconCreateFunction({getChildCount:function(){return 1},getAllChildMarkers:function(){return[t]}});return e}}),L.MarkerClusterGroup.include({_mapBoundsInfinite:new L.LatLngBounds(new L.LatLng(-1/0,-1/0),new L.LatLng(1/0,1/0))}),L.MarkerClusterGroup.include({_noAnimation:{_animationStart:function(){},_animationZoomIn:function(t,e){this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,e,this._getExpandedVisibleBounds()),this.fire("animationend")},_animationZoomOut:function(t,e){this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,e,this._getExpandedVisibleBounds()),this.fire("animationend")},_animationAddLayer:function(t,e){this._animationAddLayerNonAnimated(t,e)}},_withAnimation:{_animationStart:function(){this._map._mapPane.className+=" leaflet-cluster-anim",this._inZoomAnimation++},_animationZoomIn:function(t,e){var i,n=this._getExpandedVisibleBounds(),s=this._featureGroup;this._topClusterLevel._recursively(n,t,0,function(r){var o,a=r._latlng,h=r._markers;for(n.contains(a)||(a=null),r._isSingleParent()&&t+1===e?(s.removeLayer(r),r._recursivelyAddChildrenToMap(null,e,n)):(r.clusterHide(),r._recursivelyAddChildrenToMap(a,e,n)),i=h.length-1;i>=0;i--)o=h[i],n.contains(o._latlng)||s.removeLayer(o)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(n,e),s.eachLayer(function(t){t instanceof L.MarkerCluster||!t._icon||t.clusterShow()}),this._topClusterLevel._recursively(n,t,e,function(t){t._recursivelyRestoreChildPositions(e)}),this._enqueue(function(){this._topClusterLevel._recursively(n,t,0,function(t){s.removeLayer(t),t.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(t,e){this._animationZoomOutSingle(this._topClusterLevel,t-1,e),this._topClusterLevel._recursivelyAddChildrenToMap(null,e,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,t,this._getExpandedVisibleBounds())},_animationAddLayer:function(t,e){var i=this,n=this._featureGroup;n.addLayer(t),e!==t&&(e._childCount>2?(e._updateIcon(),this._forceLayout(),this._animationStart(),t._setPos(this._map.latLngToLayerPoint(e.getLatLng())),t.clusterHide(),this._enqueue(function(){n.removeLayer(t),t.clusterShow(),i._animationEnd()})):(this._forceLayout(),i._animationStart(),i._animationZoomOutSingle(e,this._map.getMaxZoom(),this._map.getZoom())))}},_animationZoomOutSingle:function(t,e,i){var n=this._getExpandedVisibleBounds();t._recursivelyAnimateChildrenInAndAddSelfToMap(n,e+1,i);var s=this;this._forceLayout(),t._recursivelyBecomeVisible(n,i),this._enqueue(function(){if(1===t._childCount){var r=t._markers[0];r.setLatLng(r.getLatLng()),r.clusterShow&&r.clusterShow()}else t._recursively(n,i,0,function(t){t._recursivelyRemoveChildrenFromMap(n,e+1)});s._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.className=this._map._mapPane.className.replace(" leaflet-cluster-anim","")),this._inZoomAnimation--,this.fire("animationend")},_forceLayout:function(){L.Util.falseFn(e.body.offsetWidth)}}),L.markerClusterGroup=function(t){return new L.MarkerClusterGroup(t)},L.MarkerCluster=L.Marker.extend({initialize:function(t,e,i,n){L.Marker.prototype.initialize.call(this,i?i._cLatLng||i.getLatLng():new L.LatLng(0,0),{icon:this}),this._group=t,this._zoom=e,this._markers=[],this._childClusters=[],this._childCount=0,this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._bounds=new L.LatLngBounds,i&&this._addChild(i),n&&this._addChild(n)},getAllChildMarkers:function(t){t=t||[];for(var e=this._childClusters.length-1;e>=0;e--)this._childClusters[e].getAllChildMarkers(t);for(var i=this._markers.length-1;i>=0;i--)t.push(this._markers[i]);return t},getChildCount:function(){return this._childCount},zoomToBounds:function(){for(var t,e=this._childClusters.slice(),i=this._group._map,n=i.getBoundsZoom(this._bounds),s=this._zoom+1,r=i.getZoom();e.length>0&&n>s;){s++;var o=[];for(t=0;t<e.length;t++)o=o.concat(e[t]._childClusters);e=o}n>s?this._group._map.setView(this._latlng,s):r>=n?this._group._map.setView(this._latlng,r+1):this._group._map.fitBounds(this._bounds)},getBounds:function(){var t=new L.LatLngBounds;return t.extend(this._bounds),t},_updateIcon:function(){this._iconNeedsUpdate=!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObj=this._group.options.iconCreateFunction(this),this._iconNeedsUpdate=!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(t,e){this._iconNeedsUpdate=!0,this._boundsNeedUpdate=!0,this._setClusterCenter(t),t instanceof L.MarkerCluster?(e||(this._childClusters.push(t),t.__parent=this),this._childCount+=t._childCount):(e||this._markers.push(t),this._childCount++),this.__parent&&this.__parent._addChild(t,!0)},_setClusterCenter:function(t){this._cLatLng||(this._cLatLng=t._cLatLng||t._latlng)},_resetBounds:function(){var t=this._bounds;t._southWest&&(t._southWest.lat=1/0,t._southWest.lng=1/0),t._northEast&&(t._northEast.lat=-1/0,t._northEast.lng=-1/0)},_recalculateBounds:function(){var t,e,i,n,s=this._markers,r=this._childClusters,o=0,a=0,h=this._childCount;if(0!==h){for(this._resetBounds(),t=0;t<s.length;t++)i=s[t]._latlng,this._bounds.extend(i),o+=i.lat,a+=i.lng;for(t=0;t<r.length;t++)e=r[t],e._boundsNeedUpdate&&e._recalculateBounds(),this._bounds.extend(e._bounds),i=e._wLatLng,n=e._childCount,o+=i.lat*n,a+=i.lng*n;this._latlng=this._wLatLng=new L.LatLng(o/h,a/h),this._boundsNeedUpdate=!1}},_addToMap:function(t){t&&(this._backupLatlng=this._latlng,this.setLatLng(t)),this._group._featureGroup.addLayer(this)},_recursivelyAnimateChildrenIn:function(t,e,i){this._recursively(t,0,i-1,function(t){var i,n,s=t._markers;for(i=s.length-1;i>=0;i--)n=s[i],n._icon&&(n._setPos(e),n.clusterHide())},function(t){var i,n,s=t._childClusters;for(i=s.length-1;i>=0;i--)n=s[i],n._icon&&(n._setPos(e),n.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(t,e,i){this._recursively(t,i,0,function(n){n._recursivelyAnimateChildrenIn(t,n._group._map.latLngToLayerPoint(n.getLatLng()).round(),e),n._isSingleParent()&&e-1===i?(n.clusterShow(),n._recursivelyRemoveChildrenFromMap(t,e)):n.clusterHide(),n._addToMap()})},_recursivelyBecomeVisible:function(t,e){this._recursively(t,0,e,null,function(t){t.clusterShow()})},_recursivelyAddChildrenToMap:function(t,e,i){this._recursively(i,-1,e,function(n){if(e!==n._zoom)for(var s=n._markers.length-1;s>=0;s--){var r=n._markers[s];i.contains(r._latlng)&&(t&&(r._backupLatlng=r.getLatLng(),r.setLatLng(t),r.clusterHide&&r.clusterHide()),n._group._featureGroup.addLayer(r))}},function(e){e._addToMap(t)})},_recursivelyRestoreChildPositions:function(t){for(var e=this._markers.length-1;e>=0;e--){var i=this._markers[e];i._backupLatlng&&(i.setLatLng(i._backupLatlng),delete i._backupLatlng)}if(t-1===this._zoom)for(var n=this._childClusters.length-1;n>=0;n--)this._childClusters[n]._restorePosition();else for(var s=this._childClusters.length-1;s>=0;s--)this._childClusters[s]._recursivelyRestoreChildPositions(t)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(t,e,i){var n,s;this._recursively(t,-1,e-1,function(t){for(s=t._markers.length-1;s>=0;s--)n=t._markers[s],i&&i.contains(n._latlng)||(t._group._featureGroup.removeLayer(n),n.clusterShow&&n.clusterShow())},function(t){for(s=t._childClusters.length-1;s>=0;s--)n=t._childClusters[s],i&&i.contains(n._latlng)||(t._group._featureGroup.removeLayer(n),n.clusterShow&&n.clusterShow())})},_recursively:function(t,e,i,n,s){var r,o,a=this._childClusters,h=this._zoom;if(e>h)for(r=a.length-1;r>=0;r--)o=a[r],t.intersects(o._bounds)&&o._recursively(t,e,i,n,s);else if(n&&n(this),s&&this._zoom===i&&s(this),i>h)for(r=a.length-1;r>=0;r--)o=a[r],t.intersects(o._bounds)&&o._recursively(t,e,i,n,s)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters[0]._childCount===this._childCount}}),L.Marker.include({clusterHide:function(){return this.options.opacityWhenUnclustered=this.options.opacity||1,this.setOpacity(0)},clusterShow:function(){var t=this.setOpacity(this.options.opacity||this.options.opacityWhenUnclustered);return delete this.options.opacityWhenUnclustered,t}}),L.DistanceGrid=function(t){this._cellSize=t,this._sqCellSize=t*t,this._grid={},this._objectPoint={}},L.DistanceGrid.prototype={addObject:function(t,e){var i=this._getCoord(e.x),n=this._getCoord(e.y),s=this._grid,r=s[n]=s[n]||{},o=r[i]=r[i]||[],a=L.Util.stamp(t);this._objectPoint[a]=e,o.push(t)},updateObject:function(t,e){this.removeObject(t),this.addObject(t,e)},removeObject:function(t,e){var i,n,s=this._getCoord(e.x),r=this._getCoord(e.y),o=this._grid,a=o[r]=o[r]||{},h=a[s]=a[s]||[];for(delete this._objectPoint[L.Util.stamp(t)],i=0,n=h.length;n>i;i++)if(h[i]===t)return h.splice(i,1),1===n&&delete a[s],!0},eachObject:function(t,e){var i,n,s,r,o,a,h,u=this._grid;for(i in u){o=u[i];for(n in o)for(a=o[n],s=0,r=a.length;r>s;s++)h=t.call(e,a[s]),h&&(s--,r--)}},getNearObject:function(t){var e,i,n,s,r,o,a,h,u=this._getCoord(t.x),_=this._getCoord(t.y),l=this._objectPoint,d=this._sqCellSize,c=null;for(e=_-1;_+1>=e;e++)if(s=this._grid[e])for(i=u-1;u+1>=i;i++)if(r=s[i])for(n=0,o=r.length;o>n;n++)a=r[n],h=this._sqDist(l[L.Util.stamp(a)],t),d>h&&(d=h,c=a);return c},_getCoord:function(t){return Math.floor(t/this._cellSize)},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n}},function(){L.QuickHull={getDistant:function(t,e){var i=e[1].lat-e[0].lat,n=e[0].lng-e[1].lng;return n*(t.lat-e[0].lat)+i*(t.lng-e[0].lng)},findMostDistantPointFromBaseLine:function(t,e){var i,n,s,r=0,o=null,a=[];for(i=e.length-1;i>=0;i--)n=e[i],s=this.getDistant(n,t),s>0&&(a.push(n),s>r&&(r=s,o=n));return{maxPoint:o,newPoints:a}},buildConvexHull:function(t,e){var i=[],n=this.findMostDistantPointFromBaseLine(t,e);return n.maxPoint?(i=i.concat(this.buildConvexHull([t[0],n.maxPoint],n.newPoints)),i=i.concat(this.buildConvexHull([n.maxPoint,t[1]],n.newPoints))):[t[0]]},getConvexHull:function(t){var e,i=!1,n=!1,s=!1,r=!1,o=null,a=null,h=null,u=null,_=null,l=null;for(e=t.length-1;e>=0;e--){var d=t[e];(i===!1||d.lat>i)&&(o=d,i=d.lat),(n===!1||d.lat<n)&&(a=d,n=d.lat),(s===!1||d.lng>s)&&(h=d,s=d.lng),(r===!1||d.lng<r)&&(u=d,r=d.lng)}n!==i?(l=a,_=o):(l=u,_=h);var c=[].concat(this.buildConvexHull([l,_],t),this.buildConvexHull([_,l],t));return c}}}(),L.MarkerCluster.include({getConvexHull:function(){var t,e,i=this.getAllChildMarkers(),n=[];for(e=i.length-1;e>=0;e--)t=i[e].getLatLng(),n.push(t);return L.QuickHull.getConvexHull(n)}}),L.MarkerCluster.include({_2PI:2*Math.PI,_circleFootSeparation:25,_circleStartAngle:Math.PI/6,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(this._group._spiderfied!==this&&!this._group._inZoomAnimation){var t,e=this.getAllChildMarkers(),i=this._group,n=i._map,s=n.latLngToLayerPoint(this._latlng);this._group._unspiderfy(),this._group._spiderfied=this,e.length>=this._circleSpiralSwitchover?t=this._generatePointsSpiral(e.length,s):(s.y+=10,t=this._generatePointsCircle(e.length,s)),this._animationSpiderfy(e,t)}},unspiderfy:function(t){this._group._inZoomAnimation||(this._animationUnspiderfy(t),this._group._spiderfied=null)},_generatePointsCircle:function(t,e){var i,n,s=this._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+t),r=s/this._2PI,o=this._2PI/t,a=[];for(a.length=t,i=t-1;i>=0;i--)n=this._circleStartAngle+i*o,a[i]=new L.Point(e.x+r*Math.cos(n),e.y+r*Math.sin(n))._round();return a},_generatePointsSpiral:function(t,e){var i,n=this._group.options.spiderfyDistanceMultiplier,s=n*this._spiralLengthStart,r=n*this._spiralFootSeparation,o=n*this._spiralLengthFactor*this._2PI,a=0,h=[];for(h.length=t,i=t-1;i>=0;i--)a+=r/s+5e-4*i,h[i]=new L.Point(e.x+s*Math.cos(a),e.y+s*Math.sin(a))._round(),s+=o/a;return h},_noanimationUnspiderfy:function(){var t,e,i=this._group,n=i._map,s=i._featureGroup,r=this.getAllChildMarkers();for(this.setOpacity(1),e=r.length-1;e>=0;e--)t=r[e],s.removeLayer(t),t._preSpiderfyLatlng&&(t.setLatLng(t._preSpiderfyLatlng),delete t._preSpiderfyLatlng),t.setZIndexOffset&&t.setZIndexOffset(0),t._spiderLeg&&(n.removeLayer(t._spiderLeg),delete t._spiderLeg);i.fire("unspiderfied",{cluster:this,markers:r}),i._spiderfied=null}}),L.MarkerClusterNonAnimated=L.MarkerCluster.extend({_animationSpiderfy:function(t,e){var i,n,s,r,o=this._group,a=o._map,h=o._featureGroup,u=this._group.options.spiderLegPolylineOptions;for(i=0;i<t.length;i++)r=a.layerPointToLatLng(e[i]),n=t[i],s=new L.Polyline([this._latlng,r],u),a.addLayer(s),n._spiderLeg=s,n._preSpiderfyLatlng=n._latlng,n.setLatLng(r),n.setZIndexOffset&&n.setZIndexOffset(1e6),h.addLayer(n);this.setOpacity(.3),o.fire("spiderfied",{cluster:this,markers:t})},_animationUnspiderfy:function(){this._noanimationUnspiderfy()}}),L.MarkerCluster.include({_animationSpiderfy:function(t,e){var n,s,r,o,a,h,u=this,_=this._group,l=_._map,d=_._featureGroup,c=this._latlng,p=l.latLngToLayerPoint(c),f=L.Path.SVG,m=L.extend({},this._group.options.spiderLegPolylineOptions),g=m.opacity;for(g===i&&(g=L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity),f?(m.opacity=0,m.className=(m.className||"")+" leaflet-cluster-spider-leg"):m.opacity=g,n=0;n<t.length;n++)s=t[n],h=l.layerPointToLatLng(e[n]),r=new L.Polyline([c,h],m),l.addLayer(r),s._spiderLeg=r,f&&(o=r._path,a=o.getTotalLength()+.1,o.style.strokeDasharray=a,o.style.strokeDashoffset=a),s.setZIndexOffset&&s.setZIndexOffset(1e6),s.clusterHide&&s.clusterHide(),d.addLayer(s),s._setPos&&s._setPos(p);for(_._forceLayout(),_._animationStart(),n=t.length-1;n>=0;n--)h=l.layerPointToLatLng(e[n]),s=t[n],s._preSpiderfyLatlng=s._latlng,s.setLatLng(h),s.clusterShow&&s.clusterShow(),f&&(r=s._spiderLeg,o=r._path,o.style.strokeDashoffset=0,r.setStyle({opacity:g}));this.setOpacity(.3),setTimeout(function(){_._animationEnd(),_.fire("spiderfied",{cluster:u,markers:t})},200)},_animationUnspiderfy:function(t){var e,i,n,s,r,o,a=this,h=this._group,u=h._map,_=h._featureGroup,l=t?u._latLngToNewLayerPoint(this._latlng,t.zoom,t.center):u.latLngToLayerPoint(this._latlng),d=this.getAllChildMarkers(),c=L.Path.SVG;for(h._animationStart(),this.setOpacity(1),i=d.length-1;i>=0;i--)e=d[i],e._preSpiderfyLatlng&&(e.setLatLng(e._preSpiderfyLatlng),delete e._preSpiderfyLatlng,o=!0,e._setPos&&(e._setPos(l),o=!1),e.clusterHide&&(e.clusterHide(),o=!1),o&&_.removeLayer(e),c&&(n=e._spiderLeg,s=n._path,r=s.getTotalLength()+.1,s.style.strokeDashoffset=r,n.setStyle({opacity:0})));setTimeout(function(){var t=0;for(i=d.length-1;i>=0;i--)e=d[i],e._spiderLeg&&t++;for(i=d.length-1;i>=0;i--)e=d[i],e._spiderLeg&&(e.clusterShow&&e.clusterShow(),e.setZIndexOffset&&e.setZIndexOffset(0),t>1&&_.removeLayer(e),u.removeLayer(e._spiderLeg),delete e._spiderLeg);h._animationEnd(),h.fire("unspiderfied",{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,_spiderfierOnAdd:function(){this._map.on("click",this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on("zoomstart",this._unspiderfyZoomStart,this),this._map.on("zoomend",this._noanimationUnspiderfy,this)},_spiderfierOnRemove:function(){this._map.off("click",this._unspiderfyWrapper,this),this._map.off("zoomstart",this._unspiderfyZoomStart,this),this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._map.off("zoomend",this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()},_unspiderfyZoomStart:function(){this._map&&this._map.on("zoomanim",this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(t){L.DomUtil.hasClass(this._map._mapPane,"leaflet-touching")||(this._map.off("zoomanim",this._unspiderfyZoomAnim,this),this._unspiderfy(t))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(t){this._spiderfied&&this._spiderfied.unspiderfy(t)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(t){t._spiderLeg&&(this._featureGroup.removeLayer(t),t.clusterShow&&t.clusterShow(),t.setZIndexOffset&&t.setZIndexOffset(0),this._map.removeLayer(t._spiderLeg),delete t._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(t){return t?t instanceof L.MarkerClusterGroup?t=t._topClusterLevel.getAllChildMarkers():t instanceof L.LayerGroup?t=t._layers:t instanceof L.MarkerCluster?t=t.getAllChildMarkers():t instanceof L.Marker&&(t=[t]):t=this._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(t),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(t),this},_flagParentsIconsNeedUpdate:function(t){var e,i;for(e in t)for(i=t[e].__parent;i;)i._iconNeedsUpdate=!0,i=i.__parent},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(t){t instanceof L.MarkerCluster&&t._iconNeedsUpdate&&t._updateIcon()})},_refreshSingleMarkerModeMarkers:function(t){var e,i;for(e in t)i=t[e],this.hasLayer(i)&&i.setIcon(this._overrideMarkerIcon(i))}}),L.Marker.include({refreshIconOptions:function(t,e){var i=this.options.icon;return L.setOptions(i,t),this.setIcon(i),e&&this.__parent&&this.__parent._group.refreshClusters(this),this}})}(window,document);
\ No newline at end of file
diff --git a/www/js/vendor/leaflet.search.min.js b/www/js/vendor/leaflet.search.min.js
deleted file mode 100644
index 97facf7ae056707b251a6cc1ac773e4b8529230d..0000000000000000000000000000000000000000
--- a/www/js/vendor/leaflet.search.min.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/* 
- * Leaflet Control Search v2.7.2 - 2017-04-08 
- * 
- * Copyright 2017 Stefano Cudini 
- * stefano.cudini@gmail.com 
- * http://labs.easyblog.it/ 
- * 
- * Licensed under the MIT license. 
- * 
- * Demo: 
- * http://labs.easyblog.it/maps/leaflet-search/ 
- * 
- * Source: 
- * git@github.com:stefanocudini/leaflet-search.git 
- * 
- */
-!function(a){if("function"==typeof define&&define.amd)define(["leaflet"],a);else if("undefined"!=typeof module)module.exports=a(require("leaflet"));else{if("undefined"==typeof window.L)throw"Leaflet must be loaded first";a(window.L)}}(function(a){function b(a,b){var c=b.split("."),d=c.pop(),e=c.length,f=c[0],g=1;if(e>0)for(;(a=a[f])&&e>g;)f=c[g++];return a?a[d]:void 0}function c(a){return"[object Object]"===Object.prototype.toString.call(a)}return a.Control.Search=a.Control.extend({includes:a.Mixin.Events,options:{url:"",layer:null,sourceData:null,jsonpParam:null,propertyLoc:"loc",propertyName:"title",formatData:null,filterData:null,moveToLocation:null,buildTip:null,container:"",zoom:null,minLength:1,initial:!0,casesensitive:!1,autoType:!0,delayType:400,tooltipLimit:-1,tipAutoSubmit:!0,firstTipSubmit:!1,autoResize:!0,collapsed:!0,autoCollapse:!1,autoCollapseTime:1200,textErr:"Location not found",textCancel:"Cancel",textPlaceholder:"Search...",position:"topleft",hideMarkerOnCollapse:!1,marker:{icon:!1,animate:!0,circle:{radius:10,weight:3,color:"#e03",stroke:!0,fill:!1}}},initialize:function(b){a.Util.setOptions(this,b||{}),this._inputMinSize=this.options.textPlaceholder?this.options.textPlaceholder.length:10,this._layer=this.options.layer||new a.LayerGroup,this._filterData=this.options.filterData||this._defaultFilterData,this._formatData=this.options.formatData||this._defaultFormatData,this._moveToLocation=this.options.moveToLocation||this._defaultMoveToLocation,this._autoTypeTmp=this.options.autoType,this._countertips=0,this._recordsCache={},this._curReq=null},onAdd:function(b){return this._map=b,this._container=a.DomUtil.create("div","leaflet-control-search"),this._input=this._createInput(this.options.textPlaceholder,"search-input"),this._tooltip=this._createTooltip("search-tooltip"),this._cancel=this._createCancel(this.options.textCancel,"search-cancel"),this._button=this._createButton(this.options.textPlaceholder,"search-button"),this._alert=this._createAlert("search-alert"),this.options.collapsed===!1&&this.expand(this.options.collapsed),this.options.marker&&(this.options.marker instanceof a.Marker||this.options.marker instanceof a.CircleMarker?this._markerSearch=this.options.marker:c(this.options.marker)&&(this._markerSearch=new a.Control.Search.Marker([0,0],this.options.marker)),this._markerSearch._isMarkerSearch=!0),this.setLayer(this._layer),b.on({resize:this._handleAutoresize},this),this._container},addTo:function(b){return this.options.container?(this._container=this.onAdd(b),this._wrapper=a.DomUtil.get(this.options.container),this._wrapper.style.position="relative",this._wrapper.appendChild(this._container)):a.Control.prototype.addTo.call(this,b),this},onRemove:function(a){this._recordsCache={}},setLayer:function(a){return this._layer=a,this._layer.addTo(this._map),this},showAlert:function(a){a=a||this.options.textErr,this._alert.style.display="block",this._alert.innerHTML=a,clearTimeout(this.timerAlert);var b=this;return this.timerAlert=setTimeout(function(){b.hideAlert()},this.options.autoCollapseTime),this},hideAlert:function(){return this._alert.style.display="none",this},cancel:function(){return this._input.value="",this._handleKeypress({keyCode:8}),this._input.size=this._inputMinSize,this._input.focus(),this._cancel.style.display="none",this._hideTooltip(),this},expand:function(b){return b="boolean"==typeof b?b:!0,this._input.style.display="block",a.DomUtil.addClass(this._container,"search-exp"),b!==!1&&(this._input.focus(),this._map.on("dragstart click",this.collapse,this)),this.fire("search:expanded"),this},collapse:function(){return this._hideTooltip(),this.cancel(),this._alert.style.display="none",this._input.blur(),this.options.collapsed&&(this._input.style.display="none",this._cancel.style.display="none",a.DomUtil.removeClass(this._container,"search-exp"),this.options.hideMarkerOnCollapse&&this._map.removeLayer(this._markerSearch),this._map.off("dragstart click",this.collapse,this)),this.fire("search:collapsed"),this},collapseDelayed:function(){if(!this.options.autoCollapse)return this;var a=this;return clearTimeout(this.timerCollapse),this.timerCollapse=setTimeout(function(){a.collapse()},this.options.autoCollapseTime),this},collapseDelayedStop:function(){return clearTimeout(this.timerCollapse),this},_createAlert:function(b){var c=a.DomUtil.create("div",b,this._container);return c.style.display="none",a.DomEvent.on(c,"click",a.DomEvent.stop,this).on(c,"click",this.hideAlert,this),c},_createInput:function(b,c){var d=a.DomUtil.create("label",c,this._container),e=a.DomUtil.create("input",c,this._container);return e.type="text",e.size=this._inputMinSize,e.value="",e.autocomplete="off",e.autocorrect="off",e.autocapitalize="off",e.placeholder=b,e.style.display="none",e.role="search",e.id=e.role+e.type+e.size,d.htmlFor=e.id,d.style.display="none",d.value=b,a.DomEvent.disableClickPropagation(e).on(e,"keydown",this._handleKeypress,this).on(e,"blur",this.collapseDelayed,this).on(e,"focus",this.collapseDelayedStop,this),e},_createCancel:function(b,c){var d=a.DomUtil.create("a",c,this._container);return d.href="#",d.title=b,d.style.display="none",d.innerHTML="<span>&otimes;</span>",a.DomEvent.on(d,"click",a.DomEvent.stop,this).on(d,"click",this.cancel,this),d},_createButton:function(b,c){var d=a.DomUtil.create("a",c,this._container);return d.href="#",d.title=b,a.DomEvent.on(d,"click",a.DomEvent.stop,this).on(d,"click",this._handleSubmit,this).on(d,"focus",this.collapseDelayedStop,this).on(d,"blur",this.collapseDelayed,this),d},_createTooltip:function(b){var c=a.DomUtil.create("ul",b,this._container);c.style.display="none";var d=this;return a.DomEvent.disableClickPropagation(c).on(c,"blur",this.collapseDelayed,this).on(c,"mousewheel",function(b){d.collapseDelayedStop(),a.DomEvent.stopPropagation(b)},this).on(c,"mouseover",function(a){d.collapseDelayedStop()},this),c},_createTip:function(b,c){var d;if(this.options.buildTip){if(d=this.options.buildTip.call(this,b,c),"string"==typeof d){var e=a.DomUtil.create("div");e.innerHTML=d,d=e.firstChild}}else d=a.DomUtil.create("li",""),d.innerHTML=b;return a.DomUtil.addClass(d,"search-tip"),d._text=b,this.options.tipAutoSubmit&&a.DomEvent.disableClickPropagation(d).on(d,"click",a.DomEvent.stop,this).on(d,"click",function(a){this._input.value=b,this._handleAutoresize(),this._input.focus(),this._hideTooltip(),this._handleSubmit()},this),d},_getUrl:function(a){return"function"==typeof this.options.url?this.options.url(a):this.options.url},_defaultFilterData:function(a,b){var c,d,e,f={};if(a=a.replace(/[.*+?^${}()|[\]\\]/g,""),""===a)return[];c=this.options.initial?"^":"",d=this.options.casesensitive?void 0:"i",e=new RegExp(c+a,d);for(var g in b)e.test(g)&&(f[g]=b[g]);return f},showTooltip:function(a){if(this._countertips=0,this._tooltip.innerHTML="",this._tooltip.currentSelection=-1,this.options.tooltipLimit)for(var b in a){if(this._countertips===this.options.tooltipLimit)break;this._countertips++,this._tooltip.appendChild(this._createTip(b,a[b]))}return this._countertips>0?(this._tooltip.style.display="block",this._autoTypeTmp&&this._autoType(),this._autoTypeTmp=this.options.autoType):this._hideTooltip(),this._tooltip.scrollTop=0,this._countertips},_hideTooltip:function(){return this._tooltip.style.display="none",this._tooltip.innerHTML="",0},_defaultFormatData:function(c){var d,e=this.options.propertyName,f=this.options.propertyLoc,g={};if(a.Util.isArray(f))for(d in c)g[b(c[d],e)]=a.latLng(c[d][f[0]],c[d][f[1]]);else for(d in c)g[b(c[d],e)]=a.latLng(b(c[d],f));return g},_recordsFromJsonp:function(b,c){a.Control.Search.callJsonp=c;var d=a.DomUtil.create("script","leaflet-search-jsonp",document.getElementsByTagName("body")[0]),e=a.Util.template(this._getUrl(b)+"&"+this.options.jsonpParam+"=L.Control.Search.callJsonp",{s:b});return d.type="text/javascript",d.src=e,{abort:function(){d.parentNode.removeChild(d)}}},_recordsFromAjax:function(b,c){void 0===window.XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new ActiveXObject("Microsoft.XMLHTTP.6.0")}catch(a){try{return new ActiveXObject("Microsoft.XMLHTTP.3.0")}catch(b){throw new Error("XMLHttpRequest is not supported")}}});var d=a.Browser.ie&&!window.atob&&document.querySelector,e=d?new XDomainRequest:new XMLHttpRequest,f=a.Util.template(this._getUrl(b),{s:b});e.open("GET",f);return e.onload=function(){c(JSON.parse(e.responseText))},e.onreadystatechange=function(){4===e.readyState&&200===e.status&&this.onload()},e.send(),e},_recordsFromLayer:function(){var c,d={},e=this.options.propertyName;return this._layer.eachLayer(function(f){if(!f.hasOwnProperty("_isMarkerSearch"))if(f instanceof a.Marker||f instanceof a.CircleMarker)try{if(b(f.options,e))c=f.getLatLng(),c.layer=f,d[b(f.options,e)]=c;else{if(!b(f.feature.properties,e))throw new Error("propertyName '"+e+"' not found in marker");c=f.getLatLng(),c.layer=f,d[b(f.feature.properties,e)]=c}}catch(g){console}else if(f.hasOwnProperty("feature"))try{if(!f.feature.properties.hasOwnProperty(e))throw new Error("propertyName '"+e+"' not found in feature");c=f.getBounds().getCenter(),c.layer=f,d[f.feature.properties[e]]=c}catch(g){console}else f instanceof a.LayerGroup&&f.eachLayer(function(a){c=a.getLatLng(),c.layer=a,d[a.feature.properties[e]]=c})},this),d},_autoType:function(){var a=this._input.value.length,b=this._tooltip.firstChild?this._tooltip.firstChild._text:"",c=b.length;if(0===b.indexOf(this._input.value))if(this._input.value=b,this._handleAutoresize(),this._input.createTextRange){var d=this._input.createTextRange();d.collapse(!0),d.moveStart("character",a),d.moveEnd("character",c),d.select()}else this._input.setSelectionRange?this._input.setSelectionRange(a,c):this._input.selectionStart&&(this._input.selectionStart=a,this._input.selectionEnd=c)},_hideAutoType:function(){var a;if((a=this._input.selection)&&a.empty)a.empty();else if(this._input.createTextRange){a=this._input.createTextRange(),a.collapse(!0);var b=this._input.value.length;a.moveStart("character",b),a.moveEnd("character",b),a.select()}else this._input.getSelection&&this._input.getSelection().removeAllRanges(),this._input.selectionStart=this._input.selectionEnd},_handleKeypress:function(a){switch(a.keyCode){case 27:this.collapse();break;case 13:(1==this._countertips||this.options.firstTipSubmit&&this._countertips>0)&&this._handleArrowSelect(1),this._handleSubmit();break;case 38:this._handleArrowSelect(-1);break;case 40:this._handleArrowSelect(1);break;case 8:case 45:case 46:this._autoTypeTmp=!1;break;case 37:case 39:case 16:case 17:case 35:case 36:break;default:if(this._input.value.length?this._cancel.style.display="block":this._cancel.style.display="none",this._input.value.length>=this.options.minLength){var b=this;clearTimeout(this.timerKeypress),this.timerKeypress=setTimeout(function(){b._fillRecordsCache()},this.options.delayType)}else this._hideTooltip()}this._handleAutoresize()},searchText:function(b){var c=b.charCodeAt(b.length);this._input.value=b,this._input.style.display="block",a.DomUtil.addClass(this._container,"search-exp"),this._autoTypeTmp=!1,this._handleKeypress({keyCode:c})},_fillRecordsCache:function(){var b,c=this._input.value,d=this;this._curReq&&this._curReq.abort&&this._curReq.abort(),a.DomUtil.addClass(this._container,"search-load"),this.options.layer?(this._recordsCache=this._recordsFromLayer(),b=this._filterData(this._input.value,this._recordsCache),this.showTooltip(b),a.DomUtil.removeClass(this._container,"search-load")):(this.options.sourceData?this._retrieveData=this.options.sourceData:this.options.url&&(this._retrieveData=this.options.jsonpParam?this._recordsFromJsonp:this._recordsFromAjax),this._curReq=this._retrieveData.call(this,c,function(c){d._recordsCache=d._formatData(c),b=d.options.sourceData?d._filterData(d._input.value,d._recordsCache):d._recordsCache,d.showTooltip(b),a.DomUtil.removeClass(d._container,"search-load")}))},_handleAutoresize:function(){this._input.style.maxWidth!=this._map._container.offsetWidth&&(this._input.style.maxWidth=a.DomUtil.getStyle(this._map._container,"width")),this.options.autoResize&&this._container.offsetWidth+45<this._map._container.offsetWidth&&(this._input.size=this._input.value.length<this._inputMinSize?this._inputMinSize:this._input.value.length)},_handleArrowSelect:function(b){var c=this._tooltip.hasChildNodes()?this._tooltip.childNodes:[];for(i=0;i<c.length;i++)a.DomUtil.removeClass(c[i],"search-tip-select");if(1==b&&this._tooltip.currentSelection>=c.length-1)a.DomUtil.addClass(c[this._tooltip.currentSelection],"search-tip-select");else if(-1==b&&this._tooltip.currentSelection<=0)this._tooltip.currentSelection=-1;else if("none"!=this._tooltip.style.display){this._tooltip.currentSelection+=b,a.DomUtil.addClass(c[this._tooltip.currentSelection],"search-tip-select"),this._input.value=c[this._tooltip.currentSelection]._text;var d=c[this._tooltip.currentSelection].offsetTop;d+c[this._tooltip.currentSelection].clientHeight>=this._tooltip.scrollTop+this._tooltip.clientHeight?this._tooltip.scrollTop=d-this._tooltip.clientHeight+c[this._tooltip.currentSelection].clientHeight:d<=this._tooltip.scrollTop&&(this._tooltip.scrollTop=d)}},_handleSubmit:function(){if(this._hideAutoType(),this.hideAlert(),this._hideTooltip(),"none"==this._input.style.display)this.expand();else if(""===this._input.value)this.collapse();else{var a=this._getLocation(this._input.value);a===!1?this.showAlert():(this.showLocation(a,this._input.value),this.fire("search:locationfound",{latlng:a,text:this._input.value,layer:a.layer?a.layer:null}))}},_getLocation:function(a){return this._recordsCache.hasOwnProperty(a)?this._recordsCache[a]:!1},_defaultMoveToLocation:function(a,b,c){this.options.zoom?this._map.setView(a,this.options.zoom):this._map.panTo(a)},showLocation:function(a,b){var c=this;return c._map.once("moveend zoomend",function(b){c._markerSearch&&c._markerSearch.addTo(c._map).setLatLng(a)}),c._moveToLocation(a,b,c._map),c.options.autoCollapse&&c.collapse(),c}}),a.Control.Search.Marker=a.Marker.extend({includes:a.Mixin.Events,options:{icon:new a.Icon.Default,animate:!0,circle:{radius:10,weight:3,color:"#e03",stroke:!0,fill:!1}},initialize:function(b,d){a.setOptions(this,d),d.icon===!0&&(d.icon=new a.Icon.Default),a.Marker.prototype.initialize.call(this,b,d),c(this.options.circle)&&(this._circleLoc=new a.CircleMarker(b,this.options.circle))},onAdd:function(b){a.Marker.prototype.onAdd.call(this,b),this._circleLoc&&(b.addLayer(this._circleLoc),this.options.animate&&this.animate())},onRemove:function(b){a.Marker.prototype.onRemove.call(this,b),this._circleLoc&&b.removeLayer(this._circleLoc)},setLatLng:function(b){return a.Marker.prototype.setLatLng.call(this,b),this._circleLoc&&this._circleLoc.setLatLng(b),this},_initIcon:function(){this.options.icon&&a.Marker.prototype._initIcon.call(this)},_removeIcon:function(){this.options.icon&&a.Marker.prototype._removeIcon.call(this)},animate:function(){if(this._circleLoc){var a=this._circleLoc,b=200,c=5,d=parseInt(a._radius/c),e=this.options.circle.radius,f=2*a._radius,g=0;a._timerAnimLoc=setInterval(function(){g+=.5,d+=g,f-=d,a.setRadius(f),e>f&&(clearInterval(a._timerAnimLoc),a.setRadius(e))},b)}return this}}),a.Map.addInitHook(function(){this.options.searchControl&&(this.searchControl=a.control.search(this.options.searchControl),this.addControl(this.searchControl))}),a.control.search=function(b){return new a.Control.Search(b)},a.Control.Search});
\ No newline at end of file
diff --git a/www/js/vendor/moment.es.js b/www/js/vendor/moment.es.js
deleted file mode 100644
index 9b24a1776d7bc6b3100955d47b1366c75df0e232..0000000000000000000000000000000000000000
--- a/www/js/vendor/moment.es.js
+++ /dev/null
@@ -1,61 +0,0 @@
-//! moment.js locale configuration
-//! locale : french (es)
-//! author : Fiatou: https://github.com/fiatou
-
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
-    typeof define === 'function' && define.amd ? define(['moment'], factory) :
-      factory(global.moment)
-}(this, function (moment) { 'use strict';
-
-
-  var es = moment.defineLocale('es', {
-    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
-    monthsShort : 'ener._febr._mar._abr._may._jun._jul._agos_sept._oct._nov._dic.'.split('_'),
-    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
-    weekdaysShort : 'dom._lun._mar._mie._jue._vie._sáb.'.split('_'),
-    weekdaysMin : 'Do_Lu_Ma_Mi_Ju_Vi_Sá'.split('_'),
-    longDateFormat : {
-      LT : 'HH:mm',
-      LTS : 'HH:mm:ss',
-      L : 'DD/MM/YYYY',
-      LL : 'D MMMM YYYY',
-      LLL : 'D MMMM YYYY HH:mm',
-      LLLL : 'dddd D MMMM YYYY HH:mm'
-    },
-    calendar : {
-      sameDay: '[Hoy a] LT',
-      nextDay: '[Mañana a] LT',
-      nextWeek: 'dddd [a] LT',
-      lastDay: '[Ayer a] LT',
-      lastWeek: 'dddd [último a] LT',
-      sameElse: 'L'
-    },
-    relativeTime : {
-      future : 'en %s',
-      past : 'hace %s',
-      s : 'algunas segundas',
-      m : 'un minuto',
-      mm : '%d minutos',
-      h : 'una hora',
-      hh : '%d horas',
-      d : 'un dia',
-      dd : '%d dias',
-      M : 'un mes',
-      MM : '%d meses',
-      y : 'un año',
-      yy : '%d años'
-    },
-    ordinalParse: /\d{1,2}(er|)/,
-    ordinal : function (number) {
-      return number + (number === 1 ? 'ero' : '');
-    },
-    week : {
-      dow : 1, // Monday is the first day of the week.
-      doy : 4  // The week that contains Jan 4th is the first week of the year.
-    }
-  });
-
-  return es;
-
-}));
diff --git a/www/js/vendor/moment.fr.js b/www/js/vendor/moment.fr.js
deleted file mode 100644
index 4f60e588f3396e0eb9c968cb14cf172beb51a2c3..0000000000000000000000000000000000000000
--- a/www/js/vendor/moment.fr.js
+++ /dev/null
@@ -1,61 +0,0 @@
-//! moment.js locale configuration
-//! locale : french (fr)
-//! author : John Fischer : https://github.com/jfroffice
-
-(function (global, factory) {
-   typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
-   typeof define === 'function' && define.amd ? define(['moment'], factory) :
-   factory(global.moment)
-}(this, function (moment) { 'use strict';
-
-
-    var fr = moment.defineLocale('fr', {
-        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
-        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
-        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
-        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
-        weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
-        longDateFormat : {
-            LT : 'HH:mm',
-            LTS : 'HH:mm:ss',
-            L : 'DD/MM/YYYY',
-            LL : 'D MMMM YYYY',
-            LLL : 'D MMMM YYYY HH:mm',
-            LLLL : 'dddd D MMMM YYYY HH:mm'
-        },
-        calendar : {
-            sameDay: '[Aujourd\'hui à] LT',
-            nextDay: '[Demain à] LT',
-            nextWeek: 'dddd [à] LT',
-            lastDay: '[Hier à] LT',
-            lastWeek: 'dddd [dernier à] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : 'dans %s',
-            past : 'il y a %s',
-            s : 'quelques secondes',
-            m : 'une minute',
-            mm : '%d minutes',
-            h : 'une heure',
-            hh : '%d heures',
-            d : 'un jour',
-            dd : '%d jours',
-            M : 'un mois',
-            MM : '%d mois',
-            y : 'un an',
-            yy : '%d ans'
-        },
-        ordinalParse: /\d{1,2}(er|)/,
-        ordinal : function (number) {
-            return number + (number === 1 ? 'er' : '');
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-
-    return fr;
-
-}));
\ No newline at end of file
diff --git a/www/js/vendor/moment.min.js b/www/js/vendor/moment.min.js
deleted file mode 100644
index a049687679c3d43895039554cfe5f477cd92a51d..0000000000000000000000000000000000000000
--- a/www/js/vendor/moment.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";function e(){return Qe.apply(null,arguments)}function t(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function n(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function s(e){return void 0===e}function i(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function r(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function a(e,t){var n,s=[];for(n=0;n<e.length;++n)s.push(t(e[n],n));return s}function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function u(e,t){for(var n in t)o(t,n)&&(e[n]=t[n]);return o(t,"toString")&&(e.toString=t.toString),o(t,"valueOf")&&(e.valueOf=t.valueOf),e}function l(e,t,n,s){return ge(e,t,n,s,!0).utc()}function d(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function h(e){if(null==e._isValid){var t=d(e),n=Xe.call(t.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function c(e){var t=l(NaN);return null!=e?u(d(t),e):d(t).userInvalidated=!0,t}function f(e,t){var n,i,r;if(s(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),s(t._i)||(e._i=t._i),s(t._f)||(e._f=t._f),s(t._l)||(e._l=t._l),s(t._strict)||(e._strict=t._strict),s(t._tzm)||(e._tzm=t._tzm),s(t._isUTC)||(e._isUTC=t._isUTC),s(t._offset)||(e._offset=t._offset),s(t._pf)||(e._pf=d(t)),s(t._locale)||(e._locale=t._locale),Ke.length>0)for(n=0;n<Ke.length;n++)s(r=t[i=Ke[n]])||(e[i]=r);return e}function m(t){f(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===et&&(et=!0,e.updateOffset(this),et=!1)}function _(e){return e instanceof m||null!=e&&null!=e._isAMomentObject}function y(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function g(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=y(t)),n}function p(e,t,n){var s,i=Math.min(e.length,t.length),r=Math.abs(e.length-t.length),a=0;for(s=0;s<i;s++)(n&&e[s]!==t[s]||!n&&g(e[s])!==g(t[s]))&&a++;return a+r}function w(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function v(t,n){var s=!0;return u(function(){if(null!=e.deprecationHandler&&e.deprecationHandler(null,t),s){for(var i,r=[],a=0;a<arguments.length;a++){if(i="","object"==typeof arguments[a]){i+="\n["+a+"] ";for(var o in arguments[0])i+=o+": "+arguments[0][o]+", ";i=i.slice(0,-2)}else i=arguments[a];r.push(i)}w(t+"\nArguments: "+Array.prototype.slice.call(r).join("")+"\n"+(new Error).stack),s=!1}return n.apply(this,arguments)},n)}function M(t,n){null!=e.deprecationHandler&&e.deprecationHandler(t,n),tt[t]||(w(n),tt[t]=!0)}function k(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function S(e,t){var s,i=u({},e);for(s in t)o(t,s)&&(n(e[s])&&n(t[s])?(i[s]={},u(i[s],e[s]),u(i[s],t[s])):null!=t[s]?i[s]=t[s]:delete i[s]);for(s in e)o(e,s)&&!o(t,s)&&n(e[s])&&(i[s]=u({},i[s]));return i}function D(e){null!=e&&this.set(e)}function Y(e,t){var n=e.toLowerCase();st[n]=st[n+"s"]=st[t]=e}function O(e){return"string"==typeof e?st[e]||st[e.toLowerCase()]:void 0}function x(e){var t,n,s={};for(n in e)o(e,n)&&(t=O(n))&&(s[t]=e[n]);return s}function T(e,t){it[e]=t}function b(e,t,n){var s=""+Math.abs(e),i=t-s.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}function P(e,t,n,s){var i=s;"string"==typeof s&&(i=function(){return this[s]()}),e&&(ut[e]=i),t&&(ut[t[0]]=function(){return b(i.apply(this,arguments),t[1],t[2])}),n&&(ut[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function W(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function R(e,t){return e.isValid()?(t=C(t,e.localeData()),ot[t]=ot[t]||function(e){var t,n,s=e.match(rt);for(t=0,n=s.length;t<n;t++)ut[s[t]]?s[t]=ut[s[t]]:s[t]=W(s[t]);return function(t){var i,r="";for(i=0;i<n;i++)r+=k(s[i])?s[i].call(t,e):s[i];return r}}(t),ot[t](e)):e.localeData().invalidDate()}function C(e,t){function n(e){return t.longDateFormat(e)||e}var s=5;for(at.lastIndex=0;s>=0&&at.test(e);)e=e.replace(at,n),at.lastIndex=0,s-=1;return e}function F(e,t,n){Yt[e]=k(t)?t:function(e,s){return e&&n?n:t}}function U(e,t){return o(Yt,e)?Yt[e](t._strict,t._locale):new RegExp(function(e){return N(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i}))}(e))}function N(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function H(e,t){var n,s=t;for("string"==typeof e&&(e=[e]),i(t)&&(s=function(e,n){n[t]=g(e)}),n=0;n<e.length;n++)Ot[e[n]]=s}function L(e,t){H(e,function(e,n,s,i){s._w=s._w||{},t(e,s._w,s,i)})}function G(e,t,n){null!=t&&o(Ot,e)&&Ot[e](t,n._a,n,e)}function V(e){return j(e)?366:365}function j(e){return e%4==0&&e%100!=0||e%400==0}function I(t,n){return function(s){return null!=s?(A(this,t,s),e.updateOffset(this,n),this):E(this,t)}}function E(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function A(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&j(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),z(n,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function z(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=function(e,t){return(e%t+t)%t}(t,12);return e+=(t-n)/12,1===n?j(e)?29:28:31-n%7%2}function Z(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=g(t);else if(t=e.localeData().monthsParse(t),!i(t))return e;return n=Math.min(e.date(),z(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function $(t){return null!=t?(Z(this,t),e.updateOffset(this,!0),this):E(this,"Month")}function q(){function e(e,t){return t.length-e.length}var t,n,s=[],i=[],r=[];for(t=0;t<12;t++)n=l([2e3,t]),s.push(this.monthsShort(n,"")),i.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(s.sort(e),i.sort(e),r.sort(e),t=0;t<12;t++)s[t]=N(s[t]),i[t]=N(i[t]);for(t=0;t<24;t++)r[t]=N(r[t]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+s.join("|")+")","i")}function J(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function B(e,t,n){var s=7+t-n;return-((7+J(e,0,s).getUTCDay()-t)%7)+s-1}function Q(e,t,n,s,i){var r,a,o=1+7*(t-1)+(7+n-s)%7+B(e,s,i);return o<=0?a=V(r=e-1)+o:o>V(e)?(r=e+1,a=o-V(e)):(r=e,a=o),{year:r,dayOfYear:a}}function X(e,t,n){var s,i,r=B(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+K(i=e.year()-1,t,n):a>K(e.year(),t,n)?(s=a-K(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function K(e,t,n){var s=B(e,t,n),i=B(e+1,t,n);return(V(e)-s+i)/7}function ee(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],d=[];for(t=0;t<7;t++)n=l([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),d.push(s),d.push(i),d.push(r);for(a.sort(e),o.sort(e),u.sort(e),d.sort(e),t=0;t<7;t++)o[t]=N(o[t]),u[t]=N(u[t]),d[t]=N(d[t]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function te(){return this.hours()%12||12}function ne(e,t){P(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function se(e,t){return t._meridiemParse}function ie(e){return e?e.toLowerCase().replace("_","-"):e}function re(e){var t=null;if(!Xt[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=Jt._abbr;require("./locale/"+e),ae(t)}catch(e){}return Xt[e]}function ae(e,t){var n;return e&&(n=s(t)?ue(e):oe(e,t))&&(Jt=n),Jt._abbr}function oe(e,t){if(null!==t){var n=Qt;if(t.abbr=e,null!=Xt[e])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Xt[e]._config;else if(null!=t.parentLocale){if(null==Xt[t.parentLocale])return Kt[t.parentLocale]||(Kt[t.parentLocale]=[]),Kt[t.parentLocale].push({name:e,config:t}),null;n=Xt[t.parentLocale]._config}return Xt[e]=new D(S(n,t)),Kt[e]&&Kt[e].forEach(function(e){oe(e.name,e.config)}),ae(e),Xt[e]}return delete Xt[e],null}function ue(e){var n;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Jt;if(!t(e)){if(n=re(e))return n;e=[e]}return function(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=ie(e[r]).split("-")).length,n=(n=ie(e[r+1]))?n.split("-"):null;t>0;){if(s=re(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&p(i,n,!0)>=t-1)break;t--}r++}return null}(e)}function le(e){var t,n=e._a;return n&&-2===d(e).overflow&&(t=n[Tt]<0||n[Tt]>11?Tt:n[bt]<1||n[bt]>z(n[xt],n[Tt])?bt:n[Pt]<0||n[Pt]>24||24===n[Pt]&&(0!==n[Wt]||0!==n[Rt]||0!==n[Ct])?Pt:n[Wt]<0||n[Wt]>59?Wt:n[Rt]<0||n[Rt]>59?Rt:n[Ct]<0||n[Ct]>999?Ct:-1,d(e)._overflowDayOfYear&&(t<xt||t>bt)&&(t=bt),d(e)._overflowWeeks&&-1===t&&(t=Ft),d(e)._overflowWeekday&&-1===t&&(t=Ut),d(e).overflow=t),e}function de(e,t,n){return null!=e?e:null!=t?t:n}function he(t){var n,s,i,r,a,o=[];if(!t._d){for(i=function(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}(t),t._w&&null==t._a[bt]&&null==t._a[Tt]&&function(e){var t,n,s,i,r,a,o,u;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)r=1,a=4,n=de(t.GG,e._a[xt],X(pe(),1,4).year),s=de(t.W,1),((i=de(t.E,1))<1||i>7)&&(u=!0);else{r=e._locale._week.dow,a=e._locale._week.doy;var l=X(pe(),r,a);n=de(t.gg,e._a[xt],l.year),s=de(t.w,l.week),null!=t.d?((i=t.d)<0||i>6)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||t.e>6)&&(u=!0)):i=r}s<1||s>K(n,r,a)?d(e)._overflowWeeks=!0:null!=u?d(e)._overflowWeekday=!0:(o=Q(n,s,i,r,a),e._a[xt]=o.year,e._dayOfYear=o.dayOfYear)}(t),null!=t._dayOfYear&&(a=de(t._a[xt],i[xt]),(t._dayOfYear>V(a)||0===t._dayOfYear)&&(d(t)._overflowDayOfYear=!0),s=J(a,0,t._dayOfYear),t._a[Tt]=s.getUTCMonth(),t._a[bt]=s.getUTCDate()),n=0;n<3&&null==t._a[n];++n)t._a[n]=o[n]=i[n];for(;n<7;n++)t._a[n]=o[n]=null==t._a[n]?2===n?1:0:t._a[n];24===t._a[Pt]&&0===t._a[Wt]&&0===t._a[Rt]&&0===t._a[Ct]&&(t._nextDay=!0,t._a[Pt]=0),t._d=(t._useUTC?J:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&e>=0&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,o),r=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[Pt]=24),t._w&&void 0!==t._w.d&&t._w.d!==r&&(d(t).weekdayMismatch=!0)}}function ce(e){var t,n,s,i,r,a,o=e._i,u=en.exec(o)||tn.exec(o);if(u){for(d(e).iso=!0,t=0,n=sn.length;t<n;t++)if(sn[t][1].exec(u[1])){i=sn[t][0],s=!1!==sn[t][2];break}if(null==i)return void(e._isValid=!1);if(u[3]){for(t=0,n=rn.length;t<n;t++)if(rn[t][1].exec(u[3])){r=(u[2]||" ")+rn[t][0];break}if(null==r)return void(e._isValid=!1)}if(!s&&null!=r)return void(e._isValid=!1);if(u[4]){if(!nn.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),_e(e)}else e._isValid=!1}function fe(e,t,n,s,i,r){var a=[function(e){var t=parseInt(e,10);{if(t<=49)return 2e3+t;if(t<=999)return 1900+t}return t}(e),Vt.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&a.push(parseInt(r,10)),a}function me(e){var t=on.exec(function(e){return e.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(e._i));if(t){var n=fe(t[4],t[3],t[2],t[5],t[6],t[7]);if(!function(e,t,n){if(e&&At.indexOf(e)!==new Date(t[0],t[1],t[2]).getDay())return d(n).weekdayMismatch=!0,n._isValid=!1,!1;return!0}(t[1],n,e))return;e._a=n,e._tzm=function(e,t,n){if(e)return un[e];if(t)return 0;var s=parseInt(n,10),i=s%100;return(s-i)/100*60+i}(t[8],t[9],t[10]),e._d=J.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),d(e).rfc2822=!0}else e._isValid=!1}function _e(t){if(t._f!==e.ISO_8601)if(t._f!==e.RFC_2822){t._a=[],d(t).empty=!0;var n,s,i,r,a,o=""+t._i,u=o.length,l=0;for(i=C(t._f,t._locale).match(rt)||[],n=0;n<i.length;n++)r=i[n],(s=(o.match(U(r,t))||[])[0])&&((a=o.substr(0,o.indexOf(s))).length>0&&d(t).unusedInput.push(a),o=o.slice(o.indexOf(s)+s.length),l+=s.length),ut[r]?(s?d(t).empty=!1:d(t).unusedTokens.push(r),G(r,s,t)):t._strict&&!s&&d(t).unusedTokens.push(r);d(t).charsLeftOver=u-l,o.length>0&&d(t).unusedInput.push(o),t._a[Pt]<=12&&!0===d(t).bigHour&&t._a[Pt]>0&&(d(t).bigHour=void 0),d(t).parsedDateParts=t._a.slice(0),d(t).meridiem=t._meridiem,t._a[Pt]=function(e,t,n){var s;if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0),t):t}(t._locale,t._a[Pt],t._meridiem),he(t),le(t)}else me(t);else ce(t)}function ye(o){var l=o._i,y=o._f;return o._locale=o._locale||ue(o._l),null===l||void 0===y&&""===l?c({nullInput:!0}):("string"==typeof l&&(o._i=l=o._locale.preparse(l)),_(l)?new m(le(l)):(r(l)?o._d=l:t(y)?function(e){var t,n,s,i,r;if(0===e._f.length)return d(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;i<e._f.length;i++)r=0,t=f({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],_e(t),h(t)&&(r+=d(t).charsLeftOver,r+=10*d(t).unusedTokens.length,d(t).score=r,(null==s||r<s)&&(s=r,n=t));u(e,n||t)}(o):y?_e(o):function(o){var u=o._i;s(u)?o._d=new Date(e.now()):r(u)?o._d=new Date(u.valueOf()):"string"==typeof u?function(t){var n=an.exec(t._i);null===n?(ce(t),!1===t._isValid&&(delete t._isValid,me(t),!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t)))):t._d=new Date(+n[1])}(o):t(u)?(o._a=a(u.slice(0),function(e){return parseInt(e,10)}),he(o)):n(u)?function(e){if(!e._d){var t=x(e._i);e._a=a([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),he(e)}}(o):i(u)?o._d=new Date(u):e.createFromInputFallback(o)}(o),h(o)||(o._d=null),o))}function ge(e,s,i,r,a){var o={};return!0!==i&&!1!==i||(r=i,i=void 0),(n(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||t(e)&&0===e.length)&&(e=void 0),o._isAMomentObject=!0,o._useUTC=o._isUTC=a,o._l=i,o._i=e,o._f=s,o._strict=r,function(e){var t=new m(le(ye(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}(o)}function pe(e,t,n,s){return ge(e,t,n,s,!1)}function we(e,n){var s,i;if(1===n.length&&t(n[0])&&(n=n[0]),!n.length)return pe();for(s=n[0],i=1;i<n.length;++i)n[i].isValid()&&!n[i][e](s)||(s=n[i]);return s}function ve(e){var t=x(e),n=t.year||0,s=t.quarter||0,i=t.month||0,r=t.week||0,a=t.day||0,o=t.hour||0,u=t.minute||0,l=t.second||0,d=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Nt.call(hn,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,s=0;s<hn.length;++s)if(e[hn[s]]){if(n)return!1;parseFloat(e[hn[s]])!==g(e[hn[s]])&&(n=!0)}return!0}(t),this._milliseconds=+d+1e3*l+6e4*u+1e3*o*60*60,this._days=+a+7*r,this._months=+i+3*s+12*n,this._data={},this._locale=ue(),this._bubble()}function Me(e){return e instanceof ve}function ke(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Se(e,t){P(e,0,0,function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+b(~~(e/60),2)+t+b(~~e%60,2)})}function De(e,t){var n=(t||"").match(e);if(null===n)return null;var s=((n[n.length-1]||[])+"").match(cn)||["-",0,0],i=60*s[1]+g(s[2]);return 0===i?0:"+"===s[0]?i:-i}function Ye(t,n){var s,i;return n._isUTC?(s=n.clone(),i=(_(t)||r(t)?t.valueOf():pe(t).valueOf())-s.valueOf(),s._d.setTime(s._d.valueOf()+i),e.updateOffset(s,!1),s):pe(t).local()}function Oe(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function xe(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Te(e,t){var n,s,r,a=e,u=null;return Me(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:i(e)?(a={},t?a[t]=e:a.milliseconds=e):(u=fn.exec(e))?(n="-"===u[1]?-1:1,a={y:0,d:g(u[bt])*n,h:g(u[Pt])*n,m:g(u[Wt])*n,s:g(u[Rt])*n,ms:g(ke(1e3*u[Ct]))*n}):(u=mn.exec(e))?(n="-"===u[1]?-1:(u[1],1),a={y:be(u[2],n),M:be(u[3],n),w:be(u[4],n),d:be(u[5],n),h:be(u[6],n),m:be(u[7],n),s:be(u[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(r=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Ye(t,e),e.isBefore(t)?n=Pe(e,t):((n=Pe(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(pe(a.from),pe(a.to)),(a={}).ms=r.milliseconds,a.M=r.months),s=new ve(a),Me(e)&&o(e,"_locale")&&(s._locale=e._locale),s}function be(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Pe(e,t){var n={milliseconds:0,months:0};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function We(e,t){return function(n,s){var i,r;return null===s||isNaN(+s)||(M(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=n,n=s,s=r),n="string"==typeof n?+n:n,i=Te(n,s),Re(this,i,e),this}}function Re(t,n,s,i){var r=n._milliseconds,a=ke(n._days),o=ke(n._months);t.isValid()&&(i=null==i||i,o&&Z(t,E(t,"Month")+o*s),a&&A(t,"Date",E(t,"Date")+a*s),r&&t._d.setTime(t._d.valueOf()+r*s),i&&e.updateOffset(t,a||o))}function Ce(e,t){var n,s=12*(t.year()-e.year())+(t.month()-e.month()),i=e.clone().add(s,"months");return n=t-i<0?(t-i)/(i-e.clone().add(s-1,"months")):(t-i)/(e.clone().add(s+1,"months")-i),-(s+n)||0}function Fe(e){var t;return void 0===e?this._locale._abbr:(null!=(t=ue(e))&&(this._locale=t),this)}function Ue(){return this._locale}function Ne(e,t){P(0,[e,e.length],0,t)}function He(e,t,n,s,i){var r;return null==e?X(this,s,i).year:(r=K(e,s,i),t>r&&(t=r),function(e,t,n,s,i){var r=Q(e,t,n,s,i),a=J(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,t,n,s,i))}function Le(e,t){t[Ct]=g(1e3*("0."+e))}function Ge(e){return e}function Ve(e,t,n,s){var i=ue(),r=l().set(s,t);return i[n](r,e)}function je(e,t,n){if(i(e)&&(t=e,e=void 0),e=e||"",null!=t)return Ve(e,t,n,"month");var s,r=[];for(s=0;s<12;s++)r[s]=Ve(e,s,n,"month");return r}function Ie(e,t,n,s){"boolean"==typeof e?(i(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,i(t)&&(n=t,t=void 0),t=t||"");var r=ue(),a=e?r._week.dow:0;if(null!=n)return Ve(t,(n+a)%7,s,"day");var o,u=[];for(o=0;o<7;o++)u[o]=Ve(t,(o+a)%7,s,"day");return u}function Ee(e,t,n,s){var i=Te(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function Ae(e){return e<0?Math.floor(e):Math.ceil(e)}function ze(e){return 4800*e/146097}function Ze(e){return 146097*e/4800}function $e(e){return function(){return this.as(e)}}function qe(e){return function(){return this.isValid()?this._data[e]:NaN}}function Je(e){return(e>0)-(e<0)||+e}function Be(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=En(this._milliseconds)/1e3,s=En(this._days),i=En(this._months);t=y((e=y(n/60))/60),n%=60,e%=60;var r=y(i/12),a=i%=12,o=s,u=t,l=e,d=n?n.toFixed(3).replace(/\.?0+$/,""):"",h=this.asSeconds();if(!h)return"P0D";var c=h<0?"-":"",f=Je(this._months)!==Je(h)?"-":"",m=Je(this._days)!==Je(h)?"-":"",_=Je(this._milliseconds)!==Je(h)?"-":"";return c+"P"+(r?f+r+"Y":"")+(a?f+a+"M":"")+(o?m+o+"D":"")+(u||l||d?"T":"")+(u?_+u+"H":"")+(l?_+l+"M":"")+(d?_+d+"S":"")}var Qe,Xe;Xe=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1};var Ke=e.momentProperties=[],et=!1,tt={};e.suppressDeprecationWarnings=!1,e.deprecationHandler=null;var nt;nt=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)o(e,t)&&n.push(t);return n};var st={},it={},rt=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,at=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ot={},ut={},lt=/\d/,dt=/\d\d/,ht=/\d{3}/,ct=/\d{4}/,ft=/[+-]?\d{6}/,mt=/\d\d?/,_t=/\d\d\d\d?/,yt=/\d\d\d\d\d\d?/,gt=/\d{1,3}/,pt=/\d{1,4}/,wt=/[+-]?\d{1,6}/,vt=/\d+/,Mt=/[+-]?\d+/,kt=/Z|[+-]\d\d:?\d\d/gi,St=/Z|[+-]\d\d(?::?\d\d)?/gi,Dt=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Yt={},Ot={},xt=0,Tt=1,bt=2,Pt=3,Wt=4,Rt=5,Ct=6,Ft=7,Ut=8;P("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),P(0,["YY",2],0,function(){return this.year()%100}),P(0,["YYYY",4],0,"year"),P(0,["YYYYY",5],0,"year"),P(0,["YYYYYY",6,!0],0,"year"),Y("year","y"),T("year",1),F("Y",Mt),F("YY",mt,dt),F("YYYY",pt,ct),F("YYYYY",wt,ft),F("YYYYYY",wt,ft),H(["YYYYY","YYYYYY"],xt),H("YYYY",function(t,n){n[xt]=2===t.length?e.parseTwoDigitYear(t):g(t)}),H("YY",function(t,n){n[xt]=e.parseTwoDigitYear(t)}),H("Y",function(e,t){t[xt]=parseInt(e,10)}),e.parseTwoDigitYear=function(e){return g(e)+(g(e)>68?1900:2e3)};var Nt,Ht=I("FullYear",!0);Nt=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},P("M",["MM",2],"Mo",function(){return this.month()+1}),P("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),P("MMMM",0,0,function(e){return this.localeData().months(this,e)}),Y("month","M"),T("month",8),F("M",mt),F("MM",mt,dt),F("MMM",function(e,t){return t.monthsShortRegex(e)}),F("MMMM",function(e,t){return t.monthsRegex(e)}),H(["M","MM"],function(e,t){t[Tt]=g(e)-1}),H(["MMM","MMMM"],function(e,t,n,s){var i=n._locale.monthsParse(e,s,n._strict);null!=i?t[Tt]=i:d(n).invalidMonth=e});var Lt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Gt="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Vt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),jt=Dt,It=Dt;P("w",["ww",2],"wo","week"),P("W",["WW",2],"Wo","isoWeek"),Y("week","w"),Y("isoWeek","W"),T("week",5),T("isoWeek",5),F("w",mt),F("ww",mt,dt),F("W",mt),F("WW",mt,dt),L(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=g(e)});P("d",0,"do","day"),P("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),P("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),P("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),P("e",0,0,"weekday"),P("E",0,0,"isoWeekday"),Y("day","d"),Y("weekday","e"),Y("isoWeekday","E"),T("day",11),T("weekday",11),T("isoWeekday",11),F("d",mt),F("e",mt),F("E",mt),F("dd",function(e,t){return t.weekdaysMinRegex(e)}),F("ddd",function(e,t){return t.weekdaysShortRegex(e)}),F("dddd",function(e,t){return t.weekdaysRegex(e)}),L(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:d(n).invalidWeekday=e}),L(["d","e","E"],function(e,t,n,s){t[s]=g(e)});var Et="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),At="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),zt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Zt=Dt,$t=Dt,qt=Dt;P("H",["HH",2],0,"hour"),P("h",["hh",2],0,te),P("k",["kk",2],0,function(){return this.hours()||24}),P("hmm",0,0,function(){return""+te.apply(this)+b(this.minutes(),2)}),P("hmmss",0,0,function(){return""+te.apply(this)+b(this.minutes(),2)+b(this.seconds(),2)}),P("Hmm",0,0,function(){return""+this.hours()+b(this.minutes(),2)}),P("Hmmss",0,0,function(){return""+this.hours()+b(this.minutes(),2)+b(this.seconds(),2)}),ne("a",!0),ne("A",!1),Y("hour","h"),T("hour",13),F("a",se),F("A",se),F("H",mt),F("h",mt),F("k",mt),F("HH",mt,dt),F("hh",mt,dt),F("kk",mt,dt),F("hmm",_t),F("hmmss",yt),F("Hmm",_t),F("Hmmss",yt),H(["H","HH"],Pt),H(["k","kk"],function(e,t,n){var s=g(e);t[Pt]=24===s?0:s}),H(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),H(["h","hh"],function(e,t,n){t[Pt]=g(e),d(n).bigHour=!0}),H("hmm",function(e,t,n){var s=e.length-2;t[Pt]=g(e.substr(0,s)),t[Wt]=g(e.substr(s)),d(n).bigHour=!0}),H("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Pt]=g(e.substr(0,s)),t[Wt]=g(e.substr(s,2)),t[Rt]=g(e.substr(i)),d(n).bigHour=!0}),H("Hmm",function(e,t,n){var s=e.length-2;t[Pt]=g(e.substr(0,s)),t[Wt]=g(e.substr(s))}),H("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[Pt]=g(e.substr(0,s)),t[Wt]=g(e.substr(s,2)),t[Rt]=g(e.substr(i))});var Jt,Bt=I("Hours",!0),Qt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Gt,monthsShort:Vt,week:{dow:0,doy:6},weekdays:Et,weekdaysMin:zt,weekdaysShort:At,meridiemParse:/[ap]\.?m?\.?/i},Xt={},Kt={},en=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,tn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,nn=/Z|[+-]\d\d(?::?\d\d)?/,sn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],rn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],an=/^\/?Date\((\-?\d+)/i,on=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,un={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};e.createFromInputFallback=v("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var ln=v("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=pe.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:c()}),dn=v("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=pe.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:c()}),hn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Se("Z",":"),Se("ZZ",""),F("Z",St),F("ZZ",St),H(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=De(St,e)});var cn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var fn=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,mn=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;Te.fn=ve.prototype,Te.invalid=function(){return Te(NaN)};var _n=We(1,"add"),yn=We(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var gn=v("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});P(0,["gg",2],0,function(){return this.weekYear()%100}),P(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ne("gggg","weekYear"),Ne("ggggg","weekYear"),Ne("GGGG","isoWeekYear"),Ne("GGGGG","isoWeekYear"),Y("weekYear","gg"),Y("isoWeekYear","GG"),T("weekYear",1),T("isoWeekYear",1),F("G",Mt),F("g",Mt),F("GG",mt,dt),F("gg",mt,dt),F("GGGG",pt,ct),F("gggg",pt,ct),F("GGGGG",wt,ft),F("ggggg",wt,ft),L(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=g(e)}),L(["gg","GG"],function(t,n,s,i){n[i]=e.parseTwoDigitYear(t)}),P("Q",0,"Qo","quarter"),Y("quarter","Q"),T("quarter",7),F("Q",lt),H("Q",function(e,t){t[Tt]=3*(g(e)-1)}),P("D",["DD",2],"Do","date"),Y("date","D"),T("date",9),F("D",mt),F("DD",mt,dt),F("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),H(["D","DD"],bt),H("Do",function(e,t){t[bt]=g(e.match(mt)[0])});var pn=I("Date",!0);P("DDD",["DDDD",3],"DDDo","dayOfYear"),Y("dayOfYear","DDD"),T("dayOfYear",4),F("DDD",gt),F("DDDD",ht),H(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),P("m",["mm",2],0,"minute"),Y("minute","m"),T("minute",14),F("m",mt),F("mm",mt,dt),H(["m","mm"],Wt);var wn=I("Minutes",!1);P("s",["ss",2],0,"second"),Y("second","s"),T("second",15),F("s",mt),F("ss",mt,dt),H(["s","ss"],Rt);var vn=I("Seconds",!1);P("S",0,0,function(){return~~(this.millisecond()/100)}),P(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),P(0,["SSS",3],0,"millisecond"),P(0,["SSSS",4],0,function(){return 10*this.millisecond()}),P(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),P(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),P(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),P(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),P(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),Y("millisecond","ms"),T("millisecond",16),F("S",gt,lt),F("SS",gt,dt),F("SSS",gt,ht);var Mn;for(Mn="SSSS";Mn.length<=9;Mn+="S")F(Mn,vt);for(Mn="S";Mn.length<=9;Mn+="S")H(Mn,Le);var kn=I("Milliseconds",!1);P("z",0,0,"zoneAbbr"),P("zz",0,0,"zoneName");var Sn=m.prototype;Sn.add=_n,Sn.calendar=function(t,n){var s=t||pe(),i=Ye(s,this).startOf("day"),r=e.calendarFormat(this,i)||"sameElse",a=n&&(k(n[r])?n[r].call(this,s):n[r]);return this.format(a||this.localeData().calendar(r,this,pe(s)))},Sn.clone=function(){return new m(this)},Sn.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Ye(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=O(t)){case"year":r=Ce(this,s)/12;break;case"month":r=Ce(this,s);break;case"quarter":r=Ce(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:y(r)},Sn.endOf=function(e){return void 0===(e=O(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},Sn.format=function(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var n=R(this,t);return this.localeData().postformat(n)},Sn.from=function(e,t){return this.isValid()&&(_(e)&&e.isValid()||pe(e).isValid())?Te({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},Sn.fromNow=function(e){return this.from(pe(),e)},Sn.to=function(e,t){return this.isValid()&&(_(e)&&e.isValid()||pe(e).isValid())?Te({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},Sn.toNow=function(e){return this.to(pe(),e)},Sn.get=function(e){return e=O(e),k(this[e])?this[e]():this},Sn.invalidAt=function(){return d(this).overflow},Sn.isAfter=function(e,t){var n=_(e)?e:pe(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=O(s(t)?"millisecond":t))?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},Sn.isBefore=function(e,t){var n=_(e)?e:pe(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=O(s(t)?"millisecond":t))?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},Sn.isBetween=function(e,t,n,s){return("("===(s=s||"()")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(")"===s[1]?this.isBefore(t,n):!this.isAfter(t,n))},Sn.isSame=function(e,t){var n,s=_(e)?e:pe(e);return!(!this.isValid()||!s.isValid())&&("millisecond"===(t=O(t||"millisecond"))?this.valueOf()===s.valueOf():(n=s.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},Sn.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},Sn.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},Sn.isValid=function(){return h(this)},Sn.lang=gn,Sn.locale=Fe,Sn.localeData=Ue,Sn.max=dn,Sn.min=ln,Sn.parsingFlags=function(){return u({},d(this))},Sn.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t=[];for(var n in e)t.push({unit:n,priority:it[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=x(e)),s=0;s<n.length;s++)this[n[s].unit](e[n[s].unit]);else if(e=O(e),k(this[e]))return this[e](t);return this},Sn.startOf=function(e){switch(e=O(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this},Sn.subtract=yn,Sn.toArray=function(){return[this.year(),this.month(),this.date(),this.hour(),this.minute(),this.second(),this.millisecond()]},Sn.toObject=function(){return{years:this.year(),months:this.month(),date:this.date(),hours:this.hours(),minutes:this.minutes(),seconds:this.seconds(),milliseconds:this.milliseconds()}},Sn.toDate=function(){return new Date(this.valueOf())},Sn.toISOString=function(){if(!this.isValid())return null;var e=this.clone().utc();return e.year()<0||e.year()>9999?R(e,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):k(Date.prototype.toISOString)?this.toDate().toISOString():R(e,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},Sn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',s=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=t+'[")]';return this.format(n+s+"-MM-DD[T]HH:mm:ss.SSS"+i)},Sn.toJSON=function(){return this.isValid()?this.toISOString():null},Sn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},Sn.unix=function(){return Math.floor(this.valueOf()/1e3)},Sn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},Sn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Sn.year=Ht,Sn.isLeapYear=function(){return j(this.year())},Sn.weekYear=function(e){return He.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},Sn.isoWeekYear=function(e){return He.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},Sn.quarter=Sn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},Sn.month=$,Sn.daysInMonth=function(){return z(this.year(),this.month())},Sn.week=Sn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},Sn.isoWeek=Sn.isoWeeks=function(e){var t=X(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},Sn.weeksInYear=function(){var e=this.localeData()._week;return K(this.year(),e.dow,e.doy)},Sn.isoWeeksInYear=function(){return K(this.year(),1,4)},Sn.date=pn,Sn.day=Sn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,"d")):t},Sn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},Sn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},Sn.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},Sn.hour=Sn.hours=Bt,Sn.minute=Sn.minutes=wn,Sn.second=Sn.seconds=vn,Sn.millisecond=Sn.milliseconds=kn,Sn.utcOffset=function(t,n,s){var i,r=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=De(St,t)))return this}else Math.abs(t)<16&&!s&&(t*=60);return!this._isUTC&&n&&(i=Oe(this)),this._offset=t,this._isUTC=!0,null!=i&&this.add(i,"m"),r!==t&&(!n||this._changeInProgress?Re(this,Te(t-r,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:Oe(this)},Sn.utc=function(e){return this.utcOffset(0,e)},Sn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Oe(this),"m")),this},Sn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=De(kt,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},Sn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?pe(e).utcOffset():0,(this.utcOffset()-e)%60==0)},Sn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Sn.isLocal=function(){return!!this.isValid()&&!this._isUTC},Sn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Sn.isUtc=xe,Sn.isUTC=xe,Sn.zoneAbbr=function(){return this._isUTC?"UTC":""},Sn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},Sn.dates=v("dates accessor is deprecated. Use date instead.",pn),Sn.months=v("months accessor is deprecated. Use month instead",$),Sn.years=v("years accessor is deprecated. Use year instead",Ht),Sn.zone=v("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),Sn.isDSTShifted=v("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var e={};if(f(e,this),(e=ye(e))._a){var t=e._isUTC?l(e._a):pe(e._a);this._isDSTShifted=this.isValid()&&p(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var Dn=D.prototype;Dn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return k(s)?s.call(t,n):s},Dn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},Dn.invalidDate=function(){return this._invalidDate},Dn.ordinal=function(e){return this._ordinal.replace("%d",e)},Dn.preparse=Ge,Dn.postformat=Ge,Dn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return k(i)?i(e,t,n,s):i.replace(/%d/i,e)},Dn.pastFuture=function(e,t){var n=this._relativeTime[e>0?"future":"past"];return k(n)?n(t):n.replace(/%s/i,t)},Dn.set=function(e){var t,n;for(n in e)k(t=e[n])?this[n]=t:this["_"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},Dn.months=function(e,n){return e?t(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Lt).test(n)?"format":"standalone"][e.month()]:t(this._months)?this._months:this._months.standalone},Dn.monthsShort=function(e,n){return e?t(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Lt.test(n)?"format":"standalone"][e.month()]:t(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},Dn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=l([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=Nt.call(this._shortMonthsParse,a))?i:null:-1!==(i=Nt.call(this._longMonthsParse,a))?i:null:"MMM"===t?-1!==(i=Nt.call(this._shortMonthsParse,a))?i:-1!==(i=Nt.call(this._longMonthsParse,a))?i:null:-1!==(i=Nt.call(this._longMonthsParse,a))?i:-1!==(i=Nt.call(this._shortMonthsParse,a))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=l([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(r="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},Dn.monthsRegex=function(e){return this._monthsParseExact?(o(this,"_monthsRegex")||q.call(this),e?this._monthsStrictRegex:this._monthsRegex):(o(this,"_monthsRegex")||(this._monthsRegex=It),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},Dn.monthsShortRegex=function(e){return this._monthsParseExact?(o(this,"_monthsRegex")||q.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(o(this,"_monthsShortRegex")||(this._monthsShortRegex=jt),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},Dn.week=function(e){return X(e,this._week.dow,this._week.doy).week},Dn.firstDayOfYear=function(){return this._week.doy},Dn.firstDayOfWeek=function(){return this._week.dow},Dn.weekdays=function(e,n){return e?t(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(n)?"format":"standalone"][e.day()]:t(this._weekdays)?this._weekdays:this._weekdays.standalone},Dn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},Dn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},Dn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=l([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=Nt.call(this._weekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Nt.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=Nt.call(this._minWeekdaysParse,a))?i:null:"dddd"===t?-1!==(i=Nt.call(this._weekdaysParse,a))?i:-1!==(i=Nt.call(this._shortWeekdaysParse,a))?i:-1!==(i=Nt.call(this._minWeekdaysParse,a))?i:null:"ddd"===t?-1!==(i=Nt.call(this._shortWeekdaysParse,a))?i:-1!==(i=Nt.call(this._weekdaysParse,a))?i:-1!==(i=Nt.call(this._minWeekdaysParse,a))?i:null:-1!==(i=Nt.call(this._minWeekdaysParse,a))?i:-1!==(i=Nt.call(this._weekdaysParse,a))?i:-1!==(i=Nt.call(this._shortWeekdaysParse,a))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=l([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[s]||(r="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},Dn.weekdaysRegex=function(e){return this._weekdaysParseExact?(o(this,"_weekdaysRegex")||ee.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(o(this,"_weekdaysRegex")||(this._weekdaysRegex=Zt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},Dn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(o(this,"_weekdaysRegex")||ee.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(o(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=$t),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},Dn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(o(this,"_weekdaysRegex")||ee.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(o(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=qt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},Dn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},Dn.meridiem=function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},ae("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),e.lang=v("moment.lang is deprecated. Use moment.locale instead.",ae),e.langData=v("moment.langData is deprecated. Use moment.localeData instead.",ue);var Yn=Math.abs,On=$e("ms"),xn=$e("s"),Tn=$e("m"),bn=$e("h"),Pn=$e("d"),Wn=$e("w"),Rn=$e("M"),Cn=$e("y"),Fn=qe("milliseconds"),Un=qe("seconds"),Nn=qe("minutes"),Hn=qe("hours"),Ln=qe("days"),Gn=qe("months"),Vn=qe("years"),jn=Math.round,In={ss:44,s:45,m:45,h:22,d:26,M:11},En=Math.abs,An=ve.prototype;return An.isValid=function(){return this._isValid},An.abs=function(){var e=this._data;return this._milliseconds=Yn(this._milliseconds),this._days=Yn(this._days),this._months=Yn(this._months),e.milliseconds=Yn(e.milliseconds),e.seconds=Yn(e.seconds),e.minutes=Yn(e.minutes),e.hours=Yn(e.hours),e.months=Yn(e.months),e.years=Yn(e.years),this},An.add=function(e,t){return Ee(this,e,t,1)},An.subtract=function(e,t){return Ee(this,e,t,-1)},An.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=O(e))||"year"===e)return t=this._days+s/864e5,n=this._months+ze(t),"month"===e?n:n/12;switch(t=this._days+Math.round(Ze(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},An.asMilliseconds=On,An.asSeconds=xn,An.asMinutes=Tn,An.asHours=bn,An.asDays=Pn,An.asWeeks=Wn,An.asMonths=Rn,An.asYears=Cn,An.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12):NaN},An._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return r>=0&&a>=0&&o>=0||r<=0&&a<=0&&o<=0||(r+=864e5*Ae(Ze(o)+a),a=0,o=0),u.milliseconds=r%1e3,e=y(r/1e3),u.seconds=e%60,t=y(e/60),u.minutes=t%60,n=y(t/60),u.hours=n%24,a+=y(n/24),i=y(ze(a)),o+=i,a-=Ae(Ze(i)),s=y(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},An.clone=function(){return Te(this)},An.get=function(e){return e=O(e),this.isValid()?this[e+"s"]():NaN},An.milliseconds=Fn,An.seconds=Un,An.minutes=Nn,An.hours=Hn,An.days=Ln,An.weeks=function(){return y(this.days()/7)},An.months=Gn,An.years=Vn,An.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),n=function(e,t,n){var s=Te(e).abs(),i=jn(s.as("s")),r=jn(s.as("m")),a=jn(s.as("h")),o=jn(s.as("d")),u=jn(s.as("M")),l=jn(s.as("y")),d=i<=In.ss&&["s",i]||i<In.s&&["ss",i]||r<=1&&["m"]||r<In.m&&["mm",r]||a<=1&&["h"]||a<In.h&&["hh",a]||o<=1&&["d"]||o<In.d&&["dd",o]||u<=1&&["M"]||u<In.M&&["MM",u]||l<=1&&["y"]||["yy",l];return d[2]=t,d[3]=+e>0,d[4]=n,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,d)}(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)},An.toISOString=Be,An.toString=Be,An.toJSON=Be,An.locale=Fe,An.localeData=Ue,An.toIsoString=v("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Be),An.lang=gn,P("X",0,0,"unix"),P("x",0,0,"valueOf"),F("x",Mt),F("X",/[+-]?\d+(\.\d{1,3})?/),H("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),H("x",function(e,t,n){n._d=new Date(g(e))}),e.version="2.19.4",function(e){Qe=e}(pe),e.fn=Sn,e.min=function(){return we("isBefore",[].slice.call(arguments,0))},e.max=function(){return we("isAfter",[].slice.call(arguments,0))},e.now=function(){return Date.now?Date.now():+new Date},e.utc=l,e.unix=function(e){return pe(1e3*e)},e.months=function(e,t){return je(e,t,"months")},e.isDate=r,e.locale=ae,e.invalid=c,e.duration=Te,e.isMoment=_,e.weekdays=function(e,t,n){return Ie(e,t,n,"weekdays")},e.parseZone=function(){return pe.apply(null,arguments).parseZone()},e.localeData=ue,e.isDuration=Me,e.monthsShort=function(e,t){return je(e,t,"monthsShort")},e.weekdaysMin=function(e,t,n){return Ie(e,t,n,"weekdaysMin")},e.defineLocale=oe,e.updateLocale=function(e,t){if(null!=t){var n,s,i=Qt;null!=(s=re(e))&&(i=s._config),(n=new D(t=S(i,t))).parentLocale=Xt[e],Xt[e]=n,ae(e)}else null!=Xt[e]&&(null!=Xt[e].parentLocale?Xt[e]=Xt[e].parentLocale:null!=Xt[e]&&delete Xt[e]);return Xt[e]},e.locales=function(){return nt(Xt)},e.weekdaysShort=function(e,t,n){return Ie(e,t,n,"weekdaysShort")},e.normalizeUnits=O,e.relativeTimeRounding=function(e){return void 0===e?jn:"function"==typeof e&&(jn=e,!0)},e.relativeTimeThreshold=function(e,t){return void 0!==In[e]&&(void 0===t?In[e]:(In[e]=t,"s"===e&&(In.ss=t-1),!0))},e.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},e.prototype=Sn,e});
\ No newline at end of file
diff --git a/www/js/vendor/moment.nl.js b/www/js/vendor/moment.nl.js
deleted file mode 100644
index 8b47a5d107e4d2463f662078fd263b772b328451..0000000000000000000000000000000000000000
--- a/www/js/vendor/moment.nl.js
+++ /dev/null
@@ -1,59 +0,0 @@
-//! moment.js locale configuration
-//! locale : dutch (nl)
-//! author : RA van Hagen : https://github.com/RavanH
-
-(function (global, factory) {
-   typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
-   typeof define === 'function' && define.amd ? define(['moment'], factory) :
-   factory(global.moment)
-}(this, function (moment) { 'use strict';
-
-    var nl = moment.defineLocale('nl', {
-        months : 'januari|februari|maart|april|mei|juni|juli|augustus|september|oktober|november|december'.split('|'),
-        monthsShort : 'jan|feb|mrt|apr|mei|jun|jul|aug|sep|okt|nov|dec'.split('|'),
-        weekdays : 'zondag|maandag|dinsdag|woensdag|donderdag|vrijdag|zaterdag'.split('|'),
-        weekdaysShort : 'zo.|ma.|di.|wo.|do.|vr.|za.'.split('|'),
-        weekdaysMin : 'zo|ma|di|wo|do|vr|za'.split('|'),
-        longDateFormat : {
-            LT : 'HH:mm',
-            LTS : 'HH:mm:ss',
-            L : 'DD/MM/YYYY',
-            LL : 'D MMMM YYYY',
-            LLL : 'D MMMM YYYY HH:mm',
-            LLLL : 'dddd D MMMM YYYY HH:mm'
-        },
-        calendar : {
-            sameDay: '[Vandaag om] LT',
-            nextDay: '[Morgen om] LT',
-            nextWeek: 'dddd [om] LT',
-            lastDay: '[Gisteren om] LT',
-            lastWeek: '[afgelopen] dddd [om] LT',
-            sameElse: 'L'
-        },
-        relativeTime : {
-            future : 'over %s',
-            past : '%s geleden',
-            s : 'enkele seconden',
-            m : 'een minuut',
-            mm : '%d minuten',
-            h : 'een uur',
-            hh : '%d uren',
-            d : 'een dag',
-            dd : '%d dagen',
-            M : 'een maand',
-            MM : '%d maanden',
-            y : 'een jaar',
-            yy : '%d jaar'
-        },
-        ordinalParse: /\d{1,2}(er|)/,
-        ordinal : function (number) {
-            return number + '<sup>e</sup>';
-        },
-        week : {
-            dow : 1, // Monday is the first day of the week.
-            doy : 4  // The week that contains Jan 4th is the first week of the year.
-        }
-    });
-
-    return nl;
-}));
diff --git a/www/js/vendor/nacl_factory.js b/www/js/vendor/nacl_factory.js
deleted file mode 100644
index a01f4205ded63055db8e6b640df6ec1d88bb012b..0000000000000000000000000000000000000000
--- a/www/js/vendor/nacl_factory.js
+++ /dev/null
@@ -1,622 +0,0 @@
-var nacl_factory = {
-  instantiate: function (on_ready, optionsOpt) {
-    var options = optionsOpt || {};
-    var requested_total_memory = options.requested_total_memory || 33554432;
-    var undefined_reference_value = (function (v) { return v; })();
-
-    if (typeof on_ready !== 'function') {
-      throw new Error("nacl_factory: Expects on_ready callback as first argument. New in v1.1.0.");
-    }
-
-    return (function (window, document) {
-      var on_ready_call_needed = false;
-      var Module = {
-        TOTAL_MEMORY: requested_total_memory,
-        onRuntimeInitialized: function () {
-          if (nacl) {
-            on_ready(nacl);
-          } else {
-            on_ready_call_needed = true;
-          }
-        }
-      };
-      if (options.memoryInitializerPrefixURL) {
-        Module.memoryInitializerPrefixURL = options.memoryInitializerPrefixURL;
-      }
-      var nacl_raw = Module;
-var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){abort("NO_DYNAMIC_EXECUTION=1 was set, cannot eval")}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[null,null,null,null,null,null,null,null],addFunction:(function(func){for(var i=0;i<Runtime.functionPointers.length;i++){if(!Runtime.functionPointers[i]){Runtime.functionPointers[i]=func;return 1*(1+i)}}throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}),removeFunction:(function(index){Runtime.functionPointers[(index-1)/1]=null}),warnOnce:(function(text){if(!Runtime.warnOnce.shown)Runtime.warnOnce.shown={};if(!Runtime.warnOnce.shown[text]){Runtime.warnOnce.shown[text]=1;Module.printErr(text)}}),funcWrappers:{},getFuncWrapper:(function(func,sig){assert(sig);if(!Runtime.funcWrappers[sig]){Runtime.funcWrappers[sig]={}}var sigCache=Runtime.funcWrappers[sig];if(!sigCache[func]){if(sig.length===1){sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func)}}else if(sig.length===2){sigCache[func]=function dynCall_wrapper(arg){return Runtime.dynCall(sig,func,[arg])}}else{sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func,Array.prototype.slice.call(arguments))}}}return sigCache[func]}),getCompilerSetting:(function(name){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"}),stackAlloc:(function(size){var ret=STACKTOP;STACKTOP=STACKTOP+size|0;STACKTOP=STACKTOP+15&-16;return ret}),staticAlloc:(function(size){var ret=STATICTOP;STATICTOP=STATICTOP+size|0;STATICTOP=STATICTOP+15&-16;return ret}),dynamicAlloc:(function(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=(ret+size+15|0)&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];if(!func){abort("NO_DYNAMIC_EXECUTION=1 was set, cannot eval")}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=Runtime.stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=Runtime.stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType==="string")ret=Pointer_stringify(ret);if(stack!==0){if(opts&&opts.async){EmterpreterAsync.asyncFinalizers.push((function(){Runtime.stackRestore(stack)}));return}Runtime.stackRestore(stack)}return ret};cwrap=function cwrap(ident,returnType,argTypes){return(function(){return ccall(ident,returnType,argTypes,arguments)})}}))();Module["ccall"]=ccall;Module["cwrap"]=cwrap;function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];if(typeof curr==="function"){curr=Runtime.getFunctionIndex(curr)}type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=Runtime.getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}Module["allocate"]=allocate;function getMemory(size){if(!staticSealed)return Runtime.staticAlloc(size);if(!runtimeInitialized)return Runtime.dynamicAlloc(size);return _malloc(size)}Module["getMemory"]=getMemory;function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}return func}Runtime.warnOnce("warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling");return func}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;var HEAP;var buffer;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value "+TOTAL_MEMORY+", (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||35e6;var WASM_PAGE_SIZE=64*1024;var totalMemory=WASM_PAGE_SIZE;while(totalMemory<TOTAL_MEMORY||totalMemory<2*TOTAL_STACK){if(totalMemory<16*1024*1024){totalMemory*=2}else{totalMemory+=16*1024*1024}}if(totalMemory!==TOTAL_MEMORY){TOTAL_MEMORY=totalMemory}if(Module["buffer"]){buffer=Module["buffer"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw"Runtime error: expected the system to be little-endian!";Module["HEAP"]=HEAP;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8;Module["HEAP16"]=HEAP16;Module["HEAP32"]=HEAP32;Module["HEAPU8"]=HEAPU8;Module["HEAPU16"]=HEAPU16;Module["HEAPU32"]=HEAPU32;Module["HEAPF32"]=HEAPF32;Module["HEAPF64"]=HEAPF64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var ASM_CONSTS=[(function(){{return Module.getRandomValue()}}),(function(){{if(Module.getRandomValue===undefined){try{var window_="object"===typeof window?window:self,crypto_=typeof window_.crypto!=="undefined"?window_.crypto:window_.msCrypto,randomValuesStandard=(function(){var buf=new Uint32Array(1);crypto_.getRandomValues(buf);return buf[0]>>>0});randomValuesStandard();Module.getRandomValue=randomValuesStandard}catch(e){try{var crypto=require("crypto"),randomValueNodeJS=(function(){var buf=crypto.randomBytes(4);return(buf[0]<<24|buf[1]<<16|buf[2]<<8|buf[3])>>>0});randomValueNodeJS();Module.getRandomValue=randomValueNodeJS}catch(e){throw"No secure random number generator found"}}}}})];function _emscripten_asm_const_i(code){return ASM_CONSTS[code]()}function _emscripten_asm_const_v(code){return ASM_CONSTS[code]()}STATIC_BASE=8;STATICTOP=STATIC_BASE+34544;__ATINIT__.push();allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,232,149,143,194,178,39,176,69,195,244,137,242,239,152,240,213,223,172,5,211,198,51,57,177,56,2,136,109,83,252,5,199,23,106,112,61,77,216,79,186,60,11,118,13,16,103,15,42,32,83,250,44,57,204,198,78,199,253,119,146,172,3,122,19,232,149,143,194,178,39,176,69,195,244,137,242,239,152,240,213,223,172,5,211,198,51,57,177,56,2,136,109,83,252,133,180,23,106,112,61,77,216,79,186,60,11,118,13,16,103,15,42,32,83,250,44,57,204,198,78,199,253,119,146,172,3,250,236,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,237,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,217,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,218,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,219,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,201,188,243,103,230,9,106,59,167,202,132,133,174,103,187,43,248,148,254,114,243,110,60,241,54,29,95,58,245,79,165,209,130,230,173,127,82,14,81,31,108,62,43,140,104,5,155,107,189,65,251,171,217,131,31,121,33,126,19,25,205,224,91,182,120,89,255,133,114,211,0,189,110,21,255,15,10,106,0,41,192,1,0,152,232,121,255,188,60,160,255,153,113,206,255,0,183,226,254,180,13,72,255,176,160,14,254,211,201,134,255,158,24,143,0,127,105,53,0,96,12,189,0,167,215,251,255,159,76,128,254,106,101,225,255,30,252,4,0,146,12,174,0,89,241,178,254,10,229,166,255,123,221,42,254,30,20,212,0,82,128,3,0,48,209,243,0,119,121,64,255,50,227,156,255,0,110,197,1,103,27,144,0,133,59,140,1,189,241,36,255,248,37,195,1,96,220,55,0,183,76,62,255,195,66,61,0,50,76,164,1,225,164,76,255,76,61,163,255,117,62,31,0,81,145,64,255,118,65,14,0,162,115,214,255,6,138,46,0,124,230,244,255,10,138,143,0,52,26,194,0,184,244,76,0,129,143,41,1,190,244,19,255,123,170,122,255,98,129,68,0,121,213,147,0,86,101,30,255,161,103,155,0,140,89,67,255,239,229,190,1,67,11,181,0,198,240,137,254,238,69,188,255,67,151,238,0,19,42,108,255,229,85,113,1,50,68,135,255,17,106,9,0,50,103,1,255,80,1,168,1,35,152,30,255,16,168,185,1,56,89,232,255,101,210,252,0,41,250,71,0,204,170,79,255,14,46,239,255,80,77,239,0,189,214,75,255,17,141,249,0,38,80,76,255,190,85,117,0,86,228,170,0,156,216,208,1,195,207,164,255,150,66,76,255,175,225,16,255,141,80,98,1,76,219,242,0,198,162,114,0,46,218,152,0,155,43,241,254,155,160,104,255,51,187,165,0,2,17,175,0,66,84,160,1,247,58,30,0,35,65,53,254,69,236,191,0,45,134,245,1,163,123,221,0,32,110,20,255,52,23,165,0,186,214,71,0,233,176,96,0,242,239,54,1,57,89,138,0,83,0,84,255,136,160,100,0,92,142,120,254,104,124,190,0,181,177,62,255,250,41,85,0,152,130,42,1,96,252,246,0,151,151,63,254,239,133,62,0,32,56,156,0,45,167,189,255,142,133,179,1,131,86,211,0,187,179,150,254,250,170,14,255,210,163,78,0,37,52,151,0,99,77,26,0,238,156,213,255,213,192,209,1,73,46,84,0,20,65,41,1,54,206,79,0,201,131,146,254,170,111,24,255,177,33,50,254,171,38,203,255,78,247,116,0,209,221,153,0,133,128,178,1,58,44,25,0,201,39,59,1,189,19,252,0,49,229,210,1,117,187,117,0,181,179,184,1,0,114,219,0,48,94,147,0,245,41,56,0,125,13,204,254,244,173,119,0,44,221,32,254,84,234,20,0,249,160,198,1,236,126,234,255,47,99,168,254,170,226,153,255,102,179,216,0,226,141,122,255,122,66,153,254,182,245,134,0,227,228,25,1,214,57,235,255,216,173,56,255,181,231,210,0,119,128,157,255,129,95,136,255,110,126,51,0,2,169,183,255,7,130,98,254,69,176,94,255,116,4,227,1,217,242,145,255,202,173,31,1,105,1,39,255,46,175,69,0,228,47,58,255,215,224,69,254,207,56,69,255,16,254,139,255,23,207,212,255,202,20,126,255,95,213,96,255,9,176,33,0,200,5,207,255,241,42,128,254,35,33,192,255,248,229,196,1,129,17,120,0,251,103,151,255,7,52,112,255,140,56,66,255,40,226,245,255,217,70,37,254,172,214,9,255,72,67,134,1,146,192,214,255,44,38,112,0,68,184,75,255,206,90,251,0,149,235,141,0,181,170,58,0,116,244,239,0,92,157,2,0,102,173,98,0,233,137,96,1,127,49,203,0,5,155,148,0,23,148,9,255,211,122,12,0,34,134,26,255,219,204,136,0,134,8,41,255,224,83,43,254,85,25,247,0,109,127,0,254,169,136,48,0,238,119,219,255,231,173,213,0,206,18,254,254,8,186,7,255,126,9,7,1,111,42,72,0,111,52,236,254,96,63,141,0,147,191,127,254,205,78,192,255,14,106,237,1,187,219,76,0,175,243,187,254,105,89,173,0,85,25,89,1,162,243,148,0,2,118,209,254,33,158,9,0,139,163,46,255,93,70,40,0,108,42,142,254,111,252,142,255,155,223,144,0,51,229,167,255,73,252,155,255,94,116,12,255,152,160,218,255,156,238,37,255,179,234,207,255,197,0,179,255,154,164,141,0,225,196,104,0,10,35,25,254,209,212,242,255,97,253,222,254,184,101,229,0,222,18,127,1,164,136,135,255,30,207,140,254,146,97,243,0,129,192,26,254,201,84,33,255,111,10,78,255,147,81,178,255,4,4,24,0,161,238,215,255,6,141,33,0,53,215,14,255,41,181,208,255,231,139,157,0,179,203,221,255,255,185,113,0,189,226,172,255,113,66,214,255,202,62,45,255,102,64,8,255,78,174,16,254,133,117,68,255,133,59,140,1,189,241,36,255,248,37,195,1,96,220,55,0,183,76,62,255,195,66,61,0,50,76,164,1,225,164,76,255,76,61,163,255,117,62,31,0,81,145,64,255,118,65,14,0,162,115,214,255,6,138,46,0,124,230,244,255,10,138,143,0,52,26,194,0,184,244,76,0,129,143,41,1,190,244,19,255,123,170,122,255,98,129,68,0,121,213,147,0,86,101,30,255,161,103,155,0,140,89,67,255,239,229,190,1,67,11,181,0,198,240,137,254,238,69,188,255,234,113,60,255,37,255,57,255,69,178,182,254,128,208,179,0,118,26,125,254,3,7,214,255,241,50,77,255,85,203,197,255,211,135,250,255,25,48,100,255,187,213,180,254,17,88,105,0,83,209,158,1,5,115,98,0,4,174,60,254,171,55,110,255,217,181,17,255,20,188,170,0,146,156,102,254,87,214,174,255,114,122,155,1,233,44,170,0,127,8,239,1,214,236,234,0,175,5,219,0,49,106,61,255,6,66,208,255,2,106,110,255,81,234,19,255,215,107,192,255,67,151,238,0,19,42,108,255,229,85,113,1,50,68,135,255,17,106,9,0,50,103,1,255,80,1,168,1,35,152,30,255,16,168,185,1,56,89,232,255,101,210,252,0,41,250,71,0,204,170,79,255,14,46,239,255,80,77,239,0,189,214,75,255,17,141,249,0,38,80,76,255,190,85,117,0,86,228,170,0,156,216,208,1,195,207,164,255,150,66,76,255,175,225,16,255,141,80,98,1,76,219,242,0,198,162,114,0,46,218,152,0,155,43,241,254,155,160,104,255,178,9,252,254,100,110,212,0,14,5,167,0,233,239,163,255,28,151,157,1,101,146,10,255,254,158,70,254,71,249,228,0,88,30,50,0,68,58,160,255,191,24,104,1,129,66,129,255,192,50,85,255,8,179,138,255,38,250,201,0,115,80,160,0,131,230,113,0,125,88,147,0,90,68,199,0,253,76,158,0,28,255,118,0,113,250,254,0,66,75,46,0,230,218,43,0,229,120,186,1,148,68,43,0,136,124,238,1,187,107,197,255,84,53,246,255,51,116,254,255,51,187,165,0,2,17,175,0,66,84,160,1,247,58,30,0,35,65,53,254,69,236,191,0,45,134,245,1,163,123,221,0,32,110,20,255,52,23,165,0,186,214,71,0,233,176,96,0,242,239,54,1,57,89,138,0,83,0,84,255,136,160,100,0,92,142,120,254,104,124,190,0,181,177,62,255,250,41,85,0,152,130,42,1,96,252,246,0,151,151,63,254,239,133,62,0,32,56,156,0,45,167,189,255,142,133,179,1,131,86,211,0,187,179,150,254,250,170,14,255,68,113,21,255,222,186,59,255,66,7,241,1,69,6,72,0,86,156,108,254,55,167,89,0,109,52,219,254,13,176,23,255,196,44,106,255,239,149,71,255,164,140,125,255,159,173,1,0,51,41,231,0,145,62,33,0,138,111,93,1,185,83,69,0,144,115,46,0,97,151,16,255,24,228,26,0,49,217,226,0,113,75,234,254,193,153,12,255,182,48,96,255,14,13,26,0,128,195,249,254,69,193,59,0,132,37,81,254,125,106,60,0,214,240,169,1,164,227,66,0,210,163,78,0,37,52,151,0,99,77,26,0,238,156,213,255,213,192,209,1,73,46,84,0,20,65,41,1,54,206,79,0,201,131,146,254,170,111,24,255,177,33,50,254,171,38,203,255,78,247,116,0,209,221,153,0,133,128,178,1,58,44,25,0,201,39,59,1,189,19,252,0,49,229,210,1,117,187,117,0,181,179,184,1,0,114,219,0,48,94,147,0,245,41,56,0,125,13,204,254,244,173,119,0,44,221,32,254,84,234,20,0,249,160,198,1,236,126,234,255,143,62,221,0,129,89,214,255,55,139,5,254,68,20,191,255,14,204,178,1,35,195,217,0,47,51,206,1,38,246,165,0,206,27,6,254,158,87,36,0,217,52,146,255,125,123,215,255,85,60,31,255,171,13,7,0,218,245,88,254,252,35,60,0,55,214,160,255,133,101,56,0,224,32,19,254,147,64,234,0,26,145,162,1,114,118,125,0,248,252,250,0,101,94,196,255,198,141,226,254,51,42,182,0,135,12,9,254,109,172,210,255,197,236,194,1,241,65,154,0,48,156,47,255,153,67,55,255,218,165,34,254,74,180,179,0,218,66,71,1,88,122,99,0,212,181,219,255,92,42,231,255,239,0,154,0,245,77,183,255,94,81,170,1,18,213,216,0,171,93,71,0,52,94,248,0,18,151,161,254,197,209,66,255,174,244,15,254,162,48,183,0,49,61,240,254,182,93,195,0,199,228,6,1,200,5,17,255,137,45,237,255,108,148,4,0,90,79,237,255,39,63,77,255,53,82,207,1,142,22,118,255,101,232,18,1,92,26,67,0,5,200,88,255,33,168,138,255,149,225,72,0,2,209,27,255,44,245,168,1,220,237,17,255,30,211,105,254,141,238,221,0,128,80,245,254,111,254,14,0,222,95,190,1,223,9,241,0,146,76,212,255,108,205,104,255,63,117,153,0,144,69,48,0,35,228,111,0,192,33,193,255,112,214,190,254,115,152,151,0,23,102,88,0,51,74,248,0,226,199,143,254,204,162,101,255,208,97,189,1,245,104,18,0,230,246,30,255,23,148,69,0,110,88,52,254,226,181,89,255,208,47,90,254,114,161,80,255,33,116,248,0,179,152,87,255,69,144,177,1,88,238,26,255,58,32,113,1,1,77,69,0,59,121,52,255,152,238,83,0,52,8,193,0,231,39,233,255,199,34,138,0,222,68,173,0,91,57,242,254,220,210,127,255,192,7,246,254,151,35,187,0,195,236,165,0,111,93,206,0,212,247,133,1,154,133,209,255,155,231,10,0,64,78,38,0,122,249,100,1,30,19,97,255,62,91,249,1,248,133,77,0,197,63,168,254,116,10,82,0,184,236,113,254,212,203,194,255,61,100,252,254,36,5,202,255,119,91,153,255,129,79,29,0,103,103,171,254,237,215,111,255,216,53,69,0,239,240,23,0,194,149,221,255,38,225,222,0,232,255,180,254,118,82,133,255,57,209,177,1,139,232,133,0,158,176,46,254,194,115,46,0,88,247,229,1,28,103,191,0,221,222,175,254,149,235,44,0,151,228,25,254,218,105,103,0,142,85,210,0,149,129,190,255,213,65,94,254,117,134,224,255,82,198,117,0,157,221,220,0,163,101,36,0,197,114,37,0,104,172,166,254,11,182,0,0,81,72,188,255,97,188,16,255,69,6,10,0,199,147,145,255,8,9,115,1,65,214,175,255,217,173,209,0,80,127,166,0,247,229,4,254,167,183,124,255,90,28,204,254,175,59,240,255,11,41,248,1,108,40,51,255,144,177,195,254,150,250,126,0,138,91,65,1,120,60,222,255,245,193,239,0,29,214,189,255,128,2,25,0,80,154,162,0,77,220,107,1,234,205,74,255,54,166,103,255,116,72,9,0,228,94,47,255,30,200,25,255,35,214,89,255,61,176,140,255,83,226,163,255,75,130,172,0,128,38,17,0,95,137,152,255,215,124,159,1,79,93,0,0,148,82,157,254,195,130,251,255,40,202,76,255,251,126,224,0,157,99,62,254,207,7,225,255,96,68,195,0,140,186,157,255,131,19,231,255,42,128,254,0,52,219,61,254,102,203,72,0,141,7,11,255,186,164,213,0,31,122,119,0,133,242,145,0,208,252,232,255,91,213,182,255,143,4,250,254,249,215,74,0,165,30,111,1,171,9,223,0,229,123,34,1,92,130,26,255,77,155,45,1,195,139,28,255,59,224,78,0,136,17,247,0,108,121,32,0,79,250,189,255,96,227,252,254,38,241,62,0,62,174,125,255,155,111,93,255,10,230,206,1,97,197,40,255,0,49,57,254,65,250,13,0,18,251,150,255,220,109,210,255,5,174,166,254,44,129,189,0,235,35,147,255,37,247,141,255,72,141,4,255,103,107,255,0,247,90,4,0,53,44,42,0,2,30,240,0,4,59,63,0,88,78,36,0,113,167,180,0,190,71,193,255,199,158,164,255,58,8,172,0,77,33,12,0,65,63,3,0,153,77,33,255,172,254,102,1,228,221,4,255,87,30,254,1,146,41,86,255,138,204,239,254,108,141,17,255,187,242,135,0,210,208,127,0,68,45,14,254,73,96,62,0,81,60,24,255,170,6,36,255,3,249,26,0,35,213,109,0,22,129,54,255,21,35,225,255,234,61,56,255,58,217,6,0,143,124,88,0,236,126,66,0,209,38,183,255,34,238,6,255,174,145,102,0,95,22,211,0,196,15,153,254,46,84,232,255,117,34,146,1,231,250,74,255,27,134,100,1,92,187,195,255,170,198,112,0,120,28,42,0,209,70,67,0,29,81,31,0,29,168,100,1,169,173,160,0,107,35,117,0,62,96,59,255,81,12,69,1,135,239,190,255,220,252,18,0,163,220,58,255,137,137,188,255,83,102,109,0,96,6,76,0,234,222,210,255,185,174,205,1,60,158,213,255,13,241,214,0,172,129,140,0,93,104,242,0,192,156,251,0,43,117,30,0,225,81,158,0,127,232,218,0,226,28,203,0,233,27,151,255,117,43,5,255,242,14,47,255,33,20,6,0,137,251,44,254,27,31,245,255,183,214,125,254,40,121,149,0,186,158,213,255,89,8,227,0,69,88,0,254,203,135,225,0,201,174,203,0,147,71,184,0,18,121,41,254,94,5,78,0,224,214,240,254,36,5,180,0,251,135,231,1,163,138,212,0,210,249,116,254,88,129,187,0,19,8,49,254,62,14,144,255,159,76,211,0,214,51,82,0,109,117,228,254,103,223,203,255,75,252,15,1,154,71,220,255,23,13,91,1,141,168,96,255,181,182,133,0,250,51,55,0,234,234,212,254,175,63,158,0,39,240,52,1,158,189,36,255,213,40,85,1,32,180,247,255,19,102,26,1,84,24,97,255,69,21,222,0,148,139,122,255,220,213,235,1,232,203,255,0,121,57,147,0,227,7,154,0,53,22,147,1,72,1,225,0,82,134,48,254,83,60,157,255,145,72,169,0,34,103,239,0,198,233,47,0,116,19,4,255,184,106,9,255,183,129,83,0,36,176,230,1,34,103,72,0,219,162,134,0,245,42,158,0,32,149,96,254,165,44,144,0,202,239,72,254,215,150,5,0,42,66,36,1,132,215,175,0,86,174,86,255,26,197,156,255,49,232,135,254,103,182,82,0,253,128,176,1,153,178,122,0,245,250,10,0,236,24,178,0,137,106,132,0,40,29,41,0,50,30,152,255,124,105,38,0,230,191,75,0,143,43,170,0,44,131,20,255,44,13,23,255,237,255,155,1,159,109,100,255,112,181,24,255,104,220,108,0,55,211,131,0,99,12,213,255,152,151,145,255,238,5,159,0,97,155,8,0,33,108,81,0,1,3,103,0,62,109,34,255,250,155,180,0,32,71,195,255,38,70,145,1,159,95,245,0,69,229,101,1,136,28,240,0,79,224,25,0,78,110,121,255,248,168,124,0,187,128,247,0,2,147,235,254,79,11,132,0,70,58,12,1,181,8,163,255,79,137,133,255,37,170,11,255,141,243,85,255,176,231,215,255,204,150,164,255,239,215,39,255,46,87,156,254,8,163,88,255,172,34,232,0,66,44,102,255,27,54,41,254,236,99,87,255,41,123,169,1,52,114,43,0,117,134,40,0,155,134,26,0,231,207,91,254,35,132,38,255,19,102,125,254,36,227,133,255,118,3,113,255,29,13,124,0,152,96,74,1,88,146,206,255,167,191,220,254,162,18,88,255,182,100,23,0,31,117,52,0,81,46,106,1,12,2,7,0,69,80,201,1,209,246,172,0,12,48,141,1,224,211,88,0,116,226,159,0,122,98,130,0,65,236,234,1,225,226,9,255,207,226,123,1,89,214,59,0,112,135,88,1,90,244,203,255,49,11,38,1,129,108,186,0,89,112,15,1,101,46,204,255,127,204,45,254,79,255,221,255,51,73,18,255,127,42,101,255,241,21,202,0,160,227,7,0,105,50,236,0,79,52,197,255,104,202,208,1,180,15,16,0,101,197,78,255,98,77,203,0,41,185,241,1,35,193,124,0,35,155,23,255,207,53,192,0,11,125,163,1,249,158,185,255,4,131,48,0,21,93,111,255,61,121,231,1,69,200,36,255,185,48,185,255,111,238,21,255,39,50,25,255,99,215,163,255,87,212,30,255,164,147,5,255,128,6,35,1,108,223,110,255,194,76,178,0,74,101,180,0,243,47,48,0,174,25,43,255,82,173,253,1,54,114,192,255,40,55,91,0,215,108,176,255,11,56,7,0,224,233,76,0,209,98,202,254,242,25,125,0,44,193,93,254,203,8,177,0,135,176,19,0,112,71,213,255,206,59,176,1,4,67,26,0,14,143,213,254,42,55,208,255,60,67,120,0,193,21,163,0,99,164,115,0,10,20,118,0,156,212,222,254,160,7,217,255,114,245,76,1,117,59,123,0,176,194,86,254,213,15,176,0,78,206,207,254,213,129,59,0,233,251,22,1,96,55,152,255,236,255,15,255,197,89,84,255,93,149,133,0,174,160,113,0,234,99,169,255,152,116,88,0,144,164,83,255,95,29,198,255,34,47,15,255,99,120,134,255,5,236,193,0,249,247,126,255,147,187,30,0,50,230,117,255,108,217,219,255,163,81,166,255,72,25,169,254,155,121,79,255,28,155,89,254,7,126,17,0,147,65,33,1,47,234,253,0,26,51,18,0,105,83,199,255,163,196,230,0,113,248,164,0,226,254,218,0,189,209,203,255,164,247,222,254,255,35,165,0,4,188,243,1,127,179,71,0,37,237,254,255,100,186,240,0,5,57,71,254,103,72,73,255,244,18,81,254,229,210,132,255,238,6,180,255,11,229,174,255,227,221,192,1,17,49,28,0,163,215,196,254,9,118,4,255,51,240,71,0,113,129,109,255,76,240,231,0,188,177,127,0,125,71,44,1,26,175,243,0,94,169,25,254,27,230,29,0,15,139,119,1,168,170,186,255,172,197,76,255,252,75,188,0,137,124,196,0,72,22,96,255,45,151,249,1,220,145,100,0,64,192,159,255,120,239,226,0,129,178,146,0,0,192,125,0,235,138,234,0,183,157,146,0,83,199,192,255,184,172,72,255,73,225,128,0,77,6,250,255,186,65,67,0,104,246,207,0,188,32,138,255,218,24,242,0,67,138,81,254,237,129,121,255,20,207,150,1,41,199,16,255,6,20,128,0,159,118,5,0,181,16,143,255,220,38,15,0,23,64,147,254,73,26,13,0,87,228,57,1,204,124,128,0,43,24,223,0,219,99,199,0,22,75,20,255,19,27,126,0,157,62,215,0,110,29,230,0,179,167,255,1,54,252,190,0,221,204,182,254,179,158,65,255,81,157,3,0,194,218,159,0,170,223,0,0,224,11,32,255,38,197,98,0,168,164,37,0,23,88,7,1,164,186,110,0,96,36,134,0,234,242,229,0,250,121,19,0,242,254,112,255,3,47,94,1,9,239,6,255,81,134,153,254,214,253,168,255,67,124,224,0,245,95,74,0,28,30,44,254,1,109,220,255,178,89,89,0,252,36,76,0,24,198,46,255,76,77,111,0,134,234,136,255,39,94,29,0,185,72,234,255,70,68,135,255,231,102,7,254,77,231,140,0,167,47,58,1,148,97,118,255,16,27,225,1,166,206,143,255,110,178,214,255,180,131,162,0,143,141,225,1,13,218,78,255,114,153,33,1,98,104,204,0,175,114,117,1,167,206,75,0,202,196,83,1,58,64,67,0,138,47,111,1,196,247,128,255,137,224,224,254,158,112,207,0,154,100,255,1,134,37,107,0,198,128,79,255,127,209,155,255,163,254,185,254,60,14,243,0,31,219,112,254,29,217,65,0,200,13,116,254,123,60,196,255,224,59,184,254,242,89,196,0,123,16,75,254,149,16,206,0,69,254,48,1,231,116,223,255,209,160,65,1,200,80,98,0,37,194,184,254,148,63,34,0,139,240,65,255,217,144,132,255,56,38,45,254,199,120,210,0,108,177,166,255,160,222,4,0,220,126,119,254,165,107,160,255,82,220,248,1,241,175,136,0,144,141,23,255,169,138,84,0,160,137,78,255,226,118,80,255,52,27,132,255,63,96,139,255,152,250,39,0,188,155,15,0,232,51,150,254,40,15,232,255,240,229,9,255,137,175,27,255,75,73,97,1,218,212,11,0,135,5,162,1,107,185,213,0,2,249,107,255,40,242,70,0,219,200,25,0,25,157,13,0,67,82,80,255,196,249,23,255,145,20,149,0,50,72,146,0,94,76,148,1,24,251,65,0,31,192,23,0,184,212,201,255,123,233,162,1,247,173,72,0,162,87,219,254,126,134,89,0,159,11,12,254,166,105,29,0,73,27,228,1,113,120,183,255,66,163,109,1,212,143,11,255,159,231,168,1,255,128,90,0,57,14,58,254,89,52,10,255,253,8,163,1,0,145,210,255,10,129,85,1,46,181,27,0,103,136,160,254,126,188,209,255,34,35,111,0,215,219,24,255,212,11,214,254,101,5,118,0,232,197,133,255,223,167,109,255,237,80,86,255,70,139,94,0,158,193,191,1,155,15,51,255,15,190,115,0,78,135,207,255,249,10,27,1,181,125,233,0,95,172,13,254,170,213,161,255,39,236,138,255,95,93,87,255,190,128,95,0,125,15,206,0,166,150,159,0,227,15,158,255,206,158,120,255,42,141,128,0,101,178,120,1,156,109,131,0,218,14,44,254,247,168,206,255,212,112,28,0,112,17,228,255,90,16,37,1,197,222,108,0,254,207,83,255,9,90,243,255,243,244,172,0,26,88,115,255,205,116,122,0,191,230,193,0,180,100,11,1,217,37,96,255,154,78,156,0,235,234,31,255,206,178,178,255,149,192,251,0,182,250,135,0,246,22,105,0,124,193,109,255,2,210,149,255,169,17,170,0,0,96,110,255,117,9,8,1,50,123,40,255,193,189,99,0,34,227,160,0,48,80,70,254,211,51,236,0,45,122,245,254,44,174,8,0,173,37,233,255,158,65,171,0,122,69,215,255,90,80,2,255,131,106,96,254,227,114,135,0,205,49,119,254,176,62,64,255,82,51,17,255,241,20,243,255,130,13,8,254,128,217,243,255,162,27,1,254,90,118,241,0,246,198,246,255,55,16,118,255,200,159,157,0,163,17,1,0,140,107,121,0,85,161,118,255,38,0,149,0,156,47,238,0,9,166,166,1,75,98,181,255,50,74,25,0,66,15,47,0,139,225,159,0,76,3,142,255,14,238,184,0,11,207,53,255,183,192,186,1,171,32,174,255,191,76,221,1,247,170,219,0,25,172,50,254,217,9,233,0,203,126,68,255,183,92,48,0,127,167,183,1,65,49,254,0,16,63,127,1,254,21,170,255,59,224,127,254,22,48,63,255,27,78,130,254,40,195,29,0,250,132,112,254,35,203,144,0,104,169,168,0,207,253,30,255,104,40,38,254,94,228,88,0,206,16,128,255,212,55,122,255,223,22,234,0,223,197,127,0,253,181,181,1,145,102,118,0,236,153,36,255,212,217,72,255,20,38,24,254,138,62,62,0,152,140,4,0,230,220,99,255,1,21,212,255,148,201,231,0,244,123,9,254,0,171,210,0,51,58,37,255,1,255,14,255,244,183,145,254,0,242,166,0,22,74,132,0,121,216,41,0,95,195,114,254,133,24,151,255,156,226,231,255,247,5,77,255,246,148,115,254,225,92,81,255,222,80,246,254,170,123,89,255,74,199,141,0,29,20,8,255,138,136,70,255,93,75,92,0,221,147,49,254,52,126,226,0,229,124,23,0,46,9,181,0,205,64,52,1,131,254,28,0,151,158,212,0,131,64,78,0,206,25,171,0,0,230,139,0,191,253,110,254,103,247,167,0,64,40,40,1,42,165,241,255,59,75,228,254,124,243,189,255,196,92,178,255,130,140,86,255,141,89,56,1,147,198,5,255,203,248,158,254,144,162,141,0,11,172,226,0,130,42,21,255,1,167,143,255,144,36,36,255,48,88,164,254,168,170,220,0,98,71,214,0,91,208,79,0,159,76,201,1,166,42,214,255,69,255,0,255,6,128,125,255,190,1,140,0,146,83,218,255,215,238,72,1,122,127,53,0,189,116,165,255,84,8,66,255,214,3,208,255,213,110,133,0,195,168,44,1,158,231,69,0,162,64,200,254,91,58,104,0,182,58,187,254,249,228,136,0,203,134,76,254,99,221,233,0,75,254,214,254,80,69,154,0,64,152,248,254,236,136,202,255,157,105,153,254,149,175,20,0,22,35,19,255,124,121,233,0,186,250,198,254,132,229,139,0,137,80,174,255,165,125,68,0,144,202,148,254,235,239,248,0,135,184,118,0,101,94,17,255,122,72,70,254,69,130,146,0,127,222,248,1,69,127,118,255,30,82,215,254,188,74,19,255,229,167,194,254,117,25,66,255,65,234,56,254,213,22,156,0,151,59,93,254,45,28,27,255,186,126,164,255,32,6,239,0,127,114,99,1,219,52,2,255,99,96,166,254,62,190,126,255,108,222,168,1,75,226,174,0,230,226,199,0,60,117,218,255,252,248,20,1,214,188,204,0,31,194,134,254,123,69,192,255,169,173,36,254,55,98,91,0,223,42,102,254,137,1,102,0,157,90,25,0,239,122,64,255,252,6,233,0,7,54,20,255,82,116,174,0,135,37,54,255,15,186,125,0,227,112,175,255,100,180,225,255,42,237,244,255,244,173,226,254,248,18,33,0,171,99,150,255,74,235,50,255,117,82,32,254,106,168,237,0,207,109,208,1,228,9,186,0,135,60,169,254,179,92,143,0,244,170,104,255,235,45,124,255,70,99,186,0,117,137,183,0,224,31,215,0,40,9,100,0,26,16,95,1,68,217,87,0,8,151,20,255,26,100,58,255,176,165,203,1,52,118,70,0,7,32,254,254,244,254,245,255,167,144,194,255,125,113,23,255,176,121,181,0,136,84,209,0,138,6,30,255,89,48,28,0,33,155,14,255,25,240,154,0,141,205,109,1,70,115,62,255,20,40,107,254,138,154,199,255,94,223,226,255,157,171,38,0,163,177,25,254,45,118,3,255,14,222,23,1,209,190,81,255,118,123,232,1,13,213,101,255,123,55,123,254,27,246,165,0,50,99,76,255,140,214,32,255,97,65,67,255,24,12,28,0,174,86,78,1,64,247,96,0,160,135,67,0,66,55,243,255,147,204,96,255,26,6,33,255,98,51,83,1,153,213,208,255,2,184,54,255,25,218,11,0,49,67,246,254,18,149,72,255,13,25,72,0,42,79,214,0,42,4,38,1,27,139,144,255,149,187,23,0,18,164,132,0,245,84,184,254,120,198,104,255,126,218,96,0,56,117,234,255,13,29,214,254,68,47,10,255,167,154,132,254,152,38,198,0,66,178,89,255,200,46,171,255,13,99,83,255,210,187,253,255,170,45,42,1,138,209,124,0,214,162,141,0,12,230,156,0,102,36,112,254,3,147,67,0,52,215,123,255,233,171,54,255,98,137,62,0,247,218,39,255,231,218,236,0,247,191,127,0,195,146,84,0,165,176,92,255,19,212,94,255,17,74,227,0,88,40,153,1,198,147,1,255,206,67,245,254,240,3,218,255,61,141,213,255,97,183,106,0,195,232,235,254,95,86,154,0,209,48,205,254,118,209,241,255,240,120,223,1,213,29,159,0,163,127,147,255,13,218,93,0,85,24,68,254,70,20,80,255,189,5,140,1,82,97,254,255,99,99,191,255,132,84,133,255,107,218,116,255,112,122,46,0,105,17,32,0,194,160,63,255,68,222,39,1,216,253,92,0,177,105,205,255,149,201,195,0,42,225,11,255,40,162,115,0,9,7,81,0,165,218,219,0,180,22,0,254,29,146,252,255,146,207,225,1,180,135,96,0,31,163,112,0,177,11,219,255,133,12,193,254,43,78,50,0,65,113,121,1,59,217,6,255,110,94,24,1,112,172,111,0,7,15,96,0,36,85,123,0,71,150,21,255,208,73,188,0,192,11,167,1,213,245,34,0,9,230,92,0,162,142,39,255,215,90,27,0,98,97,89,0,94,79,211,0,90,157,240,0,95,220,126,1,102,176,226,0,36,30,224,254,35,31,127,0,231,232,115,1,85,83,130,0,210,73,245,255,47,143,114,255,68,65,197,0,59,72,62,255,183,133,173,254,93,121,118,255,59,177,81,255,234,69,173,255,205,128,177,0,220,244,51,0,26,244,209,1,73,222,77,255,163,8,96,254,150,149,211,0,158,254,203,1,54,127,139,0,161,224,59,0,4,109,22,255,222,42,45,255,208,146,102,255,236,142,187,0,50,205,245,255,10,74,89,254,48,79,142,0,222,76,130,255,30,166,63,0,236,12,13,255,49,184,244,0,187,113,102,0,218,101,253,0,153,57,182,254,32,150,42,0,25,198,146,1,237,241,56,0,140,68,5,0,91,164,172,255,78,145,186,254,67,52,205,0,219,207,129,1,109,115,17,0,54,143,58,1,21,248,120,255,179,255,30,0,193,236,66,255,1,255,7,255,253,192,48,255,19,69,217,1,3,214,0,255,64,101,146,1,223,125,35,255,235,73,179,255,249,167,226,0,225,175,10,1,97,162,58,0,106,112,171,1,84,172,5,255,133,140,178,255,134,245,142,0,97,90,125,255,186,203,185,255,223,77,23,255,192,92,106,0,15,198,115,255,217,152,248,0,171,178,120,255,228,134,53,0,176,54,193,1,250,251,53,0,213,10,100,1,34,199,106,0,151,31,244,254,172,224,87,255,14,237,23,255,253,85,26,255,127,39,116,255,172,104,100,0,251,14,70,255,212,208,138,255,253,211,250,0,176,49,165,0,15,76,123,255,37,218,160,255,92,135,16,1,10,126,114,255,70,5,224,255,247,249,141,0,68,20,60,1,241,210,189,255,195,217,187,1,151,3,113,0,151,92,174,0,231,62,178,255,219,183,225,0,23,23,33,255,205,181,80,0,57,184,248,255,67,180,1,255,90,123,93,255,39,0,162,255,96,248,52,255,84,66,140,0,34,127,228,255,194,138,7,1,166,110,188,0,21,17,155,1,154,190,198,255,214,80,59,255,18,7,143,0,72,29,226,1,199,217,249,0,232,161,71,1,149,190,201,0,217,175,95,254,113,147,67,255,138,143,199,255,127,204,1,0,29,182,83,1,206,230,155,255,186,204,60,0,10,125,85,255,232,96,25,255,255,89,247,255,213,254,175,1,232,193,81,0,28,43,156,254,12,69,8,0,147,24,248,0,18,198,49,0,134,60,35,0,118,246,18,255,49,88,254,254,228,21,186,255,182,65,112,1,219,22,1,255,22,126,52,255,189,53,49,255,112,25,143,0,38,127,55,255,226,101,163,254,208,133,61,255,137,69,174,1,190,118,145,255,60,98,219,255,217,13,245,255,250,136,10,0,84,254,226,0,201,31,125,1,240,51,251,255,31,131,130,255,2,138,50,255,215,215,177,1,223,12,238,255,252,149,56,255,124,91,68,255,72,126,170,254,119,255,100,0,130,135,232,255,14,79,178,0,250,131,197,0,138,198,208,0,121,216,139,254,119,18,36,255,29,193,122,0,16,42,45,255,213,240,235,1,230,190,169,255,198,35,228,254,110,173,72,0,214,221,241,255,56,148,135,0,192,117,78,254,141,93,207,255,143,65,149,0,21,18,98,255,95,44,244,1,106,191,77,0,254,85,8,254,214,110,176,255,73,173,19,254,160,196,199,255,237,90,144,0,193,172,113,255,200,155,136,254,228,90,221,0,137,49,74,1,164,221,215,255,209,189,5,255,105,236,55,255,42,31,129,1,193,255,236,0,46,217,60,0,138,88,187,255,226,82,236,255,81,69,151,255,142,190,16,1,13,134,8,0,127,122,48,255,81,64,156,0,171,243,139,0,237,35,246,0,122,143,193,254,212,122,146,0,95,41,255,1,87,132,77,0,4,212,31,0,17,31,78,0,39,45,173,254,24,142,217,255,95,9,6,255,227,83,6,0,98,59,130,254,62,30,33,0,8,115,211,1,162,97,128,255,7,184,23,254,116,28,168,255,248,138,151,255,98,244,240,0,186,118,130,0,114,248,235,255,105,173,200,1,160,124,71,255,94,36,164,1,175,65,146,255,238,241,170,254,202,198,197,0,228,71,138,254,45,246,109,255,194,52,158,0,133,187,176,0,83,252,154,254,89,189,221,255,170,73,252,0,148,58,125,0,36,68,51,254,42,69,177,255,168,76,86,255,38,100,204,255,38,53,35,0,175,19,97,0,225,238,253,255,81,81,135,0,210,27,255,254,235,73,107,0,8,207,115,0,82,127,136,0,84,99,21,254,207,19,136,0,100,164,101,0,80,208,77,255,132,207,237,255,15,3,15,255,33,166,110,0,156,95,85,255,37,185,111,1,150,106,35,255,166,151,76,0,114,87,135,255,159,194,64,0,12,122,31,255,232,7,101,254,173,119,98,0,154,71,220,254,191,57,53,255,168,232,160,255,224,32,99,255,218,156,165,0,151,153,163,0,217,13,148,1,197,113,89,0,149,28,161,254,207,23,30,0,105,132,227,255,54,230,94,255,133,173,204,255,92,183,157,255,88,144,252,254,102,33,90,0,159,97,3,0,181,218,155,255,240,114,119,0,106,214,53,255,165,190,115,1,152,91,225,255,88,106,44,255,208,61,113,0,151,52,124,0,191,27,156,255,110,54,236,1,14,30,166,255,39,127,207,1,229,199,28,0,188,228,188,254,100,157,235,0,246,218,183,1,107,22,193,255,206,160,95,0,76,239,147,0,207,161,117,0,51,166,2,255,52,117,10,254,73,56,227,255,152,193,225,0,132,94,136,255,101,191,209,0,32,107,229,255,198,43,180,1,100,210,118,0,114,67,153,255,23,88,26,255,89,154,92,1,220,120,140,255,144,114,207,255,252,115,250,255,34,206,72,0,138,133,127,255,8,178,124,1,87,75,97,0,15,229,92,254,240,67,131,255,118,123,227,254,146,120,104,255,145,213,255,1,129,187,70,255,219,119,54,0,1,19,173,0,45,150,148,1,248,83,72,0,203,233,169,1,142,107,56,0,247,249,38,1,45,242,80,255,30,233,103,0,96,82,70,0,23,201,111,0,81,39,30,255,161,183,78,255,194,234,33,255,68,227,140,254,216,206,116,0,70,27,235,255,104,144,79,0,164,230,93,254,214,135,156,0,154,187,242,254,188,20,131,255,36,109,174,0,159,112,241,0,5,110,149,1,36,165,218,0,166,29,19,1,178,46,73,0,93,43,32,254,248,189,237,0,102,155,141,0,201,93,195,255,241,139,253,255,15,111,98,255,108,65,163,254,155,79,190,255,73,174,193,254,246,40,48,255,107,88,11,254,202,97,85,255,253,204,18,255,113,242,66,0,110,160,194,254,208,18,186,0,81,21,60,0,188,104,167,255,124,166,97,254,210,133,142,0,56,242,137,254,41,111,130,0,111,151,58,1,111,213,141,255,183,172,241,255,38,6,196,255,185,7,123,255,46,11,246,0,245,105,119,1,15,2,161,255,8,206,45,255,18,202,74,255,83,124,115,1,212,141,157,0,83,8,209,254,139,15,232,255,172,54,173,254,50,247,132,0,214,189,213,0,144,184,105,0,223,254,248,0,255,147,240,255,23,188,72,0,7,51,54,0,188,25,180,254,220,180,0,255,83,160,20,0,163,189,243,255,58,209,194,255,87,73,60,0,106,24,49,0,245,249,220,0,22,173,167,0,118,11,195,255,19,126,237,0,110,159,37,255,59,82,47,0,180,187,86,0,188,148,208,1,100,37,133,255,7,112,193,0,129,188,156,255,84,106,129,255,133,225,202,0,14,236,111,255,40,20,101,0,172,172,49,254,51,54,74,255,251,185,184,255,93,155,224,255,180,249,224,1,230,178,146,0,72,57,54,254,178,62,184,0,119,205,72,0,185,239,253,255,61,15,218,0,196,67,56,255,234,32,171,1,46,219,228,0,208,108,234,255,20,63,232,255,165,53,199,1,133,228,5,255,52,205,107,0,74,238,140,255,150,156,219,254,239,172,178,255,251,189,223,254,32,142,211,255,218,15,138,1,241,196,80,0,28,36,98,254,22,234,199,0,61,237,220,255,246,57,37,0,142,17,142,255,157,62,26,0,43,238,95,254,3,217,6,255,213,25,240,1,39,220,174,255,154,205,48,254,19,13,192,255,244,34,54,254,140,16,155,0,240,181,5,254,155,193,60,0,166,128,4,255,36,145,56,255,150,240,219,0,120,51,145,0,82,153,42,1,140,236,146,0,107,92,248,1,189,10,3,0,63,136,242,0,211,39,24,0,19,202,161,1,173,27,186,255,210,204,239,254,41,209,162,255,182,254,159,255,172,116,52,0,195,103,222,254,205,69,59,0,53,22,41,1,218,48,194,0,80,210,242,0,210,188,207,0,187,161,161,254,216,17,1,0,136,225,113,0,250,184,63,0,223,30,98,254,77,168,162,0,59,53,175,0,19,201,10,255,139,224,194,0,147,193,154,255,212,189,12,254,1,200,174,255,50,133,113,1,94,179,90,0,173,182,135,0,94,177,113,0,43,89,215,255,136,252,106,255,123,134,83,254,5,245,66,255,82,49,39,1,220,2,224,0,97,129,177,0,77,59,89,0,61,29,155,1,203,171,220,255,92,78,139,0,145,33,181,255,169,24,141,1,55,150,179,0,139,60,80,255,218,39,97,0,2,147,107,255,60,248,72,0,173,230,47,1,6,83,182,255,16,105,162,254,137,212,81,255,180,184,134,1,39,222,164,255,221,105,251,1,239,112,125,0,63,7,97,0,63,104,227,255,148,58,12,0,90,60,224,255,84,212,252,0,79,215,168,0,248,221,199,1,115,121,1,0,36,172,120,0,32,162,187,255,57,107,49,255,147,42,21,0,106,198,43,1,57,74,87,0,126,203,81,255,129,135,195,0,140,31,177,0,221,139,194,0,3,222,215,0,131,68,231,0,177,86,178,254,124,151,180,0,184,124,38,1,70,163,17,0,249,251,181,1,42,55,227,0,226,161,44,0,23,236,110,0,51,149,142,1,93,5,236,0,218,183,106,254,67,24,77,0,40,245,209,255,222,121,153,0,165,57,30,0,83,125,60,0,70,38,82,1,229,6,188,0,109,222,157,255,55,118,63,255,205,151,186,0,227,33,149,255,254,176,246,1,227,177,227,0,34,106,163,254,176,43,79,0,106,95,78,1,185,241,122,255,185,14,61,0,36,1,202,0,13,178,162,255,247,11,132,0,161,230,92,1,65,1,185,255,212,50,165,1,141,146,64,255,158,242,218,0,21,164,125,0,213,139,122,1,67,71,87,0,203,158,178,1,151,92,43,0,152,111,5,255,39,3,239,255,217,255,250,255,176,63,71,255,74,245,77,1,250,174,18,255,34,49,227,255,246,46,251,255,154,35,48,1,125,157,61,255,106,36,78,255,97,236,153,0,136,187,120,255,113,134,171,255,19,213,217,254,216,94,209,255,252,5,61,0,94,3,202,0,3,26,183,255,64,191,43,255,30,23,21,0,129,141,77,255,102,120,7,1,194,76,140,0,188,175,52,255,17,81,148,0,232,86,55,1,225,48,172,0,134,42,42,255,238,50,47,0,169,18,254,0,20,147,87,255,14,195,239,255,69,247,23,0,238,229,128,255,177,49,112,0,168,98,251,255,121,71,248,0,243,8,145,254,246,227,153,255,219,169,177,254,251,139,165,255,12,163,185,255,164,40,171,255,153,159,27,254,243,109,91,255,222,24,112,1,18,214,231,0,107,157,181,254,195,147,0,255,194,99,104,255,89,140,190,255,177,66,126,254,106,185,66,0,49,218,31,0,252,174,158,0,188,79,230,1,238,41,224,0,212,234,8,1,136,11,181,0,166,117,83,255,68,195,94,0,46,132,201,0,240,152,88,0,164,57,69,254,160,224,42,255,59,215,67,255,119,195,141,255,36,180,121,254,207,47,8,255,174,210,223,0,101,197,68,255,255,82,141,1,250,137,233,0,97,86,133,1,16,80,69,0,132,131,159,0,116,93,100,0,45,141,139,0,152,172,157,255,90,43,91,0,71,153,46,0,39,16,112,255,217,136,97,255,220,198,25,254,177,53,49,0,222,88,134,255,128,15,60,0,207,192,169,255,192,116,209,255,106,78,211,1,200,213,183,255,7,12,122,254,222,203,60,255,33,110,199,254,251,106,117,0,228,225,4,1,120,58,7,255,221,193,84,254,112,133,27,0,189,200,201,255,139,135,150,0,234,55,176,255,61,50,65,0,152,108,169,255,220,85,1,255,112,135,227,0,162,26,186,0,207,96,185,254,244,136,107,0,93,153,50,1,198,97,151,0,110,11,86,255,143,117,174,255,115,212,200,0,5,202,183,0,237,164,10,254,185,239,62,0,236,120,18,254,98,123,99,255,168,201,194,254,46,234,214,0,191,133,49,255,99,169,119,0,190,187,35,1,115,21,45,255,249,131,72,0,112,6,123,255,214,49,181,254,166,233,34,0,92,197,102,254,253,228,205,255,3,59,201,1,42,98,46,0,219,37,35,255,169,195,38,0,94,124,193,1,156,43,223,0,95,72,133,254,120,206,191,0,122,197,239,255,177,187,79,255,254,46,2,1,250,167,190,0,84,129,19,0,203,113,166,255,249,31,189,254,72,157,202,255,208,71,73,255,207,24,72,0,10,16,18,1,210,81,76,255,88,208,192,255,126,243,107,255,238,141,120,255,199,121,234,255,137,12,59,255,36,220,123,255,148,179,60,254,240,12,29,0,66,0,97,1,36,30,38,255,115,1,93,255,96,103,231,255,197,158,59,1,192,164,240,0,202,202,57,255,24,174,48,0,89,77,155,1,42,76,215,0,244,151,233,0,23,48,81,0,239,127,52,254,227,130,37,255,248,116,93,1,124,132,118,0,173,254,192,1,6,235,83,255,110,175,231,1,251,28,182,0,129,249,93,254,84,184,128,0,76,181,62,0,175,128,186,0,100,53,136,254,109,29,226,0,221,233,58,1,20,99,74,0,0,22,160,0,134,13,21,0,9,52,55,255,17,89,140,0,175,34,59,0,84,165,119,255,224,226,234,255,7,72,166,255,123,115,255,1,18,214,246,0,250,7,71,1,217,220,185,0,212,35,76,255,38,125,175,0,189,97,210,0,114,238,44,255,41,188,169,254,45,186,154,0,81,92,22,0,132,160,193,0,121,208,98,255,13,81,44,255,203,156,82,0,71,58,21,255,208,114,191,254,50,38,147,0,154,216,195,0,101,25,18,0,60,250,215,255,233,132,235,255,103,175,142,1,16,14,92,0,141,31,110,254,238,241,45,255,153,217,239,1,97,168,47,255,249,85,16,1,28,175,62,255],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([57,254,54,0,222,231,126,0,166,45,117,254,18,189,96,255,228,76,50,0,200,244,94,0,198,152,120,1,68,34,69,255,12,65,160,254,101,19,90,0,167,197,120,255,68,54,185,255,41,218,188,0,113,168,48,0,88,105,189,1,26,82,32,255,185,93,164,1,228,240,237,255,66,182,53,0,171,197,92,255,107,9,233,1,199,120,144,255,78,49,10,255,109,170,105,255,90,4,31,255,28,244,113,255,74,58,11,0,62,220,246,255,121,154,200,254,144,210,178,255,126,57,129,1,43,250,14,255,101,111,28,1,47,86,241,255,61,70,150,255,53,73,5,255,30,26,158,0,209,26,86,0,138,237,74,0,164,95,188,0,142,60,29,254,162,116,248,255,187,175,160,0,151,18,16,0,209,111,65,254,203,134,39,255,88,108,49,255,131,26,71,255,221,27,215,254,104,105,93,255,31,236,31,254,135,0,211,255,143,127,110,1,212,73,229,0,233,67,167,254,195,1,208,255,132,17,221,255,51,217,90,0,67,235,50,255,223,210,143,0,179,53,130,1,233,106,198,0,217,173,220,255,112,229,24,255,175,154,93,254,71,203,246,255,48,66,133,255,3,136,230,255,23,221,113,254,235,111,213,0,170,120,95,254,251,221,2,0,45,130,158,254,105,94,217,255,242,52,180,254,213,68,45,255,104,38,28,0,244,158,76,0,161,200,96,255,207,53,13,255,187,67,148,0,170,54,248,0,119,162,178,255,83,20,11,0,42,42,192,1,146,159,163,255,183,232,111,0,77,229,21,255,71,53,143,0,27,76,34,0,246,136,47,255,219,39,182,255,92,224,201,1,19,142,14,255,69,182,241,255,163,118,245,0,9,109,106,1,170,181,247,255,78,47,238,255,84,210,176,255,213,107,139,0,39,38,11,0,72,21,150,0,72,130,69,0,205,77,155,254,142,133,21,0,71,111,172,254,226,42,59,255,179,0,215,1,33,128,241,0,234,252,13,1,184,79,8,0,110,30,73,255,246,141,189,0,170,207,218,1,74,154,69,255,138,246,49,255,155,32,100,0,125,74,105,255,90,85,61,255,35,229,177,255,62,125,193,255,153,86,188,1,73,120,212,0,209,123,246,254,135,209,38,255,151,58,44,1,92,69,214,255,14,12,88,255,252,153,166,255,253,207,112,255,60,78,83,255,227,124,110,0,180,96,252,255,53,117,33,254,164,220,82,255,41,1,27,255,38,164,166,255,164,99,169,254,61,144,70,255,192,166,18,0,107,250,66,0,197,65,50,0,1,179,18,255,255,104,1,255,43,153,35,255,80,111,168,0,110,175,168,0,41,105,45,255,219,14,205,255,164,233,140,254,43,1,118,0,233,67,195,0,178,82,159,255,138,87,122,255,212,238,90,255,144,35,124,254,25,140,164,0,251,215,44,254,133,70,107,255,101,227,80,254,92,169,55,0,215,42,49,0,114,180,85,255,33,232,27,1,172,213,25,0,62,176,123,254,32,133,24,255,225,191,62,0,93,70,153,0,181,42,104,1,22,191,224,255,200,200,140,255,249,234,37,0,149,57,141,0,195,56,208,255,254,130,70,255,32,173,240,255,29,220,199,0,110,100,115,255,132,229,249,0,228,233,223,255,37,216,209,254,178,177,209,255,183,45,165,254,224,97,114,0,137,97,168,255,225,222,172,0,165,13,49,1,210,235,204,255,252,4,28,254,70,160,151,0,232,190,52,254,83,248,93,255,62,215,77,1,175,175,179,255,160,50,66,0,121,48,208,0,63,169,209,255,0,210,200,0,224,187,44,1,73,162,82,0,9,176,143,255,19,76,193,255,29,59,167,1,24,43,154,0,28,190,190,0,141,188,129,0,232,235,203,255,234,0,109,255,54,65,159,0,60,88,232,255,121,253,150,254,252,233,131,255,198,110,41,1,83,77,71,255,200,22,59,254,106,253,242,255,21,12,207,255,237,66,189,0,90,198,202,1,225,172,127,0,53,22,202,0,56,230,132,0,1,86,183,0,109,190,42,0,243,68,174,1,109,228,154,0,200,177,122,1,35,160,183,255,177,48,85,255,90,218,169,255,248,152,78,0,202,254,110,0,6,52,43,0,142,98,65,255,63,145,22,0,70,106,93,0,232,138,107,1,110,179,61,255,211,129,218,1,242,209,92,0,35,90,217,1,182,143,106,255,116,101,217,255,114,250,221,255,173,204,6,0,60,150,163,0,73,172,44,255,239,110,80,255,237,76,153,254,161,140,249,0,149,232,229,0,133,31,40,255,174,164,119,0,113,51,214,0,129,228,2,254,64,34,243,0,107,227,244,255,174,106,200,255,84,153,70,1,50,35,16,0,250,74,216,254,236,189,66,255,153,249,13,0,230,178,4,255,221,41,238,0,118,227,121,255,94,87,140,254,254,119,92,0,73,239,246,254,117,87,128,0,19,211,145,255,177,46,252,0,229,91,246,1,69,128,247,255,202,77,54,1,8,11,9,255,153,96,166,0,217,214,173,255,134,192,2,1,0,207,0,0,189,174,107,1,140,134,100,0,158,193,243,1,182,102,171,0,235,154,51,0,142,5,123,255,60,168,89,1,217,14,92,255,19,214,5,1,211,167,254,0,44,6,202,254,120,18,236,255,15,113,184,255,184,223,139,0,40,177,119,254,182,123,90,255,176,165,176,0,247,77,194,0,27,234,120,0,231,0,214,255,59,39,30,0,125,99,145,255,150,68,68,1,141,222,248,0,153,123,210,255,110,127,152,255,229,33,214,1,135,221,197,0,137,97,2,0,12,143,204,255,81,41,188,0,115,79,130,255,94,3,132,0,152,175,187,255,124,141,10,255,126,192,179,255,11,103,198,0,149,6,45,0,219,85,187,1,230,18,178,255,72,182,152,0,3,198,184,255,128,112,224,1,97,161,230,0,254,99,38,255,58,159,197,0,151,66,219,0,59,69,143,255,185,112,249,0,119,136,47,255,123,130,132,0,168,71,95,255,113,176,40,1,232,185,173,0,207,93,117,1,68,157,108,255,102,5,147,254,49,97,33,0,89,65,111,254,247,30,163,255,124,217,221,1,102,250,216,0,198,174,75,254,57,55,18,0,227,5,236,1,229,213,173,0,201,109,218,1,49,233,239,0,30,55,158,1,25,178,106,0,155,111,188,1,94,126,140,0,215,31,238,1,77,240,16,0,213,242,25,1,38,71,168,0,205,186,93,254,49,211,140,255,219,0,180,255,134,118,165,0,160,147,134,255,110,186,35,255,198,243,42,0,243,146,119,0,134,235,163,1,4,241,135,255,193,46,193,254,103,180,79,255,225,4,184,254,242,118,130,0,146,135,176,1,234,111,30,0,69,66,213,254,41,96,123,0,121,94,42,255,178,191,195,255,46,130,42,0,117,84,8,255,233,49,214,254,238,122,109,0,6,71,89,1,236,211,123,0,244,13,48,254,119,148,14,0,114,28,86,255,75,237,25,255,145,229,16,254,129,100,53,255,134,150,120,254,168,157,50,0,23,72,104,255,224,49,14,0,255,123,22,255,151,185,151,255,170,80,184,1,134,182,20,0,41,100,101,1,153,33,16,0,76,154,111,1,86,206,234,255,192,160,164,254,165,123,93,255,1,216,164,254,67,17,175,255,169,11,59,255,158,41,61,255,73,188,14,255,195,6,137,255,22,147,29,255,20,103,3,255,246,130,227,255,122,40,128,0,226,47,24,254,35,36,32,0,152,186,183,255,69,202,20,0,195,133,195,0,222,51,247,0,169,171,94,1,183,0,160,255,64,205,18,1,156,83,15,255,197,58,249,254,251,89,110,255,50,10,88,254,51,43,216,0,98,242,198,1,245,151,113,0,171,236,194,1,197,31,199,255,229,81,38,1,41,59,20,0,253,104,230,0,152,93,14,255,246,242,146,254,214,169,240,255,240,102,108,254,160,167,236,0,154,218,188,0,150,233,202,255,27,19,250,1,2,71,133,255,175,12,63,1,145,183,198,0,104,120,115,255,130,251,247,0,17,212,167,255,62,123,132,255,247,100,189,0,155,223,152,0,143,197,33,0,155,59,44,255,150,93,240,1,127,3,87,255,95,71,207,1,167,85,1,255,188,152,116,255,10,23,23,0,137,195,93,1,54,98,97,0,240,0,168,255,148,188,127,0,134,107,151,0,76,253,171,0,90,132,192,0,146,22,54,0,224,66,54,254,230,186,229,255,39,182,196,0,148,251,130,255,65,131,108,254,128,1,160,0,169,49,167,254,199,254,148,255,251,6,131,0,187,254,129,255,85,82,62,0,178,23,58,255,254,132,5,0,164,213,39,0,134,252,146,254,37,53,81,255,155,134,82,0,205,167,238,255,94,45,180,255,132,40,161,0,254,111,112,1,54,75,217,0,179,230,221,1,235,94,191,255,23,243,48,1,202,145,203,255,39,118,42,255,117,141,253,0,254,0,222,0,43,251,50,0,54,169,234,1,80,68,208,0,148,203,243,254,145,7,135,0,6,254,0,0,252,185,127,0,98,8,129,255,38,35,72,255,211,36,220,1,40,26,89,0,168,64,197,254,3,222,239,255,2,83,215,254,180,159,105,0,58,115,194,0,186,116,106,255,229,247,219,255,129,118,193,0,202,174,183,1,166,161,72,0,201,107,147,254,237,136,74,0,233,230,106,1,105,111,168,0,64,224,30,1,1,229,3,0,102,151,175,255,194,238,228,255,254,250,212,0,187,237,121,0,67,251,96,1,197,30,11,0,183,95,204,0,205,89,138,0,64,221,37,1,255,223,30,255,178,48,211,255,241,200,90,255,167,209,96,255,57,130,221,0,46,114,200,255,61,184,66,0,55,182,24,254,110,182,33,0,171,190,232,255,114,94,31,0,18,221,8,0,47,231,254,0,255,112,83,0,118,15,215,255,173,25,40,254,192,193,31,255,238,21,146,255,171,193,118,255,101,234,53,254,131,212,112,0,89,192,107,1,8,208,27,0,181,217,15,255,231,149,232,0,140,236,126,0,144,9,199,255,12,79,181,254,147,182,202,255,19,109,182,255,49,212,225,0,74,163,203,0,175,233,148,0,26,112,51,0,193,193,9,255,15,135,249,0,150,227,130,0,204,0,219,1,24,242,205,0,238,208,117,255,22,244,112,0,26,229,34,0,37,80,188,255,38,45,206,254,240,90,225,255,29,3,47,255,42,224,76,0,186,243,167,0,32,132,15,255,5,51,125,0,139,135,24,0,6,241,219,0,172,229,133,255,246,214,50,0,231,11,207,255,191,126,83,1,180,163,170,255,245,56,24,1,178,164,211,255,3,16,202,1,98,57,118,255,141,131,89,254,33,51,24,0,243,149,91,255,253,52,14,0,35,169,67,254,49,30,88,255,179,27,36,255,165,140,183,0,58,189,151,0,88,31,0,0,75,169,66,0,66,101,199,255,24,216,199,1,121,196,26,255,14,79,203,254,240,226,81,255,94,28,10,255,83,193,240,255,204,193,131,255,94,15,86,0,218,40,157,0,51,193,209,0,0,242,177,0,102,185,247,0,158,109,116,0,38,135,91,0,223,175,149,0,220,66,1,255,86,60,232,0,25,96,37,255,225,122,162,1,215,187,168,255,158,157,46,0,56,171,162,0,232,240,101,1,122,22,9,0,51,9,21,255,53,25,238,255,217,30,232,254,125,169,148,0,13,232,102,0,148,9,37,0,165,97,141,1,228,131,41,0,222,15,243,255,254,18,17,0,6,60,237,1,106,3,113,0,59,132,189,0,92,112,30,0,105,208,213,0,48,84,179,255,187,121,231,254,27,216,109,255,162,221,107,254,73,239,195,255,250,31,57,255,149,135,89,255,185,23,115,1,3,163,157,255,18,112,250,0,25,57,187,255,161,96,164,0,47,16,243,0,12,141,251,254,67,234,184,255,41,18,161,0,175,6,96,255,160,172,52,254,24,176,183,255,198,193,85,1,124,121,137,255,151,50,114,255,220,203,60,255,207,239,5,1,0,38,107,255,55,238,94,254,70,152,94,0,213,220,77,1,120,17,69,255,85,164,190,255,203,234,81,0,38,49,37,254,61,144,124,0,137,78,49,254,168,247,48,0,95,164,252,0,105,169,135,0,253,228,134,0,64,166,75,0,81,73,20,255,207,210,10,0,234,106,150,255,94,34,90,255,254,159,57,254,220,133,99,0,139,147,180,254,24,23,185,0,41,57,30,255,189,97,76,0,65,187,223,255,224,172,37,255,34,62,95,1,231,144,240,0,77,106,126,254,64,152,91,0,29,98,155,0,226,251,53,255,234,211,5,255,144,203,222,255,164,176,221,254,5,231,24,0,179,122,205,0,36,1,134,255,125,70,151,254,97,228,252,0,172,129,23,254,48,90,209,255,150,224,82,1,84,134,30,0,241,196,46,0,103,113,234,255,46,101,121,254,40,124,250,255,135,45,242,254,9,249,168,255,140,108,131,255,143,163,171,0,50,173,199,255,88,222,142,255,200,95,158,0,142,192,163,255,7,117,135,0,111,124,22,0,236,12,65,254,68,38,65,255,227,174,254,0,244,245,38,0,240,50,208,255,161,63,250,0,60,209,239,0,122,35,19,0,14,33,230,254,2,159,113,0,106,20,127,255,228,205,96,0,137,210,174,254,180,212,144,255,89,98,154,1,34,88,139,0,167,162,112,1,65,110,197,0,241,37,169,0,66,56,131,255,10,201,83,254,133,253,187,255,177,112,45,254,196,251,0,0,196,250,151,255,238,232,214,255,150,209,205,0,28,240,118,0,71,76,83,1,236,99,91,0,42,250,131,1,96,18,64,255,118,222,35,0,113,214,203,255,122,119,184,255,66,19,36,0,204,64,249,0,146,89,139,0,134,62,135,1,104,233,101,0,188,84,26,0,49,249,129,0,208,214,75,255,207,130,77,255,115,175,235,0,171,2,137,255,175,145,186,1,55,245,135,255,154,86,181,1,100,58,246,255,109,199,60,255,82,204,134,255,215,49,230,1,140,229,192,255,222,193,251,255,81,136,15,255,179,149,162,255,23,39,29,255,7,95,75,254,191,81,222,0,241,81,90,255,107,49,201,255,244,211,157,0,222,140,149,255,65,219,56,254,189,246,90,255,178,59,157,1,48,219,52,0,98,34,215,0,28,17,187,255,175,169,24,0,92,79,161,255,236,200,194,1,147,143,234,0,229,225,7,1,197,168,14,0,235,51,53,1,253,120,174,0,197,6,168,255,202,117,171,0,163,21,206,0,114,85,90,255,15,41,10,255,194,19,99,0,65,55,216,254,162,146,116,0,50,206,212,255,64,146,29,255,158,158,131,1,100,165,130,255,172,23,129,255,125,53,9,255,15,193,18,1,26,49,11,255,181,174,201,1,135,201,14,255,100,19,149,0,219,98,79,0,42,99,143,254,96,0,48,255,197,249,83,254,104,149,79,255,235,110,136,254,82,128,44,255,65,41,36,254,88,211,10,0,187,121,187,0,98,134,199,0,171,188,179,254,210,11,238,255,66,123,130,254,52,234,61,0,48,113,23,254,6,86,120,255,119,178,245,0,87,129,201,0,242,141,209,0,202,114,85,0,148,22,161,0,103,195,48,0,25,49,171,255,138,67,130,0,182,73,122,254,148,24,130,0,211,229,154,0,32,155,158,0,84,105,61,0,177,194,9,255,166,89,86,1,54,83,187,0,249,40,117,255,109,3,215,255,53,146,44,1,63,47,179,0,194,216,3,254,14,84,136,0,136,177,13,255,72,243,186,255,117,17,125,255,211,58,211,255,93,79,223,0,90,88,245,255,139,209,111,255,70,222,47,0,10,246,79,255,198,217,178,0,227,225,11,1,78,126,179,255,62,43,126,0,103,148,35,0,129,8,165,254,245,240,148,0,61,51,142,0,81,208,134,0,15,137,115,255,211,119,236,255,159,245,248,255,2,134,136,255,230,139,58,1,160,164,254,0,114,85,141,255,49,166,182,255,144,70,84,1,85,182,7,0,46,53,93,0,9,166,161,255,55,162,178,255,45,184,188,0,146,28,44,254,169,90,49,0,120,178,241,1,14,123,127,255,7,241,199,1,189,66,50,255,198,143,101,254,189,243,135,255,141,24,24,254,75,97,87,0,118,251,154,1,237,54,156,0,171,146,207,255,131,196,246,255,136,64,113,1,151,232,57,0,240,218,115,0,49,61,27,255,64,129,73,1,252,169,27,255,40,132,10,1,90,201,193,255,252,121,240,1,186,206,41,0,43,198,97,0,145,100,183,0,204,216,80,254,172,150,65,0,249,229,196,254,104,123,73,255,77,104,96,254,130,180,8,0,104,123,57,0,220,202,229,255,102,249,211,0,86,14,232,255,182,78,209,0,239,225,164,0,106,13,32,255,120,73,17,255,134,67,233,0,83,254,181,0,183,236,112,1,48,64,131,255,241,216,243,255,65,193,226,0,206,241,100,254,100,134,166,255,237,202,197,0,55,13,81,0,32,124,102,255,40,228,177,0,118,181,31,1,231,160,134,255,119,187,202,0,0,142,60,255,128,38,189,255,166,201,150,0,207,120,26,1,54,184,172,0,12,242,204,254,133,66,230,0,34,38,31,1,184,112,80,0,32,51,165,254,191,243,55,0,58,73,146,254,155,167,205,255,100,104,152,255,197,254,207,255,173,19,247,0,238,10,202,0,239,151,242,0,94,59,39,255,240,29,102,255,10,92,154,255,229,84,219,255,161,129,80,0,208,90,204,1,240,219,174,255,158,102,145,1,53,178,76,255,52,108,168,1,83,222,107,0,211,36,109,0,118,58,56,0,8,29,22,0,237,160,199,0,170,209,157,0,137,71,47,0,143,86,32,0,198,242,2,0,212,48,136,1,92,172,186,0,230,151,105,1,96,191,229,0,138,80,191,254,240,216,130,255,98,43,6,254,168,196,49,0,253,18,91,1,144,73,121,0,61,146,39,1,63,104,24,255,184,165,112,254,126,235,98,0,80,213,98,255,123,60,87,255,82,140,245,1,223,120,173,255,15,198,134,1,206,60,239,0,231,234,92,255,33,238,19,255,165,113,142,1,176,119,38,0,160,43,166,254,239,91,105,0,107,61,194,1,25,4,68,0,15,139,51,0,164,132,106,255,34,116,46,254,168,95,197,0,137,212,23,0,72,156,58,0,137,112,69,254,150,105,154,255,236,201,157,0,23,212,154,255,136,82,227,254,226,59,221,255,95,149,192,0,81,118,52,255,33,43,215,1,14,147,75,255,89,156,121,254,14,18,79,0,147,208,139,1,151,218,62,255,156,88,8,1,210,184,98,255,20,175,123,255,102,83,229,0,220,65,116,1,150,250,4,255,92,142,220,255,34,247,66,255,204,225,179,254,151,81,151,0,71,40,236,255,138,63,62,0,6,79,240,255,183,185,181,0,118,50,27,0,63,227,192,0,123,99,58,1,50,224,155,255,17,225,223,254,220,224,77,255,14,44,123,1,141,128,175,0,248,212,200,0,150,59,183,255,147,97,29,0,150,204,181,0,253,37,71,0,145,85,119,0,154,200,186,0,2,128,249,255,83,24,124,0,14,87,143,0,168,51,245,1,124,151,231,255,208,240,197,1,124,190,185,0,48,58,246,0,20,233,232,0,125,18,98,255,13,254,31,255,245,177,130,255,108,142,35,0,171,125,242,254,140,12,34,255,165,161,162,0,206,205,101,0,247,25,34,1,100,145,57,0,39,70,57,0,118,204,203,255,242,0,162,0,165,244,30,0,198,116,226,0,128,111,153,255,140,54,182,1,60,122,15,255,155,58,57,1,54,50,198,0,171,211,29,255,107,138,167,255,173,107,199,255,109,161,193,0,89,72,242,255,206,115,89,255,250,254,142,254,177,202,94,255,81,89,50,0,7,105,66,255,25,254,255,254,203,64,23,255,79,222,108,255,39,249,75,0,241,124,50,0,239,152,133,0,221,241,105,0,147,151,98,0,213,161,121,254,242,49,137,0,233,37,249,254,42,183,27,0,184,119,230,255,217,32,163,255,208,251,228,1,137,62,131,255,79,64,9,254,94,48,113,0,17,138,50,254,193,255,22,0,247,18,197,1,67,55,104,0,16,205,95,255,48,37,66,0,55,156,63,1,64,82,74,255,200,53,71,254,239,67,125,0,26,224,222,0,223,137,93,255,30,224,202,255,9,220,132,0,198,38,235,1,102,141,86,0,60,43,81,1,136,28,26,0,233,36,8,254,207,242,148,0,164,162,63,0,51,46,224,255,114,48,79,255,9,175,226,0,222,3,193,255,47,160,232,255,255,93,105,254,14,42,230,0,26,138,82,1,208,43,244,0,27,39,38,255,98,208,127,255,64,149,182,255,5,250,209,0,187,60,28,254,49,25,218,255,169,116,205,255,119,18,120,0,156,116,147,255,132,53,109,255,13,10,202,0,110,83,167,0,157,219,137,255,6,3,130,255,50,167,30,255,60,159,47,255,129,128,157,254,94,3,189,0,3,166,68,0,83,223,215,0,150,90,194,1,15,168,65,0,227,83,51,255,205,171,66,255,54,187,60,1,152,102,45,255,119,154,225,0,240,247,136,0,100,197,178,255,139,71,223,255,204,82,16,1,41,206,42,255,156,192,221,255,216,123,244,255,218,218,185,255,187,186,239,255,252,172,160,255,195,52,22,0,144,174,181,254,187,100,115,255,211,78,176,255,27,7,193,0,147,213,104,255,90,201,10,255,80,123,66,1,22,33,186,0,1,7,99,254,30,206,10,0,229,234,5,0,53,30,210,0,138,8,220,254,71,55,167,0,72,225,86,1,118,190,188,0,254,193,101,1,171,249,172,255,94,158,183,254,93,2,108,255,176,93,76,255,73,99,79,255,74,64,129,254,246,46,65,0,99,241,127,254,246,151,102,255,44,53,208,254,59,102,234,0,154,175,164,255,88,242,32,0,111,38,1,0,255,182,190,255,115,176,15,254,169,60,129,0,122,237,241,0,90,76,63,0,62,74,120,255,122,195,110,0,119,4,178,0,222,242,210,0,130,33,46,254,156,40,41,0,167,146,112,1,49,163,111,255,121,176,235,0,76,207,14,255,3,25,198,1,41,235,213,0,85,36,214,1,49,92,109,255,200,24,30,254,168,236,195,0,145,39,124,1,236,195,149,0,90,36,184,255,67,85,170,255,38,35,26,254,131,124,68,255,239,155,35,255,54,201,164,0,196,22,117,255,49,15,205,0,24,224,29,1,126,113,144,0,117,21,182,0,203,159,141,0,223,135,77,0,176,230,176,255,190,229,215,255,99,37,181,255,51,21,138,255,25,189,89,255,49,48,165,254,152,45,247,0,170,108,222,0,80,202,5,0,27,69,103,254,204,22,129,255,180,252,62,254,210,1,91,255,146,110,254,255,219,162,28,0,223,252,213,1,59,8,33,0,206,16,244,0,129,211,48,0,107,160,208,0,112,59,209,0,109,77,216,254,34,21,185,255,246,99,56,255,179,139,19,255,185,29,50,255,84,89,19,0,74,250,98,255,225,42,200,255,192,217,205,255,210,16,167,0,99,132,95,1,43,230,57,0,254,11,203,255,99,188,63,255,119,193,251,254,80,105,54,0,232,181,189,1,183,69,112,255,208,171,165,255,47,109,180,255,123,83,165,0,146,162,52,255,154,11,4,255,151,227,90,255,146,137,97,254,61,233,41,255,94,42,55,255,108,164,236,0,152,68,254,0,10,140,131,255,10,106,79,254,243,158,137,0,67,178,66,254,177,123,198,255,15,62,34,0,197,88,42,255,149,95,177,255,152,0,198,255,149,254,113,255,225,90,163,255,125,217,247,0,18,17,224,0,128,66,120,254,192,25,9,255,50,221,205,0,49,212,70,0,233,255,164,0,2,209,9,0,221,52,219,254,172,224,244,255,94,56,206,1,242,179,2,255,31,91,164,1,230,46,138,255,189,230,220,0,57,47,61,255,111,11,157,0,177,91,152,0,28,230,98,0,97,87,126,0,198,89,145,255,167,79,107,0,249,77,160,1,29,233,230,255,150,21,86,254,60,11,193,0,151,37,36,254,185,150,243,255,228,212,83,1,172,151,180,0,201,169,155,0,244,60,234,0,142,235,4,1,67,218,60,0,192,113,75,1,116,243,207,255,65,172,155,0,81,30,156,255,80,72,33,254,18,231,109,255,142,107,21,254,125,26,132,255,176,16,59,255,150,201,58,0,206,169,201,0,208,121,226,0,40,172,14,255,150,61,94,255,56,57,156,255,141,60,145,255,45,108,149,255,238,145,155,255,209,85,31,254,192,12,210,0,99,98,93,254,152,16,151,0,225,185,220,0,141,235,44,255,160,172,21,254,71,26,31,255,13,64,93,254,28,56,198,0,177,62,248,1,182,8,241,0,166,101,148,255,78,81,133,255,129,222,215,1,188,169,129,255,232,7,97,0,49,112,60,255,217,229,251,0,119,108,138,0,39,19,123,254,131,49,235,0,132,84,145,0,130,230,148,255,25,74,187,0,5,245,54,255,185,219,241,1,18,194,228,255,241,202,102,0,105,113,202,0,155,235,79,0,21,9,178,255,156,1,239,0,200,148,61,0,115,247,210,255,49,221,135,0,58,189,8,1,35,46,9,0,81,65,5,255,52,158,185,255,125,116,46,255,74,140,13,255,210,92,172,254,147,23,71,0,217,224,253,254,115,108,180,255,145,58,48,254,219,177,24,255,156,255,60,1,154,147,242,0,253,134,87,0,53,75,229,0,48,195,222,255,31,175,50,255,156,210,120,255,208,35,222,255,18,248,179,1,2,10,101,255,157,194,248,255,158,204,101,255,104,254,197,255,79,62,4,0,178,172,101,1,96,146,251,255,65,10,156,0,2,137,165,255,116,4,231,0,242,215,1,0,19,35,29,255,43,161,79,0,59,149,246,1,251,66,176,0,200,33,3,255,80,110,142,255,195,161,17,1,228,56,66,255,123,47,145,254,132,4,164,0,67,174,172,0,25,253,114,0,87,97,87,1,250,220,84,0,96,91,200,255,37,125,59,0,19,65,118,0,161,52,241,255,237,172,6,255,176,191,255,255,1,65,130,254,223,190,230,0,101,253,231,255,146,35,109,0,250,29,77,1,49,0,19,0,123,90,155,1,22,86,32,255,218,213,65,0,111,93,127,0,60,93,169,255,8,127,182,0,17,186,14,254,253,137,246,255,213,25,48,254,76,238,0,255,248,92,70,255,99,224,139,0,184,9,255,1,7,164,208,0,205,131,198,1,87,214,199,0,130,214,95,0,221,149,222,0,23,38,171,254,197,110,213,0,43,115,140,254,215,177,118,0,96,52,66,1,117,158,237,0,14,64,182,255,46,63,174,255,158,95,190,255,225,205,177,255,43,5,142,255,172,99,212,255,244,187,147,0,29,51,153,255,228,116,24,254,30,101,207,0,19,246,150,255,134,231,5,0,125,134,226,1,77,65,98,0,236,130,33,255,5,110,62,0,69,108,127,255,7,113,22,0,145,20,83,254,194,161,231,255,131,181,60,0,217,209,177,255,229,148,212,254,3,131,184,0,117,177,187,1,28,14,31,255,176,102,80,0,50,84,151,255,125,31,54,255,21,157,133,255,19,179,139,1,224,232,26,0,34,117,170,255,167,252,171,255,73,141,206,254,129,250,35,0,72,79,236,1,220,229,20,255,41,202,173,255,99,76,238,255,198,22,224,255,108,198,195,255,36,141,96,1,236,158,59,255,106,100,87,0,110,226,2,0,227,234,222,0,154,93,119,255,74,112,164,255,67,91,2,255,21,145,33,255,102,214,137,255,175,230,103,254,163,246,166,0,93,247,116,254,167,224,28,255,220,2,57,1,171,206,84,0,123,228,17,255,27,120,119,0,119,11,147,1,180,47,225,255,104,200,185,254,165,2,114,0,77,78,212,0,45,154,177,255,24,196,121,254,82,157,182,0,90,16,190,1,12,147,197,0,95,239,152,255,11,235,71,0,86,146,119,255,172,134,214,0,60,131,196,0,161,225,129,0,31,130,120,254,95,200,51,0,105,231,210,255,58,9,148,255,43,168,221,255,124,237,142,0,198,211,50,254,46,245,103,0,164,248,84,0,152,70,208,255,180,117,177,0,70,79,185,0,243,74,32,0,149,156,207,0,197,196,161,1,245,53,239,0,15,93,246,254,139,240,49,255,196,88,36,255,162,38,123,0,128,200,157,1,174,76,103,255,173,169,34,254,216,1,171,255,114,51,17,0,136,228,194,0,110,150,56,254,106,246,159,0,19,184,79,255,150,77,240,255,155,80,162,0,0,53,169,255,29,151,86,0,68,94,16,0,92,7,110,254,98,117,149,255,249,77,230,255,253,10,140,0,214,124,92,254,35,118,235,0,89,48,57,1,22,53,166,0,184,144,61,255,179,255,194,0,214,248,61,254,59,110,246,0,121,21,81,254,166,3,228,0,106,64,26,255,69,232,134,255,242,220,53,254,46,220,85,0,113,149,247,255,97,179,103,255,190,127,11,0,135,209,182,0,95,52,129,1,170,144,206,255,122,200,204,255,168,100,146,0,60,144,149,254,70,60,40,0,122,52,177,255,246,211,101,255,174,237,8,0,7,51,120,0,19,31,173,0,126,239,156,255,143,189,203,0,196,128,88,255,233,133,226,255,30,125,173,255,201,108,50,0,123,100,59,255,254,163,3,1,221,148,181,255,214,136,57,254,222,180,137,255,207,88,54,255,28,33,251,255,67,214,52,1,210,208,100,0,81,170,94,0,145,40,53,0,224,111,231,254,35,28,244,255,226,199,195,254,238,17,230,0,217,217,164,254,169,157,221,0,218,46,162,1,199,207,163,255,108,115,162,1,14,96,187,255,118,60,76,0,184,159,152,0,209,231,71,254,42,164,186,255,186,153,51,254,221,171,182,255,162,142,173,0,235,47,193,0,7,139,16,1,95,164,64,255,16,221,166,0,219,197,16,0,132,29,44,255,100,69,117,255,60,235,88,254,40,81,173,0,71,190,61,255,187,88,157,0,231,11,23,0,237,117,164,0,225,168,223,255,154,114,116,255,163,152,242,1,24,32,170,0,125,98,113,254,168,19,76,0,17,157,220,254,155,52,5,0,19,111,161,255,71,90,252,255,173,110,240,0,10,198,121,255,253,255,240,255,66,123,210,0,221,194,215,254,121,163,17,255,225,7,99,0,190,49,182,0,115,9,133,1,232,26,138,255,213,68,132,0,44,119,122,255,179,98,51,0,149,90,106,0,71,50,230,255,10,153,118,255,177,70,25,0,165,87,205,0,55,138,234,0,238,30,97,0,113,155,207,0,98,153,127,0,34,107,219,254,117,114,172,255,76,180,255,254,242,57,179,255,221,34,172,254,56,162,49,255,83,3,255,255,113,221,189,255,188,25,228,254,16,88,89,255,71,28,198,254,22,17,149,255,243,121,254,255,107,202,99,255,9,206,14,1,220,47,153,0,107,137,39,1,97,49,194,255,149,51,197,254,186,58,11,255,107,43,232,1,200,6,14,255,181,133,65,254,221,228,171,255,123,62,231,1,227,234,179,255,34,189,212,254,244,187,249,0,190,13,80,1,130,89,1,0,223,133,173,0,9,222,198,255,66,127,74,0,167,216,93,255,155,168,198,1,66,145,0,0,68,102,46,1,172,90,154,0,216,128,75,255,160,40,51,0,158,17,27,1,124,240,49,0,236,202,176,255,151,124,192,255,38,193,190,0,95,182,61,0,163,147,124,255,255,165,51,255,28,40,17,254,215,96,78,0,86,145,218,254,31,36,202,255,86,9,5,0,111,41,200,255,237,108,97,0,57,62,44,0,117,184,15,1,45,241,116,0,152,1,220,255,157,165,188,0,250,15,131,1,60,44,125,255,65,220,251,255,75,50,184,0,53,90,128,255,231,80,194,255,136,129,127,1,21,18,187,255,45,58,161,255,71,147,34,0,174,249,11,254,35,141,29,0,239,68,177,255,115,110,58,0,238,190,177,1,87,245,166,255,190,49,247,255,146,83,184,255,173,14,39,255,146,215,104,0,142,223,120,0,149,200,155,255,212,207,145,1,16,181,217,0,173,32,87,255,255,35,181,0,119,223,161,1,200,223,94,255,70,6,186,255,192,67,85,255,50,169,152,0,144,26,123,255,56,243,179,254,20,68,136,0,39,140,188,254,253,208,5,255,200,115,135,1,43,172,229,255,156,104,187,0,151,251,167,0,52,135,23,0,151,153,72,0,147,197,107,254,148,158,5,255,238,143,206,0,126,153,137,255,88,152,197,254,7,68,167,0,252,159,165,255,239,78,54,255,24,63,55,255,38,222,94,0,237,183,12,255,206,204,210,0,19,39,246,254,30,74,231,0,135,108,29,1,179,115,0,0,117,118,116,1,132,6,252,255,145,129,161,1,105,67,141,0,82,37,226,255,238,226,228,255,204,214,129,254,162,123,100,255,185,121,234,0,45,108,231,0,66,8,56,255,132,136,128,0,172,224,66,254,175,157,188,0,230,223,226,254,242,219,69,0,184,14,119,1,82,162,56,0,114,123,20,0,162,103,85,255,49,239,99,254,156,135,215,0,111,255,167,254,39,196,214,0,144,38,79,1,249,168,125,0,155,97,156,255,23,52,219,255,150,22,144,0,44,149,165,255,40,127,183,0,196,77,233,255,118,129,210,255,170,135,230,255,214,119,198,0,233,240,35,0,253,52,7,255,117,102,48,255,21,204,154,255,179,136,177,255,23,2,3,1,149,130,89,255,252,17,159,1,70,60,26,0,144,107,17,0,180,190,60,255,56,182,59,255,110,71,54,255,198,18,129,255,149,224,87,255,223,21,152,255,138,22,182,255,250,156,205,0,236,45,208,255,79,148,242,1,101,70,209,0,103,78,174,0,101,144,172,255,152,136,237,1,191,194,136,0,113,80,125,1,152,4,141,0,155,150,53,255,196,116,245,0,239,114,73,254,19,82,17,255,124,125,234,255,40,52,191,0,42,210,158,255,155,132,165,0,178,5,42,1,64,92,40,255,36,85,77,255,178,228,118,0,137,66,96,254,115,226,66,0,110,240,69,254,151,111,80,0,167,174,236,255,227,108,107,255,188,242,65,255,183,81,255,0,57,206,181,255,47,34,181,255,213,240,158,1,71,75,95,0,156,40,24,255,102,210,81,0,171,199,228,255,154,34,41,0,227,175,75,0,21,239,195,0,138,229,95,1,76,192,49,0,117,123,87,1,227,225,130,0,125,62,63,255,2,198,171,0,254,36,13,254,145,186,206,0,148,255,244,255,35,0,166,0,30,150,219,1,92,228,212,0,92,198,60,254,62,133,200,255,201,41,59,0,125,238,109,255,180,163,238,1,140,122,82,0,9,22,88,255,197,157,47,255,153,94,57,0,88,30,182,0,84,161,85,0,178,146,124,0,166,166,7,255,21,208,223,0,156,182,242,0,155,121,185,0,83,156,174,254,154,16,118,255,186,83,232,1,223,58,121,255,29,23,88,0,35,125,127,255,170,5,149,254,164,12,130,255,155,196,29,0,161,96,136,0,7,35,29,1,162,37,251,0,3,46,242,255,0,217,188,0,57,174,226,1,206,233,2,0,57,187,136,254,123,189,9,255,201,117,127,255,186,36,204,0,231,25,216,0,80,78,105,0,19,134,129,255,148,203,68,0,141,81,125,254,248,165,200,255,214,144,135,0,151,55,166,255,38,235,91,0,21,46,154,0,223,254,150,255,35,153,180,255,125,176,29,1,43,98,30,255,216,122,230,255,233,160,12,0,57,185,12,254,240,113,7,255,5,9,16,254,26,91,108,0,109,198,203,0,8,147,40,0,129,134,228,255,124,186,40,255,114,98,132,254,166,132,23,0,99,69,44,0,9,242,238,255,184,53,59,0,132,129,102,255,52,32,243,254,147,223,200,255,123,83,179,254,135,144,201,255,141,37,56,1,151,60,227,255,90,73,156,1,203,172,187,0,80,151,47,255,94,137,231,255,36,191,59,255,225,209,181,255,74,215,213,254,6,118,179,255,153,54,193,1,50,0,231,0,104,157,72,1,140,227,154,255,182,226,16,254,96,225,92,255,115,20,170,254,6,250,78,0,248,75,173,255,53,89,6,255,0,180,118,0,72,173,1,0,64,8,206,1,174,133,223,0,185,62,133,255,214,11,98,0,197,31,208,0,171,167,244,255,22,231,181,1,150,218,185,0,247,169,97,1,165,139,247,255,47,120,149,1,103,248,51,0,60,69,28,254,25,179,196,0,124,7,218,254,58,107,81,0,184,233,156,255,252,74,36,0,118,188,67,0,141,95,53,255,222,94,165,254,46,61,53,0,206,59,115,255,47,236,250,255,74,5,32,1,129,154,238,255,106,32,226,0,121,187,61,255,3,166,241,254,67,170,172,255,29,216,178,255,23,201,252,0,253,110,243,0,200,125,57,0,109,192,96,255,52,115,238,0,38,121,243,255,201,56,33,0,194,118,130,0,75,96,25,255,170,30,230,254,39,63,253,0,36,45,250,255,251,1,239,0,160,212,92,1,45,209,237,0,243,33,87,254,237,84,201,255,212,18,157,254,212,99,127,255,217,98,16,254,139,172,239,0,168,201,130,255,143,193,169,255,238,151,193,1,215,104,41,0,239,61,165,254,2,3,242,0,22,203,177,254,177,204,22,0,149,129,213,254,31,11,41,255,0,159,121,254,160,25,114,255,162,80,200,0,157,151,11,0,154,134,78,1,216,54,252,0,48,103,133,0,105,220,197,0,253,168,77,254,53,179,23,0,24,121,240,1,255,46,96,255,107,60,135,254,98,205,249,255,63,249,119,255,120,59,211,255,114,180,55,254,91,85,237,0,149,212,77,1,56,73,49,0,86,198,150,0,93,209,160,0,69,205,182,255,244,90,43,0,20,36,176,0,122,116,221,0,51,167,39,1,231,1,63,255,13,197,134,0,3,209,34,255,135,59,202,0,167,100,78,0,47,223,76,0,185,60,62,0,178,166,123,1,132,12,161,255,61,174,43,0,195,69,144,0,127,47,191,1,34,44,78,0,57,234,52,1,255,22,40,255,246,94,146,0,83,228,128,0,60,78,224,255,0,96,210,255,153,175,236,0,159,21,73,0,180,115,196,254,131,225,106,0,255,167,134,0,159,8,112,255,120,68,194,255,176,196,198,255,118,48,168,255,93,169,1,0,112,200,102,1,74,24,254,0,19,141,4,254,142,62,63,0,131,179,187,255,77,156,155,255,119,86,164,0,170,208,146,255,208,133,154,255,148,155,58,255,162,120,232,254,252,213,155,0,241,13,42,0,94,50,131,0,179,170,112,0,140,83,151,255,55,119,84,1,140,35,239,255,153,45,67,1,236,175,39,0,54,151,103,255,158,42,65,255,196,239,135,254,86,53,203,0,149,97,47,254,216,35,17,255,70,3,70,1,103,36,90,255,40,26,173,0,184,48,13,0,163,219,217,255,81,6,1,255,221,170,108,254,233,208,93,0,100,201,249,254,86,36,35,255,209,154,30,1,227,201,251,255,2,189,167,254,100,57,3,0,13,128,41,0,197,100,75,0,150,204,235,255,145,174,59,0,120,248,149,255,85,55,225,0,114,210,53,254,199,204,119,0,14,247,74,1,63,251,129,0,67,104,151,1,135,130,80,0,79,89,55,255,117,230,157,255,25,96,143,0,213,145,5,0,69,241,120,1,149,243,95,255,114,42,20,0,131,72,2,0,154,53,20,255,73,62,109,0,196,102,152,0,41,12,204,255,122,38,11,1,250,10,145,0,207,125,148,0,246,244,222,255,41,32,85,1,112,213,126,0,162,249,86,1,71,198,127,255,81,9,21,1,98,39,4,255,204,71,45,1,75,111,137,0,234,59,231,0,32,48,95,255,204,31,114,1,29,196,181,255,51,241,167,254,93,109,142,0,104,144,45,0,235,12,181,255,52,112,164,0,76,254,202,255,174,14,162,0,61,235,147,255,43,64,185,254,233,125,217,0,243,88,167,254,74,49,8,0,156,204,66,0,124,214,123,0,38,221,118,1,146,112,236,0,114,98,177,0,151,89,199,0,87,197,112,0,185,149,161,0,44,96,165,0,248,179,20,255,188,219,216,254,40,62,13,0,243,142,141,0,229,227,206,255,172,202,35,255,117,176,225,255,82,110,38,1,42,245,14,255,20,83,97,0,49,171,10,0,242,119,120,0,25,232,61,0,212,240,147,255,4,115,56,255,145,17,239,254,202,17,251,255,249,18,245,255,99,117,239,0,184,4,179,255,246,237,51,255,37,239,137,255,166,112,166,255,81,188,33,255,185,250,142,255,54,187,173,0,208,112,201,0,246,43,228,1,104,184,88,255,212,52,196,255,51,117,108,255,254,117,155,0,46,91,15,255,87,14,144,255,87,227,204,0,83,26,83,1,159,76,227,0,159,27,213,1,24,151,108,0,117,144,179,254,137,209,82,0,38,159,10,0,115,133,201,0,223,182,156,1,110,196,93,255,57,60,233,0,5,167,105,255,154,197,164,0,96,34,186,255,147,133,37,1,220,99,190,0,1,167,84,255,20,145,171,0,194,197,251,254,95,78,133,255,252,248,243,255,225,93,131,255,187,134,196,255,216,153,170,0,20,118,158,254,140,1,118,0,86,158,15,1,45,211,41,255,147,1,100,254,113,116,76,255,211,127,108,1,103,15,48,0,193,16,102,1,69,51,95,255,107,128,157,0,137,171,233,0,90,124,144,1,106,161,182,0,175,76,236,1,200,141,172,255,163,58,104,0,233,180,52,255,240,253,14,255,162,113,254,255,38,239,138,254,52,46,166,0,241,101,33,254,131,186,156,0,111,208,62,255,124,94,160,255,31,172,254,0,112,174,56,255,188,99,27,255,67,138,251,0,125,58,128,1,156,152,174,255,178,12,247,255,252,84,158,0,82,197,14,254,172,200,83,255,37,39,46,1,106,207,167,0,24,189,34,0,131,178,144,0,206,213,4,0,161,226,210,0,72,51,105,255,97,45,187,255,78,184,223,255,176,29,251,0,79,160,86,255,116,37,178,0,82,77,213,1,82,84,141,255,226,101,212,1,175,88,199,255,245,94,247,1,172,118,109,255,166,185,190,0,131,181,120,0,87,254,93,255,134,240,73,255,32,245,143,255,139,162,103,255,179,98,18,254,217,204,112,0,147,223,120,255,53,10,243,0,166,140,150,0,125,80,200,255,14,109,219,255,91,218,1,255,252,252,47,254,109,156,116,255,115,49,127,1,204,87,211,255,148,202,217,255,26,85,249,255,14,245,134,1,76,89,169,255,242,45,230,0,59,98,172,255,114,73,132,254,78,155,49,255,158,126,84,0,49,175,43,255,16,182,84,255,157,103,35,0,104,193,109,255,67,221,154,0,201,172,1,254,8,162,88,0,165,1,29,255,125,155,229,255,30,154,220,1,103,239,92,0,220,1,109,255,202,198,1,0,94,2,142,1,36,54,44,0,235,226,158,255,170,251,214,255,185,77,9,0,97,74,242,0,219,163,149,255,240,35,118,255,223,114,88,254,192,199,3,0,106,37,24,255,201,161,118,255,97,89,99,1,224,58,103,255,101,199,147,254,222,60,99,0,234,25,59,1,52,135,27,0,102,3,91,254,168,216,235,0,229,232,136,0,104,60,129,0,46,168,238,0,39,191,67,0,75,163,47,0,143,97,98,255,56,216,168,1,168,233,252,255,35,111,22,255,92,84,43,0,26,200,87,1,91,253,152,0,202,56,70,0,142,8,77,0,80,10,175,1,252,199,76,0,22,110,82,255,129,1,194,0,11,128,61,1,87,14,145,255,253,222,190,1,15,72,174,0,85,163,86,254,58,99,44,255,45,24,188,254,26,205,15,0,19,229,210,254,248,67,195,0,99,71,184,0,154,199,37,255,151,243,121,255,38,51,75,255,201,85,130,254,44,65,250,0,57,147,243,254,146,43,59,255,89,28,53,0,33,84,24,255,179,51,18,254,189,70,83,0,11,156,179,1,98,134,119,0,158,111,111,0,119,154,73,255,200,63,140,254,45,13,13,255,154,192,2,254,81,72,42,0,46,160,185,254,44,112,6,0,146,215,149,1,26,176,104,0,68,28,87,1,236,50,153,255,179,128,250,254,206,193,191,255,166,92,137,254,53,40,239,0,210,1,204,254,168,173,35,0,141,243,45,1,36,50,109,255,15,242,194,255,227,159,122,255,176,175,202,254,70,57,72,0,40,223,56,0,208,162,58,255,183,98,93,0,15,111,12,0,30,8,76,255,132,127,246,255,45,242,103,0,69,181,15,255,10,209,30,0,3,179,121,0,241,232,218,1,123,199,88,255,2,210,202,1,188,130,81,255,94,101,208,1,103,36,45,0,76,193,24,1,95,26,241,255,165,162,187,0,36,114,140,0,202,66,5,255,37,56,147,0,152,11,243,1,127,85,232,255,250,135,212,1,185,177,113,0,90,220,75,255,69,248,146,0,50,111,50,0,92,22,80,0,244,36,115,254,163,100,82,255,25,193,6,1,127,61,36,0,253,67,30,254,65,236,170,255,161,17,215,254,63,175,140,0,55,127,4,0,79,112,233,0,109,160,40,0,143,83,7,255,65,26,238,255,217,169,140,255,78,94,189,255,0,147,190,255,147,71,186,254,106,77,127,255,233,157,233,1,135,87,237,255,208,13,236,1,155,109,36,255,180,100,218,0,180,163,18,0,190,110,9,1,17,63,123,255,179,136,180,255,165,123,123,255,144,188,81,254,71,240,108,255,25,112,11,255,227,218,51,255,167,50,234,255,114,79,108,255,31,19,115,255,183,240,99,0,227,87,143,255,72,217,248,255,102,169,95,1,129,149,149,0,238,133,12,1,227,204,35,0,208,115,26,1,102,8,234,0,112,88,143,1,144,249,14,0,240,158,172,254,100,112,119],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+10240);allocate([194,141,153,254,40,56,83,255,121,176,46,0,42,53,76,255,158,191,154,0,91,209,92,0,173,13,16,1,5,72,226,255,204,254,149,0,80,184,207,0,100,9,122,254,118,101,171,255,252,203,0,254,160,207,54,0,56,72,249,1,56,140,13,255,10,64,107,254,91,101,52,255,225,181,248,1,139,255,132,0,230,145,17,0,233,56,23,0,119,1,241,255,213,169,151,255,99,99,9,254,185,15,191,255,173,103,109,1,174,13,251,255,178,88,7,254,27,59,68,255,10,33,2,255,248,97,59,0,26,30,146,1,176,147,10,0,95,121,207,1,188,88,24,0,185,94,254,254,115,55,201,0,24,50,70,0,120,53,6,0,142,66,146,0,228,226,249,255,104,192,222,1,173,68,219,0,162,184,36,255,143,102,137,255,157,11,23,0,125,45,98,0,235,93,225,254,56,112,160,255,70,116,243,1,153,249,55,255,129,39,17,1,241,80,244,0,87,69,21,1,94,228,73,255,78,66,65,255,194,227,231,0,61,146,87,255,173,155,23,255,112,116,219,254,216,38,11,255,131,186,133,0,94,212,187,0,100,47,91,0,204,254,175,255,222,18,215,254,173,68,108,255,227,228,79,255,38,221,213,0,163,227,150,254,31,190,18,0,160,179,11,1,10,90,94,255,220,174,88,0,163,211,229,255,199,136,52,0,130,95,221,255,140,188,231,254,139,113,128,255,117,171,236,254,49,220,20,255,59,20,171,255,228,109,188,0,20,225,32,254,195,16,174,0,227,254,136,1,135,39,105,0,150,77,206,255,210,238,226,0,55,212,132,254,239,57,124,0,170,194,93,255,249,16,247,255,24,151,62,255,10,151,10,0,79,139,178,255,120,242,202,0,26,219,213,0,62,125,35,255,144,2,108,255,230,33,83,255,81,45,216,1,224,62,17,0,214,217,125,0,98,153,153,255,179,176,106,254,131,93,138,255,109,62,36,255,178,121,32,255,120,252,70,0,220,248,37,0,204,88,103,1,128,220,251,255,236,227,7,1,106,49,198,255,60,56,107,0,99,114,238,0,220,204,94,1,73,187,1,0,89,154,34,0,78,217,165,255,14,195,249,255,9,230,253,255,205,135,245,0,26,252,7,255,84,205,27,1,134,2,112,0,37,158,32,0,231,91,237,255,191,170,204,255,152,7,222,0,109,192,49,0,193,166,146,255,232,19,181,255,105,142,52,255,103,16,27,1,253,200,165,0,195,217,4,255,52,189,144,255,123,155,160,254,87,130,54,255,78,120,61,255,14,56,41,0,25,41,125,255,87,168,245,0,214,165,70,0,212,169,6,255,219,211,194,254,72,93,164,255,197,33,103,255,43,142,141,0,131,225,172,0,244,105,28,0,68,68,225,0,136,84,13,255,130,57,40,254,139,77,56,0,84,150,53,0,54,95,157,0,144,13,177,254,95,115,186,0,117,23,118,255,244,166,241,255,11,186,135,0,178,106,203,255,97,218,93,0,43,253,45,0,164,152,4,0,139,118,239,0,96,1,24,254,235,153,211,255,168,110,20,255,50,239,176,0,114,41,232,0,193,250,53,0,254,160,111,254,136,122,41,255,97,108,67,0,215,152,23,255,140,209,212,0,42,189,163,0,202,42,50,255,106,106,189,255,190,68,217,255,233,58,117,0,229,220,243,1,197,3,4,0,37,120,54,254,4,156,134,255,36,61,171,254,165,136,100,255,212,232,14,0,90,174,10,0,216,198,65,255,12,3,64,0,116,113,115,255,248,103,8,0,231,125,18,255,160,28,197,0,30,184,35,1,223,73,249,255,123,20,46,254,135,56,37,255,173,13,229,1,119,161,34,255,245,61,73,0,205,125,112,0,137,104,134,0,217,246,30,255,237,142,143,0,65,159,102,255,108,164,190,0,219,117,173,255,34,37,120,254,200,69,80,0,31,124,218,254,74,27,160,255,186,154,199,255,71,199,252,0,104,81,159,1,17,200,39,0,211,61,192,1,26,238,91,0,148,217,12,0,59,91,213,255,11,81,183,255,129,230,122,255,114,203,145,1,119,180,66,255,72,138,180,0,224,149,106,0,119,82,104,255,208,140,43,0,98,9,182,255,205,101,134,255,18,101,38,0,95,197,166,255,203,241,147,0,62,208,145,255,133,246,251,0,2,169,14,0,13,247,184,0,142,7,254,0,36,200,23,255,88,205,223,0,91,129,52,255,21,186,30,0,143,228,210,1,247,234,248,255,230,69,31,254,176,186,135,255,238,205,52,1,139,79,43,0,17,176,217,254,32,243,67,0,242,111,233,0,44,35,9,255,227,114,81,1,4,71,12,255,38,105,191,0,7,117,50,255,81,79,16,0,63,68,65,255,157,36,110,255,77,241,3,255,226,45,251,1,142,25,206,0,120,123,209,1,28,254,238,255,5,128,126,255,91,222,215,255,162,15,191,0,86,240,73,0,135,185,81,254,44,241,163,0,212,219,210,255,112,162,155,0,207,101,118,0,168,72,56,255,196,5,52,0,72,172,242,255,126,22,157,255,146,96,59,255,162,121,152,254,140,16,95,0,195,254,200,254,82,150,162,0,119,43,145,254,204,172,78,255,166,224,159,0,104,19,237,255,245,126,208,255,226,59,213,0,117,217,197,0,152,72,237,0,220,31,23,254,14,90,231,255,188,212,64,1,60,101,246,255,85,24,86,0,1,177,109,0,146,83,32,1,75,182,192,0,119,241,224,0,185,237,27,255,184,101,82,1,235,37,77,255,253,134,19,0,232,246,122,0,60,106,179,0,195,11,12,0,109,66,235,1,125,113,59,0,61,40,164,0,175,104,240,0,2,47,187,255,50,12,141,0,194,139,181,255,135,250,104,0,97,92,222,255,217,149,201,255,203,241,118,255,79,151,67,0,122,142,218,255,149,245,239,0,138,42,200,254,80,37,97,255,124,112,167,255,36,138,87,255,130,29,147,255,241,87,78,255,204,97,19,1,177,209,22,255,247,227,127,254,99,119,83,255,212,25,198,1,16,179,179,0,145,77,172,254,89,153,14,255,218,189,167,0,107,233,59,255,35,33,243,254,44,112,112,255,161,127,79,1,204,175,10,0,40,21,138,254,104,116,228,0,199,95,137,255,133,190,168,255,146,165,234,1,183,99,39,0,183,220,54,254,255,222,133,0,162,219,121,254,63,239,6,0,225,102,54,255,251,18,246,0,4,34,129,1,135,36,131,0,206,50,59,1,15,97,183,0,171,216,135,255,101,152,43,255,150,251,91,0,38,145,95,0,34,204,38,254,178,140,83,255,25,129,243,255,76,144,37,0,106,36,26,254,118,144,172,255,68,186,229,255,107,161,213,255,46,163,68,255,149,170,253,0,187,17,15,0,218,160,165,255,171,35,246,1,96,13,19,0,165,203,117,0,214,107,192,255,244,123,177,1,100,3,104,0,178,242,97,255,251,76,130,255,211,77,42,1,250,79,70,255,63,244,80,1,105,101,246,0,61,136,58,1,238,91,213,0,14,59,98,255,167,84,77,0,17,132,46,254,57,175,197,255,185,62,184,0,76,64,207,0,172,175,208,254,175,74,37,0,138,27,211,254,148,125,194,0,10,89,81,0,168,203,101,255,43,213,209,1,235,245,54,0,30,35,226,255,9,126,70,0,226,125,94,254,156,117,20,255,57,248,112,1,230,48,64,255,164,92,166,1,224,214,230,255,36,120,143,0,55,8,43,255,251,1,245,1,106,98,165,0,74,107,106,254,53,4,54,255,90,178,150,1,3,120,123,255,244,5,89,1,114,250,61,255,254,153,82,1,77,15,17,0,57,238,90,1,95,223,230,0,236,52,47,254,103,148,164,255,121,207,36,1,18,16,185,255,75,20,74,0,187,11,101,0,46,48,129,255,22,239,210,255,77,236,129,255,111,77,204,255,61,72,97,255,199,217,251,255,42,215,204,0,133,145,201,255,57,230,146,1,235,100,198,0,146,73,35,254,108,198,20,255,182,79,210,255,82,103,136,0,246,108,176,0,34,17,60,255,19,74,114,254,168,170,78,255,157,239,20,255,149,41,168,0,58,121,28,0,79,179,134,255,231,121,135,255,174,209,98,255,243,122,190,0,171,166,205,0,212,116,48,0,29,108,66,255,162,222,182,1,14,119,21,0,213,39,249,255,254,223,228,255,183,165,198,0,133,190,48,0,124,208,109,255,119,175,85,255,9,209,121,1,48,171,189,255,195,71,134,1,136,219,51,255,182,91,141,254,49,159,72,0,35,118,245,255,112,186,227,255,59,137,31,0,137,44,163,0,114,103,60,254,8,213,150,0,162,10,113,255,194,104,72,0,220,131,116,255,178,79,92,0,203,250,213,254,93,193,189,255,130,255,34,254,212,188,151,0,136,17,20,255,20,101,83,255,212,206,166,0,229,238,73,255,151,74,3,255,168,87,215,0,155,188,133,255,166,129,73,0,240,79,133,255,178,211,81,255,203,72,163,254,193,168,165,0,14,164,199,254,30,255,204,0,65,72,91,1,166,74,102,255,200,42,0,255,194,113,227,255,66,23,208,0,229,216,100,255,24,239,26,0,10,233,62,255,123,10,178,1,26,36,174,255,119,219,199,1,45,163,190,0,16,168,42,0,166,57,198,255,28,26,26,0,126,165,231,0,251,108,100,255,61,229,121,255,58,118,138,0,76,207,17,0,13,34,112,254,89,16,168,0,37,208,105,255,35,201,215,255,40,106,101,254,6,239,114,0,40,103,226,254,246,127,110,255,63,167,58,0,132,240,142,0,5,158,88,255,129,73,158,255,94,89,146,0,230,54,146,0,8,45,173,0,79,169,1,0,115,186,247,0,84,64,131,0,67,224,253,255,207,189,64,0,154,28,81,1,45,184,54,255,87,212,224,255,0,96,73,255,129,33,235,1,52,66,80,255,251,174,155,255,4,179,37,0,234,164,93,254,93,175,253,0,198,69,87,255,224,106,46,0,99,29,210,0,62,188,114,255,44,234,8,0,169,175,247,255,23,109,137,255,229,182,39,0,192,165,94,254,245,101,217,0,191,88,96,0,196,94,99,255,106,238,11,254,53,126,243,0,94,1,101,255,46,147,2,0,201,124,124,255,141,12,218,0,13,166,157,1,48,251,237,255,155,250,124,255,106,148,146,255,182,13,202,0,28,61,167,0,217,152,8,254,220,130,45,255,200,230,255,1,55,65,87,255,93,191,97,254,114,251,14,0,32,105,92,1,26,207,141,0,24,207,13,254,21,50,48,255,186,148,116,255,211,43,225,0,37,34,162,254,164,210,42,255,68,23,96,255,182,214,8,255,245,117,137,255,66,195,50,0,75,12,83,254,80,140,164,0,9,165,36,1,228,110,227,0,241,17,90,1,25,52,212,0,6,223,12,255,139,243,57,0,12,113,75,1,246,183,191,255,213,191,69,255,230,15,142,0,1,195,196,255,138,171,47,255,64,63,106,1,16,169,214,255,207,174,56,1,88,73,133,255,182,133,140,0,177,14,25,255,147,184,53,255,10,227,161,255,120,216,244,255,73,77,233,0,157,238,139,1,59,65,233,0,70,251,216,1,41,184,153,255,32,203,112,0,146,147,253,0,87,101,109,1,44,82,133,255,244,150,53,255,94,152,232,255,59,93,39,255,88,147,220,255,78,81,13,1,32,47,252,255,160,19,114,255,93,107,39,255,118,16,211,1,185,119,209,255,227,219,127,254,88,105,236,255,162,110,23,255,36,166,110,255,91,236,221,255,66,234,116,0,111,19,244,254,10,233,26,0,32,183,6,254,2,191,242,0,218,156,53,254,41,60,70,255,168,236,111,0,121,185,126,255,238,142,207,255,55,126,52,0,220,129,208,254,80,204,164,255,67,23,144,254,218,40,108,255,127,202,164,0,203,33,3,255,2,158,0,0,37,96,188,255,192,49,74,0,109,4,0,0,111,167,10,254,91,218,135,255,203,66,173,255,150,194,226,0,201,253,6,255,174,102,121,0,205,191,110,0,53,194,4,0,81,40,45,254,35,102,143,255,12,108,198,255,16,27,232,255,252,71,186,1,176,110,114,0,142,3,117,1,113,77,142,0,19,156,197,1,92,47,252,0,53,232,22,1,54,18,235,0,46,35,189,255,236,212,129,0,2,96,208,254,200,238,199,255,59,175,164,255,146,43,231,0,194,217,52,255,3,223,12,0,138,54,178,254,85,235,207,0,232,207,34,0,49,52,50,255,166,113,89,255,10,45,216,255,62,173,28,0,111,165,246,0,118,115,91,255,128,84,60,0,167,144,203,0,87,13,243,0,22,30,228,1,177,113,146,255,129,170,230,254,252,153,129,255,145,225,43,0,70,231,5,255,122,105,126,254,86,246,148,255,110,37,154,254,209,3,91,0,68,145,62,0,228,16,165,255,55,221,249,254,178,210,91,0,83,146,226,254,69,146,186,0,93,210,104,254,16,25,173,0,231,186,38,0,189,122,140,255,251,13,112,255,105,110,93,0,251,72,170,0,192,23,223,255,24,3,202,1,225,93,228,0,153,147,199,254,109,170,22,0,248,101,246,255,178,124,12,255,178,254,102,254,55,4,65,0,125,214,180,0,183,96,147,0,45,117,23,254,132,191,249,0,143,176,203,254,136,183,54,255,146,234,177,0,146,101,86,255,44,123,143,1,33,209,152,0,192,90,41,254,83,15,125,255,213,172,82,0,215,169,144,0,16,13,34,0,32,209,100,255,84,18,249,1,197,17,236,255,217,186,230,0,49,160,176,255,111,118,97,255,237,104,235,0,79,59,92,254,69,249,11,255,35,172,74,1,19,118,68,0,222,124,165,255,180,66,35,255,86,174,246,0,43,74,111,255,126,144,86,255,228,234,91,0,242,213,24,254,69,44,235,255,220,180,35,0,8,248,7,255,102,47,92,255,240,205,102,255,113,230,171,1,31,185,201,255,194,246,70,255,122,17,187,0,134,70,199,255,149,3,150,255,117,63,103,0,65,104,123,255,212,54,19,1,6,141,88,0,83,134,243,255,136,53,103,0,169,27,180,0,177,49,24,0,111,54,167,0,195,61,215,255,31,1,108,1,60,42,70,0,185,3,162,255,194,149,40,255,246,127,38,254,190,119,38,255,61,119,8,1,96,161,219,255,42,203,221,1,177,242,164,255,245,159,10,0,116,196,0,0,5,93,205,254,128,127,179,0,125,237,246,255,149,162,217,255,87,37,20,254,140,238,192,0,9,9,193,0,97,1,226,0,29,38,10,0,0,136,63,255,229,72,210,254,38,134,92,255,78,218,208,1,104,36,84,255,12,5,193,255,242,175,61,255,191,169,46,1,179,147,147,255,113,190,139,254,125,172,31,0,3,75,252,254,215,36,15,0,193,27,24,1,255,69,149,255,110,129,118,0,203,93,249,0,138,137,64,254,38,70,6,0,153,116,222,0,161,74,123,0,193,99,79,255,118,59,94,255,61,12,43,1,146,177,157,0,46,147,191,0,16,255,38,0,11,51,31,1,60,58,98,255,111,194,77,1,154,91,244,0,140,40,144,1,173,10,251,0,203,209,50,254,108,130,78,0,228,180,90,0,174,7,250,0,31,174,60,0,41,171,30,0,116,99,82,255,118,193,139,255,187,173,198,254,218,111,56,0,185,123,216,0,249,158,52,0,52,180,93,255,201,9,91,255,56,45,166,254,132,155,203,255,58,232,110,0,52,211,89,255,253,0,162,1,9,87,183,0,145,136,44,1,94,122,245,0,85,188,171,1,147,92,198,0,0,8,104,0,30,95,174,0,221,230,52,1,247,247,235,255,137,174,53,255,35,21,204,255,71,227,214,1,232,82,194,0,11,48,227,255,170,73,184,255,198,251,252,254,44,112,34,0,131,101,131,255,72,168,187,0,132,135,125,255,138,104,97,255,238,184,168,255,243,104,84,255,135,216,226,255,139,144,237,0,188,137,150,1,80,56,140,255,86,169,167,255,194,78,25,255,220,17,180,255,17,13,193,0,117,137,212,255,141,224,151,0,49,244,175,0,193,99,175,255,19,99,154,1,255,65,62,255,156,210,55,255,242,244,3,255,250,14,149,0,158,88,217,255,157,207,134,254,251,232,28,0,46,156,251,255,171,56,184,255,239,51,234,0,142,138,131,255,25,254,243,1,10,201,194,0,63,97,75,0,210,239,162,0,192,200,31,1,117,214,243,0,24,71,222,254,54,40,232,255,76,183,111,254,144,14,87,255,214,79,136,255,216,196,212,0,132,27,140,254,131,5,253,0,124,108,19,255,28,215,75,0,76,222,55,254,233,182,63,0,68,171,191,254,52,111,222,255,10,105,77,255,80,170,235,0,143,24,88,255,45,231,121,0,148,129,224,1,61,246,84,0,253,46,219,255,239,76,33,0,49,148,18,254,230,37,69,0,67,134,22,254,142,155,94,0,31,157,211,254,213,42,30,255,4,228,247,254,252,176,13,255,39,0,31,254,241,244,255,255,170,45,10,254,253,222,249,0,222,114,132,0,255,47,6,255,180,163,179,1,84,94,151,255,89,209,82,254,229,52,169,255,213,236,0,1,214,56,228,255,135,119,151,255,112,201,193,0,83,160,53,254,6,151,66,0,18,162,17,0,233,97,91,0,131,5,78,1,181,120,53,255,117,95,63,255,237,117,185,0,191,126,136,255,144,119,233,0,183,57,97,1,47,201,187,255,167,165,119,1,45,100,126,0,21,98,6,254,145,150,95,255,120,54,152,0,209,98,104,0,143,111,30,254,184,148,249,0,235,216,46,0,248,202,148,255,57,95,22,0,242,225,163,0,233,247,232,255,71,171,19,255,103,244,49,255,84,103,93,255,68,121,244,1,82,224,13,0,41,79,43,255,249,206,167,255,215,52,21,254,192,32,22,255,247,111,60,0,101,74,38,255,22,91,84,254,29,28,13,255,198,231,215,254,244,154,200,0,223,137,237,0,211,132,14,0,95,64,206,255,17,62,247,255,233,131,121,1,93,23,77,0,205,204,52,254,81,189,136,0,180,219,138,1,143,18,94,0,204,43,140,254,188,175,219,0,111,98,143,255,151,63,162,255,211,50,71,254,19,146,53,0,146,45,83,254,178,82,238,255,16,133,84,255,226,198,93,255,201,97,20,255,120,118,35,255,114,50,231,255,162,229,156,255,211,26,12,0,114,39,115,255,206,212,134,0,197,217,160,255,116,129,94,254,199,215,219,255,75,223,249,1,253,116,181,255,232,215,104,255,228,130,246,255,185,117,86,0,14,5,8,0,239,29,61,1,237,87,133,255,125,146,137,254,204,168,223,0,46,168,245,0,154,105,22,0,220,212,161,255,107,69,24,255,137,218,181,255,241,84,198,255,130,122,211,255,141,8,153,255,190,177,118,0,96,89,178,0,255,16,48,254,122,96,105,255,117,54,232,255,34,126,105,255,204,67,166,0,232,52,138,255,211,147,12,0,25,54,7,0,44,15,215,254,51,236,45,0,190,68,129,1,106,147,225,0,28,93,45,254,236,141,15,255,17,61,161,0,220,115,192,0,236,145,24,254,111,168,169,0,224,58,63,255,127,164,188,0,82,234,75,1,224,158,134,0,209,68,110,1,217,166,217,0,70,225,166,1,187,193,143,255,16,7,88,255,10,205,140,0,117,192,156,1,17,56,38,0,27,124,108,1,171,215,55,255,95,253,212,0,155,135,168,255,246,178,153,254,154,68,74,0,232,61,96,254,105,132,59,0,33,76,199,1,189,176,130,255,9,104,25,254,75,198,102,255,233,1,112,0,108,220,20,255,114,230,70,0,140,194,133,255,57,158,164,254,146,6,80,255,169,196,97,1,85,183,130,0,70,158,222,1,59,237,234,255,96,25,26,255,232,175,97,255,11,121,248,254,88,35,194,0,219,180,252,254,74,8,227,0,195,227,73,1,184,110,161,255,49,233,164,1,128,53,47,0,82,14,121,255,193,190,58,0,48,174,117,255,132,23,32,0,40,10,134,1,22,51,25,255,240,11,176,255,110,57,146,0,117,143,239,1,157,101,118,255,54,84,76,0,205,184,18,255,47,4,72,255,78,112,85,255,193,50,66,1,93,16,52,255,8,105,134,0,12,109,72,255,58,156,251,0,144,35,204,0,44,160,117,254,50,107,194,0,1,68,165,255,111,110,162,0,158,83,40,254,76,214,234,0,58,216,205,255,171,96,147,255,40,227,114,1,176,227,241,0,70,249,183,1,136,84,139,255,60,122,247,254,143,9,117,255,177,174,137,254,73,247,143,0,236,185,126,255,62,25,247,255,45,64,56,255,161,244,6,0,34,57,56,1,105,202,83,0,128,147,208,0,6,103,10,255,74,138,65,255,97,80,100,255,214,174,33,255,50,134,74,255,110,151,130,254,111,84,172,0,84,199,75,254,248,59,112,255,8,216,178,1,9,183,95,0,238,27,8,254,170,205,220,0,195,229,135,0,98,76,237,255,226,91,26,1,82,219,39,255,225,190,199,1,217,200,121,255,81,179,8,255,140,65,206,0,178,207,87,254,250,252,46,255,104,89,110,1,253,189,158,255,144,214,158,255,160,245,54,255,53,183,92,1,21,200,194,255,146,33,113,1,209,1,255,0,235,106,43,255,167,52,232,0,157,229,221,0,51,30,25,0,250,221,27,1,65,147,87,255,79,123,196,0,65,196,223,255,76,44,17,1,85,241,68,0,202,183,249,255,65,212,212,255,9,33,154,1,71,59,80,0,175,194,59,255,141,72,9,0,100,160,244,0,230,208,56,0,59,25,75,254,80,194,194,0,18,3,200,254,160,159,115,0,132,143,247,1,111,93,57,255,58,237,11,1,134,222,135,255,122,163,108,1,123,43,190,255,251,189,206,254,80,182,72,255,208,246,224,1,17,60,9,0,161,207,38,0,141,109,91,0,216,15,211,255,136,78,110,0,98,163,104,255,21,80,121,255,173,178,183,1,127,143,4,0,104,60,82,254,214,16,13,255,96,238,33,1,158,148,230,255,127,129,62,255,51,255,210,255,62,141,236,254,157,55,224,255,114,39,244,0,192,188,250,255,228,76,53,0,98,84,81,255,173,203,61,254,147,50,55,255,204,235,191,0,52,197,244,0,88,43,211,254,27,191,119,0,188,231,154,0,66,81,161,0,92,193,160,1,250,227,120,0,123,55,226,0,184,17,72,0,133,168,10,254,22,135,156,255,41,25,103,255,48,202,58,0,186,149,81,255,188,134,239,0,235,181,189,254,217,139,188,255,74,48,82,0,46,218,229,0,189,253,251,0,50,229,12,255,211,141,191,1,128,244,25,255,169,231,122,254,86,47,189,255,132,183,23,255,37,178,150,255,51,137,253,0,200,78,31,0,22,105,50,0,130,60,0,0,132,163,91,254,23,231,187,0,192,79,239,0,157,102,164,255,192,82,20,1,24,181,103,255,240,9,234,0,1,123,164,255,133,233,0,255,202,242,242,0,60,186,245,0,241,16,199,255,224,116,158,254,191,125,91,255,224,86,207,0,121,37,231,255,227,9,198,255,15,153,239,255,121,232,217,254,75,112,82,0,95,12,57,254,51,214,105,255,148,220,97,1,199,98,36,0,156,209,12,254,10,212,52,0,217,180,55,254,212,170,232,255,216,20,84,255,157,250,135,0,157,99,127,254,1,206,41,0,149,36,70,1,54,196,201,255,87,116,0,254,235,171,150,0,27,163,234,0,202,135,180,0,208,95,0,254,123,156,93,0,183,62,75,0,137,235,182,0,204,225,255,255,214,139,210,255,2,115,8,255,29,12,111,0,52,156,1,0,253,21,251,255,37,165,31,254,12,130,211,0,106,18,53,254,42,99,154,0,14,217,61,254,216,11,92,255,200,197,112,254,147,38,199,0,36,252,120,254,107,169,77,0,1,123,159,255,207,75,102,0,163,175,196,0,44,1,240,0,120,186,176,254,13,98,76,255,237,124,241,255,232,146,188,255,200,96,224,0,204,31,41,0,208,200,13,0,21,225,96,255,175,156,196,0,247,208,126,0,62,184,244,254,2,171,81,0,85,115,158,0,54,64,45,255,19,138,114,0,135,71,205,0,227,47,147,1,218,231,66,0,253,209,28,0,244,15,173,255,6,15,118,254,16,150,208,255,185,22,50,255,86,112,207,255,75,113,215,1,63,146,43,255,4,225,19,254,227,23,62,255,14,255,214,254,45,8,205,255,87,197,151,254,210,82,215,255,245,248,247,255,128,248,70,0,225,247,87,0,90,120,70,0,213,245,92,0,13,133,226,0,47,181,5,1,92,163,105,255,6,30,133,254,232,178,61,255,230,149,24,255,18,49,158,0,228,100,61,254,116,243,251,255,77,75,92,1,81,219,147,255,76,163,254,254,141,213,246,0,232,37,152,254,97,44,100,0,201,37,50,1,212,244,57,0,174,171,183,255,249,74,112,0,166,156,30,0,222,221,97,255,243,93,73,254,251,101,100,255,216,217,93,255,254,138,187,255,142,190,52,255,59,203,177,255,200,94,52,0,115,114,158,255,165,152,104,1,126,99,226,255,118,157,244,1,107,200,16,0,193,90,229,0,121,6,88,0,156,32,93,254,125,241,211,255,14,237,157,255,165,154,21,255,184,224,22,255,250,24,152,255,113,77,31,0,247,171,23,255,237,177,204,255,52,137,145,255,194,182,114,0,224,234,149,0,10,111,103,1,201,129,4,0,238,142,78,0,52,6,40,255,110,213,165,254,60,207,253,0,62,215,69,0,96,97,0,255,49,45,202,0,120,121,22,255,235,139,48,1,198,45,34,255,182,50,27,1,131,210,91,255,46,54,128,0,175,123,105,255,198,141,78,254,67,244,239,255,245,54,103,254,78,38,242,255,2,92,249,254,251,174,87,255,139,63,144,0,24,108,27,255,34,102,18,1,34,22,152,0,66,229,118,254,50,143,99,0,144,169,149,1,118,30,152,0,178,8,121,1,8,159,18,0,90,101,230,255,129,29,119,0,68,36,11,1,232,183,55,0,23,255,96,255,161,41,193,255,63,139,222,0,15,179,243,0,255,100,15,255,82,53,135,0,137,57,149,1,99,240,170,255,22,230,228,254,49,180,82,255,61,82,43,0,110,245,217,0,199,125,61,0,46,253,52,0,141,197,219,0,211,159,193,0,55,121,105,254,183,20,129,0,169,119,170,255,203,178,139,255,135,40,182,255,172,13,202,255,65,178,148,0,8,207,43,0,122,53,127,1,74,161,48,0,227,214,128,254,86,11,243,255,100,86,7,1,245,68,134,255,61,43,21,1,152,84,94,255,190,60,250,254,239,118,232,255,214,136,37,1,113,76,107,255,93,104,100,1,144,206,23,255,110,150,154,1,228,103,185,0,218,49,50,254,135,77,139,255,185,1,78,0,0,161,148,255,97,29,233,255,207,148,149,255,160,168,0,0,91,128,171,255,6,28,19,254,11,111,247,0,39,187,150,255,138,232,149,0,117,62,68,255,63,216,188,255,235,234,32,254,29,57,160,255,25,12,241,1,169,60,191,0,32,131,141,255,237,159,123,255,94,197,94,254,116,254,3,255,92,179,97,254,121,97,92,255,170,112,14,0,21,149,248,0,248,227,3,0,80,96,109,0,75,192,74,1,12,90,226,255,161,106,68,1,208,114,127,255,114,42,255,254,74,26,74,255,247,179,150,254,121,140,60,0,147,70,200,255,214,40,161,255,161,188,201,255,141,65,135,255,242,115,252,0,62,47,202,0,180,149,255,254,130,55,237,0,165,17,186,255,10,169,194,0,156,109,218,255,112,140,123,255,104,128,223,254,177,142,108,255,121,37,219,255,128,77,18,255,111,108,23,1,91,192,75,0,174,245,22,255,4,236,62,255,43,64,153,1,227,173,254,0,237,122,132,1,127,89,186,255,142,82,128,254,252,84,174,0,90,179,177,1,243,214,87,255,103,60,162,255,208,130,14,255,11,130,139,0,206,129,219,255,94,217,157,255,239,230,230,255,116,115,159,254,164,107,95,0,51,218,2,1,216,125,198,255,140,202,128,254,11,95,68,255,55,9,93,254,174,153,6,255,204,172,96,0,69,160,110,0,213,38,49,254,27,80,213,0,118,125,114,0,70,70,67,255,15,142,73,255,131,122,185,255,243,20,50,254,130,237,40,0,210,159,140,1,197,151,65,255,84,153,66,0,195,126,90,0,16,238,236,1,118,187,102,255,3,24,133,255,187,69,230,0,56,197,92,1,213,69,94,255,80,138,229,1,206,7,230,0,222,111,230,1,91,233,119,255,9,89,7,1,2,98,1,0,148,74,133,255,51,246,180,255,228,177,112,1,58,189,108,255,194,203,237,254,21,209,195,0,147,10,35,1,86,157,226,0,31,163,139,254,56,7,75,255,62,90,116,0,181,60,169,0,138,162,212,254,81,167,31,0,205,90,112,255,33,112,227,0,83,151,117,1,177,224,73,255,174,144,217,255,230,204,79,255,22,77,232,255,114,78,234,0,224,57,126,254,9,49,141,0,242,147,165,1,104,182,140,255,167,132,12,1,123,68,127,0,225,87,39,1,251,108,8,0,198,193,143,1,121,135,207,255,172,22,70,0,50,68,116,255,101,175,40,255,248,105,233,0,166,203,7,0,110,197,218,0,215,254,26,254,168,226,253,0,31,143,96,0,11,103,41,0,183,129,203,254,100,247,74,255,213,126,132,0,210,147,44,0,199,234,27,1,148,47,181,0,155,91,158,1,54,105,175,255,2,78,145,254,102,154,95,0,128,207,127,254,52,124,236,255,130,84,71,0,221,243,211,0,152,170,207,0,222,106,199,0,183,84,94,254,92,200,56,255,138,182,115,1,142,96,146,0,133,136,228,0,97,18,150,0,55,251,66,0,140,102,4,0,202,103,151,0,30,19,248,255,51,184,207,0,202,198,89,0,55,197,225,254,169,95,249,255,66,65,68,255,188,234,126,0,166,223,100,1,112,239,244,0,144,23,194,0,58,39,182,0,244,44,24,254,175,68,179,255,152,118,154,1,176,162,130,0,217,114,204,254,173,126,78,255,33,222,30,255,36,2,91,255,2,143,243,0,9,235,215,0,3,171,151,1,24,215,245,255,168,47,164,254,241,146,207,0,69,129,180,0,68,243,113,0,144,53,72,254,251,45,14,0,23,110,168,0,68,68,79,255,110,70,95,254,174,91,144,255,33,206,95,255,137,41,7,255,19,187,153,254,35,255,112,255,9,145,185,254,50,157,37,0,11,112,49,1,102,8,190,255,234,243,169,1,60,85,23,0,74,39,189,0,116,49,239,0,173,213,210,0,46,161,108,255,159,150,37,0,196,120,185,255,34,98,6,255,153,195,62,255,97,230,71,255,102,61,76,0,26,212,236,255,164,97,16,0,198,59,146,0,163,23,196,0,56,24,61,0,181,98,193,0,251,147,229,255,98,189,24,255,46,54,206,255,234,82,246,0,183,103,38,1,109,62,204,0,10,240,224,0,146,22,117,255,142,154,120,0,69,212,35,0,208,99,118,1,121,255,3,255,72,6,194,0,117,17,197,255,125,15,23,0,154,79,153,0,214,94,197,255,185,55,147,255,62,254,78,254,127,82,153,0,110,102,63,255,108,82,161,255,105,187,212,1,80,138,39,0,60,255,93,255,72,12,186,0,210,251,31,1,190,167,144,255,228,44,19,254,128,67,232,0,214,249,107,254,136,145,86,255,132,46,176,0,189,187,227,255,208,22,140,0,217,211,116,0,50,81,186,254,139,250,31,0,30,64,198,1,135,155,100,0,160,206,23,254,187,162,211,255,16,188,63,0,254,208,49,0,85,84,191,0,241,192,242,255,153,126,145,1,234,162,162,255,230,97,216,1,64,135,126,0,190,148,223,1,52,0,43,255,28,39,189,1,64,136,238,0,175,196,185,0,98,226,213,255,127,159,244,1,226,175,60,0,160,233,142,1,180,243,207,255,69,152,89,1,31,101,21,0,144,25,164,254,139,191,209,0,91,25,121,0,32,147,5,0,39,186,123,255,63,115,230,255,93,167,198,255,143,213,220,255,179,156,19,255,25,66,122,0,214,160,217,255,2,45,62,255,106,79,146,254,51,137,99,255,87,100,231,255,175,145,232,255,101,184,1,255,174,9,125,0,82,37,161,1,36,114,141,255,48,222,142,255,245,186,154,0,5,174,221,254,63,114,155,255,135,55,160,1,80,31,135,0,126,250,179,1,236,218,45,0,20,28,145,1,16,147,73,0,249,189,132,1,17,189,192,255,223,142,198,255,72,20,15,255,250,53,237,254,15,11,18,0,27,211,113,254,213,107,56,255,174,147,146,255,96,126,48,0,23,193,109,1,37,162,94,0,199,157,249,254,24,128,187,255,205,49,178,254,93,164,42,255,43,119,235,1,88,183,237,255,218,210,1,255,107,254,42,0,230,10,99,255,162,0,226,0,219,237,91,0,129,178,203,0,208,50,95,254,206,208,95,255,247,191,89,254,110,234,79,255,165,61,243,0,20,122,112,255,246,246,185,254,103,4,123,0,233,99,230,1,219,91,252,255,199,222,22,255,179,245,233,255,211,241,234,0,111,250,192,255,85,84,136,0,101,58,50,255,131,173,156,254,119,45,51,255,118,233,16,254,242,90,214,0,94,159,219,1,3,3,234,255,98,76,92,254,80,54,230,0,5,228,231,254,53,24,223,255,113,56,118,1,20,132,1,255,171,210,236,0,56,241,158,255,186,115,19,255,8,229,174,0,48,44,0,1,114,114,166,255,6,73,226,255,205,89,244,0,137,227,75,1,248,173,56,0,74,120,246,254,119,3,11,255,81,120,198,255,136,122,98,255,146,241,221,1,109,194,78,255,223,241,70,1,214,200,169,255,97,190,47,255,47,103,174,255,99,92,72,254,118,233,180,255,193,35,233,254,26,229,32,255,222,252,198,0,204,43,71,255,199,84,172,0,134,102,190,0,111,238,97,254,230,40,230,0,227,205,64,254,200,12,225,0,166,25,222,0,113,69,51,255,143,159,24,0,167,184,74,0,29,224,116,254,158,208,233,0,193,116,126,255,212,11,133,255,22,58,140,1,204,36,51,255,232,30,43,0,235,70,181,255,64,56,146,254,169,18,84,255,226,1,13,255,200,50,176,255,52,213,245,254,168,209,97,0,191,71,55,0,34,78,156,0,232,144,58,1,185,74,189,0,186,142,149,254,64,69,127,255,161,203,147,255,176,151,191,0,136,231,203,254,163,182,137,0,161,126,251,254,233,32,66,0,68,207,66,0,30,28,37,0,93,114,96,1,254,92,247,255,44,171,69,0,202,119,11,255,188,118,50,1,255,83,136,255,71,82,26,0,70,227,2,0,32,235,121,1,181,41,154,0,71,134,229,254,202,255,36,0,41,152,5,0,154,63,73,255,34,182,124,0,121,221,150,255,26,204,213,1,41,172,87,0,90,157,146,255,109,130,20,0,71,107,200,255,243,102,189,0,1,195,145,254,46,88,117,0,8,206,227,0,191,110,253,255,109,128,20,254,134,85,51,255,137,177,112,1,216,34,22,255,131,16,208,255,121,149,170,0,114,19,23,1,166,80,31,255,113,240,122,0,232,179,250,0,68,110,180,254,210,170,119,0,223,108,164,255,207,79,233,255,27,229,226,254,209,98,81,255,79,68,7,0,131,185,100,0,170,29,162,255,17,162,107,255,57,21,11,1,100,200,181,255,127,65,166,1,165,134,204,0,104,167,168,0,1,164,79,0,146,135,59,1,70,50,128,255,102,119,13,254,227,6,135,0,162,142,179,255,160,100,222,0,27,224,219,1,158,93,195,255,234,141,137,0,16,24,125,255,238,206,47,255,97,17,98,255,116,110,12,255,96,115,77,0,91,227,232,255,248,254,79,255,92,229,6,254,88,198,139,0,206,75,129,0,250,77,206,255,141,244,123,1,138,69,220,0,32,151,6,1,131,167,22,255,237,68,167,254,199,189,150,0,163,171,138,255,51,188,6,255,95,29,137,254,148,226,179,0,181,107,208,255,134,31,82,255,151,101,45,255,129,202,225,0,224,72,147,0,48,138,151,255,195,64,206,254,237,218,158,0,106,29,137,254,253,189,233,255,103,15,17,255,194,97,255,0,178,45,169,254,198,225,155,0,39,48,117,255,135,106,115,0,97,38,181,0,150,47,65,255,83,130,229,254,246,38,129,0,92,239,154,254,91,99,127,0,161,111,33,255,238,217,242,255,131,185,195,255,213,191,158,255,41,150,218,0,132,169,131,0,89,84,252,1,171,70,128,255,163,248,203,254,1,50,180,255,124,76,85,1,251,111,80,0,99,66,239,255,154,237,182,255,221,126,133,254,74,204,99,255,65,147,119,255,99,56,167,255,79,248,149,255,116,155,228,255,237,43,14,254,69,137,11,255,22,250,241,1,91,122,143,255,205,249,243,0,212,26,60,255,48,182,176,1,48,23,191,255,203,121,152,254,45,74,213,255,62,90,18,254,245,163,230,255,185,106,116,255,83,35,159,0,12,33,2,255,80,34,62,0,16,87,174,255,173,101,85,0,202,36,81,254,160,69,204,255,64,225,187,0,58,206,94,0,86,144,47,0,229,86,245,0,63,145,190,1,37,5,39,0,109,251,26,0,137,147,234,0,162,121,145,255,144,116,206,255,197,232,185,255,183,190,140,255,73,12,254,255,139,20,242,255,170,90,239,255,97,66,187,255,245,181,135,254,222,136,52,0,245,5,51,254,203,47,78,0,152,101,216,0,73,23,125,0,254,96,33,1,235,210,73,255,43,209,88,1,7,129,109,0,122,104,228,254,170,242,203,0,242,204,135,255,202,28,233,255,65,6,127,0,159,144,71,0,100,140,95,0,78,150,13,0,251,107,118,1,182,58,125,255,1,38,108,255,141,189,209,255,8,155,125,1,113,163,91,255,121,79,190,255,134,239,108,255,76,47,248,0,163,228,239,0,17,111,10,0,88,149,75,255,215,235,239,0,167,159,24,255,47,151,108,255,107,209,188,0,233,231,99,254,28,202,148,255,174,35,138,255,110,24,68,255,2,69,181,0,107,102,82,0,102,237,7,0,92,36,237,255,221,162,83,1,55,202,6,255,135,234,135,255,24,250,222,0,65,94,168,254,245,248,210,255,167,108,201,254,255,161,111,0,205,8,254,0,136,13,116,0,100,176,132,255,43,215,126,255,177,133,130,255,158,79,148,0,67,224,37,1,12,206,21,255,62,34,110,1,237,104,175,255,80,132,111,255,142,174,72,0,84,229,180,254,105,179,140,0,64,248,15,255,233,138,16,0,245,67,123,254,218,121,212,255,63,95,218,1,213,133,137,255,143,182,82,255,48,28,11,0,244,114,141,1,209,175,76,255,157,181,150,255,186,229,3,255,164,157,111,1,231,189,139,0,119,202,190,255,218,106,64,255,68,235,63,254,96,26,172,255,187,47,11,1,215,18,251,255,81,84,89,0,68,58,128,0,94,113,5,1,92,129,208,255,97,15,83,254,9,28,188,0,239,9,164,0,60,205,152,0,192,163,98,255,184,18,60,0,217,182,139,0,109,59,120,255,4,192,251,0,169,210,240,255,37,172,92,254,148,211,245,255,179,65,52,0,253,13,115,0,185,174,206,1,114,188,149,255,237,90,173,0,43,199,192,255,88,108,113,0,52,35,76,0,66,25,148,255,221,4,7,255,151,241,114,255,190,209,232,0,98,50,199,0,151,150,213,255,18,74,36,1,53,40,7,0,19,135,65,255,26,172,69,0,174,237,85,0,99,95,41,0,3,56,16,0,39,160,177,255,200,106,218,254,185,68,84,255,91,186,61,254,67,143,141,255,13,244,166,255,99,114,198,0,199,110,163,255,193,18,186,0,124,239,246,1,110,68,22,0,2,235,46,1,212,60,107,0,105,42,105,1,14,230,152,0,7,5,131,0,141,104,154,255,213,3,6,0,131,228,162,255,179,100,28,1,231,123,85,255,206,14,223,1,253,96,230,0,38,152,149,1,98,137,122,0,214,205,3,255,226,152,179,255,6,133,137,0,158,69,140,255,113,162,154,255,180,243,172,255,27,189,115,255,143,46,220,255,213,134,225,255,126,29,69,0,188,43,137,1,242,70,9,0,90,204,255,255,231,170,147,0,23,56,19,254,56,125,157,255,48,179,218,255,79,182,253,255,38,212,191,1,41,235,124,0,96,151,28,0,135,148,190,0,205,249,39,254,52,96,136,255,212,44,136,255,67,209,131,255,252,130,23,255,219,128,20,255,198,129,118,0,108,101,11,0,178,5,146,1,62,7,100,255,181,236,94,254,28,26,164,0,76,22,112,255,120,102,79,0,202,192,229,1,200,176,215,0,41,64,244,255,206,184,78,0,167,45,63,1,160,35,0,255,59,12,142,255,204,9,144,255,219,94,229,1,122,27,112,0,189,105,109,255,64,208,74,255,251,127,55,1,2,226,198,0,44,76,209,0,151,152,77,255,210,23,46,1,201,171,69,255,44,211,231,0,190,37,224,255,245,196,62,255,169,181,222,255,34,211,17,0,119,241,197,255,229,35,152,1,21,69,40,255,178,226,161,0,148,179,193,0,219,194,254,1,40,206,51,255,231,92,250,1,67,153,170,0,21,148,241,0,170,69,82,255,121,18,231,255,92,114,3,0,184,62,230,0,225,201,87,255,146,96,162,255,181,242,220,0,173,187,221,1,226,62,170,255,56,126,217,1,117,13,227,255,179,44,239,0,157,141,155,255,144,221,83,0,235,209,208,0,42,17,165,1,251,81,133,0,124,245,201,254,97,211,24,255,83,214,166,0,154,36,9,255,248,47,127,0,90,219,140,255,161,217,38,254,212,147,63,255,66,84,148,1,207,3,1,0,230,134,89,1,127,78,122,255,224,155,1,255,82,136,74,0,178,156,208,255,186,25,49,255,222,3,210,1,229,150,190,255,85,162,52,255,41,84,141,255,73,123,84,254,93,17,150,0,119,19,28,1,32,22,215,255,28,23,204,255,142,241,52,255,228,52,125,0,29,76,207,0,215,167,250,254,175,164,230,0,55,207,105,1,109,187,245,255,161,44,220,1,41,101,128,255,167,16,94,0,93,214,107,255,118,72,0,254,80,61,234,255,121,175,125,0,139,169,251,0,97,39,147,254,250,196,49,255,165,179,110,254,223,70,187,255,22,142,125,1,154,179,138,255,118,176,42,1,10,174,153,0,156,92,102,0,168,13,161,255,143,16,32,0,250,197,180,255,203,163,44,1,87,32,36,0,161,153,20,255,123,252,15,0,25,227,80,0,60,88,142,0,17,22,201,1,154,205,77,255,39,63,47,0,8,122,141,0,128,23,182,254,204,39,19,255,4,112,29,255,23,36,140,255,210,234,116,254,53,50,63,255,121,171,104,255,160,219,94,0,87,82,14,254,231,42,5,0,165,139,127,254,86,78,38,0,130,60,66,254,203,30,45,255,46,196,122,1,249,53,162,255,136,143,103,254,215,210,114,0,231,7,160,254,169,152,42,255,111,45,246,0,142,131,135,255,131,71,204,255,36,226,11,0,0,28,242,255,225,138,213,255,247,46,216,254,245,3,183,0,108,252,74,1,206,26,48,255,205,54,246,255,211,198,36,255,121,35,50,0,52,216,202,255,38,139,129,254,242,73,148,0,67,231,141,255,42,47,204,0,78,116,25,1,4,225,191,255,6,147,228,0,58,88,177,0,122,165,229,255,252,83,201,255,224,167,96,1,177,184,158,255,242,105,179,1,248,198,240,0,133,66,203,1,254,36,47,0,45,24,115,255,119,62,254,0,196,225,186,254,123,141,172,0,26,85,41,255,226,111,183,0,213,231,151,0,4,59,7,255,238,138,148,0,66,147,33,255,31,246,141,255,209,141,116,255,104,112,31,0,88,161,172,0,83,215,230,254,47,111,151,0,45,38,52,1,132,45,204,0,138,128,109,254,233,117,134,255,243,190,173,254,241,236,240,0,82,127,236,254,40,223,161,255,110,182,225,255,123,174,239,0,135,242,145,1,51,209,154,0,150,3,115,254,217,164,252,255,55,156,69,1,84,94,255,255,232,73,45,1,20,19,212,255,96,197,59,254,96,251,33,0,38,199,73,1,64,172,247,255,117,116,56,255,228,17,18,0,62,138,103,1,246,229,164,255,244,118,201,254,86,32,159,255,109,34,137,1,85,211,186,0,10,193,193,254,122,194,177,0,122,238,102,255,162,218,171,0,108,217,161,1,158,170,34,0,176,47,155,1,181,228,11,255,8,156,0,0,16,75,93,0,206,98,255,1,58,154,35,0,12,243,184,254,67,117,66,255,230,229,123,0,201,42,110,0,134,228,178,254,186,108,118,255,58,19,154,255,82,169,62,255,114,143,115,1,239,196,50,255,173,48,193,255,147,2,84,255,150,134,147,254,95,232,73,0,109,227,52,254,191,137,10,0,40,204,30,254,76,52,97,255,164,235,126,0,254,124,188,0,74,182,21,1,121,29,35,255,241,30,7,254,85,218,214,255,7,84,150,254,81,27,117,255,160,159,152,254,66,24,221,255,227,10,60,1,141,135,102,0,208,189,150,1,117,179,92,0,132,22,136,255,120,199,28,0,21,129,79,254,182,9,65,0,218,163,169,0,246,147,198,255,107,38,144,1,78,175,205,255,214,5,250,254,47,88,29,255,164,47,204,255,43,55,6,255,131,134,207,254,116,100,214,0,96,140,75,1,106,220,144,0,195,32,28,1,172,81,5,255,199,179,52,255,37,84,203,0,170,112,174,0,11,4,91,0,69,244,27,1,117,131,92,0,33,152,175,255,140,153,107,255,251,135,43,254,87,138,4,255,198,234,147,254,121,152,84,255,205,101,155,1,157,9,25,0,72,106,17,254,108,153,0,255],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+20480);allocate([189,229,186,0,193,8,176,255,174,149,209,0,238,130,29,0,233,214,126,1,61,226,102,0,57,163,4,1,198,111,51,255,45,79,78,1,115,210,10,255,218,9,25,255,158,139,198,255,211,82,187,254,80,133,83,0,157,129,230,1,243,133,134,255,40,136,16,0,77,107,79,255,183,85,92,1,177,204,202,0,163,71,147,255,152,69,190,0,172,51,188,1,250,210,172,255,211,242,113,1,89,89,26,255,64,66,111,254,116,152,42,0,161,39,27,255,54,80,254,0,106,209,115,1,103,124,97,0,221,230,98,255,31,231,6,0,178,192,120,254,15,217,203,255,124,158,79,0,112,145,247,0,92,250,48,1,163,181,193,255,37,47,142,254,144,189,165,255,46,146,240,0,6,75,128,0,41,157,200,254,87,121,213,0,1,113,236,0,5,45,250,0,144,12,82,0,31,108,231,0,225,239,119,255,167,7,189,255,187,228,132,255,110,189,34,0,94,44,204,1,162,52,197,0,78,188,241,254,57,20,141,0,244,146,47,1,206,100,51,0,125,107,148,254,27,195,77,0,152,253,90,1,7,143,144,255,51,37,31,0,34,119,38,255,7,197,118,0,153,188,211,0,151,20,116,254,245,65,52,255,180,253,110,1,47,177,209,0,161,99,17,255,118,222,202,0,125,179,252,1,123,54,126,255,145,57,191,0,55,186,121,0,10,243,138,0,205,211,229,255,125,156,241,254,148,156,185,255,227,19,188,255,124,41,32,255,31,34,206,254,17,57,83,0,204,22,37,255,42,96,98,0,119,102,184,1,3,190,28,0,110,82,218,255,200,204,192,255,201,145,118,0,117,204,146,0,132,32,98,1,192,194,121,0,106,161,248,1,237,88,124,0,23,212,26,0,205,171,90,255,248,48,216,1,141,37,230,255,124,203,0,254,158,168,30,255,214,248,21,0,112,187,7,255,75,133,239,255,74,227,243,255,250,147,70,0,214,120,162,0,167,9,179,255,22,158,18,0,218,77,209,1,97,109,81,255,244,33,179,255,57,52,57,255,65,172,210,255,249,71,209,255,142,169,238,0,158,189,153,255,174,254,103,254,98,33,14,0,141,76,230,255,113,139,52,255,15,58,212,0,168,215,201,255,248,204,215,1,223,68,160,255,57,154,183,254,47,231,121,0,106,166,137,0,81,136,138,0,165,43,51,0,231,139,61,0,57,95,59,254,118,98,25,255,151,63,236,1,94,190,250,255,169,185,114,1,5,250,58,255,75,105,97,1,215,223,134,0,113,99,163,1,128,62,112,0,99,106,147,0,163,195,10,0,33,205,182,0,214,14,174,255,129,38,231,255,53,182,223,0,98,42,159,255,247,13,40,0,188,210,177,1,6,21,0,255,255,61,148,254,137,45,129,255,89,26,116,254,126,38,114,0,251,50,242,254,121,134,128,255,204,249,167,254,165,235,215,0,202,177,243,0,133,141,62,0,240,130,190,1,110,175,255,0,0,20,146,1,37,210,121,255,7,39,130,0,142,250,84,255,141,200,207,0,9,95,104,255,11,244,174,0,134,232,126,0,167,1,123,254,16,193,149,255,232,233,239,1,213,70,112,255,252,116,160,254,242,222,220,255,205,85,227,0,7,185,58,0,118,247,63,1,116,77,177,255,62,245,200,254,63,18,37,255,107,53,232,254,50,221,211,0,162,219,7,254,2,94,43,0,182,62,182,254,160,78,200,255,135,140,170,0,235,184,228,0,175,53,138,254,80,58,77,255,152,201,2,1,63,196,34,0,5,30,184,0,171,176,154,0,121,59,206,0,38,99,39,0,172,80,77,254,0,134,151,0,186,33,241,254,94,253,223,255,44,114,252,0,108,126,57,255,201,40,13,255,39,229,27,255,39,239,23,1,151,121,51,255,153,150,248,0,10,234,174,255,118,246,4,254,200,245,38,0,69,161,242,1,16,178,150,0,113,56,130,0,171,31,105,0,26,88,108,255,49,42,106,0,251,169,66,0,69,93,149,0,20,57,254,0,164,25,111,0,90,188,90,255,204,4,197,0,40,213,50,1,212,96,132,255,88,138,180,254,228,146,124,255,184,246,247,0,65,117,86,255,253,102,210,254,254,121,36,0,137,115,3,255,60,24,216,0,134,18,29,0,59,226,97,0,176,142,71,0,7,209,161,0,189,84,51,254,155,250,72,0,213,84,235,255,45,222,224,0,238,148,143,255,170,42,53,255,78,167,117,0,186,0,40,255,125,177,103,255,69,225,66,0,227,7,88,1,75,172,6,0,169,45,227,1,16,36,70,255,50,2,9,255,139,193,22,0,143,183,231,254,218,69,50,0,236,56,161,1,213,131,42,0,138,145,44,254,136,229,40,255,49,63,35,255,61,145,245,255,101,192,2,254,232,167,113,0,152,104,38,1,121,185,218,0,121,139,211,254,119,240,35,0,65,189,217,254,187,179,162,255,160,187,230,0,62,248,14,255,60,78,97,0,255,247,163,255,225,59,91,255,107,71,58,255,241,47,33,1,50,117,236,0,219,177,63,254,244,90,179,0,35,194,215,255,189,67,50,255,23,135,129,0,104,189,37,255,185,57,194,0,35,62,231,255,220,248,108,0,12,231,178,0,143,80,91,1,131,93,101,255,144,39,2,1,255,250,178,0,5,17,236,254,139,32,46,0,204,188,38,254,245,115,52,255,191,113,73,254,191,108,69,255,22,69,245,1,23,203,178,0,170,99,170,0,65,248,111,0,37,108,153,255,64,37,69,0,0,88,62,254,89,148,144,255,191,68,224,1,241,39,53,0,41,203,237,255,145,126,194,255,221,42,253,255,25,99,151,0,97,253,223,1,74,115,49,255,6,175,72,255,59,176,203,0,124,183,249,1,228,228,99,0,129,12,207,254,168,192,195,255,204,176,16,254,152,234,171,0,77,37,85,255,33,120,135,255,142,194,227,1,31,214,58,0,213,187,125,255,232,46,60,255,190,116,42,254,151,178,19,255,51,62,237,254,204,236,193,0,194,232,60,0,172,34,157,255,189,16,184,254,103,3,95,255,141,233,36,254,41,25,11,255,21,195,166,0,118,245,45,0,67,213,149,255,159,12,18,255,187,164,227,1,160,25,5,0,12,78,195,1,43,197,225,0,48,142,41,254,196,155,60,255,223,199,18,1,145,136,156,0,252,117,169,254,145,226,238,0,239,23,107,0,109,181,188,255,230,112,49,254,73,170,237,255,231,183,227,255,80,220,20,0,194,107,127,1,127,205,101,0,46,52,197,1,210,171,36,255,88,3,90,255,56,151,141,0,96,187,255,255,42,78,200,0,254,70,70,1,244,125,168,0,204,68,138,1,124,215,70,0,102,66,200,254,17,52,228,0,117,220,143,254,203,248,123,0,56,18,174,255,186,151,164,255,51,232,208,1,160,228,43,255,249,29,25,1,68,190,63,0,103,230,9,106,133,174,103,187,114,243,110,60,58,245,79,165,127,82,14,81,140,104,5,155,171,217,131,31,25,205,224,91,99,117,114,118,101,50,53,53,49,57,120,115,97,108,115,97,50,48,112,111,108,121,49,51,48,53,0,98,108,97,107,101,50,98,0,83,45,62,98,117,102,108,101,110,32,60,61,32,66,76,65,75,69,50,66,95,66,76,79,67,75,66,89,84,69,83,0,99,114,121,112,116,111,95,103,101,110,101,114,105,99,104,97,115,104,47,98,108,97,107,101,50,47,114,101,102,47,98,108,97,107,101,50,98,45,114,101,102,46,99,0,99,114,121,112,116,111,95,103,101,110,101,114,105,99,104,97,115,104,95,98,108,97,107,101,50,98,95,95,102,105,110,97,108,0,111,117,116,108,101,110,32,60,61,32,85,73,78,84,56,95,77,65,88,0,99,114,121,112,116,111,95,103,101,110,101,114,105,99,104,97,115,104,47,98,108,97,107,101,50,47,114,101,102,47,103,101,110,101,114,105,99,104,97,115,104,95,98,108,97,107,101,50,98,46,99,0,99,114,121,112,116,111,95,103,101,110,101,114,105,99,104,97,115,104,95,98,108,97,107,101,50,98,0,107,101,121,108,101,110,32,60,61,32,85,73,78,84,56,95,77,65,88,0,99,114,121,112,116,111,95,103,101,110,101,114,105,99,104,97,115,104,95,98,108,97,107,101,50,98,95,115,97,108,116,95,112,101,114,115,111,110,97,108,0,99,114,121,112,116,111,95,103,101,110,101,114,105,99,104,97,115,104,95,98,108,97,107,101,50,98,95,105,110,105,116,0,99,114,121,112,116,111,95,103,101,110,101,114,105,99,104,97,115,104,95,98,108,97,107,101,50,98,95,105,110,105,116,95,115,97,108,116,95,112,101,114,115,111,110,97,108,0,99,114,121,112,116,111,95,103,101,110,101,114,105,99,104,97,115,104,95,98,108,97,107,101,50,98,95,102,105,110,97,108,0,115,104,97,53,49,50,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,111,108,121,49,51,48,53,0,36,97,114,103,111,110,50,105,0,36,118,61,0,36,109,61,0,44,116,61,0,44,112,61,0,44,100,97,116,97,61,0,36,97,114,103,111,110,50,105,36,118,61,0,36,97,114,103,111,110,50,105,36,0,97,114,103,111,110,50,105,0,46,47,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,0,36,55,36,0,99,117,114,118,101,50,53,53,49,57,0,120,115,97,108,115,97,50,48,112,111,108,121,49,51,48,53,0,115,105,112,104,97,115,104,50,52,0,101,100,50,53,53,49,57,0,237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,120,115,97,108,115,97,50,48,0,106,115,0,123,32,114,101,116,117,114,110,32,77,111,100,117,108,101,46,103,101,116,82,97,110,100,111,109,86,97,108,117,101,40,41,59,32,125,0,123,32,105,102,32,40,77,111,100,117,108,101,46,103,101,116,82,97,110,100,111,109,86,97,108,117,101,32,61,61,61,32,117,110,100,101,102,105,110,101,100,41,32,123,32,116,114,121,32,123,32,118,97,114,32,119,105,110,100,111,119,95,32,61,32,34,111,98,106,101,99,116,34,32,61,61,61,32,116,121,112,101,111,102,32,119,105,110,100,111,119,32,63,32,119,105,110,100,111,119,32,58,32,115,101,108,102,44,32,99,114,121,112,116,111,95,32,61,32,116,121,112,101,111,102,32,119,105,110,100,111,119,95,46,99,114,121,112,116,111,32,33,61,61,32,34,117,110,100,101,102,105,110,101,100,34,32,63,32,119,105,110,100,111,119,95,46,99,114,121,112,116,111,32,58,32,119,105,110,100,111,119,95,46,109,115,67,114,121,112,116,111,44,32,114,97,110,100,111,109,86,97,108,117,101,115,83,116,97,110,100,97,114,100,32,61,32,102,117,110,99,116,105,111,110,40,41,32,123,32,118,97,114,32,98,117,102,32,61,32,110,101,119,32,85,105,110,116,51,50,65,114,114,97,121,40,49,41,59,32,99,114,121,112,116,111,95,46,103,101,116,82,97,110,100,111,109,86,97,108,117,101,115,40,98,117,102,41,59,32,114,101,116,117,114,110,32,98,117,102,91,48,93,32,62,62,62,32,48,59,32,125,59,32,114,97,110,100,111,109,86,97,108,117,101,115,83,116,97,110,100,97,114,100,40,41,59,32,77,111,100,117,108,101,46,103,101,116,82,97,110,100,111,109,86,97,108,117,101,32,61,32,114,97,110,100,111,109,86,97,108,117,101,115,83,116,97,110,100,97,114,100,59,32,125,32,99,97,116,99,104,32,40,101,41,32,123,32,116,114,121,32,123,32,118,97,114,32,99,114,121,112,116,111,32,61,32,114,101,113,117,105,114,101,40,39,99,114,121,112,116,111,39,41,44,32,114,97,110,100,111,109,86,97,108,117,101,78,111,100,101,74,83,32,61,32,102,117,110,99,116,105,111,110,40,41,32,123,32,118,97,114,32,98,117,102,32,61,32,99,114,121,112,116,111,46,114,97,110,100,111,109,66,121,116,101,115,40,52,41,59,32,114,101,116,117,114,110,32,40,98,117,102,91,48,93,32,60,60,32,50,52,32,124,32,98,117,102,91,49,93,32,60,60,32,49,54,32,124,32,98,117,102,91,50,93,32,60,60,32,56,32,124,32,98,117,102,91,51,93,41,32,62,62,62,32,48,59,32,125,59,32,114,97,110,100,111,109,86,97,108,117,101,78,111,100,101,74,83,40,41,59,32,77,111,100,117,108,101,46,103,101,116,82,97,110,100,111,109,86,97,108,117,101,32,61,32,114,97,110,100,111,109,86,97,108,117,101,78,111,100,101,74,83,59,32,125,32,99,97,116,99,104,32,40,101,41,32,123,32,116,104,114,111,119,32,39,78,111,32,115,101,99,117,114,101,32,114,97,110,100,111,109,32,110,117,109,98,101,114,32,103,101,110,101,114,97,116,111,114,32,102,111,117,110,100,39,59,32,125,32,125,32,125,32,125,0,98,117,102,95,108,101,110,32,60,61,32,83,73,90,69,95,77,65,88,0,114,97,110,100,111,109,98,121,116,101,115,47,114,97,110,100,111,109,98,121,116,101,115,46,99,0,114,97,110,100,111,109,98,121,116,101,115,0,49,46,48,46,49,49,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+30720);var tempDoublePtr=STATICTOP;STATICTOP+=16;Module["_bitshift64Ashr"]=_bitshift64Ashr;Module["_i64Subtract"]=_i64Subtract;Module["_i64Add"]=_i64Add;Module["_memset"]=_memset;Module["_bitshift64Lshr"]=_bitshift64Lshr;Module["_bitshift64Shl"]=_bitshift64Shl;function _abort(){Module["abort"]()}function ___assert_fail(condition,filename,line,func){ABORT=true;throw"Assertion failed: "+Pointer_stringify(condition)+", at: "+[filename?Pointer_stringify(filename):"unknown filename",line,func?Pointer_stringify(func):"unknown function"]+" at "+stackTrace()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);Module["_llvm_cttz_i32"]=_llvm_cttz_i32;Module["___udivmoddi4"]=___udivmoddi4;Module["___udivdi3"]=___udivdi3;Module["___muldsi3"]=___muldsi3;Module["___muldi3"]=___muldi3;function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 85:return totalMemory/PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}Module["_sbrk"]=_sbrk;Module["_memmove"]=_memmove;Module["___uremdi3"]=___uremdi3;DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity};Module.asmLibraryArg={"abort":abort,"assert":assert,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"_emscripten_asm_const_i":_emscripten_asm_const_i,"_sysconf":_sysconf,"_abort":_abort,"___setErrNo":___setErrNo,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_emscripten_asm_const_v":_emscripten_asm_const_v,"___assert_fail":___assert_fail,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"cttz_i8":cttz_i8};// EMSCRIPTEN_START_ASM
-var asm=(function(global,env,buffer) {
-"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.DYNAMICTOP_PTR|0;var l=env.tempDoublePtr|0;var m=env.ABORT|0;var n=env.cttz_i8|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;var D=0;var E=global.Math.floor;var F=global.Math.abs;var G=global.Math.sqrt;var H=global.Math.pow;var I=global.Math.cos;var J=global.Math.sin;var K=global.Math.tan;var L=global.Math.acos;var M=global.Math.asin;var N=global.Math.atan;var O=global.Math.atan2;var P=global.Math.exp;var Q=global.Math.log;var R=global.Math.ceil;var S=global.Math.imul;var T=global.Math.min;var U=global.Math.max;var V=global.Math.clz32;var W=env.abort;var X=env.assert;var Y=env.enlargeMemory;var Z=env.getTotalMemory;var _=env.abortOnCannotGrowMemory;var $=env._emscripten_asm_const_i;var aa=env._sysconf;var ba=env._abort;var ca=env.___setErrNo;var da=env._emscripten_memcpy_big;var ea=env._emscripten_asm_const_v;var fa=env.___assert_fail;var ga=0;
-// EMSCRIPTEN_START_FUNCS
-function ha(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=i;h=i=i+63&-64;i=i+720|0;e=0;do{k=b+(e<<3)|0;p=d[k+7>>0]|0;q=Pd(d[k+6>>0]|0|0,0,8)|0;j=D;o=Pd(d[k+5>>0]|0|0,0,16)|0;j=j|D;n=Pd(d[k+4>>0]|0|0,0,24)|0;j=j|D|(d[k+3>>0]|0);m=Pd(d[k+2>>0]|0|0,0,40)|0;j=j|D;l=Pd(d[k+1>>0]|0|0,0,48)|0;j=j|D;k=Pd(d[k>>0]|0|0,0,56)|0;f=h+80+(e<<3)|0;c[f>>2]=q|p|o|n|m|l|k;c[f+4>>2]=j|D;e=e+1|0}while((e|0)!=16);e=16;b=c[h+80>>2]|0;f=c[h+80+4>>2]|0;do{s=h+80+(e+-2<<3)|0;w=c[s>>2]|0;s=c[s+4>>2]|0;r=Rd(w|0,s|0,19)|0;k=D;j=Pd(w|0,s|0,45)|0;k=k|D;u=Rd(w|0,s|0,61)|0;v=D;t=Pd(w|0,s|0,3)|0;v=v|D;s=Rd(w|0,s|0,6)|0;k=v^D^k;v=h+80+(e+-7<<3)|0;w=c[v>>2]|0;v=c[v+4>>2]|0;o=h+80+(e+-15<<3)|0;y=b;b=c[o>>2]|0;x=f;f=c[o+4>>2]|0;o=Rd(b|0,f|0,1)|0;p=D;q=Pd(b|0,f|0,63)|0;p=p|D;l=Rd(b|0,f|0,8)|0;z=D;m=Pd(b|0,f|0,56)|0;z=z|D;n=Rd(b|0,f|0,7)|0;p=z^D^p;v=oe(y|0,x|0,w|0,v|0)|0;k=oe(v|0,D|0,(u|t)^s^(r|j)|0,k|0)|0;p=oe(k|0,D|0,(l|m)^n^(o|q)|0,p|0)|0;q=h+80+(e<<3)|0;c[q>>2]=p;c[q+4>>2]=D;e=e+1|0}while((e|0)!=80);e=h+16|0;b=a;f=e+64|0;do{c[e>>2]=c[b>>2];e=e+4|0;b=b+4|0}while((e|0)<(f|0));G=h+16+56|0;x=c[G>>2]|0;E=c[G+4>>2]|0;w=h+16+32|0;I=c[w>>2]|0;H=c[w+4>>2]|0;e=Rd(I|0,H|0,14)|0;z=D;F=Pd(I|0,H|0,50)|0;z=z|D;l=Rd(I|0,H|0,18)|0;A=D;L=Pd(I|0,H|0,46)|0;A=z^(A|D);z=Rd(I|0,H|0,41)|0;J=D;K=Pd(I|0,H|0,23)|0;J=A^(J|D);A=h+16+40|0;M=c[A>>2]|0;f=c[A+4>>2]|0;k=h+16+48|0;p=c[k>>2]|0;j=c[k+4>>2]|0;r=c[h+80>>2]|0;y=c[h+80+4>>2]|0;E=oe(x|0,E|0,-685199838,1116352408)|0;y=oe(E|0,D|0,r|0,y|0)|0;J=oe(y|0,D|0,(e|F)^(l|L)^(z|K)|0,J|0)|0;J=oe(J|0,D|0,(p^M)&I^p|0,(j^f)&H^j|0)|0;K=D;z=c[h+16>>2]|0;L=c[h+16+4>>2]|0;l=Rd(z|0,L|0,28)|0;F=D;e=Pd(z|0,L|0,36)|0;F=F|D;y=Rd(z|0,L|0,34)|0;r=D;E=Pd(z|0,L|0,30)|0;r=F^(r|D);F=Rd(z|0,L|0,39)|0;x=D;m=Pd(z|0,L|0,25)|0;C=h+16+8|0;o=c[C>>2]|0;q=c[C+4>>2]|0;B=h+16+16|0;b=c[B>>2]|0;s=c[B+4>>2]|0;x=oe((b|o)&z|b&o|0,(s|q)&L|s&q|0,(l|e)^(y|E)^(F|m)|0,r^(x|D)|0)|0;r=D;m=h+16+24|0;F=oe(c[m>>2]|0,c[m+4>>2]|0,J|0,K|0)|0;E=D;c[m>>2]=F;c[m+4>>2]=E;K=oe(x|0,r|0,J|0,K|0)|0;J=D;c[G>>2]=K;c[G+4>>2]=J;r=Rd(F|0,E|0,14)|0;x=D;y=Pd(F|0,E|0,50)|0;x=x|D;e=Rd(F|0,E|0,18)|0;l=D;u=Pd(F|0,E|0,46)|0;l=x^(l|D);x=Rd(F|0,E|0,41)|0;t=D;v=Pd(F|0,E|0,23)|0;t=l^(t|D);l=c[h+80+8>>2]|0;n=c[h+80+8+4>>2]|0;j=oe(p|0,j|0,602891725,1899447441)|0;t=oe(j|0,D|0,(r|y)^(e|u)^(x|v)|0,t|0)|0;n=oe(t|0,D|0,l|0,n|0)|0;H=oe(n|0,D|0,(M^I)&F^M|0,(f^H)&E^f|0)|0;I=D;n=Rd(K|0,J|0,28)|0;l=D;t=Pd(K|0,J|0,36)|0;l=l|D;v=Rd(K|0,J|0,34)|0;x=D;u=Pd(K|0,J|0,30)|0;x=l^(x|D);l=Rd(K|0,J|0,39)|0;e=D;y=Pd(K|0,J|0,25)|0;e=oe((o|z)&K|o&z|0,(q|L)&J|q&L|0,(n|t)^(v|u)^(l|y)|0,x^(e|D)|0)|0;x=D;s=oe(b|0,s|0,H|0,I|0)|0;b=D;c[B>>2]=s;c[B+4>>2]=b;I=oe(e|0,x|0,H|0,I|0)|0;H=D;c[k>>2]=I;c[k+4>>2]=H;x=Rd(s|0,b|0,14)|0;e=D;y=Pd(s|0,b|0,50)|0;e=e|D;l=Rd(s|0,b|0,18)|0;u=D;v=Pd(s|0,b|0,46)|0;u=e^(u|D);e=Rd(s|0,b|0,41)|0;t=D;n=Pd(s|0,b|0,23)|0;t=u^(t|D);u=c[w>>2]|0;r=c[w+4>>2]|0;j=c[h+80+16>>2]|0;p=c[h+80+16+4>>2]|0;f=oe(M|0,f|0,-330482897,-1245643825)|0;t=oe(f|0,D|0,(x|y)^(l|v)^(e|n)|0,t|0)|0;p=oe(t|0,D|0,j|0,p|0)|0;p=oe(p|0,D|0,(u^F)&s^u|0,(r^E)&b^r|0)|0;j=D;t=Rd(I|0,H|0,28)|0;n=D;e=Pd(I|0,H|0,36)|0;n=n|D;v=Rd(I|0,H|0,34)|0;l=D;y=Pd(I|0,H|0,30)|0;l=n^(l|D);n=Rd(I|0,H|0,39)|0;x=D;f=Pd(I|0,H|0,25)|0;x=oe((z|K)&I|z&K|0,(L|J)&H|L&J|0,(t|e)^(v|y)^(n|f)|0,l^(x|D)|0)|0;l=D;q=oe(o|0,q|0,p|0,j|0)|0;o=D;c[C>>2]=q;c[C+4>>2]=o;j=oe(x|0,l|0,p|0,j|0)|0;p=D;c[A>>2]=j;c[A+4>>2]=p;l=Rd(q|0,o|0,14)|0;x=D;f=Pd(q|0,o|0,50)|0;x=x|D;n=Rd(q|0,o|0,18)|0;y=D;v=Pd(q|0,o|0,46)|0;y=x^(y|D);x=Rd(q|0,o|0,41)|0;e=D;t=Pd(q|0,o|0,23)|0;e=y^(e|D);y=c[h+80+24>>2]|0;J=c[h+80+24+4>>2]|0;r=oe(u|0,r|0,-2121671748,-373957723)|0;e=oe(r|0,D|0,(l|f)^(n|v)^(x|t)|0,e|0)|0;J=oe(e|0,D|0,y|0,J|0)|0;J=oe(J|0,D|0,(F^s)&q^F|0,(E^b)&o^E|0)|0;y=D;e=Rd(j|0,p|0,28)|0;t=D;x=Pd(j|0,p|0,36)|0;t=t|D;v=Rd(j|0,p|0,34)|0;n=D;f=Pd(j|0,p|0,30)|0;n=t^(n|D);t=Rd(j|0,p|0,39)|0;l=D;r=Pd(j|0,p|0,25)|0;u=c[G>>2]|0;K=c[G+4>>2]|0;l=oe((u|I)&j|u&I|0,(K|H)&p|K&H|0,(e|x)^(v|f)^(t|r)|0,n^(l|D)|0)|0;n=D;L=oe(z|0,L|0,J|0,y|0)|0;z=D;c[h+16>>2]=L;c[h+16+4>>2]=z;y=oe(l|0,n|0,J|0,y|0)|0;J=D;c[w>>2]=y;c[w+4>>2]=J;n=Rd(L|0,z|0,14)|0;l=D;r=Pd(L|0,z|0,50)|0;l=l|D;t=Rd(L|0,z|0,18)|0;f=D;v=Pd(L|0,z|0,46)|0;f=l^(f|D);l=Rd(L|0,z|0,41)|0;x=D;e=Pd(L|0,z|0,23)|0;x=f^(x|D);f=c[h+80+32>>2]|0;H=c[h+80+32+4>>2]|0;E=oe(F|0,E|0,-213338824,961987163)|0;x=oe(E|0,D|0,(n|r)^(t|v)^(l|e)|0,x|0)|0;H=oe(x|0,D|0,f|0,H|0)|0;H=oe(H|0,D|0,(s^q)&L^s|0,(b^o)&z^b|0)|0;f=D;x=Rd(y|0,J|0,28)|0;e=D;l=Pd(y|0,J|0,36)|0;e=e|D;v=Rd(y|0,J|0,34)|0;t=D;r=Pd(y|0,J|0,30)|0;t=e^(t|D);e=Rd(y|0,J|0,39)|0;n=D;E=Pd(y|0,J|0,25)|0;F=c[k>>2]|0;I=c[k+4>>2]|0;n=oe((F|j)&y|F&j|0,(I|p)&J|I&p|0,(x|l)^(v|r)^(e|E)|0,t^(n|D)|0)|0;t=D;K=oe(u|0,K|0,H|0,f|0)|0;u=D;c[G>>2]=K;c[G+4>>2]=u;f=oe(n|0,t|0,H|0,f|0)|0;H=D;c[m>>2]=f;c[m+4>>2]=H;t=Rd(K|0,u|0,14)|0;n=D;E=Pd(K|0,u|0,50)|0;n=n|D;e=Rd(K|0,u|0,18)|0;r=D;v=Pd(K|0,u|0,46)|0;r=n^(r|D);n=Rd(K|0,u|0,41)|0;l=D;x=Pd(K|0,u|0,23)|0;l=r^(l|D);r=c[h+80+40>>2]|0;p=c[h+80+40+4>>2]|0;b=oe(s|0,b|0,-1241133031,1508970993)|0;l=oe(b|0,D|0,(t|E)^(e|v)^(n|x)|0,l|0)|0;p=oe(l|0,D|0,r|0,p|0)|0;p=oe(p|0,D|0,(q^L)&K^q|0,(o^z)&u^o|0)|0;r=D;l=Rd(f|0,H|0,28)|0;x=D;n=Pd(f|0,H|0,36)|0;x=x|D;v=Rd(f|0,H|0,34)|0;e=D;E=Pd(f|0,H|0,30)|0;e=x^(e|D);x=Rd(f|0,H|0,39)|0;t=D;b=Pd(f|0,H|0,25)|0;s=c[A>>2]|0;j=c[A+4>>2]|0;t=oe((s|y)&f|s&y|0,(j|J)&H|j&J|0,(l|n)^(v|E)^(x|b)|0,e^(t|D)|0)|0;e=D;I=oe(F|0,I|0,p|0,r|0)|0;F=D;c[k>>2]=I;c[k+4>>2]=F;r=oe(t|0,e|0,p|0,r|0)|0;p=D;c[B>>2]=r;c[B+4>>2]=p;e=Rd(I|0,F|0,14)|0;t=D;b=Pd(I|0,F|0,50)|0;t=t|D;x=Rd(I|0,F|0,18)|0;E=D;v=Pd(I|0,F|0,46)|0;E=t^(E|D);t=Rd(I|0,F|0,41)|0;n=D;l=Pd(I|0,F|0,23)|0;n=E^(n|D);E=c[h+80+48>>2]|0;J=c[h+80+48+4>>2]|0;o=oe(q|0,o|0,-1357295717,-1841331548)|0;n=oe(o|0,D|0,(e|b)^(x|v)^(t|l)|0,n|0)|0;J=oe(n|0,D|0,E|0,J|0)|0;J=oe(J|0,D|0,(L^K)&I^L|0,(z^u)&F^z|0)|0;E=D;n=Rd(r|0,p|0,28)|0;l=D;t=Pd(r|0,p|0,36)|0;l=l|D;v=Rd(r|0,p|0,34)|0;x=D;b=Pd(r|0,p|0,30)|0;x=l^(x|D);l=Rd(r|0,p|0,39)|0;e=D;o=Pd(r|0,p|0,25)|0;q=c[w>>2]|0;y=c[w+4>>2]|0;e=oe((q|f)&r|q&f|0,(y|H)&p|y&H|0,(n|t)^(v|b)^(l|o)|0,x^(e|D)|0)|0;x=D;j=oe(s|0,j|0,J|0,E|0)|0;s=D;c[A>>2]=j;c[A+4>>2]=s;E=oe(e|0,x|0,J|0,E|0)|0;J=D;c[C>>2]=E;c[C+4>>2]=J;x=Rd(j|0,s|0,14)|0;e=D;o=Pd(j|0,s|0,50)|0;e=e|D;l=Rd(j|0,s|0,18)|0;b=D;v=Pd(j|0,s|0,46)|0;b=e^(b|D);e=Rd(j|0,s|0,41)|0;t=D;n=Pd(j|0,s|0,23)|0;t=b^(t|D);b=c[h+80+56>>2]|0;H=c[h+80+56+4>>2]|0;z=oe(L|0,z|0,-630357736,-1424204075)|0;t=oe(z|0,D|0,(x|o)^(l|v)^(e|n)|0,t|0)|0;H=oe(t|0,D|0,b|0,H|0)|0;H=oe(H|0,D|0,(K^I)&j^K|0,(u^F)&s^u|0)|0;b=D;t=Rd(E|0,J|0,28)|0;n=D;e=Pd(E|0,J|0,36)|0;n=n|D;v=Rd(E|0,J|0,34)|0;l=D;o=Pd(E|0,J|0,30)|0;l=n^(l|D);n=Rd(E|0,J|0,39)|0;x=D;z=Pd(E|0,J|0,25)|0;L=c[m>>2]|0;f=c[m+4>>2]|0;x=oe((L|r)&E|L&r|0,(f|p)&J|f&p|0,(t|e)^(v|o)^(n|z)|0,l^(x|D)|0)|0;l=D;y=oe(q|0,y|0,H|0,b|0)|0;q=D;c[w>>2]=y;c[w+4>>2]=q;b=oe(x|0,l|0,H|0,b|0)|0;H=D;c[h+16>>2]=b;c[h+16+4>>2]=H;l=Rd(y|0,q|0,14)|0;x=D;z=Pd(y|0,q|0,50)|0;x=x|D;n=Rd(y|0,q|0,18)|0;o=D;v=Pd(y|0,q|0,46)|0;o=x^(o|D);x=Rd(y|0,q|0,41)|0;e=D;t=Pd(y|0,q|0,23)|0;e=o^(e|D);o=c[h+80+64>>2]|0;p=c[h+80+64+4>>2]|0;u=oe(K|0,u|0,-1560083902,-670586216)|0;e=oe(u|0,D|0,(l|z)^(n|v)^(x|t)|0,e|0)|0;p=oe(e|0,D|0,o|0,p|0)|0;p=oe(p|0,D|0,(I^j)&y^I|0,(F^s)&q^F|0)|0;o=D;e=Rd(b|0,H|0,28)|0;t=D;x=Pd(b|0,H|0,36)|0;t=t|D;v=Rd(b|0,H|0,34)|0;n=D;z=Pd(b|0,H|0,30)|0;n=t^(n|D);t=Rd(b|0,H|0,39)|0;l=D;u=Pd(b|0,H|0,25)|0;K=c[B>>2]|0;r=c[B+4>>2]|0;l=oe((K|E)&b|K&E|0,(r|J)&H|r&J|0,(e|x)^(v|z)^(t|u)|0,n^(l|D)|0)|0;n=D;f=oe(L|0,f|0,p|0,o|0)|0;L=D;c[m>>2]=f;c[m+4>>2]=L;o=oe(l|0,n|0,p|0,o|0)|0;p=D;c[G>>2]=o;c[G+4>>2]=p;n=Rd(f|0,L|0,14)|0;l=D;u=Pd(f|0,L|0,50)|0;l=l|D;t=Rd(f|0,L|0,18)|0;z=D;v=Pd(f|0,L|0,46)|0;z=l^(z|D);l=Rd(f|0,L|0,41)|0;x=D;e=Pd(f|0,L|0,23)|0;x=z^(x|D);z=c[h+80+72>>2]|0;J=c[h+80+72+4>>2]|0;F=oe(I|0,F|0,1164996542,310598401)|0;x=oe(F|0,D|0,(n|u)^(t|v)^(l|e)|0,x|0)|0;J=oe(x|0,D|0,z|0,J|0)|0;J=oe(J|0,D|0,(j^y)&f^j|0,(s^q)&L^s|0)|0;z=D;x=Rd(o|0,p|0,28)|0;e=D;l=Pd(o|0,p|0,36)|0;e=e|D;v=Rd(o|0,p|0,34)|0;t=D;u=Pd(o|0,p|0,30)|0;t=e^(t|D);e=Rd(o|0,p|0,39)|0;n=D;F=Pd(o|0,p|0,25)|0;I=c[C>>2]|0;E=c[C+4>>2]|0;n=oe((I|b)&o|I&b|0,(E|H)&p|E&H|0,(x|l)^(v|u)^(e|F)|0,t^(n|D)|0)|0;t=D;r=oe(K|0,r|0,J|0,z|0)|0;K=D;c[B>>2]=r;c[B+4>>2]=K;z=oe(n|0,t|0,J|0,z|0)|0;J=D;c[k>>2]=z;c[k+4>>2]=J;t=Rd(r|0,K|0,14)|0;n=D;F=Pd(r|0,K|0,50)|0;n=n|D;e=Rd(r|0,K|0,18)|0;u=D;v=Pd(r|0,K|0,46)|0;u=n^(u|D);n=Rd(r|0,K|0,41)|0;l=D;x=Pd(r|0,K|0,23)|0;l=u^(l|D);u=c[h+80+80>>2]|0;H=c[h+80+80+4>>2]|0;s=oe(j|0,s|0,1323610764,607225278)|0;l=oe(s|0,D|0,(t|F)^(e|v)^(n|x)|0,l|0)|0;H=oe(l|0,D|0,u|0,H|0)|0;H=oe(H|0,D|0,(y^f)&r^y|0,(q^L)&K^q|0)|0;u=D;l=Rd(z|0,J|0,28)|0;x=D;n=Pd(z|0,J|0,36)|0;x=x|D;v=Rd(z|0,J|0,34)|0;e=D;F=Pd(z|0,J|0,30)|0;e=x^(e|D);x=Rd(z|0,J|0,39)|0;t=D;s=Pd(z|0,J|0,25)|0;j=c[h+16>>2]|0;b=c[h+16+4>>2]|0;t=oe((j|o)&z|j&o|0,(b|p)&J|b&p|0,(l|n)^(v|F)^(x|s)|0,e^(t|D)|0)|0;e=D;E=oe(I|0,E|0,H|0,u|0)|0;I=D;c[C>>2]=E;c[C+4>>2]=I;u=oe(t|0,e|0,H|0,u|0)|0;H=D;c[A>>2]=u;c[A+4>>2]=H;e=Rd(E|0,I|0,14)|0;t=D;s=Pd(E|0,I|0,50)|0;t=t|D;x=Rd(E|0,I|0,18)|0;F=D;v=Pd(E|0,I|0,46)|0;F=t^(F|D);t=Rd(E|0,I|0,41)|0;n=D;l=Pd(E|0,I|0,23)|0;n=F^(n|D);F=c[h+80+88>>2]|0;p=c[h+80+88+4>>2]|0;q=oe(y|0,q|0,-704662302,1426881987)|0;n=oe(q|0,D|0,(e|s)^(x|v)^(t|l)|0,n|0)|0;p=oe(n|0,D|0,F|0,p|0)|0;p=oe(p|0,D|0,(f^r)&E^f|0,(L^K)&I^L|0)|0;F=D;n=Rd(u|0,H|0,28)|0;l=D;t=Pd(u|0,H|0,36)|0;l=l|D;v=Rd(u|0,H|0,34)|0;x=D;s=Pd(u|0,H|0,30)|0;x=l^(x|D);l=Rd(u|0,H|0,39)|0;e=D;q=Pd(u|0,H|0,25)|0;y=c[G>>2]|0;o=c[G+4>>2]|0;e=oe((y|z)&u|y&z|0,(o|J)&H|o&J|0,(n|t)^(v|s)^(l|q)|0,x^(e|D)|0)|0;x=D;b=oe(j|0,b|0,p|0,F|0)|0;j=D;c[h+16>>2]=b;c[h+16+4>>2]=j;F=oe(e|0,x|0,p|0,F|0)|0;p=D;c[w>>2]=F;c[w+4>>2]=p;x=Rd(b|0,j|0,14)|0;e=D;q=Pd(b|0,j|0,50)|0;e=e|D;l=Rd(b|0,j|0,18)|0;s=D;v=Pd(b|0,j|0,46)|0;s=e^(s|D);e=Rd(b|0,j|0,41)|0;t=D;n=Pd(b|0,j|0,23)|0;t=s^(t|D);s=c[h+80+96>>2]|0;J=c[h+80+96+4>>2]|0;L=oe(f|0,L|0,-226784913,1925078388)|0;t=oe(L|0,D|0,(x|q)^(l|v)^(e|n)|0,t|0)|0;J=oe(t|0,D|0,s|0,J|0)|0;J=oe(J|0,D|0,(r^E)&b^r|0,(K^I)&j^K|0)|0;s=D;t=Rd(F|0,p|0,28)|0;n=D;e=Pd(F|0,p|0,36)|0;n=n|D;v=Rd(F|0,p|0,34)|0;l=D;q=Pd(F|0,p|0,30)|0;l=n^(l|D);n=Rd(F|0,p|0,39)|0;x=D;L=Pd(F|0,p|0,25)|0;f=c[k>>2]|0;z=c[k+4>>2]|0;x=oe((f|u)&F|f&u|0,(z|H)&p|z&H|0,(t|e)^(v|q)^(n|L)|0,l^(x|D)|0)|0;l=D;o=oe(y|0,o|0,J|0,s|0)|0;y=D;c[G>>2]=o;c[G+4>>2]=y;s=oe(x|0,l|0,J|0,s|0)|0;J=D;c[m>>2]=s;c[m+4>>2]=J;l=Rd(o|0,y|0,14)|0;x=D;L=Pd(o|0,y|0,50)|0;x=x|D;n=Rd(o|0,y|0,18)|0;q=D;v=Pd(o|0,y|0,46)|0;q=x^(q|D);x=Rd(o|0,y|0,41)|0;e=D;t=Pd(o|0,y|0,23)|0;e=q^(e|D);q=c[h+80+104>>2]|0;H=c[h+80+104+4>>2]|0;K=oe(r|0,K|0,991336113,-2132889090)|0;e=oe(K|0,D|0,(l|L)^(n|v)^(x|t)|0,e|0)|0;H=oe(e|0,D|0,q|0,H|0)|0;H=oe(H|0,D|0,(E^b)&o^E|0,(I^j)&y^I|0)|0;q=D;e=Rd(s|0,J|0,28)|0;t=D;x=Pd(s|0,J|0,36)|0;t=t|D;v=Rd(s|0,J|0,34)|0;n=D;L=Pd(s|0,J|0,30)|0;n=t^(n|D);t=Rd(s|0,J|0,39)|0;l=D;K=Pd(s|0,J|0,25)|0;r=c[A>>2]|0;u=c[A+4>>2]|0;l=oe((r|F)&s|r&F|0,(u|p)&J|u&p|0,(e|x)^(v|L)^(t|K)|0,n^(l|D)|0)|0;n=D;z=oe(f|0,z|0,H|0,q|0)|0;f=D;c[k>>2]=z;c[k+4>>2]=f;q=oe(l|0,n|0,H|0,q|0)|0;H=D;c[B>>2]=q;c[B+4>>2]=H;n=Rd(z|0,f|0,14)|0;l=D;K=Pd(z|0,f|0,50)|0;l=l|D;t=Rd(z|0,f|0,18)|0;L=D;v=Pd(z|0,f|0,46)|0;L=l^(L|D);l=Rd(z|0,f|0,41)|0;x=D;e=Pd(z|0,f|0,23)|0;x=L^(x|D);L=c[h+80+112>>2]|0;p=c[h+80+112+4>>2]|0;I=oe(E|0,I|0,633803317,-1680079193)|0;x=oe(I|0,D|0,(n|K)^(t|v)^(l|e)|0,x|0)|0;p=oe(x|0,D|0,L|0,p|0)|0;p=oe(p|0,D|0,(b^o)&z^b|0,(j^y)&f^j|0)|0;L=D;x=Rd(q|0,H|0,28)|0;e=D;l=Pd(q|0,H|0,36)|0;e=e|D;v=Rd(q|0,H|0,34)|0;t=D;K=Pd(q|0,H|0,30)|0;t=e^(t|D);e=Rd(q|0,H|0,39)|0;n=D;I=Pd(q|0,H|0,25)|0;E=c[w>>2]|0;F=c[w+4>>2]|0;n=oe((E|s)&q|E&s|0,(F|J)&H|F&J|0,(x|l)^(v|K)^(e|I)|0,t^(n|D)|0)|0;t=D;u=oe(r|0,u|0,p|0,L|0)|0;r=D;c[A>>2]=u;c[A+4>>2]=r;L=oe(n|0,t|0,p|0,L|0)|0;p=D;c[C>>2]=L;c[C+4>>2]=p;t=Rd(u|0,r|0,14)|0;n=D;I=Pd(u|0,r|0,50)|0;n=n|D;e=Rd(u|0,r|0,18)|0;K=D;v=Pd(u|0,r|0,46)|0;K=n^(K|D);n=Rd(u|0,r|0,41)|0;l=D;x=Pd(u|0,r|0,23)|0;l=K^(l|D);K=c[h+80+120>>2]|0;J=c[h+80+120+4>>2]|0;j=oe(b|0,j|0,-815192428,-1046744716)|0;l=oe(j|0,D|0,(t|I)^(e|v)^(n|x)|0,l|0)|0;J=oe(l|0,D|0,K|0,J|0)|0;J=oe(J|0,D|0,(o^z)&u^o|0,(y^f)&r^y|0)|0;K=D;l=Rd(L|0,p|0,28)|0;x=D;n=Pd(L|0,p|0,36)|0;x=x|D;v=Rd(L|0,p|0,34)|0;e=D;I=Pd(L|0,p|0,30)|0;e=x^(e|D);x=Rd(L|0,p|0,39)|0;t=D;j=Pd(L|0,p|0,25)|0;b=c[m>>2]|0;s=c[m+4>>2]|0;t=oe((b|q)&L|b&q|0,(s|H)&p|s&H|0,(l|n)^(v|I)^(x|j)|0,e^(t|D)|0)|0;e=D;F=oe(E|0,F|0,J|0,K|0)|0;E=D;c[w>>2]=F;c[w+4>>2]=E;K=oe(t|0,e|0,J|0,K|0)|0;J=D;c[h+16>>2]=K;c[h+16+4>>2]=J;e=Rd(F|0,E|0,14)|0;t=D;j=Pd(F|0,E|0,50)|0;t=t|D;x=Rd(F|0,E|0,18)|0;I=D;v=Pd(F|0,E|0,46)|0;I=t^(I|D);t=Rd(F|0,E|0,41)|0;n=D;l=Pd(F|0,E|0,23)|0;n=I^(n|D);I=c[h+80+128>>2]|0;H=c[h+80+128+4>>2]|0;y=oe(o|0,y|0,-1628353838,-459576895)|0;n=oe(y|0,D|0,(e|j)^(x|v)^(t|l)|0,n|0)|0;H=oe(n|0,D|0,I|0,H|0)|0;H=oe(H|0,D|0,(z^u)&F^z|0,(f^r)&E^f|0)|0;I=D;n=Rd(K|0,J|0,28)|0;l=D;t=Pd(K|0,J|0,36)|0;l=l|D;v=Rd(K|0,J|0,34)|0;x=D;j=Pd(K|0,J|0,30)|0;x=l^(x|D);l=Rd(K|0,J|0,39)|0;e=D;y=Pd(K|0,J|0,25)|0;o=c[B>>2]|0;q=c[B+4>>2]|0;e=oe((o|L)&K|o&L|0,(q|p)&J|q&p|0,(n|t)^(v|j)^(l|y)|0,x^(e|D)|0)|0;x=D;s=oe(b|0,s|0,H|0,I|0)|0;b=D;c[m>>2]=s;c[m+4>>2]=b;I=oe(e|0,x|0,H|0,I|0)|0;H=D;c[G>>2]=I;c[G+4>>2]=H;x=Rd(s|0,b|0,14)|0;e=D;y=Pd(s|0,b|0,50)|0;e=e|D;l=Rd(s|0,b|0,18)|0;j=D;v=Pd(s|0,b|0,46)|0;j=e^(j|D);e=Rd(s|0,b|0,41)|0;t=D;n=Pd(s|0,b|0,23)|0;t=j^(t|D);j=c[h+80+136>>2]|0;p=c[h+80+136+4>>2]|0;f=oe(z|0,f|0,944711139,-272742522)|0;t=oe(f|0,D|0,(x|y)^(l|v)^(e|n)|0,t|0)|0;p=oe(t|0,D|0,j|0,p|0)|0;p=oe(p|0,D|0,(u^F)&s^u|0,(r^E)&b^r|0)|0;j=D;t=Rd(I|0,H|0,28)|0;n=D;e=Pd(I|0,H|0,36)|0;n=n|D;v=Rd(I|0,H|0,34)|0;l=D;y=Pd(I|0,H|0,30)|0;l=n^(l|D);n=Rd(I|0,H|0,39)|0;x=D;f=Pd(I|0,H|0,25)|0;z=c[C>>2]|0;L=c[C+4>>2]|0;x=oe((z|K)&I|z&K|0,(L|J)&H|L&J|0,(t|e)^(v|y)^(n|f)|0,l^(x|D)|0)|0;l=D;q=oe(o|0,q|0,p|0,j|0)|0;o=D;c[B>>2]=q;c[B+4>>2]=o;j=oe(x|0,l|0,p|0,j|0)|0;p=D;c[k>>2]=j;c[k+4>>2]=p;l=Rd(q|0,o|0,14)|0;x=D;f=Pd(q|0,o|0,50)|0;x=x|D;n=Rd(q|0,o|0,18)|0;y=D;v=Pd(q|0,o|0,46)|0;y=x^(y|D);x=Rd(q|0,o|0,41)|0;e=D;t=Pd(q|0,o|0,23)|0;e=y^(e|D);y=c[h+80+144>>2]|0;J=c[h+80+144+4>>2]|0;r=oe(u|0,r|0,-1953704523,264347078)|0;e=oe(r|0,D|0,(l|f)^(n|v)^(x|t)|0,e|0)|0;J=oe(e|0,D|0,y|0,J|0)|0;J=oe(J|0,D|0,(F^s)&q^F|0,(E^b)&o^E|0)|0;y=D;e=Rd(j|0,p|0,28)|0;t=D;x=Pd(j|0,p|0,36)|0;t=t|D;v=Rd(j|0,p|0,34)|0;n=D;f=Pd(j|0,p|0,30)|0;n=t^(n|D);t=Rd(j|0,p|0,39)|0;l=D;r=Pd(j|0,p|0,25)|0;u=c[h+16>>2]|0;K=c[h+16+4>>2]|0;l=oe((u|I)&j|u&I|0,(K|H)&p|K&H|0,(e|x)^(v|f)^(t|r)|0,n^(l|D)|0)|0;n=D;L=oe(z|0,L|0,J|0,y|0)|0;z=D;c[C>>2]=L;c[C+4>>2]=z;y=oe(l|0,n|0,J|0,y|0)|0;J=D;c[A>>2]=y;c[A+4>>2]=J;n=Rd(L|0,z|0,14)|0;l=D;r=Pd(L|0,z|0,50)|0;l=l|D;t=Rd(L|0,z|0,18)|0;f=D;v=Pd(L|0,z|0,46)|0;f=l^(f|D);l=Rd(L|0,z|0,41)|0;x=D;e=Pd(L|0,z|0,23)|0;x=f^(x|D);f=c[h+80+152>>2]|0;H=c[h+80+152+4>>2]|0;E=oe(F|0,E|0,2007800933,604807628)|0;x=oe(E|0,D|0,(n|r)^(t|v)^(l|e)|0,x|0)|0;H=oe(x|0,D|0,f|0,H|0)|0;H=oe(H|0,D|0,(s^q)&L^s|0,(b^o)&z^b|0)|0;f=D;x=Rd(y|0,J|0,28)|0;e=D;l=Pd(y|0,J|0,36)|0;e=e|D;v=Rd(y|0,J|0,34)|0;t=D;r=Pd(y|0,J|0,30)|0;t=e^(t|D);e=Rd(y|0,J|0,39)|0;n=D;E=Pd(y|0,J|0,25)|0;F=c[G>>2]|0;I=c[G+4>>2]|0;n=oe((F|j)&y|F&j|0,(I|p)&J|I&p|0,(x|l)^(v|r)^(e|E)|0,t^(n|D)|0)|0;t=D;K=oe(u|0,K|0,H|0,f|0)|0;u=D;c[h+16>>2]=K;c[h+16+4>>2]=u;f=oe(n|0,t|0,H|0,f|0)|0;H=D;c[w>>2]=f;c[w+4>>2]=H;t=Rd(K|0,u|0,14)|0;n=D;E=Pd(K|0,u|0,50)|0;n=n|D;e=Rd(K|0,u|0,18)|0;r=D;v=Pd(K|0,u|0,46)|0;r=n^(r|D);n=Rd(K|0,u|0,41)|0;l=D;x=Pd(K|0,u|0,23)|0;l=r^(l|D);r=c[h+80+160>>2]|0;p=c[h+80+160+4>>2]|0;b=oe(s|0,b|0,1495990901,770255983)|0;l=oe(b|0,D|0,(t|E)^(e|v)^(n|x)|0,l|0)|0;p=oe(l|0,D|0,r|0,p|0)|0;p=oe(p|0,D|0,(q^L)&K^q|0,(o^z)&u^o|0)|0;r=D;l=Rd(f|0,H|0,28)|0;x=D;n=Pd(f|0,H|0,36)|0;x=x|D;v=Rd(f|0,H|0,34)|0;e=D;E=Pd(f|0,H|0,30)|0;e=x^(e|D);x=Rd(f|0,H|0,39)|0;t=D;b=Pd(f|0,H|0,25)|0;s=c[k>>2]|0;j=c[k+4>>2]|0;t=oe((s|y)&f|s&y|0,(j|J)&H|j&J|0,(l|n)^(v|E)^(x|b)|0,e^(t|D)|0)|0;e=D;I=oe(F|0,I|0,p|0,r|0)|0;F=D;c[G>>2]=I;c[G+4>>2]=F;r=oe(t|0,e|0,p|0,r|0)|0;p=D;c[m>>2]=r;c[m+4>>2]=p;e=Rd(I|0,F|0,14)|0;t=D;b=Pd(I|0,F|0,50)|0;t=t|D;x=Rd(I|0,F|0,18)|0;E=D;v=Pd(I|0,F|0,46)|0;E=t^(E|D);t=Rd(I|0,F|0,41)|0;n=D;l=Pd(I|0,F|0,23)|0;n=E^(n|D);E=c[h+80+168>>2]|0;J=c[h+80+168+4>>2]|0;o=oe(q|0,o|0,1856431235,1249150122)|0;n=oe(o|0,D|0,(e|b)^(x|v)^(t|l)|0,n|0)|0;J=oe(n|0,D|0,E|0,J|0)|0;J=oe(J|0,D|0,(L^K)&I^L|0,(z^u)&F^z|0)|0;E=D;n=Rd(r|0,p|0,28)|0;l=D;t=Pd(r|0,p|0,36)|0;l=l|D;v=Rd(r|0,p|0,34)|0;x=D;b=Pd(r|0,p|0,30)|0;x=l^(x|D);l=Rd(r|0,p|0,39)|0;e=D;o=Pd(r|0,p|0,25)|0;q=c[A>>2]|0;y=c[A+4>>2]|0;e=oe((q|f)&r|q&f|0,(y|H)&p|y&H|0,(n|t)^(v|b)^(l|o)|0,x^(e|D)|0)|0;x=D;j=oe(s|0,j|0,J|0,E|0)|0;s=D;c[k>>2]=j;c[k+4>>2]=s;E=oe(e|0,x|0,J|0,E|0)|0;J=D;c[B>>2]=E;c[B+4>>2]=J;x=Rd(j|0,s|0,14)|0;e=D;o=Pd(j|0,s|0,50)|0;e=e|D;l=Rd(j|0,s|0,18)|0;b=D;v=Pd(j|0,s|0,46)|0;b=e^(b|D);e=Rd(j|0,s|0,41)|0;t=D;n=Pd(j|0,s|0,23)|0;t=b^(t|D);b=c[h+80+176>>2]|0;H=c[h+80+176+4>>2]|0;z=oe(L|0,z|0,-1119749164,1555081692)|0;t=oe(z|0,D|0,(x|o)^(l|v)^(e|n)|0,t|0)|0;H=oe(t|0,D|0,b|0,H|0)|0;H=oe(H|0,D|0,(K^I)&j^K|0,(u^F)&s^u|0)|0;b=D;t=Rd(E|0,J|0,28)|0;n=D;e=Pd(E|0,J|0,36)|0;n=n|D;v=Rd(E|0,J|0,34)|0;l=D;o=Pd(E|0,J|0,30)|0;l=n^(l|D);n=Rd(E|0,J|0,39)|0;x=D;z=Pd(E|0,J|0,25)|0;L=c[w>>2]|0;f=c[w+4>>2]|0;x=oe((L|r)&E|L&r|0,(f|p)&J|f&p|0,(t|e)^(v|o)^(n|z)|0,l^(x|D)|0)|0;l=D;y=oe(q|0,y|0,H|0,b|0)|0;q=D;c[A>>2]=y;c[A+4>>2]=q;b=oe(x|0,l|0,H|0,b|0)|0;H=D;c[C>>2]=b;c[C+4>>2]=H;l=Rd(y|0,q|0,14)|0;x=D;z=Pd(y|0,q|0,50)|0;x=x|D;n=Rd(y|0,q|0,18)|0;o=D;v=Pd(y|0,q|0,46)|0;o=x^(o|D);x=Rd(y|0,q|0,41)|0;e=D;t=Pd(y|0,q|0,23)|0;e=o^(e|D);o=c[h+80+184>>2]|0;p=c[h+80+184+4>>2]|0;u=oe(K|0,u|0,-2096016459,1996064986)|0;e=oe(u|0,D|0,(l|z)^(n|v)^(x|t)|0,e|0)|0;p=oe(e|0,D|0,o|0,p|0)|0;p=oe(p|0,D|0,(I^j)&y^I|0,(F^s)&q^F|0)|0;o=D;e=Rd(b|0,H|0,28)|0;t=D;x=Pd(b|0,H|0,36)|0;t=t|D;v=Rd(b|0,H|0,34)|0;n=D;z=Pd(b|0,H|0,30)|0;n=t^(n|D);t=Rd(b|0,H|0,39)|0;l=D;u=Pd(b|0,H|0,25)|0;K=c[m>>2]|0;r=c[m+4>>2]|0;l=oe((K|E)&b|K&E|0,(r|J)&H|r&J|0,(e|x)^(v|z)^(t|u)|0,n^(l|D)|0)|0;n=D;f=oe(L|0,f|0,p|0,o|0)|0;L=D;c[w>>2]=f;c[w+4>>2]=L;o=oe(l|0,n|0,p|0,o|0)|0;p=D;c[h+16>>2]=o;c[h+16+4>>2]=p;n=Rd(f|0,L|0,14)|0;l=D;u=Pd(f|0,L|0,50)|0;l=l|D;t=Rd(f|0,L|0,18)|0;z=D;v=Pd(f|0,L|0,46)|0;z=l^(z|D);l=Rd(f|0,L|0,41)|0;x=D;e=Pd(f|0,L|0,23)|0;x=z^(x|D);z=c[h+80+192>>2]|0;J=c[h+80+192+4>>2]|0;F=oe(I|0,F|0,-295247957,-1740746414)|0;x=oe(F|0,D|0,(n|u)^(t|v)^(l|e)|0,x|0)|0;J=oe(x|0,D|0,z|0,J|0)|0;J=oe(J|0,D|0,(j^y)&f^j|0,(s^q)&L^s|0)|0;z=D;x=Rd(o|0,p|0,28)|0;e=D;l=Pd(o|0,p|0,36)|0;e=e|D;v=Rd(o|0,p|0,34)|0;t=D;u=Pd(o|0,p|0,30)|0;t=e^(t|D);e=Rd(o|0,p|0,39)|0;n=D;F=Pd(o|0,p|0,25)|0;I=c[B>>2]|0;E=c[B+4>>2]|0;n=oe((I|b)&o|I&b|0,(E|H)&p|E&H|0,(x|l)^(v|u)^(e|F)|0,t^(n|D)|0)|0;t=D;r=oe(K|0,r|0,J|0,z|0)|0;K=D;c[m>>2]=r;c[m+4>>2]=K;z=oe(n|0,t|0,J|0,z|0)|0;J=D;c[G>>2]=z;c[G+4>>2]=J;t=Rd(r|0,K|0,14)|0;n=D;F=Pd(r|0,K|0,50)|0;n=n|D;e=Rd(r|0,K|0,18)|0;u=D;v=Pd(r|0,K|0,46)|0;u=n^(u|D);n=Rd(r|0,K|0,41)|0;l=D;x=Pd(r|0,K|0,23)|0;l=u^(l|D);u=c[h+80+200>>2]|0;H=c[h+80+200+4>>2]|0;s=oe(j|0,s|0,766784016,-1473132947)|0;l=oe(s|0,D|0,(t|F)^(e|v)^(n|x)|0,l|0)|0;H=oe(l|0,D|0,u|0,H|0)|0;H=oe(H|0,D|0,(y^f)&r^y|0,(q^L)&K^q|0)|0;u=D;l=Rd(z|0,J|0,28)|0;x=D;n=Pd(z|0,J|0,36)|0;x=x|D;v=Rd(z|0,J|0,34)|0;e=D;F=Pd(z|0,J|0,30)|0;e=x^(e|D);x=Rd(z|0,J|0,39)|0;t=D;s=Pd(z|0,J|0,25)|0;j=c[C>>2]|0;b=c[C+4>>2]|0;t=oe((j|o)&z|j&o|0,(b|p)&J|b&p|0,(l|n)^(v|F)^(x|s)|0,e^(t|D)|0)|0;e=D;E=oe(I|0,E|0,H|0,u|0)|0;I=D;c[B>>2]=E;c[B+4>>2]=I;u=oe(t|0,e|0,H|0,u|0)|0;H=D;c[k>>2]=u;c[k+4>>2]=H;e=Rd(E|0,I|0,14)|0;t=D;s=Pd(E|0,I|0,50)|0;t=t|D;x=Rd(E|0,I|0,18)|0;F=D;v=Pd(E|0,I|0,46)|0;F=t^(F|D);t=Rd(E|0,I|0,41)|0;n=D;l=Pd(E|0,I|0,23)|0;n=F^(n|D);F=c[h+80+208>>2]|0;p=c[h+80+208+4>>2]|0;q=oe(y|0,q|0,-1728372417,-1341970488)|0;n=oe(q|0,D|0,(e|s)^(x|v)^(t|l)|0,n|0)|0;p=oe(n|0,D|0,F|0,p|0)|0;p=oe(p|0,D|0,(f^r)&E^f|0,(L^K)&I^L|0)|0;F=D;n=Rd(u|0,H|0,28)|0;l=D;t=Pd(u|0,H|0,36)|0;l=l|D;v=Rd(u|0,H|0,34)|0;x=D;s=Pd(u|0,H|0,30)|0;x=l^(x|D);l=Rd(u|0,H|0,39)|0;e=D;q=Pd(u|0,H|0,25)|0;y=c[h+16>>2]|0;o=c[h+16+4>>2]|0;e=oe((y|z)&u|y&z|0,(o|J)&H|o&J|0,(n|t)^(v|s)^(l|q)|0,x^(e|D)|0)|0;x=D;b=oe(j|0,b|0,p|0,F|0)|0;j=D;c[C>>2]=b;c[C+4>>2]=j;F=oe(e|0,x|0,p|0,F|0)|0;p=D;c[A>>2]=F;c[A+4>>2]=p;x=Rd(b|0,j|0,14)|0;e=D;q=Pd(b|0,j|0,50)|0;e=e|D;l=Rd(b|0,j|0,18)|0;s=D;v=Pd(b|0,j|0,46)|0;s=e^(s|D);e=Rd(b|0,j|0,41)|0;t=D;n=Pd(b|0,j|0,23)|0;t=s^(t|D);s=c[h+80+216>>2]|0;J=c[h+80+216+4>>2]|0;L=oe(f|0,L|0,-1091629340,-1084653625)|0;t=oe(L|0,D|0,(x|q)^(l|v)^(e|n)|0,t|0)|0;J=oe(t|0,D|0,s|0,J|0)|0;J=oe(J|0,D|0,(r^E)&b^r|0,(K^I)&j^K|0)|0;s=D;t=Rd(F|0,p|0,28)|0;n=D;e=Pd(F|0,p|0,36)|0;n=n|D;v=Rd(F|0,p|0,34)|0;l=D;q=Pd(F|0,p|0,30)|0;l=n^(l|D);n=Rd(F|0,p|0,39)|0;x=D;L=Pd(F|0,p|0,25)|0;f=c[G>>2]|0;z=c[G+4>>2]|0;x=oe((f|u)&F|f&u|0,(z|H)&p|z&H|0,(t|e)^(v|q)^(n|L)|0,l^(x|D)|0)|0;l=D;o=oe(y|0,o|0,J|0,s|0)|0;y=D;c[h+16>>2]=o;c[h+16+4>>2]=y;s=oe(x|0,l|0,J|0,s|0)|0;J=D;c[w>>2]=s;c[w+4>>2]=J;l=Rd(o|0,y|0,14)|0;x=D;L=Pd(o|0,y|0,50)|0;x=x|D;n=Rd(o|0,y|0,18)|0;q=D;v=Pd(o|0,y|0,46)|0;q=x^(q|D);x=Rd(o|0,y|0,41)|0;e=D;t=Pd(o|0,y|0,23)|0;e=q^(e|D);q=c[h+80+224>>2]|0;H=c[h+80+224+4>>2]|0;K=oe(r|0,K|0,1034457026,-958395405)|0;e=oe(K|0,D|0,(l|L)^(n|v)^(x|t)|0,e|0)|0;H=oe(e|0,D|0,q|0,H|0)|0;H=oe(H|0,D|0,(E^b)&o^E|0,(I^j)&y^I|0)|0;q=D;e=Rd(s|0,J|0,28)|0;t=D;x=Pd(s|0,J|0,36)|0;t=t|D;v=Rd(s|0,J|0,34)|0;n=D;L=Pd(s|0,J|0,30)|0;n=t^(n|D);t=Rd(s|0,J|0,39)|0;l=D;K=Pd(s|0,J|0,25)|0;r=c[k>>2]|0;u=c[k+4>>2]|0;l=oe((r|F)&s|r&F|0,(u|p)&J|u&p|0,(e|x)^(v|L)^(t|K)|0,n^(l|D)|0)|0;n=D;z=oe(f|0,z|0,H|0,q|0)|0;f=D;c[G>>2]=z;c[G+4>>2]=f;q=oe(l|0,n|0,H|0,q|0)|0;H=D;c[m>>2]=q;c[m+4>>2]=H;n=Rd(z|0,f|0,14)|0;l=D;K=Pd(z|0,f|0,50)|0;l=l|D;t=Rd(z|0,f|0,18)|0;L=D;v=Pd(z|0,f|0,46)|0;L=l^(L|D);l=Rd(z|0,f|0,41)|0;x=D;e=Pd(z|0,f|0,23)|0;x=L^(x|D);L=c[h+80+232>>2]|0;p=c[h+80+232+4>>2]|0;I=oe(E|0,I|0,-1828018395,-710438585)|0;x=oe(I|0,D|0,(n|K)^(t|v)^(l|e)|0,x|0)|0;p=oe(x|0,D|0,L|0,p|0)|0;p=oe(p|0,D|0,(b^o)&z^b|0,(j^y)&f^j|0)|0;L=D;x=Rd(q|0,H|0,28)|0;e=D;l=Pd(q|0,H|0,36)|0;e=e|D;v=Rd(q|0,H|0,34)|0;t=D;K=Pd(q|0,H|0,30)|0;t=e^(t|D);e=Rd(q|0,H|0,39)|0;n=D;I=Pd(q|0,H|0,25)|0;E=c[A>>2]|0;F=c[A+4>>2]|0;n=oe((E|s)&q|E&s|0,(F|J)&H|F&J|0,(x|l)^(v|K)^(e|I)|0,t^(n|D)|0)|0;t=D;u=oe(r|0,u|0,p|0,L|0)|0;r=D;c[k>>2]=u;c[k+4>>2]=r;L=oe(n|0,t|0,p|0,L|0)|0;p=D;c[B>>2]=L;c[B+4>>2]=p;t=Rd(u|0,r|0,14)|0;n=D;I=Pd(u|0,r|0,50)|0;n=n|D;e=Rd(u|0,r|0,18)|0;K=D;v=Pd(u|0,r|0,46)|0;K=n^(K|D);n=Rd(u|0,r|0,41)|0;l=D;x=Pd(u|0,r|0,23)|0;l=K^(l|D);K=c[h+80+240>>2]|0;J=c[h+80+240+4>>2]|0;j=oe(b|0,j|0,-536640913,113926993)|0;l=oe(j|0,D|0,(t|I)^(e|v)^(n|x)|0,l|0)|0;J=oe(l|0,D|0,K|0,J|0)|0;J=oe(J|0,D|0,(o^z)&u^o|0,(y^f)&r^y|0)|0;K=D;l=Rd(L|0,p|0,28)|0;x=D;n=Pd(L|0,p|0,36)|0;x=x|D;v=Rd(L|0,p|0,34)|0;e=D;I=Pd(L|0,p|0,30)|0;e=x^(e|D);x=Rd(L|0,p|0,39)|0;t=D;j=Pd(L|0,p|0,25)|0;b=c[w>>2]|0;s=c[w+4>>2]|0;t=oe((b|q)&L|b&q|0,(s|H)&p|s&H|0,(l|n)^(v|I)^(x|j)|0,e^(t|D)|0)|0;e=D;F=oe(E|0,F|0,J|0,K|0)|0;E=D;c[A>>2]=F;c[A+4>>2]=E;K=oe(t|0,e|0,J|0,K|0)|0;J=D;c[C>>2]=K;c[C+4>>2]=J;e=Rd(F|0,E|0,14)|0;t=D;j=Pd(F|0,E|0,50)|0;t=t|D;x=Rd(F|0,E|0,18)|0;I=D;v=Pd(F|0,E|0,46)|0;I=t^(I|D);t=Rd(F|0,E|0,41)|0;n=D;l=Pd(F|0,E|0,23)|0;n=I^(n|D);I=c[h+80+248>>2]|0;H=c[h+80+248+4>>2]|0;y=oe(o|0,y|0,168717936,338241895)|0;n=oe(y|0,D|0,(e|j)^(x|v)^(t|l)|0,n|0)|0;H=oe(n|0,D|0,I|0,H|0)|0;H=oe(H|0,D|0,(z^u)&F^z|0,(f^r)&E^f|0)|0;I=D;n=Rd(K|0,J|0,28)|0;l=D;t=Pd(K|0,J|0,36)|0;l=l|D;v=Rd(K|0,J|0,34)|0;x=D;j=Pd(K|0,J|0,30)|0;x=l^(x|D);l=Rd(K|0,J|0,39)|0;e=D;y=Pd(K|0,J|0,25)|0;o=c[m>>2]|0;q=c[m+4>>2]|0;e=oe((o|L)&K|o&L|0,(q|p)&J|q&p|0,(n|t)^(v|j)^(l|y)|0,x^(e|D)|0)|0;x=D;s=oe(b|0,s|0,H|0,I|0)|0;b=D;c[w>>2]=s;c[w+4>>2]=b;I=oe(e|0,x|0,H|0,I|0)|0;H=D;c[h+16>>2]=I;c[h+16+4>>2]=H;x=Rd(s|0,b|0,14)|0;e=D;y=Pd(s|0,b|0,50)|0;e=e|D;l=Rd(s|0,b|0,18)|0;j=D;v=Pd(s|0,b|0,46)|0;j=e^(j|D);e=Rd(s|0,b|0,41)|0;t=D;n=Pd(s|0,b|0,23)|0;t=j^(t|D);j=c[h+80+256>>2]|0;p=c[h+80+256+4>>2]|0;f=oe(z|0,f|0,1188179964,666307205)|0;t=oe(f|0,D|0,(x|y)^(l|v)^(e|n)|0,t|0)|0;p=oe(t|0,D|0,j|0,p|0)|0;p=oe(p|0,D|0,(u^F)&s^u|0,(r^E)&b^r|0)|0;j=D;t=Rd(I|0,H|0,28)|0;n=D;e=Pd(I|0,H|0,36)|0;n=n|D;v=Rd(I|0,H|0,34)|0;l=D;y=Pd(I|0,H|0,30)|0;l=n^(l|D);n=Rd(I|0,H|0,39)|0;x=D;f=Pd(I|0,H|0,25)|0;z=c[B>>2]|0;L=c[B+4>>2]|0;x=oe((z|K)&I|z&K|0,(L|J)&H|L&J|0,(t|e)^(v|y)^(n|f)|0,l^(x|D)|0)|0;l=D;q=oe(o|0,q|0,p|0,j|0)|0;o=D;c[m>>2]=q;c[m+4>>2]=o;j=oe(x|0,l|0,p|0,j|0)|0;p=D;c[G>>2]=j;c[G+4>>2]=p;l=Rd(q|0,o|0,14)|0;x=D;f=Pd(q|0,o|0,50)|0;x=x|D;n=Rd(q|0,o|0,18)|0;y=D;v=Pd(q|0,o|0,46)|0;y=x^(y|D);x=Rd(q|0,o|0,41)|0;e=D;t=Pd(q|0,o|0,23)|0;e=y^(e|D);y=c[h+80+264>>2]|0;J=c[h+80+264+4>>2]|0;r=oe(u|0,r|0,1546045734,773529912)|0;e=oe(r|0,D|0,(l|f)^(n|v)^(x|t)|0,e|0)|0;J=oe(e|0,D|0,y|0,J|0)|0;J=oe(J|0,D|0,(F^s)&q^F|0,(E^b)&o^E|0)|0;y=D;e=Rd(j|0,p|0,28)|0;t=D;x=Pd(j|0,p|0,36)|0;t=t|D;v=Rd(j|0,p|0,34)|0;n=D;f=Pd(j|0,p|0,30)|0;n=t^(n|D);t=Rd(j|0,p|0,39)|0;l=D;r=Pd(j|0,p|0,25)|0;u=c[C>>2]|0;K=c[C+4>>2]|0;l=oe((u|I)&j|u&I|0,(K|H)&p|K&H|0,(e|x)^(v|f)^(t|r)|0,n^(l|D)|0)|0;n=D;L=oe(z|0,L|0,J|0,y|0)|0;z=D;c[B>>2]=L;c[B+4>>2]=z;y=oe(l|0,n|0,J|0,y|0)|0;J=D;c[k>>2]=y;c[k+4>>2]=J;n=Rd(L|0,z|0,14)|0;l=D;r=Pd(L|0,z|0,50)|0;l=l|D;t=Rd(L|0,z|0,18)|0;f=D;v=Pd(L|0,z|0,46)|0;f=l^(f|D);l=Rd(L|0,z|0,41)|0;x=D;e=Pd(L|0,z|0,23)|0;x=f^(x|D);f=c[h+80+272>>2]|0;H=c[h+80+272+4>>2]|0;E=oe(F|0,E|0,1522805485,1294757372)|0;x=oe(E|0,D|0,(n|r)^(t|v)^(l|e)|0,x|0)|0;H=oe(x|0,D|0,f|0,H|0)|0;H=oe(H|0,D|0,(s^q)&L^s|0,(b^o)&z^b|0)|0;f=D;x=Rd(y|0,J|0,28)|0;e=D;l=Pd(y|0,J|0,36)|0;e=e|D;v=Rd(y|0,J|0,34)|0;t=D;r=Pd(y|0,J|0,30)|0;t=e^(t|D);e=Rd(y|0,J|0,39)|0;n=D;E=Pd(y|0,J|0,25)|0;F=c[h+16>>2]|0;I=c[h+16+4>>2]|0;n=oe((F|j)&y|F&j|0,(I|p)&J|I&p|0,(x|l)^(v|r)^(e|E)|0,t^(n|D)|0)|0;t=D;K=oe(u|0,K|0,H|0,f|0)|0;u=D;c[C>>2]=K;c[C+4>>2]=u;f=oe(n|0,t|0,H|0,f|0)|0;H=D;c[A>>2]=f;c[A+4>>2]=H;t=Rd(K|0,u|0,14)|0;n=D;E=Pd(K|0,u|0,50)|0;n=n|D;e=Rd(K|0,u|0,18)|0;r=D;v=Pd(K|0,u|0,46)|0;r=n^(r|D);n=Rd(K|0,u|0,41)|0;l=D;x=Pd(K|0,u|0,23)|0;l=r^(l|D);r=c[h+80+280>>2]|0;p=c[h+80+280+4>>2]|0;b=oe(s|0,b|0,-1651133473,1396182291)|0;l=oe(b|0,D|0,(t|E)^(e|v)^(n|x)|0,l|0)|0;p=oe(l|0,D|0,r|0,p|0)|0;p=oe(p|0,D|0,(q^L)&K^q|0,(o^z)&u^o|0)|0;r=D;l=Rd(f|0,H|0,28)|0;x=D;n=Pd(f|0,H|0,36)|0;x=x|D;v=Rd(f|0,H|0,34)|0;e=D;E=Pd(f|0,H|0,30)|0;e=x^(e|D);x=Rd(f|0,H|0,39)|0;t=D;b=Pd(f|0,H|0,25)|0;s=c[G>>2]|0;j=c[G+4>>2]|0;t=oe((s|y)&f|s&y|0,(j|J)&H|j&J|0,(l|n)^(v|E)^(x|b)|0,e^(t|D)|0)|0;e=D;I=oe(F|0,I|0,p|0,r|0)|0;F=D;c[h+16>>2]=I;c[h+16+4>>2]=F;r=oe(t|0,e|0,p|0,r|0)|0;p=D;c[w>>2]=r;c[w+4>>2]=p;e=Rd(I|0,F|0,14)|0;t=D;b=Pd(I|0,F|0,50)|0;t=t|D;x=Rd(I|0,F|0,18)|0;E=D;v=Pd(I|0,F|0,46)|0;E=t^(E|D);t=Rd(I|0,F|0,41)|0;n=D;l=Pd(I|0,F|0,23)|0;n=E^(n|D);E=c[h+80+288>>2]|0;J=c[h+80+288+4>>2]|0;o=oe(q|0,o|0,-1951439906,1695183700)|0;n=oe(o|0,D|0,(e|b)^(x|v)^(t|l)|0,n|0)|0;J=oe(n|0,D|0,E|0,J|0)|0;J=oe(J|0,D|0,(L^K)&I^L|0,(z^u)&F^z|0)|0;E=D;n=Rd(r|0,p|0,28)|0;l=D;t=Pd(r|0,p|0,36)|0;l=l|D;v=Rd(r|0,p|0,34)|0;x=D;b=Pd(r|0,p|0,30)|0;x=l^(x|D);l=Rd(r|0,p|0,39)|0;e=D;o=Pd(r|0,p|0,25)|0;q=c[k>>2]|0;y=c[k+4>>2]|0;e=oe((q|f)&r|q&f|0,(y|H)&p|y&H|0,(n|t)^(v|b)^(l|o)|0,x^(e|D)|0)|0;x=D;j=oe(s|0,j|0,J|0,E|0)|0;s=D;c[G>>2]=j;c[G+4>>2]=s;E=oe(e|0,x|0,J|0,E|0)|0;J=D;c[m>>2]=E;c[m+4>>2]=J;x=Rd(j|0,s|0,14)|0;e=D;o=Pd(j|0,s|0,50)|0;e=e|D;l=Rd(j|0,s|0,18)|0;b=D;v=Pd(j|0,s|0,46)|0;b=e^(b|D);e=Rd(j|0,s|0,41)|0;t=D;n=Pd(j|0,s|0,23)|0;t=b^(t|D);b=c[h+80+296>>2]|0;H=c[h+80+296+4>>2]|0;z=oe(L|0,z|0,1014477480,1986661051)|0;t=oe(z|0,D|0,(x|o)^(l|v)^(e|n)|0,t|0)|0;H=oe(t|0,D|0,b|0,H|0)|0;H=oe(H|0,D|0,(K^I)&j^K|0,(u^F)&s^u|0)|0;b=D;t=Rd(E|0,J|0,28)|0;n=D;e=Pd(E|0,J|0,36)|0;n=n|D;v=Rd(E|0,J|0,34)|0;l=D;o=Pd(E|0,J|0,30)|0;l=n^(l|D);n=Rd(E|0,J|0,39)|0;x=D;z=Pd(E|0,J|0,25)|0;L=c[A>>2]|0;f=c[A+4>>2]|0;x=oe((L|r)&E|L&r|0,(f|p)&J|f&p|0,(t|e)^(v|o)^(n|z)|0,l^(x|D)|0)|0;l=D;y=oe(q|0,y|0,H|0,b|0)|0;q=D;c[k>>2]=y;c[k+4>>2]=q;b=oe(x|0,l|0,H|0,b|0)|0;H=D;c[B>>2]=b;c[B+4>>2]=H;l=Rd(y|0,q|0,14)|0;x=D;z=Pd(y|0,q|0,50)|0;x=x|D;n=Rd(y|0,q|0,18)|0;o=D;v=Pd(y|0,q|0,46)|0;o=x^(o|D);x=Rd(y|0,q|0,41)|0;e=D;t=Pd(y|0,q|0,23)|0;e=o^(e|D);o=c[h+80+304>>2]|0;p=c[h+80+304+4>>2]|0;u=oe(K|0,u|0,1206759142,-2117940946)|0;e=oe(u|0,D|0,(l|z)^(n|v)^(x|t)|0,e|0)|0;p=oe(e|0,D|0,o|0,p|0)|0;p=oe(p|0,D|0,(I^j)&y^I|0,(F^s)&q^F|0)|0;o=D;e=Rd(b|0,H|0,28)|0;t=D;x=Pd(b|0,H|0,36)|0;t=t|D;v=Rd(b|0,H|0,34)|0;n=D;z=Pd(b|0,H|0,30)|0;n=t^(n|D);t=Rd(b|0,H|0,39)|0;l=D;u=Pd(b|0,H|0,25)|0;K=c[w>>2]|0;r=c[w+4>>2]|0;l=oe((K|E)&b|K&E|0,(r|J)&H|r&J|0,(e|x)^(v|z)^(t|u)|0,n^(l|D)|0)|0;n=D;f=oe(L|0,f|0,p|0,o|0)|0;L=D;c[A>>2]=f;c[A+4>>2]=L;o=oe(l|0,n|0,p|0,o|0)|0;p=D;c[C>>2]=o;c[C+4>>2]=p;n=Rd(f|0,L|0,14)|0;l=D;u=Pd(f|0,L|0,50)|0;l=l|D;t=Rd(f|0,L|0,18)|0;z=D;v=Pd(f|0,L|0,46)|0;z=l^(z|D);l=Rd(f|0,L|0,41)|0;x=D;e=Pd(f|0,L|0,23)|0;x=z^(x|D);z=c[h+80+312>>2]|0;J=c[h+80+312+4>>2]|0;F=oe(I|0,F|0,344077627,-1838011259)|0;x=oe(F|0,D|0,(n|u)^(t|v)^(l|e)|0,x|0)|0;J=oe(x|0,D|0,z|0,J|0)|0;J=oe(J|0,D|0,(j^y)&f^j|0,(s^q)&L^s|0)|0;z=D;x=Rd(o|0,p|0,28)|0;e=D;l=Pd(o|0,p|0,36)|0;e=e|D;v=Rd(o|0,p|0,34)|0;t=D;u=Pd(o|0,p|0,30)|0;t=e^(t|D);e=Rd(o|0,p|0,39)|0;n=D;F=Pd(o|0,p|0,25)|0;I=c[m>>2]|0;E=c[m+4>>2]|0;n=oe((I|b)&o|I&b|0,(E|H)&p|E&H|0,(x|l)^(v|u)^(e|F)|0,t^(n|D)|0)|0;t=D;r=oe(K|0,r|0,J|0,z|0)|0;K=D;c[w>>2]=r;c[w+4>>2]=K;z=oe(n|0,t|0,J|0,z|0)|0;J=D;c[h+16>>2]=z;c[h+16+4>>2]=J;t=Rd(r|0,K|0,14)|0;n=D;F=Pd(r|0,K|0,50)|0;n=n|D;e=Rd(r|0,K|0,18)|0;u=D;v=Pd(r|0,K|0,46)|0;u=n^(u|D);n=Rd(r|0,K|0,41)|0;l=D;x=Pd(r|0,K|0,23)|0;l=u^(l|D);u=c[h+80+320>>2]|0;H=c[h+80+320+4>>2]|0;s=oe(j|0,s|0,1290863460,-1564481375)|0;l=oe(s|0,D|0,(t|F)^(e|v)^(n|x)|0,l|0)|0;H=oe(l|0,D|0,u|0,H|0)|0;H=oe(H|0,D|0,(y^f)&r^y|0,(q^L)&K^q|0)|0;u=D;l=Rd(z|0,J|0,28)|0;x=D;n=Pd(z|0,J|0,36)|0;x=x|D;v=Rd(z|0,J|0,34)|0;e=D;F=Pd(z|0,J|0,30)|0;e=x^(e|D);x=Rd(z|0,J|0,39)|0;t=D;s=Pd(z|0,J|0,25)|0;j=c[B>>2]|0;b=c[B+4>>2]|0;t=oe((j|o)&z|j&o|0,(b|p)&J|b&p|0,(l|n)^(v|F)^(x|s)|0,e^(t|D)|0)|0;e=D;E=oe(I|0,E|0,H|0,u|0)|0;I=D;c[m>>2]=E;c[m+4>>2]=I;u=oe(t|0,e|0,H|0,u|0)|0;H=D;c[G>>2]=u;c[G+4>>2]=H;e=Rd(E|0,I|0,14)|0;t=D;s=Pd(E|0,I|0,50)|0;t=t|D;x=Rd(E|0,I|0,18)|0;F=D;v=Pd(E|0,I|0,46)|0;F=t^(F|D);t=Rd(E|0,I|0,41)|0;n=D;l=Pd(E|0,I|0,23)|0;n=F^(n|D);F=c[h+80+328>>2]|0;p=c[h+80+328+4>>2]|0;q=oe(y|0,q|0,-1136513023,-1474664885)|0;n=oe(q|0,D|0,(e|s)^(x|v)^(t|l)|0,n|0)|0;p=oe(n|0,D|0,F|0,p|0)|0;p=oe(p|0,D|0,(f^r)&E^f|0,(L^K)&I^L|0)|0;F=D;n=Rd(u|0,H|0,28)|0;l=D;t=Pd(u|0,H|0,36)|0;l=l|D;v=Rd(u|0,H|0,34)|0;x=D;s=Pd(u|0,H|0,30)|0;x=l^(x|D);l=Rd(u|0,H|0,39)|0;e=D;q=Pd(u|0,H|0,25)|0;y=c[C>>2]|0;o=c[C+4>>2]|0;e=oe((y|z)&u|y&z|0,(o|J)&H|o&J|0,(n|t)^(v|s)^(l|q)|0,x^(e|D)|0)|0;x=D;b=oe(j|0,b|0,p|0,F|0)|0;j=D;c[B>>2]=b;c[B+4>>2]=j;F=oe(e|0,x|0,p|0,F|0)|0;p=D;c[k>>2]=F;c[k+4>>2]=p;x=Rd(b|0,j|0,14)|0;e=D;q=Pd(b|0,j|0,50)|0;e=e|D;l=Rd(b|0,j|0,18)|0;s=D;v=Pd(b|0,j|0,46)|0;s=e^(s|D);e=Rd(b|0,j|0,41)|0;t=D;n=Pd(b|0,j|0,23)|0;t=s^(t|D);s=c[h+80+336>>2]|0;J=c[h+80+336+4>>2]|0;L=oe(f|0,L|0,-789014639,-1035236496)|0;t=oe(L|0,D|0,(x|q)^(l|v)^(e|n)|0,t|0)|0;J=oe(t|0,D|0,s|0,J|0)|0;J=oe(J|0,D|0,(r^E)&b^r|0,(K^I)&j^K|0)|0;s=D;t=Rd(F|0,p|0,28)|0;n=D;e=Pd(F|0,p|0,36)|0;n=n|D;v=Rd(F|0,p|0,34)|0;l=D;q=Pd(F|0,p|0,30)|0;l=n^(l|D);n=Rd(F|0,p|0,39)|0;x=D;L=Pd(F|0,p|0,25)|0;f=c[h+16>>2]|0;z=c[h+16+4>>2]|0;x=oe((f|u)&F|f&u|0,(z|H)&p|z&H|0,(t|e)^(v|q)^(n|L)|0,l^(x|D)|0)|0;l=D;o=oe(y|0,o|0,J|0,s|0)|0;y=D;c[C>>2]=o;c[C+4>>2]=y;s=oe(x|0,l|0,J|0,s|0)|0;J=D;c[A>>2]=s;c[A+4>>2]=J;l=Rd(o|0,y|0,14)|0;x=D;L=Pd(o|0,y|0,50)|0;x=x|D;n=Rd(o|0,y|0,18)|0;q=D;v=Pd(o|0,y|0,46)|0;q=x^(q|D);x=Rd(o|0,y|0,41)|0;e=D;t=Pd(o|0,y|0,23)|0;e=q^(e|D);q=c[h+80+344>>2]|0;H=c[h+80+344+4>>2]|0;K=oe(r|0,K|0,106217008,-949202525)|0;e=oe(K|0,D|0,(l|L)^(n|v)^(x|t)|0,e|0)|0;H=oe(e|0,D|0,q|0,H|0)|0;H=oe(H|0,D|0,(E^b)&o^E|0,(I^j)&y^I|0)|0;q=D;e=Rd(s|0,J|0,28)|0;t=D;x=Pd(s|0,J|0,36)|0;t=t|D;v=Rd(s|0,J|0,34)|0;n=D;L=Pd(s|0,J|0,30)|0;n=t^(n|D);t=Rd(s|0,J|0,39)|0;l=D;K=Pd(s|0,J|0,25)|0;r=c[G>>2]|0;u=c[G+4>>2]|0;l=oe((r|F)&s|r&F|0,(u|p)&J|u&p|0,(e|x)^(v|L)^(t|K)|0,n^(l|D)|0)|0;n=D;z=oe(f|0,z|0,H|0,q|0)|0;f=D;c[h+16>>2]=z;c[h+16+4>>2]=f;q=oe(l|0,n|0,H|0,q|0)|0;H=D;c[w>>2]=q;c[w+4>>2]=H;n=Rd(z|0,f|0,14)|0;l=D;K=Pd(z|0,f|0,50)|0;l=l|D;t=Rd(z|0,f|0,18)|0;L=D;v=Pd(z|0,f|0,46)|0;L=l^(L|D);l=Rd(z|0,f|0,41)|0;x=D;e=Pd(z|0,f|0,23)|0;x=L^(x|D);L=c[h+80+352>>2]|0;p=c[h+80+352+4>>2]|0;I=oe(E|0,I|0,-688958952,-778901479)|0;x=oe(I|0,D|0,(n|K)^(t|v)^(l|e)|0,x|0)|0;p=oe(x|0,D|0,L|0,p|0)|0;p=oe(p|0,D|0,(b^o)&z^b|0,(j^y)&f^j|0)|0;L=D;x=Rd(q|0,H|0,28)|0;e=D;l=Pd(q|0,H|0,36)|0;e=e|D;v=Rd(q|0,H|0,34)|0;t=D;K=Pd(q|0,H|0,30)|0;t=e^(t|D);e=Rd(q|0,H|0,39)|0;n=D;I=Pd(q|0,H|0,25)|0;E=c[k>>2]|0;F=c[k+4>>2]|0;n=oe((E|s)&q|E&s|0,(F|J)&H|F&J|0,(x|l)^(v|K)^(e|I)|0,t^(n|D)|0)|0;t=D;u=oe(r|0,u|0,p|0,L|0)|0;r=D;c[G>>2]=u;c[G+4>>2]=r;L=oe(n|0,t|0,p|0,L|0)|0;p=D;c[m>>2]=L;c[m+4>>2]=p;t=Rd(u|0,r|0,14)|0;n=D;I=Pd(u|0,r|0,50)|0;n=n|D;e=Rd(u|0,r|0,18)|0;K=D;v=Pd(u|0,r|0,46)|0;K=n^(K|D);n=Rd(u|0,r|0,41)|0;l=D;x=Pd(u|0,r|0,23)|0;l=K^(l|D);K=c[h+80+360>>2]|0;J=c[h+80+360+4>>2]|0;j=oe(b|0,j|0,1432725776,-694614492)|0;l=oe(j|0,D|0,(t|I)^(e|v)^(n|x)|0,l|0)|0;J=oe(l|0,D|0,K|0,J|0)|0;J=oe(J|0,D|0,(o^z)&u^o|0,(y^f)&r^y|0)|0;K=D;l=Rd(L|0,p|0,28)|0;x=D;n=Pd(L|0,p|0,36)|0;x=x|D;v=Rd(L|0,p|0,34)|0;e=D;I=Pd(L|0,p|0,30)|0;e=x^(e|D);x=Rd(L|0,p|0,39)|0;t=D;j=Pd(L|0,p|0,25)|0;b=c[A>>2]|0;s=c[A+4>>2]|0;t=oe((b|q)&L|b&q|0,(s|H)&p|s&H|0,(l|n)^(v|I)^(x|j)|0,e^(t|D)|0)|0;e=D;F=oe(E|0,F|0,J|0,K|0)|0;E=D;c[k>>2]=F;c[k+4>>2]=E;K=oe(t|0,e|0,J|0,K|0)|0;J=D;c[B>>2]=K;c[B+4>>2]=J;e=Rd(F|0,E|0,14)|0;t=D;j=Pd(F|0,E|0,50)|0;t=t|D;x=Rd(F|0,E|0,18)|0;I=D;v=Pd(F|0,E|0,46)|0;I=t^(I|D);t=Rd(F|0,E|0,41)|0;n=D;l=Pd(F|0,E|0,23)|0;n=I^(n|D);I=c[h+80+368>>2]|0;H=c[h+80+368+4>>2]|0;y=oe(o|0,y|0,1467031594,-200395387)|0;n=oe(y|0,D|0,(e|j)^(x|v)^(t|l)|0,n|0)|0;H=oe(n|0,D|0,I|0,H|0)|0;H=oe(H|0,D|0,(z^u)&F^z|0,(f^r)&E^f|0)|0;I=D;n=Rd(K|0,J|0,28)|0;l=D;t=Pd(K|0,J|0,36)|0;l=l|D;v=Rd(K|0,J|0,34)|0;x=D;j=Pd(K|0,J|0,30)|0;x=l^(x|D);l=Rd(K|0,J|0,39)|0;e=D;y=Pd(K|0,J|0,25)|0;o=c[w>>2]|0;q=c[w+4>>2]|0;e=oe((o|L)&K|o&L|0,(q|p)&J|q&p|0,(n|t)^(v|j)^(l|y)|0,x^(e|D)|0)|0;x=D;s=oe(b|0,s|0,H|0,I|0)|0;b=D;c[A>>2]=s;c[A+4>>2]=b;I=oe(e|0,x|0,H|0,I|0)|0;H=D;c[C>>2]=I;c[C+4>>2]=H;x=Rd(s|0,b|0,14)|0;e=D;y=Pd(s|0,b|0,50)|0;e=e|D;l=Rd(s|0,b|0,18)|0;j=D;v=Pd(s|0,b|0,46)|0;j=e^(j|D);e=Rd(s|0,b|0,41)|0;t=D;n=Pd(s|0,b|0,23)|0;t=j^(t|D);j=c[h+80+376>>2]|0;p=c[h+80+376+4>>2]|0;f=oe(z|0,f|0,851169720,275423344)|0;t=oe(f|0,D|0,(x|y)^(l|v)^(e|n)|0,t|0)|0;p=oe(t|0,D|0,j|0,p|0)|0;p=oe(p|0,D|0,(u^F)&s^u|0,(r^E)&b^r|0)|0;j=D;t=Rd(I|0,H|0,28)|0;n=D;e=Pd(I|0,H|0,36)|0;n=n|D;v=Rd(I|0,H|0,34)|0;l=D;y=Pd(I|0,H|0,30)|0;l=n^(l|D);n=Rd(I|0,H|0,39)|0;x=D;f=Pd(I|0,H|0,25)|0;z=c[m>>2]|0;L=c[m+4>>2]|0;x=oe((z|K)&I|z&K|0,(L|J)&H|L&J|0,(t|e)^(v|y)^(n|f)|0,l^(x|D)|0)|0;l=D;q=oe(o|0,q|0,p|0,j|0)|0;o=D;c[w>>2]=q;c[w+4>>2]=o;j=oe(x|0,l|0,p|0,j|0)|0;p=D;c[h+16>>2]=j;c[h+16+4>>2]=p;l=Rd(q|0,o|0,14)|0;x=D;f=Pd(q|0,o|0,50)|0;x=x|D;n=Rd(q|0,o|0,18)|0;y=D;v=Pd(q|0,o|0,46)|0;y=x^(y|D);x=Rd(q|0,o|0,41)|0;e=D;t=Pd(q|0,o|0,23)|0;e=y^(e|D);y=c[h+80+384>>2]|0;J=c[h+80+384+4>>2]|0;r=oe(u|0,r|0,-1194143544,430227734)|0;e=oe(r|0,D|0,(l|f)^(n|v)^(x|t)|0,e|0)|0;J=oe(e|0,D|0,y|0,J|0)|0;J=oe(J|0,D|0,(F^s)&q^F|0,(E^b)&o^E|0)|0;y=D;e=Rd(j|0,p|0,28)|0;t=D;x=Pd(j|0,p|0,36)|0;t=t|D;v=Rd(j|0,p|0,34)|0;n=D;f=Pd(j|0,p|0,30)|0;n=t^(n|D);t=Rd(j|0,p|0,39)|0;l=D;r=Pd(j|0,p|0,25)|0;u=c[B>>2]|0;K=c[B+4>>2]|0;l=oe((u|I)&j|u&I|0,(K|H)&p|K&H|0,(e|x)^(v|f)^(t|r)|0,n^(l|D)|0)|0;n=D;L=oe(z|0,L|0,J|0,y|0)|0;z=D;c[m>>2]=L;c[m+4>>2]=z;y=oe(l|0,n|0,J|0,y|0)|0;J=D;c[G>>2]=y;c[G+4>>2]=J;n=Rd(L|0,z|0,14)|0;l=D;r=Pd(L|0,z|0,50)|0;l=l|D;t=Rd(L|0,z|0,18)|0;f=D;v=Pd(L|0,z|0,46)|0;f=l^(f|D);l=Rd(L|0,z|0,41)|0;x=D;e=Pd(L|0,z|0,23)|0;x=f^(x|D);f=c[h+80+392>>2]|0;H=c[h+80+392+4>>2]|0;E=oe(F|0,E|0,1363258195,506948616)|0;x=oe(E|0,D|0,(n|r)^(t|v)^(l|e)|0,x|0)|0;H=oe(x|0,D|0,f|0,H|0)|0;H=oe(H|0,D|0,(s^q)&L^s|0,(b^o)&z^b|0)|0;f=D;x=Rd(y|0,J|0,28)|0;e=D;l=Pd(y|0,J|0,36)|0;e=e|D;v=Rd(y|0,J|0,34)|0;t=D;r=Pd(y|0,J|0,30)|0;t=e^(t|D);e=Rd(y|0,J|0,39)|0;n=D;E=Pd(y|0,J|0,25)|0;F=c[C>>2]|0;I=c[C+4>>2]|0;n=oe((F|j)&y|F&j|0,(I|p)&J|I&p|0,(x|l)^(v|r)^(e|E)|0,t^(n|D)|0)|0;t=D;K=oe(u|0,K|0,H|0,f|0)|0;u=D;c[B>>2]=K;c[B+4>>2]=u;f=oe(n|0,t|0,H|0,f|0)|0;H=D;c[k>>2]=f;c[k+4>>2]=H;t=Rd(K|0,u|0,14)|0;n=D;E=Pd(K|0,u|0,50)|0;n=n|D;e=Rd(K|0,u|0,18)|0;r=D;v=Pd(K|0,u|0,46)|0;r=n^(r|D);n=Rd(K|0,u|0,41)|0;l=D;x=Pd(K|0,u|0,23)|0;l=r^(l|D);r=c[h+80+400>>2]|0;p=c[h+80+400+4>>2]|0;b=oe(s|0,b|0,-544281703,659060556)|0;l=oe(b|0,D|0,(t|E)^(e|v)^(n|x)|0,l|0)|0;p=oe(l|0,D|0,r|0,p|0)|0;p=oe(p|0,D|0,(q^L)&K^q|0,(o^z)&u^o|0)|0;r=D;l=Rd(f|0,H|0,28)|0;x=D;n=Pd(f|0,H|0,36)|0;x=x|D;v=Rd(f|0,H|0,34)|0;e=D;E=Pd(f|0,H|0,30)|0;e=x^(e|D);x=Rd(f|0,H|0,39)|0;t=D;b=Pd(f|0,H|0,25)|0;s=c[h+16>>2]|0;j=c[h+16+4>>2]|0;t=oe((s|y)&f|s&y|0,(j|J)&H|j&J|0,(l|n)^(v|E)^(x|b)|0,e^(t|D)|0)|0;e=D;I=oe(F|0,I|0,p|0,r|0)|0;F=D;c[C>>2]=I;c[C+4>>2]=F;r=oe(t|0,e|0,p|0,r|0)|0;p=D;c[A>>2]=r;c[A+4>>2]=p;e=Rd(I|0,F|0,14)|0;t=D;b=Pd(I|0,F|0,50)|0;t=t|D;x=Rd(I|0,F|0,18)|0;E=D;v=Pd(I|0,F|0,46)|0;E=t^(E|D);t=Rd(I|0,F|0,41)|0;n=D;l=Pd(I|0,F|0,23)|0;n=E^(n|D);E=c[h+80+408>>2]|0;J=c[h+80+408+4>>2]|0;o=oe(q|0,o|0,-509917016,883997877)|0;n=oe(o|0,D|0,(e|b)^(x|v)^(t|l)|0,n|0)|0;J=oe(n|0,D|0,E|0,J|0)|0;J=oe(J|0,D|0,(L^K)&I^L|0,(z^u)&F^z|0)|0;E=D;n=Rd(r|0,p|0,28)|0;l=D;t=Pd(r|0,p|0,36)|0;l=l|D;v=Rd(r|0,p|0,34)|0;x=D;b=Pd(r|0,p|0,30)|0;x=l^(x|D);l=Rd(r|0,p|0,39)|0;e=D;o=Pd(r|0,p|0,25)|0;q=c[G>>2]|0;y=c[G+4>>2]|0;e=oe((q|f)&r|q&f|0,(y|H)&p|y&H|0,(n|t)^(v|b)^(l|o)|0,x^(e|D)|0)|0;x=D;j=oe(s|0,j|0,J|0,E|0)|0;s=D;c[h+16>>2]=j;c[h+16+4>>2]=s;E=oe(e|0,x|0,J|0,E|0)|0;J=D;c[w>>2]=E;c[w+4>>2]=J;x=Rd(j|0,s|0,14)|0;e=D;o=Pd(j|0,s|0,50)|0;e=e|D;l=Rd(j|0,s|0,18)|0;b=D;v=Pd(j|0,s|0,46)|0;b=e^(b|D);e=Rd(j|0,s|0,41)|0;t=D;n=Pd(j|0,s|0,23)|0;t=b^(t|D);b=c[h+80+416>>2]|0;H=c[h+80+416+4>>2]|0;z=oe(L|0,z|0,-976659869,958139571)|0;t=oe(z|0,D|0,(x|o)^(l|v)^(e|n)|0,t|0)|0;H=oe(t|0,D|0,b|0,H|0)|0;H=oe(H|0,D|0,(K^I)&j^K|0,(u^F)&s^u|0)|0;b=D;t=Rd(E|0,J|0,28)|0;n=D;e=Pd(E|0,J|0,36)|0;n=n|D;v=Rd(E|0,J|0,34)|0;l=D;o=Pd(E|0,J|0,30)|0;l=n^(l|D);n=Rd(E|0,J|0,39)|0;x=D;z=Pd(E|0,J|0,25)|0;L=c[k>>2]|0;f=c[k+4>>2]|0;x=oe((L|r)&E|L&r|0,(f|p)&J|f&p|0,(t|e)^(v|o)^(n|z)|0,l^(x|D)|0)|0;l=D;y=oe(q|0,y|0,H|0,b|0)|0;q=D;c[G>>2]=y;c[G+4>>2]=q;b=oe(x|0,l|0,H|0,b|0)|0;H=D;c[m>>2]=b;c[m+4>>2]=H;l=Rd(y|0,q|0,14)|0;x=D;z=Pd(y|0,q|0,50)|0;x=x|D;n=Rd(y|0,q|0,18)|0;o=D;v=Pd(y|0,q|0,46)|0;o=x^(o|D);x=Rd(y|0,q|0,41)|0;e=D;t=Pd(y|0,q|0,23)|0;e=o^(e|D);o=c[h+80+424>>2]|0;p=c[h+80+424+4>>2]|0;u=oe(K|0,u|0,-482243893,1322822218)|0;e=oe(u|0,D|0,(l|z)^(n|v)^(x|t)|0,e|0)|0;p=oe(e|0,D|0,o|0,p|0)|0;p=oe(p|0,D|0,(I^j)&y^I|0,(F^s)&q^F|0)|0;o=D;e=Rd(b|0,H|0,28)|0;t=D;x=Pd(b|0,H|0,36)|0;t=t|D;v=Rd(b|0,H|0,34)|0;n=D;z=Pd(b|0,H|0,30)|0;n=t^(n|D);t=Rd(b|0,H|0,39)|0;l=D;u=Pd(b|0,H|0,25)|0;K=c[A>>2]|0;r=c[A+4>>2]|0;l=oe((K|E)&b|K&E|0,(r|J)&H|r&J|0,(e|x)^(v|z)^(t|u)|0,n^(l|D)|0)|0;n=D;f=oe(L|0,f|0,p|0,o|0)|0;L=D;c[k>>2]=f;c[k+4>>2]=L;o=oe(l|0,n|0,p|0,o|0)|0;p=D;c[B>>2]=o;c[B+4>>2]=p;n=Rd(f|0,L|0,14)|0;l=D;u=Pd(f|0,L|0,50)|0;l=l|D;t=Rd(f|0,L|0,18)|0;z=D;v=Pd(f|0,L|0,46)|0;z=l^(z|D);l=Rd(f|0,L|0,41)|0;x=D;e=Pd(f|0,L|0,23)|0;x=z^(x|D);z=c[h+80+432>>2]|0;J=c[h+80+432+4>>2]|0;F=oe(I|0,F|0,2003034995,1537002063)|0;x=oe(F|0,D|0,(n|u)^(t|v)^(l|e)|0,x|0)|0;J=oe(x|0,D|0,z|0,J|0)|0;J=oe(J|0,D|0,(j^y)&f^j|0,(s^q)&L^s|0)|0;z=D;x=Rd(o|0,p|0,28)|0;e=D;l=Pd(o|0,p|0,36)|0;e=e|D;v=Rd(o|0,p|0,34)|0;t=D;u=Pd(o|0,p|0,30)|0;t=e^(t|D);e=Rd(o|0,p|0,39)|0;n=D;F=Pd(o|0,p|0,25)|0;I=c[w>>2]|0;E=c[w+4>>2]|0;n=oe((I|b)&o|I&b|0,(E|H)&p|E&H|0,(x|l)^(v|u)^(e|F)|0,t^(n|D)|0)|0;t=D;r=oe(K|0,r|0,J|0,z|0)|0;K=D;c[A>>2]=r;c[A+4>>2]=K;z=oe(n|0,t|0,J|0,z|0)|0;J=D;c[C>>2]=z;c[C+4>>2]=J;t=Rd(r|0,K|0,14)|0;n=D;F=Pd(r|0,K|0,50)|0;n=n|D;e=Rd(r|0,K|0,18)|0;u=D;v=Pd(r|0,K|0,46)|0;u=n^(u|D);n=Rd(r|0,K|0,41)|0;l=D;x=Pd(r|0,K|0,23)|0;l=u^(l|D);u=c[h+80+440>>2]|0;H=c[h+80+440+4>>2]|0;s=oe(j|0,s|0,-692930397,1747873779)|0;l=oe(s|0,D|0,(t|F)^(e|v)^(n|x)|0,l|0)|0;H=oe(l|0,D|0,u|0,H|0)|0;H=oe(H|0,D|0,(y^f)&r^y|0,(q^L)&K^q|0)|0;u=D;l=Rd(z|0,J|0,28)|0;x=D;n=Pd(z|0,J|0,36)|0;x=x|D;v=Rd(z|0,J|0,34)|0;e=D;F=Pd(z|0,J|0,30)|0;e=x^(e|D);x=Rd(z|0,J|0,39)|0;t=D;s=Pd(z|0,J|0,25)|0;j=c[m>>2]|0;b=c[m+4>>2]|0;t=oe((j|o)&z|j&o|0,(b|p)&J|b&p|0,(l|n)^(v|F)^(x|s)|0,e^(t|D)|0)|0;e=D;E=oe(I|0,E|0,H|0,u|0)|0;I=D;c[w>>2]=E;c[w+4>>2]=I;u=oe(t|0,e|0,H|0,u|0)|0;H=D;c[h+16>>2]=u;c[h+16+4>>2]=H;e=Rd(E|0,I|0,14)|0;t=D;s=Pd(E|0,I|0,50)|0;t=t|D;x=Rd(E|0,I|0,18)|0;F=D;v=Pd(E|0,I|0,46)|0;F=t^(F|D);t=Rd(E|0,I|0,41)|0;n=D;l=Pd(E|0,I|0,23)|0;n=F^(n|D);F=c[h+80+448>>2]|0;p=c[h+80+448+4>>2]|0;q=oe(y|0,q|0,1575990012,1955562222)|0;n=oe(q|0,D|0,(e|s)^(x|v)^(t|l)|0,n|0)|0;p=oe(n|0,D|0,F|0,p|0)|0;p=oe(p|0,D|0,(f^r)&E^f|0,(L^K)&I^L|0)|0;F=D;n=Rd(u|0,H|0,28)|0;l=D;t=Pd(u|0,H|0,36)|0;l=l|D;v=Rd(u|0,H|0,34)|0;x=D;s=Pd(u|0,H|0,30)|0;x=l^(x|D);l=Rd(u|0,H|0,39)|0;e=D;q=Pd(u|0,H|0,25)|0;y=c[B>>2]|0;o=c[B+4>>2]|0;e=oe((y|z)&u|y&z|0,(o|J)&H|o&J|0,(n|t)^(v|s)^(l|q)|0,x^(e|D)|0)|0;x=D;b=oe(j|0,b|0,p|0,F|0)|0;j=D;c[m>>2]=b;c[m+4>>2]=j;F=oe(e|0,x|0,p|0,F|0)|0;p=D;c[G>>2]=F;c[G+4>>2]=p;x=Rd(b|0,j|0,14)|0;e=D;q=Pd(b|0,j|0,50)|0;e=e|D;l=Rd(b|0,j|0,18)|0;s=D;v=Pd(b|0,j|0,46)|0;s=e^(s|D);e=Rd(b|0,j|0,41)|0;t=D;n=Pd(b|0,j|0,23)|0;t=s^(t|D);s=c[h+80+456>>2]|0;J=c[h+80+456+4>>2]|0;L=oe(f|0,L|0,1125592928,2024104815)|0;t=oe(L|0,D|0,(x|q)^(l|v)^(e|n)|0,t|0)|0;J=oe(t|0,D|0,s|0,J|0)|0;J=oe(J|0,D|0,(r^E)&b^r|0,(K^I)&j^K|0)|0;s=D;t=Rd(F|0,p|0,28)|0;n=D;e=Pd(F|0,p|0,36)|0;n=n|D;v=Rd(F|0,p|0,34)|0;l=D;q=Pd(F|0,p|0,30)|0;l=n^(l|D);n=Rd(F|0,p|0,39)|0;x=D;L=Pd(F|0,p|0,25)|0;f=c[C>>2]|0;z=c[C+4>>2]|0;x=oe((f|u)&F|f&u|0,(z|H)&p|z&H|0,(t|e)^(v|q)^(n|L)|0,l^(x|D)|0)|0;l=D;o=oe(y|0,o|0,J|0,s|0)|0;y=D;c[B>>2]=o;c[B+4>>2]=y;s=oe(x|0,l|0,J|0,s|0)|0;J=D;c[k>>2]=s;c[k+4>>2]=J;l=Rd(o|0,y|0,14)|0;x=D;L=Pd(o|0,y|0,50)|0;x=x|D;n=Rd(o|0,y|0,18)|0;q=D;v=Pd(o|0,y|0,46)|0;q=x^(q|D);x=Rd(o|0,y|0,41)|0;e=D;t=Pd(o|0,y|0,23)|0;e=q^(e|D);q=c[h+80+464>>2]|0;H=c[h+80+464+4>>2]|0;K=oe(r|0,K|0,-1578062990,-2067236844)|0;e=oe(K|0,D|0,(l|L)^(n|v)^(x|t)|0,e|0)|0;H=oe(e|0,D|0,q|0,H|0)|0;H=oe(H|0,D|0,(E^b)&o^E|0,(I^j)&y^I|0)|0;q=D;e=Rd(s|0,J|0,28)|0;t=D;x=Pd(s|0,J|0,36)|0;t=t|D;v=Rd(s|0,J|0,34)|0;n=D;L=Pd(s|0,J|0,30)|0;n=t^(n|D);t=Rd(s|0,J|0,39)|0;l=D;K=Pd(s|0,J|0,25)|0;r=c[h+16>>2]|0;u=c[h+16+4>>2]|0;l=oe((r|F)&s|r&F|0,(u|p)&J|u&p|0,(e|x)^(v|L)^(t|K)|0,n^(l|D)|0)|0;n=D;z=oe(f|0,z|0,H|0,q|0)|0;f=D;c[C>>2]=z;c[C+4>>2]=f;q=oe(l|0,n|0,H|0,q|0)|0;H=D;c[A>>2]=q;c[A+4>>2]=H;n=Rd(z|0,f|0,14)|0;l=D;K=Pd(z|0,f|0,50)|0;l=l|D;t=Rd(z|0,f|0,18)|0;L=D;v=Pd(z|0,f|0,46)|0;L=l^(L|D);l=Rd(z|0,f|0,41)|0;x=D;e=Pd(z|0,f|0,23)|0;x=L^(x|D);L=c[h+80+472>>2]|0;p=c[h+80+472+4>>2]|0;I=oe(E|0,I|0,442776044,-1933114872)|0;x=oe(I|0,D|0,(n|K)^(t|v)^(l|e)|0,x|0)|0;p=oe(x|0,D|0,L|0,p|0)|0;p=oe(p|0,D|0,(b^o)&z^b|0,(j^y)&f^j|0)|0;L=D;x=Rd(q|0,H|0,28)|0;e=D;l=Pd(q|0,H|0,36)|0;e=e|D;v=Rd(q|0,H|0,34)|0;t=D;K=Pd(q|0,H|0,30)|0;t=e^(t|D);e=Rd(q|0,H|0,39)|0;n=D;I=Pd(q|0,H|0,25)|0;E=c[G>>2]|0;F=c[G+4>>2]|0;n=oe((E|s)&q|E&s|0,(F|J)&H|F&J|0,(x|l)^(v|K)^(e|I)|0,t^(n|D)|0)|0;t=D;u=oe(r|0,u|0,p|0,L|0)|0;r=D;c[h+16>>2]=u;c[h+16+4>>2]=r;L=oe(n|0,t|0,p|0,L|0)|0;p=D;c[w>>2]=L;c[w+4>>2]=p;t=Rd(u|0,r|0,14)|0;n=D;I=Pd(u|0,r|0,50)|0;n=n|D;e=Rd(u|0,r|0,18)|0;K=D;v=Pd(u|0,r|0,46)|0;K=n^(K|D);n=Rd(u|0,r|0,41)|0;l=D;x=Pd(u|0,r|0,23)|0;l=K^(l|D);K=c[h+80+480>>2]|0;J=c[h+80+480+4>>2]|0;j=oe(b|0,j|0,593698344,-1866530822)|0;l=oe(j|0,D|0,(t|I)^(e|v)^(n|x)|0,l|0)|0;J=oe(l|0,D|0,K|0,J|0)|0;J=oe(J|0,D|0,(o^z)&u^o|0,(y^f)&r^y|0)|0;K=D;l=Rd(L|0,p|0,28)|0;x=D;n=Pd(L|0,p|0,36)|0;x=x|D;v=Rd(L|0,p|0,34)|0;e=D;I=Pd(L|0,p|0,30)|0;e=x^(e|D);x=Rd(L|0,p|0,39)|0;t=D;j=Pd(L|0,p|0,25)|0;b=c[k>>2]|0;s=c[k+4>>2]|0;t=oe((b|q)&L|b&q|0,(s|H)&p|s&H|0,(l|n)^(v|I)^(x|j)|0,e^(t|D)|0)|0;e=D;F=oe(E|0,F|0,J|0,K|0)|0;E=D;c[G>>2]=F;c[G+4>>2]=E;K=oe(t|0,e|0,J|0,K|0)|0;J=D;c[m>>2]=K;c[m+4>>2]=J;e=Rd(F|0,E|0,14)|0;t=D;j=Pd(F|0,E|0,50)|0;t=t|D;x=Rd(F|0,E|0,18)|0;I=D;v=Pd(F|0,E|0,46)|0;I=t^(I|D);t=Rd(F|0,E|0,41)|0;n=D;l=Pd(F|0,E|0,23)|0;n=I^(n|D);I=c[h+80+488>>2]|0;H=c[h+80+488+4>>2]|0;y=oe(o|0,y|0,-561857047,-1538233109)|0;n=oe(y|0,D|0,(e|j)^(x|v)^(t|l)|0,n|0)|0;H=oe(n|0,D|0,I|0,H|0)|0;H=oe(H|0,D|0,(z^u)&F^z|0,(f^r)&E^f|0)|0;I=D;n=Rd(K|0,J|0,28)|0;l=D;t=Pd(K|0,J|0,36)|0;l=l|D;v=Rd(K|0,J|0,34)|0;x=D;j=Pd(K|0,J|0,30)|0;x=l^(x|D);l=Rd(K|0,J|0,39)|0;e=D;y=Pd(K|0,J|0,25)|0;o=c[A>>2]|0;q=c[A+4>>2]|0;e=oe((o|L)&K|o&L|0,(q|p)&J|q&p|0,(n|t)^(v|j)^(l|y)|0,x^(e|D)|0)|0;x=D;s=oe(b|0,s|0,H|0,I|0)|0;b=D;c[k>>2]=s;c[k+4>>2]=b;I=oe(e|0,x|0,H|0,I|0)|0;H=D;c[B>>2]=I;c[B+4>>2]=H;x=Rd(s|0,b|0,14)|0;e=D;y=Pd(s|0,b|0,50)|0;e=e|D;l=Rd(s|0,b|0,18)|0;j=D;v=Pd(s|0,b|0,46)|0;j=e^(j|D);e=Rd(s|0,b|0,41)|0;t=D;n=Pd(s|0,b|0,23)|0;t=j^(t|D);j=c[h+80+496>>2]|0;p=c[h+80+496+4>>2]|0;f=oe(z|0,f|0,-1295615723,-1090935817)|0;t=oe(f|0,D|0,(x|y)^(l|v)^(e|n)|0,t|0)|0;p=oe(t|0,D|0,j|0,p|0)|0;p=oe(p|0,D|0,(u^F)&s^u|0,(r^E)&b^r|0)|0;j=D;t=Rd(I|0,H|0,28)|0;n=D;e=Pd(I|0,H|0,36)|0;n=n|D;v=Rd(I|0,H|0,34)|0;l=D;y=Pd(I|0,H|0,30)|0;l=n^(l|D);n=Rd(I|0,H|0,39)|0;x=D;f=Pd(I|0,H|0,25)|0;z=c[w>>2]|0;L=c[w+4>>2]|0;x=oe((z|K)&I|z&K|0,(L|J)&H|L&J|0,(t|e)^(v|y)^(n|f)|0,l^(x|D)|0)|0;l=D;q=oe(o|0,q|0,p|0,j|0)|0;o=D;c[A>>2]=q;c[A+4>>2]=o;j=oe(x|0,l|0,p|0,j|0)|0;p=D;c[C>>2]=j;c[C+4>>2]=p;l=Rd(q|0,o|0,14)|0;x=D;f=Pd(q|0,o|0,50)|0;x=x|D;n=Rd(q|0,o|0,18)|0;y=D;v=Pd(q|0,o|0,46)|0;y=x^(y|D);x=Rd(q|0,o|0,41)|0;e=D;t=Pd(q|0,o|0,23)|0;e=y^(e|D);y=c[h+80+504>>2]|0;J=c[h+80+504+4>>2]|0;r=oe(u|0,r|0,-479046869,-965641998)|0;e=oe(r|0,D|0,(l|f)^(n|v)^(x|t)|0,e|0)|0;J=oe(e|0,D|0,y|0,J|0)|0;J=oe(J|0,D|0,(F^s)&q^F|0,(E^b)&o^E|0)|0;y=D;e=Rd(j|0,p|0,28)|0;t=D;x=Pd(j|0,p|0,36)|0;t=t|D;v=Rd(j|0,p|0,34)|0;n=D;f=Pd(j|0,p|0,30)|0;n=t^(n|D);t=Rd(j|0,p|0,39)|0;l=D;r=Pd(j|0,p|0,25)|0;u=c[m>>2]|0;K=c[m+4>>2]|0;l=oe((u|I)&j|u&I|0,(K|H)&p|K&H|0,(e|x)^(v|f)^(t|r)|0,n^(l|D)|0)|0;n=D;L=oe(z|0,L|0,J|0,y|0)|0;z=D;c[w>>2]=L;c[w+4>>2]=z;y=oe(l|0,n|0,J|0,y|0)|0;J=D;c[h+16>>2]=y;c[h+16+4>>2]=J;n=Rd(L|0,z|0,14)|0;l=D;r=Pd(L|0,z|0,50)|0;l=l|D;t=Rd(L|0,z|0,18)|0;f=D;v=Pd(L|0,z|0,46)|0;f=l^(f|D);l=Rd(L|0,z|0,41)|0;x=D;e=Pd(L|0,z|0,23)|0;x=f^(x|D);f=c[h+80+512>>2]|0;H=c[h+80+512+4>>2]|0;E=oe(F|0,E|0,-366583396,-903397682)|0;x=oe(E|0,D|0,(n|r)^(t|v)^(l|e)|0,x|0)|0;H=oe(x|0,D|0,f|0,H|0)|0;H=oe(H|0,D|0,(s^q)&L^s|0,(b^o)&z^b|0)|0;f=D;x=Rd(y|0,J|0,28)|0;e=D;l=Pd(y|0,J|0,36)|0;e=e|D;v=Rd(y|0,J|0,34)|0;t=D;r=Pd(y|0,J|0,30)|0;t=e^(t|D);e=Rd(y|0,J|0,39)|0;n=D;E=Pd(y|0,J|0,25)|0;F=c[B>>2]|0;I=c[B+4>>2]|0;n=oe((F|j)&y|F&j|0,(I|p)&J|I&p|0,(x|l)^(v|r)^(e|E)|0,t^(n|D)|0)|0;t=D;K=oe(u|0,K|0,H|0,f|0)|0;u=D;c[m>>2]=K;c[m+4>>2]=u;f=oe(n|0,t|0,H|0,f|0)|0;H=D;c[G>>2]=f;c[G+4>>2]=H;t=Rd(K|0,u|0,14)|0;n=D;E=Pd(K|0,u|0,50)|0;n=n|D;e=Rd(K|0,u|0,18)|0;r=D;v=Pd(K|0,u|0,46)|0;r=n^(r|D);n=Rd(K|0,u|0,41)|0;l=D;x=Pd(K|0,u|0,23)|0;l=r^(l|D);r=c[h+80+520>>2]|0;p=c[h+80+520+4>>2]|0;b=oe(s|0,b|0,566280711,-779700025)|0;l=oe(b|0,D|0,(t|E)^(e|v)^(n|x)|0,l|0)|0;p=oe(l|0,D|0,r|0,p|0)|0;p=oe(p|0,D|0,(q^L)&K^q|0,(o^z)&u^o|0)|0;r=D;l=Rd(f|0,H|0,28)|0;x=D;n=Pd(f|0,H|0,36)|0;x=x|D;v=Rd(f|0,H|0,34)|0;e=D;E=Pd(f|0,H|0,30)|0;e=x^(e|D);x=Rd(f|0,H|0,39)|0;t=D;b=Pd(f|0,H|0,25)|0;s=c[C>>2]|0;j=c[C+4>>2]|0;t=oe((s|y)&f|s&y|0,(j|J)&H|j&J|0,(l|n)^(v|E)^(x|b)|0,e^(t|D)|0)|0;e=D;I=oe(F|0,I|0,p|0,r|0)|0;F=D;c[B>>2]=I;c[B+4>>2]=F;r=oe(t|0,e|0,p|0,r|0)|0;p=D;c[k>>2]=r;c[k+4>>2]=p;e=Rd(I|0,F|0,14)|0;t=D;b=Pd(I|0,F|0,50)|0;t=t|D;x=Rd(I|0,F|0,18)|0;E=D;v=Pd(I|0,F|0,46)|0;E=t^(E|D);t=Rd(I|0,F|0,41)|0;n=D;l=Pd(I|0,F|0,23)|0;n=E^(n|D);E=c[h+80+528>>2]|0;J=c[h+80+528+4>>2]|0;o=oe(q|0,o|0,-840897762,-354779690)|0;n=oe(o|0,D|0,(e|b)^(x|v)^(t|l)|0,n|0)|0;J=oe(n|0,D|0,E|0,J|0)|0;J=oe(J|0,D|0,(L^K)&I^L|0,(z^u)&F^z|0)|0;E=D;n=Rd(r|0,p|0,28)|0;l=D;t=Pd(r|0,p|0,36)|0;l=l|D;v=Rd(r|0,p|0,34)|0;x=D;b=Pd(r|0,p|0,30)|0;x=l^(x|D);l=Rd(r|0,p|0,39)|0;e=D;o=Pd(r|0,p|0,25)|0;q=c[h+16>>2]|0;y=c[h+16+4>>2]|0;e=oe((q|f)&r|q&f|0,(y|H)&p|y&H|0,(n|t)^(v|b)^(l|o)|0,x^(e|D)|0)|0;x=D;j=oe(s|0,j|0,J|0,E|0)|0;s=D;c[C>>2]=j;c[C+4>>2]=s;E=oe(e|0,x|0,J|0,E|0)|0;J=D;c[A>>2]=E;c[A+4>>2]=J;x=Rd(j|0,s|0,14)|0;e=D;o=Pd(j|0,s|0,50)|0;e=e|D;l=Rd(j|0,s|0,18)|0;b=D;v=Pd(j|0,s|0,46)|0;b=e^(b|D);e=Rd(j|0,s|0,41)|0;t=D;n=Pd(j|0,s|0,23)|0;t=b^(t|D);b=c[h+80+536>>2]|0;H=c[h+80+536+4>>2]|0;z=oe(L|0,z|0,-294727304,-176337025)|0;t=oe(z|0,D|0,(x|o)^(l|v)^(e|n)|0,t|0)|0;H=oe(t|0,D|0,b|0,H|0)|0;H=oe(H|0,D|0,(K^I)&j^K|0,(u^F)&s^u|0)|0;b=D;t=Rd(E|0,J|0,28)|0;n=D;e=Pd(E|0,J|0,36)|0;n=n|D;v=Rd(E|0,J|0,34)|0;l=D;o=Pd(E|0,J|0,30)|0;l=n^(l|D);n=Rd(E|0,J|0,39)|0;x=D;z=Pd(E|0,J|0,25)|0;L=c[G>>2]|0;f=c[G+4>>2]|0;x=oe((L|r)&E|L&r|0,(f|p)&J|f&p|0,(t|e)^(v|o)^(n|z)|0,l^(x|D)|0)|0;l=D;y=oe(q|0,y|0,H|0,b|0)|0;q=D;c[h+16>>2]=y;c[h+16+4>>2]=q;b=oe(x|0,l|0,H|0,b|0)|0;H=D;c[w>>2]=b;c[w+4>>2]=H;l=Rd(y|0,q|0,14)|0;x=D;z=Pd(y|0,q|0,50)|0;x=x|D;n=Rd(y|0,q|0,18)|0;o=D;v=Pd(y|0,q|0,46)|0;o=x^(o|D);x=Rd(y|0,q|0,41)|0;e=D;t=Pd(y|0,q|0,23)|0;e=o^(e|D);o=c[h+80+544>>2]|0;p=c[h+80+544+4>>2]|0;u=oe(K|0,u|0,1914138554,116418474)|0;e=oe(u|0,D|0,(l|z)^(n|v)^(x|t)|0,e|0)|0;p=oe(e|0,D|0,o|0,p|0)|0;p=oe(p|0,D|0,(I^j)&y^I|0,(F^s)&q^F|0)|0;o=D;e=Rd(b|0,H|0,28)|0;t=D;x=Pd(b|0,H|0,36)|0;t=t|D;v=Rd(b|0,H|0,34)|0;n=D;z=Pd(b|0,H|0,30)|0;n=t^(n|D);t=Rd(b|0,H|0,39)|0;l=D;u=Pd(b|0,H|0,25)|0;K=c[k>>2]|0;r=c[k+4>>2]|0;l=oe((K|E)&b|K&E|0,(r|J)&H|r&J|0,(e|x)^(v|z)^(t|u)|0,n^(l|D)|0)|0;n=D;f=oe(L|0,f|0,p|0,o|0)|0;L=D;c[G>>2]=f;c[G+4>>2]=L;o=oe(l|0,n|0,p|0,o|0)|0;p=D;c[m>>2]=o;c[m+4>>2]=p;n=Rd(f|0,L|0,14)|0;l=D;u=Pd(f|0,L|0,50)|0;l=l|D;t=Rd(f|0,L|0,18)|0;z=D;v=Pd(f|0,L|0,46)|0;z=l^(z|D);l=Rd(f|0,L|0,41)|0;x=D;e=Pd(f|0,L|0,23)|0;x=z^(x|D);z=c[h+80+552>>2]|0;J=c[h+80+552+4>>2]|0;F=oe(I|0,F|0,-1563912026,174292421)|0;x=oe(F|0,D|0,(n|u)^(t|v)^(l|e)|0,x|0)|0;J=oe(x|0,D|0,z|0,J|0)|0;J=oe(J|0,D|0,(j^y)&f^j|0,(s^q)&L^s|0)|0;z=D;x=Rd(o|0,p|0,28)|0;e=D;l=Pd(o|0,p|0,36)|0;e=e|D;v=Rd(o|0,p|0,34)|0;t=D;u=Pd(o|0,p|0,30)|0;t=e^(t|D);e=Rd(o|0,p|0,39)|0;n=D;F=Pd(o|0,p|0,25)|0;I=c[A>>2]|0;E=c[A+4>>2]|0;n=oe((I|b)&o|I&b|0,(E|H)&p|E&H|0,(x|l)^(v|u)^(e|F)|0,t^(n|D)|0)|0;t=D;r=oe(K|0,r|0,J|0,z|0)|0;K=D;c[k>>2]=r;c[k+4>>2]=K;z=oe(n|0,t|0,J|0,z|0)|0;J=D;c[B>>2]=z;c[B+4>>2]=J;t=Rd(r|0,K|0,14)|0;n=D;F=Pd(r|0,K|0,50)|0;n=n|D;e=Rd(r|0,K|0,18)|0;u=D;v=Pd(r|0,K|0,46)|0;u=n^(u|D);n=Rd(r|0,K|0,41)|0;l=D;x=Pd(r|0,K|0,23)|0;l=u^(l|D);u=c[h+80+560>>2]|0;H=c[h+80+560+4>>2]|0;s=oe(j|0,s|0,-1090974290,289380356)|0;l=oe(s|0,D|0,(t|F)^(e|v)^(n|x)|0,l|0)|0;H=oe(l|0,D|0,u|0,H|0)|0;H=oe(H|0,D|0,(y^f)&r^y|0,(q^L)&K^q|0)|0;u=D;l=Rd(z|0,J|0,28)|0;x=D;n=Pd(z|0,J|0,36)|0;x=x|D;v=Rd(z|0,J|0,34)|0;e=D;F=Pd(z|0,J|0,30)|0;e=x^(e|D);x=Rd(z|0,J|0,39)|0;t=D;s=Pd(z|0,J|0,25)|0;j=c[w>>2]|0;b=c[w+4>>2]|0;t=oe((j|o)&z|j&o|0,(b|p)&J|b&p|0,(l|n)^(v|F)^(x|s)|0,e^(t|D)|0)|0;e=D;E=oe(I|0,E|0,H|0,u|0)|0;I=D;c[A>>2]=E;c[A+4>>2]=I;u=oe(t|0,e|0,H|0,u|0)|0;H=D;c[C>>2]=u;c[C+4>>2]=H;e=Rd(E|0,I|0,14)|0;t=D;s=Pd(E|0,I|0,50)|0;t=t|D;x=Rd(E|0,I|0,18)|0;F=D;v=Pd(E|0,I|0,46)|0;F=t^(F|D);t=Rd(E|0,I|0,41)|0;n=D;l=Pd(E|0,I|0,23)|0;n=F^(n|D);F=c[h+80+568>>2]|0;p=c[h+80+568+4>>2]|0;q=oe(y|0,q|0,320620315,460393269)|0;n=oe(q|0,D|0,(e|s)^(x|v)^(t|l)|0,n|0)|0;p=oe(n|0,D|0,F|0,p|0)|0;p=oe(p|0,D|0,(f^r)&E^f|0,(L^K)&I^L|0)|0;F=D;n=Rd(u|0,H|0,28)|0;l=D;t=Pd(u|0,H|0,36)|0;l=l|D;v=Rd(u|0,H|0,34)|0;x=D;s=Pd(u|0,H|0,30)|0;x=l^(x|D);l=Rd(u|0,H|0,39)|0;e=D;q=Pd(u|0,H|0,25)|0;y=c[m>>2]|0;o=c[m+4>>2]|0;e=oe((y|z)&u|y&z|0,(o|J)&H|o&J|0,(n|t)^(v|s)^(l|q)|0,x^(e|D)|0)|0;x=D;b=oe(j|0,b|0,p|0,F|0)|0;j=D;c[w>>2]=b;c[w+4>>2]=j;F=oe(e|0,x|0,p|0,F|0)|0;p=D;c[h+16>>2]=F;c[h+16+4>>2]=p;x=Rd(b|0,j|0,14)|0;e=D;q=Pd(b|0,j|0,50)|0;e=e|D;l=Rd(b|0,j|0,18)|0;s=D;v=Pd(b|0,j|0,46)|0;s=e^(s|D);e=Rd(b|0,j|0,41)|0;t=D;n=Pd(b|0,j|0,23)|0;t=s^(t|D);s=c[h+80+576>>2]|0;J=c[h+80+576+4>>2]|0;L=oe(f|0,L|0,587496836,685471733)|0;t=oe(L|0,D|0,(x|q)^(l|v)^(e|n)|0,t|0)|0;J=oe(t|0,D|0,s|0,J|0)|0;J=oe(J|0,D|0,(r^E)&b^r|0,(K^I)&j^K|0)|0;s=D;t=Rd(F|0,p|0,28)|0;n=D;e=Pd(F|0,p|0,36)|0;n=n|D;v=Rd(F|0,p|0,34)|0;l=D;q=Pd(F|0,p|0,30)|0;l=n^(l|D);n=Rd(F|0,p|0,39)|0;x=D;L=Pd(F|0,p|0,25)|0;f=c[B>>2]|0;z=c[B+4>>2]|0;x=oe((f|u)&F|f&u|0,(z|H)&p|z&H|0,(t|e)^(v|q)^(n|L)|0,l^(x|D)|0)|0;l=D;o=oe(y|0,o|0,J|0,s|0)|0;y=D;c[m>>2]=o;c[m+4>>2]=y;s=oe(x|0,l|0,J|0,s|0)|0;J=D;c[G>>2]=s;c[G+4>>2]=J;l=Rd(o|0,y|0,14)|0;x=D;L=Pd(o|0,y|0,50)|0;x=x|D;n=Rd(o|0,y|0,18)|0;q=D;v=Pd(o|0,y|0,46)|0;q=x^(q|D);x=Rd(o|0,y|0,41)|0;e=D;t=Pd(o|0,y|0,23)|0;e=q^(e|D);q=c[h+80+584>>2]|0;H=c[h+80+584+4>>2]|0;K=oe(r|0,K|0,1086792851,852142971)|0;e=oe(K|0,D|0,(l|L)^(n|v)^(x|t)|0,e|0)|0;H=oe(e|0,D|0,q|0,H|0)|0;H=oe(H|0,D|0,(E^b)&o^E|0,(I^j)&y^I|0)|0;q=D;e=Rd(s|0,J|0,28)|0;t=D;x=Pd(s|0,J|0,36)|0;t=t|D;v=Rd(s|0,J|0,34)|0;n=D;L=Pd(s|0,J|0,30)|0;n=t^(n|D);t=Rd(s|0,J|0,39)|0;l=D;K=Pd(s|0,J|0,25)|0;r=c[C>>2]|0;u=c[C+4>>2]|0;l=oe((r|F)&s|r&F|0,(u|p)&J|u&p|0,(e|x)^(v|L)^(t|K)|0,n^(l|D)|0)|0;n=D;z=oe(f|0,z|0,H|0,q|0)|0;f=D;c[B>>2]=z;c[B+4>>2]=f;q=oe(l|0,n|0,H|0,q|0)|0;H=D;c[k>>2]=q;c[k+4>>2]=H;n=Rd(z|0,f|0,14)|0;l=D;K=Pd(z|0,f|0,50)|0;l=l|D;t=Rd(z|0,f|0,18)|0;L=D;v=Pd(z|0,f|0,46)|0;L=l^(L|D);l=Rd(z|0,f|0,41)|0;x=D;e=Pd(z|0,f|0,23)|0;x=L^(x|D);L=c[h+80+592>>2]|0;p=c[h+80+592+4>>2]|0;I=oe(E|0,I|0,365543100,1017036298)|0;x=oe(I|0,D|0,(n|K)^(t|v)^(l|e)|0,x|0)|0;p=oe(x|0,D|0,L|0,p|0)|0;p=oe(p|0,D|0,(b^o)&z^b|0,(j^y)&f^j|0)|0;L=D;x=Rd(q|0,H|0,28)|0;e=D;l=Pd(q|0,H|0,36)|0;e=e|D;v=Rd(q|0,H|0,34)|0;t=D;K=Pd(q|0,H|0,30)|0;t=e^(t|D);e=Rd(q|0,H|0,39)|0;n=D;I=Pd(q|0,H|0,25)|0;E=c[h+16>>2]|0;F=c[h+16+4>>2]|0;n=oe((E|s)&q|E&s|0,(F|J)&H|F&J|0,(x|l)^(v|K)^(e|I)|0,t^(n|D)|0)|0;t=D;u=oe(r|0,u|0,p|0,L|0)|0;r=D;c[C>>2]=u;c[C+4>>2]=r;L=oe(n|0,t|0,p|0,L|0)|0;p=D;c[A>>2]=L;c[A+4>>2]=p;t=Rd(u|0,r|0,14)|0;n=D;I=Pd(u|0,r|0,50)|0;n=n|D;e=Rd(u|0,r|0,18)|0;K=D;v=Pd(u|0,r|0,46)|0;K=n^(K|D);n=Rd(u|0,r|0,41)|0;l=D;x=Pd(u|0,r|0,23)|0;l=K^(l|D);K=c[h+80+600>>2]|0;J=c[h+80+600+4>>2]|0;j=oe(b|0,j|0,-1676669620,1126000580)|0;l=oe(j|0,D|0,(t|I)^(e|v)^(n|x)|0,l|0)|0;J=oe(l|0,D|0,K|0,J|0)|0;J=oe(J|0,D|0,(o^z)&u^o|0,(y^f)&r^y|0)|0;K=D;l=Rd(L|0,p|0,28)|0;x=D;n=Pd(L|0,p|0,36)|0;x=x|D;v=Rd(L|0,p|0,34)|0;e=D;I=Pd(L|0,p|0,30)|0;e=x^(e|D);x=Rd(L|0,p|0,39)|0;t=D;j=Pd(L|0,p|0,25)|0;b=c[G>>2]|0;s=c[G+4>>2]|0;t=oe((b|q)&L|b&q|0,(s|H)&p|s&H|0,(l|n)^(v|I)^(x|j)|0,e^(t|D)|0)|0;e=D;F=oe(E|0,F|0,J|0,K|0)|0;E=D;c[h+16>>2]=F;c[h+16+4>>2]=E;K=oe(t|0,e|0,J|0,K|0)|0;J=D;c[w>>2]=K;c[w+4>>2]=J;e=Rd(F|0,E|0,14)|0;t=D;j=Pd(F|0,E|0,50)|0;t=t|D;x=Rd(F|0,E|0,18)|0;I=D;v=Pd(F|0,E|0,46)|0;I=t^(I|D);t=Rd(F|0,E|0,41)|0;n=D;l=Pd(F|0,E|0,23)|0;n=I^(n|D);I=c[h+80+608>>2]|0;H=c[h+80+608+4>>2]|0;y=oe(o|0,y|0,-885112138,1288033470)|0;n=oe(y|0,D|0,(e|j)^(x|v)^(t|l)|0,n|0)|0;H=oe(n|0,D|0,I|0,H|0)|0;H=oe(H|0,D|0,(z^u)&F^z|0,(f^r)&E^f|0)|0;I=D;n=Rd(K|0,J|0,28)|0;l=D;t=Pd(K|0,J|0,36)|0;l=l|D;v=Rd(K|0,J|0,34)|0;x=D;j=Pd(K|0,J|0,30)|0;x=l^(x|D);l=Rd(K|0,J|0,39)|0;e=D;y=Pd(K|0,J|0,25)|0;o=c[k>>2]|0;q=c[k+4>>2]|0;e=oe((o|L)&K|o&L|0,(q|p)&J|q&p|0,(n|t)^(v|j)^(l|y)|0,x^(e|D)|0)|0;x=D;s=oe(b|0,s|0,H|0,I|0)|0;b=D;c[G>>2]=s;c[G+4>>2]=b;I=oe(e|0,x|0,H|0,I|0)|0;H=D;c[m>>2]=I;c[m+4>>2]=H;x=Rd(s|0,b|0,14)|0;e=D;G=Pd(s|0,b|0,50)|0;e=e|D;y=Rd(s|0,b|0,18)|0;l=D;j=Pd(s|0,b|0,46)|0;l=e^(l|D);e=Rd(s|0,b|0,41)|0;v=D;t=Pd(s|0,b|0,23)|0;v=l^(v|D);l=c[h+80+616>>2]|0;n=c[h+80+616+4>>2]|0;f=oe(z|0,f|0,-60457430,1501505948)|0;v=oe(f|0,D|0,(x|G)^(y|j)^(e|t)|0,v|0)|0;n=oe(v|0,D|0,l|0,n|0)|0;n=oe(n|0,D|0,(u^F)&s^u|0,(r^E)&b^r|0)|0;l=D;v=Rd(I|0,H|0,28)|0;t=D;e=Pd(I|0,H|0,36)|0;t=t|D;j=Rd(I|0,H|0,34)|0;y=D;G=Pd(I|0,H|0,30)|0;y=t^(y|D);t=Rd(I|0,H|0,39)|0;x=D;f=Pd(I|0,H|0,25)|0;z=c[A>>2]|0;p=c[A+4>>2]|0;x=oe((z|K)&I|z&K|0,(p|J)&H|p&J|0,(v|e)^(j|G)^(t|f)|0,y^(x|D)|0)|0;y=D;q=oe(o|0,q|0,n|0,l|0)|0;o=D;c[k>>2]=q;c[k+4>>2]=o;l=oe(x|0,y|0,n|0,l|0)|0;n=D;c[B>>2]=l;c[B+4>>2]=n;B=Rd(q|0,o|0,14)|0;y=D;x=Pd(q|0,o|0,50)|0;y=y|D;k=Rd(q|0,o|0,18)|0;f=D;t=Pd(q|0,o|0,46)|0;f=y^(f|D);y=Rd(q|0,o|0,41)|0;G=D;j=Pd(q|0,o|0,23)|0;G=f^(G|D);f=c[h+80+624>>2]|0;e=c[h+80+624+4>>2]|0;r=oe(u|0,r|0,987167468,1607167915)|0;G=oe(r|0,D|0,(B|x)^(k|t)^(y|j)|0,G|0)|0;e=oe(G|0,D|0,f|0,e|0)|0;e=oe(e|0,D|0,(F^s)&q^F|0,(E^b)&o^E|0)|0;f=D;G=Rd(l|0,n|0,28)|0;j=D;y=Pd(l|0,n|0,36)|0;j=j|D;t=Rd(l|0,n|0,34)|0;k=D;x=Pd(l|0,n|0,30)|0;k=j^(k|D);j=Rd(l|0,n|0,39)|0;B=D;r=Pd(l|0,n|0,25)|0;u=c[w>>2]|0;v=c[w+4>>2]|0;B=oe((u|I)&l|u&I|0,(v|H)&n|v&H|0,(G|y)^(t|x)^(j|r)|0,k^(B|D)|0)|0;k=D;p=oe(z|0,p|0,e|0,f|0)|0;z=D;c[A>>2]=p;c[A+4>>2]=z;f=oe(B|0,k|0,e|0,f|0)|0;e=D;c[C>>2]=f;c[C+4>>2]=e;C=Rd(p|0,z|0,14)|0;k=D;B=Pd(p|0,z|0,50)|0;k=k|D;A=Rd(p|0,z|0,18)|0;r=D;j=Pd(p|0,z|0,46)|0;r=k^(r|D);k=Rd(p|0,z|0,41)|0;x=D;t=Pd(p|0,z|0,23)|0;x=r^(x|D);r=c[h+80+632>>2]|0;y=c[h+80+632+4>>2]|0;E=oe(F|0,E|0,1246189591,1816402316)|0;x=oe(E|0,D|0,(C|B)^(A|j)^(k|t)|0,x|0)|0;y=oe(x|0,D|0,r|0,y|0)|0;b=oe(y|0,D|0,(s^q)&p^s|0,(b^o)&z^b|0)|0;z=D;c[h+8>>2]=b;c[h+8+4>>2]=z;o=Rd(f|0,e|0,28)|0;s=D;p=Pd(f|0,e|0,36)|0;s=s|D;q=Rd(f|0,e|0,34)|0;y=D;r=Pd(f|0,e|0,30)|0;y=s^(y|D);s=Rd(f|0,e|0,39)|0;x=D;t=Pd(f|0,e|0,25)|0;k=c[m>>2]|0;m=c[m+4>>2]|0;x=oe((k|l)&f|k&l|0,(m|n)&e|m&n|0,(o|p)^(q|r)^(s|t)|0,y^(x|D)|0)|0;y=D;c[h>>2]=x;c[h+4>>2]=y;v=oe(u|0,v|0,b|0,z|0)|0;c[w>>2]=v;c[w+4>>2]=D;z=oe(x|0,y|0,b|0,z|0)|0;b=D;c[h+16>>2]=z;c[h+16+4>>2]=b;b=oe(c[a>>2]|0,c[a+4>>2]|0,z|0,b|0)|0;c[a>>2]=b;c[a+4>>2]=D;b=1;while(1){M=a+(b<<3)|0;e=oe(c[M>>2]|0,c[M+4>>2]|0,f|0,e|0)|0;c[M>>2]=e;c[M+4>>2]=D;e=b+1|0;if((e|0)==8)break;b=e;f=c[h+16+(e<<3)>>2]|0;e=c[h+16+(e<<3)+4>>2]|0}fd(h+80|0,640);fd(h+16|0,64);fd(h+8|0,8);fd(h,8);i=g;return}function ia(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;O=i;P=i=i+63&-64;i=i+128|0;v=d[b>>0]|d[b+1>>0]<<8|d[b+2>>0]<<16|d[b+3>>0]<<24;H=d[b+4>>0]|d[b+4+1>>0]<<8|d[b+4+2>>0]<<16|d[b+4+3>>0]<<24;h=d[b+8>>0]|d[b+8+1>>0]<<8|d[b+8+2>>0]<<16|d[b+8+3>>0]<<24;j=d[b+8+4>>0]|d[b+8+4+1>>0]<<8|d[b+8+4+2>>0]<<16|d[b+8+4+3>>0]<<24;k=d[b+16>>0]|d[b+16+1>>0]<<8|d[b+16+2>>0]<<16|d[b+16+3>>0]<<24;l=d[b+16+4>>0]|d[b+16+4+1>>0]<<8|d[b+16+4+2>>0]<<16|d[b+16+4+3>>0]<<24;m=d[b+24>>0]|d[b+24+1>>0]<<8|d[b+24+2>>0]<<16|d[b+24+3>>0]<<24;n=d[b+24+4>>0]|d[b+24+4+1>>0]<<8|d[b+24+4+2>>0]<<16|d[b+24+4+3>>0]<<24;o=d[b+32>>0]|d[b+32+1>>0]<<8|d[b+32+2>>0]<<16|d[b+32+3>>0]<<24;p=d[b+32+4>>0]|d[b+32+4+1>>0]<<8|d[b+32+4+2>>0]<<16|d[b+32+4+3>>0]<<24;q=d[b+40>>0]|d[b+40+1>>0]<<8|d[b+40+2>>0]<<16|d[b+40+3>>0]<<24;r=d[b+40+4>>0]|d[b+40+4+1>>0]<<8|d[b+40+4+2>>0]<<16|d[b+40+4+3>>0]<<24;s=d[b+48>>0]|d[b+48+1>>0]<<8|d[b+48+2>>0]<<16|d[b+48+3>>0]<<24;t=d[b+48+4>>0]|d[b+48+4+1>>0]<<8|d[b+48+4+2>>0]<<16|d[b+48+4+3>>0]<<24;u=d[b+56>>0]|d[b+56+1>>0]<<8|d[b+56+2>>0]<<16|d[b+56+3>>0]<<24;w=d[b+56+4>>0]|d[b+56+4+1>>0]<<8|d[b+56+4+2>>0]<<16|d[b+56+4+3>>0]<<24;x=d[b+64>>0]|d[b+64+1>>0]<<8|d[b+64+2>>0]<<16|d[b+64+3>>0]<<24;y=d[b+64+4>>0]|d[b+64+4+1>>0]<<8|d[b+64+4+2>>0]<<16|d[b+64+4+3>>0]<<24;z=d[b+72>>0]|d[b+72+1>>0]<<8|d[b+72+2>>0]<<16|d[b+72+3>>0]<<24;A=d[b+72+4>>0]|d[b+72+4+1>>0]<<8|d[b+72+4+2>>0]<<16|d[b+72+4+3>>0]<<24;B=d[b+80>>0]|d[b+80+1>>0]<<8|d[b+80+2>>0]<<16|d[b+80+3>>0]<<24;C=d[b+80+4>>0]|d[b+80+4+1>>0]<<8|d[b+80+4+2>>0]<<16|d[b+80+4+3>>0]<<24;E=d[b+88>>0]|d[b+88+1>>0]<<8|d[b+88+2>>0]<<16|d[b+88+3>>0]<<24;F=d[b+88+4>>0]|d[b+88+4+1>>0]<<8|d[b+88+4+2>>0]<<16|d[b+88+4+3>>0]<<24;G=d[b+96>>0]|d[b+96+1>>0]<<8|d[b+96+2>>0]<<16|d[b+96+3>>0]<<24;I=d[b+96+4>>0]|d[b+96+4+1>>0]<<8|d[b+96+4+2>>0]<<16|d[b+96+4+3>>0]<<24;J=d[b+104>>0]|d[b+104+1>>0]<<8|d[b+104+2>>0]<<16|d[b+104+3>>0]<<24;K=d[b+104+4>>0]|d[b+104+4+1>>0]<<8|d[b+104+4+2>>0]<<16|d[b+104+4+3>>0]<<24;L=d[b+112>>0]|d[b+112+1>>0]<<8|d[b+112+2>>0]<<16|d[b+112+3>>0]<<24;M=d[b+112+4>>0]|d[b+112+4+1>>0]<<8|d[b+112+4+2>>0]<<16|d[b+112+4+3>>0]<<24;N=d[b+120>>0]|d[b+120+1>>0]<<8|d[b+120+2>>0]<<16|d[b+120+3>>0]<<24;b=d[b+120+4>>0]|d[b+120+4+1>>0]<<8|d[b+120+4+2>>0]<<16|d[b+120+4+3>>0]<<24;e=P;f=a;g=e+64|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));c[P+80>>2]=-23791573;c[P+80+4>>2]=1013904242;c[P+88>>2]=1595750129;c[P+88+4>>2]=-1521486534;Y=c[a+64>>2]^-1377402159;ha=c[a+64+4>>2]^1359893119;$=c[a+72>>2]^725511199;R=c[a+72+4>>2]^-1694144372;V=c[a+80>>2]^-79577749;ba=c[a+80+4>>2]^528734635;ka=c[a+88>>2]^327033209;ga=c[a+88+4>>2]^1541459225;c[P+120>>2]=ka;c[P+120+4>>2]=ga;X=c[P+32>>2]|0;da=c[P+32+4>>2]|0;la=oe(X|0,da|0,c[P>>2]|0,c[P+4>>2]|0)|0;la=oe(la|0,D|0,v|0,H|0)|0;ja=D;U=oe(ha^ja|0,Y^la|0,-205731576,1779033703)|0;ea=D;Z=Rd(X^U|0,da^ea|0,24)|0;e=D;da=Pd(X^U|0,da^ea|0,40)|0;e=D|e;X=oe(da|Z|0,e|0,la|0,ja|0)|0;X=oe(X|0,D|0,h|0,j|0)|0;Q=D;c[P>>2]=X;c[P+4>>2]=Q;_=Rd(ha^ja^X|0,Y^la^Q|0,16)|0;g=D;la=Pd(ha^ja^X|0,Y^la^Q|0,48)|0;g=D|g;c[P+96>>2]=la|_;c[P+96+4>>2]=g;ea=oe(la|_|0,g|0,U|0,ea|0)|0;U=D;c[P+64>>2]=ea;c[P+64+4>>2]=U;g=Rd((da|Z)^ea|0,e^U|0,63)|0;_=D;U=Pd((da|Z)^ea|0,e^U|0,1)|0;c[P+32>>2]=U|g;c[P+32+4>>2]=D|_;_=c[P+40>>2]|0;g=c[P+40+4>>2]|0;U=oe(_|0,g|0,c[P+8>>2]|0,c[P+8+4>>2]|0)|0;U=oe(U|0,D|0,k|0,l|0)|0;e=D;ea=oe(R^e|0,$^U|0,-2067093701,-1150833019)|0;Z=D;da=Rd(_^ea|0,g^Z|0,24)|0;la=D;g=Pd(_^ea|0,g^Z|0,40)|0;la=D|la;_=oe(g|da|0,la|0,U|0,e|0)|0;_=oe(_|0,D|0,m|0,n|0)|0;Y=D;c[P+8>>2]=_;c[P+8+4>>2]=Y;ja=Rd(R^e^_|0,$^U^Y|0,16)|0;ha=D;U=Pd(R^e^_|0,$^U^Y|0,48)|0;ha=D|ha;c[P+104>>2]=U|ja;c[P+104+4>>2]=ha;Z=oe(U|ja|0,ha|0,ea|0,Z|0)|0;ea=D;c[P+72>>2]=Z;c[P+72+4>>2]=ea;ha=Rd((g|da)^Z|0,la^ea|0,63)|0;ja=D;ea=Pd((g|da)^Z|0,la^ea|0,1)|0;ja=D|ja;la=c[P+48>>2]|0;Z=c[P+48+4>>2]|0;da=oe(la|0,Z|0,c[P+16>>2]|0,c[P+16+4>>2]|0)|0;da=oe(da|0,D|0,o|0,p|0)|0;g=D;U=oe(ba^g|0,V^da|0,-23791573,1013904242)|0;$=D;e=Rd(la^U|0,Z^$|0,24)|0;R=D;Z=Pd(la^U|0,Z^$|0,40)|0;R=D|R;la=oe(Z|e|0,R|0,da|0,g|0)|0;la=oe(la|0,D|0,q|0,r|0)|0;W=D;c[P+16>>2]=la;c[P+16+4>>2]=W;ia=Rd(ba^g^la|0,V^da^W|0,16)|0;fa=D;da=Pd(ba^g^la|0,V^da^W|0,48)|0;fa=D|fa;c[P+112>>2]=da|ia;c[P+112+4>>2]=fa;$=oe(da|ia|0,fa|0,U|0,$|0)|0;U=D;fa=Rd((Z|e)^$|0,R^U|0,63)|0;ia=D;R=Pd((Z|e)^$|0,R^U|0,1)|0;ia=D|ia;e=c[P+56>>2]|0;Z=c[P+56+4>>2]|0;da=oe(e|0,Z|0,c[P+24>>2]|0,c[P+24+4>>2]|0)|0;da=oe(da|0,D|0,s|0,t|0)|0;V=D;g=oe(ga^V|0,ka^da|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;ba=D;f=Rd(e^g|0,Z^ba|0,24)|0;aa=D;Z=Pd(e^g|0,Z^ba|0,40)|0;aa=D|aa;e=oe(Z|f|0,aa|0,da|0,V|0)|0;e=oe(e|0,D|0,u|0,w|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;ca=Rd(ga^V^e|0,ka^da^S|0,16)|0;ma=D;da=Pd(ga^V^e|0,ka^da^S|0,48)|0;ma=D|ma;ba=oe(da|ca|0,ma|0,g|0,ba|0)|0;g=D;ka=Rd((Z|f)^ba|0,aa^g|0,63)|0;V=D;aa=Pd((Z|f)^ba|0,aa^g|0,1)|0;V=D|V;Q=oe(ea|ha|0,ja|0,X|0,Q|0)|0;Q=oe(Q|0,D|0,x|0,y|0)|0;X=D;U=oe(ma^X|0,(da|ca)^Q|0,$|0,U|0)|0;$=D;f=Rd((ea|ha)^U|0,ja^$|0,24)|0;Z=D;ja=Pd((ea|ha)^U|0,ja^$|0,40)|0;Z=D|Z;ha=oe(ja|f|0,Z|0,Q|0,X|0)|0;ha=oe(ha|0,D|0,z|0,A|0)|0;ea=D;c[P>>2]=ha;c[P+4>>2]=ea;ga=Rd(ma^X^ha|0,(da|ca)^Q^ea|0,16)|0;T=D;Q=Pd(ma^X^ha|0,(da|ca)^Q^ea|0,48)|0;T=D|T;c[P+120>>2]=Q|ga;c[P+120+4>>2]=T;$=oe(Q|ga|0,T|0,U|0,$|0)|0;U=D;c[P+80>>2]=$;c[P+80+4>>2]=U;T=Rd((ja|f)^$|0,Z^U|0,63)|0;ga=D;U=Pd((ja|f)^$|0,Z^U|0,1)|0;c[P+40>>2]=U|T;c[P+40+4>>2]=D|ga;Y=oe(R|fa|0,ia|0,_|0,Y|0)|0;Y=oe(Y|0,D|0,B|0,C|0)|0;_=D;ga=c[P+96>>2]^Y;T=c[P+96+4>>2]^_;g=oe(T|0,ga|0,ba|0,g|0)|0;ba=D;U=Rd((R|fa)^g|0,ia^ba|0,24)|0;Z=D;ia=Pd((R|fa)^g|0,ia^ba|0,40)|0;Z=D|Z;_=oe(ia|U|0,Z|0,Y|0,_|0)|0;_=oe(_|0,D|0,E|0,F|0)|0;Y=D;c[P+8>>2]=_;c[P+8+4>>2]=Y;fa=Rd(T^_|0,ga^Y|0,16)|0;R=D;ga=Pd(T^_|0,ga^Y|0,48)|0;R=D|R;ba=oe(ga|fa|0,R|0,g|0,ba|0)|0;g=D;c[P+88>>2]=ba;c[P+88+4>>2]=g;T=Rd((ia|U)^ba|0,Z^g|0,63)|0;$=D;g=Pd((ia|U)^ba|0,Z^g|0,1)|0;c[P+48>>2]=g|T;c[P+48+4>>2]=D|$;W=oe(aa|ka|0,V|0,la|0,W|0)|0;W=oe(W|0,D|0,G|0,I|0)|0;la=D;$=c[P+104>>2]^W;T=c[P+104+4>>2]^la;g=oe(T|0,$|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;Z=D;ba=Rd((aa|ka)^g|0,V^Z|0,24)|0;U=D;V=Pd((aa|ka)^g|0,V^Z|0,40)|0;U=D|U;la=oe(V|ba|0,U|0,W|0,la|0)|0;la=oe(la|0,D|0,J|0,K|0)|0;W=D;c[P+16>>2]=la;c[P+16+4>>2]=W;ka=Rd(T^la|0,$^W|0,16)|0;aa=D;$=Pd(T^la|0,$^W|0,48)|0;aa=D|aa;Z=oe($|ka|0,aa|0,g|0,Z|0)|0;g=D;T=Rd((V|ba)^Z|0,U^g|0,63)|0;ia=D;U=Pd((V|ba)^Z|0,U^g|0,1)|0;c[P+56>>2]=U|T;c[P+56+4>>2]=D|ia;ia=c[P+32>>2]|0;T=c[P+32+4>>2]|0;S=oe(ia|0,T|0,e|0,S|0)|0;S=oe(S|0,D|0,L|0,M|0)|0;e=D;U=c[P+112>>2]^S;ba=c[P+112+4>>2]^e;V=oe(ba|0,U|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;f=D;ja=Rd(ia^V|0,T^f|0,24)|0;Q=D;T=Pd(ia^V|0,T^f|0,40)|0;Q=D|Q;e=oe(T|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,N|0,b|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;ia=Rd(ba^e|0,U^S|0,16)|0;ca=D;U=Pd(ba^e|0,U^S|0,48)|0;ca=D|ca;f=oe(U|ia|0,ca|0,V|0,f|0)|0;V=D;ba=Rd((T|ja)^f|0,Q^V|0,63)|0;da=D;Q=Pd((T|ja)^f|0,Q^V|0,1)|0;da=D|da;ea=oe(Q|ba|0,da|0,ha|0,ea|0)|0;ea=oe(ea|0,D|0,L|0,M|0)|0;ha=D;g=oe(R^ha|0,(ga|fa)^ea|0,Z|0,g|0)|0;Z=D;ja=Rd((Q|ba)^g|0,da^Z|0,24)|0;T=D;da=Pd((Q|ba)^g|0,da^Z|0,40)|0;T=D|T;ba=oe(da|ja|0,T|0,ea|0,ha|0)|0;ba=oe(ba|0,D|0,B|0,C|0)|0;Q=D;c[P>>2]=ba;c[P+4>>2]=Q;X=Rd(R^ha^ba|0,(ga|fa)^ea^Q|0,16)|0;ma=D;ea=Pd(R^ha^ba|0,(ga|fa)^ea^Q|0,48)|0;ma=D|ma;c[P+96>>2]=ea|X;c[P+96+4>>2]=ma;Z=oe(ea|X|0,ma|0,g|0,Z|0)|0;g=D;c[P+64>>2]=Z;c[P+64+4>>2]=g;ma=Rd((da|ja)^Z|0,T^g|0,63)|0;X=D;g=Pd((da|ja)^Z|0,T^g|0,1)|0;c[P+32>>2]=g|ma;c[P+32+4>>2]=D|X;X=c[P+40>>2]|0;ma=c[P+40+4>>2]|0;Y=oe(X|0,ma|0,_|0,Y|0)|0;Y=oe(Y|0,D|0,o|0,p|0)|0;_=D;V=oe(aa^_|0,($|ka)^Y|0,f|0,V|0)|0;f=D;g=Rd(X^V|0,ma^f|0,24)|0;T=D;ma=Pd(X^V|0,ma^f|0,40)|0;T=D|T;X=oe(ma|g|0,T|0,Y|0,_|0)|0;X=oe(X|0,D|0,x|0,y|0)|0;Z=D;c[P+8>>2]=X;c[P+8+4>>2]=Z;ja=Rd(aa^_^X|0,($|ka)^Y^Z|0,16)|0;da=D;Y=Pd(aa^_^X|0,($|ka)^Y^Z|0,48)|0;da=D|da;c[P+104>>2]=Y|ja;c[P+104+4>>2]=da;f=oe(Y|ja|0,da|0,V|0,f|0)|0;V=D;c[P+72>>2]=f;c[P+72+4>>2]=V;da=Rd((ma|g)^f|0,T^V|0,63)|0;ja=D;V=Pd((ma|g)^f|0,T^V|0,1)|0;ja=D|ja;T=c[P+48>>2]|0;f=c[P+48+4>>2]|0;W=oe(T|0,f|0,la|0,W|0)|0;W=oe(W|0,D|0,z|0,A|0)|0;la=D;g=oe(ca^la|0,(U|ia)^W|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;ma=D;Y=Rd(T^g|0,f^ma|0,24)|0;ka=D;f=Pd(T^g|0,f^ma|0,40)|0;ka=D|ka;T=oe(f|Y|0,ka|0,W|0,la|0)|0;T=oe(T|0,D|0,N|0,b|0)|0;$=D;c[P+16>>2]=T;c[P+16+4>>2]=$;_=Rd(ca^la^T|0,(U|ia)^W^$|0,16)|0;aa=D;W=Pd(ca^la^T|0,(U|ia)^W^$|0,48)|0;aa=D|aa;c[P+112>>2]=W|_;c[P+112+4>>2]=aa;ma=oe(W|_|0,aa|0,g|0,ma|0)|0;g=D;aa=Rd((f|Y)^ma|0,ka^g|0,63)|0;_=D;ka=Pd((f|Y)^ma|0,ka^g|0,1)|0;_=D|_;Y=c[P+56>>2]|0;f=c[P+56+4>>2]|0;S=oe(Y|0,f|0,e|0,S|0)|0;S=oe(S|0,D|0,J|0,K|0)|0;e=D;W=c[P+120>>2]^S;ia=c[P+120+4>>2]^e;U=oe(ia|0,W|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;la=D;ca=Rd(Y^U|0,f^la|0,24)|0;ea=D;f=Pd(Y^U|0,f^la|0,40)|0;ea=D|ea;e=oe(f|ca|0,ea|0,S|0,e|0)|0;e=oe(e|0,D|0,s|0,t|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;Y=Rd(ia^e|0,W^S|0,16)|0;fa=D;W=Pd(ia^e|0,W^S|0,48)|0;fa=D|fa;la=oe(W|Y|0,fa|0,U|0,la|0)|0;U=D;ia=Rd((f|ca)^la|0,ea^U|0,63)|0;ga=D;ea=Pd((f|ca)^la|0,ea^U|0,1)|0;ga=D|ga;Q=oe(V|da|0,ja|0,ba|0,Q|0)|0;Q=oe(Q|0,D|0,h|0,j|0)|0;ba=D;g=oe(fa^ba|0,(W|Y)^Q|0,ma|0,g|0)|0;ma=D;ca=Rd((V|da)^g|0,ja^ma|0,24)|0;f=D;ja=Pd((V|da)^g|0,ja^ma|0,40)|0;f=D|f;da=oe(ja|ca|0,f|0,Q|0,ba|0)|0;da=oe(da|0,D|0,G|0,I|0)|0;V=D;c[P>>2]=da;c[P+4>>2]=V;ha=Rd(fa^ba^da|0,(W|Y)^Q^V|0,16)|0;R=D;Q=Pd(fa^ba^da|0,(W|Y)^Q^V|0,48)|0;R=D|R;c[P+120>>2]=Q|ha;c[P+120+4>>2]=R;ma=oe(Q|ha|0,R|0,g|0,ma|0)|0;g=D;c[P+80>>2]=ma;c[P+80+4>>2]=g;R=Rd((ja|ca)^ma|0,f^g|0,63)|0;ha=D;g=Pd((ja|ca)^ma|0,f^g|0,1)|0;c[P+40>>2]=g|R;c[P+40+4>>2]=D|ha;Z=oe(ka|aa|0,_|0,X|0,Z|0)|0;Z=oe(Z|0,D|0,v|0,H|0)|0;X=D;ha=c[P+96>>2]^Z;R=c[P+96+4>>2]^X;U=oe(R|0,ha|0,la|0,U|0)|0;la=D;g=Rd((ka|aa)^U|0,_^la|0,24)|0;f=D;_=Pd((ka|aa)^U|0,_^la|0,40)|0;f=D|f;X=oe(_|g|0,f|0,Z|0,X|0)|0;X=oe(X|0,D|0,k|0,l|0)|0;Z=D;c[P+8>>2]=X;c[P+8+4>>2]=Z;aa=Rd(R^X|0,ha^Z|0,16)|0;ka=D;ha=Pd(R^X|0,ha^Z|0,48)|0;ka=D|ka;la=oe(ha|aa|0,ka|0,U|0,la|0)|0;U=D;c[P+88>>2]=la;c[P+88+4>>2]=U;R=Rd((_|g)^la|0,f^U|0,63)|0;ma=D;U=Pd((_|g)^la|0,f^U|0,1)|0;c[P+48>>2]=U|R;c[P+48+4>>2]=D|ma;$=oe(ea|ia|0,ga|0,T|0,$|0)|0;$=oe($|0,D|0,E|0,F|0)|0;T=D;ma=c[P+104>>2]^$;R=c[P+104+4>>2]^T;U=oe(R|0,ma|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;f=D;la=Rd((ea|ia)^U|0,ga^f|0,24)|0;g=D;ga=Pd((ea|ia)^U|0,ga^f|0,40)|0;g=D|g;T=oe(ga|la|0,g|0,$|0,T|0)|0;T=oe(T|0,D|0,u|0,w|0)|0;$=D;c[P+16>>2]=T;c[P+16+4>>2]=$;ia=Rd(R^T|0,ma^$|0,16)|0;ea=D;ma=Pd(R^T|0,ma^$|0,48)|0;ea=D|ea;f=oe(ma|ia|0,ea|0,U|0,f|0)|0;U=D;R=Rd((ga|la)^f|0,g^U|0,63)|0;_=D;g=Pd((ga|la)^f|0,g^U|0,1)|0;c[P+56>>2]=g|R;c[P+56+4>>2]=D|_;_=c[P+32>>2]|0;R=c[P+32+4>>2]|0;S=oe(_|0,R|0,e|0,S|0)|0;S=oe(S|0,D|0,q|0,r|0)|0;e=D;g=c[P+112>>2]^S;la=c[P+112+4>>2]^e;ga=oe(la|0,g|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;ca=D;ja=Rd(_^ga|0,R^ca|0,24)|0;Q=D;R=Pd(_^ga|0,R^ca|0,40)|0;Q=D|Q;e=oe(R|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,m|0,n|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;_=Rd(la^e|0,g^S|0,16)|0;Y=D;g=Pd(la^e|0,g^S|0,48)|0;Y=D|Y;ca=oe(g|_|0,Y|0,ga|0,ca|0)|0;ga=D;la=Rd((R|ja)^ca|0,Q^ga|0,63)|0;W=D;Q=Pd((R|ja)^ca|0,Q^ga|0,1)|0;W=D|W;V=oe(Q|la|0,W|0,da|0,V|0)|0;V=oe(V|0,D|0,E|0,F|0)|0;da=D;U=oe(ka^da|0,(ha|aa)^V|0,f|0,U|0)|0;f=D;ja=Rd((Q|la)^U|0,W^f|0,24)|0;R=D;W=Pd((Q|la)^U|0,W^f|0,40)|0;R=D|R;la=oe(W|ja|0,R|0,V|0,da|0)|0;la=oe(la|0,D|0,x|0,y|0)|0;Q=D;c[P>>2]=la;c[P+4>>2]=Q;ba=Rd(ka^da^la|0,(ha|aa)^V^Q|0,16)|0;fa=D;V=Pd(ka^da^la|0,(ha|aa)^V^Q|0,48)|0;fa=D|fa;c[P+96>>2]=V|ba;c[P+96+4>>2]=fa;f=oe(V|ba|0,fa|0,U|0,f|0)|0;U=D;c[P+64>>2]=f;c[P+64+4>>2]=U;fa=Rd((W|ja)^f|0,R^U|0,63)|0;ba=D;U=Pd((W|ja)^f|0,R^U|0,1)|0;c[P+32>>2]=U|fa;c[P+32+4>>2]=D|ba;ba=c[P+40>>2]|0;fa=c[P+40+4>>2]|0;Z=oe(ba|0,fa|0,X|0,Z|0)|0;Z=oe(Z|0,D|0,G|0,I|0)|0;X=D;ga=oe(ea^X|0,(ma|ia)^Z|0,ca|0,ga|0)|0;ca=D;U=Rd(ba^ga|0,fa^ca|0,24)|0;R=D;fa=Pd(ba^ga|0,fa^ca|0,40)|0;R=D|R;ba=oe(fa|U|0,R|0,Z|0,X|0)|0;ba=oe(ba|0,D|0,v|0,H|0)|0;f=D;c[P+8>>2]=ba;c[P+8+4>>2]=f;ja=Rd(ea^X^ba|0,(ma|ia)^Z^f|0,16)|0;W=D;Z=Pd(ea^X^ba|0,(ma|ia)^Z^f|0,48)|0;W=D|W;c[P+104>>2]=Z|ja;c[P+104+4>>2]=W;ca=oe(Z|ja|0,W|0,ga|0,ca|0)|0;ga=D;c[P+72>>2]=ca;c[P+72+4>>2]=ga;W=Rd((fa|U)^ca|0,R^ga|0,63)|0;ja=D;ga=Pd((fa|U)^ca|0,R^ga|0,1)|0;ja=D|ja;R=c[P+48>>2]|0;ca=c[P+48+4>>2]|0;$=oe(R|0,ca|0,T|0,$|0)|0;$=oe($|0,D|0,q|0,r|0)|0;T=D;U=oe(Y^T|0,(g|_)^$|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;fa=D;Z=Rd(R^U|0,ca^fa|0,24)|0;ia=D;ca=Pd(R^U|0,ca^fa|0,40)|0;ia=D|ia;R=oe(ca|Z|0,ia|0,$|0,T|0)|0;R=oe(R|0,D|0,k|0,l|0)|0;ma=D;c[P+16>>2]=R;c[P+16+4>>2]=ma;X=Rd(Y^T^R|0,(g|_)^$^ma|0,16)|0;ea=D;$=Pd(Y^T^R|0,(g|_)^$^ma|0,48)|0;ea=D|ea;c[P+112>>2]=$|X;c[P+112+4>>2]=ea;fa=oe($|X|0,ea|0,U|0,fa|0)|0;U=D;ea=Rd((ca|Z)^fa|0,ia^U|0,63)|0;X=D;ia=Pd((ca|Z)^fa|0,ia^U|0,1)|0;X=D|X;Z=c[P+56>>2]|0;ca=c[P+56+4>>2]|0;S=oe(Z|0,ca|0,e|0,S|0)|0;S=oe(S|0,D|0,N|0,b|0)|0;e=D;$=c[P+120>>2]^S;_=c[P+120+4>>2]^e;g=oe(_|0,$|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;T=D;Y=Rd(Z^g|0,ca^T|0,24)|0;V=D;ca=Pd(Z^g|0,ca^T|0,40)|0;V=D|V;e=oe(ca|Y|0,V|0,S|0,e|0)|0;e=oe(e|0,D|0,J|0,K|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;Z=Rd(_^e|0,$^S|0,16)|0;aa=D;$=Pd(_^e|0,$^S|0,48)|0;aa=D|aa;T=oe($|Z|0,aa|0,g|0,T|0)|0;g=D;_=Rd((ca|Y)^T|0,V^g|0,63)|0;ha=D;V=Pd((ca|Y)^T|0,V^g|0,1)|0;ha=D|ha;Q=oe(ga|W|0,ja|0,la|0,Q|0)|0;Q=oe(Q|0,D|0,B|0,C|0)|0;la=D;U=oe(aa^la|0,($|Z)^Q|0,fa|0,U|0)|0;fa=D;Y=Rd((ga|W)^U|0,ja^fa|0,24)|0;ca=D;ja=Pd((ga|W)^U|0,ja^fa|0,40)|0;ca=D|ca;W=oe(ja|Y|0,ca|0,Q|0,la|0)|0;W=oe(W|0,D|0,L|0,M|0)|0;ga=D;c[P>>2]=W;c[P+4>>2]=ga;da=Rd(aa^la^W|0,($|Z)^Q^ga|0,16)|0;ka=D;Q=Pd(aa^la^W|0,($|Z)^Q^ga|0,48)|0;ka=D|ka;c[P+120>>2]=Q|da;c[P+120+4>>2]=ka;fa=oe(Q|da|0,ka|0,U|0,fa|0)|0;U=D;c[P+80>>2]=fa;c[P+80+4>>2]=U;ka=Rd((ja|Y)^fa|0,ca^U|0,63)|0;da=D;U=Pd((ja|Y)^fa|0,ca^U|0,1)|0;c[P+40>>2]=U|ka;c[P+40+4>>2]=D|da;f=oe(ia|ea|0,X|0,ba|0,f|0)|0;f=oe(f|0,D|0,m|0,n|0)|0;ba=D;da=c[P+96>>2]^f;ka=c[P+96+4>>2]^ba;g=oe(ka|0,da|0,T|0,g|0)|0;T=D;U=Rd((ia|ea)^g|0,X^T|0,24)|0;ca=D;X=Pd((ia|ea)^g|0,X^T|0,40)|0;ca=D|ca;ba=oe(X|U|0,ca|0,f|0,ba|0)|0;ba=oe(ba|0,D|0,s|0,t|0)|0;f=D;c[P+8>>2]=ba;c[P+8+4>>2]=f;ea=Rd(ka^ba|0,da^f|0,16)|0;ia=D;da=Pd(ka^ba|0,da^f|0,48)|0;ia=D|ia;T=oe(da|ea|0,ia|0,g|0,T|0)|0;g=D;c[P+88>>2]=T;c[P+88+4>>2]=g;ka=Rd((X|U)^T|0,ca^g|0,63)|0;fa=D;g=Pd((X|U)^T|0,ca^g|0,1)|0;c[P+48>>2]=g|ka;c[P+48+4>>2]=D|fa;ma=oe(V|_|0,ha|0,R|0,ma|0)|0;ma=oe(ma|0,D|0,u|0,w|0)|0;R=D;fa=c[P+104>>2]^ma;ka=c[P+104+4>>2]^R;g=oe(ka|0,fa|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;ca=D;T=Rd((V|_)^g|0,ha^ca|0,24)|0;U=D;ha=Pd((V|_)^g|0,ha^ca|0,40)|0;U=D|U;R=oe(ha|T|0,U|0,ma|0,R|0)|0;R=oe(R|0,D|0,h|0,j|0)|0;ma=D;c[P+16>>2]=R;c[P+16+4>>2]=ma;_=Rd(ka^R|0,fa^ma|0,16)|0;V=D;fa=Pd(ka^R|0,fa^ma|0,48)|0;V=D|V;ca=oe(fa|_|0,V|0,g|0,ca|0)|0;g=D;ka=Rd((ha|T)^ca|0,U^g|0,63)|0;X=D;U=Pd((ha|T)^ca|0,U^g|0,1)|0;c[P+56>>2]=U|ka;c[P+56+4>>2]=D|X;X=c[P+32>>2]|0;ka=c[P+32+4>>2]|0;S=oe(X|0,ka|0,e|0,S|0)|0;S=oe(S|0,D|0,z|0,A|0)|0;e=D;U=c[P+112>>2]^S;T=c[P+112+4>>2]^e;ha=oe(T|0,U|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;Y=D;ja=Rd(X^ha|0,ka^Y|0,24)|0;Q=D;ka=Pd(X^ha|0,ka^Y|0,40)|0;Q=D|Q;e=oe(ka|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,o|0,p|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;X=Rd(T^e|0,U^S|0,16)|0;Z=D;U=Pd(T^e|0,U^S|0,48)|0;Z=D|Z;Y=oe(U|X|0,Z|0,ha|0,Y|0)|0;ha=D;T=Rd((ka|ja)^Y|0,Q^ha|0,63)|0;$=D;Q=Pd((ka|ja)^Y|0,Q^ha|0,1)|0;$=D|$;ga=oe(Q|T|0,$|0,W|0,ga|0)|0;ga=oe(ga|0,D|0,u|0,w|0)|0;W=D;g=oe(ia^W|0,(da|ea)^ga|0,ca|0,g|0)|0;ca=D;ja=Rd((Q|T)^g|0,$^ca|0,24)|0;ka=D;$=Pd((Q|T)^g|0,$^ca|0,40)|0;ka=D|ka;T=oe($|ja|0,ka|0,ga|0,W|0)|0;T=oe(T|0,D|0,z|0,A|0)|0;Q=D;c[P>>2]=T;c[P+4>>2]=Q;la=Rd(ia^W^T|0,(da|ea)^ga^Q|0,16)|0;aa=D;ga=Pd(ia^W^T|0,(da|ea)^ga^Q|0,48)|0;aa=D|aa;c[P+96>>2]=ga|la;c[P+96+4>>2]=aa;ca=oe(ga|la|0,aa|0,g|0,ca|0)|0;g=D;c[P+64>>2]=ca;c[P+64+4>>2]=g;aa=Rd(($|ja)^ca|0,ka^g|0,63)|0;la=D;g=Pd(($|ja)^ca|0,ka^g|0,1)|0;c[P+32>>2]=g|aa;c[P+32+4>>2]=D|la;la=c[P+40>>2]|0;aa=c[P+40+4>>2]|0;f=oe(la|0,aa|0,ba|0,f|0)|0;f=oe(f|0,D|0,m|0,n|0)|0;ba=D;ha=oe(V^ba|0,(fa|_)^f|0,Y|0,ha|0)|0;Y=D;g=Rd(la^ha|0,aa^Y|0,24)|0;ka=D;aa=Pd(la^ha|0,aa^Y|0,40)|0;ka=D|ka;la=oe(aa|g|0,ka|0,f|0,ba|0)|0;la=oe(la|0,D|0,h|0,j|0)|0;ca=D;c[P+8>>2]=la;c[P+8+4>>2]=ca;ja=Rd(V^ba^la|0,(fa|_)^f^ca|0,16)|0;$=D;f=Pd(V^ba^la|0,(fa|_)^f^ca|0,48)|0;$=D|$;c[P+104>>2]=f|ja;c[P+104+4>>2]=$;Y=oe(f|ja|0,$|0,ha|0,Y|0)|0;ha=D;c[P+72>>2]=Y;c[P+72+4>>2]=ha;$=Rd((aa|g)^Y|0,ka^ha|0,63)|0;ja=D;ha=Pd((aa|g)^Y|0,ka^ha|0,1)|0;ja=D|ja;ka=c[P+48>>2]|0;Y=c[P+48+4>>2]|0;ma=oe(ka|0,Y|0,R|0,ma|0)|0;ma=oe(ma|0,D|0,J|0,K|0)|0;R=D;g=oe(Z^R|0,(U|X)^ma|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;aa=D;f=Rd(ka^g|0,Y^aa|0,24)|0;_=D;Y=Pd(ka^g|0,Y^aa|0,40)|0;_=D|_;ka=oe(Y|f|0,_|0,ma|0,R|0)|0;ka=oe(ka|0,D|0,G|0,I|0)|0;fa=D;c[P+16>>2]=ka;c[P+16+4>>2]=fa;ba=Rd(Z^R^ka|0,(U|X)^ma^fa|0,16)|0;V=D;ma=Pd(Z^R^ka|0,(U|X)^ma^fa|0,48)|0;V=D|V;c[P+112>>2]=ma|ba;c[P+112+4>>2]=V;aa=oe(ma|ba|0,V|0,g|0,aa|0)|0;g=D;V=Rd((Y|f)^aa|0,_^g|0,63)|0;ba=D;_=Pd((Y|f)^aa|0,_^g|0,1)|0;ba=D|ba;f=c[P+56>>2]|0;Y=c[P+56+4>>2]|0;S=oe(f|0,Y|0,e|0,S|0)|0;S=oe(S|0,D|0,E|0,F|0)|0;e=D;ma=c[P+120>>2]^S;X=c[P+120+4>>2]^e;U=oe(X|0,ma|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;R=D;Z=Rd(f^U|0,Y^R|0,24)|0;ga=D;Y=Pd(f^U|0,Y^R|0,40)|0;ga=D|ga;e=oe(Y|Z|0,ga|0,S|0,e|0)|0;e=oe(e|0,D|0,L|0,M|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;f=Rd(X^e|0,ma^S|0,16)|0;ea=D;ma=Pd(X^e|0,ma^S|0,48)|0;ea=D|ea;R=oe(ma|f|0,ea|0,U|0,R|0)|0;U=D;X=Rd((Y|Z)^R|0,ga^U|0,63)|0;da=D;ga=Pd((Y|Z)^R|0,ga^U|0,1)|0;da=D|da;Q=oe(ha|$|0,ja|0,T|0,Q|0)|0;Q=oe(Q|0,D|0,k|0,l|0)|0;T=D;g=oe(ea^T|0,(ma|f)^Q|0,aa|0,g|0)|0;aa=D;Z=Rd((ha|$)^g|0,ja^aa|0,24)|0;Y=D;ja=Pd((ha|$)^g|0,ja^aa|0,40)|0;Y=D|Y;$=oe(ja|Z|0,Y|0,Q|0,T|0)|0;$=oe($|0,D|0,s|0,t|0)|0;ha=D;c[P>>2]=$;c[P+4>>2]=ha;W=Rd(ea^T^$|0,(ma|f)^Q^ha|0,16)|0;ia=D;Q=Pd(ea^T^$|0,(ma|f)^Q^ha|0,48)|0;ia=D|ia;c[P+120>>2]=Q|W;c[P+120+4>>2]=ia;aa=oe(Q|W|0,ia|0,g|0,aa|0)|0;g=D;c[P+80>>2]=aa;c[P+80+4>>2]=g;ia=Rd((ja|Z)^aa|0,Y^g|0,63)|0;W=D;g=Pd((ja|Z)^aa|0,Y^g|0,1)|0;c[P+40>>2]=g|ia;c[P+40+4>>2]=D|W;ca=oe(_|V|0,ba|0,la|0,ca|0)|0;ca=oe(ca|0,D|0,q|0,r|0)|0;la=D;W=c[P+96>>2]^ca;ia=c[P+96+4>>2]^la;U=oe(ia|0,W|0,R|0,U|0)|0;R=D;g=Rd((_|V)^U|0,ba^R|0,24)|0;Y=D;ba=Pd((_|V)^U|0,ba^R|0,40)|0;Y=D|Y;la=oe(ba|g|0,Y|0,ca|0,la|0)|0;la=oe(la|0,D|0,B|0,C|0)|0;ca=D;c[P+8>>2]=la;c[P+8+4>>2]=ca;V=Rd(ia^la|0,W^ca|0,16)|0;_=D;W=Pd(ia^la|0,W^ca|0,48)|0;_=D|_;R=oe(W|V|0,_|0,U|0,R|0)|0;U=D;c[P+88>>2]=R;c[P+88+4>>2]=U;ia=Rd((ba|g)^R|0,Y^U|0,63)|0;aa=D;U=Pd((ba|g)^R|0,Y^U|0,1)|0;c[P+48>>2]=U|ia;c[P+48+4>>2]=D|aa;fa=oe(ga|X|0,da|0,ka|0,fa|0)|0;fa=oe(fa|0,D|0,o|0,p|0)|0;ka=D;aa=c[P+104>>2]^fa;ia=c[P+104+4>>2]^ka;U=oe(ia|0,aa|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;Y=D;R=Rd((ga|X)^U|0,da^Y|0,24)|0;g=D;da=Pd((ga|X)^U|0,da^Y|0,40)|0;g=D|g;ka=oe(da|R|0,g|0,fa|0,ka|0)|0;ka=oe(ka|0,D|0,v|0,H|0)|0;fa=D;c[P+16>>2]=ka;c[P+16+4>>2]=fa;X=Rd(ia^ka|0,aa^fa|0,16)|0;ga=D;aa=Pd(ia^ka|0,aa^fa|0,48)|0;ga=D|ga;Y=oe(aa|X|0,ga|0,U|0,Y|0)|0;U=D;ia=Rd((da|R)^Y|0,g^U|0,63)|0;ba=D;g=Pd((da|R)^Y|0,g^U|0,1)|0;c[P+56>>2]=g|ia;c[P+56+4>>2]=D|ba;ba=c[P+32>>2]|0;ia=c[P+32+4>>2]|0;S=oe(ba|0,ia|0,e|0,S|0)|0;S=oe(S|0,D|0,N|0,b|0)|0;e=D;g=c[P+112>>2]^S;R=c[P+112+4>>2]^e;da=oe(R|0,g|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;Z=D;ja=Rd(ba^da|0,ia^Z|0,24)|0;Q=D;ia=Pd(ba^da|0,ia^Z|0,40)|0;Q=D|Q;e=oe(ia|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,x|0,y|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;ba=Rd(R^e|0,g^S|0,16)|0;f=D;g=Pd(R^e|0,g^S|0,48)|0;f=D|f;Z=oe(g|ba|0,f|0,da|0,Z|0)|0;da=D;R=Rd((ia|ja)^Z|0,Q^da|0,63)|0;ma=D;Q=Pd((ia|ja)^Z|0,Q^da|0,1)|0;ma=D|ma;ha=oe(Q|R|0,ma|0,$|0,ha|0)|0;ha=oe(ha|0,D|0,z|0,A|0)|0;$=D;U=oe(_^$|0,(W|V)^ha|0,Y|0,U|0)|0;Y=D;ja=Rd((Q|R)^U|0,ma^Y|0,24)|0;ia=D;ma=Pd((Q|R)^U|0,ma^Y|0,40)|0;ia=D|ia;R=oe(ma|ja|0,ia|0,ha|0,$|0)|0;R=oe(R|0,D|0,v|0,H|0)|0;Q=D;c[P>>2]=R;c[P+4>>2]=Q;T=Rd(_^$^R|0,(W|V)^ha^Q|0,16)|0;ea=D;ha=Pd(_^$^R|0,(W|V)^ha^Q|0,48)|0;ea=D|ea;c[P+96>>2]=ha|T;c[P+96+4>>2]=ea;Y=oe(ha|T|0,ea|0,U|0,Y|0)|0;U=D;c[P+64>>2]=Y;c[P+64+4>>2]=U;ea=Rd((ma|ja)^Y|0,ia^U|0,63)|0;T=D;U=Pd((ma|ja)^Y|0,ia^U|0,1)|0;c[P+32>>2]=U|ea;c[P+32+4>>2]=D|T;T=c[P+40>>2]|0;ea=c[P+40+4>>2]|0;ca=oe(T|0,ea|0,la|0,ca|0)|0;ca=oe(ca|0,D|0,q|0,r|0)|0;la=D;da=oe(ga^la|0,(aa|X)^ca|0,Z|0,da|0)|0;Z=D;U=Rd(T^da|0,ea^Z|0,24)|0;ia=D;ea=Pd(T^da|0,ea^Z|0,40)|0;ia=D|ia;T=oe(ea|U|0,ia|0,ca|0,la|0)|0;T=oe(T|0,D|0,u|0,w|0)|0;Y=D;c[P+8>>2]=T;c[P+8+4>>2]=Y;ja=Rd(ga^la^T|0,(aa|X)^ca^Y|0,16)|0;ma=D;ca=Pd(ga^la^T|0,(aa|X)^ca^Y|0,48)|0;ma=D|ma;c[P+104>>2]=ca|ja;c[P+104+4>>2]=ma;Z=oe(ca|ja|0,ma|0,da|0,Z|0)|0;da=D;c[P+72>>2]=Z;c[P+72+4>>2]=da;ma=Rd((ea|U)^Z|0,ia^da|0,63)|0;ja=D;da=Pd((ea|U)^Z|0,ia^da|0,1)|0;ja=D|ja;ia=c[P+48>>2]|0;Z=c[P+48+4>>2]|0;fa=oe(ia|0,Z|0,ka|0,fa|0)|0;fa=oe(fa|0,D|0,k|0,l|0)|0;ka=D;U=oe(f^ka|0,(g|ba)^fa|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;ea=D;ca=Rd(ia^U|0,Z^ea|0,24)|0;X=D;Z=Pd(ia^U|0,Z^ea|0,40)|0;X=D|X;ia=oe(Z|ca|0,X|0,fa|0,ka|0)|0;ia=oe(ia|0,D|0,o|0,p|0)|0;aa=D;c[P+16>>2]=ia;c[P+16+4>>2]=aa;la=Rd(f^ka^ia|0,(g|ba)^fa^aa|0,16)|0;ga=D;fa=Pd(f^ka^ia|0,(g|ba)^fa^aa|0,48)|0;ga=D|ga;c[P+112>>2]=fa|la;c[P+112+4>>2]=ga;ea=oe(fa|la|0,ga|0,U|0,ea|0)|0;U=D;ga=Rd((Z|ca)^ea|0,X^U|0,63)|0;la=D;X=Pd((Z|ca)^ea|0,X^U|0,1)|0;la=D|la;ca=c[P+56>>2]|0;Z=c[P+56+4>>2]|0;S=oe(ca|0,Z|0,e|0,S|0)|0;S=oe(S|0,D|0,B|0,C|0)|0;e=D;fa=c[P+120>>2]^S;ba=c[P+120+4>>2]^e;g=oe(ba|0,fa|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;ka=D;f=Rd(ca^g|0,Z^ka|0,24)|0;ha=D;Z=Pd(ca^g|0,Z^ka|0,40)|0;ha=D|ha;e=oe(Z|f|0,ha|0,S|0,e|0)|0;e=oe(e|0,D|0,N|0,b|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;ca=Rd(ba^e|0,fa^S|0,16)|0;V=D;fa=Pd(ba^e|0,fa^S|0,48)|0;V=D|V;ka=oe(fa|ca|0,V|0,g|0,ka|0)|0;g=D;ba=Rd((Z|f)^ka|0,ha^g|0,63)|0;W=D;ha=Pd((Z|f)^ka|0,ha^g|0,1)|0;W=D|W;Q=oe(da|ma|0,ja|0,R|0,Q|0)|0;Q=oe(Q|0,D|0,L|0,M|0)|0;R=D;U=oe(V^R|0,(fa|ca)^Q|0,ea|0,U|0)|0;ea=D;f=Rd((da|ma)^U|0,ja^ea|0,24)|0;Z=D;ja=Pd((da|ma)^U|0,ja^ea|0,40)|0;Z=D|Z;ma=oe(ja|f|0,Z|0,Q|0,R|0)|0;ma=oe(ma|0,D|0,h|0,j|0)|0;da=D;c[P>>2]=ma;c[P+4>>2]=da;$=Rd(V^R^ma|0,(fa|ca)^Q^da|0,16)|0;_=D;Q=Pd(V^R^ma|0,(fa|ca)^Q^da|0,48)|0;_=D|_;c[P+120>>2]=Q|$;c[P+120+4>>2]=_;ea=oe(Q|$|0,_|0,U|0,ea|0)|0;U=D;c[P+80>>2]=ea;c[P+80+4>>2]=U;_=Rd((ja|f)^ea|0,Z^U|0,63)|0;$=D;U=Pd((ja|f)^ea|0,Z^U|0,1)|0;c[P+40>>2]=U|_;c[P+40+4>>2]=D|$;Y=oe(X|ga|0,la|0,T|0,Y|0)|0;Y=oe(Y|0,D|0,E|0,F|0)|0;T=D;$=c[P+96>>2]^Y;_=c[P+96+4>>2]^T;g=oe(_|0,$|0,ka|0,g|0)|0;ka=D;U=Rd((X|ga)^g|0,la^ka|0,24)|0;Z=D;la=Pd((X|ga)^g|0,la^ka|0,40)|0;Z=D|Z;T=oe(la|U|0,Z|0,Y|0,T|0)|0;T=oe(T|0,D|0,G|0,I|0)|0;Y=D;c[P+8>>2]=T;c[P+8+4>>2]=Y;ga=Rd(_^T|0,$^Y|0,16)|0;X=D;$=Pd(_^T|0,$^Y|0,48)|0;X=D|X;ka=oe($|ga|0,X|0,g|0,ka|0)|0;g=D;c[P+88>>2]=ka;c[P+88+4>>2]=g;_=Rd((la|U)^ka|0,Z^g|0,63)|0;ea=D;g=Pd((la|U)^ka|0,Z^g|0,1)|0;c[P+48>>2]=g|_;c[P+48+4>>2]=D|ea;aa=oe(ha|ba|0,W|0,ia|0,aa|0)|0;aa=oe(aa|0,D|0,s|0,t|0)|0;ia=D;ea=c[P+104>>2]^aa;_=c[P+104+4>>2]^ia;g=oe(_|0,ea|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;Z=D;ka=Rd((ha|ba)^g|0,W^Z|0,24)|0;U=D;W=Pd((ha|ba)^g|0,W^Z|0,40)|0;U=D|U;ia=oe(W|ka|0,U|0,aa|0,ia|0)|0;ia=oe(ia|0,D|0,x|0,y|0)|0;aa=D;c[P+16>>2]=ia;c[P+16+4>>2]=aa;ba=Rd(_^ia|0,ea^aa|0,16)|0;ha=D;ea=Pd(_^ia|0,ea^aa|0,48)|0;ha=D|ha;Z=oe(ea|ba|0,ha|0,g|0,Z|0)|0;g=D;_=Rd((W|ka)^Z|0,U^g|0,63)|0;la=D;U=Pd((W|ka)^Z|0,U^g|0,1)|0;c[P+56>>2]=U|_;c[P+56+4>>2]=D|la;la=c[P+32>>2]|0;_=c[P+32+4>>2]|0;S=oe(la|0,_|0,e|0,S|0)|0;S=oe(S|0,D|0,m|0,n|0)|0;e=D;U=c[P+112>>2]^S;ka=c[P+112+4>>2]^e;W=oe(ka|0,U|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;f=D;ja=Rd(la^W|0,_^f|0,24)|0;Q=D;_=Pd(la^W|0,_^f|0,40)|0;Q=D|Q;e=oe(_|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,J|0,K|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;la=Rd(ka^e|0,U^S|0,16)|0;ca=D;U=Pd(ka^e|0,U^S|0,48)|0;ca=D|ca;f=oe(U|la|0,ca|0,W|0,f|0)|0;W=D;ka=Rd((_|ja)^f|0,Q^W|0,63)|0;fa=D;Q=Pd((_|ja)^f|0,Q^W|0,1)|0;fa=D|fa;da=oe(Q|ka|0,fa|0,ma|0,da|0)|0;da=oe(da|0,D|0,k|0,l|0)|0;ma=D;g=oe(X^ma|0,($|ga)^da|0,Z|0,g|0)|0;Z=D;ja=Rd((Q|ka)^g|0,fa^Z|0,24)|0;_=D;fa=Pd((Q|ka)^g|0,fa^Z|0,40)|0;_=D|_;ka=oe(fa|ja|0,_|0,da|0,ma|0)|0;ka=oe(ka|0,D|0,G|0,I|0)|0;Q=D;c[P>>2]=ka;c[P+4>>2]=Q;R=Rd(X^ma^ka|0,($|ga)^da^Q|0,16)|0;V=D;da=Pd(X^ma^ka|0,($|ga)^da^Q|0,48)|0;V=D|V;c[P+96>>2]=da|R;c[P+96+4>>2]=V;Z=oe(da|R|0,V|0,g|0,Z|0)|0;g=D;c[P+64>>2]=Z;c[P+64+4>>2]=g;V=Rd((fa|ja)^Z|0,_^g|0,63)|0;R=D;g=Pd((fa|ja)^Z|0,_^g|0,1)|0;c[P+32>>2]=g|V;c[P+32+4>>2]=D|R;R=c[P+40>>2]|0;V=c[P+40+4>>2]|0;Y=oe(R|0,V|0,T|0,Y|0)|0;Y=oe(Y|0,D|0,s|0,t|0)|0;T=D;W=oe(ha^T|0,(ea|ba)^Y|0,f|0,W|0)|0;f=D;g=Rd(R^W|0,V^f|0,24)|0;_=D;V=Pd(R^W|0,V^f|0,40)|0;_=D|_;R=oe(V|g|0,_|0,Y|0,T|0)|0;R=oe(R|0,D|0,B|0,C|0)|0;Z=D;c[P+8>>2]=R;c[P+8+4>>2]=Z;ja=Rd(ha^T^R|0,(ea|ba)^Y^Z|0,16)|0;fa=D;Y=Pd(ha^T^R|0,(ea|ba)^Y^Z|0,48)|0;fa=D|fa;c[P+104>>2]=Y|ja;c[P+104+4>>2]=fa;f=oe(Y|ja|0,fa|0,W|0,f|0)|0;W=D;c[P+72>>2]=f;c[P+72+4>>2]=W;fa=Rd((V|g)^f|0,_^W|0,63)|0;ja=D;W=Pd((V|g)^f|0,_^W|0,1)|0;ja=D|ja;_=c[P+48>>2]|0;f=c[P+48+4>>2]|0;aa=oe(_|0,f|0,ia|0,aa|0)|0;aa=oe(aa|0,D|0,v|0,H|0)|0;ia=D;g=oe(ca^ia|0,(U|la)^aa|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;V=D;Y=Rd(_^g|0,f^V|0,24)|0;ba=D;f=Pd(_^g|0,f^V|0,40)|0;ba=D|ba;_=oe(f|Y|0,ba|0,aa|0,ia|0)|0;_=oe(_|0,D|0,E|0,F|0)|0;ea=D;c[P+16>>2]=_;c[P+16+4>>2]=ea;T=Rd(ca^ia^_|0,(U|la)^aa^ea|0,16)|0;ha=D;aa=Pd(ca^ia^_|0,(U|la)^aa^ea|0,48)|0;ha=D|ha;c[P+112>>2]=aa|T;c[P+112+4>>2]=ha;V=oe(aa|T|0,ha|0,g|0,V|0)|0;g=D;ha=Rd((f|Y)^V|0,ba^g|0,63)|0;T=D;ba=Pd((f|Y)^V|0,ba^g|0,1)|0;T=D|T;Y=c[P+56>>2]|0;f=c[P+56+4>>2]|0;S=oe(Y|0,f|0,e|0,S|0)|0;S=oe(S|0,D|0,x|0,y|0)|0;e=D;aa=c[P+120>>2]^S;la=c[P+120+4>>2]^e;U=oe(la|0,aa|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;ia=D;ca=Rd(Y^U|0,f^ia|0,24)|0;da=D;f=Pd(Y^U|0,f^ia|0,40)|0;da=D|da;e=oe(f|ca|0,da|0,S|0,e|0)|0;e=oe(e|0,D|0,m|0,n|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;Y=Rd(la^e|0,aa^S|0,16)|0;ga=D;aa=Pd(la^e|0,aa^S|0,48)|0;ga=D|ga;ia=oe(aa|Y|0,ga|0,U|0,ia|0)|0;U=D;la=Rd((f|ca)^ia|0,da^U|0,63)|0;$=D;da=Pd((f|ca)^ia|0,da^U|0,1)|0;$=D|$;Q=oe(W|fa|0,ja|0,ka|0,Q|0)|0;Q=oe(Q|0,D|0,o|0,p|0)|0;ka=D;g=oe(ga^ka|0,(aa|Y)^Q|0,V|0,g|0)|0;V=D;ca=Rd((W|fa)^g|0,ja^V|0,24)|0;f=D;ja=Pd((W|fa)^g|0,ja^V|0,40)|0;f=D|f;fa=oe(ja|ca|0,f|0,Q|0,ka|0)|0;fa=oe(fa|0,D|0,J|0,K|0)|0;W=D;c[P>>2]=fa;c[P+4>>2]=W;ma=Rd(ga^ka^fa|0,(aa|Y)^Q^W|0,16)|0;X=D;Q=Pd(ga^ka^fa|0,(aa|Y)^Q^W|0,48)|0;X=D|X;c[P+120>>2]=Q|ma;c[P+120+4>>2]=X;V=oe(Q|ma|0,X|0,g|0,V|0)|0;g=D;c[P+80>>2]=V;c[P+80+4>>2]=g;X=Rd((ja|ca)^V|0,f^g|0,63)|0;ma=D;g=Pd((ja|ca)^V|0,f^g|0,1)|0;c[P+40>>2]=g|X;c[P+40+4>>2]=D|ma;Z=oe(ba|ha|0,T|0,R|0,Z|0)|0;Z=oe(Z|0,D|0,u|0,w|0)|0;R=D;ma=c[P+96>>2]^Z;X=c[P+96+4>>2]^R;U=oe(X|0,ma|0,ia|0,U|0)|0;ia=D;g=Rd((ba|ha)^U|0,T^ia|0,24)|0;f=D;T=Pd((ba|ha)^U|0,T^ia|0,40)|0;f=D|f;R=oe(T|g|0,f|0,Z|0,R|0)|0;R=oe(R|0,D|0,q|0,r|0)|0;Z=D;c[P+8>>2]=R;c[P+8+4>>2]=Z;ha=Rd(X^R|0,ma^Z|0,16)|0;ba=D;ma=Pd(X^R|0,ma^Z|0,48)|0;ba=D|ba;ia=oe(ma|ha|0,ba|0,U|0,ia|0)|0;U=D;c[P+88>>2]=ia;c[P+88+4>>2]=U;X=Rd((T|g)^ia|0,f^U|0,63)|0;V=D;U=Pd((T|g)^ia|0,f^U|0,1)|0;c[P+48>>2]=U|X;c[P+48+4>>2]=D|V;ea=oe(da|la|0,$|0,_|0,ea|0)|0;ea=oe(ea|0,D|0,N|0,b|0)|0;_=D;V=c[P+104>>2]^ea;X=c[P+104+4>>2]^_;U=oe(X|0,V|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;f=D;ia=Rd((da|la)^U|0,$^f|0,24)|0;g=D;$=Pd((da|la)^U|0,$^f|0,40)|0;g=D|g;_=oe($|ia|0,g|0,ea|0,_|0)|0;_=oe(_|0,D|0,L|0,M|0)|0;ea=D;c[P+16>>2]=_;c[P+16+4>>2]=ea;la=Rd(X^_|0,V^ea|0,16)|0;da=D;V=Pd(X^_|0,V^ea|0,48)|0;da=D|da;f=oe(V|la|0,da|0,U|0,f|0)|0;U=D;X=Rd(($|ia)^f|0,g^U|0,63)|0;T=D;g=Pd(($|ia)^f|0,g^U|0,1)|0;c[P+56>>2]=g|X;c[P+56+4>>2]=D|T;T=c[P+32>>2]|0;X=c[P+32+4>>2]|0;S=oe(T|0,X|0,e|0,S|0)|0;S=oe(S|0,D|0,h|0,j|0)|0;e=D;g=c[P+112>>2]^S;ia=c[P+112+4>>2]^e;$=oe(ia|0,g|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;ca=D;ja=Rd(T^$|0,X^ca|0,24)|0;Q=D;X=Pd(T^$|0,X^ca|0,40)|0;Q=D|Q;e=oe(X|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,z|0,A|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;T=Rd(ia^e|0,g^S|0,16)|0;Y=D;g=Pd(ia^e|0,g^S|0,48)|0;Y=D|Y;ca=oe(g|T|0,Y|0,$|0,ca|0)|0;$=D;ia=Rd((X|ja)^ca|0,Q^$|0,63)|0;aa=D;Q=Pd((X|ja)^ca|0,Q^$|0,1)|0;aa=D|aa;W=oe(Q|ia|0,aa|0,fa|0,W|0)|0;W=oe(W|0,D|0,G|0,I|0)|0;fa=D;U=oe(ba^fa|0,(ma|ha)^W|0,f|0,U|0)|0;f=D;ja=Rd((Q|ia)^U|0,aa^f|0,24)|0;X=D;aa=Pd((Q|ia)^U|0,aa^f|0,40)|0;X=D|X;ia=oe(aa|ja|0,X|0,W|0,fa|0)|0;ia=oe(ia|0,D|0,q|0,r|0)|0;Q=D;c[P>>2]=ia;c[P+4>>2]=Q;ka=Rd(ba^fa^ia|0,(ma|ha)^W^Q|0,16)|0;ga=D;W=Pd(ba^fa^ia|0,(ma|ha)^W^Q|0,48)|0;ga=D|ga;c[P+96>>2]=W|ka;c[P+96+4>>2]=ga;f=oe(W|ka|0,ga|0,U|0,f|0)|0;U=D;c[P+64>>2]=f;c[P+64+4>>2]=U;ga=Rd((aa|ja)^f|0,X^U|0,63)|0;ka=D;U=Pd((aa|ja)^f|0,X^U|0,1)|0;c[P+32>>2]=U|ga;c[P+32+4>>2]=D|ka;ka=c[P+40>>2]|0;ga=c[P+40+4>>2]|0;Z=oe(ka|0,ga|0,R|0,Z|0)|0;Z=oe(Z|0,D|0,h|0,j|0)|0;R=D;$=oe(da^R|0,(V|la)^Z|0,ca|0,$|0)|0;ca=D;U=Rd(ka^$|0,ga^ca|0,24)|0;X=D;ga=Pd(ka^$|0,ga^ca|0,40)|0;X=D|X;ka=oe(ga|U|0,X|0,Z|0,R|0)|0;ka=oe(ka|0,D|0,N|0,b|0)|0;f=D;c[P+8>>2]=ka;c[P+8+4>>2]=f;ja=Rd(da^R^ka|0,(V|la)^Z^f|0,16)|0;aa=D;Z=Pd(da^R^ka|0,(V|la)^Z^f|0,48)|0;aa=D|aa;c[P+104>>2]=Z|ja;c[P+104+4>>2]=aa;ca=oe(Z|ja|0,aa|0,$|0,ca|0)|0;$=D;c[P+72>>2]=ca;c[P+72+4>>2]=$;aa=Rd((ga|U)^ca|0,X^$|0,63)|0;ja=D;$=Pd((ga|U)^ca|0,X^$|0,1)|0;ja=D|ja;X=c[P+48>>2]|0;ca=c[P+48+4>>2]|0;ea=oe(X|0,ca|0,_|0,ea|0)|0;ea=oe(ea|0,D|0,L|0,M|0)|0;_=D;U=oe(Y^_|0,(g|T)^ea|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;ga=D;Z=Rd(X^U|0,ca^ga|0,24)|0;la=D;ca=Pd(X^U|0,ca^ga|0,40)|0;la=D|la;X=oe(ca|Z|0,la|0,ea|0,_|0)|0;X=oe(X|0,D|0,J|0,K|0)|0;V=D;c[P+16>>2]=X;c[P+16+4>>2]=V;R=Rd(Y^_^X|0,(g|T)^ea^V|0,16)|0;da=D;ea=Pd(Y^_^X|0,(g|T)^ea^V|0,48)|0;da=D|da;c[P+112>>2]=ea|R;c[P+112+4>>2]=da;ga=oe(ea|R|0,da|0,U|0,ga|0)|0;U=D;da=Rd((ca|Z)^ga|0,la^U|0,63)|0;R=D;la=Pd((ca|Z)^ga|0,la^U|0,1)|0;R=D|R;Z=c[P+56>>2]|0;ca=c[P+56+4>>2]|0;S=oe(Z|0,ca|0,e|0,S|0)|0;S=oe(S|0,D|0,o|0,p|0)|0;e=D;ea=c[P+120>>2]^S;T=c[P+120+4>>2]^e;g=oe(T|0,ea|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;_=D;Y=Rd(Z^g|0,ca^_|0,24)|0;W=D;ca=Pd(Z^g|0,ca^_|0,40)|0;W=D|W;e=oe(ca|Y|0,W|0,S|0,e|0)|0;e=oe(e|0,D|0,B|0,C|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;Z=Rd(T^e|0,ea^S|0,16)|0;ha=D;ea=Pd(T^e|0,ea^S|0,48)|0;ha=D|ha;_=oe(ea|Z|0,ha|0,g|0,_|0)|0;g=D;T=Rd((ca|Y)^_|0,W^g|0,63)|0;ma=D;W=Pd((ca|Y)^_|0,W^g|0,1)|0;ma=D|ma;Q=oe($|aa|0,ja|0,ia|0,Q|0)|0;Q=oe(Q|0,D|0,v|0,H|0)|0;ia=D;U=oe(ha^ia|0,(ea|Z)^Q|0,ga|0,U|0)|0;ga=D;Y=Rd(($|aa)^U|0,ja^ga|0,24)|0;ca=D;ja=Pd(($|aa)^U|0,ja^ga|0,40)|0;ca=D|ca;aa=oe(ja|Y|0,ca|0,Q|0,ia|0)|0;aa=oe(aa|0,D|0,u|0,w|0)|0;$=D;c[P>>2]=aa;c[P+4>>2]=$;fa=Rd(ha^ia^aa|0,(ea|Z)^Q^$|0,16)|0;ba=D;Q=Pd(ha^ia^aa|0,(ea|Z)^Q^$|0,48)|0;ba=D|ba;c[P+120>>2]=Q|fa;c[P+120+4>>2]=ba;ga=oe(Q|fa|0,ba|0,U|0,ga|0)|0;U=D;c[P+80>>2]=ga;c[P+80+4>>2]=U;ba=Rd((ja|Y)^ga|0,ca^U|0,63)|0;fa=D;U=Pd((ja|Y)^ga|0,ca^U|0,1)|0;c[P+40>>2]=U|ba;c[P+40+4>>2]=D|fa;f=oe(la|da|0,R|0,ka|0,f|0)|0;f=oe(f|0,D|0,s|0,t|0)|0;ka=D;fa=c[P+96>>2]^f;ba=c[P+96+4>>2]^ka;g=oe(ba|0,fa|0,_|0,g|0)|0;_=D;U=Rd((la|da)^g|0,R^_|0,24)|0;ca=D;R=Pd((la|da)^g|0,R^_|0,40)|0;ca=D|ca;ka=oe(R|U|0,ca|0,f|0,ka|0)|0;ka=oe(ka|0,D|0,m|0,n|0)|0;f=D;c[P+8>>2]=ka;c[P+8+4>>2]=f;da=Rd(ba^ka|0,fa^f|0,16)|0;la=D;fa=Pd(ba^ka|0,fa^f|0,48)|0;la=D|la;_=oe(fa|da|0,la|0,g|0,_|0)|0;g=D;c[P+88>>2]=_;c[P+88+4>>2]=g;ba=Rd((R|U)^_|0,ca^g|0,63)|0;ga=D;g=Pd((R|U)^_|0,ca^g|0,1)|0;c[P+48>>2]=g|ba;c[P+48+4>>2]=D|ga;V=oe(W|T|0,ma|0,X|0,V|0)|0;V=oe(V|0,D|0,z|0,A|0)|0;X=D;ga=c[P+104>>2]^V;ba=c[P+104+4>>2]^X;g=oe(ba|0,ga|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;ca=D;_=Rd((W|T)^g|0,ma^ca|0,24)|0;U=D;ma=Pd((W|T)^g|0,ma^ca|0,40)|0;U=D|U;X=oe(ma|_|0,U|0,V|0,X|0)|0;X=oe(X|0,D|0,k|0,l|0)|0;V=D;c[P+16>>2]=X;c[P+16+4>>2]=V;T=Rd(ba^X|0,ga^V|0,16)|0;W=D;ga=Pd(ba^X|0,ga^V|0,48)|0;W=D|W;ca=oe(ga|T|0,W|0,g|0,ca|0)|0;g=D;ba=Rd((ma|_)^ca|0,U^g|0,63)|0;R=D;U=Pd((ma|_)^ca|0,U^g|0,1)|0;c[P+56>>2]=U|ba;c[P+56+4>>2]=D|R;R=c[P+32>>2]|0;ba=c[P+32+4>>2]|0;S=oe(R|0,ba|0,e|0,S|0)|0;S=oe(S|0,D|0,x|0,y|0)|0;e=D;U=c[P+112>>2]^S;_=c[P+112+4>>2]^e;ma=oe(_|0,U|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;Y=D;ja=Rd(R^ma|0,ba^Y|0,24)|0;Q=D;ba=Pd(R^ma|0,ba^Y|0,40)|0;Q=D|Q;e=oe(ba|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,E|0,F|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;R=Rd(_^e|0,U^S|0,16)|0;Z=D;U=Pd(_^e|0,U^S|0,48)|0;Z=D|Z;Y=oe(U|R|0,Z|0,ma|0,Y|0)|0;ma=D;_=Rd((ba|ja)^Y|0,Q^ma|0,63)|0;ea=D;Q=Pd((ba|ja)^Y|0,Q^ma|0,1)|0;ea=D|ea;$=oe(Q|_|0,ea|0,aa|0,$|0)|0;$=oe($|0,D|0,J|0,K|0)|0;aa=D;g=oe(la^aa|0,(fa|da)^$|0,ca|0,g|0)|0;ca=D;ja=Rd((Q|_)^g|0,ea^ca|0,24)|0;ba=D;ea=Pd((Q|_)^g|0,ea^ca|0,40)|0;ba=D|ba;_=oe(ea|ja|0,ba|0,$|0,aa|0)|0;_=oe(_|0,D|0,E|0,F|0)|0;Q=D;c[P>>2]=_;c[P+4>>2]=Q;ia=Rd(la^aa^_|0,(fa|da)^$^Q|0,16)|0;ha=D;$=Pd(la^aa^_|0,(fa|da)^$^Q|0,48)|0;ha=D|ha;c[P+96>>2]=$|ia;c[P+96+4>>2]=ha;ca=oe($|ia|0,ha|0,g|0,ca|0)|0;g=D;c[P+64>>2]=ca;c[P+64+4>>2]=g;ha=Rd((ea|ja)^ca|0,ba^g|0,63)|0;ia=D;g=Pd((ea|ja)^ca|0,ba^g|0,1)|0;c[P+32>>2]=g|ha;c[P+32+4>>2]=D|ia;ia=c[P+40>>2]|0;ha=c[P+40+4>>2]|0;f=oe(ia|0,ha|0,ka|0,f|0)|0;f=oe(f|0,D|0,u|0,w|0)|0;ka=D;ma=oe(W^ka|0,(ga|T)^f|0,Y|0,ma|0)|0;Y=D;g=Rd(ia^ma|0,ha^Y|0,24)|0;ba=D;ha=Pd(ia^ma|0,ha^Y|0,40)|0;ba=D|ba;ia=oe(ha|g|0,ba|0,f|0,ka|0)|0;ia=oe(ia|0,D|0,L|0,M|0)|0;ca=D;c[P+8>>2]=ia;c[P+8+4>>2]=ca;ja=Rd(W^ka^ia|0,(ga|T)^f^ca|0,16)|0;ea=D;f=Pd(W^ka^ia|0,(ga|T)^f^ca|0,48)|0;ea=D|ea;c[P+104>>2]=f|ja;c[P+104+4>>2]=ea;Y=oe(f|ja|0,ea|0,ma|0,Y|0)|0;ma=D;c[P+72>>2]=Y;c[P+72+4>>2]=ma;ea=Rd((ha|g)^Y|0,ba^ma|0,63)|0;ja=D;ma=Pd((ha|g)^Y|0,ba^ma|0,1)|0;ja=D|ja;ba=c[P+48>>2]|0;Y=c[P+48+4>>2]|0;V=oe(ba|0,Y|0,X|0,V|0)|0;V=oe(V|0,D|0,G|0,I|0)|0;X=D;g=oe(Z^X|0,(U|R)^V|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;ha=D;f=Rd(ba^g|0,Y^ha|0,24)|0;T=D;Y=Pd(ba^g|0,Y^ha|0,40)|0;T=D|T;ba=oe(Y|f|0,T|0,V|0,X|0)|0;ba=oe(ba|0,D|0,h|0,j|0)|0;ga=D;c[P+16>>2]=ba;c[P+16+4>>2]=ga;ka=Rd(Z^X^ba|0,(U|R)^V^ga|0,16)|0;W=D;V=Pd(Z^X^ba|0,(U|R)^V^ga|0,48)|0;W=D|W;c[P+112>>2]=V|ka;c[P+112+4>>2]=W;ha=oe(V|ka|0,W|0,g|0,ha|0)|0;g=D;W=Rd((Y|f)^ha|0,T^g|0,63)|0;ka=D;T=Pd((Y|f)^ha|0,T^g|0,1)|0;ka=D|ka;f=c[P+56>>2]|0;Y=c[P+56+4>>2]|0;S=oe(f|0,Y|0,e|0,S|0)|0;S=oe(S|0,D|0,m|0,n|0)|0;e=D;V=c[P+120>>2]^S;R=c[P+120+4>>2]^e;U=oe(R|0,V|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;X=D;Z=Rd(f^U|0,Y^X|0,24)|0;$=D;Y=Pd(f^U|0,Y^X|0,40)|0;$=D|$;e=oe(Y|Z|0,$|0,S|0,e|0)|0;e=oe(e|0,D|0,z|0,A|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;f=Rd(R^e|0,V^S|0,16)|0;da=D;V=Pd(R^e|0,V^S|0,48)|0;da=D|da;X=oe(V|f|0,da|0,U|0,X|0)|0;U=D;R=Rd((Y|Z)^X|0,$^U|0,63)|0;fa=D;$=Pd((Y|Z)^X|0,$^U|0,1)|0;fa=D|fa;Q=oe(ma|ea|0,ja|0,_|0,Q|0)|0;Q=oe(Q|0,D|0,q|0,r|0)|0;_=D;g=oe(da^_|0,(V|f)^Q|0,ha|0,g|0)|0;ha=D;Z=Rd((ma|ea)^g|0,ja^ha|0,24)|0;Y=D;ja=Pd((ma|ea)^g|0,ja^ha|0,40)|0;Y=D|Y;ea=oe(ja|Z|0,Y|0,Q|0,_|0)|0;ea=oe(ea|0,D|0,v|0,H|0)|0;ma=D;c[P>>2]=ea;c[P+4>>2]=ma;aa=Rd(da^_^ea|0,(V|f)^Q^ma|0,16)|0;la=D;Q=Pd(da^_^ea|0,(V|f)^Q^ma|0,48)|0;la=D|la;c[P+120>>2]=Q|aa;c[P+120+4>>2]=la;ha=oe(Q|aa|0,la|0,g|0,ha|0)|0;g=D;c[P+80>>2]=ha;c[P+80+4>>2]=g;la=Rd((ja|Z)^ha|0,Y^g|0,63)|0;aa=D;g=Pd((ja|Z)^ha|0,Y^g|0,1)|0;c[P+40>>2]=g|la;c[P+40+4>>2]=D|aa;ca=oe(T|W|0,ka|0,ia|0,ca|0)|0;ca=oe(ca|0,D|0,N|0,b|0)|0;ia=D;aa=c[P+96>>2]^ca;la=c[P+96+4>>2]^ia;U=oe(la|0,aa|0,X|0,U|0)|0;X=D;g=Rd((T|W)^U|0,ka^X|0,24)|0;Y=D;ka=Pd((T|W)^U|0,ka^X|0,40)|0;Y=D|Y;ia=oe(ka|g|0,Y|0,ca|0,ia|0)|0;ia=oe(ia|0,D|0,o|0,p|0)|0;ca=D;c[P+8>>2]=ia;c[P+8+4>>2]=ca;W=Rd(la^ia|0,aa^ca|0,16)|0;T=D;aa=Pd(la^ia|0,aa^ca|0,48)|0;T=D|T;X=oe(aa|W|0,T|0,U|0,X|0)|0;U=D;c[P+88>>2]=X;c[P+88+4>>2]=U;la=Rd((ka|g)^X|0,Y^U|0,63)|0;ha=D;U=Pd((ka|g)^X|0,Y^U|0,1)|0;c[P+48>>2]=U|la;c[P+48+4>>2]=D|ha;ga=oe($|R|0,fa|0,ba|0,ga|0)|0;ga=oe(ga|0,D|0,x|0,y|0)|0;ba=D;ha=c[P+104>>2]^ga;la=c[P+104+4>>2]^ba;U=oe(la|0,ha|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;Y=D;X=Rd(($|R)^U|0,fa^Y|0,24)|0;g=D;fa=Pd(($|R)^U|0,fa^Y|0,40)|0;g=D|g;ba=oe(fa|X|0,g|0,ga|0,ba|0)|0;ba=oe(ba|0,D|0,s|0,t|0)|0;ga=D;c[P+16>>2]=ba;c[P+16+4>>2]=ga;R=Rd(la^ba|0,ha^ga|0,16)|0;$=D;ha=Pd(la^ba|0,ha^ga|0,48)|0;$=D|$;Y=oe(ha|R|0,$|0,U|0,Y|0)|0;U=D;la=Rd((fa|X)^Y|0,g^U|0,63)|0;ka=D;g=Pd((fa|X)^Y|0,g^U|0,1)|0;c[P+56>>2]=g|la;c[P+56+4>>2]=D|ka;ka=c[P+32>>2]|0;la=c[P+32+4>>2]|0;S=oe(ka|0,la|0,e|0,S|0)|0;S=oe(S|0,D|0,k|0,l|0)|0;e=D;g=c[P+112>>2]^S;X=c[P+112+4>>2]^e;fa=oe(X|0,g|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;Z=D;ja=Rd(ka^fa|0,la^Z|0,24)|0;Q=D;la=Pd(ka^fa|0,la^Z|0,40)|0;Q=D|Q;e=oe(la|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,B|0,C|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;ka=Rd(X^e|0,g^S|0,16)|0;f=D;g=Pd(X^e|0,g^S|0,48)|0;f=D|f;Z=oe(g|ka|0,f|0,fa|0,Z|0)|0;fa=D;X=Rd((la|ja)^Z|0,Q^fa|0,63)|0;V=D;Q=Pd((la|ja)^Z|0,Q^fa|0,1)|0;V=D|V;ma=oe(Q|X|0,V|0,ea|0,ma|0)|0;ma=oe(ma|0,D|0,s|0,t|0)|0;ea=D;U=oe(T^ea|0,(aa|W)^ma|0,Y|0,U|0)|0;Y=D;ja=Rd((Q|X)^U|0,V^Y|0,24)|0;la=D;V=Pd((Q|X)^U|0,V^Y|0,40)|0;la=D|la;X=oe(V|ja|0,la|0,ma|0,ea|0)|0;X=oe(X|0,D|0,N|0,b|0)|0;Q=D;c[P>>2]=X;c[P+4>>2]=Q;_=Rd(T^ea^X|0,(aa|W)^ma^Q|0,16)|0;da=D;ma=Pd(T^ea^X|0,(aa|W)^ma^Q|0,48)|0;da=D|da;c[P+96>>2]=ma|_;c[P+96+4>>2]=da;Y=oe(ma|_|0,da|0,U|0,Y|0)|0;U=D;c[P+64>>2]=Y;c[P+64+4>>2]=U;da=Rd((V|ja)^Y|0,la^U|0,63)|0;_=D;U=Pd((V|ja)^Y|0,la^U|0,1)|0;c[P+32>>2]=U|da;c[P+32+4>>2]=D|_;_=c[P+40>>2]|0;da=c[P+40+4>>2]|0;ca=oe(_|0,da|0,ia|0,ca|0)|0;ca=oe(ca|0,D|0,L|0,M|0)|0;ia=D;fa=oe($^ia|0,(ha|R)^ca|0,Z|0,fa|0)|0;Z=D;U=Rd(_^fa|0,da^Z|0,24)|0;la=D;da=Pd(_^fa|0,da^Z|0,40)|0;la=D|la;_=oe(da|U|0,la|0,ca|0,ia|0)|0;_=oe(_|0,D|0,z|0,A|0)|0;Y=D;c[P+8>>2]=_;c[P+8+4>>2]=Y;ja=Rd($^ia^_|0,(ha|R)^ca^Y|0,16)|0;V=D;ca=Pd($^ia^_|0,(ha|R)^ca^Y|0,48)|0;V=D|V;c[P+104>>2]=ca|ja;c[P+104+4>>2]=V;Z=oe(ca|ja|0,V|0,fa|0,Z|0)|0;fa=D;c[P+72>>2]=Z;c[P+72+4>>2]=fa;V=Rd((da|U)^Z|0,la^fa|0,63)|0;ja=D;fa=Pd((da|U)^Z|0,la^fa|0,1)|0;ja=D|ja;la=c[P+48>>2]|0;Z=c[P+48+4>>2]|0;ga=oe(la|0,Z|0,ba|0,ga|0)|0;ga=oe(ga|0,D|0,E|0,F|0)|0;ba=D;U=oe(f^ba|0,(g|ka)^ga|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;da=D;ca=Rd(la^U|0,Z^da|0,24)|0;R=D;Z=Pd(la^U|0,Z^da|0,40)|0;R=D|R;la=oe(Z|ca|0,R|0,ga|0,ba|0)|0;la=oe(la|0,D|0,m|0,n|0)|0;ha=D;c[P+16>>2]=la;c[P+16+4>>2]=ha;ia=Rd(f^ba^la|0,(g|ka)^ga^ha|0,16)|0;$=D;ga=Pd(f^ba^la|0,(g|ka)^ga^ha|0,48)|0;$=D|$;c[P+112>>2]=ga|ia;c[P+112+4>>2]=$;da=oe(ga|ia|0,$|0,U|0,da|0)|0;U=D;$=Rd((Z|ca)^da|0,R^U|0,63)|0;ia=D;R=Pd((Z|ca)^da|0,R^U|0,1)|0;ia=D|ia;ca=c[P+56>>2]|0;Z=c[P+56+4>>2]|0;S=oe(ca|0,Z|0,e|0,S|0)|0;S=oe(S|0,D|0,v|0,H|0)|0;e=D;ga=c[P+120>>2]^S;ka=c[P+120+4>>2]^e;g=oe(ka|0,ga|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;ba=D;f=Rd(ca^g|0,Z^ba|0,24)|0;ma=D;Z=Pd(ca^g|0,Z^ba|0,40)|0;ma=D|ma;e=oe(Z|f|0,ma|0,S|0,e|0)|0;e=oe(e|0,D|0,x|0,y|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;ca=Rd(ka^e|0,ga^S|0,16)|0;W=D;ga=Pd(ka^e|0,ga^S|0,48)|0;W=D|W;ba=oe(ga|ca|0,W|0,g|0,ba|0)|0;g=D;ka=Rd((Z|f)^ba|0,ma^g|0,63)|0;aa=D;ma=Pd((Z|f)^ba|0,ma^g|0,1)|0;aa=D|aa;Q=oe(fa|V|0,ja|0,X|0,Q|0)|0;Q=oe(Q|0,D|0,G|0,I|0)|0;X=D;U=oe(W^X|0,(ga|ca)^Q|0,da|0,U|0)|0;da=D;f=Rd((fa|V)^U|0,ja^da|0,24)|0;Z=D;ja=Pd((fa|V)^U|0,ja^da|0,40)|0;Z=D|Z;V=oe(ja|f|0,Z|0,Q|0,X|0)|0;V=oe(V|0,D|0,k|0,l|0)|0;fa=D;c[P>>2]=V;c[P+4>>2]=fa;ea=Rd(W^X^V|0,(ga|ca)^Q^fa|0,16)|0;T=D;Q=Pd(W^X^V|0,(ga|ca)^Q^fa|0,48)|0;T=D|T;c[P+120>>2]=Q|ea;c[P+120+4>>2]=T;da=oe(Q|ea|0,T|0,U|0,da|0)|0;U=D;c[P+80>>2]=da;c[P+80+4>>2]=U;T=Rd((ja|f)^da|0,Z^U|0,63)|0;ea=D;U=Pd((ja|f)^da|0,Z^U|0,1)|0;c[P+40>>2]=U|T;c[P+40+4>>2]=D|ea;Y=oe(R|$|0,ia|0,_|0,Y|0)|0;Y=oe(Y|0,D|0,J|0,K|0)|0;_=D;ea=c[P+96>>2]^Y;T=c[P+96+4>>2]^_;g=oe(T|0,ea|0,ba|0,g|0)|0;ba=D;U=Rd((R|$)^g|0,ia^ba|0,24)|0;Z=D;ia=Pd((R|$)^g|0,ia^ba|0,40)|0;Z=D|Z;_=oe(ia|U|0,Z|0,Y|0,_|0)|0;_=oe(_|0,D|0,u|0,w|0)|0;Y=D;c[P+8>>2]=_;c[P+8+4>>2]=Y;$=Rd(T^_|0,ea^Y|0,16)|0;R=D;ea=Pd(T^_|0,ea^Y|0,48)|0;R=D|R;ba=oe(ea|$|0,R|0,g|0,ba|0)|0;g=D;c[P+88>>2]=ba;c[P+88+4>>2]=g;T=Rd((ia|U)^ba|0,Z^g|0,63)|0;da=D;g=Pd((ia|U)^ba|0,Z^g|0,1)|0;c[P+48>>2]=g|T;c[P+48+4>>2]=D|da;ha=oe(ma|ka|0,aa|0,la|0,ha|0)|0;ha=oe(ha|0,D|0,h|0,j|0)|0;la=D;da=c[P+104>>2]^ha;T=c[P+104+4>>2]^la;g=oe(T|0,da|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;Z=D;ba=Rd((ma|ka)^g|0,aa^Z|0,24)|0;U=D;aa=Pd((ma|ka)^g|0,aa^Z|0,40)|0;U=D|U;la=oe(aa|ba|0,U|0,ha|0,la|0)|0;la=oe(la|0,D|0,o|0,p|0)|0;ha=D;c[P+16>>2]=la;c[P+16+4>>2]=ha;ka=Rd(T^la|0,da^ha|0,16)|0;ma=D;da=Pd(T^la|0,da^ha|0,48)|0;ma=D|ma;Z=oe(da|ka|0,ma|0,g|0,Z|0)|0;g=D;T=Rd((aa|ba)^Z|0,U^g|0,63)|0;ia=D;U=Pd((aa|ba)^Z|0,U^g|0,1)|0;c[P+56>>2]=U|T;c[P+56+4>>2]=D|ia;ia=c[P+32>>2]|0;T=c[P+32+4>>2]|0;S=oe(ia|0,T|0,e|0,S|0)|0;S=oe(S|0,D|0,B|0,C|0)|0;e=D;U=c[P+112>>2]^S;ba=c[P+112+4>>2]^e;aa=oe(ba|0,U|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;f=D;ja=Rd(ia^aa|0,T^f|0,24)|0;Q=D;T=Pd(ia^aa|0,T^f|0,40)|0;Q=D|Q;e=oe(T|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,q|0,r|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;ia=Rd(ba^e|0,U^S|0,16)|0;ca=D;U=Pd(ba^e|0,U^S|0,48)|0;ca=D|ca;f=oe(U|ia|0,ca|0,aa|0,f|0)|0;aa=D;ba=Rd((T|ja)^f|0,Q^aa|0,63)|0;ga=D;Q=Pd((T|ja)^f|0,Q^aa|0,1)|0;ga=D|ga;fa=oe(Q|ba|0,ga|0,V|0,fa|0)|0;fa=oe(fa|0,D|0,B|0,C|0)|0;V=D;g=oe(R^V|0,(ea|$)^fa|0,Z|0,g|0)|0;Z=D;ja=Rd((Q|ba)^g|0,ga^Z|0,24)|0;T=D;ga=Pd((Q|ba)^g|0,ga^Z|0,40)|0;T=D|T;ba=oe(ga|ja|0,T|0,fa|0,V|0)|0;ba=oe(ba|0,D|0,k|0,l|0)|0;Q=D;c[P>>2]=ba;c[P+4>>2]=Q;X=Rd(R^V^ba|0,(ea|$)^fa^Q|0,16)|0;W=D;fa=Pd(R^V^ba|0,(ea|$)^fa^Q|0,48)|0;W=D|W;c[P+96>>2]=fa|X;c[P+96+4>>2]=W;Z=oe(fa|X|0,W|0,g|0,Z|0)|0;g=D;c[P+64>>2]=Z;c[P+64+4>>2]=g;W=Rd((ga|ja)^Z|0,T^g|0,63)|0;X=D;g=Pd((ga|ja)^Z|0,T^g|0,1)|0;c[P+32>>2]=g|W;c[P+32+4>>2]=D|X;X=c[P+40>>2]|0;W=c[P+40+4>>2]|0;Y=oe(X|0,W|0,_|0,Y|0)|0;Y=oe(Y|0,D|0,x|0,y|0)|0;_=D;aa=oe(ma^_|0,(da|ka)^Y|0,f|0,aa|0)|0;f=D;g=Rd(X^aa|0,W^f|0,24)|0;T=D;W=Pd(X^aa|0,W^f|0,40)|0;T=D|T;X=oe(W|g|0,T|0,Y|0,_|0)|0;X=oe(X|0,D|0,o|0,p|0)|0;Z=D;c[P+8>>2]=X;c[P+8+4>>2]=Z;ja=Rd(ma^_^X|0,(da|ka)^Y^Z|0,16)|0;ga=D;Y=Pd(ma^_^X|0,(da|ka)^Y^Z|0,48)|0;ga=D|ga;c[P+104>>2]=Y|ja;c[P+104+4>>2]=ga;f=oe(Y|ja|0,ga|0,aa|0,f|0)|0;aa=D;c[P+72>>2]=f;c[P+72+4>>2]=aa;ga=Rd((W|g)^f|0,T^aa|0,63)|0;ja=D;aa=Pd((W|g)^f|0,T^aa|0,1)|0;ja=D|ja;T=c[P+48>>2]|0;f=c[P+48+4>>2]|0;ha=oe(T|0,f|0,la|0,ha|0)|0;ha=oe(ha|0,D|0,u|0,w|0)|0;la=D;g=oe(ca^la|0,(U|ia)^ha|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;W=D;Y=Rd(T^g|0,f^W|0,24)|0;ka=D;f=Pd(T^g|0,f^W|0,40)|0;ka=D|ka;T=oe(f|Y|0,ka|0,ha|0,la|0)|0;T=oe(T|0,D|0,s|0,t|0)|0;da=D;c[P+16>>2]=T;c[P+16+4>>2]=da;_=Rd(ca^la^T|0,(U|ia)^ha^da|0,16)|0;ma=D;ha=Pd(ca^la^T|0,(U|ia)^ha^da|0,48)|0;ma=D|ma;c[P+112>>2]=ha|_;c[P+112+4>>2]=ma;W=oe(ha|_|0,ma|0,g|0,W|0)|0;g=D;ma=Rd((f|Y)^W|0,ka^g|0,63)|0;_=D;ka=Pd((f|Y)^W|0,ka^g|0,1)|0;_=D|_;Y=c[P+56>>2]|0;f=c[P+56+4>>2]|0;S=oe(Y|0,f|0,e|0,S|0)|0;S=oe(S|0,D|0,h|0,j|0)|0;e=D;ha=c[P+120>>2]^S;ia=c[P+120+4>>2]^e;U=oe(ia|0,ha|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;la=D;ca=Rd(Y^U|0,f^la|0,24)|0;fa=D;f=Pd(Y^U|0,f^la|0,40)|0;fa=D|fa;e=oe(f|ca|0,fa|0,S|0,e|0)|0;e=oe(e|0,D|0,q|0,r|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;Y=Rd(ia^e|0,ha^S|0,16)|0;$=D;ha=Pd(ia^e|0,ha^S|0,48)|0;$=D|$;la=oe(ha|Y|0,$|0,U|0,la|0)|0;U=D;ia=Rd((f|ca)^la|0,fa^U|0,63)|0;ea=D;fa=Pd((f|ca)^la|0,fa^U|0,1)|0;ea=D|ea;Q=oe(aa|ga|0,ja|0,ba|0,Q|0)|0;Q=oe(Q|0,D|0,N|0,b|0)|0;ba=D;g=oe($^ba|0,(ha|Y)^Q|0,W|0,g|0)|0;W=D;ca=Rd((aa|ga)^g|0,ja^W|0,24)|0;f=D;ja=Pd((aa|ga)^g|0,ja^W|0,40)|0;f=D|f;ga=oe(ja|ca|0,f|0,Q|0,ba|0)|0;ga=oe(ga|0,D|0,E|0,F|0)|0;aa=D;c[P>>2]=ga;c[P+4>>2]=aa;V=Rd($^ba^ga|0,(ha|Y)^Q^aa|0,16)|0;R=D;Q=Pd($^ba^ga|0,(ha|Y)^Q^aa|0,48)|0;R=D|R;c[P+120>>2]=Q|V;c[P+120+4>>2]=R;W=oe(Q|V|0,R|0,g|0,W|0)|0;g=D;c[P+80>>2]=W;c[P+80+4>>2]=g;R=Rd((ja|ca)^W|0,f^g|0,63)|0;V=D;g=Pd((ja|ca)^W|0,f^g|0,1)|0;c[P+40>>2]=g|R;c[P+40+4>>2]=D|V;Z=oe(ka|ma|0,_|0,X|0,Z|0)|0;Z=oe(Z|0,D|0,z|0,A|0)|0;X=D;V=c[P+96>>2]^Z;R=c[P+96+4>>2]^X;U=oe(R|0,V|0,la|0,U|0)|0;la=D;g=Rd((ka|ma)^U|0,_^la|0,24)|0;f=D;_=Pd((ka|ma)^U|0,_^la|0,40)|0;f=D|f;X=oe(_|g|0,f|0,Z|0,X|0)|0;X=oe(X|0,D|0,L|0,M|0)|0;Z=D;c[P+8>>2]=X;c[P+8+4>>2]=Z;ma=Rd(R^X|0,V^Z|0,16)|0;ka=D;V=Pd(R^X|0,V^Z|0,48)|0;ka=D|ka;la=oe(V|ma|0,ka|0,U|0,la|0)|0;U=D;c[P+88>>2]=la;c[P+88+4>>2]=U;R=Rd((_|g)^la|0,f^U|0,63)|0;W=D;U=Pd((_|g)^la|0,f^U|0,1)|0;c[P+48>>2]=U|R;c[P+48+4>>2]=D|W;da=oe(fa|ia|0,ea|0,T|0,da|0)|0;da=oe(da|0,D|0,m|0,n|0)|0;T=D;W=c[P+104>>2]^da;R=c[P+104+4>>2]^T;U=oe(R|0,W|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;f=D;la=Rd((fa|ia)^U|0,ea^f|0,24)|0;g=D;ea=Pd((fa|ia)^U|0,ea^f|0,40)|0;g=D|g;T=oe(ea|la|0,g|0,da|0,T|0)|0;T=oe(T|0,D|0,G|0,I|0)|0;da=D;c[P+16>>2]=T;c[P+16+4>>2]=da;ia=Rd(R^T|0,W^da|0,16)|0;fa=D;W=Pd(R^T|0,W^da|0,48)|0;fa=D|fa;f=oe(W|ia|0,fa|0,U|0,f|0)|0;U=D;R=Rd((ea|la)^f|0,g^U|0,63)|0;_=D;g=Pd((ea|la)^f|0,g^U|0,1)|0;c[P+56>>2]=g|R;c[P+56+4>>2]=D|_;_=c[P+32>>2]|0;R=c[P+32+4>>2]|0;S=oe(_|0,R|0,e|0,S|0)|0;S=oe(S|0,D|0,J|0,K|0)|0;e=D;g=c[P+112>>2]^S;la=c[P+112+4>>2]^e;ea=oe(la|0,g|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;ca=D;ja=Rd(_^ea|0,R^ca|0,24)|0;Q=D;R=Pd(_^ea|0,R^ca|0,40)|0;Q=D|Q;e=oe(R|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,v|0,H|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;_=Rd(la^e|0,g^S|0,16)|0;Y=D;g=Pd(la^e|0,g^S|0,48)|0;Y=D|Y;ca=oe(g|_|0,Y|0,ea|0,ca|0)|0;ea=D;la=Rd((R|ja)^ca|0,Q^ea|0,63)|0;ha=D;Q=Pd((R|ja)^ca|0,Q^ea|0,1)|0;ha=D|ha;aa=oe(Q|la|0,ha|0,ga|0,aa|0)|0;aa=oe(aa|0,D|0,v|0,H|0)|0;ga=D;U=oe(ka^ga|0,(V|ma)^aa|0,f|0,U|0)|0;f=D;ja=Rd((Q|la)^U|0,ha^f|0,24)|0;R=D;ha=Pd((Q|la)^U|0,ha^f|0,40)|0;R=D|R;la=oe(ha|ja|0,R|0,aa|0,ga|0)|0;la=oe(la|0,D|0,h|0,j|0)|0;Q=D;c[P>>2]=la;c[P+4>>2]=Q;ba=Rd(ka^ga^la|0,(V|ma)^aa^Q|0,16)|0;$=D;aa=Pd(ka^ga^la|0,(V|ma)^aa^Q|0,48)|0;$=D|$;c[P+96>>2]=aa|ba;c[P+96+4>>2]=$;f=oe(aa|ba|0,$|0,U|0,f|0)|0;U=D;c[P+64>>2]=f;c[P+64+4>>2]=U;$=Rd((ha|ja)^f|0,R^U|0,63)|0;ba=D;U=Pd((ha|ja)^f|0,R^U|0,1)|0;c[P+32>>2]=U|$;c[P+32+4>>2]=D|ba;ba=c[P+40>>2]|0;$=c[P+40+4>>2]|0;Z=oe(ba|0,$|0,X|0,Z|0)|0;Z=oe(Z|0,D|0,k|0,l|0)|0;X=D;ea=oe(fa^X|0,(W|ia)^Z|0,ca|0,ea|0)|0;ca=D;U=Rd(ba^ea|0,$^ca|0,24)|0;R=D;$=Pd(ba^ea|0,$^ca|0,40)|0;R=D|R;ba=oe($|U|0,R|0,Z|0,X|0)|0;ba=oe(ba|0,D|0,m|0,n|0)|0;f=D;c[P+8>>2]=ba;c[P+8+4>>2]=f;ja=Rd(fa^X^ba|0,(W|ia)^Z^f|0,16)|0;ha=D;Z=Pd(fa^X^ba|0,(W|ia)^Z^f|0,48)|0;ha=D|ha;c[P+104>>2]=Z|ja;c[P+104+4>>2]=ha;ca=oe(Z|ja|0,ha|0,ea|0,ca|0)|0;ea=D;c[P+72>>2]=ca;c[P+72+4>>2]=ea;ha=Rd(($|U)^ca|0,R^ea|0,63)|0;ja=D;ea=Pd(($|U)^ca|0,R^ea|0,1)|0;ja=D|ja;R=c[P+48>>2]|0;ca=c[P+48+4>>2]|0;da=oe(R|0,ca|0,T|0,da|0)|0;da=oe(da|0,D|0,o|0,p|0)|0;T=D;U=oe(Y^T|0,(g|_)^da|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;$=D;Z=Rd(R^U|0,ca^$|0,24)|0;ia=D;ca=Pd(R^U|0,ca^$|0,40)|0;ia=D|ia;R=oe(ca|Z|0,ia|0,da|0,T|0)|0;R=oe(R|0,D|0,q|0,r|0)|0;W=D;c[P+16>>2]=R;c[P+16+4>>2]=W;X=Rd(Y^T^R|0,(g|_)^da^W|0,16)|0;fa=D;da=Pd(Y^T^R|0,(g|_)^da^W|0,48)|0;fa=D|fa;c[P+112>>2]=da|X;c[P+112+4>>2]=fa;$=oe(da|X|0,fa|0,U|0,$|0)|0;U=D;fa=Rd((ca|Z)^$|0,ia^U|0,63)|0;X=D;ia=Pd((ca|Z)^$|0,ia^U|0,1)|0;X=D|X;Z=c[P+56>>2]|0;ca=c[P+56+4>>2]|0;S=oe(Z|0,ca|0,e|0,S|0)|0;S=oe(S|0,D|0,s|0,t|0)|0;e=D;da=c[P+120>>2]^S;_=c[P+120+4>>2]^e;g=oe(_|0,da|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;T=D;Y=Rd(Z^g|0,ca^T|0,24)|0;aa=D;ca=Pd(Z^g|0,ca^T|0,40)|0;aa=D|aa;e=oe(ca|Y|0,aa|0,S|0,e|0)|0;e=oe(e|0,D|0,u|0,w|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;Z=Rd(_^e|0,da^S|0,16)|0;ma=D;da=Pd(_^e|0,da^S|0,48)|0;ma=D|ma;T=oe(da|Z|0,ma|0,g|0,T|0)|0;g=D;_=Rd((ca|Y)^T|0,aa^g|0,63)|0;V=D;aa=Pd((ca|Y)^T|0,aa^g|0,1)|0;V=D|V;Q=oe(ea|ha|0,ja|0,la|0,Q|0)|0;Q=oe(Q|0,D|0,x|0,y|0)|0;la=D;U=oe(ma^la|0,(da|Z)^Q|0,$|0,U|0)|0;$=D;Y=Rd((ea|ha)^U|0,ja^$|0,24)|0;ca=D;ja=Pd((ea|ha)^U|0,ja^$|0,40)|0;ca=D|ca;ha=oe(ja|Y|0,ca|0,Q|0,la|0)|0;ha=oe(ha|0,D|0,z|0,A|0)|0;ea=D;c[P>>2]=ha;c[P+4>>2]=ea;ga=Rd(ma^la^ha|0,(da|Z)^Q^ea|0,16)|0;ka=D;Q=Pd(ma^la^ha|0,(da|Z)^Q^ea|0,48)|0;ka=D|ka;c[P+120>>2]=Q|ga;c[P+120+4>>2]=ka;$=oe(Q|ga|0,ka|0,U|0,$|0)|0;U=D;c[P+80>>2]=$;c[P+80+4>>2]=U;ka=Rd((ja|Y)^$|0,ca^U|0,63)|0;ga=D;U=Pd((ja|Y)^$|0,ca^U|0,1)|0;c[P+40>>2]=U|ka;c[P+40+4>>2]=D|ga;f=oe(ia|fa|0,X|0,ba|0,f|0)|0;f=oe(f|0,D|0,B|0,C|0)|0;ba=D;ga=c[P+96>>2]^f;ka=c[P+96+4>>2]^ba;g=oe(ka|0,ga|0,T|0,g|0)|0;T=D;U=Rd((ia|fa)^g|0,X^T|0,24)|0;ca=D;X=Pd((ia|fa)^g|0,X^T|0,40)|0;ca=D|ca;ba=oe(X|U|0,ca|0,f|0,ba|0)|0;ba=oe(ba|0,D|0,E|0,F|0)|0;f=D;c[P+8>>2]=ba;c[P+8+4>>2]=f;fa=Rd(ka^ba|0,ga^f|0,16)|0;ia=D;ga=Pd(ka^ba|0,ga^f|0,48)|0;ia=D|ia;T=oe(ga|fa|0,ia|0,g|0,T|0)|0;g=D;c[P+88>>2]=T;c[P+88+4>>2]=g;ka=Rd((X|U)^T|0,ca^g|0,63)|0;$=D;g=Pd((X|U)^T|0,ca^g|0,1)|0;c[P+48>>2]=g|ka;c[P+48+4>>2]=D|$;W=oe(aa|_|0,V|0,R|0,W|0)|0;W=oe(W|0,D|0,G|0,I|0)|0;R=D;$=c[P+104>>2]^W;ka=c[P+104+4>>2]^R;g=oe(ka|0,$|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;ca=D;T=Rd((aa|_)^g|0,V^ca|0,24)|0;U=D;V=Pd((aa|_)^g|0,V^ca|0,40)|0;U=D|U;R=oe(V|T|0,U|0,W|0,R|0)|0;R=oe(R|0,D|0,J|0,K|0)|0;W=D;c[P+16>>2]=R;c[P+16+4>>2]=W;_=Rd(ka^R|0,$^W|0,16)|0;aa=D;$=Pd(ka^R|0,$^W|0,48)|0;aa=D|aa;ca=oe($|_|0,aa|0,g|0,ca|0)|0;g=D;ka=Rd((V|T)^ca|0,U^g|0,63)|0;X=D;U=Pd((V|T)^ca|0,U^g|0,1)|0;c[P+56>>2]=U|ka;c[P+56+4>>2]=D|X;X=c[P+32>>2]|0;ka=c[P+32+4>>2]|0;S=oe(X|0,ka|0,e|0,S|0)|0;S=oe(S|0,D|0,L|0,M|0)|0;e=D;U=c[P+112>>2]^S;T=c[P+112+4>>2]^e;V=oe(T|0,U|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;Y=D;ja=Rd(X^V|0,ka^Y|0,24)|0;Q=D;ka=Pd(X^V|0,ka^Y|0,40)|0;Q=D|Q;e=oe(ka|ja|0,Q|0,S|0,e|0)|0;e=oe(e|0,D|0,N|0,b|0)|0;S=D;c[P+24>>2]=e;c[P+24+4>>2]=S;X=Rd(T^e|0,U^S|0,16)|0;Z=D;U=Pd(T^e|0,U^S|0,48)|0;Z=D|Z;Y=oe(U|X|0,Z|0,V|0,Y|0)|0;V=D;T=Rd((ka|ja)^Y|0,Q^V|0,63)|0;da=D;Q=Pd((ka|ja)^Y|0,Q^V|0,1)|0;da=D|da;ea=oe(Q|T|0,da|0,ha|0,ea|0)|0;ea=oe(ea|0,D|0,L|0,M|0)|0;ha=D;g=oe(ia^ha|0,(ga|fa)^ea|0,ca|0,g|0)|0;L=D;ca=Rd((Q|T)^g|0,da^L|0,24)|0;M=D;da=Pd((Q|T)^g|0,da^L|0,40)|0;M=D|M;T=oe(da|ca|0,M|0,ea|0,ha|0)|0;T=oe(T|0,D|0,B|0,C|0)|0;Q=D;c[P>>2]=T;c[P+4>>2]=Q;B=Rd(ia^ha^T|0,(ga|fa)^ea^Q|0,16)|0;C=D;ea=Pd(ia^ha^T|0,(ga|fa)^ea^Q|0,48)|0;C=D|C;c[P+96>>2]=ea|B;c[P+96+4>>2]=C;C=oe(ea|B|0,C|0,g|0,L|0)|0;L=D;c[P+64>>2]=C;c[P+64+4>>2]=L;B=Rd((da|ca)^C|0,M^L|0,63)|0;g=D;L=Pd((da|ca)^C|0,M^L|0,1)|0;c[P+32>>2]=L|B;c[P+32+4>>2]=D|g;g=c[P+40>>2]|0;B=c[P+40+4>>2]|0;L=oe(g|0,B|0,ba|0,f|0)|0;L=oe(L|0,D|0,o|0,p|0)|0;p=D;V=oe(aa^p|0,($|_)^L|0,Y|0,V|0)|0;Y=D;M=Rd(g^V|0,B^Y|0,24)|0;C=D;B=Pd(g^V|0,B^Y|0,40)|0;C=D|C;o=oe(B|M|0,C|0,L|0,p|0)|0;o=oe(o|0,D|0,x|0,y|0)|0;x=D;c[P+8>>2]=o;c[P+8+4>>2]=x;g=Rd(aa^p^o|0,($|_)^L^x|0,16)|0;f=D;y=Pd(aa^p^o|0,($|_)^L^x|0,48)|0;f=D|f;c[P+104>>2]=y|g;c[P+104+4>>2]=f;Y=oe(y|g|0,f|0,V|0,Y|0)|0;V=D;c[P+72>>2]=Y;c[P+72+4>>2]=V;f=Rd((B|M)^Y|0,C^V|0,63)|0;g=D;V=Pd((B|M)^Y|0,C^V|0,1)|0;g=D|g;C=c[P+48>>2]|0;Y=c[P+48+4>>2]|0;M=oe(C|0,Y|0,R|0,W|0)|0;M=oe(M|0,D|0,z|0,A|0)|0;z=D;y=oe(Z^z|0,(U|X)^M|0,c[P+80>>2]|0,c[P+80+4>>2]|0)|0;W=D;R=Rd(C^y|0,Y^W|0,24)|0;B=D;Y=Pd(C^y|0,Y^W|0,40)|0;B=D|B;C=oe(Y|R|0,B|0,M|0,z|0)|0;C=oe(C|0,D|0,N|0,b|0)|0;L=D;c[P+16>>2]=C;c[P+16+4>>2]=L;N=Rd(Z^z^C|0,(U|X)^M^L|0,16)|0;b=D;M=Pd(Z^z^C|0,(U|X)^M^L|0,48)|0;b=D|b;c[P+112>>2]=M|N;c[P+112+4>>2]=b;W=oe(M|N|0,b|0,y|0,W|0)|0;b=D;N=Rd((Y|R)^W|0,B^b|0,63)|0;y=D;B=Pd((Y|R)^W|0,B^b|0,1)|0;y=D|y;R=c[P+56>>2]|0;Y=c[P+56+4>>2]|0;M=oe(R|0,Y|0,e|0,S|0)|0;M=oe(M|0,D|0,J|0,K|0)|0;K=D;S=c[P+120>>2]^M;e=c[P+120+4>>2]^K;z=oe(e|0,S|0,c[P+88>>2]|0,c[P+88+4>>2]|0)|0;p=D;X=Rd(R^z|0,Y^p|0,24)|0;A=D;Y=Pd(R^z|0,Y^p|0,40)|0;A=D|A;K=oe(Y|X|0,A|0,M|0,K|0)|0;K=oe(K|0,D|0,s|0,t|0)|0;M=D;c[P+24>>2]=K;c[P+24+4>>2]=M;R=Rd(e^K|0,S^M|0,16)|0;U=D;S=Pd(e^K|0,S^M|0,48)|0;U=D|U;p=oe(S|R|0,U|0,z|0,p|0)|0;z=D;e=Rd((Y|X)^p|0,A^z|0,63)|0;J=D;A=Pd((Y|X)^p|0,A^z|0,1)|0;J=D|J;Q=oe(V|f|0,g|0,T|0,Q|0)|0;Q=oe(Q|0,D|0,h|0,j|0)|0;T=D;t=oe(U^T|0,(S|R)^Q|0,W|0,b|0)|0;s=D;h=Rd((V|f)^t|0,g^s|0,24)|0;j=D;g=Pd((V|f)^t|0,g^s|0,40)|0;j=D|j;f=oe(g|h|0,j|0,Q|0,T|0)|0;f=oe(f|0,D|0,G|0,I|0)|0;b=D;c[P>>2]=f;c[P+4>>2]=b;I=Rd(U^T^f|0,(S|R)^Q^b|0,16)|0;G=D;Q=Pd(U^T^f|0,(S|R)^Q^b|0,48)|0;G=D|G;c[P+120>>2]=Q|I;c[P+120+4>>2]=G;G=oe(Q|I|0,G|0,t|0,s|0)|0;I=D;c[P+80>>2]=G;c[P+80+4>>2]=I;s=Rd((g|h)^G|0,j^I|0,63)|0;t=D;I=Pd((g|h)^G|0,j^I|0,1)|0;c[P+40>>2]=I|s;c[P+40+4>>2]=D|t;x=oe(B|N|0,y|0,o|0,x|0)|0;x=oe(x|0,D|0,v|0,H|0)|0;t=D;v=c[P+96>>2]^x;s=c[P+96+4>>2]^t;H=oe(s|0,v|0,p|0,z|0)|0;I=D;z=Rd((B|N)^H|0,y^I|0,24)|0;G=D;y=Pd((B|N)^H|0,y^I|0,40)|0;G=D|G;t=oe(y|z|0,G|0,x|0,t|0)|0;t=oe(t|0,D|0,k|0,l|0)|0;x=D;c[P+8>>2]=t;c[P+8+4>>2]=x;N=Rd(s^t|0,v^x|0,16)|0;B=D;x=Pd(s^t|0,v^x|0,48)|0;B=D|B;c[P+96>>2]=x|N;c[P+96+4>>2]=B;I=oe(x|N|0,B|0,H|0,I|0)|0;H=D;c[P+88>>2]=I;c[P+88+4>>2]=H;B=Rd((y|z)^I|0,G^H|0,63)|0;N=D;H=Pd((y|z)^I|0,G^H|0,1)|0;c[P+48>>2]=H|B;c[P+48+4>>2]=D|N;L=oe(A|e|0,J|0,C|0,L|0)|0;L=oe(L|0,D|0,E|0,F|0)|0;C=D;N=c[P+104>>2]^L;B=c[P+104+4>>2]^C;H=oe(B|0,N|0,c[P+64>>2]|0,c[P+64+4>>2]|0)|0;G=D;E=Rd((A|e)^H|0,J^G|0,24)|0;F=D;J=Pd((A|e)^H|0,J^G|0,40)|0;F=D|F;C=oe(J|E|0,F|0,L|0,C|0)|0;C=oe(C|0,D|0,u|0,w|0)|0;L=D;c[P+16>>2]=C;c[P+16+4>>2]=L;e=Rd(B^C|0,N^L|0,16)|0;I=D;L=Pd(B^C|0,N^L|0,48)|0;I=D|I;c[P+104>>2]=L|e;c[P+104+4>>2]=I;G=oe(L|e|0,I|0,H|0,G|0)|0;H=D;c[P+64>>2]=G;c[P+64+4>>2]=H;I=Rd((J|E)^G|0,F^H|0,63)|0;e=D;H=Pd((J|E)^G|0,F^H|0,1)|0;c[P+56>>2]=H|I;c[P+56+4>>2]=D|e;e=c[P+32>>2]|0;I=c[P+32+4>>2]|0;H=oe(e|0,I|0,K|0,M|0)|0;H=oe(H|0,D|0,q|0,r|0)|0;F=D;G=c[P+112>>2]^H;E=c[P+112+4>>2]^F;M=oe(E|0,G|0,c[P+72>>2]|0,c[P+72+4>>2]|0)|0;K=D;J=Rd(e^M|0,I^K|0,24)|0;L=D;I=Pd(e^M|0,I^K|0,40)|0;L=D|L;F=oe(I|J|0,L|0,H|0,F|0)|0;F=oe(F|0,D|0,m|0,n|0)|0;H=D;c[P+24>>2]=F;c[P+24+4>>2]=H;e=Rd(E^F|0,G^H|0,16)|0;N=D;H=Pd(E^F|0,G^H|0,48)|0;N=D|N;c[P+112>>2]=H|e;c[P+112+4>>2]=N;K=oe(H|e|0,N|0,M|0,K|0)|0;M=D;c[P+72>>2]=K;c[P+72+4>>2]=M;N=Rd((I|J)^K|0,L^M|0,63)|0;e=D;M=Pd((I|J)^K|0,L^M|0,1)|0;c[P+32>>2]=M|N;c[P+32+4>>2]=D|e;e=0;while(1){ma=a+(e<<3)|0;la=P+(e+8<<3)|0;b=b^c[ma+4>>2]^c[la+4>>2];c[ma>>2]=f^c[ma>>2]^c[la>>2];c[ma+4>>2]=b;b=e+1|0;if((b|0)==8)break;e=b;f=c[P+(b<<3)>>2]|0;b=c[P+(b<<3)+4>>2]|0}i=O;return}function ja(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0;O=d[c>>0]|0;P=Pd(d[c+1>>0]|0|0,0,8)|0;jb=D;j=d[c+2>>0]|0;db=Pd(j|0,0,16)|0;Ma=Pd(d[c+3>>0]|0|0,0,8)|0;qb=D;A=Pd(d[c+4>>0]|0|0,0,16)|0;qb=qb|D;nb=d[c+5>>0]|0;z=Pd(nb|0,0,24)|0;qb=Rd(Ma|j|A|z|0,qb|D|0,5)|0;z=Pd(d[c+6>>0]|0|0,0,8)|0;A=D;j=d[c+7>>0]|0;Ma=Pd(j|0,0,16)|0;A=Rd(z|nb|Ma|0,A|D|0,2)|0;Ma=Pd(d[c+8>>0]|0|0,0,8)|0;nb=D;z=Pd(d[c+9>>0]|0|0,0,16)|0;nb=nb|D;ca=d[c+10>>0]|0;lb=Pd(ca|0,0,24)|0;nb=Rd(Ma|j|z|lb|0,nb|D|0,7)|0;lb=Pd(d[c+11>>0]|0|0,0,8)|0;z=D;j=Pd(d[c+12>>0]|0|0,0,16)|0;z=z|D;Ma=d[c+13>>0]|0;ra=Pd(Ma|0,0,24)|0;z=Rd(lb|ca|j|ra|0,z|D|0,4)|0;ra=Pd(d[c+14>>0]|0|0,0,8)|0;j=D;ca=d[c+15>>0]|0;lb=Pd(ca|0,0,16)|0;j=Rd(ra|Ma|lb|0,j|D|0,1)|0;lb=Pd(d[c+16>>0]|0|0,0,8)|0;Ma=D;ra=Pd(d[c+17>>0]|0|0,0,16)|0;Ma=Ma|D;Ca=d[c+18>>0]|0;I=Pd(Ca|0,0,24)|0;Ma=Rd(lb|ca|ra|I|0,Ma|D|0,6)|0;I=Pd(d[c+19>>0]|0|0,0,8)|0;ra=D;ca=Pd(d[c+20>>0]|0|0,0,16)|0;ra=Rd(I|Ca|ca|0,ra|D|0,3)|0;ca=D;Ca=d[c+21>>0]|0;I=Pd(d[c+22>>0]|0|0,0,8)|0;lb=D;eb=d[c+23>>0]|0;Ja=Pd(eb|0,0,16)|0;ba=Pd(d[c+24>>0]|0|0,0,8)|0;La=D;sc=Pd(d[c+25>>0]|0|0,0,16)|0;La=La|D;o=d[c+26>>0]|0;rb=Pd(o|0,0,24)|0;La=Rd(ba|eb|sc|rb|0,La|D|0,5)|0;rb=Pd(d[c+27>>0]|0|0,0,8)|0;sc=D;eb=d[c+28>>0]|0;ba=Pd(eb|0,0,16)|0;sc=Rd(rb|o|ba|0,sc|D|0,2)|0;ba=Pd(d[c+29>>0]|0|0,0,8)|0;o=D;rb=Pd(d[c+30>>0]|0|0,0,16)|0;o=o|D;Da=Pd(d[c+31>>0]|0|0,0,24)|0;o=Rd(ba|eb|rb|Da|0,o|D|0,7)|0;Da=D;rb=d[e>>0]|0;eb=Pd(d[e+1>>0]|0|0,0,8)|0;ba=D;Ta=d[e+2>>0]|0;aa=Pd(Ta|0,0,16)|0;m=Pd(d[e+3>>0]|0|0,0,8)|0;Ya=D;q=Pd(d[e+4>>0]|0|0,0,16)|0;Ya=Ya|D;p=d[e+5>>0]|0;ea=Pd(p|0,0,24)|0;Ya=Rd(m|Ta|q|ea|0,Ya|D|0,5)|0;ea=Pd(d[e+6>>0]|0|0,0,8)|0;q=D;Ta=d[e+7>>0]|0;m=Pd(Ta|0,0,16)|0;q=Rd(ea|p|m|0,q|D|0,2)|0;m=Pd(d[e+8>>0]|0|0,0,8)|0;p=D;ea=Pd(d[e+9>>0]|0|0,0,16)|0;p=p|D;wc=d[e+10>>0]|0;wa=Pd(wc|0,0,24)|0;p=Rd(m|Ta|ea|wa|0,p|D|0,7)|0;wa=Pd(d[e+11>>0]|0|0,0,8)|0;ea=D;Ta=Pd(d[e+12>>0]|0|0,0,16)|0;ea=ea|D;m=d[e+13>>0]|0;zc=Pd(m|0,0,24)|0;ea=Rd(wa|wc|Ta|zc|0,ea|D|0,4)|0;zc=Pd(d[e+14>>0]|0|0,0,8)|0;Ta=D;wc=d[e+15>>0]|0;wa=Pd(wc|0,0,16)|0;Ta=Rd(zc|m|wa|0,Ta|D|0,1)|0;wa=Pd(d[e+16>>0]|0|0,0,8)|0;m=D;zc=Pd(d[e+17>>0]|0|0,0,16)|0;m=m|D;ub=d[e+18>>0]|0;uc=Pd(ub|0,0,24)|0;m=Rd(wa|wc|zc|uc|0,m|D|0,6)|0;uc=Pd(d[e+19>>0]|0|0,0,8)|0;zc=D;wc=Pd(d[e+20>>0]|0|0,0,16)|0;zc=Rd(uc|ub|wc|0,zc|D|0,3)|0;wc=D;ub=d[e+21>>0]|0;uc=Pd(d[e+22>>0]|0|0,0,8)|0;wa=D;pc=d[e+23>>0]|0;na=Pd(pc|0,0,16)|0;W=Pd(d[e+24>>0]|0|0,0,8)|0;Ia=D;K=Pd(d[e+25>>0]|0|0,0,16)|0;Ia=Ia|D;x=d[e+26>>0]|0;qc=Pd(x|0,0,24)|0;Ia=Rd(W|pc|K|qc|0,Ia|D|0,5)|0;qc=Pd(d[e+27>>0]|0|0,0,8)|0;K=D;pc=d[e+28>>0]|0;W=Pd(pc|0,0,16)|0;K=Rd(qc|x|W|0,K|D|0,2)|0;W=Pd(d[e+29>>0]|0|0,0,8)|0;x=D;qc=Pd(d[e+30>>0]|0|0,0,16)|0;x=x|D;Ba=Pd(d[e+31>>0]|0|0,0,24)|0;x=Rd(W|pc|qc|Ba|0,x|D|0,7)|0;Ba=D;qc=d[f>>0]|0;pc=Pd(d[f+1>>0]|0|0,0,8)|0;W=D;y=d[f+2>>0]|0;rc=Pd(y|0,0,16)|0;Qa=Pd(d[f+3>>0]|0|0,0,8)|0;xa=D;Fa=Pd(d[f+4>>0]|0|0,0,16)|0;xa=xa|D;ib=d[f+5>>0]|0;za=Pd(ib|0,0,24)|0;xa=Rd(Qa|y|Fa|za|0,xa|D|0,5)|0;za=Pd(d[f+6>>0]|0|0,0,8)|0;Fa=D;y=d[f+7>>0]|0;Qa=Pd(y|0,0,16)|0;Fa=Rd(za|ib|Qa|0,Fa|D|0,2)|0;Qa=Pd(d[f+8>>0]|0|0,0,8)|0;ib=D;za=Pd(d[f+9>>0]|0|0,0,16)|0;ib=ib|D;h=d[f+10>>0]|0;Y=Pd(h|0,0,24)|0;ib=Rd(Qa|y|za|Y|0,ib|D|0,7)|0;Y=Pd(d[f+11>>0]|0|0,0,8)|0;za=D;y=Pd(d[f+12>>0]|0|0,0,16)|0;za=za|D;Qa=d[f+13>>0]|0;B=Pd(Qa|0,0,24)|0;za=Rd(Y|h|y|B|0,za|D|0,4)|0;B=Pd(d[f+14>>0]|0|0,0,8)|0;y=D;h=d[f+15>>0]|0;Y=Pd(h|0,0,16)|0;y=Rd(B|Qa|Y|0,y|D|0,1)|0;Y=Pd(d[f+16>>0]|0|0,0,8)|0;Qa=D;B=Pd(d[f+17>>0]|0|0,0,16)|0;Qa=Qa|D;sa=d[f+18>>0]|0;H=Pd(sa|0,0,24)|0;Qa=Rd(Y|h|B|H|0,Qa|D|0,6)|0;H=Pd(d[f+19>>0]|0|0,0,8)|0;B=D;h=Pd(d[f+20>>0]|0|0,0,16)|0;B=Rd(H|sa|h|0,B|D|0,3)|0;h=D;sa=d[f+21>>0]|0;H=Pd(d[f+22>>0]|0|0,0,8)|0;Y=D;ma=d[f+23>>0]|0;Z=Pd(ma|0,0,16)|0;ua=Pd(d[f+24>>0]|0|0,0,8)|0;G=D;N=Pd(d[f+25>>0]|0|0,0,16)|0;G=G|D;c=d[f+26>>0]|0;Aa=Pd(c|0,0,24)|0;G=Rd(ua|ma|N|Aa|0,G|D|0,5)|0;Aa=Pd(d[f+27>>0]|0|0,0,8)|0;N=D;ma=d[f+28>>0]|0;ua=Pd(ma|0,0,16)|0;N=Rd(Aa|c|ua|0,N|D|0,2)|0;ua=Pd(d[f+29>>0]|0|0,0,8)|0;c=D;Aa=Pd(d[f+30>>0]|0|0,0,16)|0;c=c|D;i=Pd(d[f+31>>0]|0|0,0,24)|0;c=Rd(ua|ma|Aa|i|0,c|D|0,7)|0;i=D;Aa=Ed(eb|rb|aa&2031616|0,ba|0,P|O|db&2031616|0,jb|0)|0;Aa=oe(pc|qc|rc&2031616|0,W|0,Aa|0,D|0)|0;W=D;rc=Ed(Ya&2097151|0,0,P|O|db&2031616|0,jb|0)|0;qc=D;pc=Ed(eb|rb|aa&2031616|0,ba|0,qb&2097151|0,0)|0;ma=D;ua=Ed(q&2097151|0,0,P|O|db&2031616|0,jb|0)|0;Ea=D;va=Ed(Ya&2097151|0,0,qb&2097151|0,0)|0;kc=D;ia=Ed(eb|rb|aa&2031616|0,ba|0,A&2097151|0,0)|0;ia=oe(va|0,kc|0,ia|0,D|0)|0;Ea=oe(ia|0,D|0,ua|0,Ea|0)|0;Fa=oe(Ea|0,D|0,Fa&2097151|0,0)|0;Ea=D;ua=Ed(p&2097151|0,0,P|O|db&2031616|0,jb|0)|0;ia=D;kc=Ed(q&2097151|0,0,qb&2097151|0,0)|0;va=D;oc=Ed(Ya&2097151|0,0,A&2097151|0,0)|0;nc=D;mc=Ed(eb|rb|aa&2031616|0,ba|0,nb&2097151|0,0)|0;lc=D;Ha=Ed(ea&2097151|0,0,P|O|db&2031616|0,jb|0)|0;ya=D;bc=Ed(p&2097151|0,0,qb&2097151|0,0)|0;u=D;dc=Ed(q&2097151|0,0,A&2097151|0,0)|0;Ga=D;ec=Ed(Ya&2097151|0,0,nb&2097151|0,0)|0;fc=D;cc=Ed(eb|rb|aa&2031616|0,ba|0,z&2097151|0,0)|0;cc=oe(ec|0,fc|0,cc|0,D|0)|0;Ga=oe(cc|0,D|0,dc|0,Ga|0)|0;u=oe(Ga|0,D|0,bc|0,u|0)|0;ya=oe(u|0,D|0,Ha|0,ya|0)|0;za=oe(ya|0,D|0,za&2097151|0,0)|0;ya=D;Ha=Ed(Ta&2097151|0,0,P|O|db&2031616|0,jb|0)|0;u=D;bc=Ed(ea&2097151|0,0,qb&2097151|0,0)|0;Ga=D;dc=Ed(p&2097151|0,0,A&2097151|0,0)|0;cc=D;fc=Ed(q&2097151|0,0,nb&2097151|0,0)|0;ec=D;jc=Ed(Ya&2097151|0,0,z&2097151|0,0)|0;ic=D;hc=Ed(eb|rb|aa&2031616|0,ba|0,j&2097151|0,0)|0;gc=D;X=Ed(m&2097151|0,0,P|O|db&2031616|0,jb|0)|0;Ra=D;Qb=Ed(Ta&2097151|0,0,qb&2097151|0,0)|0;da=D;Sb=Ed(ea&2097151|0,0,A&2097151|0,0)|0;Pb=D;Ub=Ed(p&2097151|0,0,nb&2097151|0,0)|0;Rb=D;Wb=Ed(q&2097151|0,0,z&2097151|0,0)|0;Tb=D;Xb=Ed(Ya&2097151|0,0,j&2097151|0,0)|0;Yb=D;Vb=Ed(eb|rb|aa&2031616|0,ba|0,Ma&2097151|0,0)|0;Vb=oe(Xb|0,Yb|0,Vb|0,D|0)|0;Tb=oe(Vb|0,D|0,Wb|0,Tb|0)|0;Rb=oe(Tb|0,D|0,Ub|0,Rb|0)|0;Pb=oe(Rb|0,D|0,Sb|0,Pb|0)|0;da=oe(Pb|0,D|0,Qb|0,da|0)|0;Ra=oe(da|0,D|0,X|0,Ra|0)|0;Qa=oe(Ra|0,D|0,Qa&2097151|0,0)|0;Ra=D;X=Ed(zc|0,wc|0,P|O|db&2031616|0,jb|0)|0;da=D;Qb=Ed(m&2097151|0,0,qb&2097151|0,0)|0;Pb=D;Sb=Ed(Ta&2097151|0,0,A&2097151|0,0)|0;Rb=D;Ub=Ed(ea&2097151|0,0,nb&2097151|0,0)|0;Tb=D;Wb=Ed(p&2097151|0,0,z&2097151|0,0)|0;Vb=D;Yb=Ed(q&2097151|0,0,j&2097151|0,0)|0;Xb=D;ac=Ed(Ya&2097151|0,0,Ma&2097151|0,0)|0;$b=D;_b=Ed(eb|rb|aa&2031616|0,ba|0,ra|0,ca|0)|0;Zb=D;ta=Ed(uc|ub|na&2031616|0,wa|0,P|O|db&2031616|0,jb|0)|0;yb=D;zb=Ed(zc|0,wc|0,qb&2097151|0,0)|0;Ab=D;Bb=Ed(m&2097151|0,0,A&2097151|0,0)|0;Cb=D;Db=Ed(Ta&2097151|0,0,nb&2097151|0,0)|0;Eb=D;Fb=Ed(ea&2097151|0,0,z&2097151|0,0)|0;Gb=D;Hb=Ed(p&2097151|0,0,j&2097151|0,0)|0;Ib=D;Jb=Ed(q&2097151|0,0,Ma&2097151|0,0)|0;Kb=D;Mb=Ed(Ya&2097151|0,0,ra|0,ca|0)|0;Nb=D;Ob=Ed(eb|rb|aa&2031616|0,ba|0,I|Ca|Ja&2031616|0,lb|0)|0;Ob=oe(Mb|0,Nb|0,Ob|0,D|0)|0;Kb=oe(Ob|0,D|0,Jb|0,Kb|0)|0;Ib=oe(Kb|0,D|0,Hb|0,Ib|0)|0;Gb=oe(Ib|0,D|0,Fb|0,Gb|0)|0;Eb=oe(Gb|0,D|0,Db|0,Eb|0)|0;Cb=oe(Eb|0,D|0,Bb|0,Cb|0)|0;Ab=oe(Cb|0,D|0,zb|0,Ab|0)|0;yb=oe(Ab|0,D|0,ta|0,yb|0)|0;Y=oe(yb|0,D|0,H|sa|Z&2031616|0,Y|0)|0;Z=D;sa=Ed(Ia&2097151|0,0,P|O|db&2031616|0,jb|0)|0;H=D;yb=Ed(uc|ub|na&2031616|0,wa|0,qb&2097151|0,0)|0;ta=D;Ab=Ed(zc|0,wc|0,A&2097151|0,0)|0;zb=D;Cb=Ed(m&2097151|0,0,nb&2097151|0,0)|0;Bb=D;Eb=Ed(Ta&2097151|0,0,z&2097151|0,0)|0;Db=D;Gb=Ed(ea&2097151|0,0,j&2097151|0,0)|0;Fb=D;Ib=Ed(p&2097151|0,0,Ma&2097151|0,0)|0;Hb=D;Kb=Ed(q&2097151|0,0,ra|0,ca|0)|0;Jb=D;Ob=Ed(Ya&2097151|0,0,I|Ca|Ja&2031616|0,lb|0)|0;Nb=D;Mb=Ed(eb|rb|aa&2031616|0,ba|0,La&2097151|0,0)|0;Lb=D;ab=Ed(K&2097151|0,0,P|O|db&2031616|0,jb|0)|0;M=D;Q=Ed(Ia&2097151|0,0,qb&2097151|0,0)|0;bb=D;ob=Ed(uc|ub|na&2031616|0,wa|0,A&2097151|0,0)|0;R=D;J=Ed(zc|0,wc|0,nb&2097151|0,0)|0;pb=D;Oa=Ed(m&2097151|0,0,z&2097151|0,0)|0;C=D;gb=Ed(Ta&2097151|0,0,j&2097151|0,0)|0;Pa=D;U=Ed(ea&2097151|0,0,Ma&2097151|0,0)|0;hb=D;Wa=Ed(p&2097151|0,0,ra|0,ca|0)|0;V=D;xb=Ed(q&2097151|0,0,I|Ca|Ja&2031616|0,lb|0)|0;Xa=D;fa=Ed(Ya&2097151|0,0,La&2097151|0,0)|0;w=D;wb=Ed(eb|rb|aa&2031616|0,ba|0,sc&2097151|0,0)|0;wb=oe(fa|0,w|0,wb|0,D|0)|0;Xa=oe(wb|0,D|0,xb|0,Xa|0)|0;V=oe(Xa|0,D|0,Wa|0,V|0)|0;hb=oe(V|0,D|0,U|0,hb|0)|0;Pa=oe(hb|0,D|0,gb|0,Pa|0)|0;C=oe(Pa|0,D|0,Oa|0,C|0)|0;pb=oe(C|0,D|0,J|0,pb|0)|0;R=oe(pb|0,D|0,ob|0,R|0)|0;bb=oe(R|0,D|0,Q|0,bb|0)|0;M=oe(bb|0,D|0,ab|0,M|0)|0;N=oe(M|0,D|0,N&2097151|0,0)|0;M=D;jb=Ed(x|0,Ba|0,P|O|db&2031616|0,jb|0)|0;db=D;O=Ed(K&2097151|0,0,qb&2097151|0,0)|0;P=D;ab=Ed(Ia&2097151|0,0,A&2097151|0,0)|0;bb=D;Q=Ed(uc|ub|na&2031616|0,wa|0,nb&2097151|0,0)|0;R=D;ob=Ed(zc|0,wc|0,z&2097151|0,0)|0;pb=D;J=Ed(m&2097151|0,0,j&2097151|0,0)|0;C=D;Oa=Ed(Ta&2097151|0,0,Ma&2097151|0,0)|0;Pa=D;gb=Ed(ea&2097151|0,0,ra|0,ca|0)|0;hb=D;U=Ed(p&2097151|0,0,I|Ca|Ja&2031616|0,lb|0)|0;V=D;Wa=Ed(q&2097151|0,0,La&2097151|0,0)|0;Xa=D;xb=Ed(Ya&2097151|0,0,sc&2097151|0,0)|0;wb=D;ba=Ed(eb|rb|aa&2031616|0,ba|0,o|0,Da|0)|0;aa=D;qb=Ed(x|0,Ba|0,qb&2097151|0,0)|0;rb=D;eb=Ed(K&2097151|0,0,A&2097151|0,0)|0;w=D;fa=Ed(Ia&2097151|0,0,nb&2097151|0,0)|0;fb=D;ha=Ed(uc|ub|na&2031616|0,wa|0,z&2097151|0,0)|0;$=D;sb=Ed(zc|0,wc|0,j&2097151|0,0)|0;kb=D;la=Ed(m&2097151|0,0,Ma&2097151|0,0)|0;tb=D;qa=Ed(Ta&2097151|0,0,ra|0,ca|0)|0;ka=D;Na=Ed(ea&2097151|0,0,I|Ca|Ja&2031616|0,lb|0)|0;pa=D;Za=Ed(p&2097151|0,0,La&2097151|0,0)|0;ga=D;mb=Ed(q&2097151|0,0,sc&2097151|0,0)|0;v=D;Ya=Ed(Ya&2097151|0,0,o|0,Da|0)|0;Ya=oe(mb|0,v|0,Ya|0,D|0)|0;ga=oe(Ya|0,D|0,Za|0,ga|0)|0;pa=oe(ga|0,D|0,Na|0,pa|0)|0;ka=oe(pa|0,D|0,qa|0,ka|0)|0;tb=oe(ka|0,D|0,la|0,tb|0)|0;kb=oe(tb|0,D|0,sb|0,kb|0)|0;$=oe(kb|0,D|0,ha|0,$|0)|0;fb=oe($|0,D|0,fa|0,fb|0)|0;w=oe(fb|0,D|0,eb|0,w|0)|0;rb=oe(w|0,D|0,qb|0,rb|0)|0;qb=D;A=Ed(x|0,Ba|0,A&2097151|0,0)|0;w=D;eb=Ed(K&2097151|0,0,nb&2097151|0,0)|0;fb=D;fa=Ed(Ia&2097151|0,0,z&2097151|0,0)|0;$=D;ha=Ed(uc|ub|na&2031616|0,wa|0,j&2097151|0,0)|0;kb=D;sb=Ed(zc|0,wc|0,Ma&2097151|0,0)|0;tb=D;la=Ed(m&2097151|0,0,ra|0,ca|0)|0;ka=D;qa=Ed(Ta&2097151|0,0,I|Ca|Ja&2031616|0,lb|0)|0;pa=D;Na=Ed(ea&2097151|0,0,La&2097151|0,0)|0;ga=D;Za=Ed(p&2097151|0,0,sc&2097151|0,0)|0;Ya=D;q=Ed(q&2097151|0,0,o|0,Da|0)|0;v=D;nb=Ed(x|0,Ba|0,nb&2097151|0,0)|0;mb=D;_a=Ed(K&2097151|0,0,z&2097151|0,0)|0;r=D;E=Ed(Ia&2097151|0,0,j&2097151|0,0)|0;$a=D;n=Ed(uc|ub|na&2031616|0,wa|0,Ma&2097151|0,0)|0;t=D;_=Ed(zc|0,wc|0,ra|0,ca|0)|0;g=D;ja=Ed(m&2097151|0,0,I|Ca|Ja&2031616|0,lb|0)|0;s=D;oa=Ed(Ta&2097151|0,0,La&2097151|0,0)|0;F=D;vb=Ed(ea&2097151|0,0,sc&2097151|0,0)|0;l=D;p=Ed(p&2097151|0,0,o|0,Da|0)|0;p=oe(vb|0,l|0,p|0,D|0)|0;F=oe(p|0,D|0,oa|0,F|0)|0;s=oe(F|0,D|0,ja|0,s|0)|0;g=oe(s|0,D|0,_|0,g|0)|0;t=oe(g|0,D|0,n|0,t|0)|0;$a=oe(t|0,D|0,E|0,$a|0)|0;r=oe($a|0,D|0,_a|0,r|0)|0;mb=oe(r|0,D|0,nb|0,mb|0)|0;nb=D;z=Ed(x|0,Ba|0,z&2097151|0,0)|0;r=D;_a=Ed(K&2097151|0,0,j&2097151|0,0)|0;$a=D;E=Ed(Ia&2097151|0,0,Ma&2097151|0,0)|0;t=D;n=Ed(uc|ub|na&2031616|0,wa|0,ra|0,ca|0)|0;g=D;_=Ed(zc|0,wc|0,I|Ca|Ja&2031616|0,lb|0)|0;s=D;ja=Ed(m&2097151|0,0,La&2097151|0,0)|0;F=D;oa=Ed(Ta&2097151|0,0,sc&2097151|0,0)|0;p=D;ea=Ed(ea&2097151|0,0,o|0,Da|0)|0;l=D;j=Ed(x|0,Ba|0,j&2097151|0,0)|0;vb=D;e=Ed(K&2097151|0,0,Ma&2097151|0,0)|0;L=D;T=Ed(Ia&2097151|0,0,ra|0,ca|0)|0;Ka=D;Va=Ed(uc|ub|na&2031616|0,wa|0,I|Ca|Ja&2031616|0,lb|0)|0;S=D;Sa=Ed(zc|0,wc|0,La&2097151|0,0)|0;Ua=D;f=Ed(m&2097151|0,0,sc&2097151|0,0)|0;k=D;Ta=Ed(Ta&2097151|0,0,o|0,Da|0)|0;Ta=oe(f|0,k|0,Ta|0,D|0)|0;Ua=oe(Ta|0,D|0,Sa|0,Ua|0)|0;S=oe(Ua|0,D|0,Va|0,S|0)|0;Ka=oe(S|0,D|0,T|0,Ka|0)|0;L=oe(Ka|0,D|0,e|0,L|0)|0;vb=oe(L|0,D|0,j|0,vb|0)|0;j=D;Ma=Ed(x|0,Ba|0,Ma&2097151|0,0)|0;L=D;e=Ed(K&2097151|0,0,ra|0,ca|0)|0;Ka=D;T=Ed(Ia&2097151|0,0,I|Ca|Ja&2031616|0,lb|0)|0;S=D;Va=Ed(uc|ub|na&2031616|0,wa|0,La&2097151|0,0)|0;Ua=D;Sa=Ed(zc|0,wc|0,sc&2097151|0,0)|0;Ta=D;m=Ed(m&2097151|0,0,o|0,Da|0)|0;k=D;ca=Ed(x|0,Ba|0,ra|0,ca|0)|0;f=D;ra=Ed(K&2097151|0,0,I|Ca|Ja&2031616|0,lb|0)|0;cb=D;vc=Ed(Ia&2097151|0,0,La&2097151|0,0)|0;tc=D;yc=Ed(uc|ub|na&2031616|0,wa|0,sc&2097151|0,0)|0;xc=D;wc=Ed(zc|0,wc|0,o|0,Da|0)|0;wc=oe(yc|0,xc|0,wc|0,D|0)|0;tc=oe(wc|0,D|0,vc|0,tc|0)|0;cb=oe(tc|0,D|0,ra|0,cb|0)|0;f=oe(cb|0,D|0,ca|0,f|0)|0;ca=D;lb=Ed(x|0,Ba|0,I|Ca|Ja&2031616|0,lb|0)|0;Ja=D;Ca=Ed(K&2097151|0,0,La&2097151|0,0)|0;I=D;cb=Ed(Ia&2097151|0,0,sc&2097151|0,0)|0;ra=D;wa=Ed(uc|ub|na&2031616|0,wa|0,o|0,Da|0)|0;na=D;La=Ed(x|0,Ba|0,La&2097151|0,0)|0;ub=D;uc=Ed(K&2097151|0,0,sc&2097151|0,0)|0;tc=D;Ia=Ed(Ia&2097151|0,0,o|0,Da|0)|0;Ia=oe(uc|0,tc|0,Ia|0,D|0)|0;ub=oe(Ia|0,D|0,La|0,ub|0)|0;La=D;sc=Ed(x|0,Ba|0,sc&2097151|0,0)|0;Ia=D;K=Ed(K&2097151|0,0,o|0,Da|0)|0;K=oe(sc|0,Ia|0,K|0,D|0)|0;Ia=D;Da=Ed(x|0,Ba|0,o|0,Da|0)|0;o=D;Ba=oe(Aa|0,W|0,1048576,0)|0;Ba=Rd(Ba|0,D|0,21)|0;x=D;ma=oe(rc|0,qc|0,pc|0,ma|0)|0;ma=oe(ma|0,D|0,Ba|0,x|0)|0;xa=oe(ma|0,D|0,xa&2097151|0,0)|0;ma=D;x=Pd(Ba|0,x|0,21)|0;x=le(Aa|0,W|0,x|0,D|0)|0;W=D;Aa=oe(Fa|0,Ea|0,1048576,0)|0;Aa=Rd(Aa|0,D|0,21)|0;Ba=D;lc=oe(oc|0,nc|0,mc|0,lc|0)|0;va=oe(lc|0,D|0,kc|0,va|0)|0;ia=oe(va|0,D|0,ua|0,ia|0)|0;ib=oe(ia|0,D|0,ib&2097151|0,0)|0;ib=oe(ib|0,D|0,Aa|0,Ba|0)|0;ia=D;Ba=Pd(Aa|0,Ba|0,21)|0;Aa=D;ua=oe(za|0,ya|0,1048576,0)|0;ua=Dd(ua|0,D|0,21)|0;va=D;gc=oe(jc|0,ic|0,hc|0,gc|0)|0;ec=oe(gc|0,D|0,fc|0,ec|0)|0;cc=oe(ec|0,D|0,dc|0,cc|0)|0;Ga=oe(cc|0,D|0,bc|0,Ga|0)|0;u=oe(Ga|0,D|0,Ha|0,u|0)|0;y=oe(u|0,D|0,y&2097151|0,0)|0;y=oe(y|0,D|0,ua|0,va|0)|0;u=D;va=Pd(ua|0,va|0,21)|0;ua=D;Ha=oe(Qa|0,Ra|0,1048576,0)|0;Ha=Dd(Ha|0,D|0,21)|0;Ga=D;Zb=oe(ac|0,$b|0,_b|0,Zb|0)|0;Xb=oe(Zb|0,D|0,Yb|0,Xb|0)|0;Vb=oe(Xb|0,D|0,Wb|0,Vb|0)|0;Tb=oe(Vb|0,D|0,Ub|0,Tb|0)|0;Rb=oe(Tb|0,D|0,Sb|0,Rb|0)|0;Pb=oe(Rb|0,D|0,Qb|0,Pb|0)|0;da=oe(Pb|0,D|0,X|0,da|0)|0;h=oe(da|0,D|0,B|0,h|0)|0;h=oe(h|0,D|0,Ha|0,Ga|0)|0;B=D;Ga=Pd(Ha|0,Ga|0,21)|0;Ha=D;da=oe(Y|0,Z|0,1048576,0)|0;da=Dd(da|0,D|0,21)|0;X=D;Lb=oe(Ob|0,Nb|0,Mb|0,Lb|0)|0;Jb=oe(Lb|0,D|0,Kb|0,Jb|0)|0;Hb=oe(Jb|0,D|0,Ib|0,Hb|0)|0;Fb=oe(Hb|0,D|0,Gb|0,Fb|0)|0;Db=oe(Fb|0,D|0,Eb|0,Db|0)|0;Bb=oe(Db|0,D|0,Cb|0,Bb|0)|0;zb=oe(Bb|0,D|0,Ab|0,zb|0)|0;ta=oe(zb|0,D|0,yb|0,ta|0)|0;H=oe(ta|0,D|0,sa|0,H|0)|0;G=oe(H|0,D|0,G&2097151|0,0)|0;G=oe(G|0,D|0,da|0,X|0)|0;H=D;X=Pd(da|0,X|0,21)|0;da=D;sa=oe(N|0,M|0,1048576,0)|0;sa=Dd(sa|0,D|0,21)|0;ta=D;aa=oe(xb|0,wb|0,ba|0,aa|0)|0;Xa=oe(aa|0,D|0,Wa|0,Xa|0)|0;V=oe(Xa|0,D|0,U|0,V|0)|0;hb=oe(V|0,D|0,gb|0,hb|0)|0;Pa=oe(hb|0,D|0,Oa|0,Pa|0)|0;C=oe(Pa|0,D|0,J|0,C|0)|0;pb=oe(C|0,D|0,ob|0,pb|0)|0;R=oe(pb|0,D|0,Q|0,R|0)|0;bb=oe(R|0,D|0,ab|0,bb|0)|0;P=oe(bb|0,D|0,O|0,P|0)|0;db=oe(P|0,D|0,jb|0,db|0)|0;i=oe(db|0,D|0,c|0,i|0)|0;i=oe(i|0,D|0,sa|0,ta|0)|0;c=D;ta=Pd(sa|0,ta|0,21)|0;sa=D;db=oe(rb|0,qb|0,1048576,0)|0;db=Dd(db|0,D|0,21)|0;jb=D;v=oe(Za|0,Ya|0,q|0,v|0)|0;ga=oe(v|0,D|0,Na|0,ga|0)|0;pa=oe(ga|0,D|0,qa|0,pa|0)|0;ka=oe(pa|0,D|0,la|0,ka|0)|0;tb=oe(ka|0,D|0,sb|0,tb|0)|0;kb=oe(tb|0,D|0,ha|0,kb|0)|0;$=oe(kb|0,D|0,fa|0,$|0)|0;fb=oe($|0,D|0,eb|0,fb|0)|0;w=oe(fb|0,D|0,A|0,w|0)|0;w=oe(w|0,D|0,db|0,jb|0)|0;A=D;jb=Pd(db|0,jb|0,21)|0;db=D;fb=oe(mb|0,nb|0,1048576,0)|0;fb=Dd(fb|0,D|0,21)|0;eb=D;l=oe(oa|0,p|0,ea|0,l|0)|0;F=oe(l|0,D|0,ja|0,F|0)|0;s=oe(F|0,D|0,_|0,s|0)|0;g=oe(s|0,D|0,n|0,g|0)|0;t=oe(g|0,D|0,E|0,t|0)|0;$a=oe(t|0,D|0,_a|0,$a|0)|0;r=oe($a|0,D|0,z|0,r|0)|0;r=oe(r|0,D|0,fb|0,eb|0)|0;z=D;eb=Pd(fb|0,eb|0,21)|0;fb=D;$a=oe(vb|0,j|0,1048576,0)|0;$a=Dd($a|0,D|0,21)|0;_a=D;k=oe(Sa|0,Ta|0,m|0,k|0)|0;Ua=oe(k|0,D|0,Va|0,Ua|0)|0;S=oe(Ua|0,D|0,T|0,S|0)|0;Ka=oe(S|0,D|0,e|0,Ka|0)|0;L=oe(Ka|0,D|0,Ma|0,L|0)|0;L=oe(L|0,D|0,$a|0,_a|0)|0;Ma=D;_a=Pd($a|0,_a|0,21)|0;$a=D;Ka=oe(f|0,ca|0,1048576,0)|0;Ka=Dd(Ka|0,D|0,21)|0;e=D;na=oe(cb|0,ra|0,wa|0,na|0)|0;I=oe(na|0,D|0,Ca|0,I|0)|0;Ja=oe(I|0,D|0,lb|0,Ja|0)|0;Ja=oe(Ja|0,D|0,Ka|0,e|0)|0;lb=D;e=Pd(Ka|0,e|0,21)|0;e=le(f|0,ca|0,e|0,D|0)|0;ca=D;f=oe(ub|0,La|0,1048576,0)|0;f=Dd(f|0,D|0,21)|0;Ka=D;Ia=oe(K|0,Ia|0,f|0,Ka|0)|0;K=D;Ka=Pd(f|0,Ka|0,21)|0;Ka=le(ub|0,La|0,Ka|0,D|0)|0;La=D;ub=oe(Da|0,o|0,1048576,0)|0;ub=Dd(ub|0,D|0,21)|0;f=D;I=Pd(ub|0,f|0,21)|0;I=le(Da|0,o|0,I|0,D|0)|0;o=D;Da=oe(xa|0,ma|0,1048576,0)|0;Da=Rd(Da|0,D|0,21)|0;Ca=D;na=Pd(Da|0,Ca|0,21)|0;na=le(xa|0,ma|0,na|0,D|0)|0;ma=D;xa=oe(ib|0,ia|0,1048576,0)|0;xa=Dd(xa|0,D|0,21)|0;wa=D;ra=Pd(xa|0,wa|0,21)|0;ra=le(ib|0,ia|0,ra|0,D|0)|0;ia=D;ib=oe(y|0,u|0,1048576,0)|0;ib=Dd(ib|0,D|0,21)|0;cb=D;S=Pd(ib|0,cb|0,21)|0;T=D;Ua=oe(h|0,B|0,1048576,0)|0;Ua=Dd(Ua|0,D|0,21)|0;Va=D;k=Pd(Ua|0,Va|0,21)|0;m=D;Ta=oe(G|0,H|0,1048576,0)|0;Ta=Dd(Ta|0,D|0,21)|0;Sa=D;t=Pd(Ta|0,Sa|0,21)|0;E=D;g=oe(i|0,c|0,1048576,0)|0;g=Dd(g|0,D|0,21)|0;n=D;s=Pd(g|0,n|0,21)|0;_=D;F=oe(w|0,A|0,1048576,0)|0;F=Dd(F|0,D|0,21)|0;ja=D;l=Pd(F|0,ja|0,21)|0;ea=D;p=oe(r|0,z|0,1048576,0)|0;p=Dd(p|0,D|0,21)|0;oa=D;$=Pd(p|0,oa|0,21)|0;fa=D;kb=oe(L|0,Ma|0,1048576,0)|0;kb=Dd(kb|0,D|0,21)|0;ha=D;ca=oe(kb|0,ha|0,e|0,ca|0)|0;e=D;ha=Pd(kb|0,ha|0,21)|0;ha=le(L|0,Ma|0,ha|0,D|0)|0;Ma=D;L=oe(Ja|0,lb|0,1048576,0)|0;L=Dd(L|0,D|0,21)|0;kb=D;La=oe(L|0,kb|0,Ka|0,La|0)|0;Ka=D;kb=Pd(L|0,kb|0,21)|0;kb=le(Ja|0,lb|0,kb|0,D|0)|0;lb=D;Ja=oe(Ia|0,K|0,1048576,0)|0;Ja=Dd(Ja|0,D|0,21)|0;L=D;o=oe(Ja|0,L|0,I|0,o|0)|0;I=D;L=Pd(Ja|0,L|0,21)|0;L=le(Ia|0,K|0,L|0,D|0)|0;K=D;Ia=Ed(ub|0,f|0,666643,0)|0;Ja=D;tb=Ed(ub|0,f|0,470296,0)|0;sb=D;ka=Ed(ub|0,f|0,654183,0)|0;la=D;pa=Ed(ub|0,f|0,-997805,-1)|0;qa=D;ga=Ed(ub|0,f|0,136657,0)|0;Na=D;f=Ed(ub|0,f|0,-683901,-1)|0;f=oe(vb|0,j|0,f|0,D|0)|0;$a=le(f|0,D|0,_a|0,$a|0)|0;oa=oe($a|0,D|0,p|0,oa|0)|0;p=D;$a=Ed(o|0,I|0,666643,0)|0;_a=D;f=Ed(o|0,I|0,470296,0)|0;j=D;vb=Ed(o|0,I|0,654183,0)|0;ub=D;v=Ed(o|0,I|0,-997805,-1)|0;q=D;Ya=Ed(o|0,I|0,136657,0)|0;Za=D;I=Ed(o|0,I|0,-683901,-1)|0;o=D;P=Ed(L|0,K|0,666643,0)|0;O=D;bb=Ed(L|0,K|0,470296,0)|0;ab=D;R=Ed(L|0,K|0,654183,0)|0;Q=D;pb=Ed(L|0,K|0,-997805,-1)|0;ob=D;C=Ed(L|0,K|0,136657,0)|0;J=D;K=Ed(L|0,K|0,-683901,-1)|0;L=D;qa=oe(mb|0,nb|0,pa|0,qa|0)|0;Za=oe(qa|0,D|0,Ya|0,Za|0)|0;L=oe(Za|0,D|0,K|0,L|0)|0;fb=le(L|0,D|0,eb|0,fb|0)|0;ja=oe(fb|0,D|0,F|0,ja|0)|0;F=D;fb=Ed(La|0,Ka|0,666643,0)|0;eb=D;L=Ed(La|0,Ka|0,470296,0)|0;K=D;Za=Ed(La|0,Ka|0,654183,0)|0;Ya=D;qa=Ed(La|0,Ka|0,-997805,-1)|0;pa=D;nb=Ed(La|0,Ka|0,136657,0)|0;mb=D;Ka=Ed(La|0,Ka|0,-683901,-1)|0;La=D;Pa=Ed(kb|0,lb|0,666643,0)|0;Oa=D;hb=Ed(kb|0,lb|0,470296,0)|0;gb=D;V=Ed(kb|0,lb|0,654183,0)|0;U=D;Xa=Ed(kb|0,lb|0,-997805,-1)|0;Wa=D;aa=Ed(kb|0,lb|0,136657,0)|0;ba=D;lb=Ed(kb|0,lb|0,-683901,-1)|0;kb=D;sb=oe(vb|0,ub|0,tb|0,sb|0)|0;qb=oe(sb|0,D|0,rb|0,qb|0)|0;ob=oe(qb|0,D|0,pb|0,ob|0)|0;mb=oe(ob|0,D|0,nb|0,mb|0)|0;kb=oe(mb|0,D|0,lb|0,kb|0)|0;db=le(kb|0,D|0,jb|0,db|0)|0;n=oe(db|0,D|0,g|0,n|0)|0;g=D;db=Ed(ca|0,e|0,666643,0)|0;db=oe(ib|0,cb|0,db|0,D|0)|0;Ra=oe(db|0,D|0,Qa|0,Ra|0)|0;Ha=le(Ra|0,D|0,Ga|0,Ha|0)|0;Ga=D;Ra=Ed(ca|0,e|0,470296,0)|0;Qa=D;db=Ed(ca|0,e|0,654183,0)|0;cb=D;eb=oe(hb|0,gb|0,fb|0,eb|0)|0;cb=oe(eb|0,D|0,db|0,cb|0)|0;Va=oe(cb|0,D|0,Ua|0,Va|0)|0;Z=oe(Va|0,D|0,Y|0,Z|0)|0;da=le(Z|0,D|0,X|0,da|0)|0;X=D;Z=Ed(ca|0,e|0,-997805,-1)|0;Y=D;Va=Ed(ca|0,e|0,136657,0)|0;Ua=D;_a=oe(bb|0,ab|0,$a|0,_a|0)|0;Ya=oe(_a|0,D|0,Za|0,Ya|0)|0;Wa=oe(Ya|0,D|0,Xa|0,Wa|0)|0;Ua=oe(Wa|0,D|0,Va|0,Ua|0)|0;Sa=oe(Ua|0,D|0,Ta|0,Sa|0)|0;M=oe(Sa|0,D|0,N|0,M|0)|0;sa=le(M|0,D|0,ta|0,sa|0)|0;ta=D;e=Ed(ca|0,e|0,-683901,-1)|0;ca=D;M=oe(Ha|0,Ga|0,1048576,0)|0;M=Dd(M|0,D|0,21)|0;N=D;Oa=oe(Ra|0,Qa|0,Pa|0,Oa|0)|0;B=oe(Oa|0,D|0,h|0,B|0)|0;m=le(B|0,D|0,k|0,m|0)|0;m=oe(m|0,D|0,M|0,N|0)|0;k=D;N=Pd(M|0,N|0,21)|0;M=D;B=oe(da|0,X|0,1048576,0)|0;B=Dd(B|0,D|0,21)|0;h=D;O=oe(L|0,K|0,P|0,O|0)|0;U=oe(O|0,D|0,V|0,U|0)|0;Y=oe(U|0,D|0,Z|0,Y|0)|0;H=oe(Y|0,D|0,G|0,H|0)|0;E=le(H|0,D|0,t|0,E|0)|0;E=oe(E|0,D|0,B|0,h|0)|0;t=D;h=Pd(B|0,h|0,21)|0;B=D;H=oe(sa|0,ta|0,1048576,0)|0;H=Dd(H|0,D|0,21)|0;G=D;Ja=oe(f|0,j|0,Ia|0,Ja|0)|0;Q=oe(Ja|0,D|0,R|0,Q|0)|0;pa=oe(Q|0,D|0,qa|0,pa|0)|0;ba=oe(pa|0,D|0,aa|0,ba|0)|0;ca=oe(ba|0,D|0,e|0,ca|0)|0;c=oe(ca|0,D|0,i|0,c|0)|0;_=le(c|0,D|0,s|0,_|0)|0;_=oe(_|0,D|0,H|0,G|0)|0;s=D;G=Pd(H|0,G|0,21)|0;H=D;c=oe(n|0,g|0,1048576,0)|0;c=Dd(c|0,D|0,21)|0;i=D;la=oe(v|0,q|0,ka|0,la|0)|0;J=oe(la|0,D|0,C|0,J|0)|0;La=oe(J|0,D|0,Ka|0,La|0)|0;A=oe(La|0,D|0,w|0,A|0)|0;ea=le(A|0,D|0,l|0,ea|0)|0;ea=oe(ea|0,D|0,c|0,i|0)|0;l=D;i=Pd(c|0,i|0,21)|0;i=le(n|0,g|0,i|0,D|0)|0;g=D;n=oe(ja|0,F|0,1048576,0)|0;n=Dd(n|0,D|0,21)|0;c=D;Na=oe(I|0,o|0,ga|0,Na|0)|0;z=oe(Na|0,D|0,r|0,z|0)|0;fa=le(z|0,D|0,$|0,fa|0)|0;fa=oe(fa|0,D|0,n|0,c|0)|0;$=D;c=Pd(n|0,c|0,21)|0;c=le(ja|0,F|0,c|0,D|0)|0;F=D;ja=oe(oa|0,p|0,1048576,0)|0;ja=Dd(ja|0,D|0,21)|0;n=D;Ma=oe(ja|0,n|0,ha|0,Ma|0)|0;ha=D;n=Pd(ja|0,n|0,21)|0;n=le(oa|0,p|0,n|0,D|0)|0;p=D;oa=oe(m|0,k|0,1048576,0)|0;oa=Dd(oa|0,D|0,21)|0;ja=D;z=Pd(oa|0,ja|0,21)|0;r=D;Na=oe(E|0,t|0,1048576,0)|0;Na=Dd(Na|0,D|0,21)|0;ga=D;o=Pd(Na|0,ga|0,21)|0;I=D;A=oe(_|0,s|0,1048576,0)|0;A=Dd(A|0,D|0,21)|0;w=D;g=oe(A|0,w|0,i|0,g|0)|0;i=D;w=Pd(A|0,w|0,21)|0;w=le(_|0,s|0,w|0,D|0)|0;s=D;_=oe(ea|0,l|0,1048576,0)|0;_=Dd(_|0,D|0,21)|0;A=D;F=oe(_|0,A|0,c|0,F|0)|0;c=D;A=Pd(_|0,A|0,21)|0;A=le(ea|0,l|0,A|0,D|0)|0;l=D;ea=oe(fa|0,$|0,1048576,0)|0;ea=Dd(ea|0,D|0,21)|0;_=D;p=oe(ea|0,_|0,n|0,p|0)|0;n=D;_=Pd(ea|0,_|0,21)|0;_=le(fa|0,$|0,_|0,D|0)|0;$=D;fa=Ed(Ma|0,ha|0,666643,0)|0;ea=D;La=Ed(Ma|0,ha|0,470296,0)|0;Ka=D;J=Ed(Ma|0,ha|0,654183,0)|0;C=D;la=Ed(Ma|0,ha|0,-997805,-1)|0;ka=D;q=Ed(Ma|0,ha|0,136657,0)|0;v=D;ha=Ed(Ma|0,ha|0,-683901,-1)|0;ha=oe(Na|0,ga|0,ha|0,D|0)|0;ta=oe(ha|0,D|0,sa|0,ta|0)|0;H=le(ta|0,D|0,G|0,H|0)|0;G=D;ta=Ed(p|0,n|0,666643,0)|0;sa=D;ha=Ed(p|0,n|0,470296,0)|0;ga=D;Na=Ed(p|0,n|0,654183,0)|0;Ma=D;ca=Ed(p|0,n|0,-997805,-1)|0;e=D;ba=Ed(p|0,n|0,136657,0)|0;aa=D;n=Ed(p|0,n|0,-683901,-1)|0;p=D;pa=Ed(_|0,$|0,666643,0)|0;pa=oe(ra|0,ia|0,pa|0,D|0)|0;ia=D;ra=Ed(_|0,$|0,470296,0)|0;qa=D;Q=Ed(_|0,$|0,654183,0)|0;R=D;Ja=Ed(_|0,$|0,-997805,-1)|0;Ia=D;j=Ed(_|0,$|0,136657,0)|0;f=D;$=Ed(_|0,$|0,-683901,-1)|0;_=D;ka=oe(ba|0,aa|0,la|0,ka|0)|0;_=oe(ka|0,D|0,$|0,_|0)|0;ja=oe(_|0,D|0,oa|0,ja|0)|0;X=oe(ja|0,D|0,da|0,X|0)|0;B=le(X|0,D|0,h|0,B|0)|0;h=D;X=Ed(F|0,c|0,666643,0)|0;da=D;ja=Ed(F|0,c|0,470296,0)|0;ja=oe(pa|0,ia|0,ja|0,D|0)|0;ia=D;pa=Ed(F|0,c|0,654183,0)|0;oa=D;_=Ed(F|0,c|0,-997805,-1)|0;$=D;ka=Ed(F|0,c|0,136657,0)|0;la=D;c=Ed(F|0,c|0,-683901,-1)|0;F=D;aa=Ed(A|0,l|0,666643,0)|0;ba=D;Y=Ed(A|0,l|0,470296,0)|0;Z=D;U=Ed(A|0,l|0,654183,0)|0;V=D;O=Ed(A|0,l|0,-997805,-1)|0;P=D;K=Ed(A|0,l|0,136657,0)|0;L=D;l=Ed(A|0,l|0,-683901,-1)|0;A=D;Ka=oe(Na|0,Ma|0,La|0,Ka|0)|0;Ia=oe(Ka|0,D|0,Ja|0,Ia|0)|0;Ga=oe(Ia|0,D|0,Ha|0,Ga|0)|0;M=le(Ga|0,D|0,N|0,M|0)|0;la=oe(M|0,D|0,ka|0,la|0)|0;A=oe(la|0,D|0,l|0,A|0)|0;l=D;la=Ed(g|0,i|0,666643,0)|0;W=oe(la|0,D|0,x|0,W|0)|0;x=D;la=Ed(g|0,i|0,470296,0)|0;ka=D;M=Ed(g|0,i|0,654183,0)|0;N=D;Ca=oe(Fa|0,Ea|0,Da|0,Ca|0)|0;Aa=le(Ca|0,D|0,Ba|0,Aa|0)|0;da=oe(Aa|0,D|0,X|0,da|0)|0;N=oe(da|0,D|0,M|0,N|0)|0;Z=oe(N|0,D|0,Y|0,Z|0)|0;Y=D;N=Ed(g|0,i|0,-997805,-1)|0;M=D;da=Ed(g|0,i|0,136657,0)|0;X=D;wa=oe(za|0,ya|0,xa|0,wa|0)|0;ua=le(wa|0,D|0,va|0,ua|0)|0;sa=oe(ua|0,D|0,ta|0,sa|0)|0;qa=oe(sa|0,D|0,ra|0,qa|0)|0;oa=oe(qa|0,D|0,pa|0,oa|0)|0;X=oe(oa|0,D|0,da|0,X|0)|0;P=oe(X|0,D|0,O|0,P|0)|0;O=D;i=Ed(g|0,i|0,-683901,-1)|0;g=D;X=oe(W|0,x|0,1048576,0)|0;X=Dd(X|0,D|0,21)|0;da=D;ka=oe(na|0,ma|0,la|0,ka|0)|0;ba=oe(ka|0,D|0,aa|0,ba|0)|0;ba=oe(ba|0,D|0,X|0,da|0)|0;aa=D;da=Pd(X|0,da|0,21)|0;da=le(W|0,x|0,da|0,D|0)|0;x=D;W=oe(Z|0,Y|0,1048576,0)|0;W=Dd(W|0,D|0,21)|0;X=D;M=oe(ja|0,ia|0,N|0,M|0)|0;V=oe(M|0,D|0,U|0,V|0)|0;V=oe(V|0,D|0,W|0,X|0)|0;U=D;X=Pd(W|0,X|0,21)|0;W=D;M=oe(P|0,O|0,1048576,0)|0;M=Dd(M|0,D|0,21)|0;N=D;ea=oe(ha|0,ga|0,fa|0,ea|0)|0;u=oe(ea|0,D|0,y|0,u|0)|0;R=oe(u|0,D|0,Q|0,R|0)|0;T=le(R|0,D|0,S|0,T|0)|0;$=oe(T|0,D|0,_|0,$|0)|0;g=oe($|0,D|0,i|0,g|0)|0;L=oe(g|0,D|0,K|0,L|0)|0;L=oe(L|0,D|0,M|0,N|0)|0;K=D;N=Pd(M|0,N|0,21)|0;M=D;g=oe(A|0,l|0,1048576,0)|0;g=Dd(g|0,D|0,21)|0;i=D;C=oe(ca|0,e|0,J|0,C|0)|0;f=oe(C|0,D|0,j|0,f|0)|0;k=oe(f|0,D|0,m|0,k|0)|0;r=le(k|0,D|0,z|0,r|0)|0;F=oe(r|0,D|0,c|0,F|0)|0;F=oe(F|0,D|0,g|0,i|0)|0;c=D;i=Pd(g|0,i|0,21)|0;i=le(A|0,l|0,i|0,D|0)|0;l=D;A=oe(B|0,h|0,1048576,0)|0;A=Dd(A|0,D|0,21)|0;g=D;v=oe(n|0,p|0,q|0,v|0)|0;t=oe(v|0,D|0,E|0,t|0)|0;I=le(t|0,D|0,o|0,I|0)|0;I=oe(I|0,D|0,A|0,g|0)|0;o=D;g=Pd(A|0,g|0,21)|0;g=le(B|0,h|0,g|0,D|0)|0;h=D;B=oe(H|0,G|0,1048576,0)|0;B=Dd(B|0,D|0,21)|0;A=D;s=oe(w|0,s|0,B|0,A|0)|0;w=D;A=Pd(B|0,A|0,21)|0;B=D;t=oe(ba|0,aa|0,1048576,0)|0;t=Dd(t|0,D|0,21)|0;E=D;v=Pd(t|0,E|0,21)|0;q=D;p=oe(V|0,U|0,1048576,0)|0;p=Dd(p|0,D|0,21)|0;n=D;r=Pd(p|0,n|0,21)|0;z=D;k=oe(L|0,K|0,1048576,0)|0;k=Dd(k|0,D|0,21)|0;m=D;l=oe(i|0,l|0,k|0,m|0)|0;i=D;m=Pd(k|0,m|0,21)|0;k=D;f=oe(F|0,c|0,1048576,0)|0;f=Dd(f|0,D|0,21)|0;j=D;h=oe(g|0,h|0,f|0,j|0)|0;g=D;j=Pd(f|0,j|0,21)|0;j=le(F|0,c|0,j|0,D|0)|0;c=D;F=oe(I|0,o|0,1048576,0)|0;F=Dd(F|0,D|0,21)|0;f=D;C=Pd(F|0,f|0,21)|0;C=le(I|0,o|0,C|0,D|0)|0;o=D;I=oe(s|0,w|0,1048576,0)|0;I=Dd(I|0,D|0,21)|0;J=D;e=Pd(I|0,J|0,21)|0;e=le(s|0,w|0,e|0,D|0)|0;w=D;s=Ed(I|0,J|0,666643,0)|0;s=oe(da|0,x|0,s|0,D|0)|0;x=D;da=Ed(I|0,J|0,470296,0)|0;ca=D;$=Ed(I|0,J|0,654183,0)|0;_=D;T=Ed(I|0,J|0,-997805,-1)|0;S=D;R=Ed(I|0,J|0,136657,0)|0;Q=D;J=Ed(I|0,J|0,-683901,-1)|0;I=D;u=Dd(s|0,x|0,21)|0;y=D;aa=oe(da|0,ca|0,ba|0,aa|0)|0;q=le(aa|0,D|0,v|0,q|0)|0;q=oe(q|0,D|0,u|0,y|0)|0;v=D;y=Pd(u|0,y|0,21)|0;y=le(s|0,x|0,y|0,D|0)|0;x=D;s=Dd(q|0,v|0,21)|0;u=D;Y=oe($|0,_|0,Z|0,Y|0)|0;W=le(Y|0,D|0,X|0,W|0)|0;E=oe(W|0,D|0,t|0,E|0)|0;E=oe(E|0,D|0,s|0,u|0)|0;t=D;u=Pd(s|0,u|0,21)|0;u=le(q|0,v|0,u|0,D|0)|0;v=D;q=Dd(E|0,t|0,21)|0;s=D;S=oe(V|0,U|0,T|0,S|0)|0;z=le(S|0,D|0,r|0,z|0)|0;z=oe(z|0,D|0,q|0,s|0)|0;r=D;s=Pd(q|0,s|0,21)|0;s=le(E|0,t|0,s|0,D|0)|0;t=D;E=Dd(z|0,r|0,21)|0;q=D;O=oe(R|0,Q|0,P|0,O|0)|0;M=le(O|0,D|0,N|0,M|0)|0;n=oe(M|0,D|0,p|0,n|0)|0;n=oe(n|0,D|0,E|0,q|0)|0;p=D;q=Pd(E|0,q|0,21)|0;q=le(z|0,r|0,q|0,D|0)|0;r=D;z=Dd(n|0,p|0,21)|0;E=D;I=oe(L|0,K|0,J|0,I|0)|0;k=le(I|0,D|0,m|0,k|0)|0;k=oe(k|0,D|0,z|0,E|0)|0;m=D;E=Pd(z|0,E|0,21)|0;E=le(n|0,p|0,E|0,D|0)|0;p=D;n=Dd(k|0,m|0,21)|0;z=D;i=oe(l|0,i|0,n|0,z|0)|0;l=D;z=Pd(n|0,z|0,21)|0;z=le(k|0,m|0,z|0,D|0)|0;m=D;k=Dd(i|0,l|0,21)|0;n=D;c=oe(k|0,n|0,j|0,c|0)|0;j=D;n=Pd(k|0,n|0,21)|0;n=le(i|0,l|0,n|0,D|0)|0;l=D;i=Dd(c|0,j|0,21)|0;k=D;g=oe(h|0,g|0,i|0,k|0)|0;h=D;k=Pd(i|0,k|0,21)|0;k=le(c|0,j|0,k|0,D|0)|0;j=D;c=Dd(g|0,h|0,21)|0;i=D;o=oe(c|0,i|0,C|0,o|0)|0;C=D;i=Pd(c|0,i|0,21)|0;i=le(g|0,h|0,i|0,D|0)|0;h=D;g=Dd(o|0,C|0,21)|0;c=D;f=oe(H|0,G|0,F|0,f|0)|0;B=le(f|0,D|0,A|0,B|0)|0;B=oe(B|0,D|0,g|0,c|0)|0;A=D;c=Pd(g|0,c|0,21)|0;c=le(o|0,C|0,c|0,D|0)|0;C=D;o=Dd(B|0,A|0,21)|0;g=D;w=oe(o|0,g|0,e|0,w|0)|0;e=D;g=Pd(o|0,g|0,21)|0;g=le(B|0,A|0,g|0,D|0)|0;A=D;B=Dd(w|0,e|0,21)|0;o=D;f=Pd(B|0,o|0,21)|0;f=le(w|0,e|0,f|0,D|0)|0;e=D;w=Ed(B|0,o|0,666643,0)|0;x=oe(w|0,D|0,y|0,x|0)|0;y=D;w=Ed(B|0,o|0,470296,0)|0;w=oe(u|0,v|0,w|0,D|0)|0;v=D;u=Ed(B|0,o|0,654183,0)|0;u=oe(s|0,t|0,u|0,D|0)|0;t=D;s=Ed(B|0,o|0,-997805,-1)|0;s=oe(q|0,r|0,s|0,D|0)|0;r=D;q=Ed(B|0,o|0,136657,0)|0;q=oe(E|0,p|0,q|0,D|0)|0;p=D;o=Ed(B|0,o|0,-683901,-1)|0;o=oe(z|0,m|0,o|0,D|0)|0;m=D;z=Dd(x|0,y|0,21)|0;B=D;v=oe(w|0,v|0,z|0,B|0)|0;w=D;B=Pd(z|0,B|0,21)|0;B=le(x|0,y|0,B|0,D|0)|0;y=D;x=Dd(v|0,w|0,21)|0;z=D;t=oe(u|0,t|0,x|0,z|0)|0;u=D;z=Pd(x|0,z|0,21)|0;z=le(v|0,w|0,z|0,D|0)|0;w=D;v=Dd(t|0,u|0,21)|0;x=D;r=oe(s|0,r|0,v|0,x|0)|0;s=D;x=Pd(v|0,x|0,21)|0;x=le(t|0,u|0,x|0,D|0)|0;u=D;t=Dd(r|0,s|0,21)|0;v=D;p=oe(q|0,p|0,t|0,v|0)|0;q=D;v=Pd(t|0,v|0,21)|0;v=le(r|0,s|0,v|0,D|0)|0;s=D;r=Dd(p|0,q|0,21)|0;t=D;m=oe(o|0,m|0,r|0,t|0)|0;o=D;t=Pd(r|0,t|0,21)|0;t=le(p|0,q|0,t|0,D|0)|0;q=D;p=Dd(m|0,o|0,21)|0;r=D;l=oe(p|0,r|0,n|0,l|0)|0;n=D;r=Pd(p|0,r|0,21)|0;r=le(m|0,o|0,r|0,D|0)|0;o=D;m=Dd(l|0,n|0,21)|0;p=D;j=oe(m|0,p|0,k|0,j|0)|0;k=D;p=Pd(m|0,p|0,21)|0;p=le(l|0,n|0,p|0,D|0)|0;n=D;l=Dd(j|0,k|0,21)|0;m=D;h=oe(l|0,m|0,i|0,h|0)|0;i=D;m=Pd(l|0,m|0,21)|0;m=le(j|0,k|0,m|0,D|0)|0;k=D;j=Dd(h|0,i|0,21)|0;l=D;C=oe(j|0,l|0,c|0,C|0)|0;c=D;l=Pd(j|0,l|0,21)|0;l=le(h|0,i|0,l|0,D|0)|0;i=D;h=Dd(C|0,c|0,21)|0;j=D;A=oe(h|0,j|0,g|0,A|0)|0;g=D;j=Pd(h|0,j|0,21)|0;j=le(C|0,c|0,j|0,D|0)|0;c=D;C=Dd(A|0,g|0,21)|0;h=D;e=oe(C|0,h|0,f|0,e|0)|0;f=D;h=Pd(C|0,h|0,21)|0;h=le(A|0,g|0,h|0,D|0)|0;g=D;a[b>>0]=B;A=Rd(B|0,y|0,8)|0;a[b+1>>0]=A;y=Rd(B|0,y|0,16)|0;B=D;A=Pd(z|0,w|0,5)|0;a[b+2>>0]=A|y;y=Rd(z|0,w|0,3)|0;a[b+3>>0]=y;y=Rd(z|0,w|0,11)|0;a[b+4>>0]=y;w=Rd(z|0,w|0,19)|0;z=D;y=Pd(x|0,u|0,2)|0;a[b+5>>0]=y|w;w=Rd(x|0,u|0,6)|0;a[b+6>>0]=w;u=Rd(x|0,u|0,14)|0;x=D;w=Pd(v|0,s|0,7)|0;a[b+7>>0]=w|u;u=Rd(v|0,s|0,1)|0;a[b+8>>0]=u;u=Rd(v|0,s|0,9)|0;a[b+9>>0]=u;s=Rd(v|0,s|0,17)|0;v=D;u=Pd(t|0,q|0,4)|0;a[b+10>>0]=u|s;s=Rd(t|0,q|0,4)|0;a[b+11>>0]=s;s=Rd(t|0,q|0,12)|0;a[b+12>>0]=s;q=Rd(t|0,q|0,20)|0;t=D;s=Pd(r|0,o|0,1)|0;a[b+13>>0]=s|q;q=Rd(r|0,o|0,7)|0;a[b+14>>0]=q;o=Rd(r|0,o|0,15)|0;r=D;q=Pd(p|0,n|0,6)|0;a[b+15>>0]=q|o;o=Rd(p|0,n|0,2)|0;a[b+16>>0]=o;o=Rd(p|0,n|0,10)|0;a[b+17>>0]=o;n=Rd(p|0,n|0,18)|0;p=D;o=Pd(m|0,k|0,3)|0;a[b+18>>0]=o|n;n=Rd(m|0,k|0,5)|0;a[b+19>>0]=n;k=Rd(m|0,k|0,13)|0;a[b+20>>0]=k;a[b+21>>0]=l;k=Rd(l|0,i|0,8)|0;a[b+22>>0]=k;i=Rd(l|0,i|0,16)|0;l=D;k=Pd(j|0,c|0,5)|0;a[b+23>>0]=k|i;i=Rd(j|0,c|0,3)|0;a[b+24>>0]=i;i=Rd(j|0,c|0,11)|0;a[b+25>>0]=i;c=Rd(j|0,c|0,19)|0;j=D;i=Pd(h|0,g|0,2)|0;a[b+26>>0]=i|c;c=Rd(h|0,g|0,6)|0;a[b+27>>0]=c;g=Rd(h|0,g|0,14)|0;h=D;c=Pd(e|0,f|0,7)|0;a[b+28>>0]=g|c;c=Rd(e|0,f|0,1)|0;a[b+29>>0]=c;c=Rd(e|0,f|0,9)|0;a[b+30>>0]=c;f=Rd(e|0,f|0,17)|0;a[b+31>>0]=f;return}function ka(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=i;g=i=i+63&-64;i=i+304|0;e=0;do{h=b+(e<<2)|0;c[g+40+(e<<2)>>2]=(d[h+2>>0]|0)<<8|(d[h+3>>0]|0)|(d[h+1>>0]|0)<<16|(d[h>>0]|0)<<24;e=e+1|0}while((e|0)!=16);e=16;b=c[g+40>>2]|0;do{h=c[g+40+(e+-2<<2)>>2]|0;j=b;b=c[g+40+(e+-15<<2)>>2]|0;c[g+40+(e<<2)>>2]=j+(c[g+40+(e+-7<<2)>>2]|0)+((h>>>19|h<<13)^h>>>10^(h>>>17|h<<15))+((b>>>18|b<<14)^b>>>3^(b>>>7|b<<25));e=e+1|0}while((e|0)!=64);c[g+8>>2]=c[a>>2];c[g+8+4>>2]=c[a+4>>2];c[g+8+8>>2]=c[a+8>>2];c[g+8+12>>2]=c[a+12>>2];c[g+8+16>>2]=c[a+16>>2];c[g+8+20>>2]=c[a+20>>2];c[g+8+24>>2]=c[a+24>>2];c[g+8+28>>2]=c[a+28>>2];x=g+8+28|0;k=g+8+16|0;p=c[k>>2]|0;v=g+8+20|0;n=c[v>>2]|0;j=g+8+24|0;y=c[j>>2]|0;b=(c[x>>2]|0)+1116352408+(c[g+40>>2]|0)+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+((y^n)&p^y)|0;l=c[g+8>>2]|0;t=g+8+4|0;o=c[t>>2]|0;w=g+8+8|0;q=c[w>>2]|0;h=g+8+12|0;e=(c[h>>2]|0)+b|0;c[h>>2]=e;c[x>>2]=((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b;p=y+1899447441+((e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7))+(c[g+40+4>>2]|0)+((n^p)&e^n)|0;c[w>>2]=q+p;y=((o|l)&((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b|o&l)+(((((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b|0)>>>2|((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b<<30)^((((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b|0)>>>13|((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b<<19)^((((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b|0)>>>22|((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b<<10))+p|0;c[j>>2]=y;r=c[k>>2]|0;n=n+-1245643825+(((q+p|0)>>>6|q+p<<26)^((q+p|0)>>>11|q+p<<21)^((q+p|0)>>>25|q+p<<7))+(c[g+40+8>>2]|0)+((r^e)&q+p^r)|0;c[t>>2]=o+n;b=((l|((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b)&y|l&((q|o)&l|q&o)+((l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10))+b)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+n|0;c[v>>2]=b;r=r+-373957723+(((o+n|0)>>>6|o+n<<26)^((o+n|0)>>>11|o+n<<21)^((o+n|0)>>>25|o+n<<7))+(c[g+40+12>>2]|0)+((e^q+p)&o+n^e)|0;s=c[x>>2]|0;c[g+8>>2]=l+r;c[k>>2]=((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r;e=e+961987163+(((l+r|0)>>>6|l+r<<26)^((l+r|0)>>>11|l+r<<21)^((l+r|0)>>>25|l+r<<7))+(c[g+40+16>>2]|0)+((q+p^o+n)&l+r^q+p)|0;m=c[j>>2]|0;c[x>>2]=s+e;u=((m|b)&((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|m&b)+(((((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>2|((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<30)^((((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>13|((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<19)^((((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>22|((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<10))+e|0;c[h>>2]=u;p=q+p+1508970993+(((s+e|0)>>>6|s+e<<26)^((s+e|0)>>>11|s+e<<21)^((s+e|0)>>>25|s+e<<7))+(c[g+40+20>>2]|0)+((o+n^l+r)&s+e^o+n)|0;q=c[v>>2]|0;c[j>>2]=m+p;b=((q|((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)&u|q&((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+p|0;c[w>>2]=b;n=o+n+-1841331548+(((m+p|0)>>>6|m+p<<26)^((m+p|0)>>>11|m+p<<21)^((m+p|0)>>>25|m+p<<7))+(c[g+40+24>>2]|0)+((l+r^s+e)&m+p^l+r)|0;o=c[k>>2]|0;c[v>>2]=q+n;c[t>>2]=((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n;r=l+r+-1424204075+(((q+n|0)>>>6|q+n<<26)^((q+n|0)>>>11|q+n<<21)^((q+n|0)>>>25|q+n<<7))+(c[g+40+28>>2]|0)+((s+e^m+p)&q+n^s+e)|0;l=c[h>>2]|0;c[k>>2]=o+r;y=((l|b)&((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|l&b)+(((((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>2|((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<30)^((((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>13|((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<19)^((((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>22|((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<10))+r|0;c[g+8>>2]=y;e=s+e+-670586216+(((o+r|0)>>>6|o+r<<26)^((o+r|0)>>>11|o+r<<21)^((o+r|0)>>>25|o+r<<7))+(c[g+40+32>>2]|0)+((m+p^q+n)&o+r^m+p)|0;s=c[w>>2]|0;c[h>>2]=l+e;b=((s|((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)&y|s&((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+e|0;c[x>>2]=b;p=m+p+310598401+(((l+e|0)>>>6|l+e<<26)^((l+e|0)>>>11|l+e<<21)^((l+e|0)>>>25|l+e<<7))+(c[g+40+36>>2]|0)+((q+n^o+r)&l+e^q+n)|0;m=c[t>>2]|0;c[w>>2]=s+p;c[j>>2]=((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p;n=q+n+607225278+(((s+p|0)>>>6|s+p<<26)^((s+p|0)>>>11|s+p<<21)^((s+p|0)>>>25|s+p<<7))+(c[g+40+40>>2]|0)+((o+r^l+e)&s+p^o+r)|0;q=c[g+8>>2]|0;c[t>>2]=m+n;u=((q|b)&((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|q&b)+(((((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>2|((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<30)^((((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>13|((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<19)^((((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>22|((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<10))+n|0;c[v>>2]=u;r=o+r+1426881987+(((m+n|0)>>>6|m+n<<26)^((m+n|0)>>>11|m+n<<21)^((m+n|0)>>>25|m+n<<7))+(c[g+40+44>>2]|0)+((l+e^s+p)&m+n^l+e)|0;o=c[x>>2]|0;c[g+8>>2]=q+r;b=((o|((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)&u|o&((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+r|0;c[k>>2]=b;e=l+e+1925078388+(((q+r|0)>>>6|q+r<<26)^((q+r|0)>>>11|q+r<<21)^((q+r|0)>>>25|q+r<<7))+(c[g+40+48>>2]|0)+((s+p^m+n)&q+r^s+p)|0;l=c[j>>2]|0;c[x>>2]=o+e;c[h>>2]=((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e;p=s+p+-2132889090+(((o+e|0)>>>6|o+e<<26)^((o+e|0)>>>11|o+e<<21)^((o+e|0)>>>25|o+e<<7))+(c[g+40+52>>2]|0)+((m+n^q+r)&o+e^m+n)|0;s=c[v>>2]|0;c[j>>2]=l+p;y=((s|b)&((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|s&b)+(((((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>2|((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<30)^((((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>13|((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<19)^((((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>22|((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<10))+p|0;c[w>>2]=y;n=m+n+-1680079193+(((l+p|0)>>>6|l+p<<26)^((l+p|0)>>>11|l+p<<21)^((l+p|0)>>>25|l+p<<7))+(c[g+40+56>>2]|0)+((q+r^o+e)&l+p^q+r)|0;m=c[k>>2]|0;c[v>>2]=s+n;b=((m|((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)&y|m&((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+n|0;c[t>>2]=b;r=q+r+-1046744716+(((s+n|0)>>>6|s+n<<26)^((s+n|0)>>>11|s+n<<21)^((s+n|0)>>>25|s+n<<7))+(c[g+40+60>>2]|0)+((o+e^l+p)&s+n^o+e)|0;q=c[h>>2]|0;c[k>>2]=m+r;c[g+8>>2]=((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r;e=o+e+-459576895+(((m+r|0)>>>6|m+r<<26)^((m+r|0)>>>11|m+r<<21)^((m+r|0)>>>25|m+r<<7))+(c[g+40+64>>2]|0)+((l+p^s+n)&m+r^l+p)|0;o=c[w>>2]|0;c[h>>2]=q+e;u=((o|b)&((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|o&b)+(((((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>2|((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<30)^((((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>13|((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<19)^((((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>22|((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<10))+e|0;c[x>>2]=u;p=l+p+-272742522+(((q+e|0)>>>6|q+e<<26)^((q+e|0)>>>11|q+e<<21)^((q+e|0)>>>25|q+e<<7))+(c[g+40+68>>2]|0)+((s+n^m+r)&q+e^s+n)|0;l=c[t>>2]|0;c[w>>2]=o+p;b=((l|((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)&u|l&((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+p|0;c[j>>2]=b;n=s+n+264347078+(((o+p|0)>>>6|o+p<<26)^((o+p|0)>>>11|o+p<<21)^((o+p|0)>>>25|o+p<<7))+(c[g+40+72>>2]|0)+((m+r^q+e)&o+p^m+r)|0;s=c[g+8>>2]|0;c[t>>2]=l+n;c[v>>2]=((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n;r=m+r+604807628+(((l+n|0)>>>6|l+n<<26)^((l+n|0)>>>11|l+n<<21)^((l+n|0)>>>25|l+n<<7))+(c[g+40+76>>2]|0)+((q+e^o+p)&l+n^q+e)|0;m=c[x>>2]|0;c[g+8>>2]=s+r;y=((m|b)&((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|m&b)+(((((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>2|((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<30)^((((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>13|((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<19)^((((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>22|((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<10))+r|0;c[k>>2]=y;e=q+e+770255983+(((s+r|0)>>>6|s+r<<26)^((s+r|0)>>>11|s+r<<21)^((s+r|0)>>>25|s+r<<7))+(c[g+40+80>>2]|0)+((o+p^l+n)&s+r^o+p)|0;q=c[j>>2]|0;c[x>>2]=m+e;b=((q|((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)&y|q&((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+e|0;c[h>>2]=b;p=o+p+1249150122+(((m+e|0)>>>6|m+e<<26)^((m+e|0)>>>11|m+e<<21)^((m+e|0)>>>25|m+e<<7))+(c[g+40+84>>2]|0)+((l+n^s+r)&m+e^l+n)|0;o=c[v>>2]|0;c[j>>2]=q+p;c[w>>2]=((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p;n=l+n+1555081692+(((q+p|0)>>>6|q+p<<26)^((q+p|0)>>>11|q+p<<21)^((q+p|0)>>>25|q+p<<7))+(c[g+40+88>>2]|0)+((s+r^m+e)&q+p^s+r)|0;l=c[k>>2]|0;c[v>>2]=o+n;u=((l|b)&((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|l&b)+(((((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>2|((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<30)^((((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>13|((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<19)^((((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>22|((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<10))+n|0;c[t>>2]=u;r=s+r+1996064986+(((o+n|0)>>>6|o+n<<26)^((o+n|0)>>>11|o+n<<21)^((o+n|0)>>>25|o+n<<7))+(c[g+40+92>>2]|0)+((m+e^q+p)&o+n^m+e)|0;s=c[h>>2]|0;c[k>>2]=l+r;b=((s|((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)&u|s&((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+r|0;c[g+8>>2]=b;e=m+e+-1740746414+(((l+r|0)>>>6|l+r<<26)^((l+r|0)>>>11|l+r<<21)^((l+r|0)>>>25|l+r<<7))+(c[g+40+96>>2]|0)+((q+p^o+n)&l+r^q+p)|0;m=c[w>>2]|0;c[h>>2]=s+e;c[x>>2]=((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e;p=q+p+-1473132947+(((s+e|0)>>>6|s+e<<26)^((s+e|0)>>>11|s+e<<21)^((s+e|0)>>>25|s+e<<7))+(c[g+40+100>>2]|0)+((o+n^l+r)&s+e^o+n)|0;q=c[t>>2]|0;c[w>>2]=m+p;y=((q|b)&((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|q&b)+(((((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>2|((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<30)^((((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>13|((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<19)^((((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>22|((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<10))+p|0;c[j>>2]=y;n=o+n+-1341970488+(((m+p|0)>>>6|m+p<<26)^((m+p|0)>>>11|m+p<<21)^((m+p|0)>>>25|m+p<<7))+(c[g+40+104>>2]|0)+((l+r^s+e)&m+p^l+r)|0;o=c[g+8>>2]|0;c[t>>2]=q+n;b=((o|((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)&y|o&((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+n|0;c[v>>2]=b;r=l+r+-1084653625+(((q+n|0)>>>6|q+n<<26)^((q+n|0)>>>11|q+n<<21)^((q+n|0)>>>25|q+n<<7))+(c[g+40+108>>2]|0)+((s+e^m+p)&q+n^s+e)|0;l=c[x>>2]|0;c[g+8>>2]=o+r;c[k>>2]=((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r;e=s+e+-958395405+(((o+r|0)>>>6|o+r<<26)^((o+r|0)>>>11|o+r<<21)^((o+r|0)>>>25|o+r<<7))+(c[g+40+112>>2]|0)+((m+p^q+n)&o+r^m+p)|0;s=c[j>>2]|0;c[x>>2]=l+e;u=((s|b)&((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|s&b)+(((((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>2|((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<30)^((((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>13|((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<19)^((((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>22|((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<10))+e|0;c[h>>2]=u;p=m+p+-710438585+(((l+e|0)>>>6|l+e<<26)^((l+e|0)>>>11|l+e<<21)^((l+e|0)>>>25|l+e<<7))+(c[g+40+116>>2]|0)+((q+n^o+r)&l+e^q+n)|0;m=c[v>>2]|0;c[j>>2]=s+p;b=((m|((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)&u|m&((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+p|0;c[w>>2]=b;n=q+n+113926993+(((s+p|0)>>>6|s+p<<26)^((s+p|0)>>>11|s+p<<21)^((s+p|0)>>>25|s+p<<7))+(c[g+40+120>>2]|0)+((o+r^l+e)&s+p^o+r)|0;q=c[k>>2]|0;c[v>>2]=m+n;c[t>>2]=((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n;r=o+r+338241895+(((m+n|0)>>>6|m+n<<26)^((m+n|0)>>>11|m+n<<21)^((m+n|0)>>>25|m+n<<7))+(c[g+40+124>>2]|0)+((l+e^s+p)&m+n^l+e)|0;o=c[h>>2]|0;c[k>>2]=q+r;y=((o|b)&((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|o&b)+(((((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>2|((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<30)^((((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>13|((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<19)^((((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>22|((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<10))+r|0;c[g+8>>2]=y;e=l+e+666307205+(((q+r|0)>>>6|q+r<<26)^((q+r|0)>>>11|q+r<<21)^((q+r|0)>>>25|q+r<<7))+(c[g+40+128>>2]|0)+((s+p^m+n)&q+r^s+p)|0;l=c[w>>2]|0;c[h>>2]=o+e;b=((l|((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)&y|l&((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+e|0;c[x>>2]=b;p=s+p+773529912+(((o+e|0)>>>6|o+e<<26)^((o+e|0)>>>11|o+e<<21)^((o+e|0)>>>25|o+e<<7))+(c[g+40+132>>2]|0)+((m+n^q+r)&o+e^m+n)|0;s=c[t>>2]|0;c[w>>2]=l+p;c[j>>2]=((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p;n=m+n+1294757372+(((l+p|0)>>>6|l+p<<26)^((l+p|0)>>>11|l+p<<21)^((l+p|0)>>>25|l+p<<7))+(c[g+40+136>>2]|0)+((q+r^o+e)&l+p^q+r)|0;m=c[g+8>>2]|0;c[t>>2]=s+n;u=((m|b)&((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|m&b)+(((((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>2|((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<30)^((((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>13|((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<19)^((((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>22|((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<10))+n|0;c[v>>2]=u;r=q+r+1396182291+(((s+n|0)>>>6|s+n<<26)^((s+n|0)>>>11|s+n<<21)^((s+n|0)>>>25|s+n<<7))+(c[g+40+140>>2]|0)+((o+e^l+p)&s+n^o+e)|0;q=c[x>>2]|0;c[g+8>>2]=m+r;b=((q|((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)&u|q&((s|y)&b|s&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+r|0;c[k>>2]=b;e=o+e+1695183700+(((m+r|0)>>>6|m+r<<26)^((m+r|0)>>>11|m+r<<21)^((m+r|0)>>>25|m+r<<7))+(c[g+40+144>>2]|0)+((l+p^s+n)&m+r^l+p)|0;o=c[j>>2]|0;c[x>>2]=q+e;c[h>>2]=((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e;p=l+p+1986661051+(((q+e|0)>>>6|q+e<<26)^((q+e|0)>>>11|q+e<<21)^((q+e|0)>>>25|q+e<<7))+(c[g+40+148>>2]|0)+((s+n^m+r)&q+e^s+n)|0;l=c[v>>2]|0;c[j>>2]=o+p;y=((l|b)&((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|l&b)+(((((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>2|((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<30)^((((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>13|((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<19)^((((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>22|((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<10))+p|0;c[w>>2]=y;n=s+n+-2117940946+(((o+p|0)>>>6|o+p<<26)^((o+p|0)>>>11|o+p<<21)^((o+p|0)>>>25|o+p<<7))+(c[g+40+152>>2]|0)+((m+r^q+e)&o+p^m+r)|0;s=c[k>>2]|0;c[v>>2]=l+n;b=((s|((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)&y|s&((o|u)&b|o&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+n|0;c[t>>2]=b;r=m+r+-1838011259+(((l+n|0)>>>6|l+n<<26)^((l+n|0)>>>11|l+n<<21)^((l+n|0)>>>25|l+n<<7))+(c[g+40+156>>2]|0)+((q+e^o+p)&l+n^q+e)|0;m=c[h>>2]|0;c[k>>2]=s+r;c[g+8>>2]=((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r;e=q+e+-1564481375+(((s+r|0)>>>6|s+r<<26)^((s+r|0)>>>11|s+r<<21)^((s+r|0)>>>25|s+r<<7))+(c[g+40+160>>2]|0)+((o+p^l+n)&s+r^o+p)|0;q=c[w>>2]|0;c[h>>2]=m+e;u=((q|b)&((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|q&b)+(((((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>2|((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<30)^((((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>13|((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<19)^((((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>22|((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<10))+e|0;c[x>>2]=u;p=o+p+-1474664885+(((m+e|0)>>>6|m+e<<26)^((m+e|0)>>>11|m+e<<21)^((m+e|0)>>>25|m+e<<7))+(c[g+40+164>>2]|0)+((l+n^s+r)&m+e^l+n)|0;o=c[t>>2]|0;c[w>>2]=q+p;b=((o|((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)&u|o&((m|y)&b|m&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+p|0;c[j>>2]=b;n=l+n+-1035236496+(((q+p|0)>>>6|q+p<<26)^((q+p|0)>>>11|q+p<<21)^((q+p|0)>>>25|q+p<<7))+(c[g+40+168>>2]|0)+((s+r^m+e)&q+p^s+r)|0;l=c[g+8>>2]|0;c[t>>2]=o+n;c[v>>2]=((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n;r=s+r+-949202525+(((o+n|0)>>>6|o+n<<26)^((o+n|0)>>>11|o+n<<21)^((o+n|0)>>>25|o+n<<7))+(c[g+40+172>>2]|0)+((m+e^q+p)&o+n^m+e)|0;s=c[x>>2]|0;c[g+8>>2]=l+r;y=((s|b)&((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|s&b)+(((((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>2|((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<30)^((((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>13|((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<19)^((((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>22|((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<10))+r|0;c[k>>2]=y;e=m+e+-778901479+(((l+r|0)>>>6|l+r<<26)^((l+r|0)>>>11|l+r<<21)^((l+r|0)>>>25|l+r<<7))+(c[g+40+176>>2]|0)+((q+p^o+n)&l+r^q+p)|0;m=c[j>>2]|0;c[x>>2]=s+e;b=((m|((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)&y|m&((l|u)&b|l&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+e|0;c[h>>2]=b;p=q+p+-694614492+(((s+e|0)>>>6|s+e<<26)^((s+e|0)>>>11|s+e<<21)^((s+e|0)>>>25|s+e<<7))+(c[g+40+180>>2]|0)+((o+n^l+r)&s+e^o+n)|0;q=c[v>>2]|0;c[j>>2]=m+p;c[w>>2]=((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p;n=o+n+-200395387+(((m+p|0)>>>6|m+p<<26)^((m+p|0)>>>11|m+p<<21)^((m+p|0)>>>25|m+p<<7))+(c[g+40+184>>2]|0)+((l+r^s+e)&m+p^l+r)|0;o=c[k>>2]|0;c[v>>2]=q+n;u=((o|b)&((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|o&b)+(((((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>2|((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<30)^((((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>13|((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<19)^((((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>22|((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<10))+n|0;c[t>>2]=u;r=l+r+275423344+(((q+n|0)>>>6|q+n<<26)^((q+n|0)>>>11|q+n<<21)^((q+n|0)>>>25|q+n<<7))+(c[g+40+188>>2]|0)+((s+e^m+p)&q+n^s+e)|0;l=c[h>>2]|0;c[k>>2]=o+r;b=((l|((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)&u|l&((q|y)&b|q&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+r|0;c[g+8>>2]=b;e=s+e+430227734+(((o+r|0)>>>6|o+r<<26)^((o+r|0)>>>11|o+r<<21)^((o+r|0)>>>25|o+r<<7))+(c[g+40+192>>2]|0)+((m+p^q+n)&o+r^m+p)|0;s=c[w>>2]|0;c[h>>2]=l+e;c[x>>2]=((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e;p=m+p+506948616+(((l+e|0)>>>6|l+e<<26)^((l+e|0)>>>11|l+e<<21)^((l+e|0)>>>25|l+e<<7))+(c[g+40+196>>2]|0)+((q+n^o+r)&l+e^q+n)|0;m=c[t>>2]|0;c[w>>2]=s+p;y=((m|b)&((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|m&b)+(((((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>2|((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<30)^((((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>13|((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<19)^((((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>22|((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<10))+p|0;c[j>>2]=y;n=q+n+659060556+(((s+p|0)>>>6|s+p<<26)^((s+p|0)>>>11|s+p<<21)^((s+p|0)>>>25|s+p<<7))+(c[g+40+200>>2]|0)+((o+r^l+e)&s+p^o+r)|0;q=c[g+8>>2]|0;c[t>>2]=m+n;b=((q|((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)&y|q&((s|u)&b|s&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+n|0;c[v>>2]=b;r=o+r+883997877+(((m+n|0)>>>6|m+n<<26)^((m+n|0)>>>11|m+n<<21)^((m+n|0)>>>25|m+n<<7))+(c[g+40+204>>2]|0)+((l+e^s+p)&m+n^l+e)|0;o=c[x>>2]|0;c[g+8>>2]=q+r;c[k>>2]=((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r;e=l+e+958139571+(((q+r|0)>>>6|q+r<<26)^((q+r|0)>>>11|q+r<<21)^((q+r|0)>>>25|q+r<<7))+(c[g+40+208>>2]|0)+((s+p^m+n)&q+r^s+p)|0;l=c[j>>2]|0;c[x>>2]=o+e;u=((l|b)&((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|l&b)+(((((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>2|((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<30)^((((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>13|((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<19)^((((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r|0)>>>22|((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r<<10))+e|0;c[h>>2]=u;p=s+p+1322822218+(((o+e|0)>>>6|o+e<<26)^((o+e|0)>>>11|o+e<<21)^((o+e|0)>>>25|o+e<<7))+(c[g+40+212>>2]|0)+((m+n^q+r)&o+e^m+n)|0;s=c[v>>2]|0;c[j>>2]=l+p;b=((s|((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)&u|s&((o|y)&b|o&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+r)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+p|0;c[w>>2]=b;n=m+n+1537002063+(((l+p|0)>>>6|l+p<<26)^((l+p|0)>>>11|l+p<<21)^((l+p|0)>>>25|l+p<<7))+(c[g+40+216>>2]|0)+((q+r^o+e)&l+p^q+r)|0;m=c[k>>2]|0;c[v>>2]=s+n;c[t>>2]=((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n;r=q+r+1747873779+(((s+n|0)>>>6|s+n<<26)^((s+n|0)>>>11|s+n<<21)^((s+n|0)>>>25|s+n<<7))+(c[g+40+220>>2]|0)+((o+e^l+p)&s+n^o+e)|0;q=c[h>>2]|0;c[k>>2]=m+r;y=((q|b)&((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|q&b)+(((((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>2|((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<30)^((((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>13|((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<19)^((((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n|0)>>>22|((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n<<10))+r|0;c[g+8>>2]=y;e=o+e+1955562222+(((m+r|0)>>>6|m+r<<26)^((m+r|0)>>>11|m+r<<21)^((m+r|0)>>>25|m+r<<7))+(c[g+40+224>>2]|0)+((l+p^s+n)&m+r^l+p)|0;o=c[w>>2]|0;c[h>>2]=q+e;b=((o|((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)&y|o&((m|u)&b|m&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+n)+((y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10))+e|0;c[x>>2]=b;p=l+p+2024104815+(((q+e|0)>>>6|q+e<<26)^((q+e|0)>>>11|q+e<<21)^((q+e|0)>>>25|q+e<<7))+(c[g+40+228>>2]|0)+((s+n^m+r)&q+e^s+n)|0;l=c[t>>2]|0;c[w>>2]=o+p;c[j>>2]=((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p;n=s+n+-2067236844+(((o+p|0)>>>6|o+p<<26)^((o+p|0)>>>11|o+p<<21)^((o+p|0)>>>25|o+p<<7))+(c[g+40+232>>2]|0)+((m+r^q+e)&o+p^m+r)|0;s=c[g+8>>2]|0;c[t>>2]=l+n;u=((s|b)&((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|s&b)+(((((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>2|((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<30)^((((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>13|((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<19)^((((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p|0)>>>22|((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p<<10))+n|0;c[v>>2]=u;r=m+r+-1933114872+(((l+n|0)>>>6|l+n<<26)^((l+n|0)>>>11|l+n<<21)^((l+n|0)>>>25|l+n<<7))+(c[g+40+236>>2]|0)+((q+e^o+p)&l+n^q+e)|0;m=c[x>>2]|0;c[g+8>>2]=s+r;b=((m|((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)&u|m&((l|y)&b|l&y)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+p)+((u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10))+r|0;c[k>>2]=b;e=q+e+-1866530822+(((s+r|0)>>>6|s+r<<26)^((s+r|0)>>>11|s+r<<21)^((s+r|0)>>>25|s+r<<7))+(c[g+40+240>>2]|0)+((o+p^l+n)&s+r^o+p)|0;q=c[j>>2]|0;c[x>>2]=m+e;c[h>>2]=((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e;p=o+p+-1538233109+(((m+e|0)>>>6|m+e<<26)^((m+e|0)>>>11|m+e<<21)^((m+e|0)>>>25|m+e<<7))+(c[g+40+244>>2]|0)+((l+n^s+r)&m+e^l+n)|0;o=c[v>>2]|0;c[j>>2]=q+p;j=((o|b)&((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|o&b)+(((((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>2|((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<30)^((((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>13|((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<19)^((((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0)>>>22|((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e<<10))+p|0;c[w>>2]=j;n=l+n+-1090935817+(((q+p|0)>>>6|q+p<<26)^((q+p|0)>>>11|q+p<<21)^((q+p|0)>>>25|q+p<<7))+(c[g+40+248>>2]|0)+((s+r^m+e)&q+p^s+r)|0;l=c[k>>2]|0;c[v>>2]=o+n;b=((l|((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)&j|l&((q|u)&b|q&u)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e)+((j>>>2|j<<30)^(j>>>13|j<<19)^(j>>>22|j<<10))+n|0;c[t>>2]=b;e=s+r+-965641998+(((o+n|0)>>>6|o+n<<26)^((o+n|0)>>>11|o+n<<21)^((o+n|0)>>>25|o+n<<7))+(c[g+40+252>>2]|0)+((m+e^q+p)&o+n^m+e)|0;c[g+4>>2]=e;h=c[h>>2]|0;c[g>>2]=((h|j)&b|h&j)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10));c[k>>2]=l+e;e=((h|j)&b|h&j)+((b>>>2|b<<30)^(b>>>13|b<<19)^(b>>>22|b<<10))+e|0;c[g+8>>2]=e;c[a>>2]=(c[a>>2]|0)+e;e=1;while(1){y=a+(e<<2)|0;c[y>>2]=(c[y>>2]|0)+b;e=e+1|0;if((e|0)==8)break;b=c[g+8+(e<<2)>>2]|0}fd(g+40|0,256);fd(g+8|0,32);fd(g+4|0,4);fd(g,4);i=f;return}function la(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0;r=i;q=i=i+63&-64;i=i+4096|0;if(b){p=na(c[b+12>>2]<<3)|0;if(!p)e=-22;else{kf(q+3072|0);kf(q+2048|0);l=c[d>>2]|0;c[q+2048>>2]=l;c[q+2048+4>>2]=0;j=c[d+4>>2]|0;c[q+2048+8>>2]=j;c[q+2048+8+4>>2]=0;k=a[d+8>>0]|0;c[q+2048+16>>2]=k&255;c[q+2048+16+4>>2]=0;c[q+2048+24>>2]=c[b+8>>2];c[q+2048+24+4>>2]=0;c[q+2048+32>>2]=c[b+4>>2];c[q+2048+32+4>>2]=0;c[q+2048+40>>2]=c[b+28>>2];c[q+2048+40+4>>2]=0;e=c[b+12>>2]|0;if(!e)f=0;else{g=0;do{f=g&127;if(!f){e=oe(c[q+2048+48>>2]|0,c[q+2048+48+4>>2]|0,1,0)|0;c[q+2048+48>>2]=e;c[q+2048+48+4>>2]=D;kf(q);kf(q+1024|0);ma(q+3072|0,q+2048|0,q);ma(q+3072|0,q,q+1024|0);e=c[b+12>>2]|0}n=c[q+1024+(f<<3)+4>>2]|0;o=p+(g<<3)|0;c[o>>2]=c[q+1024+(f<<3)>>2];c[o+4>>2]=n;g=g+1|0}while(g>>>0<e>>>0);f=e}e=(l|0)==0&k<<24>>24==0?2:0;h=c[b+16>>2]|0;g=(S(h,j)|0)+e+(S(k&255,f)|0)|0;a:do if(e>>>0<f>>>0){o=g;f=(((g>>>0)%(h>>>0)|0|0)==0?h+-1|0:-1)+g|0;m=h;g=l;while(1){n=((o>>>0)%(m>>>0)|0|0)==1?o+-1|0:f;f=p+(e<<3)|0;j=c[f>>2]|0;f=Bd(c[f+4>>2]|0,0,c[b+20>>2]|0,0)|0;h=D;l=(g|0)==0;if(l?(a[d+8>>0]|0)==0:0){f=c[d+4>>2]|0;h=0}c[d+12>>2]=e;j=Eb(b,d,j,((h|0)==0?(f|0)==(c[d+4>>2]|0):0)&1)|0;k=c[(c[b>>2]|0)+4>>2]|0;f=Ed(m|0,0,f|0,h|0)|0;g=k+(o<<10)|0;if(l){ef(q+3072|0,k+(f<<10)+(j<<10)|0);gd(q+3072|0,k+(n<<10)|0);ef(q+2048|0,q+3072|0);f=0;do{m=f<<4;z=c[q+3072+(m<<3)>>2]|0;G=c[q+3072+(m<<3)+4>>2]|0;u=c[q+3072+((m|4)<<3)>>2]|0;s=c[q+3072+((m|4)<<3)+4>>2]|0;l=oe(u|0,s|0,z|0,G|0)|0;v=D;G=Pd(z|0,G|0,1)|0;G=Ed(G&-2|0,D&1|0,u|0,0)|0;G=oe(l|0,v|0,G|0,D|0)|0;v=D;l=G^c[q+3072+((m|12)<<3)>>2];z=v^c[q+3072+((m|12)<<3)+4>>2];y=c[q+3072+((m|8)<<3)>>2]|0;A=c[q+3072+((m|8)<<3)+4>>2]|0;C=oe(z|0,l|0,y|0,A|0)|0;j=D;A=Pd(y|0,A|0,1)|0;A=Ed(z|0,0,A&-2|0,D&1|0)|0;A=oe(C|0,j|0,A|0,D|0)|0;j=D;C=Rd(A^u|0,j^s|0,24)|0;y=D;s=Pd(A^u|0,j^s|0,40)|0;y=D|y;u=oe(s|C|0,y|0,G|0,v|0)|0;h=D;v=Pd(G|0,v|0,1)|0;v=Ed(C|0,0,v&-2|0,D&1|0)|0;v=oe(u|0,h|0,v|0,D|0)|0;h=D;c[q+3072+(m<<3)>>2]=v;c[q+3072+(m<<3)+4>>2]=h;u=Rd(v^z|0,h^l|0,16)|0;G=D;l=Pd(v^z|0,h^l|0,48)|0;G=D|G;c[q+3072+((m|12)<<3)>>2]=l|u;c[q+3072+((m|12)<<3)+4>>2]=G;G=oe(l|u|0,G|0,A|0,j|0)|0;l=D;j=Pd(A|0,j|0,1)|0;j=Ed(u|0,0,j&-2|0,D&1|0)|0;j=oe(G|0,l|0,j|0,D|0)|0;l=D;c[q+3072+((m|8)<<3)>>2]=j;c[q+3072+((m|8)<<3)+4>>2]=l;G=Rd(j^(s|C)|0,l^y|0,63)|0;u=D;y=Pd(j^(s|C)|0,l^y|0,1)|0;c[q+3072+((m|4)<<3)>>2]=y|G;c[q+3072+((m|4)<<3)+4>>2]=D|u;u=c[q+3072+((m|1)<<3)>>2]|0;G=c[q+3072+((m|1)<<3)+4>>2]|0;y=c[q+3072+((m|5)<<3)>>2]|0;l=c[q+3072+((m|5)<<3)+4>>2]|0;C=oe(y|0,l|0,u|0,G|0)|0;s=D;G=Pd(u|0,G|0,1)|0;G=Ed(G&-2|0,D&1|0,y|0,0)|0;G=oe(C|0,s|0,G|0,D|0)|0;s=D;C=G^c[q+3072+((m|13)<<3)>>2];u=s^c[q+3072+((m|13)<<3)+4>>2];j=c[q+3072+((m|9)<<3)>>2]|0;A=c[q+3072+((m|9)<<3)+4>>2]|0;h=oe(u|0,C|0,j|0,A|0)|0;z=D;A=Pd(j|0,A|0,1)|0;A=Ed(u|0,0,A&-2|0,D&1|0)|0;A=oe(h|0,z|0,A|0,D|0)|0;z=D;h=Rd(A^y|0,z^l|0,24)|0;j=D;l=Pd(A^y|0,z^l|0,40)|0;j=D|j;y=oe(l|h|0,j|0,G|0,s|0)|0;v=D;s=Pd(G|0,s|0,1)|0;s=Ed(h|0,0,s&-2|0,D&1|0)|0;s=oe(y|0,v|0,s|0,D|0)|0;v=D;c[q+3072+((m|1)<<3)>>2]=s;c[q+3072+((m|1)<<3)+4>>2]=v;y=Rd(s^u|0,v^C|0,16)|0;G=D;C=Pd(s^u|0,v^C|0,48)|0;G=D|G;c[q+3072+((m|13)<<3)>>2]=C|y;c[q+3072+((m|13)<<3)+4>>2]=G;G=oe(C|y|0,G|0,A|0,z|0)|0;C=D;z=Pd(A|0,z|0,1)|0;z=Ed(y|0,0,z&-2|0,D&1|0)|0;z=oe(G|0,C|0,z|0,D|0)|0;C=D;c[q+3072+((m|9)<<3)>>2]=z;c[q+3072+((m|9)<<3)+4>>2]=C;G=Rd(z^(l|h)|0,C^j|0,63)|0;y=D;j=Pd(z^(l|h)|0,C^j|0,1)|0;c[q+3072+((m|5)<<3)>>2]=j|G;c[q+3072+((m|5)<<3)+4>>2]=D|y;y=c[q+3072+((m|2)<<3)>>2]|0;G=c[q+3072+((m|2)<<3)+4>>2]|0;j=c[q+3072+((m|6)<<3)>>2]|0;C=c[q+3072+((m|6)<<3)+4>>2]|0;h=oe(j|0,C|0,y|0,G|0)|0;l=D;G=Pd(y|0,G|0,1)|0;G=Ed(G&-2|0,D&1|0,j|0,0)|0;G=oe(h|0,l|0,G|0,D|0)|0;l=D;h=G^c[q+3072+((m|14)<<3)>>2];y=l^c[q+3072+((m|14)<<3)+4>>2];z=c[q+3072+((m|10)<<3)>>2]|0;A=c[q+3072+((m|10)<<3)+4>>2]|0;v=oe(y|0,h|0,z|0,A|0)|0;u=D;A=Pd(z|0,A|0,1)|0;A=Ed(y|0,0,A&-2|0,D&1|0)|0;A=oe(v|0,u|0,A|0,D|0)|0;u=D;v=Rd(A^j|0,u^C|0,24)|0;z=D;C=Pd(A^j|0,u^C|0,40)|0;z=D|z;j=oe(C|v|0,z|0,G|0,l|0)|0;s=D;l=Pd(G|0,l|0,1)|0;l=Ed(v|0,0,l&-2|0,D&1|0)|0;l=oe(j|0,s|0,l|0,D|0)|0;s=D;c[q+3072+((m|2)<<3)>>2]=l;c[q+3072+((m|2)<<3)+4>>2]=s;j=Rd(l^y|0,s^h|0,16)|0;G=D;h=Pd(l^y|0,s^h|0,48)|0;G=D|G;c[q+3072+((m|14)<<3)>>2]=h|j;c[q+3072+((m|14)<<3)+4>>2]=G;G=oe(h|j|0,G|0,A|0,u|0)|0;h=D;u=Pd(A|0,u|0,1)|0;u=Ed(j|0,0,u&-2|0,D&1|0)|0;u=oe(G|0,h|0,u|0,D|0)|0;h=D;G=Rd(u^(C|v)|0,h^z|0,63)|0;j=D;z=Pd(u^(C|v)|0,h^z|0,1)|0;c[q+3072+((m|6)<<3)>>2]=z|G;c[q+3072+((m|6)<<3)+4>>2]=D|j;j=c[q+3072+((m|3)<<3)>>2]|0;G=c[q+3072+((m|3)<<3)+4>>2]|0;z=c[q+3072+((m|7)<<3)>>2]|0;v=c[q+3072+((m|7)<<3)+4>>2]|0;C=oe(z|0,v|0,j|0,G|0)|0;A=D;G=Pd(j|0,G|0,1)|0;G=Ed(G&-2|0,D&1|0,z|0,0)|0;G=oe(C|0,A|0,G|0,D|0)|0;A=D;C=G^c[q+3072+((m|15)<<3)>>2];j=A^c[q+3072+((m|15)<<3)+4>>2];s=c[q+3072+((m|11)<<3)>>2]|0;y=c[q+3072+((m|11)<<3)+4>>2]|0;l=oe(j|0,C|0,s|0,y|0)|0;t=D;y=Pd(s|0,y|0,1)|0;y=Ed(j|0,0,y&-2|0,D&1|0)|0;y=oe(l|0,t|0,y|0,D|0)|0;t=D;l=Rd(y^z|0,t^v|0,24)|0;s=D;v=Pd(y^z|0,t^v|0,40)|0;s=D|s;z=oe(v|l|0,s|0,G|0,A|0)|0;x=D;A=Pd(G|0,A|0,1)|0;A=Ed(l|0,0,A&-2|0,D&1|0)|0;A=oe(z|0,x|0,A|0,D|0)|0;x=D;c[q+3072+((m|3)<<3)>>2]=A;c[q+3072+((m|3)<<3)+4>>2]=x;z=Rd(A^j|0,x^C|0,16)|0;G=D;C=Pd(A^j|0,x^C|0,48)|0;G=D|G;x=oe(C|z|0,G|0,y|0,t|0)|0;j=D;t=Pd(y|0,t|0,1)|0;t=Ed(z|0,0,t&-2|0,D&1|0)|0;t=oe(x|0,j|0,t|0,D|0)|0;j=D;x=Rd(t^(v|l)|0,j^s|0,63)|0;y=D;s=Pd(t^(v|l)|0,j^s|0,1)|0;y=D|y;c[q+3072+((m|7)<<3)>>2]=s|x;c[q+3072+((m|7)<<3)+4>>2]=y;l=c[q+3072+(m<<3)>>2]|0;v=c[q+3072+(m<<3)+4>>2]|0;A=c[q+3072+((m|5)<<3)>>2]|0;B=c[q+3072+((m|5)<<3)+4>>2]|0;w=oe(A|0,B|0,l|0,v|0)|0;F=D;v=Pd(l|0,v|0,1)|0;v=Ed(v&-2|0,D&1|0,A|0,0)|0;v=oe(w|0,F|0,v|0,D|0)|0;F=D;w=oe(G^F|0,(C|z)^v|0,u|0,h|0)|0;l=D;h=Pd(u|0,h|0,1)|0;h=Ed(G^F|0,0,h&-2|0,D&1|0)|0;h=oe(w|0,l|0,h|0,D|0)|0;l=D;w=Rd(h^A|0,l^B|0,24)|0;u=D;B=Pd(h^A|0,l^B|0,40)|0;u=D|u;A=oe(B|w|0,u|0,v|0,F|0)|0;E=D;H=Pd(v|0,F|0,1)|0;H=Ed(w|0,0,H&-2|0,D&1|0)|0;H=oe(A|0,E|0,H|0,D|0)|0;E=D;c[q+3072+(m<<3)>>2]=H;c[q+3072+(m<<3)+4>>2]=E;A=Rd(H^(G^F)|0,E^((C|z)^v)|0,16)|0;k=D;v=Pd(H^(G^F)|0,E^((C|z)^v)|0,48)|0;k=D|k;c[q+3072+((m|15)<<3)>>2]=v|A;c[q+3072+((m|15)<<3)+4>>2]=k;k=oe(v|A|0,k|0,h|0,l|0)|0;v=D;l=Pd(h|0,l|0,1)|0;l=Ed(A|0,0,l&-2|0,D&1|0)|0;l=oe(k|0,v|0,l|0,D|0)|0;v=D;c[q+3072+((m|10)<<3)>>2]=l;c[q+3072+((m|10)<<3)+4>>2]=v;k=Rd(l^(B|w)|0,v^u|0,63)|0;A=D;u=Pd(l^(B|w)|0,v^u|0,1)|0;c[q+3072+((m|5)<<3)>>2]=u|k;c[q+3072+((m|5)<<3)+4>>2]=D|A;A=c[q+3072+((m|1)<<3)>>2]|0;k=c[q+3072+((m|1)<<3)+4>>2]|0;u=c[q+3072+((m|6)<<3)>>2]|0;v=c[q+3072+((m|6)<<3)+4>>2]|0;w=oe(u|0,v|0,A|0,k|0)|0;B=D;k=Pd(A|0,k|0,1)|0;k=Ed(k&-2|0,D&1|0,u|0,0)|0;k=oe(w|0,B|0,k|0,D|0)|0;B=D;w=k^c[q+3072+((m|12)<<3)>>2];A=B^c[q+3072+((m|12)<<3)+4>>2];l=oe(A|0,w|0,t|0,j|0)|0;h=D;j=Pd(t|0,j|0,1)|0;j=Ed(j&-2|0,D&1|0,A|0,0)|0;j=oe(l|0,h|0,j|0,D|0)|0;h=D;l=Rd(j^u|0,h^v|0,24)|0;t=D;v=Pd(j^u|0,h^v|0,40)|0;t=D|t;u=oe(v|l|0,t|0,k|0,B|0)|0;z=D;B=Pd(k|0,B|0,1)|0;B=Ed(l|0,0,B&-2|0,D&1|0)|0;B=oe(u|0,z|0,B|0,D|0)|0;z=D;c[q+3072+((m|1)<<3)>>2]=B;c[q+3072+((m|1)<<3)+4>>2]=z;u=Rd(B^A|0,z^w|0,16)|0;k=D;w=Pd(B^A|0,z^w|0,48)|0;k=D|k;c[q+3072+((m|12)<<3)>>2]=w|u;c[q+3072+((m|12)<<3)+4>>2]=k;k=oe(w|u|0,k|0,j|0,h|0)|0;w=D;h=Pd(j|0,h|0,1)|0;h=Ed(u|0,0,h&-2|0,D&1|0)|0;h=oe(k|0,w|0,h|0,D|0)|0;w=D;c[q+3072+((m|11)<<3)>>2]=h;c[q+3072+((m|11)<<3)+4>>2]=w;k=Rd(h^(v|l)|0,w^t|0,63)|0;u=D;t=Pd(h^(v|l)|0,w^t|0,1)|0;c[q+3072+((m|6)<<3)>>2]=t|k;c[q+3072+((m|6)<<3)+4>>2]=D|u;u=c[q+3072+((m|2)<<3)>>2]|0;k=c[q+3072+((m|2)<<3)+4>>2]|0;t=oe(s|x|0,y|0,u|0,k|0)|0;w=D;k=Pd(u|0,k|0,1)|0;k=Ed(k&-2|0,D&1|0,s|x|0,0)|0;k=oe(t|0,w|0,k|0,D|0)|0;w=D;t=k^c[q+3072+((m|13)<<3)>>2];u=w^c[q+3072+((m|13)<<3)+4>>2];l=c[q+3072+((m|8)<<3)>>2]|0;v=c[q+3072+((m|8)<<3)+4>>2]|0;h=oe(u|0,t|0,l|0,v|0)|0;j=D;v=Pd(l|0,v|0,1)|0;v=Ed(u|0,0,v&-2|0,D&1|0)|0;v=oe(h|0,j|0,v|0,D|0)|0;j=D;h=Rd(v^(s|x)|0,j^y|0,24)|0;l=D;y=Pd(v^(s|x)|0,j^y|0,40)|0;l=D|l;x=oe(y|h|0,l|0,k|0,w|0)|0;s=D;w=Pd(k|0,w|0,1)|0;w=Ed(h|0,0,w&-2|0,D&1|0)|0;w=oe(x|0,s|0,w|0,D|0)|0;s=D;c[q+3072+((m|2)<<3)>>2]=w;c[q+3072+((m|2)<<3)+4>>2]=s;x=Rd(w^u|0,s^t|0,16)|0;k=D;t=Pd(w^u|0,s^t|0,48)|0;k=D|k;c[q+3072+((m|13)<<3)>>2]=t|x;c[q+3072+((m|13)<<3)+4>>2]=k;k=oe(t|x|0,k|0,v|0,j|0)|0;t=D;j=Pd(v|0,j|0,1)|0;j=Ed(x|0,0,j&-2|0,D&1|0)|0;j=oe(k|0,t|0,j|0,D|0)|0;t=D;c[q+3072+((m|8)<<3)>>2]=j;c[q+3072+((m|8)<<3)+4>>2]=t;k=Rd(j^(y|h)|0,t^l|0,63)|0;x=D;l=Pd(j^(y|h)|0,t^l|0,1)|0;c[q+3072+((m|7)<<3)>>2]=l|k;c[q+3072+((m|7)<<3)+4>>2]=D|x;x=c[q+3072+((m|3)<<3)>>2]|0;k=c[q+3072+((m|3)<<3)+4>>2]|0;l=c[q+3072+((m|4)<<3)>>2]|0;t=c[q+3072+((m|4)<<3)+4>>2]|0;h=oe(l|0,t|0,x|0,k|0)|0;y=D;k=Pd(x|0,k|0,1)|0;k=Ed(k&-2|0,D&1|0,l|0,0)|0;k=oe(h|0,y|0,k|0,D|0)|0;y=D;h=k^c[q+3072+((m|14)<<3)>>2];x=y^c[q+3072+((m|14)<<3)+4>>2];j=c[q+3072+((m|9)<<3)>>2]|0;v=c[q+3072+((m|9)<<3)+4>>2]|0;s=oe(x|0,h|0,j|0,v|0)|0;u=D;v=Pd(j|0,v|0,1)|0;v=Ed(x|0,0,v&-2|0,D&1|0)|0;v=oe(s|0,u|0,v|0,D|0)|0;u=D;s=Rd(v^l|0,u^t|0,24)|0;j=D;t=Pd(v^l|0,u^t|0,40)|0;j=D|j;l=oe(t|s|0,j|0,k|0,y|0)|0;w=D;y=Pd(k|0,y|0,1)|0;y=Ed(s|0,0,y&-2|0,D&1|0)|0;y=oe(l|0,w|0,y|0,D|0)|0;w=D;c[q+3072+((m|3)<<3)>>2]=y;c[q+3072+((m|3)<<3)+4>>2]=w;l=Rd(y^x|0,w^h|0,16)|0;k=D;h=Pd(y^x|0,w^h|0,48)|0;k=D|k;c[q+3072+((m|14)<<3)>>2]=h|l;c[q+3072+((m|14)<<3)+4>>2]=k;k=oe(h|l|0,k|0,v|0,u|0)|0;h=D;u=Pd(v|0,u|0,1)|0;u=Ed(l|0,0,u&-2|0,D&1|0)|0;u=oe(k|0,h|0,u|0,D|0)|0;h=D;c[q+3072+((m|9)<<3)>>2]=u;c[q+3072+((m|9)<<3)+4>>2]=h;k=Rd(u^(t|s)|0,h^j|0,63)|0;l=D;j=Pd(u^(t|s)|0,h^j|0,1)|0;c[q+3072+((m|4)<<3)>>2]=j|k;c[q+3072+((m|4)<<3)+4>>2]=D|l;f=f+1|0}while((f|0)!=8);f=0;do{H=f<<1;A=c[q+3072+(H<<3)>>2]|0;E=c[q+3072+(H<<3)+4>>2]|0;v=q+3072+(H+32<<3)|0;y=c[v>>2]|0;v=c[v+4>>2]|0;s=oe(y|0,v|0,A|0,E|0)|0;j=D;E=Pd(A|0,E|0,1)|0;E=Ed(E&-2|0,D&1|0,y|0,0)|0;E=oe(s|0,j|0,E|0,D|0)|0;j=D;s=q+3072+(H+96<<3)|0;A=E^c[s>>2];s=j^c[s+4>>2];m=q+3072+(H+64<<3)|0;w=c[m>>2]|0;m=c[m+4>>2]|0;F=oe(s|0,A|0,w|0,m|0)|0;u=D;m=Pd(w|0,m|0,1)|0;m=Ed(s|0,0,m&-2|0,D&1|0)|0;m=oe(F|0,u|0,m|0,D|0)|0;u=D;F=Rd(m^y|0,u^v|0,24)|0;w=D;v=Pd(m^y|0,u^v|0,40)|0;w=D|w;y=oe(v|F|0,w|0,E|0,j|0)|0;B=D;j=Pd(E|0,j|0,1)|0;j=Ed(F|0,0,j&-2|0,D&1|0)|0;j=oe(y|0,B|0,j|0,D|0)|0;B=D;c[q+3072+(H<<3)>>2]=j;c[q+3072+(H<<3)+4>>2]=B;y=Rd(j^s|0,B^A|0,16)|0;E=D;A=Pd(j^s|0,B^A|0,48)|0;E=D|E;B=q+3072+(H+96<<3)|0;c[B>>2]=A|y;c[B+4>>2]=E;E=oe(A|y|0,E|0,m|0,u|0)|0;A=D;u=Pd(m|0,u|0,1)|0;u=Ed(y|0,0,u&-2|0,D&1|0)|0;u=oe(E|0,A|0,u|0,D|0)|0;A=D;E=q+3072+(H+64<<3)|0;c[E>>2]=u;c[E+4>>2]=A;E=Rd(u^(v|F)|0,A^w|0,63)|0;y=D;w=Pd(u^(v|F)|0,A^w|0,1)|0;A=q+3072+(H+32<<3)|0;c[A>>2]=w|E;c[A+4>>2]=D|y;A=c[q+3072+((H|1)<<3)>>2]|0;y=c[q+3072+((H|1)<<3)+4>>2]|0;E=q+3072+(H+33<<3)|0;w=c[E>>2]|0;E=c[E+4>>2]|0;F=oe(w|0,E|0,A|0,y|0)|0;v=D;y=Pd(A|0,y|0,1)|0;y=Ed(y&-2|0,D&1|0,w|0,0)|0;y=oe(F|0,v|0,y|0,D|0)|0;v=D;F=q+3072+(H+97<<3)|0;A=y^c[F>>2];F=v^c[F+4>>2];u=q+3072+(H+65<<3)|0;m=c[u>>2]|0;u=c[u+4>>2]|0;B=oe(F|0,A|0,m|0,u|0)|0;s=D;u=Pd(m|0,u|0,1)|0;u=Ed(F|0,0,u&-2|0,D&1|0)|0;u=oe(B|0,s|0,u|0,D|0)|0;s=D;B=Rd(u^w|0,s^E|0,24)|0;m=D;E=Pd(u^w|0,s^E|0,40)|0;m=D|m;w=oe(E|B|0,m|0,y|0,v|0)|0;j=D;v=Pd(y|0,v|0,1)|0;v=Ed(B|0,0,v&-2|0,D&1|0)|0;v=oe(w|0,j|0,v|0,D|0)|0;j=D;c[q+3072+((H|1)<<3)>>2]=v;c[q+3072+((H|1)<<3)+4>>2]=j;w=Rd(v^F|0,j^A|0,16)|0;y=D;A=Pd(v^F|0,j^A|0,48)|0;y=D|y;j=q+3072+(H+97<<3)|0;c[j>>2]=A|w;c[j+4>>2]=y;y=oe(A|w|0,y|0,u|0,s|0)|0;A=D;s=Pd(u|0,s|0,1)|0;s=Ed(w|0,0,s&-2|0,D&1|0)|0;s=oe(y|0,A|0,s|0,D|0)|0;A=D;y=q+3072+(H+65<<3)|0;c[y>>2]=s;c[y+4>>2]=A;y=Rd(s^(E|B)|0,A^m|0,63)|0;w=D;m=Pd(s^(E|B)|0,A^m|0,1)|0;A=q+3072+(H+33<<3)|0;c[A>>2]=m|y;c[A+4>>2]=D|w;A=q+3072+(H+16<<3)|0;w=c[A>>2]|0;A=c[A+4>>2]|0;y=q+3072+(H+48<<3)|0;m=c[y>>2]|0;y=c[y+4>>2]|0;B=oe(m|0,y|0,w|0,A|0)|0;E=D;A=Pd(w|0,A|0,1)|0;A=Ed(A&-2|0,D&1|0,m|0,0)|0;A=oe(B|0,E|0,A|0,D|0)|0;E=D;B=q+3072+(H+112<<3)|0;w=A^c[B>>2];B=E^c[B+4>>2];s=q+3072+(H+80<<3)|0;u=c[s>>2]|0;s=c[s+4>>2]|0;j=oe(B|0,w|0,u|0,s|0)|0;F=D;s=Pd(u|0,s|0,1)|0;s=Ed(B|0,0,s&-2|0,D&1|0)|0;s=oe(j|0,F|0,s|0,D|0)|0;F=D;j=Rd(s^m|0,F^y|0,24)|0;u=D;y=Pd(s^m|0,F^y|0,40)|0;u=D|u;m=oe(y|j|0,u|0,A|0,E|0)|0;v=D;E=Pd(A|0,E|0,1)|0;E=Ed(j|0,0,E&-2|0,D&1|0)|0;E=oe(m|0,v|0,E|0,D|0)|0;v=D;m=q+3072+(H+16<<3)|0;c[m>>2]=E;c[m+4>>2]=v;m=Rd(E^B|0,v^w|0,16)|0;A=D;w=Pd(E^B|0,v^w|0,48)|0;A=D|A;v=q+3072+(H+112<<3)|0;c[v>>2]=w|m;c[v+4>>2]=A;A=oe(w|m|0,A|0,s|0,F|0)|0;w=D;F=Pd(s|0,F|0,1)|0;F=Ed(m|0,0,F&-2|0,D&1|0)|0;F=oe(A|0,w|0,F|0,D|0)|0;w=D;A=Rd(F^(y|j)|0,w^u|0,63)|0;m=D;u=Pd(F^(y|j)|0,w^u|0,1)|0;j=q+3072+(H+48<<3)|0;c[j>>2]=u|A;c[j+4>>2]=D|m;j=q+3072+(H+17<<3)|0;m=c[j>>2]|0;j=c[j+4>>2]|0;A=q+3072+(H+49<<3)|0;u=c[A>>2]|0;A=c[A+4>>2]|0;y=oe(u|0,A|0,m|0,j|0)|0;s=D;j=Pd(m|0,j|0,1)|0;j=Ed(j&-2|0,D&1|0,u|0,0)|0;j=oe(y|0,s|0,j|0,D|0)|0;s=D;y=q+3072+(H+113<<3)|0;m=j^c[y>>2];y=s^c[y+4>>2];v=q+3072+(H+81<<3)|0;B=c[v>>2]|0;v=c[v+4>>2]|0;E=oe(y|0,m|0,B|0,v|0)|0;x=D;v=Pd(B|0,v|0,1)|0;v=Ed(y|0,0,v&-2|0,D&1|0)|0;v=oe(E|0,x|0,v|0,D|0)|0;x=D;E=Rd(v^u|0,x^A|0,24)|0;B=D;A=Pd(v^u|0,x^A|0,40)|0;B=D|B;u=oe(A|E|0,B|0,j|0,s|0)|0;C=D;s=Pd(j|0,s|0,1)|0;s=Ed(E|0,0,s&-2|0,D&1|0)|0;s=oe(u|0,C|0,s|0,D|0)|0;C=D;u=q+3072+(H+17<<3)|0;c[u>>2]=s;c[u+4>>2]=C;u=Rd(s^y|0,C^m|0,16)|0;j=D;m=Pd(s^y|0,C^m|0,48)|0;j=D|j;C=oe(m|u|0,j|0,v|0,x|0)|0;y=D;x=Pd(v|0,x|0,1)|0;x=Ed(u|0,0,x&-2|0,D&1|0)|0;x=oe(C|0,y|0,x|0,D|0)|0;y=D;C=Rd(x^(A|E)|0,y^B|0,63)|0;v=D;B=Pd(x^(A|E)|0,y^B|0,1)|0;v=D|v;E=q+3072+(H+49<<3)|0;c[E>>2]=B|C;c[E+4>>2]=v;E=c[q+3072+(H<<3)>>2]|0;A=c[q+3072+(H<<3)+4>>2]|0;s=q+3072+(H+33<<3)|0;z=c[s>>2]|0;s=c[s+4>>2]|0;t=oe(z|0,s|0,E|0,A|0)|0;k=D;A=Pd(E|0,A|0,1)|0;A=Ed(A&-2|0,D&1|0,z|0,0)|0;A=oe(t|0,k|0,A|0,D|0)|0;k=D;t=oe(j^k|0,(m|u)^A|0,F|0,w|0)|0;E=D;w=Pd(F|0,w|0,1)|0;w=Ed(j^k|0,0,w&-2|0,D&1|0)|0;w=oe(t|0,E|0,w|0,D|0)|0;E=D;t=Rd(w^z|0,E^s|0,24)|0;F=D;s=Pd(w^z|0,E^s|0,40)|0;F=D|F;z=oe(s|t|0,F|0,A|0,k|0)|0;l=D;h=Pd(A|0,k|0,1)|0;h=Ed(t|0,0,h&-2|0,D&1|0)|0;h=oe(z|0,l|0,h|0,D|0)|0;l=D;c[q+3072+(H<<3)>>2]=h;c[q+3072+(H<<3)+4>>2]=l;z=Rd(h^(j^k)|0,l^((m|u)^A)|0,16)|0;G=D;A=Pd(h^(j^k)|0,l^((m|u)^A)|0,48)|0;G=D|G;u=q+3072+(H+113<<3)|0;c[u>>2]=A|z;c[u+4>>2]=G;G=oe(A|z|0,G|0,w|0,E|0)|0;A=D;E=Pd(w|0,E|0,1)|0;E=Ed(z|0,0,E&-2|0,D&1|0)|0;E=oe(G|0,A|0,E|0,D|0)|0;A=D;G=q+3072+(H+80<<3)|0;c[G>>2]=E;c[G+4>>2]=A;G=Rd(E^(s|t)|0,A^F|0,63)|0;z=D;F=Pd(E^(s|t)|0,A^F|0,1)|0;A=q+3072+(H+33<<3)|0;c[A>>2]=F|G;c[A+4>>2]=D|z;A=c[q+3072+((H|1)<<3)>>2]|0;z=c[q+3072+((H|1)<<3)+4>>2]|0;G=q+3072+(H+48<<3)|0;F=c[G>>2]|0;G=c[G+4>>2]|0;t=oe(F|0,G|0,A|0,z|0)|0;s=D;z=Pd(A|0,z|0,1)|0;z=Ed(z&-2|0,D&1|0,F|0,0)|0;z=oe(t|0,s|0,z|0,D|0)|0;s=D;t=q+3072+(H+96<<3)|0;A=z^c[t>>2];t=s^c[t+4>>2];E=oe(t|0,A|0,x|0,y|0)|0;w=D;y=Pd(x|0,y|0,1)|0;y=Ed(y&-2|0,D&1|0,t|0,0)|0;y=oe(E|0,w|0,y|0,D|0)|0;w=D;E=Rd(y^F|0,w^G|0,24)|0;x=D;G=Pd(y^F|0,w^G|0,40)|0;x=D|x;F=oe(G|E|0,x|0,z|0,s|0)|0;u=D;s=Pd(z|0,s|0,1)|0;s=Ed(E|0,0,s&-2|0,D&1|0)|0;s=oe(F|0,u|0,s|0,D|0)|0;u=D;c[q+3072+((H|1)<<3)>>2]=s;c[q+3072+((H|1)<<3)+4>>2]=u;F=Rd(s^t|0,u^A|0,16)|0;z=D;A=Pd(s^t|0,u^A|0,48)|0;z=D|z;u=q+3072+(H+96<<3)|0;c[u>>2]=A|F;c[u+4>>2]=z;z=oe(A|F|0,z|0,y|0,w|0)|0;A=D;w=Pd(y|0,w|0,1)|0;w=Ed(F|0,0,w&-2|0,D&1|0)|0;w=oe(z|0,A|0,w|0,D|0)|0;A=D;z=q+3072+(H+81<<3)|0;c[z>>2]=w;c[z+4>>2]=A;z=Rd(w^(G|E)|0,A^x|0,63)|0;F=D;x=Pd(w^(G|E)|0,A^x|0,1)|0;A=q+3072+(H+48<<3)|0;c[A>>2]=x|z;c[A+4>>2]=D|F;A=q+3072+(H+16<<3)|0;F=c[A>>2]|0;A=c[A+4>>2]|0;z=oe(B|C|0,v|0,F|0,A|0)|0;x=D;A=Pd(F|0,A|0,1)|0;A=Ed(A&-2|0,D&1|0,B|C|0,0)|0;A=oe(z|0,x|0,A|0,D|0)|0;x=D;z=q+3072+(H+97<<3)|0;F=A^c[z>>2];z=x^c[z+4>>2];E=q+3072+(H+64<<3)|0;G=c[E>>2]|0;E=c[E+4>>2]|0;w=oe(z|0,F|0,G|0,E|0)|0;y=D;E=Pd(G|0,E|0,1)|0;E=Ed(z|0,0,E&-2|0,D&1|0)|0;E=oe(w|0,y|0,E|0,D|0)|0;y=D;w=Rd(E^(B|C)|0,y^v|0,24)|0;G=D;v=Pd(E^(B|C)|0,y^v|0,40)|0;G=D|G;C=oe(v|w|0,G|0,A|0,x|0)|0;B=D;x=Pd(A|0,x|0,1)|0;x=Ed(w|0,0,x&-2|0,D&1|0)|0;x=oe(C|0,B|0,x|0,D|0)|0;B=D;C=q+3072+(H+16<<3)|0;c[C>>2]=x;c[C+4>>2]=B;C=Rd(x^z|0,B^F|0,16)|0;A=D;F=Pd(x^z|0,B^F|0,48)|0;A=D|A;B=q+3072+(H+97<<3)|0;c[B>>2]=F|C;c[B+4>>2]=A;A=oe(F|C|0,A|0,E|0,y|0)|0;F=D;y=Pd(E|0,y|0,1)|0;y=Ed(C|0,0,y&-2|0,D&1|0)|0;y=oe(A|0,F|0,y|0,D|0)|0;F=D;A=q+3072+(H+64<<3)|0;c[A>>2]=y;c[A+4>>2]=F;A=Rd(y^(v|w)|0,F^G|0,63)|0;C=D;G=Pd(y^(v|w)|0,F^G|0,1)|0;F=q+3072+(H+49<<3)|0;c[F>>2]=G|A;c[F+4>>2]=D|C;F=q+3072+(H+17<<3)|0;C=c[F>>2]|0;F=c[F+4>>2]|0;A=q+3072+(H+32<<3)|0;G=c[A>>2]|0;A=c[A+4>>2]|0;w=oe(G|0,A|0,C|0,F|0)|0;v=D;F=Pd(C|0,F|0,1)|0;F=Ed(F&-2|0,D&1|0,G|0,0)|0;F=oe(w|0,v|0,F|0,D|0)|0;v=D;w=q+3072+(H+112<<3)|0;C=F^c[w>>2];w=v^c[w+4>>2];y=q+3072+(H+65<<3)|0;E=c[y>>2]|0;y=c[y+4>>2]|0;B=oe(w|0,C|0,E|0,y|0)|0;z=D;y=Pd(E|0,y|0,1)|0;y=Ed(w|0,0,y&-2|0,D&1|0)|0;y=oe(B|0,z|0,y|0,D|0)|0;z=D;B=Rd(y^G|0,z^A|0,24)|0;E=D;A=Pd(y^G|0,z^A|0,40)|0;E=D|E;G=oe(A|B|0,E|0,F|0,v|0)|0;x=D;v=Pd(F|0,v|0,1)|0;v=Ed(B|0,0,v&-2|0,D&1|0)|0;v=oe(G|0,x|0,v|0,D|0)|0;x=D;G=q+3072+(H+17<<3)|0;c[G>>2]=v;c[G+4>>2]=x;G=Rd(v^w|0,x^C|0,16)|0;F=D;C=Pd(v^w|0,x^C|0,48)|0;F=D|F;x=q+3072+(H+112<<3)|0;c[x>>2]=C|G;c[x+4>>2]=F;F=oe(C|G|0,F|0,y|0,z|0)|0;C=D;z=Pd(y|0,z|0,1)|0;z=Ed(G|0,0,z&-2|0,D&1|0)|0;z=oe(F|0,C|0,z|0,D|0)|0;C=D;F=q+3072+(H+65<<3)|0;c[F>>2]=z;c[F+4>>2]=C;F=Rd(z^(A|B)|0,C^E|0,63)|0;G=D;E=Pd(z^(A|B)|0,C^E|0,1)|0;H=q+3072+(H+32<<3)|0;c[H>>2]=E|F;c[H+4>>2]=D|G;f=f+1|0}while((f|0)!=8);ef(g,q+2048|0);gd(g,q+3072|0)}else ma(k+(n<<10)|0,k+(f<<10)+(j<<10)|0,g);e=e+1|0;if(e>>>0>=(c[b+12>>2]|0)>>>0)break a;o=o+1|0;f=n+1|0;m=c[b+16>>2]|0;g=c[d>>2]|0}}while(0);ta(p);e=0}}else e=0;i=r;return e|0}function ma(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=i;f=i=i+63&-64;i=i+2048|0;ef(f+1024|0,b);gd(f+1024|0,a);ef(f,f+1024|0);gd(f,d);a=0;do{b=a<<4;o=c[f+1024+(b<<3)>>2]|0;x=c[f+1024+(b<<3)+4>>2]|0;n=c[f+1024+((b|4)<<3)>>2]|0;l=c[f+1024+((b|4)<<3)+4>>2]|0;g=oe(n|0,l|0,o|0,x|0)|0;v=D;x=Pd(o|0,x|0,1)|0;x=Ed(x&-2|0,D&1|0,n|0,0)|0;x=oe(g|0,v|0,x|0,D|0)|0;v=D;g=x^c[f+1024+((b|12)<<3)>>2];o=v^c[f+1024+((b|12)<<3)+4>>2];r=c[f+1024+((b|8)<<3)>>2]|0;t=c[f+1024+((b|8)<<3)+4>>2]|0;s=oe(o|0,g|0,r|0,t|0)|0;j=D;t=Pd(r|0,t|0,1)|0;t=Ed(t&-2|0,D&1|0,o|0,0)|0;t=oe(s|0,j|0,t|0,D|0)|0;j=D;s=Rd(t^n|0,j^l|0,24)|0;r=D;l=Pd(t^n|0,j^l|0,40)|0;r=D|r;n=oe(l|s|0,r|0,x|0,v|0)|0;k=D;v=Pd(x|0,v|0,1)|0;v=Ed(s|0,0,v&-2|0,D&1|0)|0;v=oe(n|0,k|0,v|0,D|0)|0;k=D;c[f+1024+(b<<3)>>2]=v;c[f+1024+(b<<3)+4>>2]=k;n=Rd(v^o|0,k^g|0,16)|0;x=D;g=Pd(v^o|0,k^g|0,48)|0;x=D|x;c[f+1024+((b|12)<<3)>>2]=g|n;c[f+1024+((b|12)<<3)+4>>2]=x;x=oe(g|n|0,x|0,t|0,j|0)|0;g=D;j=Pd(t|0,j|0,1)|0;j=Ed(n|0,0,j&-2|0,D&1|0)|0;j=oe(x|0,g|0,j|0,D|0)|0;g=D;c[f+1024+((b|8)<<3)>>2]=j;c[f+1024+((b|8)<<3)+4>>2]=g;x=Rd(j^(l|s)|0,g^r|0,63)|0;n=D;r=Pd(j^(l|s)|0,g^r|0,1)|0;c[f+1024+((b|4)<<3)>>2]=r|x;c[f+1024+((b|4)<<3)+4>>2]=D|n;n=c[f+1024+((b|1)<<3)>>2]|0;x=c[f+1024+((b|1)<<3)+4>>2]|0;r=c[f+1024+((b|5)<<3)>>2]|0;g=c[f+1024+((b|5)<<3)+4>>2]|0;s=oe(r|0,g|0,n|0,x|0)|0;l=D;x=Pd(n|0,x|0,1)|0;x=Ed(x&-2|0,D&1|0,r|0,0)|0;x=oe(s|0,l|0,x|0,D|0)|0;l=D;s=x^c[f+1024+((b|13)<<3)>>2];n=l^c[f+1024+((b|13)<<3)+4>>2];j=c[f+1024+((b|9)<<3)>>2]|0;t=c[f+1024+((b|9)<<3)+4>>2]|0;k=oe(n|0,s|0,j|0,t|0)|0;o=D;t=Pd(j|0,t|0,1)|0;t=Ed(t&-2|0,D&1|0,n|0,0)|0;t=oe(k|0,o|0,t|0,D|0)|0;o=D;k=Rd(t^r|0,o^g|0,24)|0;j=D;g=Pd(t^r|0,o^g|0,40)|0;j=D|j;r=oe(g|k|0,j|0,x|0,l|0)|0;v=D;l=Pd(x|0,l|0,1)|0;l=Ed(k|0,0,l&-2|0,D&1|0)|0;l=oe(r|0,v|0,l|0,D|0)|0;v=D;c[f+1024+((b|1)<<3)>>2]=l;c[f+1024+((b|1)<<3)+4>>2]=v;r=Rd(l^n|0,v^s|0,16)|0;x=D;s=Pd(l^n|0,v^s|0,48)|0;x=D|x;c[f+1024+((b|13)<<3)>>2]=s|r;c[f+1024+((b|13)<<3)+4>>2]=x;x=oe(s|r|0,x|0,t|0,o|0)|0;s=D;o=Pd(t|0,o|0,1)|0;o=Ed(r|0,0,o&-2|0,D&1|0)|0;o=oe(x|0,s|0,o|0,D|0)|0;s=D;c[f+1024+((b|9)<<3)>>2]=o;c[f+1024+((b|9)<<3)+4>>2]=s;x=Rd(o^(g|k)|0,s^j|0,63)|0;r=D;j=Pd(o^(g|k)|0,s^j|0,1)|0;c[f+1024+((b|5)<<3)>>2]=j|x;c[f+1024+((b|5)<<3)+4>>2]=D|r;r=c[f+1024+((b|2)<<3)>>2]|0;x=c[f+1024+((b|2)<<3)+4>>2]|0;j=c[f+1024+((b|6)<<3)>>2]|0;s=c[f+1024+((b|6)<<3)+4>>2]|0;k=oe(j|0,s|0,r|0,x|0)|0;g=D;x=Pd(r|0,x|0,1)|0;x=Ed(x&-2|0,D&1|0,j|0,0)|0;x=oe(k|0,g|0,x|0,D|0)|0;g=D;k=x^c[f+1024+((b|14)<<3)>>2];r=g^c[f+1024+((b|14)<<3)+4>>2];o=c[f+1024+((b|10)<<3)>>2]|0;t=c[f+1024+((b|10)<<3)+4>>2]|0;v=oe(r|0,k|0,o|0,t|0)|0;n=D;t=Pd(o|0,t|0,1)|0;t=Ed(t&-2|0,D&1|0,r|0,0)|0;t=oe(v|0,n|0,t|0,D|0)|0;n=D;v=Rd(t^j|0,n^s|0,24)|0;o=D;s=Pd(t^j|0,n^s|0,40)|0;o=D|o;j=oe(s|v|0,o|0,x|0,g|0)|0;l=D;g=Pd(x|0,g|0,1)|0;g=Ed(v|0,0,g&-2|0,D&1|0)|0;g=oe(j|0,l|0,g|0,D|0)|0;l=D;c[f+1024+((b|2)<<3)>>2]=g;c[f+1024+((b|2)<<3)+4>>2]=l;j=Rd(g^r|0,l^k|0,16)|0;x=D;k=Pd(g^r|0,l^k|0,48)|0;x=D|x;c[f+1024+((b|14)<<3)>>2]=k|j;c[f+1024+((b|14)<<3)+4>>2]=x;x=oe(k|j|0,x|0,t|0,n|0)|0;k=D;n=Pd(t|0,n|0,1)|0;n=Ed(j|0,0,n&-2|0,D&1|0)|0;n=oe(x|0,k|0,n|0,D|0)|0;k=D;x=Rd(n^(s|v)|0,k^o|0,63)|0;j=D;o=Pd(n^(s|v)|0,k^o|0,1)|0;c[f+1024+((b|6)<<3)>>2]=o|x;c[f+1024+((b|6)<<3)+4>>2]=D|j;j=c[f+1024+((b|3)<<3)>>2]|0;x=c[f+1024+((b|3)<<3)+4>>2]|0;o=c[f+1024+((b|7)<<3)>>2]|0;v=c[f+1024+((b|7)<<3)+4>>2]|0;s=oe(o|0,v|0,j|0,x|0)|0;t=D;x=Pd(j|0,x|0,1)|0;x=Ed(x&-2|0,D&1|0,o|0,0)|0;x=oe(s|0,t|0,x|0,D|0)|0;t=D;s=x^c[f+1024+((b|15)<<3)>>2];j=t^c[f+1024+((b|15)<<3)+4>>2];l=c[f+1024+((b|11)<<3)>>2]|0;r=c[f+1024+((b|11)<<3)+4>>2]|0;g=oe(j|0,s|0,l|0,r|0)|0;m=D;r=Pd(l|0,r|0,1)|0;r=Ed(r&-2|0,D&1|0,j|0,0)|0;r=oe(g|0,m|0,r|0,D|0)|0;m=D;g=Rd(r^o|0,m^v|0,24)|0;l=D;v=Pd(r^o|0,m^v|0,40)|0;l=D|l;o=oe(v|g|0,l|0,x|0,t|0)|0;q=D;t=Pd(x|0,t|0,1)|0;t=Ed(g|0,0,t&-2|0,D&1|0)|0;t=oe(o|0,q|0,t|0,D|0)|0;q=D;c[f+1024+((b|3)<<3)>>2]=t;c[f+1024+((b|3)<<3)+4>>2]=q;o=Rd(t^j|0,q^s|0,16)|0;x=D;s=Pd(t^j|0,q^s|0,48)|0;x=D|x;q=oe(s|o|0,x|0,r|0,m|0)|0;j=D;m=Pd(r|0,m|0,1)|0;m=Ed(o|0,0,m&-2|0,D&1|0)|0;m=oe(q|0,j|0,m|0,D|0)|0;j=D;q=Rd(m^(v|g)|0,j^l|0,63)|0;r=D;l=Pd(m^(v|g)|0,j^l|0,1)|0;r=D|r;c[f+1024+((b|7)<<3)>>2]=l|q;c[f+1024+((b|7)<<3)+4>>2]=r;g=c[f+1024+(b<<3)>>2]|0;v=c[f+1024+(b<<3)+4>>2]|0;t=c[f+1024+((b|5)<<3)>>2]|0;u=c[f+1024+((b|5)<<3)+4>>2]|0;p=oe(t|0,u|0,g|0,v|0)|0;y=D;v=Pd(g|0,v|0,1)|0;v=Ed(v&-2|0,D&1|0,t|0,0)|0;v=oe(p|0,y|0,v|0,D|0)|0;y=D;p=oe(y^x|0,v^(s|o)|0,n|0,k|0)|0;g=D;k=Pd(n|0,k|0,1)|0;k=Ed(k&-2|0,D&1|0,y^x|0,0)|0;k=oe(p|0,g|0,k|0,D|0)|0;g=D;p=Rd(k^t|0,g^u|0,24)|0;n=D;u=Pd(k^t|0,g^u|0,40)|0;n=D|n;t=oe(u|p|0,n|0,v|0,y|0)|0;w=D;z=Pd(v|0,y|0,1)|0;z=Ed(p|0,0,z&-2|0,D&1|0)|0;z=oe(t|0,w|0,z|0,D|0)|0;w=D;c[f+1024+(b<<3)>>2]=z;c[f+1024+(b<<3)+4>>2]=w;t=Rd(z^(y^x)|0,w^(v^(s|o))|0,16)|0;h=D;o=Pd(z^(y^x)|0,w^(v^(s|o))|0,48)|0;h=D|h;c[f+1024+((b|15)<<3)>>2]=o|t;c[f+1024+((b|15)<<3)+4>>2]=h;h=oe(o|t|0,h|0,k|0,g|0)|0;o=D;g=Pd(k|0,g|0,1)|0;g=Ed(t|0,0,g&-2|0,D&1|0)|0;g=oe(h|0,o|0,g|0,D|0)|0;o=D;c[f+1024+((b|10)<<3)>>2]=g;c[f+1024+((b|10)<<3)+4>>2]=o;h=Rd(g^(u|p)|0,o^n|0,63)|0;t=D;n=Pd(g^(u|p)|0,o^n|0,1)|0;c[f+1024+((b|5)<<3)>>2]=n|h;c[f+1024+((b|5)<<3)+4>>2]=D|t;t=c[f+1024+((b|1)<<3)>>2]|0;h=c[f+1024+((b|1)<<3)+4>>2]|0;n=c[f+1024+((b|6)<<3)>>2]|0;o=c[f+1024+((b|6)<<3)+4>>2]|0;p=oe(n|0,o|0,t|0,h|0)|0;u=D;h=Pd(t|0,h|0,1)|0;h=Ed(h&-2|0,D&1|0,n|0,0)|0;h=oe(p|0,u|0,h|0,D|0)|0;u=D;p=h^c[f+1024+((b|12)<<3)>>2];t=u^c[f+1024+((b|12)<<3)+4>>2];g=oe(t|0,p|0,m|0,j|0)|0;k=D;j=Pd(m|0,j|0,1)|0;j=Ed(j&-2|0,D&1|0,t|0,0)|0;j=oe(g|0,k|0,j|0,D|0)|0;k=D;g=Rd(j^n|0,k^o|0,24)|0;m=D;o=Pd(j^n|0,k^o|0,40)|0;m=D|m;n=oe(o|g|0,m|0,h|0,u|0)|0;s=D;u=Pd(h|0,u|0,1)|0;u=Ed(g|0,0,u&-2|0,D&1|0)|0;u=oe(n|0,s|0,u|0,D|0)|0;s=D;c[f+1024+((b|1)<<3)>>2]=u;c[f+1024+((b|1)<<3)+4>>2]=s;n=Rd(u^t|0,s^p|0,16)|0;h=D;p=Pd(u^t|0,s^p|0,48)|0;h=D|h;c[f+1024+((b|12)<<3)>>2]=p|n;c[f+1024+((b|12)<<3)+4>>2]=h;h=oe(p|n|0,h|0,j|0,k|0)|0;p=D;k=Pd(j|0,k|0,1)|0;k=Ed(n|0,0,k&-2|0,D&1|0)|0;k=oe(h|0,p|0,k|0,D|0)|0;p=D;c[f+1024+((b|11)<<3)>>2]=k;c[f+1024+((b|11)<<3)+4>>2]=p;h=Rd(k^(o|g)|0,p^m|0,63)|0;n=D;m=Pd(k^(o|g)|0,p^m|0,1)|0;c[f+1024+((b|6)<<3)>>2]=m|h;c[f+1024+((b|6)<<3)+4>>2]=D|n;n=c[f+1024+((b|2)<<3)>>2]|0;h=c[f+1024+((b|2)<<3)+4>>2]|0;m=oe(l|q|0,r|0,n|0,h|0)|0;p=D;h=Pd(n|0,h|0,1)|0;h=Ed(h&-2|0,D&1|0,l|q|0,0)|0;h=oe(m|0,p|0,h|0,D|0)|0;p=D;m=h^c[f+1024+((b|13)<<3)>>2];n=p^c[f+1024+((b|13)<<3)+4>>2];g=c[f+1024+((b|8)<<3)>>2]|0;o=c[f+1024+((b|8)<<3)+4>>2]|0;k=oe(n|0,m|0,g|0,o|0)|0;j=D;o=Pd(g|0,o|0,1)|0;o=Ed(o&-2|0,D&1|0,n|0,0)|0;o=oe(k|0,j|0,o|0,D|0)|0;j=D;k=Rd(o^(l|q)|0,j^r|0,24)|0;g=D;r=Pd(o^(l|q)|0,j^r|0,40)|0;g=D|g;q=oe(r|k|0,g|0,h|0,p|0)|0;l=D;p=Pd(h|0,p|0,1)|0;p=Ed(k|0,0,p&-2|0,D&1|0)|0;p=oe(q|0,l|0,p|0,D|0)|0;l=D;c[f+1024+((b|2)<<3)>>2]=p;c[f+1024+((b|2)<<3)+4>>2]=l;q=Rd(p^n|0,l^m|0,16)|0;h=D;m=Pd(p^n|0,l^m|0,48)|0;h=D|h;c[f+1024+((b|13)<<3)>>2]=m|q;c[f+1024+((b|13)<<3)+4>>2]=h;h=oe(m|q|0,h|0,o|0,j|0)|0;m=D;j=Pd(o|0,j|0,1)|0;j=Ed(q|0,0,j&-2|0,D&1|0)|0;j=oe(h|0,m|0,j|0,D|0)|0;m=D;c[f+1024+((b|8)<<3)>>2]=j;c[f+1024+((b|8)<<3)+4>>2]=m;h=Rd(j^(r|k)|0,m^g|0,63)|0;q=D;g=Pd(j^(r|k)|0,m^g|0,1)|0;c[f+1024+((b|7)<<3)>>2]=g|h;c[f+1024+((b|7)<<3)+4>>2]=D|q;q=c[f+1024+((b|3)<<3)>>2]|0;h=c[f+1024+((b|3)<<3)+4>>2]|0;g=c[f+1024+((b|4)<<3)>>2]|0;m=c[f+1024+((b|4)<<3)+4>>2]|0;k=oe(g|0,m|0,q|0,h|0)|0;r=D;h=Pd(q|0,h|0,1)|0;h=Ed(h&-2|0,D&1|0,g|0,0)|0;h=oe(k|0,r|0,h|0,D|0)|0;r=D;k=h^c[f+1024+((b|14)<<3)>>2];q=r^c[f+1024+((b|14)<<3)+4>>2];j=c[f+1024+((b|9)<<3)>>2]|0;o=c[f+1024+((b|9)<<3)+4>>2]|0;l=oe(q|0,k|0,j|0,o|0)|0;n=D;o=Pd(j|0,o|0,1)|0;o=Ed(o&-2|0,D&1|0,q|0,0)|0;o=oe(l|0,n|0,o|0,D|0)|0;n=D;l=Rd(o^g|0,n^m|0,24)|0;j=D;m=Pd(o^g|0,n^m|0,40)|0;j=D|j;g=oe(m|l|0,j|0,h|0,r|0)|0;p=D;r=Pd(h|0,r|0,1)|0;r=Ed(l|0,0,r&-2|0,D&1|0)|0;r=oe(g|0,p|0,r|0,D|0)|0;p=D;c[f+1024+((b|3)<<3)>>2]=r;c[f+1024+((b|3)<<3)+4>>2]=p;g=Rd(r^q|0,p^k|0,16)|0;h=D;k=Pd(r^q|0,p^k|0,48)|0;h=D|h;c[f+1024+((b|14)<<3)>>2]=k|g;c[f+1024+((b|14)<<3)+4>>2]=h;h=oe(k|g|0,h|0,o|0,n|0)|0;k=D;n=Pd(o|0,n|0,1)|0;n=Ed(g|0,0,n&-2|0,D&1|0)|0;n=oe(h|0,k|0,n|0,D|0)|0;k=D;c[f+1024+((b|9)<<3)>>2]=n;c[f+1024+((b|9)<<3)+4>>2]=k;h=Rd(n^(m|l)|0,k^j|0,63)|0;g=D;j=Pd(n^(m|l)|0,k^j|0,1)|0;c[f+1024+((b|4)<<3)>>2]=j|h;c[f+1024+((b|4)<<3)+4>>2]=D|g;a=a+1|0}while((a|0)!=8);a=0;do{z=a<<1;k=c[f+1024+(z<<3)>>2]|0;w=c[f+1024+(z<<3)+4>>2]|0;o=f+1024+(z+32<<3)|0;r=c[o>>2]|0;o=c[o+4>>2]|0;l=oe(r|0,o|0,k|0,w|0)|0;h=D;w=Pd(k|0,w|0,1)|0;w=Ed(w&-2|0,D&1|0,r|0,0)|0;w=oe(l|0,h|0,w|0,D|0)|0;h=D;l=f+1024+(z+96<<3)|0;k=w^c[l>>2];l=h^c[l+4>>2];n=f+1024+(z+64<<3)|0;p=c[n>>2]|0;n=c[n+4>>2]|0;x=oe(l|0,k|0,p|0,n|0)|0;t=D;n=Pd(p|0,n|0,1)|0;n=Ed(n&-2|0,D&1|0,l|0,0)|0;n=oe(x|0,t|0,n|0,D|0)|0;t=D;x=Rd(n^r|0,t^o|0,24)|0;p=D;o=Pd(n^r|0,t^o|0,40)|0;p=D|p;r=oe(o|x|0,p|0,w|0,h|0)|0;u=D;h=Pd(w|0,h|0,1)|0;h=Ed(x|0,0,h&-2|0,D&1|0)|0;h=oe(r|0,u|0,h|0,D|0)|0;u=D;c[f+1024+(z<<3)>>2]=h;c[f+1024+(z<<3)+4>>2]=u;r=Rd(h^l|0,u^k|0,16)|0;w=D;k=Pd(h^l|0,u^k|0,48)|0;w=D|w;u=f+1024+(z+96<<3)|0;c[u>>2]=k|r;c[u+4>>2]=w;w=oe(k|r|0,w|0,n|0,t|0)|0;k=D;t=Pd(n|0,t|0,1)|0;t=Ed(r|0,0,t&-2|0,D&1|0)|0;t=oe(w|0,k|0,t|0,D|0)|0;k=D;w=f+1024+(z+64<<3)|0;c[w>>2]=t;c[w+4>>2]=k;w=Rd(t^(o|x)|0,k^p|0,63)|0;r=D;p=Pd(t^(o|x)|0,k^p|0,1)|0;k=f+1024+(z+32<<3)|0;c[k>>2]=p|w;c[k+4>>2]=D|r;k=c[f+1024+((z|1)<<3)>>2]|0;r=c[f+1024+((z|1)<<3)+4>>2]|0;w=f+1024+(z+33<<3)|0;p=c[w>>2]|0;w=c[w+4>>2]|0;x=oe(p|0,w|0,k|0,r|0)|0;o=D;r=Pd(k|0,r|0,1)|0;r=Ed(r&-2|0,D&1|0,p|0,0)|0;r=oe(x|0,o|0,r|0,D|0)|0;o=D;x=f+1024+(z+97<<3)|0;k=r^c[x>>2];x=o^c[x+4>>2];t=f+1024+(z+65<<3)|0;n=c[t>>2]|0;t=c[t+4>>2]|0;u=oe(x|0,k|0,n|0,t|0)|0;l=D;t=Pd(n|0,t|0,1)|0;t=Ed(t&-2|0,D&1|0,x|0,0)|0;t=oe(u|0,l|0,t|0,D|0)|0;l=D;u=Rd(t^p|0,l^w|0,24)|0;n=D;w=Pd(t^p|0,l^w|0,40)|0;n=D|n;p=oe(w|u|0,n|0,r|0,o|0)|0;h=D;o=Pd(r|0,o|0,1)|0;o=Ed(u|0,0,o&-2|0,D&1|0)|0;o=oe(p|0,h|0,o|0,D|0)|0;h=D;c[f+1024+((z|1)<<3)>>2]=o;c[f+1024+((z|1)<<3)+4>>2]=h;p=Rd(o^x|0,h^k|0,16)|0;r=D;k=Pd(o^x|0,h^k|0,48)|0;r=D|r;h=f+1024+(z+97<<3)|0;c[h>>2]=k|p;c[h+4>>2]=r;r=oe(k|p|0,r|0,t|0,l|0)|0;k=D;l=Pd(t|0,l|0,1)|0;l=Ed(p|0,0,l&-2|0,D&1|0)|0;l=oe(r|0,k|0,l|0,D|0)|0;k=D;r=f+1024+(z+65<<3)|0;c[r>>2]=l;c[r+4>>2]=k;r=Rd(l^(w|u)|0,k^n|0,63)|0;p=D;n=Pd(l^(w|u)|0,k^n|0,1)|0;k=f+1024+(z+33<<3)|0;c[k>>2]=n|r;c[k+4>>2]=D|p;k=f+1024+(z+16<<3)|0;p=c[k>>2]|0;k=c[k+4>>2]|0;r=f+1024+(z+48<<3)|0;n=c[r>>2]|0;r=c[r+4>>2]|0;u=oe(n|0,r|0,p|0,k|0)|0;w=D;k=Pd(p|0,k|0,1)|0;k=Ed(k&-2|0,D&1|0,n|0,0)|0;k=oe(u|0,w|0,k|0,D|0)|0;w=D;u=f+1024+(z+112<<3)|0;p=k^c[u>>2];u=w^c[u+4>>2];l=f+1024+(z+80<<3)|0;t=c[l>>2]|0;l=c[l+4>>2]|0;h=oe(u|0,p|0,t|0,l|0)|0;x=D;l=Pd(t|0,l|0,1)|0;l=Ed(l&-2|0,D&1|0,u|0,0)|0;l=oe(h|0,x|0,l|0,D|0)|0;x=D;h=Rd(l^n|0,x^r|0,24)|0;t=D;r=Pd(l^n|0,x^r|0,40)|0;t=D|t;n=oe(r|h|0,t|0,k|0,w|0)|0;o=D;w=Pd(k|0,w|0,1)|0;w=Ed(h|0,0,w&-2|0,D&1|0)|0;w=oe(n|0,o|0,w|0,D|0)|0;o=D;n=f+1024+(z+16<<3)|0;c[n>>2]=w;c[n+4>>2]=o;n=Rd(w^u|0,o^p|0,16)|0;k=D;p=Pd(w^u|0,o^p|0,48)|0;k=D|k;o=f+1024+(z+112<<3)|0;c[o>>2]=p|n;c[o+4>>2]=k;k=oe(p|n|0,k|0,l|0,x|0)|0;p=D;x=Pd(l|0,x|0,1)|0;x=Ed(n|0,0,x&-2|0,D&1|0)|0;x=oe(k|0,p|0,x|0,D|0)|0;p=D;k=Rd(x^(r|h)|0,p^t|0,63)|0;n=D;t=Pd(x^(r|h)|0,p^t|0,1)|0;h=f+1024+(z+48<<3)|0;c[h>>2]=t|k;c[h+4>>2]=D|n;h=f+1024+(z+17<<3)|0;n=c[h>>2]|0;h=c[h+4>>2]|0;k=f+1024+(z+49<<3)|0;t=c[k>>2]|0;k=c[k+4>>2]|0;r=oe(t|0,k|0,n|0,h|0)|0;l=D;h=Pd(n|0,h|0,1)|0;h=Ed(h&-2|0,D&1|0,t|0,0)|0;h=oe(r|0,l|0,h|0,D|0)|0;l=D;r=f+1024+(z+113<<3)|0;n=h^c[r>>2];r=l^c[r+4>>2];o=f+1024+(z+81<<3)|0;u=c[o>>2]|0;o=c[o+4>>2]|0;w=oe(r|0,n|0,u|0,o|0)|0;q=D;o=Pd(u|0,o|0,1)|0;o=Ed(o&-2|0,D&1|0,r|0,0)|0;o=oe(w|0,q|0,o|0,D|0)|0;q=D;w=Rd(o^t|0,q^k|0,24)|0;u=D;k=Pd(o^t|0,q^k|0,40)|0;u=D|u;t=oe(k|w|0,u|0,h|0,l|0)|0;v=D;l=Pd(h|0,l|0,1)|0;l=Ed(w|0,0,l&-2|0,D&1|0)|0;l=oe(t|0,v|0,l|0,D|0)|0;v=D;t=f+1024+(z+17<<3)|0;c[t>>2]=l;c[t+4>>2]=v;t=Rd(l^r|0,v^n|0,16)|0;h=D;n=Pd(l^r|0,v^n|0,48)|0;h=D|h;v=oe(n|t|0,h|0,o|0,q|0)|0;r=D;q=Pd(o|0,q|0,1)|0;q=Ed(t|0,0,q&-2|0,D&1|0)|0;q=oe(v|0,r|0,q|0,D|0)|0;r=D;v=Rd(q^(k|w)|0,r^u|0,63)|0;o=D;u=Pd(q^(k|w)|0,r^u|0,1)|0;o=D|o;w=f+1024+(z+49<<3)|0;c[w>>2]=u|v;c[w+4>>2]=o;w=c[f+1024+(z<<3)>>2]|0;k=c[f+1024+(z<<3)+4>>2]|0;l=f+1024+(z+33<<3)|0;s=c[l>>2]|0;l=c[l+4>>2]|0;m=oe(s|0,l|0,w|0,k|0)|0;g=D;k=Pd(w|0,k|0,1)|0;k=Ed(k&-2|0,D&1|0,s|0,0)|0;k=oe(m|0,g|0,k|0,D|0)|0;g=D;m=oe(g^h|0,k^(n|t)|0,x|0,p|0)|0;w=D;p=Pd(x|0,p|0,1)|0;p=Ed(p&-2|0,D&1|0,g^h|0,0)|0;p=oe(m|0,w|0,p|0,D|0)|0;w=D;m=Rd(p^s|0,w^l|0,24)|0;x=D;l=Pd(p^s|0,w^l|0,40)|0;x=D|x;s=oe(l|m|0,x|0,k|0,g|0)|0;j=D;b=Pd(k|0,g|0,1)|0;b=Ed(m|0,0,b&-2|0,D&1|0)|0;b=oe(s|0,j|0,b|0,D|0)|0;j=D;c[f+1024+(z<<3)>>2]=b;c[f+1024+(z<<3)+4>>2]=j;s=Rd(b^(g^h)|0,j^(k^(n|t))|0,16)|0;y=D;t=Pd(b^(g^h)|0,j^(k^(n|t))|0,48)|0;y=D|y;n=f+1024+(z+113<<3)|0;c[n>>2]=t|s;c[n+4>>2]=y;y=oe(t|s|0,y|0,p|0,w|0)|0;t=D;w=Pd(p|0,w|0,1)|0;w=Ed(s|0,0,w&-2|0,D&1|0)|0;w=oe(y|0,t|0,w|0,D|0)|0;t=D;y=f+1024+(z+80<<3)|0;c[y>>2]=w;c[y+4>>2]=t;y=Rd(w^(l|m)|0,t^x|0,63)|0;s=D;x=Pd(w^(l|m)|0,t^x|0,1)|0;t=f+1024+(z+33<<3)|0;c[t>>2]=x|y;c[t+4>>2]=D|s;t=c[f+1024+((z|1)<<3)>>2]|0;s=c[f+1024+((z|1)<<3)+4>>2]|0;y=f+1024+(z+48<<3)|0;x=c[y>>2]|0;y=c[y+4>>2]|0;m=oe(x|0,y|0,t|0,s|0)|0;l=D;s=Pd(t|0,s|0,1)|0;s=Ed(s&-2|0,D&1|0,x|0,0)|0;s=oe(m|0,l|0,s|0,D|0)|0;l=D;m=f+1024+(z+96<<3)|0;t=s^c[m>>2];m=l^c[m+4>>2];w=oe(m|0,t|0,q|0,r|0)|0;p=D;r=Pd(q|0,r|0,1)|0;r=Ed(r&-2|0,D&1|0,m|0,0)|0;r=oe(w|0,p|0,r|0,D|0)|0;p=D;w=Rd(r^x|0,p^y|0,24)|0;q=D;y=Pd(r^x|0,p^y|0,40)|0;q=D|q;x=oe(y|w|0,q|0,s|0,l|0)|0;n=D;l=Pd(s|0,l|0,1)|0;l=Ed(w|0,0,l&-2|0,D&1|0)|0;l=oe(x|0,n|0,l|0,D|0)|0;n=D;c[f+1024+((z|1)<<3)>>2]=l;c[f+1024+((z|1)<<3)+4>>2]=n;x=Rd(l^m|0,n^t|0,16)|0;s=D;t=Pd(l^m|0,n^t|0,48)|0;s=D|s;n=f+1024+(z+96<<3)|0;c[n>>2]=t|x;c[n+4>>2]=s;s=oe(t|x|0,s|0,r|0,p|0)|0;t=D;p=Pd(r|0,p|0,1)|0;p=Ed(x|0,0,p&-2|0,D&1|0)|0;p=oe(s|0,t|0,p|0,D|0)|0;t=D;s=f+1024+(z+81<<3)|0;c[s>>2]=p;c[s+4>>2]=t;s=Rd(p^(y|w)|0,t^q|0,63)|0;x=D;q=Pd(p^(y|w)|0,t^q|0,1)|0;t=f+1024+(z+48<<3)|0;c[t>>2]=q|s;c[t+4>>2]=D|x;t=f+1024+(z+16<<3)|0;x=c[t>>2]|0;t=c[t+4>>2]|0;s=oe(u|v|0,o|0,x|0,t|0)|0;q=D;t=Pd(x|0,t|0,1)|0;t=Ed(t&-2|0,D&1|0,u|v|0,0)|0;t=oe(s|0,q|0,t|0,D|0)|0;q=D;s=f+1024+(z+97<<3)|0;x=t^c[s>>2];s=q^c[s+4>>2];w=f+1024+(z+64<<3)|0;y=c[w>>2]|0;w=c[w+4>>2]|0;p=oe(s|0,x|0,y|0,w|0)|0;r=D;w=Pd(y|0,w|0,1)|0;w=Ed(w&-2|0,D&1|0,s|0,0)|0;w=oe(p|0,r|0,w|0,D|0)|0;r=D;p=Rd(w^(u|v)|0,r^o|0,24)|0;y=D;o=Pd(w^(u|v)|0,r^o|0,40)|0;y=D|y;v=oe(o|p|0,y|0,t|0,q|0)|0;u=D;q=Pd(t|0,q|0,1)|0;q=Ed(p|0,0,q&-2|0,D&1|0)|0;q=oe(v|0,u|0,q|0,D|0)|0;u=D;v=f+1024+(z+16<<3)|0;c[v>>2]=q;c[v+4>>2]=u;v=Rd(q^s|0,u^x|0,16)|0;t=D;x=Pd(q^s|0,u^x|0,48)|0;t=D|t;u=f+1024+(z+97<<3)|0;c[u>>2]=x|v;c[u+4>>2]=t;t=oe(x|v|0,t|0,w|0,r|0)|0;x=D;r=Pd(w|0,r|0,1)|0;r=Ed(v|0,0,r&-2|0,D&1|0)|0;r=oe(t|0,x|0,r|0,D|0)|0;x=D;t=f+1024+(z+64<<3)|0;c[t>>2]=r;c[t+4>>2]=x;t=Rd(r^(o|p)|0,x^y|0,63)|0;v=D;y=Pd(r^(o|p)|0,x^y|0,1)|0;x=f+1024+(z+49<<3)|0;c[x>>2]=y|t;c[x+4>>2]=D|v;x=f+1024+(z+17<<3)|0;v=c[x>>2]|0;x=c[x+4>>2]|0;t=f+1024+(z+32<<3)|0;y=c[t>>2]|0;t=c[t+4>>2]|0;p=oe(y|0,t|0,v|0,x|0)|0;o=D;x=Pd(v|0,x|0,1)|0;x=Ed(x&-2|0,D&1|0,y|0,0)|0;x=oe(p|0,o|0,x|0,D|0)|0;o=D;p=f+1024+(z+112<<3)|0;v=x^c[p>>2];p=o^c[p+4>>2];r=f+1024+(z+65<<3)|0;w=c[r>>2]|0;r=c[r+4>>2]|0;u=oe(p|0,v|0,w|0,r|0)|0;s=D;r=Pd(w|0,r|0,1)|0;r=Ed(r&-2|0,D&1|0,p|0,0)|0;r=oe(u|0,s|0,r|0,D|0)|0;s=D;u=Rd(r^y|0,s^t|0,24)|0;w=D;t=Pd(r^y|0,s^t|0,40)|0;w=D|w;y=oe(t|u|0,w|0,x|0,o|0)|0;q=D;o=Pd(x|0,o|0,1)|0;o=Ed(u|0,0,o&-2|0,D&1|0)|0;o=oe(y|0,q|0,o|0,D|0)|0;q=D;y=f+1024+(z+17<<3)|0;c[y>>2]=o;c[y+4>>2]=q;y=Rd(o^p|0,q^v|0,16)|0;x=D;v=Pd(o^p|0,q^v|0,48)|0;x=D|x;q=f+1024+(z+112<<3)|0;c[q>>2]=v|y;c[q+4>>2]=x;x=oe(v|y|0,x|0,r|0,s|0)|0;v=D;s=Pd(r|0,s|0,1)|0;s=Ed(y|0,0,s&-2|0,D&1|0)|0;s=oe(x|0,v|0,s|0,D|0)|0;v=D;x=f+1024+(z+65<<3)|0;c[x>>2]=s;c[x+4>>2]=v;x=Rd(s^(t|u)|0,v^w|0,63)|0;y=D;w=Pd(s^(t|u)|0,v^w|0,1)|0;z=f+1024+(z+32<<3)|0;c[z>>2]=w|x;c[z+4>>2]=D|y;a=a+1|0}while((a|0)!=8);ef(d,f);gd(d,f+1024|0);i=e;return}function na(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=i;s=i=i+63&-64;i=i+16|0;do if(a>>>0<245){r=a>>>0<11?16:a+11&-8;q=c[8491]|0;if(q>>>(r>>>3)&3|0){b=34004+((q>>>(r>>>3)&1^1)+(r>>>3)<<1<<2)|0;a=c[b+8>>2]|0;d=c[a+8>>2]|0;do if((b|0)!=(d|0)){if(d>>>0<(c[8495]|0)>>>0)ba();if((c[d+12>>2]|0)==(a|0)){c[d+12>>2]=b;c[b+8>>2]=d;break}else ba()}else c[8491]=q&~(1<<(q>>>(r>>>3)&1^1)+(r>>>3));while(0);H=(q>>>(r>>>3)&1^1)+(r>>>3)<<3;c[a+4>>2]=H|3;c[a+H+4>>2]=c[a+H+4>>2]|1;H=a+8|0;i=I;return H|0}p=c[8493]|0;if(r>>>0>p>>>0){if(q>>>(r>>>3)|0){b=q>>>(r>>>3)<<(r>>>3)&(2<<(r>>>3)|0-(2<<(r>>>3)));e=((b&0-b)+-1|0)>>>(((b&0-b)+-1|0)>>>12&16);d=e>>>(e>>>5&8)>>>(e>>>(e>>>5&8)>>>2&4);d=(e>>>5&8|((b&0-b)+-1|0)>>>12&16|e>>>(e>>>5&8)>>>2&4|d>>>1&2|d>>>(d>>>1&2)>>>1&1)+(d>>>(d>>>1&2)>>>(d>>>(d>>>1&2)>>>1&1))|0;e=c[34004+(d<<1<<2)+8>>2]|0;b=c[e+8>>2]|0;do if((34004+(d<<1<<2)|0)!=(b|0)){if(b>>>0<(c[8495]|0)>>>0)ba();if((c[b+12>>2]|0)==(e|0)){c[b+12>>2]=34004+(d<<1<<2);c[34004+(d<<1<<2)+8>>2]=b;f=q;break}else ba()}else{c[8491]=q&~(1<<d);f=q&~(1<<d)}while(0);c[e+4>>2]=r|3;c[e+r+4>>2]=(d<<3)-r|1;c[e+r+((d<<3)-r)>>2]=(d<<3)-r;if(p|0){a=c[8496]|0;if(f&1<<(p>>>3)){b=c[34004+(p>>>3<<1<<2)+8>>2]|0;if(b>>>0<(c[8495]|0)>>>0)ba();else{h=b;j=34004+(p>>>3<<1<<2)+8|0}}else{c[8491]=f|1<<(p>>>3);h=34004+(p>>>3<<1<<2)|0;j=34004+(p>>>3<<1<<2)+8|0}c[j>>2]=a;c[h+12>>2]=a;c[a+8>>2]=h;c[a+12>>2]=34004+(p>>>3<<1<<2)}c[8493]=(d<<3)-r;c[8496]=e+r;H=e+8|0;i=I;return H|0}l=c[8492]|0;if(l){a=((l&0-l)+-1|0)>>>(((l&0-l)+-1|0)>>>12&16);k=a>>>(a>>>5&8)>>>(a>>>(a>>>5&8)>>>2&4);k=c[34268+((a>>>5&8|((l&0-l)+-1|0)>>>12&16|a>>>(a>>>5&8)>>>2&4|k>>>1&2|k>>>(k>>>1&2)>>>1&1)+(k>>>(k>>>1&2)>>>(k>>>(k>>>1&2)>>>1&1))<<2)>>2]|0;a=k;j=k;k=(c[k+4>>2]&-8)-r|0;while(1){b=c[a+16>>2]|0;if(!b){b=c[a+20>>2]|0;if(!b)break}H=(c[b+4>>2]&-8)-r|0;G=H>>>0<k>>>0;a=b;j=G?b:j;k=G?H:k}f=c[8495]|0;if(j>>>0<f>>>0)ba();h=j+r|0;if(j>>>0>=h>>>0)ba();g=c[j+24>>2]|0;b=c[j+12>>2]|0;do if((b|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){m=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0<f>>>0)ba();else{c[a>>2]=0;m=b;break}}else{a=c[j+8>>2]|0;if(a>>>0<f>>>0)ba();if((c[a+12>>2]|0)!=(j|0))ba();if((c[b+8>>2]|0)==(j|0)){c[a+12>>2]=b;c[b+8>>2]=a;m=b;break}else ba()}while(0);do if(g|0){b=c[j+28>>2]|0;if((j|0)==(c[34268+(b<<2)>>2]|0)){c[34268+(b<<2)>>2]=m;if(!m){c[8492]=l&~(1<<b);break}}else{if(g>>>0<(c[8495]|0)>>>0)ba();if((c[g+16>>2]|0)==(j|0))c[g+16>>2]=m;else c[g+20>>2]=m;if(!m)break}a=c[8495]|0;if(m>>>0<a>>>0)ba();c[m+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0<a>>>0)ba();else{c[m+16>>2]=b;c[b+24>>2]=m;break}while(0);b=c[j+20>>2]|0;if(b|0)if(b>>>0<(c[8495]|0)>>>0)ba();else{c[m+20>>2]=b;c[b+24>>2]=m;break}}while(0);if(k>>>0<16){H=k+r|0;c[j+4>>2]=H|3;H=j+H+4|0;c[H>>2]=c[H>>2]|1}else{c[j+4>>2]=r|3;c[h+4>>2]=k|1;c[h+k>>2]=k;if(p|0){a=c[8496]|0;if(q&1<<(p>>>3)){b=c[34004+(p>>>3<<1<<2)+8>>2]|0;if(b>>>0<(c[8495]|0)>>>0)ba();else{n=b;o=34004+(p>>>3<<1<<2)+8|0}}else{c[8491]=q|1<<(p>>>3);n=34004+(p>>>3<<1<<2)|0;o=34004+(p>>>3<<1<<2)+8|0}c[o>>2]=a;c[n+12>>2]=a;c[a+8>>2]=n;c[a+12>>2]=34004+(p>>>3<<1<<2)}c[8493]=k;c[8496]=h}H=j+8|0;i=I;return H|0}}}else if(a>>>0<=4294967231){r=a+11&-8;l=c[8492]|0;if(l){if((a+11|0)>>>8)if(r>>>0>16777215)k=31;else{k=(a+11|0)>>>8<<((((a+11|0)>>>8)+1048320|0)>>>16&8);k=14-((k+520192|0)>>>16&4|(((a+11|0)>>>8)+1048320|0)>>>16&8|((k<<((k+520192|0)>>>16&4))+245760|0)>>>16&2)+(k<<((k+520192|0)>>>16&4)<<(((k<<((k+520192|0)>>>16&4))+245760|0)>>>16&2)>>>15)|0;k=r>>>(k+7|0)&1|k<<1}else k=0;a=c[34268+(k<<2)>>2]|0;a:do if(!a){a=0;e=0;d=0-r|0;A=86}else{e=0;d=0-r|0;j=r<<((k|0)==31?0:25-(k>>>1)|0);h=0;while(1){f=(c[a+4>>2]&-8)-r|0;if(f>>>0<d>>>0)if(!f){h=a;d=0;e=a;A=90;break a}else{e=a;d=f}f=c[a+20>>2]|0;a=c[a+16+(j>>>31<<2)>>2]|0;h=(f|0)==0|(f|0)==(a|0)?h:f;f=(a|0)==0;if(f){a=h;A=86;break}else j=j<<(f&1^1)}}while(0);if((A|0)==86){if((a|0)==0&(e|0)==0){a=2<<k;if(!(l&(a|0-a)))break;n=(l&(a|0-a)&0-(l&(a|0-a)))+-1|0;o=n>>>(n>>>12&16)>>>(n>>>(n>>>12&16)>>>5&8);a=o>>>(o>>>2&4)>>>(o>>>(o>>>2&4)>>>1&2);a=c[34268+((n>>>(n>>>12&16)>>>5&8|n>>>12&16|o>>>2&4|o>>>(o>>>2&4)>>>1&2|a>>>1&1)+(a>>>(a>>>1&1))<<2)>>2]|0}if(!a){k=e;j=d}else{h=e;e=a;A=90}}if((A|0)==90)while(1){A=0;f=(c[e+4>>2]&-8)-r|0;a=f>>>0<d>>>0;d=a?f:d;a=a?e:h;f=c[e+16>>2]|0;if(f|0){h=a;e=f;A=90;continue}e=c[e+20>>2]|0;if(!e){k=a;j=d;break}else{h=a;A=90}}if((k|0)!=0?j>>>0<((c[8493]|0)-r|0)>>>0:0){f=c[8495]|0;if(k>>>0<f>>>0)ba();h=k+r|0;if(k>>>0>=h>>>0)ba();g=c[k+24>>2]|0;b=c[k+12>>2]|0;do if((b|0)==(k|0)){a=k+20|0;b=c[a>>2]|0;if(!b){a=k+16|0;b=c[a>>2]|0;if(!b){p=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0<f>>>0)ba();else{c[a>>2]=0;p=b;break}}else{a=c[k+8>>2]|0;if(a>>>0<f>>>0)ba();if((c[a+12>>2]|0)!=(k|0))ba();if((c[b+8>>2]|0)==(k|0)){c[a+12>>2]=b;c[b+8>>2]=a;p=b;break}else ba()}while(0);do if(g){b=c[k+28>>2]|0;if((k|0)==(c[34268+(b<<2)>>2]|0)){c[34268+(b<<2)>>2]=p;if(!p){c[8492]=l&~(1<<b);y=l&~(1<<b);break}}else{if(g>>>0<(c[8495]|0)>>>0)ba();if((c[g+16>>2]|0)==(k|0))c[g+16>>2]=p;else c[g+20>>2]=p;if(!p){y=l;break}}a=c[8495]|0;if(p>>>0<a>>>0)ba();c[p+24>>2]=g;b=c[k+16>>2]|0;do if(b|0)if(b>>>0<a>>>0)ba();else{c[p+16>>2]=b;c[b+24>>2]=p;break}while(0);b=c[k+20>>2]|0;if(b)if(b>>>0<(c[8495]|0)>>>0)ba();else{c[p+20>>2]=b;c[b+24>>2]=p;y=l;break}else y=l}else y=l;while(0);do if(j>>>0>=16){c[k+4>>2]=r|3;c[h+4>>2]=j|1;c[h+j>>2]=j;a=j>>>3;if(j>>>0<256){b=c[8491]|0;if(b&1<<a){b=c[34004+(a<<1<<2)+8>>2]|0;if(b>>>0<(c[8495]|0)>>>0)ba();else{q=b;v=34004+(a<<1<<2)+8|0}}else{c[8491]=b|1<<a;q=34004+(a<<1<<2)|0;v=34004+(a<<1<<2)+8|0}c[v>>2]=h;c[q+12>>2]=h;c[h+8>>2]=q;c[h+12>>2]=34004+(a<<1<<2);break}b=j>>>8;if(b)if(j>>>0>16777215)b=31;else{H=b<<((b+1048320|0)>>>16&8)<<(((b<<((b+1048320|0)>>>16&8))+520192|0)>>>16&4);b=14-(((b<<((b+1048320|0)>>>16&8))+520192|0)>>>16&4|(b+1048320|0)>>>16&8|(H+245760|0)>>>16&2)+(H<<((H+245760|0)>>>16&2)>>>15)|0;b=j>>>(b+7|0)&1|b<<1}else b=0;d=34268+(b<<2)|0;c[h+28>>2]=b;c[h+16+4>>2]=0;c[h+16>>2]=0;a=1<<b;if(!(y&a)){c[8492]=y|a;c[d>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=j<<((b|0)==31?0:25-(b>>>1)|0);e=c[d>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(j|0)){A=148;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){A=145;break}else{a=a<<1;e=b}}if((A|0)==145)if(d>>>0<(c[8495]|0)>>>0)ba();else{c[d>>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((A|0)==148){b=e+8|0;a=c[b>>2]|0;H=c[8495]|0;if(a>>>0>=H>>>0&e>>>0>=H>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=e;c[h+24>>2]=0;break}else ba()}}else{H=j+r|0;c[k+4>>2]=H|3;H=k+H+4|0;c[H>>2]=c[H>>2]|1}while(0);H=k+8|0;i=I;return H|0}}}else r=-1;while(0);d=c[8493]|0;if(d>>>0>=r>>>0){b=d-r|0;a=c[8496]|0;if(b>>>0>15){H=a+r|0;c[8496]=H;c[8493]=b;c[H+4>>2]=b|1;c[H+b>>2]=b;c[a+4>>2]=r|3}else{c[8493]=0;c[8496]=0;c[a+4>>2]=d|3;c[a+d+4>>2]=c[a+d+4>>2]|1}H=a+8|0;i=I;return H|0}f=c[8494]|0;if(f>>>0>r>>>0){F=f-r|0;c[8494]=F;H=c[8497]|0;G=H+r|0;c[8497]=G;c[G+4>>2]=F|1;c[H+4>>2]=r|3;H=H+8|0;i=I;return H|0}if(!(c[8609]|0)){c[8611]=4096;c[8610]=4096;c[8612]=-1;c[8613]=-1;c[8614]=0;c[8602]=0;c[s>>2]=s&-16^1431655768;c[8609]=s&-16^1431655768;a=4096}else a=c[8611]|0;h=r+48|0;j=r+47|0;l=a+j|0;k=0-a|0;if((l&k)>>>0<=r>>>0){H=0;i=I;return H|0}a=c[8601]|0;if(a|0?(y=c[8599]|0,(y+(l&k)|0)>>>0<=y>>>0?1:(y+(l&k)|0)>>>0>a>>>0):0){H=0;i=I;return H|0}b:do if(!(c[8602]&4)){e=c[8497]|0;c:do if(e){d=34412;while(1){a=c[d>>2]|0;if(a>>>0<=e>>>0?(t=d+4|0,(a+(c[t>>2]|0)|0)>>>0>e>>>0):0)break;a=c[d+8>>2]|0;if(!a){A=172;break c}else d=a}if((l-f&k)>>>0<2147483647){a=Pc(l-f&k|0)|0;if((a|0)==((c[d>>2]|0)+(c[t>>2]|0)|0)){if((a|0)!=(-1|0)){h=l-f&k;g=a;A=190;break b}}else{b=l-f&k;A=180}}}else A=172;while(0);do if(((A|0)==172?(g=Pc(0)|0,(g|0)!=(-1|0)):0)?(b=c[8610]|0,b=((b+-1&g|0)==0?0:(b+-1+g&0-b)-g|0)+(l&k)|0,u=c[8599]|0,b>>>0>r>>>0&b>>>0<2147483647):0){y=c[8601]|0;if(y|0?(b+u|0)>>>0<=u>>>0|(b+u|0)>>>0>y>>>0:0)break;a=Pc(b|0)|0;if((a|0)==(g|0)){h=b;A=190;break b}else A=180}while(0);d:do if((A|0)==180){d=0-b|0;do if(h>>>0>b>>>0&(b>>>0<2147483647&(a|0)!=(-1|0))?(w=c[8611]|0,w=j-b+w&0-w,w>>>0<2147483647):0)if((Pc(w|0)|0)==(-1|0)){Pc(d|0)|0;break d}else{b=w+b|0;break}while(0);if((a|0)!=(-1|0)){h=b;g=a;A=190;break b}}while(0);c[8602]=c[8602]|4;A=187}else A=187;while(0);if((((A|0)==187?(l&k)>>>0<2147483647:0)?(z=Pc(l&k|0)|0,x=Pc(0)|0,z>>>0<x>>>0&((z|0)!=(-1|0)&(x|0)!=(-1|0))):0)?(x-z|0)>>>0>(r+40|0)>>>0:0){h=x-z|0;g=z;A=190}if((A|0)==190){b=(c[8599]|0)+h|0;c[8599]=b;if(b>>>0>(c[8600]|0)>>>0)c[8600]=b;j=c[8497]|0;do if(j){b=34412;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){A=200;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((A|0)==200?(c[b+12>>2]&8|0)==0:0)?j>>>0<g>>>0&j>>>0>=a>>>0:0){c[d>>2]=e+h;G=(j+8&7|0)==0?0:0-(j+8)&7;H=h-G+(c[8494]|0)|0;c[8497]=j+G;c[8494]=H;c[j+G+4>>2]=H|1;c[j+G+H+4>>2]=40;c[8498]=c[8613];break}b=c[8495]|0;if(g>>>0<b>>>0){c[8495]=g;k=g}else k=b;a=g+h|0;b=34412;while(1){if((c[b>>2]|0)==(a|0)){A=208;break}b=c[b+8>>2]|0;if(!b){a=34412;break}}if((A|0)==208)if(!(c[b+12>>2]&8)){c[b>>2]=g;m=b+4|0;c[m>>2]=(c[m>>2]|0)+h;m=g+8|0;m=g+((m&7|0)==0?0:0-m&7)|0;b=a+((a+8&7|0)==0?0:0-(a+8)&7)|0;l=m+r|0;f=b-m-r|0;c[m+4>>2]=r|3;do if((b|0)!=(j|0)){if((b|0)==(c[8496]|0)){H=(c[8493]|0)+f|0;c[8493]=H;c[8496]=l;c[l+4>>2]=H|1;c[l+H>>2]=H;break}j=c[b+4>>2]|0;if((j&3|0)==1){e:do if(j>>>0>=256){h=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){a=c[b+16+4>>2]|0;if(!a){a=c[b+16>>2]|0;if(!a){F=0;break}else g=b+16|0}else g=b+16+4|0;while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;g=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;g=d}}if(g>>>0<k>>>0)ba();else{c[g>>2]=0;F=a;break}}else{d=c[b+8>>2]|0;if(d>>>0<k>>>0)ba();if((c[d+12>>2]|0)!=(b|0))ba();if((c[a+8>>2]|0)==(b|0)){c[d+12>>2]=a;c[a+8>>2]=d;F=a;break}else ba()}while(0);if(!h)break;a=c[b+28>>2]|0;do if((b|0)!=(c[34268+(a<<2)>>2]|0)){if(h>>>0<(c[8495]|0)>>>0)ba();if((c[h+16>>2]|0)==(b|0))c[h+16>>2]=F;else c[h+20>>2]=F;if(!F)break e}else{c[34268+(a<<2)>>2]=F;if(F|0)break;c[8492]=c[8492]&~(1<<a);break e}while(0);d=c[8495]|0;if(F>>>0<d>>>0)ba();c[F+24>>2]=h;a=c[b+16>>2]|0;do if(a|0)if(a>>>0<d>>>0)ba();else{c[F+16>>2]=a;c[a+24>>2]=F;break}while(0);a=c[b+16+4>>2]|0;if(!a)break;if(a>>>0<(c[8495]|0)>>>0)ba();else{c[F+20>>2]=a;c[a+24>>2]=F;break}}else{a=c[b+8>>2]|0;d=c[b+12>>2]|0;do if((a|0)!=(34004+(j>>>3<<1<<2)|0)){if(a>>>0<k>>>0)ba();if((c[a+12>>2]|0)==(b|0))break;ba()}while(0);if((d|0)==(a|0)){c[8491]=c[8491]&~(1<<(j>>>3));break}do if((d|0)==(34004+(j>>>3<<1<<2)|0))E=d+8|0;else{if(d>>>0<k>>>0)ba();if((c[d+8>>2]|0)==(b|0)){E=d+8|0;break}ba()}while(0);c[a+12>>2]=d;c[E>>2]=a}while(0);b=b+(j&-8)|0;f=(j&-8)+f|0}a=b+4|0;c[a>>2]=c[a>>2]&-2;c[l+4>>2]=f|1;c[l+f>>2]=f;a=f>>>3;if(f>>>0<256){b=c[8491]|0;do if(!(b&1<<a)){c[8491]=b|1<<a;G=34004+(a<<1<<2)|0;H=34004+(a<<1<<2)+8|0}else{b=c[34004+(a<<1<<2)+8>>2]|0;if(b>>>0>=(c[8495]|0)>>>0){G=b;H=34004+(a<<1<<2)+8|0;break}ba()}while(0);c[H>>2]=l;c[G+12>>2]=l;c[l+8>>2]=G;c[l+12>>2]=34004+(a<<1<<2);break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}H=b<<((b+1048320|0)>>>16&8)<<(((b<<((b+1048320|0)>>>16&8))+520192|0)>>>16&4);b=14-(((b<<((b+1048320|0)>>>16&8))+520192|0)>>>16&4|(b+1048320|0)>>>16&8|(H+245760|0)>>>16&2)+(H<<((H+245760|0)>>>16&2)>>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=34268+(b<<2)|0;c[l+28>>2]=b;c[l+16+4>>2]=0;c[l+16>>2]=0;a=c[8492]|0;d=1<<b;if(!(a&d)){c[8492]=a|d;c[e>>2]=l;c[l+24>>2]=e;c[l+12>>2]=l;c[l+8>>2]=l;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){A=278;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){A=275;break}else{a=a<<1;e=b}}if((A|0)==275)if(d>>>0<(c[8495]|0)>>>0)ba();else{c[d>>2]=l;c[l+24>>2]=e;c[l+12>>2]=l;c[l+8>>2]=l;break}else if((A|0)==278){b=e+8|0;a=c[b>>2]|0;H=c[8495]|0;if(a>>>0>=H>>>0&e>>>0>=H>>>0){c[a+12>>2]=l;c[b>>2]=l;c[l+8>>2]=a;c[l+12>>2]=e;c[l+24>>2]=0;break}else ba()}}else{H=(c[8494]|0)+f|0;c[8494]=H;c[8497]=l;c[l+4>>2]=H|1}while(0);H=m+8|0;i=I;return H|0}else a=34412;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(B=b+(c[a+4>>2]|0)|0,B>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=B+-47+((B+-47+8&7|0)==0?0:0-(B+-47+8)&7)|0;f=f>>>0<(j+16|0)>>>0?j:f;b=g+8|0;b=(b&7|0)==0?0:0-b&7;H=g+b|0;b=h+-40-b|0;c[8497]=H;c[8494]=b;c[H+4>>2]=b|1;c[H+b+4>>2]=40;c[8498]=c[8613];c[f+4>>2]=27;c[f+8>>2]=c[8603];c[f+8+4>>2]=c[8604];c[f+8+8>>2]=c[8605];c[f+8+12>>2]=c[8606];c[8603]=g;c[8604]=h;c[8606]=0;c[8605]=f+8;b=f+24|0;do{b=b+4|0;c[b>>2]=7}while((b+4|0)>>>0<B>>>0);if((f|0)!=(j|0)){c[f+4>>2]=c[f+4>>2]&-2;c[j+4>>2]=f-j|1;c[f>>2]=f-j;if((f-j|0)>>>0<256){a=34004+((f-j|0)>>>3<<1<<2)|0;b=c[8491]|0;if(b&1<<((f-j|0)>>>3)){b=c[a+8>>2]|0;if(b>>>0<(c[8495]|0)>>>0)ba();else{C=b;D=a+8|0}}else{c[8491]=b|1<<((f-j|0)>>>3);C=a;D=a+8|0}c[D>>2]=j;c[C+12>>2]=j;c[j+8>>2]=C;c[j+12>>2]=a;break}if((f-j|0)>>>8)if((f-j|0)>>>0>16777215)b=31;else{b=(f-j|0)>>>8<<((((f-j|0)>>>8)+1048320|0)>>>16&8);b=14-((b+520192|0)>>>16&4|(((f-j|0)>>>8)+1048320|0)>>>16&8|((b<<((b+520192|0)>>>16&4))+245760|0)>>>16&2)+(b<<((b+520192|0)>>>16&4)<<(((b<<((b+520192|0)>>>16&4))+245760|0)>>>16&2)>>>15)|0;b=(f-j|0)>>>(b+7|0)&1|b<<1}else b=0;e=34268+(b<<2)|0;c[j+28>>2]=b;c[j+20>>2]=0;c[j+16>>2]=0;a=c[8492]|0;d=1<<b;if(!(a&d)){c[8492]=a|d;c[e>>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}a=f-j<<((b|0)==31?0:25-(b>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f-j|0)){A=304;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){A=301;break}else{a=a<<1;e=b}}if((A|0)==301)if(d>>>0<(c[8495]|0)>>>0)ba();else{c[d>>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((A|0)==304){b=e+8|0;a=c[b>>2]|0;H=c[8495]|0;if(a>>>0>=H>>>0&e>>>0>=H>>>0){c[a+12>>2]=j;c[b>>2]=j;c[j+8>>2]=a;c[j+12>>2]=e;c[j+24>>2]=0;break}else ba()}}}else{H=c[8495]|0;if((H|0)==0|g>>>0<H>>>0)c[8495]=g;c[8603]=g;c[8604]=h;c[8606]=0;c[8500]=c[8609];c[8499]=-1;b=0;do{H=34004+(b<<1<<2)|0;c[H+12>>2]=H;c[H+8>>2]=H;b=b+1|0}while((b|0)!=32);H=g+8|0;H=(H&7|0)==0?0:0-H&7;G=g+H|0;H=h+-40-H|0;c[8497]=G;c[8494]=H;c[G+4>>2]=H|1;c[G+H+4>>2]=40;c[8498]=c[8613]}while(0);b=c[8494]|0;if(b>>>0>r>>>0){F=b-r|0;c[8494]=F;H=c[8497]|0;G=H+r|0;c[8497]=G;c[G+4>>2]=F|1;c[H+4>>2]=r|3;H=H+8|0;i=I;return H|0}}c[(Zf()|0)>>2]=12;H=0;i=I;return H|0}
-function oa(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;e=d[b>>0]|0;j=Pd(d[b+1>>0]|0|0,0,8)|0;S=D;_=d[b+2>>0]|0;x=Pd(_|0,0,16)|0;Z=Pd(d[b+3>>0]|0|0,0,8)|0;C=D;Y=Pd(d[b+4>>0]|0|0,0,16)|0;C=C|D;m=d[b+5>>0]|0;n=Pd(m|0,0,24)|0;C=Rd(Z|_|Y|n|0,C|D|0,5)|0;n=Pd(d[b+6>>0]|0|0,0,8)|0;Y=D;_=d[b+7>>0]|0;Z=Pd(_|0,0,16)|0;Y=Rd(n|m|Z|0,Y|D|0,2)|0;Z=Pd(d[b+8>>0]|0|0,0,8)|0;m=D;n=Pd(d[b+9>>0]|0|0,0,16)|0;m=m|D;na=d[b+10>>0]|0;va=Pd(na|0,0,24)|0;m=Rd(Z|_|n|va|0,m|D|0,7)|0;va=Pd(d[b+11>>0]|0|0,0,8)|0;n=D;_=Pd(d[b+12>>0]|0|0,0,16)|0;n=n|D;Z=d[b+13>>0]|0;oa=Pd(Z|0,0,24)|0;n=Rd(va|na|_|oa|0,n|D|0,4)|0;oa=Pd(d[b+14>>0]|0|0,0,8)|0;_=D;na=d[b+15>>0]|0;va=Pd(na|0,0,16)|0;_=Rd(oa|Z|va|0,_|D|0,1)|0;va=Pd(d[b+16>>0]|0|0,0,8)|0;Z=D;oa=Pd(d[b+17>>0]|0|0,0,16)|0;Z=Z|D;xa=d[b+18>>0]|0;ya=Pd(xa|0,0,24)|0;Z=Rd(va|na|oa|ya|0,Z|D|0,6)|0;ya=Pd(d[b+19>>0]|0|0,0,8)|0;oa=D;na=Pd(d[b+20>>0]|0|0,0,16)|0;oa=Rd(ya|xa|na|0,oa|D|0,3)|0;na=D;xa=d[b+21>>0]|0;ya=Pd(d[b+22>>0]|0|0,0,8)|0;va=D;N=d[b+23>>0]|0;wa=Pd(N|0,0,16)|0;U=Pd(d[b+24>>0]|0|0,0,8)|0;ka=D;ua=Pd(d[b+25>>0]|0|0,0,16)|0;ka=ka|D;fa=d[b+26>>0]|0;Ca=Pd(fa|0,0,24)|0;ka=Rd(U|N|ua|Ca|0,ka|D|0,5)|0;Ca=Pd(d[b+27>>0]|0|0,0,8)|0;ua=D;N=d[b+28>>0]|0;U=Pd(N|0,0,16)|0;ua=Rd(Ca|fa|U|0,ua|D|0,2)|0;U=Pd(d[b+29>>0]|0|0,0,8)|0;fa=D;Ca=Pd(d[b+30>>0]|0|0,0,16)|0;fa=fa|D;A=d[b+31>>0]|0;g=Pd(A|0,0,24)|0;fa=Rd(U|N|Ca|g|0,fa|D|0,7)|0;g=Pd(d[b+32>>0]|0|0,0,8)|0;Ca=D;N=Pd(d[b+33>>0]|0|0,0,16)|0;Ca=Ca|D;U=d[b+34>>0]|0;I=Pd(U|0,0,24)|0;Ca=Rd(g|A|N|I|0,Ca|D|0,4)|0;I=Pd(d[b+35>>0]|0|0,0,8)|0;N=D;A=d[b+36>>0]|0;g=Pd(A|0,0,16)|0;N=Rd(I|U|g|0,N|D|0,1)|0;g=Pd(d[b+37>>0]|0|0,0,8)|0;U=D;I=Pd(d[b+38>>0]|0|0,0,16)|0;U=U|D;K=d[b+39>>0]|0;L=Pd(K|0,0,24)|0;U=Rd(g|A|I|L|0,U|D|0,6)|0;L=Pd(d[b+40>>0]|0|0,0,8)|0;I=D;A=Pd(d[b+41>>0]|0|0,0,16)|0;I=Rd(L|K|A|0,I|D|0,3)|0;A=D;K=d[b+42>>0]|0;L=Pd(d[b+43>>0]|0|0,0,8)|0;g=D;X=d[b+44>>0]|0;W=Pd(X|0,0,16)|0;G=Pd(d[b+45>>0]|0|0,0,8)|0;t=D;ha=Pd(d[b+46>>0]|0|0,0,16)|0;t=t|D;Da=d[b+47>>0]|0;u=Pd(Da|0,0,24)|0;t=Rd(G|X|ha|u|0,t|D|0,5)|0;u=Pd(d[b+48>>0]|0|0,0,8)|0;ha=D;X=d[b+49>>0]|0;G=Pd(X|0,0,16)|0;ha=Rd(u|Da|G|0,ha|D|0,2)|0;G=Pd(d[b+50>>0]|0|0,0,8)|0;Da=D;u=Pd(d[b+51>>0]|0|0,0,16)|0;Da=Da|D;s=d[b+52>>0]|0;q=Pd(s|0,0,24)|0;Da=Rd(G|X|u|q|0,Da|D|0,7)|0;q=Pd(d[b+53>>0]|0|0,0,8)|0;u=D;X=Pd(d[b+54>>0]|0|0,0,16)|0;u=u|D;G=d[b+55>>0]|0;f=Pd(G|0,0,24)|0;u=Rd(q|s|X|f|0,u|D|0,4)|0;f=Pd(d[b+56>>0]|0|0,0,8)|0;X=D;s=d[b+57>>0]|0;q=Pd(s|0,0,16)|0;X=Rd(f|G|q|0,X|D|0,1)|0;q=Pd(d[b+58>>0]|0|0,0,8)|0;G=D;f=Pd(d[b+59>>0]|0|0,0,16)|0;G=G|D;E=d[b+60>>0]|0;v=Pd(E|0,0,24)|0;G=Rd(q|s|f|v|0,G|D|0,6)|0;v=Pd(d[b+61>>0]|0|0,0,8)|0;f=D;s=Pd(d[b+62>>0]|0|0,0,16)|0;f=f|D;q=Pd(d[b+63>>0]|0|0,0,24)|0;f=Rd(v|E|s|q|0,f|D|0,3)|0;q=D;s=Ed(f|0,q|0,666643,0)|0;E=D;v=Ed(f|0,q|0,470296,0)|0;o=D;B=Ed(f|0,q|0,654183,0)|0;Q=D;$=Ed(f|0,q|0,-997805,-1)|0;i=D;h=Ed(f|0,q|0,136657,0)|0;p=D;q=Ed(f|0,q|0,-683901,-1)|0;g=oe(q|0,D|0,L|K|W&2031616|0,g|0)|0;W=D;K=Ed(G&2097151|0,0,666643,0)|0;L=D;q=Ed(G&2097151|0,0,470296,0)|0;f=D;qa=Ed(G&2097151|0,0,654183,0)|0;l=D;J=Ed(G&2097151|0,0,-997805,-1)|0;w=D;V=Ed(G&2097151|0,0,136657,0)|0;P=D;G=Ed(G&2097151|0,0,-683901,-1)|0;r=D;c=Ed(X&2097151|0,0,666643,0)|0;O=D;T=Ed(X&2097151|0,0,470296,0)|0;ga=D;aa=Ed(X&2097151|0,0,654183,0)|0;y=D;za=Ed(X&2097151|0,0,-997805,-1)|0;pa=D;H=Ed(X&2097151|0,0,136657,0)|0;k=D;X=Ed(X&2097151|0,0,-683901,-1)|0;U=oe(X|0,D|0,U&2097151|0,0)|0;P=oe(U|0,D|0,V|0,P|0)|0;i=oe(P|0,D|0,$|0,i|0)|0;$=D;P=Ed(u&2097151|0,0,666643,0)|0;V=D;U=Ed(u&2097151|0,0,470296,0)|0;X=D;ra=Ed(u&2097151|0,0,654183,0)|0;z=D;ca=Ed(u&2097151|0,0,-997805,-1)|0;ba=D;Ba=Ed(u&2097151|0,0,136657,0)|0;Aa=D;u=Ed(u&2097151|0,0,-683901,-1)|0;M=D;F=Ed(Da&2097151|0,0,666643,0)|0;R=D;la=Ed(Da&2097151|0,0,470296,0)|0;ma=D;ja=Ed(Da&2097151|0,0,654183,0)|0;ia=D;ta=Ed(Da&2097151|0,0,-997805,-1)|0;sa=D;ea=Ed(Da&2097151|0,0,136657,0)|0;da=D;Da=Ed(Da&2097151|0,0,-683901,-1)|0;Ca=oe(Da|0,D|0,Ca&2097151|0,0)|0;Aa=oe(Ca|0,D|0,Ba|0,Aa|0)|0;pa=oe(Aa|0,D|0,za|0,pa|0)|0;l=oe(pa|0,D|0,qa|0,l|0)|0;o=oe(l|0,D|0,v|0,o|0)|0;v=D;l=Ed(ha&2097151|0,0,666643,0)|0;Z=oe(l|0,D|0,Z&2097151|0,0)|0;l=D;qa=Ed(ha&2097151|0,0,470296,0)|0;pa=D;za=Ed(ha&2097151|0,0,654183,0)|0;va=oe(za|0,D|0,ya|xa|wa&2031616|0,va|0)|0;ma=oe(va|0,D|0,la|0,ma|0)|0;V=oe(ma|0,D|0,P|0,V|0)|0;P=D;ma=Ed(ha&2097151|0,0,-997805,-1)|0;la=D;va=Ed(ha&2097151|0,0,136657,0)|0;ua=oe(va|0,D|0,ua&2097151|0,0)|0;sa=oe(ua|0,D|0,ta|0,sa|0)|0;z=oe(sa|0,D|0,ra|0,z|0)|0;ga=oe(z|0,D|0,T|0,ga|0)|0;L=oe(ga|0,D|0,K|0,L|0)|0;K=D;ha=Ed(ha&2097151|0,0,-683901,-1)|0;ga=D;T=oe(Z|0,l|0,1048576,0)|0;T=Rd(T|0,D|0,21)|0;z=D;na=oe(qa|0,pa|0,oa|0,na|0)|0;na=oe(na|0,D|0,T|0,z|0)|0;R=oe(na|0,D|0,F|0,R|0)|0;F=D;z=Pd(T|0,z|0,21)|0;z=le(Z|0,l|0,z|0,D|0)|0;l=D;Z=oe(V|0,P|0,1048576,0)|0;Z=Rd(Z|0,D|0,21)|0;T=D;ka=oe(ma|0,la|0,ka&2097151|0,0)|0;ia=oe(ka|0,D|0,ja|0,ia|0)|0;X=oe(ia|0,D|0,U|0,X|0)|0;O=oe(X|0,D|0,c|0,O|0)|0;O=oe(O|0,D|0,Z|0,T|0)|0;c=D;T=Pd(Z|0,T|0,21)|0;Z=D;X=oe(L|0,K|0,1048576,0)|0;X=Dd(X|0,D|0,21)|0;U=D;fa=oe(ha|0,ga|0,fa&2097151|0,0)|0;da=oe(fa|0,D|0,ea|0,da|0)|0;ba=oe(da|0,D|0,ca|0,ba|0)|0;y=oe(ba|0,D|0,aa|0,y|0)|0;f=oe(y|0,D|0,q|0,f|0)|0;E=oe(f|0,D|0,s|0,E|0)|0;E=oe(E|0,D|0,X|0,U|0)|0;s=D;U=Pd(X|0,U|0,21)|0;X=D;f=oe(o|0,v|0,1048576,0)|0;f=Dd(f|0,D|0,21)|0;q=D;N=oe(u|0,M|0,N&2097151|0,0)|0;k=oe(N|0,D|0,H|0,k|0)|0;w=oe(k|0,D|0,J|0,w|0)|0;Q=oe(w|0,D|0,B|0,Q|0)|0;Q=oe(Q|0,D|0,f|0,q|0)|0;B=D;q=Pd(f|0,q|0,21)|0;q=le(o|0,v|0,q|0,D|0)|0;v=D;o=oe(i|0,$|0,1048576,0)|0;o=Dd(o|0,D|0,21)|0;f=D;A=oe(G|0,r|0,I|0,A|0)|0;p=oe(A|0,D|0,h|0,p|0)|0;p=oe(p|0,D|0,o|0,f|0)|0;h=D;f=Pd(o|0,f|0,21)|0;f=le(i|0,$|0,f|0,D|0)|0;$=D;i=oe(g|0,W|0,1048576,0)|0;i=Dd(i|0,D|0,21)|0;o=D;t=oe(i|0,o|0,t&2097151|0,0)|0;A=D;o=Pd(i|0,o|0,21)|0;o=le(g|0,W|0,o|0,D|0)|0;W=D;g=oe(R|0,F|0,1048576,0)|0;g=Rd(g|0,D|0,21)|0;i=D;I=Pd(g|0,i|0,21)|0;I=le(R|0,F|0,I|0,D|0)|0;F=D;R=oe(O|0,c|0,1048576,0)|0;R=Dd(R|0,D|0,21)|0;r=D;G=Pd(R|0,r|0,21)|0;G=le(O|0,c|0,G|0,D|0)|0;c=D;O=oe(E|0,s|0,1048576,0)|0;O=Dd(O|0,D|0,21)|0;w=D;v=oe(q|0,v|0,O|0,w|0)|0;q=D;w=Pd(O|0,w|0,21)|0;w=le(E|0,s|0,w|0,D|0)|0;s=D;E=oe(Q|0,B|0,1048576,0)|0;E=Dd(E|0,D|0,21)|0;O=D;$=oe(E|0,O|0,f|0,$|0)|0;f=D;O=Pd(E|0,O|0,21)|0;O=le(Q|0,B|0,O|0,D|0)|0;B=D;Q=oe(p|0,h|0,1048576,0)|0;Q=Dd(Q|0,D|0,21)|0;E=D;W=oe(Q|0,E|0,o|0,W|0)|0;o=D;E=Pd(Q|0,E|0,21)|0;E=le(p|0,h|0,E|0,D|0)|0;h=D;p=Ed(t|0,A|0,666643,0)|0;_=oe(p|0,D|0,_&2097151|0,0)|0;p=D;Q=Ed(t|0,A|0,470296,0)|0;Q=oe(z|0,l|0,Q|0,D|0)|0;l=D;z=Ed(t|0,A|0,654183,0)|0;z=oe(I|0,F|0,z|0,D|0)|0;F=D;I=Ed(t|0,A|0,-997805,-1)|0;J=D;k=Ed(t|0,A|0,136657,0)|0;k=oe(G|0,c|0,k|0,D|0)|0;c=D;A=Ed(t|0,A|0,-683901,-1)|0;t=D;r=oe(L|0,K|0,R|0,r|0)|0;X=le(r|0,D|0,U|0,X|0)|0;t=oe(X|0,D|0,A|0,t|0)|0;A=D;X=Ed(W|0,o|0,666643,0)|0;n=oe(X|0,D|0,n&2097151|0,0)|0;X=D;U=Ed(W|0,o|0,470296,0)|0;U=oe(_|0,p|0,U|0,D|0)|0;p=D;_=Ed(W|0,o|0,654183,0)|0;_=oe(Q|0,l|0,_|0,D|0)|0;l=D;Q=Ed(W|0,o|0,-997805,-1)|0;Q=oe(z|0,F|0,Q|0,D|0)|0;F=D;z=Ed(W|0,o|0,136657,0)|0;r=D;o=Ed(W|0,o|0,-683901,-1)|0;o=oe(k|0,c|0,o|0,D|0)|0;c=D;k=Ed(E|0,h|0,666643,0)|0;m=oe(k|0,D|0,m&2097151|0,0)|0;k=D;W=Ed(E|0,h|0,470296,0)|0;W=oe(n|0,X|0,W|0,D|0)|0;X=D;n=Ed(E|0,h|0,654183,0)|0;n=oe(U|0,p|0,n|0,D|0)|0;p=D;U=Ed(E|0,h|0,-997805,-1)|0;U=oe(_|0,l|0,U|0,D|0)|0;l=D;_=Ed(E|0,h|0,136657,0)|0;_=oe(Q|0,F|0,_|0,D|0)|0;F=D;h=Ed(E|0,h|0,-683901,-1)|0;E=D;i=oe(V|0,P|0,g|0,i|0)|0;Z=le(i|0,D|0,T|0,Z|0)|0;J=oe(Z|0,D|0,I|0,J|0)|0;r=oe(J|0,D|0,z|0,r|0)|0;E=oe(r|0,D|0,h|0,E|0)|0;h=D;r=Ed($|0,f|0,666643,0)|0;z=D;J=Ed($|0,f|0,470296,0)|0;I=D;Z=Ed($|0,f|0,654183,0)|0;T=D;i=Ed($|0,f|0,-997805,-1)|0;g=D;P=Ed($|0,f|0,136657,0)|0;P=oe(U|0,l|0,P|0,D|0)|0;l=D;f=Ed($|0,f|0,-683901,-1)|0;f=oe(_|0,F|0,f|0,D|0)|0;F=D;_=Ed(O|0,B|0,666643,0)|0;$=D;U=Ed(O|0,B|0,470296,0)|0;V=D;Q=Ed(O|0,B|0,654183,0)|0;R=D;K=Ed(O|0,B|0,-997805,-1)|0;L=D;G=Ed(O|0,B|0,136657,0)|0;H=D;B=Ed(O|0,B|0,-683901,-1)|0;B=oe(P|0,l|0,B|0,D|0)|0;l=D;P=Ed(v|0,q|0,666643,0)|0;S=oe(P|0,D|0,j|e|x&2031616|0,S|0)|0;x=D;e=Ed(v|0,q|0,470296,0)|0;j=D;P=Ed(v|0,q|0,654183,0)|0;Y=oe(P|0,D|0,Y&2097151|0,0)|0;z=oe(Y|0,D|0,r|0,z|0)|0;V=oe(z|0,D|0,U|0,V|0)|0;U=D;z=Ed(v|0,q|0,-997805,-1)|0;r=D;Y=Ed(v|0,q|0,136657,0)|0;Y=oe(W|0,X|0,Y|0,D|0)|0;T=oe(Y|0,D|0,Z|0,T|0)|0;L=oe(T|0,D|0,K|0,L|0)|0;K=D;q=Ed(v|0,q|0,-683901,-1)|0;v=D;T=oe(S|0,x|0,1048576,0)|0;T=Dd(T|0,D|0,21)|0;Z=D;C=oe(e|0,j|0,C&2097151|0,0)|0;$=oe(C|0,D|0,_|0,$|0)|0;$=oe($|0,D|0,T|0,Z|0)|0;_=D;Z=Pd(T|0,Z|0,21)|0;Z=le(S|0,x|0,Z|0,D|0)|0;x=D;S=oe(V|0,U|0,1048576,0)|0;S=Dd(S|0,D|0,21)|0;T=D;r=oe(m|0,k|0,z|0,r|0)|0;I=oe(r|0,D|0,J|0,I|0)|0;R=oe(I|0,D|0,Q|0,R|0)|0;R=oe(R|0,D|0,S|0,T|0)|0;Q=D;T=Pd(S|0,T|0,21)|0;S=D;I=oe(L|0,K|0,1048576,0)|0;I=Dd(I|0,D|0,21)|0;J=D;v=oe(n|0,p|0,q|0,v|0)|0;g=oe(v|0,D|0,i|0,g|0)|0;H=oe(g|0,D|0,G|0,H|0)|0;H=oe(H|0,D|0,I|0,J|0)|0;G=D;J=Pd(I|0,J|0,21)|0;I=D;g=oe(B|0,l|0,1048576,0)|0;g=Dd(g|0,D|0,21)|0;i=D;F=oe(f|0,F|0,g|0,i|0)|0;f=D;i=Pd(g|0,i|0,21)|0;i=le(B|0,l|0,i|0,D|0)|0;l=D;B=oe(E|0,h|0,1048576,0)|0;B=Dd(B|0,D|0,21)|0;g=D;c=oe(o|0,c|0,B|0,g|0)|0;o=D;g=Pd(B|0,g|0,21)|0;g=le(E|0,h|0,g|0,D|0)|0;h=D;E=oe(t|0,A|0,1048576,0)|0;E=Dd(E|0,D|0,21)|0;B=D;s=oe(w|0,s|0,E|0,B|0)|0;w=D;B=Pd(E|0,B|0,21)|0;B=le(t|0,A|0,B|0,D|0)|0;A=D;t=oe($|0,_|0,1048576,0)|0;t=Dd(t|0,D|0,21)|0;E=D;v=Pd(t|0,E|0,21)|0;q=D;p=oe(R|0,Q|0,1048576,0)|0;p=Dd(p|0,D|0,21)|0;n=D;r=Pd(p|0,n|0,21)|0;z=D;k=oe(H|0,G|0,1048576,0)|0;k=Dd(k|0,D|0,21)|0;m=D;l=oe(i|0,l|0,k|0,m|0)|0;i=D;m=Pd(k|0,m|0,21)|0;k=D;C=oe(F|0,f|0,1048576,0)|0;C=Dd(C|0,D|0,21)|0;j=D;h=oe(g|0,h|0,C|0,j|0)|0;g=D;j=Pd(C|0,j|0,21)|0;j=le(F|0,f|0,j|0,D|0)|0;f=D;F=oe(c|0,o|0,1048576,0)|0;F=Dd(F|0,D|0,21)|0;C=D;A=oe(B|0,A|0,F|0,C|0)|0;B=D;C=Pd(F|0,C|0,21)|0;C=le(c|0,o|0,C|0,D|0)|0;o=D;c=oe(s|0,w|0,1048576,0)|0;c=Dd(c|0,D|0,21)|0;F=D;e=Pd(c|0,F|0,21)|0;e=le(s|0,w|0,e|0,D|0)|0;w=D;s=Ed(c|0,F|0,666643,0)|0;s=oe(Z|0,x|0,s|0,D|0)|0;x=D;Z=Ed(c|0,F|0,470296,0)|0;Y=D;X=Ed(c|0,F|0,654183,0)|0;W=D;P=Ed(c|0,F|0,-997805,-1)|0;O=D;N=Ed(c|0,F|0,136657,0)|0;M=D;F=Ed(c|0,F|0,-683901,-1)|0;c=D;u=Dd(s|0,x|0,21)|0;y=D;Y=oe($|0,_|0,Z|0,Y|0)|0;Y=oe(Y|0,D|0,u|0,y|0)|0;q=le(Y|0,D|0,v|0,q|0)|0;v=D;y=Pd(u|0,y|0,21)|0;y=le(s|0,x|0,y|0,D|0)|0;x=D;s=Dd(q|0,v|0,21)|0;u=D;U=oe(X|0,W|0,V|0,U|0)|0;S=le(U|0,D|0,T|0,S|0)|0;E=oe(S|0,D|0,t|0,E|0)|0;E=oe(E|0,D|0,s|0,u|0)|0;t=D;u=Pd(s|0,u|0,21)|0;u=le(q|0,v|0,u|0,D|0)|0;v=D;q=Dd(E|0,t|0,21)|0;s=D;O=oe(R|0,Q|0,P|0,O|0)|0;z=le(O|0,D|0,r|0,z|0)|0;z=oe(z|0,D|0,q|0,s|0)|0;r=D;s=Pd(q|0,s|0,21)|0;s=le(E|0,t|0,s|0,D|0)|0;t=D;E=Dd(z|0,r|0,21)|0;q=D;K=oe(N|0,M|0,L|0,K|0)|0;I=le(K|0,D|0,J|0,I|0)|0;n=oe(I|0,D|0,p|0,n|0)|0;n=oe(n|0,D|0,E|0,q|0)|0;p=D;q=Pd(E|0,q|0,21)|0;q=le(z|0,r|0,q|0,D|0)|0;r=D;z=Dd(n|0,p|0,21)|0;E=D;c=oe(H|0,G|0,F|0,c|0)|0;k=le(c|0,D|0,m|0,k|0)|0;k=oe(k|0,D|0,z|0,E|0)|0;m=D;E=Pd(z|0,E|0,21)|0;E=le(n|0,p|0,E|0,D|0)|0;p=D;n=Dd(k|0,m|0,21)|0;z=D;i=oe(l|0,i|0,n|0,z|0)|0;l=D;z=Pd(n|0,z|0,21)|0;z=le(k|0,m|0,z|0,D|0)|0;m=D;k=Dd(i|0,l|0,21)|0;n=D;f=oe(k|0,n|0,j|0,f|0)|0;j=D;n=Pd(k|0,n|0,21)|0;n=le(i|0,l|0,n|0,D|0)|0;l=D;i=Dd(f|0,j|0,21)|0;k=D;g=oe(h|0,g|0,i|0,k|0)|0;h=D;k=Pd(i|0,k|0,21)|0;k=le(f|0,j|0,k|0,D|0)|0;j=D;f=Dd(g|0,h|0,21)|0;i=D;o=oe(f|0,i|0,C|0,o|0)|0;C=D;i=Pd(f|0,i|0,21)|0;i=le(g|0,h|0,i|0,D|0)|0;h=D;g=Dd(o|0,C|0,21)|0;f=D;B=oe(A|0,B|0,g|0,f|0)|0;A=D;f=Pd(g|0,f|0,21)|0;f=le(o|0,C|0,f|0,D|0)|0;C=D;o=Dd(B|0,A|0,21)|0;g=D;w=oe(o|0,g|0,e|0,w|0)|0;e=D;g=Pd(o|0,g|0,21)|0;g=le(B|0,A|0,g|0,D|0)|0;A=D;B=Dd(w|0,e|0,21)|0;o=D;c=Pd(B|0,o|0,21)|0;c=le(w|0,e|0,c|0,D|0)|0;e=D;w=Ed(B|0,o|0,666643,0)|0;x=oe(w|0,D|0,y|0,x|0)|0;y=D;w=Ed(B|0,o|0,470296,0)|0;w=oe(u|0,v|0,w|0,D|0)|0;v=D;u=Ed(B|0,o|0,654183,0)|0;u=oe(s|0,t|0,u|0,D|0)|0;t=D;s=Ed(B|0,o|0,-997805,-1)|0;s=oe(q|0,r|0,s|0,D|0)|0;r=D;q=Ed(B|0,o|0,136657,0)|0;q=oe(E|0,p|0,q|0,D|0)|0;p=D;o=Ed(B|0,o|0,-683901,-1)|0;o=oe(z|0,m|0,o|0,D|0)|0;m=D;z=Dd(x|0,y|0,21)|0;B=D;v=oe(w|0,v|0,z|0,B|0)|0;w=D;B=Pd(z|0,B|0,21)|0;B=le(x|0,y|0,B|0,D|0)|0;y=D;x=Dd(v|0,w|0,21)|0;z=D;t=oe(u|0,t|0,x|0,z|0)|0;u=D;z=Pd(x|0,z|0,21)|0;z=le(v|0,w|0,z|0,D|0)|0;w=D;v=Dd(t|0,u|0,21)|0;x=D;r=oe(s|0,r|0,v|0,x|0)|0;s=D;x=Pd(v|0,x|0,21)|0;x=le(t|0,u|0,x|0,D|0)|0;u=D;t=Dd(r|0,s|0,21)|0;v=D;p=oe(q|0,p|0,t|0,v|0)|0;q=D;v=Pd(t|0,v|0,21)|0;v=le(r|0,s|0,v|0,D|0)|0;s=D;r=Dd(p|0,q|0,21)|0;t=D;m=oe(o|0,m|0,r|0,t|0)|0;o=D;t=Pd(r|0,t|0,21)|0;t=le(p|0,q|0,t|0,D|0)|0;q=D;p=Dd(m|0,o|0,21)|0;r=D;l=oe(p|0,r|0,n|0,l|0)|0;n=D;r=Pd(p|0,r|0,21)|0;r=le(m|0,o|0,r|0,D|0)|0;o=D;m=Dd(l|0,n|0,21)|0;p=D;j=oe(m|0,p|0,k|0,j|0)|0;k=D;p=Pd(m|0,p|0,21)|0;p=le(l|0,n|0,p|0,D|0)|0;n=D;l=Dd(j|0,k|0,21)|0;m=D;h=oe(l|0,m|0,i|0,h|0)|0;i=D;m=Pd(l|0,m|0,21)|0;m=le(j|0,k|0,m|0,D|0)|0;k=D;j=Dd(h|0,i|0,21)|0;l=D;C=oe(j|0,l|0,f|0,C|0)|0;f=D;l=Pd(j|0,l|0,21)|0;l=le(h|0,i|0,l|0,D|0)|0;i=D;h=Dd(C|0,f|0,21)|0;j=D;A=oe(h|0,j|0,g|0,A|0)|0;g=D;j=Pd(h|0,j|0,21)|0;j=le(C|0,f|0,j|0,D|0)|0;f=D;C=Dd(A|0,g|0,21)|0;h=D;e=oe(C|0,h|0,c|0,e|0)|0;c=D;h=Pd(C|0,h|0,21)|0;h=le(A|0,g|0,h|0,D|0)|0;g=D;a[b>>0]=B;A=Rd(B|0,y|0,8)|0;a[b+1>>0]=A;y=Rd(B|0,y|0,16)|0;B=D;A=Pd(z|0,w|0,5)|0;a[b+2>>0]=A|y;y=Rd(z|0,w|0,3)|0;a[b+3>>0]=y;y=Rd(z|0,w|0,11)|0;a[b+4>>0]=y;w=Rd(z|0,w|0,19)|0;z=D;y=Pd(x|0,u|0,2)|0;a[b+5>>0]=y|w;w=Rd(x|0,u|0,6)|0;a[b+6>>0]=w;u=Rd(x|0,u|0,14)|0;x=D;w=Pd(v|0,s|0,7)|0;a[b+7>>0]=w|u;u=Rd(v|0,s|0,1)|0;a[b+8>>0]=u;u=Rd(v|0,s|0,9)|0;a[b+9>>0]=u;s=Rd(v|0,s|0,17)|0;v=D;u=Pd(t|0,q|0,4)|0;a[b+10>>0]=u|s;s=Rd(t|0,q|0,4)|0;a[b+11>>0]=s;s=Rd(t|0,q|0,12)|0;a[b+12>>0]=s;q=Rd(t|0,q|0,20)|0;t=D;s=Pd(r|0,o|0,1)|0;a[b+13>>0]=s|q;q=Rd(r|0,o|0,7)|0;a[b+14>>0]=q;o=Rd(r|0,o|0,15)|0;r=D;q=Pd(p|0,n|0,6)|0;a[b+15>>0]=q|o;o=Rd(p|0,n|0,2)|0;a[b+16>>0]=o;o=Rd(p|0,n|0,10)|0;a[b+17>>0]=o;n=Rd(p|0,n|0,18)|0;p=D;o=Pd(m|0,k|0,3)|0;a[b+18>>0]=o|n;n=Rd(m|0,k|0,5)|0;a[b+19>>0]=n;k=Rd(m|0,k|0,13)|0;a[b+20>>0]=k;a[b+21>>0]=l;k=Rd(l|0,i|0,8)|0;a[b+22>>0]=k;i=Rd(l|0,i|0,16)|0;l=D;k=Pd(j|0,f|0,5)|0;a[b+23>>0]=k|i;i=Rd(j|0,f|0,3)|0;a[b+24>>0]=i;i=Rd(j|0,f|0,11)|0;a[b+25>>0]=i;f=Rd(j|0,f|0,19)|0;j=D;i=Pd(h|0,g|0,2)|0;a[b+26>>0]=i|f;f=Rd(h|0,g|0,6)|0;a[b+27>>0]=f;g=Rd(h|0,g|0,14)|0;h=D;f=Pd(e|0,c|0,7)|0;a[b+28>>0]=g|f;f=Rd(e|0,c|0,1)|0;a[b+29>>0]=f;f=Rd(e|0,c|0,9)|0;a[b+30>>0]=f;c=Rd(e|0,c|0,17)|0;a[b+31>>0]=c;return}function pa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0;o=c[b>>2]|0;n=c[b+4>>2]|0;k=c[b+8>>2]|0;fa=c[b+12>>2]|0;N=c[b+16>>2]|0;M=c[b+20>>2]|0;g=c[b+24>>2]|0;ea=c[b+28>>2]|0;L=c[b+32>>2]|0;q=c[b+36>>2]|0;I=c[d>>2]|0;Oc=c[d+4>>2]|0;cc=c[d+8>>2]|0;sb=c[d+12>>2]|0;Ia=c[d+16>>2]|0;jc=c[d+20>>2]|0;Db=c[d+24>>2]|0;Ta=c[d+28>>2]|0;ga=c[d+32>>2]|0;Pc=c[d+36>>2]|0;Mc=Ed(I|0,((I|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;Lc=D;wc=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;vc=D;ub=Ed(cc|0,((cc|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;tb=D;Ka=Ed(sb|0,((sb|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;Ja=D;mc=Ed(Ia|0,((Ia|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;lc=D;Gb=Ed(jc|0,((jc|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;Fb=D;Wa=Ed(Db|0,((Db|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;Va=D;ja=Ed(Ta|0,((Ta|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;ia=D;P=Ed(ga|0,((ga|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;O=D;o=Ed(Pc|0,((Pc|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;l=D;dc=Ed(I|0,((I|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;ec=D;yb=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,n<<1|0,((n<<1|0)<0)<<31>>31|0)|0;xb=D;Ma=Ed(cc|0,((cc|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;La=D;oc=Ed(sb|0,((sb|0)<0)<<31>>31|0,n<<1|0,((n<<1|0)<0)<<31>>31|0)|0;nc=D;Ib=Ed(Ia|0,((Ia|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;Hb=D;Ya=Ed(jc|0,((jc|0)<0)<<31>>31|0,n<<1|0,((n<<1|0)<0)<<31>>31|0)|0;Xa=D;la=Ed(Db|0,((Db|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;ka=D;R=Ed(Ta|0,((Ta|0)<0)<<31>>31|0,n<<1|0,((n<<1|0)<0)<<31>>31|0)|0;Q=D;t=Ed(ga|0,((ga|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;s=D;d=((Pc*19|0)<0)<<31>>31;n=Ed(Pc*19|0,d|0,n<<1|0,((n<<1|0)<0)<<31>>31|0)|0;p=D;wb=Ed(I|0,((I|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;vb=D;Qa=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;Pa=D;qc=Ed(cc|0,((cc|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;pc=D;Kb=Ed(sb|0,((sb|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;Jb=D;_a=Ed(Ia|0,((Ia|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;Za=D;na=Ed(jc|0,((jc|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;ma=D;T=Ed(Db|0,((Db|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;S=D;v=Ed(Ta|0,((Ta|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;u=D;ha=((ga*19|0)<0)<<31>>31;yc=Ed(ga*19|0,ha|0,k|0,((k|0)<0)<<31>>31|0)|0;xc=D;k=Ed(Pc*19|0,d|0,k|0,((k|0)<0)<<31>>31|0)|0;j=D;Oa=Ed(I|0,((I|0)<0)<<31>>31|0,fa|0,((fa|0)<0)<<31>>31|0)|0;Na=D;uc=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,fa<<1|0,((fa<<1|0)<0)<<31>>31|0)|0;tc=D;Mb=Ed(cc|0,((cc|0)<0)<<31>>31|0,fa|0,((fa|0)<0)<<31>>31|0)|0;Lb=D;ab=Ed(sb|0,((sb|0)<0)<<31>>31|0,fa<<1|0,((fa<<1|0)<0)<<31>>31|0)|0;$a=D;pa=Ed(Ia|0,((Ia|0)<0)<<31>>31|0,fa|0,((fa|0)<0)<<31>>31|0)|0;oa=D;V=Ed(jc|0,((jc|0)<0)<<31>>31|0,fa<<1|0,((fa<<1|0)<0)<<31>>31|0)|0;U=D;x=Ed(Db|0,((Db|0)<0)<<31>>31|0,fa|0,((fa|0)<0)<<31>>31|0)|0;w=D;Ua=((Ta*19|0)<0)<<31>>31;Ac=Ed(Ta*19|0,Ua|0,fa<<1|0,((fa<<1|0)<0)<<31>>31|0)|0;zc=D;Sb=Ed(ga*19|0,ha|0,fa|0,((fa|0)<0)<<31>>31|0)|0;Rb=D;fa=Ed(Pc*19|0,d|0,fa<<1|0,((fa<<1|0)<0)<<31>>31|0)|0;f=D;sc=Ed(I|0,((I|0)<0)<<31>>31|0,N|0,((N|0)<0)<<31>>31|0)|0;rc=D;Qb=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,N|0,((N|0)<0)<<31>>31|0)|0;Pb=D;cb=Ed(cc|0,((cc|0)<0)<<31>>31|0,N|0,((N|0)<0)<<31>>31|0)|0;bb=D;ra=Ed(sb|0,((sb|0)<0)<<31>>31|0,N|0,((N|0)<0)<<31>>31|0)|0;qa=D;X=Ed(Ia|0,((Ia|0)<0)<<31>>31|0,N|0,((N|0)<0)<<31>>31|0)|0;W=D;z=Ed(jc|0,((jc|0)<0)<<31>>31|0,N|0,((N|0)<0)<<31>>31|0)|0;y=D;Eb=((Db*19|0)<0)<<31>>31;Cc=Ed(Db*19|0,Eb|0,N|0,((N|0)<0)<<31>>31|0)|0;Bc=D;Ub=Ed(Ta*19|0,Ua|0,N|0,((N|0)<0)<<31>>31|0)|0;Tb=D;ib=Ed(ga*19|0,ha|0,N|0,((N|0)<0)<<31>>31|0)|0;hb=D;N=Ed(Pc*19|0,d|0,N|0,((N|0)<0)<<31>>31|0)|0;e=D;Ob=Ed(I|0,((I|0)<0)<<31>>31|0,M|0,((M|0)<0)<<31>>31|0)|0;Nb=D;gb=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,M<<1|0,((M<<1|0)<0)<<31>>31|0)|0;fb=D;ta=Ed(cc|0,((cc|0)<0)<<31>>31|0,M|0,((M|0)<0)<<31>>31|0)|0;sa=D;Z=Ed(sb|0,((sb|0)<0)<<31>>31|0,M<<1|0,((M<<1|0)<0)<<31>>31|0)|0;Y=D;B=Ed(Ia|0,((Ia|0)<0)<<31>>31|0,M|0,((M|0)<0)<<31>>31|0)|0;A=D;kc=((jc*19|0)<0)<<31>>31;Ec=Ed(jc*19|0,kc|0,M<<1|0,((M<<1|0)<0)<<31>>31|0)|0;Dc=D;Wb=Ed(Db*19|0,Eb|0,M|0,((M|0)<0)<<31>>31|0)|0;Vb=D;kb=Ed(Ta*19|0,Ua|0,M<<1|0,((M<<1|0)<0)<<31>>31|0)|0;jb=D;Aa=Ed(ga*19|0,ha|0,M|0,((M|0)<0)<<31>>31|0)|0;za=D;b=Ed(Pc*19|0,d|0,M<<1|0,((M<<1|0)<0)<<31>>31|0)|0;M=D;eb=Ed(I|0,((I|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;db=D;xa=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;wa=D;$=Ed(cc|0,((cc|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;_=D;E=Ed(sb|0,((sb|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;C=D;Gc=Ed(Ia*19|0,((Ia*19|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;Fc=D;Yb=Ed(jc*19|0,kc|0,g|0,((g|0)<0)<<31>>31|0)|0;Xb=D;mb=Ed(Db*19|0,Eb|0,g|0,((g|0)<0)<<31>>31|0)|0;lb=D;Ca=Ed(Ta*19|0,Ua|0,g|0,((g|0)<0)<<31>>31|0)|0;Ba=D;m=Ed(ga*19|0,ha|0,g|0,((g|0)<0)<<31>>31|0)|0;r=D;g=Ed(Pc*19|0,d|0,g|0,((g|0)<0)<<31>>31|0)|0;ya=D;va=Ed(I|0,((I|0)<0)<<31>>31|0,ea|0,((ea|0)<0)<<31>>31|0)|0;ua=D;da=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,ea<<1|0,((ea<<1|0)<0)<<31>>31|0)|0;ca=D;G=Ed(cc|0,((cc|0)<0)<<31>>31|0,ea|0,((ea|0)<0)<<31>>31|0)|0;F=D;Ic=Ed(sb*19|0,((sb*19|0)<0)<<31>>31|0,ea<<1|0,((ea<<1|0)<0)<<31>>31|0)|0;Hc=D;_b=Ed(Ia*19|0,((Ia*19|0)<0)<<31>>31|0,ea|0,((ea|0)<0)<<31>>31|0)|0;Zb=D;ob=Ed(jc*19|0,kc|0,ea<<1|0,((ea<<1|0)<0)<<31>>31|0)|0;nb=D;Ea=Ed(Db*19|0,Eb|0,ea|0,((ea|0)<0)<<31>>31|0)|0;Da=D;gc=Ed(Ta*19|0,Ua|0,ea<<1|0,((ea<<1|0)<0)<<31>>31|0)|0;fc=D;Ab=Ed(ga*19|0,ha|0,ea|0,((ea|0)<0)<<31>>31|0)|0;zb=D;ea=Ed(Pc*19|0,d|0,ea<<1|0,((ea<<1|0)<0)<<31>>31|0)|0;i=D;ba=Ed(I|0,((I|0)<0)<<31>>31|0,L|0,((L|0)<0)<<31>>31|0)|0;aa=D;K=Ed(Oc|0,((Oc|0)<0)<<31>>31|0,L|0,((L|0)<0)<<31>>31|0)|0;J=D;Kc=Ed(cc*19|0,((cc*19|0)<0)<<31>>31|0,L|0,((L|0)<0)<<31>>31|0)|0;Jc=D;ac=Ed(sb*19|0,((sb*19|0)<0)<<31>>31|0,L|0,((L|0)<0)<<31>>31|0)|0;$b=D;qb=Ed(Ia*19|0,((Ia*19|0)<0)<<31>>31|0,L|0,((L|0)<0)<<31>>31|0)|0;pb=D;Ga=Ed(jc*19|0,kc|0,L|0,((L|0)<0)<<31>>31|0)|0;Fa=D;ic=Ed(Db*19|0,Eb|0,L|0,((L|0)<0)<<31>>31|0)|0;hc=D;Cb=Ed(Ta*19|0,Ua|0,L|0,((L|0)<0)<<31>>31|0)|0;Bb=D;Sa=Ed(ga*19|0,ha|0,L|0,((L|0)<0)<<31>>31|0)|0;Ra=D;L=Ed(Pc*19|0,d|0,L|0,((L|0)<0)<<31>>31|0)|0;h=D;I=Ed(I|0,((I|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;H=D;Oc=Ed(Oc*19|0,((Oc*19|0)<0)<<31>>31|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;Nc=D;cc=Ed(cc*19|0,((cc*19|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;bc=D;sb=Ed(sb*19|0,((sb*19|0)<0)<<31>>31|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;rb=D;Ia=Ed(Ia*19|0,((Ia*19|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;Ha=D;kc=Ed(jc*19|0,kc|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;jc=D;Eb=Ed(Db*19|0,Eb|0,q|0,((q|0)<0)<<31>>31|0)|0;Db=D;Ua=Ed(Ta*19|0,Ua|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;Ta=D;ha=Ed(ga*19|0,ha|0,q|0,((q|0)<0)<<31>>31|0)|0;ga=D;q=Ed(Pc*19|0,d|0,q<<1|0,((q<<1|0)<0)<<31>>31|0)|0;d=D;Lc=oe(Oc|0,Nc|0,Mc|0,Lc|0)|0;Jc=oe(Lc|0,D|0,Kc|0,Jc|0)|0;Hc=oe(Jc|0,D|0,Ic|0,Hc|0)|0;Fc=oe(Hc|0,D|0,Gc|0,Fc|0)|0;Dc=oe(Fc|0,D|0,Ec|0,Dc|0)|0;Bc=oe(Dc|0,D|0,Cc|0,Bc|0)|0;zc=oe(Bc|0,D|0,Ac|0,zc|0)|0;xc=oe(zc|0,D|0,yc|0,xc|0)|0;p=oe(xc|0,D|0,n|0,p|0)|0;n=D;ec=oe(wc|0,vc|0,dc|0,ec|0)|0;dc=D;rc=oe(uc|0,tc|0,sc|0,rc|0)|0;pc=oe(rc|0,D|0,qc|0,pc|0)|0;nc=oe(pc|0,D|0,oc|0,nc|0)|0;lc=oe(nc|0,D|0,mc|0,lc|0)|0;jc=oe(lc|0,D|0,kc|0,jc|0)|0;hc=oe(jc|0,D|0,ic|0,hc|0)|0;fc=oe(hc|0,D|0,gc|0,fc|0)|0;r=oe(fc|0,D|0,m|0,r|0)|0;M=oe(r|0,D|0,b|0,M|0)|0;b=D;r=oe(p|0,n|0,33554432,0)|0;r=Dd(r|0,D|0,26)|0;m=D;bc=oe(ec|0,dc|0,cc|0,bc|0)|0;$b=oe(bc|0,D|0,ac|0,$b|0)|0;Zb=oe($b|0,D|0,_b|0,Zb|0)|0;Xb=oe(Zb|0,D|0,Yb|0,Xb|0)|0;Vb=oe(Xb|0,D|0,Wb|0,Vb|0)|0;Tb=oe(Vb|0,D|0,Ub|0,Tb|0)|0;Rb=oe(Tb|0,D|0,Sb|0,Rb|0)|0;j=oe(Rb|0,D|0,k|0,j|0)|0;j=oe(j|0,D|0,r|0,m|0)|0;k=D;m=Pd(r|0,m|0,26)|0;m=le(p|0,n|0,m|0,D|0)|0;n=D;p=oe(M|0,b|0,33554432,0)|0;p=Dd(p|0,D|0,26)|0;r=D;Nb=oe(Qb|0,Pb|0,Ob|0,Nb|0)|0;Lb=oe(Nb|0,D|0,Mb|0,Lb|0)|0;Jb=oe(Lb|0,D|0,Kb|0,Jb|0)|0;Hb=oe(Jb|0,D|0,Ib|0,Hb|0)|0;Fb=oe(Hb|0,D|0,Gb|0,Fb|0)|0;Db=oe(Fb|0,D|0,Eb|0,Db|0)|0;Bb=oe(Db|0,D|0,Cb|0,Bb|0)|0;zb=oe(Bb|0,D|0,Ab|0,zb|0)|0;ya=oe(zb|0,D|0,g|0,ya|0)|0;ya=oe(ya|0,D|0,p|0,r|0)|0;g=D;r=Pd(p|0,r|0,26)|0;r=le(M|0,b|0,r|0,D|0)|0;b=D;M=oe(j|0,k|0,16777216,0)|0;M=Dd(M|0,D|0,25)|0;p=D;vb=oe(yb|0,xb|0,wb|0,vb|0)|0;tb=oe(vb|0,D|0,ub|0,tb|0)|0;rb=oe(tb|0,D|0,sb|0,rb|0)|0;pb=oe(rb|0,D|0,qb|0,pb|0)|0;nb=oe(pb|0,D|0,ob|0,nb|0)|0;lb=oe(nb|0,D|0,mb|0,lb|0)|0;jb=oe(lb|0,D|0,kb|0,jb|0)|0;hb=oe(jb|0,D|0,ib|0,hb|0)|0;f=oe(hb|0,D|0,fa|0,f|0)|0;f=oe(f|0,D|0,M|0,p|0)|0;fa=D;p=Pd(M|0,p|0,25)|0;p=le(j|0,k|0,p|0,D|0)|0;k=D;j=oe(ya|0,g|0,16777216,0)|0;j=Dd(j|0,D|0,25)|0;M=D;db=oe(gb|0,fb|0,eb|0,db|0)|0;bb=oe(db|0,D|0,cb|0,bb|0)|0;$a=oe(bb|0,D|0,ab|0,$a|0)|0;Za=oe($a|0,D|0,_a|0,Za|0)|0;Xa=oe(Za|0,D|0,Ya|0,Xa|0)|0;Va=oe(Xa|0,D|0,Wa|0,Va|0)|0;Ta=oe(Va|0,D|0,Ua|0,Ta|0)|0;Ra=oe(Ta|0,D|0,Sa|0,Ra|0)|0;i=oe(Ra|0,D|0,ea|0,i|0)|0;i=oe(i|0,D|0,j|0,M|0)|0;ea=D;M=Pd(j|0,M|0,25)|0;M=le(ya|0,g|0,M|0,D|0)|0;g=D;ya=oe(f|0,fa|0,33554432,0)|0;ya=Dd(ya|0,D|0,26)|0;j=D;Na=oe(Qa|0,Pa|0,Oa|0,Na|0)|0;La=oe(Na|0,D|0,Ma|0,La|0)|0;Ja=oe(La|0,D|0,Ka|0,Ja|0)|0;Ha=oe(Ja|0,D|0,Ia|0,Ha|0)|0;Fa=oe(Ha|0,D|0,Ga|0,Fa|0)|0;Da=oe(Fa|0,D|0,Ea|0,Da|0)|0;Ba=oe(Da|0,D|0,Ca|0,Ba|0)|0;za=oe(Ba|0,D|0,Aa|0,za|0)|0;e=oe(za|0,D|0,N|0,e|0)|0;e=oe(e|0,D|0,ya|0,j|0)|0;N=D;j=Pd(ya|0,j|0,26)|0;j=le(f|0,fa|0,j|0,D|0)|0;fa=oe(i|0,ea|0,33554432,0)|0;fa=Dd(fa|0,D|0,26)|0;f=D;ua=oe(xa|0,wa|0,va|0,ua|0)|0;sa=oe(ua|0,D|0,ta|0,sa|0)|0;qa=oe(sa|0,D|0,ra|0,qa|0)|0;oa=oe(qa|0,D|0,pa|0,oa|0)|0;ma=oe(oa|0,D|0,na|0,ma|0)|0;ka=oe(ma|0,D|0,la|0,ka|0)|0;ia=oe(ka|0,D|0,ja|0,ia|0)|0;ga=oe(ia|0,D|0,ha|0,ga|0)|0;h=oe(ga|0,D|0,L|0,h|0)|0;h=oe(h|0,D|0,fa|0,f|0)|0;L=D;f=Pd(fa|0,f|0,26)|0;f=le(i|0,ea|0,f|0,D|0)|0;ea=oe(e|0,N|0,16777216,0)|0;ea=Dd(ea|0,D|0,25)|0;i=D;b=oe(ea|0,i|0,r|0,b|0)|0;r=D;i=Pd(ea|0,i|0,25)|0;i=le(e|0,N|0,i|0,D|0)|0;N=oe(h|0,L|0,16777216,0)|0;N=Dd(N|0,D|0,25)|0;e=D;aa=oe(da|0,ca|0,ba|0,aa|0)|0;_=oe(aa|0,D|0,$|0,_|0)|0;Y=oe(_|0,D|0,Z|0,Y|0)|0;W=oe(Y|0,D|0,X|0,W|0)|0;U=oe(W|0,D|0,V|0,U|0)|0;S=oe(U|0,D|0,T|0,S|0)|0;Q=oe(S|0,D|0,R|0,Q|0)|0;O=oe(Q|0,D|0,P|0,O|0)|0;d=oe(O|0,D|0,q|0,d|0)|0;d=oe(d|0,D|0,N|0,e|0)|0;q=D;e=Pd(N|0,e|0,25)|0;e=le(h|0,L|0,e|0,D|0)|0;L=oe(b|0,r|0,33554432,0)|0;L=Dd(L|0,D|0,26)|0;h=D;g=oe(M|0,g|0,L|0,h|0)|0;h=Pd(L|0,h|0,26)|0;h=le(b|0,r|0,h|0,D|0)|0;r=oe(d|0,q|0,33554432,0)|0;r=Dd(r|0,D|0,26)|0;b=D;H=oe(K|0,J|0,I|0,H|0)|0;F=oe(H|0,D|0,G|0,F|0)|0;C=oe(F|0,D|0,E|0,C|0)|0;A=oe(C|0,D|0,B|0,A|0)|0;y=oe(A|0,D|0,z|0,y|0)|0;w=oe(y|0,D|0,x|0,w|0)|0;u=oe(w|0,D|0,v|0,u|0)|0;s=oe(u|0,D|0,t|0,s|0)|0;l=oe(s|0,D|0,o|0,l|0)|0;l=oe(l|0,D|0,r|0,b|0)|0;o=D;b=Pd(r|0,b|0,26)|0;b=le(d|0,q|0,b|0,D|0)|0;q=oe(l|0,o|0,16777216,0)|0;q=Dd(q|0,D|0,25)|0;d=D;r=Ed(q|0,d|0,19,0)|0;n=oe(r|0,D|0,m|0,n|0)|0;m=D;d=Pd(q|0,d|0,25)|0;d=le(l|0,o|0,d|0,D|0)|0;o=oe(n|0,m|0,33554432,0)|0;o=Dd(o|0,D|0,26)|0;l=D;k=oe(p|0,k|0,o|0,l|0)|0;l=Pd(o|0,l|0,26)|0;l=le(n|0,m|0,l|0,D|0)|0;c[a>>2]=l;c[a+4>>2]=k;c[a+8>>2]=j;c[a+12>>2]=i;c[a+16>>2]=h;c[a+20>>2]=g;c[a+24>>2]=f;c[a+28>>2]=e;c[a+32>>2]=b;c[a+36>>2]=d;return}function qa(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;l=c[b>>2]|0;n=c[b+4>>2]|0;k=c[b+8>>2]|0;f=c[b+12>>2]|0;u=c[b+16>>2]|0;t=c[b+20>>2]|0;g=c[b+24>>2]|0;v=c[b+28>>2]|0;s=c[b+32>>2]|0;q=c[b+36>>2]|0;cb=Ed(l|0,((l|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;bb=D;o=((l<<1|0)<0)<<31>>31;Ua=Ed(l<<1|0,o|0,n|0,((n|0)<0)<<31>>31|0)|0;Ta=D;Oa=Ed(k|0,((k|0)<0)<<31>>31|0,l<<1|0,o|0)|0;Na=D;Ea=Ed(f|0,((f|0)<0)<<31>>31|0,l<<1|0,o|0)|0;Da=D;sa=Ed(u|0,((u|0)<0)<<31>>31|0,l<<1|0,o|0)|0;ra=D;ia=Ed(t|0,((t|0)<0)<<31>>31|0,l<<1|0,o|0)|0;ha=D;_=Ed(g|0,((g|0)<0)<<31>>31|0,l<<1|0,o|0)|0;Z=D;Q=Ed(v|0,((v|0)<0)<<31>>31|0,l<<1|0,o|0)|0;P=D;G=Ed(s|0,((s|0)<0)<<31>>31|0,l<<1|0,o|0)|0;F=D;o=Ed(q|0,((q|0)<0)<<31>>31|0,l<<1|0,o|0)|0;l=D;p=((n<<1|0)<0)<<31>>31;Ma=Ed(n<<1|0,p|0,n|0,((n|0)<0)<<31>>31|0)|0;La=D;Ca=Ed(n<<1|0,p|0,k|0,((k|0)<0)<<31>>31|0)|0;Ba=D;w=((f<<1|0)<0)<<31>>31;wa=Ed(f<<1|0,w|0,n<<1|0,p|0)|0;va=D;ma=Ed(u|0,((u|0)<0)<<31>>31|0,n<<1|0,p|0)|0;la=D;aa=Ed(t<<1|0,((t<<1|0)<0)<<31>>31|0,n<<1|0,p|0)|0;$=D;S=Ed(g|0,((g|0)<0)<<31>>31|0,n<<1|0,p|0)|0;R=D;I=Ed(v<<1|0,((v<<1|0)<0)<<31>>31|0,n<<1|0,p|0)|0;H=D;m=Ed(s|0,((s|0)<0)<<31>>31|0,n<<1|0,p|0)|0;r=D;b=((q*38|0)<0)<<31>>31;p=Ed(q*38|0,b|0,n<<1|0,p|0)|0;n=D;ua=Ed(k|0,((k|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;ta=D;ka=Ed(k<<1|0,((k<<1|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;ja=D;ca=Ed(u|0,((u|0)<0)<<31>>31|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;ba=D;W=Ed(t|0,((t|0)<0)<<31>>31|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;V=D;O=Ed(g|0,((g|0)<0)<<31>>31|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;N=D;z=Ed(v|0,((v|0)<0)<<31>>31|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;y=D;Y=((s*19|0)<0)<<31>>31;Ya=Ed(s*19|0,Y|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;Xa=D;k=Ed(q*38|0,b|0,k|0,((k|0)<0)<<31>>31|0)|0;j=D;ea=Ed(f<<1|0,w|0,f|0,((f|0)<0)<<31>>31|0)|0;da=D;U=Ed(f<<1|0,w|0,u|0,((u|0)<0)<<31>>31|0)|0;T=D;K=Ed(t<<1|0,((t<<1|0)<0)<<31>>31|0,f<<1|0,w|0)|0;J=D;E=Ed(g|0,((g|0)<0)<<31>>31|0,f<<1|0,w|0)|0;C=D;qa=((v*38|0)<0)<<31>>31;_a=Ed(v*38|0,qa|0,f<<1|0,w|0)|0;Za=D;Qa=Ed(s*19|0,Y|0,f<<1|0,w|0)|0;Pa=D;w=Ed(q*38|0,b|0,f<<1|0,w|0)|0;f=D;M=Ed(u|0,((u|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;L=D;B=Ed(u<<1|0,((u<<1|0)<0)<<31>>31|0,t|0,((t|0)<0)<<31>>31|0)|0;A=D;ab=Ed(g*19|0,((g*19|0)<0)<<31>>31|0,u<<1|0,((u<<1|0)<0)<<31>>31|0)|0;$a=D;Sa=Ed(v*38|0,qa|0,u|0,((u|0)<0)<<31>>31|0)|0;Ra=D;Ga=Ed(s*19|0,Y|0,u<<1|0,((u<<1|0)<0)<<31>>31|0)|0;Fa=D;u=Ed(q*38|0,b|0,u|0,((u|0)<0)<<31>>31|0)|0;e=D;eb=Ed(t*38|0,((t*38|0)<0)<<31>>31|0,t|0,((t|0)<0)<<31>>31|0)|0;db=D;Wa=Ed(g*19|0,((g*19|0)<0)<<31>>31|0,t<<1|0,((t<<1|0)<0)<<31>>31|0)|0;Va=D;Ia=Ed(v*38|0,qa|0,t<<1|0,((t<<1|0)<0)<<31>>31|0)|0;Ha=D;ya=Ed(s*19|0,Y|0,t<<1|0,((t<<1|0)<0)<<31>>31|0)|0;xa=D;t=Ed(q*38|0,b|0,t<<1|0,((t<<1|0)<0)<<31>>31|0)|0;d=D;Ka=Ed(g*19|0,((g*19|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;Ja=D;Aa=Ed(v*38|0,qa|0,g|0,((g|0)<0)<<31>>31|0)|0;za=D;oa=Ed(s*19|0,Y|0,g<<1|0,((g<<1|0)<0)<<31>>31|0)|0;na=D;g=Ed(q*38|0,b|0,g|0,((g|0)<0)<<31>>31|0)|0;x=D;qa=Ed(v*38|0,qa|0,v|0,((v|0)<0)<<31>>31|0)|0;pa=D;ga=Ed(s*19|0,Y|0,v<<1|0,((v<<1|0)<0)<<31>>31|0)|0;fa=D;v=Ed(q*38|0,b|0,v<<1|0,((v<<1|0)<0)<<31>>31|0)|0;i=D;Y=Ed(s*19|0,Y|0,s|0,((s|0)<0)<<31>>31|0)|0;X=D;s=Ed(q*38|0,b|0,s|0,((s|0)<0)<<31>>31|0)|0;h=D;q=Ed(q*38|0,b|0,q|0,((q|0)<0)<<31>>31|0)|0;b=D;bb=oe(eb|0,db|0,cb|0,bb|0)|0;$a=oe(bb|0,D|0,ab|0,$a|0)|0;Za=oe($a|0,D|0,_a|0,Za|0)|0;Xa=oe(Za|0,D|0,Ya|0,Xa|0)|0;n=oe(Xa|0,D|0,p|0,n|0)|0;p=D;Ta=oe(Wa|0,Va|0,Ua|0,Ta|0)|0;Ra=oe(Ta|0,D|0,Sa|0,Ra|0)|0;Pa=oe(Ra|0,D|0,Qa|0,Pa|0)|0;j=oe(Pa|0,D|0,k|0,j|0)|0;k=D;La=oe(Oa|0,Na|0,Ma|0,La|0)|0;Ja=oe(La|0,D|0,Ka|0,Ja|0)|0;Ha=oe(Ja|0,D|0,Ia|0,Ha|0)|0;Fa=oe(Ha|0,D|0,Ga|0,Fa|0)|0;f=oe(Fa|0,D|0,w|0,f|0)|0;w=D;Ba=oe(Ea|0,Da|0,Ca|0,Ba|0)|0;za=oe(Ba|0,D|0,Aa|0,za|0)|0;xa=oe(za|0,D|0,ya|0,xa|0)|0;e=oe(xa|0,D|0,u|0,e|0)|0;u=D;ta=oe(wa|0,va|0,ua|0,ta|0)|0;ra=oe(ta|0,D|0,sa|0,ra|0)|0;pa=oe(ra|0,D|0,qa|0,pa|0)|0;na=oe(pa|0,D|0,oa|0,na|0)|0;d=oe(na|0,D|0,t|0,d|0)|0;t=D;ja=oe(ma|0,la|0,ka|0,ja|0)|0;ha=oe(ja|0,D|0,ia|0,ha|0)|0;fa=oe(ha|0,D|0,ga|0,fa|0)|0;x=oe(fa|0,D|0,g|0,x|0)|0;g=D;ba=oe(ea|0,da|0,ca|0,ba|0)|0;$=oe(ba|0,D|0,aa|0,$|0)|0;Z=oe($|0,D|0,_|0,Z|0)|0;X=oe(Z|0,D|0,Y|0,X|0)|0;i=oe(X|0,D|0,v|0,i|0)|0;v=D;T=oe(W|0,V|0,U|0,T|0)|0;R=oe(T|0,D|0,S|0,R|0)|0;P=oe(R|0,D|0,Q|0,P|0)|0;h=oe(P|0,D|0,s|0,h|0)|0;s=D;L=oe(O|0,N|0,M|0,L|0)|0;J=oe(L|0,D|0,K|0,J|0)|0;H=oe(J|0,D|0,I|0,H|0)|0;F=oe(H|0,D|0,G|0,F|0)|0;b=oe(F|0,D|0,q|0,b|0)|0;q=D;A=oe(E|0,C|0,B|0,A|0)|0;y=oe(A|0,D|0,z|0,y|0)|0;r=oe(y|0,D|0,m|0,r|0)|0;l=oe(r|0,D|0,o|0,l|0)|0;o=D;p=Pd(n|0,p|0,1)|0;n=D;k=Pd(j|0,k|0,1)|0;j=D;w=Pd(f|0,w|0,1)|0;f=D;u=Pd(e|0,u|0,1)|0;e=D;t=Pd(d|0,t|0,1)|0;d=D;g=Pd(x|0,g|0,1)|0;x=D;v=Pd(i|0,v|0,1)|0;i=D;s=Pd(h|0,s|0,1)|0;h=D;q=Pd(b|0,q|0,1)|0;b=D;o=Pd(l|0,o|0,1)|0;l=D;r=oe(p|0,n|0,33554432,0)|0;r=Dd(r|0,D|0,26)|0;m=D;j=oe(r|0,m|0,k|0,j|0)|0;k=D;m=Pd(r|0,m|0,26)|0;m=le(p|0,n|0,m|0,D|0)|0;n=D;p=oe(t|0,d|0,33554432,0)|0;p=Dd(p|0,D|0,26)|0;r=D;x=oe(p|0,r|0,g|0,x|0)|0;g=D;r=Pd(p|0,r|0,26)|0;r=le(t|0,d|0,r|0,D|0)|0;d=D;t=oe(j|0,k|0,16777216,0)|0;t=Dd(t|0,D|0,25)|0;p=D;f=oe(t|0,p|0,w|0,f|0)|0;w=D;p=Pd(t|0,p|0,25)|0;p=le(j|0,k|0,p|0,D|0)|0;k=D;j=oe(x|0,g|0,16777216,0)|0;j=Dd(j|0,D|0,25)|0;t=D;i=oe(j|0,t|0,v|0,i|0)|0;v=D;t=Pd(j|0,t|0,25)|0;t=le(x|0,g|0,t|0,D|0)|0;g=D;x=oe(f|0,w|0,33554432,0)|0;x=Dd(x|0,D|0,26)|0;j=D;e=oe(x|0,j|0,u|0,e|0)|0;u=D;j=Pd(x|0,j|0,26)|0;j=le(f|0,w|0,j|0,D|0)|0;w=oe(i|0,v|0,33554432,0)|0;w=Dd(w|0,D|0,26)|0;f=D;h=oe(w|0,f|0,s|0,h|0)|0;s=D;f=Pd(w|0,f|0,26)|0;f=le(i|0,v|0,f|0,D|0)|0;v=oe(e|0,u|0,16777216,0)|0;v=Dd(v|0,D|0,25)|0;i=D;d=oe(v|0,i|0,r|0,d|0)|0;r=D;i=Pd(v|0,i|0,25)|0;i=le(e|0,u|0,i|0,D|0)|0;u=oe(h|0,s|0,16777216,0)|0;u=Dd(u|0,D|0,25)|0;e=D;b=oe(u|0,e|0,q|0,b|0)|0;q=D;e=Pd(u|0,e|0,25)|0;e=le(h|0,s|0,e|0,D|0)|0;s=oe(d|0,r|0,33554432,0)|0;s=Dd(s|0,D|0,26)|0;h=D;g=oe(t|0,g|0,s|0,h|0)|0;h=Pd(s|0,h|0,26)|0;h=le(d|0,r|0,h|0,D|0)|0;r=oe(b|0,q|0,33554432,0)|0;r=Dd(r|0,D|0,26)|0;d=D;l=oe(r|0,d|0,o|0,l|0)|0;o=D;d=Pd(r|0,d|0,26)|0;d=le(b|0,q|0,d|0,D|0)|0;q=oe(l|0,o|0,16777216,0)|0;q=Dd(q|0,D|0,25)|0;b=D;r=Ed(q|0,b|0,19,0)|0;n=oe(r|0,D|0,m|0,n|0)|0;m=D;b=Pd(q|0,b|0,25)|0;b=le(l|0,o|0,b|0,D|0)|0;o=oe(n|0,m|0,33554432,0)|0;o=Dd(o|0,D|0,26)|0;l=D;k=oe(p|0,k|0,o|0,l|0)|0;l=Pd(o|0,l|0,26)|0;l=le(n|0,m|0,l|0,D|0)|0;c[a>>2]=l;c[a+4>>2]=k;c[a+8>>2]=j;c[a+12>>2]=i;c[a+16>>2]=h;c[a+20>>2]=g;c[a+24>>2]=f;c[a+28>>2]=e;c[a+32>>2]=d;c[a+36>>2]=b;return}function ra(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;l=c[b>>2]|0;p=c[b+4>>2]|0;k=c[b+8>>2]|0;f=c[b+12>>2]|0;C=c[b+16>>2]|0;d=c[b+20>>2]|0;g=c[b+24>>2]|0;O=c[b+28>>2]|0;A=c[b+32>>2]|0;q=c[b+36>>2]|0;cb=Ed(l|0,((l|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;bb=D;o=((l<<1|0)<0)<<31>>31;Ia=Ed(l<<1|0,o|0,p|0,((p|0)<0)<<31>>31|0)|0;Ha=D;Wa=Ed(k|0,((k|0)<0)<<31>>31|0,l<<1|0,o|0)|0;Va=D;Ua=Ed(f|0,((f|0)<0)<<31>>31|0,l<<1|0,o|0)|0;Ta=D;Oa=Ed(C|0,((C|0)<0)<<31>>31|0,l<<1|0,o|0)|0;Na=D;ya=Ed(d|0,((d|0)<0)<<31>>31|0,l<<1|0,o|0)|0;xa=D;ga=Ed(g|0,((g|0)<0)<<31>>31|0,l<<1|0,o|0)|0;fa=D;R=Ed(O|0,((O|0)<0)<<31>>31|0,l<<1|0,o|0)|0;Q=D;F=Ed(A|0,((A|0)<0)<<31>>31|0,l<<1|0,o|0)|0;E=D;o=Ed(q|0,((q|0)<0)<<31>>31|0,l<<1|0,o|0)|0;l=D;n=((p<<1|0)<0)<<31>>31;ta=Ed(p<<1|0,n|0,p|0,((p|0)<0)<<31>>31|0)|0;ua=D;ba=Ed(p<<1|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;ca=D;P=((f<<1|0)<0)<<31>>31;Sa=Ed(f<<1|0,P|0,p<<1|0,n|0)|0;Ra=D;Ca=Ed(C|0,((C|0)<0)<<31>>31|0,p<<1|0,n|0)|0;Ba=D;ia=Ed(d<<1|0,((d<<1|0)<0)<<31>>31|0,p<<1|0,n|0)|0;ha=D;T=Ed(g|0,((g|0)<0)<<31>>31|0,p<<1|0,n|0)|0;S=D;H=Ed(O<<1|0,((O<<1|0)<0)<<31>>31|0,p<<1|0,n|0)|0;G=D;t=Ed(A|0,((A|0)<0)<<31>>31|0,p<<1|0,n|0)|0;s=D;b=((q*38|0)<0)<<31>>31;n=Ed(q*38|0,b|0,p<<1|0,n|0)|0;p=D;Qa=Ed(k|0,((k|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;Pa=D;Aa=Ed(k<<1|0,((k<<1|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;za=D;ka=Ed(C|0,((C|0)<0)<<31>>31|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;ja=D;X=Ed(d|0,((d|0)<0)<<31>>31|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;W=D;N=Ed(g|0,((g|0)<0)<<31>>31|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;M=D;v=Ed(O|0,((O|0)<0)<<31>>31|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;u=D;ea=((A*19|0)<0)<<31>>31;Ya=Ed(A*19|0,ea|0,k<<1|0,((k<<1|0)<0)<<31>>31|0)|0;Xa=D;k=Ed(q*38|0,b|0,k|0,((k|0)<0)<<31>>31|0)|0;j=D;ma=Ed(f<<1|0,P|0,f|0,((f|0)<0)<<31>>31|0)|0;la=D;V=Ed(f<<1|0,P|0,C|0,((C|0)<0)<<31>>31|0)|0;U=D;J=Ed(d<<1|0,((d<<1|0)<0)<<31>>31|0,f<<1|0,P|0)|0;I=D;z=Ed(g|0,((g|0)<0)<<31>>31|0,f<<1|0,P|0)|0;y=D;Ma=((O*38|0)<0)<<31>>31;_a=Ed(O*38|0,Ma|0,f<<1|0,P|0)|0;Za=D;Ea=Ed(A*19|0,ea|0,f<<1|0,P|0)|0;Da=D;P=Ed(q*38|0,b|0,f<<1|0,P|0)|0;f=D;L=Ed(C|0,((C|0)<0)<<31>>31|0,C|0,((C|0)<0)<<31>>31|0)|0;K=D;x=Ed(C<<1|0,((C<<1|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;w=D;ab=Ed(g*19|0,((g*19|0)<0)<<31>>31|0,C<<1|0,((C<<1|0)<0)<<31>>31|0)|0;$a=D;Ga=Ed(O*38|0,Ma|0,C|0,((C|0)<0)<<31>>31|0)|0;Fa=D;oa=Ed(A*19|0,ea|0,C<<1|0,((C<<1|0)<0)<<31>>31|0)|0;na=D;C=Ed(q*38|0,b|0,C|0,((C|0)<0)<<31>>31|0)|0;e=D;eb=Ed(d*38|0,((d*38|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;db=D;Ka=Ed(g*19|0,((g*19|0)<0)<<31>>31|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;Ja=D;qa=Ed(O*38|0,Ma|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;pa=D;_=Ed(A*19|0,ea|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;Z=D;d=Ed(q*38|0,b|0,d<<1|0,((d<<1|0)<0)<<31>>31|0)|0;B=D;sa=Ed(g*19|0,((g*19|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;ra=D;aa=Ed(O*38|0,Ma|0,g|0,((g|0)<0)<<31>>31|0)|0;$=D;m=Ed(A*19|0,ea|0,g<<1|0,((g<<1|0)<0)<<31>>31|0)|0;r=D;g=Ed(q*38|0,b|0,g|0,((g|0)<0)<<31>>31|0)|0;Y=D;Ma=Ed(O*38|0,Ma|0,O|0,((O|0)<0)<<31>>31|0)|0;La=D;wa=Ed(A*19|0,ea|0,O<<1|0,((O<<1|0)<0)<<31>>31|0)|0;va=D;O=Ed(q*38|0,b|0,O<<1|0,((O<<1|0)<0)<<31>>31|0)|0;i=D;ea=Ed(A*19|0,ea|0,A|0,((A|0)<0)<<31>>31|0)|0;da=D;A=Ed(q*38|0,b|0,A|0,((A|0)<0)<<31>>31|0)|0;h=D;q=Ed(q*38|0,b|0,q|0,((q|0)<0)<<31>>31|0)|0;b=D;bb=oe(eb|0,db|0,cb|0,bb|0)|0;$a=oe(bb|0,D|0,ab|0,$a|0)|0;Za=oe($a|0,D|0,_a|0,Za|0)|0;Xa=oe(Za|0,D|0,Ya|0,Xa|0)|0;p=oe(Xa|0,D|0,n|0,p|0)|0;n=D;ua=oe(Wa|0,Va|0,ta|0,ua|0)|0;ta=D;ca=oe(Ua|0,Ta|0,ba|0,ca|0)|0;ba=D;Pa=oe(Sa|0,Ra|0,Qa|0,Pa|0)|0;Na=oe(Pa|0,D|0,Oa|0,Na|0)|0;La=oe(Na|0,D|0,Ma|0,La|0)|0;r=oe(La|0,D|0,m|0,r|0)|0;B=oe(r|0,D|0,d|0,B|0)|0;d=D;r=oe(p|0,n|0,33554432,0)|0;r=Dd(r|0,D|0,26)|0;m=D;Ha=oe(Ka|0,Ja|0,Ia|0,Ha|0)|0;Fa=oe(Ha|0,D|0,Ga|0,Fa|0)|0;Da=oe(Fa|0,D|0,Ea|0,Da|0)|0;j=oe(Da|0,D|0,k|0,j|0)|0;j=oe(j|0,D|0,r|0,m|0)|0;k=D;m=Pd(r|0,m|0,26)|0;m=le(p|0,n|0,m|0,D|0)|0;n=D;p=oe(B|0,d|0,33554432,0)|0;p=Dd(p|0,D|0,26)|0;r=D;za=oe(Ca|0,Ba|0,Aa|0,za|0)|0;xa=oe(za|0,D|0,ya|0,xa|0)|0;va=oe(xa|0,D|0,wa|0,va|0)|0;Y=oe(va|0,D|0,g|0,Y|0)|0;Y=oe(Y|0,D|0,p|0,r|0)|0;g=D;r=Pd(p|0,r|0,26)|0;r=le(B|0,d|0,r|0,D|0)|0;d=D;B=oe(j|0,k|0,16777216,0)|0;B=Dd(B|0,D|0,25)|0;p=D;ra=oe(ua|0,ta|0,sa|0,ra|0)|0;pa=oe(ra|0,D|0,qa|0,pa|0)|0;na=oe(pa|0,D|0,oa|0,na|0)|0;f=oe(na|0,D|0,P|0,f|0)|0;f=oe(f|0,D|0,B|0,p|0)|0;P=D;p=Pd(B|0,p|0,25)|0;p=le(j|0,k|0,p|0,D|0)|0;k=D;j=oe(Y|0,g|0,16777216,0)|0;j=Dd(j|0,D|0,25)|0;B=D;ja=oe(ma|0,la|0,ka|0,ja|0)|0;ha=oe(ja|0,D|0,ia|0,ha|0)|0;fa=oe(ha|0,D|0,ga|0,fa|0)|0;da=oe(fa|0,D|0,ea|0,da|0)|0;i=oe(da|0,D|0,O|0,i|0)|0;i=oe(i|0,D|0,j|0,B|0)|0;O=D;B=Pd(j|0,B|0,25)|0;B=le(Y|0,g|0,B|0,D|0)|0;g=D;Y=oe(f|0,P|0,33554432,0)|0;Y=Dd(Y|0,D|0,26)|0;j=D;$=oe(ca|0,ba|0,aa|0,$|0)|0;Z=oe($|0,D|0,_|0,Z|0)|0;e=oe(Z|0,D|0,C|0,e|0)|0;e=oe(e|0,D|0,Y|0,j|0)|0;C=D;j=Pd(Y|0,j|0,26)|0;j=le(f|0,P|0,j|0,D|0)|0;P=oe(i|0,O|0,33554432,0)|0;P=Dd(P|0,D|0,26)|0;f=D;U=oe(X|0,W|0,V|0,U|0)|0;S=oe(U|0,D|0,T|0,S|0)|0;Q=oe(S|0,D|0,R|0,Q|0)|0;h=oe(Q|0,D|0,A|0,h|0)|0;h=oe(h|0,D|0,P|0,f|0)|0;A=D;f=Pd(P|0,f|0,26)|0;f=le(i|0,O|0,f|0,D|0)|0;O=oe(e|0,C|0,16777216,0)|0;O=Dd(O|0,D|0,25)|0;i=D;d=oe(O|0,i|0,r|0,d|0)|0;r=D;i=Pd(O|0,i|0,25)|0;i=le(e|0,C|0,i|0,D|0)|0;C=oe(h|0,A|0,16777216,0)|0;C=Dd(C|0,D|0,25)|0;e=D;K=oe(N|0,M|0,L|0,K|0)|0;I=oe(K|0,D|0,J|0,I|0)|0;G=oe(I|0,D|0,H|0,G|0)|0;E=oe(G|0,D|0,F|0,E|0)|0;b=oe(E|0,D|0,q|0,b|0)|0;b=oe(b|0,D|0,C|0,e|0)|0;q=D;e=Pd(C|0,e|0,25)|0;e=le(h|0,A|0,e|0,D|0)|0;A=oe(d|0,r|0,33554432,0)|0;A=Dd(A|0,D|0,26)|0;h=D;g=oe(B|0,g|0,A|0,h|0)|0;h=Pd(A|0,h|0,26)|0;h=le(d|0,r|0,h|0,D|0)|0;r=oe(b|0,q|0,33554432,0)|0;r=Dd(r|0,D|0,26)|0;d=D;w=oe(z|0,y|0,x|0,w|0)|0;u=oe(w|0,D|0,v|0,u|0)|0;s=oe(u|0,D|0,t|0,s|0)|0;l=oe(s|0,D|0,o|0,l|0)|0;l=oe(l|0,D|0,r|0,d|0)|0;o=D;d=Pd(r|0,d|0,26)|0;d=le(b|0,q|0,d|0,D|0)|0;q=oe(l|0,o|0,16777216,0)|0;q=Dd(q|0,D|0,25)|0;b=D;r=Ed(q|0,b|0,19,0)|0;n=oe(r|0,D|0,m|0,n|0)|0;m=D;b=Pd(q|0,b|0,25)|0;b=le(l|0,o|0,b|0,D|0)|0;o=oe(n|0,m|0,33554432,0)|0;o=Dd(o|0,D|0,26)|0;l=D;k=oe(p|0,k|0,o|0,l|0)|0;l=Pd(o|0,l|0,26)|0;l=le(n|0,m|0,l|0,D|0)|0;c[a>>2]=l;c[a+4>>2]=k;c[a+8>>2]=j;c[a+12>>2]=i;c[a+16>>2]=h;c[a+20>>2]=g;c[a+24>>2]=f;c[a+28>>2]=e;c[a+32>>2]=d;c[a+36>>2]=b;return}function sa(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;n=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;p=d[g+4>>0]|d[g+4+1>>0]<<8|d[g+4+2>>0]<<16|d[g+4+3>>0]<<24;h=d[g+8>>0]|d[g+8+1>>0]<<8|d[g+8+2>>0]<<16|d[g+8+3>>0]<<24;i=d[g+8+4>>0]|d[g+8+4+1>>0]<<8|d[g+8+4+2>>0]<<16|d[g+8+4+3>>0]<<24;f=Pd(e|0,f|0,56)|0;g=D;if((c+e+(0-(e&7))|0)==(c|0)){o=h^2037671283;l=i^1952801890;m=n^1886610805;k=p^1936682341;j=h^1852075885;s=i^1685025377;i=n^1852142177;h=p^1819895653}else{u=c;r=h^2037671283;l=i^1952801890;o=n^1886610805;m=p^1936682341;k=h^1852075885;j=i^1685025377;i=n^1852142177;h=p^1819895653;while(1){v=u;t=d[v>>0]|d[v+1>>0]<<8|d[v+2>>0]<<16|d[v+3>>0]<<24;v=d[v+4>>0]|d[v+4+1>>0]<<8|d[v+4+2>>0]<<16|d[v+4+3>>0]<<24;p=t^r;r=v^l;m=oe(o|0,m|0,k|0,j|0)|0;n=D;q=Pd(k|0,j|0,13)|0;s=D;x=Rd(k|0,j|0,51)|0;s=(s|D)^n;h=oe(p|0,r|0,i|0,h|0)|0;i=D;o=Pd(p|0,r|0,16)|0;j=D;k=Rd(p|0,r|0,48)|0;j=(j|D)^i;n=oe((o|k)^h|0,j|0,n|0,m|0)|0;r=D;l=Pd((o|k)^h|0,j|0,21)|0;p=D;j=Rd((o|k)^h|0,j|0,43)|0;p=(p|D)^r;i=oe(h|0,i|0,(q|x)^m|0,s|0)|0;h=D;k=Pd((q|x)^m|0,s|0,17)|0;o=D;s=Rd((q|x)^m|0,s|0,47)|0;o=h^(o|D);r=oe(n|0,r|0,i^(k|s)|0,o|0)|0;m=D;x=Pd(i^(k|s)|0,o|0,13)|0;q=D;o=Rd(i^(k|s)|0,o|0,51)|0;q=(q|D)^m;i=oe((l|j)^n|0,p|0,h|0,i|0)|0;h=D;s=Pd((l|j)^n|0,p|0,16)|0;k=D;p=Rd((l|j)^n|0,p|0,48)|0;k=(k|D)^h;m=oe((s|p)^i|0,k|0,m|0,r|0)|0;n=D;j=Pd((s|p)^i|0,k|0,21)|0;l=D;k=Rd((s|p)^i|0,k|0,43)|0;l=(l|D)^n;h=oe(i|0,h|0,(x|o)^r|0,q|0)|0;i=D;p=Pd((x|o)^r|0,q|0,17)|0;s=D;q=Rd((x|o)^r|0,q|0,47)|0;s=(s|D)^i;u=u+8|0;if((u|0)==(c+e+(0-(e&7))|0)){c=c+e+(0-(e&7))|0;o=(j|k)^m;m=m^t;k=n^v;j=(p|q)^h;break}else{r=(j|k)^m;o=m^t;m=n^v;k=(p|q)^h;j=s}}}switch(e&7){case 7:{f=Pd(d[c+6>>0]|0|0,0,48)|0|f;g=D|g;w=5;break}case 6:{w=5;break}case 5:{w=6;break}case 4:{w=7;break}case 3:{w=8;break}case 2:{w=9;break}case 1:{w=10;break}default:{}}if((w|0)==5){x=Pd(d[c+5>>0]|0|0,0,40)|0;g=D|g;f=x|f;w=6}if((w|0)==6){g=d[c+4>>0]|0|g;w=7}if((w|0)==7){x=Pd(d[c+3>>0]|0|0,0,24)|0;f=x|f;g=D|g;w=8}if((w|0)==8){x=Pd(d[c+2>>0]|0|0,0,16)|0;f=x|f;g=D|g;w=9}if((w|0)==9){x=Pd(d[c+1>>0]|0|0,0,8)|0;f=x|f;g=D|g;w=10}if((w|0)==10)f=d[c>>0]|0|f;u=f^o;n=g^l;e=oe(m|0,k|0,j|0,s|0)|0;q=D;m=Pd(j|0,s|0,13)|0;r=D;p=Rd(j|0,s|0,51)|0;r=(r|D)^q;v=oe(u|0,n|0,i|0,h|0)|0;c=D;w=Pd(u|0,n|0,16)|0;x=D;n=Rd(u|0,n|0,48)|0;x=(x|D)^c;q=oe((w|n)^v|0,x|0,q|0,e|0)|0;u=D;o=Pd((w|n)^v|0,x|0,21)|0;t=D;x=Rd((w|n)^v|0,x|0,43)|0;t=(t|D)^u;c=oe(v|0,c|0,(m|p)^e|0,r|0)|0;v=D;n=Pd((m|p)^e|0,r|0,17)|0;w=D;r=Rd((m|p)^e|0,r|0,47)|0;w=v^(w|D);u=oe(q|0,u|0,c^(n|r)|0,w|0)|0;e=D;p=Pd(c^(n|r)|0,w|0,13)|0;s=D;w=Rd(c^(n|r)|0,w|0,51)|0;s=(s|D)^e;c=oe((o|x)^q|0,t|0,v|0,c|0)|0;v=D;r=Pd((o|x)^q|0,t|0,16)|0;n=D;t=Rd((o|x)^q|0,t|0,48)|0;n=(n|D)^v;e=oe((r|t)^c|0,n|0,e|0,u|0)|0;q=D;x=Pd((r|t)^c|0,n|0,21)|0;o=D;n=Rd((r|t)^c|0,n|0,43)|0;o=(o|D)^q;v=oe(c|0,v|0,(p|w)^u|0,s|0)|0;c=D;t=Pd((p|w)^u|0,s|0,17)|0;r=D;s=Rd((p|w)^u|0,s|0,47)|0;r=(r|D)^c;q=oe(e^f|0,q^g|0,(t|s)^v|0,r|0)|0;u=D;w=Pd((t|s)^v|0,r|0,13)|0;p=D;r=Rd((t|s)^v|0,r|0,51)|0;p=u^(p|D);v=oe((x|n)^e|0,o|0,c^255|0,v|0)|0;c=D;s=Pd((x|n)^e|0,o|0,16)|0;t=D;o=Rd((x|n)^e|0,o|0,48)|0;t=(t|D)^c;u=oe((s|o)^v|0,t|0,u|0,q|0)|0;e=D;n=Pd((s|o)^v|0,t|0,21)|0;x=D;t=Rd((s|o)^v|0,t|0,43)|0;x=(x|D)^e;c=oe(v|0,c|0,q^(w|r)|0,p|0)|0;v=D;o=Pd(q^(w|r)|0,p|0,17)|0;s=D;p=Rd(q^(w|r)|0,p|0,47)|0;s=(s|D)^v;e=oe(u|0,e|0,(o|p)^c|0,s|0)|0;r=D;w=Pd((o|p)^c|0,s|0,13)|0;q=D;s=Rd((o|p)^c|0,s|0,51)|0;q=(q|D)^r;c=oe((n|t)^u|0,x|0,v|0,c|0)|0;v=D;p=Pd((n|t)^u|0,x|0,16)|0;o=D;x=Rd((n|t)^u|0,x|0,48)|0;o=(o|D)^v;r=oe((p|x)^c|0,o|0,r|0,e|0)|0;u=D;t=Pd((p|x)^c|0,o|0,21)|0;n=D;o=Rd((p|x)^c|0,o|0,43)|0;n=(n|D)^u;v=oe(c|0,v|0,(w|s)^e|0,q|0)|0;c=D;x=Pd((w|s)^e|0,q|0,17)|0;p=D;q=Rd((w|s)^e|0,q|0,47)|0;p=(p|D)^c;u=oe(r|0,u|0,(x|q)^v|0,p|0)|0;e=D;s=Pd((x|q)^v|0,p|0,13)|0;w=D;p=Rd((x|q)^v|0,p|0,51)|0;w=(w|D)^e;v=oe((t|o)^r|0,n|0,c|0,v|0)|0;c=D;q=Pd((t|o)^r|0,n|0,16)|0;x=D;n=Rd((t|o)^r|0,n|0,48)|0;x=(x|D)^c;e=oe((q|n)^v|0,x|0,e|0,u|0)|0;r=D;o=Pd((q|n)^v|0,x|0,21)|0;t=D;x=Rd((q|n)^v|0,x|0,43)|0;t=(t|D)^r;c=oe(v|0,c|0,(s|p)^u|0,w|0)|0;v=D;n=Pd((s|p)^u|0,w|0,17)|0;q=D;w=Rd((s|p)^u|0,w|0,47)|0;q=(q|D)^v;r=oe(e|0,r|0,(n|w)^c|0,q|0)|0;u=D;p=Pd((n|w)^c|0,q|0,13)|0;s=D;q=Rd((n|w)^c|0,q|0,51)|0;u=(s|D)^u;c=oe((o|x)^e|0,t|0,v|0,c|0)|0;v=D;s=Pd((o|x)^e|0,t|0,16)|0;w=D;t=Rd((o|x)^e|0,t|0,48)|0;w=(w|D)^v;e=Pd((s|t)^c|0,w|0,21)|0;x=D;w=Rd((s|t)^c|0,w|0,43)|0;x=x|D;v=oe(c|0,v|0,(p|q)^r|0,u|0)|0;c=D;t=Pd((p|q)^r|0,u|0,17)|0;s=D;u=Rd((p|q)^r|0,u|0,47)|0;x=(s|D)^c^v^x;a[b>>0]=(t|u)^v^c^(e|w);a[b+1>>0]=((t|u)^v^c^(e|w))>>8;a[b+2>>0]=((t|u)^v^c^(e|w))>>16;a[b+3>>0]=((t|u)^v^c^(e|w))>>24;a[b+4>>0]=x;a[b+4+1>>0]=x>>8;a[b+4+2>>0]=x>>16;a[b+4+3>>0]=x>>24;return 0}function ta(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!a)return;h=c[8495]|0;if((a+-8|0)>>>0<h>>>0)ba();b=c[a+-4>>2]|0;if((b&3|0)==1)ba();n=a+-8+(b&-8)|0;do if(!(b&1)){e=c[a+-8>>2]|0;if(!(b&3))return;k=a+-8+(0-e)|0;j=e+(b&-8)|0;if(k>>>0<h>>>0)ba();if((k|0)==(c[8496]|0)){a=c[n+4>>2]|0;if((a&3|0)!=3){q=k;f=j;break}c[8493]=j;c[n+4>>2]=a&-2;c[k+4>>2]=j|1;c[k+j>>2]=j;return}if(e>>>0<256){a=c[k+8>>2]|0;b=c[k+12>>2]|0;if((a|0)!=(34004+(e>>>3<<1<<2)|0)){if(a>>>0<h>>>0)ba();if((c[a+12>>2]|0)!=(k|0))ba()}if((b|0)==(a|0)){c[8491]=c[8491]&~(1<<(e>>>3));q=k;f=j;break}if((b|0)!=(34004+(e>>>3<<1<<2)|0)){if(b>>>0<h>>>0)ba();if((c[b+8>>2]|0)!=(k|0))ba();else d=b+8|0}else d=b+8|0;c[a+12>>2]=b;c[d>>2]=a;q=k;f=j;break}g=c[k+24>>2]|0;a=c[k+12>>2]|0;do if((a|0)==(k|0)){a=c[k+16+4>>2]|0;if(!a){a=c[k+16>>2]|0;if(!a){i=0;break}else e=k+16|0}else e=k+16+4|0;while(1){b=a+20|0;d=c[b>>2]|0;if(d|0){a=d;e=b;continue}b=a+16|0;d=c[b>>2]|0;if(!d)break;else{a=d;e=b}}if(e>>>0<h>>>0)ba();else{c[e>>2]=0;i=a;break}}else{b=c[k+8>>2]|0;if(b>>>0<h>>>0)ba();if((c[b+12>>2]|0)!=(k|0))ba();if((c[a+8>>2]|0)==(k|0)){c[b+12>>2]=a;c[a+8>>2]=b;i=a;break}else ba()}while(0);if(g){a=c[k+28>>2]|0;if((k|0)==(c[34268+(a<<2)>>2]|0)){c[34268+(a<<2)>>2]=i;if(!i){c[8492]=c[8492]&~(1<<a);q=k;f=j;break}}else{if(g>>>0<(c[8495]|0)>>>0)ba();if((c[g+16>>2]|0)==(k|0))c[g+16>>2]=i;else c[g+20>>2]=i;if(!i){q=k;f=j;break}}b=c[8495]|0;if(i>>>0<b>>>0)ba();c[i+24>>2]=g;a=c[k+16>>2]|0;do if(a|0)if(a>>>0<b>>>0)ba();else{c[i+16>>2]=a;c[a+24>>2]=i;break}while(0);a=c[k+16+4>>2]|0;if(a)if(a>>>0<(c[8495]|0)>>>0)ba();else{c[i+20>>2]=a;c[a+24>>2]=i;q=k;f=j;break}else{q=k;f=j}}else{q=k;f=j}}else{q=a+-8|0;f=b&-8}while(0);if(q>>>0>=n>>>0)ba();d=c[n+4>>2]|0;if(!(d&1))ba();if(!(d&2)){if((n|0)==(c[8497]|0)){p=(c[8494]|0)+f|0;c[8494]=p;c[8497]=q;c[q+4>>2]=p|1;if((q|0)!=(c[8496]|0))return;c[8496]=0;c[8493]=0;return}if((n|0)==(c[8496]|0)){p=(c[8493]|0)+f|0;c[8493]=p;c[8496]=q;c[q+4>>2]=p|1;c[q+p>>2]=p;return}f=(d&-8)+f|0;do if(d>>>0>=256){g=c[n+24>>2]|0;a=c[n+12>>2]|0;do if((a|0)==(n|0)){a=c[n+16+4>>2]|0;if(!a){a=c[n+16>>2]|0;if(!a){m=0;break}else e=n+16|0}else e=n+16+4|0;while(1){b=a+20|0;d=c[b>>2]|0;if(d|0){a=d;e=b;continue}b=a+16|0;d=c[b>>2]|0;if(!d)break;else{a=d;e=b}}if(e>>>0<(c[8495]|0)>>>0)ba();else{c[e>>2]=0;m=a;break}}else{b=c[n+8>>2]|0;if(b>>>0<(c[8495]|0)>>>0)ba();if((c[b+12>>2]|0)!=(n|0))ba();if((c[a+8>>2]|0)==(n|0)){c[b+12>>2]=a;c[a+8>>2]=b;m=a;break}else ba()}while(0);if(g|0){a=c[n+28>>2]|0;if((n|0)==(c[34268+(a<<2)>>2]|0)){c[34268+(a<<2)>>2]=m;if(!m){c[8492]=c[8492]&~(1<<a);break}}else{if(g>>>0<(c[8495]|0)>>>0)ba();if((c[g+16>>2]|0)==(n|0))c[g+16>>2]=m;else c[g+20>>2]=m;if(!m)break}b=c[8495]|0;if(m>>>0<b>>>0)ba();c[m+24>>2]=g;a=c[n+16>>2]|0;do if(a|0)if(a>>>0<b>>>0)ba();else{c[m+16>>2]=a;c[a+24>>2]=m;break}while(0);a=c[n+16+4>>2]|0;if(a|0)if(a>>>0<(c[8495]|0)>>>0)ba();else{c[m+20>>2]=a;c[a+24>>2]=m;break}}}else{a=c[n+8>>2]|0;b=c[n+12>>2]|0;if((a|0)!=(34004+(d>>>3<<1<<2)|0)){if(a>>>0<(c[8495]|0)>>>0)ba();if((c[a+12>>2]|0)!=(n|0))ba()}if((b|0)==(a|0)){c[8491]=c[8491]&~(1<<(d>>>3));break}if((b|0)!=(34004+(d>>>3<<1<<2)|0)){if(b>>>0<(c[8495]|0)>>>0)ba();if((c[b+8>>2]|0)!=(n|0))ba();else l=b+8|0}else l=b+8|0;c[a+12>>2]=b;c[l>>2]=a}while(0);c[q+4>>2]=f|1;c[q+f>>2]=f;if((q|0)==(c[8496]|0)){c[8493]=f;return}}else{c[n+4>>2]=d&-2;c[q+4>>2]=f|1;c[q+f>>2]=f}b=f>>>3;if(f>>>0<256){a=c[8491]|0;if(a&1<<b){a=c[34004+(b<<1<<2)+8>>2]|0;if(a>>>0<(c[8495]|0)>>>0)ba();else{o=a;p=34004+(b<<1<<2)+8|0}}else{c[8491]=a|1<<b;o=34004+(b<<1<<2)|0;p=34004+(b<<1<<2)+8|0}c[p>>2]=q;c[o+12>>2]=q;c[q+8>>2]=o;c[q+12>>2]=34004+(b<<1<<2);return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=a<<((a+1048320|0)>>>16&8)<<(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4);a=14-(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4|(a+1048320|0)>>>16&8|(p+245760|0)>>>16&2)+(p<<((p+245760|0)>>>16&2)>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=34268+(a<<2)|0;c[q+28>>2]=a;c[q+20>>2]=0;c[q+16>>2]=0;b=c[8492]|0;d=1<<a;do if(b&d){b=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=130;break}d=e+16+(b>>>31<<2)|0;a=c[d>>2]|0;if(!a){a=127;break}else{b=b<<1;e=a}}if((a|0)==127)if(d>>>0<(c[8495]|0)>>>0)ba();else{c[d>>2]=q;c[q+24>>2]=e;c[q+12>>2]=q;c[q+8>>2]=q;break}else if((a|0)==130){a=e+8|0;b=c[a>>2]|0;p=c[8495]|0;if(b>>>0>=p>>>0&e>>>0>=p>>>0){c[b+12>>2]=q;c[a>>2]=q;c[q+8>>2]=b;c[q+12>>2]=e;c[q+24>>2]=0;break}else ba()}}else{c[8492]=b|d;c[e>>2]=q;c[q+24>>2]=e;c[q+12>>2]=q;c[q+8>>2]=q}while(0);q=(c[8499]|0)+-1|0;c[8499]=q;if(!q)a=34420;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[8499]=-1;return}function ua(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c[a+4>>2]|0;do if(!(d&1)){l=c[a>>2]|0;if(!(d&3))return;j=c[8495]|0;if((a+(0-l)|0)>>>0<j>>>0)ba();if((a+(0-l)|0)==(c[8496]|0)){d=c[a+b+4>>2]|0;if((d&3|0)!=3){q=a+(0-l)|0;h=l+b|0;break}c[8493]=l+b;c[a+b+4>>2]=d&-2;c[a+(0-l)+4>>2]=l+b|1;c[a+(0-l)+(l+b)>>2]=l+b;return}if(l>>>0<256){d=c[a+(0-l)+8>>2]|0;e=c[a+(0-l)+12>>2]|0;if((d|0)!=(34004+(l>>>3<<1<<2)|0)){if(d>>>0<j>>>0)ba();if((c[d+12>>2]|0)!=(a+(0-l)|0))ba()}if((e|0)==(d|0)){c[8491]=c[8491]&~(1<<(l>>>3));q=a+(0-l)|0;h=l+b|0;break}if((e|0)!=(34004+(l>>>3<<1<<2)|0)){if(e>>>0<j>>>0)ba();if((c[e+8>>2]|0)!=(a+(0-l)|0))ba();else f=e+8|0}else f=e+8|0;c[d+12>>2]=e;c[f>>2]=d;q=a+(0-l)|0;h=l+b|0;break}i=c[a+(0-l)+24>>2]|0;d=c[a+(0-l)+12>>2]|0;do if((d|0)==(a+(0-l)|0)){e=a+(0-l)+16|0;d=c[e+4>>2]|0;if(!d){d=c[e>>2]|0;if(!d){k=0;break}}else e=e+4|0;while(1){f=d+20|0;g=c[f>>2]|0;if(g|0){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0<j>>>0)ba();else{c[e>>2]=0;k=d;break}}else{e=c[a+(0-l)+8>>2]|0;if(e>>>0<j>>>0)ba();if((c[e+12>>2]|0)!=(a+(0-l)|0))ba();if((c[d+8>>2]|0)==(a+(0-l)|0)){c[e+12>>2]=d;c[d+8>>2]=e;k=d;break}else ba()}while(0);if(i){d=c[a+(0-l)+28>>2]|0;if((a+(0-l)|0)==(c[34268+(d<<2)>>2]|0)){c[34268+(d<<2)>>2]=k;if(!k){c[8492]=c[8492]&~(1<<d);q=a+(0-l)|0;h=l+b|0;break}}else{if(i>>>0<(c[8495]|0)>>>0)ba();if((c[i+16>>2]|0)==(a+(0-l)|0))c[i+16>>2]=k;else c[i+20>>2]=k;if(!k){q=a+(0-l)|0;h=l+b|0;break}}e=c[8495]|0;if(k>>>0<e>>>0)ba();c[k+24>>2]=i;d=c[a+(0-l)+16>>2]|0;do if(d|0)if(d>>>0<e>>>0)ba();else{c[k+16>>2]=d;c[d+24>>2]=k;break}while(0);d=c[a+(0-l)+16+4>>2]|0;if(d)if(d>>>0<(c[8495]|0)>>>0)ba();else{c[k+20>>2]=d;c[d+24>>2]=k;q=a+(0-l)|0;h=l+b|0;break}else{q=a+(0-l)|0;h=l+b|0}}else{q=a+(0-l)|0;h=l+b|0}}else{q=a;h=b}while(0);j=c[8495]|0;if((a+b|0)>>>0<j>>>0)ba();f=c[a+b+4>>2]|0;if(!(f&2)){if((a+b|0)==(c[8497]|0)){p=(c[8494]|0)+h|0;c[8494]=p;c[8497]=q;c[q+4>>2]=p|1;if((q|0)!=(c[8496]|0))return;c[8496]=0;c[8493]=0;return}if((a+b|0)==(c[8496]|0)){p=(c[8493]|0)+h|0;c[8493]=p;c[8496]=q;c[q+4>>2]=p|1;c[q+p>>2]=p;return}h=(f&-8)+h|0;do if(f>>>0>=256){i=c[a+b+24>>2]|0;d=c[a+b+12>>2]|0;do if((d|0)==(a+b|0)){d=c[a+b+16+4>>2]|0;if(!d){d=c[a+b+16>>2]|0;if(!d){n=0;break}else g=a+b+16|0}else g=a+b+16+4|0;while(1){e=d+20|0;f=c[e>>2]|0;if(f|0){d=f;g=e;continue}e=d+16|0;f=c[e>>2]|0;if(!f)break;else{d=f;g=e}}if(g>>>0<j>>>0)ba();else{c[g>>2]=0;n=d;break}}else{e=c[a+b+8>>2]|0;if(e>>>0<j>>>0)ba();if((c[e+12>>2]|0)!=(a+b|0))ba();if((c[d+8>>2]|0)==(a+b|0)){c[e+12>>2]=d;c[d+8>>2]=e;n=d;break}else ba()}while(0);if(i|0){d=c[a+b+28>>2]|0;if((a+b|0)==(c[34268+(d<<2)>>2]|0)){c[34268+(d<<2)>>2]=n;if(!n){c[8492]=c[8492]&~(1<<d);break}}else{if(i>>>0<(c[8495]|0)>>>0)ba();if((c[i+16>>2]|0)==(a+b|0))c[i+16>>2]=n;else c[i+20>>2]=n;if(!n)break}e=c[8495]|0;if(n>>>0<e>>>0)ba();c[n+24>>2]=i;d=c[a+b+16>>2]|0;do if(d|0)if(d>>>0<e>>>0)ba();else{c[n+16>>2]=d;c[d+24>>2]=n;break}while(0);d=c[a+b+16+4>>2]|0;if(d|0)if(d>>>0<(c[8495]|0)>>>0)ba();else{c[n+20>>2]=d;c[d+24>>2]=n;break}}}else{d=c[a+b+8>>2]|0;e=c[a+b+12>>2]|0;if((d|0)!=(34004+(f>>>3<<1<<2)|0)){if(d>>>0<j>>>0)ba();if((c[d+12>>2]|0)!=(a+b|0))ba()}if((e|0)==(d|0)){c[8491]=c[8491]&~(1<<(f>>>3));break}if((e|0)!=(34004+(f>>>3<<1<<2)|0)){if(e>>>0<j>>>0)ba();if((c[e+8>>2]|0)!=(a+b|0))ba();else m=e+8|0}else m=e+8|0;c[d+12>>2]=e;c[m>>2]=d}while(0);c[q+4>>2]=h|1;c[q+h>>2]=h;if((q|0)==(c[8496]|0)){c[8493]=h;return}}else{c[a+b+4>>2]=f&-2;c[q+4>>2]=h|1;c[q+h>>2]=h}e=h>>>3;if(h>>>0<256){d=c[8491]|0;if(d&1<<e){d=c[34004+(e<<1<<2)+8>>2]|0;if(d>>>0<(c[8495]|0)>>>0)ba();else{o=d;p=34004+(e<<1<<2)+8|0}}else{c[8491]=d|1<<e;o=34004+(e<<1<<2)|0;p=34004+(e<<1<<2)+8|0}c[p>>2]=q;c[o+12>>2]=q;c[q+8>>2]=o;c[q+12>>2]=34004+(e<<1<<2);return}d=h>>>8;if(d)if(h>>>0>16777215)d=31;else{p=d<<((d+1048320|0)>>>16&8)<<(((d<<((d+1048320|0)>>>16&8))+520192|0)>>>16&4);d=14-(((d<<((d+1048320|0)>>>16&8))+520192|0)>>>16&4|(d+1048320|0)>>>16&8|(p+245760|0)>>>16&2)+(p<<((p+245760|0)>>>16&2)>>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;g=34268+(d<<2)|0;c[q+28>>2]=d;c[q+20>>2]=0;c[q+16>>2]=0;e=c[8492]|0;f=1<<d;if(!(e&f)){c[8492]=e|f;c[g>>2]=q;c[q+24>>2]=g;c[q+12>>2]=q;c[q+8>>2]=q;return}e=h<<((d|0)==31?0:25-(d>>>1)|0);g=c[g>>2]|0;while(1){if((c[g+4>>2]&-8|0)==(h|0)){d=127;break}f=g+16+(e>>>31<<2)|0;d=c[f>>2]|0;if(!d){d=124;break}else{e=e<<1;g=d}}if((d|0)==124){if(f>>>0<(c[8495]|0)>>>0)ba();c[f>>2]=q;c[q+24>>2]=g;c[q+12>>2]=q;c[q+8>>2]=q;return}else if((d|0)==127){d=g+8|0;e=c[d>>2]|0;p=c[8495]|0;if(!(e>>>0>=p>>>0&g>>>0>=p>>>0))ba();c[e+12>>2]=q;c[d>>2]=q;c[q+8>>2]=e;c[q+12>>2]=g;c[q+24>>2]=0;return}}function va(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;V=i;U=i=i+63&-64;i=i+64|0;if(!((g|0)==0&(h|0)==0)){if(h>>>0>63|(h|0)==63&g>>>0>4294967232)ba();G=c[b>>2]|0;H=c[b+4>>2]|0;I=c[b+8>>2]|0;J=c[b+12>>2]|0;K=c[b+16>>2]|0;L=c[b+20>>2]|0;M=c[b+24>>2]|0;N=c[b+28>>2]|0;O=c[b+32>>2]|0;P=c[b+36>>2]|0;Q=c[b+40>>2]|0;R=c[b+44>>2]|0;S=c[b+56>>2]|0;T=c[b+60>>2]|0;j=0;C=c[b+52>>2]|0;A=c[b+48>>2]|0;E=h;F=g;while(1){B=E>>>0<0|(E|0)==0&F>>>0<64;if(B){h=U;g=h+64|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(g|0));h=0;do{a[U+h>>0]=a[e+h>>0]|0;h=h+1|0}while(0<E>>>0|0==(E|0)&h>>>0<F>>>0);j=f;e=U;f=U}h=G;k=H;l=I;m=J;n=K;o=L;p=M;q=N;r=O;s=P;t=Q;u=T;v=S;w=C;x=A;y=R;g=20;do{na=h+n|0;ca=na^x;aa=(ca<<16|ca>>>16)+r|0;ma=aa^n;ca=(ma<<12|ma>>>20)+na^(ca<<16|ca>>>16);z=(ca<<8|ca>>>24)+aa^(ma<<12|ma>>>20);ja=k+o|0;X=ja^w;W=(X<<16|X>>>16)+s|0;ia=W^o;X=(ia<<12|ia>>>20)+ja^(X<<16|X>>>16);ka=(X<<8|X>>>24)+W^(ia<<12|ia>>>20);ea=l+p|0;Y=ea^v;la=(Y<<16|Y>>>16)+t|0;da=la^p;Y=(da<<12|da>>>20)+ea^(Y<<16|Y>>>16);fa=(Y<<8|Y>>>24)+la^(da<<12|da>>>20);Z=m+q|0;ha=Z^u;ga=(ha<<16|ha>>>16)+y|0;_=ga^q;ha=(_<<12|_>>>20)+Z^(ha<<16|ha>>>16);$=(ha<<8|ha>>>24)+ga^(_<<12|_>>>20);na=(ka<<7|ka>>>25)+((ma<<12|ma>>>20)+na)|0;ma=(na^(ha<<8|ha>>>24))<<16|(na^(ha<<8|ha>>>24))>>>16;ka=ma+((Y<<8|Y>>>24)+la)^(ka<<7|ka>>>25);h=(ka<<12|ka>>>20)+na|0;na=h^ma;u=na<<8|na>>>24;t=u+(ma+((Y<<8|Y>>>24)+la))|0;ka=t^(ka<<12|ka>>>20);o=ka<<7|ka>>>25;ja=(fa<<7|fa>>>25)+((ia<<12|ia>>>20)+ja)|0;ia=(ja^(ca<<8|ca>>>24))<<16|(ja^(ca<<8|ca>>>24))>>>16;fa=ia+((ha<<8|ha>>>24)+ga)^(fa<<7|fa>>>25);k=(fa<<12|fa>>>20)+ja|0;ja=k^ia;x=ja<<8|ja>>>24;y=x+(ia+((ha<<8|ha>>>24)+ga))|0;fa=y^(fa<<12|fa>>>20);p=fa<<7|fa>>>25;ea=($<<7|$>>>25)+((da<<12|da>>>20)+ea)|0;da=(ea^(X<<8|X>>>24))<<16|(ea^(X<<8|X>>>24))>>>16;$=da+((ca<<8|ca>>>24)+aa)^($<<7|$>>>25);l=($<<12|$>>>20)+ea|0;ea=l^da;w=ea<<8|ea>>>24;r=w+(da+((ca<<8|ca>>>24)+aa))|0;$=r^($<<12|$>>>20);q=$<<7|$>>>25;Z=(z<<7|z>>>25)+((_<<12|_>>>20)+Z)|0;Y=(Z^(Y<<8|Y>>>24))<<16|(Z^(Y<<8|Y>>>24))>>>16;z=Y+((X<<8|X>>>24)+W)^(z<<7|z>>>25);m=(z<<12|z>>>20)+Z|0;Z=m^Y;v=Z<<8|Z>>>24;s=v+(Y+((X<<8|X>>>24)+W))|0;z=s^(z<<12|z>>>20);n=z<<7|z>>>25;g=g+-2|0}while((g|0)!=0);z=(d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24)^h+G;Z=e+4|0;Z=(d[Z>>0]|d[Z+1>>0]<<8|d[Z+2>>0]<<16|d[Z+3>>0]<<24)^k+H;_=e+8|0;_=(d[_>>0]|d[_+1>>0]<<8|d[_+2>>0]<<16|d[_+3>>0]<<24)^l+I;$=e+12|0;$=(d[$>>0]|d[$+1>>0]<<8|d[$+2>>0]<<16|d[$+3>>0]<<24)^m+J;aa=e+16|0;aa=(d[aa>>0]|d[aa+1>>0]<<8|d[aa+2>>0]<<16|d[aa+3>>0]<<24)^n+K;ca=e+20|0;ca=(d[ca>>0]|d[ca+1>>0]<<8|d[ca+2>>0]<<16|d[ca+3>>0]<<24)^o+L;da=e+24|0;da=(d[da>>0]|d[da+1>>0]<<8|d[da+2>>0]<<16|d[da+3>>0]<<24)^p+M;ea=e+28|0;ea=(d[ea>>0]|d[ea+1>>0]<<8|d[ea+2>>0]<<16|d[ea+3>>0]<<24)^q+N;fa=e+32|0;fa=(d[fa>>0]|d[fa+1>>0]<<8|d[fa+2>>0]<<16|d[fa+3>>0]<<24)^r+O;ga=e+36|0;ga=(d[ga>>0]|d[ga+1>>0]<<8|d[ga+2>>0]<<16|d[ga+3>>0]<<24)^s+P;ha=e+40|0;ha=(d[ha>>0]|d[ha+1>>0]<<8|d[ha+2>>0]<<16|d[ha+3>>0]<<24)^t+Q;ia=e+44|0;ia=(d[ia>>0]|d[ia+1>>0]<<8|d[ia+2>>0]<<16|d[ia+3>>0]<<24)^y+R;ja=e+48|0;ja=(d[ja>>0]|d[ja+1>>0]<<8|d[ja+2>>0]<<16|d[ja+3>>0]<<24)^x+A;ka=e+52|0;ka=(d[ka>>0]|d[ka+1>>0]<<8|d[ka+2>>0]<<16|d[ka+3>>0]<<24)^w+C;la=e+56|0;la=(d[la>>0]|d[la+1>>0]<<8|d[la+2>>0]<<16|d[la+3>>0]<<24)^v+S;ma=e+60|0;ma=(d[ma>>0]|d[ma+1>>0]<<8|d[ma+2>>0]<<16|d[ma+3>>0]<<24)^u+T;g=A+1|0;h=((g|0)==0&1)+C|0;a[f>>0]=z;a[f+1>>0]=z>>8;a[f+2>>0]=z>>16;a[f+3>>0]=z>>24;na=f+4|0;a[na>>0]=Z;a[na+1>>0]=Z>>8;a[na+2>>0]=Z>>16;a[na+3>>0]=Z>>24;na=f+8|0;a[na>>0]=_;a[na+1>>0]=_>>8;a[na+2>>0]=_>>16;a[na+3>>0]=_>>24;na=f+12|0;a[na>>0]=$;a[na+1>>0]=$>>8;a[na+2>>0]=$>>16;a[na+3>>0]=$>>24;na=f+16|0;a[na>>0]=aa;a[na+1>>0]=aa>>8;a[na+2>>0]=aa>>16;a[na+3>>0]=aa>>24;na=f+20|0;a[na>>0]=ca;a[na+1>>0]=ca>>8;a[na+2>>0]=ca>>16;a[na+3>>0]=ca>>24;na=f+24|0;a[na>>0]=da;a[na+1>>0]=da>>8;a[na+2>>0]=da>>16;a[na+3>>0]=da>>24;na=f+28|0;a[na>>0]=ea;a[na+1>>0]=ea>>8;a[na+2>>0]=ea>>16;a[na+3>>0]=ea>>24;na=f+32|0;a[na>>0]=fa;a[na+1>>0]=fa>>8;a[na+2>>0]=fa>>16;a[na+3>>0]=fa>>24;na=f+36|0;a[na>>0]=ga;a[na+1>>0]=ga>>8;a[na+2>>0]=ga>>16;a[na+3>>0]=ga>>24;na=f+40|0;a[na>>0]=ha;a[na+1>>0]=ha>>8;a[na+2>>0]=ha>>16;a[na+3>>0]=ha>>24;na=f+44|0;a[na>>0]=ia;a[na+1>>0]=ia>>8;a[na+2>>0]=ia>>16;a[na+3>>0]=ia>>24;na=f+48|0;a[na>>0]=ja;a[na+1>>0]=ja>>8;a[na+2>>0]=ja>>16;a[na+3>>0]=ja>>24;na=f+52|0;a[na>>0]=ka;a[na+1>>0]=ka>>8;a[na+2>>0]=ka>>16;a[na+3>>0]=ka>>24;na=f+56|0;a[na>>0]=la;a[na+1>>0]=la>>8;a[na+2>>0]=la>>16;a[na+3>>0]=la>>24;na=f+60|0;a[na>>0]=ma;a[na+1>>0]=ma>>8;a[na+2>>0]=ma>>16;a[na+3>>0]=ma>>24;if(E>>>0<0|(E|0)==0&F>>>0<65)break;na=oe(F|0,E|0,-64,-1)|0;e=e+64|0;f=f+64|0;C=h;A=g;E=D;F=na}if((B?F|0:0)?(a[j>>0]=z,(F|0)!=1):0){e=1;do{a[j+e>>0]=a[f+e>>0]|0;e=e+1|0}while((e|0)!=(F|0))}c[b+48>>2]=g;c[b+52>>2]=h}i=V;return}function wa(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0;j=i;k=i=i+63&-64;i=i+320|0;h=k+280|0;g=h+32|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(g|0));a[k+280>>0]=(d[k+280>>0]|0)&248;a[k+280+31>>0]=(d[k+280+31>>0]|0)&63|64;ya(k+240|0,f);Ud(k+200|0);re(k+160|0);hc(k+120|0,k+240|0);Ud(k+80|0);e=0;g=254;while(1){B=e;e=(d[k+280+(g>>>3)>>0]|0)>>>(g&7)&1;B=e^B;db(k+200|0,k+120|0,B);db(k+160|0,k+80|0,B);Jb(k+40|0,k+120|0,k+80|0);Jb(k,k+200|0,k+160|0);Kb(k+200|0,k+200|0,k+160|0);Kb(k+160|0,k+120|0,k+80|0);pa(k+80|0,k+40|0,k+200|0);pa(k+160|0,k+160|0,k);ra(k+40|0,k);ra(k,k+200|0);Kb(k+120|0,k+80|0,k+160|0);Jb(k+160|0,k+80|0,k+160|0);pa(k+200|0,k,k+40|0);Jb(k,k,k+40|0);ra(k+160|0,k+160|0);B=c[k>>2]|0;A=c[k+4>>2]|0;z=c[k+8>>2]|0;y=c[k+12>>2]|0;x=c[k+16>>2]|0;s=c[k+20>>2]|0;v=c[k+24>>2]|0;E=c[k+28>>2]|0;t=c[k+32>>2]|0;C=c[k+36>>2]|0;B=Ed(B|0,((B|0)<0)<<31>>31|0,121666,0)|0;q=D;A=Ed(A|0,((A|0)<0)<<31>>31|0,121666,0)|0;r=D;z=Ed(z|0,((z|0)<0)<<31>>31|0,121666,0)|0;o=D;y=Ed(y|0,((y|0)<0)<<31>>31|0,121666,0)|0;p=D;x=Ed(x|0,((x|0)<0)<<31>>31|0,121666,0)|0;m=D;s=Ed(s|0,((s|0)<0)<<31>>31|0,121666,0)|0;n=D;v=Ed(v|0,((v|0)<0)<<31>>31|0,121666,0)|0;f=D;E=Ed(E|0,((E|0)<0)<<31>>31|0,121666,0)|0;l=D;t=Ed(t|0,((t|0)<0)<<31>>31|0,121666,0)|0;u=D;C=Ed(C|0,((C|0)<0)<<31>>31|0,121666,0)|0;h=D;F=oe(C|0,h|0,16777216,0)|0;F=Dd(F|0,D|0,25)|0;w=D;G=Ed(F|0,w|0,19,0)|0;q=oe(G|0,D|0,B|0,q|0)|0;B=D;w=Pd(F|0,w|0,25)|0;w=le(C|0,h|0,w|0,D|0)|0;h=D;C=oe(A|0,r|0,16777216,0)|0;C=Dd(C|0,D|0,25)|0;F=D;o=oe(C|0,F|0,z|0,o|0)|0;z=D;F=Pd(C|0,F|0,25)|0;F=le(A|0,r|0,F|0,D|0)|0;r=D;A=oe(y|0,p|0,16777216,0)|0;A=Dd(A|0,D|0,25)|0;C=D;m=oe(A|0,C|0,x|0,m|0)|0;x=D;C=Pd(A|0,C|0,25)|0;C=le(y|0,p|0,C|0,D|0)|0;p=D;y=oe(s|0,n|0,16777216,0)|0;y=Dd(y|0,D|0,25)|0;A=D;f=oe(y|0,A|0,v|0,f|0)|0;v=D;A=Pd(y|0,A|0,25)|0;A=le(s|0,n|0,A|0,D|0)|0;n=D;s=oe(E|0,l|0,16777216,0)|0;s=Dd(s|0,D|0,25)|0;y=D;u=oe(s|0,y|0,t|0,u|0)|0;t=D;y=Pd(s|0,y|0,25)|0;y=le(E|0,l|0,y|0,D|0)|0;l=D;E=oe(q|0,B|0,33554432,0)|0;E=Dd(E|0,D|0,26)|0;s=D;r=oe(F|0,r|0,E|0,s|0)|0;s=Pd(E|0,s|0,26)|0;s=le(q|0,B|0,s|0,D|0)|0;B=oe(o|0,z|0,33554432,0)|0;B=Dd(B|0,D|0,26)|0;q=D;p=oe(C|0,p|0,B|0,q|0)|0;q=Pd(B|0,q|0,26)|0;q=le(o|0,z|0,q|0,D|0)|0;z=oe(m|0,x|0,33554432,0)|0;z=Dd(z|0,D|0,26)|0;o=D;n=oe(A|0,n|0,z|0,o|0)|0;o=Pd(z|0,o|0,26)|0;o=le(m|0,x|0,o|0,D|0)|0;x=oe(f|0,v|0,33554432,0)|0;x=Dd(x|0,D|0,26)|0;m=D;l=oe(y|0,l|0,x|0,m|0)|0;m=Pd(x|0,m|0,26)|0;m=le(f|0,v|0,m|0,D|0)|0;v=oe(u|0,t|0,33554432,0)|0;v=Dd(v|0,D|0,26)|0;f=D;h=oe(w|0,h|0,v|0,f|0)|0;f=Pd(v|0,f|0,26)|0;f=le(u|0,t|0,f|0,D|0)|0;c[k+80>>2]=s;c[k+80+4>>2]=r;c[k+80+8>>2]=q;c[k+80+12>>2]=p;c[k+80+16>>2]=o;c[k+80+20>>2]=n;c[k+80+24>>2]=m;c[k+80+28>>2]=l;c[k+80+32>>2]=f;c[k+80+36>>2]=h;ra(k+120|0,k+120|0);Kb(k+40|0,k+40|0,k+80|0);pa(k+80|0,k+240|0,k+160|0);pa(k+160|0,k,k+40|0);if((g|0)<=0)break;else g=g+-1|0}db(k+200|0,k+120|0,e);db(k+160|0,k+80|0,e);Ia(k+160|0,k+160|0);pa(k+200|0,k+200|0,k+160|0);La(b,k+200|0);i=j;return 0}function xa(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;if(!f){H=857760878;I=2036477234;J=1634760805;G=1797285236}else{H=d[f+4>>0]|d[f+4+1>>0]<<8|d[f+4+2>>0]<<16|d[f+4+3>>0]<<24;I=d[f+8>>0]|d[f+8+1>>0]<<8|d[f+8+2>>0]<<16|d[f+8+3>>0]<<24;J=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;G=d[f+12>>0]|d[f+12+1>>0]<<8|d[f+12+2>>0]<<16|d[f+12+3>>0]<<24}F=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;E=d[e+4>>0]|d[e+4+1>>0]<<8|d[e+4+2>>0]<<16|d[e+4+3>>0]<<24;D=d[e+8>>0]|d[e+8+1>>0]<<8|d[e+8+2>>0]<<16|d[e+8+3>>0]<<24;C=d[e+12>>0]|d[e+12+1>>0]<<8|d[e+12+2>>0]<<16|d[e+12+3>>0]<<24;B=d[c>>0]|d[c+1>>0]<<8|d[c+2>>0]<<16|d[c+3>>0]<<24;A=d[c+4>>0]|d[c+4+1>>0]<<8|d[c+4+2>>0]<<16|d[c+4+3>>0]<<24;z=d[c+8>>0]|d[c+8+1>>0]<<8|d[c+8+2>>0]<<16|d[c+8+3>>0]<<24;y=d[c+12>>0]|d[c+12+1>>0]<<8|d[c+12+2>>0]<<16|d[c+12+3>>0]<<24;x=d[e+16>>0]|d[e+16+1>>0]<<8|d[e+16+2>>0]<<16|d[e+16+3>>0]<<24;w=d[e+20>>0]|d[e+20+1>>0]<<8|d[e+20+2>>0]<<16|d[e+20+3>>0]<<24;v=d[e+24>>0]|d[e+24+1>>0]<<8|d[e+24+2>>0]<<16|d[e+24+3>>0]<<24;f=d[e+28>>0]|d[e+28+1>>0]<<8|d[e+28+2>>0]<<16|d[e+28+3>>0]<<24;c=F;e=E;g=D;h=C;i=B;j=A;k=z;l=y;m=x;n=f;o=v;p=w;q=20;r=H;s=I;t=G;u=J;while(1){T=u+p|0;T=(T>>>25|T<<7)^h;Q=T+u|0;Q=(Q>>>23|Q<<9)^k;N=((Q+T|0)>>>19|Q+T<<13)^p;W=((N+Q|0)>>>14|N+Q<<18)^u;P=c+r|0;P=(P>>>25|P<<7)^l;M=P+r|0;M=(M>>>23|M<<9)^o;Z=((M+P|0)>>>19|M+P<<13)^c;S=((Z+M|0)>>>14|Z+M<<18)^r;L=i+s|0;L=(L>>>25|L<<7)^n;Y=L+s|0;Y=(Y>>>23|Y<<9)^e;V=((Y+L|0)>>>19|Y+L<<13)^i;O=((V+Y|0)>>>14|V+Y<<18)^s;X=m+t|0;X=g^(X>>>25|X<<7);U=X+t|0;U=(U>>>23|U<<9)^j;R=((U+X|0)>>>19|U+X<<13)^m;K=((R+U|0)>>>14|R+U<<18)^t;c=((W+X|0)>>>25|W+X<<7)^Z;Z=c+W|0;e=(Z>>>23|Z<<9)^Y;Y=e+c|0;g=(Y>>>19|Y<<13)^X;X=g+e|0;u=(X>>>14|X<<18)^W;i=((S+T|0)>>>25|S+T<<7)^V;V=i+S|0;j=(V>>>23|V<<9)^U;U=j+i|0;h=(U>>>19|U<<13)^T;T=h+j|0;r=(T>>>14|T<<18)^S;m=((O+P|0)>>>25|O+P<<7)^R;R=m+O|0;k=(R>>>23|R<<9)^Q;Q=k+m|0;l=(Q>>>19|Q<<13)^P;P=l+k|0;s=(P>>>14|P<<18)^O;p=((K+L|0)>>>25|K+L<<7)^N;N=p+K|0;o=(N>>>23|N<<9)^M;M=o+p|0;n=(M>>>19|M<<13)^L;L=n+o|0;t=(L>>>14|L<<18)^K;if((q|0)<=2)break;else q=q+-2|0}K=u+J|0;L=c+F|0;M=e+E|0;N=g+D|0;O=h+C|0;P=r+H|0;Q=i+B|0;R=j+A|0;S=k+z|0;T=l+y|0;U=s+I|0;V=m+x|0;W=p+w|0;X=o+v|0;Y=n+f|0;Z=t+G|0;a[b>>0]=K;a[b+1>>0]=K>>8;a[b+2>>0]=K>>16;a[b+3>>0]=K>>24;a[b+4>>0]=L;a[b+4+1>>0]=L>>8;a[b+4+2>>0]=L>>16;a[b+4+3>>0]=L>>24;a[b+8>>0]=M;a[b+8+1>>0]=M>>8;a[b+8+2>>0]=M>>16;a[b+8+3>>0]=M>>24;a[b+12>>0]=N;a[b+12+1>>0]=N>>8;a[b+12+2>>0]=N>>16;a[b+12+3>>0]=N>>24;a[b+16>>0]=O;a[b+16+1>>0]=O>>8;a[b+16+2>>0]=O>>16;a[b+16+3>>0]=O>>24;a[b+20>>0]=P;a[b+20+1>>0]=P>>8;a[b+20+2>>0]=P>>16;a[b+20+3>>0]=P>>24;a[b+24>>0]=Q;a[b+24+1>>0]=Q>>8;a[b+24+2>>0]=Q>>16;a[b+24+3>>0]=Q>>24;a[b+28>>0]=R;a[b+28+1>>0]=R>>8;a[b+28+2>>0]=R>>16;a[b+28+3>>0]=R>>24;a[b+32>>0]=S;a[b+32+1>>0]=S>>8;a[b+32+2>>0]=S>>16;a[b+32+3>>0]=S>>24;a[b+36>>0]=T;a[b+36+1>>0]=T>>8;a[b+36+2>>0]=T>>16;a[b+36+3>>0]=T>>24;a[b+40>>0]=U;a[b+40+1>>0]=U>>8;a[b+40+2>>0]=U>>16;a[b+40+3>>0]=U>>24;a[b+44>>0]=V;a[b+44+1>>0]=V>>8;a[b+44+2>>0]=V>>16;a[b+44+3>>0]=V>>24;a[b+48>>0]=W;a[b+48+1>>0]=W>>8;a[b+48+2>>0]=W>>16;a[b+48+3>>0]=W>>24;a[b+52>>0]=X;a[b+52+1>>0]=X>>8;a[b+52+2>>0]=X>>16;a[b+52+3>>0]=X>>24;a[b+56>>0]=Y;a[b+56+1>>0]=Y>>8;a[b+56+2>>0]=Y>>16;a[b+56+3>>0]=Y>>24;a[b+60>>0]=Z;a[b+60+1>>0]=Z>>8;a[b+60+2>>0]=Z>>16;a[b+60+3>>0]=Z>>24;return 0}function ya(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0;J=d[b>>0]|0;h=Pd(d[b+1>>0]|0|0,0,8)|0;k=D;F=Pd(d[b+2>>0]|0|0,0,16)|0;k=k|D;E=Pd(d[b+3>>0]|0|0,0,24)|0;k=k|D;B=d[b+4>>0]|0;C=Pd(d[b+5>>0]|0|0,0,8)|0;j=D;l=Pd(d[b+6>>0]|0|0,0,16)|0;j=Pd(C|B|l|0,j|D|0,6)|0;l=D;B=d[b+7>>0]|0;C=Pd(d[b+8>>0]|0|0,0,8)|0;w=D;i=Pd(d[b+9>>0]|0|0,0,16)|0;w=Pd(C|B|i|0,w|D|0,5)|0;i=D;B=d[b+10>>0]|0;C=Pd(d[b+11>>0]|0|0,0,8)|0;H=D;G=Pd(d[b+12>>0]|0|0,0,16)|0;H=Pd(C|B|G|0,H|D|0,3)|0;G=D;B=d[b+13>>0]|0;C=Pd(d[b+14>>0]|0|0,0,8)|0;s=D;g=Pd(d[b+15>>0]|0|0,0,16)|0;s=Pd(C|B|g|0,s|D|0,2)|0;g=D;B=d[b+16>>0]|0;C=Pd(d[b+17>>0]|0|0,0,8)|0;y=D;A=Pd(d[b+18>>0]|0|0,0,16)|0;y=y|D;z=Pd(d[b+19>>0]|0|0,0,24)|0;y=y|D;q=d[b+20>>0]|0;x=Pd(d[b+21>>0]|0|0,0,8)|0;p=D;e=Pd(d[b+22>>0]|0|0,0,16)|0;p=Pd(x|q|e|0,p|D|0,7)|0;e=D;q=d[b+23>>0]|0;x=Pd(d[b+24>>0]|0|0,0,8)|0;v=D;u=Pd(d[b+25>>0]|0|0,0,16)|0;v=Pd(x|q|u|0,v|D|0,5)|0;u=D;q=d[b+26>>0]|0;x=Pd(d[b+27>>0]|0|0,0,8)|0;n=D;o=Pd(d[b+28>>0]|0|0,0,16)|0;n=Pd(x|q|o|0,n|D|0,4)|0;o=D;q=d[b+29>>0]|0;x=Pd(d[b+30>>0]|0|0,0,8)|0;r=D;b=Pd(d[b+31>>0]|0|0,0,16)|0;r=Pd(x|q|b|0,r|D|0,2)|0;b=oe(r&33554428|0,0,16777216,0)|0;b=Rd(b|0,D|0,25)|0;q=D;x=le(0,0,b|0,q|0)|0;k=oe(x&19|0,0,h|J|F|E|0,k|0)|0;E=D;q=Pd(b|0,q|0,25)|0;b=D;F=oe(j|0,l|0,16777216,0)|0;F=Rd(F|0,D|0,25)|0;J=D;i=oe(w|0,i|0,F|0,J|0)|0;w=D;J=Pd(F|0,J|0,25)|0;J=le(j|0,l|0,J|0,D|0)|0;l=D;j=oe(H|0,G|0,16777216,0)|0;j=Rd(j|0,D|0,25)|0;F=D;g=oe(s|0,g|0,j|0,F|0)|0;s=D;F=Pd(j|0,F|0,25)|0;j=D;h=oe(C|B|A|z|0,y|0,16777216,0)|0;h=Rd(h|0,D|0,25)|0;x=D;e=oe(p|0,e|0,h|0,x|0)|0;p=D;x=Pd(h|0,x|0,25)|0;h=D;f=oe(v|0,u|0,16777216,0)|0;f=Rd(f|0,D|0,25)|0;t=D;o=oe(n|0,o|0,f|0,t|0)|0;n=D;t=Pd(f|0,t|0,25)|0;f=D;I=oe(k|0,E|0,33554432,0)|0;I=Dd(I|0,D|0,26)|0;m=D;l=oe(J|0,l|0,I|0,m|0)|0;m=Pd(I|0,m|0,26)|0;m=le(k|0,E|0,m|0,D|0)|0;E=oe(i|0,w|0,33554432,0)|0;E=Dd(E|0,D|0,26)|0;k=D;G=oe(E|0,k|0,H|0,G|0)|0;j=le(G|0,D|0,F|0,j|0)|0;k=Pd(E|0,k|0,26)|0;k=le(i|0,w|0,k|0,D|0)|0;w=oe(g|0,s|0,33554432,0)|0;w=Dd(w|0,D|0,26)|0;i=D;y=oe(w|0,i|0,C|B|A|z|0,y|0)|0;h=le(y|0,D|0,x|0,h|0)|0;i=Pd(w|0,i|0,26)|0;i=le(g|0,s|0,i|0,D|0)|0;s=oe(e|0,p|0,33554432,0)|0;s=Dd(s|0,D|0,26)|0;g=D;u=oe(s|0,g|0,v|0,u|0)|0;f=le(u|0,D|0,t|0,f|0)|0;g=Pd(s|0,g|0,26)|0;g=le(e|0,p|0,g|0,D|0)|0;p=oe(o|0,n|0,33554432,0)|0;p=Dd(p|0,D|0,26)|0;e=D;r=oe(r&33554428|0,0,p|0,e|0)|0;b=le(r|0,D|0,q|0,b|0)|0;e=Pd(p|0,e|0,26)|0;e=le(o|0,n|0,e|0,D|0)|0;c[a>>2]=m;c[a+4>>2]=l;c[a+8>>2]=k;c[a+12>>2]=j;c[a+16>>2]=i;c[a+20>>2]=h;c[a+24>>2]=g;c[a+28>>2]=f;c[a+32>>2]=e;c[a+36>>2]=b;return}function za(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;r=i;p=i=i+63&-64;i=i+240|0;ya(a+40|0,b);c[a+80>>2]=1;e=a+84|0;f=e+36|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));ra(p+160|0,a+40|0);pa(p+120|0,p+160|0,464);g=c[a+80>>2]|0;f=c[a+84>>2]|0;e=c[a+88>>2]|0;o=c[a+92>>2]|0;n=c[a+96>>2]|0;m=c[a+100>>2]|0;l=c[a+104>>2]|0;k=c[a+108>>2]|0;j=c[a+112>>2]|0;h=c[a+116>>2]|0;B=(c[p+160>>2]|0)-g|0;A=(c[p+160+4>>2]|0)-f|0;z=(c[p+160+8>>2]|0)-e|0;y=(c[p+160+12>>2]|0)-o|0;x=(c[p+160+16>>2]|0)-n|0;w=(c[p+160+20>>2]|0)-m|0;v=(c[p+160+24>>2]|0)-l|0;u=(c[p+160+28>>2]|0)-k|0;t=(c[p+160+32>>2]|0)-j|0;s=(c[p+160+36>>2]|0)-h|0;c[p+160>>2]=B;c[p+160+4>>2]=A;c[p+160+8>>2]=z;c[p+160+12>>2]=y;c[p+160+16>>2]=x;c[p+160+20>>2]=w;c[p+160+24>>2]=v;c[p+160+28>>2]=u;c[p+160+32>>2]=t;c[p+160+36>>2]=s;f=f+(c[p+120+4>>2]|0)|0;e=e+(c[p+120+8>>2]|0)|0;o=o+(c[p+120+12>>2]|0)|0;n=n+(c[p+120+16>>2]|0)|0;m=m+(c[p+120+20>>2]|0)|0;l=l+(c[p+120+24>>2]|0)|0;k=k+(c[p+120+28>>2]|0)|0;j=j+(c[p+120+32>>2]|0)|0;h=h+(c[p+120+36>>2]|0)|0;c[p+120>>2]=g+(c[p+120>>2]|0);c[p+120+4>>2]=f;c[p+120+8>>2]=e;c[p+120+12>>2]=o;c[p+120+16>>2]=n;c[p+120+20>>2]=m;c[p+120+24>>2]=l;c[p+120+28>>2]=k;c[p+120+32>>2]=j;c[p+120+36>>2]=h;ra(p+80|0,p+120|0);pa(p+80|0,p+80|0,p+120|0);ra(a,p+80|0);pa(a,a,p+120|0);pa(a,a,p+160|0);Ka(a,a);pa(a,a,p+80|0);pa(a,a,p+160|0);ra(p+40|0,a);pa(p+40|0,p+40|0,p+120|0);h=c[p+40>>2]|0;j=c[p+40+4>>2]|0;k=c[p+40+8>>2]|0;l=c[p+40+12>>2]|0;m=c[p+40+16>>2]|0;n=c[p+40+20>>2]|0;o=c[p+40+24>>2]|0;e=c[p+40+28>>2]|0;f=c[p+40+32>>2]|0;g=c[p+40+36>>2]|0;c[p>>2]=h-B;c[p+4>>2]=j-A;c[p+8>>2]=k-z;c[p+12>>2]=l-y;c[p+16>>2]=m-x;c[p+20>>2]=n-w;c[p+24>>2]=o-v;c[p+28>>2]=e-u;c[p+32>>2]=f-t;c[p+36>>2]=g-s;La(p+200|0,p);if(zd(p+200|0,34492)|0){t=(c[p+160+4>>2]|0)+j|0;u=(c[p+160+8>>2]|0)+k|0;v=(c[p+160+12>>2]|0)+l|0;w=(c[p+160+16>>2]|0)+m|0;x=(c[p+160+20>>2]|0)+n|0;y=(c[p+160+24>>2]|0)+o|0;z=(c[p+160+28>>2]|0)+e|0;A=(c[p+160+32>>2]|0)+f|0;B=(c[p+160+36>>2]|0)+g|0;c[p>>2]=(c[p+160>>2]|0)+h;c[p+4>>2]=t;c[p+8>>2]=u;c[p+12>>2]=v;c[p+16>>2]=w;c[p+20>>2]=x;c[p+24>>2]=y;c[p+28>>2]=z;c[p+32>>2]=A;c[p+36>>2]=B;La(p+200|0,p);if(!(zd(p+200|0,34492)|0)){pa(a,a,504);q=4}else e=-1}else q=4;if((q|0)==4){La(p+200|0,a);if(((d[p+200>>0]|0)&1|0)==((d[b+31>>0]|0)>>>7|0))$b(a,a);pa(a+120|0,a,a+40|0);e=0}i=r;return e|0}function Aa(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;if(!f){o=1797285236;g=2036477234;h=857760878;f=1634760805}else{o=d[f+12>>0]|d[f+12+1>>0]<<8|d[f+12+2>>0]<<16|d[f+12+3>>0]<<24;g=d[f+8>>0]|d[f+8+1>>0]<<8|d[f+8+2>>0]<<16|d[f+8+3>>0]<<24;h=d[f+4>>0]|d[f+4+1>>0]<<8|d[f+4+2>>0]<<16|d[f+4+3>>0]<<24;f=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24}p=d[e+28>>0]|d[e+28+1>>0]<<8|d[e+28+2>>0]<<16|d[e+28+3>>0]<<24;q=d[e+24>>0]|d[e+24+1>>0]<<8|d[e+24+2>>0]<<16|d[e+24+3>>0]<<24;r=d[e+20>>0]|d[e+20+1>>0]<<8|d[e+20+2>>0]<<16|d[e+20+3>>0]<<24;s=d[e+16>>0]|d[e+16+1>>0]<<8|d[e+16+2>>0]<<16|d[e+16+3>>0]<<24;t=d[c+12>>0]|d[c+12+1>>0]<<8|d[c+12+2>>0]<<16|d[c+12+3>>0]<<24;u=d[c+8>>0]|d[c+8+1>>0]<<8|d[c+8+2>>0]<<16|d[c+8+3>>0]<<24;v=d[c+4>>0]|d[c+4+1>>0]<<8|d[c+4+2>>0]<<16|d[c+4+3>>0]<<24;k=d[c>>0]|d[c+1>>0]<<8|d[c+2>>0]<<16|d[c+3>>0]<<24;l=d[e+12>>0]|d[e+12+1>>0]<<8|d[e+12+2>>0]<<16|d[e+12+3>>0]<<24;m=d[e+8>>0]|d[e+8+1>>0]<<8|d[e+8+2>>0]<<16|d[e+8+3>>0]<<24;n=d[e+4>>0]|d[e+4+1>>0]<<8|d[e+4+2>>0]<<16|d[e+4+3>>0]<<24;i=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;j=20;e=h;c=f;f=o;while(1){D=r+c|0;D=(D>>>25|D<<7)^l;A=D+c|0;A=(A>>>23|A<<9)^u;x=((A+D|0)>>>19|A+D<<13)^r;G=((x+A|0)>>>14|x+A<<18)^c;z=e+i|0;z=t^(z>>>25|z<<7);w=z+e|0;w=q^(w>>>23|w<<9);J=((w+z|0)>>>19|w+z<<13)^i;C=((J+w|0)>>>14|J+w<<18)^e;h=g+k|0;h=p^(h>>>25|h<<7);I=h+g|0;I=(I>>>23|I<<9)^n;F=((I+h|0)>>>19|I+h<<13)^k;y=((F+I|0)>>>14|F+I<<18)^g;H=f+s|0;H=(H>>>25|H<<7)^m;E=H+f|0;E=(E>>>23|E<<9)^v;B=((E+H|0)>>>19|E+H<<13)^s;o=((B+E|0)>>>14|B+E<<18)^f;i=((G+H|0)>>>25|G+H<<7)^J;J=i+G|0;n=(J>>>23|J<<9)^I;I=n+i|0;m=(I>>>19|I<<13)^H;H=m+n|0;c=(H>>>14|H<<18)^G;k=((C+D|0)>>>25|C+D<<7)^F;F=k+C|0;v=(F>>>23|F<<9)^E;E=v+k|0;l=(E>>>19|E<<13)^D;D=l+v|0;e=(D>>>14|D<<18)^C;s=((y+z|0)>>>25|y+z<<7)^B;B=s+y|0;u=(B>>>23|B<<9)^A;A=u+s|0;t=(A>>>19|A<<13)^z;z=t+u|0;g=(z>>>14|z<<18)^y;r=((o+h|0)>>>25|o+h<<7)^x;x=r+o|0;q=(x>>>23|x<<9)^w;w=q+r|0;p=(w>>>19|w<<13)^h;h=p+q|0;f=(h>>>14|h<<18)^o;if((j|0)<=2)break;else j=j+-2|0}a[b>>0]=c;a[b+1>>0]=c>>8;a[b+2>>0]=c>>16;a[b+3>>0]=c>>24;a[b+4>>0]=e;a[b+4+1>>0]=e>>8;a[b+4+2>>0]=e>>16;a[b+4+3>>0]=e>>24;a[b+8>>0]=g;a[b+8+1>>0]=g>>8;a[b+8+2>>0]=g>>16;a[b+8+3>>0]=g>>24;a[b+12>>0]=f;a[b+12+1>>0]=f>>8;a[b+12+2>>0]=f>>16;a[b+12+3>>0]=f>>24;a[b+16>>0]=k;a[b+16+1>>0]=k>>8;a[b+16+2>>0]=k>>16;a[b+16+3>>0]=k>>24;a[b+20>>0]=v;a[b+20+1>>0]=v>>8;a[b+20+2>>0]=v>>16;a[b+20+3>>0]=v>>24;a[b+24>>0]=u;a[b+24+1>>0]=u>>8;a[b+24+2>>0]=u>>16;a[b+24+3>>0]=u>>24;a[b+28>>0]=t;a[b+28+1>>0]=t>>8;a[b+28+2>>0]=t>>16;a[b+28+3>>0]=t>>24;return 0}function Ba(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;t=a[b+80>>0]|0?0:16777216;u=c[b+4>>2]|0;p=c[b+8>>2]|0;q=c[b+12>>2]|0;r=c[b+16>>2]|0;l=c[b+20>>2]|0;k=c[b+24>>2]|0;j=c[b+28>>2]|0;i=c[b+32>>2]|0;h=c[b+36>>2]|0;if(g>>>0>0|(g|0)==0&f>>>0>15){s=c[b>>2]|0;n=f;while(1){z=((d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24)&67108863)+l|0;A=e+3|0;A=((d[A>>0]|d[A+1>>0]<<8|d[A+2>>0]<<16|d[A+3>>0]<<24)>>>2&67108863)+k|0;y=e+6|0;y=((d[y>>0]|d[y+1>>0]<<8|d[y+2>>0]<<16|d[y+3>>0]<<24)>>>4&67108863)+j|0;x=e+9|0;x=((d[x>>0]|d[x+1>>0]<<8|d[x+2>>0]<<16|d[x+3>>0]<<24)>>>6)+i|0;l=e+12|0;l=((d[l>>0]|d[l+1>>0]<<8|d[l+2>>0]<<16|d[l+3>>0]<<24)>>>8|t)+h|0;h=Ed(z|0,0,s|0,0)|0;f=D;j=Ed(A|0,0,r*5|0,0)|0;f=oe(j|0,D|0,h|0,f|0)|0;h=D;j=Ed(y|0,0,q*5|0,0)|0;j=oe(f|0,h|0,j|0,D|0)|0;h=D;f=Ed(x|0,0,p*5|0,0)|0;f=oe(j|0,h|0,f|0,D|0)|0;h=D;j=Ed(l|0,0,u*5|0,0)|0;j=oe(f|0,h|0,j|0,D|0)|0;h=D;f=Ed(z|0,0,u|0,0)|0;m=D;w=Ed(A|0,0,s|0,0)|0;m=oe(w|0,D|0,f|0,m|0)|0;f=D;w=Ed(y|0,0,r*5|0,0)|0;w=oe(m|0,f|0,w|0,D|0)|0;f=D;m=Ed(x|0,0,q*5|0,0)|0;m=oe(w|0,f|0,m|0,D|0)|0;f=D;w=Ed(l|0,0,p*5|0,0)|0;w=oe(m|0,f|0,w|0,D|0)|0;f=D;m=Ed(z|0,0,p|0,0)|0;o=D;v=Ed(A|0,0,u|0,0)|0;o=oe(v|0,D|0,m|0,o|0)|0;m=D;v=Ed(y|0,0,s|0,0)|0;v=oe(o|0,m|0,v|0,D|0)|0;m=D;o=Ed(x|0,0,r*5|0,0)|0;o=oe(v|0,m|0,o|0,D|0)|0;m=D;v=Ed(l|0,0,q*5|0,0)|0;v=oe(o|0,m|0,v|0,D|0)|0;m=D;o=Ed(z|0,0,q|0,0)|0;i=D;k=Ed(A|0,0,p|0,0)|0;i=oe(k|0,D|0,o|0,i|0)|0;o=D;k=Ed(y|0,0,u|0,0)|0;k=oe(i|0,o|0,k|0,D|0)|0;o=D;i=Ed(x|0,0,s|0,0)|0;i=oe(k|0,o|0,i|0,D|0)|0;o=D;k=Ed(l|0,0,r*5|0,0)|0;k=oe(i|0,o|0,k|0,D|0)|0;o=D;i=Ed(z|0,0,r|0,0)|0;z=D;A=Ed(A|0,0,q|0,0)|0;z=oe(A|0,D|0,i|0,z|0)|0;i=D;y=Ed(y|0,0,p|0,0)|0;y=oe(z|0,i|0,y|0,D|0)|0;i=D;x=Ed(x|0,0,u|0,0)|0;x=oe(y|0,i|0,x|0,D|0)|0;i=D;l=Ed(l|0,0,s|0,0)|0;l=oe(x|0,i|0,l|0,D|0)|0;i=D;h=Rd(j|0,h|0,26)|0;h=oe(w|0,f|0,h|0,0)|0;f=Rd(h|0,D|0,26)|0;f=oe(v|0,m|0,f|0,0)|0;m=Rd(f|0,D|0,26)|0;m=oe(k|0,o|0,m|0,0)|0;o=Rd(m|0,D|0,26)|0;o=oe(l|0,i|0,o|0,0)|0;i=Rd(o|0,D|0,26)|0;n=oe(n|0,g|0,-16,-1)|0;g=D;if(!(g>>>0>0|(g|0)==0&n>>>0>15)){l=(i*5|0)+j&67108863;k=(((i*5|0)+(j&67108863)|0)>>>26)+(h&67108863)|0;j=f&67108863;i=m&67108863;h=o&67108863;break}else{l=(i*5|0)+j&67108863;k=(((i*5|0)+(j&67108863)|0)>>>26)+(h&67108863)|0;j=f&67108863;i=m&67108863;h=o&67108863;e=e+16|0}}}c[b+20>>2]=l;c[b+24>>2]=k;c[b+28>>2]=j;c[b+32>>2]=i;c[b+36>>2]=h;return}function Ca(b,e,f,g,h,i,j,k,l,m,n){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=Ed(l|0,0,k|0,0)|0;u=D;do if(u>>>0>0|(u|0)==0&v>>>0>1073741823){c[(Zf()|0)>>2]=27;b=-1}else{if(j>>>0>0|(j|0)==0&i>>>0>4294967295){c[(Zf()|0)>>2]=27;b=-1;break}u=oe(i|0,j|0,-1,-1)|0;if(j>>>0<0|(j|0)==0&i>>>0<2|((u&i|0)!=0|(D&j|0)!=0)){c[(Zf()|0)>>2]=22;b=-1;break}if((k|0)==0|(l|0)==0){c[(Zf()|0)>>2]=22;b=-1;break}if(!(k>>>0>16777215?1:(33554431/(l>>>0)|0)>>>0<k>>>0)?!(0<j>>>0|(0==(j|0)?(33554431/(k>>>0)|0)>>>0<i>>>0:0)):0){v=S(k<<7,l)|0;p=Ed(k<<7|0,0,i|0,j|0)|0;if((p+v|0)>>>0<p>>>0){c[(Zf()|0)>>2]=12;b=-1;break}o=p+v+(k<<8|64)|0;if(o>>>0<(k<<8|64)>>>0){c[(Zf()|0)>>2]=12;b=-1;break}if((c[b+8>>2]|0)>>>0<o>>>0?(je(b),(Nc(b,o)|0)==0):0){b=-1;break}t=c[b+4>>2]|0;s=t+v+p|0;Tb(e,f,g,h,t,v);q=s+(k<<5<<2)|0;h=0;do{r=t+(S(k<<7,h)|0)|0;if(k<<5|0){b=0;do{g=r+(b<<2)|0;c[s+(b<<2)>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;b=b+1|0}while((b|0)!=(k<<5|0))}if(!((i|0)==0&(j|0)==0)){p=0;g=0;do{if(!(k<<5&1073741792))wb(s,q,s+(k<<6<<2)|0,k);else{o=Ed(p|0,g|0,k<<5|0,0)|0;b=0;do{c[t+v+(o<<2)+(b<<2)>>2]=c[s+(b<<2)>>2];b=b+1|0}while((b|0)!=(k<<5&1073741792|0));wb(s,q,s+(k<<6<<2)|0,k);o=Ed(p|1|0,g|0,k<<5|0,0)|0;b=0;do{c[t+v+(o<<2)+(b<<2)>>2]=c[q+(b<<2)>>2];b=b+1|0}while((b|0)!=(k<<5&1073741792|0))}wb(q,s,s+(k<<6<<2)|0,k);p=oe(p|0,g|0,2,0)|0;g=D}while(g>>>0<j>>>0|(g|0)==(j|0)&p>>>0<i>>>0);p=0;g=0;do{if(!(k<<5&1073741792))wb(s,q,s+(k<<6<<2)|0,k);else{o=Ed(c[s+((k<<7)+-64)>>2]&u|0,0,k<<5|0,0)|0;b=0;do{w=s+(b<<2)|0;c[w>>2]=c[w>>2]^c[t+v+(o<<2)+(b<<2)>>2];b=b+1|0}while((b|0)!=(k<<5&1073741792|0));wb(s,q,s+(k<<6<<2)|0,k);o=Ed(c[q+((k<<7)+-64)>>2]&u|0,0,k<<5|0,0)|0;b=0;do{w=q+(b<<2)|0;c[w>>2]=c[w>>2]^c[t+v+(o<<2)+(b<<2)>>2];b=b+1|0}while((b|0)!=(k<<5&1073741792|0))}wb(q,s,s+(k<<6<<2)|0,k);p=oe(p|0,g|0,2,0)|0;g=D}while(g>>>0<j>>>0|(g|0)==(j|0)&p>>>0<i>>>0)}if(k<<5|0){b=0;do{w=r+(b<<2)|0;g=c[s+(b<<2)>>2]|0;a[w>>0]=g;a[w+1>>0]=g>>8;a[w+2>>0]=g>>16;a[w+3>>0]=g>>24;b=b+1|0}while((b|0)!=(k<<5|0))}h=h+1|0}while((h|0)!=(l|0));Tb(e,f,t,v,m,n);b=0;break}c[(Zf()|0)>>2]=12;b=-1}while(0);return b|0}function Da(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=i;o=i=i+63&-64;i=i+32|0;do if(f>>>0>=12){h=e;j=32952;k=h+12|0;do{a[h>>0]=a[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(k|0));h=jb(g)|0;if(!h){a[o+12+9>>0]=57;a[o+12+8>>0]=49;b[o>>1]=d[o+12+8>>0]|d[o+12+8+1>>0]<<8;a[o+2>>0]=0;l=kc(o)|0;m=e+11+l|0;if((f+-11|0)>>>0<=l>>>0){h=-31;break}tc(e+11|0,o|0,l+1|0)|0;if((f+-11-l|0)>>>0>=4){a[m>>0]=36;a[m+1>>0]=109;a[m+2>>0]=61;a[m+3>>0]=0;h=10;j=c[g+44>>2]|0;while(1){k=h+-1|0;a[o+12+k>>0]=(j>>>0)%10|0|48;if(j>>>0>9&(k|0)!=0){h=k;j=(j>>>0)/10|0}else break}h=11-h|0;tc(o|0,o+12+k|0,h|0)|0;a[o+h>>0]=0;h=kc(o)|0;e=m+3+h|0;n=f+-11-l+-3-h|0;if((f+-11-l+-3|0)>>>0<=h>>>0){h=-31;break}tc(m+3|0,o|0,h+1|0)|0;if(n>>>0>=4){a[e>>0]=44;a[e+1>>0]=116;a[e+2>>0]=61;a[e+3>>0]=0;h=10;j=c[g+40>>2]|0;while(1){k=h+-1|0;a[o+12+k>>0]=(j>>>0)%10|0|48;if(j>>>0>9&(k|0)!=0){h=k;j=(j>>>0)/10|0}else break}l=11-h|0;tc(o|0,o+12+k|0,l|0)|0;a[o+l>>0]=0;l=kc(o)|0;m=e+3+l|0;if((n+-3|0)>>>0<=l>>>0){h=-31;break}tc(e+3|0,o|0,l+1|0)|0;if((n+-3-l|0)>>>0>=4){a[m>>0]=44;a[m+1>>0]=112;a[m+2>>0]=61;a[m+3>>0]=0;h=10;j=c[g+48>>2]|0;while(1){k=h+-1|0;a[o+12+k>>0]=(j>>>0)%10|0|48;if(j>>>0>9&(k|0)!=0){h=k;j=(j>>>0)/10|0}else break}j=11-h|0;tc(o|0,o+12+k|0,j|0)|0;a[o+j>>0]=0;j=kc(o)|0;e=m+3+j|0;h=n+-3-l+-3-j|0;if((n+-3-l+-3|0)>>>0<=j>>>0){h=-31;break}tc(m+3|0,o|0,j+1|0)|0;if(c[g+36>>2]|0){if(h>>>0<7){h=-31;break}a[e>>0]=a[32945]|0;a[e+1>>0]=a[32946]|0;a[e+2>>0]=a[32947]|0;a[e+3>>0]=a[32948]|0;a[e+4>>0]=a[32949]|0;a[e+5>>0]=a[32950]|0;a[e+6>>0]=a[32951]|0;j=Lb(e+6|0,h+-6|0,c[g+32>>2]|0,c[g+36>>2]|0)|0;if((j|0)==-1){h=-31;break}else{e=e+6+j|0;h=h+-6-((j|0)==-1?0:j)|0}}if(c[g+20>>2]|0){k=e+1|0;j=h+-1|0;if(h>>>0>=2?(a[e>>0]=36,a[e+1>>0]=0,o=Lb(k,j,c[g+16>>2]|0,c[g+20>>2]|0)|0,q=j-((o|0)==-1?0:o)|0,p=(o|0)==-1?k:k+o|0,(o|0)!=-1):0)if(c[g+4>>2]|0)if(q>>>0<2)h=-31;else{a[p>>0]=36;a[p+1>>0]=0;g=(Lb(p+1|0,q+-1|0,c[g>>2]|0,c[g+4>>2]|0)|0)!=-1;i=r;return (g?0:-31)|0}else h=0;else h=-31}else h=0}else h=-31}else h=-31}else h=-31}}else h=-31;while(0);i=r;return h|0}function Ea(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!b)if(!e){if(f|0){c[f>>2]=(a>>>0)%(d>>>0);c[f+4>>2]=0}e=0;f=(a>>>0)/(d>>>0)>>>0;return (D=e,f)|0}else{if(!f){e=0;f=0;return (D=e,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;e=0;f=0;return (D=e,f)|0}do if(d){if(e|0){h=(V(e|0)|0)-(V(b|0)|0)|0;if(h>>>0<=31){n=h+1|0;i=a>>>((h+1|0)>>>0)&h-31>>31|b<<31-h;m=b>>>((h+1|0)>>>0)&h-31>>31;g=0;h=a<<31-h;break}if(!f){e=0;f=0;return (D=e,f)|0}c[f>>2]=a|0;c[f+4>>2]=b|b&0;e=0;f=0;return (D=e,f)|0}if(d-1&d|0){h=(V(d|0)|0)+33-(V(b|0)|0)|0;n=h;i=32-h-1>>31&b>>>((h-32|0)>>>0)|(b<<32-h|a>>>(h>>>0))&h-32>>31;m=h-32>>31&b>>>(h>>>0);g=a<<64-h&32-h>>31;h=(b<<64-h|a>>>((h-32|0)>>>0))&32-h>>31|a<<32-h&h-33>>31;break}if(f|0){c[f>>2]=d-1&a;c[f+4>>2]=0}if((d|0)==1){e=b|b&0;f=a|0|0;return (D=e,f)|0}else{f=id(d|0)|0;e=b>>>(f>>>0)|0;f=b<<32-f|a>>>(f>>>0)|0;return (D=e,f)|0}}else{if(!e){if(f|0){c[f>>2]=(b>>>0)%(d>>>0);c[f+4>>2]=0}e=0;f=(b>>>0)/(d>>>0)>>>0;return (D=e,f)|0}if(!a){if(f|0){c[f>>2]=0;c[f+4>>2]=(b>>>0)%(e>>>0)}d=0;f=(b>>>0)/(e>>>0)>>>0;return (D=d,f)|0}if(!(e-1&e)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=e-1&b|b&0}d=0;f=b>>>((id(e|0)|0)>>>0);return (D=d,f)|0}h=(V(e|0)|0)-(V(b|0)|0)|0;if(h>>>0<=30){n=h+1|0;i=b<<31-h|a>>>((h+1|0)>>>0);m=b>>>((h+1|0)>>>0);g=0;h=a<<31-h;break}if(!f){e=0;f=0;return (D=e,f)|0}c[f>>2]=a|0;c[f+4>>2]=b|b&0;e=0;f=0;return (D=e,f)|0}while(0);if(!n){j=h;b=m;a=0;h=0}else{k=oe(d|0|0,e|e&0|0,-1,-1)|0;l=D;j=h;b=m;a=n;h=0;do{p=j;j=g>>>31|j<<1;g=h|g<<1;p=i<<1|p>>>31|0;o=i>>>31|b<<1|0;le(k|0,l|0,p|0,o|0)|0;n=D;m=n>>31|((n|0)<0?-1:0)<<1;h=m&1;i=le(p|0,o|0,m&(d|0)|0,(((n|0)<0?-1:0)>>31|((n|0)<0?-1:0)<<1)&(e|e&0)|0)|0;b=D;a=a-1|0}while((a|0)!=0);a=0}if(f|0){c[f>>2]=i;c[f+4>>2]=b}o=(g|0)>>>31|j<<1|(0<<1|g>>>31)&0|a;p=(g<<1|0>>>31)&-2|h;return (D=o,p)|0}function Fa(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=i;h=i=i+63&-64;i=i+2400|0;Gb(h+2136|0,d);Gb(h+1880|0,f);Rb(h+480|0,e);bb(h+1760|0,e);dc(h+320|0,h+1760|0);Zc(h,h+320|0);Qb(h+320|0,h,h+480|0);Zc(h+160|0,h+320|0);Rb(h+480+160|0,h+160|0);Qb(h+320|0,h,h+480+160|0);Zc(h+160|0,h+320|0);Rb(h+480+320|0,h+160|0);Qb(h+320|0,h,h+480+320|0);Zc(h+160|0,h+320|0);Rb(h+480+480|0,h+160|0);Qb(h+320|0,h,h+480+480|0);Zc(h+160|0,h+320|0);Rb(h+480+640|0,h+160|0);Qb(h+320|0,h,h+480+640|0);Zc(h+160|0,h+320|0);Rb(h+480+800|0,h+160|0);Qb(h+320|0,h,h+480+800|0);Zc(h+160|0,h+320|0);Rb(h+480+960|0,h+160|0);Qb(h+320|0,h,h+480+960|0);Zc(h+160|0,h+320|0);Rb(h+480+1120|0,h+160|0);d=b;e=d+40|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b+40>>2]=1;d=b+44|0;e=d+36|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b+80>>2]=1;d=b+84|0;e=d+36|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));d=255;while(1){if(a[h+2136+d>>0]|0)break;if(a[h+1880+d>>0]|0)break;e=d+-1|0;if((d|0)>0)d=e;else{d=e;break}}if((d|0)>-1)while(1){dc(h+320|0,b);e=a[h+2136+d>>0]|0;if(e<<24>>24<=0){if(e<<24>>24<0){Zc(h+160|0,h+320|0);Pb(h+320|0,h+160|0,h+480+((((e<<24>>24)/-2|0)<<24>>24)*160|0)|0)}}else{Zc(h+160|0,h+320|0);Qb(h+320|0,h+160|0,h+480+(((e&255)>>>1&255)*160|0)|0)}e=a[h+1880+d>>0]|0;if(e<<24>>24<=0){if(e<<24>>24<0){Zc(h+160|0,h+320|0);Ub(h+320|0,h+160|0,584+((((e<<24>>24)/-2|0)<<24>>24)*120|0)|0)}}else{Zc(h+160|0,h+320|0);Vb(h+320|0,h+160|0,584+(((e&255)>>>1&255)*120|0)|0)}ud(b,h+320|0);if((d|0)>0)d=d+-1|0;else break}i=g;return}function Ga(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;u=i;v=i=i+63&-64;i=i+64|0;b=v;d=a;e=b+64|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));b=0;e=c[v+60>>2]|0;f=c[v+44>>2]|0;g=c[v+12>>2]|0;h=c[v+28>>2]|0;j=c[v>>2]|0;k=c[v+48>>2]|0;l=c[v+16>>2]|0;m=c[v+32>>2]|0;n=c[v+20>>2]|0;d=c[v+4>>2]|0;o=c[v+36>>2]|0;p=c[v+52>>2]|0;q=c[v+40>>2]|0;r=c[v+24>>2]|0;s=c[v+56>>2]|0;t=c[v+8>>2]|0;do{F=k+j|0;F=(F<<7|F>>>25)^l;C=F+j|0;C=(C<<9|C>>>23)^m;z=(C+F<<13|(C+F|0)>>>19)^k;I=(z+C<<18|(z+C|0)>>>14)^j;B=d+n|0;B=(B<<7|B>>>25)^o;y=B+n|0;y=(y<<9|y>>>23)^p;L=(y+B<<13|(y+B|0)>>>19)^d;E=(L+y<<18|(L+y|0)>>>14)^n;x=r+q|0;x=(x<<7|x>>>25)^s;K=x+q|0;K=(K<<9|K>>>23)^t;H=(K+x<<13|(K+x|0)>>>19)^r;A=(H+K<<18|(H+K|0)>>>14)^q;J=f+e|0;J=(J<<7|J>>>25)^g;G=J+e|0;G=(G<<9|G>>>23)^h;D=(G+J<<13|(G+J|0)>>>19)^f;w=(D+G<<18|(D+G|0)>>>14)^e;d=(J+I<<7|(J+I|0)>>>25)^L;L=d+I|0;t=(L<<9|L>>>23)^K;K=t+d|0;g=(K<<13|K>>>19)^J;J=g+t|0;j=(J<<18|J>>>14)^I;r=(F+E<<7|(F+E|0)>>>25)^H;H=r+E|0;h=(H<<9|H>>>23)^G;G=h+r|0;l=(G<<13|G>>>19)^F;F=l+h|0;n=(F<<18|F>>>14)^E;f=(B+A<<7|(B+A|0)>>>25)^D;D=f+A|0;m=(D<<9|D>>>23)^C;C=m+f|0;o=(C<<13|C>>>19)^B;B=o+m|0;q=(B<<18|B>>>14)^A;k=(x+w<<7|(x+w|0)>>>25)^z;z=k+w|0;p=(z<<9|z>>>23)^y;y=p+k|0;s=(y<<13|y>>>19)^x;x=s+p|0;e=(x<<18|x>>>14)^w;b=b+2|0}while(b>>>0<8);c[v>>2]=j;c[v+48>>2]=k;c[v+16>>2]=l;c[v+32>>2]=m;c[v+20>>2]=n;c[v+4>>2]=d;c[v+36>>2]=o;c[v+52>>2]=p;c[v+40>>2]=q;c[v+24>>2]=r;c[v+56>>2]=s;c[v+8>>2]=t;c[v+60>>2]=e;c[v+44>>2]=f;c[v+12>>2]=g;c[v+28>>2]=h;c[a>>2]=(c[a>>2]|0)+j;b=1;while(1){L=a+(b<<2)|0;c[L>>2]=(c[L>>2]|0)+d;b=b+1|0;if((b|0)==16)break;d=c[v+(b<<2)>>2]|0}i=u;return}function Ha(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;g=i;h=i=i+63&-64;i=i+128|0;e=Rd(d<<24>>24|0,((d<<24>>24|0)<0)<<31>>31|0,63)|0;c[a>>2]=1;f=a+4|0;j=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(j|0));c[a+40>>2]=1;f=a+44|0;j=f+76|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(j|0));o=(d<<24>>24)-((d<<24>>24&0-e)<<1)&255;xd(a,1544+(b*960|0)|0,((o^1)+-1|0)>>>31&255);xd(a,1544+(b*960|0)+120|0,((o^2)+-1|0)>>>31&255);xd(a,1544+(b*960|0)+240|0,((o^3)+-1|0)>>>31&255);xd(a,1544+(b*960|0)+360|0,((o^4)+-1|0)>>>31&255);xd(a,1544+(b*960|0)+480|0,((o^5)+-1|0)>>>31&255);xd(a,1544+(b*960|0)+600|0,((o^6)+-1|0)>>>31&255);xd(a,1544+(b*960|0)+720|0,((o^7)+-1|0)>>>31&255);xd(a,1544+(b*960|0)+840|0,((o^8)+-1|0)>>>31&255);o=c[a+44>>2]|0;n=c[a+48>>2]|0;m=c[a+52>>2]|0;l=c[a+56>>2]|0;k=c[a+60>>2]|0;b=c[a+64>>2]|0;d=c[a+68>>2]|0;f=c[a+72>>2]|0;j=c[a+76>>2]|0;c[h>>2]=c[a+40>>2];c[h+4>>2]=o;c[h+8>>2]=n;c[h+12>>2]=m;c[h+16>>2]=l;c[h+20>>2]=k;c[h+24>>2]=b;c[h+28>>2]=d;c[h+32>>2]=f;c[h+36>>2]=j;j=c[a+4>>2]|0;f=c[a+8>>2]|0;d=c[a+12>>2]|0;b=c[a+16>>2]|0;k=c[a+20>>2]|0;l=c[a+24>>2]|0;m=c[a+28>>2]|0;n=c[a+32>>2]|0;o=c[a+36>>2]|0;c[h+40>>2]=c[a>>2];c[h+44>>2]=j;c[h+48>>2]=f;c[h+52>>2]=d;c[h+56>>2]=b;c[h+60>>2]=k;c[h+64>>2]=l;c[h+68>>2]=m;c[h+72>>2]=n;c[h+76>>2]=o;o=0-(c[a+84>>2]|0)|0;n=0-(c[a+88>>2]|0)|0;m=0-(c[a+92>>2]|0)|0;l=0-(c[a+96>>2]|0)|0;k=0-(c[a+100>>2]|0)|0;b=0-(c[a+104>>2]|0)|0;d=0-(c[a+108>>2]|0)|0;f=0-(c[a+112>>2]|0)|0;j=0-(c[a+116>>2]|0)|0;c[h+80>>2]=0-(c[a+80>>2]|0);c[h+84>>2]=o;c[h+88>>2]=n;c[h+92>>2]=m;c[h+96>>2]=l;c[h+100>>2]=k;c[h+104>>2]=b;c[h+108>>2]=d;c[h+112>>2]=f;c[h+116>>2]=j;xd(a,h,e&255);i=g;return}function Ia(a,b){a=a|0;b=b|0;var c=0,d=0;c=i;d=i=i+63&-64;i=i+160|0;ra(d+120|0,b);ra(d+80|0,d+120|0);ra(d+80|0,d+80|0);pa(d+80|0,b,d+80|0);pa(d+120|0,d+120|0,d+80|0);ra(d+40|0,d+120|0);pa(d+80|0,d+80|0,d+40|0);ra(d+40|0,d+80|0);b=1;do{ra(d+40|0,d+40|0);b=b+1|0}while((b|0)!=5);pa(d+80|0,d+40|0,d+80|0);ra(d+40|0,d+80|0);b=1;do{ra(d+40|0,d+40|0);b=b+1|0}while((b|0)!=10);pa(d+40|0,d+40|0,d+80|0);ra(d,d+40|0);b=1;do{ra(d,d);b=b+1|0}while((b|0)!=20);pa(d+40|0,d,d+40|0);ra(d+40|0,d+40|0);b=1;do{ra(d+40|0,d+40|0);b=b+1|0}while((b|0)!=10);pa(d+80|0,d+40|0,d+80|0);ra(d+40|0,d+80|0);b=1;do{ra(d+40|0,d+40|0);b=b+1|0}while((b|0)!=50);pa(d+40|0,d+40|0,d+80|0);ra(d,d+40|0);b=1;do{ra(d,d);b=b+1|0}while((b|0)!=100);pa(d+40|0,d,d+40|0);ra(d+40|0,d+40|0);b=1;do{ra(d+40|0,d+40|0);b=b+1|0}while((b|0)!=50);pa(d+80|0,d+40|0,d+80|0);ra(d+80|0,d+80|0);b=1;do{ra(d+80|0,d+80|0);b=b+1|0}while((b|0)!=5);pa(a,d+80|0,d+120|0);i=c;return}function Ja(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;k=i;j=i=i+63&-64;i=i+16|0;f=c[b+36>>2]|0;g=c[b+20>>2]|0;h=c[b+4>>2]|0;c[b+36>>2]=0;c[b+20>>2]=0;c[b+4>>2]=0;l=(sc(d,32920,8)|0)==0;d=l?d+8|0:d;a:do if((l?(sc(d,32929,3)|0)==0:0)?(e=jc(d+3|0,j)|0,(e|0)!=0):0)if((c[j>>2]|0)==19)if(!(sc(e,32933,3)|0)){d=jc(e+3|0,j)|0;if(!d){d=-32;break}c[b+44>>2]=c[j>>2];if(!(sc(d,32937,3)|0)){d=jc(d+3|0,j)|0;if(!d){d=-32;break}c[b+40>>2]=c[j>>2];if(!(sc(d,32941,3)|0)){d=jc(d+3|0,j)|0;if(!d){d=-32;break}l=c[j>>2]|0;c[b+48>>2]=l;c[b+52>>2]=l;do if(!(sc(d,32945,6)|0)){c[j>>2]=f;d=ub(c[b+32>>2]|0,j,d+6|0)|0;if(!d){d=-32;break a}else{c[b+36>>2]=c[j>>2];break}}while(0);e=a[d>>0]|0;if(e<<24>>24)if(e<<24>>24==36){c[j>>2]=g;d=ub(c[b+16>>2]|0,j,d+1|0)|0;if(!d){d=-32;break}c[b+20>>2]=c[j>>2];e=a[d>>0]|0;if(e<<24>>24)if(e<<24>>24==36){c[j>>2]=h;e=ub(c[b>>2]|0,j,d+1|0)|0;if(!e){d=-32;break}c[b+4>>2]=c[j>>2];d=jb(b)|0;if(!d)d=(a[e>>0]|0)==0?0:-32}else d=-32;else d=0}else d=-32;else d=0}else d=-32}else d=-32}else d=-32;else d=-26;else d=-32;while(0);i=k;return d|0}function Ka(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;d=i;e=i=i+63&-64;i=i+128|0;ra(e+80|0,b);ra(e+40|0,e+80|0);ra(e+40|0,e+40|0);pa(e+40|0,b,e+40|0);pa(e+80|0,e+80|0,e+40|0);ra(e+80|0,e+80|0);pa(e+80|0,e+40|0,e+80|0);ra(e+40|0,e+80|0);c=1;do{ra(e+40|0,e+40|0);c=c+1|0}while((c|0)!=5);pa(e+80|0,e+40|0,e+80|0);ra(e+40|0,e+80|0);c=1;do{ra(e+40|0,e+40|0);c=c+1|0}while((c|0)!=10);pa(e+40|0,e+40|0,e+80|0);ra(e,e+40|0);c=1;do{ra(e,e);c=c+1|0}while((c|0)!=20);pa(e+40|0,e,e+40|0);ra(e+40|0,e+40|0);c=1;do{ra(e+40|0,e+40|0);c=c+1|0}while((c|0)!=10);pa(e+80|0,e+40|0,e+80|0);ra(e+40|0,e+80|0);c=1;do{ra(e+40|0,e+40|0);c=c+1|0}while((c|0)!=50);pa(e+40|0,e+40|0,e+80|0);ra(e,e+40|0);c=1;do{ra(e,e);c=c+1|0}while((c|0)!=100);pa(e+40|0,e,e+40|0);ra(e+40|0,e+40|0);c=1;do{ra(e+40|0,e+40|0);c=c+1|0}while((c|0)!=50);pa(e+80|0,e+40|0,e+80|0);ra(e+80|0,e+80|0);ra(e+80|0,e+80|0);pa(a,e+80|0,b);i=d;return}function La(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=c[d>>2]|0;h=c[d+4>>2]|0;i=c[d+8>>2]|0;j=c[d+12>>2]|0;p=c[d+16>>2]|0;f=c[d+20>>2]|0;g=c[d+24>>2]|0;n=c[d+28>>2]|0;e=c[d+32>>2]|0;d=c[d+36>>2]|0;o=((((((((((((((d*19|0)+16777216|0)>>>25)+m>>26)+h>>25)+i>>26)+j>>25)+p>>26)+f>>25)+g>>26)+n>>25)+e>>26)+d>>25)*19|0)+m>>26;m=((((((((((((((d*19|0)+16777216|0)>>>25)+m>>26)+h>>25)+i>>26)+j>>25)+p>>26)+f>>25)+g>>26)+n>>25)+e>>26)+d>>25)*19|0)+m-(o<<26)|0;l=o+h-(o+h>>25<<25)|0;k=(o+h>>25)+i-((o+h>>25)+i>>26<<26)|0;q=((o+h>>25)+i>>26)+j>>25;j=((o+h>>25)+i>>26)+j-(q<<25)|0;i=q+p-(q+p>>26<<26)|0;h=(q+p>>26)+f-((q+p>>26)+f>>25<<25)|0;o=((q+p>>26)+f>>25)+g>>26;g=((q+p>>26)+f>>25)+g-(o<<26)|0;f=o+n-(o+n>>25<<25)|0;d=((o+n>>25)+e>>26)+d|0;e=(o+n>>25)+e-((o+n>>25)+e>>26<<26)|0;a[b>>0]=m;a[b+1>>0]=m>>>8;a[b+2>>0]=m>>>16;a[b+3>>0]=l<<2|m>>>24;a[b+4>>0]=l>>>6;a[b+5>>0]=l>>>14;a[b+6>>0]=k<<3|l>>>22;a[b+7>>0]=k>>>5;a[b+8>>0]=k>>>13;a[b+9>>0]=j<<5|k>>>21;a[b+10>>0]=j>>>3;a[b+11>>0]=j>>>11;a[b+12>>0]=i<<6|j>>>19;a[b+13>>0]=i>>>2;a[b+14>>0]=i>>>10;a[b+15>>0]=i>>>18;a[b+16>>0]=h;a[b+17>>0]=h>>>8;a[b+18>>0]=h>>>16;a[b+19>>0]=g<<1|h>>>24;a[b+20>>0]=g>>>7;a[b+21>>0]=g>>>15;a[b+22>>0]=f<<3|g>>>23;a[b+23>>0]=f>>>5;a[b+24>>0]=f>>>13;a[b+25>>0]=e<<4|f>>>21;a[b+26>>0]=e>>>4;a[b+27>>0]=e>>>12;a[b+28>>0]=e>>>20|(d&33554431)<<6;a[b+29>>0]=d>>>2;a[b+30>>0]=d>>>10;a[b+31>>0]=(d&33554431)>>>18;return}function Ma(b,e,f,g,h,j,k,l){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=i;t=i=i+63&-64;i=i+112|0;if(!((f|0)==0&(g|0)==0)){n=t+16|0;m=n+32|0;do{a[n>>0]=a[l>>0]|0;n=n+1|0;l=l+1|0}while((n|0)<(m|0));n=d[h+4>>0]|d[h+4+1>>0]<<8|d[h+4+2>>0]<<16|d[h+4+3>>0]<<24;c[t>>2]=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;c[t+4>>2]=n;a[t+8>>0]=j;n=Rd(j|0,k|0,8)|0;a[t+9>>0]=n;n=Rd(j|0,k|0,16)|0;a[t+10>>0]=n;n=Rd(j|0,k|0,24)|0;a[t+11>>0]=n;a[t+12>>0]=k;n=Rd(j|0,k|0,40)|0;a[t+13>>0]=n;n=Rd(j|0,k|0,48)|0;a[t+14>>0]=n;n=Rd(j|0,k|0,56)|0;a[t+15>>0]=n;if(g>>>0>0|(g|0)==0&f>>>0>63){do{xa(t+48|0,t,t+16|0,0)|0;l=0;do{a[b+l>>0]=a[t+48+l>>0]^a[e+l>>0];l=l+1|0}while((l|0)!=64);l=1;m=8;while(1){n=t+m|0;l=(d[n>>0]|0)+l|0;a[n>>0]=l;m=m+1|0;if((m|0)==16)break;else l=l>>>8}f=oe(f|0,g|0,-64,-1)|0;g=D;b=b+64|0;e=e+64|0}while(g>>>0>0|(g|0)==0&f>>>0>63);if(!((f|0)==0&(g|0)==0)){p=b;q=f;r=e;o=8}}else{p=b;q=f;r=e;o=8}if((o|0)==8?(xa(t+48|0,t,t+16|0,0)|0,q|0):0){l=0;do{a[p+l>>0]=a[t+48+l>>0]^a[r+l>>0];l=l+1|0}while((l|0)!=(q|0))}fd(t+48|0,64);fd(t+16|0,32)}i=s;return 0}function Na(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=c[b+72>>2]|0;m=c[b+72+4>>2]|0;k=Rd(o|0,m|0,3)|0;l=Pd(e|0,f|0,3)|0;n=D;i=Rd(e|0,f|0,61)|0;j=D;m=oe(o|0,m|0,l|0,n|0)|0;o=D;c[b+72>>2]=m;c[b+72+4>>2]=o;g=c[b+64>>2]|0;h=c[b+64+4>>2]|0;if(o>>>0<n>>>0|(o|0)==(n|0)&m>>>0<l>>>0){g=oe(g|0,h|0,1,0)|0;h=D;c[b+64>>2]=g;c[b+64+4>>2]=h}j=oe(g|0,h|0,i|0,j|0)|0;c[b+64>>2]=j;c[b+64+4>>2]=D;j=le(128,0,k&127|0,0)|0;g=D;if(g>>>0>f>>>0|(g|0)==(f|0)&j>>>0>e>>>0){if(!((e|0)==0&(f|0)==0)){g=0;h=0;do{n=a[d+g>>0]|0;o=oe(g|0,h|0,k&127|0,0)|0;a[b+80+o>>0]=n;g=oe(g|0,h|0,1,0)|0;h=D}while(h>>>0<f>>>0|(h|0)==(f|0)&g>>>0<e>>>0)}}else{if(!((j|0)==0&(g|0)==0)){h=0;i=0;do{n=a[d+h>>0]|0;o=oe(h|0,i|0,k&127|0,0)|0;a[b+80+o>>0]=n;h=oe(h|0,i|0,1,0)|0;i=D}while(i>>>0<g>>>0|(i|0)==(g|0)&h>>>0<j>>>0)}ha(b,b+80|0);g=le(e|0,f|0,j|0,g|0)|0;h=D;if(h>>>0>0|(h|0)==0&g>>>0>127){i=d+j|0;do{ha(b,i);i=i+128|0;g=oe(g|0,h|0,-128,-1)|0;h=D}while(h>>>0>0|(h|0)==0&g>>>0>127);j=i}else j=d+j|0;g=g&127;if(!((g|0)==0&0==0)){h=0;i=0;do{a[b+80+h>>0]=a[j+h>>0]|0;h=oe(h|0,i|0,1,0)|0;i=D}while(i>>>0<0|(i|0)==0&h>>>0<g>>>0)}}return 0}function Oa(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[b+56>>2]|0;g=c[b+56+4>>2]|0;if(!((f|0)==0&(g|0)==0)){a[b+64+f>>0]=1;e=oe(f|0,g|0,1,0)|0;h=D;if(h>>>0<0|(h|0)==0&e>>>0<16){h=le(14,0,f|0,g|0)|0;Hc(b+64+e|0,0,h+1|0)|0}a[b+80>>0]=1;Ba(b,b+64|0,16,0)}g=c[b+24>>2]|0;h=(c[b+28>>2]|0)+(g>>>26)|0;k=(h>>>26)+(c[b+32>>2]|0)|0;i=(k>>>26)+(c[b+36>>2]|0)|0;e=((i>>>26)*5|0)+(c[b+20>>2]|0)|0;l=((((e&67108863)+5|0)>>>26)+((e>>>26)+(g&67108863))|0)>>>26;j=(i|-67108864)+((((l+(h&67108863)|0)>>>26)+(k&67108863)|0)>>>26)|0;g=(((e&67108863)+5|0)>>>26)+((e>>>26)+(g&67108863))&67108863&(j>>>31)+-1|j>>31&(e>>>26)+(g&67108863);k=((l+(h&67108863)|0)>>>26)+k&67108863&(j>>>31)+-1|j>>31&(k&67108863);e=oe(e+5&67108863&(j>>>31)+-1|j>>31&(e&67108863)|g<<26|0,0,c[b+40>>2]|0,0)|0;f=D;g=oe(g>>>6|(l+h&67108863&(j>>>31)+-1|j>>31&(h&67108863))<<20|0,0,c[b+44>>2]|0,0)|0;f=oe(g|0,D|0,f|0,0)|0;g=D;h=oe((l+h&67108863&(j>>>31)+-1|j>>31&(h&67108863))>>>12|k<<14|0,0,c[b+48>>2]|0,0)|0;g=oe(h|0,D|0,g|0,0)|0;h=D;i=oe(k>>>18|((j>>>31)+-1&j|j>>31&i)<<8|0,0,c[b+52>>2]|0,0)|0;h=oe(i|0,D|0,h|0,0)|0;a[d>>0]=e;a[d+1>>0]=e>>8;a[d+2>>0]=e>>16;a[d+3>>0]=e>>24;a[d+4>>0]=f;a[d+4+1>>0]=f>>8;a[d+4+2>>0]=f>>16;a[d+4+3>>0]=f>>24;a[d+8>>0]=g;a[d+8+1>>0]=g>>8;a[d+8+2>>0]=g>>16;a[d+8+3>>0]=g>>24;a[d+12>>0]=h;a[d+12+1>>0]=h>>8;a[d+12+2>>0]=h>>16;a[d+12+3>>0]=h>>24;fd(b,88);return}function Pa(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;g=i;h=i=i+63&-64;i=i+592|0;f=0;do{k=a[e+f>>0]|0;j=f<<1;a[h+520+j>>0]=k&15;a[h+520+(j|1)>>0]=(k&255)>>>4;f=f+1|0}while((f|0)!=32);f=0;e=0;do{k=h+520+e|0;j=(d[k>>0]|0)+f|0;f=(j<<24)+134217728>>28;a[k>>0]=j-(f<<4);e=e+1|0}while((e|0)!=63);a[h+520+63>>0]=(d[h+520+63>>0]|0)+f;f=b;e=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(e|0));c[b+40>>2]=1;f=b+44|0;e=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(e|0));c[b+80>>2]=1;f=b+84|0;e=f+76|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(e|0));f=1;do{Ha(h,(f|0)/2|0,a[h+520+f>>0]|0);Vb(h+240|0,b,h);Zc(b,h+240|0);f=f+2|0}while((f|0)<64);bb(h+400|0,b);dc(h+240|0,h+400|0);ud(h+120|0,h+240|0);dc(h+240|0,h+120|0);ud(h+120|0,h+240|0);dc(h+240|0,h+120|0);ud(h+120|0,h+240|0);dc(h+240|0,h+120|0);Zc(b,h+240|0);f=0;do{Ha(h,(f|0)/2|0,a[h+520+f>>0]|0);Vb(h+240|0,b,h);Zc(b,h+240|0);f=f+2|0}while((f|0)<64);i=g;return}function Qa(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0;m=i;n=i=i+63&-64;i=i+192|0;if((e+-1&255)>63)ba();if((f|0)!=0&g<<24>>24!=0?(g&255)<=64:0){a[n+128>>0]=e;a[n+128+1>>0]=g;a[n+128+2>>0]=1;a[n+128+3>>0]=1;k=n+128+4|0;l=k+28|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));if(!h){k=n+128+32|0;l=k+16|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0))}else{k=n+128+32|0;e=h;l=k+16|0;do{a[k>>0]=a[e>>0]|0;k=k+1|0;e=e+1|0}while((k|0)<(l|0))}if(!j){k=n+128+48|0;l=k+16|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0))}else{k=n+128+48|0;e=j;l=k+16|0;do{a[k>>0]=a[e>>0]|0;k=k+1|0;e=e+1|0}while((k|0)<(l|0))}Hc(b+64|0,0,293)|0;k=b;e=400;l=k+64|0;do{c[k>>2]=c[e>>2];k=k+4|0;e=e+4|0}while((k|0)<(l|0));e=0;do{k=n+128+(e<<3)|0;j=b+(e<<3)|0;l=c[j+4>>2]^(d[k+4>>0]|d[k+4+1>>0]<<8|d[k+4+2>>0]<<16|d[k+4+3>>0]<<24);c[j>>2]=c[j>>2]^(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24);c[j+4>>2]=l;e=e+1|0}while((e|0)!=8);Hc(n+(g&255)|0,0,(g<<24>>24<0?0:128-(g&255)|0)|0)|0;tc(n|0,f|0,g&255|0)|0;ib(b,n,128,0);fd(n,128);i=m;return}ba()}function Ra(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=c[b+56>>2]|0;g=c[b+56+4>>2]|0;if(!((h|0)==0&(g|0)==0)){j=le(16,0,h|0,g|0)|0;l=D;k=l>>>0>f>>>0|(l|0)==(f|0)&j>>>0>e>>>0?e:j;l=l>>>0>f>>>0|(l|0)==(f|0)&j>>>0>e>>>0?f:l;if(!((k|0)==0&(l|0)==0)){j=0;i=0;do{n=a[d+j>>0]|0;h=oe(h|0,g|0,j|0,i|0)|0;a[b+64+h>>0]=n;j=oe(j|0,i|0,1,0)|0;i=D;h=c[b+56>>2]|0;g=c[b+56+4>>2]|0}while(i>>>0<l>>>0|(i|0)==(l|0)&j>>>0<k>>>0)}n=oe(h|0,g|0,k|0,l|0)|0;j=D;c[b+56>>2]=n;c[b+56+4>>2]=j;if(!(j>>>0<0|(j|0)==0&n>>>0<16)){e=le(e|0,f|0,k|0,l|0)|0;f=D;Ba(b,b+64|0,16,0);c[b+56>>2]=0;c[b+56+4>>2]=0;d=d+k|0;m=6}}else m=6;if((m|0)==6){g=e&-16;if(f>>>0>0|(f|0)==0&e>>>0>15){h=le(e|0,f|0,g|0,f|0)|0;n=D;Ba(b,d,g,f);i=d+g|0;g=n}else{i=d;h=e;g=f}if(!((h|0)==0&(g|0)==0)){e=0;d=0;do{m=a[i+e>>0]|0;n=oe(c[b+56>>2]|0,c[b+56+4>>2]|0,e|0,d|0)|0;a[b+64+n>>0]=m;e=oe(e|0,d|0,1,0)|0;d=D}while(d>>>0<g>>>0|(d|0)==(g|0)&e>>>0<h>>>0);n=oe(c[b+56>>2]|0,c[b+56+4>>2]|0,h|0,g|0)|0;c[b+56>>2]=n;c[b+56+4>>2]=D}}return}function Sa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;f=i=i+63&-64;i=i+368|0;if(!((a|0)==0|(b|0)==0)){yc(f,0,0,64)|0;c[f+360>>2]=c[b+48>>2];ue(f,f+360|0,4,0)|0;c[f+360>>2]=c[b+4>>2];ue(f,f+360|0,4,0)|0;c[f+360>>2]=c[b+44>>2];ue(f,f+360|0,4,0)|0;c[f+360>>2]=c[b+40>>2];ue(f,f+360|0,4,0)|0;c[f+360>>2]=19;ue(f,f+360|0,4,0)|0;c[f+360>>2]=d;ue(f,f+360|0,4,0)|0;c[f+360>>2]=c[b+12>>2];ue(f,f+360|0,4,0)|0;d=c[b+8>>2]|0;if(d|0?(ue(f,d,c[b+12>>2]|0,0)|0,c[b+56>>2]&1|0):0){fd(c[b+8>>2]|0,c[b+12>>2]|0);c[b+12>>2]=0}c[f+360>>2]=c[b+20>>2];ue(f,f+360|0,4,0)|0;d=c[b+16>>2]|0;if(d|0)ue(f,d,c[b+20>>2]|0,0)|0;c[f+360>>2]=c[b+28>>2];ue(f,f+360|0,4,0)|0;d=c[b+24>>2]|0;if(d|0?(ue(f,d,c[b+28>>2]|0,0)|0,c[b+56>>2]&2|0):0){fd(c[b+24>>2]|0,c[b+28>>2]|0);c[b+28>>2]=0}c[f+360>>2]=c[b+36>>2];ue(f,f+360|0,4,0)|0;d=c[b+32>>2]|0;if(d|0)ue(f,d,c[b+36>>2]|0,0)|0;Fd(f,a,64)|0}i=e;return}function Ta(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;k=i;l=i=i+63&-64;i=i+496|0;c[l+360>>2]=d;if(d>>>0<65){if((yc(l,0,0,d)|0)>=0){ue(l,l+360|0,4,0)|0;ue(l,e,f,0)|0;Fd(l,b,d)|0}}else a:do if((yc(l,0,0,64)|0)>=0?(ue(l,l+360|0,4,0)|0,ue(l,e,f,0)|0,(Fd(l,l+432|0,64)|0)>=0):0){g=b;h=l+432|0;j=g+32|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(j|0));g=l+368|0;h=l+432|0;j=g+64|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(j|0));if((d+-32|0)>>>0>64){f=d+-32|0;e=b+32|0;do{if((Cc(l+432|0,64,l+368|0,64,0,0,0)|0)<0)break a;g=e;h=l+432|0;j=g+32|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(j|0));f=f+-32|0;e=e+32|0;g=l+368|0;h=l+432|0;j=g+64|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(j|0))}while(f>>>0>64)}else{f=d+-32|0;e=b+32|0}if((Cc(l+432|0,f,l+368|0,64,0,0,0)|0)>=0)tc(e|0,l+432|0,f|0)|0}while(0);fd(l,357);i=k;return}function Ua(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;a:do if(!((e|0)==0&(f|0)==0)){j=c[b+32>>2]|0;g=c[b+32+4>>2]|0;i=Rd(j|0,g|0,3)|0;h=Pd(e|0,f|0,3)|0;h=oe(j|0,g|0,h|0,D|0)|0;c[b+32>>2]=h;c[b+32+4>>2]=D;if(0>f>>>0|0==(f|0)&(64-(i&63)|0)>>>0>e>>>0){g=0;h=0;while(1){k=a[d+g>>0]|0;j=oe(g|0,h|0,i&63|0,0)|0;a[b+40+j>>0]=k;g=oe(g|0,h|0,1,0)|0;h=D;if(!(h>>>0<f>>>0|(h|0)==(f|0)&g>>>0<e>>>0))break a}}if(64-(i&63)|0){g=0;h=0;do{j=a[d+g>>0]|0;k=oe(g|0,h|0,i&63|0,0)|0;a[b+40+k>>0]=j;g=oe(g|0,h|0,1,0)|0;h=D}while(h>>>0<0|(h|0)==0&g>>>0<(64-(i&63)|0)>>>0)}ka(b,b+40|0);g=le(e|0,f|0,64-(i&63)|0,0)|0;h=D;if(h>>>0>0|(h|0)==0&g>>>0>63){e=d+(64-(i&63))|0;do{ka(b,e);e=e+64|0;g=oe(g|0,h|0,-64,-1)|0;h=D}while(h>>>0>0|(h|0)==0&g>>>0>63);f=e}else f=d+(64-(i&63))|0;g=g&63;if(!((g|0)==0&0==0)){h=0;e=0;do{a[b+40+h>>0]=a[f+h>>0]|0;h=oe(h|0,e|0,1,0)|0;e=D}while(e>>>0<0|(e|0)==0&h>>>0<g>>>0)}}while(0);return 0}function Va(a,b,e,f,g,h,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0;k=i;l=i=i+63&-64;i=i+64|0;if(!((e|0)==0&(f|0)==0)){c[l>>2]=1634760805;c[l+4>>2]=857760878;c[l+8>>2]=2036477234;c[l+12>>2]=1797285236;c[l+16>>2]=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;c[l+20>>2]=d[j+4>>0]|d[j+4+1>>0]<<8|d[j+4+2>>0]<<16|d[j+4+3>>0]<<24;c[l+24>>2]=d[j+8>>0]|d[j+8+1>>0]<<8|d[j+8+2>>0]<<16|d[j+8+3>>0]<<24;c[l+28>>2]=d[j+12>>0]|d[j+12+1>>0]<<8|d[j+12+2>>0]<<16|d[j+12+3>>0]<<24;c[l+32>>2]=d[j+16>>0]|d[j+16+1>>0]<<8|d[j+16+2>>0]<<16|d[j+16+3>>0]<<24;c[l+36>>2]=d[j+20>>0]|d[j+20+1>>0]<<8|d[j+20+2>>0]<<16|d[j+20+3>>0]<<24;c[l+40>>2]=d[j+24>>0]|d[j+24+1>>0]<<8|d[j+24+2>>0]<<16|d[j+24+3>>0]<<24;c[l+44>>2]=d[j+28>>0]|d[j+28+1>>0]<<8|d[j+28+2>>0]<<16|d[j+28+3>>0]<<24;c[l+48>>2]=h;c[l+52>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[l+56>>2]=d[g+4>>0]|d[g+4+1>>0]<<8|d[g+4+2>>0]<<16|d[g+4+3>>0]<<24;c[l+60>>2]=d[g+8>>0]|d[g+8+1>>0]<<8|d[g+8+2>>0]<<16|d[g+8+3>>0]<<24;va(l,b,a,e,f);fd(l,64)}i=k;return 0}function Wa(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;j=i=i+63&-64;i=i+64|0;if(!((b|0)==0&(e|0)==0)){c[j>>2]=1634760805;c[j+4>>2]=857760878;c[j+8>>2]=2036477234;c[j+12>>2]=1797285236;c[j+16>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[j+20>>2]=d[g+4>>0]|d[g+4+1>>0]<<8|d[g+4+2>>0]<<16|d[g+4+3>>0]<<24;c[j+24>>2]=d[g+8>>0]|d[g+8+1>>0]<<8|d[g+8+2>>0]<<16|d[g+8+3>>0]<<24;c[j+28>>2]=d[g+12>>0]|d[g+12+1>>0]<<8|d[g+12+2>>0]<<16|d[g+12+3>>0]<<24;c[j+32>>2]=d[g+16>>0]|d[g+16+1>>0]<<8|d[g+16+2>>0]<<16|d[g+16+3>>0]<<24;c[j+36>>2]=d[g+20>>0]|d[g+20+1>>0]<<8|d[g+20+2>>0]<<16|d[g+20+3>>0]<<24;c[j+40>>2]=d[g+24>>0]|d[g+24+1>>0]<<8|d[g+24+2>>0]<<16|d[g+24+3>>0]<<24;c[j+44>>2]=d[g+28>>0]|d[g+28+1>>0]<<8|d[g+28+2>>0]<<16|d[g+28+3>>0]<<24;c[j+48>>2]=0;c[j+52>>2]=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;c[j+56>>2]=d[f+4>>0]|d[f+4+1>>0]<<8|d[f+4+2>>0]<<16|d[f+4+3>>0]<<24;c[j+60>>2]=d[f+8>>0]|d[f+8+1>>0]<<8|d[f+8+2>>0]<<16|d[f+8+3>>0]<<24;Hc(a|0,0,b|0)|0;va(j,a,a,b,e);fd(j,64)}i=h;return 0}function Xa(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;n=i;m=i=i+63&-64;i=i+592|0;h=32;g=1;j=0;while(1){h=h+-1|0;k=a[b+32+h>>0]|0;l=a[33097+h>>0]|0;g=g&255;j=((k&255)-(l&255)|0)>>>8&g|j&255;if(!h)break;else g=(((l^k)&255)+65535|0)>>>8&g}a:do if(j){h=0;do{g=0;j=0;do{j=a[16+(h<<5)+g>>0]^a[b+g>>0]|j;g=g+1|0}while((g|0)!=32);h=h+1|0;if(!(j<<24>>24)){g=-1;break a}}while(h>>>0<12);if(!(za(m+328|0,f)|0)){g=0;h=0;do{h=a[f+g>>0]|h;g=g+1|0}while((g|0)!=32);if(h<<24>>24){nd(m)|0;Na(m,b,32,0)|0;Na(m,f,32,0)|0;Na(m,c,d,e)|0;rc(m,m+520|0)|0;oa(m+520|0);Fa(m+208|0,m+520|0,m+328|0,b+32|0);vc(m+488|0,m+208|0);g=zd(m+488|0,b)|0;g=((m+488|0)==(b|0)?-1:g)|(Dc(b,m+488|0,32)|0)}else g=-1}else g=-1}else g=-1;while(0);i=n;return g|0}function Ya(b,c,d,e,f,g,h){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0;k=i;l=i=i+63&-64;i=i+352|0;Aa(l+256|0,g,h,0)|0;if(b>>>0>=d>>>0?0<f>>>0|0==(f|0)&(b-d|0)>>>0<e>>>0:0)j=5;else if(d>>>0>=b>>>0?0<f>>>0|0==(f|0)&(d-b|0)>>>0<e>>>0:0)j=5;if((j|0)==5){Xc(b|0,d|0,e|0)|0;d=b}h=l+288|0;j=h+32|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));h=f>>>0>0|(f|0)==0&e>>>0>32?32:e;j=f>>>0>0|(f|0)==0&e>>>0>32?0:f;if(!((h|0)==0&(j|0)==0)){m=oe((f>>>0<0|(f|0)==0&e>>>0<32?e:32)|0,(f>>>0<0|(f|0)==0&e>>>0<32?f:0)|0,-1,0)|0;tc(l+288+32|0,d|0,m+1|0)|0}m=oe(h|0,j|0,32,0)|0;Wd(l+288|0,l+288|0,m,D,g+16|0,l+256|0)|0;Se(l,l+288|0)|0;if(!((h|0)==0&(j|0)==0)){m=oe((f>>>0<0|(f|0)==0&e>>>0<32?e:32)|0,(f>>>0<0|(f|0)==0&e>>>0<32?f:0)|0,-1,0)|0;tc(b|0,l+288+32|0,m+1|0)|0}fd(l+288|0,64);if(f>>>0>0|(f|0)==0&e>>>0>32){m=le(e|0,f|0,h|0,j|0)|0;Ma(b+h|0,d+h|0,m,D,g+16|0,1,0,l+256|0)|0}fd(l+256|0,32);ne(l,b,e,f)|0;Re(l,c)|0;fd(l,256);i=k;return 0}function Za(a,b,e,f,g,h,j,k){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0;l=i;m=i=i+63&-64;i=i+64|0;if(!((e|0)==0&(f|0)==0)){c[m>>2]=1634760805;c[m+4>>2]=857760878;c[m+8>>2]=2036477234;c[m+12>>2]=1797285236;c[m+16>>2]=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;c[m+20>>2]=d[k+4>>0]|d[k+4+1>>0]<<8|d[k+4+2>>0]<<16|d[k+4+3>>0]<<24;c[m+24>>2]=d[k+8>>0]|d[k+8+1>>0]<<8|d[k+8+2>>0]<<16|d[k+8+3>>0]<<24;c[m+28>>2]=d[k+12>>0]|d[k+12+1>>0]<<8|d[k+12+2>>0]<<16|d[k+12+3>>0]<<24;c[m+32>>2]=d[k+16>>0]|d[k+16+1>>0]<<8|d[k+16+2>>0]<<16|d[k+16+3>>0]<<24;c[m+36>>2]=d[k+20>>0]|d[k+20+1>>0]<<8|d[k+20+2>>0]<<16|d[k+20+3>>0]<<24;c[m+40>>2]=d[k+24>>0]|d[k+24+1>>0]<<8|d[k+24+2>>0]<<16|d[k+24+3>>0]<<24;c[m+44>>2]=d[k+28>>0]|d[k+28+1>>0]<<8|d[k+28+2>>0]<<16|d[k+28+3>>0]<<24;c[m+48>>2]=h;c[m+52>>2]=j;c[m+56>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[m+60>>2]=d[g+4>>0]|d[g+4+1>>0]<<8|d[g+4+2>>0]<<16|d[g+4+3>>0]<<24;va(m,b,a,e,f);fd(m,64)}i=l;return 0}function _a(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;k=i;l=i=i+63&-64;i=i+1024|0;if(c[e+20>>2]|0){j=0;do{a[b+64>>0]=0;a[b+64+1>>0]=0;a[b+64+2>>0]=0;a[b+64+3>>0]=0;a[b+68>>0]=j;a[b+68+1>>0]=j>>8;a[b+68+2>>0]=j>>16;a[b+68+3>>0]=j>>24;Ta(l,1024,b,72);g=S(c[e+16>>2]|0,j)|0;h=c[(c[e>>2]|0)+4>>2]|0;f=0;do{o=l+(f<<3)|0;n=d[o+4>>0]|d[o+4+1>>0]<<8|d[o+4+2>>0]<<16|d[o+4+3>>0]<<24;m=h+(g<<10)+(f<<3)|0;c[m>>2]=d[o>>0]|d[o+1>>0]<<8|d[o+2>>0]<<16|d[o+3>>0]<<24;c[m+4>>2]=n;f=f+1|0}while((f|0)!=128);a[b+64>>0]=1;a[b+64+1>>0]=0;a[b+64+2>>0]=0;a[b+64+3>>0]=0;Ta(l,1024,b,72);g=(S(c[e+16>>2]|0,j)|0)+1|0;h=c[(c[e>>2]|0)+4>>2]|0;f=0;do{m=l+(f<<3)|0;n=d[m+4>>0]|d[m+4+1>>0]<<8|d[m+4+2>>0]<<16|d[m+4+3>>0]<<24;o=h+(g<<10)+(f<<3)|0;c[o>>2]=d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24;c[o+4>>2]=n;f=f+1|0}while((f|0)!=128);j=j+1|0}while(j>>>0<(c[e+20>>2]|0)>>>0)}fd(l,1024);i=k;return}function $a(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;j=i=i+63&-64;i=i+64|0;if(!((b|0)==0&(e|0)==0)){c[j>>2]=1634760805;c[j+4>>2]=857760878;c[j+8>>2]=2036477234;c[j+12>>2]=1797285236;c[j+16>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[j+20>>2]=d[g+4>>0]|d[g+4+1>>0]<<8|d[g+4+2>>0]<<16|d[g+4+3>>0]<<24;c[j+24>>2]=d[g+8>>0]|d[g+8+1>>0]<<8|d[g+8+2>>0]<<16|d[g+8+3>>0]<<24;c[j+28>>2]=d[g+12>>0]|d[g+12+1>>0]<<8|d[g+12+2>>0]<<16|d[g+12+3>>0]<<24;c[j+32>>2]=d[g+16>>0]|d[g+16+1>>0]<<8|d[g+16+2>>0]<<16|d[g+16+3>>0]<<24;c[j+36>>2]=d[g+20>>0]|d[g+20+1>>0]<<8|d[g+20+2>>0]<<16|d[g+20+3>>0]<<24;c[j+40>>2]=d[g+24>>0]|d[g+24+1>>0]<<8|d[g+24+2>>0]<<16|d[g+24+3>>0]<<24;c[j+44>>2]=d[g+28>>0]|d[g+28+1>>0]<<8|d[g+28+2>>0]<<16|d[g+28+3>>0]<<24;c[j+48>>2]=0;c[j+52>>2]=0;c[j+56>>2]=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;c[j+60>>2]=d[f+4>>0]|d[f+4+1>>0]<<8|d[f+4+2>>0]<<16|d[f+4+3>>0]<<24;Hc(a|0,0,b|0)|0;va(j,a,a,b,e);fd(j,64)}i=h;return 0}function ab(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(e<<24>>24?(e&255)<=64:0){if((c[b+80>>2]|0)==0?(c[b+80+4>>2]|0)==0:0){f=c[b+352>>2]|0;do if(f>>>0>128){f=c[b+64>>2]|0;i=c[b+64+4>>2]|0;j=oe(f|0,i|0,128,0)|0;c[b+64>>2]=j;c[b+64+4>>2]=D;f=oe((i>>>0>4294967295|(i|0)==-1&f>>>0>4294967167)&1|0,0,c[b+72>>2]|0,c[b+72+4>>2]|0)|0;c[b+72>>2]=f;c[b+72+4>>2]=D;ia(b,b+96|0);f=(c[b+352>>2]|0)+-128|0;c[b+352>>2]=f;if(f>>>0<129){tc(b+96|0,b+224|0,f|0)|0;g=b+72|0;h=c[b+352>>2]|0;break}else fa(32331,32363,343,32407)}else{g=b+72|0;h=f}while(0);j=oe(c[b+64>>2]|0,c[b+64+4>>2]|0,h|0,0)|0;f=D;c[b+64>>2]=j;c[b+64+4>>2]=f;i=g;i=oe((f>>>0<0|(f|0)==0&j>>>0<h>>>0)&1|0,0,c[i>>2]|0,c[i+4>>2]|0)|0;j=g;c[j>>2]=i;c[j+4>>2]=D;if(a[b+356>>0]|0){c[b+88>>2]=-1;c[b+88+4>>2]=-1}c[b+80>>2]=-1;c[b+80+4>>2]=-1;Hc(b+96+h|0,0,256-h|0)|0;ia(b,b+96|0);tc(d|0,b|0,e&255|0)|0;f=0}else f=-1;return f|0}ba();return 0}function bb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=c[b+4>>2]|0;k=c[b+8>>2]|0;j=c[b+12>>2]|0;i=c[b+16>>2]|0;h=c[b+20>>2]|0;g=c[b+24>>2]|0;f=c[b+28>>2]|0;e=c[b+32>>2]|0;d=c[b+36>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=l;c[a+8>>2]=k;c[a+12>>2]=j;c[a+16>>2]=i;c[a+20>>2]=h;c[a+24>>2]=g;c[a+28>>2]=f;c[a+32>>2]=e;c[a+36>>2]=d;d=c[b+44>>2]|0;e=c[b+48>>2]|0;f=c[b+52>>2]|0;g=c[b+56>>2]|0;h=c[b+60>>2]|0;i=c[b+64>>2]|0;j=c[b+68>>2]|0;k=c[b+72>>2]|0;l=c[b+76>>2]|0;c[a+40>>2]=c[b+40>>2];c[a+44>>2]=d;c[a+48>>2]=e;c[a+52>>2]=f;c[a+56>>2]=g;c[a+60>>2]=h;c[a+64>>2]=i;c[a+68>>2]=j;c[a+72>>2]=k;c[a+76>>2]=l;l=c[b+84>>2]|0;k=c[b+88>>2]|0;j=c[b+92>>2]|0;i=c[b+96>>2]|0;h=c[b+100>>2]|0;g=c[b+104>>2]|0;f=c[b+108>>2]|0;e=c[b+112>>2]|0;d=c[b+116>>2]|0;c[a+80>>2]=c[b+80>>2];c[a+84>>2]=l;c[a+88>>2]=k;c[a+92>>2]=j;c[a+96>>2]=i;c[a+100>>2]=h;c[a+104>>2]=g;c[a+108>>2]=f;c[a+112>>2]=e;c[a+116>>2]=d;return}function cb(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0;j=i;k=i=i+63&-64;i=i+96|0;c[k>>2]=(d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24)&67108863;c[k+4>>2]=(d[h+3>>0]|d[h+3+1>>0]<<8|d[h+3+2>>0]<<16|d[h+3+3>>0]<<24)>>>2&67108611;c[k+8>>2]=(d[h+6>>0]|d[h+6+1>>0]<<8|d[h+6+2>>0]<<16|d[h+6+3>>0]<<24)>>>4&67092735;c[k+12>>2]=(d[h+9>>0]|d[h+9+1>>0]<<8|d[h+9+2>>0]<<16|d[h+9+3>>0]<<24)>>>6&66076671;c[k+16>>2]=(d[h+12>>0]|d[h+12+1>>0]<<8|d[h+12+2>>0]<<16|d[h+12+3>>0]<<24)>>>8&1048575;c[k+20>>2]=0;c[k+20+4>>2]=0;c[k+20+8>>2]=0;c[k+20+12>>2]=0;c[k+20+16>>2]=0;c[k+40>>2]=d[h+16>>0]|d[h+16+1>>0]<<8|d[h+16+2>>0]<<16|d[h+16+3>>0]<<24;c[k+44>>2]=d[h+20>>0]|d[h+20+1>>0]<<8|d[h+20+2>>0]<<16|d[h+20+3>>0]<<24;c[k+48>>2]=d[h+24>>0]|d[h+24+1>>0]<<8|d[h+24+2>>0]<<16|d[h+24+3>>0]<<24;c[k+52>>2]=d[h+28>>0]|d[h+28+1>>0]<<8|d[h+28+2>>0]<<16|d[h+28+3>>0]<<24;c[k+56>>2]=0;c[k+56+4>>2]=0;a[k+80>>0]=0;Ra(k,e,f,g);Oa(k,b);i=j;return 0}function db(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=c[a>>2]|0;v=c[a+4>>2]|0;t=c[a+8>>2]|0;r=c[a+12>>2]|0;p=c[a+16>>2]|0;n=c[a+20>>2]|0;l=c[a+24>>2]|0;j=c[a+28>>2]|0;h=c[a+32>>2]|0;f=c[a+36>>2]|0;w=c[b>>2]|0;u=c[b+4>>2]|0;s=c[b+8>>2]|0;q=c[b+12>>2]|0;o=c[b+16>>2]|0;m=c[b+20>>2]|0;k=c[b+24>>2]|0;i=c[b+28>>2]|0;g=c[b+32>>2]|0;e=c[b+36>>2]|0;c[a>>2]=(w^x)&0-d^x;c[a+4>>2]=(u^v)&0-d^v;c[a+8>>2]=(s^t)&0-d^t;c[a+12>>2]=(q^r)&0-d^r;c[a+16>>2]=(o^p)&0-d^p;c[a+20>>2]=(m^n)&0-d^n;c[a+24>>2]=(k^l)&0-d^l;c[a+28>>2]=(i^j)&0-d^j;c[a+32>>2]=(g^h)&0-d^h;c[a+36>>2]=(e^f)&0-d^f;c[b>>2]=(w^x)&0-d^w;c[b+4>>2]=(u^v)&0-d^u;c[b+8>>2]=(s^t)&0-d^s;c[b+12>>2]=(q^r)&0-d^q;c[b+16>>2]=(o^p)&0-d^o;c[b+20>>2]=(m^n)&0-d^m;c[b+24>>2]=(k^l)&0-d^k;c[b+28>>2]=(i^j)&0-d^i;c[b+32>>2]=(g^h)&0-d^g;c[b+36>>2]=(e^f)&0-d^e;return}function eb(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0;k=i;j=i=i+63&-64;i=i+96|0;Aa(j,f,g,0)|0;fb(j+32|0,32,0,f+16|0,j)|0;if(!($d(c,b,d,e,j+32|0)|0))if(!a)c=0;else{if(b>>>0>=a>>>0?0<e>>>0|0==(e|0)&(b-a|0)>>>0<d>>>0:0)h=8;else if(a>>>0>=b>>>0?0<e>>>0|0==(e|0)&(a-b|0)>>>0<d>>>0:0)h=8;if((h|0)==8){Xc(a|0,b|0,d|0)|0;b=a}c=e>>>0>0|(e|0)==0&d>>>0>32?32:d;g=e>>>0>0|(e|0)==0&d>>>0>32?0:e;if((c|0)==0&(g|0)==0)Wd(j+32|0,j+32|0,32,0,f+16|0,j)|0;else{h=oe((e>>>0<0|(e|0)==0&d>>>0<32?d:32)|0,(e>>>0<0|(e|0)==0&d>>>0<32?e:0)|0,-1,0)|0;tc(j+32+32|0,b|0,h+1|0)|0;l=oe(c|0,g|0,32,0)|0;Wd(j+32|0,j+32|0,l,D,f+16|0,j)|0;tc(a|0,j+32+32|0,h+1|0)|0}if(e>>>0>0|(e|0)==0&d>>>0>32){l=le(d|0,e|0,c|0,g|0)|0;Ma(a+c|0,b+c|0,l,D,f+16|0,1,0,j)|0}fd(j,32);c=0}else{fd(j,32);c=-1}i=k;return c|0}function fb(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=i;p=i=i+63&-64;i=i+112|0;if(!((e|0)==0&(f|0)==0)){k=p+16|0;j=k+32|0;do{a[k>>0]=a[h>>0]|0;k=k+1|0;h=h+1|0}while((k|0)<(j|0));k=d[g+4>>0]|d[g+4+1>>0]<<8|d[g+4+2>>0]<<16|d[g+4+3>>0]<<24;c[p>>2]=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[p+4>>2]=k;c[p+8>>2]=0;c[p+8+4>>2]=0;if(f>>>0>0|(f|0)==0&e>>>0>63){do{xa(b,p,p+16|0,0)|0;h=1;j=8;while(1){k=p+j|0;h=(d[k>>0]|0)+h|0;a[k>>0]=h;j=j+1|0;if((j|0)==16)break;else h=h>>>8}e=oe(e|0,f|0,-64,-1)|0;f=D;b=b+64|0}while(f>>>0>0|(f|0)==0&e>>>0>63);if(!((e|0)==0&(f|0)==0)){m=b;n=e;l=7}}else{m=b;n=e;l=7}if((l|0)==7?(xa(p+48|0,p,p+16|0,0)|0,n|0):0){h=0;do{a[m+h>>0]=a[p+48+h>>0]|0;h=h+1|0}while((h|0)!=(n|0))}fd(p+48|0,64);fd(p+16|0,32)}i=o;return 0}function gb(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0;k=i;l=i=i+63&-64;i=i+64|0;if((e+-1&255)>63)ba();a[l>>0]=e;a[l+1>>0]=0;a[l+2>>0]=1;a[l+3>>0]=1;h=l+4|0;j=h+28|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));if(!f){h=l+32|0;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0))}else{h=l+32|0;e=f;j=h+16|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(j|0))}if(!g){h=l+48|0;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0))}else{h=l+48|0;e=g;j=h+16|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(j|0))}Hc(b+64|0,0,293)|0;h=b;e=400;j=h+64|0;do{c[h>>2]=c[e>>2];h=h+4|0;e=e+4|0}while((h|0)<(j|0));e=0;do{h=l+(e<<3)|0;g=b+(e<<3)|0;j=c[g+4>>2]^(d[h+4>>0]|d[h+4+1>>0]<<8|d[h+4+2>>0]<<16|d[h+4+3>>0]<<24);c[g>>2]=c[g>>2]^(d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24);c[g+4>>2]=j;e=e+1|0}while((e|0)!=8);i=k;return}function hb(b,e){b=b|0;e=e|0;c[b>>2]=(d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24)&67108863;c[b+4>>2]=(d[e+3>>0]|d[e+3+1>>0]<<8|d[e+3+2>>0]<<16|d[e+3+3>>0]<<24)>>>2&67108611;c[b+8>>2]=(d[e+6>>0]|d[e+6+1>>0]<<8|d[e+6+2>>0]<<16|d[e+6+3>>0]<<24)>>>4&67092735;c[b+12>>2]=(d[e+9>>0]|d[e+9+1>>0]<<8|d[e+9+2>>0]<<16|d[e+9+3>>0]<<24)>>>6&66076671;c[b+16>>2]=(d[e+12>>0]|d[e+12+1>>0]<<8|d[e+12+2>>0]<<16|d[e+12+3>>0]<<24)>>>8&1048575;c[b+20>>2]=0;c[b+20+4>>2]=0;c[b+20+8>>2]=0;c[b+20+12>>2]=0;c[b+20+16>>2]=0;c[b+40>>2]=d[e+16>>0]|d[e+16+1>>0]<<8|d[e+16+2>>0]<<16|d[e+16+3>>0]<<24;c[b+44>>2]=d[e+20>>0]|d[e+20+1>>0]<<8|d[e+20+2>>0]<<16|d[e+20+3>>0]<<24;c[b+48>>2]=d[e+24>>0]|d[e+24+1>>0]<<8|d[e+24+2>>0]<<16|d[e+24+3>>0]<<24;c[b+52>>2]=d[e+28>>0]|d[e+28+1>>0]<<8|d[e+28+2>>0]<<16|d[e+28+3>>0]<<24;c[b+56>>2]=0;c[b+56+4>>2]=0;a[b+80>>0]=0;return 0}function ib(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a:do if(!((e|0)==0&(f|0)==0)){g=c[b+352>>2]|0;j=f;while(1){i=256-g|0;f=b+96+g|0;if(!(j>>>0>0|(j|0)==0&e>>>0>i>>>0))break;tc(f|0,d|0,i|0)|0;c[b+352>>2]=(c[b+352>>2]|0)+i;f=c[b+64>>2]|0;g=c[b+64+4>>2]|0;h=oe(f|0,g|0,128,0)|0;c[b+64>>2]=h;c[b+64+4>>2]=D;f=oe((g>>>0>4294967295|(g|0)==-1&f>>>0>4294967167)&1|0,0,c[b+72>>2]|0,c[b+72+4>>2]|0)|0;c[b+72>>2]=f;c[b+72+4>>2]=D;ia(b,b+96|0);f=b+96|0;g=b+224|0;h=f+128|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(h|0));g=(c[b+352>>2]|0)+-128|0;c[b+352>>2]=g;e=le(e|0,j|0,i|0,0)|0;f=D;if((e|0)==0&(f|0)==0)break a;else{d=d+i|0;j=f}}tc(f|0,d|0,e|0)|0;j=oe(c[b+352>>2]|0,0,e|0,j|0)|0;c[b+352>>2]=j}while(0);return}function jb(a){a=a|0;var b=0,d=0;do if(a)if(c[a>>2]|0)if((c[a+4>>2]|0)>>>0>=16){if((c[a+8>>2]|0)==0?c[a+12>>2]|0:0){b=-18;break}b=c[a+20>>2]|0;if(!(c[a+16>>2]|0)){if(b|0){b=-19;break}}else if(b>>>0<8){b=-6;break}if((c[a+24>>2]|0)==0?c[a+28>>2]|0:0){b=-20;break}if((c[a+32>>2]|0)==0?c[a+36>>2]|0:0){b=-21;break}b=c[a+44>>2]|0;if(b>>>0>=8)if(b>>>0<=2097152){d=c[a+48>>2]|0;if(b>>>0>=d<<3>>>0)if((c[a+40>>2]|0)>>>0>=3)if(d)if(d>>>0<=16777215){b=c[a+52>>2]|0;if(!b)b=-28;else b=b>>>0>16777215?-29:0}else b=-17;else b=-16;else b=-12;else b=-14}else b=-15;else b=-14}else b=-2;else b=-1;else b=-25;while(0);return b|0}function kb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;l=i;k=i=i+63&-64;i=i+64|0;e=k+4+4|0;f=e+52|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));e=kc(a)|0;c[k+36>>2]=e;c[k+20>>2]=e;c[k+4>>2]=e;h=na(e)|0;c[k+32>>2]=h;f=na(e)|0;c[k+16>>2]=f;g=na(e)|0;c[k>>2]=g;do if((f|0)==0|(g|0)==0|(h|0)==0){ta(h);ta(f);ta(g);e=-22}else{j=na(e)|0;if(!j){ta(h);ta(f);ta(g);e=-22;break}e=Ja(k,a)|0;if(e|0){ta(c[k+32>>2]|0);ta(c[k+16>>2]|0);ta(c[k>>2]|0);ta(j);break}d=xb(c[k+40>>2]|0,c[k+44>>2]|0,c[k+52>>2]|0,b,d,c[k+16>>2]|0,c[k+20>>2]|0,j,c[k+4>>2]|0,0,0)|0;ta(c[k+32>>2]|0);ta(c[k+16>>2]|0);if((d|0)==0?(Dc(j,c[k>>2]|0,c[k+4>>2]|0)|0)==0:0)e=0;else e=-35;ta(j);ta(c[k>>2]|0)}while(0);i=l;return e|0}function lb(a,b,d,e,f,g,h,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0;n=i;i=i+352|0;we(n+280|0,64,0,l,m)|0;Se(n,n+280|0)|0;fd(n+280|0,64);ne(n,h,j,k)|0;b=le(0,0,j|0,k|0)|0;ne(n,34460,b&15,0)|0;ne(n,d,e,f)|0;b=le(0,0,e|0,f|0)|0;ne(n,34460,b&15,0)|0;c[n+256>>2]=j;c[n+256+4>>2]=k;ne(n,n+256|0,8,0)|0;c[n+256>>2]=e;c[n+256+4>>2]=f;ne(n,n+256|0,8,0)|0;Re(n,n+264|0)|0;fd(n,256);b=Ad(n+264|0,g)|0;fd(n+264|0,16);do if(a)if(!b){Ld(a,d,e,f,l,1,m)|0;b=0;break}else{Hc(a|0,0,e|0)|0;b=-1;break}while(0);i=n;return b|0}function mb(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if(!g){n=0;m=0;k=0;l=0}else{n=0;m=0;k=0;q=0;while(1){p=n<<24>>24==0;while(1){l=d[f+k>>0]|0;o=(((l&223)+201&255)+65526^((l&223)+201&255)+65520)>>>8;if((o|((l^48)+65526|0)>>>8)&255|0)break;if(!((h|0)!=0&p)){l=0;break a}if(!(Ke(h,l)|0)){n=0;l=0;break a}k=k+1|0;if(k>>>0>=g>>>0){n=0;l=0;break a}}l=o&(l&223)+201|((l^48)+65526|0)>>>8&(l^48);if(m>>>0>=e>>>0)break;if(p)l=l<<4&255;else{a[b+m>>0]=l|q&255;m=m+1|0;l=q}n=(n&255^255)&255;k=k+1|0;if(k>>>0<g>>>0)q=l;else{l=0;break a}}c[(Zf()|0)>>2]=34;l=-1}while(0);if(j|0)c[j>>2]=f+(((n<<24>>24!=0)<<31>>31)+k);if(i|0)c[i>>2]=m;return l|0}function nb(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;k=i;l=i=i+63&-64;i=i+192|0;if((e+-1&255)>63)ba();if((f|0)!=0&g<<24>>24!=0?(g&255)<=64:0){a[l+128>>0]=e;a[l+128+1>>0]=g;a[l+128+2>>0]=1;a[l+128+3>>0]=1;e=l+128+4|0;j=e+60|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(j|0));Hc(b+64|0,0,293)|0;e=b;h=400;j=e+64|0;do{c[e>>2]=c[h>>2];e=e+4|0;h=h+4|0}while((e|0)<(j|0));e=0;do{m=l+128+(e<<3)|0;j=b+(e<<3)|0;h=c[j+4>>2]^(d[m+4>>0]|d[m+4+1>>0]<<8|d[m+4+2>>0]<<16|d[m+4+3>>0]<<24);c[j>>2]=c[j>>2]^(d[m>>0]|d[m+1>>0]<<8|d[m+2>>0]<<16|d[m+3>>0]<<24);c[j+4>>2]=h;e=e+1|0}while((e|0)!=8);Hc(l+(g&255)|0,0,(g<<24>>24<0?0:128-(g&255)|0)|0)|0;tc(l|0,f|0,g&255|0)|0;ib(b,l,128,0);fd(l,128);i=k;return}ba()}function ob(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;i=b>>>0<0|(b|0)==0&a>>>0<32768?32768:a;h=b>>>0<0|(b|0)==0&a>>>0<32768?0:b;c[g>>2]=8;a:do if(h>>>0<0|(h|0)==0&i>>>0<d>>>5>>>0){c[f>>2]=1;a=Te(i|0,h|0,c[g>>2]<<2|0,0)|0;c[e>>2]=1;a=Rd(a|0,D|0,1)|0;b=D;h=1;do{g=Pd(1,0,h|0)|0;f=D;h=h+1|0;if(f>>>0>b>>>0|(f|0)==(b|0)&g>>>0>a>>>0)break a;c[e>>2]=h}while(h>>>0<63)}else{c[e>>2]=1;b=1;while(1){j=Pd(1,0,b|0)|0;k=D;a=b+1|0;if(k>>>0>0|(k|0)==0&j>>>0>d>>>11>>>0){a=b;break}c[e>>2]=a;if(a>>>0<63)b=a;else break}e=Rd(i|0,h|0,2)|0;e=Rd(e|0,D|0,a|0)|0;j=D;k=j>>>0>0|(j|0)==0&e>>>0>1073741823?1073741823:e;c[f>>2]=(k>>>0)/((c[g>>2]|0)>>>0)|0}while(0);return}function pb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=i;l=i=i+63&-64;i=i+2048|0;if((a|0)!=0&(b|0)!=0){k=(c[b>>2]|0)+4|0;f=c[b+16>>2]|0;tc(l|0,(c[k>>2]|0)+(f<<10)+-1024|0,1024)|0;g=c[b+20>>2]|0;if(g>>>0>1){d=1;do{h=f+-1+(S(f,d)|0)|0;j=c[k>>2]|0;e=0;do{p=j+(h<<10)+(e<<3)|0;n=l+(e<<3)|0;o=c[n+4>>2]^c[p+4>>2];c[n>>2]=c[n>>2]^c[p>>2];c[n+4>>2]=o;e=e+1|0}while((e|0)!=128);d=d+1|0}while((d|0)!=(g|0))}tc(l+1024|0,l|0,1024)|0;Ta(c[a>>2]|0,c[a+4>>2]|0,l+1024|0,1024);fd(l,1024);fd(l+1024|0,1024);e=c[b>>2]|0;if(e|0?(c[a+56>>2]&1|0)!=0:0){fd(c[e+4>>2]|0,c[b+8>>2]<<10);e=c[b>>2]|0}d=c[e>>2]|0;if(d|0)ta(d);ta(e)}i=m;return}function qb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;a:do if((e|0)!=0&(b&3|0)!=0){f=e;while(1){if((a[b>>0]|0)==(d&255)<<24>>24)break a;b=b+1|0;e=f+-1|0;if((e|0)!=0&(b&3|0)!=0)f=e;else{f=e;e=(e|0)!=0;g=5;break}}}else{f=e;e=(e|0)!=0;g=5}while(0);b:do if((g|0)==5)if(e){if((a[b>>0]|0)!=(d&255)<<24>>24){e=S(d&255,16843009)|0;c:do if(f>>>0>3)while(1){h=c[b>>2]^e;if((h&-2139062144^-2139062144)&h+-16843009|0)break;b=b+4|0;f=f+-4|0;if(f>>>0<=3){g=11;break c}}else g=11;while(0);if((g|0)==11)if(!f){f=0;break}while(1){if((a[b>>0]|0)==(d&255)<<24>>24)break b;b=b+1|0;f=f+-1|0;if(!f){f=0;break}}}}else f=0;while(0);return (f|0?b:0)|0}function rb(a){a=a|0;var b=0,d=0,e=0,f=0;if(a>>>0>=4294967168){c[(Zf()|0)>>2]=12;f=0;return f|0}f=a>>>0<11?16:a+11&-8;e=na(f+76|0)|0;if(!e){f=0;return f|0}do if(e&63){a=((e+63&-64)+-8-(e+-8)|0)>>>0>15?(e+63&-64)+-8|0:(e+63&-64)+56|0;b=a-(e+-8)|0;d=c[e+-4>>2]|0;if(!(d&3)){c[a>>2]=(c[e+-8>>2]|0)+b;c[a+4>>2]=(d&-8)-b;break}else{c[a+4>>2]=(d&-8)-b|c[a+4>>2]&1|2;c[a+((d&-8)-b)+4>>2]=c[a+((d&-8)-b)+4>>2]|1;c[e+-4>>2]=b|c[e+-4>>2]&1|2;c[a+4>>2]=c[a+4>>2]|1;ua(e+-8|0,b);break}}else a=e+-8|0;while(0);b=a+4|0;d=c[b>>2]|0;if(d&3|0?(d&-8)>>>0>(f+16|0)>>>0:0){e=a+f|0;c[b>>2]=f|d&1|2;c[e+4>>2]=(d&-8)-f|3;c[e+((d&-8)-f)+4>>2]=c[e+((d&-8)-f)+4>>2]|1;ua(e,(d&-8)-f|0)}f=a+8|0;return f|0}function sb(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+192|0;if(d>>>0>128){nd(b)|0;Na(b,c,d,0)|0;rc(b,h)|0;d=64;c=h}nd(b)|0;e=h+64|0;f=e+128|0;do{a[e>>0]=54;e=e+1|0}while((e|0)<(f|0));g=(d|0)==0;if(!g?(a[h+64>>0]=a[c>>0]^54,(d|0)!=1):0){e=1;do{f=h+64+e|0;a[f>>0]=a[f>>0]^a[c+e>>0];e=e+1|0}while((e|0)!=(d|0))}Na(b,h+64|0,128,0)|0;nd(b+208|0)|0;e=h+64|0;f=e+128|0;do{a[e>>0]=92;e=e+1|0}while((e|0)<(f|0));if(!g?(a[h+64>>0]=a[c>>0]^92,(d|0)!=1):0){e=1;do{g=h+64+e|0;a[g>>0]=a[g>>0]^a[c+e>>0];e=e+1|0}while((e|0)!=(d|0))}Na(b+208|0,h+64|0,128,0)|0;fd(h+64|0,128);fd(h,64);i=h;return 0}function tb(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=i;i=i+96|0;if(d>>>0>64){Sc(b)|0;Ua(b,c,d,0)|0;Fb(b,h)|0;d=32;c=h}Sc(b)|0;e=h+32|0;f=e+64|0;do{a[e>>0]=54;e=e+1|0}while((e|0)<(f|0));g=(d|0)==0;if(!g?(a[h+32>>0]=a[c>>0]^54,(d|0)!=1):0){e=1;do{f=h+32+e|0;a[f>>0]=a[f>>0]^a[c+e>>0];e=e+1|0}while((e|0)!=(d|0))}Ua(b,h+32|0,64,0)|0;Sc(b+104|0)|0;e=h+32|0;f=e+64|0;do{a[e>>0]=92;e=e+1|0}while((e|0)<(f|0));if(!g?(a[h+32>>0]=a[c>>0]^92,(d|0)!=1):0){e=1;do{g=h+32+e|0;a[g>>0]=a[g>>0]^a[c+e>>0];e=e+1|0}while((e|0)!=(d|0))}Ua(b+104|0,h+32|0,64,0)|0;fd(h+32|0,64);fd(h,32);i=h;return 0}function ub(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=0;h=0;i=0;a:while(1){while(1){g=a[e>>0]|0;g=((0-((0-(g^47)|0)>>>8&63^63|(0-(g^43)|0)>>>8&62^62|((g+65439|0)>>>8^255)&g+185&((122-g|0)>>>8&255^255)|((g+-65|0)>>>8^255)&g+-65&((90-g|0)>>>8&255^255)|((g+65488|0)>>>8^255)&g+4&((57-g|0)>>>8&255^255))|0)>>>8&255^255)&(0-(g^65)|0)>>>8|((0-(g^47)|0)>>>8&63^63|(0-(g^43)|0)>>>8&62^62|((g+65439|0)>>>8^255)&g+185&((122-g|0)>>>8&255^255)|((g+-65|0)>>>8^255)&g+-65&((90-g|0)>>>8&255^255)|((g+65488|0)>>>8^255)&g+4&((57-g|0)>>>8&255^255));if((g|0)==255){j=7;break a}e=e+1|0;h=g+(h<<6)|0;g=f+6|0;if(g>>>0>7)break;else f=g}f=f+-2|0;if(i>>>0>=(c[d>>2]|0)>>>0){e=0;break}a[b>>0]=h>>>f;b=b+1|0;i=i+1|0}if((j|0)==7)if(f>>>0<=4?((1<<f)+-1&h|0)==0:0)c[d>>2]=i;else e=0;return e|0}function vb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=c[a>>2]|0;u=c[a+4>>2]|0;s=c[a+8>>2]|0;q=c[a+12>>2]|0;o=c[a+16>>2]|0;m=c[a+20>>2]|0;k=c[a+24>>2]|0;i=c[a+28>>2]|0;g=c[a+32>>2]|0;e=c[a+36>>2]|0;v=(c[b+4>>2]^u)&0-d;t=(c[b+8>>2]^s)&0-d;r=(c[b+12>>2]^q)&0-d;p=(c[b+16>>2]^o)&0-d;n=(c[b+20>>2]^m)&0-d;l=(c[b+24>>2]^k)&0-d;j=(c[b+28>>2]^i)&0-d;h=(c[b+32>>2]^g)&0-d;f=(c[b+36>>2]^e)&0-d;c[a>>2]=(c[b>>2]^w)&0-d^w;c[a+4>>2]=v^u;c[a+8>>2]=t^s;c[a+12>>2]=r^q;c[a+16>>2]=p^o;c[a+20>>2]=n^m;c[a+24>>2]=l^k;c[a+28>>2]=j^i;c[a+32>>2]=h^g;c[a+36>>2]=f^e;return}function wb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=0;do{c[d+(f<<2)>>2]=c[a+((e<<5)+-16<<2)+(f<<2)>>2];f=f+1|0}while((f|0)!=16);if(e<<1|0){i=0;j=0;while(1){g=i<<4;f=0;do{h=d+(f<<2)|0;c[h>>2]=c[h>>2]^c[a+(g<<2)+(f<<2)>>2];f=f+1|0}while((f|0)!=16);Ga(d);h=i<<3;f=0;do{c[b+(h<<2)+(f<<2)>>2]=c[d+(f<<2)>>2];f=f+1|0}while((f|0)!=16);f=0;do{k=d+(f<<2)|0;c[k>>2]=c[k>>2]^c[a+((g|16)<<2)+(f<<2)>>2];f=f+1|0}while((f|0)!=16);Ga(d);f=0;do{c[b+(h+(e<<4)<<2)+(f<<2)>>2]=c[d+(f<<2)>>2];f=f+1|0}while((f|0)!=16);if((j|0)==(((e<<1)+-1|0)>>>1|0))break;else{i=i+2|0;j=j+1|0}}}return}function xb(a,b,d,e,f,g,h,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0;p=i;o=i=i+63&-64;i=i+64|0;n=na(k)|0;do if(!n)a=-22;else{c[o>>2]=n;c[o+4>>2]=k;c[o+8>>2]=e;c[o+12>>2]=f;c[o+16>>2]=g;c[o+20>>2]=h;c[o+24>>2]=0;c[o+24+4>>2]=0;c[o+24+8>>2]=0;c[o+24+12>>2]=0;c[o+40>>2]=a;c[o+44>>2]=b;c[o+48>>2]=d;c[o+52>>2]=d;c[o+56>>2]=4;a=_b(o)|0;if(a|0){fd(n,k);ta(n);break}if(j|0)tc(j|0,n|0,k|0)|0;if((l|0)!=0&(m|0)!=0?Da(l,m,o)|0:0){fd(n,k);fd(l,m);ta(n);a=-31;break}fd(n,k);ta(n);a=0}while(0);i=p;return a|0}function yb(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=i;p=i=i+63&-64;i=i+48|0;if((((((a[g>>0]|0)==36?(a[g+1>>0]|0)==55:0)?(a[g+2>>0]|0)==36:0)?(k=qb(32982,d[g+3>>0]|0,65)|0,(k|0)!=0):0)?(l=Pd(1,0,k-32982|0)|0,m=D,j=cd(p+4|0,g+4|0)|0,(j|0)!=0):0)?(n=cd(p,j)|0,(n|0)!=0):0){j=gf(n)|0;if(!j)j=kc(n)|0;else j=j-n|0;k=j+(n-g)|0;if((!((k+45|0)>>>0>102|(k+45|0)>>>0<j>>>0)?(Ca(b,e,f,n,j,l,m,c[p+4>>2]|0,c[p>>2]|0,p+8|0,32)|0)==0:0)?(tc(h|0,g|0,k|0)|0,a[h+k>>0]=36,o=Yb(h+k+1|0,h+102-(h+k+1)|0,p+8|0)|0,fd(p+8|0,32),(o|0)!=0&o>>>0<(h+102|0)>>>0):0)a[o>>0]=0;else h=0}else h=0;i=q;return h|0}function zb(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0;k=i;l=i=i+63&-64;i=i+560|0;xc(l+496|0,j,32,0)|0;a[l+496>>0]=(d[l+496>>0]|0)&248;a[l+496+31>>0]=(d[l+496+31>>0]|0)&63|64;nd(l)|0;Na(l,l+496+32|0,32,0)|0;Na(l,f,g,h)|0;rc(l,l+432|0)|0;Xc(b+32|0,j+32|0,32)|0;oa(l+432|0);Pa(l+208|0,l+432|0);vc(b,l+208|0);nd(l)|0;Na(l,b,64,0)|0;Na(l,f,g,h)|0;rc(l,l+368|0)|0;oa(l+368|0);ja(b+32|0,l+368|0,l+496|0,l+432|0);fd(l+496|0,64);if(e|0){c[e>>2]=64;c[e+4>>2]=0}i=k;return 0}function Ab(a,b,d,e,f,g,h,j,k,l,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;l=i;i=i+336|0;we(l+264|0,64,0,m,n)|0;Se(l,l+264|0)|0;fd(l+264|0,64);ne(l,h,j,k)|0;h=le(0,0,j|0,k|0)|0;ne(l,34460,h&15,0)|0;Ld(a,e,f,g,m,1,n)|0;ne(l,a,f,g)|0;h=le(0,0,f|0,g|0)|0;ne(l,34460,h&15,0)|0;c[l+256>>2]=j;c[l+256+4>>2]=k;ne(l,l+256|0,8,0)|0;c[l+256>>2]=f;c[l+256+4>>2]=g;ne(l,l+256|0,8,0)|0;Re(l,b)|0;fd(l,256);if(d|0){c[d>>2]=16;c[d+4>>2]=0}i=l;return 0}function Bb(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do if(b>>>0<=63?(g=Ed(d|0,0,c|0,0)|0,i=D,!(i>>>0>0|(i|0)==0&g>>>0>1073741823)):0){a[f>>0]=36;a[f+1>>0]=55;a[f+2>>0]=36;a[f+3>>0]=a[32982+b>>0]|0;b=f+4|0;g=0;while(1){i=b;b=b+1|0;a[i>>0]=a[32982+(c&63)>>0]|0;g=g+6|0;if(g>>>0>=30)break;else c=c>>>6}if(b){g=d;d=f+58-b|0;c=0;while(1){if(!d){f=0;break a}i=b;b=b+1|0;a[i>>0]=a[32982+(g&63)>>0]|0;c=c+6|0;if(c>>>0>=30)break;else{g=g>>>6;d=d+-1|0}}if((b|0)!=0?(h=Yb(b,f+58-b|0,e)|0,(h|0)!=0&h>>>0<(f+58|0)>>>0):0)a[h>>0]=0;else f=0}else f=0}else f=0;while(0);return f|0}function Cb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;k=i;j=i=i+63&-64;i=i+32|0;a:do if(((b|0)!=0?(d=c[b+20>>2]|0,(d|0)!=0):0)?(c[b+4>>2]|0)!=0:0){h=0;while(1){g=0;do{if(!d)d=0;else{f=g&255;e=0;do{c[j>>2]=h;c[j+4>>2]=e;a[j+8>>0]=f;c[j+12>>2]=0;c[j+16>>2]=c[j>>2];c[j+16+4>>2]=c[j+4>>2];c[j+16+8>>2]=c[j+8>>2];c[j+16+12>>2]=c[j+12>>2];d=la(b,j+16|0)|0;e=e+1|0;if(d|0)break a;d=c[b+20>>2]|0}while(e>>>0<d>>>0)}g=g+1|0}while(g>>>0<4);h=h+1|0;if(h>>>0>=(c[b+4>>2]|0)>>>0){d=0;break}}}else d=0;while(0);i=k;return d|0}function Db(a,b,d,e,f,g,h,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0;n=i;i=i+352|0;Ge(n+280|0,64,0,l,m)|0;Se(n,n+280|0)|0;fd(n+280|0,64);ne(n,h,j,k)|0;c[n+256>>2]=j;c[n+256+4>>2]=k;ne(n,n+256|0,8,0)|0;ne(n,d,e,f)|0;c[n+256>>2]=e;c[n+256+4>>2]=f;ne(n,n+256|0,8,0)|0;Re(n,n+264|0)|0;fd(n,256);b=Ad(n+264|0,g)|0;fd(n+264|0,16);do if(a)if(!b){Id(a,d,e,f,l,1,0,m)|0;b=0;break}else{Hc(a|0,0,e|0)|0;b=-1;break}while(0);i=n;return b|0}function Eb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=(c[d>>2]|0)==0;do if(j){g=a[d+8>>0]|0;if(!(g<<24>>24)){g=(c[d+12>>2]|0)+-1|0;break}g=S(c[b+12>>2]|0,g&255)|0;h=c[d+12>>2]|0;if(!f){g=(((h|0)==0)<<31>>31)+g|0;break}else{g=h+-1+g|0;break}}else{g=(c[b+16>>2]|0)-(c[b+12>>2]|0)|0;h=c[d+12>>2]|0;if(!f){g=(((h|0)==0)<<31>>31)+g|0;break}else{g=h+-1+g|0;break}}while(0);Ed(e|0,0,e|0,0)|0;Ed(g|0,0,D|0,0)|0;f=le(g+-1|0,0,D|0,0)|0;e=D;if(!j?(i=a[d+8>>0]|0,i<<24>>24!=3):0){g=S(c[b+12>>2]|0,(i&255)+1|0)|0;h=0}else{g=0;h=0}j=oe(f|0,e|0,g|0,h|0)|0;b=Bd(j|0,D|0,c[b+16>>2]|0,0)|0;return b|0}function Fb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;f=i;e=i=i+63&-64;i=i+16|0;h=c[b+32>>2]|0;g=c[b+32+4>>2]|0;a[e+7>>0]=h;j=Rd(h|0,g|0,8)|0;a[e+6>>0]=j;j=Rd(h|0,g|0,16)|0;a[e+5>>0]=j;j=Rd(h|0,g|0,24)|0;a[e+4>>0]=j;a[e+3>>0]=g;j=Rd(h|0,g|0,40)|0;a[e+2>>0]=j;j=Rd(h|0,g|0,48)|0;a[e+1>>0]=j;j=Rd(h|0,g|0,56)|0;a[e>>0]=j;g=Rd(h|0,g|0,3)|0;Ua(b,32719,((g&63)>>>0<56?56:120)-(g&63)|0,0)|0;Ua(b,e,8,0)|0;e=0;do{j=d+(e<<2)|0;h=c[b+(e<<2)>>2]|0;a[j+3>>0]=h;a[j+2>>0]=h>>>8;a[j+1>>0]=h>>>16;a[j>>0]=h>>>24;e=e+1|0}while((e|0)!=8);fd(b,104);i=f;return 0}function Gb(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0;e=0;do{a[b+e>>0]=(d[c+(e>>3)>>0]|0)>>>(e&7)&1;e=e+1|0}while((e|0)!=256);h=0;do{i=b+h|0;a:do if(a[i>>0]|0){g=1;do{e=g+h|0;if((e|0)>=256)break a;c=a[b+e>>0]|0;b:do if(c<<24>>24){f=a[i>>0]|0;c=c<<24>>24<<g;if((f+c|0)<16){a[i>>0]=f+c;a[b+e>>0]=0;break}if((f-c|0)<=-16)break a;a[i>>0]=f-c;while(1){c=b+e|0;if(!(a[c>>0]|0))break;a[c>>0]=0;e=e+1|0;if((e|0)>=256)break b}a[c>>0]=1}while(0);g=g+1|0}while((g|0)<7)}while(0);h=h+1|0}while((h|0)!=256);return}function Hb(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0;n=i;l=i=i+63&-64;i=i+128|0;k=b;m=k+102|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(m|0));do if(!(f>>>0>0|(f|0)==0&e>>>0>4294967295)){ob(g,h,j,l+8|0,l+4|0,l);Gd(l+88|0,32);if(!(Bb(c[l+8>>2]|0,c[l>>2]|0,c[l+4>>2]|0,l+88|0,l+24|0)|0)){c[(Zf()|0)>>2]=22;b=-1;break}We(l+12|0);m=(yb(l+12|0,d,e,l+24|0,b)|0)==0;je(l+12|0);if(m){c[(Zf()|0)>>2]=22;b=-1}else b=0}else{c[(Zf()|0)>>2]=27;b=-1}while(0);i=n;return b|0}function Ib(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;h=i;j=i=i+63&-64;i=i+64|0;if((e+-1&255)>63)ba();a[j>>0]=e;a[j+1>>0]=0;a[j+2>>0]=1;a[j+3>>0]=1;e=j+4|0;g=e+60|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(g|0));Hc(b+64|0,0,293)|0;e=b;f=400;g=e+64|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0));e=0;do{k=j+(e<<3)|0;g=b+(e<<3)|0;f=c[g+4>>2]^(d[k+4>>0]|d[k+4+1>>0]<<8|d[k+4+2>>0]<<16|d[k+4+3>>0]<<24);c[g>>2]=c[g>>2]^(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24);c[g+4>>2]=f;e=e+1|0}while((e|0)!=8);i=h;return}function Jb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;l=(c[b+8>>2]|0)-(c[d+8>>2]|0)|0;k=(c[b+12>>2]|0)-(c[d+12>>2]|0)|0;j=(c[b+16>>2]|0)-(c[d+16>>2]|0)|0;i=(c[b+20>>2]|0)-(c[d+20>>2]|0)|0;h=(c[b+24>>2]|0)-(c[d+24>>2]|0)|0;g=(c[b+28>>2]|0)-(c[d+28>>2]|0)|0;f=(c[b+32>>2]|0)-(c[d+32>>2]|0)|0;e=(c[b+36>>2]|0)-(c[d+36>>2]|0)|0;c[a>>2]=(c[b>>2]|0)-(c[d>>2]|0);c[a+4>>2]=m;c[a+8>>2]=l;c[a+12>>2]=k;c[a+16>>2]=j;c[a+20>>2]=i;c[a+24>>2]=h;c[a+28>>2]=g;c[a+32>>2]=f;c[a+36>>2]=e;return}function Kb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=(c[d+4>>2]|0)+(c[b+4>>2]|0)|0;l=(c[d+8>>2]|0)+(c[b+8>>2]|0)|0;k=(c[d+12>>2]|0)+(c[b+12>>2]|0)|0;j=(c[d+16>>2]|0)+(c[b+16>>2]|0)|0;i=(c[d+20>>2]|0)+(c[b+20>>2]|0)|0;h=(c[d+24>>2]|0)+(c[b+24>>2]|0)|0;g=(c[d+28>>2]|0)+(c[b+28>>2]|0)|0;f=(c[d+32>>2]|0)+(c[b+32>>2]|0)|0;e=(c[d+36>>2]|0)+(c[b+36>>2]|0)|0;c[a>>2]=(c[d>>2]|0)+(c[b>>2]|0);c[a+4>>2]=m;c[a+8>>2]=l;c[a+12>>2]=k;c[a+16>>2]=j;c[a+20>>2]=i;c[a+24>>2]=h;c[a+28>>2]=g;c[a+32>>2]=f;c[a+36>>2]=e;return}function Lb(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0;switch(((f>>>0)%3|0)&3){case 2:{g=((f>>>0)/3|0)<<2|1;h=3;break}case 1:{g=((f>>>0)/3|0)<<2;h=3;break}default:g=((f>>>0)/3|0)<<2}if((h|0)==3)g=g+2|0;if(g>>>0<c>>>0){if(f){i=0;c=0;do{f=f+-1|0;h=e;e=e+1|0;i=d[h>>0]|0|i<<8;c=c+8|0;if(c>>>0>5)while(1){c=c+-6|0;h=b+1|0;a[b>>0]=td(i>>>c&63)|0;if(c>>>0>5)b=h;else{b=h;break}}}while((f|0)!=0);if(c){a[b>>0]=td(i<<6-c&63)|0;b=b+1|0}}a[b>>0]=0}else g=-1;return g|0}function Mb(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if(!(d&255))b=b+(kc(b)|0)|0;else{if(b&3)do{f=a[b>>0]|0;if(f<<24>>24==0?1:f<<24>>24==(d&255)<<24>>24)break a;b=b+1|0}while((b&3|0)!=0);f=S(d&255,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{e=e^f;if((e&-2139062144^-2139062144)&e+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);while(1){f=a[b>>0]|0;if(f<<24>>24==0?1:f<<24>>24==(d&255)<<24>>24)break;else b=b+1|0}}while(0);return b|0}function Nb(a,b,d,e,f,g,h,j,k,l,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;l=i;i=i+336|0;Ge(l+264|0,64,0,m,n)|0;Se(l,l+264|0)|0;fd(l+264|0,64);ne(l,h,j,k)|0;c[l+256>>2]=j;c[l+256+4>>2]=k;ne(l,l+256|0,8,0)|0;Id(a,e,f,g,m,1,0,n)|0;ne(l,a,f,g)|0;c[l+256>>2]=f;c[l+256+4>>2]=g;ne(l,l+256|0,8,0)|0;Re(l,b)|0;fd(l,256);if(d|0){c[d>>2]=16;c[d+4>>2]=0}i=l;return 0}function Ob(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=i;f=i=i+63&-64;i=i+80|0;a:do if((a|0)==0|(b|0)==0)d=-25;else{e=c[a+8>>2]|0;do if((e|0?((e<<10>>>0)/(e>>>0)|0|0)==1024:0)?(d=na(12)|0,c[a>>2]=d,d|0):0){d=Od(f,e<<10)|0;c[(Zf()|0)>>2]=d;if(d|0){c[f>>2]=0;break}d=c[f>>2]|0;if(d|0){c[c[a>>2]>>2]=d;c[(c[a>>2]|0)+4>>2]=d;c[(c[a>>2]|0)+8>>2]=e<<10;Sa(f+8|0,b,c[a+28>>2]|0);fd(f+8+64|0,8);_a(f+8|0,a);fd(f+8|0,72);d=0;break a}}while(0);d=-22}while(0);i=g;return d|0}function Pb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;e=i=i+63&-64;i=i+48|0;Kb(a,b+40|0,b);Jb(a+40|0,b+40|0,b);pa(a+80|0,a,c+40|0);pa(a+40|0,a+40|0,c);pa(a+120|0,c+120|0,b+120|0);pa(a,b+80|0,c+80|0);Kb(e,a,a);Jb(a,a+80|0,a+40|0);Kb(a+40|0,a+80|0,a+40|0);Jb(a+80|0,e,a+120|0);Kb(a+120|0,e,a+120|0);i=d;return}function Qb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;e=i=i+63&-64;i=i+48|0;Kb(a,b+40|0,b);Jb(a+40|0,b+40|0,b);pa(a+80|0,a,c);pa(a+40|0,a+40|0,c+40|0);pa(a+120|0,c+120|0,b+120|0);pa(a,b+80|0,c+80|0);Kb(e,a,a);Jb(a,a+80|0,a+40|0);Kb(a+40|0,a+80|0,a+40|0);Kb(a+80|0,e,a+120|0);Jb(a+120|0,e,a+120|0);i=d;return}function Rb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;Kb(a,b+40|0,b);Jb(a+40|0,b+40|0,b);l=c[b+84>>2]|0;k=c[b+88>>2]|0;j=c[b+92>>2]|0;i=c[b+96>>2]|0;h=c[b+100>>2]|0;g=c[b+104>>2]|0;f=c[b+108>>2]|0;e=c[b+112>>2]|0;d=c[b+116>>2]|0;c[a+80>>2]=c[b+80>>2];c[a+84>>2]=l;c[a+88>>2]=k;c[a+92>>2]=j;c[a+96>>2]=i;c[a+100>>2]=h;c[a+104>>2]=g;c[a+108>>2]=f;c[a+112>>2]=e;c[a+116>>2]=d;pa(a+120|0,b+120|0,544);return}function Sb(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0;g=i;h=i=i+63&-64;i=i+320|0;f=h+280|0;e=f+32|0;do{a[f>>0]=a[c>>0]|0;f=f+1|0;c=c+1|0}while((f|0)<(e|0));a[h+280>>0]=(d[h+280>>0]|0)&248;a[h+280+31>>0]=(d[h+280+31>>0]|0)&63|64;Pa(h+40|0,h+280|0);Kb(h+240|0,h+40+80|0,h+40+40|0);Jb(h+200|0,h+40+80|0,h+40+40|0);Ia(h+200|0,h+200|0);pa(h,h+240|0,h+200|0);La(b,h);i=g;return 0}function Tb(b,c,d,e,f,g){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;j=i=i+63&-64;i=i+464|0;tb(j+208|0,b,c)|0;De(j+208|0,d,e,0)|0;if(g|0){b=0;c=0;do{b=b+1|0;a[j+448+3>>0]=b;a[j+448+2>>0]=b>>>8;a[j+448+1>>0]=b>>>16;a[j+448>>0]=b>>>24;tc(j|0,j+208|0,208)|0;De(j,j+448|0,4,0)|0;pd(j,j+416|0)|0;e=g-c|0;tc(f+c|0,j+416|0,(e>>>0>32?32:e)|0)|0;c=b<<5}while(c>>>0<g>>>0)}fd(j+208|0,208);i=h;return}function Ub(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;e=i=i+63&-64;i=i+48|0;Kb(a,b+40|0,b);Jb(a+40|0,b+40|0,b);pa(a+80|0,a,c+40|0);pa(a+40|0,a+40|0,c);pa(a+120|0,c+80|0,b+120|0);Kb(e,b+80|0,b+80|0);Jb(a,a+80|0,a+40|0);Kb(a+40|0,a+80|0,a+40|0);Jb(a+80|0,e,a+120|0);Kb(a+120|0,e,a+120|0);i=d;return}function Vb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;e=i=i+63&-64;i=i+48|0;Kb(a,b+40|0,b);Jb(a+40|0,b+40|0,b);pa(a+80|0,a,c);pa(a+40|0,a+40|0,c+40|0);pa(a+120|0,c+80|0,b+120|0);Kb(e,b+80|0,b+80|0);Jb(a,a+80|0,a+40|0);Kb(a+40|0,a+80|0,a+40|0);Kb(a+80|0,e,a+120|0);Jb(a+120|0,e,a+120|0);i=d;return}function Wb(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0;n=i;l=i=i+63&-64;i=i+16|0;k=b;m=k+128|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(m|0));do if(!((h|f)>>>0>0|(h|f|0)==0&(g|e)>>>0>4294967295|j>>>0>2147484671))if(h>>>0<0|(h|0)==0&g>>>0<3|j>>>0<8192){c[(Zf()|0)>>2]=22;b=-1;break}else{Gd(l,16);b=((ae(g,j>>>10,d,e,l,b)|0)!=0)<<31>>31;break}else{c[(Zf()|0)>>2]=27;b=-1}while(0);i=n;return b|0}function Xb(a,b,c,d,e,f,g,h,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0;k=i;l=i=i+63&-64;i=i+368|0;if((b|0)==0&((e|0)!=0|(f|0)!=0))ba();if(!a)ba();if((d+-1&255)>63)ba();if(!((c|0)!=0|g<<24>>24==0))ba();if((g&255)>64)ba();if(!(g<<24>>24))gb(l,d,h,j);else Qa(l,d,c,g,h,j);ib(l,b,e,f);ab(l,a,d)|0;i=k;return}function Yb(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=0;a:while(1){if(g>>>0<32){k=0;f=0;j=g}else break;do{i=j;j=j+1|0;f=(d[e+i>>0]|0)<<k|f;k=k+8|0}while(j>>>0<32&k>>>0<24);g=c;i=b;h=0;while(1){if(!g){b=0;break a}l=i;i=i+1|0;a[l>>0]=a[32982+(f&63)>>0]|0;h=h+6|0;if(h>>>0>=k>>>0)break;else{f=f>>>6;g=g+-1|0}}l=(i|0)==0;c=(l?0:b-i|0)+c|0;if(l){b=0;break}else{g=j;b=i}}return b|0}function Zb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(e>>>3|0){f=0;do{g=b+(f<<3)|0;h=d+(f<<3)|0;i=c[h>>2]|0;h=c[h+4>>2]|0;a[g+7>>0]=i;j=Rd(i|0,h|0,8)|0;a[g+6>>0]=j;j=Rd(i|0,h|0,16)|0;a[g+5>>0]=j;j=Rd(i|0,h|0,24)|0;a[g+4>>0]=j;a[g+3>>0]=h;j=Rd(i|0,h|0,40)|0;a[g+2>>0]=j;j=Rd(i|0,h|0,48)|0;a[g+1>>0]=j;h=Rd(i|0,h|0,56)|0;a[g>>0]=h;f=f+1|0}while((f|0)!=(e>>>3|0))}return}function _b(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;e=i;d=i=i+63&-64;i=i+48|0;b=jb(a)|0;if(!b){f=c[a+44>>2]|0;b=c[a+48>>2]|0;f=((f>>>0<b<<3>>>0?b<<3:f)>>>0)/(b<<2>>>0)|0;g=S(f,b<<2)|0;c[d>>2]=0;c[d+4>>2]=c[a+40>>2];c[d+8>>2]=g;c[d+12>>2]=f;c[d+16>>2]=f<<2;c[d+20>>2]=b;c[d+24>>2]=c[a+52>>2];c[d+28>>2]=1;b=Ob(d,a)|0;if(!b){b=Cb(d)|0;if(!b){pb(a,d);b=0}}}i=e;return b|0}function $b(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=0-(c[b+4>>2]|0)|0;k=0-(c[b+8>>2]|0)|0;j=0-(c[b+12>>2]|0)|0;i=0-(c[b+16>>2]|0)|0;h=0-(c[b+20>>2]|0)|0;g=0-(c[b+24>>2]|0)|0;f=0-(c[b+28>>2]|0)|0;e=0-(c[b+32>>2]|0)|0;d=0-(c[b+36>>2]|0)|0;c[a>>2]=0-(c[b>>2]|0);c[a+4>>2]=l;c[a+8>>2]=k;c[a+12>>2]=j;c[a+16>>2]=i;c[a+20>>2]=h;c[a+24>>2]=g;c[a+28>>2]=f;c[a+32>>2]=e;c[a+36>>2]=d;return}function ac(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;do if((l|0)==1){if((g|d|j)>>>0>0|(g|d|j|0)==0&(f|b|i)>>>0>4294967295|k>>>0>2147484671){c[(Zf()|0)>>2]=27;a=-1;break}if(d>>>0<0|(d|0)==0&b>>>0<16|(j>>>0<0|(j|0)==0&i>>>0<3)|k>>>0<8192){c[(Zf()|0)>>2]=22;a=-1;break}else{a=((Xd(i,k>>>10,e,f,h,a,b)|0)!=0)<<31>>31;break}}else a=-1;while(0);return a|0}function bc(a,b,d,e,f,g,h,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;var m=0,n=0;n=i;m=i=i+63&-64;i=i+16|0;Hc(a|0,0,b|0)|0;if((g|d)>>>0>0|(g|d|0)==0&(f|b)>>>0>4294967295){c[(Zf()|0)>>2]=27;a=-1}else{ob(j,k,l,m+8|0,m+4|0,m);l=Pd(1,0,c[m+8>>2]|0)|0;a=Lc(e,f,h,32,l,D,c[m>>2]|0,c[m+4>>2]|0,a,b)|0}i=n;return a|0}function cc(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;j=i=i+63&-64;i=i+368|0;if((b|0)==0&((e|0)!=0|(f|0)!=0))ba();if(!a)ba();if((d+-1&255)>63)ba();if(!((c|0)!=0|g<<24>>24==0))ba();if((g&255)>64)ba();if(!(g<<24>>24))Ib(j,d);else nb(j,d,c,g);ib(j,b,e,f);ab(j,a,d)|0;i=h;return}function dc(a,b){a=a|0;b=b|0;var c=0,d=0;c=i;d=i=i+63&-64;i=i+48|0;ra(a,b);ra(a+80|0,b+40|0);qa(a+120|0,b+80|0);Kb(a+40|0,b,b+40|0);ra(d,a+40|0);Kb(a+40|0,a+80|0,a);Jb(a+80|0,a+80|0,a);Jb(a,d,a+40|0);Jb(a+120|0,a+120|0,a+80|0);i=c;return}function ec(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=i;j=i=i+63&-64;i=i+16|0;Xc(a+64|0,d|0,e|0)|0;zb(a,j,a+64|0,e,f,g)|0;if((c[j>>2]|0)==64&(c[j+4>>2]|0)==0)if(b|0){a=oe(e|0,f|0,64,0)|0;c[b>>2]=a;c[b+4>>2]=D;a=0}else a=0;else{if(b|0){c[b>>2]=0;c[b+4>>2]=0}j=oe(e|0,f|0,64,0)|0;Hc(a|0,0,j|0)|0;a=-1}i=h;return a|0}function fc(a,b){a=a|0;b=b|0;var c=0,d=0;d=i;c=i=i+63&-64;i=i+240|0;if(!(za(c+80|0,b)|0)){Ud(c);Jb(c,c,c+80+40|0);Ia(c,c);Ud(c+40|0);Kb(c+40|0,c+40|0,c+80+40|0);pa(c+40|0,c+40|0,c);La(a,c+40|0);a=0}else a=-1;i=d;return a|0}function gc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;e=oe(e|0,f|0,-64,-1)|0;f=D;do if(f>>>0>0|(f|0)==0&e>>>0>4294967231)h=7;else{if(Xa(d,d+64|0,e,f,g)|0){Hc(a|0,0,e|0)|0;h=7;break}if(b|0){c[b>>2]=e;c[b+4>>2]=f}Xc(a|0,d+64|0,e|0)|0;e=0}while(0);if((h|0)==7)if(!b)e=-1;else{c[b>>2]=0;c[b+4>>2]=0;e=-1}return e|0}function hc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=c[b+4>>2]|0;k=c[b+8>>2]|0;j=c[b+12>>2]|0;i=c[b+16>>2]|0;h=c[b+20>>2]|0;g=c[b+24>>2]|0;f=c[b+28>>2]|0;e=c[b+32>>2]|0;d=c[b+36>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=l;c[a+8>>2]=k;c[a+12>>2]=j;c[a+16>>2]=i;c[a+20>>2]=h;c[a+24>>2]=g;c[a+28>>2]=f;c[a+32>>2]=e;c[a+36>>2]=d;return}function ic(b,c,d,e,f,g){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;j=i;h=i=i+63&-64;i=i+32|0;if(!(e>>>0<0|(e|0)==0&d>>>0<32)?(bd(h,32,0,f,g)|0,k=oe(d|0,e|0,-32,-1)|0,($d(c+16|0,c+32|0,k,D,h)|0)==0):0){Td(b,c,d,e,f,g)|0;c=b+32|0;do{a[b>>0]=0;b=b+1|0}while((b|0)<(c|0));b=0}else b=-1;i=j;return b|0}function jc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=a[b>>0]|0;a:do if((i+-48&255)<=9){g=0;h=b;f=i;while(1){e=(f<<24>>24)+-48|0;f=g*10|0;if(g>>>0>429496729|e>>>0>~f>>>0){e=0;break a}g=e+f|0;e=h+1|0;f=a[e>>0]|0;if((f+-48&255)>9)break;else h=e}if((e|0)!=(b|0)?(h|0)==(b|0)|i<<24>>24!=48:0)c[d>>2]=g;else e=0}else e=0;while(0);return e|0}function kc(b){b=b|0;var d=0,e=0,f=0;a:do if(!(b&3)){d=b;f=4}else{d=b;e=b;while(1){if(!(a[d>>0]|0)){d=e;break a}d=d+1|0;e=d;if(!(e&3)){f=4;break}}}while(0);if((f|0)==4){while(1){e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009))d=d+4|0;else break}if((e&255)<<24>>24)do d=d+1|0;while((a[d>>0]|0)!=0)}return d-b|0}function lc(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;k=i;i=i+96|0;if(!(Ve(k+32|0,k)|0)){g=b;h=k+32|0;j=g+32|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(j|0));Uc(k+64|0,k+32|0,f);b=qd(b+32|0,c,d,e,k+64|0,f,k)|0;fd(k,32);fd(k+32|0,32);fd(k+64|0,24)}else b=-1;i=k;return b|0}function mc(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=i;f=i=i+63&-64;i=i+128|0;if((qb(b,0,102)|0)==(b+101|0)){We(f);e=f+12|0;g=e+102|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(g|0));d=(yb(f,c,d,b,f+12|0)|0)==0;je(f);if(!d){e=Dc(f+12|0,b,102)|0;fd(f+12|0,102)}else e=-1}else e=-1;i=h;return e|0}function nc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;do if(!(c>>>0>64|(d+-1|0)>>>0>63)){if(d>>>0>=256)fa(32441,32461,77,32633);if(c>>>0>=256)fa(32540,32461,78,32633);if((b|0)==0|(c|0)==0){gb(a,d&255,e,f);a=0;break}else{Qa(a,d&255,b,c&255,e,f);a=0;break}}else a=-1;while(0);return a|0}function oc(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;if(g>>>0>0|(g|0)==0&f>>>0>15){d=oe(f|0,g|0,-16,-1)|0;a=lb(a,0,e,d,D,e+f+-16|0,h,i,j,k,l)|0}else a=-1;if(b|0){f=oe(f|0,g|0,-16,-1)|0;g=(a|0)==0;c[b>>2]=g?f:0;c[b+4>>2]=g?D:0}return a|0}function pc(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;if(g>>>0>0|(g|0)==0&f>>>0>15){d=oe(f|0,g|0,-16,-1)|0;a=Db(a,0,e,d,D,e+f+-16|0,h,i,j,k,l)|0}else a=-1;if(b|0){f=oe(f|0,g|0,-16,-1)|0;g=(a|0)==0;c[b>>2]=g?f:0;c[b+4>>2]=g?D:0}return a|0}function qc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=i=i+63&-64;i=i+112|0;c[g+32>>2]=0;c[g+32+4>>2]=0;c[g>>2]=c[8066];c[g+4>>2]=c[8067];c[g+8>>2]=c[8068];c[g+12>>2]=c[8069];c[g+16>>2]=c[8070];c[g+20>>2]=c[8071];c[g+24>>2]=c[8072];c[g+28>>2]=c[8073];Ua(g,b,d,e)|0;Fb(g,a)|0;i=f;return 0}function rc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;e=i=i+63&-64;i=i+16|0;Zb(e,a+64|0,16);f=Rd(c[a+72>>2]|0,c[a+72+4>>2]|0,3)|0;f=le((0<0|0==0&(f&127)>>>0<112?112:240)|0,(0<0|0==0&(f&127)>>>0<112?0:0)|0,f&127|0,0)|0;Na(a,32783,f,D)|0;Na(a,e,16,0)|0;Zb(b,a,64);fd(a,208);i=d;return 0}function sc(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function tc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return da(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function uc(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0;do if(!((b+-1|0)>>>0>63|g>>>0>64)){if(b>>>0>=256)fa(32441,32461,36,32560);if(g>>>0<256){Xb(a,c,f,b&255,d,e,g&255,h,i);j=0;break}else fa(32540,32461,37,32560)}else j=-1;while(0);return j|0}function vc(b,c){b=b|0;c=c|0;var e=0,f=0;e=i;f=i=i+63&-64;i=i+160|0;Ia(f+80|0,c+80|0);pa(f+40|0,c,f+80|0);pa(f,c+40|0,f+80|0);La(b,f);La(f+120|0,f+40|0);a[b+31>>0]=(d[b+31>>0]|0)^(d[f+120>>0]|0)<<7;i=e;return}function wc(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0;if(!(f>>>0<2147483647&f<<1>>>0<c>>>0))ba();if(!f)c=0;else{c=0;do{h=d[e+c>>0]|0;g=c<<1;a[b+g>>0]=(h>>>4)+87+(((h>>>4)+65526|0)>>>8&217);a[b+(g|1)>>0]=(((h&15)<<8)+22272+((h&15)+65526&55552)|0)>>>8;c=c+1|0}while((c|0)!=(f|0));c=f<<1}a[b+c>>0]=0;return b|0}function xc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;g=i;h=i=i+63&-64;i=i+208|0;c[h+64>>2]=0;c[h+64+4>>2]=0;c[h+64+8>>2]=0;c[h+64+12>>2]=0;f=h;j=400;k=f+64|0;do{c[f>>2]=c[j>>2];f=f+4|0;j=j+4|0}while((f|0)<(k|0));Na(h,b,d,e)|0;rc(h,a)|0;i=g;return 0}function yc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;do if(!(c>>>0>64|(d+-1|0)>>>0>63)){if(d>>>0>=256)fa(32441,32461,53,32601);if(c>>>0>=256)fa(32540,32461,54,32601);if((b|0)==0|(c|0)==0){Ib(a,d&255);a=0;break}else{nb(a,d&255,b,c&255);a=0;break}}else a=-1;while(0);return a|0}function zc(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;if(f>>>0>4294967295|(f|0)==-1&e>>>0>4294967279)ba();Ab(a,a+e|0,0,d,e,f,g,h,i,0,k,l)|0;if(b|0){k=oe(e|0,f|0,16,0)|0;c[b>>2]=k;c[b+4>>2]=D}return 0}function Ac(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;if(f>>>0>4294967295|(f|0)==-1&e>>>0>4294967279)ba();Nb(a,a+e|0,0,d,e,f,g,h,i,0,k,l)|0;if(b|0){k=oe(e|0,f|0,16,0)|0;c[b>>2]=k;c[b+4>>2]=D}return 0}function Bc(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;f=i;g=i=i+63&-64;i=i+160|0;xc(c,e,32,0)|0;a[c>>0]=(d[c>>0]|0)&248;a[c+31>>0]=(d[c+31>>0]|0)&63|64;Pa(g,c);vc(b,g);Xc(c|0,e|0,32)|0;Xc(c+32|0,b|0,32)|0;i=f;return 0}function Cc(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!((b+-1|0)>>>0>63|g>>>0>64)){if(b>>>0>=256)fa(32441,32461,18,32513);if(g>>>0<256){cc(a,c,f,b&255,d,e,g&255);h=0;break}else fa(32540,32461,19,32513)}else h=-1;while(0);return h|0}function Dc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;f=i=i+63&-64;i=i+16|0;c[f+4>>2]=b;c[f>>2]=d;if(!e)b=0;else{d=0;b=0;do{b=a[(c[f>>2]|0)+d>>0]^a[(c[f+4>>2]|0)+d>>0]|b;d=d+1|0}while((d|0)!=(e|0))}i=g;return (((b&255)+511|0)>>>8&1)+-1|0}function Ec(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;g=i;h=i=i+63&-64;i=i+64|0;xc(h,d,32,0)|0;d=c;e=h;f=d+32|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));fd(h,64);h=Qe(b,c)|0;i=g;return h|0}function Fc(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;f=i;g=i=i+63&-64;i=i+64|0;xc(g,c,32,0)|0;a[g>>0]=(d[g>>0]|0)&248;a[g+31>>0]=(d[g+31>>0]|0)&63|64;c=g;e=b+32|0;do{a[b>>0]=a[c>>0]|0;b=b+1|0;c=c+1|0}while((b|0)<(e|0));fd(g,64);i=f;return 0}function Gc(b,c,d,e,f,g){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(e>>>0<0|(e|0)==0&d>>>0<32)b=-1;else{Td(b,c,d,e,f,g)|0;c=oe(d|0,e|0,-32,-1)|0;he(b+16|0,b+32|0,c,D,b)|0;c=b+16|0;do{a[b>>0]=0;b=b+1|0}while((b|0)<(c|0));b=0}return b|0}function Hc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=b+e|0;if((e|0)>=20){d=d&255;g=b&3;h=d|d<<8|d<<16|d<<24;if(g){g=b+4-g|0;while((b|0)<(g|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(f&~3|0)){c[b>>2]=h;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function Ic(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=i;g=i=i+63&-64;i=i+32|0;if(d>>>0<0|(d|0)==0&c>>>0<48)a=-1;else{c=oe(c|0,d|0,-32,-1)|0;d=D;Uc(g,b,e);a=dd(a,b+32|0,c,d,g,b,f)|0}i=h;return a|0}function Jc(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=i;i=i+480|0;sb(g,f,32)|0;Ce(g,c,d,e)|0;od(g,g+416|0)|0;c=g+416|0;d=b+32|0;do{a[b>>0]=a[c>>0]|0;b=b+1|0;c=c+1|0}while((b|0)<(d|0));i=g;return 0}function Kc(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;j=i;h=i=i+63&-64;i=i+32|0;if(!(Vc(h,f,g)|0)){a=Yd(a,b,c,d,e,h)|0;fd(h,32)}else a=-1;i=j;return a|0}function Lc(a,b,c,d,e,f,g,h,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0;l=i;m=i=i+63&-64;i=i+16|0;We(m);k=Ca(m,a,b,c,d,e,f,g,h,j,k)|0;je(m);i=l;return k|0}function Mc(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;j=i;h=i=i+63&-64;i=i+32|0;if(!(Vc(h,f,g)|0)){a=ce(a,b,c,d,e,h)|0;fd(h,32)}else a=-1;i=j;return a|0}function Nc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=i;d=i=i+63&-64;i=i+16|0;f=Od(d,b)|0;c[(Zf()|0)>>2]=f;if(!f)d=c[d>>2]|0;else{c[d>>2]=0;d=0}c[a>>2]=d;c[a+4>>2]=d;c[a+8>>2]=d|0?b:0;i=e;return d|0}function Oc(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0;j=i;k=i=i+63&-64;i=i+32|0;Aa(k,e,h,0)|0;Ma(a,b,c,d,e+16|0,f,g,k)|0;fd(k,32);i=j;return 0}function Pc(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[k>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){_()|0;ca(12);return -1}c[k>>2]=a;if((a|0)>(Z()|0)?(Y()|0)==0:0){ca(12);c[k>>2]=b;return -1}return b|0}function Qc(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;j=i;i=i+32|0;if(!(Je(j,g,h)|0)){a=eb(a,b,c,d,e,f,j)|0;fd(j,32)}else a=-1;i=j;return a|0}function Rc(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0;j=i;i=i+32|0;if(!(Je(j,g,h)|0)){Ya(a,b,c,d,e,f,j)|0;fd(j,32);a=0}else a=-1;i=j;return a|0}function Sc(a){a=a|0;c[a+32>>2]=0;c[a+32+4>>2]=0;c[a>>2]=c[8066];c[a+4>>2]=c[8067];c[a+8>>2]=c[8068];c[a+12>>2]=c[8069];c[a+16>>2]=c[8070];c[a+20>>2]=c[8071];c[a+24>>2]=c[8072];c[a+28>>2]=c[8073];return 0}function Tc(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;if((l|0)==1)a=ac(a,b,d,e,f,g,h,i,j,k,1)|0;else{c[(Zf()|0)>>2]=22;a=-1}return a|0}function Uc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;e=i=i+63&-64;i=i+368|0;He(e,0,0,24)|0;xe(e,b,32,0)|0;xe(e,c,32,0)|0;Ne(e,a,24)|0;i=d;return}function Vc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=i;d=i=i+63&-64;i=i+32|0;if(!(_c(d,c,b)|0)){Aa(a,34476,d,0)|0;a=0}else a=-1;i=e;return a|0}function Wc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=i;i=i+32|0;Jc(f,b,c,d,e)|0;e=zd(a,f)|0;e=((f|0)==(a|0)?-1:e)|(Dc(f,a,32)|0);i=f;return e|0}function Xc(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else tc(b,c,d)|0;return b|0}function Yc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=S(b&65535,a&65535)|0;e=(c>>>16)+(S(b&65535,a>>>16)|0)|0;d=S(b>>>16,a&65535)|0;return (D=(e>>>16)+(S(b>>>16,a>>>16)|0)+(((e&65535)+d|0)>>>16)|0,e+d<<16|c&65535|0)|0}function Zc(a,b){a=a|0;b=b|0;pa(a,b,b+120|0);pa(a+40|0,b+40|0,b+80|0);pa(a+80|0,b+80|0,b+120|0);pa(a+120|0,b,b+40|0);return}function _c(b,c,d){b=b|0;c=c|0;d=d|0;if(!(wa(b,c,d)|0)){c=0;d=0;do{d=a[b+c>>0]|d;c=c+1|0}while((c|0)!=32);c=0-(((d&255)+511|0)>>>8&1)|0}else c=-1;return c|0}function $c(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=i;i=i+64|0;ld(f,b,c,d,e)|0;e=yd(a,f)|0;e=((f|0)==(a|0)?-1:e)|(Dc(f,a,64)|0);i=f;return e|0}function ad(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=i;i=i+32|0;md(f,b,c,d,e)|0;e=zd(a,f)|0;e=((f|0)==(a|0)?-1:e)|(Dc(f,a,32)|0);i=f;return e|0}function bd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=i=i+63&-64;i=i+32|0;Aa(g,d,e,0)|0;fb(a,b,c,d+16|0,g)|0;fd(g,32);i=f;return 0}function cd(a,b){a=a|0;b=b|0;var e=0,f=0,g=0;e=0;g=0;do{f=qb(32982,d[b>>0]|0,65)|0;if(!f){b=0;e=0;break}b=b+1|0;e=f-32982<<g|e;g=g+6|0}while(g>>>0<30);c[a>>2]=e;return b|0}function dd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(d>>>0<0|(d|0)==0&c>>>0<16)a=-1;else{d=oe(c|0,d|0,-16,-1)|0;a=Qc(a,b+16|0,b,d,D,e,f,g)|0}return a|0}function ed(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=i;g=i=i+63&-64;i=i+16|0;cb(g,b,c,d,e)|0;e=Ad(a,g)|0;i=f;return e|0}function fd(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;f=i=i+63&-64;i=i+16|0;c[f>>2]=b;if(d|0){b=0;do{a[(c[f>>2]|0)+b>>0]=0;b=b+1|0}while((b|0)!=(d|0))}i=e;return}function gd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=0;do{g=b+(d<<3)|0;e=a+(d<<3)|0;f=c[e+4>>2]^c[g+4>>2];c[e>>2]=c[e>>2]^c[g>>2];c[e+4>>2]=f;d=d+1|0}while((d|0)!=128);return}function hd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0<0|(d|0)==0&c>>>0<16)a=-1;else{d=oe(c|0,d|0,-16,-1)|0;a=eb(a,b+16|0,b,d,D,e,f)|0}return a|0}function id(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function jd(b,c){b=b|0;c=c|0;var d=0,e=0;e=i;i=i+64|0;od(b,e)|0;b=e;d=c+32|0;do{a[c>>0]=a[b>>0]|0;c=c+1|0;b=b+1|0}while((c|0)<(d|0));i=e;return 0}function kd(b,c,d){b=b|0;c=c|0;d=d|0;if(!(d>>>0<1|(d|0)==1&c>>>0<0))fa(33884,33904,172,33930);if(c|0){d=0;do{a[b+d>>0]=$(0)|0;d=d+1|0}while((d|0)!=(c|0))}return}function ld(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=i;i=i+416|0;sb(f,e,32)|0;Na(f,b,c,d)|0;od(f,a)|0;i=f;return 0}function md(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=i;i=i+208|0;tb(f,e,32)|0;Ua(f,b,c,d)|0;pd(f,a)|0;i=f;return 0}function nd(a){a=a|0;var b=0,d=0;c[a+64>>2]=0;c[a+64+4>>2]=0;c[a+64+8>>2]=0;c[a+64+12>>2]=0;b=400;d=a+64|0;do{c[a>>2]=c[b>>2];a=a+4|0;b=b+4|0}while((a|0)<(d|0));return 0}function od(a,b){a=a|0;b=b|0;var c=0;c=i;i=i+64|0;rc(a,c)|0;Na(a+208|0,c,64,0)|0;rc(a+208|0,b)|0;fd(c,64);i=c;return 0}function pd(a,b){a=a|0;b=b|0;var c=0;c=i;i=i+32|0;Fb(a,c)|0;Ua(a+104|0,c,32,0)|0;Fb(a+104|0,b)|0;fd(c,32);i=c;return 0}function qd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;if(d>>>0>0|(d|0)==0&c>>>0>4294967279)a=-1;else a=Rc(a+16|0,a,b,c,d,e,f,g)|0;return a|0}function rd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(e>>>0>0|(e|0)==0&d>>>0>4294967295){c[(Zf()|0)>>2]=27;a=-1}else a=((df(a,b,d)|0)!=0)<<31>>31;return a|0}function sd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(d>>>0>0|(d|0)==0&c>>>0>4294967279)a=-1;else{Ya(a+16|0,a,b,c,d,e,f)|0;a=0}return a|0}function td(a){a=a|0;return (0-(a^62)|0)>>>8&43^43|(a+65510|0)>>>8&255&a+65|(0-(a^63)|0)>>>8&47^47|(a+65484|0)>>>8&a+71&((a+65510|0)>>>8&255^255)|(a+65474|0)>>>8&a+252&((a+65484|0)>>>8&255^255)|0}function ud(a,b){a=a|0;b=b|0;pa(a,b,b+120|0);pa(a+40|0,b+40|0,b+80|0);pa(a+80|0,b+80|0,b+120|0);return}function vd(a,b){a=a|0;b=b|0;var c=0,d=0;c=i;d=i=i+63&-64;i=i+32|0;Gd(d,32);Bc(a,b,d)|0;fd(d,32);i=c;return 0}function wd(a){a=a|0;var b=0;if(a>>>0<2)a=0;else{do b=$(0)|0;while(b>>>0<(((0-a|0)>>>0)%(a>>>0)|0)>>>0);a=(b>>>0)%(a>>>0)|0}return a|0}function xd(a,b,c){a=a|0;b=b|0;c=c|0;vb(a,b,c&255);vb(a+40|0,b+40|0,c&255);vb(a+80|0,b+80|0,c&255);return}function yd(b,c){b=b|0;c=c|0;var d=0,e=0;d=0;e=0;do{d=(a[c+e>>0]^a[b+e>>0])&255|d;e=e+1|0}while((e|0)!=64);return ((d+511|0)>>>8&1)+-1|0}function zd(b,c){b=b|0;c=c|0;var d=0,e=0;d=0;e=0;do{d=(a[c+e>>0]^a[b+e>>0])&255|d;e=e+1|0}while((e|0)!=32);return ((d+511|0)>>>8&1)+-1|0}function Ad(b,c){b=b|0;c=c|0;var d=0,e=0;d=0;e=0;do{d=(a[c+e>>0]^a[b+e>>0])&255|d;e=e+1|0}while((e|0)!=16);return ((d+511|0)>>>8&1)+-1|0}function Bd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=i;i=i+16|0;Ea(a,b,d,e,f|0)|0;i=f;return (D=c[f+4>>2]|0,c[f>>2]|0)|0}function Cd(){}function Dd(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b>>c;return a>>>c|(b&(1<<c)-1)<<32-c}D=(b|0)<0?-1:0;return b>>c-32|0}function Ed(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Yc(a,c)|0;f=D;return (D=(S(b,c)|0)+(S(d,a)|0)+f|f&0,e|0|0)|0}function Fd(a,b,c){a=a|0;b=b|0;c=c|0;if(c>>>0<256)return ab(a,b,c&255)|0;else fa(32441,32461,106,32679);return 0}function Gd(b,c){b=b|0;c=c|0;var d=0;if(c|0){d=0;do{a[b+d>>0]=$(0)|0;d=d+1|0}while((d|0)!=(c|0))}return}function Hd(b,c){b=b|0;c=c|0;var d=0;d=c;do{if(!d){c=0;break}d=d+-1|0;c=b+d|0}while((a[c>>0]|0)!=36);return c|0}function Id(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return Za(a,b,c,d,e,f,g,h)|0}function Jd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return eb(a,b,c,d,e,f,g)|0}function Kd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Kc(a,b,c,d,e,f,g)|0}function Ld(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Va(a,b,c,d,e,f,g)|0}function Md(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Ya(a,b,c,d,e,f,g)|0;return 0}function Nd(){var a=0;a=aa(30)|0;if((a|0)>0)c[8489]=a;else a=c[8489]|0;if(a>>>0<16)ba();else{Gd(34524,16);return}}function Od(a,b){a=a|0;b=b|0;var d=0;if(b>>>0<=4294967168?(d=rb(b)|0,(d|0)!=0):0){c[a>>2]=d;a=0}else a=12;return a|0}function Pd(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}D=a<<c-32;return 0}function Qd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Mc(a,b,c,d,e,f,g)|0}function Rd(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}D=0;return b>>>c-32|0}function Sd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Cc(a,b,c,d,e,f,g)|0}function Td(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Oc(a,b,c,d,e,0,0,f)|0;return 0}function Ud(a){a=a|0;var b=0;c[a>>2]=1;a=a+4|0;b=a+36|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function Vd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return Wb(a,b,c,d,e,f,g)|0}function Wd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ma(a,b,c,d,e,0,0,f)|0;return 0}function Xd(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return xb(a,b,1,c,d,e,16,f,g,0,0)|0}function Yd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ic(a,b,c,d,e,f)|0}function Zd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Va(a,b,c,d,e,0,f)|0}function _d(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;zb(a,b,c,d,e,f)|0;return 0}function $d(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ed(a,b,c,d,e)|0}function ae(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return xb(a,b,1,c,d,e,16,0,32,f,128)|0}function be(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Za(a,b,c,d,e,0,0,f)|0}function ce(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Gc(a,b,c,d,e,f)|0}function de(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Td(a,b,c,d,e,f)|0;return 0}function ee(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Yd(a,b,c,d,e,f)|0}function fe(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Xa(a,b,c,d,e)|0}function ge(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return gc(a,b,c,d,e,f)|0}function he(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return cb(a,b,c,d,e)|0}function ie(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return $d(a,b,c,d,e)|0}function je(a){a=a|0;var b=0;b=c[a>>2]|0;if(b|0)ta(b);c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function ke(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ce(a,b,c,d,e,f)|0}function le(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (D=d,a-c>>>0|0)|0}function me(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ec(a,b,c,d,e,f)|0}function ne(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Fe(a,b,c,d)|0}function oe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return (D=b+d+(a+c>>>0>>>0<a>>>0|0)>>>0,a+c>>>0|0)|0}function pe(){var a=0;if(!(c[8488]|0)){pf();Nd();c[8488]=1;a=0}else a=1;return a|0}function qe(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wc(a,b,c,d,e)|0}function re(a){a=a|0;var b=0;b=a+40|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function se(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;sa(a,b,c,d,e)|0;return 0}function te(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return he(a,b,c,d,e)|0}function ue(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ib(a,b,c,d);return 0}function ve(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ce(a,b,c,d)|0;return 0}function we(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Wa(a,b,c,d,e)|0}function xe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ue(a,b,c,d)|0;return 0}function ye(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Jc(a,b,c,d,e)|0;return 0}function ze(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;bd(a,b,c,d,e)|0;return 0}function Ae(a,b){a=a|0;b=b|0;Gd(b,32);return Qe(a,b)|0}function Be(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ne(a,b,c,d)|0}function Ce(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Na(a,b,c,d)|0;return 0}function De(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ua(a,b,c,d)|0;return 0}function Ee(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return rd(a,b,c,d)|0}function Fe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ra(a,b,c,d);return 0}function Ge(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return $a(a,b,c,d,e)|0}function He(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return yc(a,b,c,d)|0}function Ie(a,b,c){a=a|0;b=b|0;c=c|0;return Ec(a,b,c)|0}function Je(a,b,c){a=a|0;b=b|0;c=c|0;return Vc(a,b,c)|0}function Ke(b,c){b=b|0;c=c|0;b=Mb(b,c)|0;return ((a[b>>0]|0)==(c&255)<<24>>24?b:0)|0}function Le(a,b,c){a=a|0;b=b|0;c=c|0;sb(a,b,c)|0;return 0}function Me(a,b,c){a=a|0;b=b|0;c=c|0;Bc(a,b,c)|0;return 0}function Ne(a,b,c){a=a|0;b=b|0;c=c|0;return Fd(a,b,c)|0}function Oe(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+15&-16;return b|0}function Pe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;xc(a,b,c,d)|0;return 0}function Qe(a,b){a=a|0;b=b|0;return Sb(a,b)|0}function Re(a,b){a=a|0;b=b|0;return $e(a,b)|0}function Se(a,b){a=a|0;b=b|0;return hb(a,b)|0}function Te(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ea(a,b,c,d,0)|0}function Ue(a,b,c){a=a|0;b=b|0;c=c|0;return _c(a,b,c)|0}function Ve(a,b){a=a|0;b=b|0;return Ae(a,b)|0}function We(a){a=a|0;c[a+4>>2]=0;c[a>>2]=0;c[a+8>>2]=0;return}function Xe(a,b){a=a|0;b=b|0;return Re(a,b)|0}function Ye(a,b){a=a|0;b=b|0;Xc(a|0,b+32|0,32)|0;return 0}function Ze(a,b){a=a|0;b=b|0;return Qe(a,b)|0}function _e(a,b){a=a|0;b=b|0;return Se(a,b)|0}function $e(a,b){a=a|0;b=b|0;Oa(a,b);return 0}function af(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function bf(a,b){a=a|0;b=b|0;Xc(a|0,b|0,32)|0;return 0}function cf(a,b){a=a|0;b=b|0;vd(a,b)|0;return 0}function df(a,b,c){a=a|0;b=b|0;c=c|0;return kb(a,b,c)|0}function ef(a,b){a=a|0;b=b|0;tc(a|0,b|0,1024)|0;return}function ff(a,b){a=a|0;b=b|0;i=a;j=b}function gf(a){a=a|0;return Hd(a,(kc(a)|0)+1|0)|0}function hf(){return 1073741824}function jf(){return 16777216}function kf(a){a=a|0;Hc(a|0,0,1024)|0;return}function lf(){return 524288}function mf(){return 33047}function nf(){return $(0)|0}function of(){return 102}function pf(){ea(1);return}function qf(){return 33554432}function rf(){return 536870912}function sf(){return 12}function tf(){return 134217728}function uf(){return 33138}function vf(){return 416}function wf(){return 4}function xf(a){a=a|0;i=a}function yf(){return 32911}function zf(){return 32323}function Af(a){a=a|0;D=a}function Bf(){return 33051}function Cf(){return 6}function Df(){return 256}function Ef(){return 208}function Ff(){return 104}function Gf(){return 384}function Hf(){return 33079}function If(){return 33062}function Jf(){return 3}function Kf(){return 9}function Lf(){return 33129}function Mf(){return 32964}function Nf(){return 32974}function Of(){return 33942}function Pf(){return 33089}function Qf(){return 1}function Rf(){return 32712}function Sf(){return 128}function Tf(){return 32296}function Uf(){return 8}function Vf(){return 24}function Wf(){return D|0}function Xf(){return 48}function Yf(){return 16}function Zf(){return 33960}function _f(){return i|0}function $f(){return 64}function ag(){return 32}function bg(){return 0}
-
-// EMSCRIPTEN_END_FUNCS
-return{_crypto_onetimeauth_poly1305_init:Se,_crypto_hash_sha512_init:nd,_crypto_hash_primitive:Rf,_crypto_onetimeauth_bytes:Yf,_crypto_box_open:Kd,_crypto_stream_chacha20_ietf_noncebytes:sf,_crypto_stream_salsa20_xor:Wd,_randombytes_buf:Gd,_crypto_auth_hmacsha512_verify:$c,_crypto_generichash_blake2b_keybytes_min:Yf,_crypto_sign_open:ge,_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive:hf,_crypto_sign_ed25519_keypair:vd,_crypto_scalarmult_curve25519_base:Qe,_crypto_stream_salsa20:fb,_crypto_sign_ed25519_open:gc,_sodium_init:pe,_crypto_pwhash_scryptsalsa208sha256:bc,_crypto_scalarmult_primitive:Bf,_crypto_box_noncebytes:Vf,_crypto_aead_chacha20poly1305_ietf_keybytes:ag,_crypto_aead_chacha20poly1305_ietf_encrypt_detached:Ab,_crypto_scalarmult_base:Ze,_crypto_aead_chacha20poly1305_abytes:Yf,_crypto_auth_bytes:ag,_crypto_pwhash_opslimit_sensitive:Uf,_crypto_pwhash_strbytes:Sf,_crypto_auth_hmacsha512256_update:ve,_sbrk:Pc,_memcpy:tc,_crypto_onetimeauth_poly1305:he,_crypto_sign_secretkeybytes:$f,_crypto_generichash_primitive:zf,_crypto_auth_hmacsha512256:Jc,_crypto_box_seed_keypair:Ie,_crypto_auth_hmacsha512_init:sb,_crypto_generichash_blake2b_keybytes_max:$f,_crypto_box_curve25519xsalsa20poly1305_macbytes:Yf,_bitshift64Lshr:Rd,_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive:jf,_crypto_sign_ed25519_sk_to_pk:Ye,_crypto_verify_16_bytes:Yf,_crypto_stream_xsalsa20:bd,_crypto_scalarmult_curve25519:_c,_crypto_box_open_easy_afternm:hd,_crypto_auth_hmacsha512:ld,_crypto_stream_chacha20_ietf_xor_ic:Ld,_crypto_hash:Pe,_crypto_box_curve25519xsalsa20poly1305_seedbytes:ag,_crypto_box_zerobytes:ag,_crypto_stream_salsa20_keybytes:ag,_crypto_auth_hmacsha512256_keybytes:ag,_crypto_aead_chacha20poly1305_keybytes:ag,_crypto_hash_sha512_bytes:$f,_crypto_verify_32:zd,_crypto_generichash_blake2b_final:Fd,_crypto_generichash_blake2b_init_salt_personal:nc,_crypto_box_seal:lc,_crypto_core_hsalsa20_outputbytes:ag,_free:ta,_crypto_sign_ed25519_publickeybytes:ag,_crypto_core_hsalsa20_keybytes:ag,_crypto_sign_primitive:Pf,_crypto_scalarmult_curve25519_bytes:ag,_crypto_auth_keybytes:ag,_crypto_box:Qd,_crypto_stream_xsalsa20_noncebytes:Vf,_crypto_onetimeauth_poly1305_keybytes:ag,_crypto_box_beforenm:Je,_crypto_box_curve25519xsalsa20poly1305_open_afternm:Yd,_crypto_pwhash_scryptsalsa208sha256_saltbytes:ag,_crypto_aead_chacha20poly1305_npubbytes:Uf,_crypto_stream_primitive:Lf,_crypto_pwhash_argon2i_str_verify:rd,_crypto_pwhash_memlimit_sensitive:rf,_crypto_shorthash:se,_crypto_onetimeauth_poly1305_bytes:Yf,_crypto_secretbox_detached:Ya,_crypto_box_curve25519xsalsa20poly1305_seed_keypair:Ec,_crypto_box_primitive:Tf,_crypto_pwhash_str:Vd,_crypto_box_detached_afternm:Md,_crypto_stream_salsa20_xor_ic:Ma,_crypto_secretbox_xsalsa20poly1305_boxzerobytes:Yf,_crypto_core_salsa20_constbytes:Yf,_crypto_auth_hmacsha512_keybytes:ag,_crypto_auth:ye,_crypto_auth_hmacsha512256_final:jd,_randombytes_random:nf,_crypto_stream_chacha20_keybytes:ag,_crypto_pwhash_str_verify:Ee,_crypto_sign_keypair:cf,_crypto_auth_hmacsha256_statebytes:Ef,_crypto_generichash_keybytes_min:Yf,_crypto_generichash_statebytes:Gf,_randombytes:kd,_crypto_aead_chacha20poly1305_encrypt_detached:Nb,_randombytes_implementation_name:uf,_crypto_core_salsa20_keybytes:ag,_sodium_library_version_major:Kf,_crypto_hash_sha256_statebytes:Ff,_crypto_pwhash_strprefix:Mf,_crypto_box_afternm:ke,_crypto_secretbox_primitive:If,_i64Add:oe,_malloc:na,_crypto_scalarmult_curve25519_scalarbytes:ag,_crypto_box_curve25519xsalsa20poly1305_keypair:Ae,_crypto_hash_sha256_init:Sc,_crypto_sign_ed25519_detached:zb,_crypto_pwhash_scryptsalsa208sha256_str_verify:mc,_crypto_generichash_init:He,_crypto_generichash_keybytes_max:$f,_crypto_sign_ed25519_pk_to_curve25519:fc,_crypto_stream_chacha20_ietf_xor:Zd,_crypto_verify_64:yd,_crypto_sign_publickeybytes:ag,_crypto_shorthash_siphash24:sa,_crypto_box_beforenmbytes:ag,_crypto_stream_chacha20_ietf:we,_crypto_generichash:Sd,_crypto_sign_ed25519:ec,_crypto_box_curve25519xsalsa20poly1305_open:Kc,_crypto_pwhash_opslimit_interactive:wf,_sodium_hex2bin:mb,_crypto_onetimeauth_poly1305_final:Re,_crypto_auth_hmacsha256_init:tb,_crypto_aead_chacha20poly1305_ietf_encrypt:zc,_crypto_aead_chacha20poly1305_ietf_nsecbytes:bg,_crypto_box_curve25519xsalsa20poly1305_noncebytes:Vf,_crypto_secretbox:ce,_crypto_box_boxzerobytes:Yf,_crypto_pwhash_argon2i_saltbytes:Yf,_crypto_hash_sha512_update:Na,_crypto_onetimeauth_poly1305_verify:$d,_crypto_box_curve25519xsalsa20poly1305_beforenmbytes:ag,_crypto_generichash_blake2b_init:yc,_crypto_aead_chacha20poly1305_ietf_decrypt:oc,_crypto_auth_hmacsha512256_init:Le,_crypto_pwhash_primitive:Nf,_crypto_onetimeauth_keybytes:ag,_crypto_pwhash_argon2i:ac,_crypto_auth_hmacsha512_final:od,_crypto_sign_ed25519_seedbytes:ag,_crypto_auth_hmacsha512256_verify:Wc,_crypto_auth_hmacsha256_final:pd,_crypto_box_secretkeybytes:ag,_crypto_verify_16:Ad,_crypto_stream_chacha20_noncebytes:Uf,_crypto_onetimeauth_update:Be,_crypto_aead_chacha20poly1305_encrypt:Ac,_crypto_core_salsa20:xa,_crypto_pwhash_scryptsalsa208sha256_ll:Lc,_crypto_box_detached:Rc,_crypto_stream_xsalsa20_xor:Td,_crypto_sign_seedbytes:ag,_memset:Hc,_crypto_pwhash_scryptsalsa208sha256_str:Hb,_crypto_generichash_blake2b_saltbytes:Yf,_bitshift64Ashr:Dd,_bitshift64Shl:Pd,_sodium_version_string:Of,_crypto_box_open_detached:Qc,_crypto_scalarmult_bytes:ag,_crypto_secretbox_xsalsa20poly1305:Gc,_crypto_pwhash:Tc,_crypto_auth_verify:qe,_crypto_sign_ed25519_seed_keypair:Bc,_crypto_secretbox_xsalsa20poly1305_zerobytes:ag,_crypto_onetimeauth_poly1305_update:ne,_crypto_sign_detached:_d,_crypto_verify_32_bytes:ag,_crypto_box_curve25519xsalsa20poly1305_zerobytes:ag,_crypto_generichash_blake2b_keybytes:ag,_crypto_sign_ed25519_secretkeybytes:$f,_crypto_stream_xor:de,_crypto_stream_xsalsa20_xor_ic:Oc,_crypto_verify_64_bytes:$f,_randombytes_stir:pf,_crypto_secretbox_easy:sd,_crypto_pwhash_argon2i_strprefix:Mf,_crypto_auth_hmacsha256_update:De,_crypto_pwhash_scryptsalsa208sha256_strbytes:of,_crypto_stream_chacha20:Ge,_crypto_stream_xsalsa20_keybytes:ag,_crypto_sign:me,_crypto_pwhash_argon2i_str:Wb,_crypto_box_open_detached_afternm:Jd,_crypto_pwhash_argon2i_memlimit_sensitive:rf,_crypto_box_sealbytes:Xf,_crypto_onetimeauth:te,_crypto_auth_hmacsha512_statebytes:vf,_crypto_secretbox_boxzerobytes:Yf,_i64Subtract:le,_crypto_pwhash_alg_default:Qf,_crypto_pwhash_scryptsalsa208sha256_strprefix:mf,_crypto_onetimeauth_primitive:yf,_crypto_box_seedbytes:ag,_crypto_hash_sha256_update:Ua,_crypto_core_hsalsa20_constbytes:Yf,_crypto_box_curve25519xsalsa20poly1305:Mc,_crypto_generichash_blake2b_statebytes:Gf,_crypto_box_curve25519xsalsa20poly1305_boxzerobytes:Yf,_crypto_generichash_blake2b_bytes_min:Yf,_crypto_pwhash_opslimit_moderate:Cf,_crypto_secretbox_open:Yd,_crypto_hash_sha256_bytes:ag,_crypto_core_salsa20_inputbytes:Yf,_crypto_box_macbytes:Yf,_crypto_shorthash_bytes:Uf,_crypto_box_publickeybytes:ag,___udivdi3:Te,_crypto_aead_chacha20poly1305_decrypt_detached:Db,_crypto_auth_hmacsha256_verify:ad,_crypto_pwhash_argon2i_strbytes:Sf,___muldsi3:Yc,_sodium_library_version_minor:Jf,_crypto_scalarmult_scalarbytes:ag,_crypto_onetimeauth_statebytes:Df,_crypto_auth_hmacsha256_bytes:ag,_crypto_sign_seed_keypair:Me,_crypto_pwhash_argon2i_opslimit_interactive:wf,_crypto_stream_salsa20_noncebytes:Uf,_crypto_shorthash_keybytes:Yf,___udivmoddi4:Ea,_crypto_box_curve25519xsalsa20poly1305_afternm:ce,_crypto_stream_noncebytes:Vf,_crypto_aead_chacha20poly1305_decrypt:pc,_sodium_bin2hex:wc,_crypto_secretbox_open_easy:hd,_crypto_aead_chacha20poly1305_ietf_decrypt_detached:lb,_crypto_pwhash_memlimit_interactive:qf,_crypto_hash_sha512_final:rc,_crypto_generichash_final:Ne,_crypto_secretbox_xsalsa20poly1305_keybytes:ag,_crypto_auth_hmacsha512_update:Ce,_crypto_pwhash_saltbytes:Yf,_crypto_auth_hmacsha256:md,_crypto_secretbox_noncebytes:Vf,_crypto_box_keypair:Ve,_crypto_secretbox_xsalsa20poly1305_macbytes:Yf,_crypto_box_open_afternm:ee,_crypto_auth_hmacsha512_bytes:$f,_crypto_generichash_keybytes:ag,_crypto_hash_bytes:$f,_crypto_generichash_bytes_min:Yf,_crypto_pwhash_argon2i_alg_argon2i13:Qf,_crypto_secretbox_macbytes:Yf,_crypto_secretbox_keybytes:ag,_crypto_auth_hmacsha256_keybytes:ag,_crypto_pwhash_argon2i_opslimit_sensitive:Uf,_crypto_aead_chacha20poly1305_ietf_abytes:Yf,_randombytes_close:bg,_crypto_pwhash_argon2i_memlimit_moderate:tf,_crypto_generichash_blake2b_bytes_max:$f,_crypto_generichash_blake2b:Cc,_crypto_generichash_bytes:ag,_crypto_generichash_bytes_max:$f,_crypto_secretbox_open_detached:eb,_crypto_sign_ed25519_sk_to_seed:bf,_crypto_sign_ed25519_sk_to_curve25519:Fc,_crypto_core_salsa20_outputbytes:$f,_crypto_box_easy_afternm:sd,___muldi3:Ed,_crypto_generichash_blake2b_personalbytes:Yf,_crypto_stream_chacha20_xor_ic:Id,___uremdi3:Bd,_crypto_sign_verify_detached:fe,_crypto_pwhash_argon2i_opslimit_moderate:Cf,_crypto_onetimeauth_verify:ie,_crypto_box_open_easy:dd,_crypto_stream:ze,_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive:qf,_crypto_box_curve25519xsalsa20poly1305_secretkeybytes:ag,_crypto_aead_chacha20poly1305_nsecbytes:bg,_crypto_hash_sha512_statebytes:Ef,_crypto_sign_bytes:$f,_crypto_secretbox_zerobytes:ag,_crypto_generichash_update:xe,_crypto_scalarmult:Ue,_crypto_shorthash_primitive:Hf,_crypto_hash_sha512:xc,_llvm_cttz_i32:id,_crypto_stream_chacha20_xor:be,_crypto_box_seal_open:Ic,_crypto_box_easy:qd,_crypto_sign_ed25519_verify_detached:Xa,_memmove:Xc,_crypto_sign_ed25519_bytes:$f,_crypto_generichash_blake2b_update:ue,_crypto_hash_sha256:qc,_crypto_box_curve25519xsalsa20poly1305_beforenm:Vc,_crypto_pwhash_alg_argon2i13:Qf,_crypto_core_hsalsa20_inputbytes:Yf,_crypto_onetimeauth_final:Xe,_crypto_generichash_blake2b_bytes:ag,_crypto_auth_hmacsha512256_bytes:ag,_crypto_generichash_blake2b_salt_personal:uc,_randombytes_uniform:wd,_crypto_shorthash_siphash24_bytes:Uf,_crypto_auth_hmacsha512256_statebytes:vf,_crypto_shorthash_siphash24_keybytes:Yf,_crypto_secretbox_xsalsa20poly1305_noncebytes:Vf,_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive:lf,_crypto_core_hsalsa20:Aa,_crypto_pwhash_argon2i_memlimit_interactive:qf,_crypto_hash_sha256_final:Fb,_crypto_secretbox_xsalsa20poly1305_open:ic,_crypto_stream_keybytes:ag,_crypto_box_curve25519xsalsa20poly1305_publickeybytes:ag,_crypto_onetimeauth_init:_e,_crypto_aead_chacha20poly1305_ietf_npubbytes:sf,_crypto_pwhash_memlimit_moderate:tf,runPostSets:Cd,stackAlloc:Oe,stackSave:_f,stackRestore:xf,establishStackSpace:ff,setThrew:af,setTempRet0:Af,getTempRet0:Wf}})
-
-
-// EMSCRIPTEN_END_ASM
-(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _crypto_onetimeauth_poly1305_init=Module["_crypto_onetimeauth_poly1305_init"]=asm["_crypto_onetimeauth_poly1305_init"];var _crypto_hash_sha512_init=Module["_crypto_hash_sha512_init"]=asm["_crypto_hash_sha512_init"];var _crypto_stream_xsalsa20_noncebytes=Module["_crypto_stream_xsalsa20_noncebytes"]=asm["_crypto_stream_xsalsa20_noncebytes"];var _crypto_auth_hmacsha256_verify=Module["_crypto_auth_hmacsha256_verify"]=asm["_crypto_auth_hmacsha256_verify"];var _crypto_onetimeauth_bytes=Module["_crypto_onetimeauth_bytes"]=asm["_crypto_onetimeauth_bytes"];var _crypto_shorthash_primitive=Module["_crypto_shorthash_primitive"]=asm["_crypto_shorthash_primitive"];var _crypto_box_open=Module["_crypto_box_open"]=asm["_crypto_box_open"];var _crypto_stream_chacha20_ietf_noncebytes=Module["_crypto_stream_chacha20_ietf_noncebytes"]=asm["_crypto_stream_chacha20_ietf_noncebytes"];var _crypto_stream_salsa20_xor=Module["_crypto_stream_salsa20_xor"]=asm["_crypto_stream_salsa20_xor"];var _crypto_auth_hmacsha512_verify=Module["_crypto_auth_hmacsha512_verify"]=asm["_crypto_auth_hmacsha512_verify"];var _crypto_generichash_blake2b_keybytes_min=Module["_crypto_generichash_blake2b_keybytes_min"]=asm["_crypto_generichash_blake2b_keybytes_min"];var _crypto_generichash_blake2b_bytes=Module["_crypto_generichash_blake2b_bytes"]=asm["_crypto_generichash_blake2b_bytes"];var _crypto_pwhash_saltbytes=Module["_crypto_pwhash_saltbytes"]=asm["_crypto_pwhash_saltbytes"];var _crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive"]=asm["_crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive"];var _crypto_box_seal_open=Module["_crypto_box_seal_open"]=asm["_crypto_box_seal_open"];var _crypto_scalarmult_curve25519_base=Module["_crypto_scalarmult_curve25519_base"]=asm["_crypto_scalarmult_curve25519_base"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _sodium_bin2hex=Module["_sodium_bin2hex"]=asm["_sodium_bin2hex"];var _crypto_pwhash_scryptsalsa208sha256=Module["_crypto_pwhash_scryptsalsa208sha256"]=asm["_crypto_pwhash_scryptsalsa208sha256"];var _crypto_scalarmult_primitive=Module["_crypto_scalarmult_primitive"]=asm["_crypto_scalarmult_primitive"];var _crypto_secretbox_xsalsa20poly1305_open=Module["_crypto_secretbox_xsalsa20poly1305_open"]=asm["_crypto_secretbox_xsalsa20poly1305_open"];var _crypto_box_noncebytes=Module["_crypto_box_noncebytes"]=asm["_crypto_box_noncebytes"];var _crypto_aead_chacha20poly1305_ietf_keybytes=Module["_crypto_aead_chacha20poly1305_ietf_keybytes"]=asm["_crypto_aead_chacha20poly1305_ietf_keybytes"];var _crypto_aead_chacha20poly1305_ietf_encrypt_detached=Module["_crypto_aead_chacha20poly1305_ietf_encrypt_detached"]=asm["_crypto_aead_chacha20poly1305_ietf_encrypt_detached"];var _crypto_scalarmult_base=Module["_crypto_scalarmult_base"]=asm["_crypto_scalarmult_base"];var _crypto_aead_chacha20poly1305_abytes=Module["_crypto_aead_chacha20poly1305_abytes"]=asm["_crypto_aead_chacha20poly1305_abytes"];var _crypto_auth_bytes=Module["_crypto_auth_bytes"]=asm["_crypto_auth_bytes"];var _crypto_onetimeauth=Module["_crypto_onetimeauth"]=asm["_crypto_onetimeauth"];var _crypto_stream_chacha20_keybytes=Module["_crypto_stream_chacha20_keybytes"]=asm["_crypto_stream_chacha20_keybytes"];var _crypto_sign_open=Module["_crypto_sign_open"]=asm["_crypto_sign_open"];var _crypto_auth_hmacsha512256_update=Module["_crypto_auth_hmacsha512256_update"]=asm["_crypto_auth_hmacsha512256_update"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _crypto_onetimeauth_poly1305=Module["_crypto_onetimeauth_poly1305"]=asm["_crypto_onetimeauth_poly1305"];var _crypto_sign_ed25519_keypair=Module["_crypto_sign_ed25519_keypair"]=asm["_crypto_sign_ed25519_keypair"];var _crypto_pwhash=Module["_crypto_pwhash"]=asm["_crypto_pwhash"];var _crypto_auth_hmacsha512256=Module["_crypto_auth_hmacsha512256"]=asm["_crypto_auth_hmacsha512256"];var _crypto_shorthash_siphash24_keybytes=Module["_crypto_shorthash_siphash24_keybytes"]=asm["_crypto_shorthash_siphash24_keybytes"];var _crypto_box_seed_keypair=Module["_crypto_box_seed_keypair"]=asm["_crypto_box_seed_keypair"];var _crypto_auth_hmacsha512_init=Module["_crypto_auth_hmacsha512_init"]=asm["_crypto_auth_hmacsha512_init"];var _crypto_generichash_blake2b_keybytes_max=Module["_crypto_generichash_blake2b_keybytes_max"]=asm["_crypto_generichash_blake2b_keybytes_max"];var _crypto_box_beforenmbytes=Module["_crypto_box_beforenmbytes"]=asm["_crypto_box_beforenmbytes"];var _crypto_pwhash_scryptsalsa208sha256_memlimit_interactive=Module["_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive"]=asm["_crypto_pwhash_scryptsalsa208sha256_memlimit_interactive"];var _crypto_sign_ed25519_sk_to_pk=Module["_crypto_sign_ed25519_sk_to_pk"]=asm["_crypto_sign_ed25519_sk_to_pk"];var _crypto_auth_hmacsha512_update=Module["_crypto_auth_hmacsha512_update"]=asm["_crypto_auth_hmacsha512_update"];var ___udivmoddi4=Module["___udivmoddi4"]=asm["___udivmoddi4"];var _crypto_stream_xsalsa20=Module["_crypto_stream_xsalsa20"]=asm["_crypto_stream_xsalsa20"];var _crypto_scalarmult_curve25519=Module["_crypto_scalarmult_curve25519"]=asm["_crypto_scalarmult_curve25519"];var _crypto_box_open_easy_afternm=Module["_crypto_box_open_easy_afternm"]=asm["_crypto_box_open_easy_afternm"];var _crypto_auth_hmacsha512=Module["_crypto_auth_hmacsha512"]=asm["_crypto_auth_hmacsha512"];var _crypto_stream_chacha20_ietf_xor_ic=Module["_crypto_stream_chacha20_ietf_xor_ic"]=asm["_crypto_stream_chacha20_ietf_xor_ic"];var _crypto_hash_sha256_update=Module["_crypto_hash_sha256_update"]=asm["_crypto_hash_sha256_update"];var _crypto_box_curve25519xsalsa20poly1305_seedbytes=Module["_crypto_box_curve25519xsalsa20poly1305_seedbytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_seedbytes"];var _crypto_box_zerobytes=Module["_crypto_box_zerobytes"]=asm["_crypto_box_zerobytes"];var _crypto_stream_salsa20_keybytes=Module["_crypto_stream_salsa20_keybytes"]=asm["_crypto_stream_salsa20_keybytes"];var _crypto_auth_hmacsha512256_keybytes=Module["_crypto_auth_hmacsha512256_keybytes"]=asm["_crypto_auth_hmacsha512256_keybytes"];var _randombytes_uniform=Module["_randombytes_uniform"]=asm["_randombytes_uniform"];var _crypto_aead_chacha20poly1305_keybytes=Module["_crypto_aead_chacha20poly1305_keybytes"]=asm["_crypto_aead_chacha20poly1305_keybytes"];var _crypto_hash_sha512_bytes=Module["_crypto_hash_sha512_bytes"]=asm["_crypto_hash_sha512_bytes"];var _crypto_onetimeauth_statebytes=Module["_crypto_onetimeauth_statebytes"]=asm["_crypto_onetimeauth_statebytes"];var _crypto_generichash_blake2b_final=Module["_crypto_generichash_blake2b_final"]=asm["_crypto_generichash_blake2b_final"];var _crypto_generichash_blake2b_init_salt_personal=Module["_crypto_generichash_blake2b_init_salt_personal"]=asm["_crypto_generichash_blake2b_init_salt_personal"];var _crypto_box_seal=Module["_crypto_box_seal"]=asm["_crypto_box_seal"];var _crypto_sign_ed25519_publickeybytes=Module["_crypto_sign_ed25519_publickeybytes"]=asm["_crypto_sign_ed25519_publickeybytes"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _crypto_core_hsalsa20_keybytes=Module["_crypto_core_hsalsa20_keybytes"]=asm["_crypto_core_hsalsa20_keybytes"];var _crypto_sign_primitive=Module["_crypto_sign_primitive"]=asm["_crypto_sign_primitive"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var _crypto_scalarmult_curve25519_bytes=Module["_crypto_scalarmult_curve25519_bytes"]=asm["_crypto_scalarmult_curve25519_bytes"];var _crypto_auth_keybytes=Module["_crypto_auth_keybytes"]=asm["_crypto_auth_keybytes"];var _crypto_box=Module["_crypto_box"]=asm["_crypto_box"];var _crypto_onetimeauth_poly1305_keybytes=Module["_crypto_onetimeauth_poly1305_keybytes"]=asm["_crypto_onetimeauth_poly1305_keybytes"];var _crypto_box_curve25519xsalsa20poly1305_open_afternm=Module["_crypto_box_curve25519xsalsa20poly1305_open_afternm"]=asm["_crypto_box_curve25519xsalsa20poly1305_open_afternm"];var _crypto_pwhash_scryptsalsa208sha256_saltbytes=Module["_crypto_pwhash_scryptsalsa208sha256_saltbytes"]=asm["_crypto_pwhash_scryptsalsa208sha256_saltbytes"];var _crypto_aead_chacha20poly1305_npubbytes=Module["_crypto_aead_chacha20poly1305_npubbytes"]=asm["_crypto_aead_chacha20poly1305_npubbytes"];var _crypto_stream_primitive=Module["_crypto_stream_primitive"]=asm["_crypto_stream_primitive"];var _crypto_pwhash_argon2i_str_verify=Module["_crypto_pwhash_argon2i_str_verify"]=asm["_crypto_pwhash_argon2i_str_verify"];var _crypto_onetimeauth_poly1305_final=Module["_crypto_onetimeauth_poly1305_final"]=asm["_crypto_onetimeauth_poly1305_final"];var _crypto_shorthash=Module["_crypto_shorthash"]=asm["_crypto_shorthash"];var _crypto_onetimeauth_poly1305_bytes=Module["_crypto_onetimeauth_poly1305_bytes"]=asm["_crypto_onetimeauth_poly1305_bytes"];var _crypto_secretbox_detached=Module["_crypto_secretbox_detached"]=asm["_crypto_secretbox_detached"];var _crypto_box_curve25519xsalsa20poly1305_seed_keypair=Module["_crypto_box_curve25519xsalsa20poly1305_seed_keypair"]=asm["_crypto_box_curve25519xsalsa20poly1305_seed_keypair"];var _crypto_box_primitive=Module["_crypto_box_primitive"]=asm["_crypto_box_primitive"];var _crypto_pwhash_str=Module["_crypto_pwhash_str"]=asm["_crypto_pwhash_str"];var _crypto_box_detached_afternm=Module["_crypto_box_detached_afternm"]=asm["_crypto_box_detached_afternm"];var _crypto_stream_salsa20_xor_ic=Module["_crypto_stream_salsa20_xor_ic"]=asm["_crypto_stream_salsa20_xor_ic"];var _crypto_secretbox_xsalsa20poly1305_boxzerobytes=Module["_crypto_secretbox_xsalsa20poly1305_boxzerobytes"]=asm["_crypto_secretbox_xsalsa20poly1305_boxzerobytes"];var _crypto_auth_hmacsha256_init=Module["_crypto_auth_hmacsha256_init"]=asm["_crypto_auth_hmacsha256_init"];var _crypto_auth_hmacsha512_keybytes=Module["_crypto_auth_hmacsha512_keybytes"]=asm["_crypto_auth_hmacsha512_keybytes"];var _crypto_auth=Module["_crypto_auth"]=asm["_crypto_auth"];var _crypto_auth_hmacsha512256_final=Module["_crypto_auth_hmacsha512256_final"]=asm["_crypto_auth_hmacsha512256_final"];var _randombytes_random=Module["_randombytes_random"]=asm["_randombytes_random"];var _crypto_onetimeauth_verify=Module["_crypto_onetimeauth_verify"]=asm["_crypto_onetimeauth_verify"];var _crypto_pwhash_str_verify=Module["_crypto_pwhash_str_verify"]=asm["_crypto_pwhash_str_verify"];var _crypto_sign_keypair=Module["_crypto_sign_keypair"]=asm["_crypto_sign_keypair"];var _crypto_sign_ed25519_open=Module["_crypto_sign_ed25519_open"]=asm["_crypto_sign_ed25519_open"];var _crypto_generichash_keybytes_min=Module["_crypto_generichash_keybytes_min"]=asm["_crypto_generichash_keybytes_min"];var _crypto_generichash_statebytes=Module["_crypto_generichash_statebytes"]=asm["_crypto_generichash_statebytes"];var _crypto_aead_chacha20poly1305_encrypt_detached=Module["_crypto_aead_chacha20poly1305_encrypt_detached"]=asm["_crypto_aead_chacha20poly1305_encrypt_detached"];var _crypto_core_salsa20_keybytes=Module["_crypto_core_salsa20_keybytes"]=asm["_crypto_core_salsa20_keybytes"];var _crypto_aead_chacha20poly1305_ietf_nsecbytes=Module["_crypto_aead_chacha20poly1305_ietf_nsecbytes"]=asm["_crypto_aead_chacha20poly1305_ietf_nsecbytes"];var _crypto_pwhash_strprefix=Module["_crypto_pwhash_strprefix"]=asm["_crypto_pwhash_strprefix"];var _crypto_box_afternm=Module["_crypto_box_afternm"]=asm["_crypto_box_afternm"];var _crypto_auth_hmacsha512256_bytes=Module["_crypto_auth_hmacsha512256_bytes"]=asm["_crypto_auth_hmacsha512256_bytes"];var _crypto_box_curve25519xsalsa20poly1305_keypair=Module["_crypto_box_curve25519xsalsa20poly1305_keypair"]=asm["_crypto_box_curve25519xsalsa20poly1305_keypair"];var _crypto_hash_sha256_init=Module["_crypto_hash_sha256_init"]=asm["_crypto_hash_sha256_init"];var _crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive"]=asm["_crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive"];var _crypto_pwhash_scryptsalsa208sha256_str_verify=Module["_crypto_pwhash_scryptsalsa208sha256_str_verify"]=asm["_crypto_pwhash_scryptsalsa208sha256_str_verify"];var _crypto_hash_primitive=Module["_crypto_hash_primitive"]=asm["_crypto_hash_primitive"];var _crypto_scalarmult_curve25519_scalarbytes=Module["_crypto_scalarmult_curve25519_scalarbytes"]=asm["_crypto_scalarmult_curve25519_scalarbytes"];var _crypto_sign_ed25519_pk_to_curve25519=Module["_crypto_sign_ed25519_pk_to_curve25519"]=asm["_crypto_sign_ed25519_pk_to_curve25519"];var _crypto_verify_64=Module["_crypto_verify_64"]=asm["_crypto_verify_64"];var _crypto_aead_chacha20poly1305_nsecbytes=Module["_crypto_aead_chacha20poly1305_nsecbytes"]=asm["_crypto_aead_chacha20poly1305_nsecbytes"];var _crypto_shorthash_siphash24=Module["_crypto_shorthash_siphash24"]=asm["_crypto_shorthash_siphash24"];var _crypto_box_curve25519xsalsa20poly1305_macbytes=Module["_crypto_box_curve25519xsalsa20poly1305_macbytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_macbytes"];var _crypto_stream_chacha20_ietf=Module["_crypto_stream_chacha20_ietf"]=asm["_crypto_stream_chacha20_ietf"];var _crypto_generichash=Module["_crypto_generichash"]=asm["_crypto_generichash"];var _crypto_sign_ed25519=Module["_crypto_sign_ed25519"]=asm["_crypto_sign_ed25519"];var _crypto_core_hsalsa20_outputbytes=Module["_crypto_core_hsalsa20_outputbytes"]=asm["_crypto_core_hsalsa20_outputbytes"];var _crypto_pwhash_opslimit_interactive=Module["_crypto_pwhash_opslimit_interactive"]=asm["_crypto_pwhash_opslimit_interactive"];var _crypto_box_curve25519xsalsa20poly1305_noncebytes=Module["_crypto_box_curve25519xsalsa20poly1305_noncebytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_noncebytes"];var _crypto_pwhash_memlimit_sensitive=Module["_crypto_pwhash_memlimit_sensitive"]=asm["_crypto_pwhash_memlimit_sensitive"];var _crypto_core_salsa20_constbytes=Module["_crypto_core_salsa20_constbytes"]=asm["_crypto_core_salsa20_constbytes"];var _crypto_box_boxzerobytes=Module["_crypto_box_boxzerobytes"]=asm["_crypto_box_boxzerobytes"];var _sodium_library_version_major=Module["_sodium_library_version_major"]=asm["_sodium_library_version_major"];var _crypto_verify_16_bytes=Module["_crypto_verify_16_bytes"]=asm["_crypto_verify_16_bytes"];var _crypto_aead_chacha20poly1305_ietf_encrypt=Module["_crypto_aead_chacha20poly1305_ietf_encrypt"]=asm["_crypto_aead_chacha20poly1305_ietf_encrypt"];var _crypto_pwhash_argon2i_saltbytes=Module["_crypto_pwhash_argon2i_saltbytes"]=asm["_crypto_pwhash_argon2i_saltbytes"];var _crypto_hash_sha512_update=Module["_crypto_hash_sha512_update"]=asm["_crypto_hash_sha512_update"];var _crypto_onetimeauth_poly1305_verify=Module["_crypto_onetimeauth_poly1305_verify"]=asm["_crypto_onetimeauth_poly1305_verify"];var _crypto_box_beforenm=Module["_crypto_box_beforenm"]=asm["_crypto_box_beforenm"];var _crypto_generichash_blake2b_init=Module["_crypto_generichash_blake2b_init"]=asm["_crypto_generichash_blake2b_init"];var _crypto_aead_chacha20poly1305_ietf_decrypt=Module["_crypto_aead_chacha20poly1305_ietf_decrypt"]=asm["_crypto_aead_chacha20poly1305_ietf_decrypt"];var _crypto_stream_chacha20_ietf_xor=Module["_crypto_stream_chacha20_ietf_xor"]=asm["_crypto_stream_chacha20_ietf_xor"];var _crypto_pwhash_primitive=Module["_crypto_pwhash_primitive"]=asm["_crypto_pwhash_primitive"];var _crypto_scalarmult=Module["_crypto_scalarmult"]=asm["_crypto_scalarmult"];var _crypto_onetimeauth_keybytes=Module["_crypto_onetimeauth_keybytes"]=asm["_crypto_onetimeauth_keybytes"];var _crypto_pwhash_argon2i=Module["_crypto_pwhash_argon2i"]=asm["_crypto_pwhash_argon2i"];var _crypto_auth_hmacsha512256_verify=Module["_crypto_auth_hmacsha512256_verify"]=asm["_crypto_auth_hmacsha512256_verify"];var _crypto_auth_hmacsha256_final=Module["_crypto_auth_hmacsha256_final"]=asm["_crypto_auth_hmacsha256_final"];var _crypto_box_secretkeybytes=Module["_crypto_box_secretkeybytes"]=asm["_crypto_box_secretkeybytes"];var _crypto_verify_16=Module["_crypto_verify_16"]=asm["_crypto_verify_16"];var _crypto_aead_chacha20poly1305_ietf_npubbytes=Module["_crypto_aead_chacha20poly1305_ietf_npubbytes"]=asm["_crypto_aead_chacha20poly1305_ietf_npubbytes"];var _crypto_onetimeauth_update=Module["_crypto_onetimeauth_update"]=asm["_crypto_onetimeauth_update"];var _crypto_aead_chacha20poly1305_encrypt=Module["_crypto_aead_chacha20poly1305_encrypt"]=asm["_crypto_aead_chacha20poly1305_encrypt"];var _crypto_secretbox_zerobytes=Module["_crypto_secretbox_zerobytes"]=asm["_crypto_secretbox_zerobytes"];var _crypto_core_salsa20=Module["_crypto_core_salsa20"]=asm["_crypto_core_salsa20"];var _llvm_cttz_i32=Module["_llvm_cttz_i32"]=asm["_llvm_cttz_i32"];var _crypto_box_curve25519xsalsa20poly1305_beforenmbytes=Module["_crypto_box_curve25519xsalsa20poly1305_beforenmbytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_beforenmbytes"];var _crypto_pwhash_scryptsalsa208sha256_ll=Module["_crypto_pwhash_scryptsalsa208sha256_ll"]=asm["_crypto_pwhash_scryptsalsa208sha256_ll"];var _crypto_box_detached=Module["_crypto_box_detached"]=asm["_crypto_box_detached"];var _randombytes_buf=Module["_randombytes_buf"]=asm["_randombytes_buf"];var _crypto_box_open_detached_afternm=Module["_crypto_box_open_detached_afternm"]=asm["_crypto_box_open_detached_afternm"];var _crypto_sign_seedbytes=Module["_crypto_sign_seedbytes"]=asm["_crypto_sign_seedbytes"];var _crypto_pwhash_scryptsalsa208sha256_strbytes=Module["_crypto_pwhash_scryptsalsa208sha256_strbytes"]=asm["_crypto_pwhash_scryptsalsa208sha256_strbytes"];var _crypto_generichash_blake2b_saltbytes=Module["_crypto_generichash_blake2b_saltbytes"]=asm["_crypto_generichash_blake2b_saltbytes"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _crypto_box_open_detached=Module["_crypto_box_open_detached"]=asm["_crypto_box_open_detached"];var _crypto_scalarmult_bytes=Module["_crypto_scalarmult_bytes"]=asm["_crypto_scalarmult_bytes"];var _crypto_secretbox_xsalsa20poly1305=Module["_crypto_secretbox_xsalsa20poly1305"]=asm["_crypto_secretbox_xsalsa20poly1305"];var _crypto_auth_verify=Module["_crypto_auth_verify"]=asm["_crypto_auth_verify"];var _crypto_sign_ed25519_seed_keypair=Module["_crypto_sign_ed25519_seed_keypair"]=asm["_crypto_sign_ed25519_seed_keypair"];var _crypto_secretbox_xsalsa20poly1305_zerobytes=Module["_crypto_secretbox_xsalsa20poly1305_zerobytes"]=asm["_crypto_secretbox_xsalsa20poly1305_zerobytes"];var _crypto_onetimeauth_poly1305_update=Module["_crypto_onetimeauth_poly1305_update"]=asm["_crypto_onetimeauth_poly1305_update"];var _crypto_auth_hmacsha512256_init=Module["_crypto_auth_hmacsha512256_init"]=asm["_crypto_auth_hmacsha512256_init"];var _crypto_auth_hmacsha256=Module["_crypto_auth_hmacsha256"]=asm["_crypto_auth_hmacsha256"];var _crypto_pwhash_strbytes=Module["_crypto_pwhash_strbytes"]=asm["_crypto_pwhash_strbytes"];var _crypto_stream_xor=Module["_crypto_stream_xor"]=asm["_crypto_stream_xor"];var _crypto_stream_xsalsa20_xor_ic=Module["_crypto_stream_xsalsa20_xor_ic"]=asm["_crypto_stream_xsalsa20_xor_ic"];var _crypto_verify_64_bytes=Module["_crypto_verify_64_bytes"]=asm["_crypto_verify_64_bytes"];var _randombytes_stir=Module["_randombytes_stir"]=asm["_randombytes_stir"];var _crypto_secretbox_easy=Module["_crypto_secretbox_easy"]=asm["_crypto_secretbox_easy"];var _crypto_box_open_easy=Module["_crypto_box_open_easy"]=asm["_crypto_box_open_easy"];var _crypto_pwhash_argon2i_strprefix=Module["_crypto_pwhash_argon2i_strprefix"]=asm["_crypto_pwhash_argon2i_strprefix"];var _crypto_auth_hmacsha256_update=Module["_crypto_auth_hmacsha256_update"]=asm["_crypto_auth_hmacsha256_update"];var _crypto_pwhash_scryptsalsa208sha256_str=Module["_crypto_pwhash_scryptsalsa208sha256_str"]=asm["_crypto_pwhash_scryptsalsa208sha256_str"];var _memset=Module["_memset"]=asm["_memset"];var _crypto_stream_salsa20=Module["_crypto_stream_salsa20"]=asm["_crypto_stream_salsa20"];var _crypto_pwhash_argon2i_str=Module["_crypto_pwhash_argon2i_str"]=asm["_crypto_pwhash_argon2i_str"];var _crypto_hash=Module["_crypto_hash"]=asm["_crypto_hash"];var _crypto_pwhash_argon2i_memlimit_sensitive=Module["_crypto_pwhash_argon2i_memlimit_sensitive"]=asm["_crypto_pwhash_argon2i_memlimit_sensitive"];var _crypto_pwhash_argon2i_opslimit_sensitive=Module["_crypto_pwhash_argon2i_opslimit_sensitive"]=asm["_crypto_pwhash_argon2i_opslimit_sensitive"];var _crypto_box_sealbytes=Module["_crypto_box_sealbytes"]=asm["_crypto_box_sealbytes"];var _crypto_auth_hmacsha512_final=Module["_crypto_auth_hmacsha512_final"]=asm["_crypto_auth_hmacsha512_final"];var _crypto_auth_hmacsha512_statebytes=Module["_crypto_auth_hmacsha512_statebytes"]=asm["_crypto_auth_hmacsha512_statebytes"];var _crypto_secretbox_boxzerobytes=Module["_crypto_secretbox_boxzerobytes"]=asm["_crypto_secretbox_boxzerobytes"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _crypto_pwhash_alg_default=Module["_crypto_pwhash_alg_default"]=asm["_crypto_pwhash_alg_default"];var _crypto_pwhash_scryptsalsa208sha256_strprefix=Module["_crypto_pwhash_scryptsalsa208sha256_strprefix"]=asm["_crypto_pwhash_scryptsalsa208sha256_strprefix"];var _crypto_onetimeauth_primitive=Module["_crypto_onetimeauth_primitive"]=asm["_crypto_onetimeauth_primitive"];var _crypto_box_seedbytes=Module["_crypto_box_seedbytes"]=asm["_crypto_box_seedbytes"];var _crypto_stream_chacha20=Module["_crypto_stream_chacha20"]=asm["_crypto_stream_chacha20"];var _crypto_core_hsalsa20_constbytes=Module["_crypto_core_hsalsa20_constbytes"]=asm["_crypto_core_hsalsa20_constbytes"];var _crypto_generichash_bytes=Module["_crypto_generichash_bytes"]=asm["_crypto_generichash_bytes"];var _crypto_secretbox=Module["_crypto_secretbox"]=asm["_crypto_secretbox"];var _crypto_generichash_blake2b_statebytes=Module["_crypto_generichash_blake2b_statebytes"]=asm["_crypto_generichash_blake2b_statebytes"];var _crypto_box_open_afternm=Module["_crypto_box_open_afternm"]=asm["_crypto_box_open_afternm"];var _crypto_generichash_blake2b_bytes_min=Module["_crypto_generichash_blake2b_bytes_min"]=asm["_crypto_generichash_blake2b_bytes_min"];var _crypto_pwhash_opslimit_moderate=Module["_crypto_pwhash_opslimit_moderate"]=asm["_crypto_pwhash_opslimit_moderate"];var _crypto_secretbox_open=Module["_crypto_secretbox_open"]=asm["_crypto_secretbox_open"];var _crypto_auth_hmacsha512_bytes=Module["_crypto_auth_hmacsha512_bytes"]=asm["_crypto_auth_hmacsha512_bytes"];var _crypto_core_salsa20_inputbytes=Module["_crypto_core_salsa20_inputbytes"]=asm["_crypto_core_salsa20_inputbytes"];var _crypto_box_macbytes=Module["_crypto_box_macbytes"]=asm["_crypto_box_macbytes"];var _crypto_secretbox_macbytes=Module["_crypto_secretbox_macbytes"]=asm["_crypto_secretbox_macbytes"];var _crypto_shorthash_bytes=Module["_crypto_shorthash_bytes"]=asm["_crypto_shorthash_bytes"];var _crypto_box_publickeybytes=Module["_crypto_box_publickeybytes"]=asm["_crypto_box_publickeybytes"];var _crypto_generichash_keybytes=Module["_crypto_generichash_keybytes"]=asm["_crypto_generichash_keybytes"];var _crypto_generichash_primitive=Module["_crypto_generichash_primitive"]=asm["_crypto_generichash_primitive"];var _crypto_sign_secretkeybytes=Module["_crypto_sign_secretkeybytes"]=asm["_crypto_sign_secretkeybytes"];var _crypto_pwhash_argon2i_strbytes=Module["_crypto_pwhash_argon2i_strbytes"]=asm["_crypto_pwhash_argon2i_strbytes"];var ___muldsi3=Module["___muldsi3"]=asm["___muldsi3"];var _crypto_hash_sha512_statebytes=Module["_crypto_hash_sha512_statebytes"]=asm["_crypto_hash_sha512_statebytes"];var _crypto_scalarmult_scalarbytes=Module["_crypto_scalarmult_scalarbytes"]=asm["_crypto_scalarmult_scalarbytes"];var _crypto_verify_32=Module["_crypto_verify_32"]=asm["_crypto_verify_32"];var _crypto_auth_hmacsha256_bytes=Module["_crypto_auth_hmacsha256_bytes"]=asm["_crypto_auth_hmacsha256_bytes"];var _crypto_auth_hmacsha256_statebytes=Module["_crypto_auth_hmacsha256_statebytes"]=asm["_crypto_auth_hmacsha256_statebytes"];var _crypto_pwhash_argon2i_opslimit_interactive=Module["_crypto_pwhash_argon2i_opslimit_interactive"]=asm["_crypto_pwhash_argon2i_opslimit_interactive"];var _crypto_aead_chacha20poly1305_decrypt=Module["_crypto_aead_chacha20poly1305_decrypt"]=asm["_crypto_aead_chacha20poly1305_decrypt"];var _crypto_stream_salsa20_noncebytes=Module["_crypto_stream_salsa20_noncebytes"]=asm["_crypto_stream_salsa20_noncebytes"];var _crypto_shorthash_keybytes=Module["_crypto_shorthash_keybytes"]=asm["_crypto_shorthash_keybytes"];var _malloc=Module["_malloc"]=asm["_malloc"];var _crypto_stream_noncebytes=Module["_crypto_stream_noncebytes"]=asm["_crypto_stream_noncebytes"];var _crypto_generichash_keybytes_max=Module["_crypto_generichash_keybytes_max"]=asm["_crypto_generichash_keybytes_max"];var _sodium_version_string=Module["_sodium_version_string"]=asm["_sodium_version_string"];var _memmove=Module["_memmove"]=asm["_memmove"];var _crypto_aead_chacha20poly1305_ietf_decrypt_detached=Module["_crypto_aead_chacha20poly1305_ietf_decrypt_detached"]=asm["_crypto_aead_chacha20poly1305_ietf_decrypt_detached"];var _crypto_hash_sha512_final=Module["_crypto_hash_sha512_final"]=asm["_crypto_hash_sha512_final"];var _crypto_pwhash_memlimit_interactive=Module["_crypto_pwhash_memlimit_interactive"]=asm["_crypto_pwhash_memlimit_interactive"];var _crypto_secretbox_xsalsa20poly1305_keybytes=Module["_crypto_secretbox_xsalsa20poly1305_keybytes"]=asm["_crypto_secretbox_xsalsa20poly1305_keybytes"];var _crypto_aead_chacha20poly1305_decrypt_detached=Module["_crypto_aead_chacha20poly1305_decrypt_detached"]=asm["_crypto_aead_chacha20poly1305_decrypt_detached"];var _crypto_sign=Module["_crypto_sign"]=asm["_crypto_sign"];var _crypto_box_curve25519xsalsa20poly1305_zerobytes=Module["_crypto_box_curve25519xsalsa20poly1305_zerobytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_zerobytes"];var _crypto_secretbox_noncebytes=Module["_crypto_secretbox_noncebytes"]=asm["_crypto_secretbox_noncebytes"];var _crypto_box_keypair=Module["_crypto_box_keypair"]=asm["_crypto_box_keypair"];var _crypto_secretbox_xsalsa20poly1305_macbytes=Module["_crypto_secretbox_xsalsa20poly1305_macbytes"]=asm["_crypto_secretbox_xsalsa20poly1305_macbytes"];var _crypto_box_curve25519xsalsa20poly1305_boxzerobytes=Module["_crypto_box_curve25519xsalsa20poly1305_boxzerobytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_boxzerobytes"];var _crypto_hash_sha256_bytes=Module["_crypto_hash_sha256_bytes"]=asm["_crypto_hash_sha256_bytes"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var _crypto_hash_bytes=Module["_crypto_hash_bytes"]=asm["_crypto_hash_bytes"];var _sodium_hex2bin=Module["_sodium_hex2bin"]=asm["_sodium_hex2bin"];var _sodium_init=Module["_sodium_init"]=asm["_sodium_init"];var _crypto_box_curve25519xsalsa20poly1305_afternm=Module["_crypto_box_curve25519xsalsa20poly1305_afternm"]=asm["_crypto_box_curve25519xsalsa20poly1305_afternm"];var _crypto_auth_hmacsha256_keybytes=Module["_crypto_auth_hmacsha256_keybytes"]=asm["_crypto_auth_hmacsha256_keybytes"];var _crypto_secretbox_keybytes=Module["_crypto_secretbox_keybytes"]=asm["_crypto_secretbox_keybytes"];var _crypto_box_easy=Module["_crypto_box_easy"]=asm["_crypto_box_easy"];var _randombytes=Module["_randombytes"]=asm["_randombytes"];var _crypto_sign_publickeybytes=Module["_crypto_sign_publickeybytes"]=asm["_crypto_sign_publickeybytes"];var _randombytes_close=Module["_randombytes_close"]=asm["_randombytes_close"];var _crypto_pwhash_argon2i_memlimit_moderate=Module["_crypto_pwhash_argon2i_memlimit_moderate"]=asm["_crypto_pwhash_argon2i_memlimit_moderate"];var _crypto_generichash_blake2b_bytes_max=Module["_crypto_generichash_blake2b_bytes_max"]=asm["_crypto_generichash_blake2b_bytes_max"];var _crypto_generichash_blake2b=Module["_crypto_generichash_blake2b"]=asm["_crypto_generichash_blake2b"];var _crypto_stream_chacha20_noncebytes=Module["_crypto_stream_chacha20_noncebytes"]=asm["_crypto_stream_chacha20_noncebytes"];var _crypto_hash_sha256_statebytes=Module["_crypto_hash_sha256_statebytes"]=asm["_crypto_hash_sha256_statebytes"];var _crypto_secretbox_open_detached=Module["_crypto_secretbox_open_detached"]=asm["_crypto_secretbox_open_detached"];var _crypto_sign_ed25519_sk_to_seed=Module["_crypto_sign_ed25519_sk_to_seed"]=asm["_crypto_sign_ed25519_sk_to_seed"];var _crypto_core_salsa20_outputbytes=Module["_crypto_core_salsa20_outputbytes"]=asm["_crypto_core_salsa20_outputbytes"];var _crypto_sign_ed25519_secretkeybytes=Module["_crypto_sign_ed25519_secretkeybytes"]=asm["_crypto_sign_ed25519_secretkeybytes"];var _crypto_pwhash_opslimit_sensitive=Module["_crypto_pwhash_opslimit_sensitive"]=asm["_crypto_pwhash_opslimit_sensitive"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var _crypto_generichash_blake2b_personalbytes=Module["_crypto_generichash_blake2b_personalbytes"]=asm["_crypto_generichash_blake2b_personalbytes"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _crypto_box_curve25519xsalsa20poly1305_open=Module["_crypto_box_curve25519xsalsa20poly1305_open"]=asm["_crypto_box_curve25519xsalsa20poly1305_open"];var _crypto_sign_verify_detached=Module["_crypto_sign_verify_detached"]=asm["_crypto_sign_verify_detached"];var _crypto_pwhash_argon2i_opslimit_moderate=Module["_crypto_pwhash_argon2i_opslimit_moderate"]=asm["_crypto_pwhash_argon2i_opslimit_moderate"];var _crypto_pwhash_alg_argon2i13=Module["_crypto_pwhash_alg_argon2i13"]=asm["_crypto_pwhash_alg_argon2i13"];var _randombytes_implementation_name=Module["_randombytes_implementation_name"]=asm["_randombytes_implementation_name"];var _crypto_box_curve25519xsalsa20poly1305=Module["_crypto_box_curve25519xsalsa20poly1305"]=asm["_crypto_box_curve25519xsalsa20poly1305"];var _crypto_stream=Module["_crypto_stream"]=asm["_crypto_stream"];var _crypto_sign_ed25519_detached=Module["_crypto_sign_ed25519_detached"]=asm["_crypto_sign_ed25519_detached"];var _crypto_generichash_init=Module["_crypto_generichash_init"]=asm["_crypto_generichash_init"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _crypto_sign_ed25519_sk_to_curve25519=Module["_crypto_sign_ed25519_sk_to_curve25519"]=asm["_crypto_sign_ed25519_sk_to_curve25519"];var _crypto_sign_bytes=Module["_crypto_sign_bytes"]=asm["_crypto_sign_bytes"];var _crypto_secretbox_primitive=Module["_crypto_secretbox_primitive"]=asm["_crypto_secretbox_primitive"];var _crypto_generichash_update=Module["_crypto_generichash_update"]=asm["_crypto_generichash_update"];var _crypto_generichash_blake2b_update=Module["_crypto_generichash_blake2b_update"]=asm["_crypto_generichash_blake2b_update"];var _crypto_verify_32_bytes=Module["_crypto_verify_32_bytes"]=asm["_crypto_verify_32_bytes"];var _crypto_aead_chacha20poly1305_ietf_abytes=Module["_crypto_aead_chacha20poly1305_ietf_abytes"]=asm["_crypto_aead_chacha20poly1305_ietf_abytes"];var _crypto_generichash_blake2b_keybytes=Module["_crypto_generichash_blake2b_keybytes"]=asm["_crypto_generichash_blake2b_keybytes"];var _crypto_generichash_bytes_min=Module["_crypto_generichash_bytes_min"]=asm["_crypto_generichash_bytes_min"];var _crypto_box_curve25519xsalsa20poly1305_secretkeybytes=Module["_crypto_box_curve25519xsalsa20poly1305_secretkeybytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_secretkeybytes"];var _crypto_stream_xsalsa20_xor=Module["_crypto_stream_xsalsa20_xor"]=asm["_crypto_stream_xsalsa20_xor"];var _crypto_sign_detached=Module["_crypto_sign_detached"]=asm["_crypto_sign_detached"];var _crypto_hash_sha512=Module["_crypto_hash_sha512"]=asm["_crypto_hash_sha512"];var _crypto_generichash_bytes_max=Module["_crypto_generichash_bytes_max"]=asm["_crypto_generichash_bytes_max"];var _crypto_box_easy_afternm=Module["_crypto_box_easy_afternm"]=asm["_crypto_box_easy_afternm"];var _crypto_stream_chacha20_xor_ic=Module["_crypto_stream_chacha20_xor_ic"]=asm["_crypto_stream_chacha20_xor_ic"];var _crypto_sign_ed25519_verify_detached=Module["_crypto_sign_ed25519_verify_detached"]=asm["_crypto_sign_ed25519_verify_detached"];var _crypto_sign_ed25519_bytes=Module["_crypto_sign_ed25519_bytes"]=asm["_crypto_sign_ed25519_bytes"];var _crypto_stream_xsalsa20_keybytes=Module["_crypto_stream_xsalsa20_keybytes"]=asm["_crypto_stream_xsalsa20_keybytes"];var _crypto_hash_sha256=Module["_crypto_hash_sha256"]=asm["_crypto_hash_sha256"];var _crypto_sign_ed25519_seedbytes=Module["_crypto_sign_ed25519_seedbytes"]=asm["_crypto_sign_ed25519_seedbytes"];var _sodium_library_version_minor=Module["_sodium_library_version_minor"]=asm["_sodium_library_version_minor"];var _crypto_core_hsalsa20_inputbytes=Module["_crypto_core_hsalsa20_inputbytes"]=asm["_crypto_core_hsalsa20_inputbytes"];var _crypto_onetimeauth_final=Module["_crypto_onetimeauth_final"]=asm["_crypto_onetimeauth_final"];var _crypto_secretbox_open_easy=Module["_crypto_secretbox_open_easy"]=asm["_crypto_secretbox_open_easy"];var _crypto_generichash_final=Module["_crypto_generichash_final"]=asm["_crypto_generichash_final"];var _crypto_generichash_blake2b_salt_personal=Module["_crypto_generichash_blake2b_salt_personal"]=asm["_crypto_generichash_blake2b_salt_personal"];var _crypto_pwhash_argon2i_alg_argon2i13=Module["_crypto_pwhash_argon2i_alg_argon2i13"]=asm["_crypto_pwhash_argon2i_alg_argon2i13"];var _crypto_shorthash_siphash24_bytes=Module["_crypto_shorthash_siphash24_bytes"]=asm["_crypto_shorthash_siphash24_bytes"];var _crypto_auth_hmacsha512256_statebytes=Module["_crypto_auth_hmacsha512256_statebytes"]=asm["_crypto_auth_hmacsha512256_statebytes"];var _crypto_sign_seed_keypair=Module["_crypto_sign_seed_keypair"]=asm["_crypto_sign_seed_keypair"];var _crypto_secretbox_xsalsa20poly1305_noncebytes=Module["_crypto_secretbox_xsalsa20poly1305_noncebytes"]=asm["_crypto_secretbox_xsalsa20poly1305_noncebytes"];var _crypto_pwhash_scryptsalsa208sha256_opslimit_interactive=Module["_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive"]=asm["_crypto_pwhash_scryptsalsa208sha256_opslimit_interactive"];var _crypto_box_curve25519xsalsa20poly1305_beforenm=Module["_crypto_box_curve25519xsalsa20poly1305_beforenm"]=asm["_crypto_box_curve25519xsalsa20poly1305_beforenm"];var _crypto_pwhash_argon2i_memlimit_interactive=Module["_crypto_pwhash_argon2i_memlimit_interactive"]=asm["_crypto_pwhash_argon2i_memlimit_interactive"];var _crypto_hash_sha256_final=Module["_crypto_hash_sha256_final"]=asm["_crypto_hash_sha256_final"];var _crypto_stream_chacha20_xor=Module["_crypto_stream_chacha20_xor"]=asm["_crypto_stream_chacha20_xor"];var _crypto_stream_keybytes=Module["_crypto_stream_keybytes"]=asm["_crypto_stream_keybytes"];var _crypto_box_curve25519xsalsa20poly1305_publickeybytes=Module["_crypto_box_curve25519xsalsa20poly1305_publickeybytes"]=asm["_crypto_box_curve25519xsalsa20poly1305_publickeybytes"];var _crypto_onetimeauth_init=Module["_crypto_onetimeauth_init"]=asm["_crypto_onetimeauth_init"];var _crypto_core_hsalsa20=Module["_crypto_core_hsalsa20"]=asm["_crypto_core_hsalsa20"];var _crypto_pwhash_memlimit_moderate=Module["_crypto_pwhash_memlimit_moderate"]=asm["_crypto_pwhash_memlimit_moderate"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.establishStackSpace=asm["establishStackSpace"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i<argc-1;i=i+1){argv.push(allocate(intArrayFromString(args[i]),"i8",ALLOC_NORMAL));pad()}argv.push(0);argv=allocate(argv,"i32",ALLOC_NORMAL);try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{if(e&&typeof e==="object"&&e.stack)Module.printErr("exception thrown: "+[e,e.stack]);throw e}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(preloadStartTime===null)preloadStartTime=Date.now();if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run()
-
-
-
-
-var nacl = (function () {
-    'use strict';
-    var exports = {};
-
-    //---------------------------------------------------------------------------
-    // Horrifying UTF-8 and hex codecs
-
-    function encode_utf8(s) {
-	return encode_latin1(unescape(encodeURIComponent(s)));
-    }
-
-    function encode_latin1(s) {
-	var result = new Uint8Array(s.length);
-	for (var i = 0; i < s.length; i++) {
-	    var c = s.charCodeAt(i);
-	    if ((c & 0xff) !== c) throw {message: "Cannot encode string in Latin1", str: s};
-	    result[i] = (c & 0xff);
-	}
-	return result;
-    }
-
-    function decode_utf8(bs) {
-	return decodeURIComponent(escape(decode_latin1(bs)));
-    }
-
-    function decode_latin1(bs) {
-	var encoded = [];
-	for (var i = 0; i < bs.length; i++) {
-	    encoded.push(String.fromCharCode(bs[i]));
-	}
-	return encoded.join('');
-    }
-
-    function to_hex(bs) {
-	var encoded = [];
-	for (var i = 0; i < bs.length; i++) {
-	    encoded.push("0123456789abcdef"[(bs[i] >> 4) & 15]);
-	    encoded.push("0123456789abcdef"[bs[i] & 15]);
-	}
-	return encoded.join('');
-    }
-
-    function from_hex(s) {
-        var result = new Uint8Array(s.length / 2);
-        for (var i = 0; i < s.length / 2; i++) {
-            result[i] = parseInt(s.substr(2*i,2),16);
-        }
-        return result;
-    }
-
-    //---------------------------------------------------------------------------
-    // Allocation
-
-    function MALLOC(nbytes) {
-	var result = nacl_raw._malloc(nbytes);
-	if (result === 0) {
-	    throw {message: "malloc() failed", nbytes: nbytes};
-	}
-	return result;
-    }
-
-    function FREE(pointer) {
-	nacl_raw._free(pointer);
-    }
-
-    //---------------------------------------------------------------------------
-
-    function injectBytes(bs, leftPadding) {
-	var p = leftPadding || 0;
-	var address = MALLOC(bs.length + p);
-	nacl_raw.HEAPU8.set(bs, address + p);
-	for (var i = address; i < address + p; i++) {
-	    nacl_raw.HEAPU8[i] = 0;
-	}
-	return address;
-    }
-
-    function check_injectBytes(function_name, what, thing, expected_length, leftPadding) {
-	check_length(function_name, what, thing, expected_length);
-	return injectBytes(thing, leftPadding);
-    }
-
-    function extractBytes(address, length) {
-	var result = new Uint8Array(length);
-	result.set(nacl_raw.HEAPU8.subarray(address, address + length));
-	return result;
-    }
-
-    //---------------------------------------------------------------------------
-
-    function check(function_name, result) {
-	if (result !== 0) {
-	    throw {message: "nacl_raw." + function_name + " signalled an error"};
-	}
-    }
-
-    function check_length(function_name, what, thing, expected_length) {
-	if (thing.length !== expected_length) {
-	    throw {message: "nacl." + function_name + " expected " +
-	           expected_length + "-byte " + what + " but got length " + thing.length};
-	}
-    }
-
-    function Target(length) {
-	this.length = length;
-	this.address = MALLOC(length);
-    }
-
-    Target.prototype.extractBytes = function (offset) {
-	var result = extractBytes(this.address + (offset || 0), this.length - (offset || 0));
-	FREE(this.address);
-	this.address = null;
-	return result;
-    };
-
-    function free_all(addresses) {
-	for (var i = 0; i < addresses.length; i++) {
-	    FREE(addresses[i]);
-	}
-    }
-
-    //---------------------------------------------------------------------------
-    // Randomness
-
-    function random_bytes(count) {
-      var bs = new Target(count);
-      nacl_raw._randombytes_buf(bs.address, count);
-      return bs.extractBytes();
-    }
-
-    nacl_raw._randombytes_stir();
-
-    //---------------------------------------------------------------------------
-    // Boxing
-
-    function crypto_box_keypair() {
-      var pk = new Target(nacl_raw._crypto_box_publickeybytes());
-      var sk = new Target(nacl_raw._crypto_box_secretkeybytes());
-      check("_crypto_box_keypair", nacl_raw._crypto_box_keypair(pk.address, sk.address));
-      return {boxPk: pk.extractBytes(), boxSk: sk.extractBytes()};
-    }
-
-    function crypto_box_random_nonce() {
-      return random_bytes(nacl_raw._crypto_box_noncebytes());
-    }
-
-    function crypto_box(msg, nonce, pk, sk) {
-      var m = injectBytes(msg, nacl_raw._crypto_box_zerobytes());
-      var na = check_injectBytes("crypto_box", "nonce", nonce, nacl_raw._crypto_box_noncebytes());
-      var pka = check_injectBytes("crypto_box", "pk", pk, nacl_raw._crypto_box_publickeybytes());
-      var ska = check_injectBytes("crypto_box", "sk", sk, nacl_raw._crypto_box_secretkeybytes());
-      var c = new Target(msg.length + nacl_raw._crypto_box_zerobytes());
-      check("_crypto_box", nacl_raw._crypto_box(c.address, m, c.length, 0, na, pka, ska));
-      free_all([m, na, pka, ska]);
-      return c.extractBytes(nacl_raw._crypto_box_boxzerobytes());
-    }
-
-    function crypto_box_open(ciphertext, nonce, pk, sk) {
-      var c = injectBytes(ciphertext, nacl_raw._crypto_box_boxzerobytes());
-      var na = check_injectBytes("crypto_box_open",
-                                 "nonce", nonce, nacl_raw._crypto_box_noncebytes());
-      var pka = check_injectBytes("crypto_box_open",
-                                  "pk", pk, nacl_raw._crypto_box_publickeybytes());
-      var ska = check_injectBytes("crypto_box_open",
-                                  "sk", sk, nacl_raw._crypto_box_secretkeybytes());
-      var m = new Target(ciphertext.length + nacl_raw._crypto_box_boxzerobytes());
-      check("_crypto_box_open", nacl_raw._crypto_box_open(m.address, c, m.length, 0, na, pka, ska));
-      free_all([c, na, pka, ska]);
-      return m.extractBytes(nacl_raw._crypto_box_zerobytes());
-    }
-
-    function crypto_box_precompute(pk, sk) {
-      var pka = check_injectBytes("crypto_box_precompute",
-				  "pk", pk, nacl_raw._crypto_box_publickeybytes());
-      var ska = check_injectBytes("crypto_box_precompute",
-				  "sk", sk, nacl_raw._crypto_box_secretkeybytes());
-      var k = new Target(nacl_raw._crypto_box_beforenmbytes());
-      check("_crypto_box_beforenm",
-	    nacl_raw._crypto_box_beforenm(k.address, pka, ska));
-      free_all([pka, ska]);
-      return {boxK: k.extractBytes()};
-    }
-
-    function crypto_box_precomputed(msg, nonce, state) {
-      var m = injectBytes(msg, nacl_raw._crypto_box_zerobytes());
-      var na = check_injectBytes("crypto_box_precomputed",
-				 "nonce", nonce, nacl_raw._crypto_box_noncebytes());
-      var ka = check_injectBytes("crypto_box_precomputed",
-				 "boxK", state.boxK, nacl_raw._crypto_box_beforenmbytes());
-      var c = new Target(msg.length + nacl_raw._crypto_box_zerobytes());
-      check("_crypto_box_afternm",
-	    nacl_raw._crypto_box_afternm(c.address, m, c.length, 0, na, ka));
-      free_all([m, na, ka]);
-      return c.extractBytes(nacl_raw._crypto_box_boxzerobytes());
-    }
-
-    function crypto_box_open_precomputed(ciphertext, nonce, state) {
-      var c = injectBytes(ciphertext, nacl_raw._crypto_box_boxzerobytes());
-      var na = check_injectBytes("crypto_box_open_precomputed",
-				 "nonce", nonce, nacl_raw._crypto_box_noncebytes());
-      var ka = check_injectBytes("crypto_box_open_precomputed",
-				 "boxK", state.boxK, nacl_raw._crypto_box_beforenmbytes());
-      var m = new Target(ciphertext.length + nacl_raw._crypto_box_boxzerobytes());
-      check("_crypto_box_open_afternm",
-	    nacl_raw._crypto_box_open_afternm(m.address, c, m.length, 0, na, ka));
-      free_all([c, na, ka]);
-      return m.extractBytes(nacl_raw._crypto_box_zerobytes());
-    }
-
-    //---------------------------------------------------------------------------
-    // Hashing
-
-    function crypto_hash(bs) {
-      var address = injectBytes(bs);
-      var hash = new Target(nacl_raw._crypto_hash_bytes());
-      check("_crypto_hash", nacl_raw._crypto_hash(hash.address, address, bs.length, 0));
-      FREE(address);
-      return hash.extractBytes();
-    }
-
-    function crypto_hash_sha256(bs) {
-      var address = injectBytes(bs);
-      var hash = new Target(nacl_raw._crypto_hash_sha256_bytes());
-      check("_crypto_hash_sha256",
-	    nacl_raw._crypto_hash_sha256(hash.address, address, bs.length, 0));
-      FREE(address);
-      return hash.extractBytes();
-    }
-
-    function crypto_hash_string(s) {
-      return crypto_hash(encode_utf8(s));
-    }
-
-    //---------------------------------------------------------------------------
-    // Symmetric-key encryption
-
-    function crypto_stream_random_nonce() {
-      return random_bytes(nacl_raw._crypto_stream_noncebytes());
-    }
-
-    function crypto_stream(len, nonce, key) {
-      var na = check_injectBytes("crypto_stream",
-				 "nonce", nonce, nacl_raw._crypto_stream_noncebytes());
-      var ka = check_injectBytes("crypto_stream",
-				 "key", key, nacl_raw._crypto_stream_keybytes());
-      var out = new Target(len);
-      check("_crypto_stream", nacl_raw._crypto_stream(out.address, len, 0, na, ka));
-      free_all([na, ka]);
-      return out.extractBytes();
-    }
-
-    function crypto_stream_xor(msg, nonce, key) {
-      var na = check_injectBytes("crypto_stream_xor",
-				 "nonce", nonce, nacl_raw._crypto_stream_noncebytes());
-      var ka = check_injectBytes("crypto_stream_xor",
-				 "key", key, nacl_raw._crypto_stream_keybytes());
-      var ma = injectBytes(msg);
-      var out = new Target(msg.length);
-      check("_crypto_stream_xor",
-	    nacl_raw._crypto_stream_xor(out.address, ma, msg.length, 0, na, ka));
-      free_all([na, ka, ma]);
-      return out.extractBytes();
-    }
-
-    //---------------------------------------------------------------------------
-    // One-time authentication
-
-    function crypto_onetimeauth(msg, key) {
-      var ka = check_injectBytes("crypto_onetimeauth",
-				 "key", key, nacl_raw._crypto_onetimeauth_keybytes());
-      var ma = injectBytes(msg);
-      var authenticator = new Target(nacl_raw._crypto_onetimeauth_bytes());
-      check("_crypto_onetimeauth",
-	    nacl_raw._crypto_onetimeauth(authenticator.address, ma, msg.length, 0, ka));
-      free_all([ka, ma]);
-      return authenticator.extractBytes();
-    }
-
-    function crypto_onetimeauth_verify(authenticator, msg, key) {
-      if (authenticator.length != nacl_raw._crypto_onetimeauth_bytes()) return false;
-      var ka = check_injectBytes("crypto_onetimeauth_verify",
-				 "key", key, nacl_raw._crypto_onetimeauth_keybytes());
-      var ma = injectBytes(msg);
-      var aa = injectBytes(authenticator);
-      var result = nacl_raw._crypto_onetimeauth_verify(aa, ma, msg.length, 0, ka);
-      free_all([ka, ma, aa]);
-      return (result == 0);
-    }
-
-    //---------------------------------------------------------------------------
-    // Authentication
-
-    function crypto_auth(msg, key) {
-      var ka = check_injectBytes("crypto_auth", "key", key, nacl_raw._crypto_auth_keybytes());
-      var ma = injectBytes(msg);
-      var authenticator = new Target(nacl_raw._crypto_auth_bytes());
-      check("_crypto_auth", nacl_raw._crypto_auth(authenticator.address, ma, msg.length, 0, ka));
-      free_all([ka, ma]);
-      return authenticator.extractBytes();
-    }
-
-    function crypto_auth_verify(authenticator, msg, key) {
-      if (authenticator.length != nacl_raw._crypto_auth_bytes()) return false;
-      var ka = check_injectBytes("crypto_auth_verify",
-				 "key", key, nacl_raw._crypto_auth_keybytes());
-      var ma = injectBytes(msg);
-      var aa = injectBytes(authenticator);
-      var result = nacl_raw._crypto_auth_verify(aa, ma, msg.length, 0, ka);
-      free_all([ka, ma, aa]);
-      return (result == 0);
-    }
-
-    //---------------------------------------------------------------------------
-    // Authenticated symmetric-key encryption
-
-    function crypto_secretbox_random_nonce() {
-      return random_bytes(nacl_raw._crypto_secretbox_noncebytes());
-    }
-
-    function crypto_secretbox(msg, nonce, key) {
-      var m = injectBytes(msg, nacl_raw._crypto_secretbox_zerobytes());
-      var na = check_injectBytes("crypto_secretbox",
-				 "nonce", nonce, nacl_raw._crypto_secretbox_noncebytes());
-      var ka = check_injectBytes("crypto_secretbox",
-				 "key", key, nacl_raw._crypto_secretbox_keybytes());
-      var c = new Target(msg.length + nacl_raw._crypto_secretbox_zerobytes());
-      check("_crypto_secretbox", nacl_raw._crypto_secretbox(c.address, m, c.length, 0, na, ka));
-      free_all([m, na, ka]);
-      return c.extractBytes(nacl_raw._crypto_secretbox_boxzerobytes());
-    }
-
-    function crypto_secretbox_open(ciphertext, nonce, key) {
-      var c = injectBytes(ciphertext, nacl_raw._crypto_secretbox_boxzerobytes());
-      var na = check_injectBytes("crypto_secretbox_open",
-				 "nonce", nonce, nacl_raw._crypto_secretbox_noncebytes());
-      var ka = check_injectBytes("crypto_secretbox_open",
-				 "key", key, nacl_raw._crypto_secretbox_keybytes());
-      var m = new Target(ciphertext.length + nacl_raw._crypto_secretbox_boxzerobytes());
-      check("_crypto_secretbox_open",
-	    nacl_raw._crypto_secretbox_open(m.address, c, m.length, 0, na, ka));
-      free_all([c, na, ka]);
-      return m.extractBytes(nacl_raw._crypto_secretbox_zerobytes());
-    }
-
-    //---------------------------------------------------------------------------
-    // Signing
-
-    function crypto_sign_keypair() {
-      var pk = new Target(nacl_raw._crypto_sign_publickeybytes());
-      var sk = new Target(nacl_raw._crypto_sign_secretkeybytes());
-      check("_crypto_sign_keypair", nacl_raw._crypto_sign_keypair(pk.address, sk.address));
-      return {signPk: pk.extractBytes(), signSk: sk.extractBytes()};
-    }
-
-    function crypto_sign(msg, sk) {
-      var ma = injectBytes(msg);
-      var ska = check_injectBytes("crypto_sign", "sk", sk, nacl_raw._crypto_sign_secretkeybytes());
-      var sm = new Target(msg.length + nacl_raw._crypto_sign_bytes());
-      var smlen = new Target(8);
-      check("_crypto_sign",
-	    nacl_raw._crypto_sign(sm.address, smlen.address, ma, msg.length, 0, ska));
-      free_all([ma, ska]);
-      sm.length = nacl_raw.HEAPU32[smlen.address >> 2];
-      FREE(smlen.address);
-      return sm.extractBytes();
-    }
-
-    function crypto_sign_detached(msg, sk) {
-      // WARNING: Experimental. Works for ed25519 but not necessarily other implementations.
-      var signed_msg = crypto_sign(msg, sk);
-      return signed_msg.subarray(0, nacl_raw._crypto_sign_bytes());
-    }
-
-    function crypto_sign_open(sm, pk) {
-      var sma = injectBytes(sm);
-      var pka = check_injectBytes("crypto_sign_open",
-				  "pk", pk, nacl_raw._crypto_sign_publickeybytes());
-      var m = new Target(sm.length);
-      var mlen = new Target(8);
-      if (nacl_raw._crypto_sign_open(m.address, mlen.address, sma, sm.length, 0, pka) === 0) {
-	free_all([sma, pka]);
-	m.length = nacl_raw.HEAPU32[mlen.address >> 2];
-	FREE(mlen.address);
-	return m.extractBytes();
-      } else {
-	free_all([sma, pka, m.address, mlen.address]);
-	return null;
-      }
-    }
-
-    function crypto_sign_verify_detached(detached_signature, msg, pk) {
-      // WARNING: Experimental. Works for ed25519 but not necessarily other implementations.
-      var signed_msg = new Uint8Array(detached_signature.length + msg.length);
-      signed_msg.set(detached_signature, 0);
-      signed_msg.set(msg, detached_signature.length);
-      return crypto_sign_open(signed_msg, pk) !== null;
-    }
-
-    //---------------------------------------------------------------------------
-    // Keys
-
-    function crypto_sign_seed_keypair(bs) {
-      var seeda = check_injectBytes("crypto_sign_seed_keypair",
-				    "seed", bs, nacl_raw._crypto_sign_secretkeybytes() / 2);
-      var pk = new Target(nacl_raw._crypto_sign_publickeybytes());
-      var sk = new Target(nacl_raw._crypto_sign_secretkeybytes());
-      check("_crypto_sign_seed_keypair",
-	    nacl_raw._crypto_sign_seed_keypair(pk.address, sk.address, seeda));
-      FREE(seeda);
-      return {signPk: pk.extractBytes(), signSk: sk.extractBytes()};
-    }
-
-    function crypto_box_seed_keypair(bs) {
-      var hash = new Uint8Array(crypto_hash(bs));
-      return crypto_box_keypair_from_raw_sk(hash.subarray(0,
-							  nacl_raw._crypto_box_secretkeybytes()));
-    }
-
-    function crypto_box_keypair_from_raw_sk(sk) {
-      return {boxPk: crypto_scalarmult_base(sk), boxSk: sk};
-    }
-
-  function crypto_box_keypair_from_sign_sk(sk) {
-    var ska = check_injectBytes("crypto_box_keypair_from_sign_sk", "sk", sk,
-      nacl_raw._crypto_sign_secretkeybytes());
-    var skb = new Target(nacl_raw._crypto_box_secretkeybytes());
-    check("_crypto_sign_ed25519_sk_to_curve25519",
-      nacl_raw._crypto_sign_ed25519_sk_to_curve25519(skb.address, ska));
-    FREE(ska);
-    return crypto_box_keypair_from_raw_sk(skb.extractBytes());
-  }
-
-  function crypto_box_sk_from_sign_sk(sk) {
-      var ska = check_injectBytes("crypto_box_keypair_from_sign_sk", "sk", sk,
-        nacl_raw._crypto_sign_secretkeybytes());
-      var skb = new Target(nacl_raw._crypto_box_secretkeybytes());
-      check("_crypto_sign_ed25519_sk_to_curve25519",
-        nacl_raw._crypto_sign_ed25519_sk_to_curve25519(skb.address, ska));
-      FREE(ska);
-      return skb.extractBytes();
-    }
-
-  function crypto_box_pk_from_sign_pk(pk) {
-    var pka = check_injectBytes("crypto_box_pk_from_sign_pk", "pk", pk,
-      nacl_raw._crypto_sign_publickeybytes());
-    var pkb = new Target(nacl_raw._crypto_box_publickeybytes());
-    check("_crypto_sign_ed25519_pk_to_curve25519",
-      nacl_raw._crypto_sign_ed25519_pk_to_curve25519(pkb.address, pka));
-    FREE(pka);
-    return pkb.extractBytes();
-  }
-
-    //---------------------------------------------------------------------------
-    // Scalarmult
-
-    function crypto_scalarmult(n,p) {
-      var na = check_injectBytes("crypto_scalarmult", "n", n,
-				 nacl_raw._crypto_scalarmult_curve25519_scalarbytes());
-      var pa = check_injectBytes("crypto_scalarmult", "p", p,
-				 nacl_raw._crypto_scalarmult_curve25519_bytes());
-      var q = new Target(nacl_raw._crypto_scalarmult_curve25519_bytes());
-      check("_crypto_scalarmult_curve25519",
-            nacl_raw._crypto_scalarmult_curve25519(q.address, na, pa));
-      FREE(na);
-      FREE(pa);
-      return q.extractBytes();
-    }
-
-    function crypto_scalarmult_base(n) {
-      var na = check_injectBytes("crypto_scalarmult_base", "n", n,
-				 nacl_raw._crypto_scalarmult_curve25519_scalarbytes());
-      var q = new Target(nacl_raw._crypto_scalarmult_curve25519_bytes());
-      check("_crypto_scalarmult_curve25519_base",
-            nacl_raw._crypto_scalarmult_curve25519_base(q.address, na));
-      FREE(na);
-      return q.extractBytes();
-    }
-
-    //---------------------------------------------------------------------------
-
-    exports.crypto_auth_BYTES = nacl_raw._crypto_auth_bytes();
-    exports.crypto_auth_KEYBYTES = nacl_raw._crypto_auth_keybytes();
-    exports.crypto_box_BEFORENMBYTES = nacl_raw._crypto_box_beforenmbytes();
-    exports.crypto_box_BOXZEROBYTES = nacl_raw._crypto_box_boxzerobytes();
-    exports.crypto_box_NONCEBYTES = nacl_raw._crypto_box_noncebytes();
-    exports.crypto_box_PUBLICKEYBYTES = nacl_raw._crypto_box_publickeybytes();
-    exports.crypto_box_SECRETKEYBYTES = nacl_raw._crypto_box_secretkeybytes();
-    exports.crypto_box_ZEROBYTES = nacl_raw._crypto_box_zerobytes();
-    exports.crypto_hash_BYTES = nacl_raw._crypto_hash_bytes();
-    exports.crypto_hash_sha256_BYTES = nacl_raw._crypto_hash_sha256_bytes();
-    // exports.crypto_hashblocks_BLOCKBYTES = nacl_raw._crypto_hashblocks_blockbytes();
-    // exports.crypto_hashblocks_STATEBYTES = nacl_raw._crypto_hashblocks_statebytes();
-    exports.crypto_onetimeauth_BYTES = nacl_raw._crypto_onetimeauth_bytes();
-    exports.crypto_onetimeauth_KEYBYTES = nacl_raw._crypto_onetimeauth_keybytes();
-    exports.crypto_secretbox_BOXZEROBYTES = nacl_raw._crypto_secretbox_boxzerobytes();
-    exports.crypto_secretbox_KEYBYTES = nacl_raw._crypto_secretbox_keybytes();
-    exports.crypto_secretbox_NONCEBYTES = nacl_raw._crypto_secretbox_noncebytes();
-    exports.crypto_secretbox_ZEROBYTES = nacl_raw._crypto_secretbox_zerobytes();
-    exports.crypto_sign_BYTES = nacl_raw._crypto_sign_bytes();
-    exports.crypto_sign_PUBLICKEYBYTES = nacl_raw._crypto_sign_publickeybytes();
-    exports.crypto_sign_SECRETKEYBYTES = nacl_raw._crypto_sign_secretkeybytes();
-    // exports.crypto_stream_BEFORENMBYTES = nacl_raw._crypto_stream_beforenmbytes();
-    exports.crypto_stream_KEYBYTES = nacl_raw._crypto_stream_keybytes();
-    exports.crypto_stream_NONCEBYTES = nacl_raw._crypto_stream_noncebytes();
-    exports.crypto_scalarmult_SCALARBYTES = nacl_raw._crypto_scalarmult_curve25519_scalarbytes();
-    exports.crypto_scalarmult_BYTES = nacl_raw._crypto_scalarmult_curve25519_bytes();
-
-    exports.encode_utf8 = encode_utf8;
-    exports.encode_latin1 = encode_latin1;
-    exports.decode_utf8 = decode_utf8;
-    exports.decode_latin1 = decode_latin1;
-    exports.to_hex = to_hex;
-    exports.from_hex = from_hex;
-
-    exports.random_bytes = random_bytes;
-
-    exports.crypto_box_keypair = crypto_box_keypair;
-    exports.crypto_box_random_nonce = crypto_box_random_nonce;
-    exports.crypto_box = crypto_box;
-    exports.crypto_box_open = crypto_box_open;
-    exports.crypto_box_precompute = crypto_box_precompute;
-    exports.crypto_box_precomputed = crypto_box_precomputed;
-    exports.crypto_box_open_precomputed = crypto_box_open_precomputed;
-
-    exports.crypto_stream_random_nonce = crypto_stream_random_nonce;
-    exports.crypto_stream = crypto_stream;
-    exports.crypto_stream_xor = crypto_stream_xor;
-
-    exports.crypto_onetimeauth = crypto_onetimeauth;
-    exports.crypto_onetimeauth_verify = crypto_onetimeauth_verify;
-
-    exports.crypto_auth = crypto_auth;
-    exports.crypto_auth_verify = crypto_auth_verify;
-
-    exports.crypto_secretbox_random_nonce = crypto_secretbox_random_nonce;
-    exports.crypto_secretbox = crypto_secretbox;
-    exports.crypto_secretbox_open = crypto_secretbox_open;
-
-    exports.crypto_sign_keypair = crypto_sign_keypair;
-    exports.crypto_sign = crypto_sign;
-    exports.crypto_sign_detached = crypto_sign_detached;
-    exports.crypto_sign_open = crypto_sign_open;
-    exports.crypto_sign_verify_detached = crypto_sign_verify_detached;
-
-    exports.crypto_hash = crypto_hash;
-    exports.crypto_hash_sha256 = crypto_hash_sha256;
-    exports.crypto_hash_string = crypto_hash_string;
-
-    exports.crypto_sign_seed_keypair = crypto_sign_seed_keypair;
-    exports.crypto_box_seed_keypair = crypto_box_seed_keypair;
-    exports.crypto_box_keypair_from_raw_sk = crypto_box_keypair_from_raw_sk;
-    exports.crypto_box_keypair_from_sign_sk = crypto_box_keypair_from_sign_sk;
-    exports.crypto_box_pk_from_sign_pk = crypto_box_pk_from_sign_pk;
-    exports.crypto_box_sk_from_sign_sk = crypto_box_sk_from_sign_sk;
-    // Backwards-compatibility:
-    exports.crypto_sign_keypair_from_seed = crypto_sign_seed_keypair;
-    exports.crypto_box_keypair_from_seed = crypto_box_seed_keypair;
-
-    exports.crypto_scalarmult = crypto_scalarmult;
-    exports.crypto_scalarmult_base = crypto_scalarmult_base;
-
-    return exports;
-})();
-      nacl.nacl_raw = nacl_raw;
-
-      if (on_ready_call_needed) {
-        on_ready(nacl);
-      }
-
-      return "nacl_factory API has changed -- see js-nacl README";
-    })((typeof window !== 'undefined') ? window : undefined_reference_value,
-       (typeof document !== 'undefined') ? document : undefined_reference_value);
-  }
-};
-
-// export common.js module to allow one js file for browser and node.js
-if (typeof module !== 'undefined' && module.exports) {
-    module.exports = nacl_factory;
-}
diff --git a/www/js/vendor/ng-cordova.min.js b/www/js/vendor/ng-cordova.min.js
deleted file mode 100644
index 4ae32822d7219ee0176b83737f144bc7e320d900..0000000000000000000000000000000000000000
--- a/www/js/vendor/ng-cordova.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * ngCordova
- * v0.1.26-alpha
- * Copyright 2015 Drifty Co. http://drifty.com/
- * See LICENSE in this repository for license information
- */
-!function(){angular.module("ngCordova",["ngCordova.plugins"]),angular.module("ngCordova.plugins.actionSheet",[]).factory("$cordovaActionSheet",["$q","$window",function(e,n){return{show:function(r){var o=e.defer();return n.plugins.actionsheet.show(r,function(e){o.resolve(e)}),o.promise},hide:function(){return n.plugins.actionsheet.hide()}}}]),angular.module("ngCordova.plugins.adMob",[]).factory("$cordovaAdMob",["$q","$window",function(e,n){return{createBannerView:function(r){var o=e.defer();return n.plugins.AdMob.createBannerView(r,function(){o.resolve()},function(){o.reject()}),o.promise},createInterstitialView:function(r){var o=e.defer();return n.plugins.AdMob.createInterstitialView(r,function(){o.resolve()},function(){o.reject()}),o.promise},requestAd:function(r){var o=e.defer();return n.plugins.AdMob.requestAd(r,function(){o.resolve()},function(){o.reject()}),o.promise},showAd:function(r){var o=e.defer();return n.plugins.AdMob.showAd(r,function(){o.resolve()},function(){o.reject()}),o.promise},requestInterstitialAd:function(r){var o=e.defer();return n.plugins.AdMob.requestInterstitialAd(r,function(){o.resolve()},function(){o.reject()}),o.promise}}}]),angular.module("ngCordova.plugins.appAvailability",[]).factory("$cordovaAppAvailability",["$q",function(e){return{check:function(n){var r=e.defer();return appAvailability.check(n,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.appRate",[]).provider("$cordovaAppRate",[function(){this.setPreferences=function(e){e&&angular.isObject(e)&&(AppRate.preferences.useLanguage=e.language||null,AppRate.preferences.displayAppName=e.appName||"",AppRate.preferences.promptAgainForEachNewVersion=e.promptForNewVersion||!0,AppRate.preferences.openStoreInApp=e.openStoreInApp||!1,AppRate.preferences.usesUntilPrompt=e.usesUntilPrompt||3,AppRate.preferences.useCustomRateDialog=e.useCustomRateDialog||!1,AppRate.preferences.storeAppURL.ios=e.iosURL||null,AppRate.preferences.storeAppURL.android=e.androidURL||null,AppRate.preferences.storeAppURL.blackberry=e.blackberryURL||null,AppRate.preferences.storeAppURL.windows8=e.windowsURL||null)},this.setCustomLocale=function(e){var n={title:"Rate %@",message:"If you enjoy using %@, would you mind taking a moment to rate it? It won’t take more than a minute. Thanks for your support!",cancelButtonLabel:"No, Thanks",laterButtonLabel:"Remind Me Later",rateButtonLabel:"Rate It Now"};n=angular.extend(n,e),AppRate.preferences.customLocale=n},this.$get=["$q",function(e){return{promptForRating:function(n){var r=e.defer(),o=AppRate.promptForRating(n);return r.resolve(o),r.promise},navigateToAppStore:function(){var n=e.defer(),r=AppRate.navigateToAppStore();return n.resolve(r),n.promise},onButtonClicked:function(e){AppRate.onButtonClicked=function(n){e.call(this,n)}},onRateDialogShow:function(e){AppRate.onRateDialogShow=e()}}}]}]),angular.module("ngCordova.plugins.appVersion",[]).factory("$cordovaAppVersion",["$q",function(e){return{getAppName:function(){var n=e.defer();return cordova.getAppVersion.getAppName(function(e){n.resolve(e)}),n.promise},getPackageName:function(){var n=e.defer();return cordova.getAppVersion.getPackageName(function(e){n.resolve(e)}),n.promise},getVersionNumber:function(){var n=e.defer();return cordova.getAppVersion.getVersionNumber(function(e){n.resolve(e)}),n.promise},getVersionCode:function(){var n=e.defer();return cordova.getAppVersion.getVersionCode(function(e){n.resolve(e)}),n.promise}}}]),angular.module("ngCordova.plugins.backgroundGeolocation",[]).factory("$cordovaBackgroundGeolocation",["$q","$window",function(e,n){return{init:function(){n.navigator.geolocation.getCurrentPosition(function(e){return e})},configure:function(r){this.init();var o=e.defer();return n.plugins.backgroundGeoLocation.configure(function(e){o.notify(e),n.plugins.backgroundGeoLocation.finish()},function(e){o.reject(e)},r),this.start(),o.promise},start:function(){var r=e.defer();return n.plugins.backgroundGeoLocation.start(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},stop:function(){var r=e.defer();return n.plugins.backgroundGeoLocation.stop(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.badge",[]).factory("$cordovaBadge",["$q",function(e){return{hasPermission:function(){var n=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?n.resolve(!0):n.reject("You do not have permission")}),n.promise},promptForPermission:function(){return cordova.plugins.notification.badge.promptForPermission()},set:function(n,r,o){var t=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?t.resolve(cordova.plugins.notification.badge.set(n,r,o)):t.reject("You do not have permission to set Badge")}),t.promise},get:function(){var n=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?cordova.plugins.notification.badge.get(function(e){n.resolve(e)}):n.reject("You do not have permission to get Badge")}),n.promise},clear:function(n,r){var o=e.defer();return cordova.plugins.notification.badge.hasPermission(function(e){e?o.resolve(cordova.plugins.notification.badge.clear(n,r)):o.reject("You do not have permission to clear Badge")}),o.promise},increase:function(n,r,o){var t=e.defer();return this.hasPermission().then(function(){t.resolve(cordova.plugins.notification.badge.increase(n,r,o))},function(){t.reject("You do not have permission to increase Badge")}),t.promise},decrease:function(n,r,o){var t=e.defer();return this.hasPermission().then(function(){t.resolve(cordova.plugins.notification.badge.decrease(n,r,o))},function(){t.reject("You do not have permission to decrease Badge")}),t.promise},configure:function(e){return cordova.plugins.notification.badge.configure(e)}}}]),angular.module("ngCordova.plugins.barcodeScanner",[]).factory("$cordovaBarcodeScanner",["$q",function(e){return{scan:function(n){var r=e.defer();return cordova.plugins.barcodeScanner.scan(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise},encode:function(n,r){var o=e.defer();return n=n||"TEXT_TYPE",cordova.plugins.barcodeScanner.encode(n,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.batteryStatus",[]).factory("$cordovaBatteryStatus",["$rootScope","$window","$timeout",function(e,n,r){var o=function(n){r(function(){e.$broadcast("$cordovaBatteryStatus:status",n)})},t=function(n){r(function(){e.$broadcast("$cordovaBatteryStatus:critical",n)})},i=function(n){r(function(){e.$broadcast("$cordovaBatteryStatus:low",n)})};return document.addEventListener("deviceready",function(){navigator.battery&&(n.addEventListener("batterystatus",o,!1),n.addEventListener("batterycritical",t,!1),n.addEventListener("batterylow",i,!1))},!1),!0}]).run(["$injector",function(e){e.get("$cordovaBatteryStatus")}]),angular.module("ngCordova.plugins.beacon",[]).factory("$cordovaBeacon",["$window","$rootScope","$timeout","$q",function(e,n,r,o){var t=null,i=null,a=null,c=null,u=null,s=null,l=null,f=null;return document.addEventListener("deviceready",function(){if(e.cordova&&e.cordova.plugins&&e.cordova.plugins.locationManager){var o=new e.cordova.plugins.locationManager.Delegate;o.didDetermineStateForRegion=function(e){r(function(){n.$broadcast("$cordovaBeacon:didDetermineStateForRegion",e)}),t&&t(e)},o.didStartMonitoringForRegion=function(e){r(function(){n.$broadcast("$cordovaBeacon:didStartMonitoringForRegion",e)}),i&&i(e)},o.didExitRegion=function(e){r(function(){n.$broadcast("$cordovaBeacon:didExitRegion",e)}),a&&a(e)},o.didEnterRegion=function(e){r(function(){n.$broadcast("$cordovaBeacon:didEnterRegion",e)}),c&&c(e)},o.didRangeBeaconsInRegion=function(e){r(function(){n.$broadcast("$cordovaBeacon:didRangeBeaconsInRegion",e)}),u&&u(e)},o.peripheralManagerDidStartAdvertising=function(e){r(function(){n.$broadcast("$cordovaBeacon:peripheralManagerDidStartAdvertising",e)}),s&&s(e)},o.peripheralManagerDidUpdateState=function(e){r(function(){n.$broadcast("$cordovaBeacon:peripheralManagerDidUpdateState",e)}),l&&l(e)},o.didChangeAuthorizationStatus=function(e){r(function(){n.$broadcast("$cordovaBeacon:didChangeAuthorizationStatus",e)}),f&&f(e)},e.cordova.plugins.locationManager.setDelegate(o)}},!1),{setCallbackDidDetermineStateForRegion:function(e){t=e},setCallbackDidStartMonitoringForRegion:function(e){i=e},setCallbackDidExitRegion:function(e){a=e},setCallbackDidEnterRegion:function(e){c=e},setCallbackDidRangeBeaconsInRegion:function(e){u=e},setCallbackPeripheralManagerDidStartAdvertising:function(e){s=e},setCallbackPeripheralManagerDidUpdateState:function(e){l=e},setCallbackDidChangeAuthorizationStatus:function(e){f=e},createBeaconRegion:function(n,r,o,t,i){return o=o||void 0,t=t||void 0,new e.cordova.plugins.locationManager.BeaconRegion(n,r,o,t,i)},isBluetoothEnabled:function(){return o.when(e.cordova.plugins.locationManager.isBluetoothEnabled())},enableBluetooth:function(){return o.when(e.cordova.plugins.locationManager.enableBluetooth())},disableBluetooth:function(){return o.when(e.cordova.plugins.locationManager.disableBluetooth())},startMonitoringForRegion:function(n){return o.when(e.cordova.plugins.locationManager.startMonitoringForRegion(n))},stopMonitoringForRegion:function(n){return o.when(e.cordova.plugins.locationManager.stopMonitoringForRegion(n))},requestStateForRegion:function(n){return o.when(e.cordova.plugins.locationManager.requestStateForRegion(n))},startRangingBeaconsInRegion:function(n){return o.when(e.cordova.plugins.locationManager.startRangingBeaconsInRegion(n))},stopRangingBeaconsInRegion:function(n){return o.when(e.cordova.plugins.locationManager.stopRangingBeaconsInRegion(n))},getAuthorizationStatus:function(){return o.when(e.cordova.plugins.locationManager.getAuthorizationStatus())},requestWhenInUseAuthorization:function(){return o.when(e.cordova.plugins.locationManager.requestWhenInUseAuthorization())},requestAlwaysAuthorization:function(){return o.when(e.cordova.plugins.locationManager.requestAlwaysAuthorization())},getMonitoredRegions:function(){return o.when(e.cordova.plugins.locationManager.getMonitoredRegions())},getRangedRegions:function(){return o.when(e.cordova.plugins.locationManager.getRangedRegions())},isRangingAvailable:function(){return o.when(e.cordova.plugins.locationManager.isRangingAvailable())},isMonitoringAvailableForClass:function(n){return o.when(e.cordova.plugins.locationManager.isMonitoringAvailableForClass(n))},startAdvertising:function(n,r){return o.when(e.cordova.plugins.locationManager.startAdvertising(n,r))},stopAdvertising:function(){return o.when(e.cordova.plugins.locationManager.stopAdvertising())},isAdvertisingAvailable:function(){return o.when(e.cordova.plugins.locationManager.isAdvertisingAvailable())},isAdvertising:function(){return o.when(e.cordova.plugins.locationManager.isAdvertising())},disableDebugLogs:function(){return o.when(e.cordova.plugins.locationManager.disableDebugLogs())},enableDebugNotifications:function(){return o.when(e.cordova.plugins.locationManager.enableDebugNotifications())},disableDebugNotifications:function(){return o.when(e.cordova.plugins.locationManager.disableDebugNotifications())},enableDebugLogs:function(){return o.when(e.cordova.plugins.locationManager.enableDebugLogs())},appendToDeviceLog:function(n){return o.when(e.cordova.plugins.locationManager.appendToDeviceLog(n))}}}]),angular.module("ngCordova.plugins.ble",[]).factory("$cordovaBLE",["$q","$timeout","$log",function(e,n,r){return{scan:function(r,o){var t=e.defer();return ble.startScan(r,function(e){t.notify(e)},function(e){t.reject(e)}),n(function(){ble.stopScan(function(){t.resolve()},function(e){t.reject(e)})},1e3*o),t.promise},startScan:function(e,n,r){return ble.startScan(e,n,r)},stopScan:function(){var n=e.defer();return ble.stopScan(function(){n.resolve()},function(e){n.reject(e)}),n.promise},connect:function(n){var r=e.defer();return ble.connect(n,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},disconnect:function(n){var r=e.defer();return ble.disconnect(n,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},read:function(n,r,o){var t=e.defer();return ble.read(n,r,o,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},write:function(n,r,o,t){var i=e.defer();return ble.write(n,r,o,t,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise},writeWithoutResponse:function(n,r,o,t){var i=e.defer();return ble.writeWithoutResponse(n,r,o,t,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise},writeCommand:function(e,n,o,t){return r.warning("writeCommand is deprecated, use writeWithoutResponse"),this.writeWithoutResponse(e,n,o,t)},startNotification:function(e,n,r,o,t){return ble.startNotification(e,n,r,o,t)},stopNotification:function(n,r,o){var t=e.defer();return ble.stopNotification(n,r,o,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},isConnected:function(n){var r=e.defer();return ble.isConnected(n,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},enable:function(){var n=e.defer();return ble.enable(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},isEnabled:function(){var n=e.defer();return ble.isEnabled(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.bluetoothSerial",[]).factory("$cordovaBluetoothSerial",["$q","$window",function(e,n){return{connect:function(r){var o=e.defer(),t=e.defer(),i=!1;return n.bluetoothSerial.connect(r,function(){i=!0,o.resolve(t)},function(e){i===!1&&t.reject(e),o.reject(e)}),o.promise},connectInsecure:function(r){var o=e.defer();return n.bluetoothSerial.connectInsecure(r,function(){o.resolve()},function(e){o.reject(e)}),o.promise},disconnect:function(){var r=e.defer();return n.bluetoothSerial.disconnect(function(){r.resolve()},function(e){r.reject(e)}),r.promise},list:function(){var r=e.defer();return n.bluetoothSerial.list(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},discoverUnpaired:function(){var r=e.defer();return n.bluetoothSerial.discoverUnpaired(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},setDeviceDiscoveredListener:function(){var r=e.defer();return n.bluetoothSerial.setDeviceDiscoveredListener(function(e){r.notify(e)}),r.promise},clearDeviceDiscoveredListener:function(){n.bluetoothSerial.clearDeviceDiscoveredListener()},showBluetoothSettings:function(){var r=e.defer();return n.bluetoothSerial.showBluetoothSettings(function(){r.resolve()},function(e){r.reject(e)}),r.promise},isEnabled:function(){var r=e.defer();return n.bluetoothSerial.isEnabled(function(){r.resolve()},function(){r.reject()}),r.promise},enable:function(){var r=e.defer();return n.bluetoothSerial.enable(function(){r.resolve()},function(){r.reject()}),r.promise},isConnected:function(){var r=e.defer();return n.bluetoothSerial.isConnected(function(){r.resolve()},function(){r.reject()}),r.promise},available:function(){var r=e.defer();return n.bluetoothSerial.available(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},read:function(){var r=e.defer();return n.bluetoothSerial.read(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},readUntil:function(r){var o=e.defer();return n.bluetoothSerial.readUntil(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},write:function(r){var o=e.defer();return n.bluetoothSerial.write(r,function(){o.resolve()},function(e){o.reject(e)}),o.promise},subscribe:function(r){var o=e.defer();return n.bluetoothSerial.subscribe(r,function(e){o.notify(e)},function(e){o.reject(e)}),o.promise},subscribeRawData:function(){var r=e.defer();return n.bluetoothSerial.subscribeRawData(function(e){r.notify(e)},function(e){r.reject(e)}),r.promise},unsubscribe:function(){var r=e.defer();return n.bluetoothSerial.unsubscribe(function(){r.resolve()},function(e){r.reject(e)}),r.promise},unsubscribeRawData:function(){var r=e.defer();return n.bluetoothSerial.unsubscribeRawData(function(){r.resolve()},function(e){r.reject(e)}),r.promise},clear:function(){var r=e.defer();return n.bluetoothSerial.clear(function(){r.resolve()},function(e){r.reject(e)}),r.promise},readRSSI:function(){var r=e.defer();return n.bluetoothSerial.readRSSI(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.brightness",[]).factory("$cordovaBrightness",["$q","$window",function(e,n){return{get:function(){var r=e.defer();return n.cordova?n.cordova.plugins.brightness.getBrightness(function(e){r.resolve(e)},function(e){r.reject(e)}):r.reject("Not supported without cordova.js"),r.promise},set:function(r){var o=e.defer();return n.cordova?n.cordova.plugins.brightness.setBrightness(r,function(e){o.resolve(e)},function(e){o.reject(e)}):o.reject("Not supported without cordova.js"),o.promise},setKeepScreenOn:function(r){var o=e.defer();return n.cordova?n.cordova.plugins.brightness.setKeepScreenOn(r,function(e){o.resolve(e)},function(e){o.reject(e)}):o.reject("Not supported without cordova.js"),o.promise}}}]),angular.module("ngCordova.plugins.calendar",[]).factory("$cordovaCalendar",["$q","$window",function(e,n){return{createCalendar:function(r){var o=e.defer(),t=n.plugins.calendar.getCreateCalendarOptions();return"string"==typeof r?t.calendarName=r:t=angular.extend(t,r),n.plugins.calendar.createCalendar(t,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},deleteCalendar:function(r){var o=e.defer();return n.plugins.calendar.deleteCalendar(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},createEvent:function(r){var o=e.defer(),t={title:null,location:null,notes:null,startDate:null,endDate:null};return t=angular.extend(t,r),n.plugins.calendar.createEvent(t.title,t.location,t.notes,new Date(t.startDate),new Date(t.endDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},createEventWithOptions:function(r){var o=e.defer(),t=[],i=window.plugins.calendar.getCalendarOptions(),a={title:null,location:null,notes:null,startDate:null,endDate:null};t=Object.keys(a);for(var c in r)-1===t.indexOf(c)?i[c]=r[c]:a[c]=r[c];return n.plugins.calendar.createEventWithOptions(a.title,a.location,a.notes,new Date(a.startDate),new Date(a.endDate),i,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},createEventInteractively:function(r){var o=e.defer(),t={title:null,location:null,notes:null,startDate:null,endDate:null};return t=angular.extend(t,r),n.plugins.calendar.createEventInteractively(t.title,t.location,t.notes,new Date(t.startDate),new Date(t.endDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},createEventInNamedCalendar:function(r){var o=e.defer(),t={title:null,location:null,notes:null,startDate:null,endDate:null,calendarName:null};return t=angular.extend(t,r),n.plugins.calendar.createEventInNamedCalendar(t.title,t.location,t.notes,new Date(t.startDate),new Date(t.endDate),t.calendarName,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},findEvent:function(r){var o=e.defer(),t={title:null,location:null,notes:null,startDate:null,endDate:null};return t=angular.extend(t,r),n.plugins.calendar.findEvent(t.title,t.location,t.notes,new Date(t.startDate),new Date(t.endDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},listEventsInRange:function(r,o){var t=e.defer();return n.plugins.calendar.listEventsInRange(r,o,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},listCalendars:function(){var r=e.defer();return n.plugins.calendar.listCalendars(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},findAllEventsInNamedCalendar:function(r){var o=e.defer();return n.plugins.calendar.findAllEventsInNamedCalendar(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},modifyEvent:function(r){var o=e.defer(),t={title:null,location:null,notes:null,startDate:null,endDate:null,newTitle:null,newLocation:null,newNotes:null,newStartDate:null,newEndDate:null};return t=angular.extend(t,r),n.plugins.calendar.modifyEvent(t.title,t.location,t.notes,new Date(t.startDate),new Date(t.endDate),t.newTitle,t.newLocation,t.newNotes,new Date(t.newStartDate),new Date(t.newEndDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},deleteEvent:function(r){var o=e.defer(),t={newTitle:null,location:null,notes:null,startDate:null,endDate:null};return t=angular.extend(t,r),n.plugins.calendar.deleteEvent(t.newTitle,t.location,t.notes,new Date(t.startDate),new Date(t.endDate),function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.camera",[]).factory("$cordovaCamera",["$q",function(e){return{getPicture:function(n){var r=e.defer();return navigator.camera?(navigator.camera.getPicture(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise):(r.resolve(null),r.promise)},cleanup:function(){var n=e.defer();return navigator.camera.cleanup(function(){n.resolve()},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.capture",[]).factory("$cordovaCapture",["$q",function(e){return{captureAudio:function(n){var r=e.defer();return navigator.device.capture?(navigator.device.capture.captureAudio(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise):(r.resolve(null),r.promise)},captureImage:function(n){var r=e.defer();return navigator.device.capture?(navigator.device.capture.captureImage(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise):(r.resolve(null),r.promise)},captureVideo:function(n){var r=e.defer();return navigator.device.capture?(navigator.device.capture.captureVideo(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise):(r.resolve(null),r.promise)}}}]),angular.module("ngCordova.plugins.cardIO",[]).provider("$cordovaNgCardIO",[function(){var e=["card_type","redacted_card_number","card_number","expiry_month","expiry_year","short_expiry_year","cvv","zip"],n={expiry:!0,cvv:!0,zip:!1,suppressManual:!1,suppressConfirm:!1,hideLogo:!0};this.setCardIOResponseFields=function(n){n&&angular.isArray(n)&&(e=n)},this.setScanerConfig=function(e){e&&angular.isObject(e)&&(n.expiry=e.expiry||!0,n.cvv=e.cvv||!0,n.zip=e.zip||!1,n.suppressManual=e.suppressManual||!1,n.suppressConfirm=e.suppressConfirm||!1,n.hideLogo=e.hideLogo||!0)},this.$get=["$q",function(r){return{scanCard:function(){var o=r.defer();return CardIO.scan(n,function(n){if(null===n)o.reject(null);else{for(var r={},t=0,i=e.length;i>t;t++){var a=e[t];"short_expiry_year"===a?r[a]=String(n.expiry_year).substr(2,2)||"":r[a]=n[a]||""}o.resolve(r)}},function(){o.reject(null)}),o.promise}}}]}]),angular.module("ngCordova.plugins.clipboard",[]).factory("$cordovaClipboard",["$q","$window",function(e,n){return{copy:function(r){var o=e.defer();return n.cordova.plugins.clipboard.copy(r,function(){o.resolve()},function(){o.reject()}),o.promise},paste:function(){var r=e.defer();return n.cordova.plugins.clipboard.paste(function(e){r.resolve(e)},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins.contacts",[]).factory("$cordovaContacts",["$q",function(e){return{save:function(n){var r=e.defer(),o=navigator.contacts.create(n);return o.save(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},remove:function(n){var r=e.defer(),o=navigator.contacts.create(n);return o.remove(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},clone:function(e){var n=navigator.contacts.create(e);return n.clone(e)},find:function(n){var r=e.defer(),o=n.fields||["id","displayName"];return delete n.fields,0===Object.keys(n).length?navigator.contacts.find(o,function(e){r.resolve(e)},function(e){r.reject(e)}):navigator.contacts.find(o,function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise},pickContact:function(){var n=e.defer();return navigator.contacts.pickContact(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.datePicker",[]).factory("$cordovaDatePicker",["$window","$q",function(e,n){return{show:function(r){var o=n.defer();return r=r||{date:new Date,mode:"date"},e.datePicker.show(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.device",[]).factory("$cordovaDevice",[function(){return{getDevice:function(){return device},getCordova:function(){return device.cordova},getModel:function(){return device.model},getName:function(){return device.name},getPlatform:function(){return device.platform},getUUID:function(){return device.uuid},getVersion:function(){return device.version},getManufacturer:function(){return device.manufacturer}}}]),angular.module("ngCordova.plugins.deviceMotion",[]).factory("$cordovaDeviceMotion",["$q",function(e){return{getCurrentAcceleration:function(){var n=e.defer();return angular.isUndefined(navigator.accelerometer)||!angular.isFunction(navigator.accelerometer.getCurrentAcceleration)?(n.reject("Device do not support watchAcceleration"),n.promise):(navigator.accelerometer.getCurrentAcceleration(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise)},watchAcceleration:function(n){var r=e.defer();if(angular.isUndefined(navigator.accelerometer)||!angular.isFunction(navigator.accelerometer.watchAcceleration))return r.reject("Device do not support watchAcceleration"),r.promise;var o=navigator.accelerometer.watchAcceleration(function(e){r.notify(e)},function(e){r.reject(e)},n);return r.promise.cancel=function(){navigator.accelerometer.clearWatch(o)},r.promise.clearWatch=function(e){navigator.accelerometer.clearWatch(e||o)},r.promise.watchID=o,r.promise},clearWatch:function(e){return navigator.accelerometer.clearWatch(e)}}}]),angular.module("ngCordova.plugins.deviceOrientation",[]).factory("$cordovaDeviceOrientation",["$q",function(e){var n={frequency:3e3};return{getCurrentHeading:function(){var n=e.defer();return navigator.compass?(navigator.compass.getCurrentHeading(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise):(n.reject("No compass on Device"),n.promise)},watchHeading:function(r){var o=e.defer();if(!navigator.compass)return o.reject("No compass on Device"),o.promise;var t=angular.extend(n,r),i=navigator.compass.watchHeading(function(e){o.notify(e)},function(e){o.reject(e)},t);return o.promise.cancel=function(){navigator.compass.clearWatch(i)},o.promise.clearWatch=function(e){navigator.compass.clearWatch(e||i)},o.promise.watchID=i,o.promise},clearWatch:function(e){return navigator.compass.clearWatch(e)}}}]),angular.module("ngCordova.plugins.dialogs",[]).factory("$cordovaDialogs",["$q","$window",function(e,n){return{alert:function(r,o,t){var i=e.defer();return n.navigator.notification?navigator.notification.alert(r,function(){i.resolve()},o,t):(n.alert(r),i.resolve()),i.promise},confirm:function(r,o,t){var i=e.defer();return n.navigator.notification?navigator.notification.confirm(r,function(e){i.resolve(e)},o,t):n.confirm(r)?i.resolve(1):i.resolve(2),i.promise},prompt:function(r,o,t,i){var a=e.defer();if(n.navigator.notification)navigator.notification.prompt(r,function(e){a.resolve(e)},o,t,i);else{var c=n.prompt(r,i);null!==c?a.resolve({input1:c,buttonIndex:1}):a.resolve({input1:c,buttonIndex:2})}return a.promise},beep:function(e){return navigator.notification.beep(e)},activityStart:function(n,r){var o=e.defer();return"android"===cordova.platformId?(navigator.notification.activityStart(r,n),o.resolve()):o.reject(n,r),o.promise},activityStop:function(){var n=e.defer();return"android"===cordova.platformId?(navigator.notification.activityStop(),n.resolve()):n.reject(),n.promise},progressStart:function(n,r){var o=e.defer();return"android"===cordova.platformId?(navigator.notification.progressStart(r,n),o.resolve()):o.reject(n,r),o.promise},progressStop:function(){var n=e.defer();return"android"===cordova.platformId?(navigator.notification.progressStop(),n.resolve()):n.reject(),n.promise},progressValue:function(n){var r=e.defer();return"android"===cordova.platformId?(navigator.notification.progressValue(n),r.resolve()):r.reject(n),r.promise}}}]),angular.module("ngCordova.plugins.emailComposer",[]).factory("$cordovaEmailComposer",["$q",function(e){return{isAvailable:function(){var n=e.defer();return cordova.plugins.email.isAvailable(function(e){e?n.resolve():n.reject()}),n.promise},open:function(n){var r=e.defer();return cordova.plugins.email.open(n,function(){r.reject()}),r.promise},addAlias:function(e,n){cordova.plugins.email.addAlias(e,n)}}}]),angular.module("ngCordova.plugins.facebook",[]).provider("$cordovaFacebook",[function(){this.browserInit=function(e,n){this.appID=e,this.appVersion=n||"v2.0",facebookConnectPlugin.browserInit(this.appID,this.appVersion)},this.$get=["$q",function(e){return{login:function(n){var r=e.defer();return facebookConnectPlugin.login(n,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},showDialog:function(n){var r=e.defer();return facebookConnectPlugin.showDialog(n,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},api:function(n,r){var o=e.defer();return facebookConnectPlugin.api(n,r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},getAccessToken:function(){var n=e.defer();return facebookConnectPlugin.getAccessToken(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getLoginStatus:function(){var n=e.defer();return facebookConnectPlugin.getLoginStatus(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},logout:function(){var n=e.defer();return facebookConnectPlugin.logout(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]}]),angular.module("ngCordova.plugins.facebookAds",[]).factory("$cordovaFacebookAds",["$q","$window",function(e,n){return{setOptions:function(r){var o=e.defer();return n.FacebookAds.setOptions(r,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(r){var o=e.defer();return n.FacebookAds.createBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var r=e.defer();return n.FacebookAds.removeBanner(function(){r.resolve()},function(){r.reject()}),r.promise},showBanner:function(r){var o=e.defer();return n.FacebookAds.showBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(r,o){var t=e.defer();return n.FacebookAds.showBannerAtXY(r,o,function(){t.resolve()},function(){t.reject()}),t.promise},hideBanner:function(){var r=e.defer();return n.FacebookAds.hideBanner(function(){r.resolve()},function(){r.reject()}),r.promise},prepareInterstitial:function(r){var o=e.defer();return n.FacebookAds.prepareInterstitial(r,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var r=e.defer();return n.FacebookAds.showInterstitial(function(){r.resolve()},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins.file",[]).constant("$cordovaFileError",{1:"NOT_FOUND_ERR",2:"SECURITY_ERR",3:"ABORT_ERR",4:"NOT_READABLE_ERR",5:"ENCODING_ERR",6:"NO_MODIFICATION_ALLOWED_ERR",7:"INVALID_STATE_ERR",8:"SYNTAX_ERR",9:"INVALID_MODIFICATION_ERR",10:"QUOTA_EXCEEDED_ERR",11:"TYPE_MISMATCH_ERR",12:"PATH_EXISTS_ERR"}).provider("$cordovaFile",[function(){this.$get=["$q","$window","$cordovaFileError",function(e,n,r){return{getFreeDiskSpace:function(){var n=e.defer();return cordova.exec(function(e){n.resolve(e)},function(e){n.reject(e)},"File","getFreeDiskSpace",[]),n.promise},checkDir:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("directory cannot start with /");try{var a=o+t;n.resolveLocalFileSystemURL(a,function(e){e.isDirectory===!0?i.resolve(e):i.reject({code:13,message:"input is not a directory"})},function(e){e.message=r[e.code],i.reject(e)})}catch(c){c.message=r[c.code],i.reject(c)}return i.promise},checkFile:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("directory cannot start with /");try{var a=o+t;n.resolveLocalFileSystemURL(a,function(e){e.isFile===!0?i.resolve(e):i.reject({code:13,message:"input is not a file"})},function(e){e.message=r[e.code],i.reject(e)})}catch(c){c.message=r[c.code],i.reject(c)}return i.promise},createDir:function(o,t,i){var a=e.defer();/^\//.test(t)&&a.reject("directory cannot start with /"),
-i=i?!1:!0;var c={create:!0,exclusive:i};try{n.resolveLocalFileSystemURL(o,function(e){e.getDirectory(t,c,function(e){a.resolve(e)},function(e){e.message=r[e.code],a.reject(e)})},function(e){e.message=r[e.code],a.reject(e)})}catch(u){u.message=r[u.code],a.reject(u)}return a.promise},createFile:function(o,t,i){var a=e.defer();/^\//.test(t)&&a.reject("file-name cannot start with /"),i=i?!1:!0;var c={create:!0,exclusive:i};try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,c,function(e){a.resolve(e)},function(e){e.message=r[e.code],a.reject(e)})},function(e){e.message=r[e.code],a.reject(e)})}catch(u){u.message=r[u.code],a.reject(u)}return a.promise},removeDir:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getDirectory(t,{create:!1},function(e){e.remove(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})}catch(a){a.message=r[a.code],i.reject(a)}return i.promise},removeFile:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,{create:!1},function(e){e.remove(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})}catch(a){a.message=r[a.code],i.reject(a)}return i.promise},removeRecursively:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getDirectory(t,{create:!1},function(e){e.removeRecursively(function(){i.resolve({success:!0,fileRemoved:e})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})}catch(a){a.message=r[a.code],i.reject(a)}return i.promise},writeFile:function(o,t,i,a){var c=e.defer();/^\//.test(t)&&c.reject("file-name cannot start with /"),a=a?!1:!0;var u={create:!0,exclusive:a};try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,u,function(e){e.createWriter(function(e){u.append===!0&&e.seek(e.length),u.truncate&&e.truncate(u.truncate),e.onwriteend=function(e){this.error?c.reject(this.error):c.resolve(e)},e.write(i),c.promise.abort=function(){e.abort()}})},function(e){e.message=r[e.code],c.reject(e)})},function(e){e.message=r[e.code],c.reject(e)})}catch(s){s.message=r[s.code],c.reject(s)}return c.promise},writeExistingFile:function(o,t,i){var a=e.defer();/^\//.test(t)&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,{create:!1},function(e){e.createWriter(function(e){e.seek(e.length),e.onwriteend=function(e){this.error?a.reject(this.error):a.resolve(e)},e.write(i),a.promise.abort=function(){e.abort()}})},function(e){e.message=r[e.code],a.reject(e)})},function(e){e.message=r[e.code],a.reject(e)})}catch(c){c.message=r[c.code],a.reject(c)}return a.promise},readAsText:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):void 0!==e.target.error||null!==e.target.error?i.reject(e.target.error):i.reject({code:null,message:"READER_ONLOADEND_ERR"})},n.readAsText(e)})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})}catch(a){a.message=r[a.code],i.reject(a)}return i.promise},readAsDataURL:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):void 0!==e.target.error||null!==e.target.error?i.reject(e.target.error):i.reject({code:null,message:"READER_ONLOADEND_ERR"})},n.readAsDataURL(e)})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})}catch(a){a.message=r[a.code],i.reject(a)}return i.promise},readAsBinaryString:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):void 0!==e.target.error||null!==e.target.error?i.reject(e.target.error):i.reject({code:null,message:"READER_ONLOADEND_ERR"})},n.readAsBinaryString(e)})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})}catch(a){a.message=r[a.code],i.reject(a)}return i.promise},readAsArrayBuffer:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,{create:!1},function(e){e.file(function(e){var n=new FileReader;n.onloadend=function(e){void 0!==e.target.result||null!==e.target.result?i.resolve(e.target.result):void 0!==e.target.error||null!==e.target.error?i.reject(e.target.error):i.reject({code:null,message:"READER_ONLOADEND_ERR"})},n.readAsArrayBuffer(e)})},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})}catch(a){a.message=r[a.code],i.reject(a)}return i.promise},moveFile:function(r,o,t,i){var a=e.defer();i=i||o,(/^\//.test(o)||/^\//.test(i))&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getFile(o,{create:!1},function(e){n.resolveLocalFileSystemURL(t,function(n){e.moveTo(n,i,function(e){a.resolve(e)},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})}catch(c){a.reject(c)}return a.promise},moveDir:function(r,o,t,i){var a=e.defer();i=i||o,(/^\//.test(o)||/^\//.test(i))&&a.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(r,function(e){e.getDirectory(o,{create:!1},function(e){n.resolveLocalFileSystemURL(t,function(n){e.moveTo(n,i,function(e){a.resolve(e)},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})},function(e){a.reject(e)})}catch(c){a.reject(c)}return a.promise},copyDir:function(o,t,i,a){var c=e.defer();a=a||t,(/^\//.test(t)||/^\//.test(a))&&c.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getDirectory(t,{create:!1,exclusive:!1},function(e){n.resolveLocalFileSystemURL(i,function(n){e.copyTo(n,a,function(e){c.resolve(e)},function(e){e.message=r[e.code],c.reject(e)})},function(e){e.message=r[e.code],c.reject(e)})},function(e){e.message=r[e.code],c.reject(e)})},function(e){e.message=r[e.code],c.reject(e)})}catch(u){u.message=r[u.code],c.reject(u)}return c.promise},copyFile:function(o,t,i,a){var c=e.defer();a=a||t,/^\//.test(t)&&c.reject("file-name cannot start with /");try{n.resolveLocalFileSystemURL(o,function(e){e.getFile(t,{create:!1,exclusive:!1},function(e){n.resolveLocalFileSystemURL(i,function(n){e.copyTo(n,a,function(e){c.resolve(e)},function(e){e.message=r[e.code],c.reject(e)})},function(e){e.message=r[e.code],c.reject(e)})},function(e){e.message=r[e.code],c.reject(e)})},function(e){e.message=r[e.code],c.reject(e)})}catch(u){u.message=r[u.code],c.reject(u)}return c.promise},readFileMetadata:function(o,t){var i=e.defer();/^\//.test(t)&&i.reject("directory cannot start with /");try{var a=o+t;n.resolveLocalFileSystemURL(a,function(e){e.file(function(e){i.resolve(e)},function(e){e.message=r[e.code],i.reject(e)})},function(e){e.message=r[e.code],i.reject(e)})}catch(c){c.message=r[c.code],i.reject(c)}return i.promise}}}]}]),angular.module("ngCordova.plugins.fileOpener2",[]).factory("$cordovaFileOpener2",["$q",function(e){return{open:function(n,r){var o=e.defer();return cordova.plugins.fileOpener2.open(n,r,{error:function(e){o.reject(e)},success:function(){o.resolve()}}),o.promise},uninstall:function(n){var r=e.defer();return cordova.plugins.fileOpener2.uninstall(n,{error:function(e){r.reject(e)},success:function(){r.resolve()}}),r.promise},appIsInstalled:function(n){var r=e.defer();return cordova.plugins.fileOpener2.appIsInstalled(n,{success:function(e){r.resolve(e)}}),r.promise}}}]),angular.module("ngCordova.plugins.fileTransfer",[]).factory("$cordovaFileTransfer",["$q","$timeout",function(e,n){return{download:function(r,o,t,i){var a=e.defer(),c=new FileTransfer,u=t&&t.encodeURI===!1?r:encodeURI(r);return t&&void 0!==t.timeout&&null!==t.timeout&&(n(function(){c.abort()},t.timeout),t.timeout=null),c.onprogress=function(e){a.notify(e)},a.promise.abort=function(){c.abort()},c.download(u,o,a.resolve,a.reject,i,t),a.promise},upload:function(r,o,t,i){var a=e.defer(),c=new FileTransfer,u=t&&t.encodeURI===!1?r:encodeURI(r);return t&&void 0!==t.timeout&&null!==t.timeout&&(n(function(){c.abort()},t.timeout),t.timeout=null),c.onprogress=function(e){a.notify(e)},a.promise.abort=function(){c.abort()},c.upload(o,u,a.resolve,a.reject,t,i),a.promise}}}]),angular.module("ngCordova.plugins.flashlight",[]).factory("$cordovaFlashlight",["$q","$window",function(e,n){return{available:function(){var r=e.defer();return n.plugins.flashlight.available(function(e){r.resolve(e)}),r.promise},switchOn:function(){var r=e.defer();return n.plugins.flashlight.switchOn(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},switchOff:function(){var r=e.defer();return n.plugins.flashlight.switchOff(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},toggle:function(){var r=e.defer();return n.plugins.flashlight.toggle(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.flurryAds",[]).factory("$cordovaFlurryAds",["$q","$window",function(e,n){return{setOptions:function(r){var o=e.defer();return n.FlurryAds.setOptions(r,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(r){var o=e.defer();return n.FlurryAds.createBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var r=e.defer();return n.FlurryAds.removeBanner(function(){r.resolve()},function(){r.reject()}),r.promise},showBanner:function(r){var o=e.defer();return n.FlurryAds.showBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(r,o){var t=e.defer();return n.FlurryAds.showBannerAtXY(r,o,function(){t.resolve()},function(){t.reject()}),t.promise},hideBanner:function(){var r=e.defer();return n.FlurryAds.hideBanner(function(){r.resolve()},function(){r.reject()}),r.promise},prepareInterstitial:function(r){var o=e.defer();return n.FlurryAds.prepareInterstitial(r,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var r=e.defer();return n.FlurryAds.showInterstitial(function(){r.resolve()},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins.ga",[]).factory("$cordovaGA",["$q","$window",function(e,n){return{init:function(r,o){var t=e.defer();return o=o>=0?o:10,n.plugins.gaPlugin.init(function(e){t.resolve(e)},function(e){t.reject(e)},r,o),t.promise},trackEvent:function(r,o,t,i,a,c){var u=e.defer();return n.plugins.gaPlugin.trackEvent(function(e){u.resolve(e)},function(e){u.reject(e)},t,i,a,c),u.promise},trackPage:function(r,o,t){var i=e.defer();return n.plugins.gaPlugin.trackPage(function(e){i.resolve(e)},function(e){i.reject(e)},t),i.promise},setVariable:function(r,o,t,i){var a=e.defer();return n.plugins.gaPlugin.setVariable(function(e){a.resolve(e)},function(e){a.reject(e)},t,i),a.promise},exit:function(){var r=e.defer();return n.plugins.gaPlugin.exit(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.geolocation",[]).factory("$cordovaGeolocation",["$q",function(e){return{getCurrentPosition:function(n){var r=e.defer();return navigator.geolocation.getCurrentPosition(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise},watchPosition:function(n){var r=e.defer(),o=navigator.geolocation.watchPosition(function(e){r.notify(e)},function(e){r.reject(e)},n);return r.promise.cancel=function(){navigator.geolocation.clearWatch(o)},r.promise.clearWatch=function(e){navigator.geolocation.clearWatch(e||o)},r.promise.watchID=o,r.promise},clearWatch:function(e){return navigator.geolocation.clearWatch(e)}}}]),angular.module("ngCordova.plugins.globalization",[]).factory("$cordovaGlobalization",["$q",function(e){return{getPreferredLanguage:function(){var n=e.defer();return navigator.globalization.getPreferredLanguage(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getLocaleName:function(){var n=e.defer();return navigator.globalization.getLocaleName(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getFirstDayOfWeek:function(){var n=e.defer();return navigator.globalization.getFirstDayOfWeek(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},dateToString:function(n,r){var o=e.defer();return navigator.globalization.dateToString(n,function(e){o.resolve(e)},function(e){o.reject(e)},r),o.promise},stringToDate:function(n,r){var o=e.defer();return navigator.globalization.stringToDate(n,function(e){o.resolve(e)},function(e){o.reject(e)},r),o.promise},getDatePattern:function(n){var r=e.defer();return navigator.globalization.getDatePattern(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise},getDateNames:function(n){var r=e.defer();return navigator.globalization.getDateNames(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise},isDayLightSavingsTime:function(n){var r=e.defer();return navigator.globalization.isDayLightSavingsTime(n,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},numberToString:function(n,r){var o=e.defer();return navigator.globalization.numberToString(n,function(e){o.resolve(e)},function(e){o.reject(e)},r),o.promise},stringToNumber:function(n,r){var o=e.defer();return navigator.globalization.stringToNumber(n,function(e){o.resolve(e)},function(e){o.reject(e)},r),o.promise},getNumberPattern:function(n){var r=e.defer();return navigator.globalization.getNumberPattern(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise},getCurrencyPattern:function(n){var r=e.defer();return navigator.globalization.getCurrencyPattern(n,function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.googleAds",[]).factory("$cordovaGoogleAds",["$q","$window",function(e,n){return{setOptions:function(r){var o=e.defer();return n.AdMob.setOptions(r,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(r){var o=e.defer();return n.AdMob.createBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var r=e.defer();return n.AdMob.removeBanner(function(){r.resolve()},function(){r.reject()}),r.promise},showBanner:function(r){var o=e.defer();return n.AdMob.showBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(r,o){var t=e.defer();return n.AdMob.showBannerAtXY(r,o,function(){t.resolve()},function(){t.reject()}),t.promise},hideBanner:function(){var r=e.defer();return n.AdMob.hideBanner(function(){r.resolve()},function(){r.reject()}),r.promise},prepareInterstitial:function(r){var o=e.defer();return n.AdMob.prepareInterstitial(r,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var r=e.defer();return n.AdMob.showInterstitial(function(){r.resolve()},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins.googleAnalytics",[]).factory("$cordovaGoogleAnalytics",["$q","$window",function(e,n){return{startTrackerWithId:function(r){var o=e.defer();return n.analytics.startTrackerWithId(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},setUserId:function(r){var o=e.defer();return n.analytics.setUserId(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},debugMode:function(){var r=e.defer();return n.analytics.debugMode(function(e){r.resolve(e)},function(){r.reject()}),r.promise},trackView:function(r){var o=e.defer();return n.analytics.trackView(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},addCustomDimension:function(r,o){var t=e.defer();return n.analytics.addCustomDimension(r,o,function(){t.resolve()},function(e){t.reject(e)}),t.promise},trackEvent:function(r,o,t,i){var a=e.defer();return n.analytics.trackEvent(r,o,t,i,function(e){a.resolve(e)},function(e){a.reject(e)}),a.promise},trackException:function(r,o){var t=e.defer();return n.analytics.trackException(r,o,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},trackTiming:function(r,o,t,i){var a=e.defer();return n.analytics.trackTiming(r,o,t,i,function(e){a.resolve(e)},function(e){a.reject(e)}),a.promise},addTransaction:function(r,o,t,i,a,c){var u=e.defer();return n.analytics.addTransaction(r,o,t,i,a,c,function(e){u.resolve(e)},function(e){u.reject(e)}),u.promise},addTransactionItem:function(r,o,t,i,a,c,u){var s=e.defer();return n.analytics.addTransactionItem(r,o,t,i,a,c,u,function(e){s.resolve(e)},function(e){s.reject(e)}),s.promise}}}]),angular.module("ngCordova.plugins.googleMap",[]).factory("$cordovaGoogleMap",["$q","$window",function(e,n){var r=null;return{getMap:function(o){var t=e.defer();if(n.plugin.google.maps){var i=document.getElementById("map_canvas");r=n.plugin.google.maps.Map.getMap(o),r.setDiv(i),t.resolve(r)}else t.reject(null);return t.promise},isMapLoaded:function(){return!!r},addMarker:function(n){var o=e.defer();return r.addMarker(n,function(e){o.resolve(e)}),o.promise},getMapTypeIds:function(){return n.plugin.google.maps.mapTypeId},setVisible:function(n){var o=e.defer();return r.setVisible(n),o.promise},cleanup:function(){r=null}}}]),angular.module("ngCordova.plugins.googlePlayGame",[]).factory("$cordovaGooglePlayGame",["$q",function(e){return{auth:function(){var n=e.defer();return googleplaygame.auth(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},signout:function(){var n=e.defer();return googleplaygame.signout(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},isSignedIn:function(){var n=e.defer();return googleplaygame.isSignedIn(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},showPlayer:function(){var n=e.defer();return googleplaygame.showPlayer(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},submitScore:function(n){var r=e.defer();return googleplaygame.submitScore(n,function(e){return r.resolve(e)},function(e){return r.reject(e)}),r.promise},showAllLeaderboards:function(){var n=e.defer();return googleplaygame.showAllLeaderboards(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise},showLeaderboard:function(n){var r=e.defer();return googleplaygame.showLeaderboard(n,function(e){return r.resolve(e)},function(e){return r.reject(e)}),r.promise},unlockAchievement:function(n){var r=e.defer();return googleplaygame.unlockAchievement(n,function(e){return r.resolve(e)},function(e){return r.reject(e)}),r.promise},incrementAchievement:function(n){var r=e.defer();return googleplaygame.incrementAchievement(n,function(e){return r.resolve(e)},function(e){return r.reject(e)}),r.promise},showAchievements:function(){var n=e.defer();return googleplaygame.showAchievements(function(e){return n.resolve(e)},function(e){return n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.googlePlus",[]).factory("$cordovaGooglePlus",["$q","$window",function(e,n){return{login:function(r){var o=e.defer();return void 0===r&&(r={}),n.plugins.googleplus.login({iOSApiKey:r},function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},silentLogin:function(r){var o=e.defer();return void 0===r&&(r={}),n.plugins.googleplus.trySilentLogin({iOSApiKey:r},function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},logout:function(){var r=e.defer();n.plugins.googleplus.logout(function(e){r.resolve(e)})},disconnect:function(){var r=e.defer();n.plugins.googleplus.disconnect(function(e){r.resolve(e)})},isAvailable:function(){var r=e.defer();return n.plugins.googleplus.isAvailable(function(e){e?r.resolve(e):r.reject(e)}),r.promise}}}]),angular.module("ngCordova.plugins.healthKit",[]).factory("$cordovaHealthKit",["$q","$window",function(e,n){return{isAvailable:function(){var r=e.defer();return n.plugins.healthkit.available(function(e){r.resolve(e)},function(e){r.reject(e)}),r.promise},checkAuthStatus:function(r){var o=e.defer();return r=r||"HKQuantityTypeIdentifierHeight",n.plugins.healthkit.checkAuthStatus({type:r},function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},requestAuthorization:function(r,o){var t=e.defer();return r=r||["HKCharacteristicTypeIdentifierDateOfBirth","HKQuantityTypeIdentifierActiveEnergyBurned","HKQuantityTypeIdentifierHeight"],o=o||["HKQuantityTypeIdentifierActiveEnergyBurned","HKQuantityTypeIdentifierHeight","HKQuantityTypeIdentifierDistanceCycling"],n.plugins.healthkit.requestAuthorization({readTypes:r,writeTypes:o},function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},readDateOfBirth:function(){var r=e.defer();return n.plugins.healthkit.readDateOfBirth(function(e){r.resolve(e)},function(e){r.resolve(e)}),r.promise},readGender:function(){var r=e.defer();return n.plugins.healthkit.readGender(function(e){r.resolve(e)},function(e){r.resolve(e)}),r.promise},saveWeight:function(r,o,t){var i=e.defer();return n.plugins.healthkit.saveWeight({unit:o||"lb",amount:r,date:t||new Date},function(e){i.resolve(e)},function(e){i.resolve(e)}),i.promise},readWeight:function(r){var o=e.defer();return n.plugins.healthkit.readWeight({unit:r||"lb"},function(e){o.resolve(e)},function(e){o.resolve(e)}),o.promise},saveHeight:function(r,o,t){var i=e.defer();return n.plugins.healthkit.saveHeight({unit:o||"in",amount:r,date:t||new Date},function(e){i.resolve(e)},function(e){i.resolve(e)}),i.promise},readHeight:function(r){var o=e.defer();return n.plugins.healthkit.readHeight({unit:r||"in"},function(e){o.resolve(e)},function(e){o.resolve(e)}),o.promise},findWorkouts:function(){var r=e.defer();return n.plugins.healthkit.findWorkouts({},function(e){r.resolve(e)},function(e){r.resolve(e)}),r.promise},saveWorkout:function(r){var o=e.defer();return n.plugins.healthkit.saveWorkout(r,function(e){o.resolve(e)},function(e){o.resolve(e)}),o.promise},querySampleType:function(r){var o=e.defer();return n.plugins.healthkit.querySampleType(r,function(e){o.resolve(e)},function(e){o.resolve(e)}),o.promise}}}]),angular.module("ngCordova.plugins.httpd",[]).factory("$cordovaHttpd",["$q",function(e){return{startServer:function(n){var r=e.defer();return cordova.plugins.CorHttpd.startServer(n,function(){r.resolve()},function(){r.reject()}),r.promise},stopServer:function(){var n=e.defer();return cordova.plugins.CorHttpd.stopServer(function(){n.resolve()},function(){n.reject()}),n.promise},getURL:function(){var n=e.defer();return cordova.plugins.CorHttpd.getURL(function(e){n.resolve(e)},function(){n.reject()}),n.promise},getLocalPath:function(){var n=e.defer();return cordova.plugins.CorHttpd.getLocalPath(function(e){n.resolve(e)},function(){n.reject()}),n.promise}}}]),angular.module("ngCordova.plugins.iAd",[]).factory("$cordovaiAd",["$q","$window",function(e,n){return{setOptions:function(r){var o=e.defer();return n.iAd.setOptions(r,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(r){var o=e.defer();return n.iAd.createBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var r=e.defer();return n.iAd.removeBanner(function(){r.resolve()},function(){r.reject()}),r.promise},showBanner:function(r){var o=e.defer();return n.iAd.showBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(r,o){var t=e.defer();return n.iAd.showBannerAtXY(r,o,function(){t.resolve()},function(){t.reject()}),t.promise},hideBanner:function(){var r=e.defer();return n.iAd.hideBanner(function(){r.resolve()},function(){r.reject()}),r.promise},prepareInterstitial:function(r){var o=e.defer();return n.iAd.prepareInterstitial(r,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var r=e.defer();return n.iAd.showInterstitial(function(){r.resolve()},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins.imagePicker",[]).factory("$cordovaImagePicker",["$q","$window",function(e,n){return{getPictures:function(r){var o=e.defer();return n.imagePicker.getPictures(function(e){o.resolve(e)},function(e){o.reject(e)},r),o.promise}}}]),angular.module("ngCordova.plugins.inAppBrowser",[]).provider("$cordovaInAppBrowser",[function(){var e,n=this.defaultOptions={};this.setDefaultOptions=function(e){n=angular.extend(n,e)},this.$get=["$rootScope","$q","$window","$timeout",function(r,o,t,i){return{open:function(a,c,u){var s=o.defer();if(u&&!angular.isObject(u))return s.reject("options must be an object"),s.promise;var l=angular.extend({},n,u),f=[];angular.forEach(l,function(e,n){f.push(n+"="+e)});var d=f.join();return e=t.open(a,c,d),e.addEventListener("loadstart",function(e){i(function(){r.$broadcast("$cordovaInAppBrowser:loadstart",e)})},!1),e.addEventListener("loadstop",function(e){s.resolve(e),i(function(){r.$broadcast("$cordovaInAppBrowser:loadstop",e)})},!1),e.addEventListener("loaderror",function(e){s.reject(e),i(function(){r.$broadcast("$cordovaInAppBrowser:loaderror",e)})},!1),e.addEventListener("exit",function(e){i(function(){r.$broadcast("$cordovaInAppBrowser:exit",e)})},!1),s.promise},close:function(){e.close(),e=null},show:function(){e.show()},executeScript:function(n){var r=o.defer();return e.executeScript(n,function(e){r.resolve(e)}),r.promise},insertCSS:function(n){var r=o.defer();return e.insertCSS(n,function(e){r.resolve(e)}),r.promise}}}]}]),angular.module("ngCordova.plugins.insomnia",[]).factory("$cordovaInsomnia",["$window",function(e){return{keepAwake:function(){return e.plugins.insomnia.keepAwake()},allowSleepAgain:function(){return e.plugins.insomnia.allowSleepAgain()}}}]),angular.module("ngCordova.plugins.instagram",[]).factory("$cordovaInstagram",["$q",function(e){return{share:function(n){var r=e.defer();return window.Instagram?(Instagram.share(n.image,n.caption,function(e){e?r.reject(e):r.resolve(!0)}),r.promise):(console.error("Tried to call Instagram.share but the Instagram plugin isn't installed!"),r.resolve(null),r.promise)},isInstalled:function(){var n=e.defer();return window.Instagram?(Instagram.isInstalled(function(e,r){e?n.reject(e):n.resolve(r)}),n.promise):(console.error("Tried to call Instagram.isInstalled but the Instagram plugin isn't installed!"),n.resolve(null),n.promise)}}}]),angular.module("ngCordova.plugins.keyboard",[]).factory("$cordovaKeyboard",["$rootScope",function(e){var n=function(){e.$evalAsync(function(){e.$broadcast("$cordovaKeyboard:show")})},r=function(){e.$evalAsync(function(){e.$broadcast("$cordovaKeyboard:hide")})};return document.addEventListener("deviceready",function(){cordova.plugins.Keyboard&&(window.addEventListener("native.keyboardshow",n,!1),window.addEventListener("native.keyboardhide",r,!1))}),{hideAccessoryBar:function(e){return cordova.plugins.Keyboard.hideKeyboardAccessoryBar(e)},close:function(){return cordova.plugins.Keyboard.close()},show:function(){return cordova.plugins.Keyboard.show()},disableScroll:function(e){return cordova.plugins.Keyboard.disableScroll(e)},isVisible:function(){return cordova.plugins.Keyboard.isVisible},clearShowWatch:function(){document.removeEventListener("native.keyboardshow",n),e.$$listeners["$cordovaKeyboard:show"]=[]},clearHideWatch:function(){document.removeEventListener("native.keyboardhide",r),e.$$listeners["$cordovaKeyboard:hide"]=[]}}}]),angular.module("ngCordova.plugins.keychain",[]).factory("$cordovaKeychain",["$q",function(e){return{getForKey:function(n,r){var o=e.defer(),t=new Keychain;return t.getForKey(o.resolve,o.reject,n,r),o.promise},setForKey:function(n,r,o){var t=e.defer(),i=new Keychain;return i.setForKey(t.resolve,t.reject,n,r,o),t.promise},removeForKey:function(n,r){var o=e.defer(),t=new Keychain;return t.removeForKey(o.resolve,o.reject,n,r),o.promise}}}]),angular.module("ngCordova.plugins.launchNavigator",[]).factory("$cordovaLaunchNavigator",["$q",function(e){return{navigate:function(n,r,o){var t=e.defer();return launchnavigator.navigate(n,r,function(){t.resolve()},function(e){t.reject(e)},o),t.promise}}}]),angular.module("ngCordova.plugins.localNotification",[]).factory("$cordovaLocalNotification",["$q","$window","$rootScope","$timeout",function(e,n,r,o){return document.addEventListener("deviceready",function(){n.cordova&&n.cordova.plugins&&n.cordova.plugins.notification&&n.cordova.plugins.notification.local&&(n.cordova.plugins.notification.local.on("schedule",function(e,n){o(function(){r.$broadcast("$cordovaLocalNotification:schedule",e,n)})}),n.cordova.plugins.notification.local.on("trigger",function(e,n){o(function(){r.$broadcast("$cordovaLocalNotification:trigger",e,n)})}),n.cordova.plugins.notification.local.on("update",function(e,n){o(function(){r.$broadcast("$cordovaLocalNotification:update",e,n)})}),n.cordova.plugins.notification.local.on("clear",function(e,n){o(function(){r.$broadcast("$cordovaLocalNotification:clear",e,n)})}),n.cordova.plugins.notification.local.on("clearall",function(e){o(function(){r.$broadcast("$cordovaLocalNotification:clearall",e)})}),n.cordova.plugins.notification.local.on("cancel",function(e,n){o(function(){r.$broadcast("$cordovaLocalNotification:cancel",e,n)})}),n.cordova.plugins.notification.local.on("cancelall",function(e){o(function(){r.$broadcast("$cordovaLocalNotification:cancelall",e)})}),n.cordova.plugins.notification.local.on("click",function(e,n){o(function(){r.$broadcast("$cordovaLocalNotification:click",e,n)})}))},!1),{schedule:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.schedule(r,function(e){t.resolve(e)},o),t.promise},add:function(r,o){console.warn('Deprecated: use "schedule" instead.');var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.schedule(r,function(e){t.resolve(e)},o),t.promise},update:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.update(r,function(e){t.resolve(e)},o),t.promise},clear:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.clear(r,function(e){t.resolve(e)},o),t.promise},clearAll:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.clearAll(function(e){o.resolve(e)},r),o.promise},cancel:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.cancel(r,function(e){t.resolve(e)},o),t.promise},cancelAll:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.cancelAll(function(e){o.resolve(e)},r),o.promise},isPresent:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.isPresent(r,function(e){t.resolve(e)},o),t.promise},isScheduled:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.isScheduled(r,function(e){t.resolve(e)},o),t.promise},isTriggered:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.isTriggered(r,function(e){t.resolve(e)},o),t.promise},hasPermission:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.hasPermission(function(e){e?o.resolve(e):o.reject(e)},r),o.promise},registerPermission:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.registerPermission(function(e){e?o.resolve(e):o.reject(e)},r),o.promise},promptForPermission:function(r){console.warn('Deprecated: use "registerPermission" instead.');var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.registerPermission(function(e){
-e?o.resolve(e):o.reject(e)},r),o.promise},getAllIds:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getAllIds(function(e){o.resolve(e)},r),o.promise},getIds:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getIds(function(e){o.resolve(e)},r),o.promise},getScheduledIds:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getScheduledIds(function(e){o.resolve(e)},r),o.promise},getTriggeredIds:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getTriggeredIds(function(e){o.resolve(e)},r),o.promise},get:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.get(r,function(e){t.resolve(e)},o),t.promise},getAll:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getAll(function(e){o.resolve(e)},r),o.promise},getScheduled:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.getScheduled(r,function(e){t.resolve(e)},o),t.promise},getAllScheduled:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getAllScheduled(function(e){o.resolve(e)},r),o.promise},getTriggered:function(r,o){var t=e.defer();return o=o||null,n.cordova.plugins.notification.local.getTriggered(r,function(e){t.resolve(e)},o),t.promise},getAllTriggered:function(r){var o=e.defer();return r=r||null,n.cordova.plugins.notification.local.getAllTriggered(function(e){o.resolve(e)},r),o.promise},getDefaults:function(){return n.cordova.plugins.notification.local.getDefaults()},setDefaults:function(e){n.cordova.plugins.notification.local.setDefaults(e)}}}]),angular.module("ngCordova.plugins.mMediaAds",[]).factory("$cordovaMMediaAds",["$q","$window",function(e,n){return{setOptions:function(r){var o=e.defer();return n.mMedia.setOptions(r,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(r){var o=e.defer();return n.mMedia.createBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var r=e.defer();return n.mMedia.removeBanner(function(){r.resolve()},function(){r.reject()}),r.promise},showBanner:function(r){var o=e.defer();return n.mMedia.showBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(r,o){var t=e.defer();return n.mMedia.showBannerAtXY(r,o,function(){t.resolve()},function(){t.reject()}),t.promise},hideBanner:function(){var r=e.defer();return n.mMedia.hideBanner(function(){r.resolve()},function(){r.reject()}),r.promise},prepareInterstitial:function(r){var o=e.defer();return n.mMedia.prepareInterstitial(r,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var r=e.defer();return n.mMedia.showInterstitial(function(){r.resolve()},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins.media",[]).service("NewMedia",["$q","$interval",function(e,n){function r(e){angular.isDefined(s)||(s=n(function(){0>d&&(d=e.getDuration(),a&&d>0&&a.notify({duration:d})),e.getCurrentPosition(function(e){e>-1&&(f=e)},function(e){console.log("Error getting pos="+e)}),a&&a.notify({position:f})},1e3))}function o(){angular.isDefined(s)&&(n.cancel(s),s=void 0)}function t(){f=-1,d=-1}function i(e){this.media=new Media(e,function(e){o(),t(),a.resolve(e)},function(e){o(),t(),a.reject(e)},function(e){l=e,a.notify({status:l})})}var a,c,u,s,l=null,f=-1,d=-1;return i.prototype.play=function(n){return a=e.defer(),"object"!=typeof n&&(n={}),this.media.play(n),r(this.media),a.promise},i.prototype.pause=function(){o(),this.media.pause()},i.prototype.stop=function(){this.media.stop()},i.prototype.release=function(){this.media.release(),this.media=void 0},i.prototype.seekTo=function(e){this.media.seekTo(e)},i.prototype.setVolume=function(e){this.media.setVolume(e)},i.prototype.startRecord=function(){this.media.startRecord()},i.prototype.stopRecord=function(){this.media.stopRecord()},i.prototype.currentTime=function(){return c=e.defer(),this.media.getCurrentPosition(function(e){c.resolve(e)}),c.promise},i.prototype.getDuration=function(){return u=e.defer(),this.media.getDuration(function(e){u.resolve(e)}),u.promise},i}]).factory("$cordovaMedia",["NewMedia",function(e){return{newMedia:function(n){return new e(n)}}}]),angular.module("ngCordova.plugins.mobfoxAds",[]).factory("$cordovaMobFoxAds",["$q","$window",function(e,n){return{setOptions:function(r){var o=e.defer();return n.MobFox.setOptions(r,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(r){var o=e.defer();return n.MobFox.createBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var r=e.defer();return n.MobFox.removeBanner(function(){r.resolve()},function(){r.reject()}),r.promise},showBanner:function(r){var o=e.defer();return n.MobFox.showBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(r,o){var t=e.defer();return n.MobFox.showBannerAtXY(r,o,function(){t.resolve()},function(){t.reject()}),t.promise},hideBanner:function(){var r=e.defer();return n.MobFox.hideBanner(function(){r.resolve()},function(){r.reject()}),r.promise},prepareInterstitial:function(r){var o=e.defer();return n.MobFox.prepareInterstitial(r,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var r=e.defer();return n.MobFox.showInterstitial(function(){r.resolve()},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins",["ngCordova.plugins.actionSheet","ngCordova.plugins.adMob","ngCordova.plugins.appAvailability","ngCordova.plugins.appRate","ngCordova.plugins.appVersion","ngCordova.plugins.backgroundGeolocation","ngCordova.plugins.badge","ngCordova.plugins.barcodeScanner","ngCordova.plugins.batteryStatus","ngCordova.plugins.beacon","ngCordova.plugins.ble","ngCordova.plugins.bluetoothSerial","ngCordova.plugins.brightness","ngCordova.plugins.calendar","ngCordova.plugins.camera","ngCordova.plugins.capture","ngCordova.plugins.clipboard","ngCordova.plugins.contacts","ngCordova.plugins.datePicker","ngCordova.plugins.device","ngCordova.plugins.deviceMotion","ngCordova.plugins.deviceOrientation","ngCordova.plugins.dialogs","ngCordova.plugins.emailComposer","ngCordova.plugins.facebook","ngCordova.plugins.facebookAds","ngCordova.plugins.file","ngCordova.plugins.fileTransfer","ngCordova.plugins.fileOpener2","ngCordova.plugins.flashlight","ngCordova.plugins.flurryAds","ngCordova.plugins.ga","ngCordova.plugins.geolocation","ngCordova.plugins.globalization","ngCordova.plugins.googleAds","ngCordova.plugins.googleAnalytics","ngCordova.plugins.googleMap","ngCordova.plugins.googlePlayGame","ngCordova.plugins.googlePlus","ngCordova.plugins.healthKit","ngCordova.plugins.httpd","ngCordova.plugins.iAd","ngCordova.plugins.imagePicker","ngCordova.plugins.inAppBrowser","ngCordova.plugins.instagram","ngCordova.plugins.keyboard","ngCordova.plugins.keychain","ngCordova.plugins.launchNavigator","ngCordova.plugins.localNotification","ngCordova.plugins.media","ngCordova.plugins.mMediaAds","ngCordova.plugins.mobfoxAds","ngCordova.plugins.mopubAds","ngCordova.plugins.nativeAudio","ngCordova.plugins.network","ngCordova.plugins.pinDialog","ngCordova.plugins.preferences","ngCordova.plugins.printer","ngCordova.plugins.progressIndicator","ngCordova.plugins.push","ngCordova.plugins.push_v5","ngCordova.plugins.sms","ngCordova.plugins.socialSharing","ngCordova.plugins.spinnerDialog","ngCordova.plugins.splashscreen","ngCordova.plugins.sqlite","ngCordova.plugins.statusbar","ngCordova.plugins.toast","ngCordova.plugins.touchid","ngCordova.plugins.vibration","ngCordova.plugins.videoCapturePlus","ngCordova.plugins.zip","ngCordova.plugins.insomnia"]),angular.module("ngCordova.plugins.mopubAds",[]).factory("$cordovaMoPubAds",["$q","$window",function(e,n){return{setOptions:function(r){var o=e.defer();return n.MoPub.setOptions(r,function(){o.resolve()},function(){o.reject()}),o.promise},createBanner:function(r){var o=e.defer();return n.MoPub.createBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},removeBanner:function(){var r=e.defer();return n.MoPub.removeBanner(function(){r.resolve()},function(){r.reject()}),r.promise},showBanner:function(r){var o=e.defer();return n.MoPub.showBanner(r,function(){o.resolve()},function(){o.reject()}),o.promise},showBannerAtXY:function(r,o){var t=e.defer();return n.MoPub.showBannerAtXY(r,o,function(){t.resolve()},function(){t.reject()}),t.promise},hideBanner:function(){var r=e.defer();return n.MoPub.hideBanner(function(){r.resolve()},function(){r.reject()}),r.promise},prepareInterstitial:function(r){var o=e.defer();return n.MoPub.prepareInterstitial(r,function(){o.resolve()},function(){o.reject()}),o.promise},showInterstitial:function(){var r=e.defer();return n.MoPub.showInterstitial(function(){r.resolve()},function(){r.reject()}),r.promise}}}]),angular.module("ngCordova.plugins.nativeAudio",[]).factory("$cordovaNativeAudio",["$q","$window",function(e,n){return{preloadSimple:function(r,o){var t=e.defer();return n.plugins.NativeAudio.preloadSimple(r,o,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise},preloadComplex:function(r,o,t,i,a){var c=e.defer();return n.plugins.NativeAudio.preloadComplex(r,o,t,i,a,function(e){c.resolve(e)},function(e){c.reject(e)}),c.promise},play:function(r,o){var t=e.defer();return n.plugins.NativeAudio.play(r,function(e){t.resolve(e)},function(e){t.reject(e)},o),t.promise},stop:function(r){var o=e.defer();return n.plugins.NativeAudio.stop(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},loop:function(r){var o=e.defer();return n.plugins.NativeAudio.loop(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},unload:function(r){var o=e.defer();return n.plugins.NativeAudio.unload(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},setVolumeForComplexAsset:function(r,o){var t=e.defer();return n.plugins.NativeAudio.setVolumeForComplexAsset(r,o,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.network",[]).factory("$cordovaNetwork",["$rootScope","$timeout",function(e,n){var r=function(){var r=navigator.connection.type;n(function(){e.$broadcast("$cordovaNetwork:offline",r)})},o=function(){var r=navigator.connection.type;n(function(){e.$broadcast("$cordovaNetwork:online",r)})};return document.addEventListener("deviceready",function(){navigator.connection&&(document.addEventListener("offline",r,!1),document.addEventListener("online",o,!1))}),{getNetwork:function(){return navigator.connection.type},isOnline:function(){var e=navigator.connection.type;return e!==Connection.UNKNOWN&&e!==Connection.NONE},isOffline:function(){var e=navigator.connection.type;return e===Connection.UNKNOWN||e===Connection.NONE},clearOfflineWatch:function(){document.removeEventListener("offline",r),e.$$listeners["$cordovaNetwork:offline"]=[]},clearOnlineWatch:function(){document.removeEventListener("online",o),e.$$listeners["$cordovaNetwork:online"]=[]}}}]).run(["$injector",function(e){e.get("$cordovaNetwork")}]),angular.module("ngCordova.plugins.pinDialog",[]).factory("$cordovaPinDialog",["$q","$window",function(e,n){return{prompt:function(r,o,t){var i=e.defer();return n.plugins.pinDialog.prompt(r,function(e){i.resolve(e)},o,t),i.promise}}}]),angular.module("ngCordova.plugins.preferences",[]).factory("$cordovaPreferences",["$window","$q",function(e,n){return{pluginNotEnabledMessage:"Plugin not enabled",decoratePromise:function(e){e.success=function(n){return e.then(n),e},e.error=function(n){return e.then(null,n),e}},store:function(r,o,t){function i(e){c.resolve(e)}function a(e){c.reject(new Error(e))}var c=n.defer(),u=c.promise;if(e.plugins){var s;s=3===arguments.length?e.plugins.appPreferences.store(t,r,o):e.plugins.appPreferences.store(r,o),s.then(i,a)}else c.reject(new Error(this.pluginNotEnabledMessage));return this.decoratePromise(u),u},fetch:function(r,o){function t(e){a.resolve(e)}function i(e){a.reject(new Error(e))}var a=n.defer(),c=a.promise;if(e.plugins){var u;u=2===arguments.length?e.plugins.appPreferences.fetch(o,r):e.plugins.appPreferences.fetch(r),u.then(t,i)}else a.reject(new Error(this.pluginNotEnabledMessage));return this.decoratePromise(c),c},remove:function(r,o){function t(e){a.resolve(e)}function i(e){a.reject(new Error(e))}var a=n.defer(),c=a.promise;if(e.plugins){var u;u=2===arguments.length?e.plugins.appPreferences.remove(o,r):e.plugins.appPreferences.remove(r),u.then(t,i)}else a.reject(new Error(this.pluginNotEnabledMessage));return this.decoratePromise(c),c},show:function(){function r(e){t.resolve(e)}function o(e){t.reject(new Error(e))}var t=n.defer(),i=t.promise;return e.plugins?e.plugins.appPreferences.show().then(r,o):t.reject(new Error(this.pluginNotEnabledMessage)),this.decoratePromise(i),i}}}]),angular.module("ngCordova.plugins.printer",[]).factory("$cordovaPrinter",["$q","$window",function(e,n){return{isAvailable:function(){var r=e.defer();return n.plugin.printer.isAvailable(function(e){r.resolve(e)}),r.promise},print:function(r,o){var t=e.defer();return n.plugin.printer.print(r,o,function(){t.resolve()}),t.promise}}}]),angular.module("ngCordova.plugins.progressIndicator",[]).factory("$cordovaProgress",[function(){return{show:function(e){var n=e||"Please wait...";return ProgressIndicator.show(n)},showSimple:function(e){var n=e||!1;return ProgressIndicator.showSimple(n)},showSimpleWithLabel:function(e,n){var r=e||!1,o=n||"Loading...";return ProgressIndicator.showSimpleWithLabel(r,o)},showSimpleWithLabelDetail:function(e,n,r){var o=e||!1,t=n||"Loading...",i=r||"Please wait";return ProgressIndicator.showSimpleWithLabelDetail(o,t,i)},showDeterminate:function(e,n){var r=e||!1,o=n||5e4;return ProgressIndicator.showDeterminate(r,o)},showDeterminateWithLabel:function(e,n,r){var o=e||!1,t=n||5e4,i=r||"Loading...";return ProgressIndicator.showDeterminateWithLabel(o,t,i)},showAnnular:function(e,n){var r=e||!1,o=n||5e4;return ProgressIndicator.showAnnular(r,o)},showAnnularWithLabel:function(e,n,r){var o=e||!1,t=n||5e4,i=r||"Loading...";return ProgressIndicator.showAnnularWithLabel(o,t,i)},showBar:function(e,n){var r=e||!1,o=n||5e4;return ProgressIndicator.showBar(r,o)},showBarWithLabel:function(e,n,r){var o=e||!1,t=n||5e4,i=r||"Loading...";return ProgressIndicator.showBarWithLabel(o,t,i)},showSuccess:function(e,n){var r=e||!1,o=n||"Success";return ProgressIndicator.showSuccess(r,o)},showText:function(e,n,r){var o=e||!1,t=n||"Warning",i=r||"center";return ProgressIndicator.showText(o,t,i)},hide:function(){return ProgressIndicator.hide()}}}]),angular.module("ngCordova.plugins.push",[]).factory("$cordovaPush",["$q","$window","$rootScope","$timeout",function(e,n,r,o){return{onNotification:function(e){o(function(){r.$broadcast("$cordovaPush:notificationReceived",e)})},register:function(r){var o,t=e.defer();return void 0!==r&&void 0===r.ecb&&(o=null===document.querySelector("[ng-app]")?"document.body":"document.querySelector('[ng-app]')",r.ecb="angular.element("+o+").injector().get('$cordovaPush').onNotification"),n.plugins.pushNotification.register(function(e){t.resolve(e)},function(e){t.reject(e)},r),t.promise},unregister:function(r){var o=e.defer();return n.plugins.pushNotification.unregister(function(e){o.resolve(e)},function(e){o.reject(e)},r),o.promise},setBadgeNumber:function(r){var o=e.defer();return n.plugins.pushNotification.setApplicationIconBadgeNumber(function(e){o.resolve(e)},function(e){o.reject(e)},r),o.promise}}}]),angular.module("ngCordova.plugins.push_v5",[]).factory("$cordovaPushV5",["$q","$rootScope","$timeout",function(e,n,r){var o;return{initialize:function(n){var r=e.defer();return o=PushNotification.init(n),r.resolve(o),r.promise},onNotification:function(){r(function(){o.on("notification",function(e){n.$emit("$cordovaPushV5:notificationReceived",e)})})},onError:function(){r(function(){o.on("error",function(e){n.$emit("$cordovaPushV5:errorOccurred",e)})})},register:function(){var n=e.defer();return void 0===o?n.reject(new Error("init must be called before any other operation")):o.on("registration",function(e){n.resolve(e.registrationId)}),n.promise},unregister:function(){var n=e.defer();return void 0===o?n.reject(new Error("init must be called before any other operation")):o.unregister(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},getBadgeNumber:function(){var n=e.defer();return void 0===o?n.reject(new Error("init must be called before any other operation")):o.getApplicationIconBadgeNumber(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise},setBadgeNumber:function(n){var r=e.defer();return void 0===o?r.reject(new Error("init must be called before any other operation")):o.setApplicationIconBadgeNumber(function(e){r.resolve(e)},function(e){r.reject(e)},n),r.promise},finish:function(){var n=e.defer();return void 0===o?n.reject(new Error("init must be called before any other operation")):o.finish(function(e){n.resolve(e)},function(e){n.reject(e)}),n.promise}}}]),angular.module("ngCordova.plugins.screenshot",[]).factory("$cordovaScreenshot",["$q",function(e){return{captureToFile:function(n){var r=n||{},o=r.extension||"jpg",t=r.quality||"100",i=e.defer();return navigator.screenshot?(navigator.screenshot.save(function(e,n){e?i.reject(e):i.resolve(n.filePath)},o,t,r.filename),i.promise):(i.resolve(null),i.promise)},captureToUri:function(n){var r=n||{},o=r.extension||"jpg",t=r.quality||"100",i=e.defer();return navigator.screenshot?(navigator.screenshot.URI(function(e,n){e?i.reject(e):i.resolve(n.URI)},o,t,r.filename),i.promise):(i.resolve(null),i.promise)}}}]),angular.module("ngCordova.plugins.sms",[]).factory("$cordovaSms",["$q",function(e){return{send:function(n,r,o){var t=e.defer();return sms.send(n,r,o,function(e){t.resolve(e)},function(e){t.reject(e)}),t.promise}}}]),angular.module("ngCordova.plugins.socialSharing",[]).factory("$cordovaSocialSharing",["$q","$window",function(e,n){return{share:function(r,o,t,i){var a=e.defer();return o=o||null,t=t||null,i=i||null,n.plugins.socialsharing.share(r,o,t,i,function(){a.resolve(!0)},function(){a.reject(!1)}),a.promise},shareViaTwitter:function(r,o,t){var i=e.defer();return o=o||null,t=t||null,n.plugins.socialsharing.shareViaTwitter(r,o,t,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaWhatsApp:function(r,o,t){var i=e.defer();return o=o||null,t=t||null,n.plugins.socialsharing.shareViaWhatsApp(r,o,t,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaFacebook:function(r,o,t){var i=e.defer();return r=r||null,o=o||null,t=t||null,n.plugins.socialsharing.shareViaFacebook(r,o,t,function(){i.resolve(!0)},function(){i.reject(!1)}),i.promise},shareViaFacebookWithPasteMessageHint:function(r,o,t,i){var a=e.defer();return o=o||null,t=t||null,n.plugins.socialsharing.shareViaFacebookWithPasteMessageHint(r,o,t,i,function(){a.resolve(!0)},function(){a.reject(!1)}),a.promise},shareViaSMS:function(r,o){var t=e.defer();return n.plugins.socialsharing.shareViaSMS(r,o,function(){t.resolve(!0)},function(){t.reject(!1)}),t.promise},shareViaEmail:function(r,o,t,i,a,c){var u=e.defer();return t=t||null,i=i||null,a=a||null,c=c||null,n.plugins.socialsharing.shareViaEmail(r,o,t,i,a,c,function(){u.resolve(!0)},function(){u.reject(!1)}),u.promise},shareVia:function(r,o,t,i,a){var c=e.defer();return o=o||null,t=t||null,i=i||null,a=a||null,n.plugins.socialsharing.shareVia(r,o,t,i,a,function(){c.resolve(!0)},function(){c.reject(!1)}),c.promise},canShareViaEmail:function(){var r=e.defer();return n.plugins.socialsharing.canShareViaEmail(function(){r.resolve(!0)},function(){r.reject(!1)}),r.promise},canShareVia:function(r,o,t,i,a){var c=e.defer();return n.plugins.socialsharing.canShareVia(r,o,t,i,a,function(e){c.resolve(e)},function(e){c.reject(e)}),c.promise},available:function(){var n=e.defer();return window.plugins.socialsharing.available(function(e){e?n.resolve():n.reject()}),n.promise}}}]),angular.module("ngCordova.plugins.spinnerDialog",[]).factory("$cordovaSpinnerDialog",["$window",function(e){return{show:function(n,r,o){return o=o||!1,e.plugins.spinnerDialog.show(n,r,o)},hide:function(){return e.plugins.spinnerDialog.hide()}}}]),angular.module("ngCordova.plugins.splashscreen",[]).factory("$cordovaSplashscreen",[function(){return{hide:function(){return navigator.splashscreen.hide()},show:function(){return navigator.splashscreen.show()}}}]),angular.module("ngCordova.plugins.sqlite",[]).factory("$cordovaSQLite",["$q","$window",function(e,n){return{openDB:function(e,r){return angular.isObject(e)&&!angular.isString(e)?("undefined"!=typeof r&&(e.bgType=r),n.sqlitePlugin.openDatabase(e)):n.sqlitePlugin.openDatabase({name:e,bgType:r})},execute:function(n,r,o){var t=e.defer();return n.transaction(function(e){e.executeSql(r,o,function(e,n){t.resolve(n)},function(e,n){t.reject(n)})}),t.promise},insertCollection:function(n,r,o){var t=e.defer(),i=o.slice(0);return n.transaction(function(e){!function n(){var o=i.splice(0,1)[0];try{e.executeSql(r,o,function(e,r){0===i.length?t.resolve(r):n()},function(e,n){t.reject(n)})}catch(a){t.reject(a)}}()}),t.promise},nestedExecute:function(n,r,o,t,i){var a=e.defer();return n.transaction(function(e){e.executeSql(r,t,function(e,n){a.resolve(n),e.executeSql(o,i,function(e,n){a.resolve(n)})})},function(e,n){a.reject(n)}),a.promise},deleteDB:function(r){var o=e.defer();return n.sqlitePlugin.deleteDatabase(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise}}}]),angular.module("ngCordova.plugins.statusbar",[]).factory("$cordovaStatusbar",[function(){return{overlaysWebView:function(e){return StatusBar.overlaysWebView(!!e)},STYLES:{DEFAULT:0,LIGHT_CONTENT:1,BLACK_TRANSLUCENT:2,BLACK_OPAQUE:3},style:function(e){switch(e){case 0:return StatusBar.styleDefault();case 1:return StatusBar.styleLightContent();case 2:return StatusBar.styleBlackTranslucent();case 3:return StatusBar.styleBlackOpaque();default:return StatusBar.styleDefault()}},styleColor:function(e){return StatusBar.backgroundColorByName(e)},styleHex:function(e){return StatusBar.backgroundColorByHexString(e)},hide:function(){return StatusBar.hide()},show:function(){return StatusBar.show()},isVisible:function(){return StatusBar.isVisible}}}]),angular.module("ngCordova.plugins.toast",[]).factory("$cordovaToast",["$q","$window",function(e,n){return{showShortTop:function(r){var o=e.defer();return n.plugins.toast.showShortTop(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showShortCenter:function(r){var o=e.defer();return n.plugins.toast.showShortCenter(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showShortBottom:function(r){var o=e.defer();return n.plugins.toast.showShortBottom(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showLongTop:function(r){var o=e.defer();return n.plugins.toast.showLongTop(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showLongCenter:function(r){var o=e.defer();return n.plugins.toast.showLongCenter(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},showLongBottom:function(r){var o=e.defer();return n.plugins.toast.showLongBottom(r,function(e){o.resolve(e)},function(e){o.reject(e)}),o.promise},show:function(r,o,t){var i=e.defer();return n.plugins.toast.show(r,o,t,function(e){i.resolve(e)},function(e){i.reject(e)}),i.promise},hide:function(){var r=e.defer();try{n.plugins.toast.hide(),r.resolve()}catch(o){r.reject(o&&o.message)}return r.promise}}}]),angular.module("ngCordova.plugins.touchid",[]).factory("$cordovaTouchID",["$q",function(e){return{checkSupport:function(){var n=e.defer();return window.cordova?touchid.checkSupport(function(e){n.resolve(e)},function(e){n.reject(e)}):n.reject("Not supported without cordova.js"),n.promise},authenticate:function(n){var r=e.defer();return window.cordova?touchid.authenticate(function(e){r.resolve(e)},function(e){r.reject(e)},n):r.reject("Not supported without cordova.js"),r.promise}}}]),angular.module("ngCordova.plugins.upsPush",[]).factory("$cordovaUpsPush",["$q","$window","$rootScope","$timeout",function(e,n,r,o){return{register:function(t){var i=e.defer();return n.push.register(function(e){o(function(){r.$broadcast("$cordovaUpsPush:notificationReceived",e)})},function(){i.resolve()},function(e){i.reject(e)},t),i.promise},unregister:function(r){var o=e.defer();return n.push.unregister(function(){o.resolve()},function(e){o.reject(e)},r),o.promise},setBadgeNumber:function(r){var o=e.defer();return n.push.setApplicationIconBadgeNumber(function(){o.resolve()},r),o.promise}}}]),angular.module("ngCordova.plugins.vibration",[]).factory("$cordovaVibration",[function(){return{vibrate:function(e){return navigator.notification.vibrate(e)},vibrateWithPattern:function(e,n){return navigator.notification.vibrateWithPattern(e,n)},cancelVibration:function(){return navigator.notification.cancelVibration()}}}]),angular.module("ngCordova.plugins.videoCapturePlus",[]).provider("$cordovaVideoCapturePlus",[function(){var e={};this.setLimit=function(n){e.limit=n},this.setMaxDuration=function(n){e.duration=n},this.setHighQuality=function(n){e.highquality=n},this.useFrontCamera=function(n){e.frontcamera=n},this.setPortraitOverlay=function(n){e.portraitOverlay=n},this.setLandscapeOverlay=function(n){e.landscapeOverlay=n},this.setOverlayText=function(n){e.overlayText=n},this.$get=["$q","$window",function(n,r){return{captureVideo:function(o){var t=n.defer();return r.plugins.videocaptureplus?(r.plugins.videocaptureplus.captureVideo(t.resolve,t.reject,angular.extend({},e,o)),t.promise):(t.resolve(null),t.promise)}}}]}]),angular.module("ngCordova.plugins.zip",[]).factory("$cordovaZip",["$q","$window",function(e,n){return{unzip:function(r,o){var t=e.defer();return n.zip.unzip(r,o,function(e){0===e?t.resolve():t.reject()},function(e){t.notify(e)}),t.promise}}}])}();
\ No newline at end of file
diff --git a/www/js/vendor/numeral.en.js b/www/js/vendor/numeral.en.js
deleted file mode 100644
index 8e2d6402bcc01ac04a4f9ead620d38587baff58c..0000000000000000000000000000000000000000
--- a/www/js/vendor/numeral.en.js
+++ /dev/null
@@ -1,26 +0,0 @@
-//! moment.js locale configuration
-//! locale : english (en)
-//! author : Benoit Lavenier : https://github.com/blavenie
-
-(function (global, factory) {
-   typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('./numeral')) :
-   typeof define === 'function' && define.amd ? define(['numeral'], factory) :
-   factory(global.numeral)
-}(this, function (numeral) { 'use strict';
-
-  numeral.language('en', {
-    "delimiters": {
-      "thousands": ",",
-      "decimal": "."
-    },
-    "abbreviations": {
-      "thousand": "<small>x10<sup>3</sup></small>",
-      "million":  "<small>x10<sup>6</sup></small>",
-      "billion":  "<small>x10<sup>9</sup></small>",
-      "trillion": "<small>x10<sup>12</sup></small>"
-    },
-    "currency": {
-      "symbol": "X"
-    }
-  });
-}));
diff --git a/www/js/vendor/numeral.es.js b/www/js/vendor/numeral.es.js
deleted file mode 100644
index 82885185fa168bb52f40e6df4b260d4f7e479ea4..0000000000000000000000000000000000000000
--- a/www/js/vendor/numeral.es.js
+++ /dev/null
@@ -1,47 +0,0 @@
-//! numeral.js locale configuration
-//! locale : spanish (es)
-//! author : Fiatou: https://github.com/fiatou
-
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../numeral')) :
-    typeof define === 'function' && define.amd ? define(['numeral'], factory) :
-      factory(global.numeral)
-}(this, function (numeral) { 'use strict';
-
-  numeral.language('es', {
-    "delimiters": {
-      "thousands": " ",
-      "decimal": ","
-    },
-    "abbreviations": {
-      "thousand": "<small>x10<sup>3</sup></small>",
-      "million":  "<small>x10<sup>6</sup></small>",
-      "billion":  "<small>x10<sup>9</sup></small>",
-      "trillion": "<small>x10<sup>12</sup></small>"
-    },
-    "ordinal": function (number) {
-      switch(number) {
-        case 1:
-          return 'ero';
-        case 2:
-          return 'do';
-        case 3:
-          return 'ro';
-        case 4:
-        case 5:
-        case 6:
-        case 7:
-          return 'to';
-        case 8:
-          return 'vo';
-        case 9:
-          return 'no';
-        default:
-          return 'mo';
-      }
-    },
-    "currency": {
-      "symbol": "X"
-    }
-  });
-}));
diff --git a/www/js/vendor/numeral.fr.js b/www/js/vendor/numeral.fr.js
deleted file mode 100644
index 89679d85949df84fd6aea7122d107a0c210a11fe..0000000000000000000000000000000000000000
--- a/www/js/vendor/numeral.fr.js
+++ /dev/null
@@ -1,29 +0,0 @@
-//! numeral.js locale configuration
-//! locale : french (fr)
-//! author : blavenie: https://github.com/blavenie
-
-(function (global, factory) {
-   typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../numeral')) :
-   typeof define === 'function' && define.amd ? define(['numeral'], factory) :
-   factory(global.numeral)
-}(this, function (numeral) { 'use strict';
-
-  numeral.language('fr', {
-    "delimiters": {
-      "thousands": " ",
-      "decimal": ","
-    },
-    "abbreviations": {
-      "thousand": "x10^3",
-      "million":  "x10^6",
-      "billion":  "x10^9",
-      "trillion": "x10^12"
-    },
-    "ordinal": function (number) {
-      return (number === 1) ? 'er' : 'ième';
-    },
-    "currency": {
-      "symbol": "X"
-    }
-  });
-}));
diff --git a/www/js/vendor/numeral.js b/www/js/vendor/numeral.js
deleted file mode 100644
index 9f46ab65574ea436c29b25880725915cdd9737aa..0000000000000000000000000000000000000000
--- a/www/js/vendor/numeral.js
+++ /dev/null
@@ -1,679 +0,0 @@
-/*!
- * numeral.js
- * version : 1.5.3
- * author : Adam Draper
- * license : MIT
- * http://adamwdraper.github.com/Numeral-js/
- */
-
-(function () {
-
-    /************************************
-        Constants
-    ************************************/
-
-    var numeral,
-        VERSION = '1.5.3',
-        // internal storage for language config files
-        languages = {},
-        currentLanguage = 'en',
-        zeroFormat = null,
-        defaultFormat = '0,0',
-        // check for nodeJS
-        hasModule = (typeof module !== 'undefined' && module.exports);
-
-
-    /************************************
-        Constructors
-    ************************************/
-
-
-    // Numeral prototype object
-    function Numeral (number) {
-        this._value = number;
-    }
-
-    /**
-     * Implementation of toFixed() that treats floats more like decimals
-     *
-     * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present
-     * problems for accounting- and finance-related software.
-     */
-    function toFixed (value, precision, roundingFunction, optionals) {
-        var power = Math.pow(10, precision),
-            optionalsRegExp,
-            output;
-            
-        //roundingFunction = (roundingFunction !== undefined ? roundingFunction : Math.round);
-        // Multiply up by precision, round accurately, then divide and use native toFixed():
-        output = (roundingFunction(value * power) / power).toFixed(precision);
-
-        if (optionals) {
-            optionalsRegExp = new RegExp('0{1,' + optionals + '}$');
-            output = output.replace(optionalsRegExp, '');
-        }
-
-        return output;
-    }
-
-    /************************************
-        Formatting
-    ************************************/
-
-    // determine what type of formatting we need to do
-    function formatNumeral (n, format, roundingFunction) {
-        var output;
-
-        // figure out what kind of format we are dealing with
-        if (format.indexOf('$') > -1) { // currency!!!!!
-            output = formatCurrency(n, format, roundingFunction);
-        } else if (format.indexOf('%') > -1) { // percentage
-            output = formatPercentage(n, format, roundingFunction);
-        } else if (format.indexOf(':') > -1) { // time
-            output = formatTime(n, format);
-        } else { // plain ol' numbers or bytes
-            output = formatNumber(n._value, format, roundingFunction);
-        }
-
-        // return string
-        return output;
-    }
-
-    // revert to number
-    function unformatNumeral (n, string) {
-        var stringOriginal = string,
-            thousandRegExp,
-            millionRegExp,
-            billionRegExp,
-            trillionRegExp,
-            suffixes = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
-            bytesMultiplier = false,
-            power;
-
-        if (string.indexOf(':') > -1) {
-            n._value = unformatTime(string);
-        } else {
-            if (string === zeroFormat) {
-                n._value = 0;
-            } else {
-                if (languages[currentLanguage].delimiters.decimal !== '.') {
-                    string = string.replace(/\./g,'').replace(languages[currentLanguage].delimiters.decimal, '.');
-                }
-
-                // see if abbreviations are there so that we can multiply to the correct number
-                thousandRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.thousand + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$');
-                millionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.million + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$');
-                billionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.billion + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$');
-                trillionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.trillion + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$');
-
-                // see if bytes are there so that we can multiply to the correct number
-                for (power = 0; power <= suffixes.length; power++) {
-                    bytesMultiplier = (string.indexOf(suffixes[power]) > -1) ? Math.pow(1024, power + 1) : false;
-
-                    if (bytesMultiplier) {
-                        break;
-                    }
-                }
-
-                // do some math to create our number
-                n._value = ((bytesMultiplier) ? bytesMultiplier : 1) * ((stringOriginal.match(thousandRegExp)) ? Math.pow(10, 3) : 1) * ((stringOriginal.match(millionRegExp)) ? Math.pow(10, 6) : 1) * ((stringOriginal.match(billionRegExp)) ? Math.pow(10, 9) : 1) * ((stringOriginal.match(trillionRegExp)) ? Math.pow(10, 12) : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * (((string.split('-').length + Math.min(string.split('(').length-1, string.split(')').length-1)) % 2)? 1: -1) * Number(string.replace(/[^0-9\.]+/g, ''));
-
-                // round if we are talking about bytes
-                n._value = (bytesMultiplier) ? Math.ceil(n._value) : n._value;
-            }
-        }
-        return n._value;
-    }
-
-    function formatCurrency (n, format, roundingFunction) {
-        var symbolIndex = format.indexOf('$'),
-            openParenIndex = format.indexOf('('),
-            minusSignIndex = format.indexOf('-'),
-            space = '',
-            spliceIndex,
-            output;
-
-        // check for space before or after currency
-        if (format.indexOf(' $') > -1) {
-            space = ' ';
-            format = format.replace(' $', '');
-        } else if (format.indexOf('$ ') > -1) {
-            space = ' ';
-            format = format.replace('$ ', '');
-        } else {
-            format = format.replace('$', '');
-        }
-
-        // format the number
-        output = formatNumber(n._value, format, roundingFunction);
-
-        // position the symbol
-        if (symbolIndex <= 1) {
-            if (output.indexOf('(') > -1 || output.indexOf('-') > -1) {
-                output = output.split('');
-                spliceIndex = 1;
-                if (symbolIndex < openParenIndex || symbolIndex < minusSignIndex){
-                    // the symbol appears before the "(" or "-"
-                    spliceIndex = 0;
-                }
-                output.splice(spliceIndex, 0, languages[currentLanguage].currency.symbol + space);
-                output = output.join('');
-            } else {
-                output = languages[currentLanguage].currency.symbol + space + output;
-            }
-        } else {
-            if (output.indexOf(')') > -1) {
-                output = output.split('');
-                output.splice(-1, 0, space + languages[currentLanguage].currency.symbol);
-                output = output.join('');
-            } else {
-                output = output + space + languages[currentLanguage].currency.symbol;
-            }
-        }
-
-        return output;
-    }
-
-    function formatPercentage (n, format, roundingFunction) {
-        var space = '',
-            output,
-            value = n._value * 100;
-
-        // check for space before %
-        if (format.indexOf(' %') > -1) {
-            space = ' ';
-            format = format.replace(' %', '');
-        } else {
-            format = format.replace('%', '');
-        }
-
-        output = formatNumber(value, format, roundingFunction);
-        
-        if (output.indexOf(')') > -1 ) {
-            output = output.split('');
-            output.splice(-1, 0, space + '%');
-            output = output.join('');
-        } else {
-            output = output + space + '%';
-        }
-
-        return output;
-    }
-
-    function formatTime (n) {
-        var hours = Math.floor(n._value/60/60),
-            minutes = Math.floor((n._value - (hours * 60 * 60))/60),
-            seconds = Math.round(n._value - (hours * 60 * 60) - (minutes * 60));
-        return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds);
-    }
-
-    function unformatTime (string) {
-        var timeArray = string.split(':'),
-            seconds = 0;
-        // turn hours and minutes into seconds and add them all up
-        if (timeArray.length === 3) {
-            // hours
-            seconds = seconds + (Number(timeArray[0]) * 60 * 60);
-            // minutes
-            seconds = seconds + (Number(timeArray[1]) * 60);
-            // seconds
-            seconds = seconds + Number(timeArray[2]);
-        } else if (timeArray.length === 2) {
-            // minutes
-            seconds = seconds + (Number(timeArray[0]) * 60);
-            // seconds
-            seconds = seconds + Number(timeArray[1]);
-        }
-        return Number(seconds);
-    }
-
-    function formatNumber (value, format, roundingFunction) {
-        var negP = false,
-            signed = false,
-            optDec = false,
-            abbr = '',
-            abbrK = false, // force abbreviation to thousands
-            abbrM = false, // force abbreviation to millions
-            abbrB = false, // force abbreviation to billions
-            abbrT = false, // force abbreviation to trillions
-            abbrForce = false, // force abbreviation
-            bytes = '',
-            ord = '',
-            abs = Math.abs(value),
-            suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
-            min,
-            max,
-            power,
-            w,
-            precision,
-            thousands,
-            d = '',
-            neg = false;
-
-        // check if number is zero and a custom zero format has been set
-        if (value === 0 && zeroFormat !== null) {
-            return zeroFormat;
-        } else {
-            // see if we should use parentheses for negative number or if we should prefix with a sign
-            // if both are present we default to parentheses
-            if (format.indexOf('(') > -1) {
-                negP = true;
-                format = format.slice(1, -1);
-            } else if (format.indexOf('+') > -1) {
-                signed = true;
-                format = format.replace(/\+/g, '');
-            }
-
-            // see if abbreviation is wanted
-            if (format.indexOf('a') > -1) {
-                // check if abbreviation is specified
-                abbrK = format.indexOf('aK') >= 0;
-                abbrM = format.indexOf('aM') >= 0;
-                abbrB = format.indexOf('aB') >= 0;
-                abbrT = format.indexOf('aT') >= 0;
-                abbrForce = abbrK || abbrM || abbrB || abbrT;
-
-                // check for space before abbreviation
-                if (format.indexOf(' a') > -1) {
-                    abbr = ' ';
-                    format = format.replace(' a', '');
-                } else {
-                    format = format.replace('a', '');
-                }
-
-                if (abs >= Math.pow(10, 12) && !abbrForce || abbrT) {
-                    // trillion
-                    abbr = abbr + languages[currentLanguage].abbreviations.trillion;
-                    value = value / Math.pow(10, 12);
-                } else if (abs < Math.pow(10, 12) && abs >= Math.pow(10, 9) && !abbrForce || abbrB) {
-                    // billion
-                    abbr = abbr + languages[currentLanguage].abbreviations.billion;
-                    value = value / Math.pow(10, 9);
-                } else if (abs < Math.pow(10, 9) && abs >= Math.pow(10, 6) && !abbrForce || abbrM) {
-                    // million
-                    abbr = abbr + languages[currentLanguage].abbreviations.million;
-                    value = value / Math.pow(10, 6);
-                } else if (abs < Math.pow(10, 6) && abs >= Math.pow(10, 3) && !abbrForce || abbrK) {
-                    // thousand
-                    abbr = abbr + languages[currentLanguage].abbreviations.thousand;
-                    value = value / Math.pow(10, 3);
-                }
-            }
-
-            // see if we are formatting bytes
-            if (format.indexOf('b') > -1) {
-                // check for space before
-                if (format.indexOf(' b') > -1) {
-                    bytes = ' ';
-                    format = format.replace(' b', '');
-                } else {
-                    format = format.replace('b', '');
-                }
-
-                for (power = 0; power <= suffixes.length; power++) {
-                    min = Math.pow(1024, power);
-                    max = Math.pow(1024, power+1);
-
-                    if (value >= min && value < max) {
-                        bytes = bytes + suffixes[power];
-                        if (min > 0) {
-                            value = value / min;
-                        }
-                        break;
-                    }
-                }
-            }
-
-            // see if ordinal is wanted
-            if (format.indexOf('o') > -1) {
-                // check for space before
-                if (format.indexOf(' o') > -1) {
-                    ord = ' ';
-                    format = format.replace(' o', '');
-                } else {
-                    format = format.replace('o', '');
-                }
-
-                ord = ord + languages[currentLanguage].ordinal(value);
-            }
-
-            if (format.indexOf('[.]') > -1) {
-                optDec = true;
-                format = format.replace('[.]', '.');
-            }
-
-            w = value.toString().split('.')[0];
-            precision = format.split('.')[1];
-            thousands = format.indexOf(',');
-
-            if (precision) {
-                if (precision.indexOf('[') > -1) {
-                    precision = precision.replace(']', '');
-                    precision = precision.split('[');
-                    d = toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length);
-                } else {
-                    d = toFixed(value, precision.length, roundingFunction);
-                }
-
-                w = d.split('.')[0];
-
-                if (d.split('.')[1].length) {
-                    d = languages[currentLanguage].delimiters.decimal + d.split('.')[1];
-                } else {
-                    d = '';
-                }
-
-                if (optDec && Number(d.slice(1)) === 0) {
-                    d = '';
-                }
-            } else {
-                w = toFixed(value, null, roundingFunction);
-            }
-
-            // format number
-            if (w.indexOf('-') > -1) {
-                w = w.slice(1);
-                neg = true;
-            }
-
-            if (thousands > -1) {
-                w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + languages[currentLanguage].delimiters.thousands);
-            }
-
-            if (format.indexOf('.') === 0) {
-                w = '';
-            }
-
-            return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + ((!neg && signed) ? '+' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((bytes) ? bytes : '') + ((negP && neg) ? ')' : '');
-        }
-    }
-
-    /************************************
-        Top Level Functions
-    ************************************/
-
-    numeral = function (input) {
-        if (numeral.isNumeral(input)) {
-            input = input.value();
-        } else if (input === 0 || typeof input === 'undefined') {
-            input = 0;
-        } else if (!Number(input)) {
-            input = numeral.fn.unformat(input);
-        }
-
-        return new Numeral(Number(input));
-    };
-
-    // version number
-    numeral.version = VERSION;
-
-    // compare numeral object
-    numeral.isNumeral = function (obj) {
-        return obj instanceof Numeral;
-    };
-
-    // This function will load languages and then set the global language.  If
-    // no arguments are passed in, it will simply return the current global
-    // language key.
-    numeral.language = function (key, values) {
-        if (!key) {
-            return currentLanguage;
-        }
-
-        if (key && !values) {
-            if(!languages[key]) {
-                throw new Error('Unknown language : ' + key);
-            }
-            currentLanguage = key;
-        }
-
-        if (values || !languages[key]) {
-            loadLanguage(key, values);
-        }
-
-        return numeral;
-    };
-    
-    // This function provides access to the loaded language data.  If
-    // no arguments are passed in, it will simply return the current
-    // global language object.
-    numeral.languageData = function (key) {
-        if (!key) {
-            return languages[currentLanguage];
-        }
-        
-        if (!languages[key]) {
-            throw new Error('Unknown language : ' + key);
-        }
-        
-        return languages[key];
-    };
-
-    numeral.language('en', {
-        delimiters: {
-            thousands: ',',
-            decimal: '.'
-        },
-        abbreviations: {
-            thousand: 'k',
-            million: 'm',
-            billion: 'b',
-            trillion: 't'
-        },
-        ordinal: function (number) {
-            var b = number % 10;
-            return (~~ (number % 100 / 10) === 1) ? 'th' :
-                (b === 1) ? 'st' :
-                (b === 2) ? 'nd' :
-                (b === 3) ? 'rd' : 'th';
-        },
-        currency: {
-            symbol: '$'
-        }
-    });
-
-    numeral.zeroFormat = function (format) {
-        zeroFormat = typeof(format) === 'string' ? format : null;
-    };
-
-    numeral.defaultFormat = function (format) {
-        defaultFormat = typeof(format) === 'string' ? format : '0.0';
-    };
-
-    /************************************
-        Helpers
-    ************************************/
-
-    function loadLanguage(key, values) {
-        languages[key] = values;
-    }
-
-    /************************************
-        Floating-point helpers
-    ************************************/
-
-    // The floating-point helper functions and implementation
-    // borrows heavily from sinful.js: http://guipn.github.io/sinful.js/
-
-    /**
-     * Array.prototype.reduce for browsers that don't support it
-     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Compatibility
-     */
-    if ('function' !== typeof Array.prototype.reduce) {
-        Array.prototype.reduce = function (callback, opt_initialValue) {
-            'use strict';
-            
-            if (null === this || 'undefined' === typeof this) {
-                // At the moment all modern browsers, that support strict mode, have
-                // native implementation of Array.prototype.reduce. For instance, IE8
-                // does not support strict mode, so this check is actually useless.
-                throw new TypeError('Array.prototype.reduce called on null or undefined');
-            }
-            
-            if ('function' !== typeof callback) {
-                throw new TypeError(callback + ' is not a function');
-            }
-
-            var index,
-                value,
-                length = this.length >>> 0,
-                isValueSet = false;
-
-            if (1 < arguments.length) {
-                value = opt_initialValue;
-                isValueSet = true;
-            }
-
-            for (index = 0; length > index; ++index) {
-                if (this.hasOwnProperty(index)) {
-                    if (isValueSet) {
-                        value = callback(value, this[index], index, this);
-                    } else {
-                        value = this[index];
-                        isValueSet = true;
-                    }
-                }
-            }
-
-            if (!isValueSet) {
-                throw new TypeError('Reduce of empty array with no initial value');
-            }
-
-            return value;
-        };
-    }
-
-    
-    /**
-     * Computes the multiplier necessary to make x >= 1,
-     * effectively eliminating miscalculations caused by
-     * finite precision.
-     */
-    function multiplier(x) {
-        var parts = x.toString().split('.');
-        if (parts.length < 2) {
-            return 1;
-        }
-        return Math.pow(10, parts[1].length);
-    }
-
-    /**
-     * Given a variable number of arguments, returns the maximum
-     * multiplier that must be used to normalize an operation involving
-     * all of them.
-     */
-    function correctionFactor() {
-        var args = Array.prototype.slice.call(arguments);
-        return args.reduce(function (prev, next) {
-            var mp = multiplier(prev),
-                mn = multiplier(next);
-        return mp > mn ? mp : mn;
-        }, -Infinity);
-    }        
-
-
-    /************************************
-        Numeral Prototype
-    ************************************/
-
-
-    numeral.fn = Numeral.prototype = {
-
-        clone : function () {
-            return numeral(this);
-        },
-
-        format : function (inputString, roundingFunction) {
-            return formatNumeral(this, 
-                  inputString ? inputString : defaultFormat, 
-                  (roundingFunction !== undefined) ? roundingFunction : Math.round
-              );
-        },
-
-        unformat : function (inputString) {
-            if (Object.prototype.toString.call(inputString) === '[object Number]') { 
-                return inputString; 
-            }
-            return unformatNumeral(this, inputString ? inputString : defaultFormat);
-        },
-
-        value : function () {
-            return this._value;
-        },
-
-        valueOf : function () {
-            return this._value;
-        },
-
-        set : function (value) {
-            this._value = Number(value);
-            return this;
-        },
-
-        add : function (value) {
-            var corrFactor = correctionFactor.call(null, this._value, value);
-            function cback(accum, curr, currI, O) {
-                return accum + corrFactor * curr;
-            }
-            this._value = [this._value, value].reduce(cback, 0) / corrFactor;
-            return this;
-        },
-
-        subtract : function (value) {
-            var corrFactor = correctionFactor.call(null, this._value, value);
-            function cback(accum, curr, currI, O) {
-                return accum - corrFactor * curr;
-            }
-            this._value = [value].reduce(cback, this._value * corrFactor) / corrFactor;            
-            return this;
-        },
-
-        multiply : function (value) {
-            function cback(accum, curr, currI, O) {
-                var corrFactor = correctionFactor(accum, curr);
-                return (accum * corrFactor) * (curr * corrFactor) /
-                    (corrFactor * corrFactor);
-            }
-            this._value = [this._value, value].reduce(cback, 1);
-            return this;
-        },
-
-        divide : function (value) {
-            function cback(accum, curr, currI, O) {
-                var corrFactor = correctionFactor(accum, curr);
-                return (accum * corrFactor) / (curr * corrFactor);
-            }
-            this._value = [this._value, value].reduce(cback);            
-            return this;
-        },
-
-        difference : function (value) {
-            return Math.abs(numeral(this._value).subtract(value).value());
-        }
-
-    };
-
-    /************************************
-        Exposing Numeral
-    ************************************/
-
-    // CommonJS module is defined
-    if (hasModule) {
-        module.exports = numeral;
-    }
-
-    /*global ender:false */
-    if (typeof ender === 'undefined') {
-        // here, `this` means `window` in the browser, or `global` on the server
-        // add `numeral` as a global object via a string identifier,
-        // for Closure Compiler 'advanced' mode
-        this['numeral'] = numeral;
-    }
-
-    /*global define:false */
-    if (typeof define === 'function' && define.amd) {
-        define([], function () {
-            return numeral;
-        });
-    }
-}).call(this);
diff --git a/www/js/vendor/numeral.nl.js b/www/js/vendor/numeral.nl.js
deleted file mode 100644
index f1f704a226a8ee16c212f063d347fde976f9d8ea..0000000000000000000000000000000000000000
--- a/www/js/vendor/numeral.nl.js
+++ /dev/null
@@ -1,27 +0,0 @@
-//! numeral.js locale configuration
-//! locale : dutch (nl)
-//! author : RA van Hagen : https://github.com/RavanH
-
-(function (global, factory) {
-   typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../numeral')) :
-   typeof define === 'function' && define.amd ? define(['numeral'], factory) :
-   factory(global.numeral)
-}(this, function (numeral) { 'use strict';
-
-  numeral.language('nl', {
-    "delimiters": {
-      "thousands": " ",
-      "decimal": ","
-    },
-    "abbreviations": {
-      "thousand": "<small>x10<sup>3</sup></small>",
-      "million":  "<small>x10<sup>6</sup></small>",
-      "billion":  "<small>x10<sup>9</sup></small>",
-      "trillion": "<small>x10<sup>12</sup></small>"
-    },
-    "ordinal": "<sup>e</sup>",
-    "currency": {
-      "symbol": "X"
-    }
-  });
-}));
diff --git a/www/js/vendor/qrcode.min.js b/www/js/vendor/qrcode.min.js
deleted file mode 100644
index 993e88f396640f881b69f98db7a4d17401ef83ca..0000000000000000000000000000000000000000
--- a/www/js/vendor/qrcode.min.js
+++ /dev/null
@@ -1 +0,0 @@
-var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c<a.length&&0==a[c];)c++;this.num=new Array(a.length-c+b);for(var d=0;d<a.length-c;d++)this.num[d]=a[d+c]}function j(a,b){this.totalCount=a,this.dataCount=b}function k(){this.buffer=[],this.length=0}function m(){return"undefined"!=typeof CanvasRenderingContext2D}function n(){var a=!1,b=navigator.userAgent;return/android/i.test(b)&&(a=!0,aMat=b.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(a=parseFloat(aMat[1]))),a}function r(a,b){for(var c=1,e=s(a),f=0,g=l.length;g>=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=new Array(this.moduleCount);for(var e=0;e<this.moduleCount;e++)this.modules[d][e]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(a,c),this.typeNumber>=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f<this.modules.length;f++)for(var g=f*e,h=0;h<this.modules[f].length;h++){var i=h*e,j=this.modules[f][h];j&&(d.beginFill(0,100),d.moveTo(i,g),d.lineTo(i+e,g),d.lineTo(i+e,g+e),d.lineTo(i,g+e),d.endFill())}return d},setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(var b=8;b<this.moduleCount-8;b++)null==this.modules[6][b]&&(this.modules[6][b]=0==b%2)},setupPositionAdjustPattern:function(){for(var a=f.getPatternPosition(this.typeNumber),b=0;b<a.length;b++)for(var c=0;c<a.length;c++){var d=a[b],e=a[c];if(null==this.modules[d][e])for(var g=-2;2>=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g<a.length&&(j=1==(1&a[g]>>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h<d.length;h++){var i=d[h];g.put(i.mode,4),g.put(i.getLength(),f.getLengthInBits(i.mode,a)),i.write(g)}for(var l=0,h=0;h<e.length;h++)l+=e[h].dataCount;if(g.getLengthInBits()>8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j<b.length;j++){var k=b[j].dataCount,l=b[j].totalCount-k;d=Math.max(d,k),e=Math.max(e,l),g[j]=new Array(k);for(var m=0;m<g[j].length;m++)g[j][m]=255&a.buffer[m+c];c+=k;var n=f.getErrorCorrectPolynomial(l),o=new i(g[j],n.getLength()-1),p=o.mod(n);h[j]=new Array(n.getLength()-1);for(var m=0;m<h[j].length;m++){var q=m+p.getLength()-h[j].length;h[j][m]=q>=0?p.get(q):0}}for(var r=0,m=0;m<b.length;m++)r+=b[m].totalCount;for(var s=new Array(r),t=0,m=0;d>m;m++)for(var j=0;j<b.length;j++)m<g[j].length&&(s[t++]=g[j][m]);for(var m=0;e>m;m++)for(var j=0;j<b.length;j++)m<h[j].length&&(s[t++]=h[j][m]);return s};for(var c={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},d={L:1,M:0,Q:3,H:2},e={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},f={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var b=a<<10;f.getBCHDigit(b)-f.getBCHDigit(f.G15)>=0;)b^=f.G15<<f.getBCHDigit(b)-f.getBCHDigit(f.G15);return(a<<10|b)^f.G15_MASK},getBCHTypeNumber:function(a){for(var b=a<<12;f.getBCHDigit(b)-f.getBCHDigit(f.G18)>=0;)b^=f.G18<<f.getBCHDigit(b)-f.getBCHDigit(f.G18);return a<<12|b},getBCHDigit:function(a){for(var b=0;0!=a;)b++,a>>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<<h;for(var h=8;256>h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;c<this.getLength();c++)for(var d=0;d<a.getLength();d++)b[c+d]^=g.gexp(g.glog(this.get(c))+g.glog(a.get(d)));return new i(b,0)},mod:function(a){if(this.getLength()-a.getLength()<0)return this;for(var b=g.glog(this.get(0))-g.glog(a.get(0)),c=new Array(this.getLength()),d=0;d<this.getLength();d++)c[d]=this.get(d);for(var d=0;d<a.getLength();d++)c[d]^=g.gexp(g.glog(a.get(d))+b);return new i(c,0).mod(a)}},j.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],j.getRSBlocks=function(a,b){var c=j.getRsBlockTable(a,b);if(void 0==c)throw new Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+b);for(var d=c.length/3,e=[],f=0;d>f;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=['<table style="border:0;border-collapse:collapse;">'],h=0;d>h;h++){g.push("<tr>");for(var i=0;d>i;i++)g.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:'+e+"px;height:"+f+"px;background-color:"+(a.isDark(h,i)?b.colorDark:b.colorLight)+';"></td>');g.push("</tr>")}g.push("</table>"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}();
\ No newline at end of file
diff --git a/www/js/vendor/scrypt-em.js b/www/js/vendor/scrypt-em.js
deleted file mode 100644
index a98182e62e3580bfa8dfe9ee91c6235720428067..0000000000000000000000000000000000000000
--- a/www/js/vendor/scrypt-em.js
+++ /dev/null
@@ -1,10306 +0,0 @@
-/*
- * #%L
- * uCoinj :: UI Wicket
- * %%
- * Copyright (C) 2014 - 2016 EIS
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the 
- * License, or (at your option) any later version.
- * 
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public 
- * License along with this program.  If not, see
- * <http://www.gnu.org/licenses/gpl-3.0.html>.
- * #L%
- */
-
-
-var scrypt_module_factory = (function (requested_total_memory) {
-    var Module = {TOTAL_MEMORY: (requested_total_memory || 33554432)};
-    var scrypt_raw = Module;
-function g(a) {
-  throw a;
-}
-var k = void 0, l = !0, m = null, p = !1;
-function aa() {
-  return function() {
-  }
-}
-var q, s;
-s || (s = eval("(function() { try { return Module || {} } catch(e) { return {} } })()"));
-var ba = {}, t;
-for(t in s) {
-  s.hasOwnProperty(t) && (ba[t] = s[t])
-}
-var ca = "object" === typeof process && "function" === typeof require, da = "object" === typeof window, ea = "function" === typeof importScripts, fa = !da && !ca && !ea;
-if(ca) {
-  s.print = function(a) {
-    process.stdout.write(a + "\n")
-  };
-  s.printErr = function(a) {
-    process.stderr.write(a + "\n")
-  };
-  var ga = require("fs"), ha = require("path");
-  s.read = function(a, b) {
-    var a = ha.normalize(a), c = ga.readFileSync(a);
-    !c && a != ha.resolve(a) && (a = path.join(__dirname, "..", "src", a), c = ga.readFileSync(a));
-    c && !b && (c = c.toString());
-    return c
-  };
-  s.readBinary = function(a) {
-    return s.read(a, l)
-  };
-  s.load = function(a) {
-    ia(read(a))
-  };
-  s.arguments = process.argv.slice(2);
-  module.ee = s
-}else {
-  fa ? (s.print = print, "undefined" != typeof printErr && (s.printErr = printErr), s.read = read, s.readBinary = function(a) {
-    return read(a, "binary")
-  }, "undefined" != typeof scriptArgs ? s.arguments = scriptArgs : "undefined" != typeof arguments && (s.arguments = arguments), this.Module = s) : da || ea ? (s.read = function(a) {
-    var b = new XMLHttpRequest;
-    b.open("GET", a, p);
-    b.send(m);
-    return b.responseText
-  }, "undefined" != typeof arguments && (s.arguments = arguments), da ? (s.print = function(a) {
-    console.log(a)
-  }, s.printErr = function(a) {
-    console.log(a)
-  }, this.Module = s) : ea && (s.print = aa(), s.load = importScripts)) : g("Unknown runtime environment. Where are we?")
-}
-function ia(a) {
-  eval.call(m, a)
-}
-"undefined" == !s.load && s.read && (s.load = function(a) {
-  ia(s.read(a))
-});
-s.print || (s.print = aa());
-s.printErr || (s.printErr = s.print);
-s.arguments || (s.arguments = []);
-s.print = s.print;
-s.P = s.printErr;
-s.preRun = [];
-s.postRun = [];
-for(t in ba) {
-  ba.hasOwnProperty(t) && (s[t] = ba[t])
-}
-function ja() {
-  return u
-}
-function ka(a) {
-  u = a
-}
-function la(a) {
-  if(1 == ma) {
-    return 1
-  }
-  var b = {"%i1":1, "%i8":1, "%i16":2, "%i32":4, "%i64":8, "%float":4, "%double":8}["%" + a];
-  b || ("*" == a.charAt(a.length - 1) ? b = ma : "i" == a[0] && (a = parseInt(a.substr(1)), w(0 == a % 8), b = a / 8));
-  return b
-}
-function na(a, b, c) {
-  c && c.length ? (c.splice || (c = Array.prototype.slice.call(c)), c.splice(0, 0, b), s["dynCall_" + a].apply(m, c)) : s["dynCall_" + a].call(m, b)
-}
-var oa;
-function pa() {
-  var a = [], b = 0;
-  this.oa = function(c) {
-    c &= 255;
-    b && (a.push(c), b--);
-    if(0 == a.length) {
-      if(128 > c) {
-        return String.fromCharCode(c)
-      }
-      a.push(c);
-      b = 191 < c && 224 > c ? 1 : 2;
-      return""
-    }
-    if(0 < b) {
-      return""
-    }
-    var c = a[0], d = a[1], e = a[2], c = 191 < c && 224 > c ? String.fromCharCode((c & 31) << 6 | d & 63) : String.fromCharCode((c & 15) << 12 | (d & 63) << 6 | e & 63);
-    a.length = 0;
-    return c
-  };
-  this.yb = function(a) {
-    for(var a = unescape(encodeURIComponent(a)), b = [], e = 0;e < a.length;e++) {
-      b.push(a.charCodeAt(e))
-    }
-    return b
-  }
-}
-function qa(a) {
-  var b = u;
-  u = u + a | 0;
-  u = u + 7 >> 3 << 3;
-  return b
-}
-function ra(a) {
-  var b = sa;
-  sa = sa + a | 0;
-  sa = sa + 7 >> 3 << 3;
-  return b
-}
-function ua(a) {
-  var b = z;
-  z = z + a | 0;
-  z = z + 7 >> 3 << 3;
-  z >= va && wa("Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value, or (2) set Module.TOTAL_MEMORY before the program runs.");
-  return b
-}
-function xa(a, b) {
-  return Math.ceil(a / (b ? b : 8)) * (b ? b : 8)
-}
-var ma = 4, ya = {}, za = p, Aa;
-function w(a, b) {
-  a || wa("Assertion failed: " + b)
-}
-s.ccall = function(a, b, c, d) {
-  return Ba(Ca(a), b, c, d)
-};
-function Ca(a) {
-  try {
-    var b = s["_" + a];
-    b || (b = eval("_" + a))
-  }catch(c) {
-  }
-  w(b, "Cannot call unknown function " + a + " (perhaps LLVM optimizations or closure removed it?)");
-  return b
-}
-function Ba(a, b, c, d) {
-  function e(a, b) {
-    if("string" == b) {
-      if(a === m || a === k || 0 === a) {
-        return 0
-      }
-      f || (f = ja());
-      var c = qa(a.length + 1);
-      Da(a, c);
-      return c
-    }
-    return"array" == b ? (f || (f = ja()), c = qa(a.length), Ea(a, c), c) : a
-  }
-  var f = 0, h = 0, d = d ? d.map(function(a) {
-    return e(a, c[h++])
-  }) : [];
-  a = a.apply(m, d);
-  "string" == b ? b = Fa(a) : (w("array" != b), b = a);
-  f && ka(f);
-  return b
-}
-s.cwrap = function(a, b, c) {
-  var d = Ca(a);
-  return function() {
-    return Ba(d, b, c, Array.prototype.slice.call(arguments))
-  }
-};
-function Ga(a, b, c) {
-  c = c || "i8";
-  "*" === c.charAt(c.length - 1) && (c = "i32");
-  switch(c) {
-    case "i1":
-      A[a] = b;
-      break;
-    case "i8":
-      A[a] = b;
-      break;
-    case "i16":
-      Ha[a >> 1] = b;
-      break;
-    case "i32":
-      B[a >> 2] = b;
-      break;
-    case "i64":
-      Aa = [b >>> 0, (Math.min(+Math.floor(b / 4294967296), 4294967295) | 0) >>> 0];
-      B[a >> 2] = Aa[0];
-      B[a + 4 >> 2] = Aa[1];
-      break;
-    case "float":
-      Ia[a >> 2] = b;
-      break;
-    case "double":
-      Ja[a >> 3] = b;
-      break;
-    default:
-      wa("invalid type for setValue: " + c)
-  }
-}
-s.setValue = Ga;
-s.getValue = function(a, b) {
-  b = b || "i8";
-  "*" === b.charAt(b.length - 1) && (b = "i32");
-  switch(b) {
-    case "i1":
-      return A[a];
-    case "i8":
-      return A[a];
-    case "i16":
-      return Ha[a >> 1];
-    case "i32":
-      return B[a >> 2];
-    case "i64":
-      return B[a >> 2];
-    case "float":
-      return Ia[a >> 2];
-    case "double":
-      return Ja[a >> 3];
-    default:
-      wa("invalid type for setValue: " + b)
-  }
-  return m
-};
-var Ka = 0, La = 1, E = 2, Na = 4;
-s.ALLOC_NORMAL = Ka;
-s.ALLOC_STACK = La;
-s.ALLOC_STATIC = E;
-s.ALLOC_DYNAMIC = 3;
-s.ALLOC_NONE = Na;
-function F(a, b, c, d) {
-  var e, f;
-  "number" === typeof a ? (e = l, f = a) : (e = p, f = a.length);
-  var h = "string" === typeof b ? b : m, c = c == Na ? d : [Oa, qa, ra, ua][c === k ? E : c](Math.max(f, h ? 1 : b.length));
-  if(e) {
-    d = c;
-    w(0 == (c & 3));
-    for(a = c + (f & -4);d < a;d += 4) {
-      B[d >> 2] = 0
-    }
-    for(a = c + f;d < a;) {
-      A[d++ | 0] = 0
-    }
-    return c
-  }
-  if("i8" === h) {
-    return a.subarray || a.slice ? G.set(a, c) : G.set(new Uint8Array(a), c), c
-  }
-  for(var d = 0, i, j;d < f;) {
-    var n = a[d];
-    "function" === typeof n && (n = ya.fe(n));
-    e = h || b[d];
-    0 === e ? d++ : ("i64" == e && (e = "i32"), Ga(c + d, n, e), j !== e && (i = la(e), j = e), d += i)
-  }
-  return c
-}
-s.allocate = F;
-function Fa(a, b) {
-  for(var c = p, d, e = 0;;) {
-    d = G[a + e | 0];
-    if(128 <= d) {
-      c = l
-    }else {
-      if(0 == d && !b) {
-        break
-      }
-    }
-    e++;
-    if(b && e == b) {
-      break
-    }
-  }
-  b || (b = e);
-  var f = "";
-  if(!c) {
-    for(;0 < b;) {
-      d = String.fromCharCode.apply(String, G.subarray(a, a + Math.min(b, 1024))), f = f ? f + d : d, a += 1024, b -= 1024
-    }
-    return f
-  }
-  c = new pa;
-  for(e = 0;e < b;e++) {
-    d = G[a + e | 0], f += c.oa(d)
-  }
-  return f
-}
-s.Pointer_stringify = Fa;
-var A, G, Ha, Pa, B, Qa, Ia, Ja, Ra = 0, sa = 0, Sa = 0, u = 0, Ta = 0, Ua = 0, z = 0, va = s.TOTAL_MEMORY || 33554432;
-w(!!Int32Array && !!Float64Array && !!(new Int32Array(1)).subarray && !!(new Int32Array(1)).set, "Cannot fallback to non-typed array case: Code is too specialized");
-var I = new ArrayBuffer(va);
-A = new Int8Array(I);
-Ha = new Int16Array(I);
-B = new Int32Array(I);
-G = new Uint8Array(I);
-Pa = new Uint16Array(I);
-Qa = new Uint32Array(I);
-Ia = new Float32Array(I);
-Ja = new Float64Array(I);
-B[0] = 255;
-w(255 === G[0] && 0 === G[3], "Typed arrays 2 must be run on a little-endian system");
-s.HEAP = k;
-s.HEAP8 = A;
-s.HEAP16 = Ha;
-s.HEAP32 = B;
-s.HEAPU8 = G;
-s.HEAPU16 = Pa;
-s.HEAPU32 = Qa;
-s.HEAPF32 = Ia;
-s.HEAPF64 = Ja;
-function Va(a) {
-  for(;0 < a.length;) {
-    var b = a.shift();
-    if("function" == typeof b) {
-      b()
-    }else {
-      var c = b.V;
-      "number" === typeof c ? b.ha === k ? na("v", c) : na("vi", c, [b.ha]) : c(b.ha === k ? m : b.ha)
-    }
-  }
-}
-var Wa = [], Xa = [], Ya = [], Za = [], $a = [], ab = p;
-function bb(a) {
-  Wa.unshift(a)
-}
-s.addOnPreRun = s.Vd = bb;
-s.addOnInit = s.Sd = function(a) {
-  Xa.unshift(a)
-};
-s.addOnPreMain = s.Ud = function(a) {
-  Ya.unshift(a)
-};
-s.addOnExit = s.Rd = function(a) {
-  Za.unshift(a)
-};
-function cb(a) {
-  $a.unshift(a)
-}
-s.addOnPostRun = s.Td = cb;
-function J(a, b, c) {
-  a = (new pa).yb(a);
-  c && (a.length = c);
-  b || a.push(0);
-  return a
-}
-s.intArrayFromString = J;
-s.intArrayToString = function(a) {
-  for(var b = [], c = 0;c < a.length;c++) {
-    var d = a[c];
-    255 < d && (d &= 255);
-    b.push(String.fromCharCode(d))
-  }
-  return b.join("")
-};
-function Da(a, b, c) {
-  a = J(a, c);
-  for(c = 0;c < a.length;) {
-    A[b + c | 0] = a[c], c += 1
-  }
-}
-s.writeStringToMemory = Da;
-function Ea(a, b) {
-  for(var c = 0;c < a.length;c++) {
-    A[b + c | 0] = a[c]
-  }
-}
-s.writeArrayToMemory = Ea;
-function db(a, b) {
-  return 0 <= a ? a : 32 >= b ? 2 * Math.abs(1 << b - 1) + a : Math.pow(2, b) + a
-}
-function eb(a, b) {
-  if(0 >= a) {
-    return a
-  }
-  var c = 32 >= b ? Math.abs(1 << b - 1) : Math.pow(2, b - 1);
-  if(a >= c && (32 >= b || a > c)) {
-    a = -2 * c + a
-  }
-  return a
-}
-Math.imul || (Math.imul = function(a, b) {
-  var c = a & 65535, d = b & 65535;
-  return c * d + ((a >>> 16) * d + c * (b >>> 16) << 16) | 0
-});
-Math.ie = Math.imul;
-var L = 0, fb = {}, gb = p, hb = m;
-function ib(a) {
-  L++;
-  s.monitorRunDependencies && s.monitorRunDependencies(L);
-  a ? (w(!fb[a]), fb[a] = 1) : s.P("warning: run dependency added without ID")
-}
-s.addRunDependency = ib;
-function jb(a) {
-  L--;
-  s.monitorRunDependencies && s.monitorRunDependencies(L);
-  a ? (w(fb[a]), delete fb[a]) : s.P("warning: run dependency removed without ID");
-  0 == L && (hb !== m && (clearInterval(hb), hb = m), !gb && kb && lb())
-}
-s.removeRunDependency = jb;
-s.preloadedImages = {};
-s.preloadedAudios = {};
-Ra = 8;
-sa = Ra + 1312;
-Xa.push({V:function() {
-  mb()
-}});
-var nb, ob, pb;
-nb = nb = F([0, 0, 0, 0, 0, 0, 0, 0], "i8", E);
-ob = ob = F([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "i8", E);
-pb = pb = F([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "i8", E);
-F([111, 112, 116, 105, 111, 110, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 97, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 45, 45, 32, 37, 115, 0, 0, 0, 0, 0, 0, 0, 111, 112, 116, 105, 111, 110, 32, 114, 101, 113, 117, 105, 114, 101, 115, 32, 97, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 45, 45, 32, 37, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 64, 0, 0, 0, 0, 0, 0, 89, 64, 0, 0, 0, 0, 0, 136, 195, 64, 0, 0, 0, 0, 132, 215, 151, 65, 0, 128, 224, 55, 121, 195, 65, 67,
-23, 110, 5, 181, 181, 184, 147, 70, 245, 249, 63, 233, 3, 79, 56, 77, 50, 29, 48, 249, 72, 119, 130, 90, 60, 191, 115, 127, 221, 79, 21, 117, 56, 3, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 111, 112, 116, 105, 111, 110, 32, 100, 111, 101, 115, 110, 39, 116, 32, 116, 97, 107, 101, 32, 97, 110, 32, 97, 114, 103, 117, 109, 101, 110, 116, 32, 45, 45, 32, 37, 46, 42, 115, 0, 117, 110, 107,
-110, 111, 119, 110, 32, 111, 112, 116, 105, 111, 110, 32, 45, 45, 32, 37, 115, 0, 0, 0, 0, 117, 110, 107, 110, 111, 119, 110, 32, 111, 112, 116, 105, 111, 110, 32, 45, 45, 32, 37, 99, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 97, 109, 98, 105, 103, 117, 111, 117, 115, 32, 111, 112, 116, 105, 111, 110, 32, 45, 45, 32, 37, 46, 42, 115, 0, 0, 0, 0, 0, 0, 0, 0, 37, 115, 58, 32, 0, 0, 0, 0, 80, 79, 83, 73, 88, 76, 89, 95, 67, 79, 82, 82, 69, 67, 84, 0, 115, 116, 100, 58, 58, 98, 97, 100, 95, 97, 108,
-108, 111, 99, 0, 0, 37, 115, 58, 32, 0, 0, 0, 0, 37, 115, 10, 0, 0, 0, 0, 0, 37, 115, 10, 0, 0, 0, 0, 0, 105, 110, 32, 117, 115, 101, 32, 98, 121, 116, 101, 115, 32, 32, 32, 32, 32, 61, 32, 37, 49, 48, 108, 117, 10, 0, 0, 0, 0, 0, 0, 0, 37, 115, 58, 32, 0, 0, 0, 0, 37, 115, 58, 32, 0, 0, 0, 0, 98, 97, 100, 95, 97, 114, 114, 97, 121, 95, 110, 101, 119, 95, 108, 101, 110, 103, 116, 104, 0, 0, 0, 0, 58, 32, 0, 0, 0, 0, 0, 0, 58, 32, 0, 0, 0, 0, 0, 0, 115, 121, 115, 116, 101, 109, 32, 98, 121, 116, 101,
-115, 32, 32, 32, 32, 32, 61, 32, 37, 49, 48, 108, 117, 10, 0, 0, 0, 0, 0, 0, 0, 109, 97, 120, 32, 115, 121, 115, 116, 101, 109, 32, 98, 121, 116, 101, 115, 32, 61, 32, 37, 49, 48, 108, 117, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 2, 0, 0, 6, 0, 0, 0, 10, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 2, 0, 0, 6, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 116, 57, 101, 120, 99, 101, 112, 116, 105, 111, 110, 0, 0, 0, 0, 83, 116, 57, 98, 97,
-100, 95, 97, 108, 108, 111, 99, 0, 0, 0, 0, 83, 116, 50, 48, 98, 97, 100, 95, 97, 114, 114, 97, 121, 95, 110, 101, 119, 95, 108, 101, 110, 103, 116, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 2, 0, 0, 0, 0, 0, 0, 120, 2, 0, 0, 168, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 2, 0, 0, 176, 2, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
-"i8", Na, 8);
-var qb = xa(F(12, "i8", E), 8);
-w(0 == qb % 8);
-var rb = 0;
-function M(a) {
-  return B[rb >> 2] = a
-}
-s._memcpy = sb;
-s._memset = tb;
-var N = {L:1, ca:2, Bd:3, sc:4, I:5, za:6, Jb:7, Sc:8, $:9, Zb:10, ua:11, Ld:11, $a:12, Ya:13, kc:14, ed:15, Wb:16, va:17, Md:18, wa:19, gd:20, aa:21, A:22, Mc:23, Za:24, ld:25, Id:26, lc:27, ad:28, da:29, yd:30, Fc:31, rd:32, hc:33, ab:34, Wc:35, pc:36, $b:37, vc:38, wc:39, xc:40, Ec:41, Jd:42, Qc:43, uc:44, ec:45, Tc:46, Pb:50, Sb:51, Nd:52, Oc:53, Tb:54, Ub:55, fc:56, Vb:57, cd:60, Rc:61, Fd:62, bd:63, Xc:64, Yc:65, xd:66, Uc:67, Mb:68, Cd:69, ac:70, td:71, Hc:74, yc:75, ic:76, Rb:77, mc:79, md:80,
-Qb:81, wd:82, zc:83, Ac:84, Dc:85, Cc:86, Bc:87, dd:88, Nc:89, ya:90, Ic:91, ba:92, nd:95, qd:96, dc:104, Pc:105, Nb:106, vd:107, jd:108, Zc:109, zd:110, cc:111, Kb:112, bc:113, Lc:114, Jc:115, Gd:116, nc:117, oc:118, rc:119, Ob:120, gc:121, Gc:122, ud:123, Ad:124, Lb:125, Kc:126, tc:127, fd:128, Hd:129, sd:130, Kd:131, jc:132, Dd:133, kd:134, Vc:135, $c:136, Yb:137, qc:138, od:139, Xb:140, hd:141, pd:142, Ed:143}, ub = {"0":"Success", 1:"Not super-user", 2:"No such file or directory", 3:"No such process",
-4:"Interrupted system call", 5:"I/O error", 6:"No such device or address", 7:"Arg list too long", 8:"Exec format error", 9:"Bad file number", 10:"No children", 11:"No more processes", 12:"Not enough core", 13:"Permission denied", 14:"Bad address", 15:"Block device required", 16:"Mount device busy", 17:"File exists", 18:"Cross-device link", 19:"No such device", 20:"Not a directory", 21:"Is a directory", 22:"Invalid argument", 23:"Too many open files in system", 24:"Too many open files", 25:"Not a typewriter",
-26:"Text file busy", 27:"File too large", 28:"No space left on device", 29:"Illegal seek", 30:"Read only file system", 31:"Too many links", 32:"Broken pipe", 33:"Math arg out of domain of func", 34:"Math result not representable", 35:"No message of desired type", 36:"Identifier removed", 37:"Channel number out of range", 38:"Level 2 not synchronized", 39:"Level 3 halted", 40:"Level 3 reset", 41:"Link number out of range", 42:"Protocol driver not attached", 43:"No CSI structure available", 44:"Level 2 halted",
-45:"Deadlock condition", 46:"No record locks available", 50:"Invalid exchange", 51:"Invalid request descriptor", 52:"Exchange full", 53:"No anode", 54:"Invalid request code", 55:"Invalid slot", 56:"File locking deadlock error", 57:"Bad font file fmt", 60:"Device not a stream", 61:"No data (for no delay io)", 62:"Timer expired", 63:"Out of streams resources", 64:"Machine is not on the network", 65:"Package not installed", 66:"The object is remote", 67:"The link has been severed", 68:"Advertise error",
-69:"Srmount error", 70:"Communication error on send", 71:"Protocol error", 74:"Multihop attempted", 75:"Inode is remote (not really error)", 76:"Cross mount point (not really error)", 77:"Trying to read unreadable message", 79:"Inappropriate file type or format", 80:"Given log. name not unique", 81:"f.d. invalid for this operation", 82:"Remote address changed", 83:"Can\t access a needed shared lib", 84:"Accessing a corrupted shared lib", 85:".lib section in a.out corrupted", 86:"Attempting to link in too many libs",
-87:"Attempting to exec a shared library", 88:"Function not implemented", 89:"No more files", 90:"Directory not empty", 91:"File or path name too long", 92:"Too many symbolic links", 95:"Operation not supported on transport endpoint", 96:"Protocol family not supported", 104:"Connection reset by peer", 105:"No buffer space available", 106:"Address family not supported by protocol family", 107:"Protocol wrong type for socket", 108:"Socket operation on non-socket", 109:"Protocol not available", 110:"Can't send after socket shutdown",
-111:"Connection refused", 112:"Address already in use", 113:"Connection aborted", 114:"Network is unreachable", 115:"Network interface is not configured", 116:"Connection timed out", 117:"Host is down", 118:"Host is unreachable", 119:"Connection already in progress", 120:"Socket already connected", 121:"Destination address required", 122:"Message too long", 123:"Unknown protocol", 124:"Socket type not supported", 125:"Address not available", 126:"ENETRESET", 127:"Socket is already connected", 128:"Socket is not connected",
-129:"TOOMANYREFS", 130:"EPROCLIM", 131:"EUSERS", 132:"EDQUOT", 133:"ESTALE", 134:"Not supported", 135:"No medium (in tape drive)", 136:"No such host or network path", 137:"Filename exists with different case", 138:"EILSEQ", 139:"Value too large for defined data type", 140:"Operation canceled", 141:"State not recoverable", 142:"Previous owner died", 143:"Streams pipe error"};
-function vb(a, b, c) {
-  var d = O(a, {parent:l}).d, a = "/" === a ? "/" : wb(a)[2], e = xb(d, a);
-  e && g(new Q(e));
-  d.l.Ta || g(new Q(N.L));
-  return d.l.Ta(d, a, b, c)
-}
-function yb(a, b) {
-  b = b & 4095 | 32768;
-  return vb(a, b, 0)
-}
-function zb(a, b) {
-  b = b & 1023 | 16384;
-  return vb(a, b, 0)
-}
-function Ab(a, b, c) {
-  return vb(a, b | 8192, c)
-}
-function Bb(a, b) {
-  var c = O(b, {parent:l}).d, d = "/" === b ? "/" : wb(b)[2], e = xb(c, d);
-  e && g(new Q(e));
-  c.l.Wa || g(new Q(N.L));
-  return c.l.Wa(c, d, a)
-}
-function Cb(a, b) {
-  var c;
-  c = "string" === typeof a ? O(a, {N:l}).d : a;
-  c.l.Y || g(new Q(N.L));
-  c.l.Y(c, {mode:b & 4095 | c.mode & -4096, timestamp:Date.now()})
-}
-function Db(a, b) {
-  var c, a = Eb(a), d;
-  "string" === typeof b ? (d = Fb[b], "undefined" === typeof d && g(Error("Unknown file open mode: " + b))) : d = b;
-  b = d;
-  c = b & 512 ? c & 4095 | 32768 : 0;
-  var e;
-  try {
-    var f = O(a, {N:!(b & 65536)});
-    e = f.d;
-    a = f.path
-  }catch(h) {
-  }
-  b & 512 && (e ? b & 2048 && g(new Q(N.va)) : e = vb(a, c, 0));
-  e || g(new Q(N.ca));
-  8192 === (e.mode & 61440) && (b &= -1025);
-  e ? 40960 === (e.mode & 61440) ? c = N.ba : 16384 === (e.mode & 61440) && (0 !== (b & 3) || b & 1024) ? c = N.aa : (c = ["r", "w", "rw"][b & 3], b & 1024 && (c += "w"), c = Gb(e, c)) : c = N.ca;
-  c && g(new Q(c));
-  b & 1024 && (c = e, c = "string" === typeof c ? O(c, {N:l}).d : c, c.l.Y || g(new Q(N.L)), 16384 === (c.mode & 61440) && g(new Q(N.aa)), 32768 !== (c.mode & 61440) && g(new Q(N.A)), (f = Gb(c, "w")) && g(new Q(f)), c.l.Y(c, {size:0, timestamp:Date.now()}));
-  var i = {path:a, d:e, M:b, seekable:l, position:0, e:e.e, Gb:[], error:p}, j;
-  a: {
-    e = k || 4096;
-    for(c = k || 1;c <= e;c++) {
-      if(!R[c]) {
-        j = c;
-        break a
-      }
-    }
-    g(new Q(N.Za))
-  }
-  i.s = j;
-  Object.defineProperty(i, "object", {get:function() {
-    return i.d
-  }, set:function(a) {
-    i.d = a
-  }});
-  Object.defineProperty(i, "isRead", {get:function() {
-    return 1 !== (i.M & 3)
-  }});
-  Object.defineProperty(i, "isWrite", {get:function() {
-    return 0 !== (i.M & 3)
-  }});
-  Object.defineProperty(i, "isAppend", {get:function() {
-    return i.M & 8
-  }});
-  R[j] = i;
-  i.e.open && i.e.open(i);
-  return i
-}
-function Hb(a) {
-  try {
-    a.e.close && a.e.close(a)
-  }catch(b) {
-    g(b)
-  }finally {
-    R[a.s] = m
-  }
-}
-function Ib(a, b, c, d, e) {
-  (0 > d || 0 > e) && g(new Q(N.A));
-  0 === (a.M & 3) && g(new Q(N.$));
-  16384 === (a.d.mode & 61440) && g(new Q(N.aa));
-  a.e.write || g(new Q(N.A));
-  var f = l;
-  "undefined" === typeof e ? (e = a.position, f = p) : a.seekable || g(new Q(N.da));
-  a.M & 8 && ((!a.seekable || !a.e.na) && g(new Q(N.da)), a.e.na(a, 0, 2));
-  b = a.e.write(a, b, c, d, e);
-  f || (a.position += b);
-  return b
-}
-function wb(a) {
-  return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1)
-}
-function Jb(a, b) {
-  for(var c = 0, d = a.length - 1;0 <= d;d--) {
-    var e = a[d];
-    "." === e ? a.splice(d, 1) : ".." === e ? (a.splice(d, 1), c++) : c && (a.splice(d, 1), c--)
-  }
-  if(b) {
-    for(;c--;c) {
-      a.unshift("..")
-    }
-  }
-  return a
-}
-function Eb(a) {
-  var b = "/" === a.charAt(0), c = "/" === a.substr(-1), a = Jb(a.split("/").filter(function(a) {
-    return!!a
-  }), !b).join("/");
-  !a && !b && (a = ".");
-  a && c && (a += "/");
-  return(b ? "/" : "") + a
-}
-function S() {
-  var a = Array.prototype.slice.call(arguments, 0);
-  return Eb(a.filter(function(a) {
-    "string" !== typeof a && g(new TypeError("Arguments to path.join must be strings"));
-    return a
-  }).join("/"))
-}
-function Kb() {
-  for(var a = "", b = p, c = arguments.length - 1;-1 <= c && !b;c--) {
-    var d = 0 <= c ? arguments[c] : "/";
-    "string" !== typeof d && g(new TypeError("Arguments to path.resolve must be strings"));
-    d && (a = d + "/" + a, b = "/" === d.charAt(0))
-  }
-  a = Jb(a.split("/").filter(function(a) {
-    return!!a
-  }), !b).join("/");
-  return(b ? "/" : "") + a || "."
-}
-var Lb = [];
-function Mb(a, b) {
-  Lb[a] = {input:[], H:[], O:b};
-  Nb[a] = {e:Ob}
-}
-var Ob = {open:function(a) {
-  Pb || (Pb = new pa);
-  var b = Lb[a.d.X];
-  b || g(new Q(N.wa));
-  a.q = b;
-  a.seekable = p
-}, close:function(a) {
-  a.q.H.length && a.q.O.W(a.q, 10)
-}, Q:function(a, b, c, d) {
-  (!a.q || !a.q.O.Na) && g(new Q(N.za));
-  for(var e = 0, f = 0;f < d;f++) {
-    var h;
-    try {
-      h = a.q.O.Na(a.q)
-    }catch(i) {
-      g(new Q(N.I))
-    }
-    h === k && 0 === e && g(new Q(N.ua));
-    if(h === m || h === k) {
-      break
-    }
-    e++;
-    b[c + f] = h
-  }
-  e && (a.d.timestamp = Date.now());
-  return e
-}, write:function(a, b, c, d) {
-  (!a.q || !a.q.O.W) && g(new Q(N.za));
-  for(var e = 0;e < d;e++) {
-    try {
-      a.q.O.W(a.q, b[c + e])
-    }catch(f) {
-      g(new Q(N.I))
-    }
-  }
-  d && (a.d.timestamp = Date.now());
-  return e
-}}, Pb, T = {z:function() {
-  return T.ka(m, "/", 16895, 0)
-}, ka:function(a, b, c, d) {
-  (24576 === (c & 61440) || 4096 === (c & 61440)) && g(new Q(N.L));
-  c = Qb(a, b, c, d);
-  c.l = T.l;
-  16384 === (c.mode & 61440) ? (c.e = T.e, c.g = {}) : 32768 === (c.mode & 61440) ? (c.e = T.e, c.g = []) : 40960 === (c.mode & 61440) ? c.e = T.e : 8192 === (c.mode & 61440) && (c.e = Rb);
-  c.timestamp = Date.now();
-  a && (a.g[b] = c);
-  return c
-}, l:{ge:function(a) {
-  var b = {};
-  b.ce = 8192 === (a.mode & 61440) ? a.id : 1;
-  b.je = a.id;
-  b.mode = a.mode;
-  b.pe = 1;
-  b.uid = 0;
-  b.he = 0;
-  b.X = a.X;
-  b.size = 16384 === (a.mode & 61440) ? 4096 : 32768 === (a.mode & 61440) ? a.g.length : 40960 === (a.mode & 61440) ? a.link.length : 0;
-  b.Yd = new Date(a.timestamp);
-  b.oe = new Date(a.timestamp);
-  b.ae = new Date(a.timestamp);
-  b.ib = 4096;
-  b.Zd = Math.ceil(b.size / b.ib);
-  return b
-}, Y:function(a, b) {
-  b.mode !== k && (a.mode = b.mode);
-  b.timestamp !== k && (a.timestamp = b.timestamp);
-  if(b.size !== k) {
-    var c = a.g;
-    if(b.size < c.length) {
-      c.length = b.size
-    }else {
-      for(;b.size > c.length;) {
-        c.push(0)
-      }
-    }
-  }
-}, tb:function() {
-  g(new Q(N.ca))
-}, Ta:function(a, b, c, d) {
-  return T.ka(a, b, c, d)
-}, rename:function(a, b, c) {
-  if(16384 === (a.mode & 61440)) {
-    var d;
-    try {
-      d = Sb(b, c)
-    }catch(e) {
-    }
-    if(d) {
-      for(var f in d.g) {
-        g(new Q(N.ya))
-      }
-    }
-  }
-  delete a.parent.g[a.name];
-  a.name = c;
-  b.g[c] = a
-}, ze:function(a, b) {
-  delete a.g[b]
-}, ve:function(a, b) {
-  var c = Sb(a, b), d;
-  for(d in c.g) {
-    g(new Q(N.ya))
-  }
-  delete a.g[b]
-}, Wa:function(a, b, c) {
-  a = T.ka(a, b, 41471, 0);
-  a.link = c;
-  return a
-}, Va:function(a) {
-  40960 !== (a.mode & 61440) && g(new Q(N.A));
-  return a.link
-}}, e:{open:function(a) {
-  if(16384 === (a.d.mode & 61440)) {
-    var b = [".", ".."], c;
-    for(c in a.d.g) {
-      a.d.g.hasOwnProperty(c) && b.push(c)
-    }
-    a.lb = b
-  }
-}, Q:function(a, b, c, d, e) {
-  a = a.d.g;
-  d = Math.min(a.length - e, d);
-  if(a.subarray) {
-    b.set(a.subarray(e, e + d), c)
-  }else {
-    for(var f = 0;f < d;f++) {
-      b[c + f] = a[e + f]
-    }
-  }
-  return d
-}, write:function(a, b, c, d, e) {
-  for(var f = a.d.g;f.length < e;) {
-    f.push(0)
-  }
-  for(var h = 0;h < d;h++) {
-    f[e + h] = b[c + h]
-  }
-  a.d.timestamp = Date.now();
-  return d
-}, na:function(a, b, c) {
-  1 === c ? b += a.position : 2 === c && 32768 === (a.d.mode & 61440) && (b += a.d.g.length);
-  0 > b && g(new Q(N.A));
-  a.Gb = [];
-  return a.position = b
-}, ue:function(a) {
-  return a.lb
-}, Wd:function(a, b, c) {
-  a = a.d.g;
-  for(b += c;b > a.length;) {
-    a.push(0)
-  }
-}, ne:function(a, b, c, d, e, f, h) {
-  32768 !== (a.d.mode & 61440) && g(new Q(N.wa));
-  a = a.d.g;
-  if(h & 2) {
-    if(0 < e || e + d < a.length) {
-      a = a.subarray ? a.subarray(e, e + d) : Array.prototype.slice.call(a, e, e + d)
-    }
-    e = l;
-    (d = Oa(d)) || g(new Q(N.$a));
-    b.set(a, d)
-  }else {
-    w(a.buffer === b || a.buffer === b.buffer), e = p, d = a.byteOffset
-  }
-  return{te:d, Xd:e}
-}}}, Tb = F(1, "i32*", E), Ub = F(1, "i32*", E);
-nb = F(1, "i32*", E);
-var Vb = m, Nb = [m], R = [m], Wb = 1, Xb = [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ], Yb = l;
-function Q(a) {
-  this.mb = a;
-  for(var b in N) {
-    if(N[b] === a) {
-      this.code = b;
-      break
-    }
-  }
-  this.message = ub[a]
-}
-function Zb(a) {
-  a instanceof Q || g(a + " : " + Error().stack);
-  M(a.mb)
-}
-function $b(a, b) {
-  for(var c = 0, d = 0;d < b.length;d++) {
-    c = (c << 5) - c + b.charCodeAt(d) | 0
-  }
-  return(a + c) % Xb.length
-}
-function Sb(a, b) {
-  var c = Gb(a, "x");
-  c && g(new Q(c));
-  for(c = Xb[$b(a.id, b)];c;c = c.wb) {
-    if(c.parent.id === a.id && c.name === b) {
-      return c
-    }
-  }
-  return a.l.tb(a, b)
-}
-function Qb(a, b, c, d) {
-  var e = {id:Wb++, name:b, mode:c, l:{}, e:{}, X:d, parent:m, z:m};
-  a || (a = e);
-  e.parent = a;
-  e.z = a.z;
-  Object.defineProperty(e, "read", {get:function() {
-    return 365 === (e.mode & 365)
-  }, set:function(a) {
-    a ? e.mode |= 365 : e.mode &= -366
-  }});
-  Object.defineProperty(e, "write", {get:function() {
-    return 146 === (e.mode & 146)
-  }, set:function(a) {
-    a ? e.mode |= 146 : e.mode &= -147
-  }});
-  a = $b(e.parent.id, e.name);
-  e.wb = Xb[a];
-  return Xb[a] = e
-}
-function O(a, b) {
-  a = Kb("/", a);
-  b = b || {pa:0};
-  8 < b.pa && g(new Q(N.ba));
-  for(var c = Jb(a.split("/").filter(function(a) {
-    return!!a
-  }), p), d = Vb, e = "/", f = 0;f < c.length;f++) {
-    var h = f === c.length - 1;
-    if(h && b.parent) {
-      break
-    }
-    d = Sb(d, c[f]);
-    e = S(e, c[f]);
-    d.ub && (d = d.z.root);
-    if(!h || b.N) {
-      for(h = 0;40960 === (d.mode & 61440);) {
-        d = O(e, {N:p}).d;
-        d.l.Va || g(new Q(N.A));
-        var d = d.l.Va(d), i = Kb;
-        var j = wb(e), e = j[0], j = j[1];
-        !e && !j ? e = "." : (j && (j = j.substr(0, j.length - 1)), e += j);
-        e = i(e, d);
-        d = O(e, {pa:b.pa}).d;
-        40 < h++ && g(new Q(N.ba))
-      }
-    }
-  }
-  return{path:e, d:d}
-}
-function ac(a) {
-  for(var b;;) {
-    if(a === a.parent) {
-      return b ? S(a.z.Ua, b) : a.z.Ua
-    }
-    b = b ? S(a.name, b) : a.name;
-    a = a.parent
-  }
-}
-var Fb = {r:0, rs:8192, "r+":2, w:1537, wx:3585, xw:3585, "w+":1538, "wx+":3586, "xw+":3586, a:521, ax:2569, xa:2569, "a+":522, "ax+":2570, "xa+":2570};
-function Gb(a, b) {
-  return Yb ? 0 : -1 !== b.indexOf("r") && !(a.mode & 292) || -1 !== b.indexOf("w") && !(a.mode & 146) || -1 !== b.indexOf("x") && !(a.mode & 73) ? N.Ya : 0
-}
-function xb(a, b) {
-  try {
-    return Sb(a, b), N.va
-  }catch(c) {
-  }
-  return Gb(a, "wx")
-}
-var Rb = {open:function(a) {
-  a.e = Nb[a.d.X].e;
-  a.e.open && a.e.open(a)
-}, na:function() {
-  g(new Q(N.da))
-}}, bc;
-function cc(a, b) {
-  var c = 0;
-  a && (c |= 365);
-  b && (c |= 146);
-  return c
-}
-function dc(a, b, c, d, e) {
-  a = S("string" === typeof a ? a : ac(a), b);
-  d = cc(d, e);
-  e = yb(a, d);
-  if(c) {
-    if("string" === typeof c) {
-      for(var b = Array(c.length), f = 0, h = c.length;f < h;++f) {
-        b[f] = c.charCodeAt(f)
-      }
-      c = b
-    }
-    Cb(a, d | 146);
-    b = Db(a, "w");
-    Ib(b, c, 0, c.length, 0);
-    Hb(b);
-    Cb(a, d)
-  }
-  return e
-}
-function ec(a, b, c, d) {
-  a = S("string" === typeof a ? a : ac(a), b);
-  ec.Sa || (ec.Sa = 64);
-  b = ec.Sa++ << 8 | 0;
-  Nb[b] = {e:{open:function(a) {
-    a.seekable = p
-  }, close:function() {
-    d && (d.buffer && d.buffer.length) && d(10)
-  }, Q:function(a, b, d, i) {
-    for(var j = 0, n = 0;n < i;n++) {
-      var y;
-      try {
-        y = c()
-      }catch(v) {
-        g(new Q(N.I))
-      }
-      y === k && 0 === j && g(new Q(N.ua));
-      if(y === m || y === k) {
-        break
-      }
-      j++;
-      b[d + n] = y
-    }
-    j && (a.d.timestamp = Date.now());
-    return j
-  }, write:function(a, b, c, i) {
-    for(var j = 0;j < i;j++) {
-      try {
-        d(b[c + j])
-      }catch(n) {
-        g(new Q(N.I))
-      }
-    }
-    i && (a.d.timestamp = Date.now());
-    return j
-  }}};
-  return Ab(a, c && d ? 511 : c ? 219 : 365, b)
-}
-function fc(a, b, c) {
-  a = R[a];
-  if(!a) {
-    return-1
-  }
-  a.sender(G.subarray(b, b + c));
-  return c
-}
-function gc(a, b, c) {
-  var d = R[a];
-  if(!d) {
-    return M(N.$), -1
-  }
-  if(d && "socket" in d) {
-    return fc(a, b, c)
-  }
-  try {
-    return Ib(d, A, b, c)
-  }catch(e) {
-    return Zb(e), -1
-  }
-}
-function hc(a, b, c, d) {
-  c *= b;
-  if(0 == c) {
-    return 0
-  }
-  a = gc(d, a, c);
-  if(-1 == a) {
-    if(b = R[d]) {
-      b.error = l
-    }
-    return 0
-  }
-  return Math.floor(a / b)
-}
-s._strlen = ic;
-function jc(a) {
-  return 0 > a || 0 === a && -Infinity === 1 / a
-}
-function kc(a, b) {
-  function c(a) {
-    var c;
-    "double" === a ? c = Ja[b + e >> 3] : "i64" == a ? (c = [B[b + e >> 2], B[b + (e + 8) >> 2]], e += 8) : (a = "i32", c = B[b + e >> 2]);
-    e += Math.max(Math.max(la(a), ma), 8);
-    return c
-  }
-  for(var d = a, e = 0, f = [], h, i;;) {
-    var j = d;
-    h = A[d];
-    if(0 === h) {
-      break
-    }
-    i = A[d + 1 | 0];
-    if(37 == h) {
-      var n = p, y = p, v = p, C = p;
-      a:for(;;) {
-        switch(i) {
-          case 43:
-            n = l;
-            break;
-          case 45:
-            y = l;
-            break;
-          case 35:
-            v = l;
-            break;
-          case 48:
-            if(C) {
-              break a
-            }else {
-              C = l;
-              break
-            }
-          ;
-          default:
-            break a
-        }
-        d++;
-        i = A[d + 1 | 0]
-      }
-      var D = 0;
-      if(42 == i) {
-        D = c("i32"), d++, i = A[d + 1 | 0]
-      }else {
-        for(;48 <= i && 57 >= i;) {
-          D = 10 * D + (i - 48), d++, i = A[d + 1 | 0]
-        }
-      }
-      var K = p;
-      if(46 == i) {
-        var H = 0, K = l;
-        d++;
-        i = A[d + 1 | 0];
-        if(42 == i) {
-          H = c("i32"), d++
-        }else {
-          for(;;) {
-            i = A[d + 1 | 0];
-            if(48 > i || 57 < i) {
-              break
-            }
-            H = 10 * H + (i - 48);
-            d++
-          }
-        }
-        i = A[d + 1 | 0]
-      }else {
-        H = 6
-      }
-      var x;
-      switch(String.fromCharCode(i)) {
-        case "h":
-          i = A[d + 2 | 0];
-          104 == i ? (d++, x = 1) : x = 2;
-          break;
-        case "l":
-          i = A[d + 2 | 0];
-          108 == i ? (d++, x = 8) : x = 4;
-          break;
-        case "L":
-        ;
-        case "q":
-        ;
-        case "j":
-          x = 8;
-          break;
-        case "z":
-        ;
-        case "t":
-        ;
-        case "I":
-          x = 4;
-          break;
-        default:
-          x = m
-      }
-      x && d++;
-      i = A[d + 1 | 0];
-      switch(String.fromCharCode(i)) {
-        case "d":
-        ;
-        case "i":
-        ;
-        case "u":
-        ;
-        case "o":
-        ;
-        case "x":
-        ;
-        case "X":
-        ;
-        case "p":
-          j = 100 == i || 105 == i;
-          x = x || 4;
-          var P = h = c("i" + 8 * x), r;
-          8 == x && (h = 117 == i ? +(h[0] >>> 0) + 4294967296 * +(h[1] >>> 0) : +(h[0] >>> 0) + 4294967296 * +(h[1] | 0));
-          4 >= x && (h = (j ? eb : db)(h & Math.pow(256, x) - 1, 8 * x));
-          var ta = Math.abs(h), j = "";
-          if(100 == i || 105 == i) {
-            r = 8 == x && lc ? lc.stringify(P[0], P[1], m) : eb(h, 8 * x).toString(10)
-          }else {
-            if(117 == i) {
-              r = 8 == x && lc ? lc.stringify(P[0], P[1], l) : db(h, 8 * x).toString(10), h = Math.abs(h)
-            }else {
-              if(111 == i) {
-                r = (v ? "0" : "") + ta.toString(8)
-              }else {
-                if(120 == i || 88 == i) {
-                  j = v && 0 != h ? "0x" : "";
-                  if(8 == x && lc) {
-                    if(P[1]) {
-                      r = (P[1] >>> 0).toString(16);
-                      for(v = (P[0] >>> 0).toString(16);8 > v.length;) {
-                        v = "0" + v
-                      }
-                      r += v
-                    }else {
-                      r = (P[0] >>> 0).toString(16)
-                    }
-                  }else {
-                    if(0 > h) {
-                      h = -h;
-                      r = (ta - 1).toString(16);
-                      P = [];
-                      for(v = 0;v < r.length;v++) {
-                        P.push((15 - parseInt(r[v], 16)).toString(16))
-                      }
-                      for(r = P.join("");r.length < 2 * x;) {
-                        r = "f" + r
-                      }
-                    }else {
-                      r = ta.toString(16)
-                    }
-                  }
-                  88 == i && (j = j.toUpperCase(), r = r.toUpperCase())
-                }else {
-                  112 == i && (0 === ta ? r = "(nil)" : (j = "0x", r = ta.toString(16)))
-                }
-              }
-            }
-          }
-          if(K) {
-            for(;r.length < H;) {
-              r = "0" + r
-            }
-          }
-          for(n && (j = 0 > h ? "-" + j : "+" + j);j.length + r.length < D;) {
-            y ? r += " " : C ? r = "0" + r : j = " " + j
-          }
-          r = j + r;
-          r.split("").forEach(function(a) {
-            f.push(a.charCodeAt(0))
-          });
-          break;
-        case "f":
-        ;
-        case "F":
-        ;
-        case "e":
-        ;
-        case "E":
-        ;
-        case "g":
-        ;
-        case "G":
-          h = c("double");
-          if(isNaN(h)) {
-            r = "nan", C = p
-          }else {
-            if(isFinite(h)) {
-              K = p;
-              x = Math.min(H, 20);
-              if(103 == i || 71 == i) {
-                K = l, H = H || 1, x = parseInt(h.toExponential(x).split("e")[1], 10), H > x && -4 <= x ? (i = (103 == i ? "f" : "F").charCodeAt(0), H -= x + 1) : (i = (103 == i ? "e" : "E").charCodeAt(0), H--), x = Math.min(H, 20)
-              }
-              if(101 == i || 69 == i) {
-                r = h.toExponential(x), /[eE][-+]\d$/.test(r) && (r = r.slice(0, -1) + "0" + r.slice(-1))
-              }else {
-                if(102 == i || 70 == i) {
-                  r = h.toFixed(x), 0 === h && jc(h) && (r = "-" + r)
-                }
-              }
-              j = r.split("e");
-              if(K && !v) {
-                for(;1 < j[0].length && -1 != j[0].indexOf(".") && ("0" == j[0].slice(-1) || "." == j[0].slice(-1));) {
-                  j[0] = j[0].slice(0, -1)
-                }
-              }else {
-                for(v && -1 == r.indexOf(".") && (j[0] += ".");H > x++;) {
-                  j[0] += "0"
-                }
-              }
-              r = j[0] + (1 < j.length ? "e" + j[1] : "");
-              69 == i && (r = r.toUpperCase());
-              n && 0 <= h && (r = "+" + r)
-            }else {
-              r = (0 > h ? "-" : "") + "inf", C = p
-            }
-          }
-          for(;r.length < D;) {
-            r = y ? r + " " : C && ("-" == r[0] || "+" == r[0]) ? r[0] + "0" + r.slice(1) : (C ? "0" : " ") + r
-          }
-          97 > i && (r = r.toUpperCase());
-          r.split("").forEach(function(a) {
-            f.push(a.charCodeAt(0))
-          });
-          break;
-        case "s":
-          C = (n = c("i8*")) ? ic(n) : 6;
-          K && (C = Math.min(C, H));
-          if(!y) {
-            for(;C < D--;) {
-              f.push(32)
-            }
-          }
-          if(n) {
-            for(v = 0;v < C;v++) {
-              f.push(G[n++ | 0])
-            }
-          }else {
-            f = f.concat(J("(null)".substr(0, C), l))
-          }
-          if(y) {
-            for(;C < D--;) {
-              f.push(32)
-            }
-          }
-          break;
-        case "c":
-          for(y && f.push(c("i8"));0 < --D;) {
-            f.push(32)
-          }
-          y || f.push(c("i8"));
-          break;
-        case "n":
-          y = c("i32*");
-          B[y >> 2] = f.length;
-          break;
-        case "%":
-          f.push(h);
-          break;
-        default:
-          for(v = j;v < d + 2;v++) {
-            f.push(A[v])
-          }
-      }
-      d += 2
-    }else {
-      f.push(h), d += 1
-    }
-  }
-  return f
-}
-function mc(a, b, c) {
-  c = kc(b, c);
-  b = ja();
-  a = hc(F(c, "i8", La), 1, c.length, a);
-  ka(b);
-  return a
-}
-function nc(a) {
-  nc.ia || (z = z + 4095 >> 12 << 12, nc.ia = l, w(ua), nc.hb = ua, ua = function() {
-    wa("cannot dynamically allocate, sbrk now has control")
-  });
-  var b = z;
-  0 != a && nc.hb(a);
-  return b
-}
-function U() {
-  return B[U.m >> 2]
-}
-function oc() {
-  return!!oc.ta
-}
-function pc(a) {
-  var b = p;
-  try {
-    a == __ZTIi && (b = l)
-  }catch(c) {
-  }
-  try {
-    a == __ZTIj && (b = l)
-  }catch(d) {
-  }
-  try {
-    a == __ZTIl && (b = l)
-  }catch(e) {
-  }
-  try {
-    a == __ZTIm && (b = l)
-  }catch(f) {
-  }
-  try {
-    a == __ZTIx && (b = l)
-  }catch(h) {
-  }
-  try {
-    a == __ZTIy && (b = l)
-  }catch(i) {
-  }
-  try {
-    a == __ZTIf && (b = l)
-  }catch(j) {
-  }
-  try {
-    a == __ZTId && (b = l)
-  }catch(n) {
-  }
-  try {
-    a == __ZTIe && (b = l)
-  }catch(y) {
-  }
-  try {
-    a == __ZTIc && (b = l)
-  }catch(v) {
-  }
-  try {
-    a == __ZTIa && (b = l)
-  }catch(C) {
-  }
-  try {
-    a == __ZTIh && (b = l)
-  }catch(D) {
-  }
-  try {
-    a == __ZTIs && (b = l)
-  }catch(K) {
-  }
-  try {
-    a == __ZTIt && (b = l)
-  }catch(H) {
-  }
-  return b
-}
-function qc(a, b, c) {
-  if(0 == c) {
-    return p
-  }
-  if(0 == b || b == a) {
-    return l
-  }
-  switch(pc(b) ? b : B[B[b >> 2] - 8 >> 2]) {
-    case 0:
-      return 0 == B[B[a >> 2] - 8 >> 2] ? qc(B[a + 8 >> 2], B[b + 8 >> 2], c) : p;
-    case 1:
-      return p;
-    case 2:
-      return qc(a, B[b + 8 >> 2], c);
-    default:
-      return p
-  }
-}
-function rc(a, b, c) {
-  if(!rc.sb) {
-    try {
-      B[__ZTVN10__cxxabiv119__pointer_type_infoE >> 2] = 0
-    }catch(d) {
-    }
-    try {
-      B[pb >> 2] = 1
-    }catch(e) {
-    }
-    try {
-      B[ob >> 2] = 2
-    }catch(f) {
-    }
-    rc.sb = l
-  }
-  B[U.m >> 2] = a;
-  B[U.m + 4 >> 2] = b;
-  B[U.m + 8 >> 2] = c;
-  "uncaught_exception" in oc ? oc.ta++ : oc.ta = 1;
-  g(a + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.")
-}
-function sc(a) {
-  try {
-    return tc(a)
-  }catch(b) {
-  }
-}
-function uc() {
-  if(uc.Bb) {
-    uc.Bb = p
-  }else {
-    V.setThrew(0);
-    B[U.m + 4 >> 2] = 0;
-    var a = B[U.m >> 2], b = B[U.m + 8 >> 2];
-    b && (na("vi", b, [a]), B[U.m + 8 >> 2] = 0);
-    a && (sc(a), B[U.m >> 2] = 0)
-  }
-}
-var vc = F(1, "i32*", E);
-function wc(a) {
-  var b, c;
-  wc.ia ? (c = B[vc >> 2], b = B[c >> 2]) : (wc.ia = l, W.USER = "root", W.PATH = "/", W.PWD = "/", W.HOME = "/home/emscripten", W.LANG = "en_US.UTF-8", W._ = "./this.program", b = F(1024, "i8", E), c = F(256, "i8*", E), B[c >> 2] = b, B[vc >> 2] = c);
-  var d = [], e = 0, f;
-  for(f in a) {
-    if("string" === typeof a[f]) {
-      var h = f + "=" + a[f];
-      d.push(h);
-      e += h.length
-    }
-  }
-  1024 < e && g(Error("Environment size exceeded TOTAL_ENV_SIZE!"));
-  for(a = 0;a < d.length;a++) {
-    h = d[a];
-    for(e = 0;e < h.length;e++) {
-      A[b + e | 0] = h.charCodeAt(e)
-    }
-    A[b + e | 0] = 0;
-    B[c + 4 * a >> 2] = b;
-    b += h.length + 1
-  }
-  B[c + 4 * d.length >> 2] = 0
-}
-var W = {};
-function xc(a) {
-  if(0 === a) {
-    return 0
-  }
-  a = Fa(a);
-  if(!W.hasOwnProperty(a)) {
-    return 0
-  }
-  xc.J && tc(xc.J);
-  xc.J = F(J(W[a]), "i8", Ka);
-  return xc.J
-}
-function yc(a, b, c) {
-  if(a in ub) {
-    if(ub[a].length > c - 1) {
-      return M(N.ab)
-    }
-    a = ub[a];
-    for(c = 0;c < a.length;c++) {
-      A[b + c | 0] = a.charCodeAt(c)
-    }
-    return A[b + c | 0] = 0
-  }
-  return M(N.A)
-}
-function zc(a) {
-  zc.buffer || (zc.buffer = Oa(256));
-  yc(a, zc.buffer, 256);
-  return zc.buffer
-}
-function Ac(a) {
-  s.exit(a)
-}
-function Bc(a, b) {
-  var c = db(a & 255);
-  A[Bc.J | 0] = c;
-  if(-1 == gc(b, Bc.J, 1)) {
-    if(c = R[b]) {
-      c.error = l
-    }
-    return-1
-  }
-  return c
-}
-var Cc = p, Dc = p, Ec = p, Fc = p, Gc = k, Hc = k;
-function Ic(a) {
-  return{jpg:"image/jpeg", jpeg:"image/jpeg", png:"image/png", bmp:"image/bmp", ogg:"audio/ogg", wav:"audio/wav", mp3:"audio/mpeg"}[a.substr(a.lastIndexOf(".") + 1)]
-}
-var Jc = [];
-function Kc() {
-  var a = s.canvas;
-  Jc.forEach(function(b) {
-    b(a.width, a.height)
-  })
-}
-function Lc() {
-  var a = s.canvas;
-  this.Ib = a.width;
-  this.Hb = a.height;
-  a.width = screen.width;
-  a.height = screen.height;
-  "undefined" != typeof SDL && (a = Qa[SDL.screen + 0 * ma >> 2], B[SDL.screen + 0 * ma >> 2] = a | 8388608);
-  Kc()
-}
-function Mc() {
-  var a = s.canvas;
-  a.width = this.Ib;
-  a.height = this.Hb;
-  "undefined" != typeof SDL && (a = Qa[SDL.screen + 0 * ma >> 2], B[SDL.screen + 0 * ma >> 2] = a & -8388609);
-  Kc()
-}
-var Nc, Oc, Pc, Qc, rb = ra(4);
-B[rb >> 2] = 0;
-var Vb = Qb(m, "/", 16895, 0), Rc = T, Sc = {type:Rc, se:{}, Ua:"/", root:m}, Tc;
-Tc = O("/", {N:p});
-var Uc = Rc.z(Sc);
-Uc.z = Sc;
-Sc.root = Uc;
-Tc && (Tc.d.z = Sc, Tc.d.ub = l, Vb = Sc.root);
-zb("/tmp", 511);
-zb("/dev", 511);
-Nb[259] = {e:{Q:function() {
-  return 0
-}, write:function() {
-  return 0
-}}};
-Ab("/dev/null", 438, 259);
-Mb(1280, {Na:function(a) {
-  if(!a.input.length) {
-    var b = m;
-    if(ca) {
-      if(process.Eb.be) {
-        return
-      }
-      b = process.Eb.Q()
-    }else {
-      "undefined" != typeof window && "function" == typeof window.prompt ? (b = window.prompt("Input: "), b !== m && (b += "\n")) : "function" == typeof readline && (b = readline(), b !== m && (b += "\n"))
-    }
-    if(!b) {
-      return m
-    }
-    a.input = J(b, l)
-  }
-  return a.input.shift()
-}, W:function(a, b) {
-  b === m || 10 === b ? (s.print(a.H.join("")), a.H = []) : a.H.push(Pb.oa(b))
-}});
-Mb(1536, {W:function(a, b) {
-  b === m || 10 === b ? (s.printErr(a.H.join("")), a.H = []) : a.H.push(Pb.oa(b))
-}});
-Ab("/dev/tty", 438, 1280);
-Ab("/dev/tty1", 438, 1536);
-zb("/dev/shm", 511);
-zb("/dev/shm/tmp", 511);
-Xa.unshift({V:function() {
-  if(!s.noFSInit && !bc) {
-    w(!bc, "FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");
-    bc = l;
-    s.stdin = s.stdin;
-    s.stdout = s.stdout;
-    s.stderr = s.stderr;
-    s.stdin ? ec("/dev", "stdin", s.stdin) : Bb("/dev/tty", "/dev/stdin");
-    s.stdout ? ec("/dev", "stdout", m, s.stdout) : Bb("/dev/tty", "/dev/stdout");
-    s.stderr ? ec("/dev", "stderr", m, s.stderr) : Bb("/dev/tty1", "/dev/stderr");
-    var a = Db("/dev/stdin", "r");
-    B[Tb >> 2] = a.s;
-    w(1 === a.s, "invalid handle for stdin (" + a.s + ")");
-    a = Db("/dev/stdout", "w");
-    B[Ub >> 2] = a.s;
-    w(2 === a.s, "invalid handle for stdout (" + a.s + ")");
-    a = Db("/dev/stderr", "w");
-    B[nb >> 2] = a.s;
-    w(3 === a.s, "invalid handle for stderr (" + a.s + ")")
-  }
-}});
-Ya.push({V:function() {
-  Yb = p
-}});
-Za.push({V:function() {
-  bc = p;
-  for(var a = 0;a < R.length;a++) {
-    var b = R[a];
-    b && Hb(b)
-  }
-}});
-s.FS_createFolder = function(a, b, c, d) {
-  a = S("string" === typeof a ? a : ac(a), b);
-  return zb(a, cc(c, d))
-};
-s.FS_createPath = function(a, b) {
-  for(var a = "string" === typeof a ? a : ac(a), c = b.split("/").reverse();c.length;) {
-    var d = c.pop();
-    if(d) {
-      var e = S(a, d);
-      try {
-        zb(e, 511)
-      }catch(f) {
-      }
-      a = e
-    }
-  }
-  return e
-};
-s.FS_createDataFile = dc;
-s.FS_createPreloadedFile = function(a, b, c, d, e, f, h, i) {
-  function j() {
-    Ec = document.pointerLockElement === v || document.mozPointerLockElement === v || document.webkitPointerLockElement === v
-  }
-  function n(c) {
-    function j(c) {
-      i || dc(a, b, c, d, e);
-      f && f();
-      jb("cp " + C)
-    }
-    var n = p;
-    s.preloadPlugins.forEach(function(a) {
-      !n && a.canHandle(C) && (a.handle(c, C, j, function() {
-        h && h();
-        jb("cp " + C)
-      }), n = l)
-    });
-    n || j(c)
-  }
-  s.preloadPlugins || (s.preloadPlugins = []);
-  if(!Nc && !ea) {
-    Nc = l;
-    try {
-      new Blob, Oc = l
-    }catch(y) {
-      Oc = p, console.log("warning: no blob constructor, cannot create blobs with mimetypes")
-    }
-    Pc = "undefined" != typeof MozBlobBuilder ? MozBlobBuilder : "undefined" != typeof WebKitBlobBuilder ? WebKitBlobBuilder : !Oc ? console.log("warning: no BlobBuilder") : m;
-    Qc = "undefined" != typeof window ? window.URL ? window.URL : window.webkitURL : console.log("warning: cannot create object URLs");
-    s.preloadPlugins.push({canHandle:function(a) {
-      return!s.re && /\.(jpg|jpeg|png|bmp)$/i.test(a)
-    }, handle:function(a, b, c, d) {
-      var e = m;
-      if(Oc) {
-        try {
-          e = new Blob([a], {type:Ic(b)}), e.size !== a.length && (e = new Blob([(new Uint8Array(a)).buffer], {type:Ic(b)}))
-        }catch(f) {
-          var h = "Blob constructor present but fails: " + f + "; falling back to blob builder";
-          oa || (oa = {});
-          oa[h] || (oa[h] = 1, s.P(h))
-        }
-      }
-      e || (e = new Pc, e.append((new Uint8Array(a)).buffer), e = e.getBlob());
-      var i = Qc.createObjectURL(e), j = new Image;
-      j.onload = function() {
-        w(j.complete, "Image " + b + " could not be decoded");
-        var d = document.createElement("canvas");
-        d.width = j.width;
-        d.height = j.height;
-        d.getContext("2d").drawImage(j, 0, 0);
-        s.preloadedImages[b] = d;
-        Qc.revokeObjectURL(i);
-        c && c(a)
-      };
-      j.onerror = function() {
-        console.log("Image " + i + " could not be decoded");
-        d && d()
-      };
-      j.src = i
-    }});
-    s.preloadPlugins.push({canHandle:function(a) {
-      return!s.qe && a.substr(-4) in {".ogg":1, ".wav":1, ".mp3":1}
-    }, handle:function(a, b, c, d) {
-      function e(d) {
-        h || (h = l, s.preloadedAudios[b] = d, c && c(a))
-      }
-      function f() {
-        h || (h = l, s.preloadedAudios[b] = new Audio, d && d())
-      }
-      var h = p;
-      if(Oc) {
-        try {
-          var i = new Blob([a], {type:Ic(b)})
-        }catch(j) {
-          return f()
-        }
-        var i = Qc.createObjectURL(i), n = new Audio;
-        n.addEventListener("canplaythrough", function() {
-          e(n)
-        }, p);
-        n.onerror = function() {
-          if(!h) {
-            console.log("warning: browser could not fully decode audio " + b + ", trying slower base64 approach");
-            for(var c = "", d = 0, f = 0, i = 0;i < a.length;i++) {
-              d = d << 8 | a[i];
-              for(f += 8;6 <= f;) {
-                var j = d >> f - 6 & 63, f = f - 6, c = c + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[j]
-              }
-            }
-            2 == f ? (c += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(d & 3) << 4], c += "==") : 4 == f && (c += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(d & 15) << 2], c += "=");
-            n.src = "data:audio/x-" + b.substr(-3) + ";base64," + c;
-            e(n)
-          }
-        };
-        n.src = i;
-        setTimeout(function() {
-          za || e(n)
-        }, 1E4)
-      }else {
-        return f()
-      }
-    }});
-    var v = s.canvas;
-    v.qa = v.requestPointerLock || v.mozRequestPointerLock || v.webkitRequestPointerLock;
-    v.La = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock || aa();
-    v.La = v.La.bind(document);
-    document.addEventListener("pointerlockchange", j, p);
-    document.addEventListener("mozpointerlockchange", j, p);
-    document.addEventListener("webkitpointerlockchange", j, p);
-    s.elementPointerLock && v.addEventListener("click", function(a) {
-      !Ec && v.qa && (v.qa(), a.preventDefault())
-    }, p)
-  }
-  var C, D = S.apply(m, [a, b]);
-  "/" == D[0] && (D = D.substr(1));
-  C = D;
-  ib("cp " + C);
-  if("string" == typeof c) {
-    var K = h, H = function() {
-      K ? K() : g('Loading data file "' + c + '" failed.')
-    }, x = new XMLHttpRequest;
-    x.open("GET", c, l);
-    x.responseType = "arraybuffer";
-    x.onload = function() {
-      if(200 == x.status || 0 == x.status && x.response) {
-        var a = x.response;
-        w(a, 'Loading data file "' + c + '" failed (no arrayBuffer).');
-        a = new Uint8Array(a);
-        n(a);
-        jb("al " + c)
-      }else {
-        H()
-      }
-    };
-    x.onerror = H;
-    x.send(m);
-    ib("al " + c)
-  }else {
-    n(c)
-  }
-};
-s.FS_createLazyFile = function(a, b, c, d, e) {
-  var f, h;
-  "undefined" !== typeof XMLHttpRequest ? (ea || g("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"), f = function() {
-    this.ma = p;
-    this.T = []
-  }, f.prototype.get = function(a) {
-    if(!(a > this.length - 1 || 0 > a)) {
-      var b = a % this.S;
-      return this.pb(Math.floor(a / this.S))[b]
-    }
-  }, f.prototype.Cb = function(a) {
-    this.pb = a
-  }, f.prototype.Fa = function() {
-    var a = new XMLHttpRequest;
-    a.open("HEAD", c, p);
-    a.send(m);
-    200 <= a.status && 300 > a.status || 304 === a.status || g(Error("Couldn't load " + c + ". Status: " + a.status));
-    var b = Number(a.getResponseHeader("Content-length")), d, e = 1048576;
-    if(!((d = a.getResponseHeader("Accept-Ranges")) && "bytes" === d)) {
-      e = b
-    }
-    var f = this;
-    f.Cb(function(a) {
-      var d = a * e, h = (a + 1) * e - 1, h = Math.min(h, b - 1);
-      if("undefined" === typeof f.T[a]) {
-        var i = f.T;
-        d > h && g(Error("invalid range (" + d + ", " + h + ") or no bytes requested!"));
-        h > b - 1 && g(Error("only " + b + " bytes available! programmer error!"));
-        var j = new XMLHttpRequest;
-        j.open("GET", c, p);
-        b !== e && j.setRequestHeader("Range", "bytes=" + d + "-" + h);
-        "undefined" != typeof Uint8Array && (j.responseType = "arraybuffer");
-        j.overrideMimeType && j.overrideMimeType("text/plain; charset=x-user-defined");
-        j.send(m);
-        200 <= j.status && 300 > j.status || 304 === j.status || g(Error("Couldn't load " + c + ". Status: " + j.status));
-        d = j.response !== k ? new Uint8Array(j.response || []) : J(j.responseText || "", l);
-        i[a] = d
-      }
-      "undefined" === typeof f.T[a] && g(Error("doXHR failed!"));
-      return f.T[a]
-    });
-    this.gb = b;
-    this.fb = e;
-    this.ma = l
-  }, f = new f, Object.defineProperty(f, "length", {get:function() {
-    this.ma || this.Fa();
-    return this.gb
-  }}), Object.defineProperty(f, "chunkSize", {get:function() {
-    this.ma || this.Fa();
-    return this.fb
-  }}), h = k) : (h = c, f = k);
-  var i, a = S("string" === typeof a ? a : ac(a), b);
-  i = yb(a, cc(d, e));
-  f ? i.g = f : h && (i.g = m, i.url = h);
-  var j = {};
-  Object.keys(i.e).forEach(function(a) {
-    var b = i.e[a];
-    j[a] = function() {
-      var a;
-      if(i.ke || i.le || i.link || i.g) {
-        a = l
-      }else {
-        a = l;
-        "undefined" !== typeof XMLHttpRequest && g(Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."));
-        if(s.read) {
-          try {
-            i.g = J(s.read(i.url), l)
-          }catch(c) {
-            a = p
-          }
-        }else {
-          g(Error("Cannot load without read() or XMLHttpRequest."))
-        }
-        a || M(N.I)
-      }
-      a || g(new Q(N.I));
-      return b.apply(m, arguments)
-    }
-  });
-  j.Q = function(a, b, c, d, e) {
-    a = a.d.g;
-    d = Math.min(a.length - e, d);
-    if(a.slice) {
-      for(var f = 0;f < d;f++) {
-        b[c + f] = a[e + f]
-      }
-    }else {
-      for(f = 0;f < d;f++) {
-        b[c + f] = a.get(e + f)
-      }
-    }
-    return d
-  };
-  i.e = j;
-  return i
-};
-s.FS_createLink = function(a, b, c) {
-  a = S("string" === typeof a ? a : ac(a), b);
-  return Bb(c, a)
-};
-s.FS_createDevice = ec;
-U.m = F(12, "void*", E);
-wc(W);
-Bc.J = F([0], "i8", E);
-s.requestFullScreen = function(a, b) {
-  function c() {
-    Dc = p;
-    (document.webkitFullScreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.mozFullscreenElement || document.fullScreenElement || document.fullscreenElement) === d ? (d.Ga = document.cancelFullScreen || document.mozCancelFullScreen || document.webkitCancelFullScreen, d.Ga = d.Ga.bind(document), Gc && d.qa(), Dc = l, Hc && Lc()) : Hc && Mc();
-    if(s.onFullScreen) {
-      s.onFullScreen(Dc)
-    }
-  }
-  Gc = a;
-  Hc = b;
-  "undefined" === typeof Gc && (Gc = l);
-  "undefined" === typeof Hc && (Hc = p);
-  var d = s.canvas;
-  Fc || (Fc = l, document.addEventListener("fullscreenchange", c, p), document.addEventListener("mozfullscreenchange", c, p), document.addEventListener("webkitfullscreenchange", c, p));
-  d.Ab = d.requestFullScreen || d.mozRequestFullScreen || (d.webkitRequestFullScreen ? function() {
-    d.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)
-  } : m);
-  d.Ab()
-};
-s.requestAnimationFrame = function(a) {
-  window.requestAnimationFrame || (window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame || window.setTimeout);
-  window.requestAnimationFrame(a)
-};
-s.pauseMainLoop = aa();
-s.resumeMainLoop = function() {
-  Cc && (Cc = p, m())
-};
-s.getUserMedia = function() {
-  window.Ma || (window.Ma = navigator.getUserMedia || navigator.mozGetUserMedia);
-  window.Ma(k)
-};
-Sa = u = xa(sa);
-Ta = Sa + 5242880;
-Ua = z = xa(Ta);
-w(Ua < va);
-var Vc = F([8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "i8", 3), Wc = F([8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0,
-2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1,
-0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0], "i8", 3), Xc = Math.min;
-var V = (function(global,env,buffer) {
-// EMSCRIPTEN_START_ASM
- "use asm";
- var a = new global.Int8Array(buffer);
- var b = new global.Int16Array(buffer);
- var c = new global.Int32Array(buffer);
- var d = new global.Uint8Array(buffer);
- var e = new global.Uint16Array(buffer);
- var f = new global.Uint32Array(buffer);
- var g = new global.Float32Array(buffer);
- var h = new global.Float64Array(buffer);
- var i = env.STACKTOP | 0;
- var j = env.STACK_MAX | 0;
- var k = env.tempDoublePtr | 0;
- var l = env.ABORT | 0;
- var m = env.cttz_i8 | 0;
- var n = env.ctlz_i8 | 0;
- var o = env._stderr | 0;
- var p = env.__ZTVN10__cxxabiv120__si_class_type_infoE | 0;
- var q = env.__ZTVN10__cxxabiv117__class_type_infoE | 0;
- var r = env.___progname | 0;
- var s = +env.NaN;
- var t = +env.Infinity;
- var u = 0;
- var v = 0;
- var w = 0;
- var x = 0;
- var y = 0, z = 0, A = 0, B = 0, C = 0.0, D = 0, E = 0, F = 0, G = 0.0;
- var H = 0;
- var I = 0;
- var J = 0;
- var K = 0;
- var L = 0;
- var M = 0;
- var N = 0;
- var O = 0;
- var P = 0;
- var Q = 0;
- var R = global.Math.floor;
- var S = global.Math.abs;
- var T = global.Math.sqrt;
- var U = global.Math.pow;
- var V = global.Math.cos;
- var W = global.Math.sin;
- var X = global.Math.tan;
- var Y = global.Math.acos;
- var Z = global.Math.asin;
- var _ = global.Math.atan;
- var $ = global.Math.atan2;
- var aa = global.Math.exp;
- var ab = global.Math.log;
- var ac = global.Math.ceil;
- var ad = global.Math.imul;
- var ae = env.abort;
- var af = env.assert;
- var ag = env.asmPrintInt;
- var ah = env.asmPrintFloat;
- var ai = env.min;
- var aj = env.invoke_vi;
- var ak = env.invoke_vii;
- var al = env.invoke_ii;
- var am = env.invoke_viii;
- var an = env.invoke_v;
- var ao = env.invoke_iii;
- var ap = env._strncmp;
- var aq = env._llvm_va_end;
- var ar = env._sysconf;
- var as = env.___cxa_throw;
- var at = env._strerror;
- var au = env._abort;
- var av = env._fprintf;
- var aw = env._llvm_eh_exception;
- var ax = env.___cxa_free_exception;
- var ay = env._fflush;
- var az = env.___buildEnvironment;
- var aA = env.__reallyNegative;
- var aB = env._strchr;
- var aC = env._fputc;
- var aD = env.___setErrNo;
- var aE = env._fwrite;
- var aF = env._send;
- var aG = env._write;
- var aH = env._exit;
- var aI = env.___cxa_find_matching_catch;
- var aJ = env.___cxa_allocate_exception;
- var aK = env._isspace;
- var aL = env.__formatString;
- var aM = env.___resumeException;
- var aN = env._llvm_uadd_with_overflow_i32;
- var aO = env.___cxa_does_inherit;
- var aP = env._getenv;
- var aQ = env._vfprintf;
- var aR = env.___cxa_begin_catch;
- var aS = env.__ZSt18uncaught_exceptionv;
- var aT = env._pwrite;
- var aU = env.___cxa_call_unexpected;
- var aV = env._sbrk;
- var aW = env._strerror_r;
- var aX = env.___errno_location;
- var aY = env.___gxx_personality_v0;
- var aZ = env.___cxa_is_number_type;
- var a_ = env._time;
- var a$ = env.__exit;
- var a0 = env.___cxa_end_catch;
-// EMSCRIPTEN_START_FUNCS
-function a7(a) {
- a = a | 0;
- var b = 0;
- b = i;
- i = i + a | 0;
- i = i + 7 >> 3 << 3;
- return b | 0;
-}
-function a8() {
- return i | 0;
-}
-function a9(a) {
- a = a | 0;
- i = a;
-}
-function ba(a, b) {
- a = a | 0;
- b = b | 0;
- if ((u | 0) == 0) {
-  u = a;
-  v = b;
- }
-}
-function bb(b) {
- b = b | 0;
- a[k] = a[b];
- a[k + 1 | 0] = a[b + 1 | 0];
- a[k + 2 | 0] = a[b + 2 | 0];
- a[k + 3 | 0] = a[b + 3 | 0];
-}
-function bc(b) {
- b = b | 0;
- a[k] = a[b];
- a[k + 1 | 0] = a[b + 1 | 0];
- a[k + 2 | 0] = a[b + 2 | 0];
- a[k + 3 | 0] = a[b + 3 | 0];
- a[k + 4 | 0] = a[b + 4 | 0];
- a[k + 5 | 0] = a[b + 5 | 0];
- a[k + 6 | 0] = a[b + 6 | 0];
- a[k + 7 | 0] = a[b + 7 | 0];
-}
-function bd(a) {
- a = a | 0;
- H = a;
-}
-function be(a) {
- a = a | 0;
- I = a;
-}
-function bf(a) {
- a = a | 0;
- J = a;
-}
-function bg(a) {
- a = a | 0;
- K = a;
-}
-function bh(a) {
- a = a | 0;
- L = a;
-}
-function bi(a) {
- a = a | 0;
- M = a;
-}
-function bj(a) {
- a = a | 0;
- N = a;
-}
-function bk(a) {
- a = a | 0;
- O = a;
-}
-function bl(a) {
- a = a | 0;
- P = a;
-}
-function bm(a) {
- a = a | 0;
- Q = a;
-}
-function bn() {
- c[170] = q + 8;
- c[172] = p + 8;
- c[176] = p + 8;
-}
-function bo(b, c, d) {
- b = b | 0;
- c = c | 0;
- d = d | 0;
- var e = 0;
- if ((d | 0) == 0) {
-  return;
- } else {
-  e = 0;
- }
- do {
-  a[b + e | 0] = a[c + e | 0] | 0;
-  e = e + 1 | 0;
- } while (e >>> 0 < d >>> 0);
- return;
-}
-function bp(b, c, d) {
- b = b | 0;
- c = c | 0;
- d = d | 0;
- var e = 0, f = 0;
- if ((d | 0) == 0) {
-  return;
- } else {
-  e = 0;
- }
- do {
-  f = b + e | 0;
-  a[f] = a[f] ^ a[c + e | 0];
-  e = e + 1 | 0;
- } while (e >>> 0 < d >>> 0);
- return;
-}
-function bq(a) {
- a = a | 0;
- var b = 0, c = 0, e = 0, f = 0;
- b = d[a + 1 | 0] | 0;
- c = d[a + 2 | 0] | 0;
- e = d[a + 3 | 0] | 0;
- f = cN(b << 8 | 0 >>> 24 | (d[a] | 0) | (c << 16 | 0 >>> 16) | (e << 24 | 0 >>> 8) | (0 << 8 | 0 >>> 24), 0 << 8 | b >>> 24 | (0 << 16 | c >>> 16) | (0 << 24 | e >>> 8) | (d[a + 4 | 0] | 0) | ((d[a + 5 | 0] | 0) << 8 | 0 >>> 24), 0 << 16 | 0 >>> 16, (d[a + 6 | 0] | 0) << 16 | 0 >>> 16) | 0;
- e = cN(f, H, 0 << 24 | 0 >>> 8, (d[a + 7 | 0] | 0) << 24 | 0 >>> 8) | 0;
- return (H = H, e) | 0;
-}
-function br(a) {
- a = a | 0;
- return (d[a + 1 | 0] | 0) << 8 | (d[a] | 0) | (d[a + 2 | 0] | 0) << 16 | (d[a + 3 | 0] | 0) << 24 | 0;
-}
-function bs(b, c) {
- b = b | 0;
- c = c | 0;
- a[b] = c & 255;
- a[b + 1 | 0] = c >>> 8 & 255;
- a[b + 2 | 0] = c >>> 16 & 255;
- a[b + 3 | 0] = c >>> 24 & 255;
- return;
-}
-function bt(a) {
- a = a | 0;
- c[a + 36 >> 2] = 0;
- c[a + 32 >> 2] = 0;
- c[a >> 2] = 1779033703;
- c[a + 4 >> 2] = -1150833019;
- c[a + 8 >> 2] = 1013904242;
- c[a + 12 >> 2] = -1521486534;
- c[a + 16 >> 2] = 1359893119;
- c[a + 20 >> 2] = -1694144372;
- c[a + 24 >> 2] = 528734635;
- c[a + 28 >> 2] = 1541459225;
- return;
-}
-function bu(a, b, d, e, f, g, h, i, j, k) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- e = e | 0;
- f = f | 0;
- g = g | 0;
- h = h | 0;
- i = i | 0;
- j = j | 0;
- k = k | 0;
- var l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0;
- l = cX(i, 0, h, 0) | 0;
- m = H;
- n = 0;
- if (m >>> 0 > n >>> 0 | m >>> 0 == n >>> 0 & l >>> 0 > 1073741823 >>> 0) {
-  c[(aX() | 0) >> 2] = 27;
-  o = -1;
-  return o | 0;
- }
- l = cN(f, g, -1, -1) | 0;
- if ((l & f | 0) != 0 | (H & g | 0) != 0 | (f | 0) == 0 & (g | 0) == 0) {
-  c[(aX() | 0) >> 2] = 22;
-  o = -1;
-  return o | 0;
- }
- do {
-  if (!((33554431 / (i >>> 0) | 0) >>> 0 < h >>> 0 | h >>> 0 > 16777215)) {
-   l = 0;
-   if (l >>> 0 < g >>> 0 | l >>> 0 == g >>> 0 & (33554431 / (h >>> 0) | 0) >>> 0 < f >>> 0) {
-    break;
-   }
-   l = h << 7;
-   n = bL(ad(l, i) | 0) | 0;
-   if ((n | 0) == 0) {
-    o = -1;
-    return o | 0;
-   }
-   m = bL(h << 8) | 0;
-   do {
-    if ((m | 0) != 0) {
-     p = cX(l, 0, f, g) | 0;
-     q = bL(p) | 0;
-     if ((q | 0) == 0) {
-      bM(m);
-      break;
-     }
-     p = ad(i << 7, h) | 0;
-     bJ(a, b, d, e, 1, 0, n, p);
-     if ((i | 0) != 0) {
-      r = h << 7;
-      s = 0;
-      do {
-       bv(n + (ad(r, s) | 0) | 0, h, f, g, q, m);
-       s = s + 1 | 0;
-      } while (s >>> 0 < i >>> 0);
-     }
-     bJ(a, b, n, p, 1, 0, j, k);
-     bM(q);
-     bM(m);
-     bM(n);
-     o = 0;
-     return o | 0;
-    }
-   } while (0);
-   bM(n);
-   o = -1;
-   return o | 0;
-  }
- } while (0);
- c[(aX() | 0) >> 2] = 12;
- o = -1;
- return o | 0;
-}
-function bv(a, b, c, d, e, f) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- e = e | 0;
- f = f | 0;
- var g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0;
- g = b << 7;
- h = f + g | 0;
- bo(f, a, g);
- if ((c | 0) == 0 & (d | 0) == 0) {
-  bo(a, f, g);
-  return;
- }
- i = g;
- j = 0;
- k = 0;
- l = 0;
- do {
-  m = cX(l, k, i, j) | 0;
-  bo(e + m | 0, f, g);
-  bw(f, h, b);
-  l = cN(l, k, 1, 0) | 0;
-  k = H;
- } while (k >>> 0 < d >>> 0 | k >>> 0 == d >>> 0 & l >>> 0 < c >>> 0);
- if ((c | 0) == 0 & (d | 0) == 0) {
-  bo(a, f, g);
-  return;
- }
- l = cN(c, d, -1, -1) | 0;
- k = H;
- j = g;
- i = 0;
- m = 0;
- n = 0;
- do {
-  o = bx(f, b) | 0;
-  p = cX(o & l, H & k, j, i) | 0;
-  bp(f, e + p | 0, g);
-  bw(f, h, b);
-  n = cN(n, m, 1, 0) | 0;
-  m = H;
- } while (m >>> 0 < d >>> 0 | m >>> 0 == d >>> 0 & n >>> 0 < c >>> 0);
- bo(a, f, g);
- return;
-}
-function bw(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- var d = 0, e = 0, f = 0, g = 0, h = 0, j = 0, k = 0;
- d = i;
- i = i + 64 | 0;
- e = d | 0;
- f = c << 1;
- bo(e, a + ((c << 7) - 64) | 0, 64);
- if ((f | 0) != 0) {
-  g = 0;
-  do {
-   h = g << 6;
-   bp(e, a + h | 0, 64);
-   by(e);
-   bo(b + h | 0, e, 64);
-   g = g + 1 | 0;
-  } while (g >>> 0 < f >>> 0);
- }
- if ((c | 0) == 0) {
-  i = d;
-  return;
- } else {
-  j = 0;
- }
- do {
-  bo(a + (j << 6) | 0, b + (j << 7) | 0, 64);
-  j = j + 1 | 0;
- } while (j >>> 0 < c >>> 0);
- if ((c | 0) == 0) {
-  i = d;
-  return;
- } else {
-  k = 0;
- }
- do {
-  bo(a + (k + c << 6) | 0, b + (k << 7 | 64) | 0, 64);
-  k = k + 1 | 0;
- } while (k >>> 0 < c >>> 0);
- i = d;
- return;
-}
-function bx(a, b) {
- a = a | 0;
- b = b | 0;
- var c = 0;
- c = bq(a + ((b << 7) - 64) | 0) | 0;
- return (H = H, c) | 0;
-}
-function by(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0, L = 0, M = 0, N = 0, O = 0, P = 0, Q = 0, R = 0, S = 0, T = 0, U = 0, V = 0, W = 0, X = 0, Y = 0, Z = 0, _ = 0, $ = 0, aa = 0, ab = 0;
- b = i;
- i = i + 128 | 0;
- d = b | 0;
- e = b + 64 | 0;
- f = 0;
- do {
-  c[d + (f << 2) >> 2] = br(a + (f << 2) | 0) | 0;
-  f = f + 1 | 0;
- } while (f >>> 0 < 16);
- f = d;
- g = e;
- cK(g | 0, f | 0, 64) | 0;
- f = e | 0;
- g = e + 48 | 0;
- h = e + 16 | 0;
- j = e + 32 | 0;
- k = e + 20 | 0;
- l = e + 4 | 0;
- m = e + 36 | 0;
- n = e + 52 | 0;
- o = e + 40 | 0;
- p = e + 24 | 0;
- q = e + 56 | 0;
- r = e + 8 | 0;
- s = e + 60 | 0;
- t = e + 44 | 0;
- u = e + 12 | 0;
- v = e + 28 | 0;
- w = 0;
- x = c[f >> 2] | 0;
- y = c[g >> 2] | 0;
- z = c[h >> 2] | 0;
- A = c[j >> 2] | 0;
- B = c[k >> 2] | 0;
- C = c[l >> 2] | 0;
- D = c[m >> 2] | 0;
- E = c[n >> 2] | 0;
- F = c[o >> 2] | 0;
- G = c[p >> 2] | 0;
- H = c[q >> 2] | 0;
- I = c[r >> 2] | 0;
- J = c[s >> 2] | 0;
- K = c[t >> 2] | 0;
- L = c[u >> 2] | 0;
- M = c[v >> 2] | 0;
- do {
-  N = y + x | 0;
-  O = (N << 7 | N >>> 25) ^ z;
-  N = O + x | 0;
-  P = (N << 9 | N >>> 23) ^ A;
-  N = P + O | 0;
-  Q = (N << 13 | N >>> 19) ^ y;
-  N = Q + P | 0;
-  R = (N << 18 | N >>> 14) ^ x;
-  N = C + B | 0;
-  S = (N << 7 | N >>> 25) ^ D;
-  N = S + B | 0;
-  T = (N << 9 | N >>> 23) ^ E;
-  N = T + S | 0;
-  U = (N << 13 | N >>> 19) ^ C;
-  N = U + T | 0;
-  V = (N << 18 | N >>> 14) ^ B;
-  N = G + F | 0;
-  W = (N << 7 | N >>> 25) ^ H;
-  N = W + F | 0;
-  X = (N << 9 | N >>> 23) ^ I;
-  N = X + W | 0;
-  Y = (N << 13 | N >>> 19) ^ G;
-  N = Y + X | 0;
-  Z = (N << 18 | N >>> 14) ^ F;
-  N = K + J | 0;
-  _ = (N << 7 | N >>> 25) ^ L;
-  N = _ + J | 0;
-  $ = (N << 9 | N >>> 23) ^ M;
-  N = $ + _ | 0;
-  aa = (N << 13 | N >>> 19) ^ K;
-  N = aa + $ | 0;
-  ab = (N << 18 | N >>> 14) ^ J;
-  N = _ + R | 0;
-  C = (N << 7 | N >>> 25) ^ U;
-  U = C + R | 0;
-  I = (U << 9 | U >>> 23) ^ X;
-  X = I + C | 0;
-  L = (X << 13 | X >>> 19) ^ _;
-  _ = L + I | 0;
-  x = (_ << 18 | _ >>> 14) ^ R;
-  R = O + V | 0;
-  G = (R << 7 | R >>> 25) ^ Y;
-  Y = G + V | 0;
-  M = (Y << 9 | Y >>> 23) ^ $;
-  $ = M + G | 0;
-  z = ($ << 13 | $ >>> 19) ^ O;
-  O = z + M | 0;
-  B = (O << 18 | O >>> 14) ^ V;
-  V = S + Z | 0;
-  K = (V << 7 | V >>> 25) ^ aa;
-  aa = K + Z | 0;
-  A = (aa << 9 | aa >>> 23) ^ P;
-  P = A + K | 0;
-  D = (P << 13 | P >>> 19) ^ S;
-  S = D + A | 0;
-  F = (S << 18 | S >>> 14) ^ Z;
-  Z = W + ab | 0;
-  y = (Z << 7 | Z >>> 25) ^ Q;
-  Q = y + ab | 0;
-  E = (Q << 9 | Q >>> 23) ^ T;
-  T = E + y | 0;
-  H = (T << 13 | T >>> 19) ^ W;
-  W = H + E | 0;
-  J = (W << 18 | W >>> 14) ^ ab;
-  w = w + 2 | 0;
- } while (w >>> 0 < 8);
- c[f >> 2] = x;
- c[g >> 2] = y;
- c[h >> 2] = z;
- c[j >> 2] = A;
- c[k >> 2] = B;
- c[l >> 2] = C;
- c[m >> 2] = D;
- c[n >> 2] = E;
- c[o >> 2] = F;
- c[p >> 2] = G;
- c[q >> 2] = H;
- c[r >> 2] = I;
- c[s >> 2] = J;
- c[t >> 2] = K;
- c[u >> 2] = L;
- c[v >> 2] = M;
- M = d | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e >> 2] | 0);
- M = d + 4 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 4 >> 2] | 0);
- M = d + 8 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 8 >> 2] | 0);
- M = d + 12 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 12 >> 2] | 0);
- M = d + 16 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 16 >> 2] | 0);
- M = d + 20 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 20 >> 2] | 0);
- M = d + 24 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 24 >> 2] | 0);
- M = d + 28 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 28 >> 2] | 0);
- M = d + 32 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 32 >> 2] | 0);
- M = d + 36 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 36 >> 2] | 0);
- M = d + 40 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 40 >> 2] | 0);
- M = d + 44 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 44 >> 2] | 0);
- M = d + 48 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 48 >> 2] | 0);
- M = d + 52 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 52 >> 2] | 0);
- M = d + 56 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 56 >> 2] | 0);
- M = d + 60 | 0;
- c[M >> 2] = (c[M >> 2] | 0) + (c[e + 60 >> 2] | 0);
- e = 0;
- do {
-  bs(a + (e << 2) | 0, c[d + (e << 2) >> 2] | 0);
-  e = e + 1 | 0;
- } while (e >>> 0 < 16);
- i = b;
- return;
-}
-function bz(a, b, d) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0;
- e = a + 32 | 0;
- f = a + 36 | 0;
- g = c[f >> 2] | 0;
- h = g >>> 3 & 63;
- i = aN(g | 0, d << 3 | 0) | 0;
- c[f >> 2] = i;
- if (H) {
-  i = e | 0;
-  c[i >> 2] = (c[i >> 2] | 0) + 1;
- }
- i = e | 0;
- c[i >> 2] = (c[i >> 2] | 0) + (d >>> 29);
- i = 64 - h | 0;
- e = a + 40 + h | 0;
- if (i >>> 0 > d >>> 0) {
-  cK(e | 0, b | 0, d) | 0;
-  return;
- }
- cK(e | 0, b | 0, i) | 0;
- e = a | 0;
- h = a + 40 | 0;
- bA(e, h);
- a = b + i | 0;
- b = d - i | 0;
- if (b >>> 0 > 63) {
-  i = b;
-  d = a;
-  while (1) {
-   bA(e, d);
-   f = d + 64 | 0;
-   g = i - 64 | 0;
-   if (g >>> 0 > 63) {
-    i = g;
-    d = f;
-   } else {
-    j = g;
-    k = f;
-    break;
-   }
-  }
- } else {
-  j = b;
-  k = a;
- }
- cK(h | 0, k | 0, j) | 0;
- return;
-}
-function bA(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0, g = 0, h = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0;
- d = i;
- i = i + 288 | 0;
- e = d | 0;
- f = d + 256 | 0;
- g = e | 0;
- bK(g, b);
- b = 16;
- do {
-  h = c[e + (b - 2 << 2) >> 2] | 0;
-  j = c[e + (b - 15 << 2) >> 2] | 0;
-  c[e + (b << 2) >> 2] = (c[e + (b - 16 << 2) >> 2] | 0) + (c[e + (b - 7 << 2) >> 2] | 0) + ((h >>> 19 | h << 13) ^ h >>> 10 ^ (h >>> 17 | h << 15)) + ((j >>> 18 | j << 14) ^ j >>> 3 ^ (j >>> 7 | j << 25));
-  b = b + 1 | 0;
- } while ((b | 0) < 64);
- b = f;
- j = a;
- cK(b | 0, j | 0, 32) | 0;
- j = f + 28 | 0;
- b = f + 16 | 0;
- h = c[b >> 2] | 0;
- k = f + 20 | 0;
- l = f + 24 | 0;
- m = c[l >> 2] | 0;
- n = (c[j >> 2] | 0) + 1116352408 + (c[g >> 2] | 0) + ((h >>> 6 | h << 26) ^ (h >>> 11 | h << 21) ^ (h >>> 25 | h << 7)) + ((m ^ c[k >> 2]) & h ^ m) | 0;
- m = f | 0;
- h = c[m >> 2] | 0;
- g = f + 4 | 0;
- o = c[g >> 2] | 0;
- p = f + 8 | 0;
- q = c[p >> 2] | 0;
- r = f + 12 | 0;
- c[r >> 2] = (c[r >> 2] | 0) + n;
- s = ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + n + ((q | o) & h | q & o) | 0;
- c[j >> 2] = s;
- o = c[r >> 2] | 0;
- q = c[k >> 2] | 0;
- h = (c[l >> 2] | 0) + 1899447441 + (c[e + 4 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[b >> 2]) & o ^ q) | 0;
- q = c[m >> 2] | 0;
- o = c[g >> 2] | 0;
- c[p >> 2] = (c[p >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[l >> 2] = n;
- q = c[p >> 2] | 0;
- o = c[b >> 2] | 0;
- s = (c[k >> 2] | 0) - 1245643825 + (c[e + 8 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[r >> 2]) & q ^ o) | 0;
- o = c[j >> 2] | 0;
- q = c[m >> 2] | 0;
- c[g >> 2] = (c[g >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[k >> 2] = h;
- o = c[g >> 2] | 0;
- q = c[r >> 2] | 0;
- n = (c[b >> 2] | 0) - 373957723 + (c[e + 12 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[p >> 2]) & o ^ q) | 0;
- q = c[l >> 2] | 0;
- o = c[j >> 2] | 0;
- c[m >> 2] = (c[m >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[b >> 2] = s;
- q = c[m >> 2] | 0;
- o = c[p >> 2] | 0;
- h = (c[r >> 2] | 0) + 961987163 + (c[e + 16 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[g >> 2]) & q ^ o) | 0;
- o = c[k >> 2] | 0;
- q = c[l >> 2] | 0;
- c[j >> 2] = (c[j >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[r >> 2] = n;
- o = c[j >> 2] | 0;
- q = c[g >> 2] | 0;
- s = (c[p >> 2] | 0) + 1508970993 + (c[e + 20 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[m >> 2]) & o ^ q) | 0;
- q = c[b >> 2] | 0;
- o = c[k >> 2] | 0;
- c[l >> 2] = (c[l >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[p >> 2] = h;
- q = c[l >> 2] | 0;
- o = c[m >> 2] | 0;
- n = (c[g >> 2] | 0) - 1841331548 + (c[e + 24 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[j >> 2]) & q ^ o) | 0;
- o = c[r >> 2] | 0;
- q = c[b >> 2] | 0;
- c[k >> 2] = (c[k >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[g >> 2] = s;
- o = c[k >> 2] | 0;
- q = c[j >> 2] | 0;
- h = (c[m >> 2] | 0) - 1424204075 + (c[e + 28 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[l >> 2]) & o ^ q) | 0;
- q = c[p >> 2] | 0;
- o = c[r >> 2] | 0;
- c[b >> 2] = (c[b >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[m >> 2] = n;
- q = c[b >> 2] | 0;
- o = c[l >> 2] | 0;
- s = (c[j >> 2] | 0) - 670586216 + (c[e + 32 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[k >> 2]) & q ^ o) | 0;
- o = c[g >> 2] | 0;
- q = c[p >> 2] | 0;
- c[r >> 2] = (c[r >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[j >> 2] = h;
- o = c[r >> 2] | 0;
- q = c[k >> 2] | 0;
- n = (c[l >> 2] | 0) + 310598401 + (c[e + 36 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[b >> 2]) & o ^ q) | 0;
- q = c[m >> 2] | 0;
- o = c[g >> 2] | 0;
- c[p >> 2] = (c[p >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[l >> 2] = s;
- q = c[p >> 2] | 0;
- o = c[b >> 2] | 0;
- h = (c[k >> 2] | 0) + 607225278 + (c[e + 40 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[r >> 2]) & q ^ o) | 0;
- o = c[j >> 2] | 0;
- q = c[m >> 2] | 0;
- c[g >> 2] = (c[g >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[k >> 2] = n;
- o = c[g >> 2] | 0;
- q = c[r >> 2] | 0;
- s = (c[b >> 2] | 0) + 1426881987 + (c[e + 44 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[p >> 2]) & o ^ q) | 0;
- q = c[l >> 2] | 0;
- o = c[j >> 2] | 0;
- c[m >> 2] = (c[m >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[b >> 2] = h;
- q = c[m >> 2] | 0;
- o = c[p >> 2] | 0;
- n = (c[r >> 2] | 0) + 1925078388 + (c[e + 48 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[g >> 2]) & q ^ o) | 0;
- o = c[k >> 2] | 0;
- q = c[l >> 2] | 0;
- c[j >> 2] = (c[j >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[r >> 2] = s;
- o = c[j >> 2] | 0;
- q = c[g >> 2] | 0;
- h = (c[p >> 2] | 0) - 2132889090 + (c[e + 52 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[m >> 2]) & o ^ q) | 0;
- q = c[b >> 2] | 0;
- o = c[k >> 2] | 0;
- c[l >> 2] = (c[l >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[p >> 2] = n;
- q = c[l >> 2] | 0;
- o = c[m >> 2] | 0;
- s = (c[g >> 2] | 0) - 1680079193 + (c[e + 56 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[j >> 2]) & q ^ o) | 0;
- o = c[r >> 2] | 0;
- q = c[b >> 2] | 0;
- c[k >> 2] = (c[k >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[g >> 2] = h;
- o = c[k >> 2] | 0;
- q = c[j >> 2] | 0;
- n = (c[m >> 2] | 0) - 1046744716 + (c[e + 60 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[l >> 2]) & o ^ q) | 0;
- q = c[p >> 2] | 0;
- o = c[r >> 2] | 0;
- c[b >> 2] = (c[b >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[m >> 2] = s;
- q = c[b >> 2] | 0;
- o = c[l >> 2] | 0;
- h = (c[j >> 2] | 0) - 459576895 + (c[e + 64 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[k >> 2]) & q ^ o) | 0;
- o = c[g >> 2] | 0;
- q = c[p >> 2] | 0;
- c[r >> 2] = (c[r >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[j >> 2] = n;
- o = c[r >> 2] | 0;
- q = c[k >> 2] | 0;
- s = (c[l >> 2] | 0) - 272742522 + (c[e + 68 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[b >> 2]) & o ^ q) | 0;
- q = c[m >> 2] | 0;
- o = c[g >> 2] | 0;
- c[p >> 2] = (c[p >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[l >> 2] = h;
- q = c[p >> 2] | 0;
- o = c[b >> 2] | 0;
- n = (c[k >> 2] | 0) + 264347078 + (c[e + 72 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[r >> 2]) & q ^ o) | 0;
- o = c[j >> 2] | 0;
- q = c[m >> 2] | 0;
- c[g >> 2] = (c[g >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[k >> 2] = s;
- o = c[g >> 2] | 0;
- q = c[r >> 2] | 0;
- h = (c[b >> 2] | 0) + 604807628 + (c[e + 76 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[p >> 2]) & o ^ q) | 0;
- q = c[l >> 2] | 0;
- o = c[j >> 2] | 0;
- c[m >> 2] = (c[m >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[b >> 2] = n;
- q = c[m >> 2] | 0;
- o = c[p >> 2] | 0;
- s = (c[r >> 2] | 0) + 770255983 + (c[e + 80 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[g >> 2]) & q ^ o) | 0;
- o = c[k >> 2] | 0;
- q = c[l >> 2] | 0;
- c[j >> 2] = (c[j >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[r >> 2] = h;
- o = c[j >> 2] | 0;
- q = c[g >> 2] | 0;
- n = (c[p >> 2] | 0) + 1249150122 + (c[e + 84 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[m >> 2]) & o ^ q) | 0;
- q = c[b >> 2] | 0;
- o = c[k >> 2] | 0;
- c[l >> 2] = (c[l >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[p >> 2] = s;
- q = c[l >> 2] | 0;
- o = c[m >> 2] | 0;
- h = (c[g >> 2] | 0) + 1555081692 + (c[e + 88 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[j >> 2]) & q ^ o) | 0;
- o = c[r >> 2] | 0;
- q = c[b >> 2] | 0;
- c[k >> 2] = (c[k >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[g >> 2] = n;
- o = c[k >> 2] | 0;
- q = c[j >> 2] | 0;
- s = (c[m >> 2] | 0) + 1996064986 + (c[e + 92 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[l >> 2]) & o ^ q) | 0;
- q = c[p >> 2] | 0;
- o = c[r >> 2] | 0;
- c[b >> 2] = (c[b >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[m >> 2] = h;
- q = c[b >> 2] | 0;
- o = c[l >> 2] | 0;
- n = (c[j >> 2] | 0) - 1740746414 + (c[e + 96 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[k >> 2]) & q ^ o) | 0;
- o = c[g >> 2] | 0;
- q = c[p >> 2] | 0;
- c[r >> 2] = (c[r >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[j >> 2] = s;
- o = c[r >> 2] | 0;
- q = c[k >> 2] | 0;
- h = (c[l >> 2] | 0) - 1473132947 + (c[e + 100 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[b >> 2]) & o ^ q) | 0;
- q = c[m >> 2] | 0;
- o = c[g >> 2] | 0;
- c[p >> 2] = (c[p >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[l >> 2] = n;
- q = c[p >> 2] | 0;
- o = c[b >> 2] | 0;
- s = (c[k >> 2] | 0) - 1341970488 + (c[e + 104 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[r >> 2]) & q ^ o) | 0;
- o = c[j >> 2] | 0;
- q = c[m >> 2] | 0;
- c[g >> 2] = (c[g >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[k >> 2] = h;
- o = c[g >> 2] | 0;
- q = c[r >> 2] | 0;
- n = (c[b >> 2] | 0) - 1084653625 + (c[e + 108 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[p >> 2]) & o ^ q) | 0;
- q = c[l >> 2] | 0;
- o = c[j >> 2] | 0;
- c[m >> 2] = (c[m >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[b >> 2] = s;
- q = c[m >> 2] | 0;
- o = c[p >> 2] | 0;
- h = (c[r >> 2] | 0) - 958395405 + (c[e + 112 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[g >> 2]) & q ^ o) | 0;
- o = c[k >> 2] | 0;
- q = c[l >> 2] | 0;
- c[j >> 2] = (c[j >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[r >> 2] = n;
- o = c[j >> 2] | 0;
- q = c[g >> 2] | 0;
- s = (c[p >> 2] | 0) - 710438585 + (c[e + 116 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[m >> 2]) & o ^ q) | 0;
- q = c[b >> 2] | 0;
- o = c[k >> 2] | 0;
- c[l >> 2] = (c[l >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[p >> 2] = h;
- q = c[l >> 2] | 0;
- o = c[m >> 2] | 0;
- n = (c[g >> 2] | 0) + 113926993 + (c[e + 120 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[j >> 2]) & q ^ o) | 0;
- o = c[r >> 2] | 0;
- q = c[b >> 2] | 0;
- c[k >> 2] = (c[k >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[g >> 2] = s;
- o = c[k >> 2] | 0;
- q = c[j >> 2] | 0;
- h = (c[m >> 2] | 0) + 338241895 + (c[e + 124 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[l >> 2]) & o ^ q) | 0;
- q = c[p >> 2] | 0;
- o = c[r >> 2] | 0;
- c[b >> 2] = (c[b >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[m >> 2] = n;
- q = c[b >> 2] | 0;
- o = c[l >> 2] | 0;
- s = (c[j >> 2] | 0) + 666307205 + (c[e + 128 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[k >> 2]) & q ^ o) | 0;
- o = c[g >> 2] | 0;
- q = c[p >> 2] | 0;
- c[r >> 2] = (c[r >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[j >> 2] = h;
- o = c[r >> 2] | 0;
- q = c[k >> 2] | 0;
- n = (c[l >> 2] | 0) + 773529912 + (c[e + 132 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[b >> 2]) & o ^ q) | 0;
- q = c[m >> 2] | 0;
- o = c[g >> 2] | 0;
- c[p >> 2] = (c[p >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[l >> 2] = s;
- q = c[p >> 2] | 0;
- o = c[b >> 2] | 0;
- h = (c[k >> 2] | 0) + 1294757372 + (c[e + 136 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[r >> 2]) & q ^ o) | 0;
- o = c[j >> 2] | 0;
- q = c[m >> 2] | 0;
- c[g >> 2] = (c[g >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[k >> 2] = n;
- o = c[g >> 2] | 0;
- q = c[r >> 2] | 0;
- s = (c[b >> 2] | 0) + 1396182291 + (c[e + 140 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[p >> 2]) & o ^ q) | 0;
- q = c[l >> 2] | 0;
- o = c[j >> 2] | 0;
- c[m >> 2] = (c[m >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[b >> 2] = h;
- q = c[m >> 2] | 0;
- o = c[p >> 2] | 0;
- n = (c[r >> 2] | 0) + 1695183700 + (c[e + 144 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[g >> 2]) & q ^ o) | 0;
- o = c[k >> 2] | 0;
- q = c[l >> 2] | 0;
- c[j >> 2] = (c[j >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[r >> 2] = s;
- o = c[j >> 2] | 0;
- q = c[g >> 2] | 0;
- h = (c[p >> 2] | 0) + 1986661051 + (c[e + 148 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[m >> 2]) & o ^ q) | 0;
- q = c[b >> 2] | 0;
- o = c[k >> 2] | 0;
- c[l >> 2] = (c[l >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[p >> 2] = n;
- q = c[l >> 2] | 0;
- o = c[m >> 2] | 0;
- s = (c[g >> 2] | 0) - 2117940946 + (c[e + 152 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[j >> 2]) & q ^ o) | 0;
- o = c[r >> 2] | 0;
- q = c[b >> 2] | 0;
- c[k >> 2] = (c[k >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[g >> 2] = h;
- o = c[k >> 2] | 0;
- q = c[j >> 2] | 0;
- n = (c[m >> 2] | 0) - 1838011259 + (c[e + 156 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[l >> 2]) & o ^ q) | 0;
- q = c[p >> 2] | 0;
- o = c[r >> 2] | 0;
- c[b >> 2] = (c[b >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[m >> 2] = s;
- q = c[b >> 2] | 0;
- o = c[l >> 2] | 0;
- h = (c[j >> 2] | 0) - 1564481375 + (c[e + 160 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[k >> 2]) & q ^ o) | 0;
- o = c[g >> 2] | 0;
- q = c[p >> 2] | 0;
- c[r >> 2] = (c[r >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[j >> 2] = n;
- o = c[r >> 2] | 0;
- q = c[k >> 2] | 0;
- s = (c[l >> 2] | 0) - 1474664885 + (c[e + 164 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[b >> 2]) & o ^ q) | 0;
- q = c[m >> 2] | 0;
- o = c[g >> 2] | 0;
- c[p >> 2] = (c[p >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[l >> 2] = h;
- q = c[p >> 2] | 0;
- o = c[b >> 2] | 0;
- n = (c[k >> 2] | 0) - 1035236496 + (c[e + 168 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[r >> 2]) & q ^ o) | 0;
- o = c[j >> 2] | 0;
- q = c[m >> 2] | 0;
- c[g >> 2] = (c[g >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[k >> 2] = s;
- o = c[g >> 2] | 0;
- q = c[r >> 2] | 0;
- h = (c[b >> 2] | 0) - 949202525 + (c[e + 172 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[p >> 2]) & o ^ q) | 0;
- q = c[l >> 2] | 0;
- o = c[j >> 2] | 0;
- c[m >> 2] = (c[m >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[b >> 2] = n;
- q = c[m >> 2] | 0;
- o = c[p >> 2] | 0;
- s = (c[r >> 2] | 0) - 778901479 + (c[e + 176 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[g >> 2]) & q ^ o) | 0;
- o = c[k >> 2] | 0;
- q = c[l >> 2] | 0;
- c[j >> 2] = (c[j >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[r >> 2] = h;
- o = c[j >> 2] | 0;
- q = c[g >> 2] | 0;
- n = (c[p >> 2] | 0) - 694614492 + (c[e + 180 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[m >> 2]) & o ^ q) | 0;
- q = c[b >> 2] | 0;
- o = c[k >> 2] | 0;
- c[l >> 2] = (c[l >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[p >> 2] = s;
- q = c[l >> 2] | 0;
- o = c[m >> 2] | 0;
- h = (c[g >> 2] | 0) - 200395387 + (c[e + 184 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[j >> 2]) & q ^ o) | 0;
- o = c[r >> 2] | 0;
- q = c[b >> 2] | 0;
- c[k >> 2] = (c[k >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[g >> 2] = n;
- o = c[k >> 2] | 0;
- q = c[j >> 2] | 0;
- s = (c[m >> 2] | 0) + 275423344 + (c[e + 188 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[l >> 2]) & o ^ q) | 0;
- q = c[p >> 2] | 0;
- o = c[r >> 2] | 0;
- c[b >> 2] = (c[b >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[m >> 2] = h;
- q = c[b >> 2] | 0;
- o = c[l >> 2] | 0;
- n = (c[j >> 2] | 0) + 430227734 + (c[e + 192 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[k >> 2]) & q ^ o) | 0;
- o = c[g >> 2] | 0;
- q = c[p >> 2] | 0;
- c[r >> 2] = (c[r >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[j >> 2] = s;
- o = c[r >> 2] | 0;
- q = c[k >> 2] | 0;
- h = (c[l >> 2] | 0) + 506948616 + (c[e + 196 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[b >> 2]) & o ^ q) | 0;
- q = c[m >> 2] | 0;
- o = c[g >> 2] | 0;
- c[p >> 2] = (c[p >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[l >> 2] = n;
- q = c[p >> 2] | 0;
- o = c[b >> 2] | 0;
- s = (c[k >> 2] | 0) + 659060556 + (c[e + 200 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[r >> 2]) & q ^ o) | 0;
- o = c[j >> 2] | 0;
- q = c[m >> 2] | 0;
- c[g >> 2] = (c[g >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[k >> 2] = h;
- o = c[g >> 2] | 0;
- q = c[r >> 2] | 0;
- n = (c[b >> 2] | 0) + 883997877 + (c[e + 204 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[p >> 2]) & o ^ q) | 0;
- q = c[l >> 2] | 0;
- o = c[j >> 2] | 0;
- c[m >> 2] = (c[m >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[b >> 2] = s;
- q = c[m >> 2] | 0;
- o = c[p >> 2] | 0;
- h = (c[r >> 2] | 0) + 958139571 + (c[e + 208 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[g >> 2]) & q ^ o) | 0;
- o = c[k >> 2] | 0;
- q = c[l >> 2] | 0;
- c[j >> 2] = (c[j >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[r >> 2] = n;
- o = c[j >> 2] | 0;
- q = c[g >> 2] | 0;
- s = (c[p >> 2] | 0) + 1322822218 + (c[e + 212 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[m >> 2]) & o ^ q) | 0;
- q = c[b >> 2] | 0;
- o = c[k >> 2] | 0;
- c[l >> 2] = (c[l >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[p >> 2] = h;
- q = c[l >> 2] | 0;
- o = c[m >> 2] | 0;
- n = (c[g >> 2] | 0) + 1537002063 + (c[e + 216 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[j >> 2]) & q ^ o) | 0;
- o = c[r >> 2] | 0;
- q = c[b >> 2] | 0;
- c[k >> 2] = (c[k >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[g >> 2] = s;
- o = c[k >> 2] | 0;
- q = c[j >> 2] | 0;
- h = (c[m >> 2] | 0) + 1747873779 + (c[e + 220 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[l >> 2]) & o ^ q) | 0;
- q = c[p >> 2] | 0;
- o = c[r >> 2] | 0;
- c[b >> 2] = (c[b >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[m >> 2] = n;
- q = c[b >> 2] | 0;
- o = c[l >> 2] | 0;
- s = (c[j >> 2] | 0) + 1955562222 + (c[e + 224 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[k >> 2]) & q ^ o) | 0;
- o = c[g >> 2] | 0;
- q = c[p >> 2] | 0;
- c[r >> 2] = (c[r >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[j >> 2] = h;
- o = c[r >> 2] | 0;
- q = c[k >> 2] | 0;
- n = (c[l >> 2] | 0) + 2024104815 + (c[e + 228 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[b >> 2]) & o ^ q) | 0;
- q = c[m >> 2] | 0;
- o = c[g >> 2] | 0;
- c[p >> 2] = (c[p >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((o | q) & h | o & q) | 0;
- c[l >> 2] = s;
- q = c[p >> 2] | 0;
- o = c[b >> 2] | 0;
- h = (c[k >> 2] | 0) - 2067236844 + (c[e + 232 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[r >> 2]) & q ^ o) | 0;
- o = c[j >> 2] | 0;
- q = c[m >> 2] | 0;
- c[g >> 2] = (c[g >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((q | o) & s | q & o) | 0;
- c[k >> 2] = n;
- o = c[g >> 2] | 0;
- q = c[r >> 2] | 0;
- s = (c[b >> 2] | 0) - 1933114872 + (c[e + 236 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[p >> 2]) & o ^ q) | 0;
- q = c[l >> 2] | 0;
- o = c[j >> 2] | 0;
- c[m >> 2] = (c[m >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((o | q) & n | o & q) | 0;
- c[b >> 2] = h;
- q = c[m >> 2] | 0;
- o = c[p >> 2] | 0;
- n = (c[r >> 2] | 0) - 1866530822 + (c[e + 240 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[g >> 2]) & q ^ o) | 0;
- o = c[k >> 2] | 0;
- q = c[l >> 2] | 0;
- c[j >> 2] = (c[j >> 2] | 0) + n;
- s = n + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((q | o) & h | q & o) | 0;
- c[r >> 2] = s;
- o = c[j >> 2] | 0;
- q = c[g >> 2] | 0;
- h = (c[p >> 2] | 0) - 1538233109 + (c[e + 244 >> 2] | 0) + ((o >>> 6 | o << 26) ^ (o >>> 11 | o << 21) ^ (o >>> 25 | o << 7)) + ((q ^ c[m >> 2]) & o ^ q) | 0;
- q = c[b >> 2] | 0;
- o = c[k >> 2] | 0;
- c[l >> 2] = (c[l >> 2] | 0) + h;
- n = h + ((s >>> 2 | s << 30) ^ (s >>> 13 | s << 19) ^ (s >>> 22 | s << 10)) + ((o | q) & s | o & q) | 0;
- c[p >> 2] = n;
- q = c[l >> 2] | 0;
- o = c[m >> 2] | 0;
- s = (c[g >> 2] | 0) - 1090935817 + (c[e + 248 >> 2] | 0) + ((q >>> 6 | q << 26) ^ (q >>> 11 | q << 21) ^ (q >>> 25 | q << 7)) + ((o ^ c[j >> 2]) & q ^ o) | 0;
- o = c[r >> 2] | 0;
- q = c[b >> 2] | 0;
- c[k >> 2] = (c[k >> 2] | 0) + s;
- h = s + ((n >>> 2 | n << 30) ^ (n >>> 13 | n << 19) ^ (n >>> 22 | n << 10)) + ((q | o) & n | q & o) | 0;
- c[g >> 2] = h;
- g = c[k >> 2] | 0;
- k = c[j >> 2] | 0;
- j = (c[m >> 2] | 0) - 965641998 + (c[e + 252 >> 2] | 0) + ((g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7)) + ((k ^ c[l >> 2]) & g ^ k) | 0;
- k = c[p >> 2] | 0;
- p = c[r >> 2] | 0;
- c[b >> 2] = (c[b >> 2] | 0) + j;
- b = j + ((h >>> 2 | h << 30) ^ (h >>> 13 | h << 19) ^ (h >>> 22 | h << 10)) + ((p | k) & h | p & k) | 0;
- c[m >> 2] = b;
- c[a >> 2] = (c[a >> 2] | 0) + b;
- b = a + 4 | 0;
- c[b >> 2] = (c[b >> 2] | 0) + (c[f + 4 >> 2] | 0);
- b = a + 8 | 0;
- c[b >> 2] = (c[b >> 2] | 0) + (c[f + 8 >> 2] | 0);
- b = a + 12 | 0;
- c[b >> 2] = (c[b >> 2] | 0) + (c[f + 12 >> 2] | 0);
- b = a + 16 | 0;
- c[b >> 2] = (c[b >> 2] | 0) + (c[f + 16 >> 2] | 0);
- b = a + 20 | 0;
- c[b >> 2] = (c[b >> 2] | 0) + (c[f + 20 >> 2] | 0);
- b = a + 24 | 0;
- c[b >> 2] = (c[b >> 2] | 0) + (c[f + 24 >> 2] | 0);
- b = a + 28 | 0;
- c[b >> 2] = (c[b >> 2] | 0) + (c[f + 28 >> 2] | 0);
- i = d;
- return;
-}
-function bB(b, c) {
- b = b | 0;
- c = c | 0;
- a[b + 3 | 0] = c & 255;
- a[b + 2 | 0] = c >>> 8 & 255;
- a[b + 1 | 0] = c >>> 16 & 255;
- a[b] = c >>> 24 & 255;
- return;
-}
-function bC(a) {
- a = a | 0;
- return (d[a + 2 | 0] | 0) << 8 | (d[a + 3 | 0] | 0) | (d[a + 1 | 0] | 0) << 16 | (d[a] | 0) << 24 | 0;
-}
-function bD(a, b) {
- a = a | 0;
- b = b | 0;
- bE(b);
- bF(a, b | 0, 32);
- cL(b | 0, 0, 104);
- return;
-}
-function bE(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0;
- b = i;
- i = i + 8 | 0;
- d = b | 0;
- bF(d, a + 32 | 0, 8);
- e = (c[a + 36 >> 2] | 0) >>> 3 & 63;
- bz(a, 720, (e >>> 0 < 56 ? 56 : 120) - e | 0);
- bz(a, d, 8);
- i = b;
- return;
-}
-function bF(a, b, d) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- var e = 0, f = 0;
- e = d >>> 2;
- if ((e | 0) == 0) {
-  return;
- } else {
-  f = 0;
- }
- do {
-  bB(a + (f << 2) | 0, c[b + (f << 2) >> 2] | 0);
-  f = f + 1 | 0;
- } while (f >>> 0 < e >>> 0);
- return;
-}
-function bG(b, c, d) {
- b = b | 0;
- c = c | 0;
- d = d | 0;
- var e = 0, f = 0, g = 0, h = 0, j = 0, k = 0, l = 0;
- e = i;
- i = i + 96 | 0;
- f = e | 0;
- if (d >>> 0 > 64) {
-  g = b | 0;
-  bt(g);
-  bz(g, c, d);
-  h = e + 64 | 0;
-  bD(h, g);
-  j = h;
-  k = 32;
- } else {
-  j = c;
-  k = d;
- }
- d = b | 0;
- bt(d);
- c = f | 0;
- cL(c | 0, 54, 64);
- if ((k | 0) != 0) {
-  h = 0;
-  do {
-   g = f + h | 0;
-   a[g] = a[g] ^ a[j + h | 0];
-   h = h + 1 | 0;
-  } while (h >>> 0 < k >>> 0);
- }
- bz(d, c, 64);
- d = b + 104 | 0;
- bt(d);
- cL(c | 0, 92, 64);
- if ((k | 0) == 0) {
-  bz(d, c, 64);
-  i = e;
-  return;
- } else {
-  l = 0;
- }
- do {
-  b = f + l | 0;
-  a[b] = a[b] ^ a[j + l | 0];
-  l = l + 1 | 0;
- } while (l >>> 0 < k >>> 0);
- bz(d, c, 64);
- i = e;
- return;
-}
-function bH(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- bz(a | 0, b, c);
- return;
-}
-function bI(a, b) {
- a = a | 0;
- b = b | 0;
- var c = 0, d = 0, e = 0;
- c = i;
- i = i + 32 | 0;
- d = c | 0;
- bD(d, b | 0);
- e = b + 104 | 0;
- bz(e, d, 32);
- bD(a, e);
- i = c;
- return;
-}
-function bJ(b, c, d, e, f, g, h, j) {
- b = b | 0;
- c = c | 0;
- d = d | 0;
- e = e | 0;
- f = f | 0;
- g = g | 0;
- h = h | 0;
- j = j | 0;
- var k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0;
- k = i;
- i = i + 488 | 0;
- l = k | 0;
- m = k + 208 | 0;
- n = k + 424 | 0;
- o = k + 456 | 0;
- bG(l, b, c);
- bH(l, d, e);
- if ((j | 0) == 0) {
-  i = k;
-  return;
- }
- e = k + 416 | 0;
- d = m;
- p = l;
- l = n | 0;
- q = o | 0;
- r = 0;
- s = g >>> 0 < r >>> 0 | g >>> 0 == r >>> 0 & f >>> 0 < 2 >>> 0;
- r = 0;
- t = 0;
- do {
-  r = r + 1 | 0;
-  bB(e, r);
-  cK(d | 0, p | 0, 208) | 0;
-  bH(m, e, 4);
-  bI(l, m);
-  cK(q | 0, l | 0, 32) | 0;
-  if (!s) {
-   u = 0;
-   v = 2;
-   do {
-    bG(m, b, c);
-    bH(m, l, 32);
-    bI(l, m);
-    w = 0;
-    do {
-     x = o + w | 0;
-     a[x] = a[x] ^ a[n + w | 0];
-     w = w + 1 | 0;
-    } while ((w | 0) < 32);
-    v = cN(v, u, 1, 0) | 0;
-    u = H;
-   } while (!(u >>> 0 > g >>> 0 | u >>> 0 == g >>> 0 & v >>> 0 > f >>> 0));
-  }
-  v = j - t | 0;
-  u = v >>> 0 > 32 ? 32 : v;
-  v = h + t | 0;
-  cK(v | 0, q | 0, u) | 0;
-  t = r << 5;
- } while (t >>> 0 < j >>> 0);
- i = k;
- return;
-}
-function bK(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0;
- d = 0;
- do {
-  c[a + (d << 2) >> 2] = bC(b + (d << 2) | 0) | 0;
-  d = d + 1 | 0;
- } while (d >>> 0 < 16);
- return;
-}
-function bL(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0, L = 0, M = 0, N = 0, O = 0, P = 0, Q = 0, R = 0, S = 0, T = 0, U = 0, V = 0, W = 0, X = 0, Y = 0, Z = 0, _ = 0, $ = 0, aa = 0, ab = 0, ac = 0, ad = 0, ae = 0, af = 0, ag = 0, ah = 0, ai = 0, aj = 0, ak = 0, al = 0, am = 0, an = 0, ao = 0, ap = 0, aq = 0, as = 0, at = 0, av = 0, aw = 0, ax = 0, ay = 0, az = 0, aA = 0, aB = 0, aC = 0, aD = 0, aE = 0, aF = 0, aG = 0, aH = 0, aI = 0;
- do {
-  if (a >>> 0 < 245) {
-   if (a >>> 0 < 11) {
-    b = 16;
-   } else {
-    b = a + 11 & -8;
-   }
-   d = b >>> 3;
-   e = c[208] | 0;
-   f = e >>> (d >>> 0);
-   if ((f & 3 | 0) != 0) {
-    g = (f & 1 ^ 1) + d | 0;
-    h = g << 1;
-    i = 872 + (h << 2) | 0;
-    j = 872 + (h + 2 << 2) | 0;
-    h = c[j >> 2] | 0;
-    k = h + 8 | 0;
-    l = c[k >> 2] | 0;
-    do {
-     if ((i | 0) == (l | 0)) {
-      c[208] = e & ~(1 << g);
-     } else {
-      if (l >>> 0 < (c[212] | 0) >>> 0) {
-       au();
-       return 0;
-      }
-      m = l + 12 | 0;
-      if ((c[m >> 2] | 0) == (h | 0)) {
-       c[m >> 2] = i;
-       c[j >> 2] = l;
-       break;
-      } else {
-       au();
-       return 0;
-      }
-     }
-    } while (0);
-    l = g << 3;
-    c[h + 4 >> 2] = l | 3;
-    j = h + (l | 4) | 0;
-    c[j >> 2] = c[j >> 2] | 1;
-    n = k;
-    return n | 0;
-   }
-   if (b >>> 0 <= (c[210] | 0) >>> 0) {
-    o = b;
-    break;
-   }
-   if ((f | 0) != 0) {
-    j = 2 << d;
-    l = f << d & (j | -j);
-    j = (l & -l) - 1 | 0;
-    l = j >>> 12 & 16;
-    i = j >>> (l >>> 0);
-    j = i >>> 5 & 8;
-    m = i >>> (j >>> 0);
-    i = m >>> 2 & 4;
-    p = m >>> (i >>> 0);
-    m = p >>> 1 & 2;
-    q = p >>> (m >>> 0);
-    p = q >>> 1 & 1;
-    r = (j | l | i | m | p) + (q >>> (p >>> 0)) | 0;
-    p = r << 1;
-    q = 872 + (p << 2) | 0;
-    m = 872 + (p + 2 << 2) | 0;
-    p = c[m >> 2] | 0;
-    i = p + 8 | 0;
-    l = c[i >> 2] | 0;
-    do {
-     if ((q | 0) == (l | 0)) {
-      c[208] = e & ~(1 << r);
-     } else {
-      if (l >>> 0 < (c[212] | 0) >>> 0) {
-       au();
-       return 0;
-      }
-      j = l + 12 | 0;
-      if ((c[j >> 2] | 0) == (p | 0)) {
-       c[j >> 2] = q;
-       c[m >> 2] = l;
-       break;
-      } else {
-       au();
-       return 0;
-      }
-     }
-    } while (0);
-    l = r << 3;
-    m = l - b | 0;
-    c[p + 4 >> 2] = b | 3;
-    q = p;
-    e = q + b | 0;
-    c[q + (b | 4) >> 2] = m | 1;
-    c[q + l >> 2] = m;
-    l = c[210] | 0;
-    if ((l | 0) != 0) {
-     q = c[213] | 0;
-     d = l >>> 3;
-     l = d << 1;
-     f = 872 + (l << 2) | 0;
-     k = c[208] | 0;
-     h = 1 << d;
-     do {
-      if ((k & h | 0) == 0) {
-       c[208] = k | h;
-       s = f;
-       t = 872 + (l + 2 << 2) | 0;
-      } else {
-       d = 872 + (l + 2 << 2) | 0;
-       g = c[d >> 2] | 0;
-       if (g >>> 0 >= (c[212] | 0) >>> 0) {
-        s = g;
-        t = d;
-        break;
-       }
-       au();
-       return 0;
-      }
-     } while (0);
-     c[t >> 2] = q;
-     c[s + 12 >> 2] = q;
-     c[q + 8 >> 2] = s;
-     c[q + 12 >> 2] = f;
-    }
-    c[210] = m;
-    c[213] = e;
-    n = i;
-    return n | 0;
-   }
-   l = c[209] | 0;
-   if ((l | 0) == 0) {
-    o = b;
-    break;
-   }
-   h = (l & -l) - 1 | 0;
-   l = h >>> 12 & 16;
-   k = h >>> (l >>> 0);
-   h = k >>> 5 & 8;
-   p = k >>> (h >>> 0);
-   k = p >>> 2 & 4;
-   r = p >>> (k >>> 0);
-   p = r >>> 1 & 2;
-   d = r >>> (p >>> 0);
-   r = d >>> 1 & 1;
-   g = c[1136 + ((h | l | k | p | r) + (d >>> (r >>> 0)) << 2) >> 2] | 0;
-   r = g;
-   d = g;
-   p = (c[g + 4 >> 2] & -8) - b | 0;
-   while (1) {
-    g = c[r + 16 >> 2] | 0;
-    if ((g | 0) == 0) {
-     k = c[r + 20 >> 2] | 0;
-     if ((k | 0) == 0) {
-      break;
-     } else {
-      u = k;
-     }
-    } else {
-     u = g;
-    }
-    g = (c[u + 4 >> 2] & -8) - b | 0;
-    k = g >>> 0 < p >>> 0;
-    r = u;
-    d = k ? u : d;
-    p = k ? g : p;
-   }
-   r = d;
-   i = c[212] | 0;
-   if (r >>> 0 < i >>> 0) {
-    au();
-    return 0;
-   }
-   e = r + b | 0;
-   m = e;
-   if (r >>> 0 >= e >>> 0) {
-    au();
-    return 0;
-   }
-   e = c[d + 24 >> 2] | 0;
-   f = c[d + 12 >> 2] | 0;
-   do {
-    if ((f | 0) == (d | 0)) {
-     q = d + 20 | 0;
-     g = c[q >> 2] | 0;
-     if ((g | 0) == 0) {
-      k = d + 16 | 0;
-      l = c[k >> 2] | 0;
-      if ((l | 0) == 0) {
-       v = 0;
-       break;
-      } else {
-       w = l;
-       x = k;
-      }
-     } else {
-      w = g;
-      x = q;
-     }
-     while (1) {
-      q = w + 20 | 0;
-      g = c[q >> 2] | 0;
-      if ((g | 0) != 0) {
-       w = g;
-       x = q;
-       continue;
-      }
-      q = w + 16 | 0;
-      g = c[q >> 2] | 0;
-      if ((g | 0) == 0) {
-       break;
-      } else {
-       w = g;
-       x = q;
-      }
-     }
-     if (x >>> 0 < i >>> 0) {
-      au();
-      return 0;
-     } else {
-      c[x >> 2] = 0;
-      v = w;
-      break;
-     }
-    } else {
-     q = c[d + 8 >> 2] | 0;
-     if (q >>> 0 < i >>> 0) {
-      au();
-      return 0;
-     }
-     g = q + 12 | 0;
-     if ((c[g >> 2] | 0) != (d | 0)) {
-      au();
-      return 0;
-     }
-     k = f + 8 | 0;
-     if ((c[k >> 2] | 0) == (d | 0)) {
-      c[g >> 2] = f;
-      c[k >> 2] = q;
-      v = f;
-      break;
-     } else {
-      au();
-      return 0;
-     }
-    }
-   } while (0);
-   L223 : do {
-    if ((e | 0) != 0) {
-     f = d + 28 | 0;
-     i = 1136 + (c[f >> 2] << 2) | 0;
-     do {
-      if ((d | 0) == (c[i >> 2] | 0)) {
-       c[i >> 2] = v;
-       if ((v | 0) != 0) {
-        break;
-       }
-       c[209] = c[209] & ~(1 << c[f >> 2]);
-       break L223;
-      } else {
-       if (e >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-        return 0;
-       }
-       q = e + 16 | 0;
-       if ((c[q >> 2] | 0) == (d | 0)) {
-        c[q >> 2] = v;
-       } else {
-        c[e + 20 >> 2] = v;
-       }
-       if ((v | 0) == 0) {
-        break L223;
-       }
-      }
-     } while (0);
-     if (v >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-      return 0;
-     }
-     c[v + 24 >> 2] = e;
-     f = c[d + 16 >> 2] | 0;
-     do {
-      if ((f | 0) != 0) {
-       if (f >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-        return 0;
-       } else {
-        c[v + 16 >> 2] = f;
-        c[f + 24 >> 2] = v;
-        break;
-       }
-      }
-     } while (0);
-     f = c[d + 20 >> 2] | 0;
-     if ((f | 0) == 0) {
-      break;
-     }
-     if (f >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-      return 0;
-     } else {
-      c[v + 20 >> 2] = f;
-      c[f + 24 >> 2] = v;
-      break;
-     }
-    }
-   } while (0);
-   if (p >>> 0 < 16) {
-    e = p + b | 0;
-    c[d + 4 >> 2] = e | 3;
-    f = r + (e + 4) | 0;
-    c[f >> 2] = c[f >> 2] | 1;
-   } else {
-    c[d + 4 >> 2] = b | 3;
-    c[r + (b | 4) >> 2] = p | 1;
-    c[r + (p + b) >> 2] = p;
-    f = c[210] | 0;
-    if ((f | 0) != 0) {
-     e = c[213] | 0;
-     i = f >>> 3;
-     f = i << 1;
-     q = 872 + (f << 2) | 0;
-     k = c[208] | 0;
-     g = 1 << i;
-     do {
-      if ((k & g | 0) == 0) {
-       c[208] = k | g;
-       y = q;
-       z = 872 + (f + 2 << 2) | 0;
-      } else {
-       i = 872 + (f + 2 << 2) | 0;
-       l = c[i >> 2] | 0;
-       if (l >>> 0 >= (c[212] | 0) >>> 0) {
-        y = l;
-        z = i;
-        break;
-       }
-       au();
-       return 0;
-      }
-     } while (0);
-     c[z >> 2] = e;
-     c[y + 12 >> 2] = e;
-     c[e + 8 >> 2] = y;
-     c[e + 12 >> 2] = q;
-    }
-    c[210] = p;
-    c[213] = m;
-   }
-   f = d + 8 | 0;
-   if ((f | 0) == 0) {
-    o = b;
-    break;
-   } else {
-    n = f;
-   }
-   return n | 0;
-  } else {
-   if (a >>> 0 > 4294967231) {
-    o = -1;
-    break;
-   }
-   f = a + 11 | 0;
-   g = f & -8;
-   k = c[209] | 0;
-   if ((k | 0) == 0) {
-    o = g;
-    break;
-   }
-   r = -g | 0;
-   i = f >>> 8;
-   do {
-    if ((i | 0) == 0) {
-     A = 0;
-    } else {
-     if (g >>> 0 > 16777215) {
-      A = 31;
-      break;
-     }
-     f = (i + 1048320 | 0) >>> 16 & 8;
-     l = i << f;
-     h = (l + 520192 | 0) >>> 16 & 4;
-     j = l << h;
-     l = (j + 245760 | 0) >>> 16 & 2;
-     B = 14 - (h | f | l) + (j << l >>> 15) | 0;
-     A = g >>> ((B + 7 | 0) >>> 0) & 1 | B << 1;
-    }
-   } while (0);
-   i = c[1136 + (A << 2) >> 2] | 0;
-   L271 : do {
-    if ((i | 0) == 0) {
-     C = 0;
-     D = r;
-     E = 0;
-    } else {
-     if ((A | 0) == 31) {
-      F = 0;
-     } else {
-      F = 25 - (A >>> 1) | 0;
-     }
-     d = 0;
-     m = r;
-     p = i;
-     q = g << F;
-     e = 0;
-     while (1) {
-      B = c[p + 4 >> 2] & -8;
-      l = B - g | 0;
-      if (l >>> 0 < m >>> 0) {
-       if ((B | 0) == (g | 0)) {
-        C = p;
-        D = l;
-        E = p;
-        break L271;
-       } else {
-        G = p;
-        H = l;
-       }
-      } else {
-       G = d;
-       H = m;
-      }
-      l = c[p + 20 >> 2] | 0;
-      B = c[p + 16 + (q >>> 31 << 2) >> 2] | 0;
-      j = (l | 0) == 0 | (l | 0) == (B | 0) ? e : l;
-      if ((B | 0) == 0) {
-       C = G;
-       D = H;
-       E = j;
-       break;
-      } else {
-       d = G;
-       m = H;
-       p = B;
-       q = q << 1;
-       e = j;
-      }
-     }
-    }
-   } while (0);
-   if ((E | 0) == 0 & (C | 0) == 0) {
-    i = 2 << A;
-    r = k & (i | -i);
-    if ((r | 0) == 0) {
-     o = g;
-     break;
-    }
-    i = (r & -r) - 1 | 0;
-    r = i >>> 12 & 16;
-    e = i >>> (r >>> 0);
-    i = e >>> 5 & 8;
-    q = e >>> (i >>> 0);
-    e = q >>> 2 & 4;
-    p = q >>> (e >>> 0);
-    q = p >>> 1 & 2;
-    m = p >>> (q >>> 0);
-    p = m >>> 1 & 1;
-    I = c[1136 + ((i | r | e | q | p) + (m >>> (p >>> 0)) << 2) >> 2] | 0;
-   } else {
-    I = E;
-   }
-   if ((I | 0) == 0) {
-    J = D;
-    K = C;
-   } else {
-    p = I;
-    m = D;
-    q = C;
-    while (1) {
-     e = (c[p + 4 >> 2] & -8) - g | 0;
-     r = e >>> 0 < m >>> 0;
-     i = r ? e : m;
-     e = r ? p : q;
-     r = c[p + 16 >> 2] | 0;
-     if ((r | 0) != 0) {
-      p = r;
-      m = i;
-      q = e;
-      continue;
-     }
-     r = c[p + 20 >> 2] | 0;
-     if ((r | 0) == 0) {
-      J = i;
-      K = e;
-      break;
-     } else {
-      p = r;
-      m = i;
-      q = e;
-     }
-    }
-   }
-   if ((K | 0) == 0) {
-    o = g;
-    break;
-   }
-   if (J >>> 0 >= ((c[210] | 0) - g | 0) >>> 0) {
-    o = g;
-    break;
-   }
-   q = K;
-   m = c[212] | 0;
-   if (q >>> 0 < m >>> 0) {
-    au();
-    return 0;
-   }
-   p = q + g | 0;
-   k = p;
-   if (q >>> 0 >= p >>> 0) {
-    au();
-    return 0;
-   }
-   e = c[K + 24 >> 2] | 0;
-   i = c[K + 12 >> 2] | 0;
-   do {
-    if ((i | 0) == (K | 0)) {
-     r = K + 20 | 0;
-     d = c[r >> 2] | 0;
-     if ((d | 0) == 0) {
-      j = K + 16 | 0;
-      B = c[j >> 2] | 0;
-      if ((B | 0) == 0) {
-       L = 0;
-       break;
-      } else {
-       M = B;
-       N = j;
-      }
-     } else {
-      M = d;
-      N = r;
-     }
-     while (1) {
-      r = M + 20 | 0;
-      d = c[r >> 2] | 0;
-      if ((d | 0) != 0) {
-       M = d;
-       N = r;
-       continue;
-      }
-      r = M + 16 | 0;
-      d = c[r >> 2] | 0;
-      if ((d | 0) == 0) {
-       break;
-      } else {
-       M = d;
-       N = r;
-      }
-     }
-     if (N >>> 0 < m >>> 0) {
-      au();
-      return 0;
-     } else {
-      c[N >> 2] = 0;
-      L = M;
-      break;
-     }
-    } else {
-     r = c[K + 8 >> 2] | 0;
-     if (r >>> 0 < m >>> 0) {
-      au();
-      return 0;
-     }
-     d = r + 12 | 0;
-     if ((c[d >> 2] | 0) != (K | 0)) {
-      au();
-      return 0;
-     }
-     j = i + 8 | 0;
-     if ((c[j >> 2] | 0) == (K | 0)) {
-      c[d >> 2] = i;
-      c[j >> 2] = r;
-      L = i;
-      break;
-     } else {
-      au();
-      return 0;
-     }
-    }
-   } while (0);
-   L321 : do {
-    if ((e | 0) != 0) {
-     i = K + 28 | 0;
-     m = 1136 + (c[i >> 2] << 2) | 0;
-     do {
-      if ((K | 0) == (c[m >> 2] | 0)) {
-       c[m >> 2] = L;
-       if ((L | 0) != 0) {
-        break;
-       }
-       c[209] = c[209] & ~(1 << c[i >> 2]);
-       break L321;
-      } else {
-       if (e >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-        return 0;
-       }
-       r = e + 16 | 0;
-       if ((c[r >> 2] | 0) == (K | 0)) {
-        c[r >> 2] = L;
-       } else {
-        c[e + 20 >> 2] = L;
-       }
-       if ((L | 0) == 0) {
-        break L321;
-       }
-      }
-     } while (0);
-     if (L >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-      return 0;
-     }
-     c[L + 24 >> 2] = e;
-     i = c[K + 16 >> 2] | 0;
-     do {
-      if ((i | 0) != 0) {
-       if (i >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-        return 0;
-       } else {
-        c[L + 16 >> 2] = i;
-        c[i + 24 >> 2] = L;
-        break;
-       }
-      }
-     } while (0);
-     i = c[K + 20 >> 2] | 0;
-     if ((i | 0) == 0) {
-      break;
-     }
-     if (i >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-      return 0;
-     } else {
-      c[L + 20 >> 2] = i;
-      c[i + 24 >> 2] = L;
-      break;
-     }
-    }
-   } while (0);
-   do {
-    if (J >>> 0 < 16) {
-     e = J + g | 0;
-     c[K + 4 >> 2] = e | 3;
-     i = q + (e + 4) | 0;
-     c[i >> 2] = c[i >> 2] | 1;
-    } else {
-     c[K + 4 >> 2] = g | 3;
-     c[q + (g | 4) >> 2] = J | 1;
-     c[q + (J + g) >> 2] = J;
-     i = J >>> 3;
-     if (J >>> 0 < 256) {
-      e = i << 1;
-      m = 872 + (e << 2) | 0;
-      r = c[208] | 0;
-      j = 1 << i;
-      do {
-       if ((r & j | 0) == 0) {
-        c[208] = r | j;
-        O = m;
-        P = 872 + (e + 2 << 2) | 0;
-       } else {
-        i = 872 + (e + 2 << 2) | 0;
-        d = c[i >> 2] | 0;
-        if (d >>> 0 >= (c[212] | 0) >>> 0) {
-         O = d;
-         P = i;
-         break;
-        }
-        au();
-        return 0;
-       }
-      } while (0);
-      c[P >> 2] = k;
-      c[O + 12 >> 2] = k;
-      c[q + (g + 8) >> 2] = O;
-      c[q + (g + 12) >> 2] = m;
-      break;
-     }
-     e = p;
-     j = J >>> 8;
-     do {
-      if ((j | 0) == 0) {
-       Q = 0;
-      } else {
-       if (J >>> 0 > 16777215) {
-        Q = 31;
-        break;
-       }
-       r = (j + 1048320 | 0) >>> 16 & 8;
-       i = j << r;
-       d = (i + 520192 | 0) >>> 16 & 4;
-       B = i << d;
-       i = (B + 245760 | 0) >>> 16 & 2;
-       l = 14 - (d | r | i) + (B << i >>> 15) | 0;
-       Q = J >>> ((l + 7 | 0) >>> 0) & 1 | l << 1;
-      }
-     } while (0);
-     j = 1136 + (Q << 2) | 0;
-     c[q + (g + 28) >> 2] = Q;
-     c[q + (g + 20) >> 2] = 0;
-     c[q + (g + 16) >> 2] = 0;
-     m = c[209] | 0;
-     l = 1 << Q;
-     if ((m & l | 0) == 0) {
-      c[209] = m | l;
-      c[j >> 2] = e;
-      c[q + (g + 24) >> 2] = j;
-      c[q + (g + 12) >> 2] = e;
-      c[q + (g + 8) >> 2] = e;
-      break;
-     }
-     if ((Q | 0) == 31) {
-      R = 0;
-     } else {
-      R = 25 - (Q >>> 1) | 0;
-     }
-     l = J << R;
-     m = c[j >> 2] | 0;
-     while (1) {
-      if ((c[m + 4 >> 2] & -8 | 0) == (J | 0)) {
-       break;
-      }
-      S = m + 16 + (l >>> 31 << 2) | 0;
-      j = c[S >> 2] | 0;
-      if ((j | 0) == 0) {
-       T = 262;
-       break;
-      } else {
-       l = l << 1;
-       m = j;
-      }
-     }
-     if ((T | 0) == 262) {
-      if (S >>> 0 < (c[212] | 0) >>> 0) {
-       au();
-       return 0;
-      } else {
-       c[S >> 2] = e;
-       c[q + (g + 24) >> 2] = m;
-       c[q + (g + 12) >> 2] = e;
-       c[q + (g + 8) >> 2] = e;
-       break;
-      }
-     }
-     l = m + 8 | 0;
-     j = c[l >> 2] | 0;
-     i = c[212] | 0;
-     if (m >>> 0 < i >>> 0) {
-      au();
-      return 0;
-     }
-     if (j >>> 0 < i >>> 0) {
-      au();
-      return 0;
-     } else {
-      c[j + 12 >> 2] = e;
-      c[l >> 2] = e;
-      c[q + (g + 8) >> 2] = j;
-      c[q + (g + 12) >> 2] = m;
-      c[q + (g + 24) >> 2] = 0;
-      break;
-     }
-    }
-   } while (0);
-   q = K + 8 | 0;
-   if ((q | 0) == 0) {
-    o = g;
-    break;
-   } else {
-    n = q;
-   }
-   return n | 0;
-  }
- } while (0);
- K = c[210] | 0;
- if (o >>> 0 <= K >>> 0) {
-  S = K - o | 0;
-  J = c[213] | 0;
-  if (S >>> 0 > 15) {
-   R = J;
-   c[213] = R + o;
-   c[210] = S;
-   c[R + (o + 4) >> 2] = S | 1;
-   c[R + K >> 2] = S;
-   c[J + 4 >> 2] = o | 3;
-  } else {
-   c[210] = 0;
-   c[213] = 0;
-   c[J + 4 >> 2] = K | 3;
-   S = J + (K + 4) | 0;
-   c[S >> 2] = c[S >> 2] | 1;
-  }
-  n = J + 8 | 0;
-  return n | 0;
- }
- J = c[211] | 0;
- if (o >>> 0 < J >>> 0) {
-  S = J - o | 0;
-  c[211] = S;
-  J = c[214] | 0;
-  K = J;
-  c[214] = K + o;
-  c[K + (o + 4) >> 2] = S | 1;
-  c[J + 4 >> 2] = o | 3;
-  n = J + 8 | 0;
-  return n | 0;
- }
- do {
-  if ((c[200] | 0) == 0) {
-   J = ar(8) | 0;
-   if ((J - 1 & J | 0) == 0) {
-    c[202] = J;
-    c[201] = J;
-    c[203] = -1;
-    c[204] = 2097152;
-    c[205] = 0;
-    c[319] = 0;
-    c[200] = (a_(0) | 0) & -16 ^ 1431655768;
-    break;
-   } else {
-    au();
-    return 0;
-   }
-  }
- } while (0);
- J = o + 48 | 0;
- S = c[202] | 0;
- K = o + 47 | 0;
- R = S + K | 0;
- Q = -S | 0;
- S = R & Q;
- if (S >>> 0 <= o >>> 0) {
-  n = 0;
-  return n | 0;
- }
- O = c[318] | 0;
- do {
-  if ((O | 0) != 0) {
-   P = c[316] | 0;
-   L = P + S | 0;
-   if (L >>> 0 <= P >>> 0 | L >>> 0 > O >>> 0) {
-    n = 0;
-   } else {
-    break;
-   }
-   return n | 0;
-  }
- } while (0);
- L413 : do {
-  if ((c[319] & 4 | 0) == 0) {
-   O = c[214] | 0;
-   L415 : do {
-    if ((O | 0) == 0) {
-     T = 292;
-    } else {
-     L = O;
-     P = 1280;
-     while (1) {
-      U = P | 0;
-      M = c[U >> 2] | 0;
-      if (M >>> 0 <= L >>> 0) {
-       V = P + 4 | 0;
-       if ((M + (c[V >> 2] | 0) | 0) >>> 0 > L >>> 0) {
-        break;
-       }
-      }
-      M = c[P + 8 >> 2] | 0;
-      if ((M | 0) == 0) {
-       T = 292;
-       break L415;
-      } else {
-       P = M;
-      }
-     }
-     if ((P | 0) == 0) {
-      T = 292;
-      break;
-     }
-     L = R - (c[211] | 0) & Q;
-     if (L >>> 0 >= 2147483647) {
-      W = 0;
-      break;
-     }
-     m = aV(L | 0) | 0;
-     e = (m | 0) == ((c[U >> 2] | 0) + (c[V >> 2] | 0) | 0);
-     X = e ? m : -1;
-     Y = e ? L : 0;
-     Z = m;
-     _ = L;
-     T = 301;
-    }
-   } while (0);
-   do {
-    if ((T | 0) == 292) {
-     O = aV(0) | 0;
-     if ((O | 0) == -1) {
-      W = 0;
-      break;
-     }
-     g = O;
-     L = c[201] | 0;
-     m = L - 1 | 0;
-     if ((m & g | 0) == 0) {
-      $ = S;
-     } else {
-      $ = S - g + (m + g & -L) | 0;
-     }
-     L = c[316] | 0;
-     g = L + $ | 0;
-     if (!($ >>> 0 > o >>> 0 & $ >>> 0 < 2147483647)) {
-      W = 0;
-      break;
-     }
-     m = c[318] | 0;
-     if ((m | 0) != 0) {
-      if (g >>> 0 <= L >>> 0 | g >>> 0 > m >>> 0) {
-       W = 0;
-       break;
-      }
-     }
-     m = aV($ | 0) | 0;
-     g = (m | 0) == (O | 0);
-     X = g ? O : -1;
-     Y = g ? $ : 0;
-     Z = m;
-     _ = $;
-     T = 301;
-    }
-   } while (0);
-   L435 : do {
-    if ((T | 0) == 301) {
-     m = -_ | 0;
-     if ((X | 0) != -1) {
-      aa = Y;
-      ab = X;
-      T = 312;
-      break L413;
-     }
-     do {
-      if ((Z | 0) != -1 & _ >>> 0 < 2147483647 & _ >>> 0 < J >>> 0) {
-       g = c[202] | 0;
-       O = K - _ + g & -g;
-       if (O >>> 0 >= 2147483647) {
-        ac = _;
-        break;
-       }
-       if ((aV(O | 0) | 0) == -1) {
-        aV(m | 0) | 0;
-        W = Y;
-        break L435;
-       } else {
-        ac = O + _ | 0;
-        break;
-       }
-      } else {
-       ac = _;
-      }
-     } while (0);
-     if ((Z | 0) == -1) {
-      W = Y;
-     } else {
-      aa = ac;
-      ab = Z;
-      T = 312;
-      break L413;
-     }
-    }
-   } while (0);
-   c[319] = c[319] | 4;
-   ad = W;
-   T = 309;
-  } else {
-   ad = 0;
-   T = 309;
-  }
- } while (0);
- do {
-  if ((T | 0) == 309) {
-   if (S >>> 0 >= 2147483647) {
-    break;
-   }
-   W = aV(S | 0) | 0;
-   Z = aV(0) | 0;
-   if (!((Z | 0) != -1 & (W | 0) != -1 & W >>> 0 < Z >>> 0)) {
-    break;
-   }
-   ac = Z - W | 0;
-   Z = ac >>> 0 > (o + 40 | 0) >>> 0;
-   Y = Z ? W : -1;
-   if ((Y | 0) != -1) {
-    aa = Z ? ac : ad;
-    ab = Y;
-    T = 312;
-   }
-  }
- } while (0);
- do {
-  if ((T | 0) == 312) {
-   ad = (c[316] | 0) + aa | 0;
-   c[316] = ad;
-   if (ad >>> 0 > (c[317] | 0) >>> 0) {
-    c[317] = ad;
-   }
-   ad = c[214] | 0;
-   L455 : do {
-    if ((ad | 0) == 0) {
-     S = c[212] | 0;
-     if ((S | 0) == 0 | ab >>> 0 < S >>> 0) {
-      c[212] = ab;
-     }
-     c[320] = ab;
-     c[321] = aa;
-     c[323] = 0;
-     c[217] = c[200];
-     c[216] = -1;
-     S = 0;
-     do {
-      Y = S << 1;
-      ac = 872 + (Y << 2) | 0;
-      c[872 + (Y + 3 << 2) >> 2] = ac;
-      c[872 + (Y + 2 << 2) >> 2] = ac;
-      S = S + 1 | 0;
-     } while (S >>> 0 < 32);
-     S = ab + 8 | 0;
-     if ((S & 7 | 0) == 0) {
-      ae = 0;
-     } else {
-      ae = -S & 7;
-     }
-     S = aa - 40 - ae | 0;
-     c[214] = ab + ae;
-     c[211] = S;
-     c[ab + (ae + 4) >> 2] = S | 1;
-     c[ab + (aa - 36) >> 2] = 40;
-     c[215] = c[204];
-    } else {
-     S = 1280;
-     while (1) {
-      af = c[S >> 2] | 0;
-      ag = S + 4 | 0;
-      ah = c[ag >> 2] | 0;
-      if ((ab | 0) == (af + ah | 0)) {
-       T = 324;
-       break;
-      }
-      ac = c[S + 8 >> 2] | 0;
-      if ((ac | 0) == 0) {
-       break;
-      } else {
-       S = ac;
-      }
-     }
-     do {
-      if ((T | 0) == 324) {
-       if ((c[S + 12 >> 2] & 8 | 0) != 0) {
-        break;
-       }
-       ac = ad;
-       if (!(ac >>> 0 >= af >>> 0 & ac >>> 0 < ab >>> 0)) {
-        break;
-       }
-       c[ag >> 2] = ah + aa;
-       ac = c[214] | 0;
-       Y = (c[211] | 0) + aa | 0;
-       Z = ac;
-       W = ac + 8 | 0;
-       if ((W & 7 | 0) == 0) {
-        ai = 0;
-       } else {
-        ai = -W & 7;
-       }
-       W = Y - ai | 0;
-       c[214] = Z + ai;
-       c[211] = W;
-       c[Z + (ai + 4) >> 2] = W | 1;
-       c[Z + (Y + 4) >> 2] = 40;
-       c[215] = c[204];
-       break L455;
-      }
-     } while (0);
-     if (ab >>> 0 < (c[212] | 0) >>> 0) {
-      c[212] = ab;
-     }
-     S = ab + aa | 0;
-     Y = 1280;
-     while (1) {
-      aj = Y | 0;
-      if ((c[aj >> 2] | 0) == (S | 0)) {
-       T = 334;
-       break;
-      }
-      Z = c[Y + 8 >> 2] | 0;
-      if ((Z | 0) == 0) {
-       break;
-      } else {
-       Y = Z;
-      }
-     }
-     do {
-      if ((T | 0) == 334) {
-       if ((c[Y + 12 >> 2] & 8 | 0) != 0) {
-        break;
-       }
-       c[aj >> 2] = ab;
-       S = Y + 4 | 0;
-       c[S >> 2] = (c[S >> 2] | 0) + aa;
-       S = ab + 8 | 0;
-       if ((S & 7 | 0) == 0) {
-        ak = 0;
-       } else {
-        ak = -S & 7;
-       }
-       S = ab + (aa + 8) | 0;
-       if ((S & 7 | 0) == 0) {
-        al = 0;
-       } else {
-        al = -S & 7;
-       }
-       S = ab + (al + aa) | 0;
-       Z = S;
-       W = ak + o | 0;
-       ac = ab + W | 0;
-       _ = ac;
-       K = S - (ab + ak) - o | 0;
-       c[ab + (ak + 4) >> 2] = o | 3;
-       do {
-        if ((Z | 0) == (c[214] | 0)) {
-         J = (c[211] | 0) + K | 0;
-         c[211] = J;
-         c[214] = _;
-         c[ab + (W + 4) >> 2] = J | 1;
-        } else {
-         if ((Z | 0) == (c[213] | 0)) {
-          J = (c[210] | 0) + K | 0;
-          c[210] = J;
-          c[213] = _;
-          c[ab + (W + 4) >> 2] = J | 1;
-          c[ab + (J + W) >> 2] = J;
-          break;
-         }
-         J = aa + 4 | 0;
-         X = c[ab + (J + al) >> 2] | 0;
-         if ((X & 3 | 0) == 1) {
-          $ = X & -8;
-          V = X >>> 3;
-          L500 : do {
-           if (X >>> 0 < 256) {
-            U = c[ab + ((al | 8) + aa) >> 2] | 0;
-            Q = c[ab + (aa + 12 + al) >> 2] | 0;
-            R = 872 + (V << 1 << 2) | 0;
-            do {
-             if ((U | 0) != (R | 0)) {
-              if (U >>> 0 < (c[212] | 0) >>> 0) {
-               au();
-               return 0;
-              }
-              if ((c[U + 12 >> 2] | 0) == (Z | 0)) {
-               break;
-              }
-              au();
-              return 0;
-             }
-            } while (0);
-            if ((Q | 0) == (U | 0)) {
-             c[208] = c[208] & ~(1 << V);
-             break;
-            }
-            do {
-             if ((Q | 0) == (R | 0)) {
-              am = Q + 8 | 0;
-             } else {
-              if (Q >>> 0 < (c[212] | 0) >>> 0) {
-               au();
-               return 0;
-              }
-              m = Q + 8 | 0;
-              if ((c[m >> 2] | 0) == (Z | 0)) {
-               am = m;
-               break;
-              }
-              au();
-              return 0;
-             }
-            } while (0);
-            c[U + 12 >> 2] = Q;
-            c[am >> 2] = U;
-           } else {
-            R = S;
-            m = c[ab + ((al | 24) + aa) >> 2] | 0;
-            P = c[ab + (aa + 12 + al) >> 2] | 0;
-            do {
-             if ((P | 0) == (R | 0)) {
-              O = al | 16;
-              g = ab + (J + O) | 0;
-              L = c[g >> 2] | 0;
-              if ((L | 0) == 0) {
-               e = ab + (O + aa) | 0;
-               O = c[e >> 2] | 0;
-               if ((O | 0) == 0) {
-                an = 0;
-                break;
-               } else {
-                ao = O;
-                ap = e;
-               }
-              } else {
-               ao = L;
-               ap = g;
-              }
-              while (1) {
-               g = ao + 20 | 0;
-               L = c[g >> 2] | 0;
-               if ((L | 0) != 0) {
-                ao = L;
-                ap = g;
-                continue;
-               }
-               g = ao + 16 | 0;
-               L = c[g >> 2] | 0;
-               if ((L | 0) == 0) {
-                break;
-               } else {
-                ao = L;
-                ap = g;
-               }
-              }
-              if (ap >>> 0 < (c[212] | 0) >>> 0) {
-               au();
-               return 0;
-              } else {
-               c[ap >> 2] = 0;
-               an = ao;
-               break;
-              }
-             } else {
-              g = c[ab + ((al | 8) + aa) >> 2] | 0;
-              if (g >>> 0 < (c[212] | 0) >>> 0) {
-               au();
-               return 0;
-              }
-              L = g + 12 | 0;
-              if ((c[L >> 2] | 0) != (R | 0)) {
-               au();
-               return 0;
-              }
-              e = P + 8 | 0;
-              if ((c[e >> 2] | 0) == (R | 0)) {
-               c[L >> 2] = P;
-               c[e >> 2] = g;
-               an = P;
-               break;
-              } else {
-               au();
-               return 0;
-              }
-             }
-            } while (0);
-            if ((m | 0) == 0) {
-             break;
-            }
-            P = ab + (aa + 28 + al) | 0;
-            U = 1136 + (c[P >> 2] << 2) | 0;
-            do {
-             if ((R | 0) == (c[U >> 2] | 0)) {
-              c[U >> 2] = an;
-              if ((an | 0) != 0) {
-               break;
-              }
-              c[209] = c[209] & ~(1 << c[P >> 2]);
-              break L500;
-             } else {
-              if (m >>> 0 < (c[212] | 0) >>> 0) {
-               au();
-               return 0;
-              }
-              Q = m + 16 | 0;
-              if ((c[Q >> 2] | 0) == (R | 0)) {
-               c[Q >> 2] = an;
-              } else {
-               c[m + 20 >> 2] = an;
-              }
-              if ((an | 0) == 0) {
-               break L500;
-              }
-             }
-            } while (0);
-            if (an >>> 0 < (c[212] | 0) >>> 0) {
-             au();
-             return 0;
-            }
-            c[an + 24 >> 2] = m;
-            R = al | 16;
-            P = c[ab + (R + aa) >> 2] | 0;
-            do {
-             if ((P | 0) != 0) {
-              if (P >>> 0 < (c[212] | 0) >>> 0) {
-               au();
-               return 0;
-              } else {
-               c[an + 16 >> 2] = P;
-               c[P + 24 >> 2] = an;
-               break;
-              }
-             }
-            } while (0);
-            P = c[ab + (J + R) >> 2] | 0;
-            if ((P | 0) == 0) {
-             break;
-            }
-            if (P >>> 0 < (c[212] | 0) >>> 0) {
-             au();
-             return 0;
-            } else {
-             c[an + 20 >> 2] = P;
-             c[P + 24 >> 2] = an;
-             break;
-            }
-           }
-          } while (0);
-          aq = ab + (($ | al) + aa) | 0;
-          as = $ + K | 0;
-         } else {
-          aq = Z;
-          as = K;
-         }
-         J = aq + 4 | 0;
-         c[J >> 2] = c[J >> 2] & -2;
-         c[ab + (W + 4) >> 2] = as | 1;
-         c[ab + (as + W) >> 2] = as;
-         J = as >>> 3;
-         if (as >>> 0 < 256) {
-          V = J << 1;
-          X = 872 + (V << 2) | 0;
-          P = c[208] | 0;
-          m = 1 << J;
-          do {
-           if ((P & m | 0) == 0) {
-            c[208] = P | m;
-            at = X;
-            av = 872 + (V + 2 << 2) | 0;
-           } else {
-            J = 872 + (V + 2 << 2) | 0;
-            U = c[J >> 2] | 0;
-            if (U >>> 0 >= (c[212] | 0) >>> 0) {
-             at = U;
-             av = J;
-             break;
-            }
-            au();
-            return 0;
-           }
-          } while (0);
-          c[av >> 2] = _;
-          c[at + 12 >> 2] = _;
-          c[ab + (W + 8) >> 2] = at;
-          c[ab + (W + 12) >> 2] = X;
-          break;
-         }
-         V = ac;
-         m = as >>> 8;
-         do {
-          if ((m | 0) == 0) {
-           aw = 0;
-          } else {
-           if (as >>> 0 > 16777215) {
-            aw = 31;
-            break;
-           }
-           P = (m + 1048320 | 0) >>> 16 & 8;
-           $ = m << P;
-           J = ($ + 520192 | 0) >>> 16 & 4;
-           U = $ << J;
-           $ = (U + 245760 | 0) >>> 16 & 2;
-           Q = 14 - (J | P | $) + (U << $ >>> 15) | 0;
-           aw = as >>> ((Q + 7 | 0) >>> 0) & 1 | Q << 1;
-          }
-         } while (0);
-         m = 1136 + (aw << 2) | 0;
-         c[ab + (W + 28) >> 2] = aw;
-         c[ab + (W + 20) >> 2] = 0;
-         c[ab + (W + 16) >> 2] = 0;
-         X = c[209] | 0;
-         Q = 1 << aw;
-         if ((X & Q | 0) == 0) {
-          c[209] = X | Q;
-          c[m >> 2] = V;
-          c[ab + (W + 24) >> 2] = m;
-          c[ab + (W + 12) >> 2] = V;
-          c[ab + (W + 8) >> 2] = V;
-          break;
-         }
-         if ((aw | 0) == 31) {
-          ax = 0;
-         } else {
-          ax = 25 - (aw >>> 1) | 0;
-         }
-         Q = as << ax;
-         X = c[m >> 2] | 0;
-         while (1) {
-          if ((c[X + 4 >> 2] & -8 | 0) == (as | 0)) {
-           break;
-          }
-          ay = X + 16 + (Q >>> 31 << 2) | 0;
-          m = c[ay >> 2] | 0;
-          if ((m | 0) == 0) {
-           T = 407;
-           break;
-          } else {
-           Q = Q << 1;
-           X = m;
-          }
-         }
-         if ((T | 0) == 407) {
-          if (ay >>> 0 < (c[212] | 0) >>> 0) {
-           au();
-           return 0;
-          } else {
-           c[ay >> 2] = V;
-           c[ab + (W + 24) >> 2] = X;
-           c[ab + (W + 12) >> 2] = V;
-           c[ab + (W + 8) >> 2] = V;
-           break;
-          }
-         }
-         Q = X + 8 | 0;
-         m = c[Q >> 2] | 0;
-         $ = c[212] | 0;
-         if (X >>> 0 < $ >>> 0) {
-          au();
-          return 0;
-         }
-         if (m >>> 0 < $ >>> 0) {
-          au();
-          return 0;
-         } else {
-          c[m + 12 >> 2] = V;
-          c[Q >> 2] = V;
-          c[ab + (W + 8) >> 2] = m;
-          c[ab + (W + 12) >> 2] = X;
-          c[ab + (W + 24) >> 2] = 0;
-          break;
-         }
-        }
-       } while (0);
-       n = ab + (ak | 8) | 0;
-       return n | 0;
-      }
-     } while (0);
-     Y = ad;
-     W = 1280;
-     while (1) {
-      az = c[W >> 2] | 0;
-      if (az >>> 0 <= Y >>> 0) {
-       aA = c[W + 4 >> 2] | 0;
-       aB = az + aA | 0;
-       if (aB >>> 0 > Y >>> 0) {
-        break;
-       }
-      }
-      W = c[W + 8 >> 2] | 0;
-     }
-     W = az + (aA - 39) | 0;
-     if ((W & 7 | 0) == 0) {
-      aC = 0;
-     } else {
-      aC = -W & 7;
-     }
-     W = az + (aA - 47 + aC) | 0;
-     ac = W >>> 0 < (ad + 16 | 0) >>> 0 ? Y : W;
-     W = ac + 8 | 0;
-     _ = ab + 8 | 0;
-     if ((_ & 7 | 0) == 0) {
-      aD = 0;
-     } else {
-      aD = -_ & 7;
-     }
-     _ = aa - 40 - aD | 0;
-     c[214] = ab + aD;
-     c[211] = _;
-     c[ab + (aD + 4) >> 2] = _ | 1;
-     c[ab + (aa - 36) >> 2] = 40;
-     c[215] = c[204];
-     c[ac + 4 >> 2] = 27;
-     c[W >> 2] = c[320];
-     c[W + 4 >> 2] = c[1284 >> 2];
-     c[W + 8 >> 2] = c[1288 >> 2];
-     c[W + 12 >> 2] = c[1292 >> 2];
-     c[320] = ab;
-     c[321] = aa;
-     c[323] = 0;
-     c[322] = W;
-     W = ac + 28 | 0;
-     c[W >> 2] = 7;
-     if ((ac + 32 | 0) >>> 0 < aB >>> 0) {
-      _ = W;
-      while (1) {
-       W = _ + 4 | 0;
-       c[W >> 2] = 7;
-       if ((_ + 8 | 0) >>> 0 < aB >>> 0) {
-        _ = W;
-       } else {
-        break;
-       }
-      }
-     }
-     if ((ac | 0) == (Y | 0)) {
-      break;
-     }
-     _ = ac - ad | 0;
-     W = Y + (_ + 4) | 0;
-     c[W >> 2] = c[W >> 2] & -2;
-     c[ad + 4 >> 2] = _ | 1;
-     c[Y + _ >> 2] = _;
-     W = _ >>> 3;
-     if (_ >>> 0 < 256) {
-      K = W << 1;
-      Z = 872 + (K << 2) | 0;
-      S = c[208] | 0;
-      m = 1 << W;
-      do {
-       if ((S & m | 0) == 0) {
-        c[208] = S | m;
-        aE = Z;
-        aF = 872 + (K + 2 << 2) | 0;
-       } else {
-        W = 872 + (K + 2 << 2) | 0;
-        Q = c[W >> 2] | 0;
-        if (Q >>> 0 >= (c[212] | 0) >>> 0) {
-         aE = Q;
-         aF = W;
-         break;
-        }
-        au();
-        return 0;
-       }
-      } while (0);
-      c[aF >> 2] = ad;
-      c[aE + 12 >> 2] = ad;
-      c[ad + 8 >> 2] = aE;
-      c[ad + 12 >> 2] = Z;
-      break;
-     }
-     K = ad;
-     m = _ >>> 8;
-     do {
-      if ((m | 0) == 0) {
-       aG = 0;
-      } else {
-       if (_ >>> 0 > 16777215) {
-        aG = 31;
-        break;
-       }
-       S = (m + 1048320 | 0) >>> 16 & 8;
-       Y = m << S;
-       ac = (Y + 520192 | 0) >>> 16 & 4;
-       W = Y << ac;
-       Y = (W + 245760 | 0) >>> 16 & 2;
-       Q = 14 - (ac | S | Y) + (W << Y >>> 15) | 0;
-       aG = _ >>> ((Q + 7 | 0) >>> 0) & 1 | Q << 1;
-      }
-     } while (0);
-     m = 1136 + (aG << 2) | 0;
-     c[ad + 28 >> 2] = aG;
-     c[ad + 20 >> 2] = 0;
-     c[ad + 16 >> 2] = 0;
-     Z = c[209] | 0;
-     Q = 1 << aG;
-     if ((Z & Q | 0) == 0) {
-      c[209] = Z | Q;
-      c[m >> 2] = K;
-      c[ad + 24 >> 2] = m;
-      c[ad + 12 >> 2] = ad;
-      c[ad + 8 >> 2] = ad;
-      break;
-     }
-     if ((aG | 0) == 31) {
-      aH = 0;
-     } else {
-      aH = 25 - (aG >>> 1) | 0;
-     }
-     Q = _ << aH;
-     Z = c[m >> 2] | 0;
-     while (1) {
-      if ((c[Z + 4 >> 2] & -8 | 0) == (_ | 0)) {
-       break;
-      }
-      aI = Z + 16 + (Q >>> 31 << 2) | 0;
-      m = c[aI >> 2] | 0;
-      if ((m | 0) == 0) {
-       T = 442;
-       break;
-      } else {
-       Q = Q << 1;
-       Z = m;
-      }
-     }
-     if ((T | 0) == 442) {
-      if (aI >>> 0 < (c[212] | 0) >>> 0) {
-       au();
-       return 0;
-      } else {
-       c[aI >> 2] = K;
-       c[ad + 24 >> 2] = Z;
-       c[ad + 12 >> 2] = ad;
-       c[ad + 8 >> 2] = ad;
-       break;
-      }
-     }
-     Q = Z + 8 | 0;
-     _ = c[Q >> 2] | 0;
-     m = c[212] | 0;
-     if (Z >>> 0 < m >>> 0) {
-      au();
-      return 0;
-     }
-     if (_ >>> 0 < m >>> 0) {
-      au();
-      return 0;
-     } else {
-      c[_ + 12 >> 2] = K;
-      c[Q >> 2] = K;
-      c[ad + 8 >> 2] = _;
-      c[ad + 12 >> 2] = Z;
-      c[ad + 24 >> 2] = 0;
-      break;
-     }
-    }
-   } while (0);
-   ad = c[211] | 0;
-   if (ad >>> 0 <= o >>> 0) {
-    break;
-   }
-   _ = ad - o | 0;
-   c[211] = _;
-   ad = c[214] | 0;
-   Q = ad;
-   c[214] = Q + o;
-   c[Q + (o + 4) >> 2] = _ | 1;
-   c[ad + 4 >> 2] = o | 3;
-   n = ad + 8 | 0;
-   return n | 0;
-  }
- } while (0);
- c[(aX() | 0) >> 2] = 12;
- n = 0;
- return n | 0;
-}
-function bM(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0, L = 0, M = 0, N = 0, O = 0;
- if ((a | 0) == 0) {
-  return;
- }
- b = a - 8 | 0;
- d = b;
- e = c[212] | 0;
- if (b >>> 0 < e >>> 0) {
-  au();
- }
- f = c[a - 4 >> 2] | 0;
- g = f & 3;
- if ((g | 0) == 1) {
-  au();
- }
- h = f & -8;
- i = a + (h - 8) | 0;
- j = i;
- L672 : do {
-  if ((f & 1 | 0) == 0) {
-   k = c[b >> 2] | 0;
-   if ((g | 0) == 0) {
-    return;
-   }
-   l = -8 - k | 0;
-   m = a + l | 0;
-   n = m;
-   o = k + h | 0;
-   if (m >>> 0 < e >>> 0) {
-    au();
-   }
-   if ((n | 0) == (c[213] | 0)) {
-    p = a + (h - 4) | 0;
-    if ((c[p >> 2] & 3 | 0) != 3) {
-     q = n;
-     r = o;
-     break;
-    }
-    c[210] = o;
-    c[p >> 2] = c[p >> 2] & -2;
-    c[a + (l + 4) >> 2] = o | 1;
-    c[i >> 2] = o;
-    return;
-   }
-   p = k >>> 3;
-   if (k >>> 0 < 256) {
-    k = c[a + (l + 8) >> 2] | 0;
-    s = c[a + (l + 12) >> 2] | 0;
-    t = 872 + (p << 1 << 2) | 0;
-    do {
-     if ((k | 0) != (t | 0)) {
-      if (k >>> 0 < e >>> 0) {
-       au();
-      }
-      if ((c[k + 12 >> 2] | 0) == (n | 0)) {
-       break;
-      }
-      au();
-     }
-    } while (0);
-    if ((s | 0) == (k | 0)) {
-     c[208] = c[208] & ~(1 << p);
-     q = n;
-     r = o;
-     break;
-    }
-    do {
-     if ((s | 0) == (t | 0)) {
-      u = s + 8 | 0;
-     } else {
-      if (s >>> 0 < e >>> 0) {
-       au();
-      }
-      v = s + 8 | 0;
-      if ((c[v >> 2] | 0) == (n | 0)) {
-       u = v;
-       break;
-      }
-      au();
-     }
-    } while (0);
-    c[k + 12 >> 2] = s;
-    c[u >> 2] = k;
-    q = n;
-    r = o;
-    break;
-   }
-   t = m;
-   p = c[a + (l + 24) >> 2] | 0;
-   v = c[a + (l + 12) >> 2] | 0;
-   do {
-    if ((v | 0) == (t | 0)) {
-     w = a + (l + 20) | 0;
-     x = c[w >> 2] | 0;
-     if ((x | 0) == 0) {
-      y = a + (l + 16) | 0;
-      z = c[y >> 2] | 0;
-      if ((z | 0) == 0) {
-       A = 0;
-       break;
-      } else {
-       B = z;
-       C = y;
-      }
-     } else {
-      B = x;
-      C = w;
-     }
-     while (1) {
-      w = B + 20 | 0;
-      x = c[w >> 2] | 0;
-      if ((x | 0) != 0) {
-       B = x;
-       C = w;
-       continue;
-      }
-      w = B + 16 | 0;
-      x = c[w >> 2] | 0;
-      if ((x | 0) == 0) {
-       break;
-      } else {
-       B = x;
-       C = w;
-      }
-     }
-     if (C >>> 0 < e >>> 0) {
-      au();
-     } else {
-      c[C >> 2] = 0;
-      A = B;
-      break;
-     }
-    } else {
-     w = c[a + (l + 8) >> 2] | 0;
-     if (w >>> 0 < e >>> 0) {
-      au();
-     }
-     x = w + 12 | 0;
-     if ((c[x >> 2] | 0) != (t | 0)) {
-      au();
-     }
-     y = v + 8 | 0;
-     if ((c[y >> 2] | 0) == (t | 0)) {
-      c[x >> 2] = v;
-      c[y >> 2] = w;
-      A = v;
-      break;
-     } else {
-      au();
-     }
-    }
-   } while (0);
-   if ((p | 0) == 0) {
-    q = n;
-    r = o;
-    break;
-   }
-   v = a + (l + 28) | 0;
-   m = 1136 + (c[v >> 2] << 2) | 0;
-   do {
-    if ((t | 0) == (c[m >> 2] | 0)) {
-     c[m >> 2] = A;
-     if ((A | 0) != 0) {
-      break;
-     }
-     c[209] = c[209] & ~(1 << c[v >> 2]);
-     q = n;
-     r = o;
-     break L672;
-    } else {
-     if (p >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-     }
-     k = p + 16 | 0;
-     if ((c[k >> 2] | 0) == (t | 0)) {
-      c[k >> 2] = A;
-     } else {
-      c[p + 20 >> 2] = A;
-     }
-     if ((A | 0) == 0) {
-      q = n;
-      r = o;
-      break L672;
-     }
-    }
-   } while (0);
-   if (A >>> 0 < (c[212] | 0) >>> 0) {
-    au();
-   }
-   c[A + 24 >> 2] = p;
-   t = c[a + (l + 16) >> 2] | 0;
-   do {
-    if ((t | 0) != 0) {
-     if (t >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-     } else {
-      c[A + 16 >> 2] = t;
-      c[t + 24 >> 2] = A;
-      break;
-     }
-    }
-   } while (0);
-   t = c[a + (l + 20) >> 2] | 0;
-   if ((t | 0) == 0) {
-    q = n;
-    r = o;
-    break;
-   }
-   if (t >>> 0 < (c[212] | 0) >>> 0) {
-    au();
-   } else {
-    c[A + 20 >> 2] = t;
-    c[t + 24 >> 2] = A;
-    q = n;
-    r = o;
-    break;
-   }
-  } else {
-   q = d;
-   r = h;
-  }
- } while (0);
- d = q;
- if (d >>> 0 >= i >>> 0) {
-  au();
- }
- A = a + (h - 4) | 0;
- e = c[A >> 2] | 0;
- if ((e & 1 | 0) == 0) {
-  au();
- }
- do {
-  if ((e & 2 | 0) == 0) {
-   if ((j | 0) == (c[214] | 0)) {
-    B = (c[211] | 0) + r | 0;
-    c[211] = B;
-    c[214] = q;
-    c[q + 4 >> 2] = B | 1;
-    if ((q | 0) == (c[213] | 0)) {
-     c[213] = 0;
-     c[210] = 0;
-    }
-    if (B >>> 0 <= (c[215] | 0) >>> 0) {
-     return;
-    }
-    bS(0) | 0;
-    return;
-   }
-   if ((j | 0) == (c[213] | 0)) {
-    B = (c[210] | 0) + r | 0;
-    c[210] = B;
-    c[213] = q;
-    c[q + 4 >> 2] = B | 1;
-    c[d + B >> 2] = B;
-    return;
-   }
-   B = (e & -8) + r | 0;
-   C = e >>> 3;
-   L777 : do {
-    if (e >>> 0 < 256) {
-     u = c[a + h >> 2] | 0;
-     g = c[a + (h | 4) >> 2] | 0;
-     b = 872 + (C << 1 << 2) | 0;
-     do {
-      if ((u | 0) != (b | 0)) {
-       if (u >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-       }
-       if ((c[u + 12 >> 2] | 0) == (j | 0)) {
-        break;
-       }
-       au();
-      }
-     } while (0);
-     if ((g | 0) == (u | 0)) {
-      c[208] = c[208] & ~(1 << C);
-      break;
-     }
-     do {
-      if ((g | 0) == (b | 0)) {
-       D = g + 8 | 0;
-      } else {
-       if (g >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-       }
-       f = g + 8 | 0;
-       if ((c[f >> 2] | 0) == (j | 0)) {
-        D = f;
-        break;
-       }
-       au();
-      }
-     } while (0);
-     c[u + 12 >> 2] = g;
-     c[D >> 2] = u;
-    } else {
-     b = i;
-     f = c[a + (h + 16) >> 2] | 0;
-     t = c[a + (h | 4) >> 2] | 0;
-     do {
-      if ((t | 0) == (b | 0)) {
-       p = a + (h + 12) | 0;
-       v = c[p >> 2] | 0;
-       if ((v | 0) == 0) {
-        m = a + (h + 8) | 0;
-        k = c[m >> 2] | 0;
-        if ((k | 0) == 0) {
-         E = 0;
-         break;
-        } else {
-         F = k;
-         G = m;
-        }
-       } else {
-        F = v;
-        G = p;
-       }
-       while (1) {
-        p = F + 20 | 0;
-        v = c[p >> 2] | 0;
-        if ((v | 0) != 0) {
-         F = v;
-         G = p;
-         continue;
-        }
-        p = F + 16 | 0;
-        v = c[p >> 2] | 0;
-        if ((v | 0) == 0) {
-         break;
-        } else {
-         F = v;
-         G = p;
-        }
-       }
-       if (G >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-       } else {
-        c[G >> 2] = 0;
-        E = F;
-        break;
-       }
-      } else {
-       p = c[a + h >> 2] | 0;
-       if (p >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-       }
-       v = p + 12 | 0;
-       if ((c[v >> 2] | 0) != (b | 0)) {
-        au();
-       }
-       m = t + 8 | 0;
-       if ((c[m >> 2] | 0) == (b | 0)) {
-        c[v >> 2] = t;
-        c[m >> 2] = p;
-        E = t;
-        break;
-       } else {
-        au();
-       }
-      }
-     } while (0);
-     if ((f | 0) == 0) {
-      break;
-     }
-     t = a + (h + 20) | 0;
-     u = 1136 + (c[t >> 2] << 2) | 0;
-     do {
-      if ((b | 0) == (c[u >> 2] | 0)) {
-       c[u >> 2] = E;
-       if ((E | 0) != 0) {
-        break;
-       }
-       c[209] = c[209] & ~(1 << c[t >> 2]);
-       break L777;
-      } else {
-       if (f >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-       }
-       g = f + 16 | 0;
-       if ((c[g >> 2] | 0) == (b | 0)) {
-        c[g >> 2] = E;
-       } else {
-        c[f + 20 >> 2] = E;
-       }
-       if ((E | 0) == 0) {
-        break L777;
-       }
-      }
-     } while (0);
-     if (E >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-     }
-     c[E + 24 >> 2] = f;
-     b = c[a + (h + 8) >> 2] | 0;
-     do {
-      if ((b | 0) != 0) {
-       if (b >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-       } else {
-        c[E + 16 >> 2] = b;
-        c[b + 24 >> 2] = E;
-        break;
-       }
-      }
-     } while (0);
-     b = c[a + (h + 12) >> 2] | 0;
-     if ((b | 0) == 0) {
-      break;
-     }
-     if (b >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-     } else {
-      c[E + 20 >> 2] = b;
-      c[b + 24 >> 2] = E;
-      break;
-     }
-    }
-   } while (0);
-   c[q + 4 >> 2] = B | 1;
-   c[d + B >> 2] = B;
-   if ((q | 0) != (c[213] | 0)) {
-    H = B;
-    break;
-   }
-   c[210] = B;
-   return;
-  } else {
-   c[A >> 2] = e & -2;
-   c[q + 4 >> 2] = r | 1;
-   c[d + r >> 2] = r;
-   H = r;
-  }
- } while (0);
- r = H >>> 3;
- if (H >>> 0 < 256) {
-  d = r << 1;
-  e = 872 + (d << 2) | 0;
-  A = c[208] | 0;
-  E = 1 << r;
-  do {
-   if ((A & E | 0) == 0) {
-    c[208] = A | E;
-    I = e;
-    J = 872 + (d + 2 << 2) | 0;
-   } else {
-    r = 872 + (d + 2 << 2) | 0;
-    h = c[r >> 2] | 0;
-    if (h >>> 0 >= (c[212] | 0) >>> 0) {
-     I = h;
-     J = r;
-     break;
-    }
-    au();
-   }
-  } while (0);
-  c[J >> 2] = q;
-  c[I + 12 >> 2] = q;
-  c[q + 8 >> 2] = I;
-  c[q + 12 >> 2] = e;
-  return;
- }
- e = q;
- I = H >>> 8;
- do {
-  if ((I | 0) == 0) {
-   K = 0;
-  } else {
-   if (H >>> 0 > 16777215) {
-    K = 31;
-    break;
-   }
-   J = (I + 1048320 | 0) >>> 16 & 8;
-   d = I << J;
-   E = (d + 520192 | 0) >>> 16 & 4;
-   A = d << E;
-   d = (A + 245760 | 0) >>> 16 & 2;
-   r = 14 - (E | J | d) + (A << d >>> 15) | 0;
-   K = H >>> ((r + 7 | 0) >>> 0) & 1 | r << 1;
-  }
- } while (0);
- I = 1136 + (K << 2) | 0;
- c[q + 28 >> 2] = K;
- c[q + 20 >> 2] = 0;
- c[q + 16 >> 2] = 0;
- r = c[209] | 0;
- d = 1 << K;
- do {
-  if ((r & d | 0) == 0) {
-   c[209] = r | d;
-   c[I >> 2] = e;
-   c[q + 24 >> 2] = I;
-   c[q + 12 >> 2] = q;
-   c[q + 8 >> 2] = q;
-  } else {
-   if ((K | 0) == 31) {
-    L = 0;
-   } else {
-    L = 25 - (K >>> 1) | 0;
-   }
-   A = H << L;
-   J = c[I >> 2] | 0;
-   while (1) {
-    if ((c[J + 4 >> 2] & -8 | 0) == (H | 0)) {
-     break;
-    }
-    M = J + 16 + (A >>> 31 << 2) | 0;
-    E = c[M >> 2] | 0;
-    if ((E | 0) == 0) {
-     N = 621;
-     break;
-    } else {
-     A = A << 1;
-     J = E;
-    }
-   }
-   if ((N | 0) == 621) {
-    if (M >>> 0 < (c[212] | 0) >>> 0) {
-     au();
-    } else {
-     c[M >> 2] = e;
-     c[q + 24 >> 2] = J;
-     c[q + 12 >> 2] = q;
-     c[q + 8 >> 2] = q;
-     break;
-    }
-   }
-   A = J + 8 | 0;
-   B = c[A >> 2] | 0;
-   E = c[212] | 0;
-   if (J >>> 0 < E >>> 0) {
-    au();
-   }
-   if (B >>> 0 < E >>> 0) {
-    au();
-   } else {
-    c[B + 12 >> 2] = e;
-    c[A >> 2] = e;
-    c[q + 8 >> 2] = B;
-    c[q + 12 >> 2] = J;
-    c[q + 24 >> 2] = 0;
-    break;
-   }
-  }
- } while (0);
- q = (c[216] | 0) - 1 | 0;
- c[216] = q;
- if ((q | 0) == 0) {
-  O = 1288;
- } else {
-  return;
- }
- while (1) {
-  q = c[O >> 2] | 0;
-  if ((q | 0) == 0) {
-   break;
-  } else {
-   O = q + 8 | 0;
-  }
- }
- c[216] = -1;
- return;
-}
-function bN(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0;
- do {
-  if ((a | 0) == 0) {
-   d = 0;
-  } else {
-   e = ad(b, a) | 0;
-   if ((b | a) >>> 0 <= 65535) {
-    d = e;
-    break;
-   }
-   d = ((e >>> 0) / (a >>> 0) | 0 | 0) == (b | 0) ? e : -1;
-  }
- } while (0);
- b = bL(d) | 0;
- if ((b | 0) == 0) {
-  return b | 0;
- }
- if ((c[b - 4 >> 2] & 3 | 0) == 0) {
-  return b | 0;
- }
- cL(b | 0, 0, d | 0);
- return b | 0;
-}
-function bO(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0, g = 0;
- if ((a | 0) == 0) {
-  d = bL(b) | 0;
-  return d | 0;
- }
- if (b >>> 0 > 4294967231) {
-  c[(aX() | 0) >> 2] = 12;
-  d = 0;
-  return d | 0;
- }
- if (b >>> 0 < 11) {
-  e = 16;
- } else {
-  e = b + 11 & -8;
- }
- f = bT(a - 8 | 0, e) | 0;
- if ((f | 0) != 0) {
-  d = f + 8 | 0;
-  return d | 0;
- }
- f = bL(b) | 0;
- if ((f | 0) == 0) {
-  d = 0;
-  return d | 0;
- }
- e = c[a - 4 >> 2] | 0;
- g = (e & -8) - ((e & 3 | 0) == 0 ? 8 : 4) | 0;
- e = g >>> 0 < b >>> 0 ? g : b;
- cK(f | 0, a | 0, e) | 0;
- bM(a);
- d = f;
- return d | 0;
-}
-function bP(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0;
- if ((a | 0) == 0) {
-  return 0;
- }
- if (b >>> 0 > 4294967231) {
-  c[(aX() | 0) >> 2] = 12;
-  return 0;
- }
- if (b >>> 0 < 11) {
-  d = 16;
- } else {
-  d = b + 11 & -8;
- }
- b = a - 8 | 0;
- return ((bT(b, d) | 0) == (b | 0) ? a : 0) | 0;
-}
-function bQ(a, b) {
- a = a | 0;
- b = b | 0;
- var c = 0;
- if (a >>> 0 < 9) {
-  c = bL(b) | 0;
-  return c | 0;
- } else {
-  c = bR(a, b) | 0;
-  return c | 0;
- }
- return 0;
-}
-function bR(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0;
- d = a >>> 0 < 16 ? 16 : a;
- if ((d - 1 & d | 0) == 0) {
-  e = d;
- } else {
-  a = 16;
-  while (1) {
-   if (a >>> 0 < d >>> 0) {
-    a = a << 1;
-   } else {
-    e = a;
-    break;
-   }
-  }
- }
- if ((-64 - e | 0) >>> 0 <= b >>> 0) {
-  c[(aX() | 0) >> 2] = 12;
-  f = 0;
-  return f | 0;
- }
- if (b >>> 0 < 11) {
-  g = 16;
- } else {
-  g = b + 11 & -8;
- }
- b = bL(e + 12 + g | 0) | 0;
- if ((b | 0) == 0) {
-  f = 0;
-  return f | 0;
- }
- a = b - 8 | 0;
- d = a;
- h = e - 1 | 0;
- do {
-  if ((b & h | 0) == 0) {
-   i = d;
-  } else {
-   j = b + h & -e;
-   k = j - 8 | 0;
-   l = a;
-   if ((k - l | 0) >>> 0 > 15) {
-    m = k;
-   } else {
-    m = j + (e - 8) | 0;
-   }
-   j = m;
-   k = m - l | 0;
-   l = b - 4 | 0;
-   n = c[l >> 2] | 0;
-   o = (n & -8) - k | 0;
-   if ((n & 3 | 0) == 0) {
-    c[m >> 2] = (c[a >> 2] | 0) + k;
-    c[m + 4 >> 2] = o;
-    i = j;
-    break;
-   } else {
-    n = m + 4 | 0;
-    c[n >> 2] = o | c[n >> 2] & 1 | 2;
-    n = m + (o + 4) | 0;
-    c[n >> 2] = c[n >> 2] | 1;
-    c[l >> 2] = k | c[l >> 2] & 1 | 2;
-    l = b + (k - 4) | 0;
-    c[l >> 2] = c[l >> 2] | 1;
-    b9(d, k);
-    i = j;
-    break;
-   }
-  }
- } while (0);
- d = i + 4 | 0;
- b = c[d >> 2] | 0;
- do {
-  if ((b & 3 | 0) != 0) {
-   m = b & -8;
-   if (m >>> 0 <= (g + 16 | 0) >>> 0) {
-    break;
-   }
-   a = m - g | 0;
-   e = i;
-   c[d >> 2] = g | b & 1 | 2;
-   c[e + (g | 4) >> 2] = a | 3;
-   h = e + (m | 4) | 0;
-   c[h >> 2] = c[h >> 2] | 1;
-   b9(e + g | 0, a);
-  }
- } while (0);
- f = i + 8 | 0;
- return f | 0;
-}
-function bS(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0;
- do {
-  if ((c[200] | 0) == 0) {
-   b = ar(8) | 0;
-   if ((b - 1 & b | 0) == 0) {
-    c[202] = b;
-    c[201] = b;
-    c[203] = -1;
-    c[204] = 2097152;
-    c[205] = 0;
-    c[319] = 0;
-    c[200] = (a_(0) | 0) & -16 ^ 1431655768;
-    break;
-   } else {
-    au();
-    return 0;
-   }
-  }
- } while (0);
- if (a >>> 0 >= 4294967232) {
-  d = 0;
-  return d | 0;
- }
- b = c[214] | 0;
- if ((b | 0) == 0) {
-  d = 0;
-  return d | 0;
- }
- e = c[211] | 0;
- do {
-  if (e >>> 0 > (a + 40 | 0) >>> 0) {
-   f = c[202] | 0;
-   g = ad((((-40 - a - 1 + e + f | 0) >>> 0) / (f >>> 0) | 0) - 1 | 0, f) | 0;
-   h = b;
-   i = 1280;
-   while (1) {
-    j = c[i >> 2] | 0;
-    if (j >>> 0 <= h >>> 0) {
-     if ((j + (c[i + 4 >> 2] | 0) | 0) >>> 0 > h >>> 0) {
-      k = i;
-      break;
-     }
-    }
-    j = c[i + 8 >> 2] | 0;
-    if ((j | 0) == 0) {
-     k = 0;
-     break;
-    } else {
-     i = j;
-    }
-   }
-   if ((c[k + 12 >> 2] & 8 | 0) != 0) {
-    break;
-   }
-   i = aV(0) | 0;
-   h = k + 4 | 0;
-   if ((i | 0) != ((c[k >> 2] | 0) + (c[h >> 2] | 0) | 0)) {
-    break;
-   }
-   j = aV(-(g >>> 0 > 2147483646 ? -2147483648 - f | 0 : g) | 0) | 0;
-   l = aV(0) | 0;
-   if (!((j | 0) != -1 & l >>> 0 < i >>> 0)) {
-    break;
-   }
-   j = i - l | 0;
-   if ((i | 0) == (l | 0)) {
-    break;
-   }
-   c[h >> 2] = (c[h >> 2] | 0) - j;
-   c[316] = (c[316] | 0) - j;
-   h = c[214] | 0;
-   m = (c[211] | 0) - j | 0;
-   j = h;
-   n = h + 8 | 0;
-   if ((n & 7 | 0) == 0) {
-    o = 0;
-   } else {
-    o = -n & 7;
-   }
-   n = m - o | 0;
-   c[214] = j + o;
-   c[211] = n;
-   c[j + (o + 4) >> 2] = n | 1;
-   c[j + (m + 4) >> 2] = 40;
-   c[215] = c[204];
-   d = (i | 0) != (l | 0) | 0;
-   return d | 0;
-  }
- } while (0);
- if ((c[211] | 0) >>> 0 <= (c[215] | 0) >>> 0) {
-  d = 0;
-  return d | 0;
- }
- c[215] = -1;
- d = 0;
- return d | 0;
-}
-function bT(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0;
- d = a + 4 | 0;
- e = c[d >> 2] | 0;
- f = e & -8;
- g = a;
- h = g + f | 0;
- i = h;
- j = c[212] | 0;
- if (g >>> 0 < j >>> 0) {
-  au();
-  return 0;
- }
- k = e & 3;
- if (!((k | 0) != 1 & g >>> 0 < h >>> 0)) {
-  au();
-  return 0;
- }
- l = g + (f | 4) | 0;
- m = c[l >> 2] | 0;
- if ((m & 1 | 0) == 0) {
-  au();
-  return 0;
- }
- if ((k | 0) == 0) {
-  if (b >>> 0 < 256) {
-   n = 0;
-   return n | 0;
-  }
-  do {
-   if (f >>> 0 >= (b + 4 | 0) >>> 0) {
-    if ((f - b | 0) >>> 0 > c[202] << 1 >>> 0) {
-     break;
-    } else {
-     n = a;
-    }
-    return n | 0;
-   }
-  } while (0);
-  n = 0;
-  return n | 0;
- }
- if (f >>> 0 >= b >>> 0) {
-  k = f - b | 0;
-  if (k >>> 0 <= 15) {
-   n = a;
-   return n | 0;
-  }
-  c[d >> 2] = e & 1 | b | 2;
-  c[g + (b + 4) >> 2] = k | 3;
-  c[l >> 2] = c[l >> 2] | 1;
-  b9(g + b | 0, k);
-  n = a;
-  return n | 0;
- }
- if ((i | 0) == (c[214] | 0)) {
-  k = (c[211] | 0) + f | 0;
-  if (k >>> 0 <= b >>> 0) {
-   n = 0;
-   return n | 0;
-  }
-  l = k - b | 0;
-  c[d >> 2] = e & 1 | b | 2;
-  c[g + (b + 4) >> 2] = l | 1;
-  c[214] = g + b;
-  c[211] = l;
-  n = a;
-  return n | 0;
- }
- if ((i | 0) == (c[213] | 0)) {
-  l = (c[210] | 0) + f | 0;
-  if (l >>> 0 < b >>> 0) {
-   n = 0;
-   return n | 0;
-  }
-  k = l - b | 0;
-  if (k >>> 0 > 15) {
-   c[d >> 2] = e & 1 | b | 2;
-   c[g + (b + 4) >> 2] = k | 1;
-   c[g + l >> 2] = k;
-   o = g + (l + 4) | 0;
-   c[o >> 2] = c[o >> 2] & -2;
-   p = g + b | 0;
-   q = k;
-  } else {
-   c[d >> 2] = e & 1 | l | 2;
-   e = g + (l + 4) | 0;
-   c[e >> 2] = c[e >> 2] | 1;
-   p = 0;
-   q = 0;
-  }
-  c[210] = q;
-  c[213] = p;
-  n = a;
-  return n | 0;
- }
- if ((m & 2 | 0) != 0) {
-  n = 0;
-  return n | 0;
- }
- p = (m & -8) + f | 0;
- if (p >>> 0 < b >>> 0) {
-  n = 0;
-  return n | 0;
- }
- q = p - b | 0;
- e = m >>> 3;
- L1056 : do {
-  if (m >>> 0 < 256) {
-   l = c[g + (f + 8) >> 2] | 0;
-   k = c[g + (f + 12) >> 2] | 0;
-   o = 872 + (e << 1 << 2) | 0;
-   do {
-    if ((l | 0) != (o | 0)) {
-     if (l >>> 0 < j >>> 0) {
-      au();
-      return 0;
-     }
-     if ((c[l + 12 >> 2] | 0) == (i | 0)) {
-      break;
-     }
-     au();
-     return 0;
-    }
-   } while (0);
-   if ((k | 0) == (l | 0)) {
-    c[208] = c[208] & ~(1 << e);
-    break;
-   }
-   do {
-    if ((k | 0) == (o | 0)) {
-     r = k + 8 | 0;
-    } else {
-     if (k >>> 0 < j >>> 0) {
-      au();
-      return 0;
-     }
-     s = k + 8 | 0;
-     if ((c[s >> 2] | 0) == (i | 0)) {
-      r = s;
-      break;
-     }
-     au();
-     return 0;
-    }
-   } while (0);
-   c[l + 12 >> 2] = k;
-   c[r >> 2] = l;
-  } else {
-   o = h;
-   s = c[g + (f + 24) >> 2] | 0;
-   t = c[g + (f + 12) >> 2] | 0;
-   do {
-    if ((t | 0) == (o | 0)) {
-     u = g + (f + 20) | 0;
-     v = c[u >> 2] | 0;
-     if ((v | 0) == 0) {
-      w = g + (f + 16) | 0;
-      x = c[w >> 2] | 0;
-      if ((x | 0) == 0) {
-       y = 0;
-       break;
-      } else {
-       z = x;
-       A = w;
-      }
-     } else {
-      z = v;
-      A = u;
-     }
-     while (1) {
-      u = z + 20 | 0;
-      v = c[u >> 2] | 0;
-      if ((v | 0) != 0) {
-       z = v;
-       A = u;
-       continue;
-      }
-      u = z + 16 | 0;
-      v = c[u >> 2] | 0;
-      if ((v | 0) == 0) {
-       break;
-      } else {
-       z = v;
-       A = u;
-      }
-     }
-     if (A >>> 0 < j >>> 0) {
-      au();
-      return 0;
-     } else {
-      c[A >> 2] = 0;
-      y = z;
-      break;
-     }
-    } else {
-     u = c[g + (f + 8) >> 2] | 0;
-     if (u >>> 0 < j >>> 0) {
-      au();
-      return 0;
-     }
-     v = u + 12 | 0;
-     if ((c[v >> 2] | 0) != (o | 0)) {
-      au();
-      return 0;
-     }
-     w = t + 8 | 0;
-     if ((c[w >> 2] | 0) == (o | 0)) {
-      c[v >> 2] = t;
-      c[w >> 2] = u;
-      y = t;
-      break;
-     } else {
-      au();
-      return 0;
-     }
-    }
-   } while (0);
-   if ((s | 0) == 0) {
-    break;
-   }
-   t = g + (f + 28) | 0;
-   l = 1136 + (c[t >> 2] << 2) | 0;
-   do {
-    if ((o | 0) == (c[l >> 2] | 0)) {
-     c[l >> 2] = y;
-     if ((y | 0) != 0) {
-      break;
-     }
-     c[209] = c[209] & ~(1 << c[t >> 2]);
-     break L1056;
-    } else {
-     if (s >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-      return 0;
-     }
-     k = s + 16 | 0;
-     if ((c[k >> 2] | 0) == (o | 0)) {
-      c[k >> 2] = y;
-     } else {
-      c[s + 20 >> 2] = y;
-     }
-     if ((y | 0) == 0) {
-      break L1056;
-     }
-    }
-   } while (0);
-   if (y >>> 0 < (c[212] | 0) >>> 0) {
-    au();
-    return 0;
-   }
-   c[y + 24 >> 2] = s;
-   o = c[g + (f + 16) >> 2] | 0;
-   do {
-    if ((o | 0) != 0) {
-     if (o >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-      return 0;
-     } else {
-      c[y + 16 >> 2] = o;
-      c[o + 24 >> 2] = y;
-      break;
-     }
-    }
-   } while (0);
-   o = c[g + (f + 20) >> 2] | 0;
-   if ((o | 0) == 0) {
-    break;
-   }
-   if (o >>> 0 < (c[212] | 0) >>> 0) {
-    au();
-    return 0;
-   } else {
-    c[y + 20 >> 2] = o;
-    c[o + 24 >> 2] = y;
-    break;
-   }
-  }
- } while (0);
- if (q >>> 0 < 16) {
-  c[d >> 2] = p | c[d >> 2] & 1 | 2;
-  y = g + (p | 4) | 0;
-  c[y >> 2] = c[y >> 2] | 1;
-  n = a;
-  return n | 0;
- } else {
-  c[d >> 2] = c[d >> 2] & 1 | b | 2;
-  c[g + (b + 4) >> 2] = q | 3;
-  d = g + (p | 4) | 0;
-  c[d >> 2] = c[d >> 2] | 1;
-  b9(g + b | 0, q);
-  n = a;
-  return n | 0;
- }
- return 0;
-}
-function bU() {
- return c[316] | 0;
-}
-function bV() {
- return c[317] | 0;
-}
-function bW() {
- var a = 0;
- a = c[318] | 0;
- return ((a | 0) == 0 ? -1 : a) | 0;
-}
-function bX(a) {
- a = a | 0;
- var b = 0, d = 0;
- if ((a | 0) == -1) {
-  b = 0;
- } else {
-  d = c[202] | 0;
-  b = a - 1 + d & -d;
- }
- c[318] = b;
- return b | 0;
-}
-function bY(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0;
- do {
-  if ((a | 0) == 0) {
-   b = 0;
-  } else {
-   d = c[a - 4 >> 2] | 0;
-   e = d & 3;
-   if ((e | 0) == 1) {
-    b = 0;
-    break;
-   }
-   b = (d & -8) - ((e | 0) == 0 ? 8 : 4) | 0;
-  }
- } while (0);
- return b | 0;
-}
-function bZ(a, b, d) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- var e = 0, f = 0, g = 0;
- do {
-  if ((b | 0) == 8) {
-   e = bL(d) | 0;
-  } else {
-   f = b >>> 2;
-   if ((b & 3 | 0) != 0 | (f | 0) == 0) {
-    g = 22;
-    return g | 0;
-   }
-   if ((f + 1073741823 & f | 0) != 0) {
-    g = 22;
-    return g | 0;
-   }
-   if ((-64 - b | 0) >>> 0 < d >>> 0) {
-    g = 12;
-    return g | 0;
-   } else {
-    e = bR(b >>> 0 < 16 ? 16 : b, d) | 0;
-    break;
-   }
-  }
- } while (0);
- if ((e | 0) == 0) {
-  g = 12;
-  return g | 0;
- }
- c[a >> 2] = e;
- g = 0;
- return g | 0;
-}
-function b_(a, b, d) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- var e = 0, f = 0;
- e = i;
- i = i + 8 | 0;
- f = e | 0;
- c[f >> 2] = b;
- b = b2(a, f, 3, d) | 0;
- i = e;
- return b | 0;
-}
-function b$(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- return b2(a, b, 0, c) | 0;
-}
-function b0(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0;
- if ((c[200] | 0) != 0) {
-  b = c[201] | 0;
-  d = bQ(b, a) | 0;
-  return d | 0;
- }
- e = ar(8) | 0;
- if ((e - 1 & e | 0) != 0) {
-  au();
-  return 0;
- }
- c[202] = e;
- c[201] = e;
- c[203] = -1;
- c[204] = 2097152;
- c[205] = 0;
- c[319] = 0;
- c[200] = (a_(0) | 0) & -16 ^ 1431655768;
- b = c[201] | 0;
- d = bQ(b, a) | 0;
- return d | 0;
-}
-function b1(a) {
- a = a | 0;
- var b = 0;
- do {
-  if ((c[200] | 0) == 0) {
-   b = ar(8) | 0;
-   if ((b - 1 & b | 0) == 0) {
-    c[202] = b;
-    c[201] = b;
-    c[203] = -1;
-    c[204] = 2097152;
-    c[205] = 0;
-    c[319] = 0;
-    c[200] = (a_(0) | 0) & -16 ^ 1431655768;
-    break;
-   } else {
-    au();
-    return 0;
-   }
-  }
- } while (0);
- b = c[201] | 0;
- return bQ(b, a - 1 + b & -b) | 0;
-}
-function b2(a, b, d, e) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- e = e | 0;
- var f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0;
- do {
-  if ((c[200] | 0) == 0) {
-   f = ar(8) | 0;
-   if ((f - 1 & f | 0) == 0) {
-    c[202] = f;
-    c[201] = f;
-    c[203] = -1;
-    c[204] = 2097152;
-    c[205] = 0;
-    c[319] = 0;
-    c[200] = (a_(0) | 0) & -16 ^ 1431655768;
-    break;
-   } else {
-    au();
-    return 0;
-   }
-  }
- } while (0);
- f = (a | 0) == 0;
- do {
-  if ((e | 0) == 0) {
-   if (f) {
-    g = bL(0) | 0;
-    return g | 0;
-   } else {
-    h = a << 2;
-    if (h >>> 0 < 11) {
-     i = 0;
-     j = 16;
-     break;
-    }
-    i = 0;
-    j = h + 11 & -8;
-    break;
-   }
-  } else {
-   if (f) {
-    g = e;
-   } else {
-    i = e;
-    j = 0;
-    break;
-   }
-   return g | 0;
-  }
- } while (0);
- do {
-  if ((d & 1 | 0) == 0) {
-   if (f) {
-    k = 0;
-    l = 0;
-    break;
-   } else {
-    m = 0;
-    n = 0;
-   }
-   while (1) {
-    e = c[b + (n << 2) >> 2] | 0;
-    if (e >>> 0 < 11) {
-     o = 16;
-    } else {
-     o = e + 11 & -8;
-    }
-    e = o + m | 0;
-    h = n + 1 | 0;
-    if ((h | 0) == (a | 0)) {
-     k = 0;
-     l = e;
-     break;
-    } else {
-     m = e;
-     n = h;
-    }
-   }
-  } else {
-   h = c[b >> 2] | 0;
-   if (h >>> 0 < 11) {
-    p = 16;
-   } else {
-    p = h + 11 & -8;
-   }
-   k = p;
-   l = ad(p, a) | 0;
-  }
- } while (0);
- p = bL(j - 4 + l | 0) | 0;
- if ((p | 0) == 0) {
-  g = 0;
-  return g | 0;
- }
- n = p - 8 | 0;
- m = c[p - 4 >> 2] & -8;
- if ((d & 2 | 0) != 0) {
-  cL(p | 0, 0, -4 - j + m | 0);
- }
- if ((i | 0) == 0) {
-  c[p + (l - 4) >> 2] = m - l | 3;
-  q = p + l | 0;
-  r = l;
- } else {
-  q = i;
-  r = m;
- }
- c[q >> 2] = p;
- p = a - 1 | 0;
- L1216 : do {
-  if ((p | 0) == 0) {
-   s = n;
-   t = r;
-  } else {
-   if ((k | 0) == 0) {
-    u = n;
-    v = r;
-    w = 0;
-   } else {
-    a = n;
-    m = r;
-    i = 0;
-    while (1) {
-     l = m - k | 0;
-     c[a + 4 >> 2] = k | 3;
-     j = a + k | 0;
-     d = i + 1 | 0;
-     c[q + (d << 2) >> 2] = a + (k + 8);
-     if ((d | 0) == (p | 0)) {
-      s = j;
-      t = l;
-      break L1216;
-     } else {
-      a = j;
-      m = l;
-      i = d;
-     }
-    }
-   }
-   while (1) {
-    i = c[b + (w << 2) >> 2] | 0;
-    if (i >>> 0 < 11) {
-     x = 16;
-    } else {
-     x = i + 11 & -8;
-    }
-    i = v - x | 0;
-    c[u + 4 >> 2] = x | 3;
-    m = u + x | 0;
-    a = w + 1 | 0;
-    c[q + (a << 2) >> 2] = u + (x + 8);
-    if ((a | 0) == (p | 0)) {
-     s = m;
-     t = i;
-     break;
-    } else {
-     u = m;
-     v = i;
-     w = a;
-    }
-   }
-  }
- } while (0);
- c[s + 4 >> 2] = t | 3;
- g = q;
- return g | 0;
-}
-function b3(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0;
- d = a + (b << 2) | 0;
- L1229 : do {
-  if ((b | 0) != 0) {
-   e = a;
-   L1230 : while (1) {
-    f = c[e >> 2] | 0;
-    L1232 : do {
-     if ((f | 0) == 0) {
-      g = e + 4 | 0;
-     } else {
-      h = f - 8 | 0;
-      i = h;
-      j = f - 4 | 0;
-      k = c[j >> 2] & -8;
-      c[e >> 2] = 0;
-      if (h >>> 0 < (c[212] | 0) >>> 0) {
-       l = 935;
-       break L1230;
-      }
-      h = c[j >> 2] | 0;
-      if ((h & 3 | 0) == 1) {
-       l = 936;
-       break L1230;
-      }
-      m = e + 4 | 0;
-      n = h - 8 & -8;
-      do {
-       if ((m | 0) != (d | 0)) {
-        if ((c[m >> 2] | 0) != (f + (n + 8) | 0)) {
-         break;
-        }
-        o = (c[f + (n | 4) >> 2] & -8) + k | 0;
-        c[j >> 2] = h & 1 | o | 2;
-        p = f + (o - 4) | 0;
-        c[p >> 2] = c[p >> 2] | 1;
-        c[m >> 2] = f;
-        g = m;
-        break L1232;
-       }
-      } while (0);
-      b9(i, k);
-      g = m;
-     }
-    } while (0);
-    if ((g | 0) == (d | 0)) {
-     break L1229;
-    } else {
-     e = g;
-    }
-   }
-   if ((l | 0) == 935) {
-    au();
-    return 0;
-   } else if ((l | 0) == 936) {
-    au();
-    return 0;
-   }
-  }
- } while (0);
- if ((c[211] | 0) >>> 0 <= (c[215] | 0) >>> 0) {
-  return 0;
- }
- bS(0) | 0;
- return 0;
-}
-function b4(a) {
- a = a | 0;
- var b = 0, d = 0;
- if ((c[200] | 0) != 0) {
-  b = bS(a) | 0;
-  return b | 0;
- }
- d = ar(8) | 0;
- if ((d - 1 & d | 0) != 0) {
-  au();
-  return 0;
- }
- c[202] = d;
- c[201] = d;
- c[203] = -1;
- c[204] = 2097152;
- c[205] = 0;
- c[319] = 0;
- c[200] = (a_(0) | 0) & -16 ^ 1431655768;
- b = bS(a) | 0;
- return b | 0;
-}
-function b5(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0;
- do {
-  if ((c[200] | 0) == 0) {
-   b = ar(8) | 0;
-   if ((b - 1 & b | 0) == 0) {
-    c[202] = b;
-    c[201] = b;
-    c[203] = -1;
-    c[204] = 2097152;
-    c[205] = 0;
-    c[319] = 0;
-    c[200] = (a_(0) | 0) & -16 ^ 1431655768;
-    break;
-   } else {
-    au();
-   }
-  }
- } while (0);
- b = c[214] | 0;
- if ((b | 0) == 0) {
-  d = 0;
-  e = 0;
-  f = 0;
-  g = 0;
-  h = 0;
-  i = 0;
-  j = 0;
- } else {
-  k = c[211] | 0;
-  l = k + 40 | 0;
-  m = 1;
-  n = l;
-  o = l;
-  l = 1280;
-  while (1) {
-   p = c[l >> 2] | 0;
-   q = p + 8 | 0;
-   if ((q & 7 | 0) == 0) {
-    r = 0;
-   } else {
-    r = -q & 7;
-   }
-   q = p + (c[l + 4 >> 2] | 0) | 0;
-   s = m;
-   t = n;
-   u = o;
-   v = p + r | 0;
-   while (1) {
-    if (v >>> 0 >= q >>> 0 | (v | 0) == (b | 0)) {
-     w = s;
-     x = t;
-     y = u;
-     break;
-    }
-    z = c[v + 4 >> 2] | 0;
-    if ((z | 0) == 7) {
-     w = s;
-     x = t;
-     y = u;
-     break;
-    }
-    A = z & -8;
-    B = A + u | 0;
-    if ((z & 3 | 0) == 1) {
-     C = A + t | 0;
-     D = s + 1 | 0;
-    } else {
-     C = t;
-     D = s;
-    }
-    z = v + A | 0;
-    if (z >>> 0 < p >>> 0) {
-     w = D;
-     x = C;
-     y = B;
-     break;
-    } else {
-     s = D;
-     t = C;
-     u = B;
-     v = z;
-    }
-   }
-   v = c[l + 8 >> 2] | 0;
-   if ((v | 0) == 0) {
-    break;
-   } else {
-    m = w;
-    n = x;
-    o = y;
-    l = v;
-   }
-  }
-  l = c[316] | 0;
-  d = k;
-  e = y;
-  f = w;
-  g = l - y | 0;
-  h = c[317] | 0;
-  i = l - x | 0;
-  j = x;
- }
- c[a >> 2] = e;
- c[a + 4 >> 2] = f;
- f = a + 8 | 0;
- c[f >> 2] = 0;
- c[f + 4 >> 2] = 0;
- c[a + 16 >> 2] = g;
- c[a + 20 >> 2] = h;
- c[a + 24 >> 2] = 0;
- c[a + 28 >> 2] = i;
- c[a + 32 >> 2] = j;
- c[a + 36 >> 2] = d;
- return;
-}
-function b6() {
- var a = 0, b = 0, d = 0, e = 0, f = 0, g = 0, h = 0, j = 0, k = 0, l = 0, m = 0, n = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0;
- a = i;
- do {
-  if ((c[200] | 0) == 0) {
-   b = ar(8) | 0;
-   if ((b - 1 & b | 0) == 0) {
-    c[202] = b;
-    c[201] = b;
-    c[203] = -1;
-    c[204] = 2097152;
-    c[205] = 0;
-    c[319] = 0;
-    c[200] = (a_(0) | 0) & -16 ^ 1431655768;
-    break;
-   } else {
-    au();
-   }
-  }
- } while (0);
- b = c[214] | 0;
- if ((b | 0) == 0) {
-  d = 0;
-  e = 0;
-  f = 0;
- } else {
-  g = c[317] | 0;
-  h = c[316] | 0;
-  j = h - 40 - (c[211] | 0) | 0;
-  k = 1280;
-  while (1) {
-   l = c[k >> 2] | 0;
-   m = l + 8 | 0;
-   if ((m & 7 | 0) == 0) {
-    n = 0;
-   } else {
-    n = -m & 7;
-   }
-   m = l + (c[k + 4 >> 2] | 0) | 0;
-   p = j;
-   q = l + n | 0;
-   while (1) {
-    if (q >>> 0 >= m >>> 0 | (q | 0) == (b | 0)) {
-     r = p;
-     break;
-    }
-    s = c[q + 4 >> 2] | 0;
-    if ((s | 0) == 7) {
-     r = p;
-     break;
-    }
-    t = s & -8;
-    u = p - ((s & 3 | 0) == 1 ? t : 0) | 0;
-    s = q + t | 0;
-    if (s >>> 0 < l >>> 0) {
-     r = u;
-     break;
-    } else {
-     p = u;
-     q = s;
-    }
-   }
-   q = c[k + 8 >> 2] | 0;
-   if ((q | 0) == 0) {
-    d = r;
-    e = h;
-    f = g;
-    break;
-   } else {
-    j = r;
-    k = q;
-   }
-  }
- }
- av(c[o >> 2] | 0, 520, (y = i, i = i + 8 | 0, c[y >> 2] = f, y) | 0) | 0;
- av(c[o >> 2] | 0, 488, (y = i, i = i + 8 | 0, c[y >> 2] = e, y) | 0) | 0;
- av(c[o >> 2] | 0, 400, (y = i, i = i + 8 | 0, c[y >> 2] = d, y) | 0) | 0;
- i = a;
- return;
-}
-function b7(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0;
- do {
-  if ((c[200] | 0) == 0) {
-   d = ar(8) | 0;
-   if ((d - 1 & d | 0) == 0) {
-    c[202] = d;
-    c[201] = d;
-    c[203] = -1;
-    c[204] = 2097152;
-    c[205] = 0;
-    c[319] = 0;
-    c[200] = (a_(0) | 0) & -16 ^ 1431655768;
-    break;
-   } else {
-    au();
-    return 0;
-   }
-  }
- } while (0);
- if ((a | 0) == (-1 | 0)) {
-  c[204] = b;
-  e = 1;
-  return e | 0;
- } else if ((a | 0) == (-2 | 0)) {
-  if ((c[201] | 0) >>> 0 > b >>> 0) {
-   e = 0;
-   return e | 0;
-  }
-  if ((b - 1 & b | 0) != 0) {
-   e = 0;
-   return e | 0;
-  }
-  c[202] = b;
-  e = 1;
-  return e | 0;
- } else if ((a | 0) == (-3 | 0)) {
-  c[203] = b;
-  e = 1;
-  return e | 0;
- } else {
-  e = 0;
-  return e | 0;
- }
- return 0;
-}
-function b8() {
- return (F = c[328] | 0, c[328] = F + 0, F) | 0;
-}
-function b9(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0, g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0, L = 0;
- d = a;
- e = d + b | 0;
- f = e;
- g = c[a + 4 >> 2] | 0;
- L1325 : do {
-  if ((g & 1 | 0) == 0) {
-   h = c[a >> 2] | 0;
-   if ((g & 3 | 0) == 0) {
-    return;
-   }
-   i = d + (-h | 0) | 0;
-   j = i;
-   k = h + b | 0;
-   l = c[212] | 0;
-   if (i >>> 0 < l >>> 0) {
-    au();
-   }
-   if ((j | 0) == (c[213] | 0)) {
-    m = d + (b + 4) | 0;
-    if ((c[m >> 2] & 3 | 0) != 3) {
-     n = j;
-     o = k;
-     break;
-    }
-    c[210] = k;
-    c[m >> 2] = c[m >> 2] & -2;
-    c[d + (4 - h) >> 2] = k | 1;
-    c[e >> 2] = k;
-    return;
-   }
-   m = h >>> 3;
-   if (h >>> 0 < 256) {
-    p = c[d + (8 - h) >> 2] | 0;
-    q = c[d + (12 - h) >> 2] | 0;
-    r = 872 + (m << 1 << 2) | 0;
-    do {
-     if ((p | 0) != (r | 0)) {
-      if (p >>> 0 < l >>> 0) {
-       au();
-      }
-      if ((c[p + 12 >> 2] | 0) == (j | 0)) {
-       break;
-      }
-      au();
-     }
-    } while (0);
-    if ((q | 0) == (p | 0)) {
-     c[208] = c[208] & ~(1 << m);
-     n = j;
-     o = k;
-     break;
-    }
-    do {
-     if ((q | 0) == (r | 0)) {
-      s = q + 8 | 0;
-     } else {
-      if (q >>> 0 < l >>> 0) {
-       au();
-      }
-      t = q + 8 | 0;
-      if ((c[t >> 2] | 0) == (j | 0)) {
-       s = t;
-       break;
-      }
-      au();
-     }
-    } while (0);
-    c[p + 12 >> 2] = q;
-    c[s >> 2] = p;
-    n = j;
-    o = k;
-    break;
-   }
-   r = i;
-   m = c[d + (24 - h) >> 2] | 0;
-   t = c[d + (12 - h) >> 2] | 0;
-   do {
-    if ((t | 0) == (r | 0)) {
-     u = 16 - h | 0;
-     v = d + (u + 4) | 0;
-     w = c[v >> 2] | 0;
-     if ((w | 0) == 0) {
-      x = d + u | 0;
-      u = c[x >> 2] | 0;
-      if ((u | 0) == 0) {
-       y = 0;
-       break;
-      } else {
-       z = u;
-       A = x;
-      }
-     } else {
-      z = w;
-      A = v;
-     }
-     while (1) {
-      v = z + 20 | 0;
-      w = c[v >> 2] | 0;
-      if ((w | 0) != 0) {
-       z = w;
-       A = v;
-       continue;
-      }
-      v = z + 16 | 0;
-      w = c[v >> 2] | 0;
-      if ((w | 0) == 0) {
-       break;
-      } else {
-       z = w;
-       A = v;
-      }
-     }
-     if (A >>> 0 < l >>> 0) {
-      au();
-     } else {
-      c[A >> 2] = 0;
-      y = z;
-      break;
-     }
-    } else {
-     v = c[d + (8 - h) >> 2] | 0;
-     if (v >>> 0 < l >>> 0) {
-      au();
-     }
-     w = v + 12 | 0;
-     if ((c[w >> 2] | 0) != (r | 0)) {
-      au();
-     }
-     x = t + 8 | 0;
-     if ((c[x >> 2] | 0) == (r | 0)) {
-      c[w >> 2] = t;
-      c[x >> 2] = v;
-      y = t;
-      break;
-     } else {
-      au();
-     }
-    }
-   } while (0);
-   if ((m | 0) == 0) {
-    n = j;
-    o = k;
-    break;
-   }
-   t = d + (28 - h) | 0;
-   l = 1136 + (c[t >> 2] << 2) | 0;
-   do {
-    if ((r | 0) == (c[l >> 2] | 0)) {
-     c[l >> 2] = y;
-     if ((y | 0) != 0) {
-      break;
-     }
-     c[209] = c[209] & ~(1 << c[t >> 2]);
-     n = j;
-     o = k;
-     break L1325;
-    } else {
-     if (m >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-     }
-     i = m + 16 | 0;
-     if ((c[i >> 2] | 0) == (r | 0)) {
-      c[i >> 2] = y;
-     } else {
-      c[m + 20 >> 2] = y;
-     }
-     if ((y | 0) == 0) {
-      n = j;
-      o = k;
-      break L1325;
-     }
-    }
-   } while (0);
-   if (y >>> 0 < (c[212] | 0) >>> 0) {
-    au();
-   }
-   c[y + 24 >> 2] = m;
-   r = 16 - h | 0;
-   t = c[d + r >> 2] | 0;
-   do {
-    if ((t | 0) != 0) {
-     if (t >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-     } else {
-      c[y + 16 >> 2] = t;
-      c[t + 24 >> 2] = y;
-      break;
-     }
-    }
-   } while (0);
-   t = c[d + (r + 4) >> 2] | 0;
-   if ((t | 0) == 0) {
-    n = j;
-    o = k;
-    break;
-   }
-   if (t >>> 0 < (c[212] | 0) >>> 0) {
-    au();
-   } else {
-    c[y + 20 >> 2] = t;
-    c[t + 24 >> 2] = y;
-    n = j;
-    o = k;
-    break;
-   }
-  } else {
-   n = a;
-   o = b;
-  }
- } while (0);
- a = c[212] | 0;
- if (e >>> 0 < a >>> 0) {
-  au();
- }
- y = d + (b + 4) | 0;
- z = c[y >> 2] | 0;
- do {
-  if ((z & 2 | 0) == 0) {
-   if ((f | 0) == (c[214] | 0)) {
-    A = (c[211] | 0) + o | 0;
-    c[211] = A;
-    c[214] = n;
-    c[n + 4 >> 2] = A | 1;
-    if ((n | 0) != (c[213] | 0)) {
-     return;
-    }
-    c[213] = 0;
-    c[210] = 0;
-    return;
-   }
-   if ((f | 0) == (c[213] | 0)) {
-    A = (c[210] | 0) + o | 0;
-    c[210] = A;
-    c[213] = n;
-    c[n + 4 >> 2] = A | 1;
-    c[n + A >> 2] = A;
-    return;
-   }
-   A = (z & -8) + o | 0;
-   s = z >>> 3;
-   L1424 : do {
-    if (z >>> 0 < 256) {
-     g = c[d + (b + 8) >> 2] | 0;
-     t = c[d + (b + 12) >> 2] | 0;
-     h = 872 + (s << 1 << 2) | 0;
-     do {
-      if ((g | 0) != (h | 0)) {
-       if (g >>> 0 < a >>> 0) {
-        au();
-       }
-       if ((c[g + 12 >> 2] | 0) == (f | 0)) {
-        break;
-       }
-       au();
-      }
-     } while (0);
-     if ((t | 0) == (g | 0)) {
-      c[208] = c[208] & ~(1 << s);
-      break;
-     }
-     do {
-      if ((t | 0) == (h | 0)) {
-       B = t + 8 | 0;
-      } else {
-       if (t >>> 0 < a >>> 0) {
-        au();
-       }
-       m = t + 8 | 0;
-       if ((c[m >> 2] | 0) == (f | 0)) {
-        B = m;
-        break;
-       }
-       au();
-      }
-     } while (0);
-     c[g + 12 >> 2] = t;
-     c[B >> 2] = g;
-    } else {
-     h = e;
-     m = c[d + (b + 24) >> 2] | 0;
-     l = c[d + (b + 12) >> 2] | 0;
-     do {
-      if ((l | 0) == (h | 0)) {
-       i = d + (b + 20) | 0;
-       p = c[i >> 2] | 0;
-       if ((p | 0) == 0) {
-        q = d + (b + 16) | 0;
-        v = c[q >> 2] | 0;
-        if ((v | 0) == 0) {
-         C = 0;
-         break;
-        } else {
-         D = v;
-         E = q;
-        }
-       } else {
-        D = p;
-        E = i;
-       }
-       while (1) {
-        i = D + 20 | 0;
-        p = c[i >> 2] | 0;
-        if ((p | 0) != 0) {
-         D = p;
-         E = i;
-         continue;
-        }
-        i = D + 16 | 0;
-        p = c[i >> 2] | 0;
-        if ((p | 0) == 0) {
-         break;
-        } else {
-         D = p;
-         E = i;
-        }
-       }
-       if (E >>> 0 < a >>> 0) {
-        au();
-       } else {
-        c[E >> 2] = 0;
-        C = D;
-        break;
-       }
-      } else {
-       i = c[d + (b + 8) >> 2] | 0;
-       if (i >>> 0 < a >>> 0) {
-        au();
-       }
-       p = i + 12 | 0;
-       if ((c[p >> 2] | 0) != (h | 0)) {
-        au();
-       }
-       q = l + 8 | 0;
-       if ((c[q >> 2] | 0) == (h | 0)) {
-        c[p >> 2] = l;
-        c[q >> 2] = i;
-        C = l;
-        break;
-       } else {
-        au();
-       }
-      }
-     } while (0);
-     if ((m | 0) == 0) {
-      break;
-     }
-     l = d + (b + 28) | 0;
-     g = 1136 + (c[l >> 2] << 2) | 0;
-     do {
-      if ((h | 0) == (c[g >> 2] | 0)) {
-       c[g >> 2] = C;
-       if ((C | 0) != 0) {
-        break;
-       }
-       c[209] = c[209] & ~(1 << c[l >> 2]);
-       break L1424;
-      } else {
-       if (m >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-       }
-       t = m + 16 | 0;
-       if ((c[t >> 2] | 0) == (h | 0)) {
-        c[t >> 2] = C;
-       } else {
-        c[m + 20 >> 2] = C;
-       }
-       if ((C | 0) == 0) {
-        break L1424;
-       }
-      }
-     } while (0);
-     if (C >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-     }
-     c[C + 24 >> 2] = m;
-     h = c[d + (b + 16) >> 2] | 0;
-     do {
-      if ((h | 0) != 0) {
-       if (h >>> 0 < (c[212] | 0) >>> 0) {
-        au();
-       } else {
-        c[C + 16 >> 2] = h;
-        c[h + 24 >> 2] = C;
-        break;
-       }
-      }
-     } while (0);
-     h = c[d + (b + 20) >> 2] | 0;
-     if ((h | 0) == 0) {
-      break;
-     }
-     if (h >>> 0 < (c[212] | 0) >>> 0) {
-      au();
-     } else {
-      c[C + 20 >> 2] = h;
-      c[h + 24 >> 2] = C;
-      break;
-     }
-    }
-   } while (0);
-   c[n + 4 >> 2] = A | 1;
-   c[n + A >> 2] = A;
-   if ((n | 0) != (c[213] | 0)) {
-    F = A;
-    break;
-   }
-   c[210] = A;
-   return;
-  } else {
-   c[y >> 2] = z & -2;
-   c[n + 4 >> 2] = o | 1;
-   c[n + o >> 2] = o;
-   F = o;
-  }
- } while (0);
- o = F >>> 3;
- if (F >>> 0 < 256) {
-  z = o << 1;
-  y = 872 + (z << 2) | 0;
-  C = c[208] | 0;
-  b = 1 << o;
-  do {
-   if ((C & b | 0) == 0) {
-    c[208] = C | b;
-    G = y;
-    H = 872 + (z + 2 << 2) | 0;
-   } else {
-    o = 872 + (z + 2 << 2) | 0;
-    d = c[o >> 2] | 0;
-    if (d >>> 0 >= (c[212] | 0) >>> 0) {
-     G = d;
-     H = o;
-     break;
-    }
-    au();
-   }
-  } while (0);
-  c[H >> 2] = n;
-  c[G + 12 >> 2] = n;
-  c[n + 8 >> 2] = G;
-  c[n + 12 >> 2] = y;
-  return;
- }
- y = n;
- G = F >>> 8;
- do {
-  if ((G | 0) == 0) {
-   I = 0;
-  } else {
-   if (F >>> 0 > 16777215) {
-    I = 31;
-    break;
-   }
-   H = (G + 1048320 | 0) >>> 16 & 8;
-   z = G << H;
-   b = (z + 520192 | 0) >>> 16 & 4;
-   C = z << b;
-   z = (C + 245760 | 0) >>> 16 & 2;
-   o = 14 - (b | H | z) + (C << z >>> 15) | 0;
-   I = F >>> ((o + 7 | 0) >>> 0) & 1 | o << 1;
-  }
- } while (0);
- G = 1136 + (I << 2) | 0;
- c[n + 28 >> 2] = I;
- c[n + 20 >> 2] = 0;
- c[n + 16 >> 2] = 0;
- o = c[209] | 0;
- z = 1 << I;
- if ((o & z | 0) == 0) {
-  c[209] = o | z;
-  c[G >> 2] = y;
-  c[n + 24 >> 2] = G;
-  c[n + 12 >> 2] = n;
-  c[n + 8 >> 2] = n;
-  return;
- }
- if ((I | 0) == 31) {
-  J = 0;
- } else {
-  J = 25 - (I >>> 1) | 0;
- }
- I = F << J;
- J = c[G >> 2] | 0;
- while (1) {
-  if ((c[J + 4 >> 2] & -8 | 0) == (F | 0)) {
-   break;
-  }
-  K = J + 16 + (I >>> 31 << 2) | 0;
-  G = c[K >> 2] | 0;
-  if ((G | 0) == 0) {
-   L = 1120;
-   break;
-  } else {
-   I = I << 1;
-   J = G;
-  }
- }
- if ((L | 0) == 1120) {
-  if (K >>> 0 < (c[212] | 0) >>> 0) {
-   au();
-  }
-  c[K >> 2] = y;
-  c[n + 24 >> 2] = J;
-  c[n + 12 >> 2] = n;
-  c[n + 8 >> 2] = n;
-  return;
- }
- K = J + 8 | 0;
- L = c[K >> 2] | 0;
- I = c[212] | 0;
- if (J >>> 0 < I >>> 0) {
-  au();
- }
- if (L >>> 0 < I >>> 0) {
-  au();
- }
- c[L + 12 >> 2] = y;
- c[K >> 2] = y;
- c[n + 8 >> 2] = L;
- c[n + 12 >> 2] = J;
- c[n + 24 >> 2] = 0;
- return;
-}
-function ca(a) {
- a = a | 0;
- var b = 0, d = 0, e = 0;
- b = (a | 0) == 0 ? 1 : a;
- while (1) {
-  d = bL(b) | 0;
-  if ((d | 0) != 0) {
-   e = 1164;
-   break;
-  }
-  a = (F = c[328] | 0, c[328] = F + 0, F);
-  if ((a | 0) == 0) {
-   break;
-  }
-  a5[a & 1]();
- }
- if ((e | 0) == 1164) {
-  return d | 0;
- }
- d = aJ(4) | 0;
- c[d >> 2] = 560;
- as(d | 0, 688, 6);
- return 0;
-}
-function cb(a, b) {
- a = a | 0;
- b = b | 0;
- return ca(a) | 0;
-}
-function cc(a) {
- a = a | 0;
- return;
-}
-function cd(a) {
- a = a | 0;
- return 360 | 0;
-}
-function ce(a) {
- a = a | 0;
- return 448 | 0;
-}
-function cf(a) {
- a = a | 0;
- return (F = c[328] | 0, c[328] = a, F) | 0;
-}
-function cg(a) {
- a = a | 0;
- c[a >> 2] = 560;
- return;
-}
-function ch(a) {
- a = a | 0;
- c[a >> 2] = 592;
- return;
-}
-function ci(a) {
- a = a | 0;
- if ((a | 0) != 0) {
-  bM(a);
- }
- return;
-}
-function cj(a, b) {
- a = a | 0;
- b = b | 0;
- ci(a);
- return;
-}
-function ck(a) {
- a = a | 0;
- ci(a);
- return;
-}
-function cl(a, b) {
- a = a | 0;
- b = b | 0;
- ck(a);
- return;
-}
-function cm(a) {
- a = a | 0;
- ci(a);
- return;
-}
-function cn(a) {
- a = a | 0;
- ci(a);
- return;
-}
-function co(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- return cp(a, b, c, 0, 0, 0) | 0;
-}
-function cp(b, d, e, f, g, h) {
- b = b | 0;
- d = d | 0;
- e = e | 0;
- f = f | 0;
- g = g | 0;
- h = h | 0;
- var j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0, L = 0, M = 0, N = 0, O = 0, P = 0, Q = 0, R = 0, S = 0, T = 0, U = 0, V = 0, W = 0, X = 0, Y = 0, Z = 0, _ = 0, $ = 0, aa = 0, ab = 0, ac = 0, ad = 0;
- j = i;
- if ((e | 0) == 0) {
-  k = -1;
-  i = j;
-  return k | 0;
- }
- l = c[44] | 0;
- if ((l | 0) == 0) {
-  c[196] = 1;
-  c[44] = 1;
-  m = 1;
-  n = 1;
-  o = 1190;
- } else {
-  p = c[196] | 0;
-  q = c[74] | 0;
-  if ((q | 0) == -1 | (p | 0) != 0) {
-   m = p;
-   n = l;
-   o = 1190;
-  } else {
-   r = q;
-   s = p;
-   t = l;
-  }
- }
- if ((o | 0) == 1190) {
-  l = (aP(344) | 0) != 0 | 0;
-  c[74] = l;
-  r = l;
-  s = m;
-  t = n;
- }
- n = a[e] | 0;
- if (n << 24 >> 24 == 45) {
-  u = h | 2;
-  o = 1194;
- } else {
-  m = (r | 0) != 0 | n << 24 >> 24 == 43 ? h & -2 : h;
-  if (n << 24 >> 24 == 43) {
-   u = m;
-   o = 1194;
-  } else {
-   v = e;
-   w = m;
-  }
- }
- if ((o | 0) == 1194) {
-  v = e + 1 | 0;
-  w = u;
- }
- c[198] = 0;
- if ((s | 0) == 0) {
-  x = t;
-  o = 1198;
- } else {
-  c[50] = -1;
-  c[48] = -1;
-  z = t;
-  A = s;
-  o = 1197;
- }
- while (1) {
-  if ((o | 0) == 1197) {
-   o = 0;
-   if ((A | 0) == 0) {
-    x = z;
-    o = 1198;
-    continue;
-   } else {
-    B = z;
-   }
-  } else if ((o | 0) == 1198) {
-   o = 0;
-   s = c[40] | 0;
-   if ((a[s] | 0) == 0) {
-    B = x;
-   } else {
-    C = s;
-    D = x;
-    break;
-   }
-  }
-  c[196] = 0;
-  if ((B | 0) >= (b | 0)) {
-   o = 1200;
-   break;
-  }
-  E = d + (B << 2) | 0;
-  F = c[E >> 2] | 0;
-  c[40] = F;
-  if ((a[F] | 0) == 45) {
-   G = F + 1 | 0;
-   H = a[G] | 0;
-   if (H << 24 >> 24 != 0) {
-    o = 1232;
-    break;
-   }
-   if ((aB(v | 0, 45) | 0) != 0) {
-    o = 1232;
-    break;
-   }
-  }
-  c[40] = 824;
-  if ((w & 2 | 0) != 0) {
-   o = 1217;
-   break;
-  }
-  if ((w & 1 | 0) == 0) {
-   k = -1;
-   o = 1298;
-   break;
-  }
-  s = c[48] | 0;
-  do {
-   if ((s | 0) == -1) {
-    c[48] = B;
-    I = B;
-    J = 0;
-   } else {
-    t = c[50] | 0;
-    if ((t | 0) == -1) {
-     I = B;
-     J = 0;
-     break;
-    }
-    u = t - s | 0;
-    e = B - t | 0;
-    m = (u | 0) % (e | 0) | 0;
-    if ((m | 0) == 0) {
-     K = e;
-    } else {
-     n = e;
-     h = m;
-     while (1) {
-      m = (n | 0) % (h | 0) | 0;
-      if ((m | 0) == 0) {
-       K = h;
-       break;
-      } else {
-       n = h;
-       h = m;
-      }
-     }
-    }
-    h = (B - s | 0) / (K | 0) | 0;
-    do {
-     if ((K | 0) > 0) {
-      n = -u | 0;
-      if ((h | 0) > 0) {
-       L = 0;
-      } else {
-       M = B;
-       N = t;
-       O = s;
-       P = 0;
-       break;
-      }
-      do {
-       m = L + t | 0;
-       r = d + (m << 2) | 0;
-       l = 0;
-       p = m;
-       m = c[r >> 2] | 0;
-       while (1) {
-        q = ((p | 0) < (t | 0) ? e : n) + p | 0;
-        Q = d + (q << 2) | 0;
-        R = c[Q >> 2] | 0;
-        c[Q >> 2] = m;
-        c[r >> 2] = R;
-        Q = l + 1 | 0;
-        if ((Q | 0) < (h | 0)) {
-         l = Q;
-         p = q;
-         m = R;
-        } else {
-         break;
-        }
-       }
-       L = L + 1 | 0;
-      } while ((L | 0) < (K | 0));
-      M = c[44] | 0;
-      N = c[50] | 0;
-      O = c[48] | 0;
-      P = c[196] | 0;
-     } else {
-      M = B;
-      N = t;
-      O = s;
-      P = 0;
-     }
-    } while (0);
-    c[48] = M - N + O;
-    c[50] = -1;
-    I = M;
-    J = P;
-   }
-  } while (0);
-  s = I + 1 | 0;
-  c[44] = s;
-  z = s;
-  A = J;
-  o = 1197;
- }
- do {
-  if ((o | 0) == 1298) {
-   i = j;
-   return k | 0;
-  } else if ((o | 0) == 1232) {
-   J = c[48] | 0;
-   A = c[50] | 0;
-   if ((J | 0) != -1 & (A | 0) == -1) {
-    c[50] = B;
-    S = a[G] | 0;
-    T = B;
-   } else {
-    S = H;
-    T = A;
-   }
-   if (S << 24 >> 24 == 0) {
-    C = F;
-    D = B;
-    break;
-   }
-   c[40] = G;
-   if ((a[G] | 0) != 45) {
-    C = G;
-    D = B;
-    break;
-   }
-   if ((a[F + 2 | 0] | 0) != 0) {
-    C = G;
-    D = B;
-    break;
-   }
-   A = B + 1 | 0;
-   c[44] = A;
-   c[40] = 824;
-   if ((T | 0) != -1) {
-    z = T - J | 0;
-    I = A - T | 0;
-    P = (z | 0) % (I | 0) | 0;
-    if ((P | 0) == 0) {
-     U = I;
-    } else {
-     M = I;
-     O = P;
-     while (1) {
-      P = (M | 0) % (O | 0) | 0;
-      if ((P | 0) == 0) {
-       U = O;
-       break;
-      } else {
-       M = O;
-       O = P;
-      }
-     }
-    }
-    O = (A - J | 0) / (U | 0) | 0;
-    do {
-     if ((U | 0) > 0) {
-      M = -z | 0;
-      if ((O | 0) > 0) {
-       V = 0;
-      } else {
-       W = T;
-       X = J;
-       Y = A;
-       break;
-      }
-      do {
-       P = V + T | 0;
-       N = d + (P << 2) | 0;
-       K = 0;
-       L = P;
-       P = c[N >> 2] | 0;
-       while (1) {
-        x = ((L | 0) < (T | 0) ? I : M) + L | 0;
-        s = d + (x << 2) | 0;
-        t = c[s >> 2] | 0;
-        c[s >> 2] = P;
-        c[N >> 2] = t;
-        s = K + 1 | 0;
-        if ((s | 0) < (O | 0)) {
-         K = s;
-         L = x;
-         P = t;
-        } else {
-         break;
-        }
-       }
-       V = V + 1 | 0;
-      } while ((V | 0) < (U | 0));
-      W = c[50] | 0;
-      X = c[48] | 0;
-      Y = c[44] | 0;
-     } else {
-      W = T;
-      X = J;
-      Y = A;
-     }
-    } while (0);
-    c[44] = X - W + Y;
-   }
-   c[50] = -1;
-   c[48] = -1;
-   k = -1;
-   i = j;
-   return k | 0;
-  } else if ((o | 0) == 1200) {
-   c[40] = 824;
-   A = c[50] | 0;
-   J = c[48] | 0;
-   do {
-    if ((A | 0) == -1) {
-     if ((J | 0) == -1) {
-      break;
-     }
-     c[44] = J;
-    } else {
-     O = A - J | 0;
-     I = B - A | 0;
-     z = (O | 0) % (I | 0) | 0;
-     if ((z | 0) == 0) {
-      Z = I;
-     } else {
-      M = I;
-      P = z;
-      while (1) {
-       z = (M | 0) % (P | 0) | 0;
-       if ((z | 0) == 0) {
-        Z = P;
-        break;
-       } else {
-        M = P;
-        P = z;
-       }
-      }
-     }
-     P = (B - J | 0) / (Z | 0) | 0;
-     do {
-      if ((Z | 0) > 0) {
-       M = -O | 0;
-       if ((P | 0) > 0) {
-        _ = 0;
-       } else {
-        $ = A;
-        aa = J;
-        ab = B;
-        break;
-       }
-       do {
-        z = _ + A | 0;
-        L = d + (z << 2) | 0;
-        K = 0;
-        N = z;
-        z = c[L >> 2] | 0;
-        while (1) {
-         t = ((N | 0) < (A | 0) ? I : M) + N | 0;
-         x = d + (t << 2) | 0;
-         s = c[x >> 2] | 0;
-         c[x >> 2] = z;
-         c[L >> 2] = s;
-         x = K + 1 | 0;
-         if ((x | 0) < (P | 0)) {
-          K = x;
-          N = t;
-          z = s;
-         } else {
-          break;
-         }
-        }
-        _ = _ + 1 | 0;
-       } while ((_ | 0) < (Z | 0));
-       $ = c[50] | 0;
-       aa = c[48] | 0;
-       ab = c[44] | 0;
-      } else {
-       $ = A;
-       aa = J;
-       ab = B;
-      }
-     } while (0);
-     c[44] = aa - $ + ab;
-    }
-   } while (0);
-   c[50] = -1;
-   c[48] = -1;
-   k = -1;
-   i = j;
-   return k | 0;
-  } else if ((o | 0) == 1217) {
-   c[44] = B + 1;
-   c[198] = c[E >> 2];
-   k = 1;
-   i = j;
-   return k | 0;
-  }
- } while (0);
- E = (f | 0) != 0;
- L1659 : do {
-  if (E) {
-   if ((C | 0) == (c[d + (D << 2) >> 2] | 0)) {
-    ac = C;
-    break;
-   }
-   B = a[C] | 0;
-   do {
-    if (B << 24 >> 24 == 45) {
-     c[40] = C + 1;
-     ad = 0;
-    } else {
-     if ((w & 4 | 0) == 0) {
-      ac = C;
-      break L1659;
-     }
-     if (B << 24 >> 24 == 58) {
-      ad = 0;
-      break;
-     }
-     ad = (aB(v | 0, B << 24 >> 24 | 0) | 0) != 0 | 0;
-    }
-   } while (0);
-   B = cv(d, v, f, g, ad) | 0;
-   if ((B | 0) == -1) {
-    ac = c[40] | 0;
-    break;
-   }
-   c[40] = 824;
-   k = B;
-   i = j;
-   return k | 0;
-  } else {
-   ac = C;
-  }
- } while (0);
- C = ac + 1 | 0;
- c[40] = C;
- ad = a[ac] | 0;
- ac = ad << 24 >> 24;
- if ((ad << 24 >> 24 | 0) == 45) {
-  if ((a[C] | 0) == 0) {
-   o = 1260;
-  }
- } else if ((ad << 24 >> 24 | 0) == 58) {
-  o = 1263;
- } else {
-  o = 1260;
- }
- do {
-  if ((o | 0) == 1260) {
-   w = aB(v | 0, ac | 0) | 0;
-   if ((w | 0) == 0) {
-    if (ad << 24 >> 24 != 45) {
-     o = 1263;
-     break;
-    }
-    if ((a[C] | 0) == 0) {
-     k = -1;
-    } else {
-     break;
-    }
-    i = j;
-    return k | 0;
-   }
-   D = a[w + 1 | 0] | 0;
-   if (E & ad << 24 >> 24 == 87 & D << 24 >> 24 == 59) {
-    do {
-     if ((a[C] | 0) == 0) {
-      B = (c[44] | 0) + 1 | 0;
-      c[44] = B;
-      if ((B | 0) < (b | 0)) {
-       c[40] = c[d + (B << 2) >> 2];
-       break;
-      }
-      c[40] = 824;
-      do {
-       if ((c[46] | 0) != 0) {
-        if ((a[v] | 0) == 58) {
-         break;
-        }
-        cx(48, (y = i, i = i + 8 | 0, c[y >> 2] = ac, y) | 0);
-       }
-      } while (0);
-      c[42] = ac;
-      k = (a[v] | 0) == 58 ? 58 : 63;
-      i = j;
-      return k | 0;
-     }
-    } while (0);
-    B = cv(d, v, f, g, 0) | 0;
-    c[40] = 824;
-    k = B;
-    i = j;
-    return k | 0;
-   }
-   if (D << 24 >> 24 != 58) {
-    if ((a[C] | 0) != 0) {
-     k = ac;
-     i = j;
-     return k | 0;
-    }
-    c[44] = (c[44] | 0) + 1;
-    k = ac;
-    i = j;
-    return k | 0;
-   }
-   c[198] = 0;
-   do {
-    if ((a[C] | 0) == 0) {
-     if ((a[w + 2 | 0] | 0) == 58) {
-      break;
-     }
-     B = (c[44] | 0) + 1 | 0;
-     c[44] = B;
-     if ((B | 0) < (b | 0)) {
-      c[198] = c[d + (B << 2) >> 2];
-      break;
-     }
-     c[40] = 824;
-     do {
-      if ((c[46] | 0) != 0) {
-       if ((a[v] | 0) == 58) {
-        break;
-       }
-       cx(48, (y = i, i = i + 8 | 0, c[y >> 2] = ac, y) | 0);
-      }
-     } while (0);
-     c[42] = ac;
-     k = (a[v] | 0) == 58 ? 58 : 63;
-     i = j;
-     return k | 0;
-    } else {
-     c[198] = C;
-    }
-   } while (0);
-   c[40] = 824;
-   c[44] = (c[44] | 0) + 1;
-   k = ac;
-   i = j;
-   return k | 0;
-  }
- } while (0);
- do {
-  if ((o | 0) == 1263) {
-   if ((a[C] | 0) != 0) {
-    break;
-   }
-   c[44] = (c[44] | 0) + 1;
-  }
- } while (0);
- do {
-  if ((c[46] | 0) != 0) {
-   if ((a[v] | 0) == 58) {
-    break;
-   }
-   cx(272, (y = i, i = i + 8 | 0, c[y >> 2] = ac, y) | 0);
-  }
- } while (0);
- c[42] = ac;
- k = 63;
- i = j;
- return k | 0;
-}
-function cq(a, b, c, d, e) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- e = e | 0;
- return cp(a, b, c, d, e, 1) | 0;
-}
-function cr(a, b, c, d, e) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- e = e | 0;
- return cp(a, b, c, d, e, 5) | 0;
-}
-function cs(a) {
- a = a | 0;
- return ca(a) | 0;
-}
-function ct(a, b) {
- a = a | 0;
- b = b | 0;
- return cs(a) | 0;
-}
-function cu() {
- var a = 0;
- a = aJ(4) | 0;
- c[a >> 2] = 560;
- as(a | 0, 688, 6);
-}
-function cv(b, d, e, f, g) {
- b = b | 0;
- d = d | 0;
- e = e | 0;
- f = f | 0;
- g = g | 0;
- var h = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, z = 0;
- h = i;
- j = c[40] | 0;
- k = c[44] | 0;
- l = k + 1 | 0;
- c[44] = l;
- m = aB(j | 0, 61) | 0;
- if ((m | 0) == 0) {
-  n = cM(j | 0) | 0;
-  o = 0;
- } else {
-  n = m - j | 0;
-  o = m + 1 | 0;
- }
- m = c[e >> 2] | 0;
- L1739 : do {
-  if ((m | 0) != 0) {
-   L1741 : do {
-    if ((g | 0) != 0 & (n | 0) == 1) {
-     p = 0;
-     q = m;
-     while (1) {
-      if ((a[j] | 0) == (a[q] | 0)) {
-       if ((cM(q | 0) | 0) == 1) {
-        r = p;
-        break L1741;
-       }
-      }
-      p = p + 1 | 0;
-      q = c[e + (p << 4) >> 2] | 0;
-      if ((q | 0) == 0) {
-       break L1739;
-      }
-     }
-    } else {
-     q = 0;
-     p = -1;
-     s = m;
-     while (1) {
-      if ((ap(j | 0, s | 0, n | 0) | 0) == 0) {
-       if ((cM(s | 0) | 0) == (n | 0)) {
-        r = q;
-        break L1741;
-       }
-       if ((p | 0) == -1) {
-        t = q;
-       } else {
-        break;
-       }
-      } else {
-       t = p;
-      }
-      u = q + 1 | 0;
-      v = c[e + (u << 4) >> 2] | 0;
-      if ((v | 0) == 0) {
-       r = t;
-       break L1741;
-      } else {
-       q = u;
-       p = t;
-       s = v;
-      }
-     }
-     do {
-      if ((c[46] | 0) != 0) {
-       if ((a[d] | 0) == 58) {
-        break;
-       }
-       cx(304, (y = i, i = i + 16 | 0, c[y >> 2] = n, c[y + 8 >> 2] = j, y) | 0);
-      }
-     } while (0);
-     c[42] = 0;
-     w = 63;
-     i = h;
-     return w | 0;
-    }
-   } while (0);
-   if ((r | 0) == -1) {
-    break;
-   }
-   s = e + (r << 4) + 4 | 0;
-   p = c[s >> 2] | 0;
-   q = (o | 0) == 0;
-   if (!((p | 0) != 0 | q)) {
-    do {
-     if ((c[46] | 0) != 0) {
-      if ((a[d] | 0) == 58) {
-       break;
-      }
-      cx(208, (y = i, i = i + 16 | 0, c[y >> 2] = n, c[y + 8 >> 2] = j, y) | 0);
-     }
-    } while (0);
-    if ((c[e + (r << 4) + 8 >> 2] | 0) == 0) {
-     x = c[e + (r << 4) + 12 >> 2] | 0;
-    } else {
-     x = 0;
-    }
-    c[42] = x;
-    w = (a[d] | 0) == 58 ? 58 : 63;
-    i = h;
-    return w | 0;
-   }
-   do {
-    if ((p - 1 | 0) >>> 0 < 2) {
-     if (!q) {
-      c[198] = o;
-      break;
-     }
-     if ((p | 0) != 1) {
-      break;
-     }
-     c[44] = k + 2;
-     c[198] = c[b + (l << 2) >> 2];
-    }
-   } while (0);
-   if (!((c[s >> 2] | 0) == 1 & (c[198] | 0) == 0)) {
-    if ((f | 0) != 0) {
-     c[f >> 2] = r;
-    }
-    p = c[e + (r << 4) + 8 >> 2] | 0;
-    q = c[e + (r << 4) + 12 >> 2] | 0;
-    if ((p | 0) == 0) {
-     w = q;
-     i = h;
-     return w | 0;
-    }
-    c[p >> 2] = q;
-    w = 0;
-    i = h;
-    return w | 0;
-   }
-   do {
-    if ((c[46] | 0) != 0) {
-     if ((a[d] | 0) == 58) {
-      break;
-     }
-     cx(8, (y = i, i = i + 8 | 0, c[y >> 2] = j, y) | 0);
-    }
-   } while (0);
-   if ((c[e + (r << 4) + 8 >> 2] | 0) == 0) {
-    z = c[e + (r << 4) + 12 >> 2] | 0;
-   } else {
-    z = 0;
-   }
-   c[42] = z;
-   c[44] = (c[44] | 0) - 1;
-   w = (a[d] | 0) == 58 ? 58 : 63;
-   i = h;
-   return w | 0;
-  }
- } while (0);
- if ((g | 0) != 0) {
-  c[44] = k;
-  w = -1;
-  i = h;
-  return w | 0;
- }
- do {
-  if ((c[46] | 0) != 0) {
-   if ((a[d] | 0) == 58) {
-    break;
-   }
-   cx(248, (y = i, i = i + 8 | 0, c[y >> 2] = j, y) | 0);
-  }
- } while (0);
- c[42] = 0;
- w = 63;
- i = h;
- return w | 0;
-}
-function cw(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0;
- d = i;
- i = i + 16 | 0;
- e = d | 0;
- f = e;
- c[f >> 2] = b;
- c[f + 4 >> 2] = 0;
- cy(a, e | 0);
- i = d;
- return;
-}
-function cx(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0;
- d = i;
- i = i + 16 | 0;
- e = d | 0;
- f = e;
- c[f >> 2] = b;
- c[f + 4 >> 2] = 0;
- cz(a, e | 0);
- i = d;
- return;
-}
-function cy(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0, f = 0;
- d = i;
- e = c[(aX() | 0) >> 2] | 0;
- f = c[r >> 2] | 0;
- av(c[o >> 2] | 0, 432, (y = i, i = i + 8 | 0, c[y >> 2] = f, y) | 0) | 0;
- if ((a | 0) != 0) {
-  f = c[o >> 2] | 0;
-  aQ(f | 0, a | 0, b | 0) | 0;
-  b = c[o >> 2] | 0;
-  aE(472, 2, 1, b | 0) | 0;
- }
- b = c[o >> 2] | 0;
- a = at(e | 0) | 0;
- av(b | 0, 384, (y = i, i = i + 8 | 0, c[y >> 2] = a, y) | 0) | 0;
- i = d;
- return;
-}
-function cz(a, b) {
- a = a | 0;
- b = b | 0;
- var d = 0, e = 0;
- d = i;
- e = c[r >> 2] | 0;
- av(c[o >> 2] | 0, 376, (y = i, i = i + 8 | 0, c[y >> 2] = e, y) | 0) | 0;
- if ((a | 0) != 0) {
-  e = c[o >> 2] | 0;
-  aQ(e | 0, a | 0, b | 0) | 0;
- }
- aC(10, c[o >> 2] | 0) | 0;
- i = d;
- return;
-}
-function cA(b, d) {
- b = b | 0;
- d = d | 0;
- var e = 0, f = 0, g = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0.0, r = 0, s = 0, t = 0, u = 0, v = 0.0, w = 0, x = 0, y = 0, z = 0.0, A = 0.0, B = 0, C = 0, D = 0, E = 0.0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0, L = 0, M = 0, N = 0.0, O = 0, P = 0, Q = 0.0, R = 0.0, S = 0.0;
- e = b;
- while (1) {
-  f = e + 1 | 0;
-  if ((aK(a[e] | 0) | 0) == 0) {
-   break;
-  } else {
-   e = f;
-  }
- }
- g = a[e] | 0;
- if ((g << 24 >> 24 | 0) == 45) {
-  i = f;
-  j = 1;
- } else if ((g << 24 >> 24 | 0) == 43) {
-  i = f;
-  j = 0;
- } else {
-  i = e;
-  j = 0;
- }
- e = -1;
- f = 0;
- g = i;
- while (1) {
-  k = a[g] | 0;
-  if (((k << 24 >> 24) - 48 | 0) >>> 0 < 10) {
-   l = e;
-  } else {
-   if (k << 24 >> 24 != 46 | (e | 0) > -1) {
-    break;
-   } else {
-    l = f;
-   }
-  }
-  e = l;
-  f = f + 1 | 0;
-  g = g + 1 | 0;
- }
- l = g + (-f | 0) | 0;
- i = (e | 0) < 0;
- m = ((i ^ 1) << 31 >> 31) + f | 0;
- n = (m | 0) > 18;
- o = (n ? -18 : -m | 0) + (i ? f : e) | 0;
- e = n ? 18 : m;
- do {
-  if ((e | 0) == 0) {
-   p = b;
-   q = 0.0;
-  } else {
-   if ((e | 0) > 9) {
-    m = l;
-    n = e;
-    f = 0;
-    while (1) {
-     i = a[m] | 0;
-     r = m + 1 | 0;
-     if (i << 24 >> 24 == 46) {
-      s = a[r] | 0;
-      t = m + 2 | 0;
-     } else {
-      s = i;
-      t = r;
-     }
-     u = (f * 10 | 0) - 48 + (s << 24 >> 24) | 0;
-     r = n - 1 | 0;
-     if ((r | 0) > 9) {
-      m = t;
-      n = r;
-      f = u;
-     } else {
-      break;
-     }
-    }
-    v = +(u | 0) * 1.0e9;
-    w = 9;
-    x = t;
-    y = 1393;
-   } else {
-    if ((e | 0) > 0) {
-     v = 0.0;
-     w = e;
-     x = l;
-     y = 1393;
-    } else {
-     z = 0.0;
-     A = 0.0;
-    }
-   }
-   if ((y | 0) == 1393) {
-    f = x;
-    n = w;
-    m = 0;
-    while (1) {
-     r = a[f] | 0;
-     i = f + 1 | 0;
-     if (r << 24 >> 24 == 46) {
-      B = a[i] | 0;
-      C = f + 2 | 0;
-     } else {
-      B = r;
-      C = i;
-     }
-     D = (m * 10 | 0) - 48 + (B << 24 >> 24) | 0;
-     i = n - 1 | 0;
-     if ((i | 0) > 0) {
-      f = C;
-      n = i;
-      m = D;
-     } else {
-      break;
-     }
-    }
-    z = +(D | 0);
-    A = v;
-   }
-   E = A + z;
-   do {
-    if ((k << 24 >> 24 | 0) == 69 | (k << 24 >> 24 | 0) == 101) {
-     m = g + 1 | 0;
-     n = a[m] | 0;
-     if ((n << 24 >> 24 | 0) == 43) {
-      F = g + 2 | 0;
-      G = 0;
-     } else if ((n << 24 >> 24 | 0) == 45) {
-      F = g + 2 | 0;
-      G = 1;
-     } else {
-      F = m;
-      G = 0;
-     }
-     m = a[F] | 0;
-     if (((m << 24 >> 24) - 48 | 0) >>> 0 < 10) {
-      H = F;
-      I = 0;
-      J = m;
-     } else {
-      K = 0;
-      L = F;
-      M = G;
-      break;
-     }
-     while (1) {
-      m = (I * 10 | 0) - 48 + (J << 24 >> 24) | 0;
-      n = H + 1 | 0;
-      f = a[n] | 0;
-      if (((f << 24 >> 24) - 48 | 0) >>> 0 < 10) {
-       H = n;
-       I = m;
-       J = f;
-      } else {
-       K = m;
-       L = n;
-       M = G;
-       break;
-      }
-     }
-    } else {
-     K = 0;
-     L = g;
-     M = 0;
-    }
-   } while (0);
-   n = o + ((M | 0) == 0 ? K : -K | 0) | 0;
-   m = (n | 0) < 0 ? -n | 0 : n;
-   if ((m | 0) > 511) {
-    c[(aX() | 0) >> 2] = 34;
-    N = 1.0;
-    O = 88;
-    P = 511;
-    y = 1410;
-   } else {
-    if ((m | 0) == 0) {
-     Q = 1.0;
-    } else {
-     N = 1.0;
-     O = 88;
-     P = m;
-     y = 1410;
-    }
-   }
-   if ((y | 0) == 1410) {
-    while (1) {
-     y = 0;
-     if ((P & 1 | 0) == 0) {
-      R = N;
-     } else {
-      R = N * +h[O >> 3];
-     }
-     m = P >> 1;
-     if ((m | 0) == 0) {
-      Q = R;
-      break;
-     } else {
-      N = R;
-      O = O + 8 | 0;
-      P = m;
-      y = 1410;
-     }
-    }
-   }
-   if ((n | 0) > -1) {
-    p = L;
-    q = E * Q;
-    break;
-   } else {
-    p = L;
-    q = E / Q;
-    break;
-   }
-  }
- } while (0);
- if ((d | 0) != 0) {
-  c[d >> 2] = p;
- }
- if ((j | 0) == 0) {
-  S = q;
-  return +S;
- }
- S = -0.0 - q;
- return +S;
-}
-function cB(a, b) {
- a = a | 0;
- b = b | 0;
- return +(+cA(a, b));
-}
-function cC(a, b) {
- a = a | 0;
- b = b | 0;
- return +(+cA(a, b));
-}
-function cD(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- return +(+cA(a, b));
-}
-function cE(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- return +(+cA(a, b));
-}
-function cF(a) {
- a = a | 0;
- return +(+cA(a, 0));
-}
-function cG(a, b, d) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- var e = 0, f = 0;
- e = i;
- i = i + 16 | 0;
- f = e | 0;
- e = f;
- c[e >> 2] = d;
- c[e + 4 >> 2] = 0;
- cI(a, b, f | 0);
-}
-function cH(a, b, d) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- var e = 0, f = 0;
- e = i;
- i = i + 16 | 0;
- f = e | 0;
- e = f;
- c[e >> 2] = d;
- c[e + 4 >> 2] = 0;
- cJ(a, b, f | 0);
-}
-function cI(a, b, d) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- var e = 0, f = 0;
- e = c[(aX() | 0) >> 2] | 0;
- f = c[r >> 2] | 0;
- av(c[o >> 2] | 0, 336, (y = i, i = i + 8 | 0, c[y >> 2] = f, y) | 0) | 0;
- if ((b | 0) != 0) {
-  f = c[o >> 2] | 0;
-  aQ(f | 0, b | 0, d | 0) | 0;
-  d = c[o >> 2] | 0;
-  aE(480, 2, 1, d | 0) | 0;
- }
- d = c[o >> 2] | 0;
- b = at(e | 0) | 0;
- av(d | 0, 392, (y = i, i = i + 8 | 0, c[y >> 2] = b, y) | 0) | 0;
- aH(a | 0);
-}
-function cJ(a, b, d) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- var e = 0;
- e = c[r >> 2] | 0;
- av(c[o >> 2] | 0, 440, (y = i, i = i + 8 | 0, c[y >> 2] = e, y) | 0) | 0;
- if ((b | 0) != 0) {
-  e = c[o >> 2] | 0;
-  aQ(e | 0, b | 0, d | 0) | 0;
- }
- aC(10, c[o >> 2] | 0) | 0;
- aH(a | 0);
-}
-function cK(b, d, e) {
- b = b | 0;
- d = d | 0;
- e = e | 0;
- var f = 0;
- f = b | 0;
- if ((b & 3) == (d & 3)) {
-  while (b & 3) {
-   if ((e | 0) == 0) return f | 0;
-   a[b] = a[d] | 0;
-   b = b + 1 | 0;
-   d = d + 1 | 0;
-   e = e - 1 | 0;
-  }
-  while ((e | 0) >= 4) {
-   c[b >> 2] = c[d >> 2];
-   b = b + 4 | 0;
-   d = d + 4 | 0;
-   e = e - 4 | 0;
-  }
- }
- while ((e | 0) > 0) {
-  a[b] = a[d] | 0;
-  b = b + 1 | 0;
-  d = d + 1 | 0;
-  e = e - 1 | 0;
- }
- return f | 0;
-}
-function cL(b, d, e) {
- b = b | 0;
- d = d | 0;
- e = e | 0;
- var f = 0, g = 0, h = 0;
- f = b + e | 0;
- if ((e | 0) >= 20) {
-  d = d & 255;
-  e = b & 3;
-  g = d | d << 8 | d << 16 | d << 24;
-  h = f & ~3;
-  if (e) {
-   e = b + 4 - e | 0;
-   while ((b | 0) < (e | 0)) {
-    a[b] = d;
-    b = b + 1 | 0;
-   }
-  }
-  while ((b | 0) < (h | 0)) {
-   c[b >> 2] = g;
-   b = b + 4 | 0;
-  }
- }
- while ((b | 0) < (f | 0)) {
-  a[b] = d;
-  b = b + 1 | 0;
- }
-}
-function cM(b) {
- b = b | 0;
- var c = 0;
- c = b;
- while (a[c] | 0) {
-  c = c + 1 | 0;
- }
- return c - b | 0;
-}
-function cN(a, b, c, d) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- var e = 0;
- e = a + c >>> 0;
- return (H = b + d + (e >>> 0 < a >>> 0 | 0) >>> 0, e | 0) | 0;
-}
-function cO(a, b, c, d) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- var e = 0;
- e = b - d >>> 0;
- e = b - d - (c >>> 0 > a >>> 0 | 0) >>> 0;
- return (H = e, a - c >>> 0 | 0) | 0;
-}
-function cP(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- if ((c | 0) < 32) {
-  H = b << c | (a & (1 << c) - 1 << 32 - c) >>> 32 - c;
-  return a << c;
- }
- H = a << c - 32;
- return 0;
-}
-function cQ(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- if ((c | 0) < 32) {
-  H = b >>> c;
-  return a >>> c | (b & (1 << c) - 1) << 32 - c;
- }
- H = 0;
- return b >>> c - 32 | 0;
-}
-function cR(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- if ((c | 0) < 32) {
-  H = b >> c;
-  return a >>> c | (b & (1 << c) - 1) << 32 - c;
- }
- H = (b | 0) < 0 ? -1 : 0;
- return b >> c - 32 | 0;
-}
-function cS(b) {
- b = b | 0;
- var c = 0;
- c = a[n + (b >>> 24) | 0] | 0;
- if ((c | 0) < 8) return c | 0;
- c = a[n + (b >> 16 & 255) | 0] | 0;
- if ((c | 0) < 8) return c + 8 | 0;
- c = a[n + (b >> 8 & 255) | 0] | 0;
- if ((c | 0) < 8) return c + 16 | 0;
- return (a[n + (b & 255) | 0] | 0) + 24 | 0;
-}
-function cT(b) {
- b = b | 0;
- var c = 0;
- c = a[m + (b & 255) | 0] | 0;
- if ((c | 0) < 8) return c | 0;
- c = a[m + (b >> 8 & 255) | 0] | 0;
- if ((c | 0) < 8) return c + 8 | 0;
- c = a[m + (b >> 16 & 255) | 0] | 0;
- if ((c | 0) < 8) return c + 16 | 0;
- return (a[m + (b >>> 24) | 0] | 0) + 24 | 0;
-}
-function cU(a, b) {
- a = a | 0;
- b = b | 0;
- var c = 0, d = 0, e = 0, f = 0;
- c = a & 65535;
- d = b & 65535;
- e = ad(d, c) | 0;
- f = a >>> 16;
- a = (e >>> 16) + (ad(d, f) | 0) | 0;
- d = b >>> 16;
- b = ad(d, c) | 0;
- return (H = (a >>> 16) + (ad(d, f) | 0) + (((a & 65535) + b | 0) >>> 16) | 0, a + b << 16 | e & 65535 | 0) | 0;
-}
-function cV(a, b, c, d) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- var e = 0, f = 0, g = 0, h = 0, i = 0;
- e = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
- f = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
- g = d >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;
- h = ((d | 0) < 0 ? -1 : 0) >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;
- i = cO(e ^ a, f ^ b, e, f) | 0;
- b = H;
- a = g ^ e;
- e = h ^ f;
- f = cO((c_(i, b, cO(g ^ c, h ^ d, g, h) | 0, H, 0) | 0) ^ a, H ^ e, a, e) | 0;
- return (H = H, f) | 0;
-}
-function cW(a, b, d, e) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- e = e | 0;
- var f = 0, g = 0, h = 0, j = 0, k = 0, l = 0, m = 0;
- f = i;
- i = i + 8 | 0;
- g = f | 0;
- h = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
- j = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
- k = e >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;
- l = ((e | 0) < 0 ? -1 : 0) >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;
- m = cO(h ^ a, j ^ b, h, j) | 0;
- b = H;
- a = cO(k ^ d, l ^ e, k, l) | 0;
- c_(m, b, a, H, g) | 0;
- a = cO(c[g >> 2] ^ h, c[g + 4 >> 2] ^ j, h, j) | 0;
- j = H;
- i = f;
- return (H = j, a) | 0;
-}
-function cX(a, b, c, d) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- var e = 0, f = 0;
- e = a;
- a = c;
- c = cU(e, a) | 0;
- f = H;
- return (H = (ad(b, a) | 0) + (ad(d, e) | 0) + f | f & 0, c | 0 | 0) | 0;
-}
-function cY(a, b, c, d) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- var e = 0;
- e = c_(a, b, c, d, 0) | 0;
- return (H = H, e) | 0;
-}
-function cZ(a, b, d, e) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- e = e | 0;
- var f = 0, g = 0;
- f = i;
- i = i + 8 | 0;
- g = f | 0;
- c_(a, b, d, e, g) | 0;
- i = f;
- return (H = c[g + 4 >> 2] | 0, c[g >> 2] | 0) | 0;
-}
-function c_(a, b, d, e, f) {
- a = a | 0;
- b = b | 0;
- d = d | 0;
- e = e | 0;
- f = f | 0;
- var g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0, r = 0, s = 0, t = 0, u = 0, v = 0, w = 0, x = 0, y = 0, z = 0, A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, I = 0, J = 0, K = 0, L = 0, M = 0;
- g = a;
- h = b;
- i = h;
- j = d;
- k = e;
- l = k;
- if ((i | 0) == 0) {
-  m = (f | 0) != 0;
-  if ((l | 0) == 0) {
-   if (m) {
-    c[f >> 2] = (g >>> 0) % (j >>> 0);
-    c[f + 4 >> 2] = 0;
-   }
-   n = 0;
-   o = (g >>> 0) / (j >>> 0) >>> 0;
-   return (H = n, o) | 0;
-  } else {
-   if (!m) {
-    n = 0;
-    o = 0;
-    return (H = n, o) | 0;
-   }
-   c[f >> 2] = a | 0;
-   c[f + 4 >> 2] = b & 0;
-   n = 0;
-   o = 0;
-   return (H = n, o) | 0;
-  }
- }
- m = (l | 0) == 0;
- do {
-  if ((j | 0) == 0) {
-   if (m) {
-    if ((f | 0) != 0) {
-     c[f >> 2] = (i >>> 0) % (j >>> 0);
-     c[f + 4 >> 2] = 0;
-    }
-    n = 0;
-    o = (i >>> 0) / (j >>> 0) >>> 0;
-    return (H = n, o) | 0;
-   }
-   if ((g | 0) == 0) {
-    if ((f | 0) != 0) {
-     c[f >> 2] = 0;
-     c[f + 4 >> 2] = (i >>> 0) % (l >>> 0);
-    }
-    n = 0;
-    o = (i >>> 0) / (l >>> 0) >>> 0;
-    return (H = n, o) | 0;
-   }
-   p = l - 1 | 0;
-   if ((p & l | 0) == 0) {
-    if ((f | 0) != 0) {
-     c[f >> 2] = a | 0;
-     c[f + 4 >> 2] = p & i | b & 0;
-    }
-    n = 0;
-    o = i >>> ((cT(l | 0) | 0) >>> 0);
-    return (H = n, o) | 0;
-   }
-   p = (cS(l | 0) | 0) - (cS(i | 0) | 0) | 0;
-   if (p >>> 0 <= 30) {
-    q = p + 1 | 0;
-    r = 31 - p | 0;
-    s = q;
-    t = i << r | g >>> (q >>> 0);
-    u = i >>> (q >>> 0);
-    v = 0;
-    w = g << r;
-    break;
-   }
-   if ((f | 0) == 0) {
-    n = 0;
-    o = 0;
-    return (H = n, o) | 0;
-   }
-   c[f >> 2] = a | 0;
-   c[f + 4 >> 2] = h | b & 0;
-   n = 0;
-   o = 0;
-   return (H = n, o) | 0;
-  } else {
-   if (!m) {
-    r = (cS(l | 0) | 0) - (cS(i | 0) | 0) | 0;
-    if (r >>> 0 <= 31) {
-     q = r + 1 | 0;
-     p = 31 - r | 0;
-     x = r - 31 >> 31;
-     s = q;
-     t = g >>> (q >>> 0) & x | i << p;
-     u = i >>> (q >>> 0) & x;
-     v = 0;
-     w = g << p;
-     break;
-    }
-    if ((f | 0) == 0) {
-     n = 0;
-     o = 0;
-     return (H = n, o) | 0;
-    }
-    c[f >> 2] = a | 0;
-    c[f + 4 >> 2] = h | b & 0;
-    n = 0;
-    o = 0;
-    return (H = n, o) | 0;
-   }
-   p = j - 1 | 0;
-   if ((p & j | 0) != 0) {
-    x = (cS(j | 0) | 0) + 33 - (cS(i | 0) | 0) | 0;
-    q = 64 - x | 0;
-    r = 32 - x | 0;
-    y = r >> 31;
-    z = x - 32 | 0;
-    A = z >> 31;
-    s = x;
-    t = r - 1 >> 31 & i >>> (z >>> 0) | (i << r | g >>> (x >>> 0)) & A;
-    u = A & i >>> (x >>> 0);
-    v = g << q & y;
-    w = (i << q | g >>> (z >>> 0)) & y | g << r & x - 33 >> 31;
-    break;
-   }
-   if ((f | 0) != 0) {
-    c[f >> 2] = p & g;
-    c[f + 4 >> 2] = 0;
-   }
-   if ((j | 0) == 1) {
-    n = h | b & 0;
-    o = a | 0 | 0;
-    return (H = n, o) | 0;
-   } else {
-    p = cT(j | 0) | 0;
-    n = i >>> (p >>> 0) | 0;
-    o = i << 32 - p | g >>> (p >>> 0) | 0;
-    return (H = n, o) | 0;
-   }
-  }
- } while (0);
- if ((s | 0) == 0) {
-  B = w;
-  C = v;
-  D = u;
-  E = t;
-  F = 0;
-  G = 0;
- } else {
-  g = d | 0 | 0;
-  d = k | e & 0;
-  e = cN(g, d, -1, -1) | 0;
-  k = H;
-  i = w;
-  w = v;
-  v = u;
-  u = t;
-  t = s;
-  s = 0;
-  while (1) {
-   I = w >>> 31 | i << 1;
-   J = s | w << 1;
-   j = u << 1 | i >>> 31 | 0;
-   a = u >>> 31 | v << 1 | 0;
-   cO(e, k, j, a) | 0;
-   b = H;
-   h = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
-   K = h & 1;
-   L = cO(j, a, h & g, (((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1) & d) | 0;
-   M = H;
-   b = t - 1 | 0;
-   if ((b | 0) == 0) {
-    break;
-   } else {
-    i = I;
-    w = J;
-    v = M;
-    u = L;
-    t = b;
-    s = K;
-   }
-  }
-  B = I;
-  C = J;
-  D = M;
-  E = L;
-  F = 0;
-  G = K;
- }
- K = C;
- C = 0;
- if ((f | 0) != 0) {
-  c[f >> 2] = E;
-  c[f + 4 >> 2] = D;
- }
- n = (K | 0) >>> 31 | (B | C) << 1 | (C << 1 | K >>> 31) & 0 | F;
- o = (K << 1 | 0 >>> 31) & -2 | G;
- return (H = n, o) | 0;
-}
-function c$(a, b) {
- a = a | 0;
- b = b | 0;
- a1[a & 15](b | 0);
-}
-function c0(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- a2[a & 15](b | 0, c | 0);
-}
-function c1(a, b) {
- a = a | 0;
- b = b | 0;
- return a3[a & 7](b | 0) | 0;
-}
-function c2(a, b, c, d) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- d = d | 0;
- a4[a & 15](b | 0, c | 0, d | 0);
-}
-function c3(a) {
- a = a | 0;
- a5[a & 1]();
-}
-function c4(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- return a6[a & 1](b | 0, c | 0) | 0;
-}
-function c5(a) {
- a = a | 0;
- ae(0);
-}
-function c6(a, b) {
- a = a | 0;
- b = b | 0;
- ae(1);
-}
-function c7(a) {
- a = a | 0;
- ae(2);
- return 0;
-}
-function c8(a, b, c) {
- a = a | 0;
- b = b | 0;
- c = c | 0;
- ae(3);
-}
-function c9() {
- ae(4);
-}
-function da(a, b) {
- a = a | 0;
- b = b | 0;
- ae(5);
- return 0;
-}
-// EMSCRIPTEN_END_FUNCS
- var a1 = [ c5, c5, ch, c5, cn, c5, cc, c5, cg, c5, cm, c5, c5, c5, c5, c5 ];
- var a2 = [ c6, c6, cw, c6, cy, c6, cx, c6, cz, c6, c6, c6, c6, c6, c6, c6 ];
- var a3 = [ c7, c7, cd, c7, ce, c7, c7, c7 ];
- var a4 = [ c8, c8, cJ, c8, cI, c8, cG, c8, cH, c8, c8, c8, c8, c8, c8, c8 ];
- var a5 = [ c9, c9 ];
- var a6 = [ da, da ];
- return {
-  _crypto_scrypt: bu,
-  _strlen: cM,
-  _free: bM,
-  _realloc: bO,
-  _memset: cL,
-  _malloc: bL,
-  _memcpy: cK,
-  _calloc: bN,
-  runPostSets: bn,
-  stackAlloc: a7,
-  stackSave: a8,
-  stackRestore: a9,
-  setThrew: ba,
-  setTempRet0: bd,
-  setTempRet1: be,
-  setTempRet2: bf,
-  setTempRet3: bg,
-  setTempRet4: bh,
-  setTempRet5: bi,
-  setTempRet6: bj,
-  setTempRet7: bk,
-  setTempRet8: bl,
-  setTempRet9: bm,
-  dynCall_vi: c$,
-  dynCall_vii: c0,
-  dynCall_ii: c1,
-  dynCall_viii: c2,
-  dynCall_v: c3,
-  dynCall_iii: c4
- };
-// EMSCRIPTEN_END_ASM
-})({Math:Math, Int8Array:Int8Array, Int16Array:Int16Array, Int32Array:Int32Array, Uint8Array:Uint8Array, Uint16Array:Uint16Array, Uint32Array:Uint32Array, Float32Array:Float32Array, Float64Array:Float64Array}, {abort:wa, assert:w, asmPrintInt:function(a, b) {
-  s.print("int " + a + "," + b)
-}, asmPrintFloat:function(a, b) {
-  s.print("float " + a + "," + b)
-}, min:Xc, invoke_vi:function(a, b) {
-  try {
-    s.dynCall_vi(a, b)
-  }catch(c) {
-    "number" !== typeof c && "longjmp" !== c && g(c), V.setThrew(1, 0)
-  }
-}, invoke_vii:function(a, b, c) {
-  try {
-    s.dynCall_vii(a, b, c)
-  }catch(d) {
-    "number" !== typeof d && "longjmp" !== d && g(d), V.setThrew(1, 0)
-  }
-}, invoke_ii:function(a, b) {
-  try {
-    return s.dynCall_ii(a, b)
-  }catch(c) {
-    "number" !== typeof c && "longjmp" !== c && g(c), V.setThrew(1, 0)
-  }
-}, invoke_viii:function(a, b, c, d) {
-  try {
-    s.dynCall_viii(a, b, c, d)
-  }catch(e) {
-    "number" !== typeof e && "longjmp" !== e && g(e), V.setThrew(1, 0)
-  }
-}, invoke_v:function(a) {
-  try {
-    s.dynCall_v(a)
-  }catch(b) {
-    "number" !== typeof b && "longjmp" !== b && g(b), V.setThrew(1, 0)
-  }
-}, invoke_iii:function(a, b, c) {
-  try {
-    return s.dynCall_iii(a, b, c)
-  }catch(d) {
-    "number" !== typeof d && "longjmp" !== d && g(d), V.setThrew(1, 0)
-  }
-}, _strncmp:function(a, b, c) {
-  for(var d = 0;d < c;) {
-    var e = G[a + d | 0], f = G[b + d | 0];
-    if(e == f && 0 == e) {
-      break
-    }
-    if(0 == e) {
-      return-1
-    }
-    if(0 == f) {
-      return 1
-    }
-    if(e == f) {
-      d++
-    }else {
-      return e > f ? 1 : -1
-    }
-  }
-  return 0
-}, _llvm_va_end:aa(), _sysconf:function(a) {
-  switch(a) {
-    case 8:
-      return 4096;
-    case 54:
-    ;
-    case 56:
-    ;
-    case 21:
-    ;
-    case 61:
-    ;
-    case 63:
-    ;
-    case 22:
-    ;
-    case 67:
-    ;
-    case 23:
-    ;
-    case 24:
-    ;
-    case 25:
-    ;
-    case 26:
-    ;
-    case 27:
-    ;
-    case 69:
-    ;
-    case 28:
-    ;
-    case 101:
-    ;
-    case 70:
-    ;
-    case 71:
-    ;
-    case 29:
-    ;
-    case 30:
-    ;
-    case 199:
-    ;
-    case 75:
-    ;
-    case 76:
-    ;
-    case 32:
-    ;
-    case 43:
-    ;
-    case 44:
-    ;
-    case 80:
-    ;
-    case 46:
-    ;
-    case 47:
-    ;
-    case 45:
-    ;
-    case 48:
-    ;
-    case 49:
-    ;
-    case 42:
-    ;
-    case 82:
-    ;
-    case 33:
-    ;
-    case 7:
-    ;
-    case 108:
-    ;
-    case 109:
-    ;
-    case 107:
-    ;
-    case 112:
-    ;
-    case 119:
-    ;
-    case 121:
-      return 200809;
-    case 13:
-    ;
-    case 104:
-    ;
-    case 94:
-    ;
-    case 95:
-    ;
-    case 34:
-    ;
-    case 35:
-    ;
-    case 77:
-    ;
-    case 81:
-    ;
-    case 83:
-    ;
-    case 84:
-    ;
-    case 85:
-    ;
-    case 86:
-    ;
-    case 87:
-    ;
-    case 88:
-    ;
-    case 89:
-    ;
-    case 90:
-    ;
-    case 91:
-    ;
-    case 94:
-    ;
-    case 95:
-    ;
-    case 110:
-    ;
-    case 111:
-    ;
-    case 113:
-    ;
-    case 114:
-    ;
-    case 115:
-    ;
-    case 116:
-    ;
-    case 117:
-    ;
-    case 118:
-    ;
-    case 120:
-    ;
-    case 40:
-    ;
-    case 16:
-    ;
-    case 79:
-    ;
-    case 19:
-      return-1;
-    case 92:
-    ;
-    case 93:
-    ;
-    case 5:
-    ;
-    case 72:
-    ;
-    case 6:
-    ;
-    case 74:
-    ;
-    case 92:
-    ;
-    case 93:
-    ;
-    case 96:
-    ;
-    case 97:
-    ;
-    case 98:
-    ;
-    case 99:
-    ;
-    case 102:
-    ;
-    case 103:
-    ;
-    case 105:
-      return 1;
-    case 38:
-    ;
-    case 66:
-    ;
-    case 50:
-    ;
-    case 51:
-    ;
-    case 4:
-      return 1024;
-    case 15:
-    ;
-    case 64:
-    ;
-    case 41:
-      return 32;
-    case 55:
-    ;
-    case 37:
-    ;
-    case 17:
-      return 2147483647;
-    case 18:
-    ;
-    case 1:
-      return 47839;
-    case 59:
-    ;
-    case 57:
-      return 99;
-    case 68:
-    ;
-    case 58:
-      return 2048;
-    case 0:
-      return 2097152;
-    case 3:
-      return 65536;
-    case 14:
-      return 32768;
-    case 73:
-      return 32767;
-    case 39:
-      return 16384;
-    case 60:
-      return 1E3;
-    case 106:
-      return 700;
-    case 52:
-      return 256;
-    case 62:
-      return 255;
-    case 2:
-      return 100;
-    case 65:
-      return 64;
-    case 36:
-      return 20;
-    case 100:
-      return 16;
-    case 20:
-      return 6;
-    case 53:
-      return 4;
-    case 10:
-      return 1
-  }
-  M(N.A);
-  return-1
-}, ___cxa_throw:rc, _strerror:zc, _abort:function() {
-  s.abort()
-}, _fprintf:mc, _llvm_eh_exception:U, ___cxa_free_exception:sc, _fflush:aa(), ___buildEnvironment:wc, __reallyNegative:jc, _strchr:function(a, b) {
-  a--;
-  do {
-    a++;
-    var c = A[a];
-    if(c == b) {
-      return a
-    }
-  }while(c);
-  return 0
-}, _fputc:Bc, ___setErrNo:M, _fwrite:hc, _send:fc, _write:gc, _exit:function(a) {
-  Ac(a)
-}, ___cxa_find_matching_catch:function(a, b) {
-  -1 == a && (a = B[U.m >> 2]);
-  -1 == b && (b = B[U.m + 4 >> 2]);
-  var c = Array.prototype.slice.call(arguments, 2);
-  0 != b && !pc(b) && 0 == B[B[b >> 2] - 8 >> 2] && (a = B[a >> 2]);
-  for(var d = 0;d < c.length;d++) {
-    if(qc(c[d], b, a)) {
-      return(V.setTempRet0(c[d]), a) | 0
-    }
-  }
-  return(V.setTempRet0(b), a) | 0
-}, ___cxa_allocate_exception:function(a) {
-  return Oa(a)
-}, _isspace:function(a) {
-  return 32 == a || 9 <= a && 13 >= a
-}, __formatString:kc, ___resumeException:function(a) {
-  0 == B[U.m >> 2] && (B[U.m >> 2] = a);
-  g(a + " - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.")
-}, _llvm_uadd_with_overflow_i32:function(a, b) {
-  a >>>= 0;
-  b >>>= 0;
-  return(V.setTempRet0(4294967295 < a + b), a + b >>> 0) | 0
-}, ___cxa_does_inherit:qc, _getenv:xc, _vfprintf:function(a, b, c) {
-  return mc(a, b, B[c >> 2])
-}, ___cxa_begin_catch:function(a) {
-  oc.ta--;
-  return a
-}, __ZSt18uncaught_exceptionv:oc, _pwrite:function(a, b, c, d) {
-  a = R[a];
-  if(!a) {
-    return M(N.$), -1
-  }
-  try {
-    return Ib(a, A, b, c, d)
-  }catch(e) {
-    return Zb(e), -1
-  }
-}, ___cxa_call_unexpected:function(a) {
-  s.P("Unexpected exception thrown, this is not properly supported - aborting");
-  za = l;
-  g(a)
-}, _sbrk:nc, _strerror_r:yc, ___errno_location:function() {
-  return rb
-}, ___gxx_personality_v0:aa(), ___cxa_is_number_type:pc, _time:function(a) {
-  var b = Math.floor(Date.now() / 1E3);
-  a && (B[a >> 2] = b);
-  return b
-}, __exit:Ac, ___cxa_end_catch:uc, STACKTOP:u, STACK_MAX:Ta, tempDoublePtr:qb, ABORT:za, cttz_i8:Wc, ctlz_i8:Vc, NaN:NaN, Infinity:Infinity, _stderr:nb, __ZTVN10__cxxabiv120__si_class_type_infoE:ob, __ZTVN10__cxxabiv117__class_type_infoE:pb, ___progname:k}, I);
-s._crypto_scrypt = V._crypto_scrypt;
-var ic = s._strlen = V._strlen, tc = s._free = V._free;
-s._realloc = V._realloc;
-var tb = s._memset = V._memset, Oa = s._malloc = V._malloc, sb = s._memcpy = V._memcpy;
-s._calloc = V._calloc;
-var mb = s.runPostSets = V.runPostSets;
-s.dynCall_vi = V.dynCall_vi;
-s.dynCall_vii = V.dynCall_vii;
-s.dynCall_ii = V.dynCall_ii;
-s.dynCall_viii = V.dynCall_viii;
-s.dynCall_v = V.dynCall_v;
-s.dynCall_iii = V.dynCall_iii;
-var qa = function(a) {
-  return V.stackAlloc(a)
-}, ja = function() {
-  return V.stackSave()
-}, ka = function(a) {
-  V.stackRestore(a)
-}, lc;
-function X(a, b) {
-  a != m && ("number" == typeof a ? this.p(a) : b == m && "string" != typeof a ? this.k(a, 256) : this.k(a, b))
-}
-function Yc() {
-  return new X(m)
-}
-function Zc(a, b) {
-  var c = $c[a.charCodeAt(b)];
-  return c == m ? -1 : c
-}
-function ad(a) {
-  var b = Yc();
-  b.D(a);
-  return b
-}
-function Y(a, b) {
-  this.h = a | 0;
-  this.j = b | 0
-}
-Y.Ca = {};
-Y.D = function(a) {
-  if(-128 <= a && 128 > a) {
-    var b = Y.Ca[a];
-    if(b) {
-      return b
-    }
-  }
-  b = new Y(a | 0, 0 > a ? -1 : 0);
-  -128 <= a && 128 > a && (Y.Ca[a] = b);
-  return b
-};
-Y.p = function(a) {
-  return isNaN(a) || !isFinite(a) ? Y.ZERO : a <= -Y.Ea ? Y.MIN_VALUE : a + 1 >= Y.Ea ? Y.MAX_VALUE : 0 > a ? Y.p(-a).i() : new Y(a % Y.B | 0, a / Y.B | 0)
-};
-Y.v = function(a, b) {
-  return new Y(a, b)
-};
-Y.k = function(a, b) {
-  0 == a.length && g(Error("number format error: empty string"));
-  var c = b || 10;
-  (2 > c || 36 < c) && g(Error("radix out of range: " + c));
-  if("-" == a.charAt(0)) {
-    return Y.k(a.substring(1), c).i()
-  }
-  0 <= a.indexOf("-") && g(Error('number format error: interior "-" character: ' + a));
-  for(var d = Y.p(Math.pow(c, 8)), e = Y.ZERO, f = 0;f < a.length;f += 8) {
-    var h = Math.min(8, a.length - f), i = parseInt(a.substring(f, f + h), c);
-    8 > h ? (h = Y.p(Math.pow(c, h)), e = e.multiply(h).add(Y.p(i))) : (e = e.multiply(d), e = e.add(Y.p(i)))
-  }
-  return e
-};
-Y.ea = 65536;
-Y.Od = 16777216;
-Y.B = Y.ea * Y.ea;
-Y.Pd = Y.B / 2;
-Y.Qd = Y.B * Y.ea;
-Y.eb = Y.B * Y.B;
-Y.Ea = Y.eb / 2;
-Y.ZERO = Y.D(0);
-Y.ONE = Y.D(1);
-Y.Da = Y.D(-1);
-Y.MAX_VALUE = Y.v(-1, 2147483647);
-Y.MIN_VALUE = Y.v(0, -2147483648);
-Y.cb = Y.D(16777216);
-q = Y.prototype;
-q.Z = function() {
-  return this.j * Y.B + this.ob()
-};
-q.toString = function(a) {
-  a = a || 10;
-  (2 > a || 36 < a) && g(Error("radix out of range: " + a));
-  if(this.G()) {
-    return"0"
-  }
-  if(this.n()) {
-    if(this.o(Y.MIN_VALUE)) {
-      var b = Y.p(a), c = this.F(b), b = c.multiply(b).R(this);
-      return c.toString(a) + b.h.toString(a)
-    }
-    return"-" + this.i().toString(a)
-  }
-  for(var c = Y.p(Math.pow(a, 6)), b = this, d = "";;) {
-    var e = b.F(c), f = b.R(e.multiply(c)).h.toString(a), b = e;
-    if(b.G()) {
-      return f + d
-    }
-    for(;6 > f.length;) {
-      f = "0" + f
-    }
-    d = "" + f + d
-  }
-};
-q.ob = function() {
-  return 0 <= this.h ? this.h : Y.B + this.h
-};
-q.G = function() {
-  return 0 == this.j && 0 == this.h
-};
-q.n = function() {
-  return 0 > this.j
-};
-q.Pa = function() {
-  return 1 == (this.h & 1)
-};
-q.o = function(a) {
-  return this.j == a.j && this.h == a.h
-};
-q.Ra = function() {
-  return 0 > this.ja(Y.cb)
-};
-q.qb = function(a) {
-  return 0 < this.ja(a)
-};
-q.rb = function(a) {
-  return 0 <= this.ja(a)
-};
-q.ja = function(a) {
-  if(this.o(a)) {
-    return 0
-  }
-  var b = this.n(), c = a.n();
-  return b && !c ? -1 : !b && c ? 1 : this.R(a).n() ? -1 : 1
-};
-q.i = function() {
-  return this.o(Y.MIN_VALUE) ? Y.MIN_VALUE : this.xb().add(Y.ONE)
-};
-q.add = function(a) {
-  var b = this.j >>> 16, c = this.j & 65535, d = this.h >>> 16, e = a.j >>> 16, f = a.j & 65535, h = a.h >>> 16, i;
-  i = 0 + ((this.h & 65535) + (a.h & 65535));
-  a = 0 + (i >>> 16);
-  a += d + h;
-  d = 0 + (a >>> 16);
-  d += c + f;
-  c = 0 + (d >>> 16);
-  c = c + (b + e) & 65535;
-  return Y.v((a & 65535) << 16 | i & 65535, c << 16 | d & 65535)
-};
-q.R = function(a) {
-  return this.add(a.i())
-};
-q.multiply = function(a) {
-  if(this.G() || a.G()) {
-    return Y.ZERO
-  }
-  if(this.o(Y.MIN_VALUE)) {
-    return a.Pa() ? Y.MIN_VALUE : Y.ZERO
-  }
-  if(a.o(Y.MIN_VALUE)) {
-    return this.Pa() ? Y.MIN_VALUE : Y.ZERO
-  }
-  if(this.n()) {
-    return a.n() ? this.i().multiply(a.i()) : this.i().multiply(a).i()
-  }
-  if(a.n()) {
-    return this.multiply(a.i()).i()
-  }
-  if(this.Ra() && a.Ra()) {
-    return Y.p(this.Z() * a.Z())
-  }
-  var b = this.j >>> 16, c = this.j & 65535, d = this.h >>> 16, e = this.h & 65535, f = a.j >>> 16, h = a.j & 65535, i = a.h >>> 16, a = a.h & 65535, j, n, y, v;
-  v = 0 + e * a;
-  y = 0 + (v >>> 16);
-  y += d * a;
-  n = 0 + (y >>> 16);
-  y = (y & 65535) + e * i;
-  n += y >>> 16;
-  y &= 65535;
-  n += c * a;
-  j = 0 + (n >>> 16);
-  n = (n & 65535) + d * i;
-  j += n >>> 16;
-  n &= 65535;
-  n += e * h;
-  j += n >>> 16;
-  n &= 65535;
-  j = j + (b * a + c * i + d * h + e * f) & 65535;
-  return Y.v(y << 16 | v & 65535, j << 16 | n)
-};
-q.F = function(a) {
-  a.G() && g(Error("division by zero"));
-  if(this.G()) {
-    return Y.ZERO
-  }
-  if(this.o(Y.MIN_VALUE)) {
-    if(a.o(Y.ONE) || a.o(Y.Da)) {
-      return Y.MIN_VALUE
-    }
-    if(a.o(Y.MIN_VALUE)) {
-      return Y.ONE
-    }
-    var b = this.Db().F(a).shiftLeft(1);
-    if(b.o(Y.ZERO)) {
-      return a.n() ? Y.ONE : Y.Da
-    }
-    var c = this.R(a.multiply(b));
-    return b.add(c.F(a))
-  }
-  if(a.o(Y.MIN_VALUE)) {
-    return Y.ZERO
-  }
-  if(this.n()) {
-    return a.n() ? this.i().F(a.i()) : this.i().F(a).i()
-  }
-  if(a.n()) {
-    return this.F(a.i()).i()
-  }
-  for(var d = Y.ZERO, c = this;c.rb(a);) {
-    for(var b = Math.max(1, Math.floor(c.Z() / a.Z())), e = Math.ceil(Math.log(b) / Math.LN2), e = 48 >= e ? 1 : Math.pow(2, e - 48), f = Y.p(b), h = f.multiply(a);h.n() || h.qb(c);) {
-      b -= e, f = Y.p(b), h = f.multiply(a)
-    }
-    f.G() && (f = Y.ONE);
-    d = d.add(f);
-    c = c.R(h)
-  }
-  return d
-};
-q.xb = function() {
-  return Y.v(~this.h, ~this.j)
-};
-q.shiftLeft = function(a) {
-  a &= 63;
-  if(0 == a) {
-    return this
-  }
-  var b = this.h;
-  return 32 > a ? Y.v(b << a, this.j << a | b >>> 32 - a) : Y.v(0, b << a - 32)
-};
-q.Db = function() {
-  var a;
-  a = 1;
-  if(0 == a) {
-    return this
-  }
-  var b = this.j;
-  return 32 > a ? Y.v(this.h >>> a | b << 32 - a, b >> a) : Y.v(b >> a - 32, 0 <= b ? 0 : -1)
-};
-q = X.prototype;
-q.ga = function(a, b, c, d) {
-  for(var e = 0, f = 0;0 <= --d;) {
-    var h = a * this[e++] + b[c] + f, f = Math.floor(h / 67108864);
-    b[c++] = h & 67108863
-  }
-  return f
-};
-q.f = 26;
-q.u = 67108863;
-q.K = 67108864;
-q.bb = Math.pow(2, 52);
-q.Aa = 26;
-q.Ba = 0;
-var $c = [], bd, Z;
-bd = 48;
-for(Z = 0;9 >= Z;++Z) {
-  $c[bd++] = Z
-}
-bd = 97;
-for(Z = 10;36 > Z;++Z) {
-  $c[bd++] = Z
-}
-bd = 65;
-for(Z = 10;36 > Z;++Z) {
-  $c[bd++] = Z
-}
-q = X.prototype;
-q.copyTo = function(a) {
-  for(var b = this.b - 1;0 <= b;--b) {
-    a[b] = this[b]
-  }
-  a.b = this.b;
-  a.c = this.c
-};
-q.D = function(a) {
-  this.b = 1;
-  this.c = 0 > a ? -1 : 0;
-  0 < a ? this[0] = a : -1 > a ? this[0] = a + DV : this.b = 0
-};
-q.k = function(a, b) {
-  var c;
-  if(16 == b) {
-    c = 4
-  }else {
-    if(8 == b) {
-      c = 3
-    }else {
-      if(256 == b) {
-        c = 8
-      }else {
-        if(2 == b) {
-          c = 1
-        }else {
-          if(32 == b) {
-            c = 5
-          }else {
-            if(4 == b) {
-              c = 2
-            }else {
-              this.nb(a, b);
-              return
-            }
-          }
-        }
-      }
-    }
-  }
-  this.c = this.b = 0;
-  for(var d = a.length, e = p, f = 0;0 <= --d;) {
-    var h = 8 == c ? a[d] & 255 : Zc(a, d);
-    0 > h ? "-" == a.charAt(d) && (e = l) : (e = p, 0 == f ? this[this.b++] = h : f + c > this.f ? (this[this.b - 1] |= (h & (1 << this.f - f) - 1) << f, this[this.b++] = h >> this.f - f) : this[this.b - 1] |= h << f, f += c, f >= this.f && (f -= this.f))
-  }
-  8 == c && 0 != (a[0] & 128) && (this.c = -1, 0 < f && (this[this.b - 1] |= (1 << this.f - f) - 1 << f));
-  this.C();
-  e && X.ZERO.t(this, this)
-};
-q.C = function() {
-  for(var a = this.c & this.u;0 < this.b && this[this.b - 1] == a;) {
-    --this.b
-  }
-};
-q.la = function(a, b) {
-  var c;
-  for(c = this.b - 1;0 <= c;--c) {
-    b[c + a] = this[c]
-  }
-  for(c = a - 1;0 <= c;--c) {
-    b[c] = 0
-  }
-  b.b = this.b + a;
-  b.c = this.c
-};
-q.jb = function(a, b) {
-  for(var c = a;c < this.b;++c) {
-    b[c - a] = this[c]
-  }
-  b.b = Math.max(this.b - a, 0);
-  b.c = this.c
-};
-q.Qa = function(a, b) {
-  var c = a % this.f, d = this.f - c, e = (1 << d) - 1, f = Math.floor(a / this.f), h = this.c << c & this.u, i;
-  for(i = this.b - 1;0 <= i;--i) {
-    b[i + f + 1] = this[i] >> d | h, h = (this[i] & e) << c
-  }
-  for(i = f - 1;0 <= i;--i) {
-    b[i] = 0
-  }
-  b[f] = h;
-  b.b = this.b + f + 1;
-  b.c = this.c;
-  b.C()
-};
-q.zb = function(a, b) {
-  b.c = this.c;
-  var c = Math.floor(a / this.f);
-  if(c >= this.b) {
-    b.b = 0
-  }else {
-    var d = a % this.f, e = this.f - d, f = (1 << d) - 1;
-    b[0] = this[c] >> d;
-    for(var h = c + 1;h < this.b;++h) {
-      b[h - c - 1] |= (this[h] & f) << e, b[h - c] = this[h] >> d
-    }
-    0 < d && (b[this.b - c - 1] |= (this.c & f) << e);
-    b.b = this.b - c;
-    b.C()
-  }
-};
-q.t = function(a, b) {
-  for(var c = 0, d = 0, e = Math.min(a.b, this.b);c < e;) {
-    d += this[c] - a[c], b[c++] = d & this.u, d >>= this.f
-  }
-  if(a.b < this.b) {
-    for(d -= a.c;c < this.b;) {
-      d += this[c], b[c++] = d & this.u, d >>= this.f
-    }
-    d += this.c
-  }else {
-    for(d += this.c;c < a.b;) {
-      d -= a[c], b[c++] = d & this.u, d >>= this.f
-    }
-    d -= a.c
-  }
-  b.c = 0 > d ? -1 : 0;
-  -1 > d ? b[c++] = this.K + d : 0 < d && (b[c++] = d);
-  b.b = c;
-  b.C()
-};
-q.vb = function(a) {
-  var b = $.Xa, c = this.abs(), d = b.abs(), e = c.b;
-  for(a.b = e + d.b;0 <= --e;) {
-    a[e] = 0
-  }
-  for(e = 0;e < d.b;++e) {
-    a[e + c.b] = c.ga(d[e], a, e, c.b)
-  }
-  a.c = 0;
-  a.C();
-  this.c != b.c && X.ZERO.t(a, a)
-};
-q.Ja = function(a, b, c) {
-  var d = a.abs();
-  if(!(0 >= d.b)) {
-    var e = this.abs();
-    if(e.b < d.b) {
-      b != m && b.D(0), c != m && this.copyTo(c)
-    }else {
-      c == m && (c = Yc());
-      var f = Yc(), h = this.c, a = a.c, i = d[d.b - 1], j = 1, n;
-      if(0 != (n = i >>> 16)) {
-        i = n, j += 16
-      }
-      if(0 != (n = i >> 8)) {
-        i = n, j += 8
-      }
-      if(0 != (n = i >> 4)) {
-        i = n, j += 4
-      }
-      if(0 != (n = i >> 2)) {
-        i = n, j += 2
-      }
-      0 != i >> 1 && (j += 1);
-      i = this.f - j;
-      0 < i ? (d.Qa(i, f), e.Qa(i, c)) : (d.copyTo(f), e.copyTo(c));
-      d = f.b;
-      e = f[d - 1];
-      if(0 != e) {
-        n = e * (1 << this.Aa) + (1 < d ? f[d - 2] >> this.Ba : 0);
-        j = this.bb / n;
-        n = (1 << this.Aa) / n;
-        var y = 1 << this.Ba, v = c.b, C = v - d, D = b == m ? Yc() : b;
-        f.la(C, D);
-        0 <= c.U(D) && (c[c.b++] = 1, c.t(D, c));
-        X.ONE.la(d, D);
-        for(D.t(f, f);f.b < d;) {
-          f[f.b++] = 0
-        }
-        for(;0 <= --C;) {
-          var K = c[--v] == e ? this.u : Math.floor(c[v] * j + (c[v - 1] + y) * n);
-          if((c[v] += f.ga(K, c, C, d)) < K) {
-            f.la(C, D);
-            for(c.t(D, c);c[v] < --K;) {
-              c.t(D, c)
-            }
-          }
-        }
-        b != m && (c.jb(d, b), h != a && X.ZERO.t(b, b));
-        c.b = d;
-        c.C();
-        0 < i && c.zb(i, c);
-        0 > h && X.ZERO.t(c, c)
-      }
-    }
-  }
-};
-q.toString = function(a) {
-  if(0 > this.c) {
-    return"-" + this.i().toString(a)
-  }
-  if(16 == a) {
-    a = 4
-  }else {
-    if(8 == a) {
-      a = 3
-    }else {
-      if(2 == a) {
-        a = 1
-      }else {
-        if(32 == a) {
-          a = 5
-        }else {
-          if(4 == a) {
-            a = 2
-          }else {
-            return this.Fb(a)
-          }
-        }
-      }
-    }
-  }
-  var b = (1 << a) - 1, c, d = p, e = "", f = this.b, h = this.f - f * this.f % a;
-  if(0 < f--) {
-    if(h < this.f && 0 < (c = this[f] >> h)) {
-      d = l, e = "0123456789abcdefghijklmnopqrstuvwxyz".charAt(c)
-    }
-    for(;0 <= f;) {
-      h < a ? (c = (this[f] & (1 << h) - 1) << a - h, c |= this[--f] >> (h += this.f - a)) : (c = this[f] >> (h -= a) & b, 0 >= h && (h += this.f, --f)), 0 < c && (d = l), d && (e += "0123456789abcdefghijklmnopqrstuvwxyz".charAt(c))
-    }
-  }
-  return d ? e : "0"
-};
-q.i = function() {
-  var a = Yc();
-  X.ZERO.t(this, a);
-  return a
-};
-q.abs = function() {
-  return 0 > this.c ? this.i() : this
-};
-q.U = function(a) {
-  var b = this.c - a.c;
-  if(0 != b) {
-    return b
-  }
-  var c = this.b, b = c - a.b;
-  if(0 != b) {
-    return 0 > this.c ? -b : b
-  }
-  for(;0 <= --c;) {
-    if(0 != (b = this[c] - a[c])) {
-      return b
-    }
-  }
-  return 0
-};
-X.ZERO = ad(0);
-X.ONE = ad(1);
-q = X.prototype;
-q.nb = function(a, b) {
-  this.D(0);
-  b == m && (b = 10);
-  for(var c = this.S(b), d = Math.pow(b, c), e = p, f = 0, h = 0, i = 0;i < a.length;++i) {
-    var j = Zc(a, i);
-    0 > j ? "-" == a.charAt(i) && 0 == this.ra() && (e = l) : (h = b * h + j, ++f >= c && (this.Ia(d), this.Ha(h), h = f = 0))
-  }
-  0 < f && (this.Ia(Math.pow(b, f)), this.Ha(h));
-  e && X.ZERO.t(this, this)
-};
-q.S = function(a) {
-  return Math.floor(Math.LN2 * this.f / Math.log(a))
-};
-q.ra = function() {
-  return 0 > this.c ? -1 : 0 >= this.b || 1 == this.b && 0 >= this[0] ? 0 : 1
-};
-q.Ia = function(a) {
-  this[this.b] = this.ga(a - 1, this, 0, this.b);
-  ++this.b;
-  this.C()
-};
-q.Ha = function(a) {
-  var b = 0;
-  if(0 != a) {
-    for(;this.b <= b;) {
-      this[this.b++] = 0
-    }
-    for(this[b] += a;this[b] >= this.K;) {
-      this[b] -= this.K, ++b >= this.b && (this[this.b++] = 0), ++this[b]
-    }
-  }
-};
-q.Fb = function(a) {
-  a == m && (a = 10);
-  if(0 == this.ra() || 2 > a || 36 < a) {
-    return"0"
-  }
-  var b = this.S(a), b = Math.pow(a, b), c = ad(b), d = Yc(), e = Yc(), f = "";
-  for(this.Ja(c, d, e);0 < d.ra();) {
-    f = (b + e.Oa()).toString(a).substr(1) + f, d.Ja(c, d, e)
-  }
-  return e.Oa().toString(a) + f
-};
-q.Oa = function() {
-  if(0 > this.c) {
-    if(1 == this.b) {
-      return this[0] - this.K
-    }
-    if(0 == this.b) {
-      return-1
-    }
-  }else {
-    if(1 == this.b) {
-      return this[0]
-    }
-    if(0 == this.b) {
-      return 0
-    }
-  }
-  return(this[1] & (1 << 32 - this.f) - 1) << this.f | this[0]
-};
-q.fa = function(a, b) {
-  for(var c = 0, d = 0, e = Math.min(a.b, this.b);c < e;) {
-    d += this[c] + a[c], b[c++] = d & this.u, d >>= this.f
-  }
-  if(a.b < this.b) {
-    for(d += a.c;c < this.b;) {
-      d += this[c], b[c++] = d & this.u, d >>= this.f
-    }
-    d += this.c
-  }else {
-    for(d += this.c;c < a.b;) {
-      d += a[c], b[c++] = d & this.u, d >>= this.f
-    }
-    d += a.c
-  }
-  b.c = 0 > d ? -1 : 0;
-  0 < d ? b[c++] = d : -1 > d && (b[c++] = this.K + d);
-  b.b = c;
-  b.C()
-};
-var $ = {abs:function(a, b) {
-  var c = new Y(a, b), c = c.n() ? c.i() : c;
-  B[qb >> 2] = c.h;
-  B[qb + 4 >> 2] = c.j
-}, Ka:function() {
-  $.kb || ($.kb = l, $.Xa = new X, $.Xa.k("4294967296", 10), $.sa = new X, $.sa.k("18446744073709551616", 10), $.xe = new X, $.ye = new X)
-}, me:function(a, b) {
-  var c = new X;
-  c.k(b.toString(), 10);
-  var d = new X;
-  c.vb(d);
-  c = new X;
-  c.k(a.toString(), 10);
-  var e = new X;
-  c.fa(d, e);
-  return e
-}, stringify:function(a, b, c) {
-  a = (new Y(a, b)).toString();
-  c && "-" == a[0] && ($.Ka(), c = new X, c.k(a, 10), a = new X, $.sa.fa(c, a), a = a.toString(10));
-  return a
-}, k:function(a, b, c, d, e) {
-  $.Ka();
-  var f = new X;
-  f.k(a, b);
-  a = new X;
-  a.k(c, 10);
-  c = new X;
-  c.k(d, 10);
-  e && 0 > f.U(X.ZERO) && (d = new X, f.fa($.sa, d), f = d);
-  d = p;
-  0 > f.U(a) ? (f = a, d = l) : 0 < f.U(c) && (f = c, d = l);
-  f = Y.k(f.toString());
-  B[qb >> 2] = f.h;
-  B[qb + 4 >> 2] = f.j;
-  d && g("range error")
-}};
-lc = $;
-var cd, dd;
-s.callMain = s.$d = function(a) {
-  function b() {
-    for(var a = 0;3 > a;a++) {
-      d.push(0)
-    }
-  }
-  w(0 == L, "cannot call main when async dependencies remain! (listen on __ATMAIN__)");
-  w(0 == Wa.length, "cannot call main when preRun functions remain to be called");
-  a = a || [];
-  ab || (ab = l, Va(Xa));
-  var c = a.length + 1, d = [F(J("/bin/this.program"), "i8", Ka)];
-  b();
-  for(var e = 0;e < c - 1;e += 1) {
-    d.push(F(J(a[e]), "i8", Ka)), b()
-  }
-  d.push(0);
-  d = F(d, "i32", Ka);
-  cd = u;
-  dd = l;
-  var f;
-  try {
-    f = s._main(c, d, 0)
-  }catch(h) {
-    if(h && "object" == typeof h && "ExitStatus" == h.type) {
-      return s.print("Exit Status: " + h.value), h.value
-    }
-    "SimulateInfiniteLoop" == h ? s.noExitRuntime = l : g(h)
-  }finally {
-    dd = p
-  }
-  s.noExitRuntime || ed(f)
-};
-function lb(a) {
-  function b() {
-    ab || (ab = l, Va(Xa));
-    Va(Ya);
-    gb = l;
-    s._main && kb && s.callMain(a);
-    if(s.postRun) {
-      for("function" == typeof s.postRun && (s.postRun = [s.postRun]);s.postRun.length;) {
-        cb(s.postRun.shift())
-      }
-    }
-    Va($a)
-  }
-  a = a || s.arguments;
-  if(0 < L) {
-    s.P("run() called, but dependencies remain, so not running")
-  }else {
-    if(s.preRun) {
-      for("function" == typeof s.preRun && (s.preRun = [s.preRun]);s.preRun.length;) {
-        bb(s.preRun.shift())
-      }
-    }
-    Va(Wa);
-    0 < L || (s.setStatus ? (s.setStatus("Running..."), setTimeout(function() {
-      setTimeout(function() {
-        s.setStatus("")
-      }, 1);
-      za || b()
-    }, 1)) : b())
-  }
-}
-s.run = s.we = lb;
-function ed(a) {
-  za = l;
-  u = cd;
-  Va(Za);
-  dd && g({type:"ExitStatus", value:a})
-}
-s.exit = s.de = ed;
-function wa(a) {
-  a && s.print(a);
-  za = l;
-  g("abort() at " + Error().stack)
-}
-s.abort = s.abort = wa;
-if(s.preInit) {
-  for("function" == typeof s.preInit && (s.preInit = [s.preInit]);0 < s.preInit.length;) {
-    s.preInit.pop()()
-  }
-}
-var kb = l;
-s.noInitialRun && (kb = p);
-lb();
-var scrypt = (function () {
-    var exports = {};
-
-    //---------------------------------------------------------------------------
-    // Horrifying UTF-8 and hex codecs
-
-    function encode_utf8(s) {
-	return encode_latin1(unescape(encodeURIComponent(s)));
-    }
-
-    function encode_latin1(s) {
-	var result = new Uint8Array(s.length);
-	for (var i = 0; i < s.length; i++) {
-	    var c = s.charCodeAt(i);
-	    if ((c & 0xff) !== c) throw {message: "Cannot encode string in Latin1", str: s};
-	    result[i] = (c & 0xff);
-	}
-	return result;
-    }
-
-    function decode_utf8(bs) {
-	return decodeURIComponent(escape(decode_latin1(bs)));
-    }
-
-    function decode_latin1(bs) {
-	var encoded = [];
-	for (var i = 0; i < bs.length; i++) {
-	    encoded.push(String.fromCharCode(bs[i]));
-	}
-	return encoded.join('');
-    }
-
-    function to_hex(bs) {
-	var encoded = [];
-	for (var i = 0; i < bs.length; i++) {
-	    encoded.push("0123456789abcdef"[(bs[i] >> 4) & 15]);
-	    encoded.push("0123456789abcdef"[bs[i] & 15]);
-	}
-	return encoded.join('');
-    }
-
-    //---------------------------------------------------------------------------
-
-    function injectBytes(bs, leftPadding) {
-	var p = leftPadding || 0;
-	var address = scrypt_raw._malloc(bs.length + p);
-	scrypt_raw.HEAPU8.set(bs, address + p);
-	for (var i = address; i < address + p; i++) {
-	    scrypt_raw.HEAPU8[i] = 0;
-	}
-	return address;
-    }
-
-    function check_injectBytes(function_name, what, thing, expected_length, leftPadding) {
-	check_length(function_name, what, thing, expected_length);
-	return injectBytes(thing, leftPadding);
-    }
-
-    function extractBytes(address, length) {
-	var result = new Uint8Array(length);
-	result.set(scrypt_raw.HEAPU8.subarray(address, address + length));
-	return result;
-    }
-
-    //---------------------------------------------------------------------------
-
-    function check(function_name, result) {
-	if (result !== 0) {
-	    throw {message: "scrypt_raw." + function_name + " signalled an error"};
-	}
-    }
-
-    function check_length(function_name, what, thing, expected_length) {
-	if (thing.length !== expected_length) {
-	    throw {message: "scrypt." + function_name + " expected " +
-	           expected_length + "-byte " + what + " but got length " + thing.length};
-	}
-    }
-
-    function Target(length) {
-	this.length = length;
-	this.address = scrypt_raw._malloc(length);
-    }
-
-    Target.prototype.extractBytes = function (offset) {
-	var result = extractBytes(this.address + (offset || 0), this.length - (offset || 0));
-	scrypt_raw._free(this.address);
-	this.address = null;
-	return result;
-    };
-
-    function free_all(addresses) {
-	for (var i = 0; i < addresses.length; i++) {
-	    scrypt_raw._free(addresses[i]);
-	}
-    }
-
-    //---------------------------------------------------------------------------
-
-    function random_bytes(count) {
-	var bs = new Uint8Array(count);
-	if(typeof(window.crypto) !== "undefined") {
-	    if(typeof(window.crypto.getRandomValues) !== "undefined") {
-	    	window.crypto.getRandomValues(bs);
-	    	return bs;
-	    }
-	}
-	if(typeof(window.msCrypto) !== "undefined") {
-	    if(typeof(window.msCrypto.getRandomValues) !== "undefined") {
-	    	window.msCrypto.getRandomValues(bs);
-	    	return bs;
-	    }
-	}
-	throw { message: "No suitable random number generator found!"};
-    }
-
-    function crypto_scrypt(passwd, salt, n, r, p, buflen) {
-	var buf = new Target(buflen);
-	var pa = injectBytes(passwd);
-	var sa = injectBytes(salt);
-	check("_crypto_scrypt",
-	      scrypt_raw._crypto_scrypt(pa, passwd.length,
-					sa, salt.length,
-					n, 0, // 64 bits; zero upper half
-					r,
-					p,
-					buf.address, buf.length));
-	free_all([pa, sa]);
-	return buf.extractBytes();
-    }
-
-    //---------------------------------------------------------------------------
-
-    exports.encode_utf8 = encode_utf8;
-    exports.encode_latin1 = encode_latin1;
-    exports.decode_utf8 = decode_utf8;
-    exports.decode_latin1 = decode_latin1;
-    exports.to_hex = to_hex;
-
-    exports.random_bytes = random_bytes;
-    exports.crypto_scrypt = crypto_scrypt;
-
-    return exports;
-})();
-    return scrypt;
-});
-
diff --git a/www/js/vendor/underscore.js b/www/js/vendor/underscore.js
deleted file mode 100644
index f01025b7bcaab18e6b698141c854f95669a5975c..0000000000000000000000000000000000000000
--- a/www/js/vendor/underscore.js
+++ /dev/null
@@ -1,6 +0,0 @@
-//     Underscore.js 1.8.3
-//     http://underscorejs.org
-//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
-//     Underscore may be freely distributed under the MIT license.
-(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var S=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=O(n);a>o;o++){var c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var u=[],i=[],o=0,a=O(n);a>o;o++){var c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=S(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])<u?i=a+1:o=a}return i},m.indexOf=r(1,m.findIndex,m.sortedIndex),m.lastIndexOf=r(-1,m.findLastIndex),m.range=function(n,t,r){null==t&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=j(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e<arguments.length;)i.push(arguments[e++]);return E(n,r,this,this,i)};return r},m.bindAll=function(n){var t,r,e=arguments.length;if(1>=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var f=r&&!e;return e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var r=j(n);return t&&m.extendOwn(r,t),r},m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return N(n,t)},m.isEmpty=function(n){return null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object Array]"===s.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return s.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===s.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&p.call(n,t)},m.noConflict=function(){return u._=i,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var B={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},T=m.invert(B),R=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var t=++q+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},f=t.variable||"obj";return c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var P=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=o[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var t=o[n];m.prototype[n]=function(){return P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this);
-//# sourceMappingURL=underscore-min.map
\ No newline at end of file
diff --git a/www/lib/ionic/js/angular/angular-api.js b/www/lib/ionic/js/angular/angular-api.js
deleted file mode 100644
index ce7526eae9f798ab9ea2e9b9e49f42e3743d81f8..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-api.js
+++ /dev/null
@@ -1,258 +0,0 @@
-// Source: https://github.com/Schweigi/angular-api-demo/blob/master/api.js
-(function(window, angular, undefined) {'use strict';
-
-    // This file is adapted from Angular UI ngGrid project
-    // MIT License
-    // https://github.com/angular-ui/ng-grid/blob/v3.0.0-rc.20/src/js/core/factories/GridApi.js
-    angular.module('ngApi', []).factory('Api', ['$q', '$rootScope', function($q, $rootScope) {
-        /**
-         * Api provides the ability to register public methods events inside an app and allow
-         * for other components to use the api via featureName.raise.methodName and featureName.on.eventName(function(args){}).
-         *
-         * @appInstance: App which the API is for
-         * @apiId: Unique id in case multiple API instances do exist inside the same Angular environment
-         */
-        var Api = function Api(appInstance, apiId) {
-            this.gantt = appInstance;
-            this.apiId = apiId;
-            this.eventListeners = [];
-        };
-
-        /**
-         * Used to execute a function while disabling the specified event listeners.
-         * Disables the listenerFunctions, executes the callbackFn, and then enables the listenerFunctions again
-         *
-         * @listenerFuncs: Listener function or array of listener functions to suppress. These must be the same
-         * @functions that were used in the .on.eventName method
-         * @callBackFn: Function to execute with surpressed events
-         *
-         * Example:
-         *    var clicked = function (){
-         *       // Button clicked event handler
-         *    }
-         *
-         *    api.suppressEvents(clicked, function() {
-         *       // No clicked events will be fired
-         *       api.ui.form.main.submit.click(scope);
-         *    });
-         */
-        Api.prototype.suppressEvents = function(listenerFuncs, callBackFn) {
-            var self = this;
-            var listeners = angular.isArray(listenerFuncs) ? listenerFuncs : [listenerFuncs];
-
-            var foundListeners = [];
-            listeners.forEach(function(l) {
-                foundListeners = self.eventListeners.filter(function(lstnr) {
-                    return l === lstnr.handler;
-                });
-            });
-
-            foundListeners.forEach(function(l) {
-                l.dereg();
-            });
-
-            callBackFn();
-
-            foundListeners.forEach(function(l) {
-                l.dereg = registerEventWithAngular(l.eventId, l.handler, self.gantt, l._this);
-            });
-
-        };
-
-        /**
-         * Registers a new event for the given feature.
-         *
-         * @featureName: Name of the feature that raises the event
-         * @eventName: Name of the event
-         *
-         * To trigger the event call:
-         * .raise.eventName()
-         *
-         * To register a event listener call:
-         * .on.eventName(scope, callBackFn, _this)
-         * scope: A scope reference to add a deregister call to the scopes .$on('destroy')
-         * callBackFn: The function to call
-         * _this: Optional this context variable for callbackFn. If omitted, gantt.api will be used for the context
-         *
-         * .on.eventName returns a de-register funtion that will remove the listener. It's not necessary to use it as the listener
-         * will be removed when the scope is destroyed.
-         */
-        Api.prototype.registerEvent = function(featureName, eventName) {
-            var self = this;
-            if (!self[featureName]) {
-                self[featureName] = {};
-            }
-
-            var feature = self[featureName];
-            if (!feature.on) {
-                feature.on = {};
-                feature.raise = {};
-                feature.raisePromise = {};
-            }
-
-            var eventId = 'event:api:' + this.apiId + ':' + featureName + ':' + eventName;
-
-            // Creating raise event method: featureName.raise.eventName
-            feature.raise[eventName] = function() {
-              $rootScope.$emit.apply($rootScope, [eventId].concat(Array.prototype.slice.call(arguments)));
-            };
-
-            // Creating raise that return a promise event method: featureName.raisePromise.eventName
-            feature.raisePromise[eventName] = function() {
-              // If no listener: continue
-              var listenerCount = $rootScope.$$listenerCount[eventId];
-              if (!listenerCount) {
-                return $q.when();
-              }
-              // Add promise reject/resolve has last arguments
-              var deferred = $q.defer();
-                // If more than one listener : create a buffered defferred
-              if (listenerCount > 1) {
-                  deferred = {
-                      promise: deferred.promise,
-                      notify: deferred.notify,
-                      raw: deferred,
-                      count: 0 ,
-                      errors: [],
-                      results: []
-                  };
-                  deferred.checkFinish = function() {
-                    if (deferred.count < listenerCount) return;
-                    deferred.count = 0;
-                    if (deferred.errors.length) {
-                        if (deferred.errors.length == 1) {
-                            deferred.raw.reject(deferred.errors[0]);
-                        }
-                        else {
-                            deferred.raw.reject(deferred.errors);
-                        }
-                        deferred.errors = [];
-                    }
-                    else {
-                        deferred.raw.resolve(deferred.results);
-                        deferred.results = [];
-                    }
-                  };
-                  deferred.resolve = function(result) {
-                      deferred.results.push(result);
-                      deferred.count++;
-                      deferred.checkFinish();
-                  };
-                  deferred.reject = function(err) {
-                      deferred.errors.push(err);
-                      deferred.count++;
-                      deferred.checkFinish();
-                  };
-              }
-
-              var eventArgs = [eventId].concat(Array.prototype.slice.call(arguments)).concat([deferred]);
-              $rootScope.$emit.apply($rootScope, eventArgs);
-              return deferred.promise;
-            };
-
-            // Creating on event method: featureName.oneventName
-            feature.on[eventName] = function(scope, handler, _this) {
-                var deregAngularOn = registerEventWithAngular(eventId, handler, self.gantt, _this);
-
-                var listener = {
-                    handler: handler,
-                    dereg: deregAngularOn,
-                    eventId: eventId,
-                    scope: scope,
-                    _this: _this
-                };
-                self.eventListeners.push(listener);
-                /*if (!self.eventListenersByEventId[eventId]) {
-                  self.eventListenersByEventId[eventId] = {};
-                }
-                self.eventListenersByEventId[eventId].push(self.eventListenersByEventId[eventId]);*/
-
-                var removeListener = function() {
-                    listener.dereg();
-                    var index = self.eventListeners.indexOf(listener);
-                    self.eventListeners.splice(index, 1);
-                    // If empty, completely remove the event array
-                    //if (!$rootScope.$$listenerCount[eventId]) {
-                    //  delete $rootScope.$$listeners[eventId];
-                    //}
-                };
-
-                scope.$on('$destroy', function() {
-                    removeListener();
-                });
-
-                return removeListener;
-            };
-        };
-
-        function registerEventWithAngular(eventId, handler, app, _this) {
-            return $rootScope.$on(eventId, function() {
-                var args = Array.prototype.slice.call(arguments);
-                args.splice(0, 1); // Remove evt argument
-                handler.apply(_this ? _this : app, args);
-            });
-        }
-
-        /**
-         * Used to execute a function while disabling the specified event listeners.
-         * Disables the listenerFunctions, executes the callbackFn, and then enables the listenerFunctions again
-         *
-         * @listenerFuncs: Listener function or array of listener functions to suppress. These must be the same
-         * @functions that were used in the .on.eventName method
-         * @callBackFn: Function to execute with surpressed events
-         *
-         * Example:
-         *    var clicked = function (){
-         *       // Button clicked event handler
-         *    }
-         *
-         *    api.suppressEvents(clicked, function() {
-         *       // No clicked events will be fired
-         *       api.ui.form.main.submit.click(scope);
-         *    });
-         */
-        Api.prototype.hasListeners = function(listenerFuncs, callBackFn) {
-            var self = this;
-            var listeners = angular.isArray(listenerFuncs) ? listenerFuncs : [listenerFuncs];
-
-            var foundListeners = [];
-            listeners.forEach(function(l) {
-                foundListeners = self.eventListeners.filter(function(lstnr) {
-                    return l === lstnr.handler;
-                });
-            });
-
-            foundListeners.forEach(function(l) {
-                l.dereg();
-            });
-
-            callBackFn();
-
-            foundListeners.forEach(function(l) {
-                l.dereg = registerEventWithAngular(l.eventId, l.handler, self.gantt, l._this);
-            });
-
-        };
-
-        /**
-         * Registers a new event for the given feature
-         *
-         * @featureName: Name of the feature
-         * @methodName: Name of the method
-         * @callBackFn: Function to execute
-         * @_this: Binds callBackFn 'this' to _this. Defaults to Api.app
-         */
-        Api.prototype.registerMethod = function(featureName, methodName, callBackFn, _this) {
-            if (!this[featureName]) {
-                this[featureName] = {};
-            }
-
-            var feature = this[featureName];
-            feature[methodName] = function() {
-                callBackFn.apply(_this || this.app, arguments);
-            };
-        };
-
-        return Api;
-    }]);
-})(window, window.angular);
diff --git a/www/lib/ionic/js/angular/angular-cache.js b/www/lib/ionic/js/angular/angular-cache.js
deleted file mode 100644
index 6a62e9b75815261068f48a3a63dbc81df879192e..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-cache.js
+++ /dev/null
@@ -1,1111 +0,0 @@
-/**
- * angular-cache
- * @version 4.6.0 - Homepage <https://github.com/jmdobry/angular-cache>
- * @copyright (c) 2013-2016 angular-cache project authors
- * @license MIT <https://github.com/jmdobry/angular-cache/blob/master/LICENSE>
- * @overview angular-cache is a very useful replacement for Angular's $cacheFactory.
- */
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(typeof angular === 'undefined' ? require('angular') : angular) :
-  typeof define === 'function' && define.amd ? define('angular-cache', ['angular'], factory) :
-  (global.angularCacheModuleName = factory(global.angular));
-}(this, function (angular) { 'use strict';
-
-  angular = 'default' in angular ? angular['default'] : angular;
-
-  var babelHelpers = {};
-  babelHelpers.typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
-    return typeof obj;
-  } : function (obj) {
-    return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj;
-  };
-  
-  /**
-   * @method bubbleUp
-   * @param {array} heap The heap.
-   * @param {function} weightFunc The weight function.
-   * @param {number} n The index of the element to bubble up.
-   */
-  var bubbleUp = function bubbleUp(heap, weightFunc, n) {
-    var element = heap[n];
-    var weight = weightFunc(element);
-    // When at 0, an element can not go up any further.
-    while (n > 0) {
-      // Compute the parent element's index, and fetch it.
-      var parentN = Math.floor((n + 1) / 2) - 1;
-      var parent = heap[parentN];
-      // If the parent has a lesser weight, things are in order and we
-      // are done.
-      if (weight >= weightFunc(parent)) {
-        break;
-      } else {
-        heap[parentN] = element;
-        heap[n] = parent;
-        n = parentN;
-      }
-    }
-  };
-
-  /**
-   * @method bubbleDown
-   * @param {array} heap The heap.
-   * @param {function} weightFunc The weight function.
-   * @param {number} n The index of the element to sink down.
-   */
-  var bubbleDown = function bubbleDown(heap, weightFunc, n) {
-    var length = heap.length;
-    var node = heap[n];
-    var nodeWeight = weightFunc(node);
-
-    while (true) {
-      var child2N = (n + 1) * 2;
-      var child1N = child2N - 1;
-      var swap = null;
-      if (child1N < length) {
-        var child1 = heap[child1N];
-        var child1Weight = weightFunc(child1);
-        // If the score is less than our node's, we need to swap.
-        if (child1Weight < nodeWeight) {
-          swap = child1N;
-        }
-      }
-      // Do the same checks for the other child.
-      if (child2N < length) {
-        var child2 = heap[child2N];
-        var child2Weight = weightFunc(child2);
-        if (child2Weight < (swap === null ? nodeWeight : weightFunc(heap[child1N]))) {
-          swap = child2N;
-        }
-      }
-
-      if (swap === null) {
-        break;
-      } else {
-        heap[n] = heap[swap];
-        heap[swap] = node;
-        n = swap;
-      }
-    }
-  };
-
-  function BinaryHeap(weightFunc, compareFunc) {
-    if (!weightFunc) {
-      weightFunc = function weightFunc(x) {
-        return x;
-      };
-    }
-    if (!compareFunc) {
-      compareFunc = function compareFunc(x, y) {
-        return x === y;
-      };
-    }
-    if (typeof weightFunc !== 'function') {
-      throw new Error('BinaryHeap([weightFunc][, compareFunc]): "weightFunc" must be a function!');
-    }
-    if (typeof compareFunc !== 'function') {
-      throw new Error('BinaryHeap([weightFunc][, compareFunc]): "compareFunc" must be a function!');
-    }
-    this.weightFunc = weightFunc;
-    this.compareFunc = compareFunc;
-    this.heap = [];
-  }
-
-  var BHProto = BinaryHeap.prototype;
-
-  BHProto.push = function (node) {
-    this.heap.push(node);
-    bubbleUp(this.heap, this.weightFunc, this.heap.length - 1);
-  };
-
-  BHProto.peek = function () {
-    return this.heap[0];
-  };
-
-  BHProto.pop = function () {
-    var front = this.heap[0];
-    var end = this.heap.pop();
-    if (this.heap.length > 0) {
-      this.heap[0] = end;
-      bubbleDown(this.heap, this.weightFunc, 0);
-    }
-    return front;
-  };
-
-  BHProto.remove = function (node) {
-    var length = this.heap.length;
-    for (var i = 0; i < length; i++) {
-      if (this.compareFunc(this.heap[i], node)) {
-        var removed = this.heap[i];
-        var end = this.heap.pop();
-        if (i !== length - 1) {
-          this.heap[i] = end;
-          bubbleUp(this.heap, this.weightFunc, i);
-          bubbleDown(this.heap, this.weightFunc, i);
-        }
-        return removed;
-      }
-    }
-    return null;
-  };
-
-  BHProto.removeAll = function () {
-    this.heap = [];
-  };
-
-  BHProto.size = function () {
-    return this.heap.length;
-  };
-
-  var _Promise = null;
-  try {
-    _Promise = window.Promise;
-  } catch (e) {}
-
-  var utils = {
-    isNumber: function isNumber(value) {
-      return typeof value === 'number';
-    },
-    isString: function isString(value) {
-      return typeof value === 'string';
-    },
-    isObject: function isObject(value) {
-      return value !== null && (typeof value === 'undefined' ? 'undefined' : babelHelpers.typeof(value)) === 'object';
-    },
-    isFunction: function isFunction(value) {
-      return typeof value === 'function';
-    },
-    fromJson: function fromJson(value) {
-      return JSON.parse(value);
-    },
-    equals: function equals(a, b) {
-      return a === b;
-    },
-
-    Promise: _Promise
-  };
-
-  function _keys(collection) {
-    var keys = [];
-    var key = void 0;
-    if (!utils.isObject(collection)) {
-      return keys;
-    }
-    for (key in collection) {
-      if (collection.hasOwnProperty(key)) {
-        keys.push(key);
-      }
-    }
-    return keys;
-  }
-
-  function _isPromiseLike(value) {
-    return value && typeof value.then === 'function';
-  }
-
-  function _stringifyNumber(number) {
-    if (utils.isNumber(number)) {
-      return number.toString();
-    }
-    return number;
-  }
-
-  function _keySet(collection) {
-    var keySet = {};
-    var key = void 0;
-    if (!utils.isObject(collection)) {
-      return keySet;
-    }
-    for (key in collection) {
-      if (collection.hasOwnProperty(key)) {
-        keySet[key] = key;
-      }
-    }
-    return keySet;
-  }
-
-  var defaults = {
-    capacity: Number.MAX_VALUE,
-    maxAge: Number.MAX_VALUE,
-    deleteOnExpire: 'none',
-    onExpire: null,
-    cacheFlushInterval: null,
-    recycleFreq: 1000,
-    storageMode: 'memory',
-    storageImpl: null,
-    disabled: false,
-    storagePrefix: 'cachefactory.caches.',
-    storeOnResolve: false,
-    storeOnReject: false
-  };
-
-  var caches = {};
-
-  function createCache(cacheId, options) {
-    if (cacheId in caches) {
-      throw new Error(cacheId + ' already exists!');
-    } else if (!utils.isString(cacheId)) {
-      throw new Error('cacheId must be a string!');
-    }
-
-    var $$data = {};
-    var $$promises = {};
-    var $$storage = null;
-    var $$expiresHeap = new BinaryHeap(function (x) {
-      return x.expires;
-    }, utils.equals);
-    var $$lruHeap = new BinaryHeap(function (x) {
-      return x.accessed;
-    }, utils.equals);
-
-    var cache = caches[cacheId] = {
-
-      $$id: cacheId,
-
-      destroy: function destroy() {
-        clearInterval(this.$$cacheFlushIntervalId);
-        clearInterval(this.$$recycleFreqId);
-        this.removeAll();
-        if ($$storage) {
-          $$storage().removeItem(this.$$prefix + '.keys');
-          $$storage().removeItem(this.$$prefix);
-        }
-        $$storage = null;
-        $$data = null;
-        $$lruHeap = null;
-        $$expiresHeap = null;
-        this.$$prefix = null;
-        delete caches[this.$$id];
-      },
-      disable: function disable() {
-        this.$$disabled = true;
-      },
-      enable: function enable() {
-        delete this.$$disabled;
-      },
-      get: function get(key, options) {
-        var _this2 = this;
-
-        if (Array.isArray(key)) {
-          var _ret = function () {
-            var keys = key;
-            var values = [];
-
-            keys.forEach(function (key) {
-              var value = _this2.get(key, options);
-              if (value !== null && value !== undefined) {
-                values.push(value);
-              }
-            });
-
-            return {
-              v: values
-            };
-          }();
-
-          if ((typeof _ret === 'undefined' ? 'undefined' : babelHelpers.typeof(_ret)) === "object") return _ret.v;
-        } else {
-          key = _stringifyNumber(key);
-
-          if (this.$$disabled) {
-            return;
-          }
-        }
-
-        options = options || {};
-        if (!utils.isString(key)) {
-          throw new Error('key must be a string!');
-        } else if (options && !utils.isObject(options)) {
-          throw new Error('options must be an object!');
-        } else if (options.onExpire && !utils.isFunction(options.onExpire)) {
-          throw new Error('options.onExpire must be a function!');
-        }
-
-        var item = void 0;
-
-        if ($$storage) {
-          if ($$promises[key]) {
-            return $$promises[key];
-          }
-
-          var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key);
-
-          if (itemJson) {
-            item = utils.fromJson(itemJson);
-          } else {
-            return;
-          }
-        } else if (utils.isObject($$data)) {
-          if (!(key in $$data)) {
-            return;
-          }
-
-          item = $$data[key];
-        }
-
-        var value = item.value;
-        var now = new Date().getTime();
-
-        if ($$storage) {
-          $$lruHeap.remove({
-            key: key,
-            accessed: item.accessed
-          });
-          item.accessed = now;
-          $$lruHeap.push({
-            key: key,
-            accessed: now
-          });
-        } else {
-          $$lruHeap.remove(item);
-          item.accessed = now;
-          $$lruHeap.push(item);
-        }
-
-        if (this.$$deleteOnExpire === 'passive' && 'expires' in item && item.expires < now) {
-          this.remove(key);
-
-          if (this.$$onExpire) {
-            this.$$onExpire(key, item.value, options.onExpire);
-          } else if (options.onExpire) {
-            options.onExpire.call(this, key, item.value);
-          }
-          value = undefined;
-        } else if ($$storage) {
-          $$storage().setItem(this.$$prefix + '.data.' + key, JSON.stringify(item));
-        }
-
-        return value;
-      },
-      info: function info(key) {
-        if (key) {
-          var item = void 0;
-          if ($$storage) {
-            var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key);
-
-            if (itemJson) {
-              item = utils.fromJson(itemJson);
-              return {
-                created: item.created,
-                accessed: item.accessed,
-                expires: item.expires,
-                isExpired: new Date().getTime() - item.created > (item.maxAge || this.$$maxAge)
-              };
-            } else {
-              return undefined;
-            }
-          } else if (utils.isObject($$data) && key in $$data) {
-            item = $$data[key];
-
-            return {
-              created: item.created,
-              accessed: item.accessed,
-              expires: item.expires,
-              isExpired: new Date().getTime() - item.created > (item.maxAge || this.$$maxAge)
-            };
-          } else {
-            return undefined;
-          }
-        } else {
-          return {
-            id: this.$$id,
-            capacity: this.$$capacity,
-            maxAge: this.$$maxAge,
-            deleteOnExpire: this.$$deleteOnExpire,
-            onExpire: this.$$onExpire,
-            cacheFlushInterval: this.$$cacheFlushInterval,
-            recycleFreq: this.$$recycleFreq,
-            storageMode: this.$$storageMode,
-            storageImpl: $$storage ? $$storage() : undefined,
-            disabled: !!this.$$disabled,
-            size: $$lruHeap && $$lruHeap.size() || 0
-          };
-        }
-      },
-      keys: function keys() {
-        if ($$storage) {
-          var keysJson = $$storage().getItem(this.$$prefix + '.keys');
-
-          if (keysJson) {
-            return utils.fromJson(keysJson);
-          } else {
-            return [];
-          }
-        } else {
-          return _keys($$data);
-        }
-      },
-      keySet: function keySet() {
-        if ($$storage) {
-          var keysJson = $$storage().getItem(this.$$prefix + '.keys');
-          var kSet = {};
-
-          if (keysJson) {
-            var keys = utils.fromJson(keysJson);
-
-            for (var i = 0; i < keys.length; i++) {
-              kSet[keys[i]] = keys[i];
-            }
-          }
-          return kSet;
-        } else {
-          return _keySet($$data);
-        }
-      },
-      put: function put(key, value, options) {
-        var _this3 = this;
-
-        options || (options = {});
-
-        var storeOnResolve = 'storeOnResolve' in options ? !!options.storeOnResolve : this.$$storeOnResolve;
-        var storeOnReject = 'storeOnReject' in options ? !!options.storeOnReject : this.$$storeOnReject;
-
-        var getHandler = function getHandler(store, isError) {
-          return function (v) {
-            if (store) {
-              delete $$promises[key];
-              if (utils.isObject(v) && 'status' in v && 'data' in v) {
-                v = [v.status, v.data, v.headers(), v.statusText];
-                _this3.put(key, v);
-              } else {
-                _this3.put(key, v);
-              }
-            }
-            if (isError) {
-              if (utils.Promise) {
-                return utils.Promise.reject(v);
-              } else {
-                throw v;
-              }
-            } else {
-              return v;
-            }
-          };
-        };
-
-        if (this.$$disabled || !utils.isObject($$data) || value === null || value === undefined) {
-          return;
-        }
-        key = _stringifyNumber(key);
-
-        if (!utils.isString(key)) {
-          throw new Error('key must be a string!');
-        }
-
-        var now = new Date().getTime();
-        var item = {
-          key: key,
-          value: _isPromiseLike(value) ? value.then(getHandler(storeOnResolve, false), getHandler(storeOnReject, true)) : value,
-          created: options.created === undefined ? now : options.created,
-          accessed: options.accessed === undefined ? now : options.accessed
-        };
-        if (options.maxAge) {
-          item.maxAge = options.maxAge;
-        }
-
-        if (options.expires === undefined) {
-          item.expires = item.created + (item.maxAge || this.$$maxAge);
-        } else {
-          item.expires = options.expires;
-        }
-
-        if ($$storage) {
-          if (_isPromiseLike(item.value)) {
-            $$promises[key] = item.value;
-            return $$promises[key];
-          }
-          var keysJson = $$storage().getItem(this.$$prefix + '.keys');
-          var keys = keysJson ? utils.fromJson(keysJson) : [];
-          var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key);
-
-          // Remove existing
-          if (itemJson) {
-            this.remove(key);
-          }
-          // Add to expires heap
-          $$expiresHeap.push({
-            key: key,
-            expires: item.expires
-          });
-          // Add to lru heap
-          $$lruHeap.push({
-            key: key,
-            accessed: item.accessed
-          });
-          // Set item
-          $$storage().setItem(this.$$prefix + '.data.' + key, JSON.stringify(item));
-          var exists = false;
-          for (var i = 0; i < keys.length; i++) {
-            if (keys[i] === key) {
-              exists = true;
-              break;
-            }
-          }
-          if (!exists) {
-            keys.push(key);
-          }
-          $$storage().setItem(this.$$prefix + '.keys', JSON.stringify(keys));
-        } else {
-          // Remove existing
-          if ($$data[key]) {
-            this.remove(key);
-          }
-          // Add to expires heap
-          $$expiresHeap.push(item);
-          // Add to lru heap
-          $$lruHeap.push(item);
-          // Set item
-          $$data[key] = item;
-          delete $$promises[key];
-        }
-
-        // Handle exceeded capacity
-        if ($$lruHeap.size() > this.$$capacity) {
-          this.remove($$lruHeap.peek().key);
-        }
-
-        return value;
-      },
-      remove: function remove(key) {
-        key += '';
-        delete $$promises[key];
-        if ($$storage) {
-          var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key);
-
-          if (itemJson) {
-            var item = utils.fromJson(itemJson);
-            $$lruHeap.remove({
-              key: key,
-              accessed: item.accessed
-            });
-            $$expiresHeap.remove({
-              key: key,
-              expires: item.expires
-            });
-            $$storage().removeItem(this.$$prefix + '.data.' + key);
-            var keysJson = $$storage().getItem(this.$$prefix + '.keys');
-            var keys = keysJson ? utils.fromJson(keysJson) : [];
-            var index = keys.indexOf(key);
-
-            if (index >= 0) {
-              keys.splice(index, 1);
-            }
-            $$storage().setItem(this.$$prefix + '.keys', JSON.stringify(keys));
-            return item.value;
-          }
-        } else if (utils.isObject($$data)) {
-          var value = $$data[key] ? $$data[key].value : undefined;
-          $$lruHeap.remove($$data[key]);
-          $$expiresHeap.remove($$data[key]);
-          $$data[key] = null;
-          delete $$data[key];
-          return value;
-        }
-      },
-      removeAll: function removeAll() {
-        if ($$storage) {
-          $$lruHeap.removeAll();
-          $$expiresHeap.removeAll();
-          var keysJson = $$storage().getItem(this.$$prefix + '.keys');
-
-          if (keysJson) {
-            var keys = utils.fromJson(keysJson);
-
-            for (var i = 0; i < keys.length; i++) {
-              this.remove(keys[i]);
-            }
-          }
-          $$storage().setItem(this.$$prefix + '.keys', JSON.stringify([]));
-        } else if (utils.isObject($$data)) {
-          $$lruHeap.removeAll();
-          $$expiresHeap.removeAll();
-          for (var key in $$data) {
-            $$data[key] = null;
-          }
-          $$data = {};
-        } else {
-          $$lruHeap.removeAll();
-          $$expiresHeap.removeAll();
-          $$data = {};
-        }
-        $$promises = {};
-      },
-      removeExpired: function removeExpired() {
-        var now = new Date().getTime();
-        var expired = {};
-        var key = void 0;
-        var expiredItem = void 0;
-
-        while ((expiredItem = $$expiresHeap.peek()) && expiredItem.expires <= now) {
-          expired[expiredItem.key] = expiredItem.value ? expiredItem.value : null;
-          $$expiresHeap.pop();
-        }
-
-        if ($$storage) {
-          for (key in expired) {
-            var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key);
-            if (itemJson) {
-              expired[key] = utils.fromJson(itemJson).value;
-              this.remove(key);
-            }
-          }
-        } else {
-          for (key in expired) {
-            this.remove(key);
-          }
-        }
-
-        if (this.$$onExpire) {
-          for (key in expired) {
-            this.$$onExpire(key, expired[key]);
-          }
-        }
-
-        return expired;
-      },
-      setCacheFlushInterval: function setCacheFlushInterval(cacheFlushInterval) {
-        var _this = this;
-        if (cacheFlushInterval === null) {
-          delete _this.$$cacheFlushInterval;
-        } else if (!utils.isNumber(cacheFlushInterval)) {
-          throw new Error('cacheFlushInterval must be a number!');
-        } else if (cacheFlushInterval < 0) {
-          throw new Error('cacheFlushInterval must be greater than zero!');
-        } else if (cacheFlushInterval !== _this.$$cacheFlushInterval) {
-          _this.$$cacheFlushInterval = cacheFlushInterval;
-
-          clearInterval(_this.$$cacheFlushIntervalId); // eslint-disable-line
-
-          _this.$$cacheFlushIntervalId = setInterval(function () {
-            _this.removeAll();
-          }, _this.$$cacheFlushInterval);
-        }
-      },
-      setCapacity: function setCapacity(capacity) {
-        if (capacity === null) {
-          delete this.$$capacity;
-        } else if (!utils.isNumber(capacity)) {
-          throw new Error('capacity must be a number!');
-        } else if (capacity < 0) {
-          throw new Error('capacity must be greater than zero!');
-        } else {
-          this.$$capacity = capacity;
-        }
-        var removed = {};
-        while ($$lruHeap.size() > this.$$capacity) {
-          removed[$$lruHeap.peek().key] = this.remove($$lruHeap.peek().key);
-        }
-        return removed;
-      },
-      setDeleteOnExpire: function setDeleteOnExpire(deleteOnExpire, setRecycleFreq) {
-        if (deleteOnExpire === null) {
-          delete this.$$deleteOnExpire;
-        } else if (!utils.isString(deleteOnExpire)) {
-          throw new Error('deleteOnExpire must be a string!');
-        } else if (deleteOnExpire !== 'none' && deleteOnExpire !== 'passive' && deleteOnExpire !== 'aggressive') {
-          throw new Error('deleteOnExpire must be "none", "passive" or "aggressive"!');
-        } else {
-          this.$$deleteOnExpire = deleteOnExpire;
-        }
-        if (setRecycleFreq !== false) {
-          this.setRecycleFreq(this.$$recycleFreq);
-        }
-      },
-      setMaxAge: function setMaxAge(maxAge) {
-        if (maxAge === null) {
-          this.$$maxAge = Number.MAX_VALUE;
-        } else if (!utils.isNumber(maxAge)) {
-          throw new Error('maxAge must be a number!');
-        } else if (maxAge < 0) {
-          throw new Error('maxAge must be greater than zero!');
-        } else {
-          this.$$maxAge = maxAge;
-        }
-        var i = void 0,
-            keys = void 0,
-            key = void 0;
-
-        $$expiresHeap.removeAll();
-
-        if ($$storage) {
-          var keysJson = $$storage().getItem(this.$$prefix + '.keys');
-
-          keys = keysJson ? utils.fromJson(keysJson) : [];
-
-          for (i = 0; i < keys.length; i++) {
-            key = keys[i];
-            var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key);
-
-            if (itemJson) {
-              var item = utils.fromJson(itemJson);
-              if (this.$$maxAge === Number.MAX_VALUE) {
-                item.expires = Number.MAX_VALUE;
-              } else {
-                item.expires = item.created + (item.maxAge || this.$$maxAge);
-              }
-              $$expiresHeap.push({
-                key: key,
-                expires: item.expires
-              });
-            }
-          }
-        } else {
-          keys = _keys($$data);
-
-          for (i = 0; i < keys.length; i++) {
-            key = keys[i];
-            if (this.$$maxAge === Number.MAX_VALUE) {
-              $$data[key].expires = Number.MAX_VALUE;
-            } else {
-              $$data[key].expires = $$data[key].created + ($$data[key].maxAge || this.$$maxAge);
-            }
-            $$expiresHeap.push($$data[key]);
-          }
-        }
-        if (this.$$deleteOnExpire === 'aggressive') {
-          return this.removeExpired();
-        } else {
-          return {};
-        }
-      },
-      setOnExpire: function setOnExpire(onExpire) {
-        if (onExpire === null) {
-          delete this.$$onExpire;
-        } else if (!utils.isFunction(onExpire)) {
-          throw new Error('onExpire must be a function!');
-        } else {
-          this.$$onExpire = onExpire;
-        }
-      },
-      setOptions: function setOptions(cacheOptions, strict) {
-        cacheOptions = cacheOptions || {};
-        strict = !!strict;
-        if (!utils.isObject(cacheOptions)) {
-          throw new Error('cacheOptions must be an object!');
-        }
-
-        if ('storagePrefix' in cacheOptions) {
-          this.$$storagePrefix = cacheOptions.storagePrefix;
-        } else if (strict) {
-          this.$$storagePrefix = defaults.storagePrefix;
-        }
-
-        this.$$prefix = this.$$storagePrefix + this.$$id;
-
-        if ('disabled' in cacheOptions) {
-          this.$$disabled = !!cacheOptions.disabled;
-        } else if (strict) {
-          this.$$disabled = defaults.disabled;
-        }
-
-        if ('deleteOnExpire' in cacheOptions) {
-          this.setDeleteOnExpire(cacheOptions.deleteOnExpire, false);
-        } else if (strict) {
-          this.setDeleteOnExpire(defaults.deleteOnExpire, false);
-        }
-
-        if ('recycleFreq' in cacheOptions) {
-          this.setRecycleFreq(cacheOptions.recycleFreq);
-        } else if (strict) {
-          this.setRecycleFreq(defaults.recycleFreq);
-        }
-
-        if ('maxAge' in cacheOptions) {
-          this.setMaxAge(cacheOptions.maxAge);
-        } else if (strict) {
-          this.setMaxAge(defaults.maxAge);
-        }
-
-        if ('storeOnResolve' in cacheOptions) {
-          this.$$storeOnResolve = !!cacheOptions.storeOnResolve;
-        } else if (strict) {
-          this.$$storeOnResolve = defaults.storeOnResolve;
-        }
-
-        if ('storeOnReject' in cacheOptions) {
-          this.$$storeOnReject = !!cacheOptions.storeOnReject;
-        } else if (strict) {
-          this.$$storeOnReject = defaults.storeOnReject;
-        }
-
-        if ('capacity' in cacheOptions) {
-          this.setCapacity(cacheOptions.capacity);
-        } else if (strict) {
-          this.setCapacity(defaults.capacity);
-        }
-
-        if ('cacheFlushInterval' in cacheOptions) {
-          this.setCacheFlushInterval(cacheOptions.cacheFlushInterval);
-        } else if (strict) {
-          this.setCacheFlushInterval(defaults.cacheFlushInterval);
-        }
-
-        if ('onExpire' in cacheOptions) {
-          this.setOnExpire(cacheOptions.onExpire);
-        } else if (strict) {
-          this.setOnExpire(defaults.onExpire);
-        }
-
-        if ('storageMode' in cacheOptions || 'storageImpl' in cacheOptions) {
-          this.setStorageMode(cacheOptions.storageMode || defaults.storageMode, cacheOptions.storageImpl || defaults.storageImpl);
-        } else if (strict) {
-          this.setStorageMode(defaults.storageMode, defaults.storageImpl);
-        }
-      },
-      setRecycleFreq: function setRecycleFreq(recycleFreq) {
-        if (recycleFreq === null) {
-          delete this.$$recycleFreq;
-        } else if (!utils.isNumber(recycleFreq)) {
-          throw new Error('recycleFreq must be a number!');
-        } else if (recycleFreq < 0) {
-          throw new Error('recycleFreq must be greater than zero!');
-        } else {
-          this.$$recycleFreq = recycleFreq;
-        }
-        clearInterval(this.$$recycleFreqId);
-        if (this.$$deleteOnExpire === 'aggressive') {
-          (function (self) {
-            self.$$recycleFreqId = setInterval(function () {
-              self.removeExpired();
-            }, self.$$recycleFreq);
-          })(this);
-        } else {
-          delete this.$$recycleFreqId;
-        }
-      },
-      setStorageMode: function setStorageMode(storageMode, storageImpl) {
-        if (!utils.isString(storageMode)) {
-          throw new Error('storageMode must be a string!');
-        } else if (storageMode !== 'memory' && storageMode !== 'localStorage' && storageMode !== 'sessionStorage') {
-          throw new Error('storageMode must be "memory", "localStorage" or "sessionStorage"!');
-        }
-
-        var prevStorage = $$storage;
-        var prevData = $$data;
-        var shouldReInsert = false;
-        var items = {};
-
-        function load(prevStorage, prevData) {
-          var keys = this.keys();
-          var length = keys.length;
-          if (length) {
-            var _key = void 0;
-            var prevDataIsObject = utils.isObject(prevData);
-            for (var i = 0; i < length; i++) {
-              _key = keys[i];
-              if (prevStorage) {
-                var itemJson = prevStorage().getItem(this.$$prefix + '.data.' + _key);
-                if (itemJson) {
-                  items[_key] = utils.fromJson(itemJson);
-                }
-              } else if (prevDataIsObject) {
-                items[_key] = prevData[_key];
-              }
-              this.remove(_key);
-            }
-            shouldReInsert = true;
-          }
-        }
-
-        if (!this.$$initializing) {
-          load.call(this, prevStorage, prevData);
-        }
-
-        this.$$storageMode = storageMode;
-
-        if (storageImpl) {
-          if (!utils.isObject(storageImpl)) {
-            throw new Error('storageImpl must be an object!');
-          } else if (!('setItem' in storageImpl) || typeof storageImpl.setItem !== 'function') {
-            throw new Error('storageImpl must implement "setItem(key, value)"!');
-          } else if (!('getItem' in storageImpl) || typeof storageImpl.getItem !== 'function') {
-            throw new Error('storageImpl must implement "getItem(key)"!');
-          } else if (!('removeItem' in storageImpl) || typeof storageImpl.removeItem !== 'function') {
-            throw new Error('storageImpl must implement "removeItem(key)"!');
-          }
-          $$storage = function $$storage() {
-            return storageImpl;
-          };
-        } else if (this.$$storageMode === 'localStorage') {
-          try {
-            localStorage.setItem('cachefactory', 'cachefactory');
-            localStorage.removeItem('cachefactory');
-            $$storage = function $$storage() {
-              return localStorage;
-            };
-          } catch (e) {
-            $$storage = null;
-            this.$$storageMode = 'memory';
-          }
-        } else if (this.$$storageMode === 'sessionStorage') {
-          try {
-            sessionStorage.setItem('cachefactory', 'cachefactory');
-            sessionStorage.removeItem('cachefactory');
-            $$storage = function $$storage() {
-              return sessionStorage;
-            };
-          } catch (e) {
-            $$storage = null;
-            this.$$storageMode = 'memory';
-          }
-        } else {
-          $$storage = null;
-          this.$$storageMode = 'memory';
-        }
-
-        if (this.$$initializing) {
-          load.call(this, $$storage, $$data);
-        }
-
-        if (shouldReInsert) {
-          var item = void 0;
-          for (var key in items) {
-            item = items[key];
-            this.put(key, item.value, {
-              created: item.created,
-              accessed: item.accessed,
-              expires: item.expires
-            });
-          }
-        }
-      },
-      touch: function touch(key, options) {
-        var _this4 = this;
-
-        if (key) {
-          var val = this.get(key, {
-            onExpire: function onExpire(k, v) {
-              return _this4.put(k, v);
-            }
-          });
-          if (val) {
-            this.put(key, val, options);
-          }
-        } else {
-          var keys = this.keys();
-          for (var i = 0; i < keys.length; i++) {
-            this.touch(keys[i], options);
-          }
-        }
-      },
-      values: function values() {
-        var keys = this.keys();
-        var items = [];
-        for (var i = 0; i < keys.length; i++) {
-          items.push(this.get(keys[i]));
-        }
-        return items;
-      }
-    };
-
-    cache.$$initializing = true;
-    cache.setOptions(options, true);
-    cache.$$initializing = false;
-
-    return cache;
-  }
-
-  function CacheFactory(cacheId, options) {
-    return createCache(cacheId, options);
-  }
-
-  CacheFactory.createCache = createCache;
-  CacheFactory.defaults = defaults;
-
-  CacheFactory.info = function () {
-    var keys = _keys(caches);
-    var info = {
-      size: keys.length,
-      caches: {}
-    };
-    for (var opt in defaults) {
-      if (defaults.hasOwnProperty(opt)) {
-        info[opt] = defaults[opt];
-      }
-    }
-    for (var i = 0; i < keys.length; i++) {
-      var key = keys[i];
-      info.caches[key] = caches[key].info();
-    }
-    return info;
-  };
-
-  CacheFactory.get = function (cacheId) {
-    return caches[cacheId];
-  };
-  CacheFactory.keySet = function () {
-    return _keySet(caches);
-  };
-  CacheFactory.keys = function () {
-    return _keys(caches);
-  };
-  CacheFactory.destroy = function (cacheId) {
-    if (caches[cacheId]) {
-      caches[cacheId].destroy();
-      delete caches[cacheId];
-    }
-  };
-  CacheFactory.destroyAll = function () {
-    for (var cacheId in caches) {
-      caches[cacheId].destroy();
-    }
-    caches = {};
-  };
-  CacheFactory.clearAll = function () {
-    for (var cacheId in caches) {
-      caches[cacheId].removeAll();
-    }
-  };
-  CacheFactory.removeExpiredFromAll = function () {
-    var expired = {};
-    for (var cacheId in caches) {
-      expired[cacheId] = caches[cacheId].removeExpired();
-    }
-    return expired;
-  };
-  CacheFactory.enableAll = function () {
-    for (var cacheId in caches) {
-      caches[cacheId].$$disabled = false;
-    }
-  };
-  CacheFactory.disableAll = function () {
-    for (var cacheId in caches) {
-      caches[cacheId].$$disabled = true;
-    }
-  };
-  CacheFactory.touchAll = function () {
-    for (var cacheId in caches) {
-      caches[cacheId].touch();
-    }
-  };
-
-  CacheFactory.utils = utils;
-  CacheFactory.BinaryHeap = BinaryHeap;
-
-  CacheFactory.utils.equals = angular.equals;
-  CacheFactory.utils.isObject = angular.isObject;
-  CacheFactory.utils.fromJson = angular.fromJson;
-
-  function BinaryHeapProvider() {
-    this.$get = function () {
-      return CacheFactory.BinaryHeap;
-    };
-  }
-
-  function CacheFactoryProvider() {
-    this.defaults = CacheFactory.defaults;
-    this.defaults.storagePrefix = 'angular-cache.caches.';
-
-    this.$get = ['$q', function ($q) {
-      CacheFactory.utils.Promise = $q;
-      return CacheFactory;
-    }];
-  }
-
-  angular.module('angular-cache', []).provider('BinaryHeap', BinaryHeapProvider).provider('CacheFactory', CacheFactoryProvider);
-
-  var index = 'angular-cache';
-
-  return index;
-
-}));
-//# sourceMappingURL=angular-cache.js.map
\ No newline at end of file
diff --git a/www/lib/ionic/js/angular/angular-chart.js b/www/lib/ionic/js/angular/angular-chart.js
deleted file mode 100644
index 3a7d5bc8bea2a48de7a0e4b6a4f707bcf1976383..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-chart.js
+++ /dev/null
@@ -1,400 +0,0 @@
-/*!
- * angular-chart.js - An angular.js wrapper for Chart.js
- * http://jtblin.github.io/angular-chart.js/
- * Version: 1.1.1
- *
- * Copyright 2016 Jerome Touffe-Blin
- * Released under the BSD-2-Clause license
- * https://github.com/jtblin/angular-chart.js/blob/master/LICENSE
- */
-(function (factory) {
-  'use strict';
-  if (typeof exports === 'object') {
-    // Node/CommonJS
-    module.exports = factory(
-      typeof angular !== 'undefined' ? angular : require('angular'),
-      typeof Chart !== 'undefined' ? Chart : require('chart.js'));
-  }  else if (typeof define === 'function' && define.amd) {
-    // AMD. Register as an anonymous module.
-    define(['angular', 'chart'], factory);
-  } else {
-    // Browser globals
-    if (typeof angular === 'undefined') {
-        throw new Error('AngularJS framework needs to be included, see https://angularjs.org/');
-    } else if (typeof Chart === 'undefined') {
-      throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/');
-    }
-    factory(angular, Chart);
-  }
-}(function (angular, Chart) {
-  'use strict';
-
-  Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';
-  Chart.defaults.global.tooltips.mode = 'label';
-  Chart.defaults.global.elements.line.borderWidth = 2;
-  Chart.defaults.global.elements.rectangle.borderWidth = 2;
-  Chart.defaults.global.legend.display = false;
-  Chart.defaults.global.colors = [
-    '#97BBCD', // blue
-    '#DCDCDC', // light grey
-    '#F7464A', // red
-    '#46BFBD', // green
-    '#FDB45C', // yellow
-    '#949FB1', // grey
-    '#4D5360'  // dark grey
-  ];
-
-  var useExcanvas = typeof window.G_vmlCanvasManager === 'object' &&
-    window.G_vmlCanvasManager !== null &&
-    typeof window.G_vmlCanvasManager.initElement === 'function';
-
-  if (useExcanvas) Chart.defaults.global.animation = false;
-
-  return angular.module('chart.js', [])
-    .provider('ChartJs', ChartJsProvider)
-    .factory('ChartJsFactory', ['ChartJs', '$timeout', ChartJsFactory])
-    .directive('chartBase', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory(); }])
-    .directive('chartLine', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('line'); }])
-    .directive('chartBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bar'); }])
-    .directive('chartHorizontalBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('horizontalBar'); }])
-    .directive('chartRadar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('radar'); }])
-    .directive('chartDoughnut', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('doughnut'); }])
-    .directive('chartPie', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('pie'); }])
-    .directive('chartPolarArea', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('polarArea'); }])
-    .directive('chartBubble', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bubble'); }])
-    .name;
-
-  /**
-   * Wrapper for chart.js
-   * Allows configuring chart js using the provider
-   *
-   * angular.module('myModule', ['chart.js']).config(function(ChartJsProvider) {
-   *   ChartJsProvider.setOptions({ responsive: false });
-   *   ChartJsProvider.setOptions('Line', { responsive: true });
-   * })))
-   */
-  function ChartJsProvider () {
-    var options = { responsive: true };
-    var ChartJs = {
-      Chart: Chart,
-      getOptions: function (type) {
-        var typeOptions = type && options[type] || {};
-        return angular.extend({}, options, typeOptions);
-      }
-    };
-
-    /**
-     * Allow to set global options during configuration
-     */
-    this.setOptions = function (type, customOptions) {
-      // If no type was specified set option for the global object
-      if (! customOptions) {
-        customOptions = type;
-        options = angular.merge(options, customOptions);
-      } else {
-        // Set options for the specific chart
-        options[type] = angular.merge(options[type] || {}, customOptions);
-      }
-
-      angular.merge(ChartJs.Chart.defaults, options);
-    };
-
-    this.$get = function () {
-      return ChartJs;
-    };
-  }
-
-  function ChartJsFactory (ChartJs, $timeout) {
-    return function chart (type) {
-      return {
-        restrict: 'CA',
-        scope: {
-          chartGetColor: '=?',
-          chartType: '=',
-          chartData: '=?',
-          chartLabels: '=?',
-          chartOptions: '=?',
-          chartSeries: '=?',
-          chartColors: '=?',
-          chartClick: '=?',
-          chartHover: '=?',
-          chartDatasetOverride: '=?'
-        },
-        link: function (scope, elem/*, attrs */) {
-          if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]);
-
-          // Order of setting "watch" matter
-          scope.$watch('chartData', watchData, true);
-          scope.$watch('chartSeries', watchOther, true);
-          scope.$watch('chartLabels', watchOther, true);
-          scope.$watch('chartOptions', watchOther, true);
-          scope.$watch('chartColors', watchOther, true);
-          scope.$watch('chartDatasetOverride', watchOther, true);
-          scope.$watch('chartType', watchType, false);
-
-          scope.$on('$destroy', function () {
-            destroyChart(scope);
-          });
-
-          scope.$on('$resize', function () {
-            if (scope.chart) scope.chart.resize();
-          });
-
-          function watchData (newVal, oldVal) {
-            if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) {
-              destroyChart(scope);
-              return;
-            }
-            var chartType = type || scope.chartType;
-            if (! chartType) return;
-
-            if (scope.chart && canUpdateChart(newVal, oldVal))
-              return updateChart(newVal, scope);
-
-            createChart(chartType, scope, elem);
-          }
-
-          function watchOther (newVal, oldVal) {
-            if (isEmpty(newVal)) return;
-            if (angular.equals(newVal, oldVal)) return;
-            var chartType = type || scope.chartType;
-            if (! chartType) return;
-
-            // chart.update() doesn't work for series and labels
-            // so we have to re-create the chart entirely
-            createChart(chartType, scope, elem);
-          }
-
-          function watchType (newVal, oldVal) {
-            if (isEmpty(newVal)) return;
-            if (angular.equals(newVal, oldVal)) return;
-            createChart(newVal, scope, elem);
-          }
-        }
-      };
-    };
-
-    function createChart (type, scope, elem) {
-      var options = getChartOptions(type, scope);
-      if (! hasData(scope) || ! canDisplay(type, scope, elem, options)) return;
-
-      var cvs = elem[0];
-      var ctx = cvs.getContext('2d');
-
-      scope.chartGetColor = getChartColorFn(scope);
-      var data = getChartData(type, scope);
-      // Destroy old chart if it exists to avoid ghost charts issue
-      // https://github.com/jtblin/angular-chart.js/issues/187
-      destroyChart(scope);
-
-      scope.chart = new ChartJs.Chart(ctx, {
-        type: type,
-        data: data,
-        options: options
-      });
-      scope.$emit('chart-create', scope.chart);
-      bindEvents(cvs, scope);
-    }
-
-    function canUpdateChart (newVal, oldVal) {
-      if (newVal && oldVal && newVal.length && oldVal.length) {
-        return Array.isArray(newVal[0]) ?
-        newVal.length === oldVal.length && newVal.every(function (element, index) {
-          return element.length === oldVal[index].length; }) :
-          oldVal.reduce(sum, 0) > 0 ? newVal.length === oldVal.length : false;
-      }
-      return false;
-    }
-
-    function sum (carry, val) {
-      return carry + val;
-    }
-
-    function getEventHandler (scope, action, triggerOnlyOnChange) {
-      var lastState = {
-        point: void 0,
-        points: void 0
-      };
-      return function (evt) {
-        var atEvent = scope.chart.getElementAtEvent || scope.chart.getPointAtEvent;
-        var atEvents = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent;
-        if (atEvents) {
-          var points = atEvents.call(scope.chart, evt);
-          var point = atEvent ? atEvent.call(scope.chart, evt)[0] : void 0;
-
-          if (triggerOnlyOnChange === false ||
-            (! angular.equals(lastState.points, points) && ! angular.equals(lastState.point, point))
-          ) {
-            lastState.point = point;
-            lastState.points = points;
-            scope[action](points, evt, point);
-          }
-        }
-      };
-    }
-
-    function getColors (type, scope) {
-      var colors = angular.copy(scope.chartColors ||
-        ChartJs.getOptions(type).chartColors ||
-        Chart.defaults.global.colors
-      );
-      var notEnoughColors = colors.length < scope.chartData.length;
-      while (colors.length < scope.chartData.length) {
-        colors.push(scope.chartGetColor());
-      }
-      // mutate colors in this case as we don't want
-      // the colors to change on each refresh
-      if (notEnoughColors) scope.chartColors = colors;
-      return colors.map(convertColor);
-    }
-
-    function convertColor (color) {
-      // Allows RGB and RGBA colors to be input as a string: e.g.: "rgb(159,204,0)", "rgba(159,204,0, 0.5)"
-      if (typeof color === 'string' && color[0] === 'r') return getColor(rgbStringToRgb(color));
-      // Allows hex colors to be input as a string.
-      if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));
-      // Allows colors to be input as an object, bypassing getColor() entirely
-      if (typeof color === 'object' && color !== null) return color;
-      return getRandomColor();
-    }
-
-    function getRandomColor () {
-      var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];
-      return getColor(color);
-    }
-
-    function getColor (color) {
-      var alpha = color[3] || 1;
-      color = color.slice(0, 3);
-      return {
-        backgroundColor: rgba(color, 0.2),
-        pointBackgroundColor: rgba(color, alpha),
-        pointHoverBackgroundColor: rgba(color, 0.8),
-        borderColor: rgba(color, alpha),
-        pointBorderColor: '#fff',
-        pointHoverBorderColor: rgba(color, alpha)
-      };
-    }
-
-    function getRandomInt (min, max) {
-      return Math.floor(Math.random() * (max - min + 1)) + min;
-    }
-
-    function rgba (color, alpha) {
-      // rgba not supported by IE8
-      return useExcanvas ? 'rgb(' + color.join(',') + ')' : 'rgba(' + color.concat(alpha).join(',') + ')';
-    }
-
-    // Credit: http://stackoverflow.com/a/11508164/1190235
-    function hexToRgb (hex) {
-      var bigint = parseInt(hex, 16),
-        r = (bigint >> 16) & 255,
-        g = (bigint >> 8) & 255,
-        b = bigint & 255;
-
-      return [r, g, b];
-    }
-
-    function rgbStringToRgb (color) {
-      var match = color.match(/^rgba?\(([\d,.]+)\)$/);
-      if (! match) throw new Error('Cannot parse rgb value');
-      color = match[1].split(',');
-      return color.map(Number);
-    }
-
-    function hasData (scope) {
-      return scope.chartData && scope.chartData.length;
-    }
-
-    function getChartColorFn (scope) {
-      return typeof scope.chartGetColor === 'function' ? scope.chartGetColor : getRandomColor;
-    }
-
-    function getChartData (type, scope) {
-      var colors = getColors(type, scope);
-      return Array.isArray(scope.chartData[0]) ?
-        getDataSets(scope.chartLabels, scope.chartData, scope.chartSeries || [], colors, scope.chartDatasetOverride) :
-        getData(scope.chartLabels, scope.chartData, colors, scope.chartDatasetOverride);
-    }
-
-    function getDataSets (labels, data, series, colors, datasetOverride) {
-      return {
-        labels: labels,
-        datasets: data.map(function (item, i) {
-          var dataset = angular.extend({}, colors[i], {
-            label: series[i],
-            data: item
-          });
-          if (datasetOverride && datasetOverride.length >= i) {
-            angular.merge(dataset, datasetOverride[i]);
-          }
-          return dataset;
-        })
-      };
-    }
-
-    function getData (labels, data, colors, datasetOverride) {
-      var dataset = {
-        labels: labels,
-        datasets: [{
-          data: data,
-          backgroundColor: colors.map(function (color) {
-            return color.pointBackgroundColor;
-          }),
-          hoverBackgroundColor: colors.map(function (color) {
-            return color.backgroundColor;
-          })
-        }]
-      };
-      if (datasetOverride) {
-        angular.merge(dataset.datasets[0], datasetOverride);
-      }
-      return dataset;
-    }
-
-    function getChartOptions (type, scope) {
-      return angular.extend({}, ChartJs.getOptions(type), scope.chartOptions);
-    }
-
-    function bindEvents (cvs, scope) {
-      cvs.onclick = scope.chartClick ? getEventHandler(scope, 'chartClick', false) : angular.noop;
-      cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop;
-    }
-
-    function updateChart (values, scope) {
-      if (Array.isArray(scope.chartData[0])) {
-        scope.chart.data.datasets.forEach(function (dataset, i) {
-          dataset.data = values[i];
-        });
-      } else {
-        scope.chart.data.datasets[0].data = values;
-      }
-
-      scope.chart.update();
-      scope.$emit('chart-update', scope.chart);
-    }
-
-    function isEmpty (value) {
-      return ! value ||
-        (Array.isArray(value) && ! value.length) ||
-        (typeof value === 'object' && ! Object.keys(value).length);
-    }
-
-    function canDisplay (type, scope, elem, options) {
-      // TODO: check parent?
-      if (options.responsive && elem[0].clientHeight === 0) {
-        $timeout(function () {
-          createChart(type, scope, elem);
-        }, 50, false);
-        return false;
-      }
-      return true;
-    }
-
-    function destroyChart(scope) {
-      if(! scope.chart) return;
-      scope.chart.destroy();
-      scope.$emit('chart-destroy', scope.chart);
-    }
-  }
-}));
diff --git a/www/lib/ionic/js/angular/angular-file-saver.bundle.js b/www/lib/ionic/js/angular/angular-file-saver.bundle.js
deleted file mode 100644
index f0ecd84d3e770b73a12b98b5e5d16ddeb9003d92..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-file-saver.bundle.js
+++ /dev/null
@@ -1,602 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory();
-	else if(typeof define === 'function' && define.amd)
-		define([], factory);
-	else {
-		var a = factory();
-		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
-	}
-})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-
-
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-	/*
-	*
-	* A AngularJS module that implements the HTML5 W3C saveAs() in browsers that
-	* do not natively support it
-	*
-	* (c) 2015 Philipp Alferov
-	* License: MIT
-	*
-	*/
-
-	module.exports = 'ngFileSaver';
-
-	angular.module('ngFileSaver', [])
-	  .factory('FileSaver', ['Blob', 'SaveAs', 'FileSaverUtils', __webpack_require__(1)])
-	  .factory('FileSaverUtils', [__webpack_require__(2)])
-	  .factory('Blob', ['$window', __webpack_require__(3)])
-	  .factory('SaveAs', [__webpack_require__(5)]);
-
-
-/***/ },
-/* 1 */
-/***/ function(module, exports) {
-
-	'use strict';
-
-	module.exports = function FileSaver(Blob, SaveAs, FileSaverUtils) {
-
-	  function save(blob, filename, disableAutoBOM) {
-	    try {
-	      SaveAs(blob, filename, disableAutoBOM);
-	    } catch(err) {
-	      FileSaverUtils.handleErrors(err.message);
-	    }
-	  }
-
-	  return {
-
-	    /**
-	    * saveAs
-	    * Immediately starts saving a file, returns undefined.
-	    *
-	    * @name saveAs
-	    * @function
-	    * @param {Blob} data A Blob instance
-	    * @param {Object} filename Custom filename (extension is optional)
-	    * @param {Boolean} disableAutoBOM Disable automatically provided Unicode
-	    * text encoding hints
-	    *
-	    * @return {Undefined}
-	    */
-
-	    saveAs: function(data, filename, disableAutoBOM) {
-
-	      if (!FileSaverUtils.isBlobInstance(data)) {
-	        FileSaverUtils.handleErrors('Data argument should be a blob instance');
-	      }
-
-	      if (!FileSaverUtils.isString(filename)) {
-	        FileSaverUtils.handleErrors('Filename argument should be a string');
-	      }
-
-	      return save(data, filename, disableAutoBOM);
-	    }
-	  };
-	};
-
-
-/***/ },
-/* 2 */
-/***/ function(module, exports) {
-
-	'use strict';
-
-	module.exports = function FileSaverUtils() {
-	  return {
-	    handleErrors: function(msg) {
-	      throw new Error(msg);
-	    },
-	    isString: function(obj) {
-	      return typeof obj === 'string' || obj instanceof String;
-	    },
-	    isUndefined: function(obj) {
-	      return typeof obj === 'undefined';
-	    },
-	    isBlobInstance: function(obj) {
-	      return obj instanceof Blob;
-	    }
-	  };
-	};
-
-
-/***/ },
-/* 3 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	__webpack_require__(4);
-
-	module.exports = function Blob($window) {
-	  return $window.Blob;
-	};
-
-
-/***/ },
-/* 4 */
-/***/ function(module, exports) {
-
-	/* Blob.js
-	 * A Blob implementation.
-	 * 2014-07-24
-	 *
-	 * By Eli Grey, http://eligrey.com
-	 * By Devin Samarin, https://github.com/dsamarin
-	 * License: MIT
-	 *   See https://github.com/eligrey/Blob.js/blob/master/LICENSE.md
-	 */
-
-	/*global self, unescape */
-	/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
-	  plusplus: true */
-
-	/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
-
-	(function (view) {
-		"use strict";
-
-		view.URL = view.URL || view.webkitURL;
-
-		if (view.Blob && view.URL) {
-			try {
-				new Blob;
-				return;
-			} catch (e) {}
-		}
-
-		// Internally we use a BlobBuilder implementation to base Blob off of
-		// in order to support older browsers that only have BlobBuilder
-		var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) {
-			var
-				  get_class = function(object) {
-					return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
-				}
-				, FakeBlobBuilder = function BlobBuilder() {
-					this.data = [];
-				}
-				, FakeBlob = function Blob(data, type, encoding) {
-					this.data = data;
-					this.size = data.length;
-					this.type = type;
-					this.encoding = encoding;
-				}
-				, FBB_proto = FakeBlobBuilder.prototype
-				, FB_proto = FakeBlob.prototype
-				, FileReaderSync = view.FileReaderSync
-				, FileException = function(type) {
-					this.code = this[this.name = type];
-				}
-				, file_ex_codes = (
-					  "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
-					+ "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
-				).split(" ")
-				, file_ex_code = file_ex_codes.length
-				, real_URL = view.URL || view.webkitURL || view
-				, real_create_object_URL = real_URL.createObjectURL
-				, real_revoke_object_URL = real_URL.revokeObjectURL
-				, URL = real_URL
-				, btoa = view.btoa
-				, atob = view.atob
-
-				, ArrayBuffer = view.ArrayBuffer
-				, Uint8Array = view.Uint8Array
-
-				, origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/
-			;
-			FakeBlob.fake = FB_proto.fake = true;
-			while (file_ex_code--) {
-				FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
-			}
-			// Polyfill URL
-			if (!real_URL.createObjectURL) {
-				URL = view.URL = function(uri) {
-					var
-						  uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
-						, uri_origin
-					;
-					uri_info.href = uri;
-					if (!("origin" in uri_info)) {
-						if (uri_info.protocol.toLowerCase() === "data:") {
-							uri_info.origin = null;
-						} else {
-							uri_origin = uri.match(origin);
-							uri_info.origin = uri_origin && uri_origin[1];
-						}
-					}
-					return uri_info;
-				};
-			}
-			URL.createObjectURL = function(blob) {
-				var
-					  type = blob.type
-					, data_URI_header
-				;
-				if (type === null) {
-					type = "application/octet-stream";
-				}
-				if (blob instanceof FakeBlob) {
-					data_URI_header = "data:" + type;
-					if (blob.encoding === "base64") {
-						return data_URI_header + ";base64," + blob.data;
-					} else if (blob.encoding === "URI") {
-						return data_URI_header + "," + decodeURIComponent(blob.data);
-					} if (btoa) {
-						return data_URI_header + ";base64," + btoa(blob.data);
-					} else {
-						return data_URI_header + "," + encodeURIComponent(blob.data);
-					}
-				} else if (real_create_object_URL) {
-					return real_create_object_URL.call(real_URL, blob);
-				}
-			};
-			URL.revokeObjectURL = function(object_URL) {
-				if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
-					real_revoke_object_URL.call(real_URL, object_URL);
-				}
-			};
-			FBB_proto.append = function(data/*, endings*/) {
-				var bb = this.data;
-				// decode data to a binary string
-				if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
-					var
-						  str = ""
-						, buf = new Uint8Array(data)
-						, i = 0
-						, buf_len = buf.length
-					;
-					for (; i < buf_len; i++) {
-						str += String.fromCharCode(buf[i]);
-					}
-					bb.push(str);
-				} else if (get_class(data) === "Blob" || get_class(data) === "File") {
-					if (FileReaderSync) {
-						var fr = new FileReaderSync;
-						bb.push(fr.readAsBinaryString(data));
-					} else {
-						// async FileReader won't work as BlobBuilder is sync
-						throw new FileException("NOT_READABLE_ERR");
-					}
-				} else if (data instanceof FakeBlob) {
-					if (data.encoding === "base64" && atob) {
-						bb.push(atob(data.data));
-					} else if (data.encoding === "URI") {
-						bb.push(decodeURIComponent(data.data));
-					} else if (data.encoding === "raw") {
-						bb.push(data.data);
-					}
-				} else {
-					if (typeof data !== "string") {
-						data += ""; // convert unsupported types to strings
-					}
-					// decode UTF-16 to binary string
-					bb.push(unescape(encodeURIComponent(data)));
-				}
-			};
-			FBB_proto.getBlob = function(type) {
-				if (!arguments.length) {
-					type = null;
-				}
-				return new FakeBlob(this.data.join(""), type, "raw");
-			};
-			FBB_proto.toString = function() {
-				return "[object BlobBuilder]";
-			};
-			FB_proto.slice = function(start, end, type) {
-				var args = arguments.length;
-				if (args < 3) {
-					type = null;
-				}
-				return new FakeBlob(
-					  this.data.slice(start, args > 1 ? end : this.data.length)
-					, type
-					, this.encoding
-				);
-			};
-			FB_proto.toString = function() {
-				return "[object Blob]";
-			};
-			FB_proto.close = function() {
-				this.size = 0;
-				delete this.data;
-			};
-			return FakeBlobBuilder;
-		}(view));
-
-		view.Blob = function(blobParts, options) {
-			var type = options ? (options.type || "") : "";
-			var builder = new BlobBuilder();
-			if (blobParts) {
-				for (var i = 0, len = blobParts.length; i < len; i++) {
-					if (Uint8Array && blobParts[i] instanceof Uint8Array) {
-						builder.append(blobParts[i].buffer);
-					}
-					else {
-						builder.append(blobParts[i]);
-					}
-				}
-			}
-			var blob = builder.getBlob(type);
-			if (!blob.slice && blob.webkitSlice) {
-				blob.slice = blob.webkitSlice;
-			}
-			return blob;
-		};
-
-		var getPrototypeOf = Object.getPrototypeOf || function(object) {
-			return object.__proto__;
-		};
-		view.Blob.prototype = getPrototypeOf(new view.Blob());
-	}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this));
-
-
-/***/ },
-/* 5 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-
-	module.exports = function SaveAs() {
-	  return __webpack_require__(6).saveAs || function() {};
-	};
-
-
-/***/ },
-/* 6 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js
-	 * A saveAs() FileSaver implementation.
-	 * 1.3.2
-	 * 2016-06-16 18:25:19
-	 *
-	 * By Eli Grey, http://eligrey.com
-	 * License: MIT
-	 *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
-	 */
-
-	/*global self */
-	/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
-
-	/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
-
-	var saveAs = saveAs || (function(view) {
-		"use strict";
-		// IE <10 is explicitly unsupported
-		if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
-			return;
-		}
-		var
-			  doc = view.document
-			  // only get URL when necessary in case Blob.js hasn't overridden it yet
-			, get_URL = function() {
-				return view.URL || view.webkitURL || view;
-			}
-			, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
-			, can_use_save_link = "download" in save_link
-			, click = function(node) {
-				var event = new MouseEvent("click");
-				node.dispatchEvent(event);
-			}
-			, is_safari = /constructor/i.test(view.HTMLElement) || view.safari
-			, is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
-			, throw_outside = function(ex) {
-				(view.setImmediate || view.setTimeout)(function() {
-					throw ex;
-				}, 0);
-			}
-			, force_saveable_type = "application/octet-stream"
-			// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
-			, arbitrary_revoke_timeout = 1000 * 40 // in ms
-			, revoke = function(file) {
-				var revoker = function() {
-					if (typeof file === "string") { // file is an object URL
-						get_URL().revokeObjectURL(file);
-					} else { // file is a File
-						file.remove();
-					}
-				};
-				setTimeout(revoker, arbitrary_revoke_timeout);
-			}
-			, dispatch = function(filesaver, event_types, event) {
-				event_types = [].concat(event_types);
-				var i = event_types.length;
-				while (i--) {
-					var listener = filesaver["on" + event_types[i]];
-					if (typeof listener === "function") {
-						try {
-							listener.call(filesaver, event || filesaver);
-						} catch (ex) {
-							throw_outside(ex);
-						}
-					}
-				}
-			}
-			, auto_bom = function(blob) {
-				// prepend BOM for UTF-8 XML and text/* types (including HTML)
-				// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
-				if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
-					return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
-				}
-				return blob;
-			}
-			, FileSaver = function(blob, name, no_auto_bom) {
-				if (!no_auto_bom) {
-					blob = auto_bom(blob);
-				}
-				// First try a.download, then web filesystem, then object URLs
-				var
-					  filesaver = this
-					, type = blob.type
-					, force = type === force_saveable_type
-					, object_url
-					, dispatch_all = function() {
-						dispatch(filesaver, "writestart progress write writeend".split(" "));
-					}
-					// on any filesys errors revert to saving with object URLs
-					, fs_error = function() {
-						if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
-							// Safari doesn't allow downloading of blob urls
-							var reader = new FileReader();
-							reader.onloadend = function() {
-								var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
-								var popup = view.open(url, '_blank');
-								if(!popup) view.location.href = url;
-								url=undefined; // release reference before dispatching
-								filesaver.readyState = filesaver.DONE;
-								dispatch_all();
-							};
-							reader.readAsDataURL(blob);
-							filesaver.readyState = filesaver.INIT;
-							return;
-						}
-						// don't create more object URLs than needed
-						if (!object_url) {
-							object_url = get_URL().createObjectURL(blob);
-						}
-						if (force) {
-							view.location.href = object_url;
-						} else {
-							var opened = view.open(object_url, "_blank");
-							if (!opened) {
-								// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
-								view.location.href = object_url;
-							}
-						}
-						filesaver.readyState = filesaver.DONE;
-						dispatch_all();
-						revoke(object_url);
-					}
-				;
-				filesaver.readyState = filesaver.INIT;
-
-				if (can_use_save_link) {
-					object_url = get_URL().createObjectURL(blob);
-					setTimeout(function() {
-						save_link.href = object_url;
-						save_link.download = name;
-						click(save_link);
-						dispatch_all();
-						revoke(object_url);
-						filesaver.readyState = filesaver.DONE;
-					});
-					return;
-				}
-
-				fs_error();
-			}
-			, FS_proto = FileSaver.prototype
-			, saveAs = function(blob, name, no_auto_bom) {
-				return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
-			}
-		;
-		// IE 10+ (native saveAs)
-		if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
-			return function(blob, name, no_auto_bom) {
-				name = name || blob.name || "download";
-
-				if (!no_auto_bom) {
-					blob = auto_bom(blob);
-				}
-				return navigator.msSaveOrOpenBlob(blob, name);
-			};
-		}
-
-		FS_proto.abort = function(){};
-		FS_proto.readyState = FS_proto.INIT = 0;
-		FS_proto.WRITING = 1;
-		FS_proto.DONE = 2;
-
-		FS_proto.error =
-		FS_proto.onwritestart =
-		FS_proto.onprogress =
-		FS_proto.onwrite =
-		FS_proto.onabort =
-		FS_proto.onerror =
-		FS_proto.onwriteend =
-			null;
-
-		return saveAs;
-	}(
-		   typeof self !== "undefined" && self
-		|| typeof window !== "undefined" && window
-		|| this.content
-	));
-	// `self` is undefined in Firefox for Android content script context
-	// while `this` is nsIContentFrameMessageManager
-	// with an attribute `content` that corresponds to the window
-
-	if (typeof module !== "undefined" && module.exports) {
-	  module.exports.saveAs = saveAs;
-	} else if (("function" !== "undefined" && __webpack_require__(7) !== null) && (__webpack_require__(8) !== null)) {
-	  !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
-	    return saveAs;
-	  }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-	}
-
-
-/***/ },
-/* 7 */
-/***/ function(module, exports) {
-
-	module.exports = function() { throw new Error("define cannot be used indirect"); };
-
-
-/***/ },
-/* 8 */
-/***/ function(module, exports) {
-
-	/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;
-
-	/* WEBPACK VAR INJECTION */}.call(exports, {}))
-
-/***/ }
-/******/ ])
-});
-;
\ No newline at end of file
diff --git a/www/lib/ionic/js/angular/angular-fullscreen.js b/www/lib/ionic/js/angular/angular-fullscreen.js
deleted file mode 100644
index 855fbbb388d6e249e7dd0582b1579b6ef2536731..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-fullscreen.js
+++ /dev/null
@@ -1,111 +0,0 @@
-(function(window) {
-   var createModule = function(angular) {
-      var module = angular.module('FBAngular', []);
-
-      module.factory('Fullscreen', ['$document', '$rootScope', function ($document,$rootScope) {
-         var document = $document[0];
-
-         var emitter = $rootScope.$new();
-
-         // listen event on document instead of element to avoid firefox limitation
-         // see https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode
-         $document.on('fullscreenchange webkitfullscreenchange mozfullscreenchange MSFullscreenChange', function(){
-            emitter.$emit('FBFullscreen.change', serviceInstance.isEnabled());
-         });
-
-         var serviceInstance = {
-            $on: angular.bind(emitter, emitter.$on),
-            all: function(options) {
-               serviceInstance.enable( $document.length && $document[0].body || document.documentElement, options );
-            },
-            enable: function(element, options) {
-               if(element.requestFullScreen) {
-                  element.requestFullScreen(options);
-               } else if(element.mozRequestFullScreen) {
-                  element.mozRequestFullScreen();
-               } else if(element.webkitRequestFullscreen) {
-                 element.webkitRequestFullscreen();
-               } else if (element.msRequestFullscreen) {
-                  element.msRequestFullscreen();
-               }
-            },
-            cancel: function() {
-               if(document.cancelFullScreen) {
-                  document.cancelFullScreen();
-               } else if(document.mozCancelFullScreen) {
-                  document.mozCancelFullScreen();
-               } else if(document.webkitExitFullscreen) {
-                  document.webkitExitFullscreen();
-               } else if (document.msExitFullscreen) {
-                  document.msExitFullscreen();
-               }
-            },
-            isEnabled: function(){
-               var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
-               return fullscreenElement ? true : false;
-            },
-            toggleAll: function(){
-                serviceInstance.isEnabled() ? serviceInstance.cancel() : serviceInstance.all();
-            },
-            isSupported: function(){
-                var docElm = document.documentElement;
-                var requestFullscreen = docElm.requestFullScreen || docElm.mozRequestFullScreen || docElm.webkitRequestFullscreen || docElm.msRequestFullscreen;
-                return requestFullscreen ? true : false;
-            }
-         };
-
-         return serviceInstance;
-      }]);
-
-      module.directive('fullscreen', ['Fullscreen', function(Fullscreen) {
-         return {
-            link : function ($scope, $element, $attrs) {
-               // Watch for changes on scope if model is provided
-               if ($attrs.fullscreen) {
-                  $scope.$watch($attrs.fullscreen, function(value) {
-                     var isEnabled = Fullscreen.isEnabled();
-                     if (value && !isEnabled) {
-                        Fullscreen.enable($element[0]);
-                        $element.addClass('isInFullScreen');
-                     } else if (!value && isEnabled) {
-                        Fullscreen.cancel();
-                        $element.removeClass('isInFullScreen');
-                     }
-                  });
-
-                  // Listen on the `FBFullscreen.change`
-                  // the event will fire when anything changes the fullscreen mode
-                  var removeFullscreenHandler = Fullscreen.$on('FBFullscreen.change', function(evt, isFullscreenEnabled){
-                     if(!isFullscreenEnabled){
-                        $scope.$evalAsync(function(){
-                           $scope.$eval($attrs.fullscreen + '= false');
-                           $element.removeClass('isInFullScreen');
-                        });
-                     }
-                  });
-
-                  $scope.$on('$destroy', function() {
-                     removeFullscreenHandler();
-                  });
-
-               } else {
-                  if ($attrs.onlyWatchedProperty !== undefined) {
-                     return;
-                  }
-
-                  $element.on('click', function (ev) {
-                     Fullscreen.enable(  $element[0] );
-                  });
-               }
-            }
-         };
-      }]);
-      return module;
-   };
-
-   if (typeof define === "function" && define.amd) {
-      define("FBAngular", ['angular'], function (angular) { return createModule(angular); } );
-   } else {
-      createModule(window.angular);
-   }
-})(window);
diff --git a/www/lib/ionic/js/angular/angular-idle.js b/www/lib/ionic/js/angular/angular-idle.js
deleted file mode 100644
index 203b153d358a6631f9250299d4cb935e69ea2866..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-idle.js
+++ /dev/null
@@ -1,534 +0,0 @@
-/*** Directives and services for responding to idle users in AngularJS
-* @author Mike Grabski <me@mikegrabski.com>
-* @version v1.3.2
-* @link https://github.com/HackedByChinese/ng-idle.git
-* @license MIT
-*/
-(function(window, angular, undefined) {
-'use strict';
-angular.module('ngIdle', ['ngIdle.keepalive', 'ngIdle.idle', 'ngIdle.countdown', 'ngIdle.title', 'ngIdle.localStorage']);
-angular.module('ngIdle.keepalive', [])
-  .provider('Keepalive', function() {
-    var options = {
-      http: null,
-      interval: 10 * 60
-    };
-
-    this.http = function(value) {
-      if (!value) throw new Error('Argument must be a string containing a URL, or an object containing the HTTP request configuration.');
-      if (angular.isString(value)) {
-        value = {
-          url: value,
-          method: 'GET'
-        };
-      }
-
-      value.cache = false;
-
-      options.http = value;
-    };
-
-    var setInterval = this.interval = function(seconds) {
-      seconds = parseInt(seconds);
-
-      if (isNaN(seconds) || seconds <= 0) throw new Error('Interval must be expressed in seconds and be greater than 0.');
-      options.interval = seconds;
-    };
-
-    this.$get = ['$rootScope', '$log', '$interval', '$http',
-      function($rootScope, $log, $interval, $http) {
-
-        var state = {
-          ping: null
-        };
-
-        function handleResponse(response) {
-          $rootScope.$broadcast('KeepaliveResponse', response.data, response.status);
-        }
-
-        function ping() {
-          $rootScope.$broadcast('Keepalive');
-
-          if (angular.isObject(options.http)) {
-            $http(options.http)
-              .then(handleResponse)
-              .catch(handleResponse);
-          }
-        }
-
-        return {
-          _options: function() {
-            return options;
-          },
-          setInterval: setInterval,
-          start: function() {
-            $interval.cancel(state.ping);
-
-            state.ping = $interval(ping, options.interval * 1000);
-            return state.ping;
-          },
-          stop: function() {
-            $interval.cancel(state.ping);
-          },
-          ping: function() {
-            ping();
-          }
-        };
-      }
-    ];
-  });
-
-angular.module('ngIdle.idle', ['ngIdle.keepalive', 'ngIdle.localStorage'])
-  .provider('Idle', function() {
-    var options = {
-      idle: 20 * 60, // in seconds (default is 20min)
-      timeout: 30, // in seconds (default is 30sec)
-      autoResume: 'idle', // lets events automatically resume (unsets idle state/resets warning)
-      interrupt: 'mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove scroll',
-      windowInterrupt: null,
-      keepalive: true
-    };
-
-    /**
-     *  Sets the number of seconds a user can be idle before they are considered timed out.
-     *  @param {Number|Boolean} seconds A positive number representing seconds OR 0 or false to disable this feature.
-     */
-    var setTimeout = this.timeout = function(seconds) {
-      if (seconds === false) options.timeout = 0;
-      else if (angular.isNumber(seconds) && seconds >= 0) options.timeout = seconds;
-      else throw new Error('Timeout must be zero or false to disable the feature, or a positive integer (in seconds) to enable it.');
-    };
-
-    this.interrupt = function(events) {
-      options.interrupt = events;
-    };
-
-    this.windowInterrupt = function(events) {
-      options.windowInterrupt = events;
-    };
-
-    var setIdle = this.idle = function(seconds) {
-      if (seconds <= 0) throw new Error('Idle must be a value in seconds, greater than 0.');
-
-      options.idle = seconds;
-    };
-
-    this.autoResume = function(value) {
-      if (value === true) options.autoResume = 'idle';
-      else if (value === false) options.autoResume = 'off';
-      else options.autoResume = value;
-    };
-
-    this.keepalive = function(enabled) {
-      options.keepalive = enabled === true;
-    };
-
-    this.$get = ['$interval', '$log', '$rootScope', '$document', 'Keepalive', 'IdleLocalStorage', '$window',
-      function($interval, $log, $rootScope, $document, Keepalive, LocalStorage, $window) {
-        var state = {
-          idle: null,
-          timeout: null,
-          idling: false,
-          running: false,
-          countdown: null
-        };
-
-        var id = new Date().getTime();
-
-        function startKeepalive() {
-          if (!options.keepalive) return;
-
-          if (state.running) Keepalive.ping();
-
-          Keepalive.start();
-        }
-
-        function stopKeepalive() {
-          if (!options.keepalive) return;
-
-          Keepalive.stop();
-        }
-
-        function toggleState() {
-          state.idling = !state.idling;
-          var name = state.idling ? 'IdleStart' : 'IdleEnd';
-
-          if (state.idling) {
-            $rootScope.$broadcast(name);
-            stopKeepalive();
-            if (options.timeout) {
-              state.countdown = options.timeout;
-              countdown();
-              state.timeout = $interval(countdown, 1000, options.timeout, false);
-            }
-          } else {
-            startKeepalive();
-            $rootScope.$broadcast(name);
-          }
-
-          $interval.cancel(state.idle);
-        }
-
-        function countdown() {
-
-          // check not called when no longer idling
-          // possible with multiple tabs
-          if(!state.idling){
-            return;
-          }
-
-          // countdown has expired, so signal timeout
-          if (state.countdown <= 0) {
-            timeout();
-            return;
-          }
-
-          // countdown hasn't reached zero, so warn and decrement
-          $rootScope.$broadcast('IdleWarn', state.countdown);
-          state.countdown--;
-        }
-
-        function interrupted(anotherTab) {
-          $rootScope.$broadcast('IdleInterrupt', anotherTab);
-        }
-
-        function timeout() {
-          stopKeepalive();
-          $interval.cancel(state.idle);
-          $interval.cancel(state.timeout);
-
-          state.idling = true;
-          state.running = false;
-          state.countdown = 0;
-
-          $rootScope.$broadcast('IdleTimeout');
-        }
-
-        function changeOption(self, fn, value) {
-          var reset = self.running();
-
-          self.unwatch();
-          fn(value);
-          if (reset) self.watch();
-        }
-
-        function getExpiry() {
-          var obj = LocalStorage.get('expiry');
-
-          return obj && obj.time ? new Date(obj.time) : null;
-        }
-
-        function setExpiry(date) {
-          if (!date) LocalStorage.remove('expiry');
-          else LocalStorage.set('expiry', {id: id, time: date});
-        }
-
-        var svc = {
-          _options: function() {
-            return options;
-          },
-          _getNow: function() {
-            return new Date();
-          },
-          getIdle: function(){
-            return options.idle;
-          },
-          getTimeout: function(){
-            return options.timeout;
-          },
-          setIdle: function(seconds) {
-            changeOption(this, setIdle, seconds);
-          },
-          setTimeout: function(seconds) {
-            changeOption(this, setTimeout, seconds);
-          },
-          isExpired: function() {
-            var expiry = getExpiry();
-            return expiry !== null && expiry <= this._getNow();
-          },
-          running: function() {
-            return state.running;
-          },
-          idling: function() {
-            return state.idling;
-          },
-          watch: function(noExpiryUpdate) {
-            $interval.cancel(state.idle);
-            $interval.cancel(state.timeout);
-
-            // calculate the absolute expiry date, as added insurance against a browser sleeping or paused in the background
-            var timeout = !options.timeout ? 0 : options.timeout;
-            if (!noExpiryUpdate) setExpiry(new Date(new Date().getTime() + ((options.idle + timeout) * 1000)));
-
-
-            if (state.idling) toggleState(); // clears the idle state if currently idling
-            else if (!state.running) startKeepalive(); // if about to run, start keep alive
-
-            state.running = true;
-
-            state.idle = $interval(toggleState, options.idle * 1000, 0, false);
-          },
-          unwatch: function() {
-            $interval.cancel(state.idle);
-            $interval.cancel(state.timeout);
-
-            state.idling = false;
-            state.running = false;
-            setExpiry(null);
-
-            stopKeepalive();
-          },
-          interrupt: function(anotherTab) {
-            if (!state.running) return;
-
-            if (options.timeout && this.isExpired()) {
-              timeout();
-              return;
-            } else {
-              interrupted(anotherTab);
-            }
-
-            // note: you can no longer auto resume once we exceed the expiry; you will reset state by calling watch() manually
-            if (anotherTab || options.autoResume === 'idle' || (options.autoResume === 'notIdle' && !state.idling)) this.watch(anotherTab);
-          }
-        };
-
-        var lastMove = {
-          clientX: null,
-          clientY: null,
-          swap: function(event) {
-            var last = {clientX: this.clientX, clientY: this.clientY};
-            this.clientX = event.clientX;
-            this.clientY = event.clientY;
-            return last;
-          },
-          hasMoved: function(event) {
-            var last = this.swap(event);
-            if (this.clientX === null || event.movementX || event.movementY) return true;
-            else if (last.clientX != event.clientX || last.clientY != event.clientY) return true;
-            else return false;
-          }
-        };
-
-        $document.find('html').on(options.interrupt, function(event) {
-          if (event.type === 'mousemove' && event.originalEvent && event.originalEvent.movementX === 0 && event.originalEvent.movementY === 0) {
-            return; // Fix for Chrome desktop notifications, triggering mousemove event.
-          }
-
-          if (event.type !== 'mousemove' || lastMove.hasMoved(event)) {
-            svc.interrupt();
-          }
-        });
-
-        if(options.windowInterrupt) {
-          var eventList = options.windowInterrupt.split(' ');
-          var fn = function() {
-            svc.interrupt();
-          };
-
-          for(var i=0; i<eventList.length; i++) {
-            if ($window.addEventListener) $window.addEventListener(eventList[i], fn, false);
-            else $window.attachEvent(eventList[i], fn)
-          }
-        }
-
-        var wrap = function(event) {
-          if (event.key === 'ngIdle.expiry' && event.newValue && event.newValue !== event.oldValue) {
-            var val = angular.fromJson(event.newValue);
-            if (val.id === id) return;
-            svc.interrupt(true);
-          }
-        };
-
-        if ($window.addEventListener) $window.addEventListener('storage', wrap, false);
-        else if ($window.attachEvent) $window.attachEvent('onstorage', wrap);
-
-        return svc;
-      }
-    ];
-  });
-
-angular.module('ngIdle.countdown', ['ngIdle.idle'])
-  .directive('idleCountdown', ['Idle', function(Idle) {
-    return {
-      restrict: 'A',
-      scope: {
-        value: '=idleCountdown'
-      },
-      link: function($scope) {
-        // Initialize the scope's value to the configured timeout.
-        $scope.value = Idle.getTimeout();
-
-        $scope.$on('IdleWarn', function(e, countdown) {
-          $scope.$evalAsync(function() {
-            $scope.value = countdown;
-          });
-        });
-
-        $scope.$on('IdleTimeout', function() {
-          $scope.$evalAsync(function() {
-            $scope.value = 0;
-          });
-        });
-      }
-    };
-  }]);
-
-angular.module('ngIdle.title', [])
-  .provider('Title', function() {
-    var options = {
-      enabled: true
-    };
-
-    var setEnabled = this.enabled = function(enabled) {
-      options.enabled = enabled === true;
-    };
-
-    function padLeft(nr, n, str){
-      return new Array(n-String(nr).length+1).join(str||'0')+nr;
-    }
-
-    this.$get = ['$document', '$interpolate', function($document, $interpolate) {
-      var state = {
-        original: null,
-        idle: '{{minutes}}:{{seconds}} until your session times out!',
-        timedout: 'Your session has expired.'
-      };
-
-      return {
-        setEnabled: setEnabled,
-        isEnabled: function() {
-          return options.enabled;
-        },
-        original: function(val) {
-          if (angular.isUndefined(val)) return state.original;
-
-          state.original = val;
-        },
-        store: function(overwrite) {
-          if (overwrite || !state.original) state.original = this.value();
-        },
-        value: function(val) {
-          if (angular.isUndefined(val)) return $document[0].title;
-
-          $document[0].title = val;
-        },
-        idleMessage: function(val) {
-          if (angular.isUndefined(val)) return state.idle;
-
-          state.idle = val;
-        },
-        timedOutMessage: function(val) {
-          if (angular.isUndefined(val)) return state.timedout;
-
-          state.timedout = val;
-        },
-        setAsIdle: function(countdown) {
-          this.store();
-
-          var remaining = { totalSeconds: countdown };
-          remaining.minutes = Math.floor(countdown/60);
-          remaining.seconds = padLeft(countdown - remaining.minutes * 60, 2);
-
-          this.value($interpolate(this.idleMessage())(remaining));
-        },
-        setAsTimedOut: function() {
-          this.store();
-
-          this.value(this.timedOutMessage());
-        },
-        restore: function() {
-          if (this.original()) this.value(this.original());
-        }
-      };
-    }];
-  })
-  .directive('title', ['Title', function(Title) {
-      return {
-        restrict: 'E',
-        link: function($scope, $element, $attr) {
-          if (!Title.isEnabled() || $attr.idleDisabled) return;
-
-          Title.store(true);
-
-          $scope.$on('IdleStart', function() {
-            Title.original($element[0].innerText);
-          });
-
-          $scope.$on('IdleWarn', function(e, countdown) {
-            Title.setAsIdle(countdown);
-          });
-
-          $scope.$on('IdleEnd', function() {
-            Title.restore();
-          });
-
-          $scope.$on('IdleTimeout', function() {
-            Title.setAsTimedOut();
-          });
-        }
-      };
-  }]);
-
-angular.module('ngIdle.localStorage', [])
-  .service('IdleStorageAccessor', ['$window', function($window) {
-    return {
-      get: function() {
-        return $window.localStorage;
-      }
-    }
-  }])
-  .service('IdleLocalStorage', ['IdleStorageAccessor', function(IdleStorageAccessor) {
-    function AlternativeStorage() {
-      var storageMap = {};
-
-      this.setItem = function (key, value) {
-          storageMap[key] = value;
-      };
-
-      this.getItem = function (key) {
-          if(typeof storageMap[key] !== 'undefined' ) {
-              return storageMap[key];
-          }
-          return null;
-      };
-
-      this.removeItem = function (key) {
-          storageMap[key] = undefined;
-      };
-    }
-
-    function getStorage() {
-       try {
-          var s = IdleStorageAccessor.get();
-          s.setItem('ngIdleStorage', '');
-          s.removeItem('ngIdleStorage');
-
-          return s;
-       } catch(err) {
-          return new AlternativeStorage();
-       }
-    }
-
-    // Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem
-    // throw QuotaExceededError. We're going to detect this and just silently drop any calls to setItem
-    // to avoid the entire page breaking, without having to do a check at each usage of Storage.
-    var storage = getStorage();
-
-    return {
-      set: function(key, value) {
-        storage.setItem('ngIdle.'+key, angular.toJson(value));
-      },
-      get: function(key) {
-        return angular.fromJson(storage.getItem('ngIdle.'+key));
-      },
-      remove: function(key) {
-        storage.removeItem('ngIdle.'+key);
-      },
-      _wrapped: function() {
-        return storage;
-      }
-    };
-}]);
-
-})(window, window.angular);
\ No newline at end of file
diff --git a/www/lib/ionic/js/angular/angular-image-crop.js b/www/lib/ionic/js/angular/angular-image-crop.js
deleted file mode 100644
index 960d0889db25c869a65bb9ba033e7544dc5557a8..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-image-crop.js
+++ /dev/null
@@ -1,1344 +0,0 @@
-/**
- * AngularJS Directive - Image Crop v1.1.0
- * Copyright (c) 2014 Andy Shora, andyshora@gmail.com, andyshora.com
- * Licensed under the MPL License [http://www.nihilogic.dk/licenses/mpl-license.txt]
- */
-(function() {
-
-  /*
-   * DEPENDENCY
-   * Javascript BinaryFile
-   * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
-   * Licensed under the MPL License [http://www.nihilogic.dk/licenses/mpl-license.txt]
-   */
-
-  var BinaryFile = function(strData, iDataOffset, iDataLength) {
-      var data = strData;
-      var dataOffset = iDataOffset || 0;
-      var dataLength = 0;
-
-      this.getRawData = function() {
-          return data;
-      }
-
-      if (typeof strData == "string") {
-          dataLength = iDataLength || data.length;
-
-          this.getByteAt = function(iOffset) {
-              return data.charCodeAt(iOffset + dataOffset) & 0xFF;
-          }
-
-          this.getBytesAt = function(iOffset, iLength) {
-              var aBytes = [];
-
-              for (var i = 0; i < iLength; i++) {
-                  aBytes[i] = data.charCodeAt((iOffset + i) + dataOffset) & 0xFF
-              }
-              ;
-
-              return aBytes;
-          }
-      } else if (typeof strData == "unknown") {
-          dataLength = iDataLength || IEBinary_getLength(data);
-
-          this.getByteAt = function(iOffset) {
-              return IEBinary_getByteAt(data, iOffset + dataOffset);
-          }
-
-          this.getBytesAt = function(iOffset, iLength) {
-              return new VBArray(IEBinary_getBytesAt(data, iOffset + dataOffset, iLength)).toArray();
-          }
-      }
-
-      this.getLength = function() {
-          return dataLength;
-      }
-
-      this.getSByteAt = function(iOffset) {
-          var iByte = this.getByteAt(iOffset);
-          if (iByte > 127)
-              return iByte - 256;
-          else
-              return iByte;
-      }
-
-      this.getShortAt = function(iOffset, bBigEndian) {
-          var iShort = bBigEndian ?
-                  (this.getByteAt(iOffset) << 8) + this.getByteAt(iOffset + 1)
-                  : (this.getByteAt(iOffset + 1) << 8) + this.getByteAt(iOffset)
-          if (iShort < 0)
-              iShort += 65536;
-          return iShort;
-      }
-      this.getSShortAt = function(iOffset, bBigEndian) {
-          var iUShort = this.getShortAt(iOffset, bBigEndian);
-          if (iUShort > 32767)
-              return iUShort - 65536;
-          else
-              return iUShort;
-      }
-      this.getLongAt = function(iOffset, bBigEndian) {
-          var iByte1 = this.getByteAt(iOffset),
-                  iByte2 = this.getByteAt(iOffset + 1),
-                  iByte3 = this.getByteAt(iOffset + 2),
-                  iByte4 = this.getByteAt(iOffset + 3);
-
-          var iLong = bBigEndian ?
-                  (((((iByte1 << 8) + iByte2) << 8) + iByte3) << 8) + iByte4
-                  : (((((iByte4 << 8) + iByte3) << 8) + iByte2) << 8) + iByte1;
-          if (iLong < 0)
-              iLong += 4294967296;
-          return iLong;
-      }
-      this.getSLongAt = function(iOffset, bBigEndian) {
-          var iULong = this.getLongAt(iOffset, bBigEndian);
-          if (iULong > 2147483647)
-              return iULong - 4294967296;
-          else
-              return iULong;
-      }
-
-      this.getStringAt = function(iOffset, iLength) {
-          var aStr = [];
-
-          var aBytes = this.getBytesAt(iOffset, iLength);
-          for (var j = 0; j < iLength; j++) {
-              aStr[j] = String.fromCharCode(aBytes[j]);
-          }
-          return aStr.join("");
-      }
-
-      this.getCharAt = function(iOffset) {
-          return String.fromCharCode(this.getByteAt(iOffset));
-      }
-      this.toBase64 = function() {
-          return window.btoa(data);
-      }
-      this.fromBase64 = function(strBase64) {
-          data = window.atob(strBase64);
-      }
-  };
-  /*
-   * DEPENDENCY
-   * Javascript EXIF Reader 0.1.6
-   * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/
-   * Licensed under the MPL License [http://www.nihilogic.dk/licenses/mpl-license.txt]
-   */
-  var EXIF = (function() {
-
-      var debug = false;
-
-      var ExifTags = {
-
-          // version tags
-          0x9000: "ExifVersion", // EXIF version
-          0xA000: "FlashpixVersion", // Flashpix format version
-
-          // colorspace tags
-          0xA001: "ColorSpace", // Color space information tag
-
-          // image configuration
-          0xA002: "PixelXDimension", // Valid width of meaningful image
-          0xA003: "PixelYDimension", // Valid height of meaningful image
-          0x9101: "ComponentsConfiguration", // Information about channels
-          0x9102: "CompressedBitsPerPixel", // Compressed bits per pixel
-
-          // user information
-          0x927C: "MakerNote", // Any desired information written by the manufacturer
-          0x9286: "UserComment", // Comments by user
-
-          // related file
-          0xA004: "RelatedSoundFile", // Name of related sound file
-
-          // date and time
-          0x9003: "DateTimeOriginal", // Date and time when the original image was generated
-          0x9004: "DateTimeDigitized", // Date and time when the image was stored digitally
-          0x9290: "SubsecTime", // Fractions of seconds for DateTime
-          0x9291: "SubsecTimeOriginal", // Fractions of seconds for DateTimeOriginal
-          0x9292: "SubsecTimeDigitized", // Fractions of seconds for DateTimeDigitized
-
-          // picture-taking conditions
-          0x829A: "ExposureTime", // Exposure time (in seconds)
-          0x829D: "FNumber", // F number
-          0x8822: "ExposureProgram", // Exposure program
-          0x8824: "SpectralSensitivity", // Spectral sensitivity
-          0x8827: "ISOSpeedRatings", // ISO speed rating
-          0x8828: "OECF", // Optoelectric conversion factor
-          0x9201: "ShutterSpeedValue", // Shutter speed
-          0x9202: "ApertureValue", // Lens aperture
-          0x9203: "BrightnessValue", // Value of brightness
-          0x9204: "ExposureBias", // Exposure bias
-          0x9205: "MaxApertureValue", // Smallest F number of lens
-          0x9206: "SubjectDistance", // Distance to subject in meters
-          0x9207: "MeteringMode", // Metering mode
-          0x9208: "LightSource", // Kind of light source
-          0x9209: "Flash", // Flash status
-          0x9214: "SubjectArea", // Location and area of main subject
-          0x920A: "FocalLength", // Focal length of the lens in mm
-          0xA20B: "FlashEnergy", // Strobe energy in BCPS
-          0xA20C: "SpatialFrequencyResponse", //
-          0xA20E: "FocalPlaneXResolution", // Number of pixels in width direction per FocalPlaneResolutionUnit
-          0xA20F: "FocalPlaneYResolution", // Number of pixels in height direction per FocalPlaneResolutionUnit
-          0xA210: "FocalPlaneResolutionUnit", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution
-          0xA214: "SubjectLocation", // Location of subject in image
-          0xA215: "ExposureIndex", // Exposure index selected on camera
-          0xA217: "SensingMethod", // Image sensor type
-          0xA300: "FileSource", // Image source (3 == DSC)
-          0xA301: "SceneType", // Scene type (1 == directly photographed)
-          0xA302: "CFAPattern", // Color filter array geometric pattern
-          0xA401: "CustomRendered", // Special processing
-          0xA402: "ExposureMode", // Exposure mode
-          0xA403: "WhiteBalance", // 1 = auto white balance, 2 = manual
-          0xA404: "DigitalZoomRation", // Digital zoom ratio
-          0xA405: "FocalLengthIn35mmFilm", // Equivalent foacl length assuming 35mm film camera (in mm)
-          0xA406: "SceneCaptureType", // Type of scene
-          0xA407: "GainControl", // Degree of overall image gain adjustment
-          0xA408: "Contrast", // Direction of contrast processing applied by camera
-          0xA409: "Saturation", // Direction of saturation processing applied by camera
-          0xA40A: "Sharpness", // Direction of sharpness processing applied by camera
-          0xA40B: "DeviceSettingDescription", //
-          0xA40C: "SubjectDistanceRange", // Distance to subject
-
-          // other tags
-          0xA005: "InteroperabilityIFDPointer",
-          0xA420: "ImageUniqueID"   // Identifier assigned uniquely to each image
-      };
-
-      var TiffTags = {
-          0x0100: "ImageWidth",
-          0x0101: "ImageHeight",
-          0x8769: "ExifIFDPointer",
-          0x8825: "GPSInfoIFDPointer",
-          0xA005: "InteroperabilityIFDPointer",
-          0x0102: "BitsPerSample",
-          0x0103: "Compression",
-          0x0106: "PhotometricInterpretation",
-          0x0112: "Orientation",
-          0x0115: "SamplesPerPixel",
-          0x011C: "PlanarConfiguration",
-          0x0212: "YCbCrSubSampling",
-          0x0213: "YCbCrPositioning",
-          0x011A: "XResolution",
-          0x011B: "YResolution",
-          0x0128: "ResolutionUnit",
-          0x0111: "StripOffsets",
-          0x0116: "RowsPerStrip",
-          0x0117: "StripByteCounts",
-          0x0201: "JPEGInterchangeFormat",
-          0x0202: "JPEGInterchangeFormatLength",
-          0x012D: "TransferFunction",
-          0x013E: "WhitePoint",
-          0x013F: "PrimaryChromaticities",
-          0x0211: "YCbCrCoefficients",
-          0x0214: "ReferenceBlackWhite",
-          0x0132: "DateTime",
-          0x010E: "ImageDescription",
-          0x010F: "Make",
-          0x0110: "Model",
-          0x0131: "Software",
-          0x013B: "Artist",
-          0x8298: "Copyright"
-      };
-
-      var GPSTags = {
-          0x0000: "GPSVersionID",
-          0x0001: "GPSLatitudeRef",
-          0x0002: "GPSLatitude",
-          0x0003: "GPSLongitudeRef",
-          0x0004: "GPSLongitude",
-          0x0005: "GPSAltitudeRef",
-          0x0006: "GPSAltitude",
-          0x0007: "GPSTimeStamp",
-          0x0008: "GPSSatellites",
-          0x0009: "GPSStatus",
-          0x000A: "GPSMeasureMode",
-          0x000B: "GPSDOP",
-          0x000C: "GPSSpeedRef",
-          0x000D: "GPSSpeed",
-          0x000E: "GPSTrackRef",
-          0x000F: "GPSTrack",
-          0x0010: "GPSImgDirectionRef",
-          0x0011: "GPSImgDirection",
-          0x0012: "GPSMapDatum",
-          0x0013: "GPSDestLatitudeRef",
-          0x0014: "GPSDestLatitude",
-          0x0015: "GPSDestLongitudeRef",
-          0x0016: "GPSDestLongitude",
-          0x0017: "GPSDestBearingRef",
-          0x0018: "GPSDestBearing",
-          0x0019: "GPSDestDistanceRef",
-          0x001A: "GPSDestDistance",
-          0x001B: "GPSProcessingMethod",
-          0x001C: "GPSAreaInformation",
-          0x001D: "GPSDateStamp",
-          0x001E: "GPSDifferential"
-      };
-
-      var StringValues = {
-          ExposureProgram: {
-              0: "Not defined",
-              1: "Manual",
-              2: "Normal program",
-              3: "Aperture priority",
-              4: "Shutter priority",
-              5: "Creative program",
-              6: "Action program",
-              7: "Portrait mode",
-              8: "Landscape mode"
-          },
-          MeteringMode: {
-              0: "Unknown",
-              1: "Average",
-              2: "CenterWeightedAverage",
-              3: "Spot",
-              4: "MultiSpot",
-              5: "Pattern",
-              6: "Partial",
-              255: "Other"
-          },
-          LightSource: {
-              0: "Unknown",
-              1: "Daylight",
-              2: "Fluorescent",
-              3: "Tungsten (incandescent light)",
-              4: "Flash",
-              9: "Fine weather",
-              10: "Cloudy weather",
-              11: "Shade",
-              12: "Daylight fluorescent (D 5700 - 7100K)",
-              13: "Day white fluorescent (N 4600 - 5400K)",
-              14: "Cool white fluorescent (W 3900 - 4500K)",
-              15: "White fluorescent (WW 3200 - 3700K)",
-              17: "Standard light A",
-              18: "Standard light B",
-              19: "Standard light C",
-              20: "D55",
-              21: "D65",
-              22: "D75",
-              23: "D50",
-              24: "ISO studio tungsten",
-              255: "Other"
-          },
-          Flash: {
-              0x0000: "Flash did not fire",
-              0x0001: "Flash fired",
-              0x0005: "Strobe return light not detected",
-              0x0007: "Strobe return light detected",
-              0x0009: "Flash fired, compulsory flash mode",
-              0x000D: "Flash fired, compulsory flash mode, return light not detected",
-              0x000F: "Flash fired, compulsory flash mode, return light detected",
-              0x0010: "Flash did not fire, compulsory flash mode",
-              0x0018: "Flash did not fire, auto mode",
-              0x0019: "Flash fired, auto mode",
-              0x001D: "Flash fired, auto mode, return light not detected",
-              0x001F: "Flash fired, auto mode, return light detected",
-              0x0020: "No flash function",
-              0x0041: "Flash fired, red-eye reduction mode",
-              0x0045: "Flash fired, red-eye reduction mode, return light not detected",
-              0x0047: "Flash fired, red-eye reduction mode, return light detected",
-              0x0049: "Flash fired, compulsory flash mode, red-eye reduction mode",
-              0x004D: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",
-              0x004F: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",
-              0x0059: "Flash fired, auto mode, red-eye reduction mode",
-              0x005D: "Flash fired, auto mode, return light not detected, red-eye reduction mode",
-              0x005F: "Flash fired, auto mode, return light detected, red-eye reduction mode"
-          },
-          SensingMethod: {
-              1: "Not defined",
-              2: "One-chip color area sensor",
-              3: "Two-chip color area sensor",
-              4: "Three-chip color area sensor",
-              5: "Color sequential area sensor",
-              7: "Trilinear sensor",
-              8: "Color sequential linear sensor"
-          },
-          SceneCaptureType: {
-              0: "Standard",
-              1: "Landscape",
-              2: "Portrait",
-              3: "Night scene"
-          },
-          SceneType: {
-              1: "Directly photographed"
-          },
-          CustomRendered: {
-              0: "Normal process",
-              1: "Custom process"
-          },
-          WhiteBalance: {
-              0: "Auto white balance",
-              1: "Manual white balance"
-          },
-          GainControl: {
-              0: "None",
-              1: "Low gain up",
-              2: "High gain up",
-              3: "Low gain down",
-              4: "High gain down"
-          },
-          Contrast: {
-              0: "Normal",
-              1: "Soft",
-              2: "Hard"
-          },
-          Saturation: {
-              0: "Normal",
-              1: "Low saturation",
-              2: "High saturation"
-          },
-          Sharpness: {
-              0: "Normal",
-              1: "Soft",
-              2: "Hard"
-          },
-          SubjectDistanceRange: {
-              0: "Unknown",
-              1: "Macro",
-              2: "Close view",
-              3: "Distant view"
-          },
-          FileSource: {
-              3: "DSC"
-          },
-          Components: {
-              0: "",
-              1: "Y",
-              2: "Cb",
-              3: "Cr",
-              4: "R",
-              5: "G",
-              6: "B"
-          }
-      };
-
-      function addEvent(element, event, handler) {
-          if (element.addEventListener) {
-              element.addEventListener(event, handler, false);
-          } else if (element.attachEvent) {
-              element.attachEvent("on" + event, handler);
-          }
-      }
-
-      function imageHasData(img) {
-          return !!(img.exifdata);
-      }
-
-      function getImageData(img, callback) {
-          BinaryAjax(img.src, function(http) {
-              var data = findEXIFinJPEG(http.binaryResponse);
-              img.exifdata = data || {};
-              if (callback) {
-                  callback.call(img)
-              }
-          });
-      }
-
-      function findEXIFinJPEG(file) {
-          if (file.getByteAt(0) != 0xFF || file.getByteAt(1) != 0xD8) {
-              return false; // not a valid jpeg
-          }
-
-          var offset = 2,
-                  length = file.getLength(),
-                  marker;
-
-          while (offset < length) {
-              if (file.getByteAt(offset) != 0xFF) {
-                  if (debug)
-                      console.log("Not a valid marker at offset " + offset + ", found: " + file.getByteAt(offset));
-                  return false; // not a valid marker, something is wrong
-              }
-
-              marker = file.getByteAt(offset + 1);
-
-              // we could implement handling for other markers here,
-              // but we're only looking for 0xFFE1 for EXIF data
-
-              if (marker == 22400) {
-                  if (debug)
-                      console.log("Found 0xFFE1 marker");
-
-                  return readEXIFData(file, offset + 4, file.getShortAt(offset + 2, true) - 2);
-
-                  // offset += 2 + file.getShortAt(offset+2, true);
-
-              } else if (marker == 225) {
-                  // 0xE1 = Application-specific 1 (for EXIF)
-                  if (debug)
-                      console.log("Found 0xFFE1 marker");
-
-                  return readEXIFData(file, offset + 4, file.getShortAt(offset + 2, true) - 2);
-
-              } else {
-                  offset += 2 + file.getShortAt(offset + 2, true);
-              }
-
-          }
-
-      }
-
-
-      function readTags(file, tiffStart, dirStart, strings, bigEnd) {
-          var entries = file.getShortAt(dirStart, bigEnd),
-                  tags = {},
-                  entryOffset, tag,
-                  i;
-
-          for (i = 0; i < entries; i++) {
-              entryOffset = dirStart + i * 12 + 2;
-              tag = strings[file.getShortAt(entryOffset, bigEnd)];
-              if (!tag && debug)
-                  console.log("Unknown tag: " + file.getShortAt(entryOffset, bigEnd));
-              tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);
-          }
-          return tags;
-      }
-
-
-      function readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) {
-          var type = file.getShortAt(entryOffset + 2, bigEnd),
-                  numValues = file.getLongAt(entryOffset + 4, bigEnd),
-                  valueOffset = file.getLongAt(entryOffset + 8, bigEnd) + tiffStart,
-                  offset,
-                  vals, val, n,
-                  numerator, denominator;
-
-          switch (type) {
-              case 1: // byte, 8-bit unsigned int
-              case 7: // undefined, 8-bit byte, value depending on field
-                  if (numValues == 1) {
-                      return file.getByteAt(entryOffset + 8, bigEnd);
-                  } else {
-                      offset = numValues > 4 ? valueOffset : (entryOffset + 8);
-                      vals = [];
-                      for (n = 0; n < numValues; n++) {
-                          vals[n] = file.getByteAt(offset + n);
-                      }
-                      return vals;
-                  }
-
-              case 2: // ascii, 8-bit byte
-                  offset = numValues > 4 ? valueOffset : (entryOffset + 8);
-                  return file.getStringAt(offset, numValues - 1);
-
-              case 3: // short, 16 bit int
-                  if (numValues == 1) {
-                      return file.getShortAt(entryOffset + 8, bigEnd);
-                  } else {
-                      offset = numValues > 2 ? valueOffset : (entryOffset + 8);
-                      vals = [];
-                      for (n = 0; n < numValues; n++) {
-                          vals[n] = file.getShortAt(offset + 2 * n, bigEnd);
-                      }
-                      return vals;
-                  }
-
-              case 4: // long, 32 bit int
-                  if (numValues == 1) {
-                      return file.getLongAt(entryOffset + 8, bigEnd);
-                  } else {
-                      vals = [];
-                      for (var n = 0; n < numValues; n++) {
-                          vals[n] = file.getLongAt(valueOffset + 4 * n, bigEnd);
-                      }
-                      return vals;
-                  }
-
-              case 5: // rational = two long values, first is numerator, second is denominator
-                  if (numValues == 1) {
-                      numerator = file.getLongAt(valueOffset, bigEnd);
-                      denominator = file.getLongAt(valueOffset + 4, bigEnd);
-                      val = new Number(numerator / denominator);
-                      val.numerator = numerator;
-                      val.denominator = denominator;
-                      return val;
-                  } else {
-                      vals = [];
-                      for (n = 0; n < numValues; n++) {
-                          numerator = file.getLongAt(valueOffset + 8 * n, bigEnd);
-                          denominator = file.getLongAt(valueOffset + 4 + 8 * n, bigEnd);
-                          vals[n] = new Number(numerator / denominator);
-                          vals[n].numerator = numerator;
-                          vals[n].denominator = denominator;
-                      }
-                      return vals;
-                  }
-
-              case 9: // slong, 32 bit signed int
-                  if (numValues == 1) {
-                      return file.getSLongAt(entryOffset + 8, bigEnd);
-                  } else {
-                      vals = [];
-                      for (n = 0; n < numValues; n++) {
-                          vals[n] = file.getSLongAt(valueOffset + 4 * n, bigEnd);
-                      }
-                      return vals;
-                  }
-
-              case 10: // signed rational, two slongs, first is numerator, second is denominator
-                  if (numValues == 1) {
-                      return file.getSLongAt(valueOffset, bigEnd) / file.getSLongAt(valueOffset + 4, bigEnd);
-                  } else {
-                      vals = [];
-                      for (n = 0; n < numValues; n++) {
-                          vals[n] = file.getSLongAt(valueOffset + 8 * n, bigEnd) / file.getSLongAt(valueOffset + 4 + 8 * n, bigEnd);
-                      }
-                      return vals;
-                  }
-          }
-      }
-
-
-      function readEXIFData(file, start) {
-          if (file.getStringAt(start, 4) != "Exif") {
-              if (debug)
-                  console.log("Not valid EXIF data! " + file.getStringAt(start, 4));
-              return false;
-          }
-
-          var bigEnd,
-                  tags, tag,
-                  exifData, gpsData,
-                  tiffOffset = start + 6;
-
-          // test for TIFF validity and endianness
-          if (file.getShortAt(tiffOffset) == 0x4949) {
-              bigEnd = false;
-          } else if (file.getShortAt(tiffOffset) == 0x4D4D) {
-              bigEnd = true;
-          } else {
-              if (debug)
-                  console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)");
-              return false;
-          }
-
-          if (file.getShortAt(tiffOffset + 2, bigEnd) != 0x002A) {
-              if (debug)
-                  console.log("Not valid TIFF data! (no 0x002A)");
-              return false;
-          }
-
-          if (file.getLongAt(tiffOffset + 4, bigEnd) != 0x00000008) {
-              if (debug)
-                  console.log("Not valid TIFF data! (First offset not 8)", file.getShortAt(tiffOffset + 4, bigEnd));
-              return false;
-          }
-
-          tags = readTags(file, tiffOffset, tiffOffset + 8, TiffTags, bigEnd);
-
-          if (tags.ExifIFDPointer) {
-              exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd);
-              for (tag in exifData) {
-                  switch (tag) {
-                      case "LightSource" :
-                      case "Flash" :
-                      case "MeteringMode" :
-                      case "ExposureProgram" :
-                      case "SensingMethod" :
-                      case "SceneCaptureType" :
-                      case "SceneType" :
-                      case "CustomRendered" :
-                      case "WhiteBalance" :
-                      case "GainControl" :
-                      case "Contrast" :
-                      case "Saturation" :
-                      case "Sharpness" :
-                      case "SubjectDistanceRange" :
-                      case "FileSource" :
-                          exifData[tag] = StringValues[tag][exifData[tag]];
-                          break;
-
-                      case "ExifVersion" :
-                      case "FlashpixVersion" :
-                          exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], exifData[tag][3]);
-                          break;
-
-                      case "ComponentsConfiguration" :
-                          exifData[tag] =
-                                  StringValues.Components[exifData[tag][0]]
-                                  + StringValues.Components[exifData[tag][1]]
-                                  + StringValues.Components[exifData[tag][2]]
-                                  + StringValues.Components[exifData[tag][3]];
-                          break;
-                  }
-                  tags[tag] = exifData[tag];
-              }
-          }
-
-          if (tags.GPSInfoIFDPointer) {
-              gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd);
-              for (tag in gpsData) {
-                  switch (tag) {
-                      case "GPSVersionID" :
-                          gpsData[tag] = gpsData[tag][0]
-                                  + "." + gpsData[tag][1]
-                                  + "." + gpsData[tag][2]
-                                  + "." + gpsData[tag][3];
-                          break;
-                  }
-                  tags[tag] = gpsData[tag];
-              }
-          }
-
-          return tags;
-      }
-
-
-      function getData(img, callback) {
-          if (!img.complete)
-              return false;
-          if (!imageHasData(img)) {
-              getImageData(img, callback);
-          } else {
-              if (callback) {
-                  callback.call(img);
-              }
-          }
-          return true;
-      }
-
-      function getTag(img, tag) {
-          if (!imageHasData(img))
-              return;
-          return img.exifdata[tag];
-      }
-
-      function getAllTags(img) {
-          if (!imageHasData(img))
-              return {};
-          var a,
-                  data = img.exifdata,
-                  tags = {};
-          for (a in data) {
-              if (data.hasOwnProperty(a)) {
-                  tags[a] = data[a];
-              }
-          }
-          return tags;
-      }
-
-      function pretty(img) {
-          if (!imageHasData(img))
-              return "";
-          var a,
-                  data = img.exifdata,
-                  strPretty = "";
-          for (a in data) {
-              if (data.hasOwnProperty(a)) {
-                  if (typeof data[a] == "object") {
-                      if (data[a] instanceof Number) {
-                          strPretty += a + " : " + data[a] + " [" + data[a].numerator + "/" + data[a].denominator + "]\r\n";
-                      } else {
-                          strPretty += a + " : [" + data[a].length + " values]\r\n";
-                      }
-                  } else {
-                      strPretty += a + " : " + data[a] + "\r\n";
-                  }
-              }
-          }
-          return strPretty;
-      }
-
-      function readFromBinaryFile(file) {
-          return findEXIFinJPEG(file);
-      }
-
-
-      return {
-          readFromBinaryFile: readFromBinaryFile,
-          pretty: pretty,
-          getTag: getTag,
-          getAllTags: getAllTags,
-          getData: getData,
-          Tags: ExifTags,
-          TiffTags: TiffTags,
-          GPSTags: GPSTags,
-          StringValues: StringValues
-      };
-
-  })();
-
-  angular.module('ImageCropper',[])
-    .directive('imageCrop', function() {
-
-      return {
-        template: '<div id="image-crop-{{ rand }}" class="ng-image-crop ng-image-crop--{{ shape }}" ng-style="moduleStyles"><section ng-style="sectionStyles" ng-show="step==1"></section><section ng-style="sectionStyles" ng-show="step==2"><canvas class="cropping-canvas" width="{{ canvasWidth }}" height="{{ canvasHeight }}" ng-mousemove="onCanvasMouseMove($event)" ng-mousedown="onCanvasMouseDown($event)"></canvas><div ng-style="croppingGuideStyles" class="cropping-guide"></div><div class="zoom-handle" ng-mousemove="onHandleMouseMove($event)" ng-mousedown="onHandleMouseDown($event)" ng-mouseup="onHandleMouseUp($event)"><span>&larr; zoom &rarr;</span></div></section><section ng-style="sectionStyles" class="image-crop-section-final" ng-show="step==3"><img class="image-crop-final" ng-src="{{ croppedDataUri }}" /></section></div>',
-        replace: true,
-        restrict: 'AE',
-        scope: {
-		  crop: '=',
-          width: '@',
-          height: '@',
-          shape: '@',
-		  src: '=',
-          resultBlob: '=',
-		  result: '=',
-          step: '=',
-          padding: '@',
-		  maxSize: '@'
-        },
-        link: function (scope, element, attributes) {
-		  
-		  var padding = scope.padding ? Number(scope.padding) : 200;
-		  
-          scope.rand = Math.round(Math.random() * 99999);
-          scope.step = scope.step || 1;
-          scope.shape = scope.shape || 'circle';
-          scope.width = parseInt(scope.width, 10) || 300;
-          scope.height = parseInt(scope.height, 10) || 300;
-
-          scope.canvasWidth = scope.width + padding;
-          scope.canvasHeight = scope.height + padding;
-
-          var $elm = element[0];
-
-          var $canvas = $elm.getElementsByClassName('cropping-canvas')[0];
-          var $handle = $elm.getElementsByClassName('zoom-handle')[0];
-          var $finalImg = $elm.getElementsByClassName('image-crop-final')[0];
-          var $img = new Image();
-          var fileReader = new FileReader();
-
-          var maxLeft = 0, minLeft = 0, maxTop = 0, minTop = 0, imgLoaded = false, imgWidth = 0, imgHeight = 0;
-          var currentX = 0, currentY = 0, dragging = false, startX = 0, startY = 0, zooming = false;
-          var newWidth = imgWidth, newHeight = imgHeight;
-          var targetX = 0, targetY = 0;
-          var zoom = 1;
-          var maxZoomGestureLength = 0;
-          var maxZoomedInLevel = 0, maxZoomedOutLevel = 2;
-          var minXPos = 0, maxXPos = (padding/2), minYPos = 0, maxYPos = (padding/2); // for dragging bounds		  
-		  var maxSize = scope.maxSize ? Number(scope.maxSize) : null; //max size of the image in px
-		  
-          var zoomWeight = .6;
-          var ctx = $canvas.getContext('2d');
-          var exif = null;
-          var files = [];
-
-          // ---------- INLINE STYLES ----------- //
-          scope.moduleStyles = {
-            width: (scope.width + padding) + 'px',
-            height: (scope.height + padding) + 'px'
-          };
-
-          scope.sectionStyles = {
-            width: (scope.width + padding) + 'px',
-            height: (scope.height + padding) + 'px'
-          };
-
-          scope.croppingGuideStyles = {
-            width: scope.width + 'px',
-            height: scope.height + 'px',
-            top: (padding/2)+'px',
-            left: (padding/2)+'px'
-          };
-  		  
-		  function handleSize(base64ImageSrc) {
-		  
-			return new Promise(function(resolve, reject) {
-				
-				if(!maxSize) {
-					return resolve(base64ImageSrc);
-				}
-				
-				var img = new Image();
-				img.src = base64ImageSrc;
-				
-				img.onload = function() {
-				
-					var height = img.height;
-					var width = img.width;
-															
-					//if the size is already ok, just return the image
-					if(height <= maxSize && width <= maxSize) {						
-						return resolve(base64ImageSrc);
-					}			 	
-					
-					var ratio = width/height;
-					
-					if(ratio > 1) {
-						width = maxSize;
-						height = maxSize/ratio;
-					}
-					else {
-						width = maxSize*ratio;
-						height = maxSize;
-					}							
-					
-					width = Math.round(width);
-					height = Math.round(height);			 	
-					
-					var canvas = document.createElement("canvas");
-					canvas.width = width;
-					canvas.height = height;			 	
-					
-					var context = canvas.getContext("2d");
-									
-					context.drawImage(img, 0, 0, img.width,    img.height,      // source
-										   0, 0, canvas.width, canvas.height);  // destination	 
-					
-					context.save();
-								
-					var dataUrl = canvas.toDataURL();
-					
-					resolve(dataUrl);
-
-				};
-					
-			});		  
-				
-		  }
-					
-		  function handleEXIF(base64ImageSrc, exif) {
-		  		
-			return new Promise(function(resolve, reject) {
-								
-				var img = new Image();
-				img.src = base64ImageSrc;
-				
-				img.onload = function() {
-				
-					var canvas = document.createElement("canvas");
-					
-					if(exif.Orientation >= 5) {
-						canvas.width = img.height;
-						canvas.height = img.width;
-					} else {
-						canvas.width = img.width;
-						canvas.height = img.height;
-					}
-					
-					var context = canvas.getContext("2d");
-		
-					// change mobile orientation, if required
-					switch(exif.Orientation){
-						case 1:
-							// nothing
-							break;
-						case 2:
-							// horizontal flip
-							context.translate(img.width, 0);
-							context.scale(-1, 1);
-							break;
-						case 3:
-							// 180 rotate left
-							context.translate(img.width, img.height);
-							context.rotate(Math.PI);
-							break;
-						case 4:
-							// vertical flip
-							context.translate(0, img.height);
-							context.scale(1, -1);
-							break;
-						case 5:
-							// vertical flip + 90 rotate right
-							context.rotate(0.5 * Math.PI);
-							context.scale(1, -1);
-							break;
-						case 6:
-							// 90 rotate right
-							context.rotate(0.5 * Math.PI);
-							context.translate(0, -img.height);
-							break;
-						case 7:
-							// horizontal flip + 90 rotate right
-							context.rotate(0.5 * Math.PI);
-							context.translate(img.width, -img.height);
-							context.scale(-1, 1);
-							break;
-						case 8:
-							// 90 rotate left					 		                   
-							context.rotate(-0.5 * Math.PI);
-							context.translate(-img.width, 0);
-							break;
-						default:
-							break;
-					}
-					
-					context.drawImage(img, 0, 0);	
-					context.save();
-					
-					var dataUrl = canvas.toDataURL();
-					
-					resolve(dataUrl);										
-				
-				};
-				
-			});				
-				
-		  }
-		  
-		  function loadImage(base64ImageSrc) {
-		  
-			//get the EXIF information from the image
-            var byteString = atob(base64ImageSrc.split(',')[1]);
-            var binary = new BinaryFile(byteString, 0, byteString.length);
-            exif = EXIF.readFromBinaryFile(binary);		  
-           
-		    //handle image size
-            handleSize(base64ImageSrc).then(function(base64ImageSrc) {
-			
-				//if the image has EXIF orientation..
-				if (exif && exif.Orientation && exif.Orientation > 1) {			
-					return handleEXIF(base64ImageSrc, exif);
-				} 
-				//otherwise, just return the image without any treatment
-				else {
-					return base64ImageSrc;
-				}
-				
-			}).then(function(base64ImageSrc) {
-			
-				$img.src = base64ImageSrc;
-				
-			}).catch(function(error) {							
-				console.log(error);				
-			});    
-			
-		  };
-		  
-          // ---------- EVENT HANDLERS ---------- //
-          fileReader.onload = function(e) {
-          	
-          	loadImage(this.resultBlob);	
-
-          };	  
-
-          $img.onload = function() {
-		  
-			scope.step = 2;
-			scope.$apply();		  
-			
-            ctx.drawImage($img, 0, 0);
-
-            imgWidth = $img.width;
-            imgHeight = $img.height;
-
-            minLeft = (scope.width + padding) - this.width;
-            minTop = (scope.height + padding) - this.height;
-            newWidth = imgWidth;
-            newHeight = imgHeight;
-            
-			if(imgWidth >= imgHeight) {
-				maxZoomedInLevel = ($canvas.height - padding) / imgHeight;
-			} else {
-				maxZoomedInLevel = ($canvas.width - padding) / imgWidth;
-			}		
-
-            maxZoomGestureLength = to2Dp(Math.sqrt(Math.pow($canvas.width, 2) + Math.pow($canvas.height, 2)));
-
-            updateDragBounds();
-			
-			var initialX = Math.round((minXPos + maxXPos)/2);
-			var initialY = Math.round((minYPos + maxYPos)/2);
-						
-			moveImage(initialX, initialY);
-			
-          };
-		  
-          function reset() {
-            files = [];
-            zoom = 1;
-			currentX = 0; 
-			currentY = 0; 
-			dragging = false; 
-			startX = 0; 
-			startY = 0; 
-			zooming = false;
-            ctx.clearRect(0, 0, $canvas.width, $canvas.height);            
-            $img.src = '';
-          }		  
-
-          // ---------- PRIVATE FUNCTIONS ---------- //
-          function moveImage(x, y) {
-			
-			x = x < minXPos ? minXPos : x;
-			x = x > maxXPos ? maxXPos : x;
-			y = y < minYPos ? minYPos : y;
-			y = y > maxYPos ? maxYPos : y;			
-
-            targetX = x;
-            targetY = y;
-			
-            ctx.clearRect(0, 0, $canvas.width, $canvas.height);
-            ctx.drawImage($img, x, y, newWidth, newHeight);
-			
-			return x == minXPos || x == maxXPos || y == minYPos || y == maxYPos;
-          }
-
-          function to2Dp(val) {
-            return Math.round(val * 1000) / 1000;
-          }
-
-          function updateDragBounds() {
-            // $img.width, $canvas.width, zoom
-
-            minXPos = $canvas.width - ($img.width * zoom) - (padding/2);
-            minYPos = $canvas.height - ($img.height * zoom) - (padding/2);
-
-          }
-
-          function zoomImage(val) {
-
-            if (!val) {
-              return;
-            }
-			
-            var proposedZoomLevel = to2Dp(zoom + val);
-			
-            if ((proposedZoomLevel < maxZoomedInLevel) || (proposedZoomLevel > maxZoomedOutLevel)) {
-              // image wont fill whole canvas
-              // or image is too far zoomed in, it's gonna get pretty pixelated!
-              return;
-            }
-
-            zoom = proposedZoomLevel;
-            // console.log('zoom', zoom);
-
-            updateDragBounds();
-
-            newWidth = $img.width * zoom;
-            newHeight = $img.height * zoom;
-
-            var newXPos = currentX * zoom;
-            var newYPos = currentY * zoom;
-
-            // check if we've exposed the gutter
-            if (newXPos < minXPos) {
-              newXPos = minXPos;
-            } else if (newXPos > maxXPos) {
-              newXPos = maxXPos;
-            }
-
-            if (newYPos < minYPos) {
-              newYPos = minYPos;
-            } else if (newYPos > maxYPos) {
-              newYPos = maxYPos;
-            }
-
-            // check if image is still going to fit the bounds of the box
-            ctx.clearRect(0, 0, $canvas.width, $canvas.height);
-            ctx.drawImage($img, newXPos, newYPos, newWidth, newHeight);
-          }
-
-          function calcZoomLevel(diffX, diffY) {
-
-            var hyp = Math.sqrt( Math.pow(diffX, 2) + Math.pow(diffY, 2) );
-            var zoomGestureRatio = to2Dp(hyp / maxZoomGestureLength);
-            var newZoomDiff = to2Dp((maxZoomedOutLevel - maxZoomedInLevel) * zoomGestureRatio * zoomWeight);
-            return diffX > 0 ? -newZoomDiff : newZoomDiff;
-			
-          }
-          
-		  function dataURItoBlob(dataURI) {
-			    var byteString, 
-			        mimestring;
-			
-			    if(dataURI.split(',')[0].indexOf('base64') !== -1 ) {
-			        byteString = atob(dataURI.split(',')[1]);
-			    } else {
-			        byteString = decodeURI(dataURI.split(',')[1]);
-			    }
-			
-			    mimestring = dataURI.split(',')[0].split(':')[1].split(';')[0];
-			
-			    var content = new Array();
-			    for (var i = 0; i < byteString.length; i++) {
-			        content[i] = byteString.charCodeAt(i);
-			    }
-			
-			    return new Blob([new Uint8Array(content)], {type: mimestring});
-		  }       
-
-          // ---------- SCOPE FUNCTIONS ---------- //
-
-		  scope.$watch('src', function(){
-			if(scope.src) {
-				if(scope.step != 3) {
-					if(typeof(scope.src) == 'Blob') {
-						fileReader.readAsDataURL(scope.src);	
-					} else {
-						loadImage(scope.src);
-					}
-				}		
-			} else {
-				scope.step = 1;
-				reset();
-			}
-		  });	
-
-		  scope.$watch('crop',function(){
-			if(scope.crop) {
-				scope.doCrop();
-				scope.crop = false;
-			}
-		  });	
-		  
-          $finalImg.onload = function() {			
-            var tempCanvas = document.createElement('canvas');
-            tempCanvas.width = this.width - padding;
-            tempCanvas.height = this.height - padding;
-            tempCanvas.style.display = 'none';
-
-            var tempCanvasContext = tempCanvas.getContext('2d');
-            tempCanvasContext.drawImage($finalImg, -(padding/2), -(padding/2));
-
-            $elm.getElementsByClassName('image-crop-section-final')[0].appendChild(tempCanvas);
-			
-			var dataUrl = tempCanvas.toDataURL();
-			
-			scope.result = dataUrl;
-            scope.resultBlob = dataURItoBlob(dataUrl);
-            
-            scope.$apply();
-          };
-
-          scope.doCrop = function() {
-            scope.croppedDataUri = $canvas.toDataURL();
-            scope.step = 3;
-          };
-
-          scope.onCanvasMouseUp = function(e) {
-
-            if (!dragging) {
-              return;
-            }
-
-            e.preventDefault();
-            e.stopPropagation(); // if event was on canvas, stop it propagating up
-
-            startX = 0;
-            startY = 0;
-            dragging = false;
-            currentX = targetX;
-            currentY = targetY;
-
-            removeBodyEventListener('mouseup', scope.onCanvasMouseUp);
-            removeBodyEventListener('touchend', scope.onCanvasMouseUp);
-            removeBodyEventListener('mousemove', scope.onCanvasMouseMove);
-            removeBodyEventListener('touchmove', scope.onCanvasMouseMove);
-          };
-
-          $canvas.addEventListener('touchend', scope.onCanvasMouseUp, false);
-
-          scope.onCanvasMouseDown = function(e) {
-            startX = e.type === 'touchstart' ? e.changedTouches[0].clientX : e.clientX;
-            startY = e.type === 'touchstart' ? e.changedTouches[0].clientY : e.clientY;
-            zooming = false;
-            dragging = true;
-
-            addBodyEventListener('mouseup', scope.onCanvasMouseUp);
-            addBodyEventListener('mousemove', scope.onCanvasMouseMove);
-          };
-
-          $canvas.addEventListener('touchstart', scope.onCanvasMouseDown, false);
-
-          function addBodyEventListener(eventName, func) {
-            document.documentElement.addEventListener(eventName, func, false);
-          }
-
-          function removeBodyEventListener(eventName, func) {
-            document.documentElement.removeEventListener(eventName, func);
-          }
-
-          scope.onHandleMouseDown = function(e) {
-
-            e.preventDefault();
-            e.stopPropagation(); // if event was on handle, stop it propagating up
-
-            startX = lastHandleX = (e.type === 'touchstart') ? e.changedTouches[0].clientX : e.clientX;
-            startY = lastHandleY = (e.type === 'touchstart') ? e.changedTouches[0].clientY : e.clientY;
-            dragging = false;
-            zooming = true;
-
-            addBodyEventListener('mouseup', scope.onHandleMouseUp);
-            addBodyEventListener('touchend', scope.onHandleMouseUp);
-            addBodyEventListener('mousemove', scope.onHandleMouseMove);
-            addBodyEventListener('touchmove', scope.onHandleMouseMove);
-			
-          };
-
-          $handle.addEventListener('touchstart', scope.onHandleMouseDown, false);
-
-          scope.onHandleMouseUp = function(e) {
-
-            // this is applied on the whole section so check we're zooming
-            if (!zooming) {
-              return;
-            }
-
-            e.preventDefault();
-            e.stopPropagation(); // if event was on canvas, stop it propagating up
-
-            startX = 0;
-            startY = 0;
-            zooming = false;
-            currentX = targetX;
-            currentY = targetY;
-
-            removeBodyEventListener('mouseup', scope.onHandleMouseUp);
-            removeBodyEventListener('touchend', scope.onHandleMouseUp);
-            removeBodyEventListener('mousemove', scope.onHandleMouseMove);
-            removeBodyEventListener('touchmove', scope.onHandleMouseMove);
-          };
-
-          $handle.addEventListener('touchend', scope.onHandleMouseUp, false);
-
-          scope.onCanvasMouseMove = function(e) {
-
-            e.preventDefault();
-            e.stopPropagation();
-
-            if (!dragging) {
-              return;
-            }
-
-            var diffX = startX - ((e.type === 'touchmove') ? e.changedTouches[0].clientX : e.clientX); // how far mouse has moved in current drag
-            var diffY = startY - ((e.type === 'touchmove') ? e.changedTouches[0].clientY : e.clientY); // how far mouse has moved in current drag
-            /*targetX = currentX - diffX; // desired new X position
-            targetY = currentY - diffY; // desired new X position*/
-
-            moveImage(currentX - diffX, currentY - diffY);
-
-          };
-
-          $canvas.addEventListener('touchmove', scope.onCanvasMouseMove, false);
-
-          var lastHandleX = null, lastHandleY = null;
-
-          scope.onHandleMouseMove = function(e) {
-
-            e.stopPropagation();
-            e.preventDefault();
-
-            // this is applied on the whole section so check we're zooming
-            if (!zooming) {
-              return false;
-            }
-
-            var diffX = lastHandleX - ((e.type === 'touchmove') ? e.changedTouches[0].clientX : e.clientX); // how far mouse has moved in current drag
-            var diffY = lastHandleY - ((e.type === 'touchmove') ? e.changedTouches[0].clientY : e.clientY); // how far mouse has moved in current drag
-
-            lastHandleX = (e.type === 'touchmove') ? e.changedTouches[0].clientX : e.clientX;
-            lastHandleY = (e.type === 'touchmove') ? e.changedTouches[0].clientY : e.clientY;
-
-            var zoomVal = calcZoomLevel(diffX, diffY);			
-            zoomImage(zoomVal);
-
-          };
-
-          $handle.addEventListener('touchmove', scope.onHandleMouseMove, false);	  		 
-		  	  		  
-		  scope.onHandleMouseWheel = function(e){
-			  e.preventDefault();		  
-			  
-			  zoomImage(e.deltaY > 0 ? -0.05 : 0.05);			  
-		  };
-
-		  $canvas.addEventListener('mousewheel', scope.onHandleMouseWheel);
-		  $handle.addEventListener('mousewheel', scope.onHandleMouseWheel);
-
-        }
-      };
-    });
-
-
-})();
\ No newline at end of file
diff --git a/www/lib/ionic/js/angular/angular-sanitize.js b/www/lib/ionic/js/angular/angular-sanitize.js
deleted file mode 100644
index f4e25237be77d9da63090cd018b9ca32fe4714ad..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-sanitize.js
+++ /dev/null
@@ -1,717 +0,0 @@
-/**
- * @license AngularJS v1.5.3
- * (c) 2010-2016 Google, Inc. http://angularjs.org
- * License: MIT
- */
-(function(window, angular, undefined) {'use strict';
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *     Any commits to this file should be reviewed with security in mind.  *
- *   Changes to this file can potentially create security vulnerabilities. *
- *          An approval from 2 Core members with history of modifying      *
- *                         this file is required.                          *
- *                                                                         *
- *  Does the change somehow allow for arbitrary javascript to be executed? *
- *    Or allows for someone to change the prototype of built-in objects?   *
- *     Or gives undesired access to variables likes document or window?    *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-var $sanitizeMinErr = angular.$$minErr('$sanitize');
-
-/**
- * @ngdoc module
- * @name ngSanitize
- * @description
- *
- * # ngSanitize
- *
- * The `ngSanitize` module provides functionality to sanitize HTML.
- *
- *
- * <div doc-module-components="ngSanitize"></div>
- *
- * See {@link ngSanitize.$sanitize `$sanitize`} for usage.
- */
-
-/**
- * @ngdoc service
- * @name $sanitize
- * @kind function
- *
- * @description
- *   Sanitizes an html string by stripping all potentially dangerous tokens.
- *
- *   The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
- *   then serialized back to properly escaped html string. This means that no unsafe input can make
- *   it into the returned string.
- *
- *   The whitelist for URL sanitization of attribute values is configured using the functions
- *   `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider
- *   `$compileProvider`}.
- *
- *   The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.
- *
- * @param {string} html HTML input.
- * @returns {string} Sanitized HTML.
- *
- * @example
-   <example module="sanitizeExample" deps="angular-sanitize.js">
-   <file name="index.html">
-     <script>
-         angular.module('sanitizeExample', ['ngSanitize'])
-           .controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {
-             $scope.snippet =
-               '<p style="color:blue">an html\n' +
-               '<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' +
-               'snippet</p>';
-             $scope.deliberatelyTrustDangerousSnippet = function() {
-               return $sce.trustAsHtml($scope.snippet);
-             };
-           }]);
-     </script>
-     <div ng-controller="ExampleController">
-        Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
-       <table>
-         <tr>
-           <td>Directive</td>
-           <td>How</td>
-           <td>Source</td>
-           <td>Rendered</td>
-         </tr>
-         <tr id="bind-html-with-sanitize">
-           <td>ng-bind-html</td>
-           <td>Automatically uses $sanitize</td>
-           <td><pre>&lt;div ng-bind-html="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
-           <td><div ng-bind-html="snippet"></div></td>
-         </tr>
-         <tr id="bind-html-with-trust">
-           <td>ng-bind-html</td>
-           <td>Bypass $sanitize by explicitly trusting the dangerous value</td>
-           <td>
-           <pre>&lt;div ng-bind-html="deliberatelyTrustDangerousSnippet()"&gt;
-&lt;/div&gt;</pre>
-           </td>
-           <td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td>
-         </tr>
-         <tr id="bind-default">
-           <td>ng-bind</td>
-           <td>Automatically escapes</td>
-           <td><pre>&lt;div ng-bind="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
-           <td><div ng-bind="snippet"></div></td>
-         </tr>
-       </table>
-       </div>
-   </file>
-   <file name="protractor.js" type="protractor">
-     it('should sanitize the html snippet by default', function() {
-       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
-         toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
-     });
-
-     it('should inline raw snippet if bound to a trusted value', function() {
-       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).
-         toBe("<p style=\"color:blue\">an html\n" +
-              "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
-              "snippet</p>");
-     });
-
-     it('should escape snippet without any filter', function() {
-       expect(element(by.css('#bind-default div')).getInnerHtml()).
-         toBe("&lt;p style=\"color:blue\"&gt;an html\n" +
-              "&lt;em onmouseover=\"this.textContent='PWN3D!'\"&gt;click here&lt;/em&gt;\n" +
-              "snippet&lt;/p&gt;");
-     });
-
-     it('should update', function() {
-       element(by.model('snippet')).clear();
-       element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
-       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
-         toBe('new <b>text</b>');
-       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(
-         'new <b onclick="alert(1)">text</b>');
-       expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(
-         "new &lt;b onclick=\"alert(1)\"&gt;text&lt;/b&gt;");
-     });
-   </file>
-   </example>
- */
-
-
-/**
- * @ngdoc provider
- * @name $sanitizeProvider
- *
- * @description
- * Creates and configures {@link $sanitize} instance.
- */
-function $SanitizeProvider() {
-  var svgEnabled = false;
-
-  this.$get = ['$$sanitizeUri', function($$sanitizeUri) {
-    if (svgEnabled) {
-      angular.extend(validElements, svgElements);
-    }
-    return function(html) {
-      var buf = [];
-      htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {
-        return !/^unsafe:/.test($$sanitizeUri(uri, isImage));
-      }));
-      return buf.join('');
-    };
-  }];
-
-
-  /**
-   * @ngdoc method
-   * @name $sanitizeProvider#enableSvg
-   * @kind function
-   *
-   * @description
-   * Enables a subset of svg to be supported by the sanitizer.
-   *
-   * <div class="alert alert-warning">
-   *   <p>By enabling this setting without taking other precautions, you might expose your
-   *   application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned
-   *   outside of the containing element and be rendered over other elements on the page (e.g. a login
-   *   link). Such behavior can then result in phishing incidents.</p>
-   *
-   *   <p>To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg
-   *   tags within the sanitized content:</p>
-   *
-   *   <br>
-   *
-   *   <pre><code>
-   *   .rootOfTheIncludedContent svg {
-   *     overflow: hidden !important;
-   *   }
-   *   </code></pre>
-   * </div>
-   *
-   * @param {boolean=} regexp New regexp to whitelist urls with.
-   * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called
-   *    without an argument or self for chaining otherwise.
-   */
-  this.enableSvg = function(enableSvg) {
-    if (angular.isDefined(enableSvg)) {
-      svgEnabled = enableSvg;
-      return this;
-    } else {
-      return svgEnabled;
-    }
-  };
-}
-
-function sanitizeText(chars) {
-  var buf = [];
-  var writer = htmlSanitizeWriter(buf, angular.noop);
-  writer.chars(chars);
-  return buf.join('');
-}
-
-
-// Regular Expressions for parsing tags and attributes
-var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
-  // Match everything outside of normal chars and " (quote character)
-  NON_ALPHANUMERIC_REGEXP = /([^\#-~ |!])/g;
-
-
-// Good source of info about elements and attributes
-// http://dev.w3.org/html5/spec/Overview.html#semantics
-// http://simon.html5.org/html-elements
-
-// Safe Void Elements - HTML5
-// http://dev.w3.org/html5/spec/Overview.html#void-elements
-var voidElements = toMap("area,br,col,hr,img,wbr");
-
-// Elements that you can, intentionally, leave open (and which close themselves)
-// http://dev.w3.org/html5/spec/Overview.html#optional-tags
-var optionalEndTagBlockElements = toMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
-    optionalEndTagInlineElements = toMap("rp,rt"),
-    optionalEndTagElements = angular.extend({},
-                                            optionalEndTagInlineElements,
-                                            optionalEndTagBlockElements);
-
-// Safe Block Elements - HTML5
-var blockElements = angular.extend({}, optionalEndTagBlockElements, toMap("address,article," +
-        "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," +
-        "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul"));
-
-// Inline Elements - HTML5
-var inlineElements = angular.extend({}, optionalEndTagInlineElements, toMap("a,abbr,acronym,b," +
-        "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," +
-        "samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
-
-// SVG Elements
-// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
-// Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.
-// They can potentially allow for arbitrary javascript to be executed. See #11290
-var svgElements = toMap("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph," +
-        "hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline," +
-        "radialGradient,rect,stop,svg,switch,text,title,tspan");
-
-// Blocked Elements (will be stripped)
-var blockedElements = toMap("script,style");
-
-var validElements = angular.extend({},
-                                   voidElements,
-                                   blockElements,
-                                   inlineElements,
-                                   optionalEndTagElements);
-
-//Attributes that have href and hence need to be sanitized
-var uriAttrs = toMap("background,cite,href,longdesc,src,xlink:href");
-
-var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
-    'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
-    'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
-    'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
-    'valign,value,vspace,width');
-
-// SVG attributes (without "id" and "name" attributes)
-// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
-var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
-    'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +
-    'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +
-    'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +
-    'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +
-    'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +
-    'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +
-    'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +
-    'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +
-    'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +
-    'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +
-    'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +
-    'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +
-    'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +
-    'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);
-
-var validAttrs = angular.extend({},
-                                uriAttrs,
-                                svgAttrs,
-                                htmlAttrs);
-
-function toMap(str, lowercaseKeys) {
-  var obj = {}, items = str.split(','), i;
-  for (i = 0; i < items.length; i++) {
-    obj[lowercaseKeys ? angular.lowercase(items[i]) : items[i]] = true;
-  }
-  return obj;
-}
-
-var inertBodyElement;
-(function(window) {
-  var doc;
-  if (window.document && window.document.implementation) {
-    doc = window.document.implementation.createHTMLDocument("inert");
-  } else {
-    throw $sanitizeMinErr('noinert', "Can't create an inert html document");
-  }
-  var docElement = doc.documentElement || doc.getDocumentElement();
-  var bodyElements = docElement.getElementsByTagName('body');
-
-  // usually there should be only one body element in the document, but IE doesn't have any, so we need to create one
-  if (bodyElements.length === 1) {
-    inertBodyElement = bodyElements[0];
-  } else {
-    var html = doc.createElement('html');
-    inertBodyElement = doc.createElement('body');
-    html.appendChild(inertBodyElement);
-    doc.appendChild(html);
-  }
-})(window);
-
-/**
- * @example
- * htmlParser(htmlString, {
- *     start: function(tag, attrs) {},
- *     end: function(tag) {},
- *     chars: function(text) {},
- *     comment: function(text) {}
- * });
- *
- * @param {string} html string
- * @param {object} handler
- */
-function htmlParser(html, handler) {
-  if (html === null || html === undefined) {
-    html = '';
-  } else if (typeof html !== 'string') {
-    html = '' + html;
-  }
-  inertBodyElement.innerHTML = html;
-
-  //mXSS protection
-  var mXSSAttempts = 5;
-  do {
-    if (mXSSAttempts === 0) {
-      throw $sanitizeMinErr('uinput', "Failed to sanitize html because the input is unstable");
-    }
-    mXSSAttempts--;
-
-    // strip custom-namespaced attributes on IE<=11
-    if (document.documentMode <= 11) {
-      stripCustomNsAttrs(inertBodyElement);
-    }
-    html = inertBodyElement.innerHTML; //trigger mXSS
-    inertBodyElement.innerHTML = html;
-  } while (html !== inertBodyElement.innerHTML);
-
-  var node = inertBodyElement.firstChild;
-  while (node) {
-    switch (node.nodeType) {
-      case 1: // ELEMENT_NODE
-        handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));
-        break;
-      case 3: // TEXT NODE
-        handler.chars(node.textContent);
-        break;
-    }
-
-    var nextNode;
-    if (!(nextNode = node.firstChild)) {
-      if (node.nodeType == 1) {
-        handler.end(node.nodeName.toLowerCase());
-      }
-      nextNode = node.nextSibling;
-      if (!nextNode) {
-        while (nextNode == null) {
-          node = node.parentNode;
-          if (node === inertBodyElement) break;
-          nextNode = node.nextSibling;
-          if (node.nodeType == 1) {
-            handler.end(node.nodeName.toLowerCase());
-          }
-        }
-      }
-    }
-    node = nextNode;
-  }
-
-  while (node = inertBodyElement.firstChild) {
-    inertBodyElement.removeChild(node);
-  }
-}
-
-function attrToMap(attrs) {
-  var map = {};
-  for (var i = 0, ii = attrs.length; i < ii; i++) {
-    var attr = attrs[i];
-    map[attr.name] = attr.value;
-  }
-  return map;
-}
-
-
-/**
- * Escapes all potentially dangerous characters, so that the
- * resulting string can be safely inserted into attribute or
- * element text.
- * @param value
- * @returns {string} escaped text
- */
-function encodeEntities(value) {
-  return value.
-    replace(/&/g, '&amp;').
-    replace(SURROGATE_PAIR_REGEXP, function(value) {
-      var hi = value.charCodeAt(0);
-      var low = value.charCodeAt(1);
-      return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
-    }).
-    replace(NON_ALPHANUMERIC_REGEXP, function(value) {
-      return '&#' + value.charCodeAt(0) + ';';
-    }).
-    replace(/</g, '&lt;').
-    replace(/>/g, '&gt;');
-}
-
-/**
- * create an HTML/XML writer which writes to buffer
- * @param {Array} buf use buf.join('') to get out sanitized html string
- * @returns {object} in the form of {
- *     start: function(tag, attrs) {},
- *     end: function(tag) {},
- *     chars: function(text) {},
- *     comment: function(text) {}
- * }
- */
-function htmlSanitizeWriter(buf, uriValidator) {
-  var ignoreCurrentElement = false;
-  var out = angular.bind(buf, buf.push);
-  return {
-    start: function(tag, attrs) {
-      tag = angular.lowercase(tag);
-      if (!ignoreCurrentElement && blockedElements[tag]) {
-        ignoreCurrentElement = tag;
-      }
-      if (!ignoreCurrentElement && validElements[tag] === true) {
-        out('<');
-        out(tag);
-        angular.forEach(attrs, function(value, key) {
-          var lkey=angular.lowercase(key);
-          var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
-          if (validAttrs[lkey] === true &&
-            (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
-            out(' ');
-            out(key);
-            out('="');
-            out(encodeEntities(value));
-            out('"');
-          }
-        });
-        out('>');
-      }
-    },
-    end: function(tag) {
-      tag = angular.lowercase(tag);
-      if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {
-        out('</');
-        out(tag);
-        out('>');
-      }
-      if (tag == ignoreCurrentElement) {
-        ignoreCurrentElement = false;
-      }
-    },
-    chars: function(chars) {
-      if (!ignoreCurrentElement) {
-        out(encodeEntities(chars));
-      }
-    }
-  };
-}
-
-
-/**
- * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare
- * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want
- * to allow any of these custom attributes. This method strips them all.
- *
- * @param node Root element to process
- */
-function stripCustomNsAttrs(node) {
-  if (node.nodeType === Node.ELEMENT_NODE) {
-    var attrs = node.attributes;
-    for (var i = 0, l = attrs.length; i < l; i++) {
-      var attrNode = attrs[i];
-      var attrName = attrNode.name.toLowerCase();
-      if (attrName === 'xmlns:ns1' || attrName.indexOf('ns1:') === 0) {
-        node.removeAttributeNode(attrNode);
-        i--;
-        l--;
-      }
-    }
-  }
-
-  var nextNode = node.firstChild;
-  if (nextNode) {
-    stripCustomNsAttrs(nextNode);
-  }
-
-  nextNode = node.nextSibling;
-  if (nextNode) {
-    stripCustomNsAttrs(nextNode);
-  }
-}
-
-
-
-// define ngSanitize module and register $sanitize service
-angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
-
-/* global sanitizeText: false */
-
-/**
- * @ngdoc filter
- * @name linky
- * @kind function
- *
- * @description
- * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and
- * plain email address links.
- *
- * Requires the {@link ngSanitize `ngSanitize`} module to be installed.
- *
- * @param {string} text Input text.
- * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in.
- * @param {object|function(url)} [attributes] Add custom attributes to the link element.
- *
- *    Can be one of:
- *
- *    - `object`: A map of attributes
- *    - `function`: Takes the url as a parameter and returns a map of attributes
- *
- *    If the map of attributes contains a value for `target`, it overrides the value of
- *    the target parameter.
- *
- *
- * @returns {string} Html-linkified and {@link $sanitize sanitized} text.
- *
- * @usage
-   <span ng-bind-html="linky_expression | linky"></span>
- *
- * @example
-   <example module="linkyExample" deps="angular-sanitize.js">
-     <file name="index.html">
-       <div ng-controller="ExampleController">
-       Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
-       <table>
-         <tr>
-           <th>Filter</th>
-           <th>Source</th>
-           <th>Rendered</th>
-         </tr>
-         <tr id="linky-filter">
-           <td>linky filter</td>
-           <td>
-             <pre>&lt;div ng-bind-html="snippet | linky"&gt;<br>&lt;/div&gt;</pre>
-           </td>
-           <td>
-             <div ng-bind-html="snippet | linky"></div>
-           </td>
-         </tr>
-         <tr id="linky-target">
-          <td>linky target</td>
-          <td>
-            <pre>&lt;div ng-bind-html="snippetWithSingleURL | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre>
-          </td>
-          <td>
-            <div ng-bind-html="snippetWithSingleURL | linky:'_blank'"></div>
-          </td>
-         </tr>
-         <tr id="linky-custom-attributes">
-          <td>linky custom attributes</td>
-          <td>
-            <pre>&lt;div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}"&gt;<br>&lt;/div&gt;</pre>
-          </td>
-          <td>
-            <div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}"></div>
-          </td>
-         </tr>
-         <tr id="escaped-html">
-           <td>no filter</td>
-           <td><pre>&lt;div ng-bind="snippet"&gt;<br>&lt;/div&gt;</pre></td>
-           <td><div ng-bind="snippet"></div></td>
-         </tr>
-       </table>
-     </file>
-     <file name="script.js">
-       angular.module('linkyExample', ['ngSanitize'])
-         .controller('ExampleController', ['$scope', function($scope) {
-           $scope.snippet =
-             'Pretty text with some links:\n'+
-             'http://angularjs.org/,\n'+
-             'mailto:us@somewhere.org,\n'+
-             'another@somewhere.org,\n'+
-             'and one more: ftp://127.0.0.1/.';
-           $scope.snippetWithSingleURL = 'http://angularjs.org/';
-         }]);
-     </file>
-     <file name="protractor.js" type="protractor">
-       it('should linkify the snippet with urls', function() {
-         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
-             toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +
-                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');
-         expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);
-       });
-
-       it('should not linkify snippet without the linky filter', function() {
-         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).
-             toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +
-                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');
-         expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);
-       });
-
-       it('should update', function() {
-         element(by.model('snippet')).clear();
-         element(by.model('snippet')).sendKeys('new http://link.');
-         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
-             toBe('new http://link.');
-         expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);
-         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())
-             .toBe('new http://link.');
-       });
-
-       it('should work with the target property', function() {
-        expect(element(by.id('linky-target')).
-            element(by.binding("snippetWithSingleURL | linky:'_blank'")).getText()).
-            toBe('http://angularjs.org/');
-        expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
-       });
-
-       it('should optionally add custom attributes', function() {
-        expect(element(by.id('linky-custom-attributes')).
-            element(by.binding("snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}")).getText()).
-            toBe('http://angularjs.org/');
-        expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');
-       });
-     </file>
-   </example>
- */
-angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
-  var LINKY_URL_REGEXP =
-        /((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
-      MAILTO_REGEXP = /^mailto:/i;
-
-  var linkyMinErr = angular.$$minErr('linky');
-  var isString = angular.isString;
-
-  return function(text, target, attributes) {
-    if (text == null || text === '') return text;
-    if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);
-
-    var match;
-    var raw = text;
-    var html = [];
-    var url;
-    var i;
-    while ((match = raw.match(LINKY_URL_REGEXP))) {
-      // We can not end in these as they are sometimes found at the end of the sentence
-      url = match[0];
-      // if we did not match ftp/http/www/mailto then assume mailto
-      if (!match[2] && !match[4]) {
-        url = (match[3] ? 'http://' : 'mailto:') + url;
-      }
-      i = match.index;
-      addText(raw.substr(0, i));
-      addLink(url, match[0].replace(MAILTO_REGEXP, ''));
-      raw = raw.substring(i + match[0].length);
-    }
-    addText(raw);
-    return $sanitize(html.join(''));
-
-    function addText(text) {
-      if (!text) {
-        return;
-      }
-      html.push(sanitizeText(text));
-    }
-
-    function addLink(url, text) {
-      var key;
-      html.push('<a ');
-      if (angular.isFunction(attributes)) {
-        attributes = attributes(url);
-      }
-      if (angular.isObject(attributes)) {
-        for (key in attributes) {
-          html.push(key + '="' + attributes[key] + '" ');
-        }
-      } else {
-        attributes = {};
-      }
-      if (angular.isDefined(target) && !('target' in attributes)) {
-        html.push('target="',
-                  target,
-                  '" ');
-      }
-      html.push('href="',
-                url.replace(/"/g, '&quot;'),
-                '">');
-      addText(text);
-      html.push('</a>');
-    }
-  };
-}]);
-
-
-})(window, window.angular);
diff --git a/www/lib/ionic/js/angular/angular-screenmatch.js b/www/lib/ionic/js/angular/angular-screenmatch.js
deleted file mode 100644
index d637847890d64f0e6fc6d9749ae49179f35df46d..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-screenmatch.js
+++ /dev/null
@@ -1,405 +0,0 @@
-(function() {
-    'use strict';
-
-    angular
-        .module('angular.screenmatch', [])
-        .run(polyfillInjector)
-        .provider('screenmatchConfig', screenmatchConfig)
-        .factory('screenmatch', screenmatch)
-        .directive('asmScreen', asmScreen);
-
-    function screenmatchConfig() {
-        /* jshint validthis:true */
-        this.config = {
-            // Configured via screenmatchConfigProvider
-            //
-            // debounce: integer (ms)
-            // rules: either a string eg 'bootstrap' or an obj for custom set
-            // extrarules: obj that extends ruleset
-            // nobind: bool, set to true to cancel bind on init
-        };
-
-        this.$get = function() {
-            return {
-                config: this.config
-            };
-        };
-    }
-
-    /* @ngInject */
-    function screenmatch($rootScope, $window, $interval, $timeout, screenmatchConfig) {
-
-        var configRules = screenmatchConfig.config.rules;
-        var extraRules = screenmatchConfig.config.extraRules || {};
-        var nobind = screenmatchConfig.config.nobind || false;
-        var debounce = screenmatchConfig.config.debounce || 250;
-        var ruleset = {
-            bootstrap : {
-                lg: '(min-width: 1200px)',
-                md: '(min-width: 992px) and (max-width: 1199px)',
-                sm: '(min-width: 768px) and (max-width: 991px)',
-                xs: '(max-width: 767px)'
-            },
-            matchmedia : {
-                print : 'print',
-                screen : 'screen',
-                phone : '(max-width: 767px)',
-                tablet : '(min-width: 768px) and (max-width: 991px)',
-                desktop : '(min-width: 992px)',
-                portrait : '(orientation: portrait)',
-                landscape : '(orientation: landscape)'
-            }
-        };
-        var rules = {};
-
-        var service = {
-            is: is,
-            bind: bind,
-            once: once,
-            when: when
-        };
-
-        init();
-
-        return service;
-
-        /////////////////
-
-        //Public methods
-
-        //Usage(is): Initializing variables which only need to be set once.
-        //           Also used internally by other methods.
-        //
-        //Method: Checks a list of values for matchmedia truthiness.
-        //
-        //Arg: String containing a comma separated list of values to match
-        //
-        //Returns: True if any of the values is a match, else False.
-        //
-        function is(list) {
-            if (angular.isString(list)) {
-
-                list = list.split(/\s*,\s*/);
-
-                return list.some(function(size, index, arr) {
-                    if ($window.matchMedia(rules[size]).matches) {
-                        return true;
-                    }
-                });
-            }
-        }
-
-        //Usage(bind): Dynamically matching the truthiness of the string passed in.
-        //             For anything that needs to unmatch as well as match.
-        //             Eg, DOM elements
-        //
-        //Method: Passes a list of values to is() to compare truthiness.
-        //        If nobind is false (default), also watches for $window resize.
-        //        On resize, evaluates if the truthiness has changed.
-        //
-        //        Note : if nobind is true, there is no update on resize.
-        //
-        //Args: [1] String (passed to is())
-        //      [2] Scope, the scope to attach the listener to
-        //
-        //Returns: An object with the following properties:
-        //         active : always reflects the truthiness of the match
-        //         unbind() : deregister the watcher
-        function bind(list, scope) {
-            var prev = null;
-            var match = is(list); // set truthiness of match
-
-            var bound = {
-                active : match,
-                unbind: null
-            };
-
-            if (!nobind) {
-
-                scope = scope || $rootScope;
-                var watcher = scope.$on('screenmatch::resize', function () {
-
-                    prev = match;
-                    match = is(list);
-
-                    if (prev !== match) {
-                        bound.active = match; //update truthiness
-                    }
-                });
-
-                bound.unbind = function () {
-                    watcher(); //to deregister watcher
-                };
-            }
-            return bound;
-        }
-
-
-        //Usage(once): Executing a callback that only needs to run once on a successful match.
-        //             Eg, loading data.
-        //             After executing callback it will deregister.
-        //
-        //Method: Passes a list of values to is() to compare truthiness.
-        //        Fires a callback, ONCE, when a match is found.
-        //
-        //        Note: if nobind is true, callback only performs a check on page load.
-        //
-        //Args: [1] String (passed to is())
-        //      [2] Func for callback
-        //      [3] Scope, the scope to attach the listener to (optional)
-        //
-        //Returns: Fires the callback. No other return value.
-        //
-        function once(list, callback, scope) {
-            var fired = false;
-            var prev = null;
-            var match = is(list); // set truthiness of match
-
-            if (angular.isFunction(callback)) {
-
-                if (match) {
-                    fired = true;
-                    $timeout(function() {
-                        callback();
-                    });
-                }
-
-                if (!nobind && !fired) {
-
-                    scope = scope || $rootScope;
-                    var watcher = scope.$on('screenmatch::resize', function () {
-
-                        prev = match;
-                        match = is(list);
-
-                        if (match && (prev !== match)) {
-                            fired = true;
-                            $timeout(function() {
-                                callback();
-                            });
-                        }
-                        if (fired) {
-                            watcher(); //deregister the watcher
-                        }
-
-                    });
-                }
-            }
-        }
-
-        //Usage(when): Executing a callback that needs to run on every successful match.
-        //             Eg, Load something in the Dom, Start Animations.
-        //             Optional second callback to run on every unmatch
-        //             Eg. Stop Animations if you started them...
-        //
-        //Method: Passes a list of values to is() to compare truthiness.
-        //        Fires a callback, when a match is made.
-        //        Fires an optional second callback when a match is unmade.
-        //
-        //        Note: if nobind is true, callback only performs a check on page load.
-        //
-        //Args: [1] String (passed to is())
-        //      [2] Func for true callback
-        //      [3] Func for false callback (optional)
-        //      [4] Scope, the scope to attach the listener to (optional)
-        //
-        //Returns: Fires the callback. No other return value.
-        //
-        function when(list, trueback, falseback, scope) {
-
-            var prev = null;
-            var match = is(list); // set truthiness of match
-
-            if (angular.isUndefined(scope) && !angular.isUndefined(falseback)) {
-                //if there are 3 args, check if third is scope
-                if (!angular.isFunction(falseback)) {
-                    scope = falseback;
-                    falseback = undefined;
-                }
-            }
-            if (angular.isFunction(trueback) && (angular.isFunction(falseback) || angular.isUndefined(falseback))) {
-                //fire one of the callbacks immediately
-                if (match) {
-                    $timeout(function() {
-                        trueback();
-                    });
-                }
-                else {
-                    if (falseback) {
-                        $timeout(function() {
-                            falseback();
-                        });
-                    }
-                }
-
-                if (!nobind) {
-                    scope = scope || $rootScope;
-                    var watcher = scope.$on('screenmatch::resize', function () {
-
-                        prev = match;
-                        match = is(list);
-
-                        if (prev !== match) {
-                            if (match) {
-                                $timeout(function() {
-                                    trueback();
-                                });
-                            }
-                            else {
-                                if (falseback) {
-                                    $timeout(function() {
-                                        falseback();
-                                    });
-                                }
-                            }
-                        }
-                    });
-
-                    var result = { cancel : watcher };
-                    return result;
-                }
-            }
-        }
-
-        //Private methods
-
-        //Selects rules, default is bootstrap
-        //Extends rules if extra rules
-        function setRules() {
-            if (angular.isObject(configRules) && !angular.equals({}, configRules)) {
-                rules = configRules;
-            } else {
-                rules = ruleset[configRules] || ruleset.bootstrap;
-            }
-
-            if (!angular.equals({}, extraRules) && angular.isObject(extraRules)) {
-
-                var cleanRules = {};
-                angular.forEach(extraRules, function (rule, name) {
-                    if (angular.isString(rule)) {
-                        cleanRules[name] = rule;
-                    }
-                });
-
-                angular.extend(rules, cleanRules);
-            }
-        }
-
-        //Exposes the $window resize event via broadcast
-        function bindResize() {
-            var w = angular.element($window);
-            var done = false;
-
-            w.on('resize', function () {
-                if (!done) { //start timer
-                    var resizeTimer = $interval(function () {
-                        $rootScope.$broadcast('screenmatch::resize', true);
-                        if (done) {
-                            $interval.cancel(resizeTimer); //stop timer
-                            done = false; //re-init timer
-                        }
-                    }, debounce);
-                }
-                done = true; //so timer runs once
-            });
-        }
-
-        function init() {
-            setRules();
-            if (!nobind) {
-                bindResize();
-            }
-        }
-    }
-
-    //Usage(directive): The same as ngIf, but pass in a string to match.
-    //                  Eg, <p asm-screen='phone'> I will appear on phones </p>
-
-    /* @ngInject */
-    function asmScreen(ngIfDirective, screenmatch) {
-
-        var ngIf = ngIfDirective[0];
-        var directive = {
-            link: link,
-            terminal: ngIf.terminal,
-            transclude: ngIf.transclude,
-            priority: ngIf.priority,
-            restrict: ngIf.restrict
-        };
-
-        return directive;
-
-        function link(scope, element, attrs) {
-
-            var size = attrs.asmScreen;
-
-            var match = screenmatch.bind(size, scope);
-
-            attrs.ngIf = function() {
-                return match.active;
-            };
-
-            ngIf.link.apply(ngIf, arguments);
-        }
-    }
-
-
-    /* @ngInject */
-    function polyfillInjector($window) {
-
-        var needsPolyfill = angular.isUndefined($window.matchMedia) || !angular.isFunction($window.matchMedia('all').addListener);
-
-        if (needsPolyfill) {
-            $window.matchMedia = (function () {
-            /*! matchMedia() polyfill - Test a CSS media type/query in JS.
-            * Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight.
-            * Dual MIT/BSD license
-            **/
-
-                // For browsers that support matchMedium api such as IE 9 and webkit
-                var styleMedia = ($window.styleMedia || $window.media);
-
-                // For those that don't support matchMedium
-                if (!styleMedia) {
-                    var style = document.createElement('style'),
-                    script = document.getElementsByTagName('script')[0],
-                    info = null;
-
-                    style.type = 'text/css';
-                    style.id = 'matchmediajs-test';
-
-                    script.parentNode.insertBefore(style, script);
-
-                    // 'style.currentStyle' is used by IE <= 8
-                    // '$window.getComputedStyle' for all other browsers
-                    info = ('getComputedStyle' in $window) && $window.getComputedStyle(style, null) || style.currentStyle;
-
-                    styleMedia = {
-                        matchMedium: function(media) {
-                            var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
-
-                            // 'style.styleSheet' is used by IE <= 8
-                            // 'style.textContent' for all other browsers
-                            if (style.styleSheet) {
-                                style.styleSheet.cssText = text;
-                            } else {
-                                style.textContent = text;
-                            }
-
-                            // Test if media query is true or false
-                            return info.width === '1px';
-                        }
-                    };
-                }
-
-                return function(media) {
-                    return {
-                        matches: styleMedia.matchMedium(media || 'all'),
-                        media: media || 'all'
-                    };
-                };
-
-            })();
-        }
-    }
-})();
diff --git a/www/lib/ionic/js/angular/angular-simple-logger.light.js b/www/lib/ionic/js/angular/angular-simple-logger.light.js
deleted file mode 100644
index c1b165c8fb8221cbf2d441d765b7c2be917cec61..0000000000000000000000000000000000000000
--- a/www/lib/ionic/js/angular/angular-simple-logger.light.js
+++ /dev/null
@@ -1,147 +0,0 @@
-/**
- *  angular-simple-logger
- *
- * @version: 0.1.7
- * @author: Nicholas McCready
- * @date: Tue Jan 26 2016 10:15:01 GMT-0500 (EST)
- * @license: MIT
- */
-
-(function (window, angular){
-  angular.module('nemLogging', []);
-
-angular.module('nemLogging').provider('nemDebug', function (){
-  var ourDebug = null;
-  
-  this.$get =  function(){
-    //avail as service
-    return ourDebug;
-  };
-
-  //avail at provider, config time
-  this.debug = ourDebug;
-
-  return this;
-});
-var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
-  slice = [].slice;
-
-angular.module('nemLogging').provider('nemSimpleLogger', [
-  'nemDebugProvider', function(nemDebugProvider) {
-    var LEVELS, Logger, _debugCache, _fns, _isValidLogObject, _maybeExecLevel, _wrapDebug, i, key, len, nemDebug, val;
-    nemDebug = nemDebugProvider.debug;
-    _debugCache = {};
-    _fns = ['debug', 'info', 'warn', 'error', 'log'];
-    LEVELS = {};
-    for (key = i = 0, len = _fns.length; i < len; key = ++i) {
-      val = _fns[key];
-      LEVELS[val] = key;
-    }
-    _maybeExecLevel = function(level, current, fn) {
-      if (level >= current) {
-        return fn();
-      }
-    };
-    _isValidLogObject = function(logObject) {
-      var isValid, j, len1;
-      isValid = false;
-      if (!logObject) {
-        return isValid;
-      }
-      for (j = 0, len1 = _fns.length; j < len1; j++) {
-        val = _fns[j];
-        isValid = (logObject[val] != null) && typeof logObject[val] === 'function';
-        if (!isValid) {
-          break;
-        }
-      }
-      return isValid;
-    };
-
-    /*
-      Overide logeObject.debug with a nemDebug instance
-      see: https://github.com/visionmedia/debug/blob/master/Readme.md
-     */
-    _wrapDebug = function(namespace, logObject) {
-      var debugInstance, j, len1, newLogger;
-      if (_debugCache[namespace] == null) {
-        _debugCache[namespace] = nemDebug(namespace);
-      }
-      debugInstance = _debugCache[namespace];
-      newLogger = {};
-      for (j = 0, len1 = _fns.length; j < len1; j++) {
-        val = _fns[j];
-        newLogger[val] = val === 'debug' ? debugInstance : logObject[val];
-      }
-      return newLogger;
-    };
-    Logger = (function() {
-      function Logger($log1) {
-        var fn1, j, len1, level, logFns;
-        this.$log = $log1;
-        this.spawn = bind(this.spawn, this);
-        if (!this.$log) {
-          throw 'internalLogger undefined';
-        }
-        if (!_isValidLogObject(this.$log)) {
-          throw '@$log is invalid';
-        }
-        this.doLog = true;
-        logFns = {};
-        fn1 = (function(_this) {
-          return function(level) {
-            logFns[level] = function() {
-              var args;
-              args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
-              if (_this.doLog) {
-                return _maybeExecLevel(LEVELS[level], _this.currentLevel, function() {
-                  var ref;
-                  return (ref = _this.$log)[level].apply(ref, args);
-                });
-              }
-            };
-            return _this[level] = logFns[level];
-          };
-        })(this);
-        for (j = 0, len1 = _fns.length; j < len1; j++) {
-          level = _fns[j];
-          fn1(level);
-        }
-        this.LEVELS = LEVELS;
-        this.currentLevel = LEVELS.error;
-      }
-
-      Logger.prototype.spawn = function(newInternalLogger) {
-        if (typeof newInternalLogger === 'string') {
-          if (!_isValidLogObject(this.$log)) {
-            throw '@$log is invalid';
-          }
-          if (!nemDebug) {
-            throw 'nemDebug is undefined this is probably the light version of this library sep debug logggers is not supported!';
-          }
-          return _wrapDebug(newInternalLogger, this.$log);
-        }
-        return new Logger(newInternalLogger || this.$log);
-      };
-
-      return Logger;
-
-    })();
-    this.decorator = [
-      '$log', function($delegate) {
-        var log;
-        log = new Logger($delegate);
-        log.currentLevel = LEVELS.debug;
-        return log;
-      }
-    ];
-    this.$get = [
-      '$log', function($log) {
-        return new Logger($log);
-      }
-    ];
-    return this;
-  }
-]);
-
-})(window, angular);
\ No newline at end of file
diff --git a/www/license/license_g1-fr-FR.md b/www/license/license_g1-fr-FR.md
index dc11902b92e4f1ff49b953cf3105a9a80fc2ebca..808165183d1645ba5d8a8a8868b5ebac41ad5447 100644
--- a/www/license/license_g1-fr-FR.md
+++ b/www/license/license_g1-fr-FR.md
@@ -52,7 +52,7 @@ Chaque membre a un stock de 100 certifications possibles, qu'il ne peut émettre
 
 Valable 2 mois, une certification pour un nouveau membre n'est définitivement adoptée que si le certifié possède au moins 4 autres certifications au bout de ces 2 mois, sinon le processus d'entrée devra être relancé.
 
-Pour devenir un nouveau membre de la TdC Ğ1 il faut donc obtenir 5 certifications et se trouver à une distance <= à 5 pas de 80% des membres référents de la TdC.
+Pour devenir un nouveau membre de la TdC Ğ1 il faut donc obtenir 5 certifications et se trouver à une distance <= 5 pas de 80% des membres référents de la TdC.
 
 Un membre de la TdC Ğ1 est membre référent lorsqu'il a reçu et émis au moins Y[N] certifications où N est le nombre de membres de la TdC et Y[N] = plafond N^(1/5). Exemples :
 
@@ -90,8 +90,8 @@ Et comme variables :
 Logiciels Äž1 et licence Äž1
 --------------------------
 
-Les logiciels Ğ1 permettant aux utilisateurs de gérer leur utilisation de Ğ1 doivent transmettre cette licence avec le logiciel ainsi que l'ensemble des paramètres techniques de la monnaie Ğ1 et de la TdC Ğ1 qui sont inscrits dans le bloc 0 de Ğ1. Un logiciel qui ne remplirait pas ces obigations de la licence n'est pas compatible Ğ1.
+Les logiciels Ğ1 permettant aux utilisateurs de gérer leur utilisation de Ğ1 doivent transmettre cette licence avec le logiciel ainsi que l'ensemble des paramètres techniques de la monnaie Ğ1 et de la TdC Ğ1 qui sont inscrits dans le bloc 0 de Ğ1. Un logiciel qui ne remplirait pas ces obligations de la licence n'est pas compatible Ğ1.
 
 Pour plus de précisions dans les détails techniques il est possible de consulter directement le code de Duniter qui est un logiciel libre ainsi que les données de la blockchain Ğ1 en la récupérant via une instance (ou nœud) Duniter Ğ1.
 
-Plus d'informations sur le site de l'équipe Duniter https://www.duniter.org
+Plus d'informations sur le site de l'équipe Duniter https://www.duniter.org
\ No newline at end of file
diff --git a/www/plugins/es/js/controllers/app-controllers.js b/www/plugins/es/js/controllers/app-controllers.js
index 03429e6dbc9d0cd3798fd0616780e588be1861c1..c324806e7c6cdf300d218a49d42863cc69c43a82 100644
--- a/www/plugins/es/js/controllers/app-controllers.js
+++ b/www/plugins/es/js/controllers/app-controllers.js
@@ -67,14 +67,21 @@ function ESMenuExtendController($scope, $state, $controller, UIUtils, csWallet)
   angular.extend(this, $controller('ESExtensionCtrl', {$scope: $scope}));
 
   $scope.showRegistryLookupView = function() {
-    $state.go(UIUtils.screen.isSmall() ? 'app.registry_lookup': 'app.registry_lookup_lg');
+    $state.go(UIUtils.screen.isSmall() ? 'app.wot_lookup.tab_registry': 'app.registry_lookup_lg');
   };
 
   $scope.showNotificationsPopover = function(event) {
     return UIUtils.popover.show(event, {
         templateUrl :'plugins/es/templates/notification/popover_notification.html',
         scope: $scope,
-        autoremove: false // reuse popover
+        autoremove: false, // reuse popover
+        // Auto-close if open when un-authenticate
+        afterShow: function(popover) {
+          var listener = csWallet.api.data.on.unauth(popover.scope, function() {
+            popover.scope.closePopover();
+            listener();
+          });
+        }
       });
   };
 
@@ -90,7 +97,14 @@ function ESMenuExtendController($scope, $state, $controller, UIUtils, csWallet)
     return UIUtils.popover.show(event, {
       templateUrl :'plugins/es/templates/message/popover_message.html',
       scope: $scope,
-      autoremove: false // reuse popover
+      autoremove: false, // reuse popover
+      // Auto-close if open when un-authenticate
+      afterShow: function(popover) {
+        var listener = csWallet.api.data.on.unauth(popover.scope, function() {
+          popover.scope.closePopover();
+          listener();
+        });
+      }
     });
   };
 
diff --git a/www/plugins/es/js/controllers/document-controllers.js b/www/plugins/es/js/controllers/document-controllers.js
index f6e11c46f6507c65aa873f4c5e4286bd2804075e..3e9f5212675fed9c93f2436c9ee621c0a54d2a5b 100644
--- a/www/plugins/es/js/controllers/document-controllers.js
+++ b/www/plugins/es/js/controllers/document-controllers.js
@@ -147,7 +147,7 @@ function ESDocumentLookupController($scope, $ionicPopover, $location, $timeout,
       });
   };
 
-  $scope.remove = function(index) {
+  $scope.remove = function(index, options) {
     var doc = $scope.search.results[index];
     if (!doc) return;
 
diff --git a/www/plugins/es/js/controllers/message-controllers.js b/www/plugins/es/js/controllers/message-controllers.js
index 811646f748b2c2607f2e3d0e0bb6995e26481299..283e5252b1456bfb511a8306299806065a5933c5 100644
--- a/www/plugins/es/js/controllers/message-controllers.js
+++ b/www/plugins/es/js/controllers/message-controllers.js
@@ -58,6 +58,51 @@ angular.module('cesium.es.message.controllers', ['cesium.es.services'])
         }
       })
 
+      .state('app.user_messages_by_id', {
+        url: "/wallets/:id/message",
+        views: {
+          'menuContent': {
+            templateUrl: "plugins/es/templates/message/lookup_by_id.html"
+          }
+        }
+      })
+
+      .state('app.user_messages_by_id.tab_inbox', {
+        url: "/inbox",
+        views: {
+          'tab_inbox': {
+            controller: 'ESMessageInboxListCtrl',
+            templateUrl: "plugins/es/templates/message/tabs/tab_list.html"
+          }
+        },
+        data: {
+          large: 'app.user_messages_lg_inbox_by_id'
+        }
+      })
+
+      .state('app.user_messages_by_id.tab_outbox', {
+        url: "/outbox",
+        views: {
+          'tab_outbox': {
+            controller: 'ESMessageOutboxListCtrl',
+            templateUrl: "plugins/es/templates/message/tabs/tab_list.html"
+          }
+        },
+        data: {
+          large: 'app.user_messages_lg_outbox_by_id'
+        }
+      })
+
+      .state('app.user_messages_lg_inbox_by_id', {
+        url: "/wallets/:id/message/lg/inbox",
+        views: {
+          'menuContent': {
+            templateUrl: "plugins/es/templates/message/lookup_lg.html",
+            controller: 'ESMessageInboxListCtrl'
+          }
+        }
+      })
+
       .state('app.user_messages_lg_outbox', {
         url: "/user/message/lg/outbox",
         views: {
@@ -72,9 +117,19 @@ angular.module('cesium.es.message.controllers', ['cesium.es.services'])
         }
       })
 
+      .state('app.user_messages_lg_outbox_by_id', {
+        url: "/wallets/:id/message/lg/outbox",
+        views: {
+          'menuContent': {
+            templateUrl: "plugins/es/templates/message/lookup_lg.html",
+            controller: 'ESMessageOutboxListCtrl'
+          }
+        }
+      })
+
       .state('app.user_new_message', {
         cache: false,
-        url: "/user/message/new?pubkey&uid&title&content",
+        url: "/user/message/new?pubkey&uid&title&content&isReply",
         views: {
           'menuContent': {
             templateUrl: "plugins/es/templates/message/compose.html",
@@ -85,7 +140,7 @@ angular.module('cesium.es.message.controllers', ['cesium.es.services'])
 
       .state('app.user_view_message', {
         cache: false,
-        url: "/user/message/view/:type/:id",
+        url: "/user/message/view/:type/:messageId",
         views: {
           'menuContent': {
             templateUrl: "plugins/es/templates/message/view_message.html",
@@ -98,6 +153,17 @@ angular.module('cesium.es.message.controllers', ['cesium.es.services'])
         }
       })
 
+      .state('app.user_view_message_by_id', {
+        cache: false,
+        url: "/wallets/:id/message/view/:type/:messageId",
+        views: {
+          'menuContent': {
+            templateUrl: "plugins/es/templates/message/view_message.html",
+            controller: 'ESMessageViewCtrl'
+          }
+        }
+      })
+
     ;
   })
 
@@ -122,6 +188,8 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
   'ngInject';
 
   var defaultSearchLimit = 40;
+  var wallet;
+  var selectPrevented = false;
 
   $scope.search = {
     loading: true,
@@ -137,33 +205,45 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
 
   $scope.fabButtonNewMessageId = undefined;
 
-  $scope.$on('$ionicView.enter', function(e, state) {
+  $scope.enter = function(s, state) {
+    // First enter
+    if ($scope.search.loading) {
+      wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;
+      if (!wallet) {
+        UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');
+        return $scope.showHome();
+      }
 
-    $scope.loadWallet({minData: true})
-      .then(function() {
-        if (!$scope.entered) {
-          $scope.entered = true;
-          $scope.type = $scope.type || state.stateParams && state.stateParams.type || 'inbox';
-          $scope.load();
-        }
+      $scope.isDefaultWallet = wallet.isDefault();
+      $scope.walletId = wallet.id;
 
-        if ($scope.fabButtonNewMessageId) {
-          $scope.showFab($scope.fabButtonNewMessageId);
-        }
-      })
-      .catch(function(err) {
-        if ('CANCELLED' === err) {
-          $ionicHistory.nextViewOptions({
-            historyRoot: true
-          });
-          $state.go('app.home');
-        }
-    });
-  });
+      wallet.auth({minData: true})
+        .then(function() {
+          if (!$scope.entered) {
+            $scope.entered = true;
+            $scope.type = $scope.type || state.stateParams && state.stateParams.type || 'inbox';
+            $scope.load();
+          }
 
-  $scope.refresh = function(silent) {
-    return $scope.load(undefined, undefined, silent);
+          if ($scope.fabButtonNewMessageId) {
+            $scope.showFab($scope.fabButtonNewMessageId);
+          }
+        })
+        .catch(function(err) {
+          if ('CANCELLED' === err) {
+            $ionicHistory.nextViewOptions({
+              historyRoot: true
+            });
+            $scope.showHome();
+          }
+      });
+    }
+    // Not first entering: refresh the view
+    else {
+      $scope.updateView();
+    }
   };
+  $scope.$on('$ionicView.enter', $scope.enter);
 
   $scope.load = function(from, size, silent) {
 
@@ -174,6 +254,7 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
     options.summary = false;
     options.filter = ($scope.search.type == 'text' && $scope.search.text && $scope.search.text.trim().length > 0) ?
       $scope.search.text : undefined;
+    options.wallet = wallet;
 
     $scope.search.loading = !silent;
     return esMessage.load(options)
@@ -201,15 +282,11 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
       });
   };
 
-  $scope.setType = function(type) {
-    $scope.type = type;
-    $scope.load();
-  };
-
   $scope.updateView = function() {
     if ($scope.motion && $scope.motion.ionListClass && $scope.search.results.length) {
       $scope.motion.show({selector: '.view-messages .list .item'});
     }
+    $scope.$broadcast('$$rebind::rebind'); // notifier binder
   };
 
   $scope.showMore = function() {
@@ -254,9 +331,10 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
     UIUtils.alert.confirm('MESSAGE.CONFIRM.REMOVE')
       .then(function(confirm) {
         if (confirm) {
-          esMessage.remove(message.id, $scope.type)
+          esMessage.remove(message.id, $scope.type, {walletId: $scope.walletId})
             .then(function () {
               $scope.search.results.splice(index,1); // remove from messages array
+              $scope.updateView();
               UIUtils.toast.show('MESSAGE.INFO.MESSAGE_REMOVED');
             })
             .catch(UIUtils.onError('MESSAGE.ERROR.REMOVE_MESSAGE_FAILED'));
@@ -271,9 +349,10 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
     UIUtils.alert.confirm('MESSAGE.CONFIRM.REMOVE_ALL')
       .then(function(confirm) {
         if (confirm) {
-          esMessage.removeAll($scope.type)
+          esMessage.removeAll($scope.type, {walletId: $scope.walletId})
             .then(function () {
               $scope.search.results.splice(0,$scope.search.results.length); // reset array
+              $scope.updateView();
               UIUtils.toast.show('MESSAGE.INFO.All_MESSAGE_REMOVED');
             })
             .catch(UIUtils.onError('MESSAGE.ERROR.REMOVE_All_MESSAGES_FAILED'));
@@ -301,12 +380,45 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
     return $scope.load();
   };
 
+
+  $scope.refresh = function(silent) {
+    selectPrevented = true; // Will disable select() to open the message
+    return $scope.load(undefined, undefined, silent)
+      .then(function() {
+        selectPrevented = false;
+      })
+      .catch(function() {
+        selectPrevented = false;
+      });
+  };
+
+  $scope.select = function(message, event) {
+    if (event.isDefaultPrevented() || $scope.search.loading || selectPrevented) return; // skip
+
+    // Add a timeout, to be sure the refres action was not called before
+    return $timeout(function() {
+      if (selectPrevented || event.isDefaultPrevented()) return; // skip
+      event.preventDefault();
+
+      if ($scope.walletId === 'default') {
+        return $state.go('app.user_view_message', {type: $scope.type, messageId:message.id});
+      }
+      else {
+        return $state.go('app.user_view_message_by_id', {type: $scope.type, messageId:message.id, id: $scope.walletId});
+      }
+    }, 200);
+  };
+
   /* -- Modals -- */
 
   $scope.showNewMessageModal = function(parameters) {
-    return $scope.loadWallet({minData: true})
+    return wallet.login({minData: true})
       .then(function() {
         UIUtils.loading.hide();
+
+        parameters = parameters || {};
+        parameters.wallet = $scope.walletId;
+
         return esModals.showMessageCompose(parameters)
           .then(function(id) {
             if (id) UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT');
@@ -328,7 +440,8 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
           destUid: message.name||message.uid,
           title: prefix + message.title,
           content: content,
-          isReply: true
+          isReply: true,
+          wallet: $scope.walletId
         });
       })
       .then(function(sent) {
@@ -366,22 +479,23 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
     if (index) {
       $scope.search.results.splice(index,1); // remove from messages array
     }
+    $scope.updateView();
   };
   esMessage.api.data.on.delete($scope, $scope.onMessageDelete);
 
   // Watch user sent message
   $scope.onNewOutboxMessage = function(id) {
-    if ($scope.type != 'outbox') return;
+    if ($scope.type !== 'outbox') return;
     // Add message sent to list
-    $scope.loading = true;
+    $scope.search.loading = true;
     return $timeout(function() {
        // Load the message sent
-        return esMessage.get(id, {type: $scope.type, summary: true});
+        return esMessage.get(id, $scope.type, {summary: true, wallet: wallet});
       }, 500 /*waiting ES propagation*/)
       .then(function(msg) {
         $scope.search.results.splice(0,0,msg);
-        $scope.loading = false;
-        $scope.motion.show({selector: '.view-messages .list .item'});
+        $scope.search.loading = false;
+        $scope.updateView();
       })
       .catch(function() {
         $scope.loading = false;
@@ -391,15 +505,15 @@ function ESMessageAbstractListController($scope, $state, $translate, $ionicHisto
 
   // Watch received message
   $scope.onNewInboxMessage = function(notification) {
-    if ($scope.type != 'inbox' || !$scope.entered) return;
+    if ($scope.type !== 'inbox' || !$scope.entered || !wallet.isUserPubkey(notification.issuer)) return;
     // Add message sent to list
-    $scope.loading = true;
+    $scope.search.loading = true;
     // Load the the message
-    return esMessage.get(notification.id, {type: $scope.type, summary: true})
+    return esMessage.get(notification.id, $scope.type, {summary: true, wallet: wallet})
       .then(function(msg) {
         $scope.search.results.splice(0,0,msg);
         $scope.search.loading = false;
-        $scope.motion.show({selector: '.view-messages .list .item'});
+        $scope.updateView();
       })
       .catch(function() {
         $scope.search.loading = false;
@@ -494,7 +608,7 @@ function ESMessageComposeModalController($scope, Modals, UIUtils, csWallet, esHt
   };
   $scope.destUid = null;
   $scope.destPub = null;
-  $scope.isResponse = false;
+  $scope.isReply = false;
   $scope.enableSelectWallet = true;
   $scope.sending = false;
 
@@ -521,7 +635,7 @@ function ESMessageComposeModalController($scope, Modals, UIUtils, csWallet, esHt
       $scope.formData.content = parameters.content;
     }
 
-    $scope.isResponse = parameters.isResponse || false;
+    $scope.isReply = parameters.isReply || false;
 
     if (parameters.wallet) {
       $scope.formData.walletId = parameters.wallet;
@@ -538,6 +652,9 @@ function ESMessageComposeModalController($scope, Modals, UIUtils, csWallet, esHt
     if (!wallet.isDefault()) {
       console.debug("[message] Using {" + wallet.id + "} wallet");
     }
+    else {
+      console.debug("[message] Using default wallet");
+    }
 
     return wallet.login({minData: true, silent: true})
       .then(function(data) {
@@ -654,76 +771,96 @@ function ESMessageComposeModalController($scope, Modals, UIUtils, csWallet, esHt
 
 
 function ESMessageViewController($scope, $state, $timeout, $translate, $ionicHistory, $ionicPopover,
-                                 UIUtils, esModals, esMessage) {
+                                 UIUtils, esModals, esMessage, csWallet) {
   'ngInject';
 
   $scope.formData = {};
   $scope.id = null;
   $scope.loading = true;
 
+  var wallet;
+
   $scope.$on('$ionicView.beforeEnter', function (event, viewData) {
     // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)
     viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;
   });
 
-  $scope.$on('$ionicView.enter', function (e, state) {
-    if (state.stateParams && state.stateParams.id) { // Load by id
-      if ($scope.loading) { // prevent reload if same id
-        $scope.type = state.stateParams.type || 'inbox';
-
-        $scope.load(state.stateParams.id, $scope.type)
-          .then(function(message) {
-            $scope.loading = false;
-            UIUtils.loading.hide();
-            if (!message) return;
-
-            $scope.id = message.id;
-            $scope.formData = message;
-            $scope.canDelete = true;
-            $scope.motion.show({selector: '.view-message .list .item'});
-            // Mark as read
-            if (!message.read) {
-              $timeout(function() {
-                // Message has NOT changed
-                if ($scope.id === message.id) {
-                  esMessage.markAsRead(message, $scope.type)
-                    .then(function() {
-                      console.debug("[message] marked as read");
-                    })
-                    .catch(UIUtils.onError('MESSAGE.ERROR.MARK_AS_READ_FAILED'));
-                }
-              }, 2000); // 2s
-            }
-          });
+  $scope.enter = function(e, state) {
+    // First enter
+    if ($scope.loading) {
+
+      wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;
+      if (!wallet) {
+        UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');
+        return $scope.showHome();
       }
 
-      $scope.showFab('fab-view-message-reply');
-    }
-    else {
-      $state.go('app.user_message');
+      $scope.isDefaultWallet = wallet.isDefault();
+      $scope.walletId = wallet.id;
+
+      var messageId = state.stateParams && state.stateParams.messageId;
+      $scope.type = state.stateParams.type || 'inbox';
+
+      // No message id: redirect
+      if (angular.isUndefined(messageId)) {
+        $scope.goBack();
+        return;
+      }
+
+      wallet.auth({minData: true})
+        .then(function () {
+          return $scope.load(messageId, $scope.type);
+        })
+        .then(function(message) {
+
+          UIUtils.loading.hide();
+          if (!message) return; // SKip
+
+          $scope.updateView(message);
+          $scope.showFab('fab-view-message-reply');
+
+          // Mark as read
+          if (!message.read) {
+            $timeout(function() {
+              // Message has NOT changed
+              if ($scope.id === message.id) {
+                esMessage.markAsRead(message, {type: $scope.type, wallet: wallet})
+                  .then(function() {
+                    console.debug("[message] marked as read");
+                  })
+                  .catch(UIUtils.onError('MESSAGE.ERROR.MARK_AS_READ_FAILED'));
+              }
+            }, 2000); // 2s
+          }
+        });
     }
-  });
+  };
+  $scope.$on('$ionicView.enter', $scope.enter);
 
   $scope.load = function(id, type) {
     type = type || 'inbox';
-
-    return $scope.loadWallet({minData: true})
-      .then(function() {
-        return esMessage.get(id, {type: type});
-      })
+    return esMessage.get(id, type, {wallet: wallet})
       .catch(UIUtils.onError('MESSAGE.ERROR.LOAD_MESSAGE_FAILED'))
       .then(function(message) {
         if (!message.valid) {
           return UIUtils.alert.error(!$scope.isUserPubkey(message.recipient) ? 'MESSAGE.ERROR.USER_NOT_RECIPIENT' : 'MESSAGE.ERROR.NOT_AUTHENTICATED_MESSAGE',
             'MESSAGE.ERROR.MESSAGE_NOT_READABLE')
             .then(function () {
-              $state.go('app.user_message', {type: type});
+              $scope.goBack(true/*clear cache*/);
             });
         }
         return message;
       });
   };
 
+  $scope.updateView = function(message) {
+    $scope.loading = false;
+    $scope.id = message.id;
+    $scope.formData = message;
+    $scope.canDelete = true;
+    $scope.motion.show({selector: '.view-message .list .item'});
+  };
+
   $scope.delete = function() {
     if ($scope.actionsPopover) {
       $scope.actionsPopover.hide();
@@ -732,14 +869,9 @@ function ESMessageViewController($scope, $state, $timeout, $translate, $ionicHis
     UIUtils.alert.confirm('MESSAGE.CONFIRM.REMOVE')
       .then(function(confirm) {
         if (confirm) {
-          return esMessage.remove($scope.id, $scope.type)
+          return esMessage.remove($scope.id, $scope.type, {wallet: wallet})
             .then(function () {
-              $ionicHistory.nextViewOptions({
-                historyRoot: true
-              });
-              $state.go($scope.type == 'inbox' ? 'app.user_message.tab_inbox' : 'app.user_message.tab_outbox',
-                {type: $scope.type}
-              );
+              $scope.goBack(true/*clear page cache*/);
               UIUtils.toast.show('MESSAGE.INFO.MESSAGE_REMOVED');
             })
             .catch(UIUtils.onError('MESSAGE.ERROR.REMOVE_MESSAGE_FAILED'));
@@ -747,6 +879,23 @@ function ESMessageViewController($scope, $state, $timeout, $translate, $ionicHis
       });
   };
 
+  $scope.goBack = function(clearPageCache) {
+    if (clearPageCache) {
+      $ionicHistory.clearCache($ionicHistory.currentView().stateId); // clear current view
+    }
+    $ionicHistory.nextViewOptions({historyRoot: true});
+    if ($scope.isDefaultWallet) {
+      if ($scope.type) {
+        $state.go('app.user_message.tab_' + $scope.type, {type: $scope.type});
+      }
+    }
+    else {
+      if ($scope.type) {
+        $state.go('app.user_messages_by_id.tab_' + $scope.type, {type: $scope.type, id: $scope.walletId});
+      }
+    }
+  };
+
   /* -- Popover -- */
 
   $scope.showActionsPopover = function(event) {
@@ -781,7 +930,8 @@ function ESMessageViewController($scope, $state, $timeout, $translate, $ionicHis
             destUid: $scope.formData.name||$scope.formData.uid,
             title: prefix + $scope.formData.title,
             content: content,
-            isReply: true
+            isReply: true,
+            walletId: wallet.id
           });
       })
       .then(function(sent) {
@@ -796,10 +946,11 @@ function ESMessageViewController($scope, $state, $timeout, $translate, $ionicHis
   };
 }
 
-function PopoverMessageController($scope, UIUtils, $state, csWallet, esHttp, esMessage, esModals) {
+function PopoverMessageController($scope, UIUtils, $state, csWallet, esHttp, esMessage, esModals, $timeout) {
   'ngInject';
 
   var defaultSearchLimit = 40;
+  var wallet;
 
   $scope.search = {
     loading : true,
@@ -811,6 +962,15 @@ function PopoverMessageController($scope, UIUtils, $state, csWallet, esHttp, esM
 
   $scope.$on('popover.shown', function() {
     if ($scope.search.loading) {
+      // TODO manage secondary wallets
+      wallet = $scope.walletId && csWallet.children.get($scope.walletId) || csWallet;
+
+      /* -- wallet listeners -- */
+      if (wallet.isDefault()) {
+        wallet.api.data.on.logout($scope, $scope.resetData);
+        esMessage.api.data.on.new($scope, $scope.onNewMessageNotification);
+      }
+
       $scope.load();
     }
   });
@@ -866,13 +1026,22 @@ function PopoverMessageController($scope, UIUtils, $state, csWallet, esHttp, esM
   // Listen notifications changes
   $scope.onNewMessageNotification = function(notification) {
     if ($scope.search.loading || $scope.search.loadingMore) return;
+
+    if (!wallet.isUserPubkey(notification.issuer)) return; // skip
+
+    // Prepend to list
     $scope.search.results.splice(0,0,notification);
     $scope.updateView();
   };
 
   $scope.select = function(notification) {
     if (!notification.read) notification.read = true;
-    $state.go('app.user_view_message', {id: notification.id});
+    if ($scope.walletId === 'default') {
+      $state.go('app.user_view_message', {messageId: notification.id});
+    }
+    else {
+      $state.go('app.user_view_message_by_id', {messageId: notification.id, id: $scope.walletId});
+    }
     $scope.closePopover(notification);
   };
 
@@ -889,18 +1058,23 @@ function PopoverMessageController($scope, UIUtils, $state, csWallet, esHttp, esM
   /* -- Modals -- */
 
   $scope.showNewMessageModal = function(parameters) {
+
     $scope.closePopover();
-    return esModals.showMessageCompose(parameters)
-      .then(function(id) {
-        if (id) UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT');
-      });
+
+    $timeout(function() {
+      parameters = parameters || {};
+      parameters.walletId = wallet.id;
+
+      esModals.showMessageCompose(parameters)
+        .then(function(id) {
+          if (id) UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT');
+        });
+    }, 500); // Timeout need, to avoid freeze
   };
 
   /* -- listeners -- */
 
-  csWallet.api.data.on.logout($scope, $scope.resetData);
   esHttp.api.node.on.stop($scope, $scope.resetData);
   esHttp.api.node.on.start($scope, $scope.load);
-  esMessage.api.data.on.new($scope, $scope.onNewMessageNotification);
 
 }
diff --git a/www/plugins/es/js/controllers/profile-controllers.js b/www/plugins/es/js/controllers/profile-controllers.js
index abf8be04bb349adc03d7296e7d567c3f5bb81df2..82a6123019bf62ed916cb97880df003ef4ac9452 100644
--- a/www/plugins/es/js/controllers/profile-controllers.js
+++ b/www/plugins/es/js/controllers/profile-controllers.js
@@ -72,6 +72,8 @@ function ESViewEditProfileController($scope, $q, $timeout, $state, $focus, $tran
       return $scope.showHome();
     }
 
+    $scope.walletId = wallet.id;
+
     return wallet.auth({
         minData: true
       })
@@ -395,9 +397,7 @@ function ESViewEditProfileController($scope, $q, $timeout, $state, $focus, $tran
                 // removeIf(no-device)
                 UIUtils.loading.show();
                 // endRemoveIf(no-device)
-                return esProfile.remove(walletData.pubkey, {
-                    wallet: wallet
-                  })
+                return esProfile.remove(walletData.pubkey, {wallet: wallet})
                   .then(function () {
                     if (wallet.isDefault()) {
                       walletData.name=null; // keep local name, on children wallets
diff --git a/www/plugins/es/js/controllers/registry-controllers.js b/www/plugins/es/js/controllers/registry-controllers.js
index 339df0a7b868ac7977690e8cfd01dd5626395c51..04b3c29fb109e1e58a6f46fa5a4d4ef1242b4f81 100644
--- a/www/plugins/es/js/controllers/registry-controllers.js
+++ b/www/plugins/es/js/controllers/registry-controllers.js
@@ -801,7 +801,7 @@ function ESRegistryRecordViewController($scope, $rootScope, $state, $q, $timeout
       $scope.$broadcast('$recordView.enter', state);
     }
     else {
-      $state.go('app.registry_lookup');
+      $state.go('app.wot_lookup.tab_registry');
     }
   });
 
@@ -843,7 +843,7 @@ function ESRegistryRecordViewController($scope, $rootScope, $state, $q, $timeout
             $scope.loading = false;
             if (err && err.ucode === 404) {
               UIUtils.toast.show('REGISTRY.ERROR.RECORD_NOT_EXISTS');
-              $state.go('app.registry_lookup');
+              $state.go('app.wot_lookup.tab_registry');
             }
             else {
               UIUtils.onError('REGISTRY.ERROR.LOAD_RECORD_FAILED')(err);
diff --git a/www/plugins/es/js/controllers/subscription-controllers.js b/www/plugins/es/js/controllers/subscription-controllers.js
index 397bf94c6bd327739ca67e1b0851ccfe90ae2163..d73f7736112f42d44862b77c9b827f59790629f7 100644
--- a/www/plugins/es/js/controllers/subscription-controllers.js
+++ b/www/plugins/es/js/controllers/subscription-controllers.js
@@ -68,11 +68,7 @@ function ViewSubscriptionsController($scope, $q, $ionicHistory, csWot, csWallet,
         return $scope.showHome();
       }
 
-      $scope.loadWallet({
-        wallet: wallet,
-        auth: true,
-        minData: true
-      })
+      wallet.auth({minData: true})
         .then(function() {
           UIUtils.loading.hide();
           return $scope.load();
@@ -81,7 +77,7 @@ function ViewSubscriptionsController($scope, $q, $ionicHistory, csWot, csWallet,
           $scope.showFab('fab-add-subscription-record');
         })
         .catch(function(err){
-          if (err == 'CANCELLED') {
+          if (err === 'CANCELLED') {
             UIUtils.loading.hide(10);
             $scope.loading=true; // reset for force reload next time
             $ionicHistory.goBack();
@@ -146,7 +142,7 @@ function ViewSubscriptionsController($scope, $q, $ionicHistory, csWot, csWallet,
         if (!cat) return;
         type = cat.id;
         // get subscription parameters
-        if (type == 'email') {
+        if (type === 'email') {
           return $scope.showEmailModal();
         }
         else {
@@ -156,7 +152,7 @@ function ViewSubscriptionsController($scope, $q, $ionicHistory, csWot, csWallet,
       .then(function(record) {
         if (!record) return;
         UIUtils.loading.show();
-        esSubscription.record.add(record, wallet)
+        esSubscription.record.add(record, {wallet: wallet})
           .then($scope.addToUI)
           .then(function() {
             wallet.data.subscriptions = wallet.data.subscriptions || {count: 0};
@@ -173,7 +169,7 @@ function ViewSubscriptionsController($scope, $q, $ionicHistory, csWot, csWallet,
     // get subscription parameters
     var promise;
     var oldRecord = angular.copy(record);
-    if (record.type == 'email') {
+    if (record.type === 'email') {
       promise = $scope.showEmailModal(record);
     }
     if (!promise) return;
@@ -185,8 +181,8 @@ function ViewSubscriptionsController($scope, $q, $ionicHistory, csWot, csWallet,
         return esSubscription.record.update(record, wallet)
           .then(function() {
             // If recipient change, update in results
-            if (oldRecord.type != record.type ||
-              oldRecord.recipient != record.recipient) {
+            if (oldRecord.type !== record.type ||
+              oldRecord.recipient !== record.recipient) {
               $scope.removeFromUI(oldRecord);
               return $scope.addToUI(record);
             }
diff --git a/www/plugins/es/js/controllers/wot-controllers.js b/www/plugins/es/js/controllers/wot-controllers.js
index 2adfdfff5143f2ffc42aca7f9eb2267ac1240d1d..4ac6d8ed6c890e794adaa165884c92d8ce9f7fea 100644
--- a/www/plugins/es/js/controllers/wot-controllers.js
+++ b/www/plugins/es/js/controllers/wot-controllers.js
@@ -83,7 +83,7 @@ function ESWotLookupExtendController($scope, $controller, $state) {
       location: location.length ? location : undefined
     };
 
-    $state.go('app.registry_lookup', stateParams);
+    $state.go('app.wot_lookup.tab_registry', stateParams);
   };
 }
 
diff --git a/www/plugins/es/js/services/blockchain-services.js b/www/plugins/es/js/services/blockchain-services.js
index 824aa3a437d2f83d8edc706d1412d6bd1b3cb705..9116acf0c87525009aa79a4368e583fbc2a8defd 100644
--- a/www/plugins/es/js/services/blockchain-services.js
+++ b/www/plugins/es/js/services/blockchain-services.js
@@ -31,9 +31,9 @@ angular.module('cesium.es.blockchain.services', ['cesium.services', 'cesium.es.h
         block: {},
         raw: {
           block: {
-            search: esHttp.post('/:currency/block/_search'),
+            search: esHttp.post('/:currency/block/_search', esHttp.cache.SHORT),
             searchText: esHttp.get('/:currency/block/_search?q=:text'),
-            get: esHttp.get('/:currency/block/:number/_source')
+            get: esHttp.get('/:currency/block/:number/_source', esHttp.cache.SHORT)
           }
         },
         regexp: {
diff --git a/www/plugins/es/js/services/comment-services.js b/www/plugins/es/js/services/comment-services.js
index 339b3b752986396371165a49c92f6d337803e017..374752bbec7a371e6b57cd0fd67e7998140b66f6 100644
--- a/www/plugins/es/js/services/comment-services.js
+++ b/www/plugins/es/js/services/comment-services.js
@@ -167,8 +167,11 @@ angular.module('cesium.es.comment.services', ['ngResource', 'cesium.services',
           if (index === -1) return;
           data.result.splice(index, 1);
           delete data.mapById[comment.id];
+
+          var wallet = !csWallet.isUserPubkey(comment.issuer) ? csWallet.children.getByPubkey(comment.issuer) : csWallet;
+
           // Send deletion request
-          if (csWallet.isUserPubkey(comment.issuer)) {
+          if (wallet) {
             return exports.raw.remove(comment.id)
               .catch(function(err){
                 console.error(err);
@@ -176,7 +179,7 @@ angular.module('cesium.es.comment.services', ['ngResource', 'cesium.services',
               });
           }
           else {
-            return $q.reject("User is not the comment issuer");
+            return $q.reject("No wallet found corresponding to the comment issuer");
           }
         };
       };
diff --git a/www/plugins/es/js/services/document-services.js b/www/plugins/es/js/services/document-services.js
index fc58393ba5dd17d2da15b0cd61c98c435c6404aa..41567a05474b7178d224b9c6b9b352ad35faf4f0 100644
--- a/www/plugins/es/js/services/document-services.js
+++ b/www/plugins/es/js/services/document-services.js
@@ -164,19 +164,21 @@ angular.module('cesium.es.document.services', ['ngResource', 'cesium.platform',
         });
     }
 
-    function remove(document) {
+    function remove(document, options) {
       if (!document || !document.index || !document.type || !document.id) return $q.reject('Could not remove document: missing mandatory fields');
-      return esHttp.record.remove(document.index, document.type)(document.id);
+      return esHttp.record.remove(document.index, document.type)(document.id, options);
     }
 
-    function removeAll(documents) {
+    function removeAll(documents, options) {
       if (!documents || !documents.length) return;
 
-      return csWallet.auth()
-        .then(function(walletData) {
+      var wallet = options && options.walletId && csWallet.children.get(options.walletId) || csWallet;
+
+      return wallet.auth() // Auth once
+        .then(function() {
           // Remove each doc
           return $q.all(documents.reduce(function (res, doc) {
-            return res.concat(esHttp.record.remove(doc.index, doc.type)(doc.id, walletData));
+            return res.concat(esHttp.record.remove(doc.index, doc.type)(doc.id, {wallet: wallet}));
           }, []));
         });
     }
diff --git a/www/plugins/es/js/services/http-services.js b/www/plugins/es/js/services/http-services.js
index 9b0990a28a55a056edbe52493711513bcd939ce6..7e619a0b40beb4a4fc88d217684c88c6b2753d30 100644
--- a/www/plugins/es/js/services/http-services.js
+++ b/www/plugins/es/js/services/http-services.js
@@ -4,7 +4,7 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
  * Elastic Search Http
  */
 .factory('esHttp', function($q, $timeout, $rootScope, $state, $sce, $translate, $window, $filter,
-                            CryptoUtils, UIUtils, csHttp, csConfig, csSettings, BMA, csWallet, csPlatform, Api) {
+                            CryptoUtils, UIUtils, csHttp, csConfig, csSettings, csCache, BMA, csWallet, csPlatform, Api) {
   'ngInject';
 
   // Allow to force SSL connection with port different from 443
@@ -14,10 +14,11 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
     console.debug('[ES] [https] Enable SSL (forced by config or detected in URL)');
   }
 
-  function EsHttp(host, port, useSsl) {
+  function EsHttp(host, port, useSsl, useCache) {
 
     var
       that = this,
+      cachePrefix = 'esHttp-',
       constants = {
         ES_USER_API_ENDPOINT: 'ES_USER_API( ([a-z_][a-z0-9-_.]*))?( ([0-9.]+))?( ([0-9a-f:]+))?( ([0-9]+))',
         MAX_UPLOAD_BODY_SIZE: csConfig.plugins && csConfig.plugins.es && csConfig.plugins.es.maxUploadBodySize || 2097152 /*=2M*/
@@ -42,9 +43,10 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
     that.started = false;
     that.init = init;
 
-    init(host, port, useSsl);
+    init(host, port, useSsl, useCache);
+    that.useCache = angular.isDefined(useCache) ? useCache : false; // need here because used in get() function
 
-    function init(host, port, useSsl) {
+    function init(host, port, useSsl, useCache) {
       // Use settings as default
       if (!host && csSettings.data) {
         host = host || (csSettings.data.plugins && csSettings.data.plugins.es ? csSettings.data.plugins.es.host : null);
@@ -56,6 +58,7 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
       that.host = host;
       that.port = port || ((useSsl || forceUseSsl) ? 443 : 80);
       that.useSsl = angular.isDefined(useSsl) ? useSsl : (that.port == 443 || forceUseSsl);
+
       that.server = csHttp.getServer(host, port);
     }
 
@@ -126,6 +129,8 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
         sock.close();
       });
       that.cache = _emptyCache();
+
+      csCache.clear(cachePrefix);
     };
 
     that.copy = function(otherNode) {
@@ -144,28 +149,36 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
       return csHttp.getUrl(that.host, that.port, path, that.useSsl);
     };
 
-    that.get = function (path) {
+    that.get = function (path, cacheTime) {
 
-      var getRequest = function(params) {
+      cacheTime = that.useCache && cacheTime;
+      var cacheKey = path + (cacheTime ? ('#'+cacheTime) : '');
+
+      var getRequestFn = function(params) {
         if (!that.started) {
           if (!that._startPromise) {
-            console.error('[ES] [http] Trying to get [{0}] before start()...'.format(path));
+            console.error('[ES] [http] Trying to get [{0}] before start(). Waiting...'.format(path));
           }
           return that.ready().then(function(start) {
             if (!start) return $q.reject('ERROR.ES_CONNECTION_ERROR');
-            return getRequest(params); // loop
+            return getRequestFn(params); // loop
           });
         }
 
-        var request = that.cache.getByPath[path];
+        var request = that.cache.getByPath[cacheKey];
         if (!request) {
-          request =  csHttp.get(that.host, that.port, path, that.useSsl);
-          that.cache.getByPath[path] = request;
+          if (cacheTime) {
+            request =  csHttp.getWithCache(that.host, that.port, path, that.useSsl, cacheTime, null, null, cachePrefix);
+          }
+          else {
+            request =  csHttp.get(that.host, that.port, path, that.useSsl);
+          }
+          that.cache.getByPath[cacheKey] = request;
         }
         return request(params);
       };
 
-      return getRequest;
+      return getRequestFn;
     };
 
     that.post = function(path) {
@@ -185,7 +198,7 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
           request =  csHttp.post(that.host, that.port, path, that.useSsl);
           that.cache.postByPath[path] = request;
         }
-        return request(obj, params);
+        return request(obj, params)
       };
       return postRequest;
     };
@@ -436,17 +449,26 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
     function postRecord(path, options) {
       options = options || {};
       var postRequest = that.post(path);
-      return function(record, params) {
+      return function(record, options) {
+        options = options || {};
+        var wallet = options.wallet || (options.walletId && csWallet.children.get(options.walletId)) ||
+          ((!options.pubkey || csWallet.isUserPubkey(options.pubkey)) && csWallet) ||
+          (options.pubkey && csWallet.children.getByPubkey(options.pubkey));
 
-        var wallet = (params && params.wallet || csWallet);
-        params = params || {};
-        params.pubkey = params.pubkey || wallet.data.pubkey;
-        var keypair = params.keypair || wallet.data.keypair;
-        // make sure to hide some params
-        if (params) {
-          delete params.wallet;
-          delete params.keypair;
+        var keypair = options.keypair || wallet && wallet.data && wallet.data.keypair;
+
+        if (!keypair && !wallet) {
+          throw new Error('Missing wallet or keypair, to sign record');
         }
+
+        // Create the POSt request params,
+        // but BEFORE, remove protected options
+        delete options.wallet;
+        delete options.walletId;
+        delete options.keypair;
+        var params = angular.copy(options);
+        params.pubkey = params.pubkey || wallet.data.pubkey;
+
         return (wallet.isAuth() ? $q.when(wallet.data) : wallet.auth({silent: true, minData: true}))
           .then(function() {
             if (options.creationTime && !record.creationTime) {
@@ -481,6 +503,10 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
                   // Send data
                   return postRequest(str, params)
                     .then(function (id){
+
+                      // Clear cache
+                      csCache.clear(cachePrefix);
+
                       return id;
                     })
                     .catch(function(err) {
@@ -499,8 +525,7 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
     function removeRecord(index, type) {
       return function(id, options) {
         options = options || {};
-        var wallet = (options && options.wallet || csWallet);
-        delete options.wallet;
+        var wallet = options.wallet || options.walletId && csWallet.children.get(options.walletId) || csWallet;
         return (wallet.isAuth() ? $q.when(wallet.data) : wallet.auth({silent: true, minData: true}))
           .then(function(walletData) {
 
@@ -668,6 +693,7 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
         parseAsHtml: parseAsHtml,
         findObjectInTree: findObjectInTree
       },
+      cache: csHttp.cache,
       constants: constants
     };
     exports.constants.regexp = regexp;
@@ -675,10 +701,10 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
   }
 
 
-  var service = new EsHttp();
+  var service = new EsHttp(undefined, undefined, undefined, true);
 
-  service.instance = function(host, port, useSsl) {
-    return new EsHttp(host, port, useSsl);
+  service.instance = function(host, port, useSsl, useCache) {
+    return new EsHttp(host, port, useSsl, useCache);
   };
 
   return service;
diff --git a/www/plugins/es/js/services/invitation-services.js b/www/plugins/es/js/services/invitation-services.js
index f10946c8f9eadfa79b034888a51ba4601b48af5f..befb724efd60b498a31e534a918750b188b704b0 100644
--- a/www/plugins/es/js/services/invitation-services.js
+++ b/www/plugins/es/js/services/invitation-services.js
@@ -275,42 +275,47 @@ angular.module('cesium.es.invitation.services', ['cesium.platform',
       });
   }
 
-  function deleteInvitation(invitation) {
+  function deleteInvitation(invitation, options) {
     if (!invitation || !invitation.id) throw 'Invalid invitation (empty or without id). Could not delete.';
     var type = invitation.type || 'certification';
-    return that.raw[type].remove(invitation.id)
+    var wallet = options && options.walletId && csWallet.children.get(options.walletId) || csWallet;
+    return that.raw[type].remove(invitation.id, {wallet: wallet})
       .then(function() {
         // Always reset unread count
-        csWallet.data.invitations.unreadCount = 0;
+        wallet.data.invitations.unreadCount = 0;
 
-        if (!csWallet.data.invitations || !csWallet.data.invitations.list) return;
+        if (!wallet.data.invitations || !wallet.data.invitations.list) return;
 
         // Remove form list
-        csWallet.data.invitations.list.splice(csWallet.data.invitations.list.indexOf(invitation), 1);
+        wallet.data.invitations.list.splice(wallet.data.invitations.list.indexOf(invitation), 1);
       });
   }
 
-  function deleteInvitationsByIds(ids, type) {
+  function deleteInvitationsByIds(ids, type, options) {
     if (!ids || !ids.length) return $q.when();
     type = type || 'certification';
     return $q.all(
         ids.reduce(function(res, id) {
-          return res.concat(that.raw[type].remove(id));
+          return res.concat(that.raw[type].remove(id, options));
         }, [])
       );
   }
 
-  function deleteAllInvitations(pubkey, type) {
-    pubkey = pubkey || csWallet.data.pubkey;
+  function deleteAllInvitationsByPubkey(type, options) {
+
     type = type || 'certification';
 
-    console.debug('[ES] [invitation] Deleting all invitations...');
     var now = Date.now();
-    var countBeforeDeletion = (csWallet.data.invitations && csWallet.data.invitations.count) || 0;
-    var unreadCountBeforeDeletion = (csWallet.data.invitations && csWallet.data.invitations.unreadCount) || 0;
+    console.debug('[ES] [invitation] Deleting all {0} invitations...'.format(type));
+
+    var wallet = (options && options.pubkey && csWallet.children.getByPubkey(options.pubkey)) ||
+      (options && options.walletId && csWallet.children.getByPubkey(options.walletId)) ||
+      csWallet;
+    var countBeforeDeletion = (wallet.data.invitations && wallet.data.invitations.count) || 0;
+    var unreadCountBeforeDeletion = (wallet.data.invitations && wallet.data.invitations.unreadCount) || 0;
 
     // Get invitation ids
-    return that.raw[type].getIds({pubkey: pubkey})
+    return that.raw[type].getIds({pubkey: wallet.data.pubkey})
       .then(function(res) {
         if (!res || !res.hits || !res.hits.total) return;
         var ids = res.hits.hits.reduce(function (res, hit) {
@@ -318,26 +323,26 @@ angular.module('cesium.es.invitation.services', ['cesium.platform',
         }, []);
 
         // Do deletion by ids
-        return deleteInvitationsByIds(ids, type)
+        return deleteInvitationsByIds(ids, type, {walletId: wallet.id})
           .then(function() {
             // Update wallet count
-            csWallet.data.invitations = csWallet.data.invitations || {};
+            wallet.data.invitations = wallet.data.invitations || {};
             // Decrement count (warning: could have received new invitations during deletion execution)
-            if (csWallet.data.invitations.count >= countBeforeDeletion) {
-              csWallet.data.invitations.count -= countBeforeDeletion || 0;
+            if (wallet.data.invitations.count >= countBeforeDeletion) {
+              wallet.data.invitations.count -= countBeforeDeletion || 0;
             }
             else {
-              csWallet.data.invitations.count = 0;
+              wallet.data.invitations.count = 0;
             }
             // Decrement count (warning: could have received new invitations during deletion execution)
-            if (csWallet.data.invitations.unreadCount >= unreadCountBeforeDeletion) {
-              csWallet.data.invitations.unreadCount -= unreadCountBeforeDeletion || 0;
+            if (wallet.data.invitations.unreadCount >= unreadCountBeforeDeletion) {
+              wallet.data.invitations.unreadCount -= unreadCountBeforeDeletion || 0;
             }
             else {
-              csWallet.data.invitations.unreadCount = 0;
+              wallet.data.invitations.unreadCount = 0;
             }
 
-            console.debug('[ES] [invitation] All invitations deleted in {0}ms'.format(Date.now()-now));
+            console.debug('[ES] [invitation] All {0} invitations deleted in {1}ms'.format(type, Date.now()-now));
           });
       });
   }
@@ -397,7 +402,7 @@ angular.module('cesium.es.invitation.services', ['cesium.platform',
   that.send = sendInvitation;
   that.delete = deleteInvitation;
   that.deleteByIds = deleteInvitationsByIds;
-  that.deleteAll = deleteAllInvitations;
+  that.deleteAll = deleteAllInvitationsByPubkey;
 
   that.constants = constants;
 
diff --git a/www/plugins/es/js/services/message-services.js b/www/plugins/es/js/services/message-services.js
index b011479d1ef2437e001babc634af685f6d9f3021..2009ad1610160e71d3208061e373006bc32732c5 100644
--- a/www/plugins/es/js/services/message-services.js
+++ b/www/plugins/es/js/services/message-services.js
@@ -66,8 +66,8 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
       console.debug('[ES] [message] Loading count...');
 
       // Count unread messages
-      countUnreadMessages(data.pubkey)
-        .then(function(unreadCount){
+      countUnreadMessages({pubkey: data.pubkey})
+        .then(function(unreadCount) {
           data.messages = data.messages || {};
           data.messages.unreadCount = unreadCount;
           data.messages.time = time;
@@ -81,10 +81,13 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
       return deferred.promise;
     }
 
-    function countUnreadMessages(pubkey) {
-      pubkey = pubkey || (csWallet.isLogin() ? csWallet.data.pubkey : pubkey);
+    function countUnreadMessages(options) {
+      options = options || {};
+      var wallet = options.wallet ||
+        (options.walletId && csWallet.children.get(options.walletId)) || csWallet;
+      var pubkey = options.pubkey || (wallet && wallet.data && wallet.data.pubkey);
       if (!pubkey) {
-        throw new Error('no pubkey, and user not connected.');
+        throw new Error('no pubkey or wallet found in options, and user not connected.');
       }
 
       var request = {
@@ -105,18 +108,28 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
     }
 
     // Listen message changes
-    function onNewMessageEvent(event) {
+    function onNewMessageEvent(event, wallet) {
       console.debug("[ES] [message] detected new message (from notification service)");
 
       var notification = new EsNotification(event);
       notification.issuer = notification.pubkey;
       delete notification.pubkey;
 
+      if (!notification.issuer) return; // Skip if invalid
+
+      // Get the wallet
+      wallet = wallet || (notification.issuer && csWallet.isUserPubkey(notification.issuer) && csWallet) ||
+       (notification.issuer && csWallet.children.getByPubkey(notification.issuer));
+
+      if (!wallet) {
+        throw new Error("No wallet for pubkey: {0}".format(notification.issuer.substring(0, 6)));
+      }
+
       csWot.extend(notification, 'issuer')
         .then(function() {
 
-          csWallet.data.messages = csWallet.data.messages || {};
-          csWallet.data.messages.unreadCount++;
+          wallet.data.messages = wallet.data.messages || {};
+          wallet.data.messages.unreadCount++;
 
           // Raise event
           api.data.raise.new(notification);
@@ -125,7 +138,8 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
 
     function sendMessage(message, options) {
       options = options || {};
-      var wallet = options.wallet || csWallet;
+      var wallet = options.wallet || options.walletId && csWallet.children.get(options.walletId) || csWallet;
+      delete options.wallet;
       message.issuer = message.issuer || wallet.data.pubkey;
       return wallet.getKeypair()
         .then(function(keypair) {
@@ -168,17 +182,20 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
     }
 
     function loadMessageNotifications(options) {
-      if (!csWallet.isLogin()) {
-        return $q.when([]); // Should never happen
-      }
       options = options || {};
       options.from = options.from || 0;
       options.size = options.size || constants.DEFAULT_LOAD_SIZE;
+      var wallet = options.wallet || options.walletId && csWallet.children.get(options.walletId) || csWallet;
+      delete options.wallet;
+
+      if (!wallet.isLogin()) {
+        return $q.when([]); // Should never happen
+      }
       var request = {
         sort: {
           "time" : "desc"
         },
-        query: {bool: {filter: {term: {recipient: csWallet.data.pubkey}}}},
+        query: {bool: {filter: {term: {recipient: wallet.data.pubkey}}}},
         from: options.from,
         size: options.size,
         _source: fields.notifications
@@ -250,7 +267,10 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
       options.filter = angular.isDefined(options.filter) ? options.filter : undefined;
       options.from = options.from || 0;
 
-      var promise = csWallet.auth()
+      var wallet = options.wallet || options.walletId && csWallet.children.get(options.walletId) || csWallet;
+      delete options.wallet; // avoid error in angular.copy()
+
+      var promise = wallet.auth()
         .then(function(walletData) {
 
           // Get encrypted message (with common fields)
@@ -273,12 +293,15 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
           if (messages.length && options.filter){
             var filteredMessages = filterMessages(messages, options.filter);
 
-            // Recursive loop, if need more
+            // Need more messages: iterate again
             if (filteredMessages.length < messages.length) {
               options = angular.copy(options);
               options.from += options.size;
               options.size = messages.length - filteredMessages.length;
-              return loadMessages(options)
+              // put the wallet again, because it has been removed before the angular.copy()
+              // To avoid an error
+              options.wallet = wallet;
+              return loadMessages(options) // Loop
                 .then(function(messages) {
                   return filteredMessages.concat(messages);
                 });
@@ -286,8 +309,8 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
           }
 
           if (options.from === 0 && !options.filter) {
-            csWallet.data.messages = csWallet.data.messages || {};
-            csWallet.data.messages.count = messages.length;
+            wallet.data.messages = wallet.data.messages || {};
+            wallet.data.messages.count = messages.length;
           }
 
           return messages;
@@ -301,19 +324,20 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
       return promise;
     }
 
-    function getAndDecrypt(id, options) {
+    function getAndDecrypt(id, type, options) {
+      type = type || 'inbox';
       options = options || {};
-      options.type = options.type || 'inbox';
       options.summary = angular.isDefined(options.summary) ? options.summary : false/*summary not need by default*/;
+      var wallet = options.wallet || (options.walletId && csWallet.children.get(options.walletId)) || csWallet;
 
-      return csWallet.auth()
+      return wallet.auth()
         .then(function(walletData) {
-          return raw.getByTypeAndId({id: id, type: options.type})
+          return raw.getByTypeAndId({id: id, type: type})
             .then(function(hit) {
               if (!hit.found) return;
               var msg = hit._source;
               msg.id = hit._id;
-              msg.read = (options.type == 'outbox') || !!msg.read_signature;
+              msg.read = (type == 'outbox') || !!msg.read_signature;
               delete msg.read_signature; // not need anymore
 
               // Decrypt message
@@ -321,7 +345,7 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
 
               // Add avatar
                 .then(function(){
-                  var avatarField = (options.type == 'inbox') ? 'issuer' : 'recipient';
+                  var avatarField = (type == 'inbox') ? 'issuer' : 'recipient';
                   return csWot.extend(msg, avatarField);
                 });
             });
@@ -397,26 +421,32 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
       }
     }
 
-    function removeMessage(id, type) {
+    function removeMessage(id, type, options) {
       type = type || 'inbox';
-      return esHttp.record.remove('message', type)(id)
+
+      var wallet = options.wallet || (options.walletId && csWallet.children.get(options.walletId)) || csWallet;
+
+      return esHttp.record.remove('message', type)(id, {wallet: wallet})
         .then(function(res) {
-          // update message count
-          if (type == 'inbox') {
-            csWallet.data.messages = csWallet.data.messages || {};
-            csWallet.data.messages.count = csWallet.data.messages.count > 0 ? csWallet.data.messages.count-1 : 0;
+          // Update message count
+          if (type === 'inbox') {
+            wallet.data.messages = wallet.data.messages || {};
+            wallet.data.messages.count = wallet.data.messages.count > 0 ? wallet.data.messages.count-1 : 0;
           }
+
           // Raise event
-          api.data.raise.delete(id);
+          if (wallet.isDefault()) {
+            api.data.raise.delete(id);
+          }
 
           return res;
         });
     }
 
-    function removeAllMessages(type) {
+    function removeAllMessages(type, options) {
       type = type || 'inbox';
-
-      return csWallet.auth()
+      var wallet = options && options.walletId && csWallet.children.get(options.walletId) || csWallet;
+      return wallet.auth()
         .then(function(walletData) {
           // Get all message id
           return searchMessages(walletData.pubkey, {type: type, from: 0, size: 1000, _source: false})
@@ -427,7 +457,7 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
 
               // Remove each messages
               return $q.all(res.reduce(function (res, msg) {
-                return res.concat(esHttp.record.remove('message', type)(msg.id, walletData));
+                return res.concat(esHttp.record.remove('message', type)(msg.id, {wallet: wallet}));
               }, []))
                 .then(function() {
                   return ids;
@@ -435,21 +465,25 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
             })
             .then(function (ids) {
               // update message count
-              if (type == 'inbox') {
-                csWallet.data.messages = csWallet.data.messages || {};
-                csWallet.data.messages.count = 0;
-                csWallet.data.messages.unreadCount = 0;
+              if (type === 'inbox') {
+                wallet.data.messages = wallet.data.messages || {};
+                wallet.data.messages.count = 0;
+                wallet.data.messages.unreadCount = 0;
               }
 
               // Raise events
-              _.forEach(ids, api.data.raise.delete);
+              if (wallet.isDefault()) {
+                _.forEach(ids, api.data.raise.delete);
+              }
             });
         });
     }
 
     // Mark a message as read
-    function markMessageAsRead(message, type) {
-      type = type || 'inbox';
+    function markMessageAsRead(message, options) {
+      options = options || {};
+      var wallet = options.wallet || options.walletId && csWallet.children.get(options.walletId) || csWallet;
+      var type = options && options.type || (!wallet.isUserPubkey(message.recipient) ? 'outbox' : 'inbox');
       if (message.read) {
         var deferred = $q.defer();
         deferred.resolve();
@@ -457,7 +491,7 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
       }
       message.read = true;
 
-      return csWallet.getKeypair()
+      return wallet.getKeypair()
 
       // Prepare the read_signature to sent
         .then(function(keypair) {
@@ -471,16 +505,18 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
 
         // Update message count
         .then(function() {
-          if (type == 'inbox') {
-            csWallet.data.messages = csWallet.data.messages || {};
-            csWallet.data.messages.unreadCount = csWallet.data.messages.unreadCount ? csWallet.data.messages.unreadCount - 1 : 0;
+          if (type === 'inbox') {
+            wallet.data.messages = wallet.data.messages || {};
+            wallet.data.messages.unreadCount = wallet.data.messages.unreadCount ? wallet.data.messages.unreadCount - 1 : 0;
           }
         });
     }
 
     // Mark all messages as read
-    function markAllMessageAsRead() {
-      return csWallet.auth()
+    function markAllMessageAsRead(options) {
+      options = options || {};
+      var wallet = options.wallet || options.walletId && csWallet.children.get(options.walletId) || csWallet;
+      return wallet.auth()
         .then(function(walletData) {
 
           // Get all messages hash
@@ -510,8 +546,8 @@ angular.module('cesium.es.message.services', ['ngResource', 'cesium.platform',
             })
             .then(function () {
               // update message count
-              csWallet.data.messages = csWallet.data.messages || {};
-              csWallet.data.messages.unreadCount = 0;
+              wallet.data.messages = wallet.data.messages || {};
+              wallet.data.messages.unreadCount = 0;
             });
         });
     }
diff --git a/www/plugins/es/js/services/profile-services.js b/www/plugins/es/js/services/profile-services.js
index a2d831aad6fa2f8b0624e1e67d5e7c9e1b47c911..c36f3123b0ef714d60e5cbdf0e99f52c8a5743b7 100644
--- a/www/plugins/es/js/services/profile-services.js
+++ b/www/plugins/es/js/services/profile-services.js
@@ -19,10 +19,10 @@ angular.module('cesium.es.profile.services', ['cesium.services', 'cesium.es.http
 
     that.raw = {
       getFields: esHttp.get('/user/profile/:id?&_source_exclude=avatar._content&_source=:fields'),
-      get: esHttp.get('/user/profile/:id?&_source_exclude=avatar._content'),
-      getAll: esHttp.get('/user/profile/:id'),
-      search: esHttp.post('/user/profile/_search'),
-      mixedSearch: esHttp.post('/user,page,group/profile,record/_search')
+      get: esHttp.get('/user/profile/:id?&_source_exclude=avatar._content', esHttp.cache.MEDIUM),
+      getAll: esHttp.get('/user/profile/:id', esHttp.cache.MEDIUM),
+      search: esHttp.post('/user/profile/_search', esHttp.cache.MEDIUM),
+      mixedSearch: esHttp.post('/user,page,group/profile,record/_search', esHttp.cache.MEDIUM)
     };
 
     function getAvatarAndName(pubkey) {
diff --git a/www/plugins/es/js/services/social-services.js b/www/plugins/es/js/services/social-services.js
index ee9ad619df470eaf45da042706f94bc150cbfbd2..679afbd9b9d8ae41a542b71f418ea86386ea1b6e 100644
--- a/www/plugins/es/js/services/social-services.js
+++ b/www/plugins/es/js/services/social-services.js
@@ -1,6 +1,6 @@
 angular.module('cesium.es.social.services', ['cesium.es.crypto.services'])
 
-  .factory('SocialUtils', function($filter, $q, CryptoUtils, BMA, csWallet, esCrypto) {
+  .factory('SocialUtils', function($filter, $q, CryptoUtils, BMA, csWallet, esCrypto, $timeout) {
     'ngInject';
 
     function SocialUtils() {
diff --git a/www/plugins/es/js/services/subscription-services.js b/www/plugins/es/js/services/subscription-services.js
index a8924bd6722f96da4614f4d4ddbc9235cbd08ed2..34b72c1e219c590c5fbd5cc3d0eb0e92b1e6a045 100644
--- a/www/plugins/es/js/services/subscription-services.js
+++ b/www/plugins/es/js/services/subscription-services.js
@@ -81,12 +81,12 @@ angular.module('cesium.es.subscription.services', ['cesium.platform', 'cesium.es
       });
   }
 
-  function addRecord(record, wallet) {
+  function addRecord(record, options) {
     if (!record || !record.type || !record.content || !record.recipient) {
       return $q.reject("Missing arguments 'record' or 'record.type' or 'record.content' or 'record.recipient'");
     }
 
-    wallet = wallet || csWallet;
+    var wallet = options && options.wallet || (options && options.walletId && csWallet.children.get(options.walletId)) || csWallet;
     var issuer = wallet.data.pubkey;
 
     var contentStr = JSON.stringify(record.content);
@@ -115,12 +115,12 @@ angular.module('cesium.es.subscription.services', ['cesium.platform', 'cesium.es
       ;
   }
 
-  function updateRecord(record, wallet) {
+  function updateRecord(record, options) {
     if (!record || !record.content || !record.recipient) {
       return $q.reject("Missing arguments 'record' or 'record.content', or 'record.recipient'");
     }
 
-    wallet = wallet || csWallet;
+    var wallet = options && options.wallet || (options && options.walletId && csWallet.children.get(options.walletId)) || csWallet;
     var issuer = wallet.data.pubkey;
     var contentStr = JSON.stringify(record.content);
 
diff --git a/www/plugins/es/js/services/wot-services.js b/www/plugins/es/js/services/wot-services.js
index 7e8179aabb8b49bbe7e09b45757879792eb0df73..5a82bbdbb56aa08120523f52f6d91057054e8cd7 100644
--- a/www/plugins/es/js/services/wot-services.js
+++ b/www/plugins/es/js/services/wot-services.js
@@ -1,16 +1,23 @@
 angular.module('cesium.es.wot.services', ['ngResource', 'cesium.es.http.services'])
 
-  .factory('esWot', function($q, esHttp) {
+  .factory('esWot', function($q, esHttp, csCache) {
     'ngInject';
 
     var
+      cachePrefix = 'esWot-',
+      membershipsCache = csCache.get(cachePrefix + 'memberships-', csCache.constants.MEDIUM),
       raw = {
           user: {
-            event: esHttp.post('/user/event/_search?pretty')
+            event: esHttp.post('/user/event/_search')
           }
         },
 
-      loadMemberships = function(pubkey) {
+
+      loadMemberships = function(pubkey, options) {
+        options = options || {};
+
+        var result = (options.cache !== false) ? membershipsCache.get(pubkey) : null;
+        if (result) return $q.when(result);
 
         // Get user events on membership state
         var request = {
@@ -62,10 +69,21 @@ angular.module('cesium.es.wot.services', ['ngResource', 'cesium.es.http.services
               });
             }
 
+            // Put in the cache
+            membershipsCache.put(pubkey, result);
+
             return result;
           });
+      },
+
+      cleanCache = function() {
+        console.debug('[ES] [wot] Clean cache...');
+        csCache.clear(cachePrefix);
       };
 
+    // Listen if node changed
+    esHttp.api.node.on.stop($rootScope, cleanCache, this);
+
     return {
       memberships: loadMemberships
     };
diff --git a/www/plugins/es/templates/message/compose_form.html b/www/plugins/es/templates/message/compose_form.html
index b06754f7f2a0439616179f8c3f8f97ecafc636b0..c8168edbaf1f657d934c4a7876b2a272fcd1ec1f 100644
--- a/www/plugins/es/templates/message/compose_form.html
+++ b/www/plugins/es/templates/message/compose_form.html
@@ -41,14 +41,14 @@
       <!-- Object -->
       <div class="item item-input"
              ng-class="{'item-input-error': form.$submitted && form.title.$invalid}">
-        <!--<span class="input-label">{{'MESSAGE.COMPOSE.OBJECT' | translate}}</span>-->
         <input type="text"
+               autocomplete="off"
                placeholder="{{'MESSAGE.COMPOSE.OBJECT_HELP' | translate}}"
                name="title"
                ng-model="formData.title"
                ng-maxlength="256"
                required>
-        </input>
+        <span class="badge item-note" ng-if="isReply">({{'MESSAGE.COMPOSE.OBJECT' | translate}})</span>
       </div>
       <div class="form-errors"
            ng-show="form.$submitted && form.title.$error"
@@ -66,6 +66,7 @@
              ng-class="{'item-input-error': form.$submitted && form.content.$invalid}">
         <span class="input-label">{{'MESSAGE.COMPOSE.MESSAGE' | translate}}</span>
         <textarea placeholder="{{'MESSAGE.COMPOSE.MESSAGE_HELP' | translate}}"
+                  autocomplete="off"
                   name="content"
                   ng-model="formData.content"
                   rows="8"
diff --git a/www/plugins/es/templates/message/list.html b/www/plugins/es/templates/message/list.html
index 76ca49ef83f963ae6f559e06f31cddb9ed4f0978..c564a6e49202901bde89e749284751e5faed20f2 100644
--- a/www/plugins/es/templates/message/list.html
+++ b/www/plugins/es/templates/message/list.html
@@ -8,8 +8,8 @@
 
   <ion-item
     class="item item-border-large item-avatar item-icon-right ink"
-    ng-repeat="msg in search.results"
-    ui-sref="app.user_view_message({type:type, id:msg.id})">
+    ng-repeat="msg in :rebind:search.results track by msg.id"
+    ng-click="select(msg, $event)">
 
     <i ng-if="::!msg.avatar" class="item-image icon" ng-class="{'ion-person': msg.uid, 'ion-email': !msg.uid}"></i>
     <i ng-if="::msg.avatar" class="item-image avatar" style="background-image: url({{::msg.avatar.src}})"></i>
diff --git a/www/plugins/es/templates/message/lookup_by_id.html b/www/plugins/es/templates/message/lookup_by_id.html
new file mode 100644
index 0000000000000000000000000000000000000000..cdf3578f4dda863cb22d80c75a408c4036fdfd46
--- /dev/null
+++ b/www/plugins/es/templates/message/lookup_by_id.html
@@ -0,0 +1,17 @@
+<ion-view left-buttons="leftButtons" class="view-messages">
+
+  <ion-tabs class="tabs-positive tabs-icon-top">
+
+    <ion-tab title="{{'MESSAGE.LIST.INBOX'|translate}}" icon="ion-archive"
+      ui-sref="app.user_messages_by_id.tab_inbox">
+      <ion-nav-view name="tab_inbox"></ion-nav-view>
+    </ion-tab>
+
+    <ion-tab title="{{'MESSAGE.LIST.OUTBOX'|translate}}" icon="ion-paper-airplane"
+             ui-sref="app.user_messages_by_id.tab_outbox">
+      <ion-nav-view name="tab_outbox"></ion-nav-view>
+    </ion-tab>
+
+  </ion-tabs>
+
+</ion-view>
diff --git a/www/plugins/es/templates/message/lookup_lg.html b/www/plugins/es/templates/message/lookup_lg.html
index 70db4c64b7aedeed0a587a13b5afa11e2a0a6707..66349decfb9decc205ff21cfa2bd026209a6a399 100644
--- a/www/plugins/es/templates/message/lookup_lg.html
+++ b/www/plugins/es/templates/message/lookup_lg.html
@@ -12,7 +12,7 @@
 
   <ion-content class="padding no-padding-xs no-padding-sm">
     <ion-refresher pulling-text="{{'COMMON.BTN_REFRESH' | translate}}"
-                   on-refresh="refresh(true)">
+                   on-refresh="refresh(true, $event)">
     </ion-refresher>
 
     <!-- Buttons bar-->
@@ -37,16 +37,32 @@
     <!-- button tabs -->
     <div class="buttons-tabs border-bottom hidden-sm hidden-xs">
       <div class="pull-right">
-        <div
-          class="button button-tab dark"
+
+        <!-- inbox tab -->
+        <a
+          ng-hide="!isDefaultWallet"
+          class="button button-tab ink dark"
           title="{{'MESSAGE.LIST.INBOX' | translate}}"
           nav-transition="none"
           ng-class="{'active': type=='inbox'}"
           ui-sref="app.user_messages_lg_inbox">
           <i class="icon ion-archive"></i>
           {{'MESSAGE.LIST.INBOX' | translate}}
-        </div>
+        </a>
+        <a
+          ng-hide="isDefaultWallet"
+          class="button button-tab ink dark"
+          title="{{'MESSAGE.LIST.INBOX' | translate}}"
+          nav-transition="none"
+          ng-class="{'active': type=='inbox'}"
+          ui-sref="app.user_messages_lg_inbox_by_id({id: walletId})">
+          <i class="icon ion-archive"></i>
+          {{'MESSAGE.LIST.INBOX' | translate}}
+        </a>
+
+        <!-- outbox tab -->
         <a
+          ng-hide="!isDefaultWallet"
           class="button button-tab ink dark"
           title="{{'MESSAGE.LIST.OUTBOX' | translate}}"
           nav-transition="none"
@@ -55,6 +71,16 @@
           <i class="icon ion-paper-airplane"></i>
           {{'MESSAGE.LIST.OUTBOX' | translate}}
         </a>
+        <a
+          ng-hide="isDefaultWallet"
+          class="button button-tab ink dark"
+          title="{{'MESSAGE.LIST.OUTBOX' | translate}}"
+          nav-transition="none"
+          ng-class="{'active': type=='outbox'}"
+          ui-sref="app.user_messages_lg_outbox_by_id({id: walletId})">
+          <i class="icon ion-paper-airplane"></i>
+          {{'MESSAGE.LIST.OUTBOX' | translate}}
+        </a>
       </div>
     </div>
 
diff --git a/www/plugins/es/templates/message/popover_message.html b/www/plugins/es/templates/message/popover_message.html
index 31ed03406a3c6d175e0f75aa94699109e0bd4e89..2155e2031ae510359751651ef5a9b9a5c358adf1 100644
--- a/www/plugins/es/templates/message/popover_message.html
+++ b/www/plugins/es/templates/message/popover_message.html
@@ -1,4 +1,4 @@
-<ion-popover-view class="fit hidden-xs hidden-sm popover-notification"
+<ion-popover-view class="fit hidden-xs hidden-sm popover-light"
                   ng-controller="PopoverMessageCtrl">
   <ion-header-bar class="stable-bg block">
     <div class="title" translate>MESSAGE.NOTIFICATIONS.TITLE</div>
diff --git a/www/plugins/es/templates/wallet/item_wallet_extend.html b/www/plugins/es/templates/wallet/item_wallet_extend.html
index 9159ee814da1f80b0ad694bbfee3b19f52f83569..d3f3eb877466686db9913f321f28c5ff3804e9a8 100644
--- a/www/plugins/es/templates/wallet/item_wallet_extend.html
+++ b/www/plugins/es/templates/wallet/item_wallet_extend.html
@@ -3,7 +3,7 @@
     <i class="dark ion-person-stalker"></i>
     {{walletData.invitations.unreadCount}}
   </a>
-  <a ng-if="walletData.messages.unreadCount" ui-sref="app.view_messages_by_id({id: wallet.id})">
+  <a ng-if="walletData.messages.unreadCount" ui-sref="app.user_messages_by_id.tab_inbox({id: wallet.id})">
     <i class="dark ion-email"></i>
     {{walletData.messages.unreadCount}}
   </a>
diff --git a/www/plugins/es/templates/wot/view_identity_extend.html b/www/plugins/es/templates/wot/view_identity_extend.html
index 2df25be7a01d3e9c279d0401bf238ccc7062f86b..5b21ebefec125c2fc8385421c9eaae75bf9a3b34 100644
--- a/www/plugins/es/templates/wot/view_identity_extend.html
+++ b/www/plugins/es/templates/wot/view_identity_extend.html
@@ -9,7 +9,8 @@
 <!-- Top fab buttons -->
 <ng-if ng-if=":state:enable && extensionPoint === 'buttons-top-fab'">
   <button id="fab-compose-{{:rebind:formData.uid}}"
-          class="button button-fab button-fab-top-right button-fab-hero mini button-stable spin"
+          class="button button-fab button-fab-top-left button-fab-hero mini button-stable spin"
+          style="left: 88px;"
           ng-click="showNewMessageModal()">
     <i class="icon ion-compose"></i>
   </button>
diff --git a/www/plugins/graph/js/controllers/account-controllers.js b/www/plugins/graph/js/controllers/account-controllers.js
index 7fcb2c61ca39a109ebe40912e44e4d2ab4ab7960..5f5b3fa9b008a414457c3299a92dca7457c08ccb 100644
--- a/www/plugins/graph/js/controllers/account-controllers.js
+++ b/www/plugins/graph/js/controllers/account-controllers.js
@@ -17,6 +17,15 @@ angular.module('cesium.graph.account.controllers', ['chart.js', 'cesium.graph.se
           }
         })
 
+        .extendState('app.view_wallet_tx_by_id', {
+          points: {
+            'buttons': {
+              templateUrl: "plugins/graph/templates/account/view_wallet_tx_extend.html",
+              controller: 'GpExtendCtrl'
+            }
+          }
+        })
+
         .extendState('app.wot_identity', {
           points: {
             'buttons': {
@@ -49,6 +58,18 @@ angular.module('cesium.graph.account.controllers', ['chart.js', 'cesium.graph.se
           }
         })
 
+        .state('app.view_wallet_stats_by_id', {
+          url: "/wallets/:id/stats?t&stepUnit&hide&scale",
+          views: {
+            'menuContent': {
+              templateUrl: "plugins/graph/templates/account/view_stats.html"
+            }
+          },
+          data: {
+            auth: true
+          }
+        })
+
         .state('app.wot_identity_stats', {
           url: "/wot/:pubkey/stats?t&stepUnit&hide&scale",
           views: {
diff --git a/www/templates/join/modal_join_member.html b/www/templates/join/modal_join_member.html
index 1ce5a4daac6bffd2e9a4996ae0706551330aa173..26f62707f3712cd79a6f4029cc4560554a967650 100644
--- a/www/templates/join/modal_join_member.html
+++ b/www/templates/join/modal_join_member.html
@@ -136,8 +136,7 @@
               <div class="padding hidden-xs text-right">
                 <button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL
                 </button>
-                <button class="button button-calm icon-right ion-chevron-right ink" type="submit"
-                ng-disabled="UIDFound" translate>
+                <button class="button button-calm icon-right ion-chevron-right ink" type="submit" ng-disabled="uiAlreadyUsed" translate>
                   COMMON.BTN_NEXT
                 </button>
               </div>
@@ -148,7 +147,7 @@
 
 
       <!-- STEP 3: salt -->
-      <ion-slide-page>
+      <ion-slide-page ng-if="!formData.pubkey">
         <ion-content class="has-header" scroll="true">
           <form name="saltForm" novalidate="" ng-submit="doNext('saltForm')">
 
@@ -246,7 +245,7 @@
       </ion-slide-page>
 
       <!-- STEP 4: password-->
-      <ion-slide-page>
+      <ion-slide-page ng-if="!formData.pubkey">
         <ion-content class="has-header" scroll="true">
           <form name="passwordForm" novalidate="" ng-submit="doNext('passwordForm')">
 
diff --git a/www/templates/login/form_pubkey.html b/www/templates/login/form_pubkey.html
index 876d27ff955cce692bcd9df9820744fcafbae0e6..68f4a8b17511eb177961b5e48f70f4fabf1f759b 100644
--- a/www/templates/login/form_pubkey.html
+++ b/www/templates/login/form_pubkey.html
@@ -7,6 +7,7 @@
        ng-class="{ 'item-input-error': form.$submitted && form.pubkey.$invalid}">
   <span class="input-label hidden-xs" translate>COMMON.PUBKEY</span>
   <input name="pubkey" type="text" placeholder="{{'LOGIN.PUBKEY_HELP' | translate}}"
+         autocomplete="off"
          ng-model="formData.pubkey"
          ng-model-options="{ debounce: 650 }"
          required >
diff --git a/www/templates/login/form_scrypt_advanced.html b/www/templates/login/form_scrypt_advanced.html
index d516ad76430bdfec31f40edbe145de2b4ff60c6e..304993129ed0f93cf38eba08835ccf76e7b1db76 100644
--- a/www/templates/login/form_scrypt_advanced.html
+++ b/www/templates/login/form_scrypt_advanced.html
@@ -13,6 +13,7 @@
     <label class="item item-input">
       <span class="input-label" translate>LOGIN.SCRYPT.N</span>
       <input class="no-padding-right" type="number" placeholder="N"
+             autocomplete="off"
              ng-model="formData.scrypt.params.N"
              ng-model-options="{ debounce: 650 }"
              ng-change="onScryptFormChanged()"
@@ -24,6 +25,7 @@
       <span class="input-label" translate>LOGIN.SCRYPT.r</span>
       <input class="no-padding-right" type="number" placeholder="r"
              ng-model="formData.scrypt.params.r"
+             autocomplete="off"
              ng-model-options="{ debounce: 650 }"
              ng-change="onScryptFormChanged()"
              required>
@@ -33,6 +35,7 @@
     <label class="item item-input">
       <span class="input-label" translate>LOGIN.SCRYPT.p</span>
       <input class="no-padding-right" type="number" placeholder="p"
+             autocomplete="off"
              ng-model="formData.scrypt.params.p"
              ng-model-options="{ debounce: 650 }"
              ng-change="onScryptFormChanged()"
diff --git a/www/templates/wallet/item_tx.html b/www/templates/wallet/item_tx.html
index 5959b6d7f4f5bdad6cee62bc5a064cd1aac3a72a..e7c1cd0dc1a95e2008c3a01b799ef36a74e897af 100644
--- a/www/templates/wallet/item_tx.html
+++ b/www/templates/wallet/item_tx.html
@@ -37,7 +37,7 @@
   <div class="col col-10 no-padding">
 
     <!-- not locked TX -->
-    <span ng-if="::!tx.lockedOutputs" class="badge item-note" ng-class="{'badge-calm': tx.amount > 0}">
+    <span ng-if="::!tx.lockedOutputs" class="badge item-note" ng-class="{'badge-calm': tx.amount > 0, 'badge-white': tx.amount <= 0}">
       <span ng-bind-html=":rebind:tx.amount| formatAmount:{currency:$root.currency.name}"></span>
     </span>
 
diff --git a/www/templates/wallet/list/item_wallet.html b/www/templates/wallet/list/item_wallet.html
index 17d903d72c8ae82afe8a6d0626b62ede5751a838..dd5719bf727f826c4153360174ea068ae2ae94dd 100644
--- a/www/templates/wallet/list/item_wallet.html
+++ b/www/templates/wallet/list/item_wallet.html
@@ -28,7 +28,7 @@
   <cs-extension-point name="item-wallet"></cs-extension-point>
 
   <span class="badge" ng-if=":rebind:formData.showBalance && walletData.sources"
-        ng-class=":rebind:{'badge-assertive': (walletData.balance <= 0), 'badge-balanced': (walletData.balance > 0) }">
+        ng-class=":rebind:{'badge-calm': (walletData.balance > 0) }">
     <ion-spinner class="ion-spinner-small" ng-if="formData.updatingWalletId==wallet.id" icon="android"></ion-spinner>
     <span ng-bind-html=":rebind:walletData.balance|formatAmount:{useRelative: formData.useRelative, currency: currency}"></span>
   </span>
diff --git a/www/templates/wallet/list/item_wallet_light.html b/www/templates/wallet/list/item_wallet_light.html
index b8882d5648f776c6b78f05e5ff36cf618a5bf591..1ebc6785e331007fcc6b26fb7824a3b1786e9d6c 100644
--- a/www/templates/wallet/list/item_wallet_light.html
+++ b/www/templates/wallet/list/item_wallet_light.html
@@ -1,10 +1,10 @@
 
-<div class="item item-avatar item-icon-right item-border-large item-wallet"
+<div class="item item-avatar item-icon-right item-border item-wallet"
      ng-click="select($event, wallet)"
      ng-init="walletData=wallet.data;">
 
   <i ng-if="::!walletData.avatar" class="item-image icon"
-     ng-class=":rebind:{'ion-card': !walletData.isMember, 'ion-persion': walletData.isMember}"></i>
+     ng-class="::{'ion-card': !walletData.isMember, 'ion-person': walletData.isMember}"></i>
   <i ng-if="::walletData.avatar" class="item-image avatar" style="background-image: url({{::walletData.avatar.src}})"></i>
   <div class="badge badge-button badge-avatar badge-assertive ion-locked " ng-hide="::wallet.isAuth()">
   </div>
@@ -25,7 +25,7 @@
   </h4>
 
   <div class="badge" ng-if="formData.showBalance"
-        ng-class="{'badge-assertive': (walletData.balance <= 0), 'badge-balanced': (walletData.balance > 0) }">
+        ng-class="{'badge-calm': (walletData.balance > 0) }">
     <span ng-bind-html="walletData.balance|formatAmount:{useRelative: formData.useRelative, currency: currency}"></span>
   </div>
 
diff --git a/www/templates/wallet/list/popover_wallets.html b/www/templates/wallet/list/popover_wallets.html
index 080071a94c6de2aa39f934c2a42ef111b029c91d..458d603b401be0f7407a96c8008ea7ecba547b18 100644
--- a/www/templates/wallet/list/popover_wallets.html
+++ b/www/templates/wallet/list/popover_wallets.html
@@ -1,7 +1,12 @@
-<ion-popover-view class="fit popover-wallets"
-                  ng-controller="PopoverWalletSelectModalCtrl">
-  <ion-header-bar>
-    <h1 class="title" translate>ACCOUNT.SELECT_WALLET_MODAL.TITLE</h1>
+<ion-popover-view class="fit popover-wallets popover-light">
+  <ion-header-bar class="stable-bg block">
+    <div class="title" translate>ACCOUNT.SELECT_WALLET_MODAL.TITLE</div>
+
+    <div class="pull-right">
+      <a class="positive"
+         ng-click="showNewWalletModal()"
+         translate>ACCOUNT.WALLET_LIST.BTN_NEW</a>
+    </div>
   </ion-header-bar>
   <ion-content scroll="true">
 
@@ -9,15 +14,30 @@
       <ion-spinner icon="android"></ion-spinner>
     </div>
 
-    <div class="center padding gray" ng-if="!loading && !wallets.length">
+    <div class="center padding gray" ng-if="!loading && !wallets.length && !defaultWallet">
       {{:locale:'ACCOUNT.WALLET_LIST.NO_WALLET'|translate}}
     </div>
 
     <ion-list ng-if="!loading">
-      <ng-repeat ng-repeat="wallet in wallets track by wallet.id"
+
+      <ng-include ng-if="defaultWallet" ng-init="wallet = defaultWallet" src="'templates/wallet/list/item_wallet_light.html'">
+      </ng-include>
+
+      <ng-repeat ng-repeat="wallet in :rebind:wallets | filter:filterFn(formData) track by wallet.id"
                  ng-include="'templates/wallet/list/item_wallet_light.html'">
 
       </ng-repeat>
     </ion-list>
   </ion-content>
+
+  <ion-footer-bar class="stable-bg block">
+
+    <!-- show all -->
+    <div class="pull-right">
+      <a class="positive"
+         ui-sref="app.view_wallets"
+         ng-click="closePopover()"
+         translate>COMMON.NOTIFICATIONS.SHOW_ALL</a>
+    </div>
+  </ion-footer-bar>
 </ion-popover-view>
diff --git a/www/templates/wallet/list/view_wallets.html b/www/templates/wallet/list/view_wallets.html
index e0eb1e16668248e0e5e2d0073b1c0ceca5b3d0f2..b92075b1ea2863d59c69ddd97defd13c572548df 100644
--- a/www/templates/wallet/list/view_wallets.html
+++ b/www/templates/wallet/list/view_wallets.html
@@ -62,9 +62,12 @@
     </div>
 
     <ion-list class="{{::motion.ionListClass}}">
+
+      <!-- default wallet -->
       <ng-include ng-if="defaultWallet" ng-init="wallet = defaultWallet" src="'templates/wallet/list/item_wallet.html'">
       </ng-include>
 
+      <!-- children wallets -->
       <ng-include ng-repeat="wallet in wallets track by wallet.id"
                  src="'templates/wallet/list/item_wallet.html'">
       </ng-include>
diff --git a/www/templates/wallet/popup_register.html b/www/templates/wallet/popup_register.html
index 9e06a73954f3ccbf310e60c83984ab6b7fa0ee51..c2279f5736469a0cacef5b3994408d534af6f28c 100644
--- a/www/templates/wallet/popup_register.html
+++ b/www/templates/wallet/popup_register.html
@@ -3,7 +3,7 @@
     <label class="item item-input"
            ng-class="{'item-input-error': registerForm.$submitted && registerForm.pseudo.$invalid}">
       <input name="pseudo" type="text" placeholder="{{'ACCOUNT.NEW.PSEUDO_HELP' | translate}}"
-             ng-model="walletData.newUid"
+             ng-model="formData.newUid"
              ng-minlength="3"
              required>
     </label>
diff --git a/www/templates/wallet/transfer_form.html b/www/templates/wallet/transfer_form.html
index 45881d1ce05dbc696f3a376cb1b863e48a3a3dce..f53f2a2e4bc58ab243eaa70cc4456b8ed2cf41f2 100644
--- a/www/templates/wallet/transfer_form.html
+++ b/www/templates/wallet/transfer_form.html
@@ -55,6 +55,7 @@
       </div>
       <input type="text"
              tabindex="3"
+             autocomplete="off"
              class="hidden-xs hidden-sm"
              name="amount"
              placeholder="{{::'TRANSFER.AMOUNT_HELP' | translate}} ({{$root.currency.name | currencySymbolNoHtml:formData.useRelative}})"
@@ -65,6 +66,7 @@
       <!-- mobile: come OVER the input -->
       <input type="text"
              tabindex="-1"
+             autocomplete="off"
              class="visible-xs visible-sm"
              name="amount"
              placeholder="{{::'TRANSFER.AMOUNT_HELP' | translate}} ({{$root.currency.name | currencySymbolNoHtml:formData.useRelative}})"
@@ -151,6 +153,7 @@
       <input type="text" placeholder="{{'TRANSFER.COMMENT_HELP' | translate}}"
              name="comment"
              tabindex="6"
+             autocomplete="off"
              ng-model="formData.comment"
              ng-maxlength="255"
              ng-pattern="commentPattern">
@@ -163,6 +166,7 @@
              id="{{commentInputId}}"
              tabindex="7"
              name="comment"
+             autocomplete="off"
              ng-model="formData.comment"
              ng-model-options="{ debounce: 650 }"
              ng-maxlength="255"
diff --git a/www/templates/wallet/view_wallet.html b/www/templates/wallet/view_wallet.html
index abdd5b998d5f80fc2c8120534c5d337f5982ccd4..18d39744f0676fdd0754f0435927787fc2ad54db 100644
--- a/www/templates/wallet/view_wallet.html
+++ b/www/templates/wallet/view_wallet.html
@@ -22,8 +22,11 @@
     </ion-refresher>
 
     <div class="positive-900-bg hero"
+         style="max-width: 100%; display: block"
          ng-class="{'hero-qrcode-active': toggleQRCode}">
-      <div class="content" ng-if="!loading">
+      <div class="content" ng-if="!loading"
+           style="max-width: 100%">
+
 
         <i class="avatar"
            ng-if=":rebind:!formData.avatar"
@@ -31,23 +34,50 @@
         <i class="avatar"
            ng-if=":rebind:formData.avatar"
            style="background-image: url({{:rebind:formData.avatar.src}})"></i>
-        <h3 class="light">
-          <ng-if ng-if=":rebind:formData.name">{{:rebind:formData.name}}</ng-if>
-          <ng-if ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</ng-if>
-          <ng-if ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</ng-if>
+
+        <h3 class="light" ng-if=":rebind:!enableSelectWallet">
+          <span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span>
+          <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span>
+          <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span>
+        </h3>
+
+        <!-- select wallet button -->
+        <h3 class="light " ng-if=":rebind:enableSelectWallet">
+          <a class="hidden-xs hidden-sm"
+           style="color: lightgray;"
+           title="{{:locale:'ACCOUNT.SELECT_WALLET_MODAL.TITLE'|translate}}"
+           ng-click="showSelectWalletPopover($event)">
+            <span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span>
+            <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span>
+            <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span>
+            <small><i class="ion-arrow-down-b"></i></small>
+          </a>
+          <a class="visible-xs visible-sm"
+             style="color: lightgray;"
+             title="{{:locale:'ACCOUNT.SELECT_WALLET_MODAL.TITLE'|translate}}"
+             ng-click="showSelectWalletModal($event)">
+            <span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span>
+            <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span>
+            <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span>
+            <small><i class="ion-arrow-down-b"></i></small>
+          </a>
         </h3>
 
-        <h4 class="assertive"><ng-if ng-if=":rebind:(formData.name || formData.uid) && !formData.isMember" translate>WOT.NOT_MEMBER_PARENTHESIS</ng-if></h4>
+        <h4 class="assertive">
+          <span ng-if=":rebind:(formData.name || formData.uid) && !formData.isMember" translate>WOT.NOT_MEMBER_PARENTHESIS</span>
+        </h4>
       </div>
       <h4 class="content light" ng-if="loading">
         <ion-spinner icon="android"></ion-spinner>
       </h4>
+
     </div>
 
-    <div ng-attr-id="{{ qrcodeId }}"
-         class="qrcode spin"
-         ng-class="{'active': toggleQRCode}"
-         ng-click="toggleQRCode = !toggleQRCode"></div>
+    <a ng-attr-id="{{ qrcodeId }}"
+       class="qrcode spin pull-right"
+       ng-class="{'active': toggleQRCode}"
+       ng-click="toggleQRCode = !toggleQRCode">
+    </a>
 
     <!-- Buttons bar-->
     <a id="wallet-share-anchor"></a>
@@ -163,17 +193,6 @@
             <i class="gray icon ion-ios-arrow-right"></i>
           </a>
 
-          <!-- Other wallets -->
-          <a class="item item-icon-left item-icon-right ink visible-xs visible-sm"
-             ng-if="isDefaultWallet"
-             ui-sref="app.view_wallets">
-            <i class="icon ion-card " style="top: -5px; left: 22px; font-size: 18px;"></i>
-            <i class="icon-secondary ion-card" style="top: 22px; left: 19px; font-size: 20px; background-color: white; width:17px; height: 14px;"></i>
-            <span translate>ACCOUNT.WALLET_LIST.TITLE</span>
-            <span class="badge badge-calm" ng-if="formData.children.length>0">{{:rebind:formData.children.length}}</span>
-            <i class="gray icon ion-ios-arrow-right"></i>
-          </a>
-
           <!-- Events -->
           <span class="item item-divider" ng-if="formData.events.length">
             {{:locale:'ACCOUNT.EVENTS' | translate}}
diff --git a/www/templates/wallet/view_wallet_tx.html b/www/templates/wallet/view_wallet_tx.html
index db5c3155da90a3fc694f3f7a51cfce21052a319d..190cb36b986469dbcddf2e5f135ea741600cbfaf 100644
--- a/www/templates/wallet/view_wallet_tx.html
+++ b/www/templates/wallet/view_wallet_tx.html
@@ -2,20 +2,13 @@
           class="view-wallet-tx">
   <ion-nav-title>
     <!-- no title on large screen-->
-    <span class="visible-xs visible-sm" ng-if="!loading && enableSelectWallet">
-      <span ng-if="formData.name || formData.uid">{{formData.name || formData.uid}} </span>
-      <i class="ion-key"></i> {{formData.pubkey|formatPubkey}}
+    <span class="visible-xs visible-sm" translate>
+      MENU.TRANSACTIONS
     </span>
   </ion-nav-title>
 
   <ion-nav-buttons side="secondary">
     <cs-extension-point name="nav-buttons"></cs-extension-point>
-
-    <button class="button button-icon button-clear visible-xs visible-sm"
-            ng-if="enableSelectWallet && !loading"
-            ng-click="showSelectWalletModal()">
-      <i class=" ion-arrow-down-b"></i>
-    </button>
   </ion-nav-buttons>
 
   <ion-content scroll="true" class="refresher-positive-900-bg"
@@ -27,23 +20,43 @@
 
     <div class="positive-900-bg hero">
       <div class="content" ng-if="!loading">
-        <!-- select wallet button -->
-        <a class="hidden-xs hidden-sm"
-           style="color: lightgray;"
-           ng-if="enableSelectWallet"
-           title="{{:locale:'ACCOUNT.SELECT_WALLET_MODAL.TITLE'|translate}}"
-           ng-click="showSelectWalletPopover($event)">
-          <span ng-if="formData.name || formData.uid">{{formData.name || formData.uid}} </span>
-          <i class="ion-key"></i> {{formData.pubkey|formatPubkey}}
-          <i class="ion-arrow-down-b"></i>
-        </a>
 
         <h1 class="light">
           <span ng-bind-html=":balance:rebind:formData.balance | formatAmount:{currency: $root.currency.name}"></span>
         </h1>
-        <h4 ng-if="!loading && $root.settings.expertMode"
-               style="font-style: italic;">
-          (<span ng-bind-html=":balance:rebind:formData.balance | formatAmount:{useRelative:!$root.settings.useRelative, currency: $root.currency.name}"></span>)
+        <h4>
+          <ng-if ng-if="!loading && $root.settings.expertMode"
+                 style="font-style: italic;">
+            (<span ng-bind-html=":balance:rebind:formData.balance | formatAmount:{useRelative:!$root.settings.useRelative, currency: $root.currency.name}"></span>)
+          </ng-if>
+          <ng-if ng-if=":rebind:!enableSelectWallet"
+             style="color: lightgray;">
+            <span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span>
+            <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span>
+            <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span>
+          </ng-if>
+
+          <!-- select wallet button -->
+          <ng-if ng-if=":rebind:enableSelectWallet">
+            <a class="hidden-xs hidden-sm"
+               style="color: lightgray;"
+               title="{{:locale:'ACCOUNT.SELECT_WALLET_MODAL.TITLE'|translate}}"
+               ng-click="showSelectWalletPopover($event)">
+              <span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span>
+              <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span>
+              <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span>
+              <small><i class="ion-arrow-down-b"></i></small>
+            </a>
+            <a class="visible-xs visible-sm"
+               style="color: lightgray;"
+               title="{{:locale:'ACCOUNT.SELECT_WALLET_MODAL.TITLE'|translate}}"
+               ng-click="showSelectWalletModal($event)">
+              <span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span>
+              <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span>
+              <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span>
+              <small><i class="ion-arrow-down-b"></i></small>
+            </a>
+          </ng-if>
         </h4>
         <div class="helptip-anchor-center">
           <a id="helptip-wallet-balance">&nbsp;</a>
diff --git a/www/templates/wot/item_content_identity.html b/www/templates/wot/item_content_identity.html
index c1a419f2c7b24e2fd1e76ead24fbbc797f9b000a..70b500fe41e24ae4421b563868f6bdaa9e3d3d49 100644
--- a/www/templates/wot/item_content_identity.html
+++ b/www/templates/wot/item_content_identity.html
@@ -25,7 +25,7 @@
   </span>
   <b class="ion-key"></b>
   {{::item.pubkey | formatPubkey}}
-  <span ng-if="::!item.uid" class="assertive" translate>WOT.NOT_MEMBER_PARENTHESIS</span>
+  <span ng-if="::(!item.uid && !item.revoked)" class="assertive" translate>WOT.NOT_MEMBER_PARENTHESIS</span>
   <span ng-if="::item.revoked" class="assertive" translate>WOT.IDENTITY_REVOKED_PARENTHESIS</span>
 </h4>
 <h4 ng-if="::item.events||item.tags">
diff --git a/www/templates/wot/view_identity.html b/www/templates/wot/view_identity.html
index 776b1476eb8f51a33bf80b6e1656ab140636c78c..055a26520abe9c522af014ae8ad8693718511b97 100644
--- a/www/templates/wot/view_identity.html
+++ b/www/templates/wot/view_identity.html
@@ -10,7 +10,7 @@
                    on-refresh="doUpdate(true)">
     </ion-refresher>
 
-    <div class="hero">
+    <div class="hero" ng-class="{'hero-qrcode-active': toggleQRCode}">
       <div class="content" ng-if="!loading">
         <i class="avatar"
            ng-if=":rebind:!formData.avatar"
@@ -38,6 +38,11 @@
 
     </div>
 
+    <div ng-attr-id="{{ qrcodeId }}"
+         class="qrcode spin"
+         ng-class="{'active': toggleQRCode}"
+         ng-click="toggleQRCode = !toggleQRCode"></div>
+
     <!-- button bar-->
     <a id="wot-share-anchor-{{::formData.pubkey}}"></a>
     <div class="hidden-xs hidden-sm padding text-center">
@@ -105,7 +110,7 @@
             <span translate>WOT.REGISTERED_SINCE</span>
             {{:rebind:formData.sigDate|medianDate}}
           </h5>
-          <span class="badge badge-stable">{{:rebind:formData.uid}}</span>
+          <span class="badge badge-energized">{{:rebind:formData.uid}}</span>
         </ion-item>
 
         <!-- Received certifications count -->
diff --git a/www/templates/wot/view_identity_tx.html b/www/templates/wot/view_identity_tx.html
index 8c90520c08db9dc66392cb7a44f131a4b6c371d3..1db23ab9eae32e6f9fce5f4af3de90fbd9f9be8b 100644
--- a/www/templates/wot/view_identity_tx.html
+++ b/www/templates/wot/view_identity_tx.html
@@ -1,6 +1,9 @@
 <ion-view left-buttons="leftButtons">
   <ion-nav-title>
-    <span class="visible-xs visible-sm">{{::formData.name||formData.uid||(formData.pubkey|formatPubkey)}}</span>
+    <span class="visible-xs visible-sm" ng-if="!loading">
+      <span ng-if="formData.name || formData.uid">{{formData.name || formData.uid}} </span>
+      <i class="ion-key"></i> {{formData.pubkey|formatPubkey}}
+    </span>
     <span class="hidden-xs hidden-sm"
           ng-if="!loading">
       <ng-if ng-if="formData.name || formData.uid">{{'WOT.OPERATIONS.TITLE'|translate: {uid: formData.name || formData.uid} }}</ng-if>