From 4474503e9751b05d36dc7a601c48216482a33df5 Mon Sep 17 00:00:00 2001
From: lone-cloud
Date: Sun, 14 May 2017 00:39:18 -0700
Subject: [PATCH] huegasm chrome promo, bug fixes
---
.../components/bridge-finder/component.js | 13 +-
.../components/bridge-finder/template.hbs | 63 +--
.../pods/components/lights-tab/component.js | 4 +-
mobile/bower.json | 2 +-
mobile/ember-cordova/cordova/config.xml | 2 +-
mobile/package.json | 6 +-
mobile/yarn.lock | 386 +++++++++++-------
.../components/bridge-finder/component.js | 13 +-
.../components/bridge-finder/template.hbs | 62 +--
.../pods/components/hue-controls/component.js | 87 ++--
.../pods/components/hue-controls/template.hbs | 30 ++
.../pods/components/lights-tab/component.js | 4 +-
.../add-soundcloud-sound-modal/component.js | 19 +-
.../pods/components/music-tab/component.js | 1 -
web/app/styles/hue-controls.scss | 11 +
web/package.json | 6 +-
web/public/assets/images/promo.png | Bin 0 -> 35686 bytes
web/yarn.lock | 230 +++++++----
18 files changed, 580 insertions(+), 359 deletions(-)
create mode 100644 web/public/assets/images/promo.png
diff --git a/mobile/app/pods/components/bridge-finder/component.js b/mobile/app/pods/components/bridge-finder/component.js
index 17646a1..9c6e7ac 100644
--- a/mobile/app/pods/components/bridge-finder/component.js
+++ b/mobile/app/pods/components/bridge-finder/component.js
@@ -7,7 +7,8 @@ const {
on,
isNone,
run: { later },
- $
+ $,
+ String: { htmlSafe }
} = Ember;
export default Component.extend({
@@ -24,7 +25,6 @@ export default Component.extend({
bridgeUsernamePingIntervalTime: 1500,
bridgeUserNamePingIntervalProgress: 0,
bridgePingIntervalHandle: null,
- bridgeAuthenticateReachedStatus: null,
manualBridgeIp: null,
manualBridgeIpNotFound: false,
multipleBridgeIps: [],
@@ -101,14 +101,19 @@ export default Component.extend({
type: 'POST'
}).done((result, status) => {
if (!this.isDestroyed) {
- this.set('bridgeAuthenticateReachedStatus', status);
-
if (status === 'success' && !result[0].error) {
this.clearBridgePingIntervalHandle();
this.get('storage').set('huegasm.bridgeUsername', result[0].success.username);
this.set('bridgeUsername', result[0].success.username);
}
}
+ }).fail(() => {
+ this.clearBridgePingIntervalHandle();
+ this.setProperties({
+ bridgeConnectError: true,
+ bridgeConnectMessage: htmlSafe('Your network and/or system security settings are preventing Huegasm from connecting to your Hue bridge.' +
+ 'Feel free to contact us at huegasm.app@gmail.com if this is unexpected and you need help debugging the problem. ')
+ })
});
this.incrementProperty('bridgeUserNamePingIntervalProgress', this.get('bridgeUsernamePingIntervalTime') / bridgeUsernamePingMaxTime * 100);
diff --git a/mobile/app/pods/components/bridge-finder/template.hbs b/mobile/app/pods/components/bridge-finder/template.hbs
index dfd68d9..22f4760 100644
--- a/mobile/app/pods/components/bridge-finder/template.hbs
+++ b/mobile/app/pods/components/bridge-finder/template.hbs
@@ -1,39 +1,46 @@
{{#unless bridgeUsername}}
{{#if bridgeIp}}
-
-
-
-
-
-
-
-
+ {{#unless bridgeConnectError}}
+
+
+
+
+
+
+
+
+
+ {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}}
+ {{/unless}}
- {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}}
{{#if isAuthenticating}}
Your bridge IP is {{bridgeIp}}
Press the button on your bridge to authenticate Huegasm.
{{else}}
- You failed to press the button in time. RETRY
+ {{#if bridgeConnectError}}
+ {{bridgeConnectMessage}}
+ {{else}}
+
You failed to press the button in time. RETRY
+ {{/if}}
{{/if}}
{{else}}
diff --git a/mobile/app/pods/components/lights-tab/component.js b/mobile/app/pods/components/lights-tab/component.js
index 22c9db8..d9beaec 100644
--- a/mobile/app/pods/components/lights-tab/component.js
+++ b/mobile/app/pods/components/lights-tab/component.js
@@ -29,7 +29,7 @@ export default Component.extend({
}),
// determines the average brightness of the hue system for the brightness slider
- lightsBrightness: computed('lightsData', function () {
+ lightsBrightness: computed('lightsData', 'activeLights.[]', function () {
let lightsData = this.get('lightsData'),
activeLights = this.get('activeLights'),
lightsBrightness = 0;
@@ -108,7 +108,7 @@ export default Component.extend({
$('.color').css('background', 'rgb(' + 255 + ',' + 255 + ',' + 255 + ')');
}
})),
-
+
// determines whether the lights are on/off for the lights switch
lightsOnChange: on('init', observer('lightsData.@each.state.on', 'activeLights.[]', function () {
if (!this.get('strobeOn')) {
diff --git a/mobile/bower.json b/mobile/bower.json
index 3b5e4ee..62e171c 100644
--- a/mobile/bower.json
+++ b/mobile/bower.json
@@ -8,6 +8,6 @@
"locallyjs": "^0.3.2",
"matchMedia": "^0.3.0",
"velocity": "^1.3.1",
- "perfect-scrollbar": "^0.6.15"
+ "perfect-scrollbar": "^0.7.0"
}
}
diff --git a/mobile/ember-cordova/cordova/config.xml b/mobile/ember-cordova/cordova/config.xml
index 1d52f22..0b65184 100644
--- a/mobile/ember-cordova/cordova/config.xml
+++ b/mobile/ember-cordova/cordova/config.xml
@@ -1,5 +1,5 @@
-
+
Huegasm
diff --git a/mobile/package.json b/mobile/package.json
index 0a2441f..6656977 100644
--- a/mobile/package.json
+++ b/mobile/package.json
@@ -22,8 +22,8 @@
"ember-cli": "^2.11.0",
"ember-cli-app-version": "^3.0.0",
"ember-cli-babel": "^6.0.0",
- "ember-cli-dependency-checker": "^1.2.0",
- "ember-cli-htmlbars": "^1.0.1",
+ "ember-cli-dependency-checker": "^2.0.0",
+ "ember-cli-htmlbars": "^2.0.0",
"ember-cli-htmlbars-inline-precompile": "^0.4.0",
"ember-cli-inject-live-reload": "^1.3.1",
"ember-cli-nouislider": "^0.13.0",
@@ -36,7 +36,7 @@
"ember-export-application-global": "^2.0.0",
"ember-inline-svg": "^0.1.7",
"ember-load-initializers": "^1.0.0",
- "ember-modal-dialog": "^1.0.0",
+ "ember-modal-dialog": "^2.0.0",
"ember-notify": "^5.0.4",
"ember-paper": "^1.0.0-alpha.19",
"ember-resolver": "^4.0.0",
diff --git a/mobile/yarn.lock b/mobile/yarn.lock
index c785d5c..7580afc 100644
--- a/mobile/yarn.lock
+++ b/mobile/yarn.lock
@@ -345,6 +345,10 @@ ast-types@0.8.12:
version "0.8.12"
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc"
+ast-types@0.8.15:
+ version "0.8.15"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52"
+
ast-types@0.9.6:
version "0.9.6"
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
@@ -1010,8 +1014,8 @@ babylon@^5.8.38:
resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd"
babylon@^6.11.0, babylon@^6.15.0:
- version "6.17.0"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932"
+ version "6.17.1"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f"
backbone@^1.1.2:
version "1.3.3"
@@ -1158,7 +1162,7 @@ bplist-parser@0.1.1, bplist-parser@^0.1.0:
dependencies:
big-integer "^1.6.7"
-brace-expansion@^1.0.0:
+brace-expansion@^1.0.0, brace-expansion@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
dependencies:
@@ -1318,6 +1322,18 @@ broccoli-config-replace@^1.1.2:
debug "^2.2.0"
fs-extra "^0.24.0"
+broccoli-debug@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/broccoli-debug/-/broccoli-debug-0.6.1.tgz#aec612ba8e5419952f44dc78be52bfabcbc087f6"
+ dependencies:
+ broccoli-plugin "^1.2.1"
+ fs-tree-diff "^0.5.2"
+ heimdalljs "^0.2.1"
+ heimdalljs-logger "^0.1.7"
+ minimatch "^3.0.3"
+ sanitize-filename "^1.6.1"
+ tree-sync "^1.2.2"
+
broccoli-filter@^0.1.6:
version "0.1.14"
resolved "https://registry.yarnpkg.com/broccoli-filter/-/broccoli-filter-0.1.14.tgz#23cae3891ff9ebb7b4d7db00c6dcf03535daf7ad"
@@ -1486,9 +1502,10 @@ broccoli-sri-hash@^2.1.0:
symlink-or-copy "^1.0.1"
broccoli-stew@^1.2.0, broccoli-stew@^1.3.3:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-1.4.2.tgz#9ec4062fd7162c6026561a2fbf64558363aff8d6"
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-1.5.0.tgz#d7af8c18511dce510e49d308a62e5977f461883c"
dependencies:
+ broccoli-debug "^0.6.1"
broccoli-funnel "^1.0.1"
broccoli-merge-trees "^1.0.0"
broccoli-persistent-filter "^1.1.6"
@@ -1500,7 +1517,6 @@ broccoli-stew@^1.2.0, broccoli-stew@^1.3.3:
minimatch "^3.0.2"
resolve "^1.1.6"
rsvp "^3.0.16"
- sanitize-filename "^1.5.3"
symlink-or-copy "^1.1.8"
walk-sync "^0.3.0"
@@ -1754,8 +1770,8 @@ can-symlink@^1.0.0:
tmp "0.0.28"
caniuse-db@^1.0.30000153, caniuse-db@^1.0.30000214, caniuse-db@^1.0.30000639:
- version "1.0.30000664"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000664.tgz#e16316e5fdabb9c7209b2bf0744ffc8a14201f22"
+ version "1.0.30000669"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000669.tgz#dbe8f25700ecda631dfb05cb71027762bd4b03e5"
capture-exit@^1.1.0:
version "1.2.0"
@@ -1835,7 +1851,7 @@ chownr@^1.0.1, chownr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
-cipher-base@^1.0.0, cipher-base@^1.0.1:
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07"
dependencies:
@@ -1860,8 +1876,8 @@ clean-css-promise@^0.1.0:
pinkie-promise "^2.0.0"
clean-css@^3.4.5:
- version "3.4.25"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.25.tgz#9e9a52d5c1e6bc5123e1b2783fa65fe958946ede"
+ version "3.4.26"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.26.tgz#55323b344ff3bcee684a2eac81c93df8fa73deeb"
dependencies:
commander "2.8.x"
source-map "0.4.x"
@@ -2089,14 +2105,14 @@ configstore@2.1.0:
xdg-basedir "^2.0.0"
configstore@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196"
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1"
dependencies:
dot-prop "^4.1.0"
graceful-fs "^4.1.2"
- mkdirp "^0.5.0"
+ make-dir "^1.0.0"
unique-string "^1.0.0"
- write-file-atomic "^1.1.2"
+ write-file-atomic "^2.0.0"
xdg-basedir "^3.0.0"
console-browserify@^1.1.0:
@@ -2167,8 +2183,8 @@ copy-dir@^0.3.0:
mkdir-p "~0.0.4"
cordova-app-hello-world@^3.11.0:
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/cordova-app-hello-world/-/cordova-app-hello-world-3.11.0.tgz#9214feb9dd713ca481a1cbabceeca60966c1c0cf"
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/cordova-app-hello-world/-/cordova-app-hello-world-3.12.0.tgz#270e06b67b2ae94bcfee6592ed39eb42303d186f"
cordova-common@2.0.0:
version "2.0.0"
@@ -2188,14 +2204,14 @@ cordova-common@2.0.0:
underscore "^1.8.3"
unorm "^1.3.3"
-cordova-common@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/cordova-common/-/cordova-common-2.0.2.tgz#57467976b8afd5e0bd0a13111b66a420441601cb"
+cordova-common@2.0.3, cordova-common@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/cordova-common/-/cordova-common-2.0.3.tgz#2214ee04ae1c2ec012a52c7c185313e341a6fb38"
dependencies:
ansi "^0.3.1"
bplist-parser "^0.1.0"
cordova-registry-mapper "^1.1.8"
- elementtree "^0.1.6"
+ elementtree "0.1.6"
glob "^5.0.13"
minimatch "^3.0.0"
osenv "^0.1.3"
@@ -2207,12 +2223,12 @@ cordova-common@^2.0.0:
unorm "^1.3.3"
cordova-create@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/cordova-create/-/cordova-create-1.0.2.tgz#cb9bba9817c62a645bacb6e00da8cc50936a0fa5"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/cordova-create/-/cordova-create-1.1.1.tgz#55282493ab396d9303f72febbaf2f978fa764cd2"
dependencies:
cordova-app-hello-world "^3.11.0"
- cordova-common "2.0.0"
- cordova-fetch "1.0.2"
+ cordova-common "2.0.3"
+ cordova-fetch "1.1.0"
q "1.0.1"
shelljs "0.3.0"
valid-identifier "0.0.1"
@@ -2227,6 +2243,16 @@ cordova-fetch@1.0.2:
q "^1.4.1"
shelljs "^0.7.0"
+cordova-fetch@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/cordova-fetch/-/cordova-fetch-1.1.0.tgz#1549f9ff4e6345f3c6fb6bd6523e8b19311a7b54"
+ dependencies:
+ cordova-common "2.0.3"
+ dependency-ls "^1.1.0"
+ is-url "^1.2.1"
+ q "^1.4.1"
+ shelljs "^0.7.0"
+
cordova-js@4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/cordova-js/-/cordova-js-4.2.1.tgz#01ca186e14e63b01cb6d24e469750e481a038355"
@@ -2305,21 +2331,25 @@ create-ecdh@^4.0.0:
bn.js "^4.1.0"
elliptic "^6.0.0"
-create-hash@^1.1.0, create-hash@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad"
+create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
dependencies:
cipher-base "^1.0.1"
inherits "^2.0.1"
- ripemd160 "^1.0.0"
- sha.js "^2.3.6"
+ ripemd160 "^2.0.0"
+ sha.js "^2.4.0"
-create-hmac@^1.1.0, create-hmac@^1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170"
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
dependencies:
+ cipher-base "^1.0.3"
create-hash "^1.1.0"
inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
cross-spawn@^3.0.0:
version "3.0.1"
@@ -2489,7 +2519,7 @@ depd@1.1.0, depd@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
-dependency-ls@^1.0.0:
+dependency-ls@^1.0.0, dependency-ls@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/dependency-ls/-/dependency-ls-1.1.0.tgz#94cfe674620f5e9f2924d0501f9c6e710fc90f55"
dependencies:
@@ -2602,21 +2632,15 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
electron-to-chromium@^1.2.7:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.8.tgz#b2c8a2c79bb89fbbfd3724d9555e15095b5f5fb6"
+ version "1.3.10"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.10.tgz#63d62b785471f0d8dda85199d64579de8a449f08"
-elementtree@0.1.6:
+elementtree@0.1.6, elementtree@^0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.6.tgz#2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c"
dependencies:
sax "0.3.5"
-elementtree@^0.1.6:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/elementtree/-/elementtree-0.1.7.tgz#9ac91be6e52fb6e6244c4e54a4ac3ed8ae8e29c0"
- dependencies:
- sax "1.1.4"
-
elliptic@^6.0.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
@@ -2645,7 +2669,7 @@ ember-cli-app-version@^3.0.0:
ember-cli-htmlbars "^1.0.0"
git-repo-version "0.4.1"
-ember-cli-babel@^5.0.0, ember-cli-babel@^5.1.10, ember-cli-babel@^5.1.5, ember-cli-babel@^5.1.6, ember-cli-babel@^5.1.7, ember-cli-babel@^5.2.4:
+ember-cli-babel@^5.1.10, ember-cli-babel@^5.1.5, ember-cli-babel@^5.1.6, ember-cli-babel@^5.1.7:
version "5.2.4"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-5.2.4.tgz#5ce4f46b08ed6f6d21e878619fb689719d6e8e13"
dependencies:
@@ -2655,7 +2679,7 @@ ember-cli-babel@^5.0.0, ember-cli-babel@^5.1.10, ember-cli-babel@^5.1.5, ember-c
ember-cli-version-checker "^1.0.2"
resolve "^1.1.2"
-ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7:
+ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.1.0.tgz#d9c83a7d0c67cc8a3ccb9bd082971c3593e54fad"
dependencies:
@@ -2680,13 +2704,13 @@ ember-cli-broccoli-sane-watcher@^2.0.4:
rsvp "^3.0.18"
sane "^1.1.1"
-ember-cli-dependency-checker@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-1.4.0.tgz#2b13f977e1eea843fc1a21a001be6ca5d4ef1942"
+ember-cli-dependency-checker@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-2.0.0.tgz#f2f2ff144acce7447cde7e0a8666dbfe5029a355"
dependencies:
- chalk "^0.5.1"
- is-git-url "^0.2.0"
- semver "^4.1.0"
+ chalk "^1.1.3"
+ is-git-url "^1.0.0"
+ semver "^5.3.0"
ember-cli-get-component-path-option@^1.0.0:
version "1.0.0"
@@ -2697,16 +2721,17 @@ ember-cli-get-dependency-depth@^1.0.0:
resolved "https://registry.yarnpkg.com/ember-cli-get-dependency-depth/-/ember-cli-get-dependency-depth-1.0.0.tgz#e0afecf82a2d52f00f28ab468295281aec368d11"
ember-cli-htmlbars-inline-precompile@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-0.4.0.tgz#4a6d2211b804419953104a9231e112dbd2057f3c"
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-0.4.3.tgz#4123f507fea6c59ba4c272ef7e713a6d55ba06c9"
dependencies:
babel-plugin-htmlbars-inline-precompile "^0.2.3"
- ember-cli-version-checker "^1.2.0"
+ ember-cli-version-checker "^2.0.0"
hash-for-dep "^1.0.2"
+ silent-error "^1.1.0"
-ember-cli-htmlbars@^1.0.0, ember-cli-htmlbars@^1.0.1, ember-cli-htmlbars@^1.0.10, ember-cli-htmlbars@^1.0.3, ember-cli-htmlbars@^1.0.8, ember-cli-htmlbars@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-1.3.0.tgz#e090f011239153bf45dab29625f94a46fce205af"
+ember-cli-htmlbars@^1.0.0, ember-cli-htmlbars@^1.0.10, ember-cli-htmlbars@^1.0.3, ember-cli-htmlbars@^1.1.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-1.3.2.tgz#906279c48be32986a3cc41e730ecc3513a34c4d1"
dependencies:
broccoli-persistent-filter "^1.0.3"
ember-cli-version-checker "^1.0.2"
@@ -2714,6 +2739,15 @@ ember-cli-htmlbars@^1.0.0, ember-cli-htmlbars@^1.0.1, ember-cli-htmlbars@^1.0.10
json-stable-stringify "^1.0.0"
strip-bom "^2.0.0"
+ember-cli-htmlbars@^2.0.0, ember-cli-htmlbars@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-2.0.1.tgz#e1e333c7ef4cc546c67734996541fd94ca4423ca"
+ dependencies:
+ broccoli-persistent-filter "^1.0.3"
+ hash-for-dep "^1.0.2"
+ json-stable-stringify "^1.0.0"
+ strip-bom "^3.0.0"
+
ember-cli-inject-live-reload@^1.3.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-1.6.1.tgz#82b8f5be454815a75e7f6d42c9ce0bc883a914a3"
@@ -2849,9 +2883,16 @@ ember-cli-version-checker@^1.0.2, ember-cli-version-checker@^1.1.6, ember-cli-ve
dependencies:
semver "^5.3.0"
+ember-cli-version-checker@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-2.0.0.tgz#e1f7d8e4cdcd752ac35f1611e4daa8836db4c4c7"
+ dependencies:
+ resolve "^1.3.3"
+ semver "^5.3.0"
+
ember-cli@^2.11.0:
- version "2.13.0"
- resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-2.13.0.tgz#c80d06ff8e16a47b0b2e5fbdb8761feebca86368"
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-2.13.1.tgz#ac02ca2d967bb660b577286e4c88c7cea13806b3"
dependencies:
amd-name-resolver "0.0.6"
babel-plugin-transform-es2015-modules-amd "^6.24.0"
@@ -2956,8 +2997,8 @@ ember-concurrency@^0.7.15:
ember-maybe-import-regenerator "^0.1.4"
ember-cordova@^0.4.0:
- version "0.4.9"
- resolved "https://registry.yarnpkg.com/ember-cordova/-/ember-cordova-0.4.9.tgz#46206d7062c2cd2385d725edc9011fa98d9430d8"
+ version "0.4.10"
+ resolved "https://registry.yarnpkg.com/ember-cordova/-/ember-cordova-0.4.10.tgz#7418741d2f077e182441917cf2d5456628c95201"
dependencies:
broccoli-funnel "^1.1.0"
broccoli-merge-trees "1.2.4"
@@ -2966,8 +3007,8 @@ ember-cordova@^0.4.0:
copy-dir "^0.3.0"
cordova-common "^2.0.0"
cordova-lib "^6.5.0"
- ember-cli-babel "^5.2.4"
- fs-extra "^2.0.0"
+ ember-cli-babel "^6.0.0"
+ fs-extra "^3.0.0"
leek "0.0.24"
lodash "^4.13.1"
portfinder "^1.0.5"
@@ -2997,6 +3038,12 @@ ember-getowner-polyfill@1.1.1, ember-getowner-polyfill@^1.1.0:
ember-cli-babel "^5.1.6"
ember-cli-version-checker "^1.2.0"
+ember-ignore-children-helper@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ember-ignore-children-helper/-/ember-ignore-children-helper-1.0.0.tgz#7645d769377779ff292235725b5b1f5c2e4c16ab"
+ dependencies:
+ ember-cli-babel "^5.1.6"
+
ember-inline-svg@^0.1.7:
version "0.1.11"
resolved "https://registry.yarnpkg.com/ember-inline-svg/-/ember-inline-svg-0.1.11.tgz#bb5af24cef1db3ab2e1a8aec543bee262a368c37"
@@ -3028,14 +3075,14 @@ ember-maybe-import-regenerator@^0.1.4:
ember-cli-babel "^6.0.0-beta.4"
regenerator-runtime "^0.9.5"
-ember-modal-dialog@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ember-modal-dialog/-/ember-modal-dialog-1.0.0.tgz#829f083cb4a4162dd2a5158e3980123b7cb69328"
+ember-modal-dialog@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ember-modal-dialog/-/ember-modal-dialog-2.1.0.tgz#e3beb05bcaaa52c37766b82e8fda0561cd95fdb8"
dependencies:
- ember-cli-babel "^5.1.6"
- ember-cli-htmlbars "^1.0.8"
- ember-cli-version-checker "^1.2.0"
- ember-wormhole "~0.3.6"
+ ember-cli-babel "^6.1.0"
+ ember-cli-htmlbars "^2.0.1"
+ ember-ignore-children-helper "^1.0.0"
+ ember-wormhole "^0.5.1"
ember-notify@^5.0.4:
version "5.2.1"
@@ -3177,12 +3224,6 @@ ember-wormhole@0.5.1, ember-wormhole@^0.5.1:
ember-cli-babel "^5.1.6"
ember-cli-htmlbars "^1.0.3"
-ember-wormhole@~0.3.6:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/ember-wormhole/-/ember-wormhole-0.3.6.tgz#bbe21bb5478ad254efe4fff4019ac6710f4ad85c"
- dependencies:
- ember-cli-babel "^5.0.0"
-
encodeurl@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
@@ -3254,8 +3295,8 @@ error@^7.0.0:
xtend "~4.0.0"
es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.15"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6"
+ version "0.10.16"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.16.tgz#1ef1b04f3d09db6a5d630226d62202f2e425e45a"
dependencies:
es6-iterator "2"
es6-symbol "~3.1"
@@ -3511,8 +3552,8 @@ filename-regex@^2.0.0:
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
filesize@^3.1.3:
- version "3.5.8"
- resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.8.tgz#5cd23aef46eeeaf812707f7098d245de513e4328"
+ version "3.5.9"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.9.tgz#9e3dd8a9b124f5b2f1fb2ee9cd13a86c707bb222"
fill-range@^2.1.0:
version "2.2.3"
@@ -3630,7 +3671,7 @@ fs-exists-sync@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
-fs-extra@2.0.0:
+fs-extra@2.0.0, fs-extra@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600"
dependencies:
@@ -3674,12 +3715,13 @@ fs-extra@^1.0.0, fs-extra@~1.0.0:
jsonfile "^2.1.0"
klaw "^1.0.0"
-fs-extra@^2.0.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35"
+fs-extra@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
dependencies:
graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
+ jsonfile "^3.0.0"
+ universalify "^0.1.0"
fs-readdir-recursive@^0.1.0:
version "0.1.2"
@@ -3760,7 +3802,7 @@ gauge@~1.2.0, gauge@~1.2.5:
lodash.padend "^4.1.0"
lodash.padstart "^4.1.0"
-gauge@~2.7.1:
+gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
dependencies:
@@ -3948,8 +3990,8 @@ hammerjs@^2.0.6, hammerjs@^2.0.8:
resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1"
handlebars@^4.0.4, handlebars@^4.0.6:
- version "4.0.7"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.7.tgz#e97325aeb8ea0b9e12b9c4dd73c4c312ad0ede59"
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420"
dependencies:
async "^1.4.0"
optimist "^0.6.1"
@@ -4019,6 +4061,12 @@ has@^1.0.0:
dependencies:
function-bind "^1.0.2"
+hash-base@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+ dependencies:
+ inherits "^2.0.1"
+
hash-for-dep@^1.0.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.1.2.tgz#e3347ed92960eb0bb53a2c6c2b70e36d75b7cd0c"
@@ -4164,8 +4212,8 @@ https-browserify@~0.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
iconv-lite@^0.4.5, iconv-lite@~0.4.13:
- version "0.4.16"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.16.tgz#65de3beeb39e2960d67f049f1634ffcbcde9014b"
+ version "0.4.17"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d"
ieee754@^1.1.4:
version "1.1.8"
@@ -4360,6 +4408,10 @@ is-git-url@^0.2.0:
version "0.2.3"
resolved "https://registry.yarnpkg.com/is-git-url/-/is-git-url-0.2.3.tgz#445200d6fbd6da028fb5e01440d9afc93f3ccb64"
+is-git-url@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-git-url/-/is-git-url-1.0.0.tgz#53f684cd143285b52c3244b4e6f28253527af66b"
+
is-glob@^2.0.0, is-glob@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
@@ -4367,8 +4419,8 @@ is-glob@^2.0.0, is-glob@^2.0.1:
is-extglob "^1.0.0"
is-integer@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.6.tgz#5273819fada880d123e1ac00a938e7172dd8d95e"
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c"
dependencies:
is-finite "^1.0.0"
@@ -4494,8 +4546,8 @@ js-tokens@^3.0.0:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.6.1:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766"
+ version "3.8.4"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6"
dependencies:
argparse "^1.0.7"
esprima "^3.1.1"
@@ -4563,13 +4615,19 @@ jsonfile@^2.1.0:
optionalDependencies:
graceful-fs "^4.1.6"
+jsonfile@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
jsonparse@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.0.tgz#85fc245b1d9259acc6941960b905adf64e7de0e8"
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
jsonpointer@^4.0.0:
version "4.0.1"
@@ -4663,8 +4721,8 @@ load-json-file@^1.0.0:
strip-bom "^2.0.0"
loader.js@^4.0.7:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.3.0.tgz#736c13eb8afdf75abd6c2d7b4f7fd40e1105a71f"
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.4.0.tgz#02bf55650b78afee5e9d8cf972efd484faa3b2c1"
locate-path@^2.0.0:
version "2.0.0"
@@ -5042,6 +5100,12 @@ make-array@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/make-array/-/make-array-0.1.2.tgz#335e36ebb0c5a43154d21213a1ecaeae2a1bb3ef"
+make-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978"
+ dependencies:
+ pify "^2.3.0"
+
makeerror@1.0.x:
version "1.0.11"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
@@ -5193,10 +5257,14 @@ mime-types@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce"
-mime@1.3.4, mime@^1.2.11:
+mime@1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+mime@^1.2.11:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
+
mime@~1.2.11:
version "1.2.11"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"
@@ -5216,11 +5284,11 @@ minimatch@1:
lru-cache "2"
sigmund "~1.0.0"
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.2, minimatch@~3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, minimatch@~3.0.3:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
- brace-expansion "^1.0.0"
+ brace-expansion "^1.1.7"
minimatch@^2.0.1, minimatch@^2.0.3:
version "2.0.10"
@@ -5344,8 +5412,8 @@ node-fetch@^1.3.3:
is-stream "^1.0.1"
node-gyp@^3.3.1, node-gyp@~3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6"
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.1.tgz#19561067ff185464aded478212681f47fd578cbc"
dependencies:
fstream "^1.0.0"
glob "^7.0.3"
@@ -5687,12 +5755,12 @@ npm@~3.5.2:
gauge "~1.2.0"
"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5"
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
- gauge "~2.7.1"
+ gauge "~2.7.3"
set-blocking "~2.0.0"
"npmlog@0.1 || 1 || 2", npmlog@~2.0.0, "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4:
@@ -5969,10 +6037,14 @@ path-type@^1.0.0:
pinkie-promise "^2.0.0"
pbkdf2@^3.0.3:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693"
+ version "3.0.12"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2"
dependencies:
- create-hmac "^1.1.2"
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
pegjs@^0.10.0:
version "0.10.0"
@@ -6000,7 +6072,7 @@ phantomjs-prebuilt@^2.1.12, phantomjs-prebuilt@^2.1.14:
request-progress "~2.0.1"
which "~1.2.10"
-pify@^2.0.0:
+pify@^2.0.0, pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -6332,7 +6404,7 @@ realize-package-specifier@~3.0.1:
dezalgo "^1.0.1"
npm-package-arg "^4.1.1"
-recast@0.10.33, recast@^0.10.10:
+recast@0.10.33:
version "0.10.33"
resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697"
dependencies:
@@ -6341,6 +6413,15 @@ recast@0.10.33, recast@^0.10.10:
private "~0.1.5"
source-map "~0.5.0"
+recast@^0.10.10:
+ version "0.10.43"
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f"
+ dependencies:
+ ast-types "0.8.15"
+ esprima-fb "~15001.1001.0-dev-harmony-fb"
+ private "~0.1.5"
+ source-map "~0.5.0"
+
recast@^0.11.17, recast@^0.11.3:
version "0.11.23"
resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
@@ -6616,7 +6697,7 @@ resolve@1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-resolve@^1.1.2, resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.0, resolve@^1.3.2:
+resolve@^1.1.2, resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.0, resolve@^1.3.2, resolve@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
dependencies:
@@ -6659,9 +6740,12 @@ rimraf@~2.5.0, rimraf@~2.5.4:
dependencies:
glob "^7.0.5"
-ripemd160@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e"
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+ dependencies:
+ hash-base "^2.0.0"
+ inherits "^2.0.1"
rsvp@^3.0.14, rsvp@^3.0.16, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0, rsvp@^3.2.1, rsvp@^3.3.3, rsvp@^3.4.0:
version "3.5.0"
@@ -6705,36 +6789,32 @@ sane@^1.1.1, sane@^1.6.0:
walker "~1.0.5"
watch "~0.10.0"
-sanitize-filename@^1.5.3:
+sanitize-filename@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a"
dependencies:
truncate-utf8-bytes "^1.0.0"
sass-graph@^2.1.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.2.tgz#f4d6c95b546ea2a09d14176d0fc1a07ee2b48354"
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.3.tgz#2ba9f170f6cafed5b51665abe13cf319c9269c31"
dependencies:
glob "^7.0.0"
lodash "^4.0.0"
- scss-tokenizer "^0.2.1"
+ scss-tokenizer "^0.2.3"
yargs "^6.6.0"
sax@0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/sax/-/sax-0.3.5.tgz#88fcfc1f73c0c8bbd5b7c776b6d3f3501eed073d"
-sax@1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.4.tgz#74b6d33c9ae1e001510f179a91168588f1aedaa9"
-
sax@>=0.6.0, sax@~1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
-scss-tokenizer@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.1.tgz#07c0cc577bb7ab4d08fd900185adbf4bc844141d"
+scss-tokenizer@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
dependencies:
js-base64 "^2.1.8"
source-map "^0.4.2"
@@ -6743,7 +6823,7 @@ scss-tokenizer@^0.2.1:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-semver@^4.1.0, semver@^4.3.1, semver@^4.3.x:
+semver@^4.3.1, semver@^4.3.x:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
@@ -6786,7 +6866,7 @@ setprototypeof@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
-sha.js@^2.3.6, sha.js@~2.4.4:
+sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4:
version "2.4.8"
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
dependencies:
@@ -6853,9 +6933,9 @@ signal-exit@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-silent-error@^1.0.0, silent-error@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.0.1.tgz#71b7d503d1c6f94882b51b56be879b113cb4822c"
+silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.0.tgz#2209706f1c850a9f1d10d0d840918b46f26e1bc9"
dependencies:
debug "^2.2.0"
@@ -7093,8 +7173,8 @@ stream-combiner2@^1.1.1:
readable-stream "^2.0.2"
stream-http@^2.0.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6"
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.1.tgz#546a51741ad5a6b07e9e31b0b10441a917df528a"
dependencies:
builtin-status-codes "^3.0.0"
inherits "^2.0.1"
@@ -7165,6 +7245,10 @@ strip-bom@^2.0.0:
dependencies:
is-utf8 "^0.2.0"
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
@@ -7267,8 +7351,8 @@ temp@0.8.3:
rimraf "~2.2.6"
testem@^1.15.0:
- version "1.16.0"
- resolved "https://registry.yarnpkg.com/testem/-/testem-1.16.0.tgz#3933040b5d5b5fbdb6a2b1e7032e511b54a05867"
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/testem/-/testem-1.16.1.tgz#ef8b2c793a47082ca1791e2a49d3f22bf1d4ca28"
dependencies:
backbone "^1.1.2"
bluebird "^3.4.6"
@@ -7362,8 +7446,8 @@ to-arraybuffer@^1.0.0:
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
to-fast-properties@^1.0.0, to-fast-properties@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
tough-cookie@>=0.12.0, tough-cookie@~2.3.0:
version "2.3.2"
@@ -7375,7 +7459,7 @@ tough-cookie@~2.2.0:
version "2.2.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7"
-tree-sync@^1.2.1:
+tree-sync@^1.2.1, tree-sync@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.2.2.tgz#2cf76b8589f59ffedb58db5a3ac7cb013d0158b7"
dependencies:
@@ -7441,8 +7525,8 @@ uc.micro@^1.0.0, uc.micro@^1.0.1, uc.micro@^1.0.3:
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192"
uglify-js@^2.6, uglify-js@^2.7.0:
- version "2.8.22"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0"
+ version "2.8.24"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.24.tgz#48eb5175cf32e22ec11a47e638d7c8b4e0faf2dd"
dependencies:
source-map "~0.5.1"
yargs "~3.10.0"
@@ -7506,6 +7590,10 @@ unique-string@^1.0.0:
dependencies:
crypto-random-string "^1.0.0"
+universalify@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778"
+
unorm@1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.3.3.tgz#16a8772671ebd6f7cde6f8c5e49bb60ac47dba93"
@@ -7670,10 +7758,10 @@ which@1, which@^1.2.12, which@^1.2.9, which@~1.2.1, which@~1.2.10, which@~1.2.11
isexe "^2.0.0"
wide-align@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
dependencies:
- string-width "^1.0.1"
+ string-width "^1.0.2"
window-size@0.1.0:
version "0.1.0"
@@ -7710,6 +7798,14 @@ write-file-atomic@^1.1.2:
imurmurhash "^0.1.4"
slide "^1.1.5"
+write-file-atomic@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
write-file-atomic@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.1.4.tgz#b1f52dc2e8dc0e3cb04d187a25f758a38a90ca3b"
diff --git a/web/app/pods/components/bridge-finder/component.js b/web/app/pods/components/bridge-finder/component.js
index 581b885..fff1ac3 100644
--- a/web/app/pods/components/bridge-finder/component.js
+++ b/web/app/pods/components/bridge-finder/component.js
@@ -7,7 +7,8 @@ const {
on,
isNone,
run: { later },
- $
+ $,
+ String: { htmlSafe }
} = Ember;
export default Component.extend({
@@ -24,7 +25,6 @@ export default Component.extend({
bridgeUsernamePingIntervalTime: 1500,
bridgeUserNamePingIntervalProgress: 0,
bridgePingIntervalHandle: null,
- bridgeAuthenticateReachedStatus: null,
manualBridgeIp: null,
manualBridgeIpNotFound: false,
multipleBridgeIps: [],
@@ -95,14 +95,19 @@ export default Component.extend({
type: 'POST'
}).done((result, status) => {
if (!this.isDestroyed) {
- this.set('bridgeAuthenticateReachedStatus', status);
-
if (status === 'success' && !result[0].error) {
this.clearBridgePingIntervalHandle();
this.get('storage').set('huegasm.bridgeUsername', result[0].success.username);
this.set('bridgeUsername', result[0].success.username);
}
}
+ }).fail(() => {
+ this.clearBridgePingIntervalHandle();
+ this.setProperties({
+ bridgeConnectError: true,
+ bridgeConnectMessage: htmlSafe('Your network and/or computer security settings are preventing Huegasm from connecting to your Hue bridge.' +
+ 'Feel free to contact us at huegasm.app@gmail.com if this is unexpected and you need help debugging the problem. ')
+ })
});
this.incrementProperty('bridgeUserNamePingIntervalProgress', this.get('bridgeUsernamePingIntervalTime') / bridgeUsernamePingMaxTime * 100);
diff --git a/web/app/pods/components/bridge-finder/template.hbs b/web/app/pods/components/bridge-finder/template.hbs
index 648b898..a9672d3 100644
--- a/web/app/pods/components/bridge-finder/template.hbs
+++ b/web/app/pods/components/bridge-finder/template.hbs
@@ -1,33 +1,35 @@
{{#unless bridgeUsername}}
{{#if bridgeIp}}
-
-
-
-
-
-
-
-
+ {{#unless bridgeConnectError}}
+
+
+
+
+
+
+
+
- {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}}
+ {{paper-progress-linear warn=true value=bridgeUserNamePingIntervalProgress}}
+ {{/unless}}
{{#if isAuthenticating}}
@@ -35,7 +37,11 @@
Press the button on your bridge to authenticate Huegasm.
{{else}}
- You failed to press the button in time. RETRY
+ {{#if bridgeConnectError}}
+ {{bridgeConnectMessage}}
+ {{else}}
+ You failed to press the button in time. RETRY
+ {{/if}}
{{/if}}
{{else}}
{{#unless bridgeFindStatus}}
diff --git a/web/app/pods/components/hue-controls/component.js b/web/app/pods/components/hue-controls/component.js
index 561a9c7..a53c648 100644
--- a/web/app/pods/components/hue-controls/component.js
+++ b/web/app/pods/components/hue-controls/component.js
@@ -1,12 +1,13 @@
import Ember from 'ember';
-const { A, Component,computed, isEmpty, isNone, run: { later, scheduleOnce }, inject, $, set } = Ember;
+const { A, Component, computed, isEmpty, isNone, run: { later, scheduleOnce }, inject, $, set } = Ember;
export default Component.extend({
classNames: ['container-fluid'],
elementId: 'hue-controls',
lightsData: null,
+ firstVisitApp: true,
canTryChrome: false,
activeLights: A(),
tabList: ["Lights", "Music"],
@@ -17,64 +18,70 @@ export default Component.extend({
notify: inject.service(),
- dimmerOnClass: computed('dimmerOn', function(){
+ dimmerOnClass: computed('dimmerOn', function () {
return this.get('dimmerOn') ? 'dimmerOn md-menu-origin' : 'md-menu-origin';
}),
- ready: computed('lightsData', 'trial', function() {
+ ready: computed('lightsData', 'trial', function () {
return this.get('trial') || !isNone(this.get('lightsData'));
}),
- apiURL: computed('bridgeIp', 'bridgeUsername', function(){
+ apiURL: computed('bridgeIp', 'bridgeUsername', function () {
return 'http://' + this.get('bridgeIp') + '/api/' + this.get('bridgeUsername');
}),
- tabData: computed('tabList', 'selectedTab', function(){
+ tabData: computed('tabList', 'selectedTab', function () {
let tabData = [], selectedTab = this.get('selectedTab');
- this.get('tabList').forEach(function(tab, i){
+ this.get('tabList').forEach(function (tab, i) {
let selected = false;
- if(i === selectedTab){
+ if (i === selectedTab) {
selected = true;
}
- tabData.push({"name": tab, "selected": selected });
+ tabData.push({ "name": tab, "selected": selected });
});
return tabData;
}),
- didInsertElement(){
- if(!window.matchMedia || (window.matchMedia("(min-width: 768px)").matches)){
+ didInsertElement() {
+ if (!window.matchMedia || (window.matchMedia("(min-width: 768px)").matches)) {
// here's a weird way to automatically initialize bootstrap tooltips
- let observer = new MutationObserver(function(mutations) {
- let haveTooltip = !mutations.every(function(mutation) {
+ let observer = new MutationObserver(function (mutations) {
+ let haveTooltip = !mutations.every(function (mutation) {
return isEmpty(mutation.addedNodes) || isNone(mutation.addedNodes[0].classList) || mutation.addedNodes[0].classList.contains('tooltip');
});
- if(haveTooltip) {
- scheduleOnce('afterRender', function(){
+ if (haveTooltip) {
+ scheduleOnce('afterRender', function () {
$('.bootstrap-tooltip').tooltip();
});
}
});
- observer.observe($('#hue-controls')[0], {childList: true, subtree: true});
+ observer.observe($('#hue-controls')[0], { childList: true, subtree: true });
}
},
init() {
this._super(...arguments);
- let isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
+ let isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor),
+ storage = this.get('storage'),
+ firstVisitApp = storage.get('huegasm.firstVisitApp');
- if(!this.get('trial')) {
+ if (!isEmpty(firstVisitApp)) {
+ this.set('firstVisitApp', false);
+ }
+
+ if (!this.get('trial')) {
this.updateLightData();
setInterval(this.updateLightData.bind(this), 2000);
}
- if (!isNone(this.get('storage').get('huegasm.selectedTab'))) {
+ if (!isNone(storage.get('huegasm.selectedTab'))) {
this.set('selectedTab', this.get('storage').get('huegasm.selectedTab'));
}
@@ -85,7 +92,7 @@ export default Component.extend({
'mbjanbdhcpohhfecjgbdpcfhnnbofooj',
{},
(response) => {
- if (response && response.installed){
+ if (response && response.installed) {
set(this, 'canTryChrome', false);
}
}
@@ -93,23 +100,23 @@ export default Component.extend({
}
},
- updateLightData(){
- let fail = ()=>{
- if(isNone(this.get('lightsData'))) {
+ updateLightData() {
+ let fail = () => {
+ if (isNone(this.get('lightsData'))) {
this.send('clearBridge');
- } else if(this.get('displayFailure')){
- this.get('notify').warning({html: 'Error retrieving data from your lights. Yikes.
'});
+ } else if (this.get('displayFailure')) {
+ this.get('notify').warning({ html: 'Error retrieving data from your lights. Yikes.
' });
this.set('displayFailure', false);
- later(this, function() {
+ later(this, function () {
this.set('displayFailure', true);
}, 30000);
}
};
- if(!this.get('pauseLightUpdates')){
- $.get(this.get('apiURL') + '/lights', (result, status)=>{
- if(!isNone(result[0]) && !isNone(result[0].error)){
+ if (!this.get('pauseLightUpdates')) {
+ $.get(this.get('apiURL') + '/lights', (result, status) => {
+ if (!isNone(result[0]) && !isNone(result[0].error)) {
fail();
} else if (status === 'success' && JSON.stringify(this.get('lightsData')) !== JSON.stringify(result)) {
this.set('lightsData', result);
@@ -125,7 +132,7 @@ export default Component.extend({
tryExtension() {
chrome.webstore.install("https://chrome.google.com/webstore/detail/mbjanbdhcpohhfecjgbdpcfhnnbofooj");
},
- changeTab(tabName){
+ changeTab(tabName) {
let index = this.get('tabList').indexOf(tabName);
this.set('selectedTab', index);
this.get('storage').set('huegasm.selectedTab', index);
@@ -149,11 +156,11 @@ export default Component.extend({
email() {
window.open("mailto:huegasm.app@gmail.com", '_blank');
},
- startIntro(){
+ startIntro() {
let intro = introJs(),
playerBottom = $('#player-bottom');
- if(this.get('dimmerOn')) {
+ if (this.get('dimmerOn')) {
this.send('toggleDimmer');
}
@@ -227,29 +234,29 @@ export default Component.extend({
});
intro.onchange((element) => {
- if(element.id === '' || element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip' || element.nodeName === 'MD-MENU'){
+ if (element.id === '' || element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area' || element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container' || element.id === 'using-mic-audio-tooltip' || element.nodeName === 'MD-MENU') {
$('.navigation-item').eq(1).click();
} else {
$('.navigation-item').eq(0).click();
}
- if(element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area'){
+ if (element.id === 'music-tab' || element.id === 'playlist' || element.id === 'player-area') {
playerBottom.hide();
- } else if(element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container'){
+ } else if (element.id === 'beat-option-row' || element.id === 'beat-option-button-group' || element.id === 'beat-container') {
playerBottom.show();
- } else if(element.id === 'dimmer'){
+ } else if (element.id === 'dimmer') {
$(document).click();
}
});
// skip hidden/missing elements
- intro.onafterchange((element)=>{
+ intro.onafterchange((element) => {
let elem = $(element);
- if(elem.html() === ''){
+ if (elem.html() === '') {
$('.introjs-nextbutton').click();
}
- if(element.id === ''){
+ if (element.id === '') {
later(this, () => {
$('body').velocity('scroll');
}, 500);
@@ -259,6 +266,10 @@ export default Component.extend({
}, 500);
}
}).start();
+ },
+ closeNotificationModal() {
+ this.set('firstVisitApp', false);
+ this.get('storage').set('huegasm.firstVisitApp', false);
}
}
});
diff --git a/web/app/pods/components/hue-controls/template.hbs b/web/app/pods/components/hue-controls/template.hbs
index 6ae635e..9a8ae89 100644
--- a/web/app/pods/components/hue-controls/template.hbs
+++ b/web/app/pods/components/hue-controls/template.hbs
@@ -58,6 +58,36 @@
{{music-tab active=(eq selectedTab 1) apiURL=apiURL lightsData=lightsData activeLights=activeLights pauseLightUpdates=pauseLightUpdates dimmerOn=dimmerOn storage=storage colorLoopOn=colorLoopOn playing=playing action="startIntro"}}
+
+ {{#if firstVisitApp}}
+ {{#paper-dialog fullscreen=fullscreen onClose=(action "closeNotificationModal") origin=dialogOrigin}}
+
+ {{#paper-dialog-content}}
+
+ Check out the Huegasm Chrome extension
+
+
+ The newly updated Huegasm Chrome adds:
+
+ ability to listen for music from either a Chrome tab, microphone or your entire system
+ "Ambience mode" whcih sporatically changes the color of your lights throughout the song
+ and more...
+
+
+
+
+
+
+ {{/paper-dialog-content}}
+
+ {{#paper-dialog-actions class="layout-row" }}
+
+ {{#paper-button primary=true onClick=(action "closeNotificationModal")}}OK{{/paper-button}}
+ {{/paper-dialog-actions}}
+
+ {{/paper-dialog}}
+ {{/if}}
+
{{else}}
{{paper-progress-circular diameter=100}}
{{/if}}
diff --git a/web/app/pods/components/lights-tab/component.js b/web/app/pods/components/lights-tab/component.js
index c4001dd..07143fa 100644
--- a/web/app/pods/components/lights-tab/component.js
+++ b/web/app/pods/components/lights-tab/component.js
@@ -23,7 +23,7 @@ export default Component.extend({
}),
// determines the average brightness of the hue system for the brightness slider
- lightsBrightness: computed('lightsData', function () {
+ lightsBrightness: computed('lightsData', 'activeLights.[]', function () {
let lightsData = this.get('lightsData'),
activeLights = this.get('activeLights'),
lightsBrightness = 0;
@@ -102,7 +102,7 @@ export default Component.extend({
$('.color').css('background', 'rgb(' + 255 + ',' + 255 + ',' + 255 + ')');
}
})),
-
+
// determines whether the lights are on/off for the lights switch
lightsOnChange: on('init', observer('lightsData.@each.state.on', 'activeLights.[]', function () {
if (!this.get('strobeOn')) {
diff --git a/web/app/pods/components/music-tab/add-soundcloud-sound-modal/component.js b/web/app/pods/components/music-tab/add-soundcloud-sound-modal/component.js
index 072e4a9..7c772f5 100644
--- a/web/app/pods/components/music-tab/add-soundcloud-sound-modal/component.js
+++ b/web/app/pods/components/music-tab/add-soundcloud-sound-modal/component.js
@@ -13,33 +13,32 @@ const {
export default Component.extend({
url: null,
- onIsShowingModalChange: observer('isShowingModal', function(){
- if(this.get('isShowingModal')){
+ onIsShowingModalChange: observer('isShowingModal', function () {
+ if (this.get('isShowingModal')) {
this.set('url', null);
- later(function(){
+ later(function () {
$('md-input-container input').focus();
}, 500);
}
-
}),
- saveDisabled: computed('url', function(){
+ saveDisabled: computed('url', function () {
return isNone(this.get('url')) || isEmpty(this.get('url').trim());
}),
- didInsertElement: function() {
- $(document).keypress((event)=>{
- if(!this.get('saveDisabled') && event.which === 13) {
+ didInsertElement: function () {
+ $(document).keypress((event) => {
+ if (!this.get('saveDisabled') && event.which === 13) {
this.send('add');
}
});
},
actions: {
- close () {
+ close() {
this.sendAction();
},
- add (){
+ add() {
this.sendAction('action', this.get('url'));
}
}
diff --git a/web/app/pods/components/music-tab/component.js b/web/app/pods/components/music-tab/component.js
index 4d8eee0..f410974 100644
--- a/web/app/pods/components/music-tab/component.js
+++ b/web/app/pods/components/music-tab/component.js
@@ -280,7 +280,6 @@ export default Component.extend(helperMixin, visualizerMixin, {
this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/vallis-alps-young-feki-remix');
this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/andrew-luce-when-to-love-you-feat-chelsea-cutler');
this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/ahh-ooh-carefree-with-me');
- this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/crywolf-slow-burn');
this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/clozee-red-forest');
this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/elo-method-subranger-solace');
this.send('handleNewSoundCloudURL', 'https://soundcloud.com/mrsuicidesheep/90-pounds-of-pete-waited-too-long-feat-devon-baldwin');
diff --git a/web/app/styles/hue-controls.scss b/web/app/styles/hue-controls.scss
index 6ebe165..998036d 100644
--- a/web/app/styles/hue-controls.scss
+++ b/web/app/styles/hue-controls.scss
@@ -5,6 +5,17 @@
}
}
+.promo-img {
+ display: block;
+ margin: auto;
+ height: 50vh;
+ min-height: 250px;
+}
+
+.promo-title {
+ font-size: 18px;
+}
+
.lights-control-tooltip + .tooltip {
left: 0 !important;
}
diff --git a/web/package.json b/web/package.json
index 099d404..510d8a1 100644
--- a/web/package.json
+++ b/web/package.json
@@ -21,11 +21,11 @@
"ember-cli": "^2.8.0",
"ember-cli-app-version": "^3.0.0",
"ember-cli-babel": "^6.0.0",
- "ember-cli-dependency-checker": "^1.2.0",
+ "ember-cli-dependency-checker": "^2.0.0",
"ember-cli-deploy": "^1.0.0",
"ember-cli-deploy-build": "^1.0.0",
"ember-cli-deploy-git": "^1.1.0",
- "ember-cli-htmlbars": "^1.0.1",
+ "ember-cli-htmlbars": "^2.0.0",
"ember-cli-htmlbars-inline-precompile": "^0.4.0",
"ember-cli-inject-live-reload": "^1.3.1",
"ember-cli-nouislider": "^0.13.0",
@@ -37,7 +37,7 @@
"ember-export-application-global": "^2.0.0",
"ember-inline-svg": "^0.1.7",
"ember-load-initializers": "^1.0.0",
- "ember-modal-dialog": "^1.0.0",
+ "ember-modal-dialog": "^2.0.0",
"ember-notify": "^5.0.4",
"ember-paper": "^1.0.0-alpha.19",
"ember-resolver": "^4.0.0",
diff --git a/web/public/assets/images/promo.png b/web/public/assets/images/promo.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa6dd15fae002fa99345cb64e79fd8e0b6ead93c
GIT binary patch
literal 35686
zcmZ^KWmH_z(j`P7K@&V^Lh#1jEx`!{cXxMfBq2y}cMI+`?oM!bhv4qgST}QdGwXY6
z&6@cG+{?Mgs!rA3Rds^D%SoW45TYO;AfQW0epN(3K)gplcwzeH1@MNCZ>Aae^}$(8
z-C4=b)Y;9z(F8%n*v`=8qm+$-nTeu_fw70ffC)bWLg*W*uOiCsi%03G+R7&IC(OBZ
z^1{7;=%UfGBuiLoI=78KHH7n%1|s#gZN8Mgp$}vHTTCDSH8nRiN{c)-`-wB5wu7|-
ztp?8rt~tK)b!a?Zm_=M9@X#LSYevdVy3>om#{4T2IyC3b?Zi0dF`5j$%Q*EIb)s)-
zYT^dw*e#)>vx2YZRq1|i7=OOCYc*Gn?zoOkEmu=f@dr^xnH>QEjVVVW($>mKi3}2X
z*nFQ|TpWU~o|BD;pg(UQu1aRnq4Kc_8R5s$i?2`w1buo!BBK4Ni3x=o|G)nv{Qh52W=2u^f!ZKqm-B3fkJTna~xt
zOpydv*!}eZ=9;&$nwnah`Wo}&quT+43_E@Q+FA}PgN2ES
ziP>3I4VP=Of-&TXRCcSBpx%Y7=dV$yyOotX0
zQ;3w7mlxcLh=}<3nl;i062jh-gt3s1Fc^SIwHu(*Xm
z*D`rsii3j4_gwAm^d+8Bz*4Inb=P5*FF2D6{(ULgZAyP|M@CLj&+LNY;&YzWzDp{
zO9HLm2_iyA2RAo&7@1H;_N|k&`44z*bkpv^B&HT}AJwQ&O-{VcW>HECA#dWcH9RqN
zzWh$S`!9=Ocy-10XE#g)1f=|ymgVm5O+b7F1er>LreeM*ryG_|t@o1Gw0#jI;MKvL
zvdc9$c}5|(%ia|eo_|VhSgL7>KUM2=({C=j$?&O2_W!ReC;sG&Vd-J^W<;JT4
z0o|tE|7>5B`Qf{7?k@-^0PE4#&Ba=9`$MUxQB|us^&4q>2JH8VEXMO7`J(NsI@=o?
z7pcfO54FbZe_uVDl4m*EqDBoPBK$DOudAC~T+|du{)`t|Qc{B4Xs@QGR%eXb-L_AR
zfFRsnSX4wyOKV|ko55xlp`d15>2|8C%mth${JOfj&ED|Ki;HZ;%>(#GPiUbna72~l
zG6ey6)d882<6rwNJ
zYjmW1xSWy~$|KP8*7D!xdJAka0zt*$hfJ@FVDZh%kIBHZ>8Yn*@80Nv@UtzvDWB`R
z#naHxXi5|`8I1FZ-x-Vt%~SqxIB5UUz-W`0z}{9J+U&Az(dojlcWACm9EJR4KdB%`
zm!+gmIM6#!y{;#oBYFP4__>@!P(VB`+q(ib7&_XXr)cV-hv3~7HY#OTw5qBqo{f!7
z;a6ZX3+x;mBEZP@T0i7)fC+3(t*&A`PxE=F5uVSjzO!a(DxYU$WmWyDub$<&00Kf1
zt6F4x8wk<{OtLy0na8I-=tSQT@qf}ej&3WjED5BR09WXJEeh@W>$Xy
zYeyh8y*B;0({+$~{hy8~kA*V%?a!vV$VyWAz}mi*%n(VZ$Q~0hj{tmd*xG_N%xJv;
z88hv%Q3pzAUxEjySb7PylB@Skwd44JOZk{LY51D=eWc^crTgRD=Sz|ydA#&;)17uB
z4d-d^Mcegk6AVDELL8LHF>p`Uv!Ucm^&?(8e48c-R$y&`@x5enK0dP_Wq2R%2FM6&
zeXPQZkyf;ag3n+ZSzQ91*tPObyfaR?i7vF0&2#D+3zcCtu!TD@6GgeB?P~WPqpU2M
z)*e;w(fRNz$-iAKL2`MoLUCg$59v+*F}C?n#-z2In)+nuxr+=soUF>g)Jh{zuHT1-
zedoew)V^I0A~PLL<1y+*vzY?q;C(%##{Q0&xb*j&rDYrJX6byh@8SO5GOewm;_UwV
zFcgo$(V-DHLPb?|GQ?aVM8*X(5`5Aq!7bzJS{D%TTFVDAUy;AlN9G$Rori&e!9JJn
zwi?{M;APIlGzco?8t*zly@a#OfjYVgn~(zw>S%cAcw@DQYkkbNNTCx|Au&_0$=b0U
z|3O&5H(x#ZpiUO;C_+xA$7Mn?H>-fLiF;6u`iDlL$f)GQ>vCNzd%lx&=0?8eL^M))
z-OC^w`?ocbfYE{TOf^Hu*9R~Iq4-Rztza%%l}+|cpZom;1}*oM*uk8foH>XdhV
zT@CG?LTgZPd`ud3^AF3cwiX+I+%LZ|KD^mE2wmGY^>w{znjL_6T`xSr=qBCBoiWj5
zl%yk{Q`+7x)czPt
zE$?$NKrJtDJ>B^WnInU353O@2Mv`JEktvheK-9?SvyQ+=#>?CuK7d@|JdR2*K|uJ$JqM0o{Xv7S5{;K0*`^V+pP&HYWKOdsygsl
zLVbvlbRO&I3c&@eP5-p9W9^|ZUD~`=zLCf!6?(h`U0Q>yCixf?{+)y6Ra8WkwmNPP
zZf$8b(qF&3Z|Yxx|k7$|m4@kkWc-`m
z+as>!B~N`>CFB=*_L*(i_f=rtnSjF2xBEWn<2^+BKK>FsZ9Wx@KW8%?mXw#DOA^dJ
zL_=BMw-ny0t#J{|*T;KYFu4zQGDIZjBKxe
zVG7bjOA0=obw8gN<)!KAtCQx_$=lrwuq|_Fo>=R7FOgQA_1*Wk1=c!Wc7MD^#Vf4o
zF|J5RagOM8;5Ib3vsL}zR9BpzK85$Meonb4|0Feasc~ZV_sP%o_dL=KWS|+RJ<4VQ
zyUOOTXWxwPKa3E|pb<+VQr-LaQkiV)@#=ZeAC9rWBgAM8d@#%97%W&fRQb5MTka1^
z(k?O>c%XpB0Y~HrFk#5!2j>7FC^#FV&T#kZ^*ZZBrl*a|%zWBOwJX?L+C`D=BW)0
z4eCp3d3kw9kDZYY4h~tNfw#A}GKq{Nf?i20bbs`H0oX-%837==bgY{6w?94Z
zc0XhhaY^PpS;lFDkoIbd9d4*7xur*b5SawLiuRZwNCgdK=P9^Xc#m*2}%`Dmt^MQ6~+D<~+ie~gx#E!D`e
zVNFQ51GayfAU96GHd;OkS
ztk;9-ZBn+C-=Ue%QvGMa6O-2t=X^K&p1BE07adivv9rMX=F4O<^BmX0e`kkTRo455
zstmcT8Q3R1WuOp^>T2O)k$c>N$lYKVg>LWK%^K{)&G=GH&s#;pNMcsi4DcQS0j2-Y92jcoN`6!=!~af@y_S$Fh~<#@#)|CV-h~R&$qn3xv=TT
zS>Z-+3Z++qszn!H)hJF>`o-+1&vtx3n_Hmm8}t+*E!Gtk3J4>JVPGXSZ5GRC?>fsJ
zucN1jQc$pMEcD0xygDnN4kG{kUd|D1G2jKNA{_QWg6{1Aue&*2llRkYaX*itlo1an
z?7`wFjUNSAP}X_w#iR_=#0hVy|0v#6fxMl$Ik(RvH#TfEozKO24@ve-UoupHzhL|$
z$wwitHQ8e+Yr$j-@a%LF!mn&{-CMzp%5{1isH-f3z8PiO?VApfIBdPT!LwE*E7;rdz
zOaMyUB+2$!yM;_$)!p?B!sXGSHK$bT-uf27TS-aD3E<=ajyc@(%P%Slrc{|Wvb>qO
zyWF*K2b7Q3&$f=7GcPCz`5SH6p+=p==EZ)=#f77UL|-zSnPoE!RW|u1Qy$(P%b|Pe
zy}P<^2^p>e>FVCjoIf=eu9GHBT|K-YyU?-^Vnv?x1~2(AA=O(VBK)iS4^Dn2Apb?p
z2+tV$2S5rDo^d_GGxkMz?ot@~zkmMc9dpZc{j6St&$?yz43fu7bWHuXa&>Y!UvsD;
zQ}_ogCXEXQXx>U2PRAhZk)mxOYuh*eDQ+A5F_fEmRn?p@K`reUL(oD2jQ(=HD;)KT
z$W*B1!=~x?j%^A@!uhdC=kH7qY7!hZ+)LCnE)UY@))mjKe>uWhq%P5J!A5frM}4Kc
zF$!35uX?%oR5y_ZS^Q8h214QWb(*N@n@>)yCO+
zN0=@7^ZEzmQY7Y%s2MYbrM|~>#=T1VI9vFlT5?l)MvZ5I_fGzr>!!&xEK{T;M~}59
z_+U_2$~iH&uI^@MB=wixW)h20Zv=@|o6CzoU}j;Tmh;cvHy&n37u!P*(9?pSe%RFc
za_Q2(DD8PHN&@_kk1!bQ(V5=gSOi4Zpe_7!Y12)}_Joo}(%_2zZKKan0)x};D9Iyf
zffEu#c$mD*<<(Uhr%g)ML2hyJ!E&RMo-d5Ump3Z_3+MJP)zP}ASIP`N*o#*V$zeNq4^Wtt_2a^d_m3g&G1m=
z?ecIT1rk%3Am!bdFZ_!u1|}xgbUF2AVq6?Cud_LDCV(i05cZY+fj=GrKK|~`PM!CI
z>kYNHVr3+mkQ_Au-6LQ}u9!0FVi00qH-eQUpmyA!KCSy~%U@0QgszB#n9L05MK)>8
zx4&p&5r2rtzmxIg4cG7juy7V5Swp2>)gU(Sjv|&3PJTP(GvBvJxr-A~g*~i2$=%}(
zCiX^I2C(7b;Z25FCq2r+!^6Ue0g%?_{V+d?q)q**EF$FmsCw*Th?=IRKxsM2+IRZA;CH(W3=9&Hq}zQ__a()}7nhfJ)i3xE
z$BjjIWBv^EHm^?l654cT^Z)&>0nsTve~jxq&_kxk_cw-&URq*x~iSvDI<
z>4`kQy2=ej2w7ICkzt!uJCeVEuXhL4+pUc{9v*GzBe-;pk^z44;{1GIU|>QOv&J>#
zYN1FhlUdJ53a|laV*u2_#=@c@q%67v+2k$RK7Nzg5fR!BqrW9#p=62fYPsDA1wL(S
zYkN!zBJ<(q;E4AJ@gt5Cq{OsaNxuZ}T2}O9_|!lw?u4hB8osyKB?=S%RgkDlN_1I@
zG8~8zO{oN&k#CM?eW7p@%q|FhD_H+|SOU=rx!&>{$!us=@2XtC2{j5z1{$hTF0Cgk
zuB;7k92gT5r>N(g%wp6&HOok`QKfN5L&V6eUFb+?QpBXf)Cjz#Ma?i^PHVjS8ZI${
zI_S?HZA*`Ha&$BzcUTVTe(r6+0Zz5s+I~8_#r9ylGaY$+wcWrq04EX|b+A?|Od3h<
zUDw*Yd2QD%OR)hXXmp-<<%}XXU`s8RreF45-FPrp+%@N%bdY6>^}dg=gl3ZD?c2|_
z6y1shRm?>TAJ>_A(*11jjcr&oa%2hRn@&%&0nLy+?{ZDR`R9AygI^$@xs%BM?d_b?
z<&V)tDwKU&)E6Jo_4lq#jdyxxwts7pvi6Z(qJ+1xYP5r
z)o0xf?~g$0!-orRf@=Mg=87
z!PwN3MFH(U)N3tqVFSq5)@U%PwXR#h5}4vF1ZR9@vog*u`_NpB9q(}Rn?AS**OXZ!
z9S9`>aON7|t3<-)@(PWSkz)YsP|nCE9|{Txh(32aUHyh7q3XX)>aFFy7_bX!vde)hnPhgka4-vVNIDOQ`3!e%+-zD)Jpqj@YJ
zIP9h&CN2&KrEs9r!4g3KaO!z_05mm*!rziSpks4fp-Y0+>bc1TQ;ra{u6#+=2Gc=_N|
zofjrgT9p%fg1ZM0@K9l8Hr@&h^r^8gU_-X@8nCTz1C9b=xO`?Rr_CY|EGTG!$cVI7
z7|_TpSNnkXvQk^USoVD+-jiK{jyNzy>Q5Kcx(|JU?|
ziQKNYG}X-PQyvP=zo#9pb_EZ5nV>^jQ?u?|un?l#qO4X(#
zceEN)9|a%eLk-K^{4w7>JKD%|-0(j6w13kr`G!pwLy0hFS4oRm$`7ku%oEiK5v3A@
zUu>ou95%0bSSmu1*0EcR&1MZEdNY`4vkM$;0p&m6=qWWB1+1d_x`oTl%}rNdl{rPv
z!y?{m*$-PMBczy}o1(H#?BaQIiT?ht;$3Nbe;0i#py*a7a1@a7YX|nDG&nS??su0H
zEHOXZXm&O5)J1}Xm#YN`39(l=Z1w`-1f_o8%bjnNyf#Asp*d-P@>$Q`lQ+<_LzoaC
zDBjb(%Po}t>#334veVPYMTbAi;U~kY9biyiV88k=nrT0k5&u4(U9A!04|(N7<iOdkgy0PX+W+&j&6jyi-^yD2yL&
zjt>~1CafQP+Qp1ry~oP$8q1OWWvebb=+`DEvybnMfQ8n`vI^=j?x}N2J(D~Y6&1kIyErwR0QkVv
z%#9hvyd?U9G(uiR7w
zASE`OI#Z%nUsK~B7#L%Jmth}BiZ_RP$#W#4VbCJK2FQBF_X!5LKl+KYhyM-z-iR@rsF5ZIS^|O_eLnZ1CV_;vE%;L=BHryy7WRKZMchd9kHDW~Y#PcZV
z|K$G!(jPGf0VG4;!-jQ{`<>vA9*&h~fpmvVBHQ5#2W$s=)Q=!(^8p|~$Nzet;$8^0
zFJGbtncYSE+b)O7L%c_tL>yx4gNnl5_Q&W64)bg)jV~-#MG+!C5Fd@>2a-
zxsn$guP2P1s*1-qaa2)NMtk45$afoWJ-fimFZuaSNKd7+2nYTjGFt-<#3-etq`F8M
zYemFXDvg5b8diURk%9C@Q!>9LE37c2B!rsp+sTsEpzTY!G;R?*BOQ2xo@&KY$Iq)P
zXBeM5r3BOM3?F=+ao0^e5rvRu$<=(-8C_@sr^T6Xmz}TL|_3cU|X6J$6
zJ^b_ihX?sfX`g3ct(^D>BN@rl1+n2k2k;f9Rhz!7g)z
zAk&;qx#f5EAm)Ee$>oD%aL1dkcW-ZqPA)HqDMh5Bs<pChdAaw$MupiV+{3C4$Ajk#cwdity_WF^7WY?f-*!1CIUw(DP^h{Xb94
zY?@1rMAsqmaI)^%riWNK&w>+U&UY1{Q3rof@iw6*&eN5Di~M9JJ01rz!0Cr2t~k)^
zU)=d1?tcM@J=+f)J;q~+uaGbIZgK~5x6d8xYesGRvT7G3ZFyp{a1CNyqX6HDmmhj;
zey)7^{Aa`A`_1Q%r?P9)L1oMv7twt|CnJ94o*I3ayUpdwt}}B}6#=nq;WhS-RcSm+
zj)OQi)E&Cab~NRuhpX0VN?#=Iddd&mojEurD*}FH$F~Oj%E{|<9y-UK&-5nH+lWXB
zJo)CH+Ris~zCvrW7GpwhHd>X@{tg-W#_xmD)F1PZ958;`lUg6<(`*wevAD+Sx`n`D
zhM?-!r`{a(@z&tL*yFzTqZZEq{E(Sp4R+y83)$Uxkd7LNcGY-ok^h3`h3wI5r@R_b
zi3d-Vt));@KFCv-)ykj|FZ#H9591$wy?dFyG5m#k&UWwbYDtj@WKCS(hH6Z``Y8;(
zpI#;?E!TXTz1cTN(E4FjfiJFWE-z;{^59>z?3n@CzJ0q$W%aNlld!(uef#EYL;{*n
zKa@}U6eGw$Enlhgz-N=N{#iOD>;rPpn;XA71(gyjd>ni_*UsCwbw5G1jTw=L7B60DElbg*;^|
zd;GBXG7DGsVJ|tJ4vxqieH$*nE+lhN5$kVCsEIVs^76+?IASx%99V;=+?XOdu?!{1
zY0&c%Xh;eLRef)NzmZwr$Z%AQhloJ{>%GHQOO$J2%Jb>|6Rhy5#G@No0UL3!NDB6L
zQDgBCTQ|RwOrWJ3+Ab-?V!ReL4r(g3Av(d;`k-m_m_N%@rHOH3(9N!B?iE3Kl}hOR
z;b|7~husPE1o}NjLntgT?i1GEh{W>+`m!SIqAe4U6K@qV;ekmAkqlME!b3hQ)6GCl
z!atopIh`iw{psjAZ(mOjmjkF{Y%$9Dg+O8xPpy^3zw)k(c21ATsMZb#k5jXR!r7)4
zfbqQ$p*+%HB&`erdsolu{Aqcxbm?;z4Ej>ZKcGV}QH?EpnW?)eG5ME1Z%V;OA<|3E
zLi4Y#tqm0NPhC3h;VFMhS+sf__I<)d#i2n%*7fi-Om#5uhmP76k7gc^6u4Da9wmLn
zTS^?cb<3n8iWND
zn@YL9R`@ijMy|A47gwFo*I?gPMrZM{GMDIiUnkKDA`IU>pTfNsN3jpoa{H%Yc%vaX
zbtSrydB(Z{(CKS_HT2?Xkc0F}N#G=TNyj!-iTq%1>n73(*A)S1?N~OiUo`joZ
z=uKY`gX%E;g`>EI5`+m9K}px9N$?IP5tDdT`kXue`L=mNGvh-x|t;`^8?24w`!M;{Jc0!!m#3%aSy#jJ7
zItmr3$413tvT-TH`S5yxX8`ftUb0Kdlqc4|w5tBDqKJ^8Uh;-Uz`
zh6L>Q@k$C>G5NP4mP#JWs(2K15l;b#4jyl6ZHM-BlW#aIjRg0547q|6CHrum5)%{;
zu%S@wL`Lrqwj`OV9Z#lXrfpjP;15OxoE}bd7uk9PP)`L160d_x0;o}HPUJ`i4~o(EHVimzIjV|<@s{*Eo)u&B(CIl2!BI-Qq^fdu0d
z+|+jaWVBXx6R9>D-3(IBz$*je?^)YIoS`(jdrhD!oreKoP&Le`Ei__2R!wuEIjs8S
zmoYQ^WlI(chJFX#^<7zf-O48}JGJsE-k2|qPBj)A|Kc)ajif8o-O&5nu}k
zsJ@NK!L{Ui6>K+ki!WoPHsYp@SZ`rNiClC=C#jou%p(CFAE#X
z_yVl3HT-y?<&dLa*@cOZJx4W0VsjG?F*yr)_XLi0zWVZngLiYCS#y_m0q3E!;`bGh
zG)jZFoojhpI&3Sg9q*VTFJM~Y(Hn$f2~YzA^M>~P*f7A(ymV_L*k(E@Kl>+?A*nto
zur9xW%kpUug%Ma6BljoSNuAejLDck2awk%FDyy~R`CuP2NZ+b7*6D~~fmP&CCYel>0Y&Ac4|N;7sQm6e)GJbPeM-kuIxy
zU!Vz_e+4FBG;r&QJ|1z3;NgDF-S0^kUOzTM%&f#kct9oKaiitFJ}}0^#Um3x9ypX+
zLnUB7Rp_F{FA*HdenfT5ady1-2j6d{3h5HYMzKSBN%
z>VurCnq8gfqQi#-pM98BEIrCS_Bvu48~TMF7oYJ)n_thqhR>Y|gP!KNO-P`bzX@&!jw7BGl3z`<-viZMLARs&NRpC?4385hHj$MPpf=;c#GgIGN7N
zbW*3Puqt~{8QR4_ku^4mxux7MZ+7Ie(9rc|lU;dTP|)c$uC0sJc=N92H&xX|!hcgG
zC|-V=PcG3mflCx>>rzUrdWv2O#YT~d=}d35DcDo`!3z4FcebF{BZ+5v^BR`{!@rZL
zmkX-9Zp`9ziN_iDY-|qs%%Be6p|XD*HO7%KPT+^wH{&MX;BAGkXOKk``#=!uG?=Pn
z1b!u%RF7N0CFxC;r~Qq_!+2zHWwR5?s7gOy%`vc#70wxdv&=;C)#~ruR-69fHG`dm
z(+#4(+H!o}8=IH$d_N)LQ$34axzM6okw9qY-=;8V$K?)dMK2kKOVz
zuBJV7r=uM4ru?yn5nz$umoaBO@6X@&HH_a%9>*8UvO!gL<;cIx{^~Dp57kQbq3YCo
z;;pWoO&F`Rx2JG$o@jQpB3+ug(wyR5Ln1
z91;>o3)~UR5IsNLa4CMj*Is(8pU`4v);v+GAXd
zzNq(C*!$(3Kg(qUD>6~>CblbSN=0Ls-9uK^rlUe8E7c}>`OBVrgY_rsjytcn)kr4&
z>bcBDBT>@KtH4=q0gNF-i(3qn3hP#zbc$G)>JB(s^;DX$(Yn5n!bY9}-(y>Ja=vst
zUt`_r$&*&zdq>;FO505}Vj0=CcOUrGpn@3TjR~GsWMne3@x6P?eaiiFnybrH^RLHj
z$;>Zl@G_JNR~M#oW5Q08DpDgi?xHcqY&O|=9;%V6UQ=(*{FV@*UhHJ`9*%7B2X+X#$_(wv
zQoY1KNcFNmi&!Sw_1VDPzV!DgS))Adw@#bGjjYOuC)XK-#hCX@Lgf
zXA{CI@GhE?n=u^7=HG0Em;dw9D(Zs`H$KdM+os
z;@`Se%2#OhVrQWKGQ^EEzph965s|rmJpP$#ZJ$x2+x7VLDsA5J0>|6a4Y7V#H;OcP
zzPHuX5p(arD;Rg}nx%1x)82%v`Hz`l$f3&pyn@(9`L0!&^i-nRSbvBXMc0_YUZalZ
zU!0rznUwRa2rs|yQuYD>9}!ucfum>`K+MWKGMz1bzpJ_%?sZ=?=3IFPWVPh}b9&Mp
z83Tf3n_`Kj_%7Q$`}Cm$wnvm6)?wLd2^nn~S8s(nZQAf<*_(Fned2M~5(Ns5MEgYf
zf3_A!g)3ZzPfho?ujY=0B6vSEwrX1SV3^EjKP(+?2b5MbtQ>zS-C_D`
zby-j~;
z*KoTizIt=l=fc?Gj@#Ua;zh*3I||Q4h2`AJLdoaus3zMLAZKmxXu+?TeUKA$F>0
z6}~OY3)BzDL(e?=zuEQw;r0K!boIYU_~$~_|33XUB`-eNN@Hl%*z<&ur6Z(#`>VV7mi82fROVp}Y4BOt;KV7V4`oqCMo|H}uAaCi
zJpv5a9+wt<2KP#S6fu8nEn`?RP>cUIxNf$dq)+%y&H*b`};|
zY|@qsj`t0*h|hV@zZ6hm#?y{9=^E30YNR%o9a+y;ePX#F)(5k$)@1C+9;8y3dfh)?
zELQWaU}(k-?}KT_fk57cF58f_YmiO96D*SpvlaK_&8q#5tgYfl{G_-N^>^Vc!gp4v
z8;N4O!G2iqHCiziP675N{mZIdCpvC9;y*O*6n$b9Wxnfl*+>@?k5PH!c+49V@2W>b-2bkx$6v}5*Q!*0
z+GrJ*8;%geqfhhx+tu6fZ-ayF&TY5qvzbPZB%z93kEGh^nv=OkR2~bJ)AK5W+BK{%
zGm>1Qop$LgUl#-m+XY9*8jofDf3cR}74EyMbb
zT!`0T+rWsITldasvCi%TGLsI`)@ga!>muz@+}=BnUJE$qSvxJU+Nwgu#t|BHC@0>t
zxp8Cf#kc^oSelu??Q&FftdizUOkhPEXiRQlKP|4EdivLx%Wd;mg8kFzqv76=<@V7w
z8KK0JWNAF*!ULy}yRnX{V@0oNF8TZ2R!We-Uzwr(Q5sCbacNNA%nCIY0@|x*)8TB+
z)i(d_(2ZmAg>6Qnbki>@iw`FS_F}fHS?3N}nbu=>x|`6A1wlCFTEYyERVNMf0}hBm
zKwG&ui?C#Z6G*k||E5`KHys&$QG~RwmL`}%eG_Yr@e6l^D|BcOJZ4Y9bGMYm=-UIO
zEDnIgOY^8j$M5W~B-)}eeUpQK-Nq{_HJ4Yv%2ND{t5~UMVfc6wqg#)kGRP`4T-f{R
z4UlnTmjp`i;JYAH@43G|QA+krvUITnxh9malY>jXWS4Zg1-Mb4h|L<7e-t{+R`#s?
zSpCN@m7u|)n*PS^y~XPg4Z6{7lfPvemvek`WxEGf2hL^k6Bz|thb=KE8e&qaxuzs6=#TqyRJ6Hi#J1LK`lVZ*01
z_JdYh0hzd@q<2y3a#KvY=kur<5U`Vn5Q$_zNar+9CC%_DX{(1QM)Yy@@&fbC%3c9w
zRx9<a&z)H@p=
zAQ)@6s!j3|a<3wUnZJ*(2_WorH`Z(q(HV|X-16lx3O@<^0%cMF&HCD
z8&!zz5&GOO#Gl3(2vk9r&SVqKB`;A_zak-fj9ok8&Zs=viS)wbh7vZG5p`Bw_zOJG|
zI1h1;^vC->w|TPXjA84>OkYW)0)7)`&zEP1-l6<;?5Rlbj{_b_xfKP}>)%d_^aRk5L#otpsg3WO%iACYbx5_o7#x*(0|H?^^?W
zgzulb+{;#T@HR6m=tYFfyX;#{2}I`QQ9czp2yZJQOdXKr_+S%0FK
z;pO33SXzo*L$0$_^nI?|bYf$usI85kYmLXsf(5KfBt0((?X%}S4$=i(l$Jy|A&2Lc
zxu84On_PHP6K@D~;6c^0(EssZGU)tyr`pQZ-tKzrb(p-w=>ZD)F}V}w)*iTQm(8uM
zYwGH#+NU(lqd@4P#$;gW;McJ#F2l-sXX(|lfJvmUEB&692n#
zf#
zQ|tiEuo_pJv>|dYa(4;XYWfB9`#IEKo`FS__UwjMR(w8>?u#M7?Yd&OnT~%;2jlh3
zf&`2}skUZ$fqrsh##bTJVFITG8oILaTizz4U(ci1O3YQea?_O;jL|CPCz)31BA1t!
zb8>Pj7AfZ(mX((3djTbPOGDR>71Fx2Gb#YIr28(dfRfi
zUs9x05RuDZ@=bCf*3fI$wu{SVUH^HMyR6mxGIWOg7Ey=1ASrG<%!DJb8w7Khg+
zk*Eaz#rWLn?IiwcE^hvjj60ian2*2PgT6x(Ge9w1Kf8uw}$TF;8q0h_=I!4CEKXR>c*cV2o~N0anU>a47QMWak&(>^x`&et
zegO@U#cJ4(k^rg)^43uCg+^E=5&@qvKwD#|mi`IQRrSlWL9fGB3Y)
z1tmz2PflusVVKWFj_uQsuK
z&j(_Fqv`u3?0T-{s=Pf0N;?I@dUC#}kXyONKHtvZPEHoLww9@^F4EaW4{bZIh~(K=
z+1OZGTgMOCh>`!=RoB+mwq0)c6n3IKd^Iy|9dyWDk3tGrsC^Wq$rw
zio#j!RKTVz937p@Zo2=#c2G;R(BIKRMoX)N#Wrm+a0$3gOFE@23SKUF4IneMIVVd@
z^~#?Hz8bhNj%(11SUe9*YqlAFr0C=AwpK&+)O2c!Smu?SnEvSFPjM<`HiLktm#gC}=aqwT)Xv
zL_|=5IAl;!iA2v!Apv>udFONzw|mKhC2~;%K+QAr+@3DwFm-y$NnUwgUTe-K_x9n0
zMTh(G=l!(4liA`qEN#F)=$kqS6cjmN7+6`AL}|*KcGo!DnQ&Of#Y!4WbUSNi3xz9-
z(0fCC>Q%XMpB<n`Vlu#c!)I6U|
zf62_b_fE8)*&;=t02cE7hFd&hwisi3*|!4g
zxMEKfAeuxo5VuGJ>Sl*3{Hg)o})3qk+5B856Ba
ziHX^sC({QnD=VwxAs=hA5(OLQGW_2R#cLVy-{b<5YLMjKBC1ee7v*uPd+c{t>QIC{Q
zGlY3;!~%QDtMz{ni(jo?dyV`vf0pW|x^B>
zDCv@ta?a_wYG_zVCfGc;f7I4J8*CC1tm9jl_F9Dw{aMe#4>d9)=*V+unpGBP0yw^}
zqYqu66Bhm-02#Z4l1CfeR;_uggc@qnDNd7UwU~anq
zAZs7O`5O<9K6%QbA+eLLiv1#?X>n0J1PBl$5Fj|gHMnbVmtesO?gSe5K!D)x7M$R2jRbcZcWB({#$8^MPiEel@6DPu
zf9`^Y+vmzTRr~C!+BI>`$;};iL-&EF46@C9w$oSGaK-&7XFiBtZUW?KE-k&`GTR0ge!@E?*SP?x=S)^(vCCzfrCMAh`c57;Pxh|d*
z?wGG$ifwkE!A{#@@WI_YS8*@><+`+lPPBGt$lc30U?-U*eiN1m8E@B*HOs9f@!L_0
zhP-&$SAffQIZNf3o3!-w!3(?cauN~}B#*m6v5D!)KG@pKWeL^Q)?Hc>_yvP%Wx;!E
z7U)hoFn=MyZ+X77xOg+3l?ouCGW#fS14JSFeelo~@^61{nf>;tF3CH{WQ00!ArnB3>%o2h2Jk
za95E*W_!&Z+~b~Ns3F?V$*{Sto^sdMcNK*pKt!}2gkk&-k&yf3oR)h6V8!;bI5e;f
zrpBRd&5`TCsSJv26I#OE18W-#+R}0u&@j5i(W#c9a&mSe+}=`vWxD%+1hnM_61N2G
z4{8r4>JDiIg&jJMyiCQm)1Xc!2Yys9T^-$HTRZx*g1^gRw==)zEM>Wi-mE%K(@8$%
z*9NLNPl-;nB}SGHND*janxR)cVSk+yBFW6Gx%1>dJ>mLGMD`g50b$-E3!SwVO&|1I
zrLnzz)qa`x%*jT1Uci03dOEVL9));bU!P>iCfU`j;~kH+jRwQ#0zMi;-w)%rjB>rz9PhY>vmx9>H4?%Vn9Yk2ohU`V
z@s3#7FZ!!u^qp+|aFVhIq6k?BP
zS+!bB!ExQ`F&Sny>8$Lk-R1XX5$Z9Cu>*C&9Rz{L0C@tc1CbzpMWYu8u`L
zRj;1#NuqfQ1PXd_O*{HXBkTVjNKe;>I*c+i^Bf-7+Sw&KDAi5iEs9^fq%W&ZYFT-*
zM7YW(OdihhUA?uov5^OG$kui*8+*IDh*4|R_3aVYdp*2gWieT3|O
zMZ$ecC;s_Dq*H=#7+SPYP6%KYX^t-{0+hRhXU1aE;Obh|PZZB?B5gqn@F}f%qyq@)
z=gBxMSE-7d&>&a5ptS1M-2~`|^+*ubK|5@B#v}a9?;v?j68nqGvHHUmt0BR(8^gVf
z5eo5B1$%S*L9*eED{qUq7cu6`uzY`aVV6vNNcJ_g$D(2@5gi;>TTww
zD4D{7t&QoH0t)c#r9^P@NMA!dbYV|rttg6*m$QuKgz?dx$7bFJ*Gzx$!?LndBK&GA
zq6o4Nn@JW6-d+vfa5IgNEq-Xe7n4}<6FOWE;UYHfZ8uQs-aWKK+-s6WdvVjtuJk0>
zxl;S_qJw8Rvyywe
zm%O)WR2aM;;t1^wm)kaJ#L`Jjf~u^>Z8rwU4K!Bb?|lC`spS`kmm~DS^SuZ)Ecw6k
z^tR&t;_EtwZ!H#mWZQeZzRSEyH+!0(S1n<-D2Vq8cfm3AK({iw^fS4D%*d~wwS`Lr
zegHP5?DR>VAKqv8sbU^4XuN3=KpGcn@`(gdnB|fY{UMW3R?ZA)lrAtNK_u;ES?
z`N=IYr0vFE$d(1Tna~RZTR4%Qj@B&hG#eVf6_IPExNdvmhC!`(dy+H4)E&3wifWku
zoP1^wuCSn7_k?+yz4mZ26}EQP>bzVp8biqx=tkGBD{p%|Qo*&hG`gmc9hn2QvS*ru
z&YPjX_vtHv$4Z~*DLwI4+^*`XwkSOr6fza0V09LZZz9W&xLQbCV3W)L6!_D}^ek!4
z(%Y#hGc!}=u93Kecw>g;s5C?^_!e)7lt-Hhgkt~E8D;Sa&9J05IX<+#&~5jU!H24t
z>igQuW&NJHc^F-~%F5?sfmwJIY<^kr!r-84>gqeBdj>!DUfnlRE|r{u{hhF`Sh6b3IuMsR4FNpTN%(|<0F|C|bLwJF&aGW1t=GWk`^-crn=7ZsUGW(%l
zWUKOUzH*Y&x6NjF>5p4m1ahn7!M-dLf4zNIxIfi$#3G@L|8KplO=kL
z#XXyN*2Sh<8Y-~@FK`7e;*$^VJ)q4nK9|z5vck&+3TVR-#(LpUJ|OJ_+K8rYE`TkE
z8o6G$p`}ZPdD|cVUHIEct+|#vxS}?*sG%wdu(C=Jb^8dk3AT|^$+zl
z%tmpRCk}hLksUifI+%<6{}k@~_iwOh;r~>D3rBglid_%)7PPPalIP|-m2`9!!Al{T
z3BO4`8hWN6RK7iI!}l)h4|Sm4uUpoKmSkASZ&{x`pMsp=PZcXU6Maz`N(VZ+z~}Os
z_cOR{9qJV(G&UCC(6Qhp?Yjr^kZLhJBwK}%X1f0B-2TcoIujd-fenbY?zxloDq?E&
z+`iz%+`?T_y%&A&(1K5Ftz`@v8(EpdRQD&={dwKb6%W~GVFA}0S`OPaae*tR>FSkb
z%Z&jvt9QBvsldmK8K|~
zc5QHUB-3-iAu%1CYzi*%oaoX6e;IKngv&t;3U3(vXZmMHzNGeTwU?Rt
zd4DJc?L~Ys^I^dDDUIX%#3!Muv4T4vzoDiC)*t*MS1SU0cX8kDkqS9Y&LK+ypS={biAIR+>A!=g^xK^?mY0~*1G~l
z+(Zt!Fk{F+Y8FvpV2Nd~Du(0n>nXllHx@L*r_7o^*VhTX}0Wsvt^=Y~4TS6VGH
zIvGTbx#-3IE(Yl{5~}TmCK9B`oU-us*qM$Us7BW8
zNTmg8JbxUX-2UvRKK-0Jl25+-Fppd9VSBAV?6n>GDtC=)+f7@Rv9}jxX)L=&nF}55=AHTcE7O=
zbW$&QODl#C!r#~VH9%__$VpkLPA$khK)-TR6+JNRDmM3BE%SV&&MlnFSK|RvXW>+`
zpuP}0^+nFpPe1W-q|TzI)UvqXBpNM??*Ra<)I|mBjdOT8$bBi4G%xj0O}?M3qkX=r
z?TgFs@mmOhh%w03{C!S5LhVdzUl2ZCZ?gc-wU~4U90x_VCF$KjN)TT$9-OFUOzJzW
z3lD=&_ev7t@O*igzn+ZrCv(kK8GGTkYR^vsg};#M|Aiu?`7CrRpUJDKw74zQ9j}~^
z=N1;czZPb|WBR&cb2m&@nbpADQBm|nS*vk)oqmj#P^w033$+xP$9NX}i<)CMRFk?5gPG?IS8;;05UyENwG-9p?sklr-E49WeUlI=`UNXxr{f6gQ
ztdkNSU6vZc*;M7Zir!JLK24G_-l{!kuCI5cJLUcXAbm+a>vg@thRWvfK6W
zg_5TD?2UHJ;R|)SUTvDzp_O^Kjjk1(bl!oDzb_zRlRWeo*rE?ADGT!oADT0uXD&fHH=fs3quliohb!DjH_
z{US7Q(ML$6>v!Z#vt(mQb?%w-hs
zt2FwP$Mb6RWolb1XR`coN@C$Y@WWk!rOM63UQpIVKu51ZC((6&(7AMa9UbMiifiXY
z9BOrPB{*z6wJt^A_K%Obm(`!%nn?$~Y*DxJ8A1PC43QFMKmvNIv6faZ$>MZ5Gc?s8
ztx}gI3C~gZv$X{RaJ66mccX-vtH284B!3&l=L}aF`N!GsWAer|pX|fGURIl`#yI?r
z206R6<7RDDXA*%G-)e6kkQ@QsW23Lts|V!fZY$>|I4Ipstoa=%7J^zM>LQMCg3P|S
zK?|N3@%ZM@cr5n?Lj(J|#a*lGSig5FU8YR~4tX)-VQ%B{3^O#(Pu5Ahw>LK+T6pyc
z=mR0ET}7=fWnyN2=mBvkO+k`kWP4kps68Y~d
zBbHr@MG3LWZ2xGcxsC6~a;iPhrw2ncbbT+Tb2Fd9-zc+0oy}GSN{;EgbuIl^SZB0^
zgS;b%3t0gS7jp`k-tNZb>+heGlrr&Us@XP`A6uv@IzGz;Y~qw82Nf{$aXE6ajURDE6p<^}<}cPTnlGHJ2KU=4
zTlKmSXZEF
z%473uFol#Dhf!%cb^*|=|K%iDe^LM?N7%r4`x;XF82D;;UrUN*kfLHw`dB*^{{4(Z
ztUIzCNb_pO-K?c2q`__P>@6e?u42zPXy>jT`=(oQqeD>eMG?L_x30F6si-q
zjI-eK*1hw$&xuck1TCrIkj!3tz0aX1S8kGH_f{g8#O#dR0I%!qiw0Xsa|PQdUuL{z
ztv+hU>dsMT|ld5At6solbl&tEc;BQR5U3|BG>*pTH{)i#HXuc
zVms;R)}yj4Wkle82$FA1#w?H^x{UnV-&faSk~7iNJkeUFA~_is@BH3?-3X^5RQtNS-OW&{Nvz<6Kzz
zaaW;xL^_bkEF|rsq3WbmqV@O;xpOUf4q!KXOu{`vLA%`>8>fbZjo*(VKju!JjcHVk
z(g`Fz>sHc@K31nRl^hRB|8Y0YF6dkk
zzyXZOE)b#$|N8nQThF7#Jhdyl(X-Yh(oEuRF1``_W%~hFl1xIvPlR8lvYf+iQSvOn
zg6wUWlF%1*nq%Q81|Bd41H7?R6h5Gb>iw}u4?;y@y?&1n9Fp$lr-Xj6a&bAYJvVAQ0orJ^U
zb2tu_$d>w~4tcDb{KKX_sM;>vTw>Q!pUIa5y<_K6c^a(c6tQ!9%1_Zx_kI%b+I=I-FsW8--|aox9ej4?oyUwNXq@#QZk{VG4rYKYb4&uC0o09I7jnBscV6122
zYtP>792_|p21i_pp%K`uqvEMg_m(rn|c9g5~@P`1*1k6VGKMeK|?I=C!({
z$|h^6pJu;ZG3I2dBrE(`WWW9FT@P92!R%FzYFd|tq^VD9dF_o7mt0zU1Uo#L4zv_s
z2q+WbyV)@lw3XCqLx`esr4w0yJIUaB
z35ezMz!P|?7!&gdwXYK%sFhOup-!S(-lOik`3fb&y&vA{=@3aCI?#;>5ZAWPqK4w~
zk=5gjyq%}7t*H2%b;w^tn-t6N1R2cmUUgH@IE?9Ma5(xolYpBuy|gZ
zum?19dMXA7_v;P$3sKShl6Cw)9RiK+xnI7*FN0=tmh1^c12rE~&De;F7doXzm&mWrbdOWay&Y`>hCJ-8Mj?)G9
z%Rc-2O8nCY6mo>y_do%*OdrT{^Qp+K>~%BXmrv(1+)ujN?we&xLlznub9Z-M1_tX{
zx{<=cOkp?5>x5S=bSK#dVX>~@$nYdkr3p$C8L1*_eb52@DLiA;|fe0(~3W{!&JX>PhGq7L`(Qzq=SO~}gMtLQ#Vz$>_B
zO#UK=xUBo>8k1tA5p>aC*iVMFXQyWm7t`J~e>(!3;r*A9U7*50<&gf3^()YtLE(a&
ztMseeEL)HmYC4@d4P57JOFz#@b)rvj7e%+rV!4PF`Sr)2H|0?fRsIW)tGR{`_bQBV
zKLyUI>$$KoTJHyfm}8!u>_;6Lttq^#bqO!<1PPFe~U&E?aNDYzhc
zoH3@^nqadTaj5SU0Ru!9K}Uhb^)a!Y>AtmfCzna9@Y9k#o4Cc*x~r~Smv1fP-7+Sr
zAoWc+7>ngCqhBn%K;^8LcN$kmGNmIh*%$vwn4$(!5V;DKU)DguWpJEO;8_jMkae;W
zr~3Q3Ase(?rT|XcPx}e#^{#--LvZDUw`VMtq~{U}B0#rJ`5@GgtYW7DI?0S}z;6Y@%UF)rTD&!m#cJ}0f9287R(`Ii$NK!8R;Mu*hxo|I%b#-;?COPb
ztWM0e34G1pnbPvVm9glXb@Dy>H3f=K+D+6-Io=j4H6W?vj~yh@?ogt>SJJ^hWu|#Q
z!mRS3w5I+DBL5y6aC$r4v+JW323}mh1Qu2AB;>bd_5b3P&Sz@+TKw3j|C6#@t>dW$+uSU*jcv)Y
zY8R$YETpq2xPU;bv+IuM$4b9P8$Z7ekx*Dk8;8ScD@>hp$sTAYHNxy$n#a9#=*Tpq
zep3_epuG5$MZfD=w%!AlZ`$_NNF#T(oze?CvDhQs5|$wVlHa`z8hW~sw5Lvffieg|2Qil01B2Emb)%SQRPirq$GlKN?P7=_rfrGLm(
zaIn9NG1O=a>&6~ZM?Y+A^)u?{w-AkHx8YO_>}ip~4~X$re}%9$SsEz~
zvu+lM?MPiod^6|3kYDjl*ToMnxjjXkVD!V$yN9n={NT(aO@i>Ly=N}GX&HaLcJEs}
zi&n0uwzUPHj<6?DIYV56NmPywBk>_l`M2H5@f?Q59|#F2$@pqqSNO9*M2HvV)*ukk
zgkN;~bNkV0KTP5|6=7n;$R6u$2CRVq3^JsPvF_q`-1NSn2Zkam5!IUQxSFePkm;I`
z^P)j`IP#x-4h)QwDfd!R%ep`rU2beH~j*_x+8}FbNG%HcX4YsibRu
znLPJR?JP+{C-Dx-Tff0LAhdZGCTqB|vI2{%cTFXE0L($IZI*uJt_r{at&osPy*AJN
zGu-pXfbHRAS{jhQ{9s(Zj<=b^kF
zdHkDA1T*t%D}s68M<=wM4i^)VJs`x!t#u#-fbA)A^kl+Ddb)ss3ZwTwz7{C}Lg9KkyI$
zuLgW9-A-0~vjLr4o3$Kqn-5;c5o66iGdu*rO`nG``2fflUHKq1&AFjBZlthRr;oU7
zmj+{{mIa<8%q8CPsE-O2@EpP3S2LzZMN8f4ZFCc%C>~bJPW!Dk+?$Ul9yqW_!tzTv
z;eR+Z5sXOTD&VwgV8ZF}w7%$koW|fHzud5|V6I^Y;0v$Pz1rFB&|Nr@CvE$2^if{q
zK$9vb>~AD|wHKT@Uc*hIIK#V;Z5=#8CKEr;B&SbmZJMNh?+%bfA@FaAa{KWHm359V
zshY*O^CLHUYgGi+f`1rcz`=jN*qiX5tkeh2g7Xt3J30ze2TDB$2?jsjd4fh70SxCn
z#2kDZW@m<_@5Nq2;9++oMif$>Lsi@4QBl_NMEx#Vd+xsebUCOA{gRfyMc1#?h(~5v
zX;D=TZdC}b@fTdHOGkBf+5D3TA9_fTEvQ}|wPn?$Hq{6toz_b!^|>Wf=i`qM%(azQ
zSh+EyA=*Q`t@T;KTqT!pQCbr=sX`YKVqin!g|S-!pt2XDCOKNyI(Dx}|9IN&gm~yp
zkSX7DAm7b!1Hx*$mjemS31YJ
zvO$xHq|yZ1Jykdx!&Ep3*di?AlcufIau4|tj{j;%$zuQDDF1oI_x|{rSwF3b?g8xR
zzpRWu@(aZt`=~c=l3$jd!I)xkY0>v)9eLj*THl4uW|qm5`h1Qo1vJhTWcEn0GVcDdI?5SPRM&;CZ4I*%x+;(#C|6>fyj9
z$+D;Aobdk+$b7sT3%yE2^xx|n&0nv4gw@$$0ghLO>uT-?+C)x?vn$|yKqt#veiCn9
zjANtN>B=2M)B7JD(}9i&7#y;}v%|rS)?rmXm7)taHZSOw2Fd8J;2}02<>>ZLxVYp;vt?$Seukx@VT2
zFtcT?>AL{L8}UVhTYoo#k`wpw+6bFCY4L$M`$YY276O4pi5v|P7RR>RyZ$zYgCW@}
z?0dDvu;*m0HrbwU!Z!G$@9<`ma3X0?U0`y%%ORMq=g{<8QhX0(*otmfp?4kqCBub_
z#~r&h81@h$CZ5gMjel3;Z81;#IDuWhu$eV(Gx^@4u%+uWu42Q)_ZZ3e;_A1tg>4mf
z1h5F!o((~@Y~bw2o#F2mF89QR#xqm*>xY4D
z=oY3}7z8FJR#qnTm;sjIHsyIOzB_A5nc_9W&5Fr0&59P1<*%?HMy5(CHDLm`Ax!N%
zTf{MEdgtqLks)6tttSQ)_9loY3cu78PqfI{i%h0g*Dv$ww%~9p>ttyed}~MsdZM>o
z3x8o$`feAB|CFKYSfSjR9qoynqX<)!72Ss=+JC$zhl?T=B2@7d5q2G-5O(n`9D8I&
zEBV8E>5&JpQWL+fMY!{W&*ovjZhp+T{3Aop;Qe6@di(`2yWm^R5n=QC#mN8np=tjnqT=+NSv#94_S~MCbOr&g>j24L
z?!{MhsVo#7Wf@+Qi&?+zB!)95E_GGRMJ62HL%O%9!2DWhzN1BG`>L3ZC52_mAd~wi
zn5;PnHdG3!YnVa>^lre7U!b3Uw2w05xWlg86z589aRZ_J;N+(HghF-O3MPmwtvU_s
z@gZADKuYTBm$yu|eszS$Dj_NPZd2G914;__J#W7{?m=?1@DnxBb=+C9X@zY38`qj#
zL7=`LHd!&5>ch_zIZ9yA
zYP`Hydt6Px(ic^}wwi3tw)hJdVfsV)@bxF{v)=uwXESchw+cK1xHvfCHji=l(2(W8
zLw~+nim>z(E~0>kVB-ZBY7KrL7Ws?ss{2xNoWTke8;};@%<{2DPF%5o*-c!
zstZwi-e%Eux)!>IA<X>)tF?OXxFl`jpqy1tH&vR=Op
zfEhCmv<0susyxYp4x3{LZ}p*J`zMbt0%!Yc4s=5tIVLB@g0x*CTAO&=bog}&Q^txc
zyu=tfogpD1sU7iaN>Ua%9PB!vgdM*NvQ?j-2ryaQCKL#fR_mb%^-(Nn?7M_yi86;`
z(ffz3t%!5NVUKEe&Ma}?MPioXzFn*3Fk%vtQKqKt)#K*-DL$jEtXa<%VyVM^G@lr+
z!xNZWX8UTZjBau2o90}Y?Bv@-ldXSU7)$I_QSVovMJ69xw5gk5f+4)Q$&u@~J%p3iR<_OSdRK<4sbx~E5dU)akaG7b~G
zs(YFzMLVHH_M#$C3a
zfB~UTZ{Xlwu+uN2t`V=m<;?)Ny^$Zk;G$vj>ToY!j$BWa71-nX)bvPxFP+efXp_W6CHyZg{`gt$TK|Hf5B*m~ULR-SE>vE*YdqCS_
z*vMPLBaUzRpZJoFfej#)J>2=6x00|$ig^$7J`c_oRC_S*L$FQ;hfp|0G$7P;`!+VR
z|8ASY9WzHGSwe^8m
z4ORZ$QA~=Z3jcI-dZ!k(U6&r|pXKk;>%_1UoPX~5H0P6cP=9vQT#Ws_`)}SNmg)}^
zWb~kbcMgx~Prl|qaQs+qbM`ZA7VKx*SJ|7q^EqN_=}SG*7kdOV>z6K;xCuPjY(@46
zSP!EL-TA
zHKM6n=A~8Y_zJS_m+{LiYf~oX7x*hn%CSC!0tY4a*XgtJ8$*@=OSS`|NG;^V8cSKXK*GGtyyC1`!cPw7d`@7Vtfg=^yIAddev
zvWF9kt%_WkI&S!H7)}ZQ|A672S_Q;ec}CE?Qodh7tp5KIqaI2AjR%xN|FL-&5@@CV
zyRx=|y=LJ`Qvf^#p68za2U}3O4HRnsPc*J@AA%}T);y6KPR9!GWGUkx4Rm|8)DbD(LFTCpi
zWfCz}Uu+=em)bBF3lcTD{HjnfGXyN#a<4){^B$kps##)j
z0X!AcHb&GfVrV;Z2hC{(U+1!mtl&OO_?nYRln0@@{x{8f%`jPIcR%-Bb0{J0cIYJs
zA>&TUB(6XAmsE3(DKB<-@$Lep9ZrE)OxCP=pMJ7jn2q6Oq+}U>yBRV&J@1R7c!hK4
zm@;#~9dh1bC$(c;l}$&__bp^OWW_}^_QB&5ZN;2QO_8Cx)S;-GG@yPYhqS1$`3IHT|9!NsCR_Uj*;
zTw5$|19-rU$FDy&sAccp#R~0!47(7W;x+3R$*N>kT>2*|N-Gb=WsJVO5(XM(P
z6!;5wo9dyupx@==n_38K>VWc6s0KyyEq(lt%=oe3<&e~QU1ul;UipTA%NmTj)g%yc
z?b+Xz9X`LiGzY4YPoI`dDnJJATo|+;5U2I%$Wq>;w7
zjuC7T+<8)S@ppxT)6iXCn5tTxj?PrV<`+Lwk+$YjoJ6{*@@v=%0tKCsxB_JITPK5&cuFdho{0pSJVo
zUvgSshZki|qtgX~*d_f1J|79cUaMr>Zd0>x#aJ>z*%m-@YcI3NTEtW>oa1RXuLg1t
zsH+bqT}vY!sF+6^R#q9^a)nx-q{M!uej?5sJ+>fNjP9I-Bm$Z^`ZsSSe-a3)@5b{va2CDMtZ@S4
zU>wI+{75O0x&quM4B8LZyxz|UG}TF(y59Zu#NxrqFa6&AwS(r3;!VHvc5ra;g>+Pz
ze&bjX@@_|}kcj%|1^R!o;sj*yfUT}&@&T3z6fd}U!-ZN_|Ke(`BWYYV{OI!>EMhIUB5&FZM7CRZLD|o+PJoW<@K{bN
zib0{9GN4M<%hi|-=CmG(QTpfWtWV4gQ>ijuU*~R*2t*KcYW6#TZqO{TzDxl(_62yj
z9O-X9b5jV>V0@-~o^6pzD^KM?i1b_S6RX)L-vWt`cneg=UMuI=ATwWYpa$nnoDI!E;z89J|q}8qD>(y&d$oX3G6vyaQ8oD~4Ga7Eg
zI08OwsoM>AbD3d85z|(7*k4Q>L@|11>&ifv&@W9?wH`LuPxF+Xg&Q}eSFt=KI>GdpSiD#t}UDaHkM>1SK3-|U4&
zPe8uo%Ybu|L_<;r{Z5n?Lf+B}J}ITv{Z?6Bvw*E-(W7ju@Y;-atGhhvmf9#4KHC-(
zIr+r$KNKR}`@C8i`79qoE?10;(lcW#g}6K^c9|DPC!PDweU{km@Q3WZ49nMB>116W
z4(St
z$d;7(1{Ddfg`rW0Zacb+8e|DBIF<2O@R4<9q%S|{5M9D*@M+&D1$&xir2&*V*Jb(wh=lWSbON9`Yg3
zLo(%)CE6eX-
zTt-8YNe>1luepcI0;2VIPX*c4S(mSKMu8R&MiX%jt_LhQW)DNf3$4Bqs9{6Sc7}$|
z@_wFCHLwJ1@PKlu>NO^dn8hMM?z-h|pz3kxMfrw!+Gmq$n(zDJ=k%y{&b9vmy%2
z@axqivm(`k`k52HVL_1=7rhDQj{W)Gkp4$>UBd>ZPy7$n90pq7lmED*1FEC)=2Tj1
z^5eBQv4fXWCJkBi4G(jgomERBBhQ_NRs^ws1wnGvlG<2
z<*I(PbTfSN!WVJ=-jo_GZbvDDG7Q>=brtV9_BZg494J}i{xmwL1=m0UdR&m)X
zf1^964uxmI9~+8{^_%m;n#5+Zk+Jy_7Xv-T4%O{tGumgTS4zvS4XJ?ZfvH!LD?jg{
zUzT~44waM26Z}LUmNe(;SJi>^wD$h3tg|~mwTV1MY)uFYW^C6)>bz;XTD2_F@b#AC
zS_6-PWZq|cjd>!g?k9to?U(b*%@*r{m^-uD{j=U)RBr2((ZaPwfbq72bj&Qh8*e~|
zz~ebti~(?O`FyVnKaC{<^!K^0odZ
z2bvAP^qARbV2AYu!`+u%qEa&NW97g+jnm>eHbW9Yz}jFC8vg88sl%b`s?V2`hD&xfw!qvv6BIs+SD-2-*-p#9ue<>p^%EX;bf&m&yn-${#rq!~a`EBsBRp3R|3flcc%
zk);*iL*2iy_&MbuP{hHyY}DNran1+Gyf;Sx@&uY-GH#Q?b3s|rR~sySt=tIHYZ%#0eaAy08=brb2x@s+))x;Fj?Rr;e0pg=J&`NaE(E*~+7V4nk01Xw6VnC%2Fh0s|6lv4t>)5jaE(9N;S#z;cptQgQH|`2$yQ_B$3pnAtmO+2aNm5Tu
zu~(nPmB}KKk&l}8o1P0*!6}cfUFDmjXA@iz-u9N|kmIm6Qh8;jOe3(du+L=1uco64
z_t%XTKefw-zE*={^Ab)n(R=J4ml=M6(8_*(7Kq#pL(|k>Xuy+A9pW=LYtOGM^m*hU
z`qX;D=s^R;*a$fO*|2em=FtJLrr!M#LRDG9c(X0JuZOq3*T`AI2&y6_C-%!hGo4y$
zHr|M~D4(W)tnoS7vu6V`+c+F%N{CEQ55U+Qq1uCCXSCe!htTea)%gN=@!H~p!#O`Etq`0AW?3TJJZqVZ4+U@?ge7(rnGFxC;5M$PwjT>?UBG7HmG21
zxEj`A8Tqv+9kZ+(2~8=kE%dVXne9(~FLsLVBjWbGYgdwSD1Dj_CzK_;{lkFOv5G2K
zo9b6q)7D@{%{C%Sd$tZBWpqV6@k!H(V_NG%PR-@2UWxx<{rhBu;T8Xzic-h;Hp6$z
z$X$Cqd>a(0IpzTKCt0H2by;q8$PmT}Maih)!3t^fAiKwVPXggv6IZz$f*9+WkWc1=k)Yeo9W977^}#8
ze@P;_nn_nv&3hjhFIVjxhB?S$KuC(Tzs@|<7qCiA}n%mXw0&Y#MC
zh0D(*4xS^48U0R>*bvW|F9da)jvR|M?5+Qe{%o-uFd%NkFCT>HHh~qO5
zfS|D1WHH-|88MUY7otl>1$3#AJq9)}OtkTyV@{TzUnAHVZ@9Yy_@WMw_
z)az>R7^1`cuEzM4o!*$UiKshZ@ID1nuPQP4GYC2%NA*^D^%E1l+{YGX6f8ruQM%qN?#@~CM9BlAG0jDVu*i!?fJ5i9Z^=ps~d{nAqh6y*`?f2
zp4a!<`Xa6A9Oc}2&ZH@j>KDkwehq?V@w4T^i6`u436-^ZpXTP4dmgjYEUr~CQU3Xo
z(zoIdKC_{s!QwhB($Y}2;SeDd6N5~j#~FL&>Ae%=s>p{{2_i@I*vk~v%^ls{-L3Vd
zl0^{vNM*=jr_8$jdbwCQgPq-okbBbjfnIuzo2qj>EKz5e>QqHMS*1G5@%ysurAwDS
zTGBjQcDS)}Vx5f_S2iA&&2FiX(@9ru*k|Sa`lE^C+7lh6GluwUo^{`bm2_@d*&mr5
zF)|$^P#*lK@;;kZxrW{--P}y9JzW3njgVBjWPOL~E{p4!m#%-+68H3p!yYAbv#USW
zh#kffDZM$TtnpG-)ow*ra+?0Lks%4r*sD%Pm@3x0PP*naPxVo?Bp$6FL>QlIm!=k*
zlj{{LW-_!n^Ix;tym>P*rTOlsnHK;6B8Q;(niT*5fLp-KkIadUjXi($`!~x002Pl0RR9%?g0STYF8n8
zFEj4BTq<3fcYTz0000W_W%F@Aol