summaryrefslogtreecommitdiff
path: root/web-ui
diff options
context:
space:
mode:
authorAnike Arni <anikarni@gmail.com>2017-03-13 18:41:59 -0300
committerGitHub <noreply@github.com>2017-03-13 18:41:59 -0300
commit99a6a41ffea6de9e4b3df43265282d76c3391fd1 (patch)
tree2b4d7b3c5ebd267ad252ab05c440a90033e4f962 /web-ui
parent8595d3d4f31b761574c08d6f9cdf5bfc00f53a99 (diff)
parent412d95d64b5d26d4f5e00a85b7b62da23e9bb168 (diff)
Merge branch 'master' into makefile-tests
Diffstat (limited to 'web-ui')
-rw-r--r--web-ui/.babelrc7
-rw-r--r--web-ui/.eslintignore1
-rw-r--r--web-ui/.eslintrc.json18
-rw-r--r--web-ui/.jshintignore6
-rw-r--r--web-ui/app/account_recovery.html12
-rw-r--r--web-ui/app/images/dead-mail.svg30
-rw-r--r--web-ui/app/images/forgot-my-password.svg255
-rw-r--r--web-ui/app/images/hive-bg.pngbin0 -> 3356 bytes
-rw-r--r--web-ui/app/images/lab.svg9
-rw-r--r--web-ui/app/images/logo-orange.svg29
-rw-r--r--web-ui/app/images/welcome.svg91
-rw-r--r--web-ui/app/index.html42
-rw-r--r--web-ui/app/js/account_recovery.js13
-rw-r--r--web-ui/app/js/account_recovery/page.js27
-rw-r--r--web-ui/app/js/page/default.js2
-rw-r--r--web-ui/app/locales/en_US/translation.json28
-rw-r--r--web-ui/app/locales/pt_BR/translation.json28
-rw-r--r--web-ui/app/sandbox.html2
-rw-r--r--web-ui/app/scss/account_recovery/page.scss176
-rw-r--r--web-ui/app/scss/base/_colors.scss1
-rw-r--r--web-ui/app/scss/base/_fonts.scss23
-rw-r--r--web-ui/config/alias-webpack.js1
-rw-r--r--web-ui/config/compass.rb2
-rw-r--r--web-ui/config/copy-webpack.js88
-rw-r--r--web-ui/config/imagemin.js15
-rw-r--r--web-ui/config/loaders-webpack.js4
-rw-r--r--web-ui/config/protected-assets-webpack.js25
-rw-r--r--web-ui/config/public-assets-webpack.js10
-rw-r--r--web-ui/karma.conf.js2
-rw-r--r--web-ui/package.json64
-rw-r--r--web-ui/postcss.config.js5
-rw-r--r--web-ui/src/backup_account/backup_account.html14
-rw-r--r--web-ui/src/backup_account/backup_account.js30
-rw-r--r--web-ui/src/backup_account/page.js89
-rw-r--r--web-ui/src/backup_account/page.scss133
-rw-r--r--web-ui/src/backup_account/page.spec.js80
-rw-r--r--web-ui/src/common/app.js45
-rw-r--r--web-ui/src/common/footer/footer.js40
-rw-r--r--web-ui/src/common/footer/footer.scss53
-rw-r--r--web-ui/src/common/footer/footer.spec.js17
-rw-r--r--web-ui/src/common/header/header.js46
-rw-r--r--web-ui/src/common/header/header.scss88
-rw-r--r--web-ui/src/common/header/header.spec.js17
-rw-r--r--web-ui/src/common/i18n.js40
-rw-r--r--web-ui/src/common/input_field/input_field.js47
-rw-r--r--web-ui/src/common/input_field/input_field.scss43
-rw-r--r--web-ui/src/common/input_field/input_field.spec.js20
-rw-r--r--web-ui/src/common/materialPixTheme.js31
-rw-r--r--web-ui/src/common/submit_button/submit_button.js57
-rw-r--r--web-ui/src/common/submit_button/submit_button.scss40
-rw-r--r--web-ui/src/common/submit_button/submit_button.spec.js20
-rw-r--r--web-ui/src/common/util.js8
-rw-r--r--web-ui/src/common/util.spec.js20
-rw-r--r--web-ui/src/interstitial/interstitial.html18
-rw-r--r--web-ui/src/interstitial/interstitial.js60
-rw-r--r--web-ui/src/interstitial/jquery-2.1.3.min.js4
-rw-r--r--web-ui/src/interstitial/snap.svg-min.js20
-rw-r--r--web-ui/src/login/_login_disclaimer_banner.html9
-rw-r--r--web-ui/src/login/about/welcome.js36
-rw-r--r--web-ui/src/login/about/welcome.scss49
-rw-r--r--web-ui/src/login/about/welcome.spec.js17
-rw-r--r--web-ui/src/login/error/auth_error.js31
-rw-r--r--web-ui/src/login/error/auth_error.scss29
-rw-r--r--web-ui/src/login/error/auth_error.spec.js17
-rw-r--r--web-ui/src/login/error/generic_error.js37
-rw-r--r--web-ui/src/login/error/generic_error.scss59
-rw-r--r--web-ui/src/login/error/generic_error.spec.js17
-rw-r--r--web-ui/src/login/login.css74
-rw-r--r--web-ui/src/login/login.html24
-rw-r--r--web-ui/src/login/login.js38
-rw-r--r--web-ui/src/login/normalize.min.css1
-rw-r--r--web-ui/src/login/opensans.css69
-rw-r--r--web-ui/src/login/page.js61
-rw-r--r--web-ui/src/login/page.scss100
-rw-r--r--web-ui/src/login/page.spec.js53
-rw-r--r--web-ui/test/integration/backup_account.spec.js59
-rw-r--r--web-ui/test/integration/i18n.js14
-rw-r--r--web-ui/test/integration/setup.js15
-rw-r--r--web-ui/test/integration/translations.spec.js23
-rw-r--r--web-ui/test/jasmine.json9
-rw-r--r--web-ui/test/spec/account_recovery/page.spec.js12
-rw-r--r--web-ui/test/test-main.js2
-rw-r--r--web-ui/webpack.config.js62
-rw-r--r--web-ui/webpack.production.config.js62
-rw-r--r--web-ui/webpack.test.config.js11
85 files changed, 2500 insertions, 586 deletions
diff --git a/web-ui/.babelrc b/web-ui/.babelrc
index 86c445f5..e74e4d82 100644
--- a/web-ui/.babelrc
+++ b/web-ui/.babelrc
@@ -1,3 +1,8 @@
{
- "presets": ["es2015", "react"]
+ "presets": ["es2015", "react"],
+ "env": {
+ "test": {
+ "plugins": ["istanbul"]
+ }
+ }
}
diff --git a/web-ui/.eslintignore b/web-ui/.eslintignore
new file mode 100644
index 00000000..8cccef3c
--- /dev/null
+++ b/web-ui/.eslintignore
@@ -0,0 +1 @@
+src/interstitial
diff --git a/web-ui/.eslintrc.json b/web-ui/.eslintrc.json
new file mode 100644
index 00000000..554498f9
--- /dev/null
+++ b/web-ui/.eslintrc.json
@@ -0,0 +1,18 @@
+/* see https://github.com/airbnb/javascript for lint rules */
+{
+ "extends": "airbnb",
+ "plugins": [
+ "react",
+ "jsx-a11y",
+ "import"
+ ],
+ "rules": {
+ "import/no-extraneous-dependencies": ["off"],
+ "import/extensions": ["off"],
+ "import/no-unresolved": ["off"],
+ "react/jsx-filename-extension": ["off"],
+ "jsx-quotes": ["error", "prefer-single"],
+ "no-undef": ["off"],
+ "comma-dangle": ["off"]
+ }
+}
diff --git a/web-ui/.jshintignore b/web-ui/.jshintignore
index df04d870..d69450f8 100644
--- a/web-ui/.jshintignore
+++ b/web-ui/.jshintignore
@@ -2,6 +2,6 @@ app/node_modules
app/bower_components
app/js/lib
app/js/generated
-app/js/account_recovery.js
-app/js/account_recovery
-test/spec/account_recovery
+src/
+test/unit
+test/integration
diff --git a/web-ui/app/account_recovery.html b/web-ui/app/account_recovery.html
deleted file mode 100644
index bd451ebc..00000000
--- a/web-ui/app/account_recovery.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8"/>
- <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
- <title>Pixelated Account Recovery</title>
- </head>
- <body>
- <div id="root"/>
- <script type="text/javascript" src="/assets/account_recovery.js"></script>
- </body>
-</html>
diff --git a/web-ui/app/images/dead-mail.svg b/web-ui/app/images/dead-mail.svg
new file mode 100644
index 00000000..0dc673e2
--- /dev/null
+++ b/web-ui/app/images/dead-mail.svg
@@ -0,0 +1,30 @@
+<svg width="86px" height="119px" viewBox="482 331 86 119" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 41.1 (35376) - http://www.bohemiancoding.com/sketch -->
+ <desc>Created with Sketch.</desc>
+ <defs></defs>
+ <g id="Group-2-Copy" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(482.000000, 331.000000)">
+ <g id="Group-20" transform="translate(15.000000, 49.000000)">
+ <path d="M0.423828125,0.793328536 C19.8945313,15.7606394 47.2617188,2.79332854 54.1413981,9.29988178 C58.9511371,13.8487599 51.15625,23.359375 45.0316162,20.7606394 C35.2938756,16.628831 1.79484049,9.93393156 1.79484049,26.7543688 C1.79484049,36.4128289 30.3603083,19.8833117 39.3109946,28.3312933 C45.0316162,33.7306229 39.3109946,35.7515676 28.7154948,35.7515676 C18.119995,35.7515676 13.4375,42.0689248 28.9879557,47.0555613" id="Path-6" stroke="#9D9D99" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="3.9"></path>
+ <ellipse id="Oval-Copy-6" stroke="#4A4A4A" stroke-width="1.3" fill="#C2C2C2" cx="8.27083333" cy="18.1377706" rx="3.22916667" ry="3.24303377"></ellipse>
+ <ellipse id="Oval-Copy-7" stroke="#4A4A4A" stroke-width="1.3" fill="#C2C2C2" cx="40.5625" cy="29.7430338" rx="3.22916667" ry="3.24303377"></ellipse>
+ <path d="M22.5295708,27.0946057 L22.5295708,28.0471347 C22.5295708,28.179431 22.483189,28.2918812 22.3904241,28.3844887 C22.2976592,28.4770961 22.1850177,28.5233992 22.0524963,28.5233992 L19.9851736,28.5233992 L19.9851736,30.587212 C19.9851736,30.7195083 19.9387919,30.8319585 19.8460269,30.924566 C19.753262,31.0171734 19.6406205,31.0634765 19.5080992,31.0634765 L18.5539502,31.0634765 C18.4214289,31.0634765 18.3087874,31.0171734 18.2160225,30.924566 C18.1232575,30.8319585 18.0768758,30.7195083 18.0768758,30.587212 L18.0768758,28.5233992 L16.0095531,28.5233992 C15.8770317,28.5233992 15.7643902,28.4770961 15.6716253,28.3844887 C15.5788604,28.2918812 15.5324786,28.179431 15.5324786,28.0471347 L15.5324786,27.0946057 C15.5324786,26.9623093 15.5788604,26.8498591 15.6716253,26.7572516 C15.7643902,26.6646442 15.8770317,26.6183412 16.0095531,26.6183412 L18.0768758,26.6183412 L18.0768758,24.5545283 C18.0768758,24.422232 18.1232575,24.3097818 18.2160225,24.2171743 C18.3087874,24.1245669 18.4214289,24.0782638 18.5539502,24.0782638 L19.5080992,24.0782638 C19.6406205,24.0782638 19.753262,24.1245669 19.8460269,24.2171743 C19.9387919,24.3097818 19.9851736,24.422232 19.9851736,24.5545283 L19.9851736,26.6183412 L22.0524963,26.6183412 C22.1850177,26.6183412 22.2976592,26.6646442 22.3904241,26.7572516 C22.483189,26.8498591 22.5295708,26.9623093 22.5295708,27.0946057 Z" id="-copy-24" fill="#4A4A4A" transform="translate(19.031025, 27.570870) rotate(-315.000000) translate(-19.031025, -27.570870) "></path>
+ <path d="M31.5712375,7.46302672 L31.5712375,8.41555571 C31.5712375,8.54785206 31.5248557,8.66030228 31.4320908,8.75290973 C31.3393258,8.84551718 31.2266844,8.89182021 31.094163,8.89182021 L29.0268403,8.89182021 L29.0268403,10.955633 C29.0268403,11.0879294 28.9804585,11.2003796 28.8876936,11.292987 C28.7949286,11.3855945 28.6822872,11.4318975 28.5497658,11.4318975 L27.5956169,11.4318975 C27.4630955,11.4318975 27.3504541,11.3855945 27.2576891,11.292987 C27.1649242,11.2003796 27.1185424,11.0879294 27.1185424,10.955633 L27.1185424,8.89182021 L25.0512197,8.89182021 C24.9186984,8.89182021 24.8060569,8.84551718 24.713292,8.75290973 C24.620527,8.66030228 24.5741453,8.54785206 24.5741453,8.41555571 L24.5741453,7.46302672 C24.5741453,7.33073036 24.620527,7.21828015 24.713292,7.1256727 C24.8060569,7.03306525 24.9186984,6.98676222 25.0512197,6.98676222 L27.1185424,6.98676222 L27.1185424,4.9229494 C27.1185424,4.79065304 27.1649242,4.67820283 27.2576891,4.58559538 C27.3504541,4.49298793 27.4630955,4.4466849 27.5956169,4.4466849 L28.5497658,4.4466849 C28.6822872,4.4466849 28.7949286,4.49298793 28.8876936,4.58559538 C28.9804585,4.67820283 29.0268403,4.79065304 29.0268403,4.9229494 L29.0268403,6.98676222 L31.094163,6.98676222 C31.2266844,6.98676222 31.3393258,7.03306525 31.4320908,7.1256727 C31.5248557,7.21828015 31.5712375,7.33073036 31.5712375,7.46302672 Z" id="-copy-26" fill="#4A4A4A" transform="translate(28.072691, 7.939291) rotate(-315.000000) translate(-28.072691, -7.939291) "></path>
+ </g>
+ <g id="Group-21" transform="translate(8.000000, 0.000000)">
+ <path d="M63.5945025,5.72253441 C63.5945025,4.94340261 63.3172727,4.29707737 62.7584127,3.7791318 C62.1951523,3.26118623 61.530681,3 60.7561979,3 L5.83830458,3 C5.06382147,3 4.39935017,3.26118623 3.84049019,3.7791318 C3.27722975,4.29707737 3,4.94340261 3,5.72253441 L3,38.9241736 C3,39.7033054 3.27722975,40.3496307 3.84049019,40.8720031 C4.39935017,41.3899487 5.06382147,41.646708 5.83830458,41.646708 L60.7561979,41.646708 C61.530681,41.646708 62.1951523,41.3899487 62.7584127,40.8720031 C63.3172727,40.3496307 63.5945025,39.7033054 63.5945025,38.9241736 L63.5945025,5.72253441 Z" id="Path-Copy-23" fill="#E9E7F3"></path>
+ <g id="Group-15-Copy-12" transform="translate(46.000000, 21.000000)" stroke="#4A4A4A" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
+ <path d="M0.126411855,6.74710425 L6.90379521,0.747104247" id="Line-Copy-15"></path>
+ <path d="M7.12641186,6.74710425 L0.349028504,0.747104247" id="Line-Copy-16"></path>
+ </g>
+ <g id="Group-15-Copy-13" transform="translate(14.000000, 21.000000)" stroke="#4A4A4A" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
+ <path d="M0.126411855,6.74710425 L6.90379521,0.747104247" id="Line-Copy-15"></path>
+ <path d="M7.12641186,6.74710425 L0.349028504,0.747104247" id="Line-Copy-16"></path>
+ </g>
+ <path d="M36.6410997,12.4069862 C36.6410997,11.1691397 36.6090736,10.1422897 36.5445129,9.31940308 C36.4794439,8.49651646 36.4026829,8.08155654 36.313213,8.08155654 L32.8393145,8.08155654 C32.7498446,8.08155654 29.8027555,8.49651646 29.7381948,9.31940308 C29.6731259,10.1422897 29.6410997,11.1691397 29.6410997,12.4069862 L29.6410997,65.1561284 C29.6410997,66.3939749 29.6731259,67.4208249 29.7381948,68.2507447 C29.8027555,69.0736314 32.7498446,69.4815581 32.8393145,69.4815581 L36.313213,69.4815581 C36.4026829,69.4815581 36.4794439,69.0736314 36.5445129,68.2507447 C36.6090736,67.4208249 36.6410997,66.3939749 36.6410997,65.1561284 L36.6410997,12.4069862 Z" id="Path-Copy-24" fill="#DDD9ED" transform="translate(33.141100, 38.781557) rotate(-90.000000) translate(-33.141100, -38.781557) "></path>
+ <path d="M43.7921986,32.9004703 C44.5373914,31.517688 43.1883355,30 41.1808117,30 L26.8197896,30 C24.8122658,30 23.4616038,31.517688 24.2084027,32.9004703 C25.7614231,35.7800625 29.5612641,36.6216164 34.0003006,36.6216164 C38.4393372,36.6216164 42.2391782,35.7800625 43.7921986,32.9004703" id="Fill-147-Copy-14" stroke="#4A4A4A" fill="#FEFEFE" transform="translate(34.000000, 33.310808) scale(1, -1) translate(-34.000000, -33.310808) "></path>
+ <path d="M3,3 C5.36446037,3 30.743339,18.2128906 33.6328125,18.2128906 C36.9547202,18.2128906 64.421875,3.3515625 64.421875,3.3515625" id="Path-4-Copy-8" stroke="#918DA9" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
+ <path d="M63.3007929,5.57787538 C63.3007929,4.79874358 63.0235631,4.15241834 62.4647031,3.63447277 C61.9014427,3.1165272 61.2369714,2.85534097 60.4624883,2.85534097 L5.544595,2.85534097 C4.77011189,2.85534097 4.10564058,3.1165272 3.54678061,3.63447277 C2.98352016,4.15241834 2.70629041,4.79874358 2.70629041,5.57787538 L2.70629041,38.7795146 C2.70629041,39.5586464 2.98352016,40.2049716 3.54678061,40.7273441 C4.10564058,41.2452897 4.77011189,41.502049 5.544595,41.502049 L60.4624883,41.502049 C61.2369714,41.502049 61.9014427,41.2452897 62.4647031,40.7273441 C63.0235631,40.2049716 63.3007929,39.5586464 63.3007929,38.7795146 L63.3007929,5.57787538 Z M64.3965105,1.62466688 C65.4702257,2.70482687 66.0070833,4.02403867 66.0070833,5.57787538 L66.0070833,38.7795146 C66.0070833,40.3377782 65.4702257,41.65699 64.3965105,42.73715 C63.3183948,43.81731 62.0114545,44.35739 60.4624883,44.35739 L5.544595,44.35739 C3.99562877,44.35739 2.68868853,43.81731 1.61057283,42.73715 C0.536857611,41.65699 0,40.3377782 0,38.7795146 L0,5.57787538 C0,4.02403867 0.536857611,2.70482687 1.61057283,1.62466688 C2.68868853,0.540079998 3.99562877,0 5.544595,0 L60.4624883,0 C62.0114545,0 63.3183948,0.540079998 64.3965105,1.62466688 L64.3965105,1.62466688 Z" id="Fill-1-Copy-103" fill="#918DA9"></path>
+ </g>
+ <ellipse id="Oval-3" fill="#E9E9EA" cx="43" cy="113.5" rx="43" ry="5.5"></ellipse>
+ </g>
+</svg>
diff --git a/web-ui/app/images/forgot-my-password.svg b/web-ui/app/images/forgot-my-password.svg
index 6dc329e7..ec7b6028 100644
--- a/web-ui/app/images/forgot-my-password.svg
+++ b/web-ui/app/images/forgot-my-password.svg
@@ -1,154 +1,119 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg width="196px" height="188px" viewBox="0 0 196 188" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="199px" height="188px" viewBox="212 191 199 188" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41.1 (35376) - http://www.bohemiancoding.com/sketch -->
- <title>forgot my password</title>
<desc>Created with Sketch.</desc>
<defs>
- <rect id="path-1" x="0" y="0" width="90.2876472" height="27.6057028" rx="2.88"></rect>
- <mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="90.2876472" height="27.6057028" fill="white">
+ <rect id="path-1" x="0" y="0" width="90" height="28" rx="3"></rect>
+ <mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="90" height="28" fill="white">
<use xlink:href="#path-1"></use>
</mask>
- <polygon id="path-3" points="0.121297732 17.5509524 33.2929655 17.5509524 33.2929655 0.000329080357 0.121297732 0.000329080357"></polygon>
- <polygon id="path-5" points="5.99413237e-20 0.275440259 5.99413237e-20 18.1796056 18.0471564 18.1796056 18.0471564 0.275440259 0 0.275440259"></polygon>
- <polygon id="path-7" points="9.76054543 9.64424834 9.76054543 0.228162381 0.268030426 0.228162381 0.268030426 9.64424834 9.76054543 9.64424834"></polygon>
- <polygon id="path-9" points="9.13138947 0.39270256 0.187202129 0.39270256 0.187202129 9.2663544 9.13138947 9.2663544 9.13138947 0.39270256"></polygon>
+ <polygon id="path-3" points="9.13138947 0.39270256 0.187202129 0.39270256 0.187202129 9.2663544 9.13138947 9.2663544 9.13138947 0.39270256"></polygon>
</defs>
- <g id="Account-Recovery-MVP" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
- <g id="02_Account_Recovery" transform="translate(-215.000000, -191.000000)">
- <g id="forgot-my-password" transform="translate(214.000000, 193.000000)">
- <g id="password" transform="translate(106.063455, 65.049180)">
- <g id="Group-15" transform="translate(0.000000, 0.120003)">
- <use id="Rectangle-10" stroke="#4A4A4A" mask="url(#mask-2)" stroke-width="4.32" fill="#E9E7F3" xlink:href="#path-1"></use>
- <path d="M88.4818942,3.95510169 C88.4818942,3.48325164 88.4598632,3.09183057 88.4154516,2.77815753 C88.3706903,2.46448448 88.3178859,2.30630747 88.256339,2.30630747 L83.8921082,2.30630747 C83.8305614,2.30630747 83.777757,2.46448448 83.7333454,2.77815753 C83.688584,3.09183057 83.666553,3.48325164 83.666553,3.95510169 L83.666553,24.0623482 C83.666553,24.5341983 83.688584,24.9256193 83.7333454,25.2419733 C83.777757,25.5556464 83.8305614,25.7111424 83.8921082,25.7111424 L88.256339,25.7111424 C88.3178859,25.7111424 88.3706903,25.5556464 88.4154516,25.2419733 C88.4598632,24.9256193 88.4818942,24.5341983 88.4818942,24.0623482 L88.4818942,3.95510169 Z" id="Path" fill="#DDD9ED"></path>
- </g>
- <ellipse id="Oval-5" fill="#4A4A4A" cx="12.6402706" cy="13.9228545" rx="3.00958824" ry="3.00061987"></ellipse>
- <ellipse id="Oval-5-Copy" fill="#4A4A4A" cx="22.270953" cy="13.9228545" rx="3.00958824" ry="3.00061987"></ellipse>
- <ellipse id="Oval-5-Copy-2" fill="#4A4A4A" cx="31.9016353" cy="13.9228545" rx="3.00958824" ry="3.00061987"></ellipse>
- <ellipse id="Oval-5-Copy-3" fill="#4A4A4A" cx="41.5323177" cy="13.9228545" rx="3.00958824" ry="3.00061987"></ellipse>
- <ellipse id="Oval-5-Copy-4" fill="#4A4A4A" cx="51.1630001" cy="13.9228545" rx="3.00958824" ry="3.00061987"></ellipse>
- <ellipse id="Oval-5-Copy-5" fill="#4A4A4A" cx="60.7936824" cy="13.9228545" rx="3.00958824" ry="3.00061987"></ellipse>
- </g>
- <path d="M45.9074104,21.4963848 L46.2133627,19.8163066 C46.4901781,18.337256 47.0255892,17.0664404 47.8196121,16.0038215 C48.6136351,14.9412027 49.8702123,13.8283415 51.5893813,12.6652046 C53.3959656,11.4589886 54.5432752,10.5471605 55.0313443,9.92969276 C55.5194135,9.31222505 55.7634444,8.6229691 55.7634444,7.86190424 C55.7634444,6.15309825 54.7946053,5.29870807 52.8568978,5.29870807 C52.1284364,5.29870807 51.3526366,5.41358406 50.5294752,5.64333949 C49.7063137,5.87309491 48.2384859,6.47619387 46.1259478,7.45265443 L44.1154042,2.69243296 C47.4663269,0.897468679 50.7079317,0 53.8403158,0 C56.4190693,0 58.4587308,0.628228075 59.9593614,1.88470307 C61.4599919,3.14117807 62.2102959,4.89662681 62.2102959,7.15110194 C62.2102959,8.34295823 62.0026876,9.41633077 61.5874645,10.3712518 C61.1722415,11.3261728 60.5712698,12.2092819 59.7845315,13.0206058 C58.9977931,13.8319297 57.6137371,14.8909427 55.632322,16.1976767 C54.6998914,16.8151444 53.9969366,17.3392661 53.5234367,17.7700575 C53.0499368,18.200849 52.6675003,18.6639428 52.3761157,19.1593529 C52.0847311,19.6547631 51.8079199,20.4337659 51.5456738,21.4963848 L45.9074104,21.4963848 Z M43.8531594,29.4659863 C43.8531594,28.1592523 44.2538072,27.1217785 45.0551148,26.3535338 C45.8564224,25.5852891 46.9490982,25.2011725 48.3331749,25.2011725 C49.3238825,25.2011725 50.1142513,25.474003 50.704305,26.0196721 C51.2943588,26.5653413 51.5893813,27.3335745 51.5893813,28.3243947 C51.5893813,29.5736899 51.1887335,30.5860346 50.3874259,31.3614591 C49.5861183,32.1368837 48.5444341,32.5245902 47.2623419,32.5245902 C46.184219,32.5245902 45.3465009,32.2517597 44.7491625,31.7060905 C44.1518241,31.1604214 43.8531594,30.4137275 43.8531594,29.4659863 Z" id="?" stroke="#4A4A4A" stroke-width="2.2464" stroke-linecap="round" stroke-linejoin="round" fill="#F36F45"></path>
- <path d="M9.19313741,26.578352 L9.49908969,24.8982738 C9.77590503,23.4192232 10.3113162,22.1484076 11.1053391,21.0857887 C11.8993621,20.0231699 13.1559392,18.9103087 14.8751082,17.7471719 C16.6816926,16.5409559 17.8290022,15.6291277 18.3170713,15.01166 C18.8051405,14.3941923 19.0491714,13.7049363 19.0491714,12.9438715 C19.0491714,11.2350655 18.0803322,10.3806753 16.1426248,10.3806753 C15.4141634,10.3806753 14.6383636,10.4955513 13.8152021,10.7253067 C12.9920407,10.9550621 11.5242129,11.5581611 9.41167475,12.5346216 L7.40113123,7.77440017 C10.7520539,5.97943589 13.9936586,5.08196721 17.1260428,5.08196721 C19.7047963,5.08196721 21.7444578,5.71019529 23.2450883,6.96667029 C24.7457189,8.22314528 25.4960229,9.97859402 25.4960229,12.2330692 C25.4960229,13.4249254 25.2884145,14.498298 24.8731915,15.453219 C24.4579685,16.40814 23.8569968,17.2912492 23.0702585,18.102573 C22.2835201,18.9138969 20.8994641,19.9729099 18.918049,21.2796439 C17.9856184,21.8971116 17.2826636,22.4212333 16.8091637,22.8520248 C16.3356638,23.2828162 15.9532272,23.74591 15.6618427,24.2413202 C15.3704581,24.7367303 15.0936469,25.5157331 14.8314008,26.578352 L9.19313741,26.578352 Z M7.13888642,34.5479535 C7.13888642,33.2412195 7.5395342,32.2037457 8.34084179,31.435501 C9.14214937,30.6672563 10.2348251,30.2831397 11.6189019,30.2831397 C12.6096094,30.2831397 13.3999782,30.5559702 13.990032,31.1016393 C14.5800858,31.6473085 14.8751082,32.4155417 14.8751082,33.406362 C14.8751082,34.6556571 14.4744605,35.6680018 13.6731529,36.4434263 C12.8718453,37.2188509 11.830161,37.6065574 10.5480689,37.6065574 C9.46994598,37.6065574 8.63222789,37.3337269 8.03488951,36.7880578 C7.43755113,36.2423886 7.13888642,35.4956947 7.13888642,34.5479535 Z" id="?-" stroke="#4A4A4A" stroke-width="2.2464" stroke-linecap="round" stroke-linejoin="round" fill="#F36F45" transform="translate(16.317455, 21.344262) rotate(-27.000000) translate(-16.317455, -21.344262) "></path>
- <path d="M76.5026379,35.725893 L76.8085902,34.0458148 C77.0854056,32.5667642 77.6208167,31.2959486 78.4148397,30.2333297 C79.2088626,29.1707109 80.4654398,28.0578497 82.1846088,26.8947128 C83.9911931,25.6884968 85.1385027,24.7766687 85.6265719,24.159201 C86.114641,23.5417332 86.358672,22.8524773 86.358672,22.0914124 C86.358672,20.3826064 85.3898328,19.5282163 83.4521253,19.5282163 C82.7236639,19.5282163 81.9478641,19.6430923 81.1247027,19.8728477 C80.3015412,20.1026031 78.8337135,20.7057021 76.7211753,21.6821626 L74.7106318,16.9219412 C78.0615544,15.1269769 81.3031592,14.2295082 84.4355434,14.2295082 C87.0142969,14.2295082 89.0539583,14.8577363 90.5545889,16.1142113 C92.0552194,17.3706863 92.8055235,19.126135 92.8055235,21.3806101 C92.8055235,22.5724664 92.5979151,23.645839 92.182692,24.60076 C91.767469,25.555681 91.1664974,26.4387901 90.379759,27.250114 C89.5930206,28.0614378 88.2089647,29.1204509 86.2275495,30.4271849 C85.2951189,31.0446526 84.5921642,31.5687743 84.1186642,31.9995657 C83.6451643,32.4303572 83.2627278,32.893451 82.9713432,33.3888611 C82.6799586,33.8842713 82.4031474,34.6632741 82.1409013,35.725893 L76.5026379,35.725893 Z M74.448387,43.6954945 C74.448387,42.3887605 74.8490347,41.3512867 75.6503423,40.583042 C76.4516499,39.8147973 77.5443257,39.4306807 78.9284024,39.4306807 C79.91911,39.4306807 80.7094788,39.7035112 81.2995325,40.2491803 C81.8895863,40.7948495 82.1846088,41.5630827 82.1846088,42.5539029 C82.1846088,43.8031981 81.783961,44.8155428 80.9826534,45.5909673 C80.1813458,46.3663919 79.1396616,46.7540984 77.8575694,46.7540984 C76.7794465,46.7540984 75.9417284,46.4812679 75.34439,45.9355987 C74.7470517,45.3899296 74.448387,44.6432357 74.448387,43.6954945 Z" id="?-" stroke="#4A4A4A" stroke-width="2.2464" stroke-linecap="round" stroke-linejoin="round" fill="#F36F45" transform="translate(83.626955, 30.491803) rotate(16.000000) translate(-83.626955, -30.491803) "></path>
- <path d="M156.694951,112.747806 L154.943709,114.493128 C154.703342,114.732683 154.411471,114.852459 154.068088,114.852459 C153.724706,114.852459 153.432835,114.732683 153.192467,114.493128 L149.406694,110.720152 L145.620921,114.493128 C145.380554,114.732683 145.088683,114.852459 144.7453,114.852459 C144.401918,114.852459 144.110047,114.732683 143.869679,114.493128 L142.118437,112.747806 C141.87807,112.508251 141.757887,112.217367 141.757887,111.875145 C141.757887,111.532923 141.87807,111.242039 142.118437,111.002484 L145.90421,107.229508 L142.118437,103.456533 C141.87807,103.216977 141.757887,102.926093 141.757887,102.583872 C141.757887,102.24165 141.87807,101.950766 142.118437,101.71121 L143.869679,99.9658884 C144.110047,99.7263332 144.401918,99.6065574 144.7453,99.6065574 C145.088683,99.6065574 145.380554,99.7263332 145.620921,99.9658884 L149.406694,103.738864 L153.192467,99.9658884 C153.432835,99.7263332 153.724706,99.6065574 154.068088,99.6065574 C154.411471,99.6065574 154.703342,99.7263332 154.943709,99.9658884 L156.694951,101.71121 C156.935319,101.950766 157.055501,102.24165 157.055501,102.583872 C157.055501,102.926093 156.935319,103.216977 156.694951,103.456533 L152.909178,107.229508 L156.694951,111.002484 C156.935319,111.242039 157.055501,111.532923 157.055501,111.875145 C157.055501,112.217367 156.935319,112.508251 156.694951,112.747806 Z" id="x" stroke="#4A4A4A" stroke-width="2.16" stroke-linecap="round" stroke-linejoin="round" fill="#F2565B"></path>
- <g id="Character" transform="translate(1.019841, 43.704918)">
- <path d="M77.6847286,38.3927084 C77.6847286,58.3843401 61.3476823,74.5915477 41.1958942,74.5915477 C21.044106,74.5915477 4.70705965,58.3843401 4.70705965,38.3927084 C4.70705965,18.4010767 21.044106,2.19386905 41.1958942,2.19386905 C61.3476823,2.19386905 77.6847286,18.4010767 77.6847286,38.3927084" id="Fill-35" fill="#4D4C4E"></path>
- <g id="shadow-copy-3" transform="translate(4.422889, 130.535208)">
- <ellipse id="Oval-Copy" fill="#F7F9FA" cx="47.5460571" cy="5.48467263" rx="47.5460571" ry="5.48467263"></ellipse>
- <ellipse id="Oval" fill="#E9EAEC" cx="46.9931959" cy="5.48467263" rx="19.3501395" ry="2.19386905"></ellipse>
- </g>
- <path d="M77.2678714,19.1305381 C77.2678714,20.6092059 76.0593169,21.8070584 74.5699091,21.8070584 C73.0793954,21.8070584 71.8719467,20.6092059 71.8719467,19.1305381 C71.8719467,17.6518704 73.0793954,16.4540179 74.5699091,16.4540179 C76.0593169,16.4540179 77.2678714,17.6518704 77.2678714,19.1305381" id="Fill-1" fill="#4D4C4E"></path>
- <path d="M74.0720023,10.3550619 C74.0720023,11.8337297 72.8634479,13.0315822 71.37404,13.0315822 C69.8835264,13.0315822 68.6760777,11.8337297 68.6760777,10.3550619 C68.6760777,8.87639418 69.8835264,7.67854168 71.37404,7.67854168 C72.8634479,7.67854168 74.0720023,8.87639418 74.0720023,10.3550619" id="Fill-3" fill="#4D4C4E"></path>
- <path d="M65.1049265,7.06425834 C65.1049265,8.54292608 63.8963721,9.74077858 62.4069642,9.74077858 C60.9164506,9.74077858 59.7090019,8.54292608 59.7090019,7.06425834 C59.7090019,5.5855906 60.9164506,4.3877381 62.4069642,4.3877381 C63.8963721,4.3877381 65.1049265,5.5855906 65.1049265,7.06425834" id="Fill-5" fill="#4D4C4E"></path>
- <path d="M81.4654142,19.1305381 C81.4654142,20.6092059 80.2568598,21.8070584 78.7674519,21.8070584 C77.2769383,21.8070584 76.0694896,20.6092059 76.0694896,19.1305381 C76.0694896,17.6518704 77.2769383,16.4540179 78.7674519,16.4540179 C80.2568598,16.4540179 81.4654142,17.6518704 81.4654142,19.1305381" id="Fill-7" fill="#4D4C4E"></path>
- <path d="M77.2678714,13.134694 C77.2678714,14.6133617 76.0593169,15.8112142 74.5699091,15.8112142 C73.0793954,15.8112142 71.8719467,14.6133617 71.8719467,13.134694 C71.8719467,11.6560263 73.0793954,10.4581738 74.5699091,10.4581738 C76.0593169,10.4581738 77.2678714,11.6560263 77.2678714,13.134694" id="Fill-9" fill="#4D4C4E"></path>
- <path d="M81.4563473,15.6949392 C81.4563473,17.7143956 79.8055039,19.3521189 77.7698693,19.3521189 C75.7342346,19.3521189 74.0833913,17.7143956 74.0833913,15.6949392 C74.0833913,13.6754827 75.7342346,12.0377595 77.7698693,12.0377595 C79.8055039,12.0377595 81.4563473,13.6754827 81.4563473,15.6949392" id="Fill-11" fill="#4D4C4E"></path>
- <path d="M80.9056976,43.4221532 C80.9056976,44.9885757 79.6263769,46.2577289 78.0474056,46.2577289 C76.4684342,46.2577289 75.1891135,44.9885757 75.1891135,43.4221532 C75.1891135,41.8557307 76.4684342,40.5865774 78.0474056,40.5865774 C79.6263769,40.5865774 80.9056976,41.8557307 80.9056976,43.4221532" id="Fill-13" fill="#4D4C4E"></path>
- <path d="M80.5850381,46.5539012 C80.5850381,48.032569 79.3764837,49.2304215 77.8870758,49.2304215 C76.3965622,49.2304215 75.1891135,48.032569 75.1891135,46.5539012 C75.1891135,45.0752335 76.3965622,43.877381 77.8870758,43.877381 C79.3764837,43.877381 80.5850381,45.0752335 80.5850381,46.5539012" id="Fill-15" fill="#4D4C4E"></path>
- <path d="M43.8131387,80.4184639 C43.8131387,81.2137414 43.1640798,81.857642 42.3624311,81.857642 C41.5607825,81.857642 40.9117235,81.2137414 40.9117235,80.4184639 C40.9117235,79.6231864 41.5607825,78.9792858 42.3624311,78.9792858 C43.1640798,78.9792858 43.8131387,79.6231864 43.8131387,80.4184639" id="Fill-17" fill="#4D4C4E"></path>
- <path d="M43.123168,85.560893 C31.5208244,85.560893 22.1144452,94.892515 22.1144452,106.402649 L22.1144452,116.27506 C22.1144452,118.698188 24.0947937,120.662798 26.5373342,120.662798 L67.1283551,120.662798 C67.1283551,109.152664 79.3496095,84.157588 58.6032797,85.560893 L43.123168,85.560893 Z" id="Fill-19" fill="#B78F65"></path>
- <path d="M50.8632238,94.3363692 L50.8632238,94.3363692 C47.1988603,94.3363692 44.2288903,91.390003 44.2288903,87.754762 L44.2288903,72.3976787 L57.4975574,72.3976787 L57.4975574,87.754762 C57.4975574,91.390003 54.5275874,94.3363692 50.8632238,94.3363692" id="Fill-21" fill="#B78F65"></path>
- <path d="M57.6188551,81.8773868 C57.6188551,81.8773868 52.6663251,82.9743213 50.9845216,82.9743213 C49.302718,82.9743213 44.350188,81.8773868 44.350188,81.8773868 L44.350188,79.6835178 C44.350188,79.6835178 49.302718,80.7804523 50.9845216,80.7804523 C52.6663251,80.7804523 57.6188551,79.6835178 57.6188551,79.6835178 L57.6188551,81.8773868 Z" id="Fill-23" fill="#292929" opacity="0.200000003"></path>
- <path d="M17.7037191,60.8541979 C17.7037191,62.6751092 16.2154169,64.1504861 14.3810237,64.1504861 C12.5455247,64.1504861 11.0572226,62.6751092 11.0572226,60.8541979 C11.0572226,59.0332866 12.5455247,57.5579096 14.3810237,57.5579096 C16.2154169,57.5579096 17.7037191,59.0332866 17.7037191,60.8541979" id="Fill-25" fill="#4D4C4E"></path>
- <path d="M20.6471517,58.4749469 C20.6471517,62.0103669 17.7578995,64.8766568 14.1941566,64.8766568 C10.6293081,64.8766568 7.7400558,62.0103669 7.7400558,58.4749469 C7.7400558,54.9395269 10.6293081,52.073237 14.1941566,52.073237 C17.7578995,52.073237 20.6471517,54.9395269 20.6471517,58.4749469" id="Fill-27" fill="#4D4C4E"></path>
- <path d="M20.188277,66.4748904 C20.188277,68.3703932 18.6391601,69.9071985 16.728472,69.9071985 C14.817784,69.9071985 13.2686671,68.3703932 13.2686671,66.4748904 C13.2686671,64.5793875 14.817784,63.0425823 16.728472,63.0425823 C18.6391601,63.0425823 20.188277,64.5793875 20.188277,66.4748904" id="Fill-29" fill="#4D4C4E"></path>
- <path d="M40.4746315,77.3689859 C40.4746315,79.8480579 38.4489483,81.857642 35.950016,81.857642 C33.4510837,81.857642 31.4265063,79.8480579 31.4265063,77.3689859 C31.4265063,74.8899139 33.4510837,72.8803298 35.950016,72.8803298 C38.4489483,72.8803298 40.4746315,74.8899139 40.4746315,77.3689859" id="Fill-31" fill="#4D4C4E"></path>
- <path d="M33.1263331,74.5685121 C33.1263331,76.9795742 31.1559361,78.9332146 28.7266643,78.9332146 C26.2962867,78.9332146 24.3258897,76.9795742 24.3258897,74.5685121 C24.3258897,72.1585469 26.2962867,70.2038096 28.7266643,70.2038096 C31.1559361,70.2038096 33.1263331,72.1585469 33.1263331,74.5685121" id="Fill-33" fill="#4D4C4E"></path>
- <path d="M41.6871665,76.7623811 C41.6871665,79.1734432 39.7167695,81.1270836 37.2874977,81.1270836 C34.8571202,81.1270836 32.8867231,79.1734432 32.8867231,76.7623811 C32.8867231,74.352416 34.8571202,72.3976787 37.2874977,72.3976787 C39.7167695,72.3976787 41.6871665,74.352416 41.6871665,76.7623811" id="Fill-33-Copy" fill="#4D4C4E"></path>
- <path d="M79.4417213,31.3470979 C79.4417213,47.6574174 66.1133452,60.8798661 49.672361,60.8798661 C33.2313767,60.8798661 19.9030006,47.6574174 19.9030006,31.3470979 C19.9030006,15.0367785 33.2313767,1.8143297 49.672361,1.8143297 C66.1133452,1.8143297 79.4417213,15.0367785 79.4417213,31.3470979" id="Fill-37" fill="#4D4C4E"></path>
- <g id="Group-49" transform="translate(34.277390, 114.785423)">
- <mask id="mask-4" fill="white">
- <use xlink:href="#path-3"></use>
- </mask>
- <g id="Clip-48"></g>
- <path d="M33.2929655,5.14056426 C33.2929655,11.9942112 25.8669348,17.5512815 16.7071316,17.5512815 C7.54732841,17.5512815 0.121297732,11.9942112 0.121297732,5.14056426 C0.121297732,-1.71308265 33.2929655,-1.71308265 33.2929655,5.14056426" id="Fill-47" fill="#EAC563" mask="url(#mask-4)"></path>
- </g>
- <path d="M50.9845216,80.7804523 L50.9845216,80.7804523 C37.5499962,80.7804523 26.6586319,69.9756472 26.6586319,56.6478927 L26.6586319,35.8061368 C26.6586319,22.4783823 37.5499962,11.6735772 50.9845216,11.6735772 L50.9845216,11.6735772 C64.419047,11.6735772 75.3104112,22.4783823 75.3104112,35.8061368 L75.3104112,56.6478927 C75.3104112,69.9756472 64.419047,80.7804523 50.9845216,80.7804523" id="Fill-50" fill="#B78F65"></path>
- <path d="M75.1891135,54.298259 C75.1891135,55.2065208 74.4460682,55.9436608 73.5305301,55.9436608 C72.6149921,55.9436608 71.8719467,55.2065208 71.8719467,54.298259 C71.8719467,53.3899972 72.6149921,52.6528572 73.5305301,52.6528572 C74.4460682,52.6528572 75.1891135,53.3899972 75.1891135,54.298259" id="Fill-52" fill="#2D2D2D"></path>
- <path d="M64.1318909,54.8467263 C64.1318909,57.8753625 61.6561788,60.3313989 58.6032797,60.3313989 C55.5503805,60.3313989 53.0746684,57.8753625 53.0746684,54.8467263 C53.0746684,51.81809 55.5503805,49.3620536 58.6032797,49.3620536 C61.6561788,49.3620536 64.1318909,51.81809 64.1318909,54.8467263" id="Fill-39" fill="#8C7052"></path>
- <path d="M59.7101076,58.1375298 C60.9319307,58.1375298 61.9215521,59.3660965 61.9204464,60.8798661 C61.9204464,61.501828 61.7534824,62.0755248 61.4715232,62.5362373 C61.0679346,63.1954949 60.4288271,63.6222025 59.7090019,63.6222025 C58.4871788,63.6222025 57.4975574,62.3936358 57.4975574,60.8787692 C57.4986631,59.3649996 58.4882845,58.1375298 59.7101076,58.1375298 L59.7101076,58.1375298 Z" id="Stroke-41" stroke="#FFC94B" stroke-width="0.936"></path>
- <path d="M75.7928379,60.3313989 C75.1083958,61.0882837 73.6079307,61.1179009 72.977669,60.3335927" id="Stroke-56" stroke="#997862" stroke-width="1.872" stroke-linecap="round"></path>
- <path d="M71.8719467,66.913006 C70.7662245,65.0134561 69.605702,66.6756472 68.9073369,67.3206072" id="Stroke-58" stroke="#EE3A52" stroke-width="1.872" stroke-linecap="round"></path>
- <path d="M71.8719467,48.2798549 C74.0944485,48.1175086 76.0559998,49.3175549 76.8123138,50.8455847" id="Stroke-62" stroke="#4D4C4E" stroke-width="1.872" stroke-linecap="round" transform="translate(74.342130, 49.555352) rotate(-29.000000) translate(-74.342130, -49.555352) "></path>
- <path d="M86.3016222,35.6777954 C86.3016222,38.4190348 84.0614289,40.6414242 81.298229,40.6414242 C78.5350291,40.6414242 76.2948358,38.4190348 76.2948358,35.6777954 C76.2948358,32.936556 78.5350291,30.7141667 81.298229,30.7141667 C84.0614289,30.7141667 86.3016222,32.936556 86.3016222,35.6777954" id="Fill-64" fill="#4D4C4E"></path>
- <path d="M36.0730829,76.0307258 C36.0730829,76.8260033 35.424024,77.4699039 34.6223753,77.4699039 C33.8207267,77.4699039 33.1716677,76.8260033 33.1716677,76.0307258 C33.1716677,75.2354483 33.8207267,74.5915477 34.6223753,74.5915477 C35.424024,74.5915477 36.0730829,75.2354483 36.0730829,76.0307258" id="Fill-66" fill="#4D4C4E"></path>
- <path d="M11.6233524,23.8649075 C11.6233524,26.1399497 9.76352753,27.9849936 7.47025957,27.9849936 C5.17699161,27.9849936 3.31716677,26.1399497 3.31716677,23.8649075 C3.31716677,21.5898653 5.17699161,19.7448215 7.47025957,19.7448215 C9.76352753,19.7448215 11.6233524,21.5898653 11.6233524,23.8649075" id="Fill-68" fill="#4D4C4E"></path>
- <path d="M65.803743,22.8790925 C65.803743,29.6976375 60.2320085,35.2261875 53.3577333,35.2261875 C46.4845637,35.2261875 40.9117235,29.6976375 40.9117235,22.8790925 C40.9117235,16.0605475 46.4845637,10.5319975 53.3577333,10.5319975 C60.2320085,10.5319975 65.803743,16.0605475 65.803743,22.8790925" id="Fill-70" fill="#4D4C4E"></path>
- <g id="Group-74" transform="translate(29.854501, 29.617232)">
- <mask id="mask-6" fill="white">
- <use xlink:href="#path-5"></use>
- </mask>
- <g id="Clip-73"></g>
- <path d="M18.0471564,9.22752292 C18.0471564,14.1714068 14.0068473,18.1796056 9.02335706,18.1796056 C4.03986684,18.1796056 -0.000442288903,14.1714068 -0.000442288903,9.22752292 C-0.000442288903,4.28363901 4.03986684,0.275440259 9.02335706,0.275440259 C14.0068473,0.275440259 18.0471564,4.28363901 18.0471564,9.22752292" id="Fill-72" fill="#4D4C4E" mask="url(#mask-6)"></path>
- </g>
- <path d="M14.2505485,49.8490926 C14.2505485,52.5409699 12.0501612,54.7238696 9.33671874,54.7238696 C6.62327632,54.7238696 4.42288903,52.5409699 4.42288903,49.8490926 C4.42288903,47.1572152 6.62327632,44.9743155 9.33671874,44.9743155 C12.0501612,44.9743155 14.2505485,47.1572152 14.2505485,49.8490926" id="Fill-75" fill="#4D4C4E"></path>
- <path d="M67.905721,7.99676238 C67.905721,10.8476952 65.5759642,13.1600332 62.7010863,13.1600332 C59.8273142,13.1600332 57.4975574,10.8476952 57.4975574,7.99676238 C57.4975574,5.14582955 59.8273142,2.83349157 62.7010863,2.83349157 C65.5759642,2.83349157 67.905721,5.14582955 67.905721,7.99676238" id="Fill-77" fill="#4D4C4E"></path>
- <path d="M56.4570727,55.4281016 C56.4570727,56.9605191 55.2042894,58.2033459 53.6595954,58.2033459 C52.1149014,58.2033459 50.8632238,56.9605191 50.8632238,55.4281016 C50.8632238,53.895684 52.1149014,52.6528572 53.6595954,52.6528572 C55.2042894,52.6528572 56.4570727,53.895684 56.4570727,55.4281016" id="Fill-79" fill="#4D4C4E"></path>
- <path d="M78.0674191,23.3722742 C78.0674191,24.9112734 76.8102129,26.1584879 75.2588846,26.1584879 C73.7075563,26.1584879 72.4503501,24.9112734 72.4503501,23.3722742 C72.4503501,21.8332751 73.7075563,20.5860605 75.2588846,20.5860605 C76.8102129,20.5860605 78.0674191,21.8332751 78.0674191,23.3722742" id="Fill-81" fill="#4D4C4E"></path>
- <path d="M67.6474243,37.1800473 C67.6474243,38.8451939 66.2862802,40.1955203 64.6077938,40.1955203 C62.9293074,40.1955203 61.5681633,38.8451939 61.5681633,37.1800473 C61.5681633,35.5149007 62.9293074,34.1645743 64.6077938,34.1645743 C66.2862802,34.1645743 67.6474243,35.5149007 67.6474243,37.1800473" id="Fill-83" fill="#4D4C4E"></path>
- <path d="M46.8693551,76.1608222 C46.8693551,78.3985687 45.0404904,80.2128984 42.784817,80.2128984 C40.5280379,80.2128984 38.700279,78.3985687 38.700279,76.1608222 C38.700279,73.9230758 40.5280379,72.1087461 42.784817,72.1087461 C45.0404904,72.1087461 46.8693551,73.9230758 46.8693551,76.1608222" id="Fill-85" fill="#4D4C4E"></path>
- <path d="M82.748826,29.6912753 C82.748826,31.3673912 81.3788361,32.7264931 79.6892925,32.7264931 C77.9997489,32.7264931 76.6308648,31.3673912 76.6308648,29.6912753 C76.6308648,28.0151593 77.9997489,26.6560574 79.6892925,26.6560574 C81.3788361,26.6560574 82.748826,28.0151593 82.748826,29.6912753" id="Fill-87" fill="#4D4C4E"></path>
- <path d="M64.4592953,34.5402743 C64.4592953,36.0189421 63.2507409,37.2167946 61.761333,37.2167946 C60.2708194,37.2167946 59.0633707,36.0189421 59.0633707,34.5402743 C59.0633707,33.0616066 60.2708194,31.8637541 61.761333,31.8637541 C63.2507409,31.8637541 64.4592953,33.0616066 64.4592953,34.5402743" id="Fill-89" fill="#4D4C4E"></path>
- <path d="M58.9997917,3.93261997 C58.9997917,5.39373675 57.8056116,6.57842604 56.3316838,6.57842604 C54.8588618,6.57842604 53.6646818,5.39373675 53.6646818,3.93261997 C53.6646818,2.47150318 54.8588618,1.28571696 56.3316838,1.28571696 C57.8056116,1.28571696 58.9997917,2.47150318 58.9997917,3.93261997" id="Fill-91" fill="#4D4C4E"></path>
- <path d="M71.7891281,37.9027077 C71.7891281,39.3813755 70.5805737,40.579228 69.0911658,40.579228 C67.6006522,40.579228 66.3932035,39.3813755 66.3932035,37.9027077 C66.3932035,36.42404 67.6006522,35.2261875 69.0911658,35.2261875 C70.5805737,35.2261875 71.7891281,36.42404 71.7891281,37.9027077" id="Fill-93" fill="#4D4C4E"></path>
- <path d="M71.0614523,19.8918107 C71.0614523,23.6071279 68.025139,26.6204071 64.278952,26.6204071 C60.5338707,26.6204071 57.4975574,23.6071279 57.4975574,19.8918107 C57.4975574,16.1764934 60.5338707,13.1632143 64.278952,13.1632143 C68.025139,13.1632143 71.0614523,16.1764934 71.0614523,19.8918107" id="Fill-95" fill="#4D4C4E"></path>
- <path d="M78.8015081,28.5329124 C78.8015081,32.2482296 75.7651948,35.2615088 72.0190078,35.2615088 C68.2739265,35.2615088 65.2376132,32.2482296 65.2376132,28.5329124 C65.2376132,24.8175952 68.2739265,21.804316 72.0190078,21.804316 C75.7651948,21.804316 78.8015081,24.8175952 78.8015081,28.5329124" id="Fill-95-Copy" fill="#4D4C4E"></path>
- <path d="M11.8909372,30.5792438 C11.8909372,32.3222727 10.4667669,33.7351244 8.70977422,33.7351244 C6.95278156,33.7351244 5.52861129,32.3222727 5.52861129,30.5792438 C5.52861129,28.8362148 6.95278156,27.4233631 8.70977422,27.4233631 C10.4667669,27.4233631 11.8909372,28.8362148 11.8909372,30.5792438" id="Fill-97" fill="#4D4C4E"></path>
- <path d="M25.976733,70.4435995 C25.976733,72.713157 24.1224368,74.5538132 21.8335917,74.5538132 C19.5458523,74.5538132 17.6915561,72.713157 17.6915561,70.4435995 C17.6915561,68.174042 19.5458523,66.3333858 21.8335917,66.3333858 C24.1224368,66.3333858 25.976733,68.174042 25.976733,70.4435995" id="Fill-99" fill="#4D4C4E"></path>
- <path d="M56.5488477,37.9221235 C56.5488477,39.4797705 55.2761614,40.7423421 53.7060358,40.7423421 C52.1359102,40.7423421 50.8632238,39.4797705 50.8632238,37.9221235 C50.8632238,36.3644764 52.1359102,35.1019048 53.7060358,35.1019048 C55.2761614,35.1019048 56.5488477,36.3644764 56.5488477,37.9221235" id="Fill-101" fill="#4D4C4E"></path>
- <path d="M65.3589109,39.0969403 C65.3589109,41.5200687 63.3785624,43.4846784 60.9360219,43.4846784 C58.4934814,43.4846784 56.5131329,41.5200687 56.5131329,39.0969403 C56.5131329,36.673812 58.4934814,34.7092022 60.9360219,34.7092022 C63.3785624,34.7092022 65.3589109,36.673812 65.3589109,39.0969403" id="Fill-103" fill="#4D4C4E"></path>
- <path d="M35.9505689,9.45217511 C35.9505689,11.8632372 33.9801718,13.8179745 31.5497943,13.8179745 C29.1194168,13.8179745 27.1490197,11.8632372 27.1490197,9.45217511 C27.1490197,7.04111302 29.1194168,5.0863757 31.5497943,5.0863757 C33.9801718,5.0863757 35.9505689,7.04111302 35.9505689,9.45217511" id="Fill-105" fill="#4D4C4E"></path>
- <path d="M40.9117235,68.0099406 C40.9117235,71.3270706 38.2015983,74.0156571 34.8578942,74.0156571 C31.5141901,74.0156571 28.8029591,71.3270706 28.8029591,68.0099406 C28.8029591,64.6928106 31.5141901,62.004224 34.8578942,62.004224 C38.2015983,62.004224 40.9117235,64.6928106 40.9117235,68.0099406" id="Fill-107" fill="#4D4C4E"></path>
- <g id="Group-111" transform="translate(12.137178, 41.683512)">
- <mask id="mask-8" fill="white">
- <use xlink:href="#path-7"></use>
- </mask>
- <g id="Clip-110"></g>
- <path d="M9.76065601,4.93620536 C9.76065601,7.53703712 7.63545783,9.64424834 5.01489608,9.64424834 C2.3932286,9.64424834 0.268030426,7.53703712 0.268030426,4.93620536 C0.268030426,2.3353736 2.3932286,0.228162381 5.01489608,0.228162381 C7.63545783,0.228162381 9.76065601,2.3353736 9.76065601,4.93620536" id="Fill-109" fill="#4D4C4E" mask="url(#mask-8)"></path>
- </g>
- <path d="M45.8811711,4.19698119 C45.8811711,6.49505902 44.0036547,8.35765384 41.6871665,8.35765384 C39.3706784,8.35765384 37.493162,6.49505902 37.493162,4.19698119 C37.493162,1.89890336 39.3706784,0.0363085328 41.6871665,0.0363085328 C44.0036547,0.0363085328 45.8811711,1.89890336 45.8811711,4.19698119" id="Fill-112" fill="#4D4C4E"></path>
- <path d="M78.195904,36.1917093 C78.195904,38.4689453 76.3349735,40.3150861 74.0394941,40.3150861 C71.742909,40.3150861 69.8819784,38.4689453 69.8819784,36.1917093 C69.8819784,33.9144732 71.742909,32.0683324 74.0394941,32.0683324 C76.3349735,32.0683324 78.195904,33.9144732 78.195904,36.1917093" id="Fill-114" fill="#4D4C4E"></path>
- <path d="M51.157346,74.1889727 C51.157346,76.3894234 49.3583359,78.1741359 47.140257,78.1741359 C44.9221782,78.1741359 43.123168,76.3894234 43.123168,74.1889727 C43.123168,71.9885221 44.9221782,70.2038096 47.140257,70.2038096 C49.3583359,70.2038096 51.157346,71.9885221 51.157346,74.1889727" id="Fill-116" fill="#4D4C4E"></path>
- <path d="M17.0377764,44.9257549 C15.5671658,46.5031468 13.085925,46.599677 11.4947907,45.1407541 C9.90476211,43.6818312 9.80745855,41.2192131 11.2780692,39.6418213 C12.7486798,38.0644295 15.2310262,37.9678992 16.8210548,39.4268221 C18.4110834,40.885745 18.508387,43.3483631 17.0377764,44.9257549" id="Fill-118" fill="#4D4C4E"></path>
- <path d="M29.0163635,5.99803798 C29.0163635,7.50961376 27.7812717,8.73488962 26.2575865,8.73488962 C24.7327955,8.73488962 23.4977037,7.50961376 23.4977037,5.99803798 C23.4977037,4.48646221 24.7327955,3.26118634 26.2575865,3.26118634 C27.7812717,3.26118634 29.0163635,4.48646221 29.0163635,5.99803798" id="Fill-120" fill="#4D4C4E"></path>
- <path d="M83.7282748,24.0667435 C83.7282748,26.453673 81.7777807,28.3886655 79.3717291,28.3886655 C76.9656775,28.3886655 75.0151834,26.453673 75.0151834,24.0667435 C75.0151834,21.679814 76.9656775,19.7448215 79.3717291,19.7448215 C81.7777807,19.7448215 83.7282748,21.679814 83.7282748,24.0667435" id="Fill-122" fill="#4D4C4E"></path>
- <g id="Group-126" transform="translate(48.341842, 57.040595)">
- <mask id="mask-10" fill="white">
- <use xlink:href="#path-9"></use>
- </mask>
- <g id="Clip-125"></g>
- <path d="M9.13138947,4.82925425 C9.13138947,7.27980598 7.12892646,9.2663544 4.65874294,9.2663544 C2.18966514,9.2663544 0.187202129,7.27980598 0.187202129,4.82925425 C0.187202129,2.37870252 2.18966514,0.392154093 4.65874294,0.392154093 C7.12892646,0.392154093 9.13138947,2.37870252 9.13138947,4.82925425" id="Fill-124" fill="#4D4C4E" mask="url(#mask-10)"></path>
- </g>
- <path d="M54.5449472,4.81269054 C54.5449472,7.38061426 52.4462864,9.46259599 49.8577906,9.46259599 C47.2692948,9.46259599 45.1706339,7.38061426 45.1706339,4.81269054 C45.1706339,2.24476681 47.2692948,0.162785084 49.8577906,0.162785084 C52.4462864,0.162785084 54.5449472,2.24476681 54.5449472,4.81269054" id="Fill-127" fill="#4D4C4E"></path>
- <path d="M52.9419817,70.6864608 C52.9419817,72.1651285 51.7334273,73.362981 50.2440194,73.362981 C48.7535058,73.362981 47.5460571,72.1651285 47.5460571,70.6864608 C47.5460571,69.2077931 48.7535058,68.0099406 50.2440194,68.0099406 C51.7334273,68.0099406 52.9419817,69.2077931 52.9419817,70.6864608" id="Fill-129" fill="#4D4C4E"></path>
- <path d="M14.3666493,42.1975355 C14.3666493,44.0129621 12.88277,45.4850482 11.0527997,45.4850482 C9.22282935,45.4850482 7.7400558,44.0129621 7.7400558,42.1975355 C7.7400558,40.3821088 9.22282935,38.9100227 11.0527997,38.9100227 C12.88277,38.9100227 14.3666493,40.3821088 14.3666493,42.1975355" id="Fill-131" fill="#4D4C4E"></path>
- <path d="M34.3757993,63.2839078 C34.3757993,67.5520801 30.8883513,71.0118116 26.585986,71.0118116 C22.2847264,71.0118116 18.7972784,67.5520801 18.7972784,63.2839078 C18.7972784,59.0157356 22.2847264,55.5560041 26.585986,55.5560041 C30.8883513,55.5560041 34.3757993,59.0157356 34.3757993,63.2839078" id="Fill-133" fill="#4D4C4E"></path>
- <path d="M14.3743893,39.4896429 C14.3743893,43.1248839 11.4044194,46.0712501 7.7400558,46.0712501 C4.07569224,46.0712501 1.10572226,43.1248839 1.10572226,39.4896429 C1.10572226,35.8544019 4.07569224,32.9080358 7.7400558,32.9080358 C11.4044194,32.9080358 14.3743893,35.8544019 14.3743893,39.4896429" id="Fill-135" fill="#4D4C4E"></path>
- <path d="M54.3060007,41.029739 C54.3060007,43.0919759 52.6208799,44.7637041 50.5421221,44.7637041 C48.4633643,44.7637041 46.7782435,43.0919759 46.7782435,41.029739 C46.7782435,38.9675021 48.4633643,37.2957739 50.5421221,37.2957739 C52.6208799,37.2957739 54.3060007,38.9675021 54.3060007,41.029739" id="Fill-137" fill="#4D4C4E"></path>
- <path d="M40.1807305,7.68084524 C40.1807305,11.051725 37.4263764,13.7841889 34.0284919,13.7841889 C30.6306074,13.7841889 27.8762533,11.051725 27.8762533,7.68084524 C27.8762533,4.30996544 30.6306074,1.57750154 34.0284919,1.57750154 C37.4263764,1.57750154 40.1807305,4.30996544 40.1807305,7.68084524" id="Fill-139" fill="#4D4C4E"></path>
- <path d="M52.7125443,5.49948124 C52.7125443,7.54197333 51.0440094,9.19834446 48.9840489,9.19834446 C46.925194,9.19834446 45.2566591,7.54197333 45.2566591,5.49948124 C45.2566591,3.45698916 46.925194,1.80061802 48.9840489,1.80061802 C51.0440094,1.80061802 52.7125443,3.45698916 52.7125443,5.49948124" id="Fill-141" fill="#4D4C4E"></path>
- <path d="M49.7575016,67.8695329 C49.7575016,72.6379073 45.8609364,76.5046015 41.053256,76.5046015 C36.2466813,76.5046015 32.3501161,72.6379073 32.3501161,67.8695329 C32.3501161,63.1011586 36.2466813,59.2344644 41.053256,59.2344644 C45.8609364,59.2344644 49.7575016,63.1011586 49.7575016,67.8695329" id="Fill-143" fill="#4D4C4E"></path>
- <path d="M52.869004,66.8109911 C52.869004,68.572668 51.4293536,69.9997798 49.6546694,69.9997798 C47.8788795,69.9997798 46.4403348,68.572668 46.4403348,66.8109911 C46.4403348,65.0493143 47.8788795,63.6222025 49.6546694,63.6222025 C51.4293536,63.6222025 52.869004,65.0493143 52.869004,66.8109911" id="Fill-145" fill="#4D4C4E"></path>
- <path d="M12.1035546,37.8379757 C9.48409853,40.5539856 5.14082151,40.6505158 2.4030532,38.0518779 C-0.335820835,35.45324 -0.432018671,31.1444812 2.18743736,28.4284714 C4.80689339,25.7113645 9.15017041,25.6159312 11.8879387,28.2145691 C14.6268128,30.813207 14.7230106,35.1219658 12.1035546,37.8379757" id="Fill-147" fill="#4D4C4E"></path>
- <path d="M19.8211772,12.0256932 C19.8211772,13.8202781 18.3549895,15.2759102 16.5449221,15.2759102 C14.7359605,15.2759102 13.2686671,13.8202781 13.2686671,12.0256932 C13.2686671,10.2311083 14.7359605,8.7754762 16.5449221,8.7754762 C18.3549895,8.7754762 19.8211772,10.2311083 19.8211772,12.0256932" id="Fill-149" fill="#4D4C4E"></path>
- <path d="M59.4955975,42.1255766 C59.4955975,44.1878135 57.8104768,45.8584448 55.7328247,45.8584448 C53.6540668,45.8584448 51.9689461,44.1878135 51.9689461,42.1255766 C51.9689461,40.0633397 53.6540668,38.3927084 55.7328247,38.3927084 C57.8104768,38.3927084 59.4955975,40.0633397 59.4955975,42.1255766" id="Fill-151" fill="#4D4C4E"></path>
- <path d="M72.977669,30.7141667 C72.977669,36.7725361 68.0273505,41.683512 61.9204464,41.683512 C55.8135424,41.683512 50.8632238,36.7725361 50.8632238,30.7141667 C50.8632238,24.6557973 55.8135424,19.7448215 61.9204464,19.7448215 C68.0273505,19.7448215 72.977669,24.6557973 72.977669,30.7141667" id="Fill-153" fill="#4D4C4E"></path>
- <path d="M62.3666054,48.0441965 C62.3666054,51.587295 59.4718245,54.4590696 55.9003416,54.4590696 C52.3288587,54.4590696 49.4340778,51.587295 49.4340778,48.0441965 C49.4340778,44.501098 52.3288587,41.6293234 55.9003416,41.6293234 C59.4718245,41.6293234 62.3666054,44.501098 62.3666054,48.0441965" id="Fill-155" fill="#4D4C4E"></path>
- <path d="M83.0231557,41.1822129 C83.0231557,42.721212 81.7637381,43.9706204 80.2124097,43.9706204 C78.6599757,43.9706204 77.400558,42.721212 77.400558,41.1822129 C77.400558,39.6421168 78.6599757,38.3927084 80.2124097,38.3927084 C81.7637381,38.3927084 83.0231557,39.6421168 83.0231557,41.1822129" id="Fill-157" fill="#4D4C4E"></path>
- <path d="M21.6815549,10.2618225 C21.6815549,11.8425051 20.3900713,13.1226277 18.7978312,13.1226277 C17.2044855,13.1226277 15.9130019,11.8425051 15.9130019,10.2618225 C15.9130019,8.68113983 17.2044855,7.40101724 18.7978312,7.40101724 C20.3900713,7.40101724 21.6815549,8.68113983 21.6815549,10.2618225" id="Fill-159" fill="#4D4C4E"></path>
- <path d="M30.798731,10.9632851 C30.798731,14.3210017 28.0543284,17.0435932 24.6697125,17.0435932 C21.2850967,17.0435932 18.5406941,14.3210017 18.5406941,10.9632851 C18.5406941,7.6055685 21.2850967,4.88297701 24.6697125,4.88297701 C28.0543284,4.88297701 30.798731,7.6055685 30.798731,10.9632851" id="Fill-161" fill="#4D4C4E"></path>
- <path d="M20.1407309,18.6478869 C20.1407309,22.0056035 17.3963283,24.728195 14.0117124,24.728195 C10.6270966,24.728195 7.88269397,22.0056035 7.88269397,18.6478869 C7.88269397,15.2901703 10.6270966,12.5675789 14.0117124,12.5675789 C17.3963283,12.5675789 20.1407309,15.2901703 20.1407309,18.6478869" id="Fill-161-Copy" fill="#4D4C4E"></path>
- <path d="M57.4975574,25.1753055 C57.4975574,34.8689159 49.5772689,42.7262579 39.8060013,42.7262579 C30.0347337,42.7262579 22.1144452,34.8689159 22.1144452,25.1753055 C22.1144452,15.4816951 30.0347337,7.62435311 39.8060013,7.62435311 C49.5772689,7.62435311 57.4975574,15.4816951 57.4975574,25.1753055" id="Fill-163" fill="#4D4C4E"></path>
- <path d="M55.2861129,53.8696867 C55.2861129,67.2933378 47.3658243,78.1741359 37.5945568,78.1741359 C27.8232892,78.1741359 19.9030006,67.2933378 19.9030006,53.8696867 C19.9030006,40.4460356 27.8232892,29.5652375 37.5945568,29.5652375 C47.3658243,29.5652375 55.2861129,40.4460356 55.2861129,53.8696867" id="Fill-163-Copy" fill="#4D4C4E"></path>
- <path d="M90.6692251,62.5252679 C90.6692251,62.5252679 88.4358572,51.0595112 85.911596,47.5688228 C83.3873347,44.0781343 76.5421116,37.3054149 76.5421116,37.3054149 C76.5421116,37.3054149 73.6033696,33.0269216 79.9748177,29.3301438 C87.0173182,33.0269216 88.7295483,38.2238345 93.5933422,44.9614608 C98.4571361,51.6990871 103.937892,68.0099406 103.937892,68.0099406 C103.937892,71.6451816 95.4393109,76.7854168 91.7749474,76.7854168 C88.1105838,76.7854168 90.6692251,66.1605089 90.6692251,62.5252679 Z" id="Fill-21-Copy" fill="#B78F65"></path>
- <path d="M67.0779773,86.8900485 C65.3043988,89.4101662 58.7817432,91.2823854 50.9841899,91.2823854 C43.1877422,91.2823854 36.6650866,89.4101662 34.8915081,86.8900485 C34.0246219,87.0207042 33.1931187,87.1728797 32.3914701,87.3411949 C34.7344956,90.2375242 42.2755214,92.243089 50.9841899,92.243089 C59.6928584,92.243089 67.2349899,90.2375242 69.5769096,87.3411949 C68.7763667,87.1728797 67.9437578,87.0207042 67.0779773,86.8900485" id="Fill-171" fill="#F2DDA0"></path>
- <path d="M62.6949379,21.2405195 C59.8725927,21.7121264 55.9410861,23.840137 58.1542717,25.9020454 C60.3406734,27.9390004 63.8368976,24.2219766 67.521713,25.0839496 C68.6631999,25.3509728 69.8227848,25.065749 70.9671359,26.7945455 C72.3484905,28.8813885 71.5723173,31.674563 70.9671359,32.0685677 C69.4525741,33.0546263 64.555367,28.7395014 64.555367,32.0685677 C64.555367,36.7278464 78.7071917,39.6963808 78.7071917,39.6963808 C78.7071917,41.0994704 81.8467575,34.8904748 81.4420761,32.0685677 C81.0373946,29.2466605 80.7369699,28.4468189 74.2259931,23.8690297 C67.7150162,19.2912404 65.5172832,20.7689127 62.6949379,21.2405195 Z" id="Fill-19-Copy-2" fill="#B78F65"></path>
- <path d="M102.555739,68.4909206 C94.5434875,71.2964592 90.9456557,59.927547 89.5775404,70.1995247 C88.9557257,74.868185 82.7603128,79.2043419 78.9133675,81.9123002 C74.2962709,85.1623866 70.6098896,88.4110647 67.078309,86.8903776 C59.7662317,91.9218277 41.143882,93.2308648 34.8907341,86.8903776 C27.4470119,90.0956203 22.2357429,97.4461785 22.2357429,106.009946 L22.2357429,115.882357 L22.2357429,129.045571 C22.2357429,129.045571 31.2170344,134.239223 43.2444658,134.530244 C55.2718972,134.821265 67.5703554,130.142506 67.5703554,130.142506 L69.7818,106.009946 C69.7818,106.009946 79.4802661,98.4338052 90.1205984,90.5183316 C97.9733176,84.6765976 109.989548,65.8879276 102.555739,68.4909206 Z" id="Fill-165" fill="#EAC563"></path>
- <path d="M64.9792694,30.7064003 C63.4011316,33.2510956 63.6192526,32.151483 67.1178269,35.7100929 C70.6164013,39.2687027 71.2544872,35.5385939 78.5243671,40.2461956 C84.8676926,44.3538084 89.271955,50.2383158 90.6692251,64.1706697 C90.9016503,66.4882105 95.0921142,66.3645388 95.0921142,66.3645388 C95.0921142,66.3645388 84.6920991,39.0136254 80.7212342,37.6819505 C76.7503693,36.3502756 76.4967725,36.8142191 72.6199723,35.3958667 C68.0712266,33.7316786 64.9792694,30.7064003 64.9792694,30.7064003 Z" id="Fill-169" fill="#292929" opacity="0.200000003"></path>
- <path d="M25.9766827,104.20878 C25.6754402,104.20878 25.4316119,106.076201 25.4316119,108.377131 L25.4316119,125.050536 L26.5217534,125.050536 L26.5217534,108.377131 C26.5217534,106.076201 26.2779251,104.20878 25.9766827,104.20878" id="Fill-167" fill="#292929" opacity="0.200000003" transform="translate(25.976683, 114.629658) scale(-1, 1) translate(-25.976683, -114.629658) "></path>
- </g>
+ <g id="girl" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(212.000000, 192.000000)">
+ <g id="password" transform="translate(108.063455, 66.049180)">
+ <use id="Form" stroke="#4A4A4A" mask="url(#mask-2)" stroke-width="4" fill="#E9E7F3" xlink:href="#path-1"></use>
+ <rect id="Shadow" fill="#DDD9ED" x="84" y="2" width="4" height="24" rx="1"></rect>
+ <circle id="oval" fill="#4A4A4A" cx="12.6306824" cy="13.9222346" r="3"></circle>
+ <circle id="oval1" fill="#4A4A4A" cx="22.2613647" cy="13.9222346" r="3"></circle>
+ <circle id="oval2" fill="#4A4A4A" cx="31.8920471" cy="13.9222346" r="3"></circle>
+ <circle id="oval3" fill="#4A4A4A" cx="41.5227295" cy="13.9222346" r="3"></circle>
+ <circle id="oval4" fill="#4A4A4A" cx="51.1534118" cy="13.9222346" r="3"></circle>
+ <circle id="oval5" fill="#4A4A4A" cx="60.7840942" cy="13.9222346" r="3"></circle>
+ <path d="M50.631496,47.6986256 L48.8802541,49.4439477 C48.6398863,49.6835029 48.3480156,49.8032787 48.0046331,49.8032787 C47.6612506,49.8032787 47.3693798,49.6835029 47.1290121,49.4439477 L43.343239,45.670972 L39.5574659,49.4439477 C39.3170981,49.6835029 39.0252274,49.8032787 38.6818449,49.8032787 C38.3384624,49.8032787 38.0465916,49.6835029 37.8062239,49.4439477 L36.0549819,47.6986256 C35.8146142,47.4590704 35.6944321,47.1681863 35.6944321,46.8259646 C35.6944321,46.4837428 35.8146142,46.1928587 36.0549819,45.9533035 L39.840755,42.1803279 L36.0549819,38.4073522 C35.8146142,38.167797 35.6944321,37.8769129 35.6944321,37.5346912 C35.6944321,37.1924694 35.8146142,36.9015853 36.0549819,36.6620301 L37.8062239,34.9167081 C38.0465916,34.6771529 38.3384624,34.557377 38.6818449,34.557377 C39.0252274,34.557377 39.3170981,34.6771529 39.5574659,34.9167081 L43.343239,38.6896837 L47.1290121,34.9167081 C47.3693798,34.6771529 47.6612506,34.557377 48.0046331,34.557377 C48.3480156,34.557377 48.6398863,34.6771529 48.8802541,34.9167081 L50.631496,36.6620301 C50.8718638,36.9015853 50.9920459,37.1924694 50.9920459,37.5346912 C50.9920459,37.8769129 50.8718638,38.167797 50.631496,38.4073522 L46.8457229,42.1803279 L50.631496,45.9533035 C50.8718638,46.1928587 50.9920459,46.4837428 50.9920459,46.8259646 C50.9920459,47.1681863 50.8718638,47.4590704 50.631496,47.6986256 Z" id="x" stroke="#4A4A4A" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="#F2565B"></path>
+ </g>
+ <g id="thais" transform="translate(0.019841, 0.704918)">
+ <g id="shadow" transform="translate(0.422889, 174.535208)">
+ <ellipse id="Oval-Copy" fill="#F7F9FA" cx="47.5460571" cy="5.48467263" rx="47.5460571" ry="5.48467263"></ellipse>
+ <ellipse id="Oval" fill="#E9EAEC" cx="46.9931959" cy="5.48467263" rx="19.3501395" ry="2.19386905"></ellipse>
+ </g>
+ <path d="M80.6847286,82.3927084 C80.6847286,102.38434 64.3476823,118.591548 44.1958942,118.591548 C24.044106,118.591548 7.70705965,102.38434 7.70705965,82.3927084 C7.70705965,62.4010767 24.044106,46.1938691 44.1958942,46.1938691 C64.3476823,46.1938691 80.6847286,62.4010767 80.6847286,82.3927084" id="Fill-35" fill="#4D4C4E"></path>
+ <path d="M80.2678714,63.1305381 C80.2678714,64.6092059 79.0593169,65.8070584 77.5699091,65.8070584 C76.0793954,65.8070584 74.8719467,64.6092059 74.8719467,63.1305381 C74.8719467,61.6518704 76.0793954,60.4540179 77.5699091,60.4540179 C79.0593169,60.4540179 80.2678714,61.6518704 80.2678714,63.1305381" id="Fill-1" fill="#4D4C4E"></path>
+ <path d="M77.0720023,54.3550619 C77.0720023,55.8337297 75.8634479,57.0315822 74.37404,57.0315822 C72.8835264,57.0315822 71.6760777,55.8337297 71.6760777,54.3550619 C71.6760777,52.8763942 72.8835264,51.6785417 74.37404,51.6785417 C75.8634479,51.6785417 77.0720023,52.8763942 77.0720023,54.3550619" id="Fill-3" fill="#4D4C4E"></path>
+ <path d="M68.1049265,51.0642583 C68.1049265,52.5429261 66.8963721,53.7407786 65.4069642,53.7407786 C63.9164506,53.7407786 62.7090019,52.5429261 62.7090019,51.0642583 C62.7090019,49.5855906 63.9164506,48.3877381 65.4069642,48.3877381 C66.8963721,48.3877381 68.1049265,49.5855906 68.1049265,51.0642583" id="Fill-5" fill="#4D4C4E"></path>
+ <path d="M84.4654142,63.1305381 C84.4654142,64.6092059 83.2568598,65.8070584 81.7674519,65.8070584 C80.2769383,65.8070584 79.0694896,64.6092059 79.0694896,63.1305381 C79.0694896,61.6518704 80.2769383,60.4540179 81.7674519,60.4540179 C83.2568598,60.4540179 84.4654142,61.6518704 84.4654142,63.1305381" id="Fill-7" fill="#4D4C4E"></path>
+ <path d="M80.2678714,57.134694 C80.2678714,58.6133617 79.0593169,59.8112142 77.5699091,59.8112142 C76.0793954,59.8112142 74.8719467,58.6133617 74.8719467,57.134694 C74.8719467,55.6560263 76.0793954,54.4581738 77.5699091,54.4581738 C79.0593169,54.4581738 80.2678714,55.6560263 80.2678714,57.134694" id="Fill-9" fill="#4D4C4E"></path>
+ <path d="M84.4563473,59.6949392 C84.4563473,61.7143956 82.8055039,63.3521189 80.7698693,63.3521189 C78.7342346,63.3521189 77.0833913,61.7143956 77.0833913,59.6949392 C77.0833913,57.6754827 78.7342346,56.0377595 80.7698693,56.0377595 C82.8055039,56.0377595 84.4563473,57.6754827 84.4563473,59.6949392" id="Fill-11" fill="#4D4C4E"></path>
+ <path d="M83.9056976,87.4221532 C83.9056976,88.9885757 82.6263769,90.2577289 81.0474056,90.2577289 C79.4684342,90.2577289 78.1891135,88.9885757 78.1891135,87.4221532 C78.1891135,85.8557307 79.4684342,84.5865774 81.0474056,84.5865774 C82.6263769,84.5865774 83.9056976,85.8557307 83.9056976,87.4221532" id="Fill-13" fill="#4D4C4E"></path>
+ <path d="M83.5850381,90.5539012 C83.5850381,92.032569 82.3764837,93.2304215 80.8870758,93.2304215 C79.3965622,93.2304215 78.1891135,92.032569 78.1891135,90.5539012 C78.1891135,89.0752335 79.3965622,87.877381 80.8870758,87.877381 C82.3764837,87.877381 83.5850381,89.0752335 83.5850381,90.5539012" id="Fill-15" fill="#4D4C4E"></path>
+ <path d="M46.8131387,124.418464 C46.8131387,125.213741 46.1640798,125.857642 45.3624311,125.857642 C44.5607825,125.857642 43.9117235,125.213741 43.9117235,124.418464 C43.9117235,123.623186 44.5607825,122.979286 45.3624311,122.979286 C46.1640798,122.979286 46.8131387,123.623186 46.8131387,124.418464" id="Fill-17" fill="#4D4C4E"></path>
+ <path d="M46.123168,129.560893 C34.5208244,129.560893 25.1144452,138.892515 25.1144452,150.402649 L25.1144452,160.27506 C25.1144452,162.698188 27.0947937,164.662798 29.5373342,164.662798 L70.1283551,164.662798 C70.1283551,153.152664 82.3496095,128.157588 61.6032797,129.560893 L46.123168,129.560893 Z" id="Fill-19" fill="#B78F65"></path>
+ <path d="M53.8632238,138.336369 L53.8632238,138.336369 C50.1988603,138.336369 47.2288903,135.390003 47.2288903,131.754762 L47.2288903,116.397679 L60.4975574,116.397679 L60.4975574,131.754762 C60.4975574,135.390003 57.5275874,138.336369 53.8632238,138.336369" id="Fill-21" fill="#B78F65"></path>
+ <path d="M60.6188551,125.877387 C60.6188551,125.877387 55.6663251,126.974321 53.9845216,126.974321 C52.302718,126.974321 47.350188,125.877387 47.350188,125.877387 L47.350188,123.683518 C47.350188,123.683518 52.302718,124.780452 53.9845216,124.780452 C55.6663251,124.780452 60.6188551,123.683518 60.6188551,123.683518 L60.6188551,125.877387 Z" id="Fill-23" fill="#292929" opacity="0.200000003"></path>
+ <path d="M20.7037191,104.854198 C20.7037191,106.675109 19.2154169,108.150486 17.3810237,108.150486 C15.5455247,108.150486 14.0572226,106.675109 14.0572226,104.854198 C14.0572226,103.033287 15.5455247,101.55791 17.3810237,101.55791 C19.2154169,101.55791 20.7037191,103.033287 20.7037191,104.854198" id="Fill-25" fill="#4D4C4E"></path>
+ <path d="M23.6471517,102.474947 C23.6471517,106.010367 20.7578995,108.876657 17.1941566,108.876657 C13.6293081,108.876657 10.7400558,106.010367 10.7400558,102.474947 C10.7400558,98.9395269 13.6293081,96.073237 17.1941566,96.073237 C20.7578995,96.073237 23.6471517,98.9395269 23.6471517,102.474947" id="Fill-27" fill="#4D4C4E"></path>
+ <path d="M23.188277,110.47489 C23.188277,112.370393 21.6391601,113.907199 19.728472,113.907199 C17.817784,113.907199 16.2686671,112.370393 16.2686671,110.47489 C16.2686671,108.579388 17.817784,107.042582 19.728472,107.042582 C21.6391601,107.042582 23.188277,108.579388 23.188277,110.47489" id="Fill-29" fill="#4D4C4E"></path>
+ <path d="M43.4746315,121.368986 C43.4746315,123.848058 41.4489483,125.857642 38.950016,125.857642 C36.4510837,125.857642 34.4265063,123.848058 34.4265063,121.368986 C34.4265063,118.889914 36.4510837,116.88033 38.950016,116.88033 C41.4489483,116.88033 43.4746315,118.889914 43.4746315,121.368986" id="Fill-31" fill="#4D4C4E"></path>
+ <path d="M36.1263331,118.568512 C36.1263331,120.979574 34.1559361,122.933215 31.7266643,122.933215 C29.2962867,122.933215 27.3258897,120.979574 27.3258897,118.568512 C27.3258897,116.158547 29.2962867,114.20381 31.7266643,114.20381 C34.1559361,114.20381 36.1263331,116.158547 36.1263331,118.568512" id="Fill-33" fill="#4D4C4E"></path>
+ <path d="M82.4417213,75.3470979 C82.4417213,91.6574174 69.1133452,104.879866 52.672361,104.879866 C36.2313767,104.879866 22.9030006,91.6574174 22.9030006,75.3470979 C22.9030006,59.0367785 36.2313767,45.8143297 52.672361,45.8143297 C69.1133452,45.8143297 82.4417213,59.0367785 82.4417213,75.3470979" id="Fill-37" fill="#4D4C4E"></path>
+ <path d="M53.9845216,124.780452 L53.9845216,124.780452 C40.5499962,124.780452 29.6586319,113.975647 29.6586319,100.647893 L29.6586319,79.8061368 C29.6586319,66.4783823 40.5499962,55.6735772 53.9845216,55.6735772 L53.9845216,55.6735772 C67.419047,55.6735772 78.3104112,66.4783823 78.3104112,79.8061368 L78.3104112,100.647893 C78.3104112,113.975647 67.419047,124.780452 53.9845216,124.780452" id="Fill-50" fill="#B78F65"></path>
+ <path d="M78.1891135,98.298259 C78.1891135,99.2065208 77.4460682,99.9436608 76.5305301,99.9436608 C75.6149921,99.9436608 74.8719467,99.2065208 74.8719467,98.298259 C74.8719467,97.3899972 75.6149921,96.6528572 76.5305301,96.6528572 C77.4460682,96.6528572 78.1891135,97.3899972 78.1891135,98.298259" id="Fill-52" fill="#2D2D2D"></path>
+ <path d="M67.1318909,98.8467263 C67.1318909,101.875362 64.6561788,104.331399 61.6032797,104.331399 C58.5503805,104.331399 56.0746684,101.875362 56.0746684,98.8467263 C56.0746684,95.81809 58.5503805,93.3620536 61.6032797,93.3620536 C64.6561788,93.3620536 67.1318909,95.81809 67.1318909,98.8467263" id="Fill-39" fill="#8C7052"></path>
+ <path d="M62.7101076,102.13753 C63.9319307,102.13753 64.9215521,103.366096 64.9204464,104.879866 C64.9204464,105.501828 64.7534824,106.075525 64.4715232,106.536237 C64.0679346,107.195495 63.4288271,107.622202 62.7090019,107.622202 C61.4871788,107.622202 60.4975574,106.393636 60.4975574,104.878769 C60.4986631,103.365 61.4882845,102.13753 62.7101076,102.13753 L62.7101076,102.13753 Z" id="Stroke-41" stroke="#FFC94B" stroke-width="0.936"></path>
+ <path d="M78.7928379,104.331399 C78.1083958,105.088284 76.6079307,105.117901 75.977669,104.333593" id="Stroke-56" stroke="#997862" stroke-width="1.872" stroke-linecap="round"></path>
+ <path d="M74.8719467,110.913006 C73.7662245,109.013456 72.605702,110.675647 71.9073369,111.320607" id="Stroke-58" stroke="#EE3A52" stroke-width="1.872" stroke-linecap="round"></path>
+ <path d="M74.8719467,92.2798549 C77.0944485,92.1175086 79.0559998,93.3175549 79.8123138,94.8455847" id="Stroke-62" stroke="#4D4C4E" stroke-width="1.872" stroke-linecap="round" transform="translate(77.342130, 93.555352) rotate(-29.000000) translate(-77.342130, -93.555352) "></path>
+ <path d="M89.3016222,79.6777954 C89.3016222,82.4190348 87.0614289,84.6414242 84.298229,84.6414242 C81.5350291,84.6414242 79.2948358,82.4190348 79.2948358,79.6777954 C79.2948358,76.936556 81.5350291,74.7141667 84.298229,74.7141667 C87.0614289,74.7141667 89.3016222,76.936556 89.3016222,79.6777954" id="Fill-64" fill="#4D4C4E"></path>
+ <path d="M39.0730829,120.030726 C39.0730829,120.826003 38.424024,121.469904 37.6223753,121.469904 C36.8207267,121.469904 36.1716677,120.826003 36.1716677,120.030726 C36.1716677,119.235448 36.8207267,118.591548 37.6223753,118.591548 C38.424024,118.591548 39.0730829,119.235448 39.0730829,120.030726" id="Fill-66" fill="#4D4C4E"></path>
+ <path d="M14.6233524,67.8649075 C14.6233524,70.1399497 12.7635275,71.9849936 10.4702596,71.9849936 C8.17699161,71.9849936 6.31716677,70.1399497 6.31716677,67.8649075 C6.31716677,65.5898653 8.17699161,63.7448215 10.4702596,63.7448215 C12.7635275,63.7448215 14.6233524,65.5898653 14.6233524,67.8649075" id="Fill-68" fill="#4D4C4E"></path>
+ <path d="M68.803743,66.8790925 C68.803743,73.6976375 63.2320085,79.2261875 56.3577333,79.2261875 C49.4845637,79.2261875 43.9117235,73.6976375 43.9117235,66.8790925 C43.9117235,60.0605475 49.4845637,54.5319975 56.3577333,54.5319975 C63.2320085,54.5319975 68.803743,60.0605475 68.803743,66.8790925" id="Fill-70" fill="#4D4C4E"></path>
+ <path d="M17.2505485,93.8490926 C17.2505485,96.5409699 15.0501612,98.7238696 12.3367187,98.7238696 C9.62327632,98.7238696 7.42288903,96.5409699 7.42288903,93.8490926 C7.42288903,91.1572152 9.62327632,88.9743155 12.3367187,88.9743155 C15.0501612,88.9743155 17.2505485,91.1572152 17.2505485,93.8490926" id="Fill-75" fill="#4D4C4E"></path>
+ <path d="M70.905721,51.9967624 C70.905721,54.8476952 68.5759642,57.1600332 65.7010863,57.1600332 C62.8273142,57.1600332 60.4975574,54.8476952 60.4975574,51.9967624 C60.4975574,49.1458296 62.8273142,46.8334916 65.7010863,46.8334916 C68.5759642,46.8334916 70.905721,49.1458296 70.905721,51.9967624" id="Fill-77" fill="#4D4C4E"></path>
+ <path d="M59.4570727,99.4281016 C59.4570727,100.960519 58.2042894,102.203346 56.6595954,102.203346 C55.1149014,102.203346 53.8632238,100.960519 53.8632238,99.4281016 C53.8632238,97.895684 55.1149014,96.6528572 56.6595954,96.6528572 C58.2042894,96.6528572 59.4570727,97.895684 59.4570727,99.4281016" id="Fill-79" fill="#4D4C4E"></path>
+ <path d="M81.0674191,67.3722742 C81.0674191,68.9112734 79.8102129,70.1584879 78.2588846,70.1584879 C76.7075563,70.1584879 75.4503501,68.9112734 75.4503501,67.3722742 C75.4503501,65.8332751 76.7075563,64.5860605 78.2588846,64.5860605 C79.8102129,64.5860605 81.0674191,65.8332751 81.0674191,67.3722742" id="Fill-81" fill="#4D4C4E"></path>
+ <path d="M70.6474243,81.1800473 C70.6474243,82.8451939 69.2862802,84.1955203 67.6077938,84.1955203 C65.9293074,84.1955203 64.5681633,82.8451939 64.5681633,81.1800473 C64.5681633,79.5149007 65.9293074,78.1645743 67.6077938,78.1645743 C69.2862802,78.1645743 70.6474243,79.5149007 70.6474243,81.1800473" id="Fill-83" fill="#4D4C4E"></path>
+ <path d="M49.8693551,120.160822 C49.8693551,122.398569 48.0404904,124.212898 45.784817,124.212898 C43.5280379,124.212898 41.700279,122.398569 41.700279,120.160822 C41.700279,117.923076 43.5280379,116.108746 45.784817,116.108746 C48.0404904,116.108746 49.8693551,117.923076 49.8693551,120.160822" id="Fill-85" fill="#4D4C4E"></path>
+ <path d="M85.748826,73.6912753 C85.748826,75.3673912 84.3788361,76.7264931 82.6892925,76.7264931 C80.9997489,76.7264931 79.6308648,75.3673912 79.6308648,73.6912753 C79.6308648,72.0151593 80.9997489,70.6560574 82.6892925,70.6560574 C84.3788361,70.6560574 85.748826,72.0151593 85.748826,73.6912753" id="Fill-87" fill="#4D4C4E"></path>
+ <path d="M67.4592953,78.5402743 C67.4592953,80.0189421 66.2507409,81.2167946 64.761333,81.2167946 C63.2708194,81.2167946 62.0633707,80.0189421 62.0633707,78.5402743 C62.0633707,77.0616066 63.2708194,75.8637541 64.761333,75.8637541 C66.2507409,75.8637541 67.4592953,77.0616066 67.4592953,78.5402743" id="Fill-89" fill="#4D4C4E"></path>
+ <path d="M61.9997917,47.93262 C61.9997917,49.3937368 60.8056116,50.578426 59.3316838,50.578426 C57.8588618,50.578426 56.6646818,49.3937368 56.6646818,47.93262 C56.6646818,46.4715032 57.8588618,45.285717 59.3316838,45.285717 C60.8056116,45.285717 61.9997917,46.4715032 61.9997917,47.93262" id="Fill-91" fill="#4D4C4E"></path>
+ <path d="M74.7891281,81.9027077 C74.7891281,83.3813755 73.5805737,84.579228 72.0911658,84.579228 C70.6006522,84.579228 69.3932035,83.3813755 69.3932035,81.9027077 C69.3932035,80.42404 70.6006522,79.2261875 72.0911658,79.2261875 C73.5805737,79.2261875 74.7891281,80.42404 74.7891281,81.9027077" id="Fill-93" fill="#4D4C4E"></path>
+ <path d="M74.0614523,63.8918107 C74.0614523,67.6071279 71.025139,70.6204071 67.278952,70.6204071 C63.5338707,70.6204071 60.4975574,67.6071279 60.4975574,63.8918107 C60.4975574,60.1764934 63.5338707,57.1632143 67.278952,57.1632143 C71.025139,57.1632143 74.0614523,60.1764934 74.0614523,63.8918107" id="Fill-95" fill="#4D4C4E"></path>
+ <path d="M14.8909372,74.5792438 C14.8909372,76.3222727 13.4667669,77.7351244 11.7097742,77.7351244 C9.95278156,77.7351244 8.52861129,76.3222727 8.52861129,74.5792438 C8.52861129,72.8362148 9.95278156,71.4233631 11.7097742,71.4233631 C13.4667669,71.4233631 14.8909372,72.8362148 14.8909372,74.5792438" id="Fill-97" fill="#4D4C4E"></path>
+ <path d="M28.976733,114.443599 C28.976733,116.713157 27.1224368,118.553813 24.8335917,118.553813 C22.5458523,118.553813 20.6915561,116.713157 20.6915561,114.443599 C20.6915561,112.174042 22.5458523,110.333386 24.8335917,110.333386 C27.1224368,110.333386 28.976733,112.174042 28.976733,114.443599" id="Fill-99" fill="#4D4C4E"></path>
+ <path d="M59.5488477,81.9221235 C59.5488477,83.4797705 58.2761614,84.7423421 56.7060358,84.7423421 C55.1359102,84.7423421 53.8632238,83.4797705 53.8632238,81.9221235 C53.8632238,80.3644764 55.1359102,79.1019048 56.7060358,79.1019048 C58.2761614,79.1019048 59.5488477,80.3644764 59.5488477,81.9221235" id="Fill-101" fill="#4D4C4E"></path>
+ <path d="M68.3589109,83.0969403 C68.3589109,85.5200687 66.3785624,87.4846784 63.9360219,87.4846784 C61.4934814,87.4846784 59.5131329,85.5200687 59.5131329,83.0969403 C59.5131329,80.673812 61.4934814,78.7092022 63.9360219,78.7092022 C66.3785624,78.7092022 68.3589109,80.673812 68.3589109,83.0969403" id="Fill-103" fill="#4D4C4E"></path>
+ <path d="M38.9505689,53.4521751 C38.9505689,55.8632372 36.9801718,57.8179745 34.5497943,57.8179745 C32.1194168,57.8179745 30.1490197,55.8632372 30.1490197,53.4521751 C30.1490197,51.041113 32.1194168,49.0863757 34.5497943,49.0863757 C36.9801718,49.0863757 38.9505689,51.041113 38.9505689,53.4521751" id="Fill-105" fill="#4D4C4E"></path>
+ <path d="M43.9117235,112.009941 C43.9117235,115.327071 41.2015983,118.015657 37.8578942,118.015657 C34.5141901,118.015657 31.8029591,115.327071 31.8029591,112.009941 C31.8029591,108.692811 34.5141901,106.004224 37.8578942,106.004224 C41.2015983,106.004224 43.9117235,108.692811 43.9117235,112.009941" id="Fill-107" fill="#4D4C4E"></path>
+ <path d="M48.8811711,48.1969812 C48.8811711,50.495059 47.0036547,52.3576538 44.6871665,52.3576538 C42.3706784,52.3576538 40.493162,50.495059 40.493162,48.1969812 C40.493162,45.8989034 42.3706784,44.0363085 44.6871665,44.0363085 C47.0036547,44.0363085 48.8811711,45.8989034 48.8811711,48.1969812" id="Fill-112" fill="#4D4C4E"></path>
+ <path d="M81.195904,80.1917093 C81.195904,82.4689453 79.3349735,84.3150861 77.0394941,84.3150861 C74.742909,84.3150861 72.8819784,82.4689453 72.8819784,80.1917093 C72.8819784,77.9144732 74.742909,76.0683324 77.0394941,76.0683324 C79.3349735,76.0683324 81.195904,77.9144732 81.195904,80.1917093" id="Fill-114" fill="#4D4C4E"></path>
+ <path d="M54.157346,118.188973 C54.157346,120.389423 52.3583359,122.174136 50.140257,122.174136 C47.9221782,122.174136 46.123168,120.389423 46.123168,118.188973 C46.123168,115.988522 47.9221782,114.20381 50.140257,114.20381 C52.3583359,114.20381 54.157346,115.988522 54.157346,118.188973" id="Fill-116" fill="#4D4C4E"></path>
+ <path d="M32.0163635,49.998038 C32.0163635,51.5096138 30.7812717,52.7348896 29.2575865,52.7348896 C27.7327955,52.7348896 26.4977037,51.5096138 26.4977037,49.998038 C26.4977037,48.4864622 27.7327955,47.2611863 29.2575865,47.2611863 C30.7812717,47.2611863 32.0163635,48.4864622 32.0163635,49.998038" id="Fill-120" fill="#4D4C4E"></path>
+ <path d="M86.7282748,68.0667435 C86.7282748,70.453673 84.7777807,72.3886655 82.3717291,72.3886655 C79.9656775,72.3886655 78.0151834,70.453673 78.0151834,68.0667435 C78.0151834,65.679814 79.9656775,63.7448215 82.3717291,63.7448215 C84.7777807,63.7448215 86.7282748,65.679814 86.7282748,68.0667435" id="Fill-122" fill="#4D4C4E"></path>
+ <path d="M57.5449472,48.8126905 C57.5449472,51.3806143 55.4462864,53.462596 52.8577906,53.462596 C50.2692948,53.462596 48.1706339,51.3806143 48.1706339,48.8126905 C48.1706339,46.2447668 50.2692948,44.1627851 52.8577906,44.1627851 C55.4462864,44.1627851 57.5449472,46.2447668 57.5449472,48.8126905" id="Fill-127" fill="#4D4C4E"></path>
+ <path d="M55.9419817,114.686461 C55.9419817,116.165129 54.7334273,117.362981 53.2440194,117.362981 C51.7535058,117.362981 50.5460571,116.165129 50.5460571,114.686461 C50.5460571,113.207793 51.7535058,112.009941 53.2440194,112.009941 C54.7334273,112.009941 55.9419817,113.207793 55.9419817,114.686461" id="Fill-129" fill="#4D4C4E"></path>
+ <path d="M17.3666493,86.1975355 C17.3666493,88.0129621 15.88277,89.4850482 14.0527997,89.4850482 C12.2228294,89.4850482 10.7400558,88.0129621 10.7400558,86.1975355 C10.7400558,84.3821088 12.2228294,82.9100227 14.0527997,82.9100227 C15.88277,82.9100227 17.3666493,84.3821088 17.3666493,86.1975355" id="Fill-131" fill="#4D4C4E"></path>
+ <path d="M37.3757993,107.283908 C37.3757993,111.55208 33.8883513,115.011812 29.585986,115.011812 C25.2847264,115.011812 21.7972784,111.55208 21.7972784,107.283908 C21.7972784,103.015736 25.2847264,99.5560041 29.585986,99.5560041 C33.8883513,99.5560041 37.3757993,103.015736 37.3757993,107.283908" id="Fill-133" fill="#4D4C4E"></path>
+ <path d="M17.3743893,83.4896429 C17.3743893,87.1248839 14.4044194,90.0712501 10.7400558,90.0712501 C7.07569224,90.0712501 4.10572226,87.1248839 4.10572226,83.4896429 C4.10572226,79.8544019 7.07569224,76.9080358 10.7400558,76.9080358 C14.4044194,76.9080358 17.3743893,79.8544019 17.3743893,83.4896429" id="Fill-135" fill="#4D4C4E"></path>
+ <path d="M57.3060007,85.029739 C57.3060007,87.0919759 55.6208799,88.7637041 53.5421221,88.7637041 C51.4633643,88.7637041 49.7782435,87.0919759 49.7782435,85.029739 C49.7782435,82.9675021 51.4633643,81.2957739 53.5421221,81.2957739 C55.6208799,81.2957739 57.3060007,82.9675021 57.3060007,85.029739" id="Fill-137" fill="#4D4C4E"></path>
+ <path d="M43.1807305,51.6808452 C43.1807305,55.051725 40.4263764,57.7841889 37.0284919,57.7841889 C33.6306074,57.7841889 30.8762533,55.051725 30.8762533,51.6808452 C30.8762533,48.3099654 33.6306074,45.5775015 37.0284919,45.5775015 C40.4263764,45.5775015 43.1807305,48.3099654 43.1807305,51.6808452" id="Fill-139" fill="#4D4C4E"></path>
+ <path d="M55.7125443,49.4994812 C55.7125443,51.5419733 54.0440094,53.1983445 51.9840489,53.1983445 C49.925194,53.1983445 48.2566591,51.5419733 48.2566591,49.4994812 C48.2566591,47.4569892 49.925194,45.800618 51.9840489,45.800618 C54.0440094,45.800618 55.7125443,47.4569892 55.7125443,49.4994812" id="Fill-141" fill="#4D4C4E"></path>
+ <path d="M52.7575016,111.869533 C52.7575016,116.637907 48.8609364,120.504602 44.053256,120.504602 C39.2466813,120.504602 35.3501161,116.637907 35.3501161,111.869533 C35.3501161,107.101159 39.2466813,103.234464 44.053256,103.234464 C48.8609364,103.234464 52.7575016,107.101159 52.7575016,111.869533" id="Fill-143" fill="#4D4C4E"></path>
+ <path d="M55.869004,110.810991 C55.869004,112.572668 54.4293536,113.99978 52.6546694,113.99978 C50.8788795,113.99978 49.4403348,112.572668 49.4403348,110.810991 C49.4403348,109.049314 50.8788795,107.622202 52.6546694,107.622202 C54.4293536,107.622202 55.869004,109.049314 55.869004,110.810991" id="Fill-145" fill="#4D4C4E"></path>
+ <path d="M15.1035546,81.8379757 C12.4840985,84.5539856 8.14082151,84.6505158 5.4030532,82.0518779 C2.66417917,79.45324 2.56798133,75.1444812 5.18743736,72.4284714 C7.80689339,69.7113645 12.1501704,69.6159312 14.8879387,72.2145691 C17.6268128,74.813207 17.7230106,79.1219658 15.1035546,81.8379757" id="Fill-147" fill="#4D4C4E"></path>
+ <path d="M22.8211772,56.0256932 C22.8211772,57.8202781 21.3549895,59.2759102 19.5449221,59.2759102 C17.7359605,59.2759102 16.2686671,57.8202781 16.2686671,56.0256932 C16.2686671,54.2311083 17.7359605,52.7754762 19.5449221,52.7754762 C21.3549895,52.7754762 22.8211772,54.2311083 22.8211772,56.0256932" id="Fill-149" fill="#4D4C4E"></path>
+ <path d="M62.4955975,86.1255766 C62.4955975,88.1878135 60.8104768,89.8584448 58.7328247,89.8584448 C56.6540668,89.8584448 54.9689461,88.1878135 54.9689461,86.1255766 C54.9689461,84.0633397 56.6540668,82.3927084 58.7328247,82.3927084 C60.8104768,82.3927084 62.4955975,84.0633397 62.4955975,86.1255766" id="Fill-151" fill="#4D4C4E"></path>
+ <path d="M75.977669,74.7141667 C75.977669,80.7725361 71.0273505,85.683512 64.9204464,85.683512 C58.8135424,85.683512 53.8632238,80.7725361 53.8632238,74.7141667 C53.8632238,68.6557973 58.8135424,63.7448215 64.9204464,63.7448215 C71.0273505,63.7448215 75.977669,68.6557973 75.977669,74.7141667" id="Fill-153" fill="#4D4C4E"></path>
+ <path d="M65.3666054,92.0441965 C65.3666054,95.587295 62.4718245,98.4590696 58.9003416,98.4590696 C55.3288587,98.4590696 52.4340778,95.587295 52.4340778,92.0441965 C52.4340778,88.501098 55.3288587,85.6293234 58.9003416,85.6293234 C62.4718245,85.6293234 65.3666054,88.501098 65.3666054,92.0441965" id="Fill-155" fill="#4D4C4E"></path>
+ <path d="M86.0231557,85.1822129 C86.0231557,86.721212 84.7637381,87.9706204 83.2124097,87.9706204 C81.6599757,87.9706204 80.400558,86.721212 80.400558,85.1822129 C80.400558,83.6421168 81.6599757,82.3927084 83.2124097,82.3927084 C84.7637381,82.3927084 86.0231557,83.6421168 86.0231557,85.1822129" id="Fill-157" fill="#4D4C4E"></path>
+ <path d="M24.6815549,54.2618225 C24.6815549,55.8425051 23.3900713,57.1226277 21.7978312,57.1226277 C20.2044855,57.1226277 18.9130019,55.8425051 18.9130019,54.2618225 C18.9130019,52.6811398 20.2044855,51.4010172 21.7978312,51.4010172 C23.3900713,51.4010172 24.6815549,52.6811398 24.6815549,54.2618225" id="Fill-159" fill="#4D4C4E"></path>
+ <path d="M33.798731,54.9632851 C33.798731,58.3210017 31.0543284,61.0435932 27.6697125,61.0435932 C24.2850967,61.0435932 21.5406941,58.3210017 21.5406941,54.9632851 C21.5406941,51.6055685 24.2850967,48.882977 27.6697125,48.882977 C31.0543284,48.882977 33.798731,51.6055685 33.798731,54.9632851" id="Fill-161" fill="#4D4C4E"></path>
+ <path d="M23.1407309,62.6478869 C23.1407309,66.0056035 20.3963283,68.728195 17.0117124,68.728195 C13.6270966,68.728195 10.882694,66.0056035 10.882694,62.6478869 C10.882694,59.2901703 13.6270966,56.5675789 17.0117124,56.5675789 C20.3963283,56.5675789 23.1407309,59.2901703 23.1407309,62.6478869" id="Fill-161-Copy" fill="#4D4C4E"></path>
+ <path d="M60.4975574,69.1753055 C60.4975574,78.8689159 52.5772689,86.7262579 42.8060013,86.7262579 C33.0347337,86.7262579 25.1144452,78.8689159 25.1144452,69.1753055 C25.1144452,59.4816951 33.0347337,51.6243531 42.8060013,51.6243531 C52.5772689,51.6243531 60.4975574,59.4816951 60.4975574,69.1753055" id="Fill-163" fill="#4D4C4E"></path>
+ <path d="M58.2861129,97.8696867 C58.2861129,111.293338 50.3658243,122.174136 40.5945568,122.174136 C30.8232892,122.174136 22.9030006,111.293338 22.9030006,97.8696867 C22.9030006,84.4460356 30.8232892,73.5652375 40.5945568,73.5652375 C50.3658243,73.5652375 58.2861129,84.4460356 58.2861129,97.8696867" id="hair" fill="#4D4C4E"></path>
+ <g id="Hair" transform="translate(51.341842, 101.040595)">
+ <mask id="mask-4" fill="white">
+ <use xlink:href="#path-3"></use>
+ </mask>
+ <g id="Clip-125"></g>
+ <path d="M9.13138947,4.82925425 C9.13138947,7.27980598 7.12892646,9.2663544 4.65874294,9.2663544 C2.18966514,9.2663544 0.187202129,7.27980598 0.187202129,4.82925425 C0.187202129,2.37870252 2.18966514,0.392154093 4.65874294,0.392154093 C7.12892646,0.392154093 9.13138947,2.37870252 9.13138947,4.82925425" id="Fill-124" fill="#4D4C4E" mask="url(#mask-4)"></path>
</g>
+ <path d="M93.6692251,106.525268 C93.6692251,106.525268 91.4358572,95.0595112 88.911596,91.5688228 C86.3873347,88.0781343 79.5421116,81.3054149 79.5421116,81.3054149 C79.5421116,81.3054149 76.6033696,77.0269216 82.9748177,73.3301438 C90.0173182,77.0269216 91.7295483,82.2238345 96.5933422,88.9614608 C101.457136,95.6990871 106.937892,112.009941 106.937892,112.009941 C106.937892,115.645182 98.4393109,120.785417 94.7749474,120.785417 C91.1105838,120.785417 93.6692251,110.160509 93.6692251,106.525268 Z" id="arm" fill="#B78F65"></path>
+ <path d="M70.0779773,130.890049 C68.3043988,133.410166 61.7817432,135.282385 53.9841899,135.282385 C46.1877422,135.282385 39.6650866,133.410166 37.8915081,130.890049 C37.0246219,131.020704 36.1931187,131.17288 35.3914701,131.341195 C37.7344956,134.237524 45.2755214,136.243089 53.9841899,136.243089 C62.6928584,136.243089 70.2349899,134.237524 72.5769096,131.341195 C71.7763667,131.17288 70.9437578,131.020704 70.0779773,130.890049" id="collar" fill="#F2DDA0"></path>
+ <path d="M65.6949379,65.2405195 C62.8725927,65.7121264 58.9410861,67.840137 61.1542717,69.9020454 C63.3406734,71.9390004 66.8368976,68.2219766 70.521713,69.0839496 C71.6631999,69.3509728 72.8227848,69.065749 73.9671359,70.7945455 C75.3484905,72.8813885 74.5723173,75.674563 73.9671359,76.0685677 C72.4525741,77.0546263 67.555367,72.7395014 67.555367,76.0685677 C67.555367,80.7278464 81.7071917,83.6963808 81.7071917,83.6963808 C81.7071917,85.0994704 84.8467575,78.8904748 84.4420761,76.0685677 C84.0373946,73.2466605 83.7369699,72.4468189 77.2259931,67.8690297 C70.7150162,63.2912404 68.5172832,64.7689127 65.6949379,65.2405195 Z" id="hand" fill="#B78F65"></path>
+ <path d="M105.555739,112.490921 C97.5434875,115.296459 93.9456557,103.927547 92.5775404,114.199525 C91.9557257,118.868185 85.7603128,123.204342 81.9133675,125.9123 C77.2962709,129.162387 73.6098896,132.411065 70.078309,130.890378 C62.7662317,135.921828 44.143882,137.230865 37.8907341,130.890378 C30.4470119,134.09562 25.2357429,141.446179 25.2357429,150.009946 L25.2357429,159.882357 L25.2357429,173.045571 C25.2357429,173.045571 34.2170344,178.239223 46.2444658,178.530244 C58.2718972,178.821265 70.5703554,174.142506 70.5703554,174.142506 L72.7818,150.009946 C72.7818,150.009946 82.4802661,142.433805 93.1205984,134.518332 C100.973318,128.676598 112.989548,109.887928 105.555739,112.490921 Z" id="sweater" fill="#EAC563"></path>
+ <path d="M67.9792694,74.7064003 C66.4011316,77.2510956 66.6192526,76.151483 70.1178269,79.7100929 C73.6164013,83.2687027 74.2544872,79.5385939 81.5243671,84.2461956 C87.8676926,88.3538084 92.271955,94.2383158 93.6692251,108.17067 C93.9016503,110.488211 98.0921142,110.364539 98.0921142,110.364539 C98.0921142,110.364539 87.6920991,83.0136254 83.7212342,81.6819505 C79.7503693,80.3502756 79.4967725,80.8142191 75.6199723,79.3958667 C71.0712266,77.7316786 67.9792694,74.7064003 67.9792694,74.7064003 Z" id="arm-shadow" fill="#292929" opacity="0.200000003"></path>
+ <path d="M28.9766827,148.20878 C28.6754402,148.20878 28.4316119,150.076201 28.4316119,152.377131 L28.4316119,169.050536 L29.5217534,169.050536 L29.5217534,152.377131 C29.5217534,150.076201 29.2779251,148.20878 28.9766827,148.20878" id="shadow" fill="#292929" opacity="0.200000003" transform="translate(28.976683, 158.629658) scale(-1, 1) translate(-28.976683, -158.629658) "></path>
+ <path d="M47.8875695,21.7914667 L48.1935218,20.1113886 C48.4703371,18.632338 49.0057483,17.3615223 49.7997712,16.2989035 C50.5937942,15.2362846 51.8503713,14.1234235 53.5695403,12.9602866 C55.3761247,11.7540706 56.5234343,10.8422424 57.0115034,10.2247747 C57.4995726,9.60730701 57.7436035,8.91805107 57.7436035,8.15698621 C57.7436035,6.44818022 56.7747643,5.59379003 54.8370569,5.59379003 C54.1085955,5.59379003 53.3327957,5.70866602 52.5096342,5.93842145 C51.6864728,6.16817688 50.218645,6.77127583 48.1061069,7.7477364 L46.0955633,2.98751493 C49.446486,1.19255065 52.6880907,0.295081967 55.8204749,0.295081967 C58.3992284,0.295081967 60.4388899,0.923310042 61.9395204,2.17978504 C63.440151,3.43626004 64.190455,5.19170877 64.190455,7.44618391 C64.190455,8.63804019 63.9828466,9.71141273 63.5676236,10.6663337 C63.1524006,11.6212547 62.5514289,12.5043639 61.7646906,13.3156878 C60.9779522,14.1270116 59.5938962,15.1860247 57.6124811,16.4927587 C56.6800505,17.1102264 55.9770957,17.6343481 55.5035958,18.0651395 C55.0300959,18.4959309 54.6476593,18.9590248 54.3562748,19.4544349 C54.0648902,19.9498451 53.788079,20.7288479 53.5258329,21.7914667 L47.8875695,21.7914667 Z M45.8333185,29.7610683 C45.8333185,28.4543343 46.2339663,27.4168605 47.0352739,26.6486158 C47.8365815,25.8803711 48.9292572,25.4962545 50.313334,25.4962545 C51.3040415,25.4962545 52.0944103,25.769085 52.6844641,26.3147541 C53.2745179,26.8604232 53.5695403,27.6286564 53.5695403,28.6194767 C53.5695403,29.8687719 53.1688926,30.8811165 52.367585,31.6565411 C51.5662774,32.4319657 50.5245932,32.8196721 49.242501,32.8196721 C48.1643781,32.8196721 47.32666,32.5468417 46.7293216,32.0011725 C46.1319832,31.4555034 45.8333185,30.7088094 45.8333185,29.7610683 Z" id="q3" stroke="#4A4A4A" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="#F36F45"></path>
+ <path d="M11.1732965,26.8734339 L11.4792488,25.1933558 C11.7560641,23.7143052 12.2914752,22.4434896 13.0854982,21.3808707 C13.8795212,20.3182518 15.1360983,19.2053907 16.8552673,18.0422538 C18.6618517,16.8360378 19.8091612,15.9242097 20.2972304,15.3067419 C20.7852996,14.6892742 21.0293305,14.0000183 21.0293305,13.2389534 C21.0293305,11.5301474 20.0604913,10.6757572 18.1227839,10.6757572 C17.3943224,10.6757572 16.6185226,10.7906332 15.7953612,11.0203887 C14.9721998,11.2501441 13.504372,11.853243 11.3918338,12.8297036 L9.38129031,8.06948214 C12.7322129,6.27451786 15.9738177,5.37704918 19.1062019,5.37704918 C21.6849554,5.37704918 23.7246168,6.00527726 25.2252474,7.26175225 C26.725878,8.51822725 27.476182,10.273676 27.476182,12.5281511 C27.476182,13.7200074 27.2685736,14.7933799 26.8533506,15.7483009 C26.4381276,16.7032219 25.8371559,17.5863311 25.0504175,18.397655 C24.2636792,19.2089788 22.8796232,20.2679919 20.8982081,21.5747259 C19.9657775,22.1921936 19.2628227,22.7163153 18.7893228,23.1471067 C18.3158228,23.5778981 17.9333863,24.040992 17.6420017,24.5364021 C17.3506172,25.0318123 17.073806,25.8108151 16.8115598,26.8734339 L11.1732965,26.8734339 Z M9.1190455,34.8430355 C9.1190455,33.5363015 9.51969329,32.4988277 10.3210009,31.730583 C11.1223085,30.9623383 12.2149842,30.5782217 13.599061,30.5782217 C14.5897685,30.5782217 15.3801373,30.8510522 15.9701911,31.3967213 C16.5602449,31.9423905 16.8552673,32.7106236 16.8552673,33.7014439 C16.8552673,34.9507391 16.4546195,35.9630837 15.653312,36.7385083 C14.8520044,37.5139329 13.8103201,37.9016393 12.528228,37.9016393 C11.4501051,37.9016393 10.612387,37.6288089 10.0150486,37.0831397 C9.41771021,36.5374706 9.1190455,35.7907766 9.1190455,34.8430355 Z" id="q2" stroke="#4A4A4A" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="#F36F45" transform="translate(18.297614, 21.639344) rotate(-27.000000) translate(-18.297614, -21.639344) "></path>
+ <path d="M78.482797,36.0209749 L78.7887493,34.3408968 C79.0655646,32.8618462 79.6009758,31.5910305 80.3949987,30.5284117 C81.1890217,29.4657928 82.4455989,28.3529317 84.1647679,27.1897948 C85.9713522,25.9835788 87.1186618,25.0717506 87.6067309,24.4542829 C88.0948001,23.8368152 88.338831,23.1475593 88.338831,22.3864944 C88.338831,20.6776884 87.3699919,19.8232982 85.4322844,19.8232982 C84.703823,19.8232982 83.9280232,19.9381742 83.1048618,20.1679296 C82.2817003,20.3976851 80.8138725,21.000784 78.7013344,21.9772446 L76.6907908,17.2170231 C80.0417135,15.4220588 83.2833183,14.5245902 86.4157024,14.5245902 C88.9944559,14.5245902 91.0341174,15.1528182 92.5347479,16.4092932 C94.0353785,17.6657682 94.7856825,19.421217 94.7856825,21.6756921 C94.7856825,22.8675484 94.5780741,23.9409209 94.1628511,24.8958419 C93.7476281,25.8507629 93.1466564,26.7338721 92.3599181,27.545196 C91.5731797,28.3565198 90.1891237,29.4155329 88.2077086,30.7222669 C87.275278,31.3397346 86.5723232,31.8638563 86.0988233,32.2946477 C85.6253234,32.7254391 85.2428868,33.188533 84.9515023,33.6839431 C84.6601177,34.1793533 84.3833065,34.9583561 84.1210604,36.0209749 L78.482797,36.0209749 Z M76.428546,43.9905765 C76.428546,42.6838425 76.8291938,41.6463687 77.6305014,40.878124 C78.431809,40.1098793 79.5244848,39.7257627 80.9085615,39.7257627 C81.8992691,39.7257627 82.6896379,39.9985932 83.2796916,40.5442623 C83.8697454,41.0899314 84.1647679,41.8581646 84.1647679,42.8489849 C84.1647679,44.09828 83.7641201,45.1106247 82.9628125,45.8860493 C82.1615049,46.6614739 81.1198207,47.0491803 79.8377285,47.0491803 C78.7596056,47.0491803 77.9218875,46.7763498 77.3245491,46.2306807 C76.7272107,45.6850116 76.428546,44.9383176 76.428546,43.9905765 Z" id="q1" stroke="#4A4A4A" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="#F36F45" transform="translate(85.607114, 30.786885) rotate(16.000000) translate(-85.607114, -30.786885) "></path>
</g>
</g>
-</svg> \ No newline at end of file
+</svg>
diff --git a/web-ui/app/images/hive-bg.png b/web-ui/app/images/hive-bg.png
new file mode 100644
index 00000000..77316967
--- /dev/null
+++ b/web-ui/app/images/hive-bg.png
Binary files differ
diff --git a/web-ui/app/images/lab.svg b/web-ui/app/images/lab.svg
new file mode 100644
index 00000000..407a5dce
--- /dev/null
+++ b/web-ui/app/images/lab.svg
@@ -0,0 +1,9 @@
+<svg width="26px" height="24px" viewBox="-1 -2 26 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 41.1 (35376) - http://www.bohemiancoding.com/sketch -->
+ <desc>Created with Sketch.</desc>
+ <defs></defs>
+ <g id="lab" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+ <path d="M0.47142375,17.4254223 C-0.632586436,19.3414844 0.271287435,20.8888521 2.46452356,20.8816494 L20.9543339,20.8209278 C23.1591027,20.8136872 24.0450932,19.2560309 22.9389601,17.3516376 L13.6888935,1.42609931 C12.5802035,-0.482696165 10.7839095,-0.472386474 9.68244543,1.43925672 L0.47142375,17.4254223 Z" id="Sign" stroke="#4A4A4A" stroke-width="2"></path>
+ <path d="M12.7510569,7.9115287 C12.5882001,7.75247173 12.4293144,7.75408086 12.274395,7.91635614 C12.1194756,8.07863142 12.1234442,8.23929513 12.286301,8.3983521 C12.4491577,8.55740907 12.6080434,8.55579994 12.7629629,8.39352466 C12.9178823,8.23124939 12.9139136,8.07058567 12.7510569,7.9115287 Z M9.5488305,9.16431705 C9.31049836,9.16673078 9.11387554,9.24907405 8.95895614,9.41134933 C8.79435427,9.58376681 8.71503104,9.79047205 8.72098407,10.0314712 L8.73735481,10.6942157 C8.74330784,10.9352149 8.83280067,11.1402104 9.005836,11.3092084 C9.11780003,11.4185601 9.25372014,11.4925135 9.4136004,11.5310709 L7.59026845,16.129644 C7.45917874,16.4523842 7.50174822,16.7683389 7.71797817,17.0775175 C7.91385101,17.366814 8.19562159,17.5146203 8.56329834,17.5209407 L14.5949341,17.4146563 C14.8536234,17.4321247 15.0797892,17.3394383 15.2734385,17.1365942 L15.3024857,17.1061677 C15.3605805,17.0453145 15.3990617,16.9947048 15.4179306,16.9543371 C15.6090994,16.6510767 15.6309532,16.3294475 15.4834927,15.98944 L13.4652264,11.4900377 C13.6134399,11.4584042 13.7504806,11.3766643 13.8763526,11.2448157 C14.0215895,11.0926826 14.1011608,10.8960188 14.1150688,10.6548185 L14.0834303,9.97716255 C14.0774773,9.73616336 13.9930736,9.53613828 13.8302168,9.37708131 C13.6571815,9.20808328 13.4515009,9.12479238 13.2131687,9.12720611 L9.5488305,9.16431705 Z M14.4220375,16.1230061 C14.472707,16.223907 14.4736474,16.3234091 14.4248586,16.4215152 L14.3801635,16.4745191 C14.3354681,16.5275234 14.2716805,16.5528606 14.1887986,16.5505315 L9.16869777,16.4365907 C9.06179027,16.4426299 8.97927838,16.3996166 8.92115961,16.3075497 C8.84646447,16.2150169 8.82894796,16.1150491 8.86860954,16.0076431 L9.42718779,14.137806 C9.64751161,14.0173901 9.93463907,13.7925954 10.2885788,13.463415 C10.6425185,13.1342346 10.9971582,12.8796857 11.3525085,12.6997606 C11.7078588,12.5198356 12.1433002,12.4461612 12.6588459,12.4787354 L14.4220375,16.1230061 Z M13.191566,10.0689434 L13.2071379,10.6993483 C13.2186556,10.7997567 13.1702037,10.8505091 13.0617809,10.8516072 L12.3028244,10.8592936 L12.790701,11.9509833 L12.747673,11.8554639 C12.3413128,11.868718 11.9566982,11.9388673 11.5938177,12.065914 C11.2309371,12.1929607 10.9562107,12.3213973 10.7696302,12.4512278 C10.5830496,12.5810583 10.3437282,12.7708213 10.0516586,13.0205224 C9.76794727,13.242723 9.55494126,13.4002347 9.41263422,13.4930622 L10.4596445,10.8779606 L9.70068808,10.885647 C9.59226519,10.886745 9.54133088,10.8369991 9.54788363,10.7364078 L9.53231172,10.1060028 C9.52079399,10.0055945 9.56924584,9.95484205 9.67766873,9.95374398 L13.0387615,9.91970419 C13.1471844,9.91860613 13.1981187,9.96835203 13.191566,10.0689434 Z M12.7896458,14.2991821 C12.9445652,14.1369068 13.0190473,13.9352726 13.0130943,13.6942734 C13.0071413,13.4532742 12.9227376,13.2532491 12.7598808,13.0941921 C12.5970241,12.9351352 12.3964326,12.8568147 12.1581005,12.8592285 C11.9197684,12.8616422 11.7231455,12.9439855 11.5682261,13.1062607 C11.4133067,13.268536 11.3388247,13.4701702 11.3447777,13.7111694 C11.3507307,13.9521686 11.4351343,14.1521937 11.5979911,14.3112507 C11.7608479,14.4703076 11.9614393,14.5486281 12.1997715,14.5462143 C12.4381036,14.5438006 12.6347264,14.4614573 12.7896458,14.2991821 Z M11.8861076,13.4167254 C11.9634848,13.3356742 12.0577235,13.2945866 12.1688267,13.2934614 C12.2799298,13.2923362 12.3761508,13.3314949 12.4574924,13.4109386 C12.538834,13.4903823 12.5808917,13.586276 12.5836669,13.6986224 C12.586442,13.8109689 12.5491415,13.9076663 12.4717644,13.9887174 C12.3943872,14.0697686 12.3001484,14.1108562 12.1890453,14.1119814 C12.0779421,14.1131066 11.9817212,14.0739479 11.9003796,13.9945042 C11.819038,13.9150605 11.7769802,13.8191668 11.7742051,13.7068204 C11.77143,13.5944739 11.8087304,13.4977765 11.8861076,13.4167254 Z M10.6805964,6.12456046 C10.525677,6.28683574 10.4511949,6.48846995 10.4571479,6.72946913 C10.4631009,6.97046832 10.5475046,7.1704934 10.7103613,7.32955037 C10.8732181,7.48860734 11.0738096,7.56692778 11.3121417,7.56451405 C11.5504738,7.56210032 11.7470967,7.47975705 11.9020161,7.31748177 C12.0569355,7.15520649 12.1314175,6.95357228 12.1254645,6.7125731 C12.1195115,6.47157391 12.0351078,6.27154883 11.8722511,6.11249186 C11.7093943,5.9534349 11.5088029,5.87511445 11.2704707,5.87752818 C11.0321386,5.87994191 10.8355158,5.96228518 10.6805964,6.12456046 Z M11.4581557,6.8839776 C11.4140673,6.93015942 11.3603714,6.95357054 11.2970664,6.95421167 C11.2337614,6.95485279 11.178936,6.93254073 11.1325887,6.88727482 C11.0862414,6.8420089 11.0622775,6.78737005 11.0606963,6.72335664 C11.0591151,6.65934323 11.0803683,6.60424644 11.1244568,6.55806463 C11.1685452,6.51188281 11.2222411,6.48847169 11.2855461,6.48783056 C11.3488511,6.48718944 11.4036764,6.5095015 11.4500237,6.55476742 C11.496371,6.60003333 11.5203349,6.65467218 11.5219161,6.71868559 C11.5234973,6.782699 11.5022441,6.83779579 11.4581557,6.8839776 Z M9.83729754,15.4138445 C9.97979722,15.5530193 10.1404192,15.6217006 10.3191683,15.6198903 C10.4979174,15.61808 10.6550668,15.5461805 10.7906213,15.4041896 C10.9261758,15.2621987 10.9917197,15.100831 10.9872549,14.9200816 C10.9827901,14.7393322 10.909309,14.5793725 10.7668093,14.4401977 C10.6243096,14.3010228 10.4636877,14.2323416 10.2849386,14.2341519 C10.1061895,14.2359622 9.94904002,14.3078617 9.81348555,14.4498525 C9.67793107,14.5918434 9.6123872,14.7532111 9.61685197,14.9339605 C9.62131674,15.1147099 9.69479786,15.2746696 9.83729754,15.4138445 Z M10.0461143,14.6459687 C10.2119345,14.4742569 10.3806979,14.4713111 10.5524098,14.6371313 C10.7241216,14.8029515 10.7270674,14.971715 10.5612472,15.1434268 C10.395427,15.3151386 10.2266635,15.3180844 10.0549517,15.1522642 C9.88323991,14.986444 9.88029413,14.8176806 10.0461143,14.6459687 Z M12.6972689,15.3848798 C12.5344121,15.2258229 12.3755264,15.227432 12.220607,15.3897073 C12.0656876,15.5519825 12.0696562,15.7126463 12.232513,15.8717032 C12.3953697,16.0307602 12.5542554,16.0291511 12.7091749,15.8668758 C12.8640943,15.7046005 12.8601256,15.5439368 12.6972689,15.3848798 Z" id="LAB" fill="#4A4A4A"></path>
+ </g>
+</svg>
diff --git a/web-ui/app/images/logo-orange.svg b/web-ui/app/images/logo-orange.svg
new file mode 100644
index 00000000..7e0ef43d
--- /dev/null
+++ b/web-ui/app/images/logo-orange.svg
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="509.707px" height="142.439px" viewBox="0 0 509.707 142.439" enable-background="new 0 0 509.707 142.439"
+ xml:space="preserve">
+<g>
+ <path fill="#F9A731" d="M0,35.469v71.365l62.837,35.605l62.833-35.605V35.469L62.813,0L0,35.469z M60.262,116.617L23.735,96.332
+ V52.46l36.586,20.999L60.262,116.617z M101.936,96.332l-36.148,20.285l0.067-43.123l36.081-21.034V96.332z M101.936,46.44
+ L62.951,69.553L23.733,46.44l39.218-21.131L101.936,46.44z"/>
+ <path fill="#F9A731" d="M169.505,42.332h-19.968v59.328h13.52V79.655h6.448c11.579,0,20.279-6.832,20.279-19.056
+ C189.784,48.302,181.084,42.332,169.505,42.332z M166.866,68.868h-3.809v-15.75h3.809c5.323,0,10.357,1.798,10.357,7.91
+ C177.224,67.07,172.189,68.868,166.866,68.868z"/>
+ <rect x="194.309" y="42.332" fill="#F9A731" width="13.52" height="59.328"/>
+ <polygon fill="#F9A731" points="266.516,42.332 249.689,42.332 238.759,58.514 227.827,42.332 211.721,42.332 230.417,69.73
+ 210.228,101.66 226.982,101.66 238.759,81.453 250.534,101.66 268.01,101.66 247.099,69.73 "/>
+ <polygon fill="#F9A731" points="270.128,101.66 304.069,101.66 304.069,89.795 283.647,89.795 283.647,77.857 303.207,77.857
+ 303.207,65.991 283.647,65.991 283.647,54.199 304.069,54.199 304.069,42.332 270.128,42.332 "/>
+ <path fill="#F9A731" d="M354.807,42.332l-19.156,47.463H322.33V42.332h-13.52v59.328h22.053h11.888h2.636l4.386-11.865h22.578
+ l4.391,11.865h14.524l-23.944-59.328H354.807z M354.377,77.928l6.614-17.257h0.145l6.615,17.257H354.377z"/>
+ <polygon fill="#F9A731" points="379.939,54.199 394.073,54.199 394.073,101.66 407.592,101.66 407.592,54.199 421.687,54.199
+ 421.687,42.332 379.939,42.332 "/>
+ <polygon fill="#F9A731" points="426.265,101.66 460.207,101.66 460.207,89.795 439.785,89.795 439.785,77.857 459.344,77.857
+ 459.344,65.991 439.785,65.991 439.785,54.199 460.207,54.199 460.207,42.332 426.265,42.332 "/>
+ <path fill="#F9A731" d="M479.792,42.332h-14.94v59.328h14.94c16.324,0,29.914-12.37,29.914-29.699
+ C509.707,54.701,496.044,42.332,479.792,42.332z M480.457,89.577h-2.084V54.414h2.084c10.067,0,16.9,7.695,16.9,17.619
+ C497.285,81.955,490.455,89.577,480.457,89.577z"/>
+</g>
+</svg>
diff --git a/web-ui/app/images/welcome.svg b/web-ui/app/images/welcome.svg
new file mode 100644
index 00000000..3f655b85
--- /dev/null
+++ b/web-ui/app/images/welcome.svg
@@ -0,0 +1,91 @@
+<svg width="180px" height="225px" viewBox="546 224 180 225" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!-- Generator: Sketch 41.1 (35376) - http://www.bohemiancoding.com/sketch -->
+ <desc>Created with Sketch.</desc>
+ <defs></defs>
+ <g id="illustration-copy-2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(547.000000, 225.000000)">
+ <g id="Group-3" transform="translate(0.000000, 218.562500)" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round">
+ <path d="M16.422619,0.915209632 L139.331948,0.915209632" id="Line"></path>
+ <path d="M144.625,0.915209632 L154.219396,0.915209632" id="Line"></path>
+ <path d="M160.517857,0.915209632 L177.470238,0.915209632" id="Line"></path>
+ <path d="M0.529761905,0.915209632 L11.125,0.915209632" id="Line"></path>
+ </g>
+ <g id="COMPUTER" transform="translate(50.972727, 176.312500)">
+ <path d="M11.8446139,34.7011552 L64.7012034,34.7011552 L64.7012034,3.88892257 L11.8446139,3.88892257 L11.8446139,34.7011552 Z M13.0290753,5.08551413 L63.516742,5.08551413 L63.516742,33.5045637 L13.0290753,33.5045637 L13.0290753,5.08551413 Z M74.1768945,37.0943383 L68.4026452,37.0943383 L68.4026452,2.84190495 C68.4026452,2.04417326 68.1312089,1.37109724 67.588328,0.822656697 C67.0454472,0.274216157 66.4285464,0 65.7376071,0 L10.9562678,0 C10.166623,0 9.50037011,0.299144898 8.95748925,0.89744367 C8.4146084,1.49574244 8.14317205,2.14388972 8.14317205,2.84190495 L8.14317205,37.0943383 L1.62863441,37.0943383 C0.542872708,37.0943383 0,37.6427707 0,38.7396517 L0,40.2353912 C0,41.0331229 0.394816515,41.5815552 1.18446139,41.8807046 L4.44173021,44.1243138 L4.44173021,44.2738877 L71.215741,44.2738877 L71.215741,44.1243138 L74.4730098,41.8807046 C75.3613603,41.6812717 75.8055289,41.1328393 75.8055289,40.2353912 L75.8055289,38.7396517 C75.8055289,37.6427707 75.2626562,37.0943383 74.1768945,37.0943383 Z M9.32763344,2.84190495 C9.32763344,1.74502387 9.87050615,1.19659156 10.9562678,1.19659156 L65.7376071,1.19659156 C66.8233688,1.19659156 67.3662415,1.74502387 67.3662415,2.84190495 L67.3662415,37.0943383 L9.32763344,37.0943383 L9.32763344,2.84190495 Z M3.25726882,41.8807046 L72.4002024,41.8807046 L70.771568,43.0772961 L5.0339609,43.0772961 L3.25726882,41.8807046 Z M74.7691252,40.2353912 C74.7691252,40.634257 74.5717169,40.833687 74.1768945,40.833687 L1.62863441,40.833687 L1.48057674,40.684113 L1.48057674,40.833687 C1.18445991,40.5345376 1.03640372,40.3351077 1.03640372,40.2353912 L1.03640372,38.7396517 C1.03640372,38.3407859 1.23381197,38.141356 1.62863441,38.141356 L74.1768945,38.141356 C74.5717169,38.141356 74.7691252,38.3407859 74.7691252,38.7396517 L74.7691252,40.2353912 Z" id="7" fill="#000000"></path>
+ <polygon id="Path" fill="#FFFFFF" points="12.9454545 33.815823 63.1090909 33.815823 63.1090909 4.875 12.9454545 4.875"></polygon>
+ </g>
+ <g id="MAIL" transform="translate(61.490909, 0.000000)">
+ <path d="M58.6700246,10.067306 L64.3727202,4.30620853" id="Line-Copy-6" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path>
+ <path d="M54.140365,7.32167706 L54.140365,0.769773183" id="Line-Copy-7" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path>
+ <path d="M61.5870258,13.7281445 L68.1823096,13.7281445" id="Line-Copy-8" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round" transform="translate(64.558582, 14.185749) scale(-1, -1) translate(-64.558582, -14.185749) "></path>
+ <g id="Group-17" transform="translate(0.000000, 13.000000)">
+ <path d="M51.216096,5.16127613 C51.216096,4.52823155 50.991792,4.00309229 50.5396235,3.58226151 C50.0838946,3.16143073 49.5462769,2.94921692 48.9196496,2.94921692 L4.48608141,2.94921692 C3.85945416,2.94921692 3.32183647,3.16143073 2.86966795,3.58226151 C2.41393904,4.00309229 2.18963497,4.52823155 2.18963497,5.16127613 L2.18963497,32.137608 C2.18963497,32.7706526 2.41393904,33.2957918 2.86966795,33.7202194 C3.32183647,34.1410502 3.85945416,34.3496672 4.48608141,34.3496672 L48.9196496,34.3496672 C49.5462769,34.3496672 50.0838946,34.1410502 50.5396235,33.7202194 C50.991792,33.2957918 51.216096,32.7706526 51.216096,32.137608 L51.216096,5.16127613 Z" id="Path" fill="#E9E7F3"></path>
+ <path d="M51.216096,5.16127613 C51.216096,4.52823155 51.1890134,4.00309229 51.1344181,3.58226151 C51.079393,3.16143073 51.0144805,2.94921692 50.938821,2.94921692 L45.5738704,2.94921692 C45.4982108,2.94921692 45.4332984,3.16143073 45.3787031,3.58226151 C45.323678,4.00309229 45.2965953,4.52823155 45.2965953,5.16127613 L45.2965953,32.137608 C45.2965953,32.7706526 45.323678,33.2957918 45.3787031,33.7202194 C45.4332984,34.1410502 45.4982108,34.3496672 45.5738704,34.3496672 L50.938821,34.3496672 C51.0144805,34.3496672 51.079393,34.1410502 51.1344181,33.7202194 C51.1890134,33.2957918 51.216096,32.7706526 51.216096,32.137608 L51.216096,5.16127613 Z" id="Path" fill="#DDD9ED"></path>
+ <path d="M47.3566419,27.817798 C47.9832691,28.1702888 48.0865202,28.695428 47.6699555,29.3968127 C47.459893,29.7493034 47.1465793,29.9255488 46.7300146,29.9255488 C46.5911597,29.9255488 46.3810972,29.8536119 46.1033874,29.713335 L36.091593,22.969252 C35.4649658,22.6203581 35.3617147,22.091622 35.7782794,21.3902374 C36.1271968,20.7571928 36.6470126,20.6528843 37.3412871,21.0737151 L47.3566419,27.817798 Z M26.7028655,24.447555 L7.19909254,11.6967421 C6.5724653,11.2723145 6.46921422,10.7831437 6.88577892,10.2184391 C7.30234362,9.51705451 7.78655558,9.37677759 8.34553557,9.79760837 L26.7028655,21.8110681 L45.0601955,9.79760837 C45.6191754,9.37677759 46.1033874,9.51705451 46.5235125,10.2184391 C46.9400772,10.7831437 46.8368261,11.2723145 46.2101989,11.6967421 L26.7028655,24.447555 Z M17.6274516,21.3902374 C18.0475767,22.091622 17.9407652,22.6203581 17.314138,22.969252 L7.30234362,29.713335 C7.02463382,29.8536119 6.81457128,29.9255488 6.67571638,29.9255488 C6.25915168,29.9255488 5.94583805,29.7493034 5.73933589,29.3968127 C5.31921081,28.695428 5.42602227,28.1702888 6.04908913,27.817798 L16.0644439,21.0737151 C16.7587184,20.6528843 17.2785342,20.7571928 17.6274516,21.3902374 L17.6274516,21.3902374 Z M51.216096,5.16127613 C51.216096,4.52823155 50.991792,4.00309229 50.5396235,3.58226151 C50.0838946,3.16143073 49.5462769,2.94921692 48.9196496,2.94921692 L4.48608141,2.94921692 C3.85945416,2.94921692 3.32183647,3.16143073 2.86966795,3.58226151 C2.41393904,4.00309229 2.18963497,4.52823155 2.18963497,5.16127613 L2.18963497,32.137608 C2.18963497,32.7706526 2.41393904,33.2957918 2.86966795,33.7202194 C3.32183647,34.1410502 3.85945416,34.3496672 4.48608141,34.3496672 L48.9196496,34.3496672 C49.5462769,34.3496672 50.0838946,34.1410502 50.5396235,33.7202194 C50.991792,33.2957918 51.216096,32.7706526 51.216096,32.137608 L51.216096,5.16127613 Z M52.1026312,1.94929422 C52.9713644,2.82692422 53.405731,3.8987838 53.405731,5.16127613 L53.405731,32.137608 C53.405731,33.4036972 52.9713644,34.4755567 52.1026312,35.3531867 C51.2303376,36.2308167 50.1729041,36.6696317 48.9196496,36.6696317 L4.48608141,36.6696317 C3.23282692,36.6696317 2.17539344,36.2308167 1.30309984,35.3531867 C0.434366612,34.4755567 0,33.4036972 0,32.137608 L0,5.16127613 C0,3.8987838 0.434366612,2.82692422 1.30309984,1.94929422 C2.17539344,1.06806738 3.23282692,0.629252383 4.48608141,0.629252383 L48.9196496,0.629252383 C50.1729041,0.629252383 51.2303376,1.06806738 52.1026312,1.94929422 L52.1026312,1.94929422 Z" id="Fill-1" fill="#4A4A4A"></path>
+ <path d="M29.5963336,32.5871184 C29.5963336,33.0514349 29.4415258,33.6764764 29.1304633,34.4622428 C28.9322514,35.0724024 28.6356569,35.3774821 28.2406799,35.3774821 C27.8442561,35.3774821 27.5462148,35.0724024 27.3494497,34.4622428 C27.0383872,33.6764764 26.8835794,33.0514349 26.8835794,32.5871184 C26.8835794,32.1808415 27.010898,31.8459978 27.2655352,31.5840757 C27.5187256,31.3221536 27.8442561,31.1926807 28.2406799,31.1926807 C28.6356569,31.1926807 28.9611874,31.3221536 29.2143778,31.5840757 C29.469015,31.8459978 29.5963336,32.1808415 29.5963336,32.5871184 L29.5963336,32.5871184 Z M30.1475653,22.2545877 C29.6108016,21.7024677 28.9742086,21.4256637 28.2406799,21.4256637 C27.5042575,21.4256637 26.8691114,21.7024677 26.3323477,22.2545877 C25.7955841,22.8067077 25.5264789,23.4600248 25.5264789,24.2160273 L25.5264789,27.006391 L30.9519873,27.006391 L30.9519873,24.2160273 C30.9519873,23.4600248 30.6828821,22.8067077 30.1475653,22.2545877 Z M35.7843068,27.6165506 C36.1807306,28.0243157 36.3774958,28.5183961 36.3774958,29.0987918 L36.3774958,33.9815562 C36.3774958,35.7257195 35.7843068,37.2079607 34.597929,38.4297679 C33.4115511,39.650087 31.9705361,40.2602465 30.2748839,40.2602465 L26.2050291,40.2602465 C24.5093769,40.2602465 23.0683618,39.650087 21.881984,38.4297679 C20.6956062,37.2079607 20.1024172,35.7257195 20.1024172,33.9815562 L20.1024172,29.0987918 C20.1024172,28.5183961 20.2991823,28.0243157 20.6956062,27.6165506 C21.0905832,27.2102736 21.5709215,27.006391 22.1366212,27.006391 L22.1366212,24.2160273 C22.1366212,22.471864 22.7298101,20.9896228 23.916188,19.7693038 C25.1040126,18.5474965 26.5450277,17.937337 28.2406799,17.937337 C29.9348853,17.937337 31.3759004,18.5474965 32.563725,19.7693038 C33.7501029,20.9896228 34.3432918,22.471864 34.3432918,24.2160273 L34.3432918,27.006391 C34.9089915,27.006391 35.387883,27.2102736 35.7843068,27.6165506 L35.7843068,27.6165506 Z" id="Fill-1" stroke="#4A4A4A" stroke-width="1.458" fill="#7ED321" transform="translate(28.239956, 29.098792) rotate(-24.000000) translate(-28.239956, -29.098792) "></path>
+ <path d="M26.7028655,24.447555 L7.19909254,11.6967421 C6.5724653,11.2723145 6.46921422,10.7831437 6.88577892,10.2184391 C7.30234362,9.51705451 7.78655558,9.37677759 8.34553557,9.79760837 L26.7028655,21.8110681 L26.7028655,24.447555 Z" id="Path" fill="#4A4A4A"></path>
+ </g>
+ <path d="M10.2194138,76.214585 L43.4474374,76.214585" id="Line-Copy-13" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round" transform="translate(26.637522, 76.672190) rotate(-90.000000) translate(-26.637522, -76.672190) "></path>
+ <path d="M-0.198803156,65.6896743 L19.0226866,65.6896743" id="Line-Copy-12" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round" transform="translate(9.424816, 66.147279) rotate(-90.000000) translate(-9.424816, -66.147279) "></path>
+ <path d="M34.2266093,65.6896743 L53.448099,65.6896743" id="Line-Copy-14" stroke="#4A4A4A" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round" transform="translate(43.850228, 66.147279) rotate(-90.000000) translate(-43.850228, -66.147279) "></path>
+ </g>
+ <g id="FEATURES" transform="translate(0.809091, 97.500000)">
+ <ellipse id="Oval-Copy" stroke="#F2A641" stroke-width="2.187" cx="150.378449" cy="56.9741856" rx="3.62372762" ry="3.66083853"></ellipse>
+ <ellipse id="Oval-Copy-4" stroke="#F2A641" stroke-width="2.187" cx="150.378449" cy="56.9741856" rx="3.62372762" ry="3.66083853"></ellipse>
+ <ellipse id="Oval-Copy-2" stroke="#F2A641" stroke-width="2.187" cx="39.4673921" cy="16.9672054" rx="3.62372762" ry="3.66083853"></ellipse>
+ <g id="Group-18" transform="translate(116.409126, 26.660381)" stroke="#4A4A4A">
+ <ellipse id="Oval" stroke-width="0.729" fill="#F2A641" cx="56.1677782" cy="3.66083853" rx="3.62372762" ry="3.66083853"></ellipse>
+ <path d="M39.4080379,3.66083853 L47.6116002,3.66083853" id="Line-Copy-3" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path>
+ <path d="M0.794598038,3.66083853 L34.0226216,3.66083853" id="Line-Copy-4" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path>
+ <path d="M18.0073043,11.8977252 L37.228794,11.8977252" id="Line-Copy-5" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path>
+ </g>
+ <g id="Group-14" transform="translate(30.173780, 45.866018) scale(-1, 1) translate(-30.173780, -45.866018) translate(0.237417, 38.959768)" stroke="#4A4A4A">
+ <ellipse id="Oval-Copy-3" stroke-width="0.729" fill="#F2A641" cx="56.1677782" cy="3.66083853" rx="3.62372762" ry="3.66083853"></ellipse>
+ <path d="M39.4080379,3.66083853 L47.6116002,3.66083853" id="Line-Copy-9" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path>
+ <path d="M0.794598038,3.66083853 L34.0226216,3.66083853" id="Line-Copy-10" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path>
+ <path d="M18.0073043,11.8977252 L37.228794,11.8977252" id="Line-Copy-11" stroke-width="1.458" stroke-linecap="round" stroke-linejoin="round"></path>
+ </g>
+ <g id="Group-16" transform="translate(100.327273, 5.687500)">
+ <path d="M2.4660568,2.35696127 L2.4660568,19.7459443 L19.678763,19.7459443 L19.678763,2.35696127 L2.4660568,2.35696127 Z M18.9727731,3.07018128 L18.9727731,14.6854785 L18.4684946,14.6854785 L16.0143392,9.7608642 C15.7678018,9.17217172 15.3083527,8.8778299 14.635978,8.8778299 C14.0308408,8.8778299 13.5825977,9.1382092 13.2912353,9.65897562 L11.374977,12.9533728 C10.366415,11.6854198 9.31304374,11.0514528 8.21483173,11.0514528 C7.67693197,11.0514528 7.13904028,11.3118321 6.60114052,11.8325985 C6.06324076,12.3533649 5.67102807,12.8458214 5.42449068,13.3099828 C5.17795329,13.7741442 4.95383176,14.2326382 4.75211935,14.6854785 L3.17204671,14.6854785 L3.17204671,3.07018128 L18.9727731,3.07018128 Z M17.661649,14.6854785 L5.52534638,14.6854785 C6.46667096,12.738265 7.36315711,11.7646728 8.21483173,11.7646728 C8.39413165,11.7646728 8.56782584,11.7873145 8.73591952,11.8325985 C8.90401319,11.8778825 9.0665013,11.9401472 9.22338873,12.0193942 C9.38027616,12.0986413 9.5315582,12.189208 9.67723939,12.2910971 C9.82292057,12.3929862 9.95739349,12.5005341 10.0806622,12.6137442 C10.2039309,12.7269543 10.3215947,12.8345023 10.4336571,12.9363914 C10.5457196,13.0382804 10.6409712,13.1458284 10.719415,13.2590385 C10.7978587,13.3722486 10.8706982,13.4628153 10.9379356,13.5307414 C11.0051731,13.5986674 11.0499974,13.6552716 11.0724099,13.7005557 L11.139647,13.8024442 C11.229297,13.9156543 11.3301517,13.9609377 11.4422141,13.9382957 C11.5766891,13.9382957 11.6775438,13.8816915 11.7447812,13.7684814 L13.8963695,10.0325671 C14.0756694,9.73822082 14.3222031,9.59104991 14.635978,9.59104991 C14.9721653,9.59104991 15.218699,9.74954166 15.3755865,10.0665299 L17.661649,14.6854785 Z M3.17204671,19.0327243 L3.17204671,15.3986985 L18.9727731,15.3986985 L18.9727731,19.0327243 L3.17204671,19.0327243 Z M7.13903759,8.8778299 L9.29062587,8.8778299 C9.87335061,8.8778299 10.3776241,8.66273396 10.8034614,8.23253561 C11.2292987,7.80233726 11.4422141,7.2928995 11.4422141,6.70420703 C11.4422141,6.11551455 11.2292987,5.60607679 10.8034614,5.17587844 C10.3776241,4.74568009 9.87335061,4.53058415 9.29062587,4.53058415 C8.25965133,4.53058415 7.57608064,5.01738024 7.23989329,5.99098702 C6.83646847,5.94570298 6.47787401,6.07023221 6.16409915,6.36457845 C5.85032429,6.65892469 5.69343922,7.0098707 5.69343922,7.41742703 C5.69343922,7.82498336 5.83351518,8.17026896 6.1136713,8.45329418 C6.39382743,8.73631941 6.73561277,8.8778299 7.13903759,8.8778299 Z M7.13903759,6.70420703 C7.20627506,6.70420703 7.2847176,6.7268487 7.37436756,6.77213274 L7.81140893,6.90798417 L7.87864606,6.46646702 C7.92347104,6.10419473 8.08035612,5.80985291 8.349306,5.58343273 C8.61825588,5.35701255 8.93202603,5.24380415 9.29062587,5.24380415 C9.6716382,5.24380415 10.0022175,5.38531465 10.2823736,5.66833987 C10.5625297,5.9513651 10.7026057,6.2966507 10.7026057,6.70420703 C10.7026057,7.11176335 10.5625297,7.45704895 10.2823736,7.74007418 C10.0022175,8.0230994 9.6716382,8.1646099 9.29062587,8.1646099 L7.13903759,8.1646099 C6.93732518,8.1646099 6.76363099,8.09102444 6.61794981,7.94385132 C6.47226862,7.7966782 6.39942912,7.6212052 6.39942912,7.41742703 C6.39942912,7.23629089 6.47226862,7.07213872 6.61794981,6.9249656 C6.76363099,6.77779248 6.93732518,6.70420703 7.13903759,6.70420703 Z" id="Page-1" fill="#000000" transform="translate(11.072410, 11.051453) rotate(-19.000000) translate(-11.072410, -11.051453) "></path>
+ <path d="M18.2294448,3.09731161 L18.2294448,14.7126089 L17.7251663,14.7126089 L15.271011,9.78799452 C15.0244736,9.19930205 14.5650244,8.90496023 13.8926497,8.90496023 C13.2875125,8.90496023 12.8392694,9.16533953 12.5479071,9.68610595 L10.6316487,12.9805031 C9.6230867,11.7125501 8.56971547,11.0785831 7.47150346,11.0785831 C6.9336037,11.0785831 6.39571201,11.3389624 5.85781225,11.8597288 C5.3199125,12.3804952 4.92769981,12.8729518 4.68116242,13.3371131 C4.43462503,13.8012745 4.21050349,14.2597685 4.00879108,14.7126089 L2.42871844,14.7126089 L2.42871844,3.09731161 L18.2294448,3.09731161 Z" id="Path" fill="#CFEEEF" transform="translate(10.329082, 8.904960) rotate(-18.000000) translate(-10.329082, -8.904960) "></path>
+ <path d="M18.1951663,14.2731589 L6.0588637,14.2731589 C7.00018827,12.3259453 7.89667442,11.3523532 8.74834904,11.3523532 C8.92764896,11.3523532 9.10134315,11.3749948 9.26943683,11.4202789 C9.4375305,11.4655629 9.60001862,11.5278275 9.75690605,11.6070746 C9.91379348,11.6863216 10.0650755,11.7768884 10.2107567,11.8787774 C10.3564379,11.9806665 10.4909108,12.0882145 10.6141795,12.2014246 C10.7374482,12.3146347 10.855112,12.4221827 10.9671745,12.5240717 C11.0792369,12.6259608 11.1744886,12.7335088 11.2529323,12.8467189 C11.331376,12.959929 11.4042155,13.0504957 11.471453,13.1184217 C11.5386904,13.1863478 11.5835147,13.242952 11.6059272,13.288236 L11.6731644,13.3901246 C11.7628143,13.5033347 11.863669,13.548618 11.9757315,13.525976 C12.1102064,13.525976 12.2110611,13.4693718 12.2782986,13.3561617 L14.4298868,9.62024742 C14.6091868,9.32590118 14.8557204,9.17873027 15.1694953,9.17873027 C15.5056827,9.17873027 15.7522163,9.33722202 15.9091038,9.65421028 L18.1951663,14.2731589 Z" id="Path" fill="#7ED321" transform="translate(12.127015, 11.725945) rotate(-19.000000) translate(-12.127015, -11.725945) "></path>
+ </g>
+ <g id="Group-13" transform="translate(52.281643, 9.750000)">
+ <path d="M18.9573329,2.74026634 L16.7278911,0.487992636 C16.653576,0.41291647 16.5544907,0.375378951 16.4306322,0.375378951 C16.3315454,0.375378951 16.2448457,0.41291647 16.1705306,0.487992636 L15.8361144,0.788295797 C15.4645389,0.538041911 15.0372335,0.437941859 14.5541853,0.487992636 C14.0711372,0.538043413 13.6686031,0.725731011 13.346571,1.05106106 L8.88768743,5.59314637 C8.66474213,5.76832409 8.66474213,5.95601168 8.88768743,6.15621479 C8.96200253,6.23129096 9.04870217,6.26882848 9.14778897,6.26882848 C9.27164747,6.26882848 9.37073278,6.23129096 9.44504788,6.15621479 L13.9039315,1.61412949 C14.3002787,1.21372327 14.7585482,1.13864823 15.2787539,1.38890212 L3.83428602,12.9505738 C3.63611242,13.1257515 3.63611242,13.3134391 3.83428602,13.5136422 L3.98291547,13.6637938 C3.88382867,13.6387684 3.75997203,13.6262559 3.61134184,13.6262559 C2.96727765,13.6262559 2.40992277,13.8639935 1.93926049,14.3394759 C0.94839251,15.3154661 0.452965953,16.8044544 0.452965953,18.8064854 L0.452965953,19.2194023 L0.824539586,19.2194023 C1.07225658,19.2194023 1.38189818,19.2006335 1.75347367,19.1630954 C2.12504916,19.1255574 2.6947897,18.9816635 3.46271238,18.7314096 C4.23063506,18.4811558 4.8375326,18.1308056 5.28342319,17.6803486 C5.72931378,17.2298916 5.95225573,16.6668288 5.95225573,15.9911433 C5.95225573,15.840991 5.93987006,15.7283784 5.91509836,15.6533022 L6.06372782,15.7659159 C6.16281461,15.8660175 6.26189992,15.9160675 6.36098672,15.9160675 C6.43530182,15.9160675 6.52200147,15.8660175 6.62108827,15.7659159 L14.4612919,7.84542007 L18.9573329,3.34087266 C19.1059631,3.14066955 19.1059631,2.94046945 18.9573329,2.74026634 Z M4.72606274,17.1172802 C4.15631365,17.6928641 3.21500319,18.0932643 1.90210312,18.3184928 L3.35124029,16.816977 C3.52464219,16.6167739 3.52464219,16.4290863 3.35124029,16.2539086 C3.1778384,16.0787308 2.99205344,16.0787308 2.79387984,16.2539086 L1.30758531,17.7554244 C1.5305306,16.4040534 1.92687185,15.4531029 2.49662094,14.9025443 C2.81865303,14.5772143 3.19022295,14.4145517 3.61134184,14.4145517 C4.03246073,14.4145517 4.40403064,14.5772143 4.72606274,14.9025443 C5.02332313,15.202849 5.1719511,15.5657117 5.1719511,15.9911433 C5.1719511,16.4416003 5.02332313,16.8169755 4.72606274,17.1172802 Z M6.36098672,14.9400822 L4.65174801,13.250877 L11.9717486,5.85591163 L13.6438299,7.5826548 L6.36098672,14.9400822 Z M14.2011904,7.01958638 L12.529109,5.29284321 L16.4306322,1.35136422 L18.1027135,3.0405695 L14.2011904,7.01958638 Z" id="o" fill="#000000"></path>
+ <path d="M4.72606274,17.1172802 C4.15631365,17.6928641 3.21500319,18.0932643 1.90210312,18.3184928 L3.35124029,16.816977 C3.52464219,16.6167739 3.52464219,16.4290863 3.35124029,16.2539086 C3.1778384,16.0787308 2.99205344,16.0787308 2.79387984,16.2539086 L1.30758531,17.7554244 C1.5305306,16.4040534 1.92687185,15.4531029 2.49662094,14.9025443 C2.81865303,14.5772143 3.19022295,14.4145517 3.61134184,14.4145517 C4.03246073,14.4145517 4.40403064,14.5772143 4.72606274,14.9025443 C5.02332313,15.202849 5.1719511,15.5657117 5.1719511,15.9911433 C5.1719511,16.4416003 5.02332313,16.8169755 4.72606274,17.1172802 Z" id="Path" fill="#E8E8E7"></path>
+ <polygon id="Path" fill="#E9E7F3" points="6.36098672 14.9400822 4.65174801 13.250877 11.9717486 5.85591163 13.6438299 7.5826548"></polygon>
+ <polygon id="Path" fill="#F2565B" points="14.2011904 7.01958638 12.529109 5.29284321 16.4306322 1.35136422 18.1027135 3.0405695"></polygon>
+ </g>
+ <g id="Group-11" transform="translate(120.349457, 46.974705) rotate(-45.000000) translate(-120.349457, -46.974705) translate(112.663093, 40.880955)">
+ <path d="M13.9188613,6.48304803 L11.574632,10.2722268 C11.3792786,10.5682579 11.1155555,10.7162712 10.7834546,10.7162712 L1.87538342,10.7162712 C1.60188863,10.7162712 1.37723558,10.6274632 1.2014175,10.4498445 C1.02559943,10.2722259 0.937691709,10.0452722 0.937691709,9.76897649 L0.937691709,2.19061897 C0.937691709,1.9143233 1.02559943,1.68736955 1.2014175,1.50975091 C1.37723558,1.33213227 1.60188863,1.24332428 1.87538342,1.24332428 L10.7834546,1.24332428 C11.1155555,1.24332428 11.3792786,1.3913376 11.574632,1.68736867 L13.9188613,5.47654743 C14.1532854,5.81204931 14.1532854,6.14754615 13.9188613,6.48304803 Z" id="Path" fill="#F2A641"></path>
+ <path d="M10.7834546,4.55885569 C10.3927478,4.55885569 10.060652,4.69700146 9.78715721,4.97329712 C9.51366243,5.24959279 9.37691709,5.58508964 9.37691709,5.97979773 C9.37691709,6.37450582 9.51366243,6.71000267 9.78715721,6.98629834 C10.060652,7.262594 10.3927478,7.40073976 10.7834546,7.40073976 C11.1741615,7.40073976 11.5062573,7.262594 11.7797521,6.98629834 C12.0532469,6.71000267 12.1899922,6.37450582 12.1899922,5.97979773 C12.1899922,5.58508964 12.0532469,5.24959279 11.7797521,4.97329712 C11.5062573,4.69700146 11.1741615,4.55885569 10.7834546,4.55885569 Z" id="Path" fill="#FFFFFF"></path>
+ <path d="M14.7100387,4.97329712 L12.3658094,1.18411836 C12.0337086,0.592056221 11.5062623,0.296029591 10.7834546,0.296029591 L1.87538342,0.296029591 C1.36746454,0.296029591 0.927925943,0.483513123 0.556754452,0.858485813 C0.185582961,1.2334585 -2.87349942e-13,1.67749845 -2.87349942e-13,2.19061897 L-2.87349942e-13,9.76897649 C-2.87349942e-13,10.282097 0.185582961,10.726137 0.556754452,11.1011096 C0.927925943,11.4760823 1.36746454,11.6635659 1.87538342,11.6635659 L10.7834546,11.6635659 C11.5062623,11.6635659 12.0337086,11.3675392 12.3658094,10.7754771 L14.7100387,6.98629834 C15.1202809,6.31529458 15.1202809,5.64430088 14.7100387,4.97329712 Z M13.9188613,6.48304803 L11.574632,10.2722268 C11.3792786,10.5682579 11.1155555,10.7162712 10.7834546,10.7162712 L1.87538342,10.7162712 C1.60188863,10.7162712 1.37723558,10.6274632 1.2014175,10.4498445 C1.02559943,10.2722259 0.937691709,10.0452722 0.937691709,9.76897649 L0.937691709,2.19061897 C0.937691709,1.9143233 1.02559943,1.68736955 1.2014175,1.50975091 C1.37723558,1.33213227 1.60188863,1.24332428 1.87538342,1.24332428 L10.7834546,1.24332428 C11.1155555,1.24332428 11.3792786,1.3913376 11.574632,1.68736867 L13.9188613,5.47654743 C14.1532854,5.81204931 14.1532854,6.14754615 13.9188613,6.48304803 Z M10.7834546,4.55885569 C10.3927478,4.55885569 10.060652,4.69700146 9.78715721,4.97329712 C9.51366243,5.24959279 9.37691709,5.58508964 9.37691709,5.97979773 C9.37691709,6.37450582 9.51366243,6.71000267 9.78715721,6.98629834 C10.060652,7.262594 10.3927478,7.40073976 10.7834546,7.40073976 C11.1741615,7.40073976 11.5062573,7.262594 11.7797521,6.98629834 C12.0532469,6.71000267 12.1899922,6.37450582 12.1899922,5.97979773 C12.1899922,5.58508964 12.0532469,5.24959279 11.7797521,4.97329712 C11.5062573,4.69700146 11.1741615,4.55885569 10.7834546,4.55885569 Z M10.7834546,6.92709242 C10.5099599,6.92709242 10.2853068,6.83828443 10.1094887,6.66066579 C9.93367066,6.48304715 9.84576294,6.2560934 9.84576294,5.97979773 C9.84576294,5.70350206 9.93367066,5.47654831 10.1094887,5.29892967 C10.2853068,5.12131103 10.5099599,5.03250304 10.7834546,5.03250304 C11.0569494,5.03250304 11.2816025,5.12131103 11.4574206,5.29892967 C11.6332386,5.47654831 11.7211464,5.70350206 11.7211464,5.97979773 C11.7211464,6.2560934 11.6332386,6.48304715 11.4574206,6.66066579 C11.2816025,6.83828443 11.0569494,6.92709242 10.7834546,6.92709242 Z" id="S" fill="#000000"></path>
+ </g>
+ <g id="Group-12" transform="translate(78.800281, 2.437500)" fill="#000000">
+ <path d="M13.3058749,1.49385501 C12.5131805,0.68946752 11.5506375,0.287279809 10.4182169,0.287279809 C9.28579637,0.287279809 8.32325335,0.68946752 7.53055897,1.49385501 L0.934242278,8.1300186 C0.311410979,8.76203734 0,9.52332122 0,10.4138931 C0,11.3044649 0.311410979,12.0561729 0.934242278,12.6690396 C1.5381999,13.3010583 2.27898056,13.617063 3.15660648,13.617063 C4.03423241,13.617063 4.78444976,13.3010583 5.40728106,12.6690396 L12.0319081,6.06160397 C12.4660027,5.60195398 12.6830467,5.0561278 12.6830467,4.42410906 C12.6830467,3.79209032 12.4660027,3.24626414 12.0319081,2.78661415 C11.5789399,2.34611624 11.0410482,2.12587059 10.4182169,2.12587059 C9.79538562,2.12587059 9.25749393,2.34611624 8.80452571,2.78661415 L3.8502106,7.84273879 C3.64260017,8.05341171 3.64260017,8.27365736 3.8502106,8.50348235 C4.05782103,8.71415527 4.27486505,8.71415527 4.50134916,8.50348235 L9.45566427,3.44735771 C9.71989573,3.17922855 10.0407434,3.04516598 10.4182169,3.04516598 C10.7956904,3.04516598 11.1165381,3.17922855 11.3807696,3.44735771 C11.645001,3.71548687 11.7771148,4.0410674 11.7771148,4.42410906 C11.7771148,4.80715072 11.645001,5.13273125 11.3807696,5.40086041 L4.75614251,12.037024 C4.32204796,12.4775219 3.79359297,12.6977676 3.17076167,12.6977676 C2.54793037,12.6977676 2.01003868,12.4775219 1.55707046,12.037024 C1.12297592,11.577374 0.905931906,11.0315478 0.905931906,10.3995291 C0.905931906,9.76751035 1.12297592,9.23126007 1.55707046,8.79076216 L8.12507678,2.21205453 C8.72903441,1.58003579 9.46981507,1.26403116 10.347441,1.26403116 C11.2250669,1.26403116 11.9752843,1.58003579 12.5981156,2.21205453 C13.2209469,2.84407327 13.5323578,3.60535715 13.5323578,4.49592901 C13.5323578,5.38650088 13.2209469,6.13820886 12.5981156,6.75107552 L7.7004212,11.7497442 C7.45506342,11.9604171 7.45506342,12.1710869 7.7004212,12.3817598 C7.90803163,12.6307369 8.11563895,12.6307369 8.32324939,12.3817598 L13.3058749,7.35436312 C14.0985692,6.54997563 14.4949105,5.57323404 14.4949105,4.42410906 C14.4949105,3.27498408 14.0985692,2.2982425 13.3058749,1.49385501 Z" id="O"></path>
+ </g>
+ <g id="Group-10" transform="translate(96.701026, 58.585957) rotate(-21.000000) translate(-96.701026, -58.585957) translate(85.778299, 47.210957)">
+ <g id="Group-19" transform="translate(-0.000000, 0.000000)">
+ <path d="M13.5889786,15.1009589 C11.7204847,15.1009589 10.1209647,14.4288586 8.79037052,13.0846377 C7.45977638,11.7404168 6.79448929,10.124516 6.79448929,8.23688669 C6.79448929,6.34925739 7.45977638,4.73335654 8.79037052,3.38913567 C10.1209647,2.0449148 11.7204847,1.37281445 13.5889786,1.37281445 C15.4574725,1.37281445 17.0569925,2.0449148 18.3875867,3.38913567 C19.7181808,4.73335654 20.3834679,6.34925739 20.3834679,8.23688669 C20.3834679,10.124516 19.7181808,11.7404168 18.3875867,13.0846377 C17.0569925,14.4288586 15.4574725,15.1009589 13.5889786,15.1009589 Z" id="Path" fill="#E9E7F3"></path>
+ <path d="M13.5889786,6.23501251e-13 C11.3241375,6.23501251e-13 9.39905145,0.80080042 7.81366269,2.40242528 C6.22827393,4.00405015 5.43559144,5.94885117 5.43559144,8.23688669 C5.43559144,9.609708 5.74700241,10.8967087 6.36983371,12.0979273 L0.721914488,17.8036874 C0.240635756,18.2898949 -2.87446834e-13,18.8761952 -2.87446834e-13,19.5626059 C-2.87446834e-13,20.2204161 0.233558234,20.7852664 0.700681708,21.2571737 C1.16780518,21.729081 1.72692944,21.9650312 2.37807125,21.9650312 C3.05752358,21.9650312 3.6378804,21.721931 4.11915913,21.2357235 L9.76707836,15.5299634 C10.9561199,16.1591732 12.2300739,16.4737734 13.5889786,16.4737734 C15.8538197,16.4737734 17.7789057,15.672973 19.3642945,14.0713481 C20.9496833,12.4697232 21.7423657,10.5249222 21.7423657,8.23688669 C21.7423657,5.94885117 20.9496833,4.00405015 19.3642945,2.40242528 C17.7789057,0.80080042 15.8538197,6.23501251e-13 13.5889786,6.23501251e-13 Z M3.26984797,20.3777145 C3.01505335,20.6351185 2.71779742,20.7638185 2.37807125,20.7638185 C2.0666556,20.7638185 1.79063224,20.6422685 1.54999287,20.3991647 C1.3093535,20.1560609 1.18903563,19.8772108 1.18903563,19.5626059 C1.18903563,19.2766014 1.31643103,18.9763013 1.57122565,18.6616964 L7.04928264,13.1275382 C7.53056137,13.7853484 8.09676315,14.3573487 8.74790497,14.8435562 L3.26984797,20.3777145 Z M13.5889786,15.1009589 C11.7204847,15.1009589 10.1209647,14.4288586 8.79037052,13.0846377 C7.45977638,11.7404168 6.79448929,10.124516 6.79448929,8.23688669 C6.79448929,6.34925739 7.45977638,4.73335654 8.79037052,3.38913567 C10.1209647,2.0449148 11.7204847,1.37281445 13.5889786,1.37281445 C15.4574725,1.37281445 17.0569925,2.0449148 18.3875867,3.38913567 C19.7181808,4.73335654 20.3834679,6.34925739 20.3834679,8.23688669 C20.3834679,10.124516 19.7181808,11.7404168 18.3875867,13.0846377 C17.0569925,14.4288586 15.4574725,15.1009589 13.5889786,15.1009589 Z M13.5889786,3.43203612 C12.286695,3.43203612 11.1684464,3.90393637 10.2341995,4.84775102 C9.29995255,5.79156567 8.83283608,6.92126627 8.83283608,8.23688669 C8.83283608,8.46569024 8.94607644,8.5800903 9.17256055,8.5800903 C9.39904466,8.5800903 9.51228501,8.46569024 9.51228501,8.23688669 C9.51228501,7.09286893 9.90862626,6.12046842 10.7013206,5.31965599 C11.494015,4.51884356 12.456558,4.11844335 13.5889786,4.11844335 C13.8154627,4.11844335 13.9287031,4.00404329 13.9287031,3.77523973 C13.9287031,3.54643618 13.8154627,3.43203612 13.5889786,3.43203612 Z" id="Page-1" fill="#000000"></path>
+ </g>
+ <path d="M3.26984797,20.3777145 C3.01505335,20.6351185 2.71779742,20.7638185 2.37807125,20.7638185 C2.0666556,20.7638185 1.79063224,20.6422685 1.54999287,20.3991647 C1.3093535,20.1560609 1.18903563,19.8772108 1.18903563,19.5626059 C1.18903563,19.2766014 1.31643103,18.9763013 1.57122565,18.6616964 L7.04928264,13.1275382 C7.53056137,13.7853484 8.09676315,14.3573487 8.74790497,14.8435562 L3.26984797,20.3777145 Z" id="Path" fill="#F6A623"></path>
+ </g>
+ <g id="Group-5" transform="translate(85.113777, 33.321092) rotate(-11.000000) translate(-85.113777, -33.321092) translate(75.809231, 25.196092)">
+ <path d="M18.0832502,9.41128655 L15.8184204,1.13762804 C15.6532757,0.609030553 15.2876037,0.344735771 14.7213935,0.344735771 L3.39724465,0.344735771 C2.83103438,0.344735771 2.46536239,0.609030553 2.30021773,1.13762804 L0.0353879651,9.41128655 C0.0117958704,9.48023405 1.73514536e-13,9.58365375 1.73514536e-13,9.72154874 L1.73514536e-13,13.5825894 C1.73514536e-13,14.1801344 0.224121538,14.6972329 0.672371336,15.1339004 C1.12062114,15.5705678 1.6514353,15.7888983 2.26482976,15.7888983 L15.8538084,15.7888983 C16.4672028,15.7888983 16.998017,15.5705678 17.4462668,15.1339004 C17.8945166,14.6972329 18.1186381,14.1801344 18.1186381,13.5825894 L18.1186381,9.72154874 C18.1186381,9.58365375 18.1068422,9.48023405 18.0832502,9.41128655 Z M15.1106611,9.16997151 L12.8104434,9.16997151 C12.3621936,9.16997151 12.0201133,9.3768109 11.7841924,9.7904959 L10.9702692,11.3762804 L7.14836895,11.3762804 L6.33444575,9.7904959 C6.0985248,9.3768109 5.75644456,9.16997151 5.30819476,9.16997151 L3.00797703,9.16997151 L4.67121139,3.10262194 L13.4474267,3.10262194 L15.1106611,9.16997151 Z" id="Path" fill="#34A6C9"></path>
+ <path d="M18.0832502,9.41128655 L15.8184204,1.13762804 C15.6532757,0.609030553 15.2876037,0.344735771 14.7213935,0.344735771 L3.39724465,0.344735771 C2.83103437,0.344735771 2.46536239,0.609030553 2.30021773,1.13762804 L0.0353879651,9.41128655 C0.0117958704,9.48023405 -1.55822022e-13,9.58365375 -1.55822022e-13,9.72154874 L-1.55822022e-13,13.5825894 C-1.55822022e-13,14.1801344 0.224121538,14.6972329 0.672371336,15.1339004 C1.12062114,15.5705678 1.6514353,15.7888983 2.26482976,15.7888983 L15.8538084,15.7888983 C16.4672028,15.7888983 16.998017,15.5705678 17.4462668,15.1339004 C17.8945166,14.6972329 18.1186381,14.1801344 18.1186381,13.5825894 L18.1186381,9.72154874 C18.1186381,9.58365375 18.1068422,9.48023405 18.0832502,9.41128655 Z M16.9862232,13.5825894 C16.9862232,13.9043444 16.8800604,14.1686392 16.6677316,14.3754817 C16.4554027,14.5823242 16.1840977,14.6857438 15.8538084,14.6857438 L2.26482976,14.6857438 C1.93454044,14.6857438 1.66323542,14.5823242 1.45090657,14.3754817 C1.23857772,14.1686392 1.13241488,13.9043444 1.13241488,13.5825894 L1.13241488,9.72154874 L3.39724465,1.44789024 L14.7213935,1.44789024 L16.9862232,9.72154874 L16.9862232,13.5825894 Z M13.4474267,2.55104471 L4.67121139,2.55104471 C4.38810625,2.55104471 4.2111682,2.68893764 4.14039191,2.96472763 L2.19405383,9.58365444 C2.12327755,9.74453193 2.14686929,9.90540702 2.26482976,10.0662845 C2.38279024,10.2041795 2.53613655,10.273126 2.72487331,10.273126 L5.30819476,10.273126 L6.12211796,11.8589105 C6.3580389,12.2725955 6.70011915,12.4794349 7.14836895,12.4794349 L10.9702692,12.4794349 C11.418519,12.4794349 11.7605992,12.2725955 11.9965202,11.8589105 L12.8104434,10.273126 L15.3937648,10.273126 C15.6060937,10.273126 15.75944,10.2041795 15.8538084,10.0662845 C15.9717688,9.90540702 15.9953606,9.74453193 15.9245843,9.58365444 L13.9782462,2.96472763 C13.9074699,2.68893764 13.7305319,2.55104471 13.4474267,2.55104471 Z M15.1106611,9.16997151 L12.8104434,9.16997151 C12.3621936,9.16997151 12.0201133,9.3768109 11.7841924,9.7904959 L10.9702692,11.3762804 L7.14836895,11.3762804 L6.33444575,9.7904959 C6.0985248,9.3768109 5.75644456,9.16997151 5.30819476,9.16997151 L3.00797703,9.16997151 L4.67121139,3.10262194 L13.4474267,3.10262194 L15.1106611,9.16997151 Z" id="R" fill="#000000"></path>
+ </g>
+ <rect id="Rectangle-4" fill="#6CBFD2" x="50.6634609" y="0.119301753" width="5.43559144" height="5.49125779"></rect>
+ <polygon id="Rectangle-4-Copy-3" fill="#B8E986" points="129.479537 7.44097881 134.915128 12.9322366 129.479537 12.9322366"></polygon>
+ <polygon id="Rectangle-4-Copy-4" fill="#B8E986" points="162.093085 44.0493641 167.528677 49.5406219 162.093085 49.5406219"></polygon>
+ <rect id="Rectangle-4-Copy" fill="#6CBFD2" x="132.487855" y="66.0143953" width="5.43559144" height="5.49125779"></rect>
+ <rect id="Rectangle-4-Copy-6" fill="#6CBFD2" x="37.0744823" y="65.0991856" width="5.43559144" height="5.49125779"></rect>
+ <rect id="Rectangle-4-Copy-7" fill="#6CBFD2" x="134.915128" y="2.86493065" width="5.43559144" height="5.49125779"></rect>
+ <g id="Group-9" transform="translate(66.477527, 55.934907) rotate(135.000000) translate(-66.477527, -55.934907) translate(63.645709, 47.809907)">
+ <path d="M2.73743369,0.131688952 C2.67225638,0.0438958783 2.57449186,-6.48370246e-13 2.44413723,-6.48370246e-13 C2.31378259,-6.48370246e-13 2.21601808,0.0438958783 2.15084076,0.131688952 L0.0651769927,3.29222379 C0.021725447,3.38001687 7.00183346e-13,3.44586069 7.00183346e-13,3.48975722 L7.00183346e-13,13.6627287 C7.00183346e-13,14.1455907 0.168372214,14.5626015 0.505121694,14.9137738 C0.841871173,15.2649461 1.2492233,15.4405296 1.72719031,15.4405296 L3.12849565,15.4405296 C3.60646265,15.4405296 4.01381479,15.2649461 4.35056426,14.9137738 C4.68731374,14.5626015 4.85568596,14.1455907 4.85568596,13.6627287 L4.85568596,3.48975722 C4.85568596,3.40196415 4.84482323,3.33612033 4.82309746,3.29222379 L2.73743369,0.131688952 Z" id="Path" fill="#F5E6B3"></path>
+ <path d="M0.684358424,3.58852394 L1.46648234,2.43624561 L3.42179212,2.43624561 L4.17132753,3.58852394 L4.17132753,3.85190184 C4.17132753,4.02748799 4.10071983,4.18661055 3.95950231,4.32927429 C3.81828478,4.47193803 3.66077529,4.54326884 3.48696911,4.54326884 C3.29143716,4.54326884 3.12306494,4.47193803 2.98184742,4.32927429 C2.84062989,4.18661055 2.77002219,4.02748799 2.77002219,3.85190184 C2.77002219,3.61047089 2.66139496,3.48975722 2.44413723,3.48975722 C2.20515373,3.48975722 2.08566377,3.61047089 2.08566377,3.85190184 C2.08566377,4.02748799 2.01505606,4.18661055 1.87383854,4.32927429 C1.73262102,4.47193803 1.57511153,4.54326884 1.40130534,4.54326884 C1.20577339,4.54326884 1.03740117,4.47193803 0.89618365,4.32927429 C0.754966126,4.18661055 0.684358424,4.02748799 0.684358424,3.85190184 L0.684358424,3.58852394 Z" id="Path" fill="#FFFFFF"></path>
+ <path d="M2.73743369,0.131688952 C2.67225638,0.0438958783 2.57449186,1.33113656e-13 2.44413723,1.33113656e-13 C2.31378259,1.33113656e-13 2.21601808,0.0438958783 2.15084076,0.131688952 L0.0651769927,3.29222379 C0.021725447,3.38001687 2.96829228e-14,3.44586069 2.96829228e-14,3.48975722 L2.96829228e-14,13.6627287 C2.96829228e-14,14.1455907 0.168372214,14.5626015 0.505121694,14.9137738 C0.841871173,15.2649461 1.2492233,15.4405296 1.72719031,15.4405296 L3.12849565,15.4405296 C3.60646265,15.4405296 4.01381479,15.2649461 4.35056426,14.9137738 C4.68731374,14.5626015 4.85568596,14.1455907 4.85568596,13.6627287 L4.85568596,3.48975722 C4.85568596,3.40196415 4.84482323,3.33612033 4.82309746,3.29222379 L2.73743369,0.131688952 Z M2.44413723,4.7737245 C2.57449186,4.90541411 2.6831191,4.99320587 2.77002219,5.03710241 L2.77002219,11.2264831 L2.08566377,11.2264831 L2.08566377,5.03710241 C2.2160184,4.9712576 2.33550836,4.88346584 2.44413723,4.7737245 Z M1.40130534,11.2264831 L0.684358424,11.2264831 L0.684358424,5.03710241 C0.923341925,5.16879202 1.16232184,5.23463583 1.40130534,5.23463583 L1.40130534,11.2264831 Z M0.684358424,11.9178501 L4.17132753,11.9178501 L4.17132753,12.6092171 L0.684358424,12.6092171 L0.684358424,11.9178501 Z M3.48696911,11.2264831 L3.48696911,5.23463583 C3.74767839,5.23463583 3.97579558,5.16879202 4.17132753,5.03710241 L4.17132753,11.2264831 L3.48696911,11.2264831 Z M2.44413723,0.954744901 L2.93296467,1.74487861 L1.92272129,1.74487861 L2.44413723,0.954744901 Z M0.684358424,3.58852394 L1.46648234,2.43624561 L3.42179212,2.43624561 L4.17132753,3.58852394 L4.17132753,3.85190184 C4.17132753,4.02748799 4.10071983,4.18661055 3.95950231,4.32927429 C3.81828478,4.47193803 3.66077529,4.54326884 3.48696911,4.54326884 C3.29143716,4.54326884 3.12306494,4.47193803 2.98184742,4.32927429 C2.84062989,4.18661055 2.77002219,4.02748799 2.77002219,3.85190184 C2.77002219,3.61047089 2.66139496,3.48975722 2.44413723,3.48975722 C2.20515373,3.48975722 2.08566377,3.61047089 2.08566377,3.85190184 C2.08566377,4.02748799 2.01505606,4.18661055 1.87383854,4.32927429 C1.73262102,4.47193803 1.57511153,4.54326884 1.40130534,4.54326884 C1.20577339,4.54326884 1.03740117,4.47193803 0.89618365,4.32927429 C0.754966126,4.18661055 0.684358424,4.02748799 0.684358424,3.85190184 L0.684358424,3.58852394 Z M3.12849565,14.7162404 L1.72719031,14.7162404 C1.44475526,14.7162404 1.20034398,14.6119877 0.993949139,14.4034791 C0.787554297,14.1949706 0.684358424,13.9480562 0.684358424,13.6627287 L0.684358424,13.3335064 L4.17132753,13.3335064 L4.17132753,13.6627287 C4.17132753,13.9480562 4.07356302,14.1949706 3.87803107,14.4034791 C3.68249911,14.6119877 3.43265647,14.7162404 3.12849565,14.7162404 Z" id="C" fill="#000000"></path>
+ <path d="M3.12849565,14.7162404 L1.72719031,14.7162404 C1.44475526,14.7162404 1.20034398,14.6119877 0.993949139,14.4034791 C0.787554297,14.1949706 0.684358424,13.9480562 0.684358424,13.6627287 L0.684358424,13.3335064 L4.17132753,13.3335064 L4.17132753,13.6627287 C4.17132753,13.9480562 4.07356302,14.1949706 3.87803107,14.4034791 C3.68249911,14.6119877 3.43265647,14.7162404 3.12849565,14.7162404 Z" id="Path" fill="#F2565B"></path>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/web-ui/app/index.html b/web-ui/app/index.html
index b40aecdf..ac4189e1 100644
--- a/web-ui/app/index.html
+++ b/web-ui/app/index.html
@@ -1,15 +1,15 @@
<!DOCTYPE html>
<html>
<head>
-<link rel="icon" type="image/png" href="assets/images/Favicon.png">
+<link rel="icon" type="image/png" href="public/images/favicon.png">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>$account_email - Pixelated Mail</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
-<link href="assets/bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
-<link href="assets/bower_components/jquery-file-upload/css/jquery.fileupload.css" rel="stylesheet" type="text/css">
-<link rel="stylesheet" href="assets/css/style.css">
+<link href="/assets/css/font-awesome.min.css" rel="stylesheet" type="text/css">
+<link href="/assets/css/jquery.fileupload.css" rel="stylesheet" type="text/css">
+<link rel="stylesheet" href="/assets/css/style.css">
</head>
<body>
@@ -25,15 +25,15 @@
<path fill="#3E3B38" d="M233.8,678.3h-24v71.2h16.2v-26.5h7.8c14,0,24.3-8,24.3-22.9C258.1,685.6,247.6,678.3,233.8,678.3z
M230.6,710.2h-4.6v-18.8h4.6c6.5,0,12.5,2.2,12.5,9.5C243,708.1,237.1,710.2,230.6,710.2z"/>
<rect x="263.5" y="678.3" fill="#3E3B38" width="16.2" height="71.2"/>
- <polygon fill="#3E3B38" points="350.4,678.3 330.1,678.3 316.9,697.7 303.7,678.3 284.6,678.3 307,711.1 282.6,749.5 302.9,749.5
+ <polygon fill="#3E3B38" points="350.4,678.3 330.1,678.3 316.9,697.7 303.7,678.3 284.6,678.3 307,711.1 282.6,749.5 302.9,749.5
316.9,725.3 331,749.5 352.1,749.5 326.9,711.1 "/>
- <polygon fill="#3E3B38" points="354.7,749.5 395.5,749.5 395.5,735.2 370.9,735.2 370.9,721 394.4,721 394.4,706.6 370.9,706.6
+ <polygon fill="#3E3B38" points="354.7,749.5 395.5,749.5 395.5,735.2 370.9,735.2 370.9,721 394.4,721 394.4,706.6 370.9,706.6
370.9,692.5 395.5,692.5 395.5,678.3 354.7,678.3 "/>
<path fill="#3E3B38" d="M456.1,678.3l-22.9,57h-15.9v-57h-16.2v71.2h26.5h14.3h3.2l5.4-14.3h27l5.4,14.3h17.5l-28.9-71.2H456.1z
M455.7,721l7.8-20.7h0.2l7.8,20.7H455.7z"/>
- <polygon fill="#3E3B38" points="486.4,692.5 503.4,692.5 503.4,749.5 519.6,749.5 519.6,692.5 536.6,692.5 536.6,678.3
+ <polygon fill="#3E3B38" points="486.4,692.5 503.4,692.5 503.4,749.5 519.6,749.5 519.6,692.5 536.6,692.5 536.6,678.3
486.4,678.3 "/>
- <polygon fill="#3E3B38" points="542,749.5 582.8,749.5 582.8,735.2 558.4,735.2 558.4,721 581.9,721 581.9,706.6 558.4,706.6
+ <polygon fill="#3E3B38" points="542,749.5 582.8,749.5 582.8,735.2 558.4,735.2 558.4,721 581.9,721 581.9,706.6 558.4,706.6
558.4,692.5 582.8,692.5 582.8,678.3 542,678.3 "/>
<path fill="#3E3B38" d="M606.5,678.3h-17.9v71.2h17.9c19.7,0,35.9-14.9,35.9-35.6C642.4,693.1,625.9,678.3,606.5,678.3z M607,735
h-2.4v-42.1h2.4c12.1,0,20.3,9.1,20.3,21.1C627.3,725.8,619.1,735,607,735z"/>
@@ -92,19 +92,19 @@
</div>
</div>
-<script src="assets/bower_components/modernizr/modernizr.js"></script>
-<script src="assets/bower_components/lodash/dist/lodash.min.js"></script>
-<script src="assets/bower_components/jquery/dist/jquery.min.js"></script>
-<script src="assets/bower_components/jquery-ui/jquery-ui.min.js"></script>
-<script src="assets/bower_components/jquery-file-upload/js/jquery.fileupload.js"></script>
-<script src="assets/bower_components/handlebars/handlebars.min.js"></script>
-<script src="assets/bower_components/typeahead.js/dist/typeahead.bundle.min.js"></script>
-<script src="assets/bower_components/iframe-resizer/js/iframeResizer.min.js"></script>
-<script src="assets/bower_components/foundation/js/foundation.js" ></script>
-<script src="assets/bower_components/foundation/js/foundation/foundation.reveal.js" ></script>
-<script src="assets/bower_components/foundation/js/foundation/foundation.offcanvas.js"></script>
-<script src="assets/js/foundation/initialize_foundation.js"></script>
-<script src="assets/app.js"></script>
+<script src="/assets/modernizr.js"></script>
+<script src="/assets/lodash.min.js"></script>
+<script src="/assets/jquery.min.js"></script>
+<script src="/assets/jquery-ui.min.js"></script>
+<script src="/assets/jquery.fileupload.js"></script>
+<script src="/assets/handlebars.min.js"></script>
+<script src="/assets/typeahead.bundle.min.js"></script>
+<script src="/assets/iframeResizer.min.js"></script>
+<script src="/assets/foundation.js" ></script>
+<script src="/assets/foundation.reveal.js" ></script>
+<script src="/assets/foundation.offcanvas.js"></script>
+<script src="/assets/initialize_foundation.js"></script>
+<script src="/assets/app.js"></script>
</body>
</html>
diff --git a/web-ui/app/js/account_recovery.js b/web-ui/app/js/account_recovery.js
deleted file mode 100644
index 441a8936..00000000
--- a/web-ui/app/js/account_recovery.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from 'react'
-import { render } from 'react-dom'
-import Page from 'js/account_recovery/page'
-import a11y from 'react-a11y'
-
-import 'font-awesome/scss/font-awesome.scss'
-
-if(process.env.NODE_ENV === 'development') a11y(React);
-
-render(
- <Page/>,
- document.getElementById('root')
-);
diff --git a/web-ui/app/js/account_recovery/page.js b/web-ui/app/js/account_recovery/page.js
deleted file mode 100644
index 5d4f2c36..00000000
--- a/web-ui/app/js/account_recovery/page.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import React from 'react'
-
-import 'scss/account_recovery/page.scss'
-
-const Page = () => (
- <div className='container'>
- <img src='assets/images/forgot-my-password.svg' alt="Esqueci minha senha!"/>
- <form>
- <h1>E se você esquecer sua senha?</h1>
- <p>Informe outro e-mail que você usa regularmente. Esse será o seu e-mail de recuperação.</p>
- <p>Instruções para recuperar sua senha serão enviadas para esse e-mail, guarde com carinho.</p>
- <div className="field-group">
- <input type="text" name="email" className="email" required/>
- <label className="animated-label" htmlFor="email">Digite seu e-mail de recuperação</label>
- </div>
- <button>Adicionar e-mail</button>
- <div>
- <a href="/">
- <i className="fa fa-angle-left" aria-hidden="true"></i>
- <span>Voltar</span>
- </a>
- </div>
- </form>
- </div>
-);
-
-export default Page
diff --git a/web-ui/app/js/page/default.js b/web-ui/app/js/page/default.js
index ecaedfd8..541bb4b7 100644
--- a/web-ui/app/js/page/default.js
+++ b/web-ui/app/js/page/default.js
@@ -96,7 +96,7 @@ define(
'use strict';
function initialize(path) {
- viewI18n.init(path + '/assets/');
+ viewI18n.init(path + '/public/');
viewI18n.loaded(function() {
paneContractExpand.attachTo(document);
diff --git a/web-ui/app/locales/en_US/translation.json b/web-ui/app/locales/en_US/translation.json
index 6e2cef80..9df1867e 100644
--- a/web-ui/app/locales/en_US/translation.json
+++ b/web-ui/app/locales/en_US/translation.json
@@ -64,7 +64,12 @@
"error": {
"timeout": "A timeout occurred",
"general": "Problems talking to server",
- "parse": "Got invalid response from server"
+ "parse": "Got invalid response from server",
+ "auth": "Invalid email or password",
+ "login": {
+ "title": "Oh, something went wrong :(",
+ "message": "Try to login again in a few minutes. If the problem persists, contact your account administrator."
+ }
},
"tags": {
"inbox": "Inbox",
@@ -73,5 +78,26 @@
"trash": "Trash",
"all": "All",
"tags": "Tags"
+ },
+ "backup-account": {
+ "page-title": "Pixelated Backup Account",
+ "image-description": "Forgot my password!",
+ "title": "What if you forget your password?",
+ "paragraph1": "You will need a backup account. Choose an alternative email address you use regularly.",
+ "paragraph2": "Instructions to recover your password will be sent to this email address, save it.",
+ "input-label": "Type your backup account",
+ "button": "Add Account",
+ "error": {
+ "invalid-email": "Please enter a valid email address"
+ }
+ },
+ "back-to-inbox": "Back to my inbox",
+ "footer-text": "Product in development. Feedback and issues to",
+ "login": {
+ "email": "Your email",
+ "password": "Your password",
+ "submit": "Login",
+ "welcome-image-alt": "Welcome image",
+ "welcome-message": "Pixelated is an email that respects the privacy of your information."
}
}
diff --git a/web-ui/app/locales/pt_BR/translation.json b/web-ui/app/locales/pt_BR/translation.json
index d1ab7245..ac4fe10d 100644
--- a/web-ui/app/locales/pt_BR/translation.json
+++ b/web-ui/app/locales/pt_BR/translation.json
@@ -64,7 +64,12 @@
"error": {
"timeout": "A operação excedeu o limite de tempo",
"general": "Problemas ao se comunicar com o servidor",
- "parse": "Obteve uma resposta inválida do servidor"
+ "parse": "Obteve uma resposta inválida do servidor",
+ "auth": "E-mail ou senha inválidos",
+ "login": {
+ "title": "Ops, algo deu errado :(",
+ "message": "Tente entrar novamente em alguns minutos. Se o problema persistir, contate o administrador da sua conta."
+ }
},
"tags": {
"inbox": "Caixa de Entrada",
@@ -73,5 +78,26 @@
"trash": "Lixeira",
"all": "Todas",
"tags": "Etiquetas"
+ },
+ "backup-account": {
+ "page-title": "Pixelated E-mail de Recuperação",
+ "image-description": "Esqueci minha senha!",
+ "title": "E se você esquecer sua senha?",
+ "paragraph1": "Informe outro e-mail que você usa regularmente. Esse será o seu e-mail de recuperação.",
+ "paragraph2": "Instruções para recuperar sua senha serão enviadas para esse e-mail, guarde com carinho.",
+ "input-label": "Digite seu e-mail de recuperação",
+ "button": "Adicionar e-mail",
+ "error": {
+ "invalid-email": "Por favor informe um e-mail válido"
+ }
+ },
+ "back-to-inbox": "Voltar",
+ "footer-text": "Produto em desenvolvimento. Reporte problemas através do",
+ "login": {
+ "email": "Seu e-mail",
+ "password": "Sua senha",
+ "submit": "Entrar",
+ "welcome-image-alt": "Imagem de boas vindas",
+ "welcome-message": "Pixelated é um e-mail que respeita a privacidade da sua informação."
}
}
diff --git a/web-ui/app/sandbox.html b/web-ui/app/sandbox.html
index 3e110977..52da1f5b 100644
--- a/web-ui/app/sandbox.html
+++ b/web-ui/app/sandbox.html
@@ -6,7 +6,7 @@
<link href="css/sandbox.css" rel="stylesheet" type="text/css">
<script src="sandbox.js"></script>
- <script src="bower_components/iframe-resizer/js/iframeResizer.contentWindow.min.js"></script>
+ <script src="/assets/iframeResizer.contentWindow.min.js"></script>
</head>
<body></body>
diff --git a/web-ui/app/scss/account_recovery/page.scss b/web-ui/app/scss/account_recovery/page.scss
deleted file mode 100644
index 8bba1b5a..00000000
--- a/web-ui/app/scss/account_recovery/page.scss
+++ /dev/null
@@ -1,176 +0,0 @@
-@import "../vendor/reset";
-@import "../base/colors";
-@import "../base/fonts";
-
-html {
- min-height: 100%;
-}
-
-body {
- font-family: "Open Sans", "Microsoft YaHei", "Hiragino Sans GB", "Hiragino Sans GB W3", "微软雅黑", "Helvetica Neue", Arial, sans-serif;
- background: $dark_blue; /* For browsers that do not support gradients */
- background: -webkit-linear-gradient(left top, $dark_blue, $middle_blue); /* For Safari 5.1 to 6.0 */
- background: -o-linear-gradient(bottom right, $dark_blue, $middle_blue); /* For Opera 11.1 to 12.0 */
- background: -moz-linear-gradient(bottom right, $dark_blue, $middle_blue); /* For Firefox 3.6 to 15 */
- background: linear-gradient(to bottom right, $dark_blue, $middle_blue); /* Standard syntax */
- color: $dark_grey_text;
- min-height: 100%;
-}
-
-h1 {
- font-size: 1.3em;
- font-weight: 600;
-}
-
-p {
- -webkit-margin-before: 0.5em;
- -webkit-margin-after: 0.5em;
- margin-before: 0.5em;
- margin-after: 0.5em;
-}
-
-a {
- text-decoration: none;
- color: $dark_blue;
- font-style: italic;
-
- .fa {
- font-size: 1.6em;
- position: relative;
- top: 3px;
- margin-right: 0.3em;
- }
-
-}
-
-.field-group {
- position:relative;
- margin: 1.5em 0;
- width: 100%;
-
- label {
- font-size: 0.9em;
- margin-bottom: 10px;
- display: inline-block;
- }
-
- input {
- display: block;
- border: none;
- border-bottom: solid 1px #4da3b6;
- width: 100%;
- height: auto;
- padding: 0.3em 0px;
- }
-
- input:focus {
- outline:none;
- border-width: 2px;
- }
-
- input:focus ~ .animated-label, input:valid ~ .animated-label {
- top:-12px;
- left: 0;
- font-size:0.7em;
- color:#4da3b6;
- }
-
- .animated-label {
- color:#999;
- position:absolute;
- pointer-events:none;
- left: 6px;
- top:10px;
- transition:0.2s ease all;
- -moz-transition:0.2s ease all;
- -webkit-transition:0.2s ease all;
- }
-}
-
-
-button {
- background: $dark_blue;
- padding: 0.8em;
- color: $white;
- text-align: center;
- border: none;
- border-radius: 2px;
- font-weight: 300;
- width: 100%;
- margin-bottom: 1em;
-}
-
-.container {
- background: $white;
- width: 84%;
- margin: 3% auto;
- padding: 6% 5%;
-
- -webkit-display: flex;
- display: flex;
- -webkit-align-items: flex-start;
- align-items: flex-start;
- -webkit-flex-direction: column;
- flex-direction: column;
-}
-
-img {
- width: 50%;
- -webkit-align-self: center;
- align-self: center;
-}
-
-@media only screen and (min-width : 500px) {
- body {
- font-size: 1.3em;
- }
-
- form {
- display: flex;
- -webkit-display: flex;
- -webkit-flex-direction: column;
- flex-direction: column;
-
- .field-group, button, div {
- width: 70%;
- -webkit-align-self: center;
- align-self: center;
- }
- }
-}
-
-@media only screen and (min-width : 960px) {
- .container{
- width: 60%;
- padding: 3%;
- -webkit-align-items: flex-start;
- align-items: flex-start;
- -webkit-flex-direction: row;
- flex-direction: row;
- max-width: 700px;
- }
-
- form {
- margin-left: 2.5em;
-
- .field-group, button, div {
- width: 300px;
- -webkit-align-self: flex-start;
- align-self: flex-start;
- }
-
- .field-group {
- margin-top: 3em;
- font-size: 1em;
- }
- }
-
- img {
- width: 300px;
- }
-
- button {
- font-size: 0.8em;
- margin-bottom: 1em;
- }
-}
diff --git a/web-ui/app/scss/base/_colors.scss b/web-ui/app/scss/base/_colors.scss
index e79781cf..c7807e8f 100644
--- a/web-ui/app/scss/base/_colors.scss
+++ b/web-ui/app/scss/base/_colors.scss
@@ -42,6 +42,7 @@ $dark_grey_text: #4a4a4a;
$background_light_grey: #F5F5F5;
$border_light_grey: #D9D9D9;
+$shadow: rgba(0,0,0,0.10);
/* Feedback to Users */
$warning: #F7E8AF;
diff --git a/web-ui/app/scss/base/_fonts.scss b/web-ui/app/scss/base/_fonts.scss
index dfc56dd8..9a47b5ed 100644
--- a/web-ui/app/scss/base/_fonts.scss
+++ b/web-ui/app/scss/base/_fonts.scss
@@ -2,67 +2,66 @@
font-family: 'Open Sans';
font-style: normal;
font-weight: 300;
- src: local('Open Sans Light'), local('OpenSans-Light'), url('/assets/fonts/OpenSans-Light.woff') format('woff');
+ src: local('Open Sans Light'), local('OpenSans-Light'), url('/public/fonts/OpenSans-Light.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
- src: local('Open Sans'), local('OpenSans'), url('/assets/fonts/OpenSans.woff') format('woff');
+ src: local('Open Sans'), local('OpenSans'), url('/public/fonts/OpenSans.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 600;
- src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url('/assets/fonts/OpenSans-Semibold.woff') format('woff');
+ src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url('/public/fonts/OpenSans-Semibold.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'), url('/assets/fonts/OpenSans-Bold.woff') format('woff');
+ src: local('Open Sans Bold'), local('OpenSans-Bold'), url('/public/fonts/OpenSans-Bold.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 800;
- src: local('Open Sans Extrabold'), local('OpenSans-Extrabold'), url('/assets/fonts/OpenSans-Extrabold.woff') format('woff');
+ src: local('Open Sans Extrabold'), local('OpenSans-Extrabold'), url('/public/fonts/OpenSans-Extrabold.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 300;
- src: local('Open Sans Light Italic'), local('OpenSansLight-Italic'), url('/assets/fonts/OpenSansLight-Italic.woff') format('woff');
+ src: local('Open Sans Light Italic'), local('OpenSansLight-Italic'), url('/public/fonts/OpenSansLight-Italic.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 400;
- src: local('Open Sans Italic'), local('OpenSans-Italic'), url('/assets/fonts/OpenSans-Italic.woff') format('woff');
+ src: local('Open Sans Italic'), local('OpenSans-Italic'), url('/public/fonts/OpenSans-Italic.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 600;
- src: local('Open Sans Semibold Italic'), local('OpenSans-SemiboldItalic'), url('/assets/fonts/OpenSans-SemiboldItalic.woff') format('woff');
+ src: local('Open Sans Semibold Italic'), local('OpenSans-SemiboldItalic'), url('/public/fonts/OpenSans-SemiboldItalic.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 700;
- src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url('/assets/fonts/OpenSans-BoldItalic.woff') format('woff');
+ src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url('/public/fonts/OpenSans-BoldItalic.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 800;
- src: local('Open Sans Extrabold Italic'), local('OpenSans-ExtraboldItalic'), url('/assets/fonts/OpenSans-ExtraboldItalic.woff') format('woff');
+ src: local('Open Sans Extrabold Italic'), local('OpenSans-ExtraboldItalic'), url('/public/fonts/OpenSans-ExtraboldItalic.woff') format('woff');
}
@font-face {
font-family: 'icomoon';
font-style: normal;
font-weight: 400;
- src: url('/assets/fonts/icomoon.woff') format('woff'), url('/assets/fonts/icomoon.ttf') format('truetype'), ;
+ src: url('/public/fonts/icomoon.woff') format('woff'), url('/public/fonts/icomoon.ttf') format('truetype'), ;
}
-
diff --git a/web-ui/config/alias-webpack.js b/web-ui/config/alias-webpack.js
index 43b23836..d316bb2d 100644
--- a/web-ui/config/alias-webpack.js
+++ b/web-ui/config/alias-webpack.js
@@ -7,6 +7,7 @@ module.exports = {
'flight': path.join(__dirname, '../app/bower_components/flight'),
'found': path.join(__dirname, '../app/bower_components/foundation'),
'js': path.join(__dirname, '../app/js'),
+ 'src': path.join(__dirname, '../src'),
'scss': path.join(__dirname, '../app/scss'),
'mail_list': path.join(__dirname, '../app/js/mail_list'),
'page': path.join(__dirname, '../app/js/page'),
diff --git a/web-ui/config/compass.rb b/web-ui/config/compass.rb
index 9c52a04e..13940ba6 100644
--- a/web-ui/config/compass.rb
+++ b/web-ui/config/compass.rb
@@ -17,7 +17,7 @@
# Set this to the root of your project when deployed:
-target_dir = ENV['PIXELATED_BUILD'] == 'package' ? 'dist' : 'app'
+target_dir = 'app'
http_path = "/"
diff --git a/web-ui/config/copy-webpack.js b/web-ui/config/copy-webpack.js
deleted file mode 100644
index a2567be6..00000000
--- a/web-ui/config/copy-webpack.js
+++ /dev/null
@@ -1,88 +0,0 @@
-var CopyWebpackPlugin = require('copy-webpack-plugin');
-
-module.exports = new CopyWebpackPlugin([
- { context: 'app/', from: '404.html' },
- { context: 'app/', from: 'index.html' },
- { context: 'app/', from: 'sandbox.html' },
- { context: 'app/', from: 'account_recovery.html' },
- { context: 'app/', from: 'css/*' },
- { context: 'app/', from: 'fonts/*' },
- { context: 'app/', from: 'locales/**/*' },
- { context: 'app/', from: 'images/**/*' },
- { context: 'app/', from: 'bower_components/font-awesome/fonts/*' },
- {
- context: 'app/',
- from: 'bower_components/font-awesome/css/font-awesome.min.css',
- to: 'bower_components/font-awesome/css'
- },
- {
- context: 'app/',
- from: 'bower_components/jquery-file-upload/css/jquery.fileupload.css',
- to: 'bower_components/jquery-file-upload/css'
- },
- {
- context: 'app/',
- from: 'bower_components/modernizr/modernizr.js',
- to: 'bower_components/modernizr'
- },
- {
- context: 'app/',
- from: 'bower_components/lodash/dist/lodash.min.js',
- to: 'bower_components/lodash/dist'
- },
- {
- context: 'app/',
- from: 'bower_components/jquery/dist/jquery.min.js',
- to: 'bower_components/jquery/dist'
- },
- {
- context: 'app/',
- from: 'bower_components/jquery-ui/jquery-ui.min.js',
- to: 'bower_components/jquery-ui'
- },
- {
- context: 'app/',
- from: 'bower_components/jquery-file-upload/js/jquery.fileupload.js',
- to: 'bower_components/jquery-file-upload/js'
- },
- {
- context: 'app/',
- from: 'bower_components/handlebars/handlebars.min.js',
- to: 'bower_components/handlebars'
- },
- {
- context: 'app/',
- from: 'bower_components/typeahead.js/dist/typeahead.bundle.min.js',
- to: 'bower_components/typeahead.js/dist'
- },
- {
- context: 'app/',
- from: 'bower_components/iframe-resizer/js/iframeResizer.min.js',
- to: 'bower_components/iframe-resizer/js'
- },
- {
- context: 'app/',
- from: 'bower_components/iframe-resizer/js/iframeResizer.contentWindow.min.js',
- to: 'bower_components/iframe-resizer/js'
- },
- {
- context: 'app/',
- from: 'bower_components/foundation/js/foundation.js',
- to: 'bower_components/foundation/js'
- },
- {
- context: 'app/',
- from: 'bower_components/foundation/js/foundation/foundation.reveal.js',
- to: 'bower_components/foundation/js/foundation'
- },
- {
- context: 'app/',
- from: 'bower_components/foundation/js/foundation/foundation.offcanvas.js',
- to: 'bower_components/foundation/js/foundation'
- },
- {
- context: 'app/',
- from: 'js/foundation/initialize_foundation.js',
- to: 'js/foundation'
- }
-])
diff --git a/web-ui/config/imagemin.js b/web-ui/config/imagemin.js
index 2b2c87e0..a01f1dac 100644
--- a/web-ui/config/imagemin.js
+++ b/web-ui/config/imagemin.js
@@ -16,10 +16,19 @@
*/
const imagemin = require('imagemin');
+const imageminSvgo = require('imagemin-svgo');
+const imageminPngquant = require('imagemin-pngquant');
-imagemin(['app/images/*.{gif,jpg,png,svg}'],
- 'dist/images'
-).then(files => {
+imagemin(['app/images/*.{gif,jpg,png,svg}'], 'dist/public/images', {
+ use: [
+ imageminSvgo({
+ plugins: [
+ {removeViewBox: false}
+ ]
+ }),
+ imageminPngquant()
+ ]
+}).then(files => {
console.log('Images list:')
files.map(function(file) { console.log(file.path); });
});
diff --git a/web-ui/config/loaders-webpack.js b/web-ui/config/loaders-webpack.js
index 21e9a572..9009f9fd 100644
--- a/web-ui/config/loaders-webpack.js
+++ b/web-ui/config/loaders-webpack.js
@@ -3,11 +3,11 @@ module.exports = [
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel',
- query: { presets: ['es2015', 'react']}
+ query: { presets: ['es2015', 'react', 'stage-0']}
},
{
test: /\.scss|css$/,
- loader: "style-loader!css-loader!sass-loader"
+ loader: "style-loader!css-loader!postcss-loader!sass-loader"
},
{
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
diff --git a/web-ui/config/protected-assets-webpack.js b/web-ui/config/protected-assets-webpack.js
new file mode 100644
index 00000000..85654cf0
--- /dev/null
+++ b/web-ui/config/protected-assets-webpack.js
@@ -0,0 +1,25 @@
+var CopyWebpackPlugin = require('copy-webpack-plugin');
+
+module.exports = new CopyWebpackPlugin([
+ { context: 'app/', from: '404.html' },
+ { context: 'app/', from: 'index.html' },
+ { context: 'app/', from: 'sandbox.html' },
+ { context: 'app/', from: 'css/*' },
+ { context: 'src/backup_account/', from: 'backup_account.html' },
+ { context: 'app/bower_components/font-awesome/', from: 'fonts/*' },
+ { context: 'app/bower_components/font-awesome/', from: 'css/font-awesome.min.css', to: 'css' },
+ { context: 'app/bower_components/jquery-file-upload/', from: 'css/jquery.fileupload.css', to: 'css' },
+ { context: 'app/bower_components/modernizr/', from: 'modernizr.js' },
+ { context: 'app/bower_components/lodash/dist/', from: 'lodash.min.js' },
+ { context: 'app/bower_components/jquery/dist/', from: 'jquery.min.js' },
+ { context: 'app/bower_components/jquery-ui/', from: 'jquery-ui.min.js' },
+ { context: 'app/bower_components/jquery-file-upload/js/', from: 'jquery.fileupload.js' },
+ { context: 'app/bower_components/handlebars/', from: 'handlebars.min.js' },
+ { context: 'app/bower_components/typeahead.js/dist/', from: 'typeahead.bundle.min.js' },
+ { context: 'app/bower_components/iframe-resizer/js/', from: 'iframeResizer.min.js' },
+ { context: 'app/bower_components/iframe-resizer/js/', from: 'iframeResizer.contentWindow.min.js' },
+ { context: 'app/bower_components/foundation/js/', from: 'foundation.js' },
+ { context: 'app/bower_components/foundation/js/foundation/', from: 'foundation.reveal.js' },
+ { context: 'app/bower_components/foundation/js/foundation/', from: 'foundation.offcanvas.js' },
+ { context: 'app/js/foundation/', from: 'initialize_foundation.js' }
+])
diff --git a/web-ui/config/public-assets-webpack.js b/web-ui/config/public-assets-webpack.js
new file mode 100644
index 00000000..28dff566
--- /dev/null
+++ b/web-ui/config/public-assets-webpack.js
@@ -0,0 +1,10 @@
+var CopyWebpackPlugin = require('copy-webpack-plugin');
+
+module.exports = new CopyWebpackPlugin([
+ { context: 'src/login/', from: '*.html' },
+ { context: 'src/login/', from: '*.css' },
+ { context: 'src/interstitial/', from: '*' },
+ { context: 'app/', from: 'fonts/*' },
+ { context: 'app/', from: 'locales/**/*' },
+ { context: 'app/', from: 'images/**/*' }
+]);
diff --git a/web-ui/karma.conf.js b/web-ui/karma.conf.js
index d10667e9..2895dc42 100644
--- a/web-ui/karma.conf.js
+++ b/web-ui/karma.conf.js
@@ -68,7 +68,7 @@ module.exports = function (config) {
reporters: ['dots', 'junit', 'coverage'],
preprocessors: {
- 'app/js/!(lib|account_recovery)/**/*.js': ['coverage']
+ 'app/js/!(lib)/**/*.js': ['coverage']
},
// enable / disable watching file and executing tests whenever any file changes
diff --git a/web-ui/package.json b/web-ui/package.json
index 017e6d38..20b06ffd 100644
--- a/web-ui/package.json
+++ b/web-ui/package.json
@@ -9,29 +9,39 @@
"babel-cli": "^6.22.2",
"babel-core": "^6.21.0",
"babel-loader": "^6.2.10",
+ "babel-plugin-istanbul": "^3.1.2",
"babel-preset-es2015": "^6.18.0",
"babel-preset-react": "^6.22.0",
+ "babel-preset-stage-0": "^6.22.0",
"bower": "1.7.9",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.26.1",
"dompurify": "^0.8.4",
"enzyme": "^2.7.1",
+ "eslint": "^3.15.0",
+ "eslint-config-airbnb": "^14.1.0",
+ "eslint-plugin-import": "^2.2.0",
+ "eslint-plugin-jsx-a11y": "^4.0.0",
+ "eslint-plugin-react": "^6.9.0",
"expect": "^1.20.2",
"file-loader": "^0.10.0",
"font-awesome": "^4.7.0",
"handlebars": "^4.0.5",
"he": "^1.1.0",
"html-minifier": "2.1.6",
- "i18next": "^4.1.4",
+ "i18next": "^6.1.2",
"i18next-browser-languagedetector": "^1.0.1",
"i18next-xhr-backend": "^1.2.1",
"iframe-resizer": "^3.5.7",
"imagemin": "5.2.1",
+ "imagemin-pngquant": "^5.0.0",
+ "imagemin-svgo": "^5.2.0",
"jasmine-flight": "^4.0.0",
"jasmine-jquery": "^2.1.1",
"jquery": "^3.1.1",
"jquery-file-upload": "^4.0.5",
"jquery-ui": "^1.12.1",
+ "jsdom": "^9.10.0",
"jshint": "2.9.2",
"json-loader": "^0.5.4",
"karma": "0.13.19",
@@ -43,45 +53,63 @@
"karma-junit-reporter": "0.2.2",
"karma-phantomjs-launcher": "1.0.1",
"karma-requirejs": "1.0.0",
+ "material-ui": "^0.17.0",
"minify": "^2.0.13",
"mocha": "^3.2.0",
"mocha-webpack": "^0.7.0",
"modernizr": "^3.3.1",
"node-sass": "^4.5.0",
+ "nyc": "^10.1.2",
+ "postcss-loader": "^1.2.2",
"quoted-printable": "^1.0.1",
"react": "^15.4.2",
"react-a11y": "^0.3.3",
"react-addons-test-utils": "^15.4.2",
+ "react-document-title": "^2.0.2",
"react-dom": "^15.4.2",
+ "react-i18next": "^2.1.0",
+ "react-tap-event-plugin": "^2.0.1",
"requirejs": "2.2.0",
"sass-loader": "^4.1.1",
"style-loader": "^0.13.1",
"typeahead.js": "^0.11.1",
"url-loader": "^0.5.7",
"utf8": "^2.1.2",
+ "validator": "^7.0.0",
"watch": "0.19.1",
"webpack": "^1.14.0"
},
"scripts": {
- "test": "npm run jshint --silent && npm run build-statics --silent && npm run mocha-test && npm run karma-test",
- "mocha-test": "mocha-webpack --webpack-config webpack.test.config.js \"test/spec/account_recovery/**/*.spec.js\"",
- "karma-test": "karma start --single-run $GRUNT_OPTS",
- "debug": "npm run build && karma start --browsers Chrome $GRUNT_OPTS",
- "watch": "npm run compass-watch & npm run handlebars-watch & npm run build-js-watch",
- "watch-test": "karma start",
- "handlebars": "mkdir -p app/js/generated/hbs/ && handlebars app/templates/**/*.hbs > app/js/generated/hbs/templates.js --namespace=window.Pixelated --root .",
- "handlebars-watch": "watch 'npm run handlebars' app/templates",
- "compass": "compass compile",
- "compass-watch": "compass watch",
- "build": "npm run build-statics && npm run build-js",
- "build-statics": "npm run clean && npm run handlebars && npm run add_git_version && npm run compass",
- "build-prod": "npm run build-statics && webpack -p --config ./webpack.production.config.js",
- "build-js": "webpack --colors --progress",
- "build-js-watch": "webpack --colors --progress --watch",
- "jshint": "jshint --config=.jshintrc app test",
+ "test": "npm run lint --silent && npm run build:statics --silent && npm run test:unit && npm run test:integration",
+ "test:unit": "npm run test:coverage && npm run test:karma",
+ "test:integration": "mocha-webpack --webpack-config webpack.test.config.js --require test/integration/setup.js \"test/integration/**/*.spec.js\"",
+ "test:coverage": "NODE_ENV=test nyc --check-coverage npm run test:mocha",
+ "test:mocha": "mocha-webpack --webpack-config webpack.test.config.js \"src/**/*.spec.js\"",
+ "test:karma": "karma start --single-run $GRUNT_OPTS",
+ "test:watch:mocha": "npm run test:mocha -- --watch",
+ "test:watch:karma": "karma start",
+ "lint": "npm run lint:jshint && npm run lint:eslint",
+ "lint:jshint": "jshint --config=.jshintrc app test",
+ "lint:eslint": "eslint src test/unit",
+ "build": "npm run build:statics && npm run build:js",
+ "build:debug": "npm run build && karma start --browsers Chrome $GRUNT_OPTS",
+ "build:statics": "npm run clean && npm run build:handlebars && npm run add_git_version && npm run build:compass",
+ "build:prod": "npm run build:statics && webpack -p --config ./webpack.production.config.js",
+ "build:js": "webpack --colors --progress",
+ "build:compass": "compass compile",
+ "build:handlebars": "mkdir -p app/js/generated/hbs/ && handlebars app/templates/**/*.hbs > app/js/generated/hbs/templates.js --namespace=window.Pixelated --root .",
+ "watch": "npm run watch:compass & npm run watch:handlebars & npm run watch:js",
+ "watch:handlebars": "watch 'npm run build:handlebars' app/templates",
+ "watch:compass": "compass watch",
+ "watch:js": "webpack --colors --progress --watch",
"clean": "rm -rf app/js/generated/hbs/* app/css/*",
- "package": "PIXELATED_BUILD='package' npm run build-prod && npm run imagemin",
"imagemin": "node config/imagemin.js",
+ "package": "npm run build:prod && npm run imagemin",
"add_git_version": "/bin/bash config/add_git_version.sh"
+ },
+ "nyc": {
+ "include": [
+ "src/**/*.js"
+ ]
}
}
diff --git a/web-ui/postcss.config.js b/web-ui/postcss.config.js
new file mode 100644
index 00000000..88752c6c
--- /dev/null
+++ b/web-ui/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ plugins: [
+ require('autoprefixer')
+ ]
+}
diff --git a/web-ui/src/backup_account/backup_account.html b/web-ui/src/backup_account/backup_account.html
new file mode 100644
index 00000000..084824f2
--- /dev/null
+++ b/web-ui/src/backup_account/backup_account.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <link rel="icon" type="image/png" href="public/images/favicon.png" />
+ <meta charset="utf-8"/>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
+ <title>Pixelated</title>
+ </head>
+ <body>
+ <div id="root"/>
+ <script type="text/javascript" src="/assets/backup_account.js"></script>
+ </body>
+</html>
diff --git a/web-ui/src/backup_account/backup_account.js b/web-ui/src/backup_account/backup_account.js
new file mode 100644
index 00000000..ac218a39
--- /dev/null
+++ b/web-ui/src/backup_account/backup_account.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { render } from 'react-dom';
+import a11y from 'react-a11y';
+
+import App from 'src/common/app';
+import PageWrapper from './page';
+
+if (process.env.NODE_ENV === 'development') a11y(React);
+
+render(
+ <App child={<PageWrapper />} />,
+ document.getElementById('root')
+);
diff --git a/web-ui/src/backup_account/page.js b/web-ui/src/backup_account/page.js
new file mode 100644
index 00000000..c7554cfb
--- /dev/null
+++ b/web-ui/src/backup_account/page.js
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { translate } from 'react-i18next';
+import DocumentTitle from 'react-document-title';
+import SubmitButton from 'src/common/submit_button/submit_button';
+import InputField from 'src/common/input_field/input_field';
+import Footer from 'src/common/footer/footer';
+import Header from 'src/common/header/header';
+import validator from 'validator';
+
+import 'font-awesome/scss/font-awesome.scss';
+import './page.scss';
+
+
+export class Page extends React.Component {
+
+ constructor(props) {
+ super(props);
+ this.state = { error: '', submitButtonDisabled: true };
+ this.validateEmail = this.validateEmail.bind(this);
+ }
+
+ validateEmail(event) {
+ const validEmail = validator.isEmail(event.target.value);
+ const emptyEmail = validator.isEmpty(event.target.value);
+ const t = this.props.t;
+ this.setState({
+ error: !emptyEmail && !validEmail ? t('backup-account.error.invalid-email') : '',
+ submitButtonDisabled: !validEmail || emptyEmail
+ });
+ }
+
+ render() {
+ const t = this.props.t;
+ return (
+ <DocumentTitle title={t('backup-account.page-title')}>
+ <div className='page'>
+ <Header />
+ <section>
+ <div className='container'>
+ <img
+ className='backup-account-image'
+ src='/public/images/forgot-my-password.svg'
+ alt={t('backup-account.image-description')}
+ />
+ <form>
+ <h1>{t('backup-account.title')}</h1>
+ <p>{t('backup-account.paragraph1')}</p>
+ <p>{t('backup-account.paragraph2')}</p>
+ <InputField name='email' label={t('backup-account.input-label')} errorText={this.state.error} onChange={this.validateEmail} />
+ <SubmitButton buttonText={t('backup-account.button')} disabled={this.state.submitButtonDisabled} />
+ <div className='link-content'>
+ <a href='/' className='link'>
+ <i className='fa fa-angle-left' aria-hidden='true' />
+ <span>{t('back-to-inbox')}</span>
+ </a>
+ </div>
+ </form>
+ </div>
+ </section>
+ <Footer />
+ </div>
+ </DocumentTitle>
+ );
+ }
+}
+
+
+Page.propTypes = {
+ t: React.PropTypes.func.isRequired
+};
+
+export default translate('', { wait: true })(Page);
diff --git a/web-ui/src/backup_account/page.scss b/web-ui/src/backup_account/page.scss
new file mode 100644
index 00000000..aa973fcd
--- /dev/null
+++ b/web-ui/src/backup_account/page.scss
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@import "~scss/vendor/reset";
+@import "~scss/base/colors";
+@import "~scss/base/fonts";
+
+html, body, #root {
+ height: 100%;
+}
+
+body, #root {
+ min-height: 100%;
+}
+
+a {
+ text-decoration: none;
+}
+
+.page {
+ font-family: "Open Sans", "Microsoft YaHei", "Hiragino Sans GB", "Hiragino Sans GB W3", "微软雅黑", "Helvetica Neue", Arial, sans-serif;
+ background: $dark_blue; /* For browsers that do not support gradients */
+ background: -webkit-linear-gradient(left top, $dark_blue, $middle_blue); /* For Safari 5.1 to 6.0 */
+ background: -o-linear-gradient(bottom right, $dark_blue, $middle_blue); /* For Opera 11.1 to 12.0 */
+ background: -moz-linear-gradient(bottom right, $dark_blue, $middle_blue); /* For Firefox 3.6 to 15 */
+ background: linear-gradient(to bottom right, $dark_blue, $middle_blue); /* Standard syntax */
+ color: $dark_grey_text;
+ min-height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+section {
+ flex: 1 0 auto;
+}
+
+form {
+ width: 100%;
+}
+
+h1 {
+ font-size: 1.3em;
+ font-weight: 600;
+}
+
+p {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+.link {
+ color: $dark_blue;
+ font-style: italic;
+
+ .fa {
+ font-size: 1.6em;
+ position: relative;
+ top: 3px;
+ margin-right: 0.3em;
+ }
+
+}
+
+.container {
+ background: $white;
+ width: 84%;
+ margin: 3% auto;
+ padding: 6% 5%;
+ display: flex;
+ align-items: flex-start;
+ flex-direction: column;
+ box-shadow: 0 2px 3px 0 $shadow;
+}
+
+.backup-account-image {
+ width: 50%;
+ height: 100%;
+ align-self: center;
+}
+
+@media only screen and (min-width : 500px) {
+ body {
+ font-size: 1.3em;
+ }
+
+ form {
+ display: flex;
+ flex-direction: column;
+
+ .input-field-group, .submit-button, .link-content {
+ width: 70%;
+ align-self: center;
+ }
+ }
+}
+
+@media only screen and (min-width : 960px) {
+ .container{
+ width: 60%;
+ padding: 3em;
+ align-items: flex-start;
+ flex-direction: row;
+ max-width: 700px;
+ }
+
+ form {
+ margin-left: 2.5em;
+ min-height: 492px;
+
+ .input-field-group, .submit-button, .link-content {
+ width: 300px;
+ align-self: flex-start;
+ }
+ }
+
+ .backup-account-image {
+ width: 300px;
+ }
+}
diff --git a/web-ui/src/backup_account/page.spec.js b/web-ui/src/backup_account/page.spec.js
new file mode 100644
index 00000000..334d3ba8
--- /dev/null
+++ b/web-ui/src/backup_account/page.spec.js
@@ -0,0 +1,80 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import { Page } from 'src/backup_account/page';
+
+describe('BackupAccount', () => {
+ let page;
+
+ beforeEach(() => {
+ const mockTranslations = key => key;
+ page = shallow(<Page t={mockTranslations} />);
+ });
+
+ it('renders backup email page title', () => {
+ expect(page.find('h1').text()).toEqual('backup-account.title');
+ });
+
+ it('renders backup account email input field', () => {
+ expect(page.find('InputField').props().name).toEqual('email');
+ });
+
+ it('renders backup account submit button', () => {
+ expect(page.find('SubmitButton').props().buttonText).toEqual('backup-account.button');
+ });
+
+ describe('Email validation', () => {
+ let pageInstance;
+
+ beforeEach(() => {
+ pageInstance = page.instance();
+ });
+
+ it('verify initial state', () => {
+ expect(pageInstance.state.error).toEqual('');
+ expect(page.find('SubmitButton').props().disabled).toEqual(true);
+ });
+
+ context('with invalid email', () => {
+ beforeEach(() => {
+ pageInstance.validateEmail({ target: { value: 'test' } });
+ });
+
+ it('sets error in state', () => {
+ expect(pageInstance.state.error).toEqual('backup-account.error.invalid-email');
+ });
+
+ it('disables submit button', () => {
+ expect(page.find('SubmitButton').props().disabled).toEqual(true);
+ });
+ });
+
+ context('with valid email', () => {
+ beforeEach(() => {
+ pageInstance.validateEmail({ target: { value: 'test@test.com' } });
+ });
+
+ it('does not set error in state', () => {
+ expect(pageInstance.state.error).toEqual('');
+ });
+
+ it('submit button is enabled', () => {
+ expect(page.find('SubmitButton').props().disabled).toEqual(false);
+ });
+ });
+
+ context('with empty email', () => {
+ beforeEach(() => {
+ pageInstance.validateEmail({ target: { value: '' } });
+ });
+
+ it('not set error in state', () => {
+ expect(pageInstance.state.error).toEqual('');
+ });
+
+ it('disables submit button', () => {
+ expect(page.find('SubmitButton').props().disabled).toEqual(true);
+ });
+ });
+ });
+});
diff --git a/web-ui/src/common/app.js b/web-ui/src/common/app.js
new file mode 100644
index 00000000..b8302000
--- /dev/null
+++ b/web-ui/src/common/app.js
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { I18nextProvider } from 'react-i18next';
+
+import internationalization from 'src/common/i18n';
+import injectTapEventPlugin from 'react-tap-event-plugin';
+import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
+import materialPixTheme from 'src/common/materialPixTheme';
+
+injectTapEventPlugin();
+
+const App = ({ i18n = internationalization, child }) => (
+ <MuiThemeProvider muiTheme={materialPixTheme}>
+ <I18nextProvider i18n={i18n}>
+ {child}
+ </I18nextProvider>
+ </MuiThemeProvider>
+);
+
+App.propTypes = {
+ i18n: React.PropTypes.object, // eslint-disable-line react/forbid-prop-types
+ child: React.PropTypes.element.isRequired
+};
+
+App.defaultProps = {
+ i18n: internationalization
+};
+
+export default App;
diff --git a/web-ui/src/common/footer/footer.js b/web-ui/src/common/footer/footer.js
new file mode 100644
index 00000000..c2138c21
--- /dev/null
+++ b/web-ui/src/common/footer/footer.js
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { translate } from 'react-i18next';
+import './footer.scss';
+
+export const Footer = ({ t }) => (
+ <footer className='footer-wrapper'>
+ <div className='footer-content'>
+ <img className='footer-image' src='/public/images/lab.svg' alt='' />
+ <div>
+ {t('footer-text')}
+ <a className='footer-link' href='mailto:team@pixelated-project.org'>
+ {' team@pixelated-project.org'}
+ </a>
+ </div>
+ </div>
+ </footer>
+);
+
+Footer.propTypes = {
+ t: React.PropTypes.func.isRequired
+};
+
+export default translate('', { wait: true })(Footer);
diff --git a/web-ui/src/common/footer/footer.scss b/web-ui/src/common/footer/footer.scss
new file mode 100644
index 00000000..c1d6a285
--- /dev/null
+++ b/web-ui/src/common/footer/footer.scss
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+@import "~scss/base/colors";
+
+.footer-wrapper {
+ display: flex;
+ justify-content: center;
+ font-size: 0.8em;
+ color: $dark_slate_gray;
+}
+
+.footer-content {
+ display: inline;
+ margin: 2% 3%;
+ margin-bottom: 1em;
+ display: flex;
+ align-items: center;
+}
+
+.footer-image {
+ margin: 0 0.7em;
+}
+
+.footer-link {
+ color: $white;
+ font-style: normal;
+ font-weight: 500;
+}
+
+@media only screen and (min-width : 500px) {
+ .footer-wrapper {
+ font-size: 0.6em;
+ }
+
+ .footer-content {
+ margin: 0;
+ margin-bottom: 1em;
+ }
+}
diff --git a/web-ui/src/common/footer/footer.spec.js b/web-ui/src/common/footer/footer.spec.js
new file mode 100644
index 00000000..f1247233
--- /dev/null
+++ b/web-ui/src/common/footer/footer.spec.js
@@ -0,0 +1,17 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import { Footer } from 'src/common/footer/footer';
+
+describe('Footer', () => {
+ let footer;
+
+ beforeEach(() => {
+ const mockTranslations = key => key;
+ footer = shallow(<Footer t={mockTranslations} />);
+ });
+
+ it('renders the footer content', () => {
+ expect(footer.find('footer').text()).toContain('footer-text');
+ });
+});
diff --git a/web-ui/src/common/header/header.js b/web-ui/src/common/header/header.js
new file mode 100644
index 00000000..50c863b5
--- /dev/null
+++ b/web-ui/src/common/header/header.js
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { translate } from 'react-i18next';
+import './header.scss';
+
+export const Header = ({ t }) => (
+ <header className='header-wrapper'>
+ <div className='header-content'>
+ <a href='/'>
+ <img
+ className='header-logo'
+ src='/public/images/logo-orange.svg'
+ alt='Pixelated'
+ />
+ </a>
+ <div className='header-icons'>
+ <a href='/'>
+ <span>{t('logout')}</span>
+ <i className='fa fa-sign-out' aria-hidden='true' />
+ </a>
+ </div>
+ </div>
+ </header>
+);
+
+Header.propTypes = {
+ t: React.PropTypes.func.isRequired
+};
+
+export default translate('', { wait: true })(Header);
diff --git a/web-ui/src/common/header/header.scss b/web-ui/src/common/header/header.scss
new file mode 100644
index 00000000..d56629bf
--- /dev/null
+++ b/web-ui/src/common/header/header.scss
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+@import "~scss/base/colors";
+
+.header-wrapper {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ background: $white;
+ box-shadow: 0 2px 3px 0 $shadow;
+ padding: 7px 0;
+}
+
+.header-content {
+ display: flex;
+ align-items: center;
+}
+
+.header-logo {
+ width: 120px;
+}
+
+.header-icons {
+ display: flex;
+ align-items: center;
+
+ position: absolute;
+ right: 6%;
+ top: 13px;
+
+ span {
+ display: none;
+ }
+
+ .fa {
+ font-size: 1.3em;
+ margin-left: 0.4em;
+ color: $medium_light_grey;
+ }
+}
+
+
+@media only screen and (min-width : 960px) {
+ .header-content {
+ flex-basis: 64%;
+ max-width: 820px;
+ justify-content: space-between;
+ }
+
+ .header-icons {
+ position: relative;
+ right: 0;
+ top: 0;
+
+ a {
+ display: flex;
+ align-items: center;
+ }
+
+ span {
+ display: inline;
+ color: $medium_light_grey;
+ font-style: normal;
+ font-size: 0.7em;
+ padding-bottom: 0.1em;
+ }
+
+ .fa {
+ font-size: 1em;
+ margin-right: 0;
+ }
+ }
+}
diff --git a/web-ui/src/common/header/header.spec.js b/web-ui/src/common/header/header.spec.js
new file mode 100644
index 00000000..82e29e1c
--- /dev/null
+++ b/web-ui/src/common/header/header.spec.js
@@ -0,0 +1,17 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import { Header } from 'src/common/header/header';
+
+describe('Header', () => {
+ let header;
+
+ beforeEach(() => {
+ const mockTranslations = key => key;
+ header = shallow(<Header t={mockTranslations} />);
+ });
+
+ it('renders the header content', () => {
+ expect(header.find('header').text()).toContain('logout');
+ });
+});
diff --git a/web-ui/src/common/i18n.js b/web-ui/src/common/i18n.js
new file mode 100644
index 00000000..db107dc7
--- /dev/null
+++ b/web-ui/src/common/i18n.js
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+import i18n from 'i18next';
+import i18nBackend from 'i18nextXHRBackend';
+import I18nDetector from 'i18nextBrowserLanguageDetector';
+
+const detector = new I18nDetector();
+const detect = detector.detect.bind(detector);
+
+detector.detect = (detectionOrder) => {
+ const result = detect(detectionOrder);
+ return result.replace('-', '_');
+};
+
+i18n
+ .use(i18nBackend)
+ .use(detector)
+ .init({
+ fallbackLng: 'en_US',
+ parseMissingKeyHandler: key => (`"${key} untranslated"`),
+ backend: {
+ loadPath: 'public/locales/{{lng}}/{{ns}}.json'
+ }
+ });
+
+export default i18n;
diff --git a/web-ui/src/common/input_field/input_field.js b/web-ui/src/common/input_field/input_field.js
new file mode 100644
index 00000000..f50fc2b1
--- /dev/null
+++ b/web-ui/src/common/input_field/input_field.js
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import TextField from 'material-ui/TextField';
+
+import './input_field.scss';
+
+const InputField = ({ label, name, type = 'text', ...other }) => (
+ <div className='input-field-group'>
+ <TextField
+ hintText={label}
+ floatingLabelText={label}
+ name={name}
+ type={type}
+ fullWidth
+ floatingLabelFocusStyle={{ color: '#178ca6' }}
+ {...other}
+ />
+ </div>
+);
+
+InputField.propTypes = {
+ label: React.PropTypes.string.isRequired,
+ name: React.PropTypes.string.isRequired,
+ type: React.PropTypes.string
+};
+
+InputField.defaultProps = {
+ type: 'text'
+};
+
+export default InputField;
diff --git a/web-ui/src/common/input_field/input_field.scss b/web-ui/src/common/input_field/input_field.scss
new file mode 100644
index 00000000..d550a281
--- /dev/null
+++ b/web-ui/src/common/input_field/input_field.scss
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@import "~scss/base/colors";
+
+.input-field-group {
+ position:relative;
+ margin: 1.5em 0;
+ width: 100%;
+}
+
+input:-webkit-autofill {
+ -webkit-box-shadow: 0 0 0px 1000px white inset;
+}
+
+@media only screen and (min-width : 500px) {
+ .input-field-group {
+ width: 70%;
+ align-self: center;
+ }
+}
+
+@media only screen and (min-width : 960px) {
+ .input-field-group {
+ width: 300px;
+ align-self: flex-start;
+ font-size: 1em;
+ }
+}
diff --git a/web-ui/src/common/input_field/input_field.spec.js b/web-ui/src/common/input_field/input_field.spec.js
new file mode 100644
index 00000000..ae55653d
--- /dev/null
+++ b/web-ui/src/common/input_field/input_field.spec.js
@@ -0,0 +1,20 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import InputField from 'src/common/input_field/input_field';
+
+describe('InputField', () => {
+ let inputField;
+
+ beforeEach(() => {
+ inputField = shallow(<InputField label='Email' name='email' />);
+ });
+
+ it('renders an input of type text for email', () => {
+ expect(inputField.find('TextField').props().name).toEqual('email');
+ });
+
+ it('renders a label for the email', () => {
+ expect(inputField.find('TextField').props().floatingLabelText).toEqual('Email');
+ });
+});
diff --git a/web-ui/src/common/materialPixTheme.js b/web-ui/src/common/materialPixTheme.js
new file mode 100644
index 00000000..34be7870
--- /dev/null
+++ b/web-ui/src/common/materialPixTheme.js
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+import getMuiTheme from 'material-ui/styles/getMuiTheme';
+
+const mediumLightGrey = '#999999';
+const darkBlue = '#178ca6';
+
+const materialPixTheme = getMuiTheme({
+ fontFamily: 'Open Sans, sans-serif',
+ palette: {
+ disabledColor: mediumLightGrey,
+ primary1Color: darkBlue,
+ borderColor: darkBlue
+ }
+});
+
+export default materialPixTheme;
diff --git a/web-ui/src/common/submit_button/submit_button.js b/web-ui/src/common/submit_button/submit_button.js
new file mode 100644
index 00000000..1224c7bd
--- /dev/null
+++ b/web-ui/src/common/submit_button/submit_button.js
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import RaisedButton from 'material-ui/RaisedButton';
+
+import './submit_button.scss';
+
+const labelStyle = {
+ textTransform: 'none',
+ fontSize: '1em',
+ lineHeight: '48px'
+};
+
+const buttonStyle = {
+ height: '48px'
+};
+
+const SubmitButton = ({ buttonText, disabled = false }) => (
+ <div className='submit-button'>
+ <RaisedButton
+ type='submit'
+ label={buttonText}
+ disabled={disabled}
+ labelStyle={labelStyle}
+ buttonStyle={buttonStyle}
+ overlayStyle={buttonStyle}
+ fullWidth
+ primary
+ />
+ </div>
+);
+
+SubmitButton.propTypes = {
+ buttonText: React.PropTypes.string.isRequired,
+ disabled: React.PropTypes.bool
+};
+
+SubmitButton.defaultProps = {
+ disabled: false
+};
+
+export default SubmitButton;
diff --git a/web-ui/src/common/submit_button/submit_button.scss b/web-ui/src/common/submit_button/submit_button.scss
new file mode 100644
index 00000000..851899f7
--- /dev/null
+++ b/web-ui/src/common/submit_button/submit_button.scss
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@import "~scss/base/colors";
+
+.submit-button {
+ width: 100%;
+ margin-bottom: 1em;
+ font-size: 1em;
+}
+
+@media only screen and (min-width : 500px) {
+ .submit-button {
+ width: 70%;
+ align-self: center;
+ }
+}
+
+@media only screen and (min-width : 960px) {
+ .submit-button {
+ width: 300px;
+ align-self: flex-start;
+ font-size: 0.8em;
+ margin-bottom: 1em;
+ }
+}
diff --git a/web-ui/src/common/submit_button/submit_button.spec.js b/web-ui/src/common/submit_button/submit_button.spec.js
new file mode 100644
index 00000000..0ba8137c
--- /dev/null
+++ b/web-ui/src/common/submit_button/submit_button.spec.js
@@ -0,0 +1,20 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import SubmitButton from 'src/common/submit_button/submit_button';
+
+describe('SubmitButton', () => {
+ let submitButton;
+
+ beforeEach(() => {
+ submitButton = shallow(<SubmitButton buttonText='Add Email' />);
+ });
+
+ it('renders an input of type submit for add email', () => {
+ expect(submitButton.find('RaisedButton').props().label).toEqual('Add Email');
+ });
+
+ it('renders button in enabled state', () => {
+ expect(submitButton.find('RaisedButton').props().disabled).toEqual(false);
+ });
+});
diff --git a/web-ui/src/common/util.js b/web-ui/src/common/util.js
new file mode 100644
index 00000000..effb3d9c
--- /dev/null
+++ b/web-ui/src/common/util.js
@@ -0,0 +1,8 @@
+export const hasQueryParameter = (param) => {
+ const decodedUri = decodeURIComponent(window.location.search.substring(1));
+ return !(decodedUri.split('&').indexOf(param) < 0);
+};
+
+export default {
+ hasQueryParameter
+};
diff --git a/web-ui/src/common/util.spec.js b/web-ui/src/common/util.spec.js
new file mode 100644
index 00000000..805d9dd5
--- /dev/null
+++ b/web-ui/src/common/util.spec.js
@@ -0,0 +1,20 @@
+import expect from 'expect';
+import Util from 'src/common/util';
+
+describe('Utils', () => {
+ describe('.hasQueryParameter', () => {
+ global.window = {
+ location: {
+ search: '?auth-error&lng=pt-BR'
+ }
+ };
+
+ it('checks if param included in query parameters', () => {
+ expect(Util.hasQueryParameter('auth-error')).toBe(true);
+ });
+
+ it('checks if param not included in query parameters', () => {
+ expect(Util.hasQueryParameter('error')).toBe(false);
+ });
+ });
+});
diff --git a/web-ui/src/interstitial/interstitial.html b/web-ui/src/interstitial/interstitial.html
new file mode 100644
index 00000000..727883fe
--- /dev/null
+++ b/web-ui/src/interstitial/interstitial.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html style="border: 0px; padding: 0px; margin: 0px;">
+
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <script src="/public/snap.svg-min.js"></script>
+ <script src="/public/jquery-2.1.3.min.js"></script>
+ </head>
+
+ <body style="border: 0px; padding: 0px; margin: 0px;background-color: #808181">
+ <section id="hive-section" style="background-color: #808181;" name="hive-section">
+ <svg id="hive" style="width: 100%; height: 100%;"></svg>
+ </section>
+ <script src="/public/interstitial.js"></script>
+ </body>
+
+</html>
diff --git a/web-ui/src/interstitial/interstitial.js b/web-ui/src/interstitial/interstitial.js
new file mode 100644
index 00000000..c9a29c21
--- /dev/null
+++ b/web-ui/src/interstitial/interstitial.js
@@ -0,0 +1,60 @@
+if ($('#hive').length) {
+ var hive = new Snap('#hive');
+ var img_width = $('#hive').width();
+ var left_pos = img_width * 0.5;
+
+ var pixelated = hive.path("M12.4,20.3v31.8l28,15.8l28-15.8V20.3l-28-15.8L12.4,20.3z M39.2,56.4l-16.3-9V27.9l16.3,9.3L39.2,56.4z M57.7,47.4l-16.1,9l0-19.2l16.1-9.4V47.4z M57.7,25.2L40.4,35.5L22.9,25.2l17.5-9.4L57.7,25.2z").transform("translate(319, 50)").attr("fill", "#908e8e");
+ var all = hive.group().transform("matrix(2, 0, 0, 2, -100, -100)");
+
+ var height = 50;
+ var width = 58;
+ var rows = (($(window).height() / height) / 2) + 1;
+ var cols = (($(window).width() / width) / 2) + 1;
+
+
+ for (var j = 0; j < rows; j++) {
+ for (var i = 0; i < cols; i++) {
+ x = i * width + (j%2*width/2);
+ y = j * height;
+ all.add(pixelated.clone().transform("translate("+x+","+y+")"));
+ }
+ }
+
+ all.add(pixelated);
+
+ var brightenLogo = function () {
+ var glowPosition = Math.floor(Math.random()*rows*cols);
+
+ all[glowPosition].animate({fill: "#FFF"}, 1000, function() {
+ darkenLogo(all[glowPosition]);
+ });
+ };
+
+ var darkenLogo = function (el) {
+ el.animate({fill: "#908e8e"}, 1000, brightenLogo);
+ };
+
+ brightenLogo();
+
+}
+
+$(function () {
+ var handler = setInterval(function () {
+ $.ajax({
+ method: 'GET',
+ url: '/status'
+ }).success(function (data) {
+ if (data.status === 'completed') {
+ window.location="/";
+ } else if (data.status === 'error') {
+ window.location="/login?error";
+ }
+ });
+ }, 2000);
+
+ $('#hive-section').height($(window).height());
+
+ $(window).resize(function() {
+ window.location.reload(true);
+ });
+});
diff --git a/web-ui/src/interstitial/jquery-2.1.3.min.js b/web-ui/src/interstitial/jquery-2.1.3.min.js
new file mode 100644
index 00000000..25714ed2
--- /dev/null
+++ b/web-ui/src/interstitial/jquery-2.1.3.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)
+},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
+},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n});
diff --git a/web-ui/src/interstitial/snap.svg-min.js b/web-ui/src/interstitial/snap.svg-min.js
new file mode 100644
index 00000000..ca9601ab
--- /dev/null
+++ b/web-ui/src/interstitial/snap.svg-min.js
@@ -0,0 +1,20 @@
+// Snap.svg 0.3.0
+//
+// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// build: 2014-06-03
+!function(a){var b,c,d="0.4.2",e="hasOwnProperty",f=/[\.\/]/,g=/\s*,\s*/,h="*",i=function(a,b){return a-b},j={n:{}},k=function(){for(var a=0,b=this.length;b>a;a++)if("undefined"!=typeof this[a])return this[a]},l=function(){for(var a=this.length;--a;)if("undefined"!=typeof this[a])return this[a]},m=function(a,d){a=String(a);var e,f=c,g=Array.prototype.slice.call(arguments,2),h=m.listeners(a),j=0,n=[],o={},p=[],q=b;p.firstDefined=k,p.lastDefined=l,b=a,c=0;for(var r=0,s=h.length;s>r;r++)"zIndex"in h[r]&&(n.push(h[r].zIndex),h[r].zIndex<0&&(o[h[r].zIndex]=h[r]));for(n.sort(i);n[j]<0;)if(e=o[n[j++]],p.push(e.apply(d,g)),c)return c=f,p;for(r=0;s>r;r++)if(e=h[r],"zIndex"in e)if(e.zIndex==n[j]){if(p.push(e.apply(d,g)),c)break;do if(j++,e=o[n[j]],e&&p.push(e.apply(d,g)),c)break;while(e)}else o[e.zIndex]=e;else if(p.push(e.apply(d,g)),c)break;return c=f,b=q,p};m._events=j,m.listeners=function(a){var b,c,d,e,g,i,k,l,m=a.split(f),n=j,o=[n],p=[];for(e=0,g=m.length;g>e;e++){for(l=[],i=0,k=o.length;k>i;i++)for(n=o[i].n,c=[n[m[e]],n[h]],d=2;d--;)b=c[d],b&&(l.push(b),p=p.concat(b.f||[]));o=l}return p},m.on=function(a,b){if(a=String(a),"function"!=typeof b)return function(){};for(var c=a.split(g),d=0,e=c.length;e>d;d++)!function(a){for(var c,d=a.split(f),e=j,g=0,h=d.length;h>g;g++)e=e.n,e=e.hasOwnProperty(d[g])&&e[d[g]]||(e[d[g]]={n:{}});for(e.f=e.f||[],g=0,h=e.f.length;h>g;g++)if(e.f[g]==b){c=!0;break}!c&&e.f.push(b)}(c[d]);return function(a){+a==+a&&(b.zIndex=+a)}},m.f=function(a){var b=[].slice.call(arguments,1);return function(){m.apply(null,[a,null].concat(b).concat([].slice.call(arguments,0)))}},m.stop=function(){c=1},m.nt=function(a){return a?new RegExp("(?:\\.|\\/|^)"+a+"(?:\\.|\\/|$)").test(b):b},m.nts=function(){return b.split(f)},m.off=m.unbind=function(a,b){if(!a)return void(m._events=j={n:{}});var c=a.split(g);if(c.length>1)for(var d=0,i=c.length;i>d;d++)m.off(c[d],b);else{c=a.split(f);var k,l,n,d,i,o,p,q=[j];for(d=0,i=c.length;i>d;d++)for(o=0;o<q.length;o+=n.length-2){if(n=[o,1],k=q[o].n,c[d]!=h)k[c[d]]&&n.push(k[c[d]]);else for(l in k)k[e](l)&&n.push(k[l]);q.splice.apply(q,n)}for(d=0,i=q.length;i>d;d++)for(k=q[d];k.n;){if(b){if(k.f){for(o=0,p=k.f.length;p>o;o++)if(k.f[o]==b){k.f.splice(o,1);break}!k.f.length&&delete k.f}for(l in k.n)if(k.n[e](l)&&k.n[l].f){var r=k.n[l].f;for(o=0,p=r.length;p>o;o++)if(r[o]==b){r.splice(o,1);break}!r.length&&delete k.n[l].f}}else{delete k.f;for(l in k.n)k.n[e](l)&&k.n[l].f&&delete k.n[l].f}k=k.n}}},m.once=function(a,b){var c=function(){return m.unbind(a,c),b.apply(this,arguments)};return m.on(a,c)},m.version=d,m.toString=function(){return"You are running Eve "+d},"undefined"!=typeof module&&module.exports?module.exports=m:"function"==typeof define&&define.amd?define("eve",[],function(){return m}):a.eve=m}(this),function(a,b){"function"==typeof define&&define.amd?define(["eve"],function(c){return b(a,c)}):b(a,a.eve)}(this,function(a,b){var c=function(b){var c={},d=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(a){setTimeout(a,16)},e=Array.isArray||function(a){return a instanceof Array||"[object Array]"==Object.prototype.toString.call(a)},f=0,g="M"+(+new Date).toString(36),h=function(){return g+(f++).toString(36)},i=Date.now||function(){return+new Date},j=function(a){var b=this;if(null==a)return b.s;var c=b.s-a;b.b+=b.dur*c,b.B+=b.dur*c,b.s=a},k=function(a){var b=this;return null==a?b.spd:void(b.spd=a)},l=function(a){var b=this;return null==a?b.dur:(b.s=b.s*a/b.dur,void(b.dur=a))},m=function(){var a=this;delete c[a.id],a.update(),b("mina.stop."+a.id,a)},n=function(){var a=this;a.pdif||(delete c[a.id],a.update(),a.pdif=a.get()-a.b)},o=function(){var a=this;a.pdif&&(a.b=a.get()-a.pdif,delete a.pdif,c[a.id]=a)},p=function(){var a,b=this;if(e(b.start)){a=[];for(var c=0,d=b.start.length;d>c;c++)a[c]=+b.start[c]+(b.end[c]-b.start[c])*b.easing(b.s)}else a=+b.start+(b.end-b.start)*b.easing(b.s);b.set(a)},q=function(){var a=0;for(var e in c)if(c.hasOwnProperty(e)){var f=c[e],g=f.get();a++,f.s=(g-f.b)/(f.dur/f.spd),f.s>=1&&(delete c[e],f.s=1,a--,function(a){setTimeout(function(){b("mina.finish."+a.id,a)})}(f)),f.update()}a&&d(q)},r=function(a,b,e,f,g,i,s){var t={id:h(),start:a,end:b,b:e,s:0,dur:f-e,spd:1,get:g,set:i,easing:s||r.linear,status:j,speed:k,duration:l,stop:m,pause:n,resume:o,update:p};c[t.id]=t;var u,v=0;for(u in c)if(c.hasOwnProperty(u)&&(v++,2==v))break;return 1==v&&d(q),t};return r.time=i,r.getById=function(a){return c[a]||null},r.linear=function(a){return a},r.easeout=function(a){return Math.pow(a,1.7)},r.easein=function(a){return Math.pow(a,.48)},r.easeinout=function(a){if(1==a)return 1;if(0==a)return 0;var b=.48-a/1.04,c=Math.sqrt(.1734+b*b),d=c-b,e=Math.pow(Math.abs(d),1/3)*(0>d?-1:1),f=-c-b,g=Math.pow(Math.abs(f),1/3)*(0>f?-1:1),h=e+g+.5;return 3*(1-h)*h*h+h*h*h},r.backin=function(a){if(1==a)return 1;var b=1.70158;return a*a*((b+1)*a-b)},r.backout=function(a){if(0==a)return 0;a-=1;var b=1.70158;return a*a*((b+1)*a+b)+1},r.elastic=function(a){return a==!!a?a:Math.pow(2,-10*a)*Math.sin(2*(a-.075)*Math.PI/.3)+1},r.bounce=function(a){var b,c=7.5625,d=2.75;return 1/d>a?b=c*a*a:2/d>a?(a-=1.5/d,b=c*a*a+.75):2.5/d>a?(a-=2.25/d,b=c*a*a+.9375):(a-=2.625/d,b=c*a*a+.984375),b},a.mina=r,r}("undefined"==typeof b?function(){}:b),d=function(){function d(a,b){if(a){if(a.tagName)return y(a);if(f(a,"array")&&d.set)return d.set.apply(d,a);if(a instanceof u)return a;if(null==b)return a=z.doc.querySelector(a),y(a)}return a=null==a?"100%":a,b=null==b?"100%":b,new x(a,b)}function e(a,b){if(b){if("#text"==a&&(a=z.doc.createTextNode(b.text||"")),"string"==typeof a&&(a=e(a)),"string"==typeof b)return"xlink:"==b.substring(0,6)?a.getAttributeNS(W,b.substring(6)):"xml:"==b.substring(0,4)?a.getAttributeNS(X,b.substring(4)):a.getAttribute(b);for(var c in b)if(b[A](c)){var d=B(b[c]);d?"xlink:"==c.substring(0,6)?a.setAttributeNS(W,c.substring(6),d):"xml:"==c.substring(0,4)?a.setAttributeNS(X,c.substring(4),d):a.setAttribute(c,d):a.removeAttribute(c)}}else a=z.doc.createElementNS(X,a);return a}function f(a,b){return b=B.prototype.toLowerCase.call(b),"finite"==b?isFinite(a):"array"==b&&(a instanceof Array||Array.isArray&&Array.isArray(a))?!0:"null"==b&&null===a||b==typeof a&&null!==a||"object"==b&&a===Object(a)||L.call(a).slice(8,-1).toLowerCase()==b}function h(a){if("function"==typeof a||Object(a)!==a)return a;var b=new a.constructor;for(var c in a)a[A](c)&&(b[c]=h(a[c]));return b}function i(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return a.push(a.splice(c,1)[0])}function j(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),g=d.cache=d.cache||{},h=d.count=d.count||[];return g[A](f)?(i(h,f),c?c(g[f]):g[f]):(h.length>=1e3&&delete g[h.shift()],h.push(f),g[f]=a.apply(b,e),c?c(g[f]):g[f])}return d}function k(a,b,c,d,e,f){if(null==e){var g=a-c,h=b-d;return g||h?(180+180*E.atan2(-h,-g)/I+360)%360:0}return k(a,b,e,f)-k(c,d,e,f)}function l(a){return a%360*I/180}function m(a){return 180*a/I%360}function n(a){var b=[];return a=a.replace(/(?:^|\s)(\w+)\(([^)]+)\)/g,function(a,c,d){return d=d.split(/\s*,\s*|\s+/),"rotate"==c&&1==d.length&&d.push(0,0),"scale"==c&&(d.length>2?d=d.slice(0,2):2==d.length&&d.push(0,0),1==d.length&&d.push(d[0],0,0)),b.push("skewX"==c?["m",1,0,E.tan(l(d[0])),1,0,0]:"skewY"==c?["m",1,E.tan(l(d[0])),0,1,0,0]:[c.charAt(0)].concat(d)),a}),b}function o(a,b){var c=eb(a),e=new d.Matrix;if(c)for(var f=0,g=c.length;g>f;f++){var h,i,j,k,l,m=c[f],n=m.length,o=B(m[0]).toLowerCase(),p=m[0]!=o,q=p?e.invert():0;"t"==o&&2==n?e.translate(m[1],0):"t"==o&&3==n?p?(h=q.x(0,0),i=q.y(0,0),j=q.x(m[1],m[2]),k=q.y(m[1],m[2]),e.translate(j-h,k-i)):e.translate(m[1],m[2]):"r"==o?2==n?(l=l||b,e.rotate(m[1],l.x+l.width/2,l.y+l.height/2)):4==n&&(p?(j=q.x(m[2],m[3]),k=q.y(m[2],m[3]),e.rotate(m[1],j,k)):e.rotate(m[1],m[2],m[3])):"s"==o?2==n||3==n?(l=l||b,e.scale(m[1],m[n-1],l.x+l.width/2,l.y+l.height/2)):4==n?p?(j=q.x(m[2],m[3]),k=q.y(m[2],m[3]),e.scale(m[1],m[1],j,k)):e.scale(m[1],m[1],m[2],m[3]):5==n&&(p?(j=q.x(m[3],m[4]),k=q.y(m[3],m[4]),e.scale(m[1],m[2],j,k)):e.scale(m[1],m[2],m[3],m[4])):"m"==o&&7==n&&e.add(m[1],m[2],m[3],m[4],m[5],m[6])}return e}function p(a,b){if(null==b){var c=!0;if(b=a.node.getAttribute("linearGradient"==a.type||"radialGradient"==a.type?"gradientTransform":"pattern"==a.type?"patternTransform":"transform"),!b)return new d.Matrix;b=n(b)}else b=d._.rgTransform.test(b)?B(b).replace(/\.{3}|\u2026/g,a._.transform||J):n(b),f(b,"array")&&(b=d.path?d.path.toString.call(b):B(b)),a._.transform=b;var e=o(b,a.getBBox(1));return c?e:void(a.matrix=e)}function q(a){var b=a.node.ownerSVGElement&&y(a.node.ownerSVGElement)||a.node.parentNode&&y(a.node.parentNode)||d.select("svg")||d(0,0),c=b.select("defs"),e=null==c?!1:c.node;return e||(e=w("defs",b.node).node),e}function r(a){return a.node.ownerSVGElement&&y(a.node.ownerSVGElement)||d.select("svg")}function s(a,b,c){function d(a){if(null==a)return J;if(a==+a)return a;e(j,{width:a});try{return j.getBBox().width}catch(b){return 0}}function f(a){if(null==a)return J;if(a==+a)return a;e(j,{height:a});try{return j.getBBox().height}catch(b){return 0}}function g(d,e){null==b?i[d]=e(a.attr(d)||0):d==b&&(i=e(null==c?a.attr(d)||0:c))}var h=r(a).node,i={},j=h.querySelector(".svg---mgr");switch(j||(j=e("rect"),e(j,{x:-9e9,y:-9e9,width:10,height:10,"class":"svg---mgr",fill:"none"}),h.appendChild(j)),a.type){case"rect":g("rx",d),g("ry",f);case"image":g("width",d),g("height",f);case"text":g("x",d),g("y",f);break;case"circle":g("cx",d),g("cy",f),g("r",d);break;case"ellipse":g("cx",d),g("cy",f),g("rx",d),g("ry",f);break;case"line":g("x1",d),g("x2",d),g("y1",f),g("y2",f);break;case"marker":g("refX",d),g("markerWidth",d),g("refY",f),g("markerHeight",f);break;case"radialGradient":g("fx",d),g("fy",f);break;case"tspan":g("dx",d),g("dy",f);break;default:g(b,d)}return h.removeChild(j),i}function t(a){f(a,"array")||(a=Array.prototype.slice.call(arguments,0));for(var b=0,c=0,d=this.node;this[b];)delete this[b++];for(b=0;b<a.length;b++)"set"==a[b].type?a[b].forEach(function(a){d.appendChild(a.node)}):d.appendChild(a[b].node);var e=d.childNodes;for(b=0;b<e.length;b++)this[c++]=y(e[b]);return this}function u(a){if(a.snap in Y)return Y[a.snap];var b,c=this.id=V();try{b=a.ownerSVGElement}catch(d){}if(this.node=a,b&&(this.paper=new x(b)),this.type=a.tagName,this.anims={},this._={transform:[]},a.snap=c,Y[c]=this,"g"==this.type&&(this.add=t),this.type in{g:1,mask:1,pattern:1})for(var e in x.prototype)x.prototype[A](e)&&(this[e]=x.prototype[e])}function v(a){this.node=a}function w(a,b){var c=e(a);b.appendChild(c);var d=y(c);return d}function x(a,b){var c,d,f,g=x.prototype;if(a&&"svg"==a.tagName){if(a.snap in Y)return Y[a.snap];var h=a.ownerDocument;c=new u(a),d=a.getElementsByTagName("desc")[0],f=a.getElementsByTagName("defs")[0],d||(d=e("desc"),d.appendChild(h.createTextNode("Created with Snap")),c.node.appendChild(d)),f||(f=e("defs"),c.node.appendChild(f)),c.defs=f;for(var i in g)g[A](i)&&(c[i]=g[i]);c.paper=c.root=c}else c=w("svg",z.doc.body),e(c.node,{height:b,version:1.1,width:a,xmlns:X});return c}function y(a){return a?a instanceof u||a instanceof v?a:a.tagName&&"svg"==a.tagName.toLowerCase()?new x(a):a.tagName&&"object"==a.tagName.toLowerCase()&&"image/svg+xml"==a.type?new x(a.contentDocument.getElementsByTagName("svg")[0]):new u(a):a}d.version="0.3.0",d.toString=function(){return"Snap v"+this.version},d._={};var z={win:a,doc:a.document};d._.glob=z;var A="hasOwnProperty",B=String,C=parseFloat,D=parseInt,E=Math,F=E.max,G=E.min,H=E.abs,I=(E.pow,E.PI),J=(E.round,""),K=" ",L=Object.prototype.toString,M=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?%?)\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?%?)\s*\))\s*$/i,N=" \n \f\r   ᠎              \u2028\u2029",O=(d._.separator=new RegExp("[,"+N+"]+"),new RegExp("["+N+"]","g"),new RegExp("["+N+"]*,["+N+"]*")),P={hs:1,rg:1},Q=new RegExp("([a-z])["+N+",]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?["+N+"]*,?["+N+"]*)+)","ig"),R=new RegExp("([rstm])["+N+",]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?["+N+"]*,?["+N+"]*)+)","ig"),S=new RegExp("(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)["+N+"]*,?["+N+"]*","ig"),T=0,U="S"+(+new Date).toString(36),V=function(){return U+(T++).toString(36)},W="http://www.w3.org/1999/xlink",X="http://www.w3.org/2000/svg",Y={},Z=d.url=function(a){return"url('#"+a+"')"};d._.$=e,d._.id=V,d.format=function(){var a=/\{([^\}]+)\}/g,b=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,c=function(a,c,d){var e=d;return c.replace(b,function(a,b,c,d,f){b=b||d,e&&(b in e&&(e=e[b]),"function"==typeof e&&f&&(e=e()))}),e=(null==e||e==d?a:e)+""};return function(b,d){return B(b).replace(a,function(a,b){return c(a,b,d)})}}(),d._.clone=h,d._.cacher=j,d.rad=l,d.deg=m,d.angle=k,d.is=f,d.snapTo=function(a,b,c){if(c=f(c,"finite")?c:10,f(a,"array")){for(var d=a.length;d--;)if(H(a[d]-b)<=c)return a[d]}else{a=+a;var e=b%a;if(c>e)return b-e;if(e>a-c)return b-e+a}return b},d.getRGB=j(function(a){if(!a||(a=B(a)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bb};if("none"==a)return{r:-1,g:-1,b:-1,hex:"none",toString:bb};if(!(P[A](a.toLowerCase().substring(0,2))||"#"==a.charAt())&&(a=$(a)),!a)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bb};var b,c,e,g,h,i,j=a.match(M);return j?(j[2]&&(e=D(j[2].substring(5),16),c=D(j[2].substring(3,5),16),b=D(j[2].substring(1,3),16)),j[3]&&(e=D((h=j[3].charAt(3))+h,16),c=D((h=j[3].charAt(2))+h,16),b=D((h=j[3].charAt(1))+h,16)),j[4]&&(i=j[4].split(O),b=C(i[0]),"%"==i[0].slice(-1)&&(b*=2.55),c=C(i[1]),"%"==i[1].slice(-1)&&(c*=2.55),e=C(i[2]),"%"==i[2].slice(-1)&&(e*=2.55),"rgba"==j[1].toLowerCase().slice(0,4)&&(g=C(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100)),j[5]?(i=j[5].split(O),b=C(i[0]),"%"==i[0].slice(-1)&&(b/=100),c=C(i[1]),"%"==i[1].slice(-1)&&(c/=100),e=C(i[2]),"%"==i[2].slice(-1)&&(e/=100),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsba"==j[1].toLowerCase().slice(0,4)&&(g=C(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100),d.hsb2rgb(b,c,e,g)):j[6]?(i=j[6].split(O),b=C(i[0]),"%"==i[0].slice(-1)&&(b/=100),c=C(i[1]),"%"==i[1].slice(-1)&&(c/=100),e=C(i[2]),"%"==i[2].slice(-1)&&(e/=100),("deg"==i[0].slice(-3)||"°"==i[0].slice(-1))&&(b/=360),"hsla"==j[1].toLowerCase().slice(0,4)&&(g=C(i[3])),i[3]&&"%"==i[3].slice(-1)&&(g/=100),d.hsl2rgb(b,c,e,g)):(b=G(E.round(b),255),c=G(E.round(c),255),e=G(E.round(e),255),g=G(F(g,0),1),j={r:b,g:c,b:e,toString:bb},j.hex="#"+(16777216|e|c<<8|b<<16).toString(16).slice(1),j.opacity=f(g,"finite")?g:1,j)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bb}},d),d.hsb=j(function(a,b,c){return d.hsb2rgb(a,b,c).hex}),d.hsl=j(function(a,b,c){return d.hsl2rgb(a,b,c).hex}),d.rgb=j(function(a,b,c,d){if(f(d,"finite")){var e=E.round;return"rgba("+[e(a),e(b),e(c),+d.toFixed(2)]+")"}return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)});var $=function(a){var b=z.doc.getElementsByTagName("head")[0]||z.doc.getElementsByTagName("svg")[0],c="rgb(255, 0, 0)";return($=j(function(a){if("red"==a.toLowerCase())return c;b.style.color=c,b.style.color=a;var d=z.doc.defaultView.getComputedStyle(b,J).getPropertyValue("color");return d==c?null:d}))(a)},_=function(){return"hsb("+[this.h,this.s,this.b]+")"},ab=function(){return"hsl("+[this.h,this.s,this.l]+")"},bb=function(){return 1==this.opacity||null==this.opacity?this.hex:"rgba("+[this.r,this.g,this.b,this.opacity]+")"},cb=function(a,b,c){if(null==b&&f(a,"object")&&"r"in a&&"g"in a&&"b"in a&&(c=a.b,b=a.g,a=a.r),null==b&&f(a,string)){var e=d.getRGB(a);a=e.r,b=e.g,c=e.b}return(a>1||b>1||c>1)&&(a/=255,b/=255,c/=255),[a,b,c]},db=function(a,b,c,e){a=E.round(255*a),b=E.round(255*b),c=E.round(255*c);var g={r:a,g:b,b:c,opacity:f(e,"finite")?e:1,hex:d.rgb(a,b,c),toString:bb};return f(e,"finite")&&(g.opacity=e),g};d.color=function(a){var b;return f(a,"object")&&"h"in a&&"s"in a&&"b"in a?(b=d.hsb2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.opacity=1,a.hex=b.hex):f(a,"object")&&"h"in a&&"s"in a&&"l"in a?(b=d.hsl2rgb(a),a.r=b.r,a.g=b.g,a.b=b.b,a.opacity=1,a.hex=b.hex):(f(a,"string")&&(a=d.getRGB(a)),f(a,"object")&&"r"in a&&"g"in a&&"b"in a&&!("error"in a)?(b=d.rgb2hsl(a),a.h=b.h,a.s=b.s,a.l=b.l,b=d.rgb2hsb(a),a.v=b.b):(a={hex:"none"},a.r=a.g=a.b=a.h=a.s=a.v=a.l=-1,a.error=1)),a.toString=bb,a},d.hsb2rgb=function(a,b,c,d){f(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,g,h,i,j;return a=a%360/60,j=c*b,i=j*(1-H(a%2-1)),e=g=h=c-j,a=~~a,e+=[j,i,0,0,i,j][a],g+=[i,j,j,i,0,0][a],h+=[0,0,i,j,j,i][a],db(e,g,h,d)},d.hsl2rgb=function(a,b,c,d){f(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h),(a>1||b>1||c>1)&&(a/=360,b/=100,c/=100),a*=360;var e,g,h,i,j;return a=a%360/60,j=2*b*(.5>c?c:1-c),i=j*(1-H(a%2-1)),e=g=h=c-j/2,a=~~a,e+=[j,i,0,0,i,j][a],g+=[i,j,j,i,0,0][a],h+=[0,0,i,j,j,i][a],db(e,g,h,d)},d.rgb2hsb=function(a,b,c){c=cb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;return f=F(a,b,c),g=f-G(a,b,c),d=0==g?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=0==g?0:g/f,{h:d,s:e,b:f,toString:_}},d.rgb2hsl=function(a,b,c){c=cb(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;return g=F(a,b,c),h=G(a,b,c),i=g-h,d=0==i?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=0==i?0:.5>f?i/(2*f):i/(2-2*f),{h:d,s:e,l:f,toString:ab}},d.parsePathString=function(a){if(!a)return null;var b=d.path(a);if(b.arr)return d.path.clone(b.arr);var c={a:7,c:6,o:2,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,u:3,z:0},e=[];return f(a,"array")&&f(a[0],"array")&&(e=d.path.clone(a)),e.length||B(a).replace(Q,function(a,b,d){var f=[],g=b.toLowerCase();if(d.replace(S,function(a,b){b&&f.push(+b)}),"m"==g&&f.length>2&&(e.push([b].concat(f.splice(0,2))),g="l",b="m"==b?"l":"L"),"o"==g&&1==f.length&&e.push([b,f[0]]),"r"==g)e.push([b].concat(f));else for(;f.length>=c[g]&&(e.push([b].concat(f.splice(0,c[g]))),c[g]););}),e.toString=d.path.toString,b.arr=d.path.clone(e),e};var eb=d.parseTransformString=function(a){if(!a)return null;var b=[];return f(a,"array")&&f(a[0],"array")&&(b=d.path.clone(a)),b.length||B(a).replace(R,function(a,c,d){{var e=[];c.toLowerCase()}d.replace(S,function(a,b){b&&e.push(+b)}),b.push([c].concat(e))}),b.toString=d.path.toString,b};d._.svgTransform2string=n,d._.rgTransform=new RegExp("^[a-z]["+N+"]*-?\\.?\\d","i"),d._.transform2matrix=o,d._unit2px=s;z.doc.contains||z.doc.compareDocumentPosition?function(a,b){var c=9==a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a==d||!(!d||1!=d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b;)if(b=b.parentNode,b==a)return!0;return!1};d._.getSomeDefs=q,d._.getSomeSVG=r,d.select=function(a){return y(z.doc.querySelector(a))},d.selectAll=function(a){for(var b=z.doc.querySelectorAll(a),c=(d.set||Array)(),e=0;e<b.length;e++)c.push(y(b[e]));return c},setInterval(function(){for(var a in Y)if(Y[A](a)){var b=Y[a],c=b.node;("svg"!=b.type&&!c.ownerSVGElement||"svg"==b.type&&(!c.parentNode||"ownerSVGElement"in c.parentNode&&!c.ownerSVGElement))&&delete Y[a]}},1e4),function(a){function g(a){function b(a,b){var c=e(a.node,b);c=c&&c.match(g),c=c&&c[2],c&&"#"==c.charAt()&&(c=c.substring(1),c&&(i[c]=(i[c]||[]).concat(function(c){var d={};d[b]=Z(c),e(a.node,d)})))}function c(a){var b=e(a.node,"xlink:href");b&&"#"==b.charAt()&&(b=b.substring(1),b&&(i[b]=(i[b]||[]).concat(function(b){a.attr("xlink:href","#"+b)})))}for(var d,f=a.selectAll("*"),g=/^\s*url\(("|'|)(.*)\1\)\s*$/,h=[],i={},j=0,k=f.length;k>j;j++){d=f[j],b(d,"fill"),b(d,"stroke"),b(d,"filter"),b(d,"mask"),b(d,"clip-path"),c(d);var l=e(d.node,"id");l&&(e(d.node,{id:d.id}),h.push({old:l,id:d.id}))}for(j=0,k=h.length;k>j;j++){var m=i[h[j].old];if(m)for(var n=0,o=m.length;o>n;n++)m[n](h[j].id)}}function h(a,b,c){return function(d){var e=d.slice(a,b);return 1==e.length&&(e=e[0]),c?c(e):e}}function i(a){return function(){var b=a?"<"+this.type:"",c=this.node.attributes,d=this.node.childNodes;if(a)for(var e=0,f=c.length;f>e;e++)b+=" "+c[e].name+'="'+c[e].value.replace(/"/g,'\\"')+'"';if(d.length){for(a&&(b+=">"),e=0,f=d.length;f>e;e++)3==d[e].nodeType?b+=d[e].nodeValue:1==d[e].nodeType&&(b+=y(d[e]).toString());a&&(b+="</"+this.type+">")}else a&&(b+="/>");return b}}a.attr=function(a,c){{var d=this;d.node}if(!a)return d;if(f(a,"string")){if(!(arguments.length>1))return b("snap.util.getattr."+a,d).firstDefined();var e={};e[a]=c,a=e}for(var g in a)a[A](g)&&b("snap.util.attr."+g,d,a[g]);return d},a.getBBox=function(a){if(!d.Matrix||!d.path)return this.node.getBBox();var b=this,c=new d.Matrix;if(b.removed)return d._.box();for(;"use"==b.type;)if(a||(c=c.add(b.transform().localMatrix.translate(b.attr("x")||0,b.attr("y")||0))),b.original)b=b.original;else{var e=b.attr("xlink:href");b=b.original=b.node.ownerDocument.getElementById(e.substring(e.indexOf("#")+1))}var f=b._,g=d.path.get[b.type]||d.path.get.deflt;try{return a?(f.bboxwt=g?d.path.getBBox(b.realPath=g(b)):d._.box(b.node.getBBox()),d._.box(f.bboxwt)):(b.realPath=g(b),b.matrix=b.transform().localMatrix,f.bbox=d.path.getBBox(d.path.map(b.realPath,c.add(b.matrix))),d._.box(f.bbox))}catch(h){return d._.box()}};var j=function(){return this.string};a.transform=function(a){var b=this._;if(null==a){for(var c,f=this,g=new d.Matrix(this.node.getCTM()),h=p(this),i=[h],k=new d.Matrix,l=h.toTransformString(),m=B(h)==B(this.matrix)?B(b.transform):l;"svg"!=f.type&&(f=f.parent());)i.push(p(f));for(c=i.length;c--;)k.add(i[c]);return{string:m,globalMatrix:g,totalMatrix:k,localMatrix:h,diffMatrix:g.clone().add(h.invert()),global:g.toTransformString(),total:k.toTransformString(),local:l,toString:j}}return a instanceof d.Matrix?this.matrix=a:p(this,a),this.node&&("linearGradient"==this.type||"radialGradient"==this.type?e(this.node,{gradientTransform:this.matrix}):"pattern"==this.type?e(this.node,{patternTransform:this.matrix}):e(this.node,{transform:this.matrix})),this},a.parent=function(){return y(this.node.parentNode)},a.append=a.add=function(a){if(a){if("set"==a.type){var b=this;return a.forEach(function(a){b.add(a)}),this}a=y(a),this.node.appendChild(a.node),a.paper=this.paper}return this},a.appendTo=function(a){return a&&(a=y(a),a.append(this)),this},a.prepend=function(a){if(a){if("set"==a.type){var b,c=this;return a.forEach(function(a){b?b.after(a):c.prepend(a),b=a}),this}a=y(a);var d=a.parent();this.node.insertBefore(a.node,this.node.firstChild),this.add&&this.add(),a.paper=this.paper,this.parent()&&this.parent().add(),d&&d.add()}return this},a.prependTo=function(a){return a=y(a),a.prepend(this),this},a.before=function(a){if("set"==a.type){var b=this;return a.forEach(function(a){var c=a.parent();b.node.parentNode.insertBefore(a.node,b.node),c&&c.add()}),this.parent().add(),this}a=y(a);var c=a.parent();return this.node.parentNode.insertBefore(a.node,this.node),this.parent()&&this.parent().add(),c&&c.add(),a.paper=this.paper,this},a.after=function(a){a=y(a);var b=a.parent();return this.node.nextSibling?this.node.parentNode.insertBefore(a.node,this.node.nextSibling):this.node.parentNode.appendChild(a.node),this.parent()&&this.parent().add(),b&&b.add(),a.paper=this.paper,this},a.insertBefore=function(a){a=y(a);var b=this.parent();return a.node.parentNode.insertBefore(this.node,a.node),this.paper=a.paper,b&&b.add(),a.parent()&&a.parent().add(),this},a.insertAfter=function(a){a=y(a);var b=this.parent();return a.node.parentNode.insertBefore(this.node,a.node.nextSibling),this.paper=a.paper,b&&b.add(),a.parent()&&a.parent().add(),this},a.remove=function(){var a=this.parent();return this.node.parentNode&&this.node.parentNode.removeChild(this.node),delete this.paper,this.removed=!0,a&&a.add(),this},a.select=function(a){return y(this.node.querySelector(a))},a.selectAll=function(a){for(var b=this.node.querySelectorAll(a),c=(d.set||Array)(),e=0;e<b.length;e++)c.push(y(b[e]));return c},a.asPX=function(a,b){return null==b&&(b=this.attr(a)),+s(this,a,b)},a.use=function(){var a,b=this.node.id;return b||(b=this.id,e(this.node,{id:b})),a="linearGradient"==this.type||"radialGradient"==this.type||"pattern"==this.type?w(this.type,this.node.parentNode):w("use",this.node.parentNode),e(a.node,{"xlink:href":"#"+b}),a.original=this,a};var k=/\S+/g;a.addClass=function(a){var b,c,d,e,f=(a||"").match(k)||[],g=this.node,h=g.className.baseVal,i=h.match(k)||[];if(f.length){for(b=0;d=f[b++];)c=i.indexOf(d),~c||i.push(d);e=i.join(" "),h!=e&&(g.className.baseVal=e)}return this},a.removeClass=function(a){var b,c,d,e,f=(a||"").match(k)||[],g=this.node,h=g.className.baseVal,i=h.match(k)||[];if(i.length){for(b=0;d=f[b++];)c=i.indexOf(d),~c&&i.splice(c,1);e=i.join(" "),h!=e&&(g.className.baseVal=e)}return this},a.hasClass=function(a){var b=this.node,c=b.className.baseVal,d=c.match(k)||[];return!!~d.indexOf(a)},a.toggleClass=function(a,b){if(null!=b)return b?this.addClass(a):this.removeClass(a);var c,d,e,f,g=(a||"").match(k)||[],h=this.node,i=h.className.baseVal,j=i.match(k)||[];for(c=0;e=g[c++];)d=j.indexOf(e),~d?j.splice(d,1):j.push(e);return f=j.join(" "),i!=f&&(h.className.baseVal=f),this},a.clone=function(){var a=y(this.node.cloneNode(!0));return e(a.node,"id")&&e(a.node,{id:a.id}),g(a),a.insertAfter(this),a},a.toDefs=function(){var a=q(this);return a.appendChild(this.node),this},a.pattern=a.toPattern=function(a,b,c,d){var g=w("pattern",q(this));return null==a&&(a=this.getBBox()),f(a,"object")&&"x"in a&&(b=a.y,c=a.width,d=a.height,a=a.x),e(g.node,{x:a,y:b,width:c,height:d,patternUnits:"userSpaceOnUse",id:g.id,viewBox:[a,b,c,d].join(" ")}),g.node.appendChild(this.node),g},a.marker=function(a,b,c,d,g,h){var i=w("marker",q(this));return null==a&&(a=this.getBBox()),f(a,"object")&&"x"in a&&(b=a.y,c=a.width,d=a.height,g=a.refX||a.cx,h=a.refY||a.cy,a=a.x),e(i.node,{viewBox:[a,b,c,d].join(K),markerWidth:c,markerHeight:d,orient:"auto",refX:g||0,refY:h||0,id:i.id}),i.node.appendChild(this.node),i};var l=function(a,b,d,e){"function"!=typeof d||d.length||(e=d,d=c.linear),this.attr=a,this.dur=b,d&&(this.easing=d),e&&(this.callback=e)};d._.Animation=l,d.animation=function(a,b,c,d){return new l(a,b,c,d)},a.inAnim=function(){var a=this,b=[];for(var c in a.anims)a.anims[A](c)&&!function(a){b.push({anim:new l(a._attrs,a.dur,a.easing,a._callback),mina:a,curStatus:a.status(),status:function(b){return a.status(b)},stop:function(){a.stop()}})}(a.anims[c]);return b},d.animate=function(a,d,e,f,g,h){"function"!=typeof g||g.length||(h=g,g=c.linear);var i=c.time(),j=c(a,d,i,i+f,c.time,e,g);return h&&b.once("mina.finish."+j.id,h),j},a.stop=function(){for(var a=this.inAnim(),b=0,c=a.length;c>b;b++)a[b].stop();return this},a.animate=function(a,d,e,g){"function"!=typeof e||e.length||(g=e,e=c.linear),a instanceof l&&(g=a.callback,e=a.easing,d=e.dur,a=a.attr);var i,j,k,m,n=[],o=[],p={},q=this;for(var r in a)if(a[A](r)){q.equal?(m=q.equal(r,B(a[r])),i=m.from,j=m.to,k=m.f):(i=+q.attr(r),j=+a[r]);var s=f(i,"array")?i.length:1;p[r]=h(n.length,n.length+s,k),n=n.concat(i),o=o.concat(j)}var t=c.time(),u=c(n,o,t,t+d,c.time,function(a){var b={};for(var c in p)p[A](c)&&(b[c]=p[c](a));q.attr(b)},e);return q.anims[u.id]=u,u._attrs=a,u._callback=g,b("snap.animcreated."+q.id,u),b.once("mina.finish."+u.id,function(){delete q.anims[u.id],g&&g.call(q)}),b.once("mina.stop."+u.id,function(){delete q.anims[u.id]}),q};var m={};a.data=function(a,c){var e=m[this.id]=m[this.id]||{};if(0==arguments.length)return b("snap.data.get."+this.id,this,e,null),e;if(1==arguments.length){if(d.is(a,"object")){for(var f in a)a[A](f)&&this.data(f,a[f]);return this}return b("snap.data.get."+this.id,this,e[a],a),e[a]}return e[a]=c,b("snap.data.set."+this.id,this,c,a),this},a.removeData=function(a){return null==a?m[this.id]={}:m[this.id]&&delete m[this.id][a],this},a.outerSVG=a.toString=i(1),a.innerSVG=i()}(u.prototype),d.parse=function(a){var b=z.doc.createDocumentFragment(),c=!0,d=z.doc.createElement("div");if(a=B(a),a.match(/^\s*<\s*svg(?:\s|>)/)||(a="<svg>"+a+"</svg>",c=!1),d.innerHTML=a,a=d.getElementsByTagName("svg")[0])if(c)b=a;else for(;a.firstChild;)b.appendChild(a.firstChild);return d.innerHTML=J,new v(b)},v.prototype.select=u.prototype.select,v.prototype.selectAll=u.prototype.selectAll,d.fragment=function(){for(var a=Array.prototype.slice.call(arguments,0),b=z.doc.createDocumentFragment(),c=0,e=a.length;e>c;c++){var f=a[c];f.node&&f.node.nodeType&&b.appendChild(f.node),f.nodeType&&b.appendChild(f),"string"==typeof f&&b.appendChild(d.parse(f).node)}return new v(b)},d._.make=w,d._.wrap=y,x.prototype.el=function(a,b){var c=w(a,this.node);return b&&c.attr(b),c},b.on("snap.util.getattr",function(){var a=b.nt();a=a.substring(a.lastIndexOf(".")+1);var c=a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()});return fb[A](c)?this.node.ownerDocument.defaultView.getComputedStyle(this.node,null).getPropertyValue(c):e(this.node,a)});var fb={"alignment-baseline":0,"baseline-shift":0,clip:0,"clip-path":0,"clip-rule":0,color:0,"color-interpolation":0,"color-interpolation-filters":0,"color-profile":0,"color-rendering":0,cursor:0,direction:0,display:0,"dominant-baseline":0,"enable-background":0,fill:0,"fill-opacity":0,"fill-rule":0,filter:0,"flood-color":0,"flood-opacity":0,font:0,"font-family":0,"font-size":0,"font-size-adjust":0,"font-stretch":0,"font-style":0,"font-variant":0,"font-weight":0,"glyph-orientation-horizontal":0,"glyph-orientation-vertical":0,"image-rendering":0,kerning:0,"letter-spacing":0,"lighting-color":0,marker:0,"marker-end":0,"marker-mid":0,"marker-start":0,mask:0,opacity:0,overflow:0,"pointer-events":0,"shape-rendering":0,"stop-color":0,"stop-opacity":0,stroke:0,"stroke-dasharray":0,"stroke-dashoffset":0,"stroke-linecap":0,"stroke-linejoin":0,"stroke-miterlimit":0,"stroke-opacity":0,"stroke-width":0,"text-anchor":0,"text-decoration":0,"text-rendering":0,"unicode-bidi":0,visibility:0,"word-spacing":0,"writing-mode":0};b.on("snap.util.attr",function(a){var c=b.nt(),d={};c=c.substring(c.lastIndexOf(".")+1),d[c]=a;var f=c.replace(/-(\w)/gi,function(a,b){return b.toUpperCase()}),g=c.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()});fb[A](g)?this.node.style[f]=null==a?J:a:e(this.node,d)}),function(){}(x.prototype),d.ajax=function(a,c,d,e){var g=new XMLHttpRequest,h=V();if(g){if(f(c,"function"))e=d,d=c,c=null;else if(f(c,"object")){var i=[];for(var j in c)c.hasOwnProperty(j)&&i.push(encodeURIComponent(j)+"="+encodeURIComponent(c[j]));c=i.join("&")}return g.open(c?"POST":"GET",a,!0),c&&(g.setRequestHeader("X-Requested-With","XMLHttpRequest"),g.setRequestHeader("Content-type","application/x-www-form-urlencoded")),d&&(b.once("snap.ajax."+h+".0",d),b.once("snap.ajax."+h+".200",d),b.once("snap.ajax."+h+".304",d)),g.onreadystatechange=function(){4==g.readyState&&b("snap.ajax."+h+"."+g.status,e,g)},4==g.readyState?g:(g.send(c),g)}},d.load=function(a,b,c){d.ajax(a,function(a){var e=d.parse(a.responseText);c?b.call(c,e):b(e)})};var gb=function(a){var b=a.getBoundingClientRect(),c=a.ownerDocument,d=c.body,e=c.documentElement,f=e.clientTop||d.clientTop||0,h=e.clientLeft||d.clientLeft||0,i=b.top+(g.win.pageYOffset||e.scrollTop||d.scrollTop)-f,j=b.left+(g.win.pageXOffset||e.scrollLeft||d.scrollLeft)-h;return{y:i,x:j}};return d.getElementByPoint=function(a,b){var c=this,d=(c.canvas,z.doc.elementFromPoint(a,b));if(z.win.opera&&"svg"==d.tagName){var e=gb(d),f=d.createSVGRect();f.x=a-e.x,f.y=b-e.y,f.width=f.height=1;var g=d.getIntersectionList(f,null);g.length&&(d=g[g.length-1])}return d?y(d):null},d.plugin=function(a){a(d,u,x,z,v)},z.win.Snap=d,d}();return d.plugin(function(a){function b(a,b,d,e,f,g){return null==b&&"[object SVGMatrix]"==c.call(a)?(this.a=a.a,this.b=a.b,this.c=a.c,this.d=a.d,this.e=a.e,void(this.f=a.f)):void(null!=a?(this.a=+a,this.b=+b,this.c=+d,this.d=+e,this.e=+f,this.f=+g):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0))}var c=Object.prototype.toString,d=String,e=Math,f="";!function(c){function g(a){return a[0]*a[0]+a[1]*a[1]
+}function h(a){var b=e.sqrt(g(a));a[0]&&(a[0]/=b),a[1]&&(a[1]/=b)}c.add=function(a,c,d,e,f,g){var h,i,j,k,l=[[],[],[]],m=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],n=[[a,d,f],[c,e,g],[0,0,1]];for(a&&a instanceof b&&(n=[[a.a,a.c,a.e],[a.b,a.d,a.f],[0,0,1]]),h=0;3>h;h++)for(i=0;3>i;i++){for(k=0,j=0;3>j;j++)k+=m[h][j]*n[j][i];l[h][i]=k}return this.a=l[0][0],this.b=l[1][0],this.c=l[0][1],this.d=l[1][1],this.e=l[0][2],this.f=l[1][2],this},c.invert=function(){var a=this,c=a.a*a.d-a.b*a.c;return new b(a.d/c,-a.b/c,-a.c/c,a.a/c,(a.c*a.f-a.d*a.e)/c,(a.b*a.e-a.a*a.f)/c)},c.clone=function(){return new b(this.a,this.b,this.c,this.d,this.e,this.f)},c.translate=function(a,b){return this.add(1,0,0,1,a,b)},c.scale=function(a,b,c,d){return null==b&&(b=a),(c||d)&&this.add(1,0,0,1,c,d),this.add(a,0,0,b,0,0),(c||d)&&this.add(1,0,0,1,-c,-d),this},c.rotate=function(b,c,d){b=a.rad(b),c=c||0,d=d||0;var f=+e.cos(b).toFixed(9),g=+e.sin(b).toFixed(9);return this.add(f,g,-g,f,c,d),this.add(1,0,0,1,-c,-d)},c.x=function(a,b){return a*this.a+b*this.c+this.e},c.y=function(a,b){return a*this.b+b*this.d+this.f},c.get=function(a){return+this[d.fromCharCode(97+a)].toFixed(4)},c.toString=function(){return"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")"},c.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},c.determinant=function(){return this.a*this.d-this.b*this.c},c.split=function(){var b={};b.dx=this.e,b.dy=this.f;var c=[[this.a,this.c],[this.b,this.d]];b.scalex=e.sqrt(g(c[0])),h(c[0]),b.shear=c[0][0]*c[1][0]+c[0][1]*c[1][1],c[1]=[c[1][0]-c[0][0]*b.shear,c[1][1]-c[0][1]*b.shear],b.scaley=e.sqrt(g(c[1])),h(c[1]),b.shear/=b.scaley,this.determinant()<0&&(b.scalex=-b.scalex);var d=-c[0][1],f=c[1][1];return 0>f?(b.rotate=a.deg(e.acos(f)),0>d&&(b.rotate=360-b.rotate)):b.rotate=a.deg(e.asin(d)),b.isSimple=!(+b.shear.toFixed(9)||b.scalex.toFixed(9)!=b.scaley.toFixed(9)&&b.rotate),b.isSuperSimple=!+b.shear.toFixed(9)&&b.scalex.toFixed(9)==b.scaley.toFixed(9)&&!b.rotate,b.noRotation=!+b.shear.toFixed(9)&&!b.rotate,b},c.toTransformString=function(a){var b=a||this.split();return+b.shear.toFixed(9)?"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]:(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[+b.dx.toFixed(4),+b.dy.toFixed(4)]:f)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:f)+(b.rotate?"r"+[+b.rotate.toFixed(4),0,0]:f))}}(b.prototype),a.Matrix=b,a.matrix=function(a,c,d,e,f,g){return new b(a,c,d,e,f,g)}}),d.plugin(function(a,c,d,e,f){function g(d){return function(e){if(b.stop(),e instanceof f&&1==e.node.childNodes.length&&("radialGradient"==e.node.firstChild.tagName||"linearGradient"==e.node.firstChild.tagName||"pattern"==e.node.firstChild.tagName)&&(e=e.node.firstChild,n(this).appendChild(e),e=l(e)),e instanceof c)if("radialGradient"==e.type||"linearGradient"==e.type||"pattern"==e.type){e.node.id||p(e.node,{id:e.id});var g=q(e.node.id)}else g=e.attr(d);else if(g=a.color(e),g.error){var h=a(n(this).ownerSVGElement).gradient(e);h?(h.node.id||p(h.node,{id:h.id}),g=q(h.node.id)):g=e}else g=r(g);var i={};i[d]=g,p(this.node,i),this.node.style[d]=t}}function h(a){b.stop(),a==+a&&(a+="px"),this.node.style.fontSize=a}function i(a){for(var b=[],c=a.childNodes,d=0,e=c.length;e>d;d++){var f=c[d];3==f.nodeType&&b.push(f.nodeValue),"tspan"==f.tagName&&b.push(1==f.childNodes.length&&3==f.firstChild.nodeType?f.firstChild.nodeValue:i(f))}return b}function j(){return b.stop(),this.node.style.fontSize}var k=a._.make,l=a._.wrap,m=a.is,n=a._.getSomeDefs,o=/^url\(#?([^)]+)\)$/,p=a._.$,q=a.url,r=String,s=a._.separator,t="";b.on("snap.util.attr.mask",function(a){if(a instanceof c||a instanceof f){if(b.stop(),a instanceof f&&1==a.node.childNodes.length&&(a=a.node.firstChild,n(this).appendChild(a),a=l(a)),"mask"==a.type)var d=a;else d=k("mask",n(this)),d.node.appendChild(a.node);!d.node.id&&p(d.node,{id:d.id}),p(this.node,{mask:q(d.id)})}}),function(a){b.on("snap.util.attr.clip",a),b.on("snap.util.attr.clip-path",a),b.on("snap.util.attr.clipPath",a)}(function(a){if(a instanceof c||a instanceof f){if(b.stop(),"clipPath"==a.type)var d=a;else d=k("clipPath",n(this)),d.node.appendChild(a.node),!d.node.id&&p(d.node,{id:d.id});p(this.node,{"clip-path":q(d.id)})}}),b.on("snap.util.attr.fill",g("fill")),b.on("snap.util.attr.stroke",g("stroke"));var u=/^([lr])(?:\(([^)]*)\))?(.*)$/i;b.on("snap.util.grad.parse",function(a){a=r(a);var b=a.match(u);if(!b)return null;var c=b[1],d=b[2],e=b[3];return d=d.split(/\s*,\s*/).map(function(a){return+a==a?+a:a}),1==d.length&&0==d[0]&&(d=[]),e=e.split("-"),e=e.map(function(a){a=a.split(":");var b={color:a[0]};return a[1]&&(b.offset=parseFloat(a[1])),b}),{type:c,params:d,stops:e}}),b.on("snap.util.attr.d",function(c){b.stop(),m(c,"array")&&m(c[0],"array")&&(c=a.path.toString.call(c)),c=r(c),c.match(/[ruo]/i)&&(c=a.path.toAbsolute(c)),p(this.node,{d:c})})(-1),b.on("snap.util.attr.#text",function(a){b.stop(),a=r(a);for(var c=e.doc.createTextNode(a);this.node.firstChild;)this.node.removeChild(this.node.firstChild);this.node.appendChild(c)})(-1),b.on("snap.util.attr.path",function(a){b.stop(),this.attr({d:a})})(-1),b.on("snap.util.attr.class",function(a){b.stop(),this.node.className.baseVal=a})(-1),b.on("snap.util.attr.viewBox",function(a){var c;c=m(a,"object")&&"x"in a?[a.x,a.y,a.width,a.height].join(" "):m(a,"array")?a.join(" "):a,p(this.node,{viewBox:c}),b.stop()})(-1),b.on("snap.util.attr.transform",function(a){this.transform(a),b.stop()})(-1),b.on("snap.util.attr.r",function(a){"rect"==this.type&&(b.stop(),p(this.node,{rx:a,ry:a}))})(-1),b.on("snap.util.attr.textpath",function(a){if(b.stop(),"text"==this.type){var d,e,f;if(!a&&this.textPath){for(e=this.textPath;e.node.firstChild;)this.node.appendChild(e.node.firstChild);return e.remove(),void delete this.textPath}if(m(a,"string")){var g=n(this),h=l(g.parentNode).path(a);g.appendChild(h.node),d=h.id,h.attr({id:d})}else a=l(a),a instanceof c&&(d=a.attr("id"),d||(d=a.id,a.attr({id:d})));if(d)if(e=this.textPath,f=this.node,e)e.attr({"xlink:href":"#"+d});else{for(e=p("textPath",{"xlink:href":"#"+d});f.firstChild;)e.appendChild(f.firstChild);f.appendChild(e),this.textPath=l(e)}}})(-1),b.on("snap.util.attr.text",function(a){if("text"==this.type){for(var c=this.node,d=function(a){var b=p("tspan");if(m(a,"array"))for(var c=0;c<a.length;c++)b.appendChild(d(a[c]));else b.appendChild(e.doc.createTextNode(a));return b.normalize&&b.normalize(),b};c.firstChild;)c.removeChild(c.firstChild);for(var f=d(a);f.firstChild;)c.appendChild(f.firstChild)}b.stop()})(-1),b.on("snap.util.attr.fontSize",h)(-1),b.on("snap.util.attr.font-size",h)(-1),b.on("snap.util.getattr.transform",function(){return b.stop(),this.transform()})(-1),b.on("snap.util.getattr.textpath",function(){return b.stop(),this.textPath})(-1),function(){function c(c){return function(){b.stop();var d=e.doc.defaultView.getComputedStyle(this.node,null).getPropertyValue("marker-"+c);return"none"==d?d:a(e.doc.getElementById(d.match(o)[1]))}}function d(a){return function(c){b.stop();var d="marker"+a.charAt(0).toUpperCase()+a.substring(1);if(""==c||!c)return void(this.node.style[d]="none");if("marker"==c.type){var e=c.node.id;return e||p(c.node,{id:c.id}),void(this.node.style[d]=q(e))}}}b.on("snap.util.getattr.marker-end",c("end"))(-1),b.on("snap.util.getattr.markerEnd",c("end"))(-1),b.on("snap.util.getattr.marker-start",c("start"))(-1),b.on("snap.util.getattr.markerStart",c("start"))(-1),b.on("snap.util.getattr.marker-mid",c("mid"))(-1),b.on("snap.util.getattr.markerMid",c("mid"))(-1),b.on("snap.util.attr.marker-end",d("end"))(-1),b.on("snap.util.attr.markerEnd",d("end"))(-1),b.on("snap.util.attr.marker-start",d("start"))(-1),b.on("snap.util.attr.markerStart",d("start"))(-1),b.on("snap.util.attr.marker-mid",d("mid"))(-1),b.on("snap.util.attr.markerMid",d("mid"))(-1)}(),b.on("snap.util.getattr.r",function(){return"rect"==this.type&&p(this.node,"rx")==p(this.node,"ry")?(b.stop(),p(this.node,"rx")):void 0})(-1),b.on("snap.util.getattr.text",function(){if("text"==this.type||"tspan"==this.type){b.stop();var a=i(this.node);return 1==a.length?a[0]:a}})(-1),b.on("snap.util.getattr.#text",function(){return this.node.textContent})(-1),b.on("snap.util.getattr.viewBox",function(){b.stop();var c=p(this.node,"viewBox");return c?(c=c.split(s),a._.box(+c[0],+c[1],+c[2],+c[3])):void 0})(-1),b.on("snap.util.getattr.points",function(){var a=p(this.node,"points");return b.stop(),a?a.split(s):void 0})(-1),b.on("snap.util.getattr.path",function(){var a=p(this.node,"d");return b.stop(),a})(-1),b.on("snap.util.getattr.class",function(){return this.node.className.baseVal})(-1),b.on("snap.util.getattr.fontSize",j)(-1),b.on("snap.util.getattr.font-size",j)(-1)}),d.plugin(function(){function a(a){return a}function c(a){return function(b){return+b.toFixed(3)+a}}var d={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"/":function(a,b){return a/b},"*":function(a,b){return a*b}},e=String,f=/[a-z]+$/i,g=/^\s*([+\-\/*])\s*=\s*([\d.eE+\-]+)\s*([^\d\s]+)?\s*$/;b.on("snap.util.attr",function(a){var c=e(a).match(g);if(c){var h=b.nt(),i=h.substring(h.lastIndexOf(".")+1),j=this.attr(i),k={};b.stop();var l=c[3]||"",m=j.match(f),n=d[c[1]];if(m&&m==l?a=n(parseFloat(j),+c[2]):(j=this.asPX(i),a=n(this.asPX(i),this.asPX(i,c[2]+l))),isNaN(j)||isNaN(a))return;k[i]=a,this.attr(k)}})(-10),b.on("snap.util.equal",function(h,i){var j=e(this.attr(h)||""),k=e(i).match(g);if(k){b.stop();var l=k[3]||"",m=j.match(f),n=d[k[1]];return m&&m==l?{from:parseFloat(j),to:n(parseFloat(j),+k[2]),f:c(m)}:(j=this.asPX(h),{from:j,to:n(j,this.asPX(h,k[2]+l)),f:a})}})(-10)}),d.plugin(function(a,c,d,e){var f=d.prototype,g=a.is;f.rect=function(a,b,c,d,e,f){var h;return null==f&&(f=e),g(a,"object")&&"[object Object]"==a?h=a:null!=a&&(h={x:a,y:b,width:c,height:d},null!=e&&(h.rx=e,h.ry=f)),this.el("rect",h)},f.circle=function(a,b,c){var d;return g(a,"object")&&"[object Object]"==a?d=a:null!=a&&(d={cx:a,cy:b,r:c}),this.el("circle",d)};var h=function(){function a(){this.parentNode.removeChild(this)}return function(b,c){var d=e.doc.createElement("img"),f=e.doc.body;d.style.cssText="position:absolute;left:-9999em;top:-9999em",d.onload=function(){c.call(d),d.onload=d.onerror=null,f.removeChild(d)},d.onerror=a,f.appendChild(d),d.src=b}}();f.image=function(b,c,d,e,f){var i=this.el("image");if(g(b,"object")&&"src"in b)i.attr(b);else if(null!=b){var j={"xlink:href":b,preserveAspectRatio:"none"};null!=c&&null!=d&&(j.x=c,j.y=d),null!=e&&null!=f?(j.width=e,j.height=f):h(b,function(){a._.$(i.node,{width:this.offsetWidth,height:this.offsetHeight})}),a._.$(i.node,j)}return i},f.ellipse=function(a,b,c,d){var e;return g(a,"object")&&"[object Object]"==a?e=a:null!=a&&(e={cx:a,cy:b,rx:c,ry:d}),this.el("ellipse",e)},f.path=function(a){var b;return g(a,"object")&&!g(a,"array")?b=a:a&&(b={d:a}),this.el("path",b)},f.group=f.g=function(a){var b=this.el("g");return 1==arguments.length&&a&&!a.type?b.attr(a):arguments.length&&b.add(Array.prototype.slice.call(arguments,0)),b},f.svg=function(a,b,c,d,e,f,h,i){var j={};return g(a,"object")&&null==b?j=a:(null!=a&&(j.x=a),null!=b&&(j.y=b),null!=c&&(j.width=c),null!=d&&(j.height=d),null!=e&&null!=f&&null!=h&&null!=i&&(j.viewBox=[e,f,h,i])),this.el("svg",j)},f.mask=function(a){var b=this.el("mask");return 1==arguments.length&&a&&!a.type?b.attr(a):arguments.length&&b.add(Array.prototype.slice.call(arguments,0)),b},f.ptrn=function(a,b,c,d,e,f,h,i){if(g(a,"object"))var j=a;else arguments.length?(j={},null!=a&&(j.x=a),null!=b&&(j.y=b),null!=c&&(j.width=c),null!=d&&(j.height=d),null!=e&&null!=f&&null!=h&&null!=i&&(j.viewBox=[e,f,h,i])):j={patternUnits:"userSpaceOnUse"};return this.el("pattern",j)},f.use=function(a){if(null!=a){{make("use",this.node)}return a instanceof c&&(a.attr("id")||a.attr({id:ID()}),a=a.attr("id")),this.el("use",{"xlink:href":a})}return c.prototype.use.call(this)},f.text=function(a,b,c){var d={};return g(a,"object")?d=a:null!=a&&(d={x:a,y:b,text:c||""}),this.el("text",d)},f.line=function(a,b,c,d){var e={};return g(a,"object")?e=a:null!=a&&(e={x1:a,x2:c,y1:b,y2:d}),this.el("line",e)},f.polyline=function(a){arguments.length>1&&(a=Array.prototype.slice.call(arguments,0));var b={};return g(a,"object")&&!g(a,"array")?b=a:null!=a&&(b={points:a}),this.el("polyline",b)},f.polygon=function(a){arguments.length>1&&(a=Array.prototype.slice.call(arguments,0));var b={};return g(a,"object")&&!g(a,"array")?b=a:null!=a&&(b={points:a}),this.el("polygon",b)},function(){function c(){return this.selectAll("stop")}function d(b,c){var d=j("stop"),e={offset:+c+"%"};return b=a.color(b),e["stop-color"]=b.hex,b.opacity<1&&(e["stop-opacity"]=b.opacity),j(d,e),this.node.appendChild(d),this}function e(){if("linearGradient"==this.type){var b=j(this.node,"x1")||0,c=j(this.node,"x2")||1,d=j(this.node,"y1")||0,e=j(this.node,"y2")||0;return a._.box(b,d,math.abs(c-b),math.abs(e-d))}var f=this.node.cx||.5,g=this.node.cy||.5,h=this.node.r||0;return a._.box(f-h,g-h,2*h,2*h)}function g(a,c){function d(a,b){for(var c=(b-l)/(a-m),d=m;a>d;d++)g[d].offset=+(+l+c*(d-m)).toFixed(2);m=a,l=b}var e,f=b("snap.util.grad.parse",null,c).firstDefined();if(!f)return null;f.params.unshift(a),e="l"==f.type.toLowerCase()?h.apply(0,f.params):i.apply(0,f.params),f.type!=f.type.toLowerCase()&&j(e.node,{gradientUnits:"userSpaceOnUse"});var g=f.stops,k=g.length,l=0,m=0;k--;for(var n=0;k>n;n++)"offset"in g[n]&&d(n,g[n].offset);for(g[k].offset=g[k].offset||100,d(k,g[k].offset),n=0;k>=n;n++){var o=g[n];e.addStop(o.color,o.offset)}return e}function h(b,f,g,h,i){var k=a._.make("linearGradient",b);return k.stops=c,k.addStop=d,k.getBBox=e,null!=f&&j(k.node,{x1:f,y1:g,x2:h,y2:i}),k}function i(b,f,g,h,i,k){var l=a._.make("radialGradient",b);return l.stops=c,l.addStop=d,l.getBBox=e,null!=f&&j(l.node,{cx:f,cy:g,r:h}),null!=i&&null!=k&&j(l.node,{fx:i,fy:k}),l}var j=a._.$;f.gradient=function(a){return g(this.defs,a)},f.gradientLinear=function(a,b,c,d){return h(this.defs,a,b,c,d)},f.gradientRadial=function(a,b,c,d,e){return i(this.defs,a,b,c,d,e)},f.toString=function(){var b,c=this.node.ownerDocument,d=c.createDocumentFragment(),e=c.createElement("div"),f=this.node.cloneNode(!0);return d.appendChild(e),e.appendChild(f),a._.$(f,{xmlns:"http://www.w3.org/2000/svg"}),b=e.innerHTML,d.removeChild(d.firstChild),b},f.clear=function(){for(var a,b=this.node.firstChild;b;)a=b.nextSibling,"defs"!=b.tagName?b.parentNode.removeChild(b):f.clear.call({node:b}),b=a}}()}),d.plugin(function(a,b){function c(a){var b=c.ps=c.ps||{};return b[a]?b[a].sleep=100:b[a]={sleep:100},setTimeout(function(){for(var c in b)b[K](c)&&c!=a&&(b[c].sleep--,!b[c].sleep&&delete b[c])}),b[a]}function d(a,b,c,d){return null==a&&(a=b=c=d=0),null==b&&(b=a.y,c=a.width,d=a.height,a=a.x),{x:a,y:b,width:c,w:c,height:d,h:d,x2:a+c,y2:b+d,cx:a+c/2,cy:b+d/2,r1:N.min(c,d)/2,r2:N.max(c,d)/2,r0:N.sqrt(c*c+d*d)/2,path:w(a,b,c,d),vb:[a,b,c,d].join(" ")}}function e(){return this.join(",").replace(L,"$1")}function f(a){var b=J(a);return b.toString=e,b}function g(a,b,c,d,e,f,g,h,j){return null==j?n(a,b,c,d,e,f,g,h):i(a,b,c,d,e,f,g,h,o(a,b,c,d,e,f,g,h,j))}function h(c,d){function e(a){return+(+a).toFixed(3)}return a._.cacher(function(a,f,h){a instanceof b&&(a=a.attr("d")),a=E(a);for(var j,k,l,m,n,o="",p={},q=0,r=0,s=a.length;s>r;r++){if(l=a[r],"M"==l[0])j=+l[1],k=+l[2];else{if(m=g(j,k,l[1],l[2],l[3],l[4],l[5],l[6]),q+m>f){if(d&&!p.start){if(n=g(j,k,l[1],l[2],l[3],l[4],l[5],l[6],f-q),o+=["C"+e(n.start.x),e(n.start.y),e(n.m.x),e(n.m.y),e(n.x),e(n.y)],h)return o;p.start=o,o=["M"+e(n.x),e(n.y)+"C"+e(n.n.x),e(n.n.y),e(n.end.x),e(n.end.y),e(l[5]),e(l[6])].join(),q+=m,j=+l[5],k=+l[6];continue}if(!c&&!d)return n=g(j,k,l[1],l[2],l[3],l[4],l[5],l[6],f-q)}q+=m,j=+l[5],k=+l[6]}o+=l.shift()+l}return p.end=o,n=c?q:d?p:i(j,k,l[0],l[1],l[2],l[3],l[4],l[5],1)},null,a._.clone)}function i(a,b,c,d,e,f,g,h,i){var j=1-i,k=R(j,3),l=R(j,2),m=i*i,n=m*i,o=k*a+3*l*i*c+3*j*i*i*e+n*g,p=k*b+3*l*i*d+3*j*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,w=j*e+i*g,x=j*f+i*h,y=90-180*N.atan2(q-s,r-t)/O;return{x:o,y:p,m:{x:q,y:r},n:{x:s,y:t},start:{x:u,y:v},end:{x:w,y:x},alpha:y}}function j(b,c,e,f,g,h,i,j){a.is(b,"array")||(b=[b,c,e,f,g,h,i,j]);var k=D.apply(null,b);return d(k.min.x,k.min.y,k.max.x-k.min.x,k.max.y-k.min.y)}function k(a,b,c){return b>=a.x&&b<=a.x+a.width&&c>=a.y&&c<=a.y+a.height}function l(a,b){return a=d(a),b=d(b),k(b,a.x,a.y)||k(b,a.x2,a.y)||k(b,a.x,a.y2)||k(b,a.x2,a.y2)||k(a,b.x,b.y)||k(a,b.x2,b.y)||k(a,b.x,b.y2)||k(a,b.x2,b.y2)||(a.x<b.x2&&a.x>b.x||b.x<a.x2&&b.x>a.x)&&(a.y<b.y2&&a.y>b.y||b.y<a.y2&&b.y>a.y)}function m(a,b,c,d,e){var f=-3*b+9*c-9*d+3*e,g=a*f+6*b-12*c+6*d;return a*g-3*b+3*c}function n(a,b,c,d,e,f,g,h,i){null==i&&(i=1),i=i>1?1:0>i?0:i;for(var j=i/2,k=12,l=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],n=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],o=0,p=0;k>p;p++){var q=j*l[p]+j,r=m(q,a,c,e,g),s=m(q,b,d,f,h),t=r*r+s*s;o+=n[p]*N.sqrt(t)}return j*o}function o(a,b,c,d,e,f,g,h,i){if(!(0>i||n(a,b,c,d,e,f,g,h)<i)){var j,k=1,l=k/2,m=k-l,o=.01;for(j=n(a,b,c,d,e,f,g,h,m);S(j-i)>o;)l/=2,m+=(i>j?1:-1)*l,j=n(a,b,c,d,e,f,g,h,m);return m}}function p(a,b,c,d,e,f,g,h){if(!(Q(a,c)<P(e,g)||P(a,c)>Q(e,g)||Q(b,d)<P(f,h)||P(b,d)>Q(f,h))){var i=(a*d-b*c)*(e-g)-(a-c)*(e*h-f*g),j=(a*d-b*c)*(f-h)-(b-d)*(e*h-f*g),k=(a-c)*(f-h)-(b-d)*(e-g);if(k){var l=i/k,m=j/k,n=+l.toFixed(2),o=+m.toFixed(2);if(!(n<+P(a,c).toFixed(2)||n>+Q(a,c).toFixed(2)||n<+P(e,g).toFixed(2)||n>+Q(e,g).toFixed(2)||o<+P(b,d).toFixed(2)||o>+Q(b,d).toFixed(2)||o<+P(f,h).toFixed(2)||o>+Q(f,h).toFixed(2)))return{x:l,y:m}}}}function q(a,b,c){var d=j(a),e=j(b);if(!l(d,e))return c?0:[];for(var f=n.apply(0,a),g=n.apply(0,b),h=~~(f/8),k=~~(g/8),m=[],o=[],q={},r=c?0:[],s=0;h+1>s;s++){var t=i.apply(0,a.concat(s/h));m.push({x:t.x,y:t.y,t:s/h})}for(s=0;k+1>s;s++)t=i.apply(0,b.concat(s/k)),o.push({x:t.x,y:t.y,t:s/k});for(s=0;h>s;s++)for(var u=0;k>u;u++){var v=m[s],w=m[s+1],x=o[u],y=o[u+1],z=S(w.x-v.x)<.001?"y":"x",A=S(y.x-x.x)<.001?"y":"x",B=p(v.x,v.y,w.x,w.y,x.x,x.y,y.x,y.y);if(B){if(q[B.x.toFixed(4)]==B.y.toFixed(4))continue;q[B.x.toFixed(4)]=B.y.toFixed(4);var C=v.t+S((B[z]-v[z])/(w[z]-v[z]))*(w.t-v.t),D=x.t+S((B[A]-x[A])/(y[A]-x[A]))*(y.t-x.t);C>=0&&1>=C&&D>=0&&1>=D&&(c?r++:r.push({x:B.x,y:B.y,t1:C,t2:D}))}}return r}function r(a,b){return t(a,b)}function s(a,b){return t(a,b,1)}function t(a,b,c){a=E(a),b=E(b);for(var d,e,f,g,h,i,j,k,l,m,n=c?0:[],o=0,p=a.length;p>o;o++){var r=a[o];if("M"==r[0])d=h=r[1],e=i=r[2];else{"C"==r[0]?(l=[d,e].concat(r.slice(1)),d=l[6],e=l[7]):(l=[d,e,d,e,h,i,h,i],d=h,e=i);for(var s=0,t=b.length;t>s;s++){var u=b[s];if("M"==u[0])f=j=u[1],g=k=u[2];else{"C"==u[0]?(m=[f,g].concat(u.slice(1)),f=m[6],g=m[7]):(m=[f,g,f,g,j,k,j,k],f=j,g=k);var v=q(l,m,c);if(c)n+=v;else{for(var w=0,x=v.length;x>w;w++)v[w].segment1=o,v[w].segment2=s,v[w].bez1=l,v[w].bez2=m;n=n.concat(v)}}}}}return n}function u(a,b,c){var d=v(a);return k(d,b,c)&&t(a,[["M",b,c],["H",d.x2+10]],1)%2==1}function v(a){var b=c(a);if(b.bbox)return J(b.bbox);if(!a)return d();a=E(a);for(var e,f=0,g=0,h=[],i=[],j=0,k=a.length;k>j;j++)if(e=a[j],"M"==e[0])f=e[1],g=e[2],h.push(f),i.push(g);else{var l=D(f,g,e[1],e[2],e[3],e[4],e[5],e[6]);h=h.concat(l.min.x,l.max.x),i=i.concat(l.min.y,l.max.y),f=e[5],g=e[6]}var m=P.apply(0,h),n=P.apply(0,i),o=Q.apply(0,h),p=Q.apply(0,i),q=d(m,n,o-m,p-n);return b.bbox=J(q),q}function w(a,b,c,d,f){if(f)return[["M",+a+ +f,b],["l",c-2*f,0],["a",f,f,0,0,1,f,f],["l",0,d-2*f],["a",f,f,0,0,1,-f,f],["l",2*f-c,0],["a",f,f,0,0,1,-f,-f],["l",0,2*f-d],["a",f,f,0,0,1,f,-f],["z"]];var g=[["M",a,b],["l",c,0],["l",0,d],["l",-c,0],["z"]];return g.toString=e,g}function x(a,b,c,d,f){if(null==f&&null==d&&(d=c),a=+a,b=+b,c=+c,d=+d,null!=f)var g=Math.PI/180,h=a+c*Math.cos(-d*g),i=a+c*Math.cos(-f*g),j=b+c*Math.sin(-d*g),k=b+c*Math.sin(-f*g),l=[["M",h,j],["A",c,c,0,+(f-d>180),0,i,k]];else l=[["M",a,b],["m",0,-d],["a",c,d,0,1,1,0,2*d],["a",c,d,0,1,1,0,-2*d],["z"]];return l.toString=e,l}function y(b){var d=c(b),g=String.prototype.toLowerCase;if(d.rel)return f(d.rel);a.is(b,"array")&&a.is(b&&b[0],"array")||(b=a.parsePathString(b));var h=[],i=0,j=0,k=0,l=0,m=0;"M"==b[0][0]&&(i=b[0][1],j=b[0][2],k=i,l=j,m++,h.push(["M",i,j]));for(var n=m,o=b.length;o>n;n++){var p=h[n]=[],q=b[n];if(q[0]!=g.call(q[0]))switch(p[0]=g.call(q[0]),p[0]){case"a":p[1]=q[1],p[2]=q[2],p[3]=q[3],p[4]=q[4],p[5]=q[5],p[6]=+(q[6]-i).toFixed(3),p[7]=+(q[7]-j).toFixed(3);break;case"v":p[1]=+(q[1]-j).toFixed(3);break;case"m":k=q[1],l=q[2];default:for(var r=1,s=q.length;s>r;r++)p[r]=+(q[r]-(r%2?i:j)).toFixed(3)}else{p=h[n]=[],"m"==q[0]&&(k=q[1]+i,l=q[2]+j);for(var t=0,u=q.length;u>t;t++)h[n][t]=q[t]}var v=h[n].length;switch(h[n][0]){case"z":i=k,j=l;break;case"h":i+=+h[n][v-1];break;case"v":j+=+h[n][v-1];break;default:i+=+h[n][v-2],j+=+h[n][v-1]}}return h.toString=e,d.rel=f(h),h}function z(b){var d=c(b);if(d.abs)return f(d.abs);if(I(b,"array")&&I(b&&b[0],"array")||(b=a.parsePathString(b)),!b||!b.length)return[["M",0,0]];var g,h=[],i=0,j=0,k=0,l=0,m=0;"M"==b[0][0]&&(i=+b[0][1],j=+b[0][2],k=i,l=j,m++,h[0]=["M",i,j]);for(var n,o,p=3==b.length&&"M"==b[0][0]&&"R"==b[1][0].toUpperCase()&&"Z"==b[2][0].toUpperCase(),q=m,r=b.length;r>q;q++){if(h.push(n=[]),o=b[q],g=o[0],g!=g.toUpperCase())switch(n[0]=g.toUpperCase(),n[0]){case"A":n[1]=o[1],n[2]=o[2],n[3]=o[3],n[4]=o[4],n[5]=o[5],n[6]=+o[6]+i,n[7]=+o[7]+j;break;case"V":n[1]=+o[1]+j;break;case"H":n[1]=+o[1]+i;break;case"R":for(var s=[i,j].concat(o.slice(1)),t=2,u=s.length;u>t;t++)s[t]=+s[t]+i,s[++t]=+s[t]+j;h.pop(),h=h.concat(G(s,p));break;case"O":h.pop(),s=x(i,j,o[1],o[2]),s.push(s[0]),h=h.concat(s);break;case"U":h.pop(),h=h.concat(x(i,j,o[1],o[2],o[3])),n=["U"].concat(h[h.length-1].slice(-2));break;case"M":k=+o[1]+i,l=+o[2]+j;default:for(t=1,u=o.length;u>t;t++)n[t]=+o[t]+(t%2?i:j)}else if("R"==g)s=[i,j].concat(o.slice(1)),h.pop(),h=h.concat(G(s,p)),n=["R"].concat(o.slice(-2));else if("O"==g)h.pop(),s=x(i,j,o[1],o[2]),s.push(s[0]),h=h.concat(s);else if("U"==g)h.pop(),h=h.concat(x(i,j,o[1],o[2],o[3])),n=["U"].concat(h[h.length-1].slice(-2));else for(var v=0,w=o.length;w>v;v++)n[v]=o[v];if(g=g.toUpperCase(),"O"!=g)switch(n[0]){case"Z":i=+k,j=+l;break;case"H":i=n[1];break;case"V":j=n[1];break;case"M":k=n[n.length-2],l=n[n.length-1];default:i=n[n.length-2],j=n[n.length-1]}}return h.toString=e,d.abs=f(h),h}function A(a,b,c,d){return[a,b,c,d,c,d]}function B(a,b,c,d,e,f){var g=1/3,h=2/3;return[g*a+h*c,g*b+h*d,g*e+h*c,g*f+h*d,e,f]}function C(b,c,d,e,f,g,h,i,j,k){var l,m=120*O/180,n=O/180*(+f||0),o=[],p=a._.cacher(function(a,b,c){var d=a*N.cos(c)-b*N.sin(c),e=a*N.sin(c)+b*N.cos(c);return{x:d,y:e}});if(k)y=k[0],z=k[1],w=k[2],x=k[3];else{l=p(b,c,-n),b=l.x,c=l.y,l=p(i,j,-n),i=l.x,j=l.y;var q=(N.cos(O/180*f),N.sin(O/180*f),(b-i)/2),r=(c-j)/2,s=q*q/(d*d)+r*r/(e*e);s>1&&(s=N.sqrt(s),d=s*d,e=s*e);var t=d*d,u=e*e,v=(g==h?-1:1)*N.sqrt(S((t*u-t*r*r-u*q*q)/(t*r*r+u*q*q))),w=v*d*r/e+(b+i)/2,x=v*-e*q/d+(c+j)/2,y=N.asin(((c-x)/e).toFixed(9)),z=N.asin(((j-x)/e).toFixed(9));y=w>b?O-y:y,z=w>i?O-z:z,0>y&&(y=2*O+y),0>z&&(z=2*O+z),h&&y>z&&(y-=2*O),!h&&z>y&&(z-=2*O)}var A=z-y;if(S(A)>m){var B=z,D=i,E=j;z=y+m*(h&&z>y?1:-1),i=w+d*N.cos(z),j=x+e*N.sin(z),o=C(i,j,d,e,f,0,h,D,E,[z,B,w,x])}A=z-y;var F=N.cos(y),G=N.sin(y),H=N.cos(z),I=N.sin(z),J=N.tan(A/4),K=4/3*d*J,L=4/3*e*J,M=[b,c],P=[b+K*G,c-L*F],Q=[i+K*I,j-L*H],R=[i,j];if(P[0]=2*M[0]-P[0],P[1]=2*M[1]-P[1],k)return[P,Q,R].concat(o);o=[P,Q,R].concat(o).join().split(",");for(var T=[],U=0,V=o.length;V>U;U++)T[U]=U%2?p(o[U-1],o[U],n).y:p(o[U],o[U+1],n).x;return T}function D(a,b,c,d,e,f,g,h){for(var i,j,k,l,m,n,o,p,q=[],r=[[],[]],s=0;2>s;++s)if(0==s?(j=6*a-12*c+6*e,i=-3*a+9*c-9*e+3*g,k=3*c-3*a):(j=6*b-12*d+6*f,i=-3*b+9*d-9*f+3*h,k=3*d-3*b),S(i)<1e-12){if(S(j)<1e-12)continue;l=-k/j,l>0&&1>l&&q.push(l)}else o=j*j-4*k*i,p=N.sqrt(o),0>o||(m=(-j+p)/(2*i),m>0&&1>m&&q.push(m),n=(-j-p)/(2*i),n>0&&1>n&&q.push(n));for(var t,u=q.length,v=u;u--;)l=q[u],t=1-l,r[0][u]=t*t*t*a+3*t*t*l*c+3*t*l*l*e+l*l*l*g,r[1][u]=t*t*t*b+3*t*t*l*d+3*t*l*l*f+l*l*l*h;return r[0][v]=a,r[1][v]=b,r[0][v+1]=g,r[1][v+1]=h,r[0].length=r[1].length=v+2,{min:{x:P.apply(0,r[0]),y:P.apply(0,r[1])},max:{x:Q.apply(0,r[0]),y:Q.apply(0,r[1])}}}function E(a,b){var d=!b&&c(a);if(!b&&d.curve)return f(d.curve);for(var e=z(a),g=b&&z(b),h={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},i={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},j=(function(a,b,c){var d,e;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null),a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"].concat(C.apply(0,[b.x,b.y].concat(a.slice(1))));break;case"S":"C"==c||"S"==c?(d=2*b.x-b.bx,e=2*b.y-b.by):(d=b.x,e=b.y),a=["C",d,e].concat(a.slice(1));break;case"T":"Q"==c||"T"==c?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),a=["C"].concat(B(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"].concat(B(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"].concat(A(b.x,b.y,a[1],a[2]));break;case"H":a=["C"].concat(A(b.x,b.y,a[1],b.y));break;case"V":a=["C"].concat(A(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"].concat(A(b.x,b.y,b.X,b.Y))}return a}),k=function(a,b){if(a[b].length>7){a[b].shift();for(var c=a[b];c.length;)m[b]="A",g&&(n[b]="A"),a.splice(b++,0,["C"].concat(c.splice(0,6)));a.splice(b,1),r=Q(e.length,g&&g.length||0)}},l=function(a,b,c,d,f){a&&b&&"M"==a[f][0]&&"M"!=b[f][0]&&(b.splice(f,0,["M",d.x,d.y]),c.bx=0,c.by=0,c.x=a[f][1],c.y=a[f][2],r=Q(e.length,g&&g.length||0))},m=[],n=[],o="",p="",q=0,r=Q(e.length,g&&g.length||0);r>q;q++){e[q]&&(o=e[q][0]),"C"!=o&&(m[q]=o,q&&(p=m[q-1])),e[q]=j(e[q],h,p),"A"!=m[q]&&"C"==o&&(m[q]="C"),k(e,q),g&&(g[q]&&(o=g[q][0]),"C"!=o&&(n[q]=o,q&&(p=n[q-1])),g[q]=j(g[q],i,p),"A"!=n[q]&&"C"==o&&(n[q]="C"),k(g,q)),l(e,g,h,i,q),l(g,e,i,h,q);var s=e[q],t=g&&g[q],u=s.length,v=g&&t.length;h.x=s[u-2],h.y=s[u-1],h.bx=M(s[u-4])||h.x,h.by=M(s[u-3])||h.y,i.bx=g&&(M(t[v-4])||i.x),i.by=g&&(M(t[v-3])||i.y),i.x=g&&t[v-2],i.y=g&&t[v-1]}return g||(d.curve=f(e)),g?[e,g]:e}function F(a,b){if(!b)return a;var c,d,e,f,g,h,i;for(a=E(a),e=0,g=a.length;g>e;e++)for(i=a[e],f=1,h=i.length;h>f;f+=2)c=b.x(i[f],i[f+1]),d=b.y(i[f],i[f+1]),i[f]=c,i[f+1]=d;return a}function G(a,b){for(var c=[],d=0,e=a.length;e-2*!b>d;d+=2){var f=[{x:+a[d-2],y:+a[d-1]},{x:+a[d],y:+a[d+1]},{x:+a[d+2],y:+a[d+3]},{x:+a[d+4],y:+a[d+5]}];b?d?e-4==d?f[3]={x:+a[0],y:+a[1]}:e-2==d&&(f[2]={x:+a[0],y:+a[1]},f[3]={x:+a[2],y:+a[3]}):f[0]={x:+a[e-2],y:+a[e-1]}:e-4==d?f[3]=f[2]:d||(f[0]={x:+a[d],y:+a[d+1]}),c.push(["C",(-f[0].x+6*f[1].x+f[2].x)/6,(-f[0].y+6*f[1].y+f[2].y)/6,(f[1].x+6*f[2].x-f[3].x)/6,(f[1].y+6*f[2].y-f[3].y)/6,f[2].x,f[2].y])}return c}var H=b.prototype,I=a.is,J=a._.clone,K="hasOwnProperty",L=/,?([a-z]),?/gi,M=parseFloat,N=Math,O=N.PI,P=N.min,Q=N.max,R=N.pow,S=N.abs,T=h(1),U=h(),V=h(0,1),W=a._unit2px,X={path:function(a){return a.attr("path")},circle:function(a){var b=W(a);return x(b.cx,b.cy,b.r)},ellipse:function(a){var b=W(a);return x(b.cx||0,b.cy||0,b.rx,b.ry)},rect:function(a){var b=W(a);return w(b.x||0,b.y||0,b.width,b.height,b.rx,b.ry)},image:function(a){var b=W(a);return w(b.x||0,b.y||0,b.width,b.height)},line:function(a){return"M"+[a.attr("x1")||0,a.attr("y1")||0,a.attr("x2"),a.attr("y2")]},polyline:function(a){return"M"+a.attr("points")},polygon:function(a){return"M"+a.attr("points")+"z"},deflt:function(a){var b=a.node.getBBox();return w(b.x,b.y,b.width,b.height)}};a.path=c,a.path.getTotalLength=T,a.path.getPointAtLength=U,a.path.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return V(a,b).end;var d=V(a,c,1);return b?V(d,b).end:d},H.getTotalLength=function(){return this.node.getTotalLength?this.node.getTotalLength():void 0},H.getPointAtLength=function(a){return U(this.attr("d"),a)},H.getSubpath=function(b,c){return a.path.getSubpath(this.attr("d"),b,c)},a._.box=d,a.path.findDotsAtSegment=i,a.path.bezierBBox=j,a.path.isPointInsideBBox=k,a.path.isBBoxIntersect=l,a.path.intersection=r,a.path.intersectionNumber=s,a.path.isPointInside=u,a.path.getBBox=v,a.path.get=X,a.path.toRelative=y,a.path.toAbsolute=z,a.path.toCubic=E,a.path.map=F,a.path.toString=e,a.path.clone=f}),d.plugin(function(a){var d=Math.max,e=Math.min,f=function(a){if(this.items=[],this.bindings={},this.length=0,this.type="set",a)for(var b=0,c=a.length;c>b;b++)a[b]&&(this[this.items.length]=this.items[this.items.length]=a[b],this.length++)},g=f.prototype;g.push=function(){for(var a,b,c=0,d=arguments.length;d>c;c++)a=arguments[c],a&&(b=this.items.length,this[b]=this.items[b]=a,this.length++);return this},g.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},g.forEach=function(a,b){for(var c=0,d=this.items.length;d>c;c++)if(a.call(b,this.items[c],c)===!1)return this;return this},g.animate=function(d,e,f,g){"function"!=typeof f||f.length||(g=f,f=c.linear),d instanceof a._.Animation&&(g=d.callback,f=d.easing,e=f.dur,d=d.attr);var h=arguments;if(a.is(d,"array")&&a.is(h[h.length-1],"array"))var i=!0;var j,k=function(){j?this.b=j:j=this.b},l=0,m=g&&function(){l++==this.length&&g.call(this)};return this.forEach(function(a,c){b.once("snap.animcreated."+a.id,k),i?h[c]&&a.animate.apply(a,h[c]):a.animate(d,e,f,m)})},g.remove=function(){for(;this.length;)this.pop().remove();return this},g.bind=function(a,b,c){var d={};if("function"==typeof b)this.bindings[a]=b;else{var e=c||a;this.bindings[a]=function(a){d[e]=a,b.attr(d)}}return this},g.attr=function(a){var b={};for(var c in a)this.bindings[c]?this.bindings[c](a[c]):b[c]=a[c];for(var d=0,e=this.items.length;e>d;d++)this.items[d].attr(b);return this},g.clear=function(){for(;this.length;)this.pop()},g.splice=function(a,b){a=0>a?d(this.length+a,0):a,b=d(0,e(this.length-a,b));var c,g=[],h=[],i=[];for(c=2;c<arguments.length;c++)i.push(arguments[c]);for(c=0;b>c;c++)h.push(this[a+c]);for(;c<this.length-a;c++)g.push(this[a+c]);var j=i.length;for(c=0;c<j+g.length;c++)this.items[a+c]=this[a+c]=j>c?i[c]:g[c-j];for(c=this.items.length=this.length-=b-j;this[c];)delete this[c++];return new f(h)},g.exclude=function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]==a)return this.splice(b,1),!0;return!1},g.insertAfter=function(a){for(var b=this.items.length;b--;)this.items[b].insertAfter(a);return this},g.getBBox=function(){for(var a=[],b=[],c=[],f=[],g=this.items.length;g--;)if(!this.items[g].removed){var h=this.items[g].getBBox();a.push(h.x),b.push(h.y),c.push(h.x+h.width),f.push(h.y+h.height)}return a=e.apply(0,a),b=e.apply(0,b),c=d.apply(0,c),f=d.apply(0,f),{x:a,y:b,x2:c,y2:f,width:c-a,height:f-b,cx:a+(c-a)/2,cy:b+(f-b)/2}},g.clone=function(a){a=new f;for(var b=0,c=this.items.length;c>b;b++)a.push(this.items[b].clone());return a},g.toString=function(){return"Snap‘s set"},g.type="set",a.set=function(){var a=new f;return arguments.length&&a.push.apply(a,Array.prototype.slice.call(arguments,0)),a}}),d.plugin(function(a,c){function d(a){var b=a[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==a.length?[b,0,a[2],a[3]]:[b,0];case"s":return 5==a.length?[b,1,1,a[3],a[4]]:3==a.length?[b,1,1]:[b,1]}}function e(b,c,e){c=m(c).replace(/\.{3}|\u2026/g,b),b=a.parseTransformString(b)||[],c=a.parseTransformString(c)||[];for(var f,g,h,k,l=Math.max(b.length,c.length),n=[],o=[],p=0;l>p;p++){if(h=b[p]||d(c[p]),k=c[p]||d(h),h[0]!=k[0]||"r"==h[0].toLowerCase()&&(h[2]!=k[2]||h[3]!=k[3])||"s"==h[0].toLowerCase()&&(h[3]!=k[3]||h[4]!=k[4])){b=a._.transform2matrix(b,e()),c=a._.transform2matrix(c,e()),n=[["m",b.a,b.b,b.c,b.d,b.e,b.f]],o=[["m",c.a,c.b,c.c,c.d,c.e,c.f]];break}for(n[p]=[],o[p]=[],f=0,g=Math.max(h.length,k.length);g>f;f++)f in h&&(n[p][f]=h[f]),f in k&&(o[p][f]=k[f])}return{from:j(n),to:j(o),f:i(n)}}function f(a){return a}function g(a){return function(b){return+b.toFixed(3)+a}}function h(b){return a.rgb(b[0],b[1],b[2])}function i(a){var b,c,d,e,f,g,h=0,i=[];for(b=0,c=a.length;c>b;b++){for(f="[",g=['"'+a[b][0]+'"'],d=1,e=a[b].length;e>d;d++)g[d]="val["+h++ +"]";
+f+=g+"]",i[b]=f}return Function("val","return Snap.path.toString.call(["+i+"])")}function j(a){for(var b=[],c=0,d=a.length;d>c;c++)for(var e=1,f=a[c].length;f>e;e++)b.push(a[c][e]);return b}var k={},l=/[a-z]+$/i,m=String;k.stroke=k.fill="colour",c.prototype.equal=function(a,c){return b("snap.util.equal",this,a,c).firstDefined()},b.on("snap.util.equal",function(b,c){var d,n,o=m(this.attr(b)||""),p=this;if(o==+o&&c==+c)return{from:+o,to:+c,f:f};if("colour"==k[b])return d=a.color(o),n=a.color(c),{from:[d.r,d.g,d.b,d.opacity],to:[n.r,n.g,n.b,n.opacity],f:h};if("transform"==b||"gradientTransform"==b||"patternTransform"==b)return c instanceof a.Matrix&&(c=c.toTransformString()),a._.rgTransform.test(c)||(c=a._.svgTransform2string(c)),e(o,c,function(){return p.getBBox(1)});if("d"==b||"path"==b)return d=a.path.toCubic(o,c),{from:j(d[0]),to:j(d[1]),f:i(d[0])};if("points"==b)return d=m(o).split(a._.separator),n=m(c).split(a._.separator),{from:d,to:n,f:function(a){return a}};aUnit=o.match(l);var q=m(c).match(l);return aUnit&&aUnit==q?{from:parseFloat(o),to:parseFloat(c),f:g(aUnit)}:{from:this.asPX(b),to:this.asPX(b,c),f:f}})}),d.plugin(function(a,c,d,e){for(var f=c.prototype,g="hasOwnProperty",h=("createTouch"in e.doc),i=["click","dblclick","mousedown","mousemove","mouseout","mouseover","mouseup","touchstart","touchmove","touchend","touchcancel"],j={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},k=(function(a,b){var c="y"==a?"scrollTop":"scrollLeft",d=b&&b.node?b.node.ownerDocument:e.doc;return d[c in d.documentElement?"documentElement":"body"][c]}),l=function(){this.returnValue=!1},m=function(){return this.originalEvent.preventDefault()},n=function(){this.cancelBubble=!0},o=function(){return this.originalEvent.stopPropagation()},p=function(){return e.doc.addEventListener?function(a,b,c,d){var e=h&&j[b]?j[b]:b,f=function(e){var f=k("y",d),i=k("x",d);if(h&&j[g](b))for(var l=0,n=e.targetTouches&&e.targetTouches.length;n>l;l++)if(e.targetTouches[l].target==a||a.contains(e.targetTouches[l].target)){var p=e;e=e.targetTouches[l],e.originalEvent=p,e.preventDefault=m,e.stopPropagation=o;break}var q=e.clientX+i,r=e.clientY+f;return c.call(d,e,q,r)};return b!==e&&a.addEventListener(b,f,!1),a.addEventListener(e,f,!1),function(){return b!==e&&a.removeEventListener(b,f,!1),a.removeEventListener(e,f,!1),!0}}:e.doc.attachEvent?function(a,b,c,d){var e=function(a){a=a||d.node.ownerDocument.window.event;var b=k("y",d),e=k("x",d),f=a.clientX+e,g=a.clientY+b;return a.preventDefault=a.preventDefault||l,a.stopPropagation=a.stopPropagation||n,c.call(d,a,f,g)};a.attachEvent("on"+b,e);var f=function(){return a.detachEvent("on"+b,e),!0};return f}:void 0}(),q=[],r=function(a){for(var c,d=a.clientX,e=a.clientY,f=k("y"),g=k("x"),i=q.length;i--;){if(c=q[i],h){for(var j,l=a.touches&&a.touches.length;l--;)if(j=a.touches[l],j.identifier==c.el._drag.id||c.el.node.contains(j.target)){d=j.clientX,e=j.clientY,(a.originalEvent?a.originalEvent:a).preventDefault();break}}else a.preventDefault();{var m=c.el.node;m.nextSibling,m.parentNode,m.style.display}d+=g,e+=f,b("snap.drag.move."+c.el.id,c.move_scope||c.el,d-c.el._drag.x,e-c.el._drag.y,d,e,a)}},s=function(c){a.unmousemove(r).unmouseup(s);for(var d,e=q.length;e--;)d=q[e],d.el._drag={},b("snap.drag.end."+d.el.id,d.end_scope||d.start_scope||d.move_scope||d.el,c);q=[]},t=i.length;t--;)!function(b){a[b]=f[b]=function(c,d){return a.is(c,"function")&&(this.events=this.events||[],this.events.push({name:b,f:c,unbind:p(this.node||document,b,c,d||this)})),this},a["un"+b]=f["un"+b]=function(a){for(var c=this.events||[],d=c.length;d--;)if(c[d].name==b&&(c[d].f==a||!a))return c[d].unbind(),c.splice(d,1),!c.length&&delete this.events,this;return this}}(i[t]);f.hover=function(a,b,c,d){return this.mouseover(a,c).mouseout(b,d||c)},f.unhover=function(a,b){return this.unmouseover(a).unmouseout(b)};var u=[];f.drag=function(c,d,e,f,g,h){function i(i,j,k){(i.originalEvent||i).preventDefault(),this._drag.x=j,this._drag.y=k,this._drag.id=i.identifier,!q.length&&a.mousemove(r).mouseup(s),q.push({el:this,move_scope:f,start_scope:g,end_scope:h}),d&&b.on("snap.drag.start."+this.id,d),c&&b.on("snap.drag.move."+this.id,c),e&&b.on("snap.drag.end."+this.id,e),b("snap.drag.start."+this.id,g||f||this,j,k,i)}if(!arguments.length){var j;return this.drag(function(a,b){this.attr({transform:j+(j?"T":"t")+[a,b]})},function(){j=this.transform().local})}return this._drag={},u.push({el:this,start:i}),this.mousedown(i),this},f.undrag=function(){for(var c=u.length;c--;)u[c].el==this&&(this.unmousedown(u[c].start),u.splice(c,1),b.unbind("snap.drag.*."+this.id));return!u.length&&a.unmousemove(r).unmouseup(s),this}}),d.plugin(function(a,c,d){var e=(c.prototype,d.prototype),f=/^\s*url\((.+)\)/,g=String,h=a._.$;a.filter={},e.filter=function(b){var d=this;"svg"!=d.type&&(d=d.paper);var e=a.parse(g(b)),f=a._.id(),i=(d.node.offsetWidth,d.node.offsetHeight,h("filter"));return h(i,{id:f,filterUnits:"userSpaceOnUse"}),i.appendChild(e.node),d.defs.appendChild(i),new c(i)},b.on("snap.util.getattr.filter",function(){b.stop();var c=h(this.node,"filter");if(c){var d=g(c).match(f);return d&&a.select(d[1])}}),b.on("snap.util.attr.filter",function(d){if(d instanceof c&&"filter"==d.type){b.stop();var e=d.node.id;e||(h(d.node,{id:d.id}),e=d.id),h(this.node,{filter:a.url(e)})}d&&"none"!=d||(b.stop(),this.node.removeAttribute("filter"))}),a.filter.blur=function(b,c){null==b&&(b=2);var d=null==c?b:[b,c];return a.format('<feGaussianBlur stdDeviation="{def}"/>',{def:d})},a.filter.blur.toString=function(){return this()},a.filter.shadow=function(b,c,d,e,f){return"string"==typeof d&&(e=d,f=e,d=4),"string"!=typeof e&&(f=e,e="#000"),e=e||"#000",null==d&&(d=4),null==f&&(f=1),null==b&&(b=0,c=2),null==c&&(c=b),e=a.color(e),a.format('<feGaussianBlur in="SourceAlpha" stdDeviation="{blur}"/><feOffset dx="{dx}" dy="{dy}" result="offsetblur"/><feFlood flood-color="{color}"/><feComposite in2="offsetblur" operator="in"/><feComponentTransfer><feFuncA type="linear" slope="{opacity}"/></feComponentTransfer><feMerge><feMergeNode/><feMergeNode in="SourceGraphic"/></feMerge>',{color:e,dx:b,dy:c,blur:d,opacity:f})},a.filter.shadow.toString=function(){return this()},a.filter.grayscale=function(b){return null==b&&(b=1),a.format('<feColorMatrix type="matrix" values="{a} {b} {c} 0 0 {d} {e} {f} 0 0 {g} {b} {h} 0 0 0 0 0 1 0"/>',{a:.2126+.7874*(1-b),b:.7152-.7152*(1-b),c:.0722-.0722*(1-b),d:.2126-.2126*(1-b),e:.7152+.2848*(1-b),f:.0722-.0722*(1-b),g:.2126-.2126*(1-b),h:.0722+.9278*(1-b)})},a.filter.grayscale.toString=function(){return this()},a.filter.sepia=function(b){return null==b&&(b=1),a.format('<feColorMatrix type="matrix" values="{a} {b} {c} 0 0 {d} {e} {f} 0 0 {g} {h} {i} 0 0 0 0 0 1 0"/>',{a:.393+.607*(1-b),b:.769-.769*(1-b),c:.189-.189*(1-b),d:.349-.349*(1-b),e:.686+.314*(1-b),f:.168-.168*(1-b),g:.272-.272*(1-b),h:.534-.534*(1-b),i:.131+.869*(1-b)})},a.filter.sepia.toString=function(){return this()},a.filter.saturate=function(b){return null==b&&(b=1),a.format('<feColorMatrix type="saturate" values="{amount}"/>',{amount:1-b})},a.filter.saturate.toString=function(){return this()},a.filter.hueRotate=function(b){return b=b||0,a.format('<feColorMatrix type="hueRotate" values="{angle}"/>',{angle:b})},a.filter.hueRotate.toString=function(){return this()},a.filter.invert=function(b){return null==b&&(b=1),a.format('<feComponentTransfer><feFuncR type="table" tableValues="{amount} {amount2}"/><feFuncG type="table" tableValues="{amount} {amount2}"/><feFuncB type="table" tableValues="{amount} {amount2}"/></feComponentTransfer>',{amount:b,amount2:1-b})},a.filter.invert.toString=function(){return this()},a.filter.brightness=function(b){return null==b&&(b=1),a.format('<feComponentTransfer><feFuncR type="linear" slope="{amount}"/><feFuncG type="linear" slope="{amount}"/><feFuncB type="linear" slope="{amount}"/></feComponentTransfer>',{amount:b})},a.filter.brightness.toString=function(){return this()},a.filter.contrast=function(b){return null==b&&(b=1),a.format('<feComponentTransfer><feFuncR type="linear" slope="{amount}" intercept="{amount2}"/><feFuncG type="linear" slope="{amount}" intercept="{amount2}"/><feFuncB type="linear" slope="{amount}" intercept="{amount2}"/></feComponentTransfer>',{amount:b,amount2:.5-b/2})},a.filter.contrast.toString=function(){return this()}}),d}); \ No newline at end of file
diff --git a/web-ui/src/login/_login_disclaimer_banner.html b/web-ui/src/login/_login_disclaimer_banner.html
new file mode 100644
index 00000000..dfc63030
--- /dev/null
+++ b/web-ui/src/login/_login_disclaimer_banner.html
@@ -0,0 +1,9 @@
+<div>
+ <ul class="accounts">
+ <h2>Some disclaimer</h2>
+ <li>
+ please supply the option --banner with an XML compatible file
+ <div>to override this default message</div>
+ </li>
+ </ul>
+</div>
diff --git a/web-ui/src/login/about/welcome.js b/web-ui/src/login/about/welcome.js
new file mode 100644
index 00000000..93aae8e1
--- /dev/null
+++ b/web-ui/src/login/about/welcome.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { translate } from 'react-i18next';
+
+import './welcome.scss';
+
+export const Welcome = ({ t }) => (
+ <div className='welcome'>
+ <img className='welcome-logo' src='/public/images/welcome.svg' alt={t('login.welcome-image-alt')} />
+ <div>
+ <h3>{t('login.welcome-message')}</h3>
+ </div>
+ </div>
+);
+
+Welcome.propTypes = {
+ t: React.PropTypes.func.isRequired
+};
+
+export default translate('', { wait: true })(Welcome);
diff --git a/web-ui/src/login/about/welcome.scss b/web-ui/src/login/about/welcome.scss
new file mode 100644
index 00000000..1492b154
--- /dev/null
+++ b/web-ui/src/login/about/welcome.scss
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@import "~scss/base/colors";
+
+.welcome {
+ display: none;
+}
+
+@media only screen and (min-width : 960px) {
+ .welcome {
+ font-size: 0.9em;
+ color: $medium_grey;
+ display: flex;
+ font-weight: 300;
+ flex-direction: column;
+ align-self: flex-end;
+ order: 2;
+ width: 34%;
+ margin-right: 8%;
+ margin-top: -20.5em;
+
+ h3 {
+ font-weight: normal;
+ font-size: 1.2em;
+ margin-top: 0;
+ }
+ }
+
+ .welcome-logo {
+ order: 1;
+ width: 90%;
+ height: 15em;
+ }
+}
diff --git a/web-ui/src/login/about/welcome.spec.js b/web-ui/src/login/about/welcome.spec.js
new file mode 100644
index 00000000..3e190c0c
--- /dev/null
+++ b/web-ui/src/login/about/welcome.spec.js
@@ -0,0 +1,17 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import { Welcome } from 'src/login/about/welcome';
+
+describe('Welcome', () => {
+ let welcome;
+ const mockTranslations = key => key;
+
+ beforeEach(() => {
+ welcome = shallow(<Welcome t={mockTranslations} />);
+ });
+
+ it('renders welcome component', () => {
+ expect(welcome.find('.welcome').length).toEqual(1);
+ });
+});
diff --git a/web-ui/src/login/error/auth_error.js b/web-ui/src/login/error/auth_error.js
new file mode 100644
index 00000000..5dbbc3e7
--- /dev/null
+++ b/web-ui/src/login/error/auth_error.js
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { translate } from 'react-i18next';
+
+import './auth_error.scss';
+
+export const AuthError = ({ t }) => (
+ <p className='auth-error'>{t('error.auth')}</p>
+);
+
+AuthError.propTypes = {
+ t: React.PropTypes.func.isRequired
+};
+
+export default translate('', { wait: true })(AuthError);
diff --git a/web-ui/src/login/error/auth_error.scss b/web-ui/src/login/error/auth_error.scss
new file mode 100644
index 00000000..f6256be4
--- /dev/null
+++ b/web-ui/src/login/error/auth_error.scss
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@import "~scss/base/colors";
+
+.auth-error {
+ color: $error;
+ margin: -1em 0 1em 0;
+}
+
+@media only screen and (min-width : 960px) {
+ .auth-error {
+ margin: -2em 0 1em 0;
+ }
+}
diff --git a/web-ui/src/login/error/auth_error.spec.js b/web-ui/src/login/error/auth_error.spec.js
new file mode 100644
index 00000000..55d8920f
--- /dev/null
+++ b/web-ui/src/login/error/auth_error.spec.js
@@ -0,0 +1,17 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import { AuthError } from 'src/login/error/auth_error';
+
+describe('AuthError', () => {
+ let authError;
+ const mockTranslations = key => key;
+
+ beforeEach(() => {
+ authError = shallow(<AuthError t={mockTranslations} />);
+ });
+
+ it('renders error message', () => {
+ expect(authError.find('.auth-error').length).toEqual(1);
+ });
+});
diff --git a/web-ui/src/login/error/generic_error.js b/web-ui/src/login/error/generic_error.js
new file mode 100644
index 00000000..b233d5bb
--- /dev/null
+++ b/web-ui/src/login/error/generic_error.js
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { translate } from 'react-i18next';
+
+import './generic_error.scss';
+
+export const GenericError = ({ t }) => (
+ <div className='generic-error'>
+ <img className='dead-mail' src='/public/images/dead-mail.svg' alt='' />
+ <div>
+ <h2>{t('error.login.title')}</h2>
+ <p>{t('error.login.message')}</p>
+ </div>
+ </div>
+);
+
+GenericError.propTypes = {
+ t: React.PropTypes.func.isRequired
+};
+
+export default translate('', { wait: true })(GenericError);
diff --git a/web-ui/src/login/error/generic_error.scss b/web-ui/src/login/error/generic_error.scss
new file mode 100644
index 00000000..5a077f32
--- /dev/null
+++ b/web-ui/src/login/error/generic_error.scss
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@import "~scss/base/colors";
+
+.generic-error {
+ font-size: 0.9em;
+ color: $medium_grey;
+ display: flex;
+ padding: 0 1.5em;
+ font-weight: 300;
+
+ h2 {
+ font-weight: normal;
+ font-size: 1.4em;
+ }
+}
+
+.dead-mail {
+ width: 20%;
+ margin-right: 1.5em;
+ margin-top: 1.7em;
+ align-self: flex-start;
+}
+
+@media only screen and (min-width : 960px) {
+ .generic-error {
+ flex-direction: column;
+ align-self: flex-end;
+ order: 2;
+ width: 34%;
+ margin-right: 8%;
+ margin-top: -19.5em;
+ padding: 0;
+
+ h2 {
+ margin: 0;
+ }
+ }
+
+ .dead-mail {
+ order: 1;
+ width: 30%;
+ }
+}
diff --git a/web-ui/src/login/error/generic_error.spec.js b/web-ui/src/login/error/generic_error.spec.js
new file mode 100644
index 00000000..1ef8349d
--- /dev/null
+++ b/web-ui/src/login/error/generic_error.spec.js
@@ -0,0 +1,17 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import { GenericError } from 'src/login/error/generic_error';
+
+describe('GenericError', () => {
+ let genericError;
+ const mockTranslations = key => key;
+
+ beforeEach(() => {
+ genericError = shallow(<GenericError t={mockTranslations} />);
+ });
+
+ it('renders error message', () => {
+ expect(genericError.find('.generic-error').length).toEqual(1);
+ });
+});
diff --git a/web-ui/src/login/login.css b/web-ui/src/login/login.css
new file mode 100644
index 00000000..9628932f
--- /dev/null
+++ b/web-ui/src/login/login.css
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+body {
+ font-family: "Open Sans", "Microsoft YaHei", "Hiragino Sans GB", "Hiragino Sans GB W3", "微软雅黑", "Helvetica Neue", Arial, sans-serif;
+ background-color: #EAEAEA;
+ height: 100vh;
+ color: #3E3A37;
+
+ background-image: url("/public/images/hive-bg.png");
+ background-repeat: repeat;
+}
+
+#root {
+ margin-top: 3%;
+ margin-bottom: 3%;
+}
+
+.disclaimer {
+ display: block;
+ width: 90%;
+ margin: auto;
+ max-width: 400px;
+ background-color: #2BA6CB;
+ color: #FFFFFF;
+ font-weight: 300;
+ font-size: 0.8rem;
+ margin-bottom: 20px;
+}
+
+.disclaimer-content {
+ padding: 1em;
+}
+
+.disclaimer li {
+ margin-top: 1em;
+}
+
+@media only screen and (min-width : 500px) {
+ .disclaimer {
+ width: 60%;
+ }
+}
+
+@media only screen and (min-width : 960px) {
+ body {
+ font-size: 1.2em;
+ }
+
+ .disclaimer {
+ width: 70%;
+ max-width: 700px;
+ padding: 0;
+ font-size: 1em;
+ }
+
+ .disclaimer-content {
+ font-size: 0.7em;
+ }
+}
diff --git a/web-ui/src/login/login.html b/web-ui/src/login/login.html
new file mode 100644
index 00000000..3cebf6f4
--- /dev/null
+++ b/web-ui/src/login/login.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1">
+ <head>
+ <link rel="icon" type="image/png" href="/public/images/favicon.png" />
+ <meta charset="utf-8"/>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
+ <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/>
+ <title>Pixelated - Login</title>
+ <link rel="stylesheet" type="text/css" href="/public/normalize.min.css" />
+ <link rel="stylesheet" type="text/css" href="/public/login.css" />
+ <link rel="stylesheet" type="text/css" href="/public/opensans.css" />
+ </head>
+ <body>
+ <div class="content">
+ <div id="root"/>
+ <div class="disclaimer">
+ <div class="disclaimer-content">
+ <div t:render="disclaimer"></div>
+ </div>
+ </div>
+ </div>
+ <script type="text/javascript" src="/public/login.js"></script>
+ </body>
+</html>
diff --git a/web-ui/src/login/login.js b/web-ui/src/login/login.js
new file mode 100644
index 00000000..39500b9d
--- /dev/null
+++ b/web-ui/src/login/login.js
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { render } from 'react-dom';
+import a11y from 'react-a11y';
+
+import { hasQueryParameter } from 'src/common/util';
+import App from 'src/common/app';
+import PageWrapper from './page';
+
+if (process.env.NODE_ENV === 'development') a11y(React);
+
+render(
+ <App
+ child={
+ <PageWrapper
+ authError={hasQueryParameter('auth-error')}
+ error={hasQueryParameter('error')}
+ />
+ }
+ />,
+ document.getElementById('root')
+);
diff --git a/web-ui/src/login/normalize.min.css b/web-ui/src/login/normalize.min.css
new file mode 100644
index 00000000..d3c7f4d5
--- /dev/null
+++ b/web-ui/src/login/normalize.min.css
@@ -0,0 +1 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} \ No newline at end of file
diff --git a/web-ui/src/login/opensans.css b/web-ui/src/login/opensans.css
new file mode 100644
index 00000000..8795bdf7
--- /dev/null
+++ b/web-ui/src/login/opensans.css
@@ -0,0 +1,69 @@
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 300;
+ src: local("Open Sans Light"), local("OpenSans-Light"), url("/assets/fonts/OpenSans-Light.woff") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: local("Open Sans"), local("OpenSans"), url("/assets/fonts/OpenSans.woff") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 600;
+ src: local("Open Sans Semibold"), local("OpenSans-Semibold"), url("/assets/fonts/OpenSans-Semibold.woff") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 700;
+ src: local("Open Sans Bold"), local("OpenSans-Bold"), url("/assets/fonts/OpenSans-Bold.woff") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 800;
+ src: local("Open Sans Extrabold"), local("OpenSans-Extrabold"), url("/assets/fonts/OpenSans-Extrabold.woff") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 300;
+ src: local("Open Sans Light Italic"), local("OpenSansLight-Italic"), url("/assets/fonts/OpenSansLight-Italic.woff") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 400;
+ src: local("Open Sans Italic"), local("OpenSans-Italic"), url("/assets/fonts/OpenSans-Italic.woff") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 600;
+ src: local("Open Sans Semibold Italic"), local("OpenSans-SemiboldItalic"), url("/assets/fonts/OpenSans-SemiboldItalic.woff ") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 700;
+ src: local("Open Sans Bold Italic"), local("OpenSans-BoldItalic"), url("/assets/fonts/OpenSans-BoldItalic.woff") format("woff");
+}
+
+@font-face {
+ font-family: 'Open Sans';
+ font-style: italic;
+ font-weight: 800;
+ src: local("Open Sans Extrabold Italic"), local("OpenSans-ExtraboldItalic"), url("/assets/fonts/OpenSans-ExtraboldItalic.woff") format("woff");
+}
diff --git a/web-ui/src/login/page.js b/web-ui/src/login/page.js
new file mode 100644
index 00000000..21acee3f
--- /dev/null
+++ b/web-ui/src/login/page.js
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import React from 'react';
+import { translate } from 'react-i18next';
+import InputField from 'src/common/input_field/input_field';
+import SubmitButton from 'src/common/submit_button/submit_button';
+import AuthError from 'src/login/error/auth_error';
+import GenericError from 'src/login/error/generic_error';
+import Welcome from 'src/login/about/welcome';
+
+import './page.scss';
+
+const errorMessage = (t, authError) => {
+ if (authError) return <AuthError />;
+ return <div />;
+};
+
+const rightPanel = (t, error) => {
+ if (error) return <GenericError />;
+ return <Welcome />;
+};
+
+export const Page = ({ t, authError, error }) => (
+ <div className='login'>
+ <img
+ className={error ? 'logo small-logo' : 'logo'}
+ src='/public/images/logo-orange.svg'
+ alt='Pixelated logo'
+ />
+ {rightPanel(t, error)}
+ <form className='standard' id='login_form' action='/login' method='post' noValidate>
+ {errorMessage(t, authError)}
+ <InputField name='username' label={t('login.email')} autoFocus />
+ <InputField type='password' name='password' label={t('login.password')} />
+ <SubmitButton buttonText={t('login.submit')} />
+ </form>
+ </div>
+);
+
+Page.propTypes = {
+ t: React.PropTypes.func.isRequired,
+ authError: React.PropTypes.bool,
+ error: React.PropTypes.bool
+};
+
+export default translate('', { wait: true })(Page);
diff --git a/web-ui/src/login/page.scss b/web-ui/src/login/page.scss
new file mode 100644
index 00000000..4bc1592c
--- /dev/null
+++ b/web-ui/src/login/page.scss
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2017 ThoughtWorks, Inc.
+ *
+ * Pixelated is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Pixelated 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+@import "~scss/base/colors";
+
+.login {
+ display: block;
+ width: 90%;
+ margin: auto;
+ max-width: 400px;
+ padding: 2em 0;
+ background-color: $white;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+#login_form {
+ width: 70%;
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+
+ .input-field-group {
+ width: 100%;
+ margin: 0;
+ }
+
+ .submit-button {
+ margin-top: 1.5em;
+ width: 100%;
+ }
+}
+
+.logo {
+ width: 70%;
+ margin-bottom: 2em;
+}
+
+.small-logo {
+ width: 50%;
+ margin-bottom: 1em;
+}
+
+@media only screen and (min-width : 500px) {
+ .login {
+ width: 60%;
+ }
+}
+
+@media only screen and (min-width : 960px) {
+ .content {
+ font-size: 0.9em;
+ }
+
+ .login {
+ display: flex;
+ align-items: flex-start;
+ width: 70%;
+ max-width: 700px;
+ padding: 2.5em 0;
+ height: 22em;
+
+ &:after {
+ content: '';
+ height: 22em;
+ position: absolute;
+ margin-top: 3%;
+ top: 2.5em;
+ left: 50%;
+ border: 1px solid $lighter_gray;
+ transform: scaleX(0.5);
+ }
+ }
+
+ .logo {
+ height: 6em;
+ margin-bottom: 1em;
+ margin-top: 0.5em;
+ }
+
+ .logo, #login_form {
+ width: 34%;
+ margin-left: 8%;
+ }
+}
diff --git a/web-ui/src/login/page.spec.js b/web-ui/src/login/page.spec.js
new file mode 100644
index 00000000..05607ecb
--- /dev/null
+++ b/web-ui/src/login/page.spec.js
@@ -0,0 +1,53 @@
+import { shallow } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import { Page } from 'src/login/page';
+import AuthError from 'src/login/error/auth_error';
+import GenericError from 'src/login/error/generic_error';
+import Welcome from 'src/login/about/welcome';
+
+describe('Login', () => {
+ let page;
+ const mockTranslations = key => key;
+
+ it('renders login form', () => {
+ page = shallow(<Page t={mockTranslations} />);
+ expect(page.find('form').props().action).toEqual('/login');
+ });
+
+ it('renders welcome message when no error', () => {
+ page = shallow(<Page t={mockTranslations} />);
+ expect(page.find(Welcome).length).toEqual(1);
+ });
+
+ it('renders auth error message', () => {
+ page = shallow(<Page t={mockTranslations} authError />);
+ expect(page.find(AuthError).length).toEqual(1);
+ });
+
+ it('renders generic error message when error', () => {
+ page = shallow(<Page t={mockTranslations} error />);
+ expect(page.find(GenericError).length).toEqual(1);
+ });
+
+ it('does not render welcome message when error', () => {
+ page = shallow(<Page t={mockTranslations} error />);
+ expect(page.find(Welcome).length).toEqual(0);
+ });
+
+ it('does not render error message', () => {
+ page = shallow(<Page t={mockTranslations} />);
+ expect(page.find(AuthError).length).toEqual(0);
+ expect(page.find(GenericError).length).toEqual(0);
+ });
+
+ it('adds small logo class when error', () => {
+ page = shallow(<Page t={mockTranslations} error />);
+ expect(page.find('.logo').props().className).toEqual('logo small-logo');
+ });
+
+ it('does not add small logo class when no error', () => {
+ page = shallow(<Page t={mockTranslations} />);
+ expect(page.find('.logo').props().className).toEqual('logo');
+ });
+});
diff --git a/web-ui/test/integration/backup_account.spec.js b/web-ui/test/integration/backup_account.spec.js
new file mode 100644
index 00000000..b44c3b2c
--- /dev/null
+++ b/web-ui/test/integration/backup_account.spec.js
@@ -0,0 +1,59 @@
+import { mount } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import App from 'src/common/app';
+import BackupAccountPage from 'src/backup_account/page';
+import testI18n from './i18n';
+
+describe('Backup account email validation', () => {
+ context('Backup Account Page', () => {
+ let app, backupAccountPage;
+
+ beforeEach(() => {
+ app = mount(<App i18n={testI18n} child={<BackupAccountPage />} />);
+ backupAccountPage = app.find('Page');
+ });
+
+ context('with valid email', () => {
+ beforeEach(() => {
+ backupAccountPage.find('input').simulate('change', {target: {value: 'test@test.com'}});
+ });
+
+ it('shows no validation error', () => {
+ expect(backupAccountPage.find('InputField').props().errorText).toEqual('');
+ });
+
+ it('submit button is enabled', () => {
+ expect(backupAccountPage.find('SubmitButton').props().disabled).toEqual(false);
+ });
+ });
+
+ context('with invalid email', () => {
+ beforeEach(() => {
+ backupAccountPage.find('input').simulate('change', {target: {value: 'test'}});
+ });
+
+ it('shows validation error', () => {
+ expect(backupAccountPage.find('InputField').props().errorText).toEqual('Please enter a valid email address');
+ });
+
+ it('disables submit button', () => {
+ expect(backupAccountPage.find('SubmitButton').props().disabled).toEqual(true);
+ });
+ });
+
+ context('with empty email', () => {
+ beforeEach(() => {
+ backupAccountPage.find('input').simulate('change', {target: {value: ''}});
+ });
+
+ it('shows no validation error', () => {
+ expect(backupAccountPage.find('InputField').props().errorText).toEqual('');
+ });
+
+ it('disables submit button', () => {
+ expect(backupAccountPage.find('SubmitButton').props().disabled).toEqual(true);
+ });
+ });
+ });
+});
diff --git a/web-ui/test/integration/i18n.js b/web-ui/test/integration/i18n.js
new file mode 100644
index 00000000..099df2d7
--- /dev/null
+++ b/web-ui/test/integration/i18n.js
@@ -0,0 +1,14 @@
+import i18n from 'i18next';
+import translations from '../../app/locales/en_US/translation.json';
+
+i18n
+ .init({
+ lng: 'en',
+ resources: {
+ en: {
+ translation: translations
+ }
+ }
+ });
+
+export default i18n;
diff --git a/web-ui/test/integration/setup.js b/web-ui/test/integration/setup.js
new file mode 100644
index 00000000..49cd381e
--- /dev/null
+++ b/web-ui/test/integration/setup.js
@@ -0,0 +1,15 @@
+// Enzyme setup file
+// https://github.com/airbnb/enzyme/blob/master/docs/guides/jsdom.md
+var jsdom = require('jsdom').jsdom;
+
+global.document = jsdom('');
+global.window = document.defaultView;
+Object.keys(document.defaultView).forEach((property) => {
+ if (typeof global[property] === 'undefined') {
+ global[property] = document.defaultView[property];
+ }
+});
+
+global.navigator = {
+ userAgent: 'node.js'
+};
diff --git a/web-ui/test/integration/translations.spec.js b/web-ui/test/integration/translations.spec.js
new file mode 100644
index 00000000..fe17838b
--- /dev/null
+++ b/web-ui/test/integration/translations.spec.js
@@ -0,0 +1,23 @@
+import { mount } from 'enzyme';
+import expect from 'expect';
+import React from 'react';
+import App from 'src/common/app';
+import BackupAccountPage from 'src/backup_account/page';
+import LoginPage from 'src/login/page';
+import testI18n from './i18n';
+
+describe('Translations', () => {
+ context('Backup Account Page', () => {
+ it('translates all key', () => {
+ const app = mount(<App i18n={testI18n} child={<BackupAccountPage />} />);
+ expect(app.text()).toNotContain('untranslated', 'Unstranslated message found in the text: ' + app.text());
+ });
+ });
+
+ context('Login Page', () => {
+ it('translates all key', () => {
+ const app = mount(<App i18n={testI18n} child={<LoginPage />} />);
+ expect(app.text()).toNotContain('untranslated', 'Unstranslated message found in the text: ' + app.text());
+ });
+ });
+});
diff --git a/web-ui/test/jasmine.json b/web-ui/test/jasmine.json
deleted file mode 100644
index 969304b6..00000000
--- a/web-ui/test/jasmine.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "spec_dir": "test/spec/account_recovery/",
- "spec_files": [
- "**/*[sS]pec.js"
- ],
- "helpers": [
- "helpers/**/*.js"
- ]
-}
diff --git a/web-ui/test/spec/account_recovery/page.spec.js b/web-ui/test/spec/account_recovery/page.spec.js
deleted file mode 100644
index f550a51e..00000000
--- a/web-ui/test/spec/account_recovery/page.spec.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import {shallow} from 'enzyme'
-import expect from 'expect'
-import React from 'react'
-import Page from '../../../app/js/account_recovery/page'
-
-describe('Page', () => {
- 'use strict';
- it('renders backup email page title', () => {
- const page = shallow(<Page />);
- expect(page.find('h1').text()).toEqual('E se você esquecer sua senha?');
- });
-});
diff --git a/web-ui/test/test-main.js b/web-ui/test/test-main.js
index b7dc430f..4396993f 100644
--- a/web-ui/test/test-main.js
+++ b/web-ui/test/test-main.js
@@ -1,7 +1,7 @@
var tests = Object.keys(window.__karma__.files).filter(function (file) {
'use strict';
- return !(/account_recovery/.test(file)) && (/\.spec\.js$/.test(file));
+ return (/\.spec\.js$/.test(file));
});
beforeEach(function() {
diff --git a/web-ui/webpack.config.js b/web-ui/webpack.config.js
index 5886154a..6a44e4a1 100644
--- a/web-ui/webpack.config.js
+++ b/web-ui/webpack.config.js
@@ -1,21 +1,13 @@
var path = require('path');
var webpack = require('webpack');
-var copyWebpack = require('./config/copy-webpack');
+var publicAssetsWebpack = require('./config/public-assets-webpack');
+var protectedAssetsWebpack = require('./config/protected-assets-webpack');
var loaders = require('./config/loaders-webpack');
var aliases = require('./config/alias-webpack');
-module.exports = {
- entry: {
- app: './app/js/index.js',
- account_recovery: './app/js/account_recovery.js',
- sandbox: './app/js/sandbox.js'
- },
+var commonConfiguration = {
node: { fs: 'empty' },
- output: {
- path: path.join(__dirname, 'dist'),
- filename: '[name].js',
- publicPath: '/assets/'
- },
+ devtool: 'source-map',
resolve: {
alias: aliases,
extensions: ['', '.js']
@@ -23,9 +15,45 @@ module.exports = {
module: {
loaders: loaders
},
- plugins: [copyWebpack, new webpack.DefinePlugin({
- 'process.env': {
- 'NODE_ENV': '"development"'
- }
+ postcss: {}
+};
+
+var publicAssets = Object.assign({}, commonConfiguration, {
+ entry: {
+ 'login': './src/login/login.js',
+ },
+ output: {
+ path: path.join(__dirname, 'dist/public'),
+ filename: '[name].js',
+ publicPath: '/assets/'
+ },
+ plugins: [
+ publicAssetsWebpack,
+ new webpack.DefinePlugin({
+ 'process.env': {
+ NODE_ENV: JSON.stringify('development')
+ }
})]
-}
+});
+
+var protectedAssets = Object.assign({}, commonConfiguration, {
+ entry: {
+ 'app': './app/js/index.js',
+ 'backup_account': './src/backup_account/backup_account.js',
+ 'sandbox': './app/js/sandbox.js'
+ },
+ output: {
+ path: path.join(__dirname, 'dist/protected'),
+ filename: '[name].js',
+ publicPath: '/assets/'
+ },
+ plugins: [
+ protectedAssetsWebpack,
+ new webpack.DefinePlugin({
+ 'process.env': {
+ NODE_ENV: JSON.stringify('development')
+ }
+ })]
+});
+
+module.exports = [publicAssets, protectedAssets];
diff --git a/web-ui/webpack.production.config.js b/web-ui/webpack.production.config.js
index cf8ab8ff..92a4f12b 100644
--- a/web-ui/webpack.production.config.js
+++ b/web-ui/webpack.production.config.js
@@ -1,21 +1,13 @@
var path = require('path');
var webpack = require('webpack');
-var copyWebpack = require('./config/copy-webpack');
+var publicAssetsWebpack = require('./config/public-assets-webpack');
+var protectedAssetsWebpack = require('./config/protected-assets-webpack');
var loaders = require('./config/loaders-webpack');
var aliases = require('./config/alias-webpack');
-module.exports = {
- entry: {
- app: './app/js/index.js',
- account_recovery: './app/js/account_recovery.js',
- sandbox: './app/js/sandbox.js'
- },
+var commonConfiguration = {
node: { fs: 'empty' },
- output: {
- path: path.join(__dirname, 'dist'),
- filename: '[name].js',
- publicPath: '/assets/'
- },
+ devtool: 'source-map',
resolve: {
alias: aliases,
extensions: ['', '.js']
@@ -23,9 +15,43 @@ module.exports = {
module: {
loaders: loaders
},
- plugins: [
- new webpack.optimize.UglifyJsPlugin(),
- new webpack.optimize.DedupePlugin(),
- copyWebpack
- ]
-}
+ postcss: {}
+};
+
+var commonPlugins = [
+ new webpack.optimize.UglifyJsPlugin(),
+ new webpack.optimize.DedupePlugin(),
+ new webpack.DefinePlugin({
+ 'process.env': {
+ NODE_ENV: JSON.stringify('production')
+ }
+ })
+];
+
+var publicAssets = Object.assign({}, commonConfiguration, {
+ entry: {
+ 'login': './src/login/login.js',
+ },
+ output: {
+ path: path.join(__dirname, 'dist/public'),
+ filename: '[name].js',
+ publicPath: '/assets/'
+ },
+ plugins: commonPlugins.concat([ publicAssetsWebpack ])
+});
+
+var protectedAssets = Object.assign({}, commonConfiguration, {
+ entry: {
+ 'app': './app/js/index.js',
+ 'backup_account': './src/backup_account/backup_account.js',
+ 'sandbox': './app/js/sandbox.js'
+ },
+ output: {
+ path: path.join(__dirname, 'dist/protected'),
+ filename: '[name].js',
+ publicPath: '/assets/'
+ },
+ plugins: commonPlugins.concat([ protectedAssetsWebpack ])
+});
+
+module.exports = [publicAssets, protectedAssets];
diff --git a/web-ui/webpack.test.config.js b/web-ui/webpack.test.config.js
index d3b245fc..3dc1b311 100644
--- a/web-ui/webpack.test.config.js
+++ b/web-ui/webpack.test.config.js
@@ -1,6 +1,5 @@
var path = require('path');
var webpack = require('webpack');
-var copyWebpack = require('./config/copy-webpack');
var aliases = require('./config/alias-webpack');
module.exports = {
@@ -19,13 +18,21 @@ module.exports = {
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel',
- query: { presets: ['es2015', 'react']}
+ query: { presets: ['es2015', 'react', 'stage-0']}
},
{
test: /\.scss|css$/,
loader: "css-loader!sass-loader"
},
{
+ test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
+ loader: "url-loader?limit=10000&mimetype=application/font-woff"
+ },
+ {
+ test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
+ loader: "file-loader"
+ },
+ {
test: /\.json$/,
loader: "json-loader"
}