From 63a639eb22441639c16926076f0a88b3bbeb1dfe Mon Sep 17 00:00:00 2001 From: "rjwats@gmail.com" Date: Mon, 26 Feb 2018 00:11:31 +0000 Subject: [PATCH] initial commit of C++ back end and react front end --- .gitignore | 7 + .travis.yml | 67 + README.md | 66 + data/config/apSettings.json | 5 + data/config/ntpSettings.json | 4 + data/config/otaSettings.json | 5 + data/config/wifiSettings.json | 6 + data/www/app/icon.png | Bin 0 -> 8940 bytes data/www/app/manifest.json | 12 + data/www/css/roboto.css | 22 + data/www/fonts/ro-li.w2 | Bin 0 -> 15440 bytes data/www/fonts/ro-me.w2 | Bin 0 -> 15552 bytes data/www/fonts/ro-re.w2 | Bin 0 -> 15344 bytes data/www/index.html.gz | Bin 0 -> 305 bytes data/www/js/main.73ac.js.gz | Bin 0 -> 155307 bytes interface/config-overrides.js | 29 + interface/package-lock.json | 10960 ++++++++++++++++ interface/package.json | 29 + interface/public/app/icon.png | Bin 0 -> 8940 bytes interface/public/app/manifest.json | 12 + interface/public/css/roboto.css | 22 + interface/public/fonts/ro-li.w2 | Bin 0 -> 15440 bytes interface/public/fonts/ro-me.w2 | Bin 0 -> 15552 bytes interface/public/fonts/ro-re.w2 | Bin 0 -> 15344 bytes interface/public/index.html | 16 + interface/src/App.js | 54 + interface/src/AppRouting.js | 25 + interface/src/components/MenuAppBar.js | 189 + interface/src/components/SectionContent.js | 36 + .../src/components/SnackbarNotification.js | 74 + interface/src/constants/Endpoints.js | 28 + interface/src/constants/Highlight.js | 4 + interface/src/constants/NTPStatus.js | 32 + interface/src/constants/TimeFormat.js | 4 + interface/src/constants/WiFiAPModes.js | 5 + .../src/constants/WiFiConnectionStatus.js | 44 + interface/src/constants/WiFiSecurityModes.js | 23 + interface/src/containers/APConfiguration.js | 48 + interface/src/containers/APSettings.js | 70 + interface/src/containers/APStatus.js | 165 + interface/src/containers/NTPConfiguration.js | 37 + interface/src/containers/NTPSettings.js | 70 + interface/src/containers/NTPStatus.js | 189 + interface/src/containers/OTAConfiguration.js | 15 + interface/src/containers/OTASettings.js | 77 + interface/src/containers/WiFiConfiguration.js | 53 + .../src/containers/WiFiNetworkScanner.js | 118 + interface/src/containers/WiFiSettings.js | 102 + interface/src/containers/WiFiStatus.js | 188 + interface/src/forms/APSettingsForm.js | 124 + interface/src/forms/NTPSettingsForm.js | 113 + interface/src/forms/OTASettingsForm.js | 132 + interface/src/forms/WiFiNetworkSelector.js | 102 + interface/src/forms/WiFiSettingsForm.js | 237 + interface/src/helpers/SimpleGet.js | 35 + interface/src/helpers/SimplePost.js | 38 + interface/src/history.js | 5 + interface/src/index.js | 16 + interface/src/validators/isHostname.js | 6 + interface/src/validators/isIP.js | 5 + interface/src/validators/optional.js | 1 + interface/src/validators/or.js | 1 + lib/readme.txt | 36 + platformio.ini | 22 + screenshots/screenshots.png | Bin 0 -> 41951 bytes src/APSettingsService.cpp | 49 + src/APSettingsService.h | 43 + src/APStatus.cpp | 19 + src/APStatus.h | 25 + src/AsyncJsonCallbackResponse.h | 31 + src/AsyncJsonRequestWebHandler.h | 115 + src/AuthSettingsService.cpp | 47 + src/AuthSettingsService.h | 56 + src/NTPSettingsService.cpp | 94 + src/NTPSettingsService.h | 56 + src/NTPStatus.cpp | 28 + src/NTPStatus.h | 26 + src/OTASettingsService.cpp | 67 + src/OTASettingsService.h | 44 + src/SettingsService.h | 146 + src/WiFiScanner.cpp | 38 + src/WiFiScanner.h | 26 + src/WiFiSettingsService.cpp | 85 + src/WiFiSettingsService.h | 46 + src/WiFiStatus.cpp | 52 + src/WiFiStatus.h | 35 + src/main.cpp | 62 + 87 files changed, 14975 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 README.md create mode 100644 data/config/apSettings.json create mode 100644 data/config/ntpSettings.json create mode 100644 data/config/otaSettings.json create mode 100644 data/config/wifiSettings.json create mode 100644 data/www/app/icon.png create mode 100644 data/www/app/manifest.json create mode 100644 data/www/css/roboto.css create mode 100644 data/www/fonts/ro-li.w2 create mode 100644 data/www/fonts/ro-me.w2 create mode 100644 data/www/fonts/ro-re.w2 create mode 100644 data/www/index.html.gz create mode 100644 data/www/js/main.73ac.js.gz create mode 100644 interface/config-overrides.js create mode 100644 interface/package-lock.json create mode 100644 interface/package.json create mode 100644 interface/public/app/icon.png create mode 100644 interface/public/app/manifest.json create mode 100644 interface/public/css/roboto.css create mode 100644 interface/public/fonts/ro-li.w2 create mode 100644 interface/public/fonts/ro-me.w2 create mode 100644 interface/public/fonts/ro-re.w2 create mode 100644 interface/public/index.html create mode 100644 interface/src/App.js create mode 100644 interface/src/AppRouting.js create mode 100644 interface/src/components/MenuAppBar.js create mode 100644 interface/src/components/SectionContent.js create mode 100644 interface/src/components/SnackbarNotification.js create mode 100644 interface/src/constants/Endpoints.js create mode 100644 interface/src/constants/Highlight.js create mode 100644 interface/src/constants/NTPStatus.js create mode 100644 interface/src/constants/TimeFormat.js create mode 100644 interface/src/constants/WiFiAPModes.js create mode 100644 interface/src/constants/WiFiConnectionStatus.js create mode 100644 interface/src/constants/WiFiSecurityModes.js create mode 100644 interface/src/containers/APConfiguration.js create mode 100644 interface/src/containers/APSettings.js create mode 100644 interface/src/containers/APStatus.js create mode 100644 interface/src/containers/NTPConfiguration.js create mode 100644 interface/src/containers/NTPSettings.js create mode 100644 interface/src/containers/NTPStatus.js create mode 100644 interface/src/containers/OTAConfiguration.js create mode 100644 interface/src/containers/OTASettings.js create mode 100644 interface/src/containers/WiFiConfiguration.js create mode 100644 interface/src/containers/WiFiNetworkScanner.js create mode 100644 interface/src/containers/WiFiSettings.js create mode 100644 interface/src/containers/WiFiStatus.js create mode 100644 interface/src/forms/APSettingsForm.js create mode 100644 interface/src/forms/NTPSettingsForm.js create mode 100644 interface/src/forms/OTASettingsForm.js create mode 100644 interface/src/forms/WiFiNetworkSelector.js create mode 100644 interface/src/forms/WiFiSettingsForm.js create mode 100644 interface/src/helpers/SimpleGet.js create mode 100644 interface/src/helpers/SimplePost.js create mode 100644 interface/src/history.js create mode 100644 interface/src/index.js create mode 100644 interface/src/validators/isHostname.js create mode 100644 interface/src/validators/isIP.js create mode 100644 interface/src/validators/optional.js create mode 100644 interface/src/validators/or.js create mode 100644 lib/readme.txt create mode 100644 platformio.ini create mode 100644 screenshots/screenshots.png create mode 100644 src/APSettingsService.cpp create mode 100644 src/APSettingsService.h create mode 100644 src/APStatus.cpp create mode 100644 src/APStatus.h create mode 100644 src/AsyncJsonCallbackResponse.h create mode 100644 src/AsyncJsonRequestWebHandler.h create mode 100644 src/AuthSettingsService.cpp create mode 100644 src/AuthSettingsService.h create mode 100644 src/NTPSettingsService.cpp create mode 100644 src/NTPSettingsService.h create mode 100644 src/NTPStatus.cpp create mode 100644 src/NTPStatus.h create mode 100644 src/OTASettingsService.cpp create mode 100644 src/OTASettingsService.h create mode 100644 src/SettingsService.h create mode 100644 src/WiFiScanner.cpp create mode 100644 src/WiFiScanner.h create mode 100644 src/WiFiSettingsService.cpp create mode 100644 src/WiFiSettingsService.h create mode 100644 src/WiFiStatus.cpp create mode 100644 src/WiFiStatus.h create mode 100644 src/main.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c96b3a --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.pioenvs +.piolibdeps +.clang_complete +.gcc-flags.json +*Thumbs.db +/interface/build +/interface/node_modules \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9443843 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,67 @@ +# Continuous Integration (CI) is the practice, in software +# engineering, of merging all developer working copies with a shared mainline +# several times a day < http://docs.platformio.org/page/ci/index.html > +# +# Documentation: +# +# * Travis CI Embedded Builds with PlatformIO +# < https://docs.travis-ci.com/user/integration/platformio/ > +# +# * PlatformIO integration with Travis CI +# < http://docs.platformio.org/page/ci/travis.html > +# +# * User Guide for `platformio ci` command +# < http://docs.platformio.org/page/userguide/cmd_ci.html > +# +# +# Please choice one of the following templates (proposed below) and uncomment +# it (remove "# " before each line) or use own configuration according to the +# Travis CI documentation (see above). +# + + +# +# Template #1: General project. Test it using existing `platformio.ini`. +# + +# language: python +# python: +# - "2.7" +# +# sudo: false +# cache: +# directories: +# - "~/.platformio" +# +# install: +# - pip install -U platformio +# - platformio update +# +# script: +# - platformio run + + +# +# Template #2: The project is intended to by used as a library with examples +# + +# language: python +# python: +# - "2.7" +# +# sudo: false +# cache: +# directories: +# - "~/.platformio" +# +# env: +# - PLATFORMIO_CI_SRC=path/to/test/file.c +# - PLATFORMIO_CI_SRC=examples/file.ino +# - PLATFORMIO_CI_SRC=path/to/test/directory +# +# install: +# - pip install -U platformio +# - platformio update +# +# script: +# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N diff --git a/README.md b/README.md new file mode 100644 index 0000000..6bb6405 --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ +# ESP8266 React + +A simple(ish) framework for getting up and running with the ESP8266 microchip and a react front end. Includes a GUI for configuring WiFi settings, a dynamic access point, NTP, and OTA updates. + +Designed to work with the platformio IDE with limited setup. + +## Why I made this project + +I found I was repeating a lot of work when starting new projects with the ESP8266 chip. Most projects I've had demand a configuration interface for WiFi, the ability to synchronize with NTP, and OTA updates. I plan to use this as a basis for my upcoming personal projects and to extend and improve it as I go. + +![Screenshots](/screenshots/screenshots.png?raw=true "Screenshots") + +## Getting Started + +### Prerequisites + +You will need the following before you can get started. + +* [PlatformIO](https://platformio.org/) - IDE for development +* [NPM](https://www.npmjs.com/) - For building the interface +* Bash shell, or Git Bash if you are under windows + +### Installing in PlatformIO + +Pull the project and add it to PlatformIO as a project folder (File > Add Project Folder). + +PlatformIO should download the ESP8266 platform and the project library dependencies automatically. + +Once the platform and libraries are downloaded the back end should be compiling. + +### Building the interface + +The interface has been configured with create-react-app and react-app-rewired so I can customize the build for the MCU. The large artefacts are gzipped and source maps and service worker are excluded. + +The interface code lives in the interface directory, change to this directory with your bash shell (or Git Bash) and use the standard commands you would with any react app built with create-react-app: + +Download and install the node modules: + +npm install + +Build the interface: + +npm run build + +NB: The build command will also delete the previously built interface (the ./data/www directory) and replace it with the freshly built one, ready for upload to the device. + +## Configuration & Deployment + +TODO... + +## Design Overview + +TODO... + +## Libraries Used + +* [React](https://reactjs.org/) +* [Material-UI](https://material-ui-next.com/) +* [Time](https://github.com/PaulStoffregen/Time) +* [NtpClient](https://github.com/gmag11/NtpClient) +* [ArduinoJson](https://github.com/bblanchon/ArduinoJson) +* [ESPAsyncWebServer](https://github.com/me-no-dev/ESPAsyncWebServer) + +Note that the project doesn't currently fix it's dependencies to a particular revision. + +This may be particularly problematic for material-ui-next which is under active development and breaking changes are being made frequently. diff --git a/data/config/apSettings.json b/data/config/apSettings.json new file mode 100644 index 0000000..18f8a93 --- /dev/null +++ b/data/config/apSettings.json @@ -0,0 +1,5 @@ +{ + "provision_mode": 0, + "ssid": "ESP8266-React", + "password": "esp-react" +} diff --git a/data/config/ntpSettings.json b/data/config/ntpSettings.json new file mode 100644 index 0000000..5767035 --- /dev/null +++ b/data/config/ntpSettings.json @@ -0,0 +1,4 @@ +{ + "server":"pool.ntp.org", + "interval":60 +} diff --git a/data/config/otaSettings.json b/data/config/otaSettings.json new file mode 100644 index 0000000..2e440b5 --- /dev/null +++ b/data/config/otaSettings.json @@ -0,0 +1,5 @@ +{ + "enabled":true, + "port": 8266, + "password": "esp-react" +} diff --git a/data/config/wifiSettings.json b/data/config/wifiSettings.json new file mode 100644 index 0000000..4f0b28a --- /dev/null +++ b/data/config/wifiSettings.json @@ -0,0 +1,6 @@ +{ + "ssid":"ssid", + "password":"password", + "hostname":"esp8266-react", + "static_ip_config":false +} diff --git a/data/www/app/icon.png b/data/www/app/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..13dd442c80a693e407fb8c2615f699e4639d3eea GIT binary patch literal 8940 zcmX9^1zb~K8@{8vl@X&Gl#(1V2?@zbh#(^9=R_LlX;6|elK}ugsimm~2LKT6EeIeX!W}HUitTX+ z0&f*9BNE&LN%A}b_nFi~)65$H$mwsMARr?P3;-N}mfC%zS6SFuzbp&mdeMLL)1OLv z2WHb%Rk*ZDOC|d_Ebt%vE=v&R>ZYV7_!0>7@c*D=8M>`4b^m_XZYiVM-8>~W8!s4) z9sJ-H@0)^_vgY)6n%{wJxs8&)pAWCT!-^`lGlrCm>)Ugw*;OXw9IiEARA$-awvm<= z5BjaN)c08*kEnRvgDrtdh>NLU5YoS(68d+E--_`Js@K>boz7K)fY$+6i*v6#ZileZ zO_Tk!=k&pwq}V!dbm7RC>Uw^dVZ2{4g+0Bl>u0Hfz$it2F_(Kl9Ez6qSUDvhMtlO< z3yHH++CDI+?7gS}KcW22Ot;U+QkT$F_M(N)M@0E*uVBpO1?&lcTy0AIAl2eLK+1Cf z;>=Nfwkqa1*-7B)@Pi;E>4A<)glS@$G0@iJ?Kr4BuG?OUK}a96-2vXKKl!+1(K{d$ zbE=XinrBN%Qtw>uTcKb*hKD#RwbyEQ;cjMf?NnbJuuzFOc` z*08LT97zFo4yQc+@qh#W7T1sR}u zRBRrSdkf?7n=Rh};5phou#8sW$yHf`gc+Na*ByK5{c}lRrOrz4UU)*KOLG{(Q z*VQNJaG<0*8LJRjNVuT+yo6r6E+~w^u&rIxjiS|!pjwT`hutyJ85%$D2$D@u(-l}0 z;acqxvoFHR3I!2liK&dd3T6MrPrNgNS7q8%?#D^c*lGP9D^lt~&`Re~;TnJMst<8n zS>PP+=g(iP2*@eh8@<|WbwABzL(cY6MY@171Vd(j1EBWgjZ&_{ zo1bLg)xl7SXYU>?^(H{IkRD+>Lx8J%gpAYs4!u;y@oLwjza9f^&m28nCz>$*HrloC zM1jO{UUr&-?NISr+}%B@ox=B5-yM03dST4SN}iK<2HTBv7F7=&ew!(lIW;m#dzui* z$CaP?@Fk6*)@{@VWW?!B!M<>Igz5@D{xDO1G#zEEv#Ud&j4c#q8EGIecQFNfXE`!d zxz_`Hf;~4DXg@(>%=XHk58eDQPL&}DNAe8&yFF^6K(i^+%O1EHO(72%On@z$(}PVM z_6>2{m?+Jh#0!Bm*?NgF^fEq31r{47)4vTV*X;`rgC)&jqHq5U=GH-YO?v`}I38vj zaM5!AJZ$(_EWtpY0# zrH}m)&upE87174_KE8|2GIZHwWcV+#*-HiM;$X=U#O*?=o=)XhYnu=GC4-3fT|ya| zC`tNieOW<&OK8WQFuqRMg6Luci?TiRhxILW5J}^m_U}!5#9+zaxO;y|fYChhj6d=? z=NVBR=3C?(-j#7{rafN)(6bBqnT8WOj2Y3NO+1>Y-U@<|VV5-nAzL)f_ZcQP=k~9N zWS>QFlqM{a}UV@~x)(R*n89~IU zo^ChG`{ayjs_8a(3#8~1ARP}rI# zpteOHKzw?#9T*CKTjOi^ZWPzpCzsW#C%{o0Hpo)rq@?CsE9Chq2I<@R1e7*c{rp4H zpAK4^cjXk?Q|L}*2tq$*ILftdq&?*gOp?BlLh7z^X|`1g6kq4IZ2Zs-%D7_p~g#V}oy^D)Aj7Ukua0o;mil?+VQp_@(AkYo70 zmid7JjIbCjo!9nHzw;Dk*5GuEG4|qjbOV_s@O5|cZL>uxoQcbVHA?2XQbp#`Pdu?U zZh6Y!T!tFTLhW1P*S-Z(PkyrS5DEk2@73`G-mj0_v}@b-q%Bs6cZ7=EnGBG?oytUK zxc{Y_)m}lPlo+(@tjwF17-0o3`-mgd9S#kJs0kdYdOr5v{xj)!0|<_9IbMEhpDQy8 z1aokB1pWu0WJ|1xhFucL{VuMYTd62_CYA2*I{dnsalDedZvN-a$J8c{!`zN7@k3NO<=yi*jmZ z_e$Y^NSL->gk*gvCpIr zRzn)#!ru#GeWv@Ks$y$+3-Wu4uU9LR8!2>XU_)h&D@MRq*FkbppC=WZ$#64{EZV5v zE2&h~=T-pE3yvnvla8P< z_?!JM4nko?=XMqVE@Dp!zSij+KhnOH&=sR=n@uh;e}_I`TiPqsyy!I0OAzF>{$+u3!J5>->$o{kR{%}0Gv?n+_@Df>}Xs@Iy1w#KkM61e{t;H0g z9(xSbVqAL-@QbH6p8eX(Zm>P+I;}OCy@wEE!CjfqlqHgHvDh7AV&N*hmPYW zk*8lSA(&%9z9gFX3-)H9yqtzgq9!9=zHZJ0Xcl z&&Yk;Q}QA_Fh5FbOm6}~ut_m+kdA$Lo1%3V2%Q;TxW)#PGO+ND5w!%$0;E!+X$a+TGhOrv}6_H0YJy#R06O7aHeAz!=nepn;*`IaWMiAu@%cVhMr=%~ zT?NQJO?JpG1u9fOgu0!?(gOzmYxL%q#kNsGJK=hvMf6XaN2C)a8^_*^G1+d^{Z35@ z&L{VPM)tG)ZnDngu@Rx|qWERkS&v-i7ec#Z;-CJEcCURHH!7GtisSTMuxs5ilt?M# zT^jDJmWekFNC*-fRBJldaVZHSep0^gKJ$CoDAxmArVi5?sDoxC zS87iNzS9$JU6kH~++vNqX(LsGTGpbS2W%a&nRcpia@wWo(JYg=<;2=SlV2Lh9$PB0 zS9nIfn9SKb8Mhe8eTeNQLnS01Jj->6O$)CL8?J|_o__b`LozRgbi4Kn$Uf7yy5Sa{ z1oTID-!&GQ#@%0PdZ*lF$i%#Dv=l%;d_O@OIm8lT=4}}nCwHPjEc;7JrKDK=*2z_Y zw}HC6)AJyU3HF^4%y;odf36DVeZyhQ;S-5<)_d)1d2`m_{fD0atWXr~Qj3q$Obp$j zQI#)!eYwFDADWw|pM*V^h=f456cCqN#q_j0QxWs7R(6H2MM-RwQ1e^oJDvILXZ6?g zM_HwX0hU3<9CELM1`V4&yD5G3A9XiCY)#sf_^sFTtNcf`^p{&)AwimH zbd1n1ji?PTjhK+3y<wS!?3g;`scFDv@ez zo0h(dWX$&)hAH_84F>@?t1jB)v8|4lCProdW2XyyjP@4u!ietkiQ6$p0;&D8hb)2N zL(|u(h|G_|e?9yz`^@ICqA$=!h;dtalo|lArmjT@=5|~L@Vt$ln2S~$et=_3yv}FR zOU;KJJ(xb%6ZmDgOYbf#OAbDV4FLN-P?OdBNX8YZ0`0&9F1BVJc2j5Fr{fmoI5Q}> z+DHYyjc%cLhjtn&zp7$bO3hMvMLP;R5S~jua5v2vHMUQKVyX07jg=l7&=Nisk?#2WSMmpQuCE@E+qbYM?J zld4^L*8+P%22@#p_pyKVjL+}lrw|FxWc_`%b>aRh@ttxh4R-`1<{qtJtAeW8*ry#`8B@?r#y zda^8fOtaL&nUW~duEmp$f_bv!krj#{v zg#HKFmKn>x8@!!P9?SY9^f3AXYjo0!ICMA0^iS?1UmG*ZzYq*JF{!Cly(cU zEd%z?*e*f9-kh*fiPvf(Fnv^L!~2m1exUPg z8FA6892ALlGD$El9DKWw=vrx=iFuo=BR`B_6(*@01L~#_G@^x}o?{qlr!`XmWe2tD zxpq0t#DYyoemaHzbb>~twqFlDdThqC-yrOsyyF`z%>vkY6B!JRSsuF2n=Mi`widmX zT{}s^b8V-UG$gA=x&s1#+v`E>Qw=o{ zb3ftIv$ZSg3LWRVSyITme8$h4rSqaS8rp&z-v_*xEpR`_gzg?&p48l!o zDUmY%^F8G|3Qo`mU0ZXJ z%Ci`1sz!*q8QeAawLAri`DCTaxPzAVYyr(-ou;3ccyrWlB7cAEElrH$&_F zpq1T$GS?Xz)|eKs37wrlwGmpM?xym`riIQL&7B};ky#SUV2pTj{Jl6U*7M(m0R)4)*bZw=z<`a+DYYvut>ld_1`Uu{(L0gcb~-HhHhH&L5b1dy~9 z%BzEGNoKf*{Jn5gUP7jUDv%)dWlLJ3ROteg5yTk^L+B`C0Gl(pJSftlfpzk9lvUp}&^7PxTD0U!Ri1 zgN{A2f2*Pk*}sA}hc(^iFBHP$jMJVfihm@QKF6h*?~iEzQGH5H02wgKzPnX1;jtZY zYztSvmLzA_%58dOy-C(Oey(SOXCKl2mqKzU`~f-kJi>au`v^k#&s)z zdcM#OwFX7V6y)6g$8s8Jl;t0mGGT7pQ{nKqgSxSwcxg;+Ic$w++NBc@h!ThSuJRfs zP9u`_G)zR!UQjeYZ~_5~dNh=>p>7L!K&ROJAS^O2iFL9e^42V4Ja1t37g;N&A+7ft=gXCY_NUo06s3yU}X92SaAOq&g1BE zozf5rH0L+{Gnf=U6_+vl`=^eE8SzUUpU2*_!jno~}J(V@FBIikOJQ-sKa?IKAW?hRYqE5Vova(E>e|+R2zDkYgFZv^fq}HWW11OjkC|7Zmwye5IH>3rmCe` zzlig2i8a;rZ_k4_mCF&SBu!w2Rsw=q=qPpl{04oi6rlK%{Is67G#7K5h?G64#Bh4r zV~nNDrXL9CN&D6Y#N5hhEKjB;UEYzJMH+JE9v}BkXO!ljyxR@_9Zj?zE&|al>LEt8Lu7F?`oWx&BLvS*D zq`9Q;vL>5QiA#1|18#KIkyuvkm6W_MioblKvEc9;X)0@u8@2!b@5_QwB`%o^T2JB6+VRmRN@ehK@id6VpHD1-8gPbe zAqFdCd*_TZ3Wf7JC_}rnxK~v=6#hQ^B!KHa6!VPz?ayv8ust*yeraRP5;3&b&5_$B zkbwu_T$fcMJ_UPJUqh|HOE8+5`>|udD|bHRF<2~HP4y8=R~7*pXBs8TC%~?@tGwaj zF9Y+w;}%(KcfMMe`oDn%I^Y@wfW&a;mJ_2)_d~m~;=3R!E<<{pVjp2wt;A_yB1RtJ zrm1#f&ywV~tUBVGzo%>C6eH!jKNLn zLx^Oga33xn359yHIVVK)Jw7DW{pcLdHXl_kx^~LC@AcWAXtW!Fty@tV@wa3<#5xr) zW=6C&BK%FMXonulYDi&%_8&fLd2Hfj6z5Z0WgyWVHDU{m-;-N) zWr0`)aAG&e`S-MP5{ zCLM`D}Eb|1|6JWSD$+kJR;FO~d zCKM~Yu1Vns4-owzK?dEBpdVSA4byQ(LUjOxW`UG^obCean=FSk{qgi@$!{VkzuRiZ z#7QOL2Mirz2M;&i+{n5_Nqbro|D1r=1AwZF!yfNyHp&l9p?sGoXq}{Y91~~sw+?vq z|LqBqxdfl+M>p)0+hJ8vr243J&tBb2UM1mi2Pj-_1kZXZ%k+coyZdV)Drx#Lr!F2@ zAR(7Eq0lz>`8J+VM$LaJ65x{`xSaw)6Nn10BEn9GqR(+AW7|}$JMvy1YzFNA$f2AB znm=^Tkf%x0JPCb%i=}lEw#Q-40T!T^=v&#_flMAp@tF5#ddKw+da;F{?H}R)!ZTRryWDU1n^6IIgcFr`6FpUm z*b?OVN{I{NQ2wA;E{{Us7QrJy*jt+lf}>co1xx9oRFo2E=TgR>q|O+nhmvMV#JwbW ue4=snfmqHOOS)j2`%GVAE+GbAPOg;)!_Giv12(wY0JPNg)GAc0gZ~F8NBsT( literal 0 HcmV?d00001 diff --git a/data/www/app/manifest.json b/data/www/app/manifest.json new file mode 100644 index 0000000..f775661 --- /dev/null +++ b/data/www/app/manifest.json @@ -0,0 +1,12 @@ +{ + "name":"ESP8266 React", + "icons":[ + { + "src":"/app/icon.png", + "sizes":"48x48 72x72 96x96 128x128 256x256" + } + ], + "start_url":"/", + "display":"fullscreen", + "orientation":"any" +} diff --git a/data/www/css/roboto.css b/data/www/css/roboto.css new file mode 100644 index 0000000..89c6414 --- /dev/null +++ b/data/www/css/roboto.css @@ -0,0 +1,22 @@ +/* Just supporting latin due to size constrains on the esp chip */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/ro-li.w2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(../fonts/ro-re.w2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/ro-me.w2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215; +} \ No newline at end of file diff --git a/data/www/fonts/ro-li.w2 b/data/www/fonts/ro-li.w2 new file mode 100644 index 0000000000000000000000000000000000000000..52c5845a7c3803f313d8905ee2f83ac20a5bc9b3 GIT binary patch literal 15440 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 O6y7R}gQBj@I4BA`2c0zl literal 0 HcmV?d00001 diff --git a/data/www/index.html.gz b/data/www/index.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..a1433015110eb93b18674da29a909e210136e1e2 GIT binary patch literal 305 zcmV-10nYv(iwFP!000023RO|TQo|q+{gst-6Gok>JwPtnix)fAOOKRnWGjITY*YL9 zlBU)1!tma{eft*F-OJna$8NI*$GvaVbb>eGQwt2DU^H!`dSnCEnUs;WIC595#FY)E zM=eIe(-0F2urV-(qB>E_PPaIc#p(hU6o|?ADqG`G-!HOD6uv5sRY$BtES|m)kkD(9 z`Rp+}#A50ac3McAvrKUxIo9R+Pu-h99p*o+83uVH>qCyyGED5TS#LM1hvgF9(O6b; zCY78w-N*Las1UPFG;p(vM+k^5a0Coy?-5?jXttN?M5bc^c9fyatCjq1R4t7_trjUp zE~90^jmp=)^HAQ5@tftLxXrA9oNNhx$R#(0`svZw5`5~tdCEDRynNLU+J-H=x&Z(H DhIy2N literal 0 HcmV?d00001 diff --git a/data/www/js/main.73ac.js.gz b/data/www/js/main.73ac.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..7c139df1039d1d69446e878f1f9db37ce3a24ae3 GIT binary patch literal 155307 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╦lQAzm*H{>4u~ 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

5Wc> z&aK^N>20=|YrDoAZAV2Ik8>Fhq2AX;UytN+TM+3h@UxO;x+l7Ci)tI9wi<-X`f7=D zTciO@P2-Dcl(WBI(YG0W7s4sOaP%_rOv9-7Y8>S{9-MK_03D7D1{65v)+X zvBM8E%9oU}kDmAtm|2_`cVA~|TKL!L zd6bRD>4on|H=m9;ixU<3W#f^MK~mnTLNWv?hj`%V!_WvHN0+73tm|Q%PdLs6(w&(? zCiI0>W}=*W0LhLyDvl$}cX5KyGpnp;7`ALCR!4(CgORm5qRIW37e|EvnFU1s~U*|d~^tc zj*cHVVkX*3lPBg-+5;p)e_Kv?q!Z{kI*F5~Db4H|qM_%f=>_~HOJD=tjFeqKWSPVc z)No#PXM&@w(pqWb4TU!Id9}R^^xq_B4RU6XqMWtH<+2*FpGX7k@)^*=P8#IvQ!bdZ z3OOA-dsZUNchqJvAmO6xS#PX9ISw-fN77n+LE8VUXR?OocXhhBP7}nH@iTSA@7Xn} z!`_erw-lOrOx8%3fpA{$I=qkQpb5d2vAsiR=+SXylDmlbT4 zF>RaVzLR0q9N&TCYX@CM%xcr)a+Nt-yWFRu z95I_B$QcpUp)zp&t7GLc`fA8?W3}LS@nEe&fA473CLxf`5zVN^XGo5w47{4PiSNpF zWEJ^_&!5t!gXT01fM#VE_X1uo39bkHE{RE5y01R6b2Md%6|EJsGVD@s5Hl67$A`K+ z4Srk3RMt6rrnIN}4X#+%($ptArz1VSr_wV!FCD$`?@R@}s87rCGV5AI+9SRmsq*oC z&^a{Etbl4XgtY=je2~eQ1p6tQpBzMohrKYE_NR;HSn?){$GR@mBKipeuklj|$7b9Q z9qF*z1Y$25K#X#lHz55_B^cRKL*lY) zz5usPaCL|cJyy#l52X5@P6Ca<3JZa)c72$J%x%e)=!XPKMf0Bk5k_!Q8L`a<_U14u zC{K2aoyxi%SKNDPP%E~Y-m2jb9B(&M&Fv{31>Q2@7wz^FTpqSKzZurK?-r7CX@8V` z1>2Ce_1>WaoL}(FyL5Ru^we%06+eaiqc?15PlhV8s){Ta*HpPj;3^rNJPGBmr@S%L zE9J~pU1&kIV>ww1;N$k$vgny)j-E;NblP|hLfUjRa@dka1<+C*iB11`L$UJ;YlDe# za3@Ti+Ut`W5VMl|@ssJw*dISZl%b}4%JI2OFXxymO_am(@}QPyA(ES$%3iJ#pZOf^ zIbiagI8jk0n>p%$@(|n+#}=^+ffyy7*-1(`X6_lb;~_^uXplG6#8!szWhNPUjp&+l z6vnnnHQ*Fc7FC9awDR>N_qx`KEr60IiX}U!T-hqC!J#v% zNor)x$i{6Lz{hwzelNW>FIpOV4pfM1-S;}qH`%74rqMOYF7+`~M|qhPMBak+G(u;r zr}nSHfK1fD%YsI9O{YTIZlcFlQhU3vrWK;f{-g&?!3a~*SS!<+#DCXJc*TlE5Bp(T zK6Su3ArJjnw6t7cd3h|qxwRyhUVPPHp6rqDPKLHEcY}LF*?~ z)(n`Q=Z9NKME@v350xIvftnXJN_wx2l2Xhl@r)5V`m*W}V#6wfMrV1N7IapNlewIE zaTr7`M4eZ;x=6%rmTHNmiPw;4trO)(9)y+krYeFtF~>E=2F!2`M$JIdxrqP$Qc5OR zp6D;!Zx-7+K!{>GDMmA|$K`7r2}>m|gO1p<+SSpe*i1dG+cPhf1>^h!oWSTFMpduL z+FU`NVchV|&1J8sGG57HaH+l4z>lVugIulzU180|n9c&zkh~R;m@Y4`T-ZOj@`Tw| zhxGFDk&(#zSt+p@S{E{>3UegvYyYjm=MC~K*9dABtrLfI$6ANhT9+$wJ`-^4wcz8| zQD(DUTv&QX_hxL*1jljXr3}uOZPjp zk)P@^xK*K)@+z-u-|=F(sZ+V~>xv3K^rb{e)R3b8!a$34xfmy>Q5F{tgi_iT zn4s}h35_3wGyrm-LP?Ve8GUie%9Kpfx=$NCJ3|MJ*xpi?KVbvQulS}i9;6@9z9Eid zZzXH*2uFTJ3nahuQTapf&JLwF9!uv|-OdB)-0ERRUPWzeNQcsoAK@~p(l^T{V~O~U z#9e<>;rJ!9#-2^sv95G0!|sBe@OVIzcXAqk`aC{M(#c;L!KR6i1QhlV?DJ$C7YNAS z7_GiIhzBRW-kTG@T`|V8T24#aHqleV1T|a1ygl!5%jajz!Zcn zEy~i#HGrR=F%6WyI)pD96RU^vZf-hS*NR$O?apSm?1fGj1J@3EXzbc)Pvhuq8^QpW zy(0Rl(@))Kr4Sv@m-<<=#tn;W$@+$U!%ofU=zbHvxx;=Hj{Jc3Du2@GylII5d)ACI z9;`3K8C4CPTi|3v?e>jFaMIT$Fmavg$4-NLuZE7Mu=w-5g?)YCl`ij1KNl>DWk{CI zYedQT8+Sv8KP*w(gj!3iSgnq+BO#ThUYC6{7yTH>Ln0*2ojz-}HH^0l`x5$@gOYBC zT5}!k%**k<3d?xt++*`9Nfvy!1uTwhuIK$krPiqK_{oEZ>l^D- zy)47E`Js<@X{I<9O9MsIrUb}hdC>19&T%aMmpP#xMfQuSNxfQ4NvRvrJE4`+6 z;rc__<0`Ud2<|s2n84*p6`8?jP_J}75)-B_aBS;a8iX|OO`nW=Ue<jV&&uP?Z3dy$ zP=j~FZkrG8g5B0OHzjuCpS8`$`~yOF<89M}I#B znVJ*vh92QCLhJ@_mX|HR5n?--xXzK%@qvyMy%y=a43^+fCW5xq^^CbBoMA8X=SK5b zYy|^XIcZ$YR4_OP3RNZ<0Q4TO>14G``7&n=EIwBJR4SG6Ptd(;|0)ZM55dxlo13K< zWT)VUMV`3%0i!6~3r+u;&Yp73zywL_vd@V83F zm)Po^`vvMmgqw!ZI4YvnmxJO^yjF!+J$fk!zAP`lMnNc9`>)0C4Y!T2z+ilKKb0dh zxUv9Zp$cc>ui&HYzEe-wZH_zVN-yx>X`4rUnu(tmQA>zoMZ@{oeJ@9N!gw&aa0`wt zc7pRibzjk>^xec#Sns>Am)Ir(JUZAuq)B2&n*06+fsn%r+h{OVJ@@^3;nzYW)U>MRQPDMTS{bU%~ag2V<*lzTfeO zx{pbvTxE&jp20R?K-KVd{Ewi~fh(eoAYKYo-{4y$gl&Y@{Rn#=w-O`=A-FyoOb~4I zU%r222O6eVt!yTKUDyi4FtxGoCjIxmY%xTOxX{rc@Febea$p1jv1~Ho`TxRW4P}$B zXq=|iaMt@sgZ^Y6jEF)26CitkDPtSk(1v%Z_P`ysEK`^zbSK}@MvPSg42h~F5-PwA5eMEJWqVJ4I40yl2|yb`xR(m&$zK8kC(NdBi; ziA16(KqvtnepJNyGZw+@P2j_l&r9P7o<06(SAjysampvr0B&|!{3NV1Sm-(04^I#X zc92d`UG8W}m7p`VhzMdMO*K9#qMk?Hj}D3m09&HED0t>h+6V?g`#i%(iTNm_kIvjA zI>_Wl826qYvjR*y6Gv(0H!|g0B3gmZzWx>gjE_ITCth%x`@IM8wD# z;Fm`h;NI+7NN=_v%h>|Hw*oQKsfb|Ja0`&xr#jIM9hnuMO~z3zt2W#Gt zTOOD=lmyjScqKRxd{f&&A$FB+^&2*A^Mr+f4t5S9Lk6#Iqop0YjJ)T1J0gnT{bcq5 z-XQN24*oifNuch-WVV`Gj`qAz9M&NGULbi#Y-|#} zbs^jd^Q&a=@)jwZE|?zYQFhK}&z)s};QsEwB|ls&pUv+mpS5Jg1_f5X<^B*5Q0nX! z$Oc1OikRkhG*(S4LDoNKbX*<-#fsx2;L-O*i&}&2wb_q!9M}OG&_};@J)* zxt>*dw@d*Oy1MDP+EEuTzmRNpd*sgXs#cvm6=Dril1RYsSP|3=%vrQz0cnBLXilim=x59RX_dZUFW09zt|Wgsv>Q7hGoC25aiL zWr4>6$^OH~3!xmMtFPZZK-#IV9$47*uU|Oa8lOeiP*o#PTETbPAAw+?@eUJXLTxMV226+!20Tkw!J!@}6pCC!0ym))?a@P*9sg%I$ zr(nT4zl8$NKs&&rBwNfp)7I?3HyfUJyRUCa5SbvjrJaiB(sw(a&bgM~-24c#P zH+}QudVbW40**^gc-SHCt>SyQ-Y$e3fT|?7Br_O<-Lv?LCLf``f1zZPt~b(pHWE2j5U=y28|mXj1L)k z;K4?788AVK1>`uUnqV_BA20}g{xy^iy3YNX|QIy$uJk?MC z`8M?CkbPXSnSWHZneS9g=DXdB%{*>`ETj3F%{=SAvdugjx8sV4*gJJY^tg*FqRc(U z4bgRJi9NY=#Hq9|*RQ2PczB$r<0*9Di*({Ut5l#P%anHN%3fQX<;EH9nb4Gjg@_M>@m}t{}lI#KlR23xouya*X^rEU$?Ig?`&T^R`%6V@j43g zX*O@|oYn2sXj>u-U^^X+=rftNs?ww)zf2R>m#jEg{ZMNASH9zCMaf>@0C+qv-h&5%B#EpNT>K(d0cvNDi55? z+s@Y7J7ET+lYw9w2-F)QI@Jf3KM1eEI0`fUZRVMJ}KHUTBbk})w z$_Mh4x4+P5ePGV|%Is9e6fxB|zo*vl_sFc6t{ zJqT%>rk8#h!lSgnTdf?Q^cWNW7eZF{{`g22NS4QxSBsbK;mzpCO%Dp?k>l^SuWm|*8ID$Q* zF{}?VJ_D-O_CYF&MMl>_C|KCsm=}L7V4DohZKY1(7ZRMU749aJVT_C@$F+_K*;q>= zVRjHIV3wenlob?(FpGAxi6h$;Zn~O#KTg1X3=x=wEg4RKaFf-6w=$r!Yx+~SKenld z*p(+g>YhnHHMeRX1jr#4hcN$;rfU+cKhWy)O;LceejH>tTx2+`A^cbpsNLMamLY2o zmFK>jn+fq&u@zQ=IDK$bh&x-E2eqIkPGnfLBmvTrkk``aQcsZYhG5R7Rp+gmWo$qA z!R@Z{j1AIUM&5n*@&^chrNKTpu?_o@?i!p`b+L(RExi^ioV%Y+9HDb((oM?Ozk0=f ze#~dHy9rXt^d0)@@M7eH~8js*C$rUxgDVSW&`W?{q!ap_&|V zn{I2Y!SeV*>470a@@y&9bvPSlo#oB0ltVq-klyB@!!9LJ&~_j3gm$DbYE3yP zX7%P#m>0i9S5k9%lOvi8`_57B_zqY#rxKFeP-lcmCQ!5kJ+dQd5JL?e#Rr)TtqvmY zXw<{LNZJV$carvJn}Vy{`YM>bVtTcLH!Krap&ts2i zo_GqfUIqz}m$f0q7Fl~D!<|Bc)7F=Ho>21YNV03}ewbNjYy?c1*2w_+WR(vm)blN2k^+_EwZ0bBc=y7ifjFsRV- za?;Lv9w3i!(P@}B=&da+UAg6yMXVr1heK9bZnX^-D2$uWY54ejfYllKjW>|YabMYb zvn}}RI1du=RG7x#I`&iSELJJ{>=)wPPsGG$C>o1I&qBuj8UY_SH!g!o$ZF;UQVAXb zC@U*MZcQvC@5=NrKy2A)CNzfguLL{i$kOCwuFp9?R23DpK?;XV^NhhuqMkIQR_tHO z-JxVrk+gonkgDrca@$9R>@;CCwc1FdfqMPY{AB?1m-gqX0gOyM_xu6dzYsvs8>qj? zGNc*6kY*;5zOipHb%>=z>2no#HwDucCEZPJ2CHt=6n17iFs0<_+^*@>a7~*M`P#=H zKRbvxQgQ(w2?tX|#coqa#dKctwi#U6+-&CEdtA!I4JU>?c9f~i+GBP5vDuNw4vwFJ zK95F9A!w+qWhUkB8aA z5tqTy^74_jaX-TrPs=#%I0zxV=H^lxd(*7Owve6qjU!J7GIzZ;jPDSH*z3DT zLE%>IAqVtxB%mZT0MpSv8gNj*V{^hJuuMs4G{wQiA;hK!bOr2}c7>R0t zV>(I(65Sm^48KHBctTUgQ5qHJcOsk6LEIHnDv`s0R*vJ-CPW3HLPJjVQNT~xa|d;4 zQt8F*_*YfkX0b9`i5vx2?J6mOTLYT(3j)rL*tn zm9+hl{_Tj*+^?&)L6#^h&WVz~McZUuUTv@=gHY)q#mZKG%J9GLE!3%!=XsarlJ?gc ze)3=)KZ9TcKciq1Kf~YwukDETR&jGP?adqNPQ_`7gU_&;q_O4+(MRXfJ2w@fgOzqw z?4B6w`wJqCE@`cB8XbB5m>)V?_pEpHEbE6iHy41Z6W9%$1t);+tKir@6Bn2y zVxn1T^^($qtDbh~ccsNvkrZ3C)_rZk&tj<711(`Ylkc1Q{X)L4`Il0c^{n&~IM7}I zx@IciH!&y1us`rGZ?oxN?`(Kq({ZEyEY-o>TUFe&79`vIh4(rDdX|1G>pDkm%M3)= zw+oteytygpnCJUcHchb<38Z4RCNE39OSqXNI{6?xl#Qqop0F&JxI(|UgC^g*m8`uh z`5XlE0ao%cpPPz-^KR1^?QUvwOky_gXnxMPNJbLzfVmnB3I31lM=R!tIvkNM9+U!o z$(wn%!NbFiuWio*b3F~&-cpxH4Zx$|Ta%=bv0m>yHj{FS+U{+X(k{FV7)Xa^{ z-MSZiAjz9|;titJ)t<+qz>?IC$}4v&ib-NnZ`Ofc?{@D$8s!K=?TmG$e6(n`tznL` z^lYACXNl_6_Mt-TLT#CahH%;^W5fqaAqv#69`*H5eHV)=ioTl>_L~x-9G8sA!P+6z zePg-Qc0Upoxfu*8p+vS;jH?hq@SvwN@fOTyqrhgpyM7me&3bpk7Q?JQ?sOh@A3t7u zu<>xC^Z0T1er`fuzkGAFx3%;9=;fRJ=RZH+_2=vJ{{K-QYLXpG{W#m^wVHFA^#6}$-=5v)0&s3@QYgwRyDVY9hmD4h6l)3OK z{?o%cf1{e$|G;=%>;?IR;UjUvKLK(KhtqEYz*{)S#=CH14# zdcaaF^yF&3h5N+l62aU`wxVqFpg1)8GR!PCdC`?CYkj4?!lI)hE!)C;nf8n zt{qxD$X1cIOb3)NOf{4zo#kbWdv&!s^6CuXo|mV=j7Rd8x3HEx61iZkY7|wi4W{?f zWKjka4fYa^*gdLX_f$=!*2PD;Qmsh6RSvU?ZNSvB4T#t)XvWo5SHUWywD+%PWtbf6 zTpH846dv}hh?LD2_2b$Y#-7(t=*wX2^A8ke%d_JfQTBgRq9N<)tLN^+?!SPZE64e5 zWGBeT$6q7tYS%B{wq%m@U+aA9sCsGemD|#9y@*9)a^j~!b#J8AjbFWg#ovc(yn*h8 z5{x$r<*w%z6$;3~ODobotf0$RA6C&-D^p?T6E^S(&HUg0Yn7nW{~OHE40PTdPQC$3 zqV}`By#)kx={@YLci?|xkCd&~+Nc{22AhNRaI>>{+ps`fY!A5;u- z)^SB=S>*hG?0pGi+eVV^U!m}36<`F?JaicfhtH9nv3Km)&$5%vYP4RE1VzLozyUxV zk@(+VRrL)tC`z_7&P>L;5z+VERn=8r_3)`nv&rf8Oh=Zzp6SW5)7dk8S?=zc&MfgA z>~){KSt457!GY<)vez?QSoV6mnh#4&EuI;woJ#*F$|1@bI=O87Piy9vFd7Z+D<1dX z3W^`qJ4uuHaqFKKqqehHkJr7#dC9zIw=gd?wAJ&w@X`J z6P&smaPDN5Pm2fPUn4&f&uwCjzzqxQfvLx2YE#)KDzhyQ*Am*duNjm|aZfOmkN-w# zE@!7r4=4;RMF9O}-2Zh7cW$Z^lhVZksf~$5eW&H@SlY%^ZLJFoCmgkMQzdlDBg^?+ zQ7fvvb|u`#l+@wcN7=W<5kAi#iKNYMrXIYip#N}sgoub`Y!oAanQt2*cpS43X7%_ZO&zL_va??9b*_cz~@<@WL^NrRK$W5hl zl^PR}0tqA7@8Cq?$L7t`e$Qt`!WjDe*{`W{RqwECKhqeNXhXKZu)u9&uA6 zP~wJ)CXGUFNt~R}b-5VHxYauHg}Ki~Nz^}KFd*bgsf7el=+M^N-PBQ0MSJ>1 zexV=4ber$U=jt5?Q4(Y-l+im!j<1L8bWorVd7Qr|j)tCEdM+-NgvHp-&+zxSAHIHh zclhtPXYtNMP2=SQI1;)d>$iMZv*pzdx6!T_8$IL-D9{ilXqMNbo1$ba^luhn7I9G) z3Zo>36k8xFJEBUWlcm!bxEYeFX%!j8_(B>H#8{$M#DcZil`AOR;QaYi(J@L6pkR>fqUb;1ap zLSO|!Vx7O`!ogr*WO6hOa=gdy&Cs8nWhJ@;bS!A@~0pPRN1fSp0jkasuaH z=WP5p6|r_YyPsXix{ixcO!r2|4ik`l5k`iJUc<=bx=@cZGNwdFG*)XWdag1)*Yh)X zmPhvTpC%XjV~72F?Jy~&`t3H@Z?~Agw2*Um&yaB*m?BQn5N0Ay9Sq+tx>NXbTO}-2 zss2p{Nql|#^d!90pM>!NUCF3h`ErOpkA{)EMl_ug{wNw_qX>G1FTAD4tkTJ7oC*ro zmy0VSQr4i^E7STn73pRMU$cYaBHPb$iY{S^6~FSCHZtTu8PK~(b-C9qJLvw7M#w6IZGu;e}pS%xY~ zCzd7jbSmUpg5m;NyjN=RG5{H8i#-^H2`LICr^@i_OtZvct;<#G@RIf&mDhvPj%w0X zy0Fy|2uvEF1TMRX6-(_rHgrh%p`X*J$uaWqB) zEmm?vI9(Kvh*4_}n>IXW=w}+%rH-x;NxdP2)Fl`%BLFt6%9`8gv&cf9A>~VZfLp;u z2=Sz8$pJV07p}KwMi@GhebNjxv?S#dt*)UU+czq=FOu_rl>7x-+iY&y#7}F<#FU~v zb3MUKv_^=+i`d1vjj+|Cc>@m#4IbgQaff0f@i%+nhQnd*db(T2n)Zy#K43HhD*zLVNo8CQvGMGOm+xg8u)()v_{;lt5GPvYSW2uJRPqpSu?GlF&r z%HWQJnTpeN!j0&ZwhEQbi#;;8lJiTR6D+aVQ7=SojRjW6HWi+AlXRJkVbf%ueE=7R z!D?C2GwY8zG@l0i#w1@jl}EY>Cfs}}&;MNnOC%zrF2XSfCPFtZJUVGCB&!UzC&4i^~ZT-WDrRl#T6F6s@Y}Y^*%(;hp zv}@4Zk08M)y^jFFxR2%znR|)W4pkKbjtx|c(OD224JoQ4uFOgQ=H%VaFQ0vQ`~Ky# zpyU7T+0Wm@+om9IRRY~*%PSYZ3I6DID9M0rCr&2{KXD4z|D_AyMJ$~Mm(&<Nz% z|2tH7gG&{Uml8&PL3D~B76B4F2&DHdV{GgfcjpWy@`my{pn zxZ6)r)@>}5GiV!39#P=h3m~?lgqdHEOYV$j@{Ku@+)20?&3`PT?D~XP;(jxaittp> zW_@RrFPcdT1Ld53qkJ6%PojJjE}}66=dZ#=|Cnpgl22|ZEu!axwiwDVKnDzBu%*rP?gt!Mq(3-D}T?*zvlTKm*}K&LJs4<6;)4lb`k@ ztqQum=-SRCG~iaMQ1+0kOj@dDH}xeqS!nWCE0qVlJtylhdjr0f3D<}OZW4tgjlU;< z&wwr_z{!rGYgL`;wx8)pFHEGf-hjw57<_~(fHHJXkpJQ`*l7813quL{o<6KXHM zyRVzOZ;wsReN8a9!LexR>$+pbQuvxv;LbBr6o-e}rzy-Ti6Tl2;z5ky+4vvLMRDpo z%|C5B9^7>=)5|D34)cg8Z5ACu^gM4m!eQ>C(QXoWMcnV792{)w;-QOC$kj zvEX5vjiXE?p^xS;EsAvR*aDmA0;idU<9M0d6J*S*=9(1bGp!Vb#ae=_X{}{bwYD&8 z5oq;+Qb9AcNEg+RH9f}IHQmK%TjjQ}a8lI73`sU-jRMxz8a_?4_*Wo5!&yy7;f~Gh z19O3LyHO=0n>m^Es+mtibQ8%#M(J!hPnzf9q7;Hepe4wxnnxI6lUa1t9EN!;2bC0j zw1ukza907l!-9oVUHnb%npk2uG>huI&(d@1EX!05)f+Sqv-3FN3D^glGsg^LvsDf> z_7e}(S3D0g)-Vs#*5o|ADzy|tjA7%MU}2O(XvS4o{?T%Jn8DXZus-lut9|737_(i_ zgi_KtsV1o@Rf{p^BxUZBSt9yqG7r5xLAoqva9r~g{L4%tL-m3e;dl(Igs0$NrCAiA z`ZS6#V;)7IHjyI8SU|EGV+Dy&ZAL|qF{N-HAwW6$4Q#^h$0^5o{SSN8HH*?>STUK} zI}YsdMbu==hu1>>U|B43xJ{<%>F7alU#1@;OOP?Z??vNM&4 z>$-?v^@zB7`|9DP>sKCv;VeEEo#(#0snwToSXPf#aVl!}u?oAkgbioQ%o3b0&?%mA z%+V4xcLf{UQiXcpwJlIp`4#B7prNvm7clvv79d55$iP5}SAD}P1wM9^>_&U0Pxsz# z+on{-3eyZeD>Z6XpJwxvl_$C$=B-i%*&4sJ#j?I?g?&kV4TZlyVDLg?bV!5$2@pPX zq{D{-xjkVz29%&51v4pa{UzTqlRHf`Gc9LP8Af@&69p8AZYIf#WArJQg{ef;M0l{c zpD|5Fz7l5W3WK?^>Gd9?N>t|Ns0_tlGR8>o5GizUn+ zLj#aG#SfkrCAspoV~PyS!i)1C!XMlzx^ozxE>5RsXMOyy_pmLfF*&JMQO!}R^}rgv zUn~S`gevu)f)~lh{?Tdk@A=t|+wumF&VL(4qmg`=(*blfeYD%#EjGdnwEKPm^H=zt zw&$sQT!mwYDH+f%$TfK!=|`X_bi}o*VaXO{ zlC<;~Pd+@!XGMFkyx|8dBiU|fzY6f_%j zc7qvW9Z>X7bpOA^|G;S`Q%wfFb~~7mCtj88ZFIhzg_%E92^WK1NVq_tL@nW~2w2y- zf34EZ2YZlijsS|SX)&LDFPe6)(p(HW`@w}jEa?_!{;8t|g;Osl1k>%5x?qIx)*4}~ zVGyLZ!8sGsZBym+W^wf{eH+cuH5JZ%kou|}LF|im1S7xHj$rIp+7V3sayx=+e;ns< z@Lul*H?lO`8R(!>Cg!EddKuq&!bruyX|~$Cu)chx=bp0+soUuuKEh&l9E@TV_e)}3 zA^ARr0f(Gs0eiP@2fas7h_yMp8#JeDGzWE1 z)-*@2clYoSq<(O{9iv_Z<=nL1&Lc>D|9Vk{f*4G_-tOl0_PVXTM_o~~QOhEW=Tt`# z7qe0Y9ixKlH5GJsv4YOp3i9O;`+=*$Sl9a-ccatVTU*009hcTbXZIdmc+}awv-r-s z;@7pk+lCRkqk>UL&&*~O-FpmA@4z}h+DaNOi=tG+2rgzw^-l1$fwM$v4t=LN^@9f_ zMSd7jj(<*fpWM_&Kg;AX}azE~TlK!lw6m{SYe z!!WE|3p;?YRe+x4BeetknJPOLWlN=l){}0#&C1rofS6%rYhh6M3ijU!-N55(v1I?C z+>t2vgQd+MEN%W!YV!z4tccWmfP~VhDn8yoSzYwC(VS*cK22w1Ad)n)sRvZkCFy7+ z;p{buBK>D7!R4UU4KDrTibc(-!>0j7b7I)wH+2(*JkTtXrI%{QC{-1bPYE!N&`BRU z?;oI7@x-0^4h|=z#gWE85P?1j+=-Etw*Q;{4Gqt0pAF~9N>OBE)nt<}ycwnQIh=4; zN*)3Y1|n1JfY6t{0+N?{1vKq>7F`EY9mWO9vjQiaGN^5dY^)FZ=N9=kIxg^`#>}h&ot$CNajM@XXF0~KW_PD#RMSrK-Z|&d;6{7h%D$PW>qvbj1 z?(O*v^`Ca@pxUfTnmuzitnu*(A5d!J%TrcKQ!{aDf)434<@4tJpI#gPIh8pp4}d;f zl}fwSDXTVYg8}NTn>=e*@3gIZpx?xsy*3QaWEAa2BggNw>FaPf9K%`MWna68lVQif zlNi6+``yP~$KR!|Xtdit2pv4B@#}FX+V463K7EZ3JHve_<$%6M-Ol0O(D4uHD;#%r z_YNHYF?}5#wxivN<3HimPY&B5Bz?l`pX{~|q5dbV$_dnkS)cH7_d1>Zu4A}A`l2Hh z;y*c3d-zX`R7C$1BNesrpBSm(82^cpdK}?DF;WM6_)m<~eh2@Fk=pIzKQU6>4*ruP zHQvL2a->4~pByQ^;>Aeua(|1F8qQ!%LzQj3(P>-JJWlRa`DY;Cxqh4?5@s4%aK1!w zL~ht+TNCnEPh!lwe=b_fBre25?OUQlMCb|#WfL;sW(8#La^X7p9Eh4V1^284_f)~B zs+==q3V_x~XTvZHTo~|qoN%UZZ+}&4LdIKgl{>%+Ho|1waMLV~l7e0ygT@SkNDUqi zC9S00!>Ry1xraGY>7VAL`%-2ogi=+Z94zZN;RUuNX0vr*7HE=i7dJz-XvI z2M>awSzI-o9ZUL7HGOAY`ffFScU}5kHGPk#H!pK%C*5&ik}PHHR?FC3SLa?e{ocCt z`_=UO>(U=o(;w9IDXi<$VYQ6Ib#*?jrhmM4UM&luvwkJmmO`hdUorOUto2J8Cob?c z57rEBb%Ff_Y7uq^Py(WU+e~ zi=8|?*v6|wswc3;F|&Rw6i9V+gL=mWor{p>(<_IPx+Eus&gN)`?U}L^L#+#qVRGEWX#) z;yXP4088cZT@n9S#UEm^Y_2k-2+tTq14Je z9mcchq=-<+8FZqaA1)T(!Ohy~pqwWQFENQ)z7=(9m5if!c zkau5_z|wVlkuC@hS6}*VQxi9$?mjmRPX=hT7m(rUR?$M9DFbdTzrEec;QzG{M8gzX z{QRyrV}0_MIWuUcRC{XE=#S8=dRl=dF7XW-QchG#4Dv%%{D47QuDB0I%cH8WJLewC zg2LBq^@?c(M9%rMgfVl;>fzK)_s~w>kk-f^>WsLgG{OZl3}pUcw9mulS$MeMZhgqL z=t%mD%1FF8OEa?aV$fG%pDdf~;=wa%E0lR`h8G%KR4YrRK*-F|Yjg(qM$&PXnCJqYdgcq%)PrVEB zhso+FbFNG2LN?vn)rVUELNshH&EjhvO>+MSL)lAHo+MI^l|EGv#K|>u~1bDSYy_rALGpnerdGT1Klba!Q|<(E^@y_hx|A1Y%JTk7 zMKq2-gz!~`<8AJ}p;{YP=H5FQW$A489lbn%sqOb*apV_%5tlx{DBw zLjPtA{q5|vb~}yEeyja>*4%CF9pZl;H{`FEo!!P>Yj4)vZ_vMAVLV{nS)euRYE%AS zB7fwqjwU6=C|J0Y)_fV0Yd`1Y;{3%3&jrmz_U|3FjeK@##l4LtQ5Hcxyi7DEZA`;F z`KD+LqXXt^-Y%3Zc(Wx9JXox2#_aRk^VM5|m^|E`MD2@tgpg|6w*- z3&ZUIL^AwfazvL)AuPB-Mpv zZw#z zUmGpy5jJop;f(y`vAzWht}mDSPMF1Ea~hAwFoMBkz*7be9Fr07J3#tP2DL4qk#mTU z@+S-i=^>9K4`M8P1|8crwLOr4bxGNSQMDQsyKB&}$Yu^VAXm92EE23_GB%v0$aGAA zQ4E~XGDFxKzMcg4xy!ju_yLWG562W-( zW<`{tQ#q4Q9o>sN9j)g{S^6hj&!C)`=^wP1`TbC zId24Ok6NI@Mj1aWymOhhukawEP@n_ERw0(8y9@v4U;*nWP1uSTYAX&kra&bA*JcI| zk@N>%ptn1d3_w$31=_$09PG`24QT$$umYdus7u*Vr^DFW_1?%$r|G2g&|uj+ZBvNW zF%P@0!LheBhMmsLk9cNY;hEWOd&ooM;pxAIG$#m+2(;({LKo33> z#FJ}||E0o}2r!FgbhA7DPtovWT)Ybx&*4NMB|Ro-W7f$Grc76`vc*a(cXniRK##V7 zENJtPw**lEpTfEwNR(xkV{ru1icPFu0Kydd33fDa=5Pb!QgNE|^w%b$D~1{Jl8#94 zG%u-3wm8&zdkTj%za4mJ`E+x(gMdmWx}X^+3EIftuud@Cc$RauQW{=2ybI4Rkn)#B z^ZxOTfH_|DPo2;?^PduNBogS6sbHr>Y^Ukp9wLa!v>xmXc6)2Ss{q?h9?v-21LP%UIz!dtQCPrs^pM#BE+1GL z1nn87VK)9AhZBZstAjjDn*2=d4CV0r!+i&<_luw zmA1nBMQIDXU+|^Rdig4ac2M=u{HMB>mm{O_O^?7n^fruUaK7>-?%G#A@o(?ga6!#) zGV<1g5RUSEuq~)HI~{fBJ+tjFNA{M#Ur@W#g;UD$G72xEnoJZY@|kj^x&~KQlGem` z>2fqZ!NIFmsN&=Rmoh#}#x>a>rrJA-d6n8aSD)#-*)pr9$I$99e2!V)baE-!y8Xnh z3)hl33ACRmK4FaJJ322sV^dMn#!&$zhH)Kugo4dVFpnhrO+{Nx+i8`{MqDzm)qrmG z%{vxdn=4OgLtVlVQ5)xa5XU@}2m8}_3~LohFFPbG9|tlA1A2S>^z|!*nq^lzAA%VS zM+A+`zUR{fBcO0dWmP``NBuS$MKMD{%x%b|TT0X@rv`V0`prFMS$B_wXl(x|SyM4W^5z1Y>&%Ph-^`rr|510JzSDrf`6% zhyzv^5Ia7B!PAw_G7(5(h#&ITOE0JUKE*j0qZ)@OcJ4t1w3iST5HjK`Ik) zED9!36jCI3^7w_=L4Hx*fWA(|6yi>!U-H6IUv!?UPo7YmhUx=PP4z{GGJJ|>YvdLg zur?ER=EnAP7kz=-FyJ)mob1Mgx~CZ z0O^;0;kAd z$FJYO9-gK%Wa^>lVSgl;o*`Tp!~S(^nnja=gUEfHZuETd3&^?Qz&&SR>T{@vhx_NU zMg55vG&_*+h17ByB4v3F9Rg-Sm3dhss2O61LQN{o<}Tp))Z%jX`Aq8JY$wQR)T6}K z;PYCFf(@WevmU87k3RF26l_Du)liA23dHizW96RH7EC3cwxPa;Dk=EZ6#68SL9-J~ zeI?Jo@L^JeWaXdx*PfsHKqWBXsi1BeevtCA8)EihAG2CD-q2^;8kNbItH)xcRABU% zwI`-1^+{Qjs+|rfJ~g&E259>nKV?7L%wAP2s*;k$E47He*W{^8x8ggr*k5_>livsd z$5|#!&NtRxxS<$#UZx5A-=(lqLZl+#ge}LGUig(O>Wasfp4DSZPxsi;I}18Tk)1yW z>O)+)+6|hzxS1uO5R=sNHG`U?BorCz7lA#k=MA8^Ap162!{rl?%diG^Iv$z}*`)=Z zp;4e9kD=q&@)RnWZtK_qOX%2~6Mu1X4t;>cQP746vzJeP{_yt2n>R0?trxQQ%;%2I znhO2PkOI+}9{)C+Yhe_&P>8JBi!h!PhGxWq+(m+4uH<(JlA>u&vA6 z?|$3lkD4}>T2yJD%+kxi;cvyJ@LNfl4NY759!Fn<8r&v~(zb7vEC0&xgq44pg=DXA zlcFAAagAQ@c^F>Q1gayVfYuOz-+?n<#!be(G^48+6@}jJICJzBWj>llVUFsB@F#ka zyj~Wv_&3D!PzAPuFgj5lxiy`)H<2?~jqYB%y+I>)oJN-t#>oV=yzqrycZj8To;GoC z<3Q!XO`*VU@=-X8U{PXLYMLdsLq_#=CBv}Fg0<-prO9cjFM@ZwzIh#L-d;`HTaUXN zG@sQa9*ALo@Ckum#w4m`WSehunPZD|vwZXEU)1>{*BO;V(dzlOM%JxcoVt4~T$b(o zFo(S?OMEJH1sqy2q(1xN-{x%wohico26M^=Cl5}~P&6E$Cn=&_D&a7Df)F-qadcld z*(JFMZ?8lkf+EoOB@>g-I)oY30EC1Xkj35J$`TNp3twfzkAgh(b5-VSdwWJ0qjMa0 zA|lWsDlwrbTdYir?ibp%Pn&n-6v#I*`Lb4=Jw3O0)wP{{ENt;yd4K?2k+KTYIeVxA={2_Fg60{=0UfSwa~d3)QYmX4^*|JvTxKYzZx z-O{4A5X%TU80Fr$uYqq)TGWO|T_j12aMmV>IErR@L~CuXDjUdOfh-w)?eRdMWMo5R z(w}Wfe?BtWGjC2>I0&WYTthGn3OP+(dhV3P<^O=4;&%T`AB*%-^v3UcJ6ag)2?TnN zdY<`H36f%oK`DNjAIc6XaIW8wI*ysi~NcjYBeI_w^yYj^l6>^9Y zIYg;GMB&OiGvA2B1yyRpPDfr?%atGVF-;dGW#rOhm6}wKBQlrA3(sD*I+L+^^p+Qd za>1@Y*lxa-e12qav_MnlvU%kLA9Pe#V6wd}+?tw?sA8m&Rz8bINKvh*u+RN0wf?E2 z`m&)-$A<42`fEnfN8~_u_exc2uVPVG78##PbttPmUZVRp>NdwS-S90m0p{2^1l*jI zt$);h!2N)B5>iMBS>IU9?pEX$O^LJl%&nI=zAz<@FRT(r5?vS~!*__IL4lR+K}iuPq{yTazrE z-yty(#sIy2GzLIX4$3VO7cuHcQFFh`(Zlz9On9+>$d#h^_n7pe0}VJz-L!SGleWJ9 z^A<+!dxl-PY7Tqzbtu4rF@vD0Pe@=6Qhx#j4k@iH40Cf~ivu%EeqjSD3P_&{t1#~a z!D>>boKCt{f9Vc%B35KZ8yP{Sp5NXs`ivvl-d?)r zo`8dm7qaD%$9l{rXxj4E2ZY6gU|H8i>%-!+n#hHKM1^Aay8x1UB(my8# z1cg96|IwD4_9t|ByTG1|VdWZS#qPwP`=@D(w!II<0v#IgPq`z->DIqMBNA`J#es0h zxHxtXJ5ByWh%4Qk*o{r2rG7mg}p zDHFMutx>olP^g_?M&4Guy*LvshZO<5_wB9S!7psu zZ_78rQ6U_?>f(vw%-jZvx6!Ik*s8|`-^Zmd4HcsmU5}kLHbXtUL#Lu6G`zXl5ndKg z0c0JjK>;VZaBb#|=yDm(@_FA?mgr$}t<2Y2Nji?S&taO*HvYsKeVsHTJONV5;5MIu z&4>^e!F8P!knq4mDez;DCNXzb%LbT!V>)@Br2Gy08PI~LI$*s|NTP^%!q~o7;bIXd z=boDiK8vf8z+S+)&TemAr1{ZiHC5z()y{QBpekB+VK7IYT*)pIhKR=^ybbBB2@#=; zus1GIIzv@PR&R?r04_anLf<2)FvlW14a|AcBE)3zjtXOSBa#6x87H`VnVLV)3f#pn zqK&gKxQ!XPT%HwyCTr+S_PWjGn4XDER($2=&Vj);|=gX0iOcg zh(=>7`iA|o=9=h6pP@cjvX=D+`*t7d!fQHXdo&|i`=V1xkm8~=aJZjGdaB%`je4XX zL#YKhDrD`5`{`+ThEy~yyg2_6?$)tfda=inEsYKo=9-RaO{3CMc})ZJ5z_gLxJ9&i zk^6uO{c+z~-w4j^KaTlp- z*sdt#u88@rz%9V`k{QPsX;L~5)>MZ(wX<5A#B7n^nIF;;y1z}GQh9`>xVMY7_VX4w zgSMQN4L83%V2P$os-UUy=?PHdEwnA}(kYzr&E(5(CfZP+(0#wo!np7=e~Q3pc*`b) z3%hd1Hfg~%YXCpIxYVG0V5$3)(TlLa-bVje#&}}+*QUJT+LSlUH7Ucj#@ZJTu(elb zpXH7&XzhoUwI6xRK^EHWln6xzWTUu_uyxEQgT^iLt)ze*Z7w^d8w}_tt_faYR5aHa z8VCYz{$fy|w-9ugv5NZ9?JYf675JC4t(JDfL3gUCy^t|IAuBGGaz8i2J(f~p5(32i_EG#TehTU{7Sw0n$KccW>}Yw)f8iM9-f9V7 z@M{LVjVvP7^Dj?Ro*MtkiCC6NWxpt&_SDB%(y^uhpOIrm z_!Z*MkL#7$s~DQst9vBA;DDRwEAI{s>tmDtI4-?+NYxVK!Q=Q|*8^irG!Na*PPF6j z$14YRlo@qY20e=CIwgl#H{9WCzmJj*@oI?jF(w;BUA0Rlv_tpIvp5 zG&M1y0iG$R-gtN4A6F_xTq(0U1~fv_l9vdm2|`pl|z9x zRg^hynaUX4(Fo?t`0hsVbfrd!+{}eeIUI=MjmyR0C-!1$D#g$zbrqj^_u?{`hrjYB zPL-K8zNho&0yzJ-G<+Pg`z15(NSbsPPoR>=fPF1uGU zW8t`>_LiF|Vb6>`%l&@4MxaRQF~3*n?V3=7fIyn9*>Ml3q1o|7dw-%y9haM3t`60T zh4ZF|RM;gUtN(Um;lbp$5FX6$79Qje6dth6GA8Gqx}<<1-`|18lO`+~sgX1FmQVrj z9MJlD!E zk*P7L_c)^2=E913ov`AfDy&$13WSBxXB(~p6mTa1M5U)lcj@08#i6dUjldP|BVUoW z>?mN7M>9UTx6lzL$y#FJk$|KvG@U4DNz_V8TEh7xy~uMv96$xp?ZMDt=a_>nH&fV< ztnn5g!3Sj1;CD>mfR1bynl)mhm`?#}5xM+eEh5O6Yr-gyjX|(jY>9K`c~X7tNIqRo zfOx*{f81D7z}L9EO;-Nqd0{M`>4Fj7D1OY4;dN5Y#fAPwn;~OUPcA-hl*#3YE`aa8>6K5+w zM+AeBl!kq@NyFZn(y+HBX_#yxVhM;1sfhEEPOzqv{DbMM0d;`i{$Ac#J{#ZIHu%Pl z!8h*dZ!EooUGtTtgSyBX?}#oz-eB@$6P#Y7n<5-fJGmsagDOWo zIV@T7PyL#?3xlFUxi6{E+p%$Z$^YTI|xrS|7(;)+zhn}I8{ypr%7a`hw2C_ zrP6RjrJM7s=1zt(^NbN2Nncmuiu748h_R?lab%z3$eiNU1Hs0$@u8Bo$Vdl&abnKW zA_}i*lxWU9fxCphYh^sQx7C1Z5$2Fqv#AEy+G!gIey7@GiUVGqnkz3T1q@0rK`XzM zz$X=oJ1JqIjG<;l=(mVlYiPN(yrVbfwN?4F-eQ%_0+*V(-I$f$8;g!hrN3&LMp`=m zre;2DafFBWu5=M0LZyx!3(^u+&mlLenZipNIYENa+phs&42duiqw=H?D$_ ze48C5z)6RvsC{w<>?Zr+>Yy?if4j1&dF$%wT(O&>r9_$bej_sCBM@s=EWL@LH3e`& zJAEKVO3*>*rIE7+D<&C$If@}6c9Ba^&-sQ93SaE)0Ekhsi-OG8_EeDm-i79p*6AJW zd-YC21-P_-qwBc0eHbmvPDPSQs$#8vD?}*a?JXK`Fr0w@WnmNzWOlmX0c83fAePQQ z!%4t<2Bk?A)(0V$8-3+KuVF(k00Q3h@>LXk5}+@iKHUYk0(e1eiUyD z8e)9s@Nf-eeCP2lzA|L)JA7n-%x%Q7$=n|hFP^!D=%{4 zvPgjqScD8khQAK{95@uAkXx8w*e>7IAzUt|!be?4lrG?Eq89tnV$O6q_WWyJCG!S{ zPZ!JrSI5_x#8)Uj{w&p}yu+Qn5P zPiL?v5GqAHIE-VucuuXRr!Q3<7plbc*Ap6tb zLPmXlw~TuHKpFKU&hmm70P?`d#kJ>k;@S^Yrt11G)9$sDxsbR@5whMO9m4lM2HsIC zq?J(bIV&`*z0qG*G>a~XI3$NzuW&6;i^*RWN@&s?71!YR0?IToUYdTw5@eWR_-9X zv;7ciL_riA>dV@p{-tiH@jtFk58v%6^>l;8f2l^Mstrm=ZzW0I&ikNe3l3;4D9svEy z4gZ~c&{iAFRi?gI-peQe=p-PRqKKR9XwfsK)XHL4KHvBH_NvE@eW3|` zpAwOV#2iD0xQvS_F~&q?e{nEb&6i}0l@~J(1w@r z`NZ?zW7i<|SNMGI`9Bda4E=cy-#>Z&kMs?NeFxt^dj8J>&h;Pg{j=x)mGee_V+_@w zAoOpZ|6jyVL0|qGzW>Yf|C7F91pgm=|EK3i(S5K$8DF#p(6YkCl(`{x>gdb`9Ji#K z6)>;b@eH+jq`nrKj7I%C9ucnBJR*F!>k(nP;UmI04rl4Pcn=^^DcXW|#0Tyr5zF4g z-V*hv+dre71hO^EU54&aL!{N6YKSmbv%7c=ho=QP5HaeCekz|9M&i8~rPk^A8iABp z%$x}iTj6*t{Pe;B%(0yR7G0w-;w2Y!;rRW-cnSE(5;(FwT26xKqvEK0aa}P2IGV%! zV_6ZZQ;#^#J8FO`wG+IP%mFm}kwtUhOL;OC z3lK4jPVSvcYrI~BxU%W#)L7M;zo(K%7s4(SOTs8XUn@ogV)1O1{KwShq()W(aI%Mb z7Dsm$RhspZ-NVe40I&iZ~udKTU< z(uxrP+xi^86m6#V&cwnf`4D1-=*zgIx>RYlmJ}Pw&lAGE)P_%~I>AbKN+*z@3vt7n zjlfgDJAyuMLHG-O-xeNT;1j;0SBjGst5%NE0?8=tLGr4~JD-1ws*^l7+rIXUg4OaD zEp^O2)I$&Bb_XREUGx-9vtvdv*%P$y>w?Gh3B0L6`);-m`pm0_eZ?CH4_BPht zo)5N+I@gY?p|ruzsE7FS(Jn!Eed|omLu{x$qh;lGl-GOxbDW*3rJ~uLtqPTQucb7C zm8!f)KM^?$naxIkQSwNsD=@;)-PswXIU z`$=qrObcZKFvBHOsJVn%8ZM#oexZ?96LjNLUMqfKy>(Tve)?;n`n{xr^*Mo1pp0d) zWIx*a7)6U$Y%5B)Ql)x@EU+kFsT3jzP5f9O%*Y%|;WOcv9eu(gqMh^#LUBQgZZ|L#a}YnoKe&SD=PYi7ffBasAKA zsRw+iaWd*UgN?=Q?ezBc0#1zUfqOwpf&wc9kC(r4(a`Y}2X6d5U;B)+F{o5OEu*q1 zD8#;qLv=sp!ATFjy>$eY?pQL4!-q19k4h{Q((FL?lN!O+cM5pdP%S0R8^ux;142l6 zB?9pJLYMHuyaF9ViCNGuHW9X}ZGe>6&FUm}nzSfnimXfD6nx*T{IJECRsR~Pz`5s7 z%3$JVwMn^35{ONGi$gG*}up_0K*0A5$vfg1-}+;ID{G z$sfK(+4NWBX4X7E8U4}1_3f+&>)TCtAf;_+4AyrversDAKj%VUCc13=w;ZO*Ar|~U zh1z1s4F9BE-H`=7mR)Wu*oM*9q%`{2P#Qfn{o1q*tx*(=>1v~0Lv6GK%|Vy|q%~Um z-YD6JWkoXMTa-R4GMUhn$*?y;N-7^5J?(*SQDsu{`+!H>t=BcT>UCX|c7j|q7hjX^ zaN9IGJ#3p0Ehvy=OW{a$AS|6SZ_=y?X9GE%LH+=Qqc15KAKqUuuCcbmTEX~(hCODx zPaEY!bGx<8?bb21w7bTBYa2@1U5l2sOKRFAJT?T{sD>?ca5hy9$RDa2FzdIEX5WTK zGg1wh>8b&gsW7mpQy7?6&y&fg2t9yxlLkCGqb!LS z&O*^8$Rq&2a8h?eocwWa{;Qmu@g3*pta@&a__;a5{F#>|3D?iS$NH!C(QSdRF5Jz^+rfvIt{gOVxIAmW_!y* z0XI7X^rVC(nT*LGrd%PD%P*6AwVNdUs(AK1WG~(?caWhMmY)P!BiMPxTd}_Wp=MS= zMaeVf31fom8}fofwsSEYJ!;j|E8Z5$hoohiU7_E;RjKHxTD9K%oUq3~utuCLheZ}e zFOniv7ft3z<#9B81K8d~Yu-scRHLt6?(rAA+{-T-#%Q~rV)#>96r0@Qu6bh_Yqwga z=U4AqW4md$ZYim;=`1DR>y?A|ccYQp{7Hh_9hFKI!L}v7u?5iYhz?MA>y872FZ?I$ z7o^9>@S`-EfZ?J_X^BJmn>W(l+)6=}y1caa?C7*>Svv6J$I6a>YAN(4hDuCoo0YkzZ-# z%JWma26p<3mUPm|N=UH;d~%^dX^rw6?c;a)5W16niV=>&ckMjx80H(j!(G#W<8a?p zh(a|W-D|<&AtQ-;sC>j|qN7hkCsu0@w&`LPjv_bpO%w`2TephzJ(_eMhxDN5eUf1k z7h^nXx-IX~`Df~cDPe+DE4mc>PII0&ozK!{9R9tB0_?%`Kl&eN%A+qaZ%*@19mj)t zdYN9zdHNi)~`PeP`71=0W`F(~$@;xOJs&7(@h$@ED^Y#|2K9UHXKrJ91&ne>Yxfyv# zfYYW`M0w$&!<4O<{Vuo?3Ie>K#vU9*u$Iul!<^Zu!jXioTq*JhUy0ezQVX~@P*w)8 zq#R(0uAhO^iRN%<6QIl@zKUjOKC|O2t{jme^|g|7iH@1AR-b39(vkZKTh%Sn#VuJ0 z+%kivTk7wh9>D<)v8OxDvw=GZ{yzTm-&?od-^V-faT+~4qX_uC^*nd5wYc(5!{)F5 zaklfPNAc08w@`NhsH6$+)k5 zK8=tA(gNPab3|O%lW^5?Jq(`%`#O>;E4He@ZU*wo3;K= zA0ZOj%qu`r@hSi$9l8`i7sxx#yUJ3a{psC65lv@jX|^BLR!)~^u9gkfBDvyY;ZL-c z4|f4U;jQ>-xdlhQQ`qaHJ3xz!sMIYWf*oTUh{V82$Z(dHD?i`pdoM_RW7EJ9zsO)8 zUj-qoPwxm8WQzs(@P)p0v*i@6!8|X-Soqd$Ju0Uk zOIx$*jvrSNW3b~}PJ&4}X+hylDX{g+r_h3OD5&a$lxb||*R+&UZ*uwko0rpy7MD)W z>r%RMb63V3)Qr7#AZ+7UGZ)pRQXM7xh}e2=>11W4X&2ay>|YT2u<(PWFV;>#PNC7J zd*agoq6M0;Y#KepS>zVbz_+(sDI>%lB38E%>Hp)p)QK4!ySG`2x=FYBD4a!}`(L*| z-~RV)Z|n_jq5D~U<&X6s%h1C9BFu6Wf4W&! zRN~CT>^x4I%*fQo*N%9j49q%}a!B-%9ag9A^L_^}qc{O(hCUy%nBx39C={r1O;tcX z-Sm)#)>R9nX2FA&1kEcOQCJU;=@Y#pz9T2)ZlrT!s2~d?MLop~zd4a=?Lw#2<|YQr zr0dq2RqI(Kc!lQL9taNj;G!~))Nc1nNcAaKv1oIV(SMm6r;5{8e0hilMM>3|kN~+o z7TQ}cBgYGh3S(fT^Qt~ySzjz9TIiw&G^0JsyR&pymWMD0(9Y-7OuC{_dF&(}&dA47 zj0TC*^il>axhvCCGAW%gw=RgevnV9`=h;__6xjRCkOIY9>S3?+mb%BF=Jy_(2r&2_ zd)&Vf=Dh~aHwBv5-z)#kzdi!9)g@CIXPIF%91+SYP|hmUvHfK8!rO_)qY?uoZl z|7H${QNTS2uE$TocIY>N=VLFt9PGR znr0P-?KjNCFn|L}+Zh@n5m-|>J!^NsO>ZyK)81a*Bspc8pn!T3jF_WX#q zOAG=sy8^SYf=PL*8yN5s*e`ONsc@MICIofy(<&-nqN%@_o)z&;sSr?>gpPZ&lC;&Z zMg{w-&hwOjn`ry@_Cb~DDk#2ktvIx+aaXEljW2t`;^%66V!T6a-m)tIR>48Hq_@d2gfDnCn|=a z`k;RknktE87LMa(9&~X_c&nq-+B6lHkW3}JJi5X2y_YU8Pc!G zoT2ylcZ&;2>#QEvD>V)oLir-M28i$_05#Y_Fsi)*>&_SEkwBD!C(5LBq9}xZnQDjD zh7Jm~#KT26e4H8H98Y;I)l4BGNolC}p;yU`(9%r~6~ZAyfMs2xQ%Ja#?mDeL)IlR@ zP+DqROrwx!6ty#UHF%`S3PFz&@1Fs|x%mONYr4ffV7NAjkSTF()|_VA53td z4Akd&7G0lq+U>KT6!sXxj@F^V)SzV=U@>@N#=jEmB|GDq5K;w+0eb1XFryMrra(D- zB!Ei3I={zN65Q0_W!kYVdDiZB)QX5syAz>)CS(*)TJ#x{;X~Lmaeb zgdOyhA0L%Fqwvd)v(A|ceHP{gDj(saEK4KZjn&^fx(_kG&cWD7E1eguc@3*C+;jxy z*ZT=GDp+lByOAdc-n=T#Q0ZdRxRy)pVtYdC>MOk24u97-o5|6sdo45WHN54x{pMen zuoyA~w6qY)cim}b8F-^DOE+4=ZnO$9oV3n)#YhZicU~{jKG;qWFIR}3SA69pv3_H0 z;;>QgtIhpl>D0G4&qEh%^Y|)G@>Y?ivtbB4EFbtl#_#}`7VqxeZ%%oYj@7pNx$en@ z)&8aSdmW8OLvkm9C%DL^B=-=)l?@An0VWVvBw7&l`4!xW=m~Z~4+`k3iSSz&VHT3h zIs$DK=&TnubXIKD8bVPqqJn7D+k&tOW=kN1wFAjZ(TXzkY7M1%{QzPTDNuP9ZV`=G z$t^}^VT&_{Hn*ivgE{qVO=Ck?ZCX;Ia}!R!0!l(2t+{gFXQmZJ4B0ANGjt{Gj&SN8r2l~vPZea7VODmV5q@$~j zC-}*+SywFbm`UyQXnCAd0*-F3#j{su9{r!pVXBdUJ5hxsY+owGeTnZ#Zn|E}&}cS` z7kLb)lj%tmorFO#`W6mu*!mD??d?`?FPalNJm1Bo6y37pQ%0TEdGak2)azaGmMP@B z9OP0w(!Tfb#Y^#|16@rUVK6KE?&~yU(<6Nr^PWpW(-`J0wFUUeFL&xLOk>AU+fV=M z8ebjuCHE42v904wyNxQx>p;J0M*;aFF9}V*E@0ULc^HEX}|0R zn*$Z^*LcS!Pb8Yy-PuEdRr#C^nYX8qbm27J)*!OJ&niJllW#)xP;2IpuVMK#%~0KM z<^5AHsBx{+c0L5kZ98)xeq#vw)^LgP+9~^3mmS+!93*cn-SMZuh~kIA8eZ{Ay9{uT zen-U8S0^6YZFhg~;-PrHV22%hASJbn*u2HeBPZ1WT$?TfwAUZ#Q3fdwglEj1mkY*NKtxQ8J z@jRu+)jkT9WktBt@37+IesUU;X+;K$CiZTiypFJfh-T0m#E3>4VzOb_>X5E)Dhtk` z;QZSqS$2rhb6NVR&tgvVGZfC8j&_{)3v?pQeiJApRgPZ1k&20P(zJcQ@Z6D~0sB8T zBM35`qRf`^!A%DRgPeKriZ$(s58F%;aJRi{r~>XuT|jejiiry3UL|E#?bS?0Fl%zZ zw0c!M5InCZ?kO#2XOxrRmiy18p|B*q!lXIMp62*GI76A!)eJN8{h+c8({#r6Mk$Q% zlS*hcB`(BrBXAtt)BChcr44b>Lh5_u_E6ztZfh`Y=~CEbY1r5dz|wjf{bLy;oGU*7 zO8Mw8D2L_NlzAoP%GXzjscosn_zu&s{maEq9zpO9&m+tm98x~~N zq<(DoYNww44@L+j1u<~+(|#v_HyuwRsPW>fUzWz(5WsyegDy%C1)XwpMq za`e%FF-=C%OoPACDzt$UDId&b|Ku&AUlwT$vklZ8^M=#!95KWJB)T%O!8maxumxD? zX-4Ez^lj0iYV*_d%)3csY_oI5Nu&&jvXu)}+}`5d=?O$62DMF-uP_a{hX=MKk_Y)` z#LcIZD@3v~)#OwXud{wtO zK|?f{!R_s^wOHm;H`DJ3w0)l%dp(wn)U3~9PUACt_CB3)Mry=n2hBpQlpx{^(ZmYYR5J6&PtrX4eE?&cL(ha@@WQbKF!$N-<4;%&~vbbaaSI6 z5+-uNrLd~%S#P3f!g!ryU}}GBRTHkfcrR^}IDspXv`t7Ilqm$4wMC>>Q_VSYtGS=uIlXutMYQkatBh~`u>UZ|mvb&i!1%K}7NHq%n zyuo*JNx7B=Sv;7NqQF6S<&Wz$QZ0_iXWaXFDJ3b(Ou{i9r{zq3t9=NYC0whOE8W9$ zck%i&!zORtqVTPbp$iT~AL}#9RH^CfUJCSQHX!4w}Q ztuZdK(D7}syWt8S&vsEdfPZ@I&o2A3$4WV%Kiv)s+-H9d*dJcsWAC1jQ3!qDMva(5 zxe_d-9f$2WOp>%{AV<~+8?>hyA^e|YTph21NnM6@dmBw6pj$?wOe8lO(=boIDH_8l z0s@zj&oRQhH5>U7cBbnYDX{(sv2HkKMgbf_O8Xh#lLfTp_O?R7)`H=jEh=X42##q> zyuFR&GzQoQPsqOrehcVsI`!aNK8QS~lMg~9d^gF()>?Td ze(1+XS;ek@?RU61isA9rjc1_;sC>VTMu$boqlWXs-JU z7hMB!S562$oWgY@;f7&Fk=3j=aV>*QC%#_?$XY^qx*IxPkMDf@9jv%K%HF1Mnq_}! z#OFy0>#PBbtHBdBFiWfPE^Xijhb;-qFP)26pF;mPM#tDiO4Ta2XRu&T|&*5jx$L5%nfrknHVs@;uC^$I~!5k1$=_k6QZf zlsJUYk$8JM#uwF=Wur=*L0Ep{!IaxUseO#z^`e&C#6U318NR$jC-~<}@l0a9C z$k}Qz_m3tCGhId^0n|Kkjq9nxFH{1XIN+ zhbuVaQ87vQ2hZK-YTBN2{U@m4#3+u|eVjkLLanYSUEI@IBX`i$9=ZLo;S@&;4hZ~BJ7M|EX(5^CJGkBQX}X+^8zDu&(whAimhoDP5K#I-%K4xttHiJT2ycwziZ{QcoacjX@TW~ zc98FMyrU5l?1n7eyFQS0+Ulo%$>k4hHt7YKYen7~arJ^6F}9Z`k$`-G-aAj9MeeH_b`#j56b(EIyQ{%)gTIVSp&fih$vLY ze+?8K4&f8XMcEkG;e9Gvo1;|M%72en`>&rs@^5eJUw+ZQ;?f%+0TCaL59@oN8(*R@ z1}bcO7Qy3tXg)ROCC-iKGp{&5S?Gc*?gB{kPOF7#(8{K=cu~*$H>@jxB)IH^$t$1j z{O9P-_!l3~+u#SEFSg*Vf1UVDu{#j54o=e+Wi57L1~3;kS~Cs=9ukBGI+NPrQ{dFNFwYWegmK+}=M& zNeHTk&|lQX_@{|RzkXR_$acT>9^5q{Js$Vi5rDG936~}6Z^9@`oc3?T3?Q=N2!ctV6@CqmtM`N zELdClwlYeI)|ap{MXro=vT<32J}L-s=l{sNkpX27948PxM3GXlgEZ*1O#)FV9GcOG zIlr(FO16fWji{rjtvLnHTOjOX5wyJ>C}RgF^ZYZ5j5S4!g)TD2L-5}6;)N6n|26#y zZhkmA-$t`E9KX+Dte?}0^hl4zCie}MAU7KAD7?B!M|3iP+QtQ^gB+sYv^UAU+Nx-Fqx|&+b);ag5Xb5#9|NNgJ)Qzk{ z-E%I~J;yVzuZGZUE(vw>D&r1I^kd(2z37#ssHyuik_A6kgt8wiLfM~{T=Hinlzol7 z%QL2Vd|Vy=IXVFCe?VRZWdKC7UZBSZ$)YFyD_V!Dc=87En%KHr2Ifz)=-EG(;S2$j z6X7HRlRiV)j1pWh@uW(@+x7;6Dgsx?{o11*oCqoJ$F)-4uq5R@StsRvC8WHsEQi$3 zx|H{A3l@Fxf*(~HK68st^!B3bZ_#MsEFECT@yrXw8O~1go<^IC5 z{6JImwtrfw;s@`nB!A#H8Jv(G-18kDzY$SJoDP ze%8cU_DN5KP&TZQWfit{2TK`y&YYUSppwk*<{9(`6)gD_+%a=n+fZTottod+2kjt5 zxhq$wEpTo^|D;ytnkc!Ie*AUps|wHggB5 z)Bi9xqmPb^a`GhQ;O*zhe)@V6fhQ{G0;6k5+-- zbD$}HLLtNR8iC()XgxLNCtcw8o#l%7STFGVsU-0GNfY?}ys5zN2VLOzlnMO4mjb^R zDDZnC1b#0yf!}*B@cU5+{JxU{zn^u1-}y$$nh0334;^cT_mmH^oez|=!AC}(^1qXL zK(gQ7Zp2tdjIl(XvX9)Q9O`5x%u(AOIiN^{L29QYX(Ihlf+l!O?xMebj(PI0rSLSi zDTuU+lvMYlE7%3hhX5@o(ut8Y7_u`AWae0E@{bL@{)J4zobXPCzhK~nBeZ~F5H$!3 ziQrhr%oQ(blB0q@Lg_fv26C1`OWJot{qVC?drAFYt66ilA!@}0s!k1VDy&GqW+?r_ zOFg*rX|ph%Hqj85d~|RfnxOEhJ3->J?gXhiT4GI5Rhp7SA9iFv=ctT@I22p%d@v{K zKFHSeAcr1|+?ygroMvfQkPc4A{_?CfiD&4U#VXd~96y{bqUjMpkD`C3%m zwD~1}Q-lam_Nq29y{fUdC`u|x6Hl|nA6ETW%`N_`P@sr61c8xV+05qoJhE}q9%LwB zwV_41Uzj%Kg$@N-Xcl~hcGJiBB`x@7Uh;OQ*tkk)>$tJZ!IxArq^l{4OWAfvWMo+X+uCEp&aIydofI+gL?WsUJ) zT((L#jQ`+pn4qR9_j`3|vrvC!TA016cf7NlIecR&96CN|WM1})O*da;yhN7aV+m!) zutd{L;ooSMXvm168QQBaY;o#q03;hhm);wrR8fdZ{K6K>Kvfyk;AbW!qfry1^jbw! z90Kr_%BzCaAe`}pNNYIW~td`h;bb9TR7!`B?| zM|!|KN5j+$;ZaN8l6T*B%v7_tFQ7N!*Lw6$G+JagAVZtpUHLeaqNHwHl+(^2tS5gqdURO6_X-P}-GRp5MSCT<*_1%)t4Hq;QW* z=HMJLl>81zJWzJLk2djUS1Dh!4VRu<99c5n9aDLm&HLuI61PZFwHZ(3EmFbhPjrLv zWD_4!(#eP2KzzPJZvv>684mK`Zbwu%5{g=3T04H-iImAPFCAfcir_+h%Dd?yjxp?A zYRBYW?O>4DYnq^@`mRO@r0_xqE_cX;{%f(JuQ|qcHCKQr5WCA?)>^849w!X4P?70Q zyV2QST*30*4kmGy7fm|t9Z4FKO+C=Y!qR?ix`Q%Qy`GNpA}RBW3c&*t@a1;1sQ}eBc5?@JvrF5VVPI(7`>w{kZ;XA> z-8HC*vI7VXB>}0{qkJ1k8LRaGF&b}qZCQwf1plwP5btxX+E*j3z0c}V>z}duY$zto z8Q?Ct31rCfY-OUvr1$4$`M9?ntreP7UcgV-`^CK$Vmb3~?Es_JLmcyYQ3WmHcL{UA zNYpAL^ClZpr@{+{A>hzUmDH*Q!6;dWV3gE*tx8MoEz&B&Q6eaCTNHCI>2ERkqwL=c z>S$BPQ8ivg(bLRxb`vvul%7Q{j~4C)U17 z5*Gd{8pq4|9jtC8FDCUK;2omg(FCVi_0f7<@urmD;Tx4ZdF}XRh^S9-{GbWnX0h}G z!QHfK)Mn)bJ&_X3jXuFIPDx>G`r7x7u{dy?dG2Od2rE%fFJjt_kM+8D?N$JH&uH@ zBOiz_eCRB}s*cg4kDN{6U`LzB@rnTj;}Pn1cD+C53g@bG(CD<GjsE;f#Xf$1@FPro z`=Yb^>%7@%?oXS&9}lO^?#15o!`W^F{xx^M;sx-Bt=}KEexJeCuU*!_D%tw=x{M&| z^|-BHmq5_8S3)@p5t{{}VU_gTN6EKBf$k^~3RzjdI8DxuvX<&|U;nthg%QYFdcRT2 z+M%I>i?>0#*ex+eq$6lQ&G7Y&Fl{{Po1=jPMulyns|h4NN2OjMVZKkZAEM$i z%|7P1Ovsz!D_Fnbc|;Ca{Dj3K8NfWU_^iYqRCvD<(i+Ce7`1WHqURsWC@*;A2~^v+ z1*#k+JIRH5s@@nj9y=#`mzn~8sVk=2AcLRo=54jaJ?gT z+=*k3H?09Xw80ycH&`)nN-vX0Sk%Bd2=fJ(4Vnc7c+QDR>5?jRRBC8jbXWg7cl5t# z&DpP&x6&u2(k08>K-HqZa&EK*?eDeQ`a&wQYZ{JvbqPj5Q%c9@?Ft-TWCQuJ22-jJ z$Jahn<)_4`PzsgJ^OmzR92|sMRJ*oxk04PigX;%QO#CxIXS(>~FZ{dNAz3^tw$#b> zOI9qaQQfj?Tb5PP`X$GLj;aff7S+y9q_)Ago%X=3S%W@W7K>4LJul#^@o97skD|sH zRxcY)cIfHDj7s$Jd=_0d<{>(dXgQ@7&C9s=60QtG(GvTim8TgT>8;YlVK?rz$P3#J zx9%RK2htg8be_9%BX~Yvfk?Hqa7iLH|3$XhCJrSSA{+{5Efte^OsknhWO~KoMq5@C zQ75QM%bn_q9Y)6#IdQJ0A7gr3-wU(rX1_DPdVw%~sA{;MM>AMKJVe);G9p%$)s$~|N-wC! zJri;0z-3KaP)otT5o!_tzr8nMZ`)WBMgIzoIin$LkRiB9g2JOwWc%3fd3%=Q%zUy& z1CpSK7zB6$Qi~ZYA&a66SwvTcc?zVQT4EQ}jJZEt`Z@n`3UCZPHx>v&js7#MXVFLDR7?=a zQb&tN+0oRr3M#TB+gYyz{cbvOLC-J5qK#8J97ET08co@zX3=V0I`Hj!9ThJ8p;lMy zBF!TLt}9A{THOp2NHpN4fxklzoQiwl`XK{PAyN6e7T}hxIwB_-5v7JtT}g6UMbvY` z?W@#$8U>xC=2I%2o%W%K!Y(CvIVKoT&_}x5Ow8&Bv-tOY(nqBmkSIHWq0*oW zsJ{vwFpzSg=22PTqGycUK3Xc?0C^^sGQEE8J?ii5Jh}iahBEcNb>C zXK2nU{6Jv3*x8vDeN=CGEqUt-{d5c42;3RJKDIssKOr=Dm*tmgB~&8a#ARjJFhwhm z)@gk7nqk_hS?%9#|85cDvSL?iR+;W|cNJ%3ia$6ic7v$I^ zRo6J?E0a+2TPsg}LIc;Z$zRWXjwsoRW;a~&uItP^EU|_FR!Qm$;9VoSele}p3d6b@ zjdGx!q)2vdjnduWJW4QJMn7`nA#ECOn3_lsjjnz|v(?gG7(f7rS`59o9=Ls=V#qt{ zH!_gWwZWSA7@Z4#yNZS}(_}$Q!o4nXXDc;YGIN1J>l7UiehA*G`Ym?7?M*OPR-q=0 zR9Lp{93$d~FQj#b&}P>2JTa!%Kw4%Q6-+jGP_g$eY@ozx7Hh=_9ru~^ZGxIC@)0`FK*fk>_=<0ziN3NUt@adZjfr*q46mIo0p$Tfe~ zic_ZbzK%Ac#(yHNa4S`+-Kk(@rjZW-L_oX0duCAYQ0N(=0*$fr4|&q8%8a54TKvN7 zg~d9vWF$s`xGfhsPo(A(CGq!pf_}0D>8@z;CqoE$)}E;X zV6EDM>vR{UJOfzgR!sBCeKk;~d(em6cqfs8A^s}O@`U@-jT`W(rM$WiUU?vz7e{ipvkT^7JGxMiv2!FM!r?j~q z*3__o%JzCyuhz58$KGR@tTel?W`FFZALi@W70jjVAt3)g*Q8GgJtdb)Bv44bC!uIz zHueXfLlo>?lAr+?3yK^jL=NYf&{C_74xmvcK}ZD%!fBFh%n;WhnsDJWuEdibU#mlb z1cvD9^mc(71+XAzUJP|(2nyhT`wSw_da$k^N7YMfUh({}S_i!j z!a9gPdrw`Un@6L>gH`2Mt5B}?%=`&{%*V$VV(Yno?G1rnVjEN~<)SP3-m#L$I$@Og zD2gXNBaY~b9T@NCZsW0AefHCC!_=!BdKac)y**{VjtBxF68k+C=nJuX^_lb%Hd$qF zl$6;UUF5AfG;bmpw@o$V(B%YkloJTz?oqEdM{5l3=O`Cr`~(e?;|MR}r(6o!M^kX? zt#xi%r9((AFEl1t@3a&ZjWQ-8mlvp6FP8vzGq)m&%RN;~<;%=~)4lY)t6!pPG;nPI z%D#SL;NM00AO?OsAbz|Y_$*5S`1zOB!x51GYz?j*Sj^VohJIp)R<E0~v%~CmFG6Ti?(5~ivsHItuWts!Xct;phj*H zjV&xe)@H!qtk0}I=hh8k^%>A0!05zQ3dEmx1h7&4wy`5A7x<{$_;RrP!(6f=g zERn)yi^92O6X_V-9ojKNtt=JqV_>^F2H^`s6xy_FLv%|@9rN78tNCFqn$ObSSsBFV z7<-NBwN+_08i*LP$P_jWBm?X5pTIYaV%Q2vWf@3-7G$)Db1PA(BT#6o+aOH2Sf{=r zc|5;0sIFY6?REOxDJk1nKH{3)VdeQiwy2;)7)%qNSP8VvPPYBxy;;oxOH5Y-mt`s(iN!aDa)l^ z1r!)Zx+yLa1+;5`gdJcPxlSzcD>e(dPuV1S{UDWast}>vYzx^IX;`p}6?b4bnR*rQX&l^-g;|H)sV8 zJS~)Cj)LgQF~8kAWGEf@Fp*}_y+*$tU|ugQx`UxlR=sQL6~X>oTMTSz=dfA~ z^>l{58`LiFmuC6N+8qMcvGMO#WwR1?7m6r1FO_!l-%a)Uj`=9Efo81OL{g@o-bujY z*IKhhl&OyP)(3F9^?Co=X11~wK+f?_I{mUOpbI*-64bde-w4=!got*HS>zohAm>XaEAfPb+I9_ZKY9f3bxU(Wb)hCM+IF2Yl3En9H2#wrK-15qRzXf^;6*$8P2V= z63GdQ4xqNLpcXjOmg{iJ=HjKGB>z_48B6l7h#R!`I5%kJh%O0l=Bx~Ds*Wk}1cQ!M zAzw7w0FjB*>ai=$x}8)8^S(c*^}R2?7grngZpQ-f@7eUT+oGS=e#cbV_Z(4hAKhsd zcE{%ZY2)8E{I!*yr1d@ZNG4*}?M{MABM+^#M-tG6wZ>$oM5l8ry<4nNF3Z2`pqG3* z?FysT>ioO#AH;7eETgMrV9S+fsO_^1ock`#v7!^rY$uv(6~(>SRod7q>O?k!-Um+D zh;}2q_nF;j?m~)D43|`h0*%!Lc)yl6Q6mY3D760Vkd#KOCtX*>UD+#RYf@-M~Wvf69BG0=38j4RyS)O0I@OuQlNAkA_DZ-Wd zr#Whf2vZh-R_fznpq-3%PrK1L%WC{|N#h5WVTSh9$-TVsmc{h%pZf@9Qc_t9?@Jd{ z$nln6(O)R|{o6W+-r65gyVWrdN=r+{hg;R|vVlRR3oNqGt&tc!g@pS)r;w;Zl|qq1I6vp0;TSM zMK6O(u{XbQWk?(l$IKtN0Y@$qz>nL&Nugcd}fm~0ek~cuc_RA_K+p^+{*(a^iuX3?SyM3{i!^B^3t#5q3J$Phz z@W}AJe6QK;plG*k?&P`20tf8v<0RUbb* zbRBn3rqq!f#HZdF9OW}qKAv%|G6GADKf7r^_Fl`_pr_nNb7iAmhWXa4sAAT*kSnEcAEYC44m%=o>SWtaJSF2ZmMDiTDc4#GkO ztUxR|DgsP>?PVvRhb(`g=M1Q_XiJ3I9igrND7QgeD>G?M(So+3@MPYf_%rr3yYeg? z5^5b5?k5Wl0btyelZoXkKDBsm{RGJs&_9)b6tx}j=CUH4|Z`}7-tAVb^V&QnKjc&(c=5#Eqb~@;X3)cwr`gchGU|Mgu zVCFqV>w^4GA^p8+J?Hamy@dDYrgc;-xM9M;tbG|^*;`UASO8wV71{>C0rzgR0u~g& z)I8E8cT2tk;*Kde0;?1@-CR}*FG25?$yG2kLXTa7B2UjBnS_I1hq9}2<(8iw1HhaA zRjolr(-2B=To%RU8(y6~)DynA6*12U4Qz7v3tZEJwcA)OSJEX&0Elofj^Yo|^q5i{ zJp>}!Z)5`alH-Ct;Q!Cl$PZ^peLk%k6F7LST+snK$6^hzc*A9F#P`w$41zgkD;Ptx zZ3}E(X)a+^SV4A3B`wDH)Z$!i5e7(MIts?;Zrhr=SaEs5Jl zX%=OfbmI>)!H+rrD!6yIC*wtP4jy*$5!xuAusHzUKKR)^2!N^gPlK~GGrUL!wiovb z0$Epqz{>=!p6fxYksaodt3B%!3!R}j07xgm*Z|a6FoNE-KO^3cLNWSqTpa-{Uid?= z$6b6essos!#CwK2M(0`iopBVV8FqGxQX#jj?41j#z)a}1zw&^1T2?z{$kk4%YVAO9 z0U*`t$(PsBm3vcC`*9E@TE&zAkTV8Y(uIZL(g$OYkZmGgFxL&MIz6>4PdjETww*|o%PT;p@IAu?(oRR# zMs+6zyp8%QOJCz*?`G7~c2nW z$wvp1%%~?neEB7q$La?nB^ITv{GPVLJ(407qgEgj%PWz#K>aekjFa@koatrEPx*Qy zwU9TOT1af>(=ZApF#qaGPZ|(;`r7%Us#__%fGuT z>-tO86QVi<5w#?-*k(sA{?erX3E^E@ry|6ArC+nZ%3QOn2*bG*SQ-8HAuEM94gxhR zEV!avE_aHR--6C9$mC9nDg zn!wxsS3iw0f!HcTcOLlKvhjVV{giiey>L<0a8gTwt% zSZ9_VZz3Q=klthIR6zX%0KHn9-<_B9yMCVE4LHB+BPbdN$+050$`6nax-&T8Wo+Tw}5!BL3N9;+#_S zW}iucCm8+oy>|iBl=DCJ+lJL@F8*PhX_|9boIl* zXr-PY^%bDa`5Bk+;0iZ*L;@Wi^=mC_oF*c;W^~?mtqu ztPgzhrqIZNpxZ74!8@+XE63bz^D!3=S!n*sVZW0J%ZDxsYQvYc6@lO@=3hBG@*@_X zG86v>Xlb`XHCD!HX*O(`AcmcuP0NQZ3TnfawXHYon>ub7PHMcu_VuW08Dhj5aH6C% zNEvp`$ZBXC7T3kcb(;B>_CBfR3z{-4hjBvRDlgx01bc`h%GbBEbGpXta(!)J(V!&Z z+mgwK!#+RFudpEYM4#r@e3`o;eghgJR+o3$8Xu6TWz{^3g4#UG+O}NY1b_?3apm4@ z1A>3CqMHIiZIOe4*R%=>X-N$ZN`+qoiDcdnz1jK1O+If7iW4eZ!Ll2{LTghja!Ol? z>(i1t%2#Uq8fXl|1UHnO0fj~a=i#t?v}v7us88RVV7`B|SB+Mb)P^dnyN7W$zri@0 zxp6kv9A~p=oXw(fo^2Z6QF_TKi0;S&AS6Usp}U?Fys7?15hO=YKM{t;l3;8c{Nf8TSSHkoofrba@=qk|CP+3^6#p=mU%SDaHKQNZD=d^01#p<|#!%JvDh`_LZpsLlr z9JD#b>yF$cJ7rTVuSuD3Xg#+^0+al3j*Zs8EnV|Ev~y{t89gj{5i2o@t@H@WHwq;p&Kwb`{$D| z=LrnmLSH$z1wO-869ZThEy>n7$Wa#iuQ-}dzfTlFwqV2j!d%zEtPIgU5|>G2Q!rw2 zTFIzDNW)-$3KsfmH-4!zSs6#xGN>u|OW7Hs0Y$J4>tJm4dsFMYm!Mwf z!R5|Q)tHBD`3_OVoh!Orkb~As*=^G*%+`l&eaOZ;P?GB$a-Bmi(esjQR~X|0veBqa zhRVt6;U@1Ew=jNABq8263qHzOIxqUlrtOL%+_+>+t~FfXh*y;O8pnqi%MK8Ub)kCY zUFGHQ^TIMd&6|zJ{$t~Z@peck2t8PJ5&6W`2`)gwK{9B?YA=UtcmQ0^=dAMn2c1&_ z*V}1OUBEFSs&WZ~bXw{Y*1#~qhVU7CwqP=td_}3Ryk&eA4QK-{OYxA$F5sDy=n(7S zg>)?7jO9v89d;Bu1@C8&@+;QBkHKD*I-_W6v|mdj{q{A*`#oLnzM=b~uyw`zrsj;I zp*f?lQHQNc-YD2Hd=1~Om>OHhUe_B%_K+@e`l)L{;Uv3&E|$6)jy)FRmqnz+9g;?h zSHemU=5eA1k*Da<{ulgcF#nh}WUkc>q~^s8qK#-i!(8H3jVz*vnP3s8om;(&c^}W0 ze&YB2099LLT9H#xF>oI4VeHSmlc_tPa7JE@5itwv!`dbdqis$2=e@?k{Ac%IPA2?w z)udsbHEEcvHfcz57= zx1LXK!U0<&zoE32sz;jx%SLU?w4%{VYD+K7+DAP{rbI6mIb=_b8I;7TZb&~m$&M@2 zx9n$6FI`wBm$S%89|xAFy8tXCcEm6!3yzAlKuVzOkypkmwMt=XT8e!KbxO1NpcH}- zxAvHnS$kaOtv#k+Wns?-pjbmtf@XKjtN+M87>1QGZkHZS z=8DG2*!r9yyxs%_L-B8mV6%4F!_>aFPUA5^n~0uijIE{!fIU#wt^Du?a(ls z6S@Pd@)T3}5iM-Eo(zCU3K&4p1)fs9`sqM=-$2V?Zd-gH=2lMWKYLmd8r#J^8LU2+ z{c%V^BSjYX8iQ|`iU-0v+Y;#UBj*Z&?-ugs`Sq%ly2M7^senqDnLSf?WQ*HmM*Msr zmZxH9i*FI6!E|9&xtvFBkXfZuYfS8u@SoQd*fmOx zitg}j2;3K%CXh}qC$^Aon@cAmhOvF8@1v_xap%TKVp7%(tzpldTg=Ou76b67KF$v#1Od=jpMK4QHTWm6$DH*n58_nI2j6S?BQD zM-j+s5npl8lA@p?LLNbG`iO)njBH~4=Jh}Ovk&g{1su;LgDZ$=$+ZT_Nnp)xTg%MG z)|Sr6E(*n-1y^>wEtK2clThv|Ba~CM*1y+<$u}}WcK-}U$o_*7@}@?}TV3PNdntTV zbboR)=|=%ZHl&B#m%0zQ0yUTq3$E08PH*89eDu`W&o@Y9h=3)0mg$ega|-uE(K|=B z2#EJ@XkJ{R1}Bf1W@A@7Xxg2Y7XKs{3M9&e0&(vp6o?;^;(PD(%nHebu!oy=oGPIS zc`6T>iCaZihu4h=6IGF(C{O-^;V}3chQkn#O2`W6^fRTVUM@w+J8?gIFL~FsHzf~4 z(L&{)Rz)b+305zk^RX~|CI}3+5&p?)w{>?(wPbpayO44|Dw4Gcp(AB|>h+;}18-Or zl)p!s!$PT8+CZ3=IziZiHj}zD%rxVpUQaEjNj0?!D5I8Q<^(q-t7Z8bQ$(N1IGP7T z$r_fq{It@j38`2EL8=^anfTh4tu`ir8Cgd!l!EX)5h7EQ^j*23V`8^E>L^oa~NF#B3BF1 zL1S2@y|)1WDlq0dr2q~{2`LK;={|+3;1mTyxH3W;8ew#W^cC4(PB~hyT#bPUA|(;? zAU|8~3}@>@l+Kk^wEcSdl9?P9kAuPX9y&7Z6|If*vsJul#kClF<(~E~OB+dnDe@FA z{#5LHpiV2`{R4K&!T}HgiabzeF5QlRVW;UmS7f=YLSOMB>7Tl1J$8g3-j+xPa$^VZ zs%D;yt3KLu#(I4zA;OO@7*7JJdM+jI$?5Fu?yef4*D`s6vFhQZgYy^L$lw`qd_@X} zVBUsV%Qn~9b1%y1WEUTPUrFS&BJ~Ic$OdK{S5{KPn7%U2A zFwC)4H!54E;|V2m2owY6sh*~ZE?({`Tt34+sA-j=?`&@3)UrkRn3cTYjg^DG@|_HI z3QsR36Iuu@Qc(_<0%kBFR~b|7{LTuRR;EMq$9S`XwPd@fU`=zL$W!i$JiL<3XEg{- z-`&Z(6?kSBIv$3@C@7GNaZXo>q^AR4Cg|-Q_NZ#DUx*b{ZWi)AyPh7-9L9d)3+yVv zJR;wGcNfv$us-vW8C|gY$+L;;2SvPvUssxkR)6}RYPEXm*1nwGeHz}KKKi#$|M>Tv z|M>Ly)00oNPe1iO9e(-a4I=d;_wh>b;;Yhb2$0L>l(M-`-m*WL?&AT3As2!d*YWruOhOqXAu+Bs$ zp9hgUTNAe&I;S?PH%t;0F(63USnZR z-0R%PQXWG?lT$ZN;LL~OmfbLa?#cHVzC%@hxLsBM%vI$l?7F{fy5Mj~xrX$_(4?8H z2I>}jd_{ahF)xL%;Ti_$OxF`kMQ=tR+PZ?DF^=5TPqN zvN42JxU=&pKG1`ypqhjdE+Ieyn;3Yd=;B}|IfY*Qy)HI^ArN2!{s8JQXJjmU{dNT1 zhP@+YR8o3YAG^uht58fElT>+Dj0z*+X?)i6;7=;DDwLUj1Btx`dP$p}E$!2-&v49nr(RAss7vh${Yu zV)g+Ovn#sn&Bk6Pup-%)uX1?lN{5&JeLB3HGeL5a3X(TbORHvu>$;3o8Y$6swop$i z03f4Ei)n?us+SjRSP|)cXtgqJ4PL8aO7)BzS*5kAIYo`e8ENh1g&y(*UFpOiU=i|o zbYFSJ;5>@0v~76f63mPcwTjB4N=Vmn>Mc-_k))jbqw<6GPADtAR+W`Lpn*}~4!m&` zz$USNSM3MiFoW5|df!WxEuTuCmDY23WR4zL*IxFRm6CNNRiIuKIO$MliANBkIVuPp zRIHy_V3t@gFKDbNW+l6)3T6b=tgyz+YzXZu@$yoADbUN(=K!5oiWw+W+EQSznp74j zo-&xDOUo4EsE?} zU0B(s$FoTQ3mCP}WP8sRXdwF5w4NRgR_c0X>XT5!7M(8(>p2>bJ726xdH*g-9o)z+ zUE;L-ib`YF#N3js+suzmNA+W4lNXyRkr_yIpm%rWI=|WIXqscqMpx4vYj^g9^4LoI zaWShvfr%4RQ*MpE%Ynu;K%l*Xt$blFZM-AsidwkY}8k#P!1p z%ggqG>zE&gPT4RnRb5M_1qi5C`m#2F!ZLqww+*OJsTi8J6+_bv)GL`@<;1-frkYJ} zQW9EQn=;*_epWG3nJ|%&R4Q}M^*69uCNqrO>diZgP{N{}D=LtL!jFbg98&b2AJt<7 zAK+2wPgp?5oZ|>Zm-CocgUaj-%B0SojA1i;-p++Ywtbys%ePG~zGD_olC@jzQ{te^ zhr}g!BQf-0f8E_lM-lkw;*@zqT6F9jI`2&n${a{savu_`PsOV1E1g56oxUt`0pSvC zU^X7ji#~JcUo7=4kraI;`tzw5CLWT_@PlJJ=dLDJA?AKvTHfc#BVg~`8lN5KLZMW+ zg^ib>>&?jz*pm2wOtvktZ+4R4%R9?1{`byhGgy@CE5QswH~B3p5aU*E8x2>ul{ zakcRPMRyIWVmxVOw8Nhm(`&Pm4BWtjAqkalnq8$sxoWD-dM8_xZRRRtlUZJoUGJnN z8ui_dX;{mkAl5XmkpV#sFq;TDr6H?9r&l7Dqn=epY)r;cOd)VxG@s1mVu|?Uy`7^T z$~}6!kTn4rm_=!HWZavYeeR6;ZVL9g?1V`$@?@uCEyWLgy2hlVhnNgHb`+Tf9yqVP zaL(RFLJ$EwBuPs`axfvxrYL|i3xND~3QgYhSa@TSoiO1YlgnI`2onU0UwAO79TqHm zmZ_Ir75w@%VC*{cgQ0~fe#_zr%W%T7d&OQvbxWfRQl(Bvk(ndqa|`Rjx>Z=)OtFPE zx7POLSS5odBL?U-PJHZEm-GU>GQ=40)LwLiSEB8 zjL3USfo~Xqs^D?#y1lpCK}JV)QX^BfgD7XZMLvQHDTSEoVWa|^=?+b_-K1$P@sx`{ zfKbJp)+kzRVn}$bJnK@d!4A6=Ly#|Blp_sRvccrnB1Iw;I+?HtJ1kQ_kzACi9fy-* z|9m{}kLG4~cZuJpW+veBzII!-ui>XXogHsz>^ORbQXM}v(d;o6u?s13VO+hYz=eng z-y#}35nR6F_o=h1IDR6j+6T<~nlNS;<2wHiUq4Xj!fF#c@gCmah`@y%3|zRb7o*Ad z@M6?o?Zs%ir57U>t^8R)evH^jhpRWP`xjvpdv5@J{1VJ#7Qfj~IIRcUyeE}SrAHj3 zVdDCnEF^k*?!&yZ6R%FYmdGzEisY8)&OvyXI@-Zw7)Ir&!It5Ou9DJss?98i62al@ z6g5cAglaRwAG}fx!C+>kfLSOmkSOLt)~8YiQVj_NUKymw+JL&8$B6DfkQWP!U;tZF zYXb(CX+y8iE-Hqir-JTfFThEcLqJmCuDiRkCT5Gg6C|N*z|+zDQF_DXVmMHg%=mnT zz)I)D4mzjd{+o7os`H+BNm~&8fljiW0*i?47|p4Zd3Y+9b0)~Pmd$jy^+C|{rIL`R zWjUzXaO4MvK2z`4KRP~;5&%-K8d$cu@B+ZT7{gA<121O?yIGIIe3TzMCIGQ3NcQ0Ia%WomDs|EWPsC7Ayn54S0 z!gtNp*Z=F?JdLix%qrv_mAEgEySr1gv>zbVH=iQw0VRwx0Q4Z3551(S`@|sSMglOc ztfwr!YFhWTgOu*GQ}n$zDja~gXiFg=QmVIMG(@E#Hd)$gTBLry`elB;uJV4qE(`p8 zt)Zb|%~VB=5cW#Su*SWaDjJxsx!&+;uBq^;`vVL#Q)9+FEbYhVr{{R zKht>O6XA0TkA2O}(QF;AxIkPxEMb<}{dOsfJjrm%IA;BhTjid`MSq@;X5-AT)QX2C z*!nkOn}1%{%@PySF09f5;#NI_ptK9AXR6qjt3G7>_AFGnED(M`2@+bHq+9?H69gOQ zGQG{lNPO%rz0cSFN$OeXirn>#7I+C9o25heUAcu)#*G{Xpa9Kt*h$`=?={pE`)*MC z^`%ppjlIhMQa}DTwdPa8s|m|K;MiDRhF1Q!B5znKXgE~)U$z{2BNq;c|E(L0Y(5s} z-@Be+03mvM24v_X`vB46Q#jY2qTt?CEMU#My8)ue>%-&TH4wJW2UK#Sy596sa2)gX zO~z}nl{wiTr5U-FlmHx%g^IxtxA9I-<}oX-pSmaJHXxj&(aXqEYi&4+jYcpGdo>&F z|K-6w)6Qlq+}ZiCv-6sp`JW1d& z2W0pu#dZtpxE!Mi8Epn9bFG%lemp!8D+q>kBCu`-i7FkDln~%m z>y|~}tYm=OT;T=em3=6)ipg%SMXXt=NsAQ-OcA&fh!)PrKXvbH>6;?RbR!lM#|_ znxc|0I|Oz|>d;{NVb~KcLVs$a$8^B{6Z(P{Jn|d5SIOG$Y}pve(6Oyp+zN=M=!@2p zpF-jkx)R0y7eHBVfV%YDt=d_MKZ1OJ0C;$#VIV`xF?~ff8k%RVEzpl{;{b@E5beGX z%&-^M*@eOzU}dfN3A{7kx*wvcly}|F%~f9d+xqUZ-)18t{6*Psm4v_0Bq~w9hL7)1 z1`OS^HQ8^w+tOse7*60hygoIpmpq)n5xl-Mtyk=B?N@kvWm;db6MHb8-{Ad=X}zGj z;QL2-e_>j`pb`cY{%?5w#kBs95`AEbD8KkBL|ni8x463z3IC;C$gm^D?kblv_~Ksw zreBv`UR7$97Q04Kbk*eNar#-g5!1s9pm6G6>&U|AD`eq8UKXBkSvakn#=+p{;9&6N ziJ6=ZR9X1oo65oyCJQfe#iQ9ymU#JQ;^%jKE-{8}{(=>lDngI60E8$yCOe-@Imms$ z^VMh36vd;_)DkJEbkdvAk4(#Gr(g*^g=C8bP4)89@mLi#NjePWKBN}*VGJZYs-feF zj#VOA1`s=C!3EM3>^tlYo&@}405mj$mn+sNE~EE~8X4lHF|e7T7qcGJB0y0*g*sY` zkVPK+95HBJ_6CqLsP!(bv>Q))ms~s#swp7i>%!s$P6Sl;vAw047e&ogRegjg1ut!mB52GDWW4juWxQ*LOknU}7u($aOiilZGD*1TagmpE z)%%ya^U5O)WM#`@!^iT4Efc~3EJ4~O0|pRjqEom#3_S^Hnn*~T+ymy#DZINI!a;+m zz21+8HvnuOcls}=f&p`JOlaUe2BSutK`v?zW4Uo8opzwCbwUSE6sV|+wmL_-1MLHb zBMLL(GKQS7vY`|=|Ha5|ZP;duYfw&s8udsF2TQ;Zvtdy5gIl2^&@a7t0h*?{=3l=~PxTJ0`m~to&T3*Egnie}fwfRV-Z}4QcT<#|ykm zrqe#hh6>hF{(zndVZ&nkgukX`ZF;Pr05eyBcCR&dP*?!W$j22P{K{u6&hfMkGk+mRpGdk$Mrt|WD6s5a&(G+=Y)VllEW&$vF8tT^`p1esS|0Kd_*!QmP z?q*yz^Bc|MHc}Wdnpg@0QK(Vmyl;hAt{Rz&1Eg81i~Vi&?}cMQva&Fqcu(*y>_+wNV)0H@mYD6h4pS7@r;Y&nPItj#?Omq z=3G2O()z|h@UwpqJb7ZyPXkpv6J*6RH><@ngSEvob0(g_oy0=f^PE84DX=}@X5f(e-rK9ovj*6jq9gA8uliObBDW;*~cL;-<&L*QcA z2U(!QYS0Tc8y;lR;434?1-`24GLY=B1Jen5zApHo>UyVPp~VqjF{-^$U{U{^`2wAn zuWhDO?{>S7m9l5)1*EkGd!I7#c;K!zRc<;}=$4;J#arze4I?i)>_t^HbyKGjfT+zR zyz_~4hr?&#P&nr4=^pnabY&b-2Bw`I#gp7j2O)5xCc2&_7C;S^gjVWOJB*k%FLP~xv^>!kO>t%E`lFw>70!UvA?6aO`@gX|t%3z8T z@d72e%IXOvDREw=e3R+7yl__&#WC5?j!9hJ3+wpQJ3~1hIVq6j@p%z>{7xs2-(|>S zeN-6=^KIH4v--|_@QV2074g9<;)7Sj2d{_^UJ-v-uZVx7FT`r$0{NkI)3Ei|zrH-@ zI$^jhQ)RNzTB>W^ioHK*RP4H4->)?B-*|5TZdGvH8K|m!;Hq;5W{LN(|8*$L{u+yN7go1 zQ8R$1SJ|GWM=zT1;U&!4^wBq@Iif!U&EY=K9GlV{I#H=`88f1h56e!2Ac$vknkBLlVNpl zmqe40z;)>CW)rpOFooMtH&Ooifl^+h3LR9t+aM)6NckO==&)3a)aW4Py=FrF_aTd3 z=H*-RE&y3cjQVF>`6C}~jpxa^@uXkxTZ$WsUrHYtCw|OkJQHAViykWH_;3h@PGuWW=0=mNdsCekJGc% zhX7fk1$8$=e_hp)W=E5-G%8`}QC;V34WOs9T(J|}lIi7fc&cwVKFEuDAFnXZifVWV zHIPM#X)Ws&`R%@)#y;#6=-sjGT}1#O5k5X0*{X}JF7SQ^4r-Y?Fe%DPwGjN2xoM93dmCnqnTsxSg118pzNW!+8T zfO+qE=&*6z;SlM(C1POBVMsK-XH=@2m5v1F{d58?@6EcLvMCIag)z0 zhW>Axjr@cvuDr&I^{Gxgk)43OgM$z+&-M<95ngom4TWzlL-xf`oScSrMqEiN*MhTuVHv<7qc)FWn%k&T5*k1H;OjSVnZWPv84R-`(`PTlC$R0p%EbAC+i(wa9y6!ly+S#w9SI0XjHh zpUvBW3%zeR^wV`D5!*kYlvbKDU@2{uwUd5u4}>6ACSf3Af30@89@tA@YYoL-J=ZhdsduPhw7 zu~KUJ_mF9KD$PNoR_}Cb^>znE)ipb**%f-J*q7}W_GNe6{n&lc`Plq2X;_KpZ=(>rzSsQNY>k_jwRYVmfp`}xvn$P-UGLxz=D4giU+iB(6}7!eV?`CmU8tgB z@4>g-ioIKJ;ZGN9u%U+6O}o`PX4&!{Rd(E zgE0Opgz?-043X5Fgv1;#?X{V3yuI6G_sZ?vHq+1D?~+g)vXYAK-%y@B{_e6#rr`C# z?K78M85O@!@slasA3(d~JTI1G?DOxQ{P zfl>T#KD?_OiwUL;yRha31gUGuJt7^KDY|bGG{B1vk>baTZ=#?%v&VccXVcOsTDZf6 zVmCZ9-wa}}74&FShbBdz6mYWO2y9#e!sc4#y%`$5WNHwJ$Vw}%AVs;eldp9k*kDVm zvMhTdxn@Cm`&r6+{BZm{96#Ux_-QqHc$F4EeQb94w0B$VN*3=?(LQ8vU&F_LpF?Q! z-4CG@qmWz7+)-4hTEZD*eo81v=^#G!&ZM(p?nP8R$&|cKOxE=BC{sV7vQ+x|{Ht&5 z0PTv(dbt!OZ{l8hdfrS*>HXe#%lkd0Zsme6^QHXaZHTu+L4CN^#hZS9Xm1?EM%snU zz>6*#c^{^FAJPuoXLq)eb>?d%xu=qxlYN%cIf)|D)Q@qi_{{z)ndZD$q*$;kLQC6J z`WA_RusWIdC&H*8Gpo$F)tfm*>(OFVn1UBrwnCJ#SVC@09>|Rca^w4x8#YlJ@Xj5k zHHqA)auqPH5~eV{OeJj0a!^Riy*-L)NeN@ABX&bYq_OHQ_o~+1V@hF7l>VLn9jTYA zqHsq6y9`K=cCLJsjmeqG$8VUNO>~tg?YZv-Lm8Qe$5LWfE6OK=Qbuhg%X1ez7y zr+z&rFwP4I4D_K^Mqw!0;utv&?ZtQkoKc_Bg)K`Bi>uD_3ISVSG3*xZBd; zWZlXG(=R&M$924JmPLr!=XM3osTyTH1Kcz1T*kcoj#_bo4yAw)0NhM4#X2TD3)++F#I>n-=<|u z{E$66-3Ix4x#q8X-FBl<0GXG#ouT3kY-F-@dR_@d8?QyutP*%GJa-!vcFmfIuXxNs zj!6`Il^Kk_Ld}a@m1?sMFrLSWDIx6h1|^JT52`E_b7HQ7x2S?ep%*?#HTcU`0V*8T zPv@c-ZR8XZ}DA~yuViMcSRsb;FNe=(z>6#=Nq_) zp~sBM47JX?Q59bqVgK=v$t-DaeHu$5K&YpeZU`nbqruYrF@> z=E0_BGn<-5hJiv8nF~tb{(jIz=A06^%bzy-%+Sng?EU?WT@4w{XofZI-EPLProFqH zGpyOm7}m6R_nCic)ctvm340Chp}L74s+rLG6&GUv%4ODHs0VFyQjK+yo9e$I|Mzhn zlN@>9b#6R)x}`mhUdJ}(G?-FE1o5NGp}izxWE-eAe_v zOD~tp|B5{H%euFzK}_~jk=UJ88N!0?yRn)XHJWv9y}YNJTGmXmn%%I2mYLLC{RJTGT96{+^T?50shFyl2Kc%N63!r9yl#czD3Izry z*qm-^BYN@A#-R=)`2`K;Jm$`FJ&4JYUuS1gyc?MyXG4%Z+X`gt0*pzVG#edC+h~_D z>yY~e2SHd0RyKslyX`O!G+B8mB}OSweygXh3t{a@iI5@WQ)YcUpSYp_#jCEp^Rxlp zGw|k9+}E2z?afwD`<1m-4ldT2CBWLy3gYIwS?|cR_fKcM^D2AOU4G0Tt$oj3M6eW^ z@1#`MU&4B)cp3aPjdwnp)nCj9iw(zkZ8s~;<8HmZM=pr?gWXKp_+&Ta|7$#cE5D!nYSTnL&Kqe*quAOl-T-ePy@N1_N?5@K5K3-MXx` z$IVOluip8AEgb$P%K+vCEo#QykM@^I4d$vfZhqV&%a<>cy?Ucn>(;w=VAtDdqS9^- zYV~%jR`1xg`ab-B9}{i*6VUex{yDb0^~P?cUEf6`m^!SNHZGd>09MofZlzJ%hi_2z zeq|pPT%%dpXa8!L3P1aUMy(0OYES{D?LyW2yR{DVI72&_cuF-SNPE7z)3&1ZEI3?S7uzl>nv<_PJ)_%RcU+Grx34XfueON~o z#9RtmN)#Lhc+akP;kd+=*u+)Q*~1gK`3kU}-3lbKg&nkq|6RfgJjM)ogm)@{JnIeo zv2l?TvQ_XaL%s@{O==7c+$vpJ0A*qf|!(BiNPoMtu z`t?u$4gagWc;QSYPLh!3_ru-#!`=EHW+J;sCbECSTinqftmrye!%}qVWSVw7_6DE((e?fIVt}=x zKIV#kaGenK6UnfZgs->X1RS2R-&9gE_M3X%Ov=66Zz^?Xv_zCIEA2N&YZ^={KsB_t zV*AZyUC7yQjyAX7+@L#KU3cYcq^mC_c}x3EqzV2I`^|z~5n9@|T5Z3n%xd0#Q~g+C zzgdX9cxD}!Wb^A^A51bMP2c{( z9QfxAO-*mMHZ{FQ(gU@cuI|ayw2)%(G8Dtwrlv(_A~!qbHmJ$H*r48&+MotS#7V!7 zx%hg1g{FzRg_yS95e3t_pBHO}a5~>XOoC`(m>MVgRfDG)CZ7wLfT||UDDoMlRFI_l zbqZtfl0&1!8trRrN9{(lqgju3JDpaiz8WGbujjeoeQY%v45 znN979S$+Er;`nZ@5z*f3z`T`}<}E-`-O3Wku7bM?RICse=ZnQRj#exJzU#!1T+0|} zJ0DV;0CvW-Hi1OnMKg$v*Pb|GYVoYm~r)0adDKu!%F>KrykY9v~t zqYucOTVbn^DJ_!g$rva+FF~8ltc|HbW~JoFRa%=O>2a980{=BZ%fR5<{XpwxAJK4;9Yuo6}C?%*iCR8;!G-vt-C9^u{JrB6qoSJII**a{917as5z< zanBlp)$RRP)oxF(O;{E?l_!;dz#2B3C1%80ePYV$9pHH-_PN~*RtT6Zu=WsG%R2Pk z)|}mR>h=QucMz$B&q7fj1I#^1G53Xa%Xo&@bN_@mSfJ|R(0q_2KS+|lza$wQ;%lPh zy|%b^-{sft`^^Ve`F~bd`R+8e6lckAyxCP0e^xG~F`cLOGVjWj^U%xY%%qfFIV&#t zwF2cf|AnJuu`1;?Y<4`}LWvvdZQGCroy`Qb8-x-V z(egL~xzgD%0!P^>0`96H0wlmutUnpEq1Ihia`X^S;Ngt^lWE57J!r=LL7H*OVYIbs zoV$KJ0k<@qfbxZI-rRc(CvcRFCU8_1OyDRROW^3+g%UU_izINgejovNP0cU$OfuXR zVFZpgh$7%_u7$RCU$)Xga|=TVxL+GV;OGwuAmA3n4{$dMA8@oJdce`j-~q+>;X#$` zfw=g~MGqi7u}O~y54a)1WM5Y$Bi*tKmT-v)?S0!sowC0nt#bauMh{@TYr&_jwa4y3 zN$lzmRub!P7ErKQUCS*D4B-9Nupe#~dXGU+zEcUGa8t?;i0mhnYEG*+F zxN>h2!(6L?4F!H1!)Zp*-nHP)>s8Q%3f_<}z0{u~2B4^BM{VxxoECw)NI42lu}u`C zTFpYmD0MnmxNKcJD*s(5N41(4j$+*tGM#KKD`Po8X+4qyR=1vN)a5tUCDR5| zqEuF#XG^`Z!piPl$?WVQAcLlS^$?I@GcB{pH`g+|T3^e|T`L}g`{xM9aE=ifejwGc zrrr2fs$;22kZmt%0}ojAy18~EZmtoZt~nbk8o^V1?MD0`NePaW8raSuN>f}?5tSK7 zfd?$%dWv#ZDylOqL(~J0SPQDrB^hl8uHu$aUc&`0I{_#%l#MTx zWU(peUR=FE{&A%OTLwf6iux3s(W2Cz@Abwy+FXhI5}#fUN70 zol*0-Ord_RsQF0jv5un8GABf_bV5{c(a^w~&AU7D`}E*d=s}qH5V7Z5N9?hitxUw8 z_I@i9v8TP?&PMF9DPRv>=f37%+&=JY-rxCc?wh}(Wc2+yadq4@y2k4*!|G^N^w+Dx z2de!Ciiz{|uMrdHNDql~bl(wi-fVxxToe%JXk|Q{-%*nH0T$IC6%R+O?H6L@7S$y0 zRFO)$^bTPoIj|FQm8?_NIHF$zqlU61BXbdb^vz=PxEqG%Q8qpSGY71)AU)Uj6r@LM zb%QWH?nY61)(4lRDRf)Do20TkSgyo zsz2q}`S|`LsvP~L0;(MSed4LSH>*z{+{Kf-_}z-#4QlOL`{Q1HuX&7NFS?bzdb?tG zD!cU-{&bmp_b&WtwQDW>cYDqjBD+OfB}DWbPJfjy@6e~D->P=qoc6j=Bs9t&pky=Y2v>Z z?Lm$5)|wSet28g|1}y<7Los=pFB+H4akG6{YvT02ZdbZvy9>Eqv_E!#;MxAlOOfv> zl`4=VehXo$|7Q@U&L4!Sn+j96!b^b|8Y~(ABD}lPkRulm&U*I2>}RRlCIp2uAt(%c z@*Aw>15qr-?Gl>20ST`;?EE)#tp0mHZurm;-iTNCy=t z0q*kqK0GUQqf*!>8JuPc_#Lnryj>hXCbnxlQ$md}+Imxj-2_-5IC~!akwU!`IeSQ} zaXGl%-9tfmEX3e;cOT{8F_VI?QpR+pGNyl@%9wK|&r4Ey9#nBW_Jbk1e*=bcU9HU6 zy8t#czR~Z<-^H*buIZ-ycOa7STKvKbVWG{uV|kD6v$_VX!P9X)8GGLB?UcMOoZa2s zE`TnG@VZt11gr>7A)<=8D3!eD{W$B*tQq1%#>TKjoGpBxxFN7*F>@!NW&pGSLmXH_C>mPtA2LIdu#*Kyuiet^LBK06E({)JZx=5leNC~5%r|J>Gj%8ipyM#4) zBU|f>)tvp1qK5toI&BLrisehFH>;n}7J1DUbC1x))0@zp_yfi<$}D0RsTvs=pl5fP zKP$cHx*9#17V+>eZ6Vv=wcE%RT-u5Tr45I{OD(N``82KFU`aI#)&JQ3Zb=xWp_w~Kvt;By8#_B}+rjab(vgj`L-oZ0 z`h}||O@sLb@I=n3J~v){=1r#PX~?v6o)Qk>AnLmTr6+1SU@XARls;0^Lob(3fqSBleZ2!ymv`VwO}~V0MKQzBUQFLVtKaE#IEmt! zdA2ed*;WfIrUkZN9v5!ecFF}aGuRP>J`*^9CABZo5bwBBjEHD_%={EksD8 z;+;IYO?KRG2aC>EK;ox^PvK8R!_ZhPIKGjVOs0W9Lmj{v7@GL!P%t#HU}*ea6&WO8 ztqrpd! zSua^2wWm)H@J#>l+6~afmp7~&pPW?K3|EYQPmKQnN>#Ezv&~e<7@ve}KVLG~^>nA2 z@Z~6u-5a1z=vVn9Kp6qxqMt>&fL{dgb7k(+=#00;NLf+VCw@p&X|P}HgMTom_*<&f&~H3Pd(| z32=7_whu9?j_qK|jMM+;Gm#$`ehQaa%EWWtoisBak!ofNP$p+N9i5pW9Sqf&U7t#&8~D^?rhBMS zlbHuzCb9^ES{aWO$l_X}DHYE_WQE|&wj^cdy;Q=No)0HClYSKJ>=+3>aiE1!Uak{($lSCnE$NVrn*7->4~2No$O_?7jChC5Tt;t6!;;M z_;n`EK|9r2a}QnIafemi{2;}s$2Wt(A5<85NbWN$LvKdP-F1mjfi`?(n@%+n*WrLS zKYKT4PkPYbCuyonsn(+g?{GAuM%Gx+N zoE%nTl&i^i;4i!Y#;;_7o;Y3^CRuD_Lm{?VB<&|UW+q_pdfUu3H>6O$`+ZRM9tu@` zrqzOx3N`9Q{v=ez&vcN4(9EG%|2^`PrNAruB;k7uF$4wJX5 zbwl#b4$qTGm-r?sg5I1%FG_K!%Pv?rTM(YQ1Rw?Rr#EIEd;~Z}Kt0UZf$y89U>O3~ zzo-{&VJ_HPCUoW?I^_02^^qF{sN0+%89R4)GQBLsMu&pwjg9PcAQrAhs&FYV;AY@s z@~1>(vh|Tk#RbMM1Vw*v=_!Qe9FCOv&q{yA;WCHAMIFZc42G;HScvw_0~BNW;oMu$ zMU)FvQLN6fX?etY$x+9^ehXRn$}>6A&g20Ow0J;D*Yu7S_R^EJ@u5wt0Np0{2-4Zdm(hesM-5FDF}BA z{;D))!g(~5&b7?@7JkgqmEXHny}2j;7tg?xOHCA{4}DCydV=&wuwjp~gG}|*n|khyn^^G4;=X$5J8k!Dbqjr>HptH> za)T0Lxol8`EvGdKh^b$v?!ZrGHHQ3PQqToO0W?!EFVvNCJLQ{<<&u8(nJ)aypTL5s zNj$-lS?Y71$P0QH*@0E>hR_(Ro$NyIt7gk!*bY9`24vU5hbB^wF_D+@V^68X82Ld^ zBX>F6pofCr4SDAbRQRls1~LDR31rZcPGGukZ?9pQ-{6`L<}v&v)7W!|PD5MPq>If9 zFjjkj?@Um-mO^sF^|ij;~74)I;zokA8qy=a+C$rbWwN&r#BR%^=9A;UtX3} zlBGocW>{Cuwwk4~7Xy}Sj5@Qj0(vtT=HY47jgdR?gBza2UJMHt{|jC#1tuBuTD3R* z+k#=!TNun0R0q#Bd^7+SiJ$NkdN!2x!II@W3?_D`Je8SmGZSx0z(*JYi+;kA*b6l7 zk`WyG*B&_rz0~m8!1XyvL=wFi7B@8)sr=PgEPkNdyH4Xz6f0@#QSNIulzY0yYvy{= z)@~>5rgk~m(61)REnv)?0yb@vUr>^BgDPE67PvGp{*zq;0+JZdCV_MNo7eyB&z{5T zIGIGzY)oznV9TMBqe~k1ucI$-lj}^53pn(Xfr~>{+#ASa>l%F%J+>;39jEUB`QXu` zJDM?118E6A9D6ajGU`Xe8|izmVU^pFreCCnh4G&gZ|J*~DQuM4Qdb6QKoSfzvdH=n zEYQQ!FH(g{mVRAYpq{1Q%&t_+%0#oWyzEWwYS(#!D$lFV2+bLJU#n`+oa+u8a<3VG z4njkQpY*!R2GtUwuXt^E@AYBrpwEVL^V?ic-gX*}@o(P18;xwkvK#m|7!CJ^1H)?4 zTffow1|7p{(c6B*ZM#rYo8ET!_8a?$JPxu4`Dk^w#cl+-}>j z_UNs(+um&h2HvN)X1CRB?HSgQ-u#i?{*m6~kyfwD*u>uwQlrtRhHFP0#c)qyW8vvNR3AO00;r8QGaiMZ)`-P&Mv(%NO_|!y)j66-HwfK zN22+mjSU`&_T7HFAt42gu*|&PQFjQh-wjgU-l*g4%QdyFo|%O#vyp-|?C$r26{+M^{3s myFY5+D&~-CG`#L^S3;`M80>Xg8AzR(2me2ZlX>poDG2~vQ<^vc literal 0 HcmV?d00001 diff --git a/interface/config-overrides.js b/interface/config-overrides.js new file mode 100644 index 0000000..43a71d7 --- /dev/null +++ b/interface/config-overrides.js @@ -0,0 +1,29 @@ +const CompressionPlugin = require("compression-webpack-plugin"); +const ManifestPlugin = require('webpack-manifest-plugin'); +const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin'); + +const path = require('path'); +const fs = require('fs'); + +module.exports = function override(config, env) { + if (env === "production") { + // rename the ouput file, we need it's path to be short, for SPIFFS + config.output.filename = 'js/[name].[chunkhash:4].js'; + + // disable sourcemap for production build + config.devtool = false; + + // take out the manifest and service worker + config.plugins = config.plugins.filter(plugin => !(plugin instanceof ManifestPlugin)); + config.plugins = config.plugins.filter(plugin => !(plugin instanceof SWPrecacheWebpackPlugin)); + + // add compression plugin, compress javascript, html and css + config.plugins.push(new CompressionPlugin({ + asset: "[path].gz[query]", + algorithm: "gzip", + test: /\.(js|html|css)$/, + deleteOriginalAssets: true + })); + } + return config; +} diff --git a/interface/package-lock.json b/interface/package-lock.json new file mode 100644 index 0000000..593b337 --- /dev/null +++ b/interface/package-lock.json @@ -0,0 +1,10960 @@ +{ + "name": "fresh", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/jss": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.3.0.tgz", + "integrity": "sha512-n7MUYCO/Wt4d6Yj0ZewXSSkqBcrdLFgpQ4mUBRXBWDmLfXtgT3tJ26GVPr8HiyRLLze6iQfaBJTlvjRTjgZpRg==" + }, + "@types/react": { + "version": "16.0.36", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.0.36.tgz", + "integrity": "sha512-q33EVfy4i+fwhM31PL6/c6Job/DyjOiExHuR163bJK3rEMRf2ENkBrN4thQH5cwA+TiiN1vWDZU6D5H1AvQTlA==" + }, + "@types/react-transition-group": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.0.6.tgz", + "integrity": "sha512-mVhRv+d0MIoLWl6hEFA7Nnd/obW2RQpZViTAKhM37mltuTDWCdoj8xAZv94ntB8wgAc6DDiDCXxFXPgClGnsfQ==", + "requires": { + "@types/react": "16.0.36" + } + }, + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" + }, + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", + "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==" + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "acorn-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + } + } + }, + "address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-align": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz", + "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=", + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.1" + } + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "aria-query": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.0.tgz", + "integrity": "sha512-/r2lHl09V3o74+2MLKEdewoj37YZqiQZnfen1O4iNlrOjUgeKuu1U2yF3iKh6HJxqF+OXkLMfQv65Z/cvxD6vA==", + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=" + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "requires": { + "lodash": "4.17.4" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "autoprefixer": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.6.tgz", + "integrity": "sha512-C9yv/UF3X+eJTi/zvfxuyfxmLibYrntpF3qoJYrMeQwgUJOZrZvpJiMG2FMQ3qnhWtF/be4pYONBBw95ZGe3vA==", + "requires": { + "browserslist": "2.11.1", + "caniuse-lite": "1.0.30000791", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.16", + "postcss-value-parser": "3.3.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "axobject-query": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz", + "integrity": "sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=", + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "2.0.2" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-jest": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-20.0.3.tgz", + "integrity": "sha1-5KA7E9wQOJ4UD8ZF0J/8TO0wFnE=", + "requires": { + "babel-core": "6.26.0", + "babel-plugin-istanbul": "4.1.5", + "babel-preset-jest": "20.0.3" + } + }, + "babel-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", + "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.1.0.tgz", + "integrity": "sha512-tTfZbM9Ecwj3GK50mnPrUpinTwA4xXmDiQGCk/aBYbvl1+X8YqldK86wZ1owVJ4u3mrKbRlXMma80J18qwiaTQ==", + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", + "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", + "requires": { + "find-up": "2.1.0", + "istanbul-lib-instrument": "1.9.1", + "test-exclude": "4.1.1" + } + }, + "babel-plugin-jest-hoist": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz", + "integrity": "sha1-r+3IU70/jcNUjqZx++adA8wsF2c=" + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=" + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=" + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=" + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-constant-elements": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz", + "integrity": "sha1-LxGb9NLN1F65uqrldAU8YE9hR90=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "requires": { + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.11.1", + "invariant": "2.2.2", + "semver": "5.4.1" + } + }, + "babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } + }, + "babel-preset-jest": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz", + "integrity": "sha1-y6yq3stdaJyh4d4TYOv8ZoYsF4o=", + "requires": { + "babel-plugin-jest-hoist": "20.0.3" + } + }, + "babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" + } + }, + "babel-preset-react-app": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-3.1.0.tgz", + "integrity": "sha512-jEAeVozxLzftLl0iDZ0d5jrmfbo3yogON/eI4AsEDIs8p6WW+t9mDRUsj5l12bqPOLSiVOElCQ3QyGjMcyBiwA==", + "requires": { + "babel-plugin-dynamic-import-node": "1.1.0", + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0", + "babel-plugin-transform-react-constant-elements": "6.23.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-plugin-transform-regenerator": "6.26.0", + "babel-plugin-transform-runtime": "6.23.0", + "babel-preset-env": "1.6.1", + "babel-preset-react": "6.24.1" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + }, + "dependencies": { + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + }, + "dependencies": { + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "requires": { + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.1", + "multicast-dns-service-types": "1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.0" + } + }, + "boxen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz", + "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=", + "requires": { + "ansi-align": "1.1.0", + "camelcase": "2.1.1", + "chalk": "1.1.3", + "cli-boxes": "1.0.0", + "filled-array": "1.1.0", + "object-assign": "4.1.1", + "repeating": "2.0.1", + "string-width": "1.0.2", + "widest-line": "1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brcast": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.1.tgz", + "integrity": "sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg==" + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" + } + } + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.1.tgz", + "integrity": "sha512-Gp4oJOQOby5TpOJJuUtCrGE0KSJOUYVa/I+/3eD/TRWEK8jqZuJPAK1t+VuG6jp0keudrqtxlH4MbYbmylun9g==", + "requires": { + "caniuse-lite": "1.0.30000791", + "electron-to-chromium": "1.3.30" + } + }, + "bser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", + "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "requires": { + "node-int64": "0.4.0" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.1", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.2.4", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + } + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000791", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "requires": { + "caniuse-db": "1.0.30000791", + "electron-to-chromium": "1.3.30" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000791", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000791.tgz", + "integrity": "sha1-Bnh/VsrvQwChfjXRN0RxI731Nvk=" + }, + "caniuse-lite": { + "version": "1.0.30000791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000791.tgz", + "integrity": "sha1-jjV0Xv1IOj4ju301CZAybSMZ/BY=" + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.1.tgz", + "integrity": "sha1-PSnO2MHxJL9vU4Rvs/WJRzH9yQk=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chain-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chain-function/-/chain-function-1.0.0.tgz", + "integrity": "sha1-DUqzfn4Y6tC9xHuSB2QRjOWHM9w=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "change-emitter": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", + "integrity": "sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=" + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.2", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + }, + "ci-info": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", + "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "requires": { + "chalk": "1.1.3" + } + }, + "classnames": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", + "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" + }, + "clean-css": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", + "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "requires": { + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } + } + }, + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "requires": { + "q": "1.5.1" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "requires": { + "clone": "1.0.3", + "color-convert": "1.9.1", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "requires": { + "color-name": "1.1.3" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compressible": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", + "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", + "requires": { + "mime-db": "1.30.0" + } + }, + "compression": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "requires": { + "accepts": "1.3.4", + "bytes": "3.0.0", + "compressible": "2.0.12", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + } + }, + "compression-webpack-plugin": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-1.1.8.tgz", + "integrity": "sha512-AzOQLq2fkVw/ra6MJgk+y/gvkMPjnhRyhnTdd2EoM9vyKx81JiESe2jVJISVHae1o8+fN/5Xl8kAFRhUmwoYtg==", + "requires": { + "async": "2.6.0", + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "serialize-javascript": "1.4.0", + "webpack-sources": "1.1.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "configstore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz", + "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=", + "requires": { + "dot-prop": "3.0.0", + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "os-tmpdir": "1.0.2", + "osenv": "0.1.4", + "uuid": "2.0.3", + "write-file-atomic": "1.3.4", + "xdg-basedir": "2.0.0" + }, + "dependencies": { + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + } + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=" + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "content-type-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", + "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==" + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.7.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.9" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.3" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-loader": { + "version": "0.28.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", + "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + } + } + }, + "css-vendor": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", + "integrity": "sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=", + "requires": { + "is-in-browser": "1.1.3" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=" + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + }, + "dependencies": { + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000791", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "requires": { + "caniuse-db": "1.0.30000791", + "electron-to-chromium": "1.3.30" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "requires": { + "clap": "1.2.3", + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "cssom": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=" + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "requires": { + "cssom": "0.3.2" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "1.0.2" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.37" + } + }, + "damerau-levenshtein": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", + "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.0.1.tgz", + "integrity": "sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ==" + }, + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "requires": { + "strip-bom": "2.0.0" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "2.0.1" + } + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=" + }, + "detect-port-alt": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.3.tgz", + "integrity": "sha1-pNLwYddXoDTs83xRQmCph1DysTE=", + "requires": { + "address": "1.0.3", + "debug": "2.6.9" + } + }, + "diff": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", + "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==" + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "2.0.2" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=" + } + } + }, + "dom-helpers": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz", + "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg==" + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "dom-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz", + "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=", + "requires": { + "urijs": "1.19.0" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=" + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dot-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", + "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", + "requires": { + "is-obj": "1.0.1" + } + }, + "dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "2.3.3" + } + }, + "duplexify": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz", + "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==", + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-releases": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/electron-releases/-/electron-releases-2.1.0.tgz", + "integrity": "sha512-cyKFD1bTE/UgULXfaueIN1k5EPFzs+FRc/rvCY5tIynefAPqopQEgjr0EzY+U3Dqrk/G4m9tXSPuZ77v6dL/Rw==" + }, + "electron-to-chromium": { + "version": "1.3.30", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.30.tgz", + "integrity": "sha512-zx1Prv7kYLfc4OA60FhxGbSo4qrEjgSzpo1/37i7l9ltXPYOoQBtjQxY9KmsgfHnBxHlBGXwLlsbt/gub1w5lw==", + "requires": { + "electron-releases": "2.1.0" + } + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emoji-regex": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", + "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==" + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.19" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "errno": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", + "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", + "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.37", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz", + "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=", + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.2.tgz", + "integrity": "sha512-LSas5vsuA6Q4nEdf9wokY5/AJYXry98i0IzXsv49rYsgDGDNDPbqAYR1Pe23iFxygfbGZNR/5VrHXBCh2BhvUQ==" + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", + "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.5.7" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "eslint": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.10.0.tgz", + "integrity": "sha512-MMVl8P/dYUFZEvolL8PYt7qc5LNdS2lwheq9BYa5Y07FblhcZqFyaUqlS8TW5QITGex21tV4Lk0a3fK8lsJIkA==", + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.0", + "concat-stream": "1.6.0", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "espree": "3.5.2", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.0.1", + "js-yaml": "3.10.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "require-uncached": "1.0.3", + "semver": "5.4.1", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "eslint-config-react-app": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-2.0.1.tgz", + "integrity": "sha512-gHtkzfEjKXhgZJ0Bf+EmztFSWwTiMDgoy85sFaTqrxU1BHSJ9i4i/JJtXJofVCU/SOKxYs46LO3ajvuzFQH5rw==" + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "requires": { + "debug": "2.6.9", + "resolve": "1.5.0" + } + }, + "eslint-loader": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-1.9.0.tgz", + "integrity": "sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==", + "requires": { + "loader-fs-cache": "1.0.1", + "loader-utils": "1.1.0", + "object-assign": "4.1.1", + "object-hash": "1.2.0", + "rimraf": "2.6.2" + } + }, + "eslint-module-utils": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", + "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "eslint-plugin-flowtype": { + "version": "2.39.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.39.1.tgz", + "integrity": "sha512-RiQv+7Z9QDJuzt+NO8sYgkLGT+h+WeCrxP7y8lI7wpU41x3x/2o3PGtHk9ck8QnA9/mlbNcy/hG0eKvmd7npaA==", + "requires": { + "lodash": "4.17.4" + } + }, + "eslint-plugin-import": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", + "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "2.3.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz", + "integrity": "sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==", + "requires": { + "aria-query": "0.7.0", + "array-includes": "3.0.3", + "ast-types-flow": "0.0.7", + "axobject-query": "0.1.0", + "damerau-levenshtein": "1.0.4", + "emoji-regex": "6.5.1", + "jsx-ast-utils": "1.4.1" + } + }, + "eslint-plugin-react": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz", + "integrity": "sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==", + "requires": { + "doctrine": "2.1.0", + "has": "1.0.1", + "jsx-ast-utils": "2.0.1", + "prop-types": "15.6.0" + }, + "dependencies": { + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "requires": { + "array-includes": "3.0.3" + } + } + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "requires": { + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "espree": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", + "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "requires": { + "acorn": "5.3.0", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.37" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "requires": { + "original": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "exec-sh": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", + "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", + "requires": { + "merge": "1.2.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.3" + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "1.0.1" + } + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.2", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "extract-text-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "requires": { + "async": "2.6.0", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0", + "webpack-sources": "1.1.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=" + }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "requires": { + "websocket-driver": "0.7.0" + } + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "requires": { + "bser": "2.0.0" + } + }, + "fbjs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.17" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "file-loader": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz", + "integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==", + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "requires": { + "glob": "7.1.2", + "minimatch": "3.0.4" + } + }, + "filesize": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", + "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==" + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "filled-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz", + "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=" + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "requires": { + "commondir": "1.0.1", + "make-dir": "1.1.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "2.0.0" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" + }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "3.0.1", + "universalify": "0.1.1" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "1.0.2", + "is-windows": "1.0.1", + "resolve-dir": "1.0.1" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.1", + "which": "1.3.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "requires": { + "create-error-class": "3.0.2", + "duplexer2": "0.1.4", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "node-status-codes": "1.0.0", + "object-assign": "4.1.1", + "parse-json": "2.2.0", + "pinkie-promise": "2.0.1", + "read-all-stream": "3.1.0", + "readable-stream": "2.3.3", + "timed-out": "3.1.3", + "unzip-response": "1.0.2", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + }, + "gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "requires": { + "duplexer": "0.1.1" + } + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=" + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "requires": { + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", + "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "requires": { + "invariant": "2.2.2", + "loose-envify": "1.3.1", + "resolve-pathname": "2.2.0", + "value-equal": "0.4.0", + "warning": "3.0.0" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + }, + "hoist-non-react-statics": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", + "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "requires": { + "parse-passwd": "1.0.0" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "wbuf": "1.7.2" + } + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "requires": { + "whatwg-encoding": "1.0.3" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "html-minifier": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.8.tgz", + "integrity": "sha512-WX7D6PB9PFq05fZ1/CyxPUuyqXed6vh2fGOM80+zJT5wAO93D/cUjLs0CcbBFjQmlwmCgRvl97RurtArIpOnkw==", + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.9", + "commander": "2.12.2", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.3.6" + } + }, + "html-webpack-plugin": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz", + "integrity": "sha1-6Yf0IYU9O2k4yMTIFxhC5f0XryM=", + "requires": { + "bluebird": "3.5.1", + "html-minifier": "3.5.8", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "pretty-error": "2.1.1", + "toposort": "1.0.6" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "http-parser-js": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.9.tgz", + "integrity": "sha1-6hoE+2St/wJC6ZdPKX3Uw8rSceE=" + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "hyphenate-style-name": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", + "integrity": "sha1-MRYKNpMK2vH8BMYHT360FGXU7Es=" + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=" + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "requires": { + "postcss": "6.0.16" + } + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==" + }, + "import-local": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz", + "integrity": "sha1-sReVcqrNwRxqkQCftDDbyrX2aKg=", + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "2.0.1" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.0", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "requires": { + "meow": "3.7.0" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ipaddr.js": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" + }, + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "requires": { + "ci-info": "1.1.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-in-browser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", + "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.1" + } + }, + "is-resolvable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz", + "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==" + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-root": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", + "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-windows": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", + "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.3" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-api": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", + "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", + "requires": { + "async": "2.6.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-hook": "1.1.0", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-report": "1.1.2", + "istanbul-lib-source-maps": "1.2.2", + "istanbul-reports": "1.1.3", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "once": "1.4.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==" + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", + "requires": { + "append-transform": "0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", + "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", + "requires": { + "babel-generator": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.1.1", + "semver": "5.4.1" + } + }, + "istanbul-lib-report": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", + "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", + "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "istanbul-reports": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", + "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", + "requires": { + "handlebars": "4.0.11" + } + }, + "jest": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-20.0.4.tgz", + "integrity": "sha1-PdJgwpidba1nix6cxNkZRPbWAqw=", + "requires": { + "jest-cli": "20.0.4" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "jest-cli": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-20.0.4.tgz", + "integrity": "sha1-5TKxnYiuW8bEF+iwWTpv6VSx3JM=", + "requires": { + "ansi-escapes": "1.4.0", + "callsites": "2.0.0", + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "is-ci": "1.1.0", + "istanbul-api": "1.2.1", + "istanbul-lib-coverage": "1.1.1", + "istanbul-lib-instrument": "1.9.1", + "istanbul-lib-source-maps": "1.2.2", + "jest-changed-files": "20.0.3", + "jest-config": "20.0.4", + "jest-docblock": "20.0.3", + "jest-environment-jsdom": "20.0.3", + "jest-haste-map": "20.0.5", + "jest-jasmine2": "20.0.4", + "jest-message-util": "20.0.3", + "jest-regex-util": "20.0.3", + "jest-resolve-dependencies": "20.0.3", + "jest-runtime": "20.0.4", + "jest-snapshot": "20.0.3", + "jest-util": "20.0.3", + "micromatch": "2.3.11", + "node-notifier": "5.2.1", + "pify": "2.3.0", + "slash": "1.0.0", + "string-length": "1.0.1", + "throat": "3.2.0", + "which": "1.3.0", + "worker-farm": "1.5.2", + "yargs": "7.1.0" + } + } + } + }, + "jest-changed-files": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-20.0.3.tgz", + "integrity": "sha1-k5TVzGXEOEBhSb7xv01Sto4D4/g=" + }, + "jest-config": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-20.0.4.tgz", + "integrity": "sha1-43kwqyIXyRNgXv8T5712PsSPruo=", + "requires": { + "chalk": "1.1.3", + "glob": "7.1.2", + "jest-environment-jsdom": "20.0.3", + "jest-environment-node": "20.0.3", + "jest-jasmine2": "20.0.4", + "jest-matcher-utils": "20.0.3", + "jest-regex-util": "20.0.3", + "jest-resolve": "20.0.4", + "jest-validate": "20.0.3", + "pretty-format": "20.0.3" + } + }, + "jest-diff": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-20.0.3.tgz", + "integrity": "sha1-gfKI/Z5nXw+yPHXxwrGURf5YZhc=", + "requires": { + "chalk": "1.1.3", + "diff": "3.4.0", + "jest-matcher-utils": "20.0.3", + "pretty-format": "20.0.3" + } + }, + "jest-docblock": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-20.0.3.tgz", + "integrity": "sha1-F76phDQswz2DxQ++FUXqDvqkRxI=" + }, + "jest-environment-jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz", + "integrity": "sha1-BIqKwS7iJfcZBBdxODS7mZeH3pk=", + "requires": { + "jest-mock": "20.0.3", + "jest-util": "20.0.3", + "jsdom": "9.12.0" + } + }, + "jest-environment-node": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-20.0.3.tgz", + "integrity": "sha1-1Ii8RhKvLCRumG6K52caCZFj1AM=", + "requires": { + "jest-mock": "20.0.3", + "jest-util": "20.0.3" + } + }, + "jest-haste-map": { + "version": "20.0.5", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-20.0.5.tgz", + "integrity": "sha512-0IKAQjUvuZjMCNi/0VNQQF74/H9KB67hsHJqGiwTWQC6XO5Azs7kLWm+6Q/dwuhvDUvABDOBMFK2/FwZ3sZ07Q==", + "requires": { + "fb-watchman": "2.0.0", + "graceful-fs": "4.1.11", + "jest-docblock": "20.0.3", + "micromatch": "2.3.11", + "sane": "1.6.0", + "worker-farm": "1.5.2" + } + }, + "jest-jasmine2": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz", + "integrity": "sha1-/MWxQReA2RHQQpAu8YWehS5g1eE=", + "requires": { + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "jest-diff": "20.0.3", + "jest-matcher-utils": "20.0.3", + "jest-matchers": "20.0.3", + "jest-message-util": "20.0.3", + "jest-snapshot": "20.0.3", + "once": "1.4.0", + "p-map": "1.2.0" + } + }, + "jest-matcher-utils": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz", + "integrity": "sha1-s6a443yld4A7CDKpixZPRLeBVhI=", + "requires": { + "chalk": "1.1.3", + "pretty-format": "20.0.3" + } + }, + "jest-matchers": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-matchers/-/jest-matchers-20.0.3.tgz", + "integrity": "sha1-ymnbHDLbWm9wf6XgQBq7VXAN/WA=", + "requires": { + "jest-diff": "20.0.3", + "jest-matcher-utils": "20.0.3", + "jest-message-util": "20.0.3", + "jest-regex-util": "20.0.3" + } + }, + "jest-message-util": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-20.0.3.tgz", + "integrity": "sha1-auwoRDBvyw5udNV5bBAG2W/dgxw=", + "requires": { + "chalk": "1.1.3", + "micromatch": "2.3.11", + "slash": "1.0.0" + } + }, + "jest-mock": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-20.0.3.tgz", + "integrity": "sha1-i8Bw6QQUqhVcEajWTIaaDVxx2lk=" + }, + "jest-regex-util": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-20.0.3.tgz", + "integrity": "sha1-hburXRM+RGJbGfr4xqpRItCF12I=" + }, + "jest-resolve": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-20.0.4.tgz", + "integrity": "sha1-lEiz6La6/BVHlETGSZBFt//ll6U=", + "requires": { + "browser-resolve": "1.11.2", + "is-builtin-module": "1.0.0", + "resolve": "1.5.0" + } + }, + "jest-resolve-dependencies": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz", + "integrity": "sha1-bhSntxevDyyzZnxUneQK8Bexcjo=", + "requires": { + "jest-regex-util": "20.0.3" + } + }, + "jest-runtime": { + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-20.0.4.tgz", + "integrity": "sha1-osgCIZxCA/dU3xQE5JAYYWnRJNg=", + "requires": { + "babel-core": "6.26.0", + "babel-jest": "20.0.3", + "babel-plugin-istanbul": "4.1.5", + "chalk": "1.1.3", + "convert-source-map": "1.5.1", + "graceful-fs": "4.1.11", + "jest-config": "20.0.4", + "jest-haste-map": "20.0.5", + "jest-regex-util": "20.0.3", + "jest-resolve": "20.0.4", + "jest-util": "20.0.3", + "json-stable-stringify": "1.0.1", + "micromatch": "2.3.11", + "strip-bom": "3.0.0", + "yargs": "7.1.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } + } + }, + "jest-snapshot": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-20.0.3.tgz", + "integrity": "sha1-W4R+GtsaTZCFKn+fElCG4YfHZWY=", + "requires": { + "chalk": "1.1.3", + "jest-diff": "20.0.3", + "jest-matcher-utils": "20.0.3", + "jest-util": "20.0.3", + "natural-compare": "1.4.0", + "pretty-format": "20.0.3" + } + }, + "jest-util": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-20.0.3.tgz", + "integrity": "sha1-DAf32A2C9OWmfG+LnD/n9lz9Mq0=", + "requires": { + "chalk": "1.1.3", + "graceful-fs": "4.1.11", + "jest-message-util": "20.0.3", + "jest-mock": "20.0.3", + "jest-validate": "20.0.3", + "leven": "2.1.0", + "mkdirp": "0.5.1" + } + }, + "jest-validate": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-20.0.3.tgz", + "integrity": "sha1-0M/R3k9XnymEhJJcKA+PHZTsPKs=", + "requires": { + "chalk": "1.1.3", + "jest-matcher-utils": "20.0.3", + "leven": "2.1.0", + "pretty-format": "20.0.3" + } + }, + "js-base64": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.0.tgz", + "integrity": "sha512-Wehd+7Pf9tFvGb+ydPm9TjYjV8X1YHOVyG8QyELZxEMqOhemVwGRmoG8iQ/soqI3n8v4xn59zaLxiCJiaaRzKA==" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsdom": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", + "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "requires": { + "abab": "1.0.4", + "acorn": "4.0.13", + "acorn-globals": "3.1.0", + "array-equal": "1.0.0", + "content-type-parser": "1.0.2", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "escodegen": "1.9.0", + "html-encoding-sniffer": "1.0.2", + "nwmatcher": "1.4.3", + "parse5": "1.5.1", + "request": "2.83.0", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.3", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.3", + "whatwg-url": "4.8.0", + "xml-name-validator": "2.0.1" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jss": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.0.tgz", + "integrity": "sha512-1E9pn6k1Qd1BxKz845supoedukHuwMeBiqybCQV9l60v8JE7owkZSvVJfjw3wm50SjG1C/ABPtQ8PrGfhfrzLw==", + "requires": { + "is-in-browser": "1.1.3", + "symbol-observable": "1.1.0", + "warning": "3.0.0" + } + }, + "jss-camel-case": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-6.1.0.tgz", + "integrity": "sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==", + "requires": { + "hyphenate-style-name": "1.0.2" + } + }, + "jss-compose": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jss-compose/-/jss-compose-5.0.0.tgz", + "integrity": "sha512-YofRYuiA0+VbeOw0VjgkyO380sA4+TWDrW52nSluD9n+1FWOlDzNbgpZ/Sb3Y46+DcAbOS21W5jo6SAqUEiuwA==", + "requires": { + "warning": "3.0.0" + } + }, + "jss-default-unit": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/jss-default-unit/-/jss-default-unit-8.0.2.tgz", + "integrity": "sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==" + }, + "jss-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/jss-expand/-/jss-expand-5.1.0.tgz", + "integrity": "sha512-WTxmNipgj0V8kr8gc8Gc6Et7uQZH60H7FFNG9zZHjR6TPJoj7TDK+/EBxwRHtCRQD4B8RTwoa7MyEKD4ReKfXw==" + }, + "jss-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jss-extend/-/jss-extend-6.2.0.tgz", + "integrity": "sha512-YszrmcB6o9HOsKPszK7NeDBNNjVyiW864jfoiHoMlgMIg2qlxKw70axZHqgczXHDcoyi/0/ikP1XaHDPRvYtEA==", + "requires": { + "warning": "3.0.0" + } + }, + "jss-global": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jss-global/-/jss-global-3.0.0.tgz", + "integrity": "sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==" + }, + "jss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jss-nested/-/jss-nested-6.0.1.tgz", + "integrity": "sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==", + "requires": { + "warning": "3.0.0" + } + }, + "jss-preset-default": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/jss-preset-default/-/jss-preset-default-4.3.0.tgz", + "integrity": "sha512-3VqMmR07OkiGyVPHfke/sjR33kSyRVjIE/3+bGgJ9Pp1jMIAPIDDY3h3wfEwa97DFV25SncTrNjjIgBFVCb4BA==", + "requires": { + "jss-camel-case": "6.1.0", + "jss-compose": "5.0.0", + "jss-default-unit": "8.0.2", + "jss-expand": "5.1.0", + "jss-extend": "6.2.0", + "jss-global": "3.0.0", + "jss-nested": "6.0.1", + "jss-props-sort": "6.0.0", + "jss-template": "1.0.1", + "jss-vendor-prefixer": "7.0.0" + } + }, + "jss-props-sort": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/jss-props-sort/-/jss-props-sort-6.0.0.tgz", + "integrity": "sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==" + }, + "jss-template": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jss-template/-/jss-template-1.0.1.tgz", + "integrity": "sha512-m5BqEWha17fmIVXm1z8xbJhY6GFJxNB9H68GVnCWPyGYfxiAgY9WTQyvDAVj+pYRgrXSOfN5V1T4+SzN1sJTeg==", + "requires": { + "warning": "3.0.0" + } + }, + "jss-vendor-prefixer": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz", + "integrity": "sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==", + "requires": { + "css-vendor": "0.3.8" + } + }, + "jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=" + }, + "keycode": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz", + "integrity": "sha1-lkojxU5IiUBbSGGlyfBIDUUUHfo=" + }, + "killable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "latest-version": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz", + "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=", + "requires": { + "package-json": "2.4.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lazy-req": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "requires": { + "find-cache-dir": "0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "requires": { + "find-up": "1.1.2" + } + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=" + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" + } + }, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "requires": { + "lodash._reinterpolate": "3.0.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=" + }, + "make-dir": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", + "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "requires": { + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "requires": { + "tmpl": "1.0.4" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "material-ui": { + "version": "1.0.0-beta.32", + "resolved": "https://registry.npmjs.org/material-ui/-/material-ui-1.0.0-beta.32.tgz", + "integrity": "sha512-f8srx1qmAmD5lAuKPxVg5lWUkyIJAwsK31yU3jk2v5gMFVIruwf3qYIuZMb5tklVu1qt7qoR7SrH1Zo7oiFxjA==", + "requires": { + "@types/jss": "9.3.0", + "@types/react-transition-group": "2.0.6", + "babel-runtime": "6.26.0", + "brcast": "3.0.1", + "classnames": "2.2.5", + "deepmerge": "2.0.1", + "dom-helpers": "3.3.1", + "hoist-non-react-statics": "2.3.1", + "jss": "9.8.0", + "jss-camel-case": "6.1.0", + "jss-default-unit": "8.0.2", + "jss-global": "3.0.0", + "jss-nested": "6.0.1", + "jss-props-sort": "6.0.0", + "jss-vendor-prefixer": "7.0.0", + "keycode": "2.1.9", + "lodash": "4.17.4", + "normalize-scroll-left": "0.1.2", + "prop-types": "15.6.0", + "react-event-listener": "0.5.3", + "react-jss": "8.3.0", + "react-popper": "0.7.5", + "react-scrollbar-size": "2.1.0", + "react-transition-group": "2.2.1", + "recompose": "0.26.0", + "scroll": "2.0.1", + "warning": "3.0.0" + } + }, + "material-ui-icons": { + "version": "1.0.0-beta.17", + "resolved": "https://registry.npmjs.org/material-ui-icons/-/material-ui-icons-1.0.0-beta.17.tgz", + "integrity": "sha1-XxmvVKLZnu7zR6VUFKaFPhyFDcM=", + "requires": { + "recompose": "0.26.0" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=" + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "1.1.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "0.1.6", + "readable-stream": "2.3.3" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "merge": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "0.1.1" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "moment": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", + "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multicast-dns": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.1.tgz", + "integrity": "sha512-uV3/ckdsffHx9IrGQrx613mturMdMqQ06WTq+C09NsStJ9iNG6RcUWgPKs1Rfjy+idZT6tfQoXEusGNnEZhT3w==", + "requires": { + "dns-packet": "1.3.1", + "thunky": "0.1.0" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "optional": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "requires": { + "xml-char-classes": "1.0.0" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "1.1.4" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, + "node-forge": { + "version": "0.6.33", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", + "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=" + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "1.0.3", + "timers-browserify": "2.0.4", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "requires": { + "growly": "1.3.0", + "semver": "5.4.1", + "shellwords": "0.1.1", + "which": "1.3.0" + } + }, + "node-status-codes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-scroll-left": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz", + "integrity": "sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==" + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwmatcher": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", + "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz", + "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==" + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "obuf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "1.1.0" + } + }, + "opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "requires": { + "is-wsl": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "1.2.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "package-json": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", + "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", + "requires": { + "got": "5.7.1", + "registry-auth-token": "3.3.1", + "registry-url": "3.1.0", + "semver": "5.4.1" + } + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "1.3.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=" + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" + }, + "popper.js": { + "version": "1.12.9", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.12.9.tgz", + "integrity": "sha1-DfvC3/lsRRuzMu3Pz6r1ZtMx1bM=" + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + } + } + }, + "postcss": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.16.tgz", + "integrity": "sha512-m758RWPmSjFH/2MyyG3UOW1fgYbR9rtdzz5UNJnlm7OLtu4B2h9C6gi+bE4qFKghsBRFfZT8NzoQBs6JhLotoA==", + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "5.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + }, + "dependencies": { + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + } + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "requires": { + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "requires": { + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "requires": { + "postcss": "5.2.18", + "uniqid": "4.1.1" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-flexbugs-fixes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.2.0.tgz", + "integrity": "sha512-0AuD9HG1Ey3/3nqPWu9yqf7rL0KCPu5VgjDsjf5mzEcuo9H/z8nco/fljKgjsOUrZypa95MI0kS4xBZeBzz2lw==", + "requires": { + "postcss": "6.0.16" + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1", + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-loader": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.8.tgz", + "integrity": "sha512-KtXBiQ/r/WYW8LxTSJK7h8wLqvCMSub/BqmRnud/Mu8RzwflW9cmXxwsMwbn15TNv287Hcufdb3ZSs7xHKnG8Q==", + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.16", + "postcss-load-config": "1.2.0", + "schema-utils": "0.3.0" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "requires": { + "caniuse-db": "1.0.30000791", + "electron-to-chromium": "1.3.30" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=" + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "requires": { + "postcss": "6.0.16" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.16" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.16" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.16" + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "requires": { + "postcss": "5.2.18" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "uniqs": "2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.0", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "pretty-bytes": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "pretty-format": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-20.0.3.tgz", + "integrity": "sha1-Ag41ClYKH+GpjcO+tsz/s4beixQ=", + "requires": { + "ansi-regex": "2.1.1", + "ansi-styles": "3.2.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "2.0.6" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prop-types": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", + "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "proxy-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=" + }, + "raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", + "requires": { + "performance-now": "2.1.0" + } + }, + "rafl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rafl/-/rafl-1.2.2.tgz", + "integrity": "sha1-/pMPdYIRAg1H44gV9Rlqi+QVB0A=", + "requires": { + "global": "4.3.2" + } + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.3.tgz", + "integrity": "sha1-UVdakA+N1oOBxxC0cSwhVMPiA1s=", + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "react": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.2.0.tgz", + "integrity": "sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ==", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.0" + } + }, + "react-app-rewired": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-1.4.1.tgz", + "integrity": "sha512-XuZNpsmGSNQq59YWwRM07HXDu91M5G3zVhrn0f9qKqicZPUbbU1qF5h/g5ALZk7H4c9SIJOMYQVhnZA/zrBXtw==", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "dotenv": "4.0.0" + } + }, + "react-autosuggest": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/react-autosuggest/-/react-autosuggest-9.3.3.tgz", + "integrity": "sha512-g0W1x2+PfWWcEsz2r7sCPv1Dpwq6eH0uysFLwI4iVKfPxZkHvRL2tjRvnoFVfrP6/61lfqII4pOKh1V1S4VPrQ==", + "requires": { + "prop-types": "15.6.0", + "react-autowhatever": "10.1.0", + "shallow-equal": "1.0.0" + } + }, + "react-autowhatever": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-autowhatever/-/react-autowhatever-10.1.0.tgz", + "integrity": "sha512-LMZggoRgcmldAMyABY3Dz/DRiTQViMsQllXtOsDrZeBRwPIfn0RAOySaQMUNyECrHaCB5pm66jgQvkyNSh/BjA==", + "requires": { + "prop-types": "15.6.0", + "react-themeable": "1.1.0", + "section-iterator": "2.0.0" + } + }, + "react-dev-utils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-4.2.1.tgz", + "integrity": "sha1-nydj57r6GhucUiVNKked7sKA8RE=", + "requires": { + "address": "1.0.3", + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "cross-spawn": "5.1.0", + "detect-port-alt": "1.1.3", + "escape-string-regexp": "1.0.5", + "filesize": "3.5.11", + "global-modules": "1.0.0", + "gzip-size": "3.0.0", + "inquirer": "3.3.0", + "is-root": "1.0.0", + "opn": "5.1.0", + "react-error-overlay": "3.0.0", + "recursive-readdir": "2.2.1", + "shell-quote": "1.6.1", + "sockjs-client": "1.1.4", + "strip-ansi": "3.0.1", + "text-table": "0.2.0" + } + }, + "react-dom": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.2.0.tgz", + "integrity": "sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg==", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.6.0" + } + }, + "react-error-overlay": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-3.0.0.tgz", + "integrity": "sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw==" + }, + "react-event-listener": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.5.3.tgz", + "integrity": "sha512-fTGYvhe7eTsqq0m664Km0rxKQcqLIGZWZINmy1LU0fu312tay8Mt3Twq2P5Xj1dfDVvvzT1Ql3/FDkiMPJ1MOg==", + "requires": { + "babel-runtime": "6.26.0", + "fbjs": "0.8.16", + "prop-types": "15.6.0", + "warning": "3.0.0" + } + }, + "react-form-validator-core": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/react-form-validator-core/-/react-form-validator-core-0.3.0.tgz", + "integrity": "sha512-0alrJV+A4YIjk2+PcBtdKUjVKgrEKZ+igO104XbGqFEaLPo6wf4wwo4OnK5IfDBWEu7EJirQg+gwGhITgKzN7w==" + }, + "react-jss": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/react-jss/-/react-jss-8.3.0.tgz", + "integrity": "sha512-oNPk5wnQ2z2v+4syriGlsjy/X1/qS5UwFm0XxaPSsOEXc3JJHcjdQ3LmAXOgVBg2qD1v26FIs/g/pHQW3KCfaA==", + "requires": { + "hoist-non-react-statics": "2.3.1", + "jss": "9.8.0", + "jss-preset-default": "4.3.0", + "prop-types": "15.6.0", + "theming": "1.3.0" + } + }, + "react-material-ui-form-validator": { + "version": "2.0.0-beta.4", + "resolved": "https://registry.npmjs.org/react-material-ui-form-validator/-/react-material-ui-form-validator-2.0.0-beta.4.tgz", + "integrity": "sha512-OK7WUEqtyBxALZZEjFGS/AaIUHZ6sFyoqZc4kPUC4254WputxDsH/05hw2Ph3rjBBnbfYjVuP0famSO5M0zyeQ==", + "requires": { + "react-form-validator-core": "0.4.1" + }, + "dependencies": { + "react-form-validator-core": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/react-form-validator-core/-/react-form-validator-core-0.4.1.tgz", + "integrity": "sha512-tc0hFFroMfUFh8+c9/Y6PKRLA+TyIJIqRK6USgjH26yojgeUDBf82Izo/YqFl8199UXr4SjMCcNBJVcKabdtNw==" + } + } + }, + "react-popper": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.7.5.tgz", + "integrity": "sha512-ya9dhhGCf74JTOB2uyksEHhIGw7w9tNZRUJF73lEq2h4H5JT6MBa4PdT4G+sx6fZwq+xKZAL/sVNAIuojPn7Dg==", + "requires": { + "popper.js": "1.12.9", + "prop-types": "15.6.0" + } + }, + "react-router": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.2.0.tgz", + "integrity": "sha512-DY6pjwRhdARE4TDw7XjxjZsbx9lKmIcyZoZ+SDO7SBJ1KUeWNxT22Kara2AC7u6/c2SYEHlEDLnzBCcNhLE8Vg==", + "requires": { + "history": "4.7.2", + "hoist-non-react-statics": "2.3.1", + "invariant": "2.2.2", + "loose-envify": "1.3.1", + "path-to-regexp": "1.7.0", + "prop-types": "15.6.0", + "warning": "3.0.0" + } + }, + "react-router-dom": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.2.2.tgz", + "integrity": "sha512-cHMFC1ZoLDfEaMFoKTjN7fry/oczMgRt5BKfMAkTu5zEuJvUiPp1J8d0eXSVTnBh6pxlbdqDhozunOOLtmKfPA==", + "requires": { + "history": "4.7.2", + "invariant": "2.2.2", + "loose-envify": "1.3.1", + "prop-types": "15.6.0", + "react-router": "4.2.0", + "warning": "3.0.0" + } + }, + "react-scripts": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-1.0.17.tgz", + "integrity": "sha512-tf2kBx230iUSxqJZxboYINlIOKryW+CC7oVgQ4rguNLmcPgWvnnCM8huAgCgL2yuqDd0qQvnI5sRCmc+0TQ5zw==", + "requires": { + "autoprefixer": "7.1.6", + "babel-core": "6.26.0", + "babel-eslint": "7.2.3", + "babel-jest": "20.0.3", + "babel-loader": "7.1.2", + "babel-preset-react-app": "3.1.0", + "babel-runtime": "6.26.0", + "case-sensitive-paths-webpack-plugin": "2.1.1", + "chalk": "1.1.3", + "css-loader": "0.28.7", + "dotenv": "4.0.0", + "eslint": "4.10.0", + "eslint-config-react-app": "2.0.1", + "eslint-loader": "1.9.0", + "eslint-plugin-flowtype": "2.39.1", + "eslint-plugin-import": "2.8.0", + "eslint-plugin-jsx-a11y": "5.1.1", + "eslint-plugin-react": "7.4.0", + "extract-text-webpack-plugin": "3.0.2", + "file-loader": "1.1.5", + "fs-extra": "3.0.1", + "fsevents": "1.1.2", + "html-webpack-plugin": "2.29.0", + "jest": "20.0.4", + "object-assign": "4.1.1", + "postcss-flexbugs-fixes": "3.2.0", + "postcss-loader": "2.0.8", + "promise": "8.0.1", + "raf": "3.4.0", + "react-dev-utils": "4.2.1", + "style-loader": "0.19.0", + "sw-precache-webpack-plugin": "0.11.4", + "url-loader": "0.6.2", + "webpack": "3.8.1", + "webpack-dev-server": "2.9.4", + "webpack-manifest-plugin": "1.3.2", + "whatwg-fetch": "2.0.3" + }, + "dependencies": { + "promise": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz", + "integrity": "sha1-5F1osAoXZHttpxG/he1u1HII9FA=", + "requires": { + "asap": "2.0.6" + } + } + } + }, + "react-scrollbar-size": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-scrollbar-size/-/react-scrollbar-size-2.1.0.tgz", + "integrity": "sha512-9dDUJvk7S48r0TRKjlKJ9e/LkLLYgc9LdQR6W21I8ZqtSrEsedPOoMji4nU3DHy7fx2l8YMScJS/N7qiloYzXQ==", + "requires": { + "babel-runtime": "6.26.0", + "prop-types": "15.6.0", + "react-event-listener": "0.5.3", + "stifle": "1.0.4" + } + }, + "react-themeable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-themeable/-/react-themeable-1.1.0.tgz", + "integrity": "sha1-fURm3ZsrX6dQWHJ4JenxUro3mg4=", + "requires": { + "object-assign": "3.0.0" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + } + } + }, + "react-transition-group": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.2.1.tgz", + "integrity": "sha512-q54UBM22bs/CekG8r3+vi9TugSqh0t7qcEVycaRc9M0p0aCEu+h6rp/RFiW7fHfgd1IKpd9oILFTl5QK+FpiPA==", + "requires": { + "chain-function": "1.0.0", + "classnames": "2.2.5", + "dom-helpers": "3.3.1", + "loose-envify": "1.3.1", + "prop-types": "15.6.0", + "warning": "3.0.0" + } + }, + "read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "requires": { + "pinkie-promise": "2.0.1", + "readable-stream": "2.3.3" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "recompose": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", + "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", + "requires": { + "change-emitter": "0.1.6", + "fbjs": "0.8.16", + "hoist-non-react-statics": "2.3.1", + "symbol-observable": "1.1.0" + } + }, + "recursive-readdir": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.1.tgz", + "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=", + "requires": { + "minimatch": "3.0.3" + }, + "dependencies": { + "minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "requires": { + "balanced-match": "0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + } + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "registry-auth-token": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "requires": { + "rc": "1.2.3", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "1.2.3" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=" + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" + }, + "resolve-pathname": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", + "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "1.2.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sane": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-1.6.0.tgz", + "integrity": "sha1-lhDEUjB6E10pwf3+JUcDQYDEZ3U=", + "requires": { + "anymatch": "1.3.2", + "exec-sh": "0.2.1", + "fb-watchman": "1.9.2", + "minimatch": "3.0.4", + "minimist": "1.2.0", + "walker": "1.0.7", + "watch": "0.10.0" + }, + "dependencies": { + "bser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", + "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=", + "requires": { + "node-int64": "0.4.0" + } + }, + "fb-watchman": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", + "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M=", + "requires": { + "bser": "1.0.2" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "requires": { + "ajv": "5.5.2" + } + }, + "scroll": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/scroll/-/scroll-2.0.1.tgz", + "integrity": "sha1-tMfSfovPOuiligQvJyaK4/VfnM0=", + "requires": { + "rafl": "1.2.2" + } + }, + "section-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/section-iterator/-/section-iterator-2.0.0.tgz", + "integrity": "sha1-v0RNev7rlK1Dw5rS+yYVFifMuio=" + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selfsigned": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", + "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", + "requires": { + "node-forge": "0.6.33" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "requires": { + "semver": "5.4.1" + } + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + } + } + }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=" + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "requires": { + "accepts": "1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.2", + "mime-types": "2.1.17", + "parseurl": "1.3.2" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "serviceworker-cache-polyfill": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz", + "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "sha.js": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", + "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shallow-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.0.0.tgz", + "integrity": "sha1-UI0YOLPeWQq4dXsBGyXkMJAJRfc=" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.2.0" + } + }, + "sockjs": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "requires": { + "faye-websocket": "0.10.0", + "uuid": "2.0.3" + }, + "dependencies": { + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "requires": { + "websocket-driver": "0.7.0" + } + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" + } + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.2.0" + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "requires": { + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.1", + "select-hose": "2.0.0", + "spdy-transport": "2.0.20" + } + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.1", + "readable-stream": "2.3.3", + "safe-buffer": "5.1.1", + "wbuf": "1.7.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "ssri": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.2.4.tgz", + "integrity": "sha512-UnEAgMZa15973iH7cUi0AHjJn1ACDIkaMyZILoqwN6yzt+4P81I8tBc5Hl+qwi5auMplZtPQsHrPBR5vJLcQtQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "stifle": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stifle/-/stifle-1.0.4.tgz", + "integrity": "sha1-izvN9SQZsKnHnjWtrc5QEjwdjpk=" + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", + "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "requires": { + "strip-ansi": "3.0.1" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "style-loader": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.0.tgz", + "integrity": "sha512-9mx9sC9nX1dgP96MZOODpGC6l1RzQBITI2D5WJhu+wnbrSYVKLGuy14XJSLVQih/0GFrPpjelt+s//VcZQ2Evw==", + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + }, + "supports-color": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", + "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", + "requires": { + "has-flag": "2.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + } + }, + "sw-precache": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.0.tgz", + "integrity": "sha512-sKctdX+5hUxkqJ/1DM88ubQ+QRvyw7CnxWdk909N2DgvxMqc1gcQFrwL7zpVc87wFmCA/OvRQd0iMC2XdFopYg==", + "requires": { + "dom-urls": "1.1.0", + "es6-promise": "4.2.2", + "glob": "7.1.2", + "lodash.defaults": "4.2.0", + "lodash.template": "4.4.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "pretty-bytes": "4.0.2", + "sw-toolbox": "3.6.0", + "update-notifier": "1.0.3" + } + }, + "sw-precache-webpack-plugin": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.4.tgz", + "integrity": "sha1-ppUBflTu1XVVFJOlGdwdqNotxeA=", + "requires": { + "del": "2.2.2", + "sw-precache": "5.2.0", + "uglify-js": "3.3.6" + } + }, + "sw-toolbox": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz", + "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=", + "requires": { + "path-to-regexp": "1.7.0", + "serviceworker-cache-polyfill": "4.0.0" + } + }, + "symbol-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.1.0.tgz", + "integrity": "sha512-dQoid9tqQ+uotGhuTKEY11X4xhyYePVnqGSoSm3OGKh2E8LZ6RPULp1uXTctk33IeERlrRJYoVSBglsL05F5Uw==" + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.0", + "lodash": "4.17.4", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + }, + "dependencies": { + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" + }, + "test-exclude": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", + "integrity": "sha512-35+Asrsk3XHJDBgf/VRFexPgh3UyETv8IAn/LRTiZjVy6rjPVqdEk8dJcJYBzl1w0XCJM48lvTy8SfEsCWS4nA==", + "requires": { + "arrify": "1.0.1", + "micromatch": "2.3.11", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "require-main-filename": "1.0.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "theming": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/theming/-/theming-1.3.0.tgz", + "integrity": "sha512-ya5Ef7XDGbTPBv5ENTwrwkPUexrlPeiAg/EI9kdlUAZhNlRbCdhMKRgjNX1IcmsmiPcqDQZE6BpSaH+cr31FKw==", + "requires": { + "brcast": "3.0.1", + "is-function": "1.0.1", + "is-plain-object": "2.0.4", + "prop-types": "15.6.0" + } + }, + "throat": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", + "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "thunky": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", + "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=" + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=" + }, + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" + }, + "timers-browserify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "toposort": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", + "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=" + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "requires": { + "punycode": "1.4.1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "ua-parser-js": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" + }, + "uglify-js": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.6.tgz", + "integrity": "sha512-dHp7NHttxYRqz6v/YtR+Jgfo68I/yMbofhYymx9fhIRMxPgap9axbMq5a4NT9gWVzQW8Zh8DJsgZpxKpZbolMA==", + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "requires": { + "macaddress": "0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "requires": { + "imurmurhash": "0.1.4" + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" + }, + "update-notifier": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz", + "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=", + "requires": { + "boxen": "0.6.0", + "chalk": "1.1.3", + "configstore": "2.1.0", + "is-npm": "1.0.0", + "latest-version": "2.0.0", + "lazy-req": "1.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "2.0.0" + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "urijs": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.0.tgz", + "integrity": "sha512-Qs2odXn0hST5VSPVjpi73CMqtbAoanahaqWBujGU+IyMrMqpWcIhDewxQRhCkmqYxuyvICDcSuLdv2O7ncWBGw==" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", + "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", + "requires": { + "loader-utils": "1.1.0", + "mime": "1.6.0", + "schema-utils": "0.3.0" + } + }, + "url-parse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", + "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=" + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "value-equal": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", + "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "requires": { + "makeerror": "1.0.11" + } + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "1.3.1" + } + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=" + }, + "watchpack": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "requires": { + "async": "2.6.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + } + }, + "wbuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "requires": { + "minimalistic-assert": "1.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "webpack": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", + "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", + "requires": { + "acorn": "5.3.0", + "acorn-dynamic-import": "2.0.2", + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.4.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "2.3.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + } + }, + "webpack-dev-server": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz", + "integrity": "sha512-thrqC0EQEoSjXeYgP6pUXcUCZ+LNrKsDPn+mItLnn5VyyNZOJKd06hUP5vqkYwL8nWWXsii0loSF9NHNccT6ow==", + "requires": { + "ansi-html": "0.0.7", + "array-includes": "3.0.3", + "bonjour": "3.5.0", + "chokidar": "1.7.0", + "compression": "1.7.1", + "connect-history-api-fallback": "1.5.0", + "debug": "3.1.0", + "del": "3.0.0", + "express": "4.16.2", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "import-local": "0.1.1", + "internal-ip": "1.2.0", + "ip": "1.1.5", + "killable": "1.0.0", + "loglevel": "1.6.1", + "opn": "5.1.0", + "portfinder": "1.0.13", + "selfsigned": "1.10.1", + "serve-index": "1.9.1", + "sockjs": "0.3.18", + "sockjs-client": "1.1.4", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "4.5.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "webpack-manifest-plugin": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-1.3.2.tgz", + "integrity": "sha512-MX60Bv2G83Zks9pi3oLOmRgnPAnwrlMn+lftMrWBm199VQjk46/xgzBi9lPfpZldw2+EI2S+OevuLIaDuxCWRw==", + "requires": { + "fs-extra": "0.30.0", + "lodash": "4.17.4" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "4.1.11" + } + } + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "requires": { + "http-parser-js": "0.4.9", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", + "requires": { + "iconv-lite": "0.4.19" + } + }, + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + }, + "whatwg-url": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", + "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", + "requires": { + "tr46": "0.0.3", + "webidl-conversions": "3.0.1" + }, + "dependencies": { + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + } + } + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=" + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "widest-line": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", + "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "requires": { + "string-width": "1.0.2" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "worker-farm": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz", + "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==", + "requires": { + "errno": "0.1.6", + "xtend": "4.0.1" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "requires": { + "mkdirp": "0.5.1" + } + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } + }, + "xdg-basedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", + "requires": { + "os-homedir": "1.0.2" + } + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=" + }, + "xml-name-validator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + } + } + } + } +} diff --git a/interface/package.json b/interface/package.json new file mode 100644 index 0000000..d4b3c87 --- /dev/null +++ b/interface/package.json @@ -0,0 +1,29 @@ +{ + "name": "fresh", + "version": "0.1.0", + "private": true, + "dependencies": { + "compression-webpack-plugin": "^1.1.8", + "material-ui": "^1.0.0-beta.32", + "material-ui-icons": "^1.0.0-beta.17", + "moment": "^2.20.1", + "prop-types": "^15.6.0", + "react": "^16.2.0", + "react-autosuggest": "^9.3.3", + "react-dom": "^16.2.0", + "react-form-validator-core": "^0.3.0", + "react-material-ui-form-validator": "^2.0.0-beta.4", + "react-router": "^4.2.0", + "react-router-dom": "^4.2.2", + "react-scripts": "1.0.17" + }, + "scripts": { + "start": "react-app-rewired start", + "build": "react-app-rewired build && rm -rf ../data/www && cp -r build ../data/www", + "test": "react-app-rewired test --env=jsdom", + "eject": "react-scripts eject" + }, + "devDependencies": { + "react-app-rewired": "^1.4.1" + } +} diff --git a/interface/public/app/icon.png b/interface/public/app/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..13dd442c80a693e407fb8c2615f699e4639d3eea GIT binary patch literal 8940 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 literal 0 HcmV?d00001 diff --git a/interface/public/app/manifest.json b/interface/public/app/manifest.json new file mode 100644 index 0000000..f775661 --- /dev/null +++ b/interface/public/app/manifest.json @@ -0,0 +1,12 @@ +{ + "name":"ESP8266 React", + "icons":[ + { + "src":"/app/icon.png", + "sizes":"48x48 72x72 96x96 128x128 256x256" + } + ], + "start_url":"/", + "display":"fullscreen", + "orientation":"any" +} diff --git a/interface/public/css/roboto.css b/interface/public/css/roboto.css new file mode 100644 index 0000000..89c6414 --- /dev/null +++ b/interface/public/css/roboto.css @@ -0,0 +1,22 @@ +/* Just supporting latin due to size constrains on the esp chip */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 300; + src: local('Roboto Light'), local('Roboto-Light'), url(../fonts/ro-li.w2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto'), local('Roboto-Regular'), url(../fonts/ro-re.w2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215; +} +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 500; + src: local('Roboto Medium'), local('Roboto-Medium'), url(../fonts/ro-me.w2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+2215; +} \ No newline at end of file diff --git a/interface/public/fonts/ro-li.w2 b/interface/public/fonts/ro-li.w2 new file mode 100644 index 0000000000000000000000000000000000000000..52c5845a7c3803f313d8905ee2f83ac20a5bc9b3 GIT binary patch literal 15440 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 O6y7R}gQBj@I4BA`2c0zl literal 0 HcmV?d00001 diff --git a/interface/public/index.html b/interface/public/index.html new file mode 100644 index 0000000..209254a --- /dev/null +++ b/interface/public/index.html @@ -0,0 +1,16 @@ + + + + + + + + ESP8266 React + + + +

+ + diff --git a/interface/src/App.js b/interface/src/App.js new file mode 100644 index 0000000..6bf088a --- /dev/null +++ b/interface/src/App.js @@ -0,0 +1,54 @@ +import React, { Component } from 'react'; + +import AppRouting from './AppRouting'; + +import JssProvider from 'react-jss/lib/JssProvider'; +import { create } from 'jss'; + +import Reboot from 'material-ui/Reboot'; + +import blueGrey from 'material-ui/colors/blueGrey'; +import indigo from 'material-ui/colors/indigo'; +import orange from 'material-ui/colors/orange'; +import red from 'material-ui/colors/red'; +import green from 'material-ui/colors/green'; + +import { + MuiThemeProvider, + createMuiTheme, + createGenerateClassName, + jssPreset, +} from 'material-ui/styles'; + +// Our theme +const theme = createMuiTheme({ + palette: { + primary: indigo, + secondary: blueGrey, + highlight_idle: blueGrey[900], + highlight_warn: orange[500], + highlight_error: red[500], + highlight_success: green[500], + }, +}); + +// JSS instance +const jss = create(jssPreset()); + +// Class name generator. +const generateClassName = createGenerateClassName(); + +class App extends Component { + render() { + return ( + + + + + + + ) + } +} + +export default App diff --git a/interface/src/AppRouting.js b/interface/src/AppRouting.js new file mode 100644 index 0000000..fe5bfe6 --- /dev/null +++ b/interface/src/AppRouting.js @@ -0,0 +1,25 @@ +import React, { Component } from 'react'; + +import { Route, Redirect, Switch } from 'react-router'; + +// containers +import WiFiConfiguration from './containers/WiFiConfiguration'; +import NTPConfiguration from './containers/NTPConfiguration'; +import OTAConfiguration from './containers/OTAConfiguration'; +import APConfiguration from './containers/APConfiguration'; + +class AppRouting extends Component { + render() { + return ( + + + + + + + + ) + } +} + +export default AppRouting; diff --git a/interface/src/components/MenuAppBar.js b/interface/src/components/MenuAppBar.js new file mode 100644 index 0000000..a1b7a0f --- /dev/null +++ b/interface/src/components/MenuAppBar.js @@ -0,0 +1,189 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from 'material-ui/styles'; +import Drawer from 'material-ui/Drawer'; +import AppBar from 'material-ui/AppBar'; +import Toolbar from 'material-ui/Toolbar'; +import Typography from 'material-ui/Typography'; +import IconButton from 'material-ui/IconButton'; +import Hidden from 'material-ui/Hidden'; +import Divider from 'material-ui/Divider'; +import { Link } from 'react-router-dom'; +import List, { ListItem, ListItemIcon, ListItemText } from 'material-ui/List'; + +import MenuIcon from 'material-ui-icons/Menu'; +import WifiIcon from 'material-ui-icons/Wifi'; +import SystemUpdateIcon from 'material-ui-icons/SystemUpdate'; +import AccessTimeIcon from 'material-ui-icons/AccessTime'; +import SettingsInputAntennaIcon from 'material-ui-icons/SettingsInputAntenna'; + +const drawerWidth = 250; + +const styles = theme => ({ + root: { + zIndex: 1, + width: '100%', + height: '100%', + }, + toolbar: { + paddingLeft: theme.spacing.unit, + paddingRight: theme.spacing.unit, + [theme.breakpoints.up('md')]: { + paddingLeft: theme.spacing.unit * 3, + paddingRight: theme.spacing.unit * 3, + } + }, + appFrame: { + position: 'relative', + display: 'flex', + width: '100%', + height: '100%', + }, + appBar: { + position: 'absolute', + marginLeft: drawerWidth, + [theme.breakpoints.up('md')]: { + width: `calc(100% - ${drawerWidth}px)`, + }, + }, + navIconHide: { + [theme.breakpoints.up('md')]: { + display: 'none', + }, + }, + drawerPaper: { + width: drawerWidth, + height: '100%', + [theme.breakpoints.up('md')]: { + width: drawerWidth, + position:'fixed', + left:0, + top:0, + overflow:'auto' + }, + }, + content: { + backgroundColor: theme.palette.background.default, + width:"100%", + marginTop: 56, + [theme.breakpoints.up('md')]: { + paddingLeft: drawerWidth + }, + [theme.breakpoints.up('sm')]: { + height: 'calc(100% - 64px)', + marginTop: 64, + }, + }, +}); + +class MenuAppBar extends React.Component { + state = { + mobileOpen: false, + }; + + handleDrawerToggle = () => { + this.setState({ mobileOpen: !this.state.mobileOpen }); + }; + + render() { + const { classes, theme, children, sectionTitle } = this.props; + + const drawer = ( +
+ + + ESP8266 React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ); + + return ( +
+
+ + + + + + + {sectionTitle} + + + + + + {drawer} + + + + + {drawer} + + +
+ {children} +
+
+
+ ); + } +} + +MenuAppBar.propTypes = { + classes: PropTypes.object.isRequired, + theme: PropTypes.object.isRequired, + sectionTitle: PropTypes.string.isRequired, +}; + +export default withStyles(styles, { withTheme: true })(MenuAppBar); diff --git a/interface/src/components/SectionContent.js b/interface/src/components/SectionContent.js new file mode 100644 index 0000000..845eed3 --- /dev/null +++ b/interface/src/components/SectionContent.js @@ -0,0 +1,36 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import Paper from 'material-ui/Paper'; +import { withStyles } from 'material-ui/styles'; +import Typography from 'material-ui/Typography'; + +const styles = theme => ({ + content: { + padding: theme.spacing.unit * 2, + margin: theme.spacing.unit * 2, + } +}); + +function SectionContent(props) { + const { children, classes, title } = props; + return ( + + + {title} + + {children} + + ); +} + +SectionContent.propTypes = { + classes: PropTypes.object.isRequired, + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node + ]).isRequired, + title: PropTypes.string.isRequired +}; + +export default withStyles(styles)(SectionContent); diff --git a/interface/src/components/SnackbarNotification.js b/interface/src/components/SnackbarNotification.js new file mode 100644 index 0000000..35b9643 --- /dev/null +++ b/interface/src/components/SnackbarNotification.js @@ -0,0 +1,74 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from 'material-ui/styles'; +import Snackbar from 'material-ui/Snackbar'; +import IconButton from 'material-ui/IconButton'; +import CloseIcon from 'material-ui-icons/Close'; + +const styles = theme => ({ + close: { + width: theme.spacing.unit * 4, + height: theme.spacing.unit * 4, + }, +}); + +class SnackbarNotification extends React.Component { + state = { + open: false, + message: null + }; + + raiseNotification = (message) => { + this.setState({ open: true, message:message }); + }; + + handleClose = (event, reason) => { + if (reason === 'clickaway') { + return; + } + this.setState({ open: false }); + }; + + componentWillReceiveProps(nextProps){ + if (nextProps.notificationRef){ + nextProps.notificationRef(this.raiseNotification); + } + } + + render() { + const { classes } = this.props; + return ( + {this.state.message}} + action={ + + + + } + /> + ); + } +} + +SnackbarNotification.propTypes = { + classes: PropTypes.object.isRequired, + notificationRef: PropTypes.func.isRequired, +}; + +export default withStyles(styles)(SnackbarNotification); diff --git a/interface/src/constants/Endpoints.js b/interface/src/constants/Endpoints.js new file mode 100644 index 0000000..0860084 --- /dev/null +++ b/interface/src/constants/Endpoints.js @@ -0,0 +1,28 @@ +export const ENDPOINT_ROOT = ""; + +export const NTP_STATUS_PATH = "/ntpStatus"; +export const NTP_STATUS_ENDPOINT = ENDPOINT_ROOT + NTP_STATUS_PATH; + +export const NTP_SETTINGS_PATH = "/ntpSettings"; +export const NTP_SETTINGS_ENDPOINT = ENDPOINT_ROOT + NTP_SETTINGS_PATH; + +export const AP_SETTINGS_PATH = "/apSettings"; +export const AP_SETTINGS_ENDPOINT = ENDPOINT_ROOT + AP_SETTINGS_PATH; + +export const AP_STATUS_PATH = "/apStatus"; +export const AP_STATUS_ENDPOINT = ENDPOINT_ROOT + AP_STATUS_PATH; + +export const SCAN_NETWORKS_PATH = "/scanNetworks"; +export const SCAN_NETWORKS_ENDPOINT = ENDPOINT_ROOT + SCAN_NETWORKS_PATH; + +export const LIST_NETWORKS_PATH = "/listNetworks"; +export const LIST_NETWORKS_ENDPOINT = ENDPOINT_ROOT + LIST_NETWORKS_PATH; + +export const WIFI_SETTINGS_PATH = "/wifiSettings"; +export const WIFI_SETTINGS_ENDPOINT = ENDPOINT_ROOT + WIFI_SETTINGS_PATH; + +export const WIFI_STATUS_PATH = "/wifiStatus"; +export const WIFI_STATUS_ENDPOINT = ENDPOINT_ROOT + WIFI_STATUS_PATH; + +export const OTA_SETTINGS_PATH = "/otaSettings"; +export const OTA_SETTINGS_ENDPOINT = ENDPOINT_ROOT + OTA_SETTINGS_PATH; diff --git a/interface/src/constants/Highlight.js b/interface/src/constants/Highlight.js new file mode 100644 index 0000000..6eae2e0 --- /dev/null +++ b/interface/src/constants/Highlight.js @@ -0,0 +1,4 @@ +export const IDLE = "idle"; +export const SUCCESS = "success"; +export const ERROR = "error"; +export const WARN = "warn"; diff --git a/interface/src/constants/NTPStatus.js b/interface/src/constants/NTPStatus.js new file mode 100644 index 0000000..f630953 --- /dev/null +++ b/interface/src/constants/NTPStatus.js @@ -0,0 +1,32 @@ +import * as Highlight from '../constants/Highlight'; + +export const NTP_TIME_NOT_SET = 0; +export const NTP_TIME_NEEDS_SYNC = 1; +export const NTP_TIME_SET = 2; + +export const isSynchronized = ntpStatus => ntpStatus && (ntpStatus.status === NTP_TIME_NEEDS_SYNC || ntpStatus.status === NTP_TIME_SET); + +export const ntpStatusHighlight = ntpStatus => { + switch (ntpStatus.status){ + case NTP_TIME_SET: + return Highlight.SUCCESS; + case NTP_TIME_NEEDS_SYNC: + return Highlight.WARN; + case NTP_TIME_NOT_SET: + default: + return Highlight.ERROR; + } +} + +export const ntpStatus = ntpStatus => { + switch (ntpStatus.status){ + case NTP_TIME_SET: + return "Synchronized"; + case NTP_TIME_NEEDS_SYNC: + return "Synchronization required"; + case NTP_TIME_NOT_SET: + return "Time not set" + default: + return "Unknown"; + } +} diff --git a/interface/src/constants/TimeFormat.js b/interface/src/constants/TimeFormat.js new file mode 100644 index 0000000..47b71f0 --- /dev/null +++ b/interface/src/constants/TimeFormat.js @@ -0,0 +1,4 @@ +import moment from 'moment'; + +export const TIME_AND_DATE = 'DD/MM/YYYY HH:mm:ss'; +export const unixTimeToTimeAndDate = unixTime => moment.unix(unixTime).format(TIME_AND_DATE); diff --git a/interface/src/constants/WiFiAPModes.js b/interface/src/constants/WiFiAPModes.js new file mode 100644 index 0000000..6c1b7a7 --- /dev/null +++ b/interface/src/constants/WiFiAPModes.js @@ -0,0 +1,5 @@ +export const WIFI_AP_MODE_ALWAYS = 0; +export const WIFI_AP_MODE_DISCONNECTED = 1; +export const WIFI_AP_NEVER = 2; + +export const isAPEnabled = apMode => apMode === WIFI_AP_MODE_ALWAYS || apMode === WIFI_AP_MODE_DISCONNECTED; diff --git a/interface/src/constants/WiFiConnectionStatus.js b/interface/src/constants/WiFiConnectionStatus.js new file mode 100644 index 0000000..b7ba819 --- /dev/null +++ b/interface/src/constants/WiFiConnectionStatus.js @@ -0,0 +1,44 @@ +import * as Highlight from '../constants/Highlight'; + +export const WIFI_STATUS_IDLE = 0; +export const WIFI_STATUS_NO_SSID_AVAIL = 1; +export const WIFI_STATUS_CONNECTED = 3; +export const WIFI_STATUS_CONNECT_FAILED = 4; +export const WIFI_STATUS_CONNECTION_LOST = 5; +export const WIFI_STATUS_DISCONNECTED = 6; + +export const isConnected = wifiStatus => wifiStatus && wifiStatus.status === WIFI_STATUS_CONNECTED; + +export const connectionStatusHighlight = wifiStatus => { + switch (wifiStatus.status){ + case WIFI_STATUS_IDLE: + case WIFI_STATUS_DISCONNECTED: + return Highlight.IDLE; + case WIFI_STATUS_CONNECTED: + return Highlight.SUCCESS; + case WIFI_STATUS_CONNECT_FAILED: + case WIFI_STATUS_CONNECTION_LOST: + return Highlight.ERROR; + default: + return Highlight.WARN; + } +} + +export const connectionStatus = wifiStatus => { + switch (wifiStatus.status){ + case WIFI_STATUS_IDLE: + return "Idle"; + case WIFI_STATUS_NO_SSID_AVAIL: + return "No SSID Available"; + case WIFI_STATUS_CONNECTED: + return "Connected"; + case WIFI_STATUS_CONNECT_FAILED: + return "Connection Failed"; + case WIFI_STATUS_CONNECTION_LOST: + return "Connection Lost"; + case WIFI_STATUS_DISCONNECTED: + return "Disconnected"; + default: + return "Unknown"; + } +} diff --git a/interface/src/constants/WiFiSecurityModes.js b/interface/src/constants/WiFiSecurityModes.js new file mode 100644 index 0000000..e2922ee --- /dev/null +++ b/interface/src/constants/WiFiSecurityModes.js @@ -0,0 +1,23 @@ +export const WIFI_SECURITY_WPA_TKIP = 2; +export const WIFI_SECURITY_WEP = 5; +export const WIFI_SECURITY_WPA_CCMP = 4; +export const WIFI_SECURITY_NONE = 7; +export const WIFI_SECURITY_AUTO = 8; + +export const isNetworkOpen = selectedNetwork => selectedNetwork && selectedNetwork.encryption_type === WIFI_SECURITY_NONE; + +export const networkSecurityMode = selectedNetwork => { + switch (selectedNetwork.encryption_type){ + case WIFI_SECURITY_WPA_TKIP: + case WIFI_SECURITY_WPA_CCMP: + return "WPA"; + case WIFI_SECURITY_WEP: + return "WEP"; + case WIFI_SECURITY_AUTO: + return "Auto"; + case WIFI_SECURITY_NONE: + return "None"; + default: + return "Unknown"; + } +} diff --git a/interface/src/containers/APConfiguration.js b/interface/src/containers/APConfiguration.js new file mode 100644 index 0000000..b014c83 --- /dev/null +++ b/interface/src/containers/APConfiguration.js @@ -0,0 +1,48 @@ +import React, { Component } from 'react'; + +import Tabs, { Tab } from 'material-ui/Tabs'; + +import MenuAppBar from '../components/MenuAppBar'; +import APSettings from './APSettings'; +import APStatus from './APStatus'; + +class APConfiguration extends Component { + + constructor(props) { + super(props); + this.state = { + selectedTab: "apStatus", + selectedNetwork: null + }; + this.selectNetwork = this.selectNetwork.bind(this); + this.deselectNetwork = this.deselectNetwork.bind(this); + } + + selectNetwork(network) { + this.setState({ selectedTab: "wifiSettings", selectedNetwork:network }); + } + + deselectNetwork(network) { + this.setState({ selectedNetwork:null }); + } + + handleTabChange = (event, selectedTab) => { + this.setState({ selectedTab }); + }; + + render() { + const { selectedTab } = this.state; + return ( + + + + + + {selectedTab === "apStatus" && } + {selectedTab === "apSettings" && } + + ) + } +} + +export default APConfiguration; diff --git a/interface/src/containers/APSettings.js b/interface/src/containers/APSettings.js new file mode 100644 index 0000000..073b4c4 --- /dev/null +++ b/interface/src/containers/APSettings.js @@ -0,0 +1,70 @@ +import React, { Component } from 'react'; + +import { AP_SETTINGS_ENDPOINT } from '../constants/Endpoints'; +import SectionContent from '../components/SectionContent'; +import SnackbarNotification from '../components/SnackbarNotification'; +import APSettingsForm from '../forms/APSettingsForm'; +import { simpleGet } from '../helpers/SimpleGet'; +import { simplePost } from '../helpers/SimplePost'; + +class APSettings extends Component { + + constructor(props) { + super(props); + + this.state = { + apSettings:null, + apSettingsFetched: false, + errorMessage:null + }; + + this.setState = this.setState.bind(this); + this.loadAPSettings = this.loadAPSettings.bind(this); + this.saveAPSettings = this.saveAPSettings.bind(this); + } + + componentDidMount() { + this.loadAPSettings(); + } + + loadAPSettings() { + simpleGet( + AP_SETTINGS_ENDPOINT, + this.setState, + this.raiseNotification, + "apSettings", + "apSettingsFetched" + ); + } + + saveAPSettings(e) { + simplePost( + AP_SETTINGS_ENDPOINT, + this.state, + this.setState, + this.raiseNotification, + "apSettings", + "apSettingsFetched" + ); + } + + wifiSettingValueChange = name => event => { + const { apSettings } = this.state; + apSettings[name] = event.target.value; + this.setState({apSettings}); + }; + + render() { + const { apSettingsFetched, apSettings, errorMessage } = this.state; + return ( + + this.raiseNotification = raiseNotification} /> + + + ) + } + +} + +export default APSettings; diff --git a/interface/src/containers/APStatus.js b/interface/src/containers/APStatus.js new file mode 100644 index 0000000..9de8ff7 --- /dev/null +++ b/interface/src/containers/APStatus.js @@ -0,0 +1,165 @@ +import React, { Component } from 'react'; + +import { withStyles } from 'material-ui/styles'; +import Button from 'material-ui/Button'; +import { LinearProgress } from 'material-ui/Progress'; +import Typography from 'material-ui/Typography'; +import List, { ListItem, ListItemText } from 'material-ui/List'; +import Avatar from 'material-ui/Avatar'; +import Divider from 'material-ui/Divider'; +import SettingsInputAntennaIcon from 'material-ui-icons/SettingsInputAntenna'; +import DeviceHubIcon from 'material-ui-icons/DeviceHub'; +import ComputerIcon from 'material-ui-icons/Computer'; + +import SnackbarNotification from '../components/SnackbarNotification' +import SectionContent from '../components/SectionContent' + +import * as Highlight from '../constants/Highlight'; +import { AP_STATUS_ENDPOINT } from '../constants/Endpoints'; +import { simpleGet } from '../helpers/SimpleGet'; + +const styles = theme => ({ + ["apStatus_" + Highlight.SUCCESS]: { + backgroundColor: theme.palette.highlight_success + }, + ["apStatus_" + Highlight.IDLE]: { + backgroundColor: theme.palette.highlight_idle + }, + fetching: { + margin: theme.spacing.unit * 4, + textAlign: "center" + }, + button: { + marginRight: theme.spacing.unit * 2, + marginTop: theme.spacing.unit * 2, + } +}); + +class APStatus extends Component { + + constructor(props) { + super(props); + + this.state = { + status:null, + fetched: false, + errorMessage:null + }; + + this.setState = this.setState.bind(this); + this.loadAPStatus = this.loadAPStatus.bind(this); + this.raiseNotification=this.raiseNotification.bind(this); + } + + componentDidMount() { + this.loadAPStatus(); + } + + loadAPStatus() { + simpleGet( + AP_STATUS_ENDPOINT, + this.setState, + this.raiseNotification + ); + } + + raiseNotification(errorMessage) { + this.snackbarNotification(errorMessage); + } + + apStatusHighlight(status){ + return status.active ? Highlight.SUCCESS : Highlight.IDLE; + } + + apStatus(status){ + return status.active ? "Active" : "Inactive"; + } + + // active, ip_address, mac_address, station_num + + renderAPStatus(status, fullDetails, classes){ + const listItems = []; + + listItems.push( + + + + + + + ); + listItems.push(); + + listItems.push( + + IP + + + ); + listItems.push(); + + listItems.push( + + + + + + + ); + listItems.push(); + + listItems.push( + + + + + + + ); + listItems.push(); + + return ( +
+ + {listItems} + + +
+ ); + } + + render() { + const { status, fetched, errorMessage } = this.state; + const { classes, fullDetails } = this.props; + + return ( + + this.snackbarNotification = snackbarNotification} /> + { + !fetched ? +
+ + + Loading... + +
+ : + status ? this.renderAPStatus(status, fullDetails, classes) + : +
+ + {errorMessage} + + +
+ } +
+ ) + } +} + +export default withStyles(styles)(APStatus); diff --git a/interface/src/containers/NTPConfiguration.js b/interface/src/containers/NTPConfiguration.js new file mode 100644 index 0000000..eaf3be1 --- /dev/null +++ b/interface/src/containers/NTPConfiguration.js @@ -0,0 +1,37 @@ +import React, { Component } from 'react'; +import MenuAppBar from '../components/MenuAppBar'; +import NTPSettings from './NTPSettings'; +import NTPStatus from './NTPStatus'; + +import Tabs, { Tab } from 'material-ui/Tabs'; + +class NTPConfiguration extends Component { + + constructor(props) { + super(props); + this.state = { + selectedTab: "ntpStatus" + }; + } + + + handleTabChange = (event, selectedTab) => { + this.setState({ selectedTab }); + }; + + render() { + const { selectedTab } = this.state; + return ( + + + + + + {selectedTab === "ntpStatus" && } + {selectedTab === "ntpSettings" && } + + ) + } +} + +export default NTPConfiguration diff --git a/interface/src/containers/NTPSettings.js b/interface/src/containers/NTPSettings.js new file mode 100644 index 0000000..08643ac --- /dev/null +++ b/interface/src/containers/NTPSettings.js @@ -0,0 +1,70 @@ +import React, { Component } from 'react'; + +import { NTP_SETTINGS_ENDPOINT } from '../constants/Endpoints'; +import SectionContent from '../components/SectionContent'; +import SnackbarNotification from '../components/SnackbarNotification'; +import NTPSettingsForm from '../forms/NTPSettingsForm'; +import { simpleGet } from '../helpers/SimpleGet'; +import { simplePost } from '../helpers/SimplePost'; + +class NTPSettings extends Component { + + constructor(props) { + super(props); + + this.state = { + ntpSettings:{}, + ntpSettingsFetched: false, + errorMessage:null + }; + + this.setState = this.setState.bind(this); + this.loadNTPSettings = this.loadNTPSettings.bind(this); + this.saveNTPSettings = this.saveNTPSettings.bind(this); + } + + componentDidMount() { + this.loadNTPSettings(); + } + + loadNTPSettings() { + simpleGet( + NTP_SETTINGS_ENDPOINT, + this.setState, + this.raiseNotification, + "ntpSettings", + "ntpSettingsFetched" + ); + } + + saveNTPSettings(e) { + simplePost( + NTP_SETTINGS_ENDPOINT, + this.state, + this.setState, + this.raiseNotification, + "ntpSettings", + "ntpSettingsFetched" + ); + } + + ntpSettingValueChange = name => event => { + const { ntpSettings } = this.state; + ntpSettings[name] = event.target.value; + this.setState({ntpSettings}); + }; + + render() { + const { ntpSettingsFetched, ntpSettings, errorMessage } = this.state; + return ( + + this.raiseNotification = raiseNotification} /> + + + ) + } + +} + +export default NTPSettings; diff --git a/interface/src/containers/NTPStatus.js b/interface/src/containers/NTPStatus.js new file mode 100644 index 0000000..a759506 --- /dev/null +++ b/interface/src/containers/NTPStatus.js @@ -0,0 +1,189 @@ +import React, { Component } from 'react'; + +import { withStyles } from 'material-ui/styles'; +import Button from 'material-ui/Button'; +import { LinearProgress } from 'material-ui/Progress'; +import Typography from 'material-ui/Typography'; +import List, { ListItem, ListItemText } from 'material-ui/List'; +import Avatar from 'material-ui/Avatar'; +import Divider from 'material-ui/Divider'; +import SwapVerticalCircleIcon from 'material-ui-icons/SwapVerticalCircle'; +import AccessTimeIcon from 'material-ui-icons/AccessTime'; +import DNSIcon from 'material-ui-icons/Dns'; +import TimerIcon from 'material-ui-icons/Timer'; +import UpdateIcon from 'material-ui-icons/Update'; +import AvTimerIcon from 'material-ui-icons/AvTimer'; + +import { isSynchronized, ntpStatusHighlight, ntpStatus } from '../constants/NTPStatus'; +import * as Highlight from '../constants/Highlight'; +import { unixTimeToTimeAndDate } from '../constants/TimeFormat'; +import { NTP_STATUS_ENDPOINT } from '../constants/Endpoints'; + +import SnackbarNotification from '../components/SnackbarNotification'; +import SectionContent from '../components/SectionContent'; + +import { simpleGet } from '../helpers/SimpleGet'; + +import moment from 'moment'; + +const styles = theme => ({ + ["ntpStatus_" + Highlight.SUCCESS]: { + backgroundColor: theme.palette.highlight_success + }, + ["ntpStatus_" + Highlight.ERROR]: { + backgroundColor: theme.palette.highlight_error + }, + ["ntpStatus_" + Highlight.WARN]: { + backgroundColor: theme.palette.highlight_warn + }, + fetching: { + margin: theme.spacing.unit * 4, + textAlign: "center" + }, + button: { + marginRight: theme.spacing.unit * 2, + marginTop: theme.spacing.unit * 2, + } +}); + +class NTPStatus extends Component { + + constructor(props) { + super(props); + + this.state = { + status:null, + fetched: false, + errorMessage:null + }; + + this.setState = this.setState.bind(this); + this.loadNTPStatus = this.loadNTPStatus.bind(this); + this.raiseNotification=this.raiseNotification.bind(this); + } + + componentDidMount() { + this.loadNTPStatus(); + } + + loadNTPStatus() { + simpleGet( + NTP_STATUS_ENDPOINT, + this.setState, + this.raiseNotification + ); + } + + raiseNotification(errorMessage) { + this.snackbarNotification(errorMessage); + } + + renderNTPStatus(status, fullDetails, classes){ + const listItems = []; + + listItems.push( + + + + + + + ); + listItems.push(); + + if (isSynchronized(status)) { + listItems.push( + + + + + + + ); + listItems.push(); + } + + listItems.push( + + + + + 0 ? unixTimeToTimeAndDate(status.last_sync) : "never" } /> + + ); + listItems.push(); + + listItems.push( + + + + + + + ); + listItems.push(); + + listItems.push( + + + + + + + ); + listItems.push(); + + listItems.push( + + + + + + + ); + + return ( +
+ + {listItems} + + +
+ ); + } + + render() { + const { status, fetched, errorMessage } = this.state; + const { classes, fullDetails } = this.props; + + return ( + + this.snackbarNotification = snackbarNotification} /> + { + !fetched ? +
+ + + Loading... + +
+ : + status ? this.renderNTPStatus(status, fullDetails, classes) + : +
+ + {errorMessage} + + +
+ } +
+ ) + } +} + +export default withStyles(styles)(NTPStatus); diff --git a/interface/src/containers/OTAConfiguration.js b/interface/src/containers/OTAConfiguration.js new file mode 100644 index 0000000..66dbf3f --- /dev/null +++ b/interface/src/containers/OTAConfiguration.js @@ -0,0 +1,15 @@ +import React, { Component } from 'react'; +import MenuAppBar from '../components/MenuAppBar'; +import OTASettings from './OTASettings'; + +class OTAConfiguration extends Component { + render() { + return ( + + + + ) + } +} + +export default OTAConfiguration diff --git a/interface/src/containers/OTASettings.js b/interface/src/containers/OTASettings.js new file mode 100644 index 0000000..5132425 --- /dev/null +++ b/interface/src/containers/OTASettings.js @@ -0,0 +1,77 @@ +import React, { Component } from 'react'; + +import { OTA_SETTINGS_ENDPOINT } from '../constants/Endpoints'; +import SectionContent from '../components/SectionContent'; +import SnackbarNotification from '../components/SnackbarNotification'; +import OTASettingsForm from '../forms/OTASettingsForm'; +import { simpleGet } from '../helpers/SimpleGet'; +import { simplePost } from '../helpers/SimplePost'; + +class OTASettings extends Component { + + constructor(props) { + super(props); + + this.state = { + otaSettings:null, + otaSettingsFetched: false, + errorMessage:null + }; + + this.setState = this.setState.bind(this); + this.loadOTASettings = this.loadOTASettings.bind(this); + this.saveOTASettings = this.saveOTASettings.bind(this); + } + + componentDidMount() { + this.loadOTASettings(); + } + + loadOTASettings() { + simpleGet( + OTA_SETTINGS_ENDPOINT, + this.setState, + this.raiseNotification, + "otaSettings", + "otaSettingsFetched" + ); + } + + saveOTASettings(e) { + simplePost( + OTA_SETTINGS_ENDPOINT, + this.state, + this.setState, + this.raiseNotification, + "otaSettings", + "otaSettingsFetched" + ); + } + + otaSettingValueChange = name => event => { + const { otaSettings } = this.state; + otaSettings[name] = event.target.value; + this.setState({otaSettings}); + }; + + otaSettingCheckboxChange = name => event => { + const { otaSettings } = this.state; + otaSettings[name] = event.target.checked; + this.setState({otaSettings}); + } + + render() { + const { otaSettingsFetched, otaSettings, errorMessage } = this.state; + return ( + + this.raiseNotification = raiseNotification} /> + + + ) + } + +} + +export default OTASettings; diff --git a/interface/src/containers/WiFiConfiguration.js b/interface/src/containers/WiFiConfiguration.js new file mode 100644 index 0000000..14494e6 --- /dev/null +++ b/interface/src/containers/WiFiConfiguration.js @@ -0,0 +1,53 @@ +import React, { Component } from 'react'; + +import Tabs, { Tab } from 'material-ui/Tabs'; + +import MenuAppBar from '../components/MenuAppBar'; +import WiFiNetworkScanner from './WiFiNetworkScanner'; +import WiFiSettings from './WiFiSettings'; +import WiFiStatus from './WiFiStatus'; + +class WiFiConfiguration extends Component { + + constructor(props) { + super(props); + this.state = { + selectedTab: "wifiStatus", + selectedNetwork: null + }; + this.selectNetwork = this.selectNetwork.bind(this); + this.deselectNetwork = this.deselectNetwork.bind(this); + } + + // TODO - slightly inapproperate use of callback ref possibly. + selectNetwork(network) { + this.setState({ selectedTab: "wifiSettings", selectedNetwork:network }); + } + + // deselects the network after the settings component mounts. + deselectNetwork(network) { + this.setState({ selectedNetwork:null }); + } + + handleTabChange = (event, selectedTab) => { + this.setState({ selectedTab }); + }; + + render() { + const { selectedTab } = this.state; + return ( + + + + + + + {selectedTab === "wifiStatus" && } + {selectedTab === "networkScanner" && } + {selectedTab === "wifiSettings" && } + + ) + } +} + +export default WiFiConfiguration; diff --git a/interface/src/containers/WiFiNetworkScanner.js b/interface/src/containers/WiFiNetworkScanner.js new file mode 100644 index 0000000..eb621d6 --- /dev/null +++ b/interface/src/containers/WiFiNetworkScanner.js @@ -0,0 +1,118 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import { SCAN_NETWORKS_ENDPOINT, LIST_NETWORKS_ENDPOINT } from '../constants/Endpoints'; +import SectionContent from '../components/SectionContent'; +import WiFiNetworkSelector from '../forms/WiFiNetworkSelector'; + +const NUM_POLLS = 10 +const POLLING_FREQUENCY = 500 +const RETRY_EXCEPTION_TYPE = "retry" + +class WiFiNetworkScanner extends Component { + + constructor(props) { + super(props); + this.pollCount = 0; + this.state = { + scanningForNetworks: true, + errorMessage:null, + networkList: null + }; + this.pollNetworkList = this.pollNetworkList.bind(this); + this.requestNetworkScan = this.requestNetworkScan.bind(this); + } + + componentDidMount() { + this.scanNetworks(); + } + + requestNetworkScan() { + const { scanningForNetworks } = this.state; + if (!scanningForNetworks) { + this.scanNetworks(); + } + } + + scanNetworks() { + this.pollCount = 0; + this.setState({scanningForNetworks:true, networkList: null, errorMessage:null}); + fetch(SCAN_NETWORKS_ENDPOINT).then(response => { + if (response.status === 202) { + this.schedulePollTimeout(); + return; + } + throw Error("Scanning for networks returned unexpected response code: " + response.status); + }).catch(error => { + this.setState({scanningForNetworks:false, networkList: null, errorMessage:error.message}); + }); + } + + schedulePollTimeout() { + setTimeout(this.pollNetworkList, POLLING_FREQUENCY); + } + + retryError() { + return { + name:RETRY_EXCEPTION_TYPE, + message:"Network list not ready, will retry in " + POLLING_FREQUENCY + "ms." + }; + } + + compareNetworks(network1,network2) { + if (network1.rssi < network2.rssi) + return 1; + if (network1.rssi > network2.rssi) + return -1; + return 0; + } + + pollNetworkList() { + fetch(LIST_NETWORKS_ENDPOINT) + .then(response => { + if (response.status === 200) { + return response.json(); + } + if (response.status === 202) { + if (++this.pollCount < NUM_POLLS){ + this.schedulePollTimeout(); + throw this.retryError(); + }else{ + throw Error("Device did not return network list in timley manner."); + } + } + throw Error("Device returned unexpected response code: " + response.status); + }) + .then(json => { + json.networks.sort(this.compareNetworks) + this.setState({scanningForNetworks:false, networkList: json, errorMessage:null}) + }) + .catch(error => { + console.log(error.message); + if (error.name !== RETRY_EXCEPTION_TYPE) { + this.setState({scanningForNetworks:false, networkList: null, errorMessage:error.message}); + } + }); + } + + render() { + const { scanningForNetworks, networkList, errorMessage } = this.state; + return ( + + + + ) + } + +} + +WiFiNetworkScanner.propTypes = { + selectNetwork: PropTypes.func.isRequired +}; + +export default (WiFiNetworkScanner); diff --git a/interface/src/containers/WiFiSettings.js b/interface/src/containers/WiFiSettings.js new file mode 100644 index 0000000..201c226 --- /dev/null +++ b/interface/src/containers/WiFiSettings.js @@ -0,0 +1,102 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import { WIFI_SETTINGS_ENDPOINT } from '../constants/Endpoints'; +import SectionContent from '../components/SectionContent'; +import SnackbarNotification from '../components/SnackbarNotification'; +import WiFiSettingsForm from '../forms/WiFiSettingsForm'; +import { simpleGet } from '../helpers/SimpleGet'; +import { simplePost } from '../helpers/SimplePost'; + +class WiFiSettings extends Component { + + constructor(props) { + super(props); + + this.state = { + wifiSettingsFetched: false, + wifiSettings:{}, + selectedNetwork: null, + errorMessage:null + }; + + this.setState = this.setState.bind(this); + this.loadWiFiSettings = this.loadWiFiSettings.bind(this); + this.saveWiFiSettings = this.saveWiFiSettings.bind(this); + this.deselectNetwork = this.deselectNetwork.bind(this); + } + + componentDidMount() { + const { selectedNetwork, deselectNetwork } = this.props; + if (selectedNetwork){ + var wifiSettings = { + ssid:selectedNetwork.ssid, + password:"", + hostname:"esp8266-react", + static_ip_config:false, + } + this.setState({wifiSettingsFetched:true, wifiSettings, selectedNetwork, errorMessage:null}); + deselectNetwork(); + }else { + this.loadWiFiSettings(); + } + } + + loadWiFiSettings() { + this.deselectNetwork(); + + simpleGet( + WIFI_SETTINGS_ENDPOINT, + this.setState, + this.raiseNotification, + "wifiSettings", + "wifiSettingsFetched" + ); + } + + saveWiFiSettings(e) { + simplePost( + WIFI_SETTINGS_ENDPOINT, + this.state, + this.setState, + this.raiseNotification, + "wifiSettings", + "wifiSettingsFetched" + ); + } + + deselectNetwork(nextNetwork) { + this.setState({selectedNetwork:null}); + } + + wifiSettingValueChange = name => event => { + const { wifiSettings } = this.state; + wifiSettings[name] = event.target.value; + this.setState({wifiSettings}); + }; + + wifiSettingCheckboxChange = name => event => { + const { wifiSettings } = this.state; + wifiSettings[name] = event.target.checked; + this.setState({wifiSettings}); + } + + render() { + const { wifiSettingsFetched, wifiSettings, errorMessage, selectedNetwork } = this.state; + return ( + + this.raiseNotification = raiseNotification} /> + + + ) + } + +} + +WiFiSettings.propTypes = { + deselectNetwork: PropTypes.func, + selectedNetwork: PropTypes.object +}; + +export default WiFiSettings; diff --git a/interface/src/containers/WiFiStatus.js b/interface/src/containers/WiFiStatus.js new file mode 100644 index 0000000..2bf2068 --- /dev/null +++ b/interface/src/containers/WiFiStatus.js @@ -0,0 +1,188 @@ +import React, { Component } from 'react'; + +import { withStyles } from 'material-ui/styles'; +import Button from 'material-ui/Button'; +import { LinearProgress } from 'material-ui/Progress'; +import Typography from 'material-ui/Typography'; + +import SnackbarNotification from '../components/SnackbarNotification'; +import SectionContent from '../components/SectionContent'; + +import { WIFI_STATUS_ENDPOINT } from '../constants/Endpoints'; +import { isConnected, connectionStatus, connectionStatusHighlight } from '../constants/WiFiConnectionStatus'; +import * as Highlight from '../constants/Highlight'; + +import { simpleGet } from '../helpers/SimpleGet'; + +import List, { ListItem, ListItemText } from 'material-ui/List'; +import Avatar from 'material-ui/Avatar'; +import Divider from 'material-ui/Divider'; +import WifiIcon from 'material-ui-icons/Wifi'; +import DNSIcon from 'material-ui-icons/Dns'; +import SettingsInputComponentIcon from 'material-ui-icons/SettingsInputComponent'; +import SettingsInputAntennaIcon from 'material-ui-icons/SettingsInputAntenna'; + +const styles = theme => ({ + ["wifiStatus_" + Highlight.IDLE]: { + backgroundColor: theme.palette.highlight_idle + }, + ["wifiStatus_" + Highlight.SUCCESS]: { + backgroundColor: theme.palette.highlight_success + }, + ["wifiStatus_" + Highlight.ERROR]: { + backgroundColor: theme.palette.highlight_error + }, + ["wifiStatus_" + Highlight.WARN]: { + backgroundColor: theme.palette.highlight_warn + }, + fetching: { + margin: theme.spacing.unit * 4, + textAlign: "center" + }, + button: { + marginRight: theme.spacing.unit * 2, + marginTop: theme.spacing.unit * 2, + } +}); + +class WiFiStatus extends Component { + + constructor(props) { + super(props); + + this.state = { + status:null, + fetched: false, + errorMessage:null + }; + + this.setState = this.setState.bind(this); + this.loadWiFiStatus = this.loadWiFiStatus.bind(this); + } + + componentDidMount() { + this.loadWiFiStatus(); + } + + dnsServers(status) { + if (!status.dns_ip_1){ + return "none"; + } + return status.dns_ip_1 + (status.dns_ip_2 ? ','+status.dns_ip_2 : ''); + } + + loadWiFiStatus() { + simpleGet( + WIFI_STATUS_ENDPOINT, + this.setState, + this.raiseNotification + ); + } + + renderWiFiStatus(status, fullDetails, classes) { + const listItems = []; + + listItems.push( + + + + + + + ); + + if (fullDetails && isConnected(status)) { + listItems.push(); + + listItems.push( + + + + + + + ); + listItems.push(); + + listItems.push( + + IP + + + ); + listItems.push(); + + listItems.push( + + # + + + ); + listItems.push(); + + listItems.push( + + + + + + + ); + listItems.push(); + + listItems.push( + + + + + + + ); + } + + return ( +
+ + {listItems} + + +
+ ); + + } + + render() { + const { status, fetched, errorMessage } = this.state; + const { classes, fullDetails } = this.props; + + return ( + + this.raiseNotification = raiseNotification} /> + { + !fetched ? +
+ + + Loading... + +
+ : + status ? this.renderWiFiStatus(status, fullDetails, classes) + : +
+ + {errorMessage} + + +
+ } +
+ ) + } +} + +export default withStyles(styles)(WiFiStatus); diff --git a/interface/src/forms/APSettingsForm.js b/interface/src/forms/APSettingsForm.js new file mode 100644 index 0000000..1ceebb5 --- /dev/null +++ b/interface/src/forms/APSettingsForm.js @@ -0,0 +1,124 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { withStyles } from 'material-ui/styles'; +import Button from 'material-ui/Button'; +import { LinearProgress } from 'material-ui/Progress'; +import Typography from 'material-ui/Typography'; +import { MenuItem } from 'material-ui/Menu'; + +import { TextValidator, ValidatorForm, SelectValidator } from 'react-material-ui-form-validator'; + +import {isAPEnabled} from '../constants/WiFiAPModes'; + +const styles = theme => ({ + loadingSettings: { + margin: theme.spacing.unit, + }, + loadingSettingsDetails: { + margin: theme.spacing.unit * 4, + textAlign: "center" + }, + textField: { + width: "100%" + }, + selectField:{ + width: "100%", + marginTop: theme.spacing.unit * 2, + marginBottom: theme.spacing.unit + }, + button: { + marginRight: theme.spacing.unit * 2, + marginTop: theme.spacing.unit * 2, + } +}); + +class APSettingsForm extends React.Component { + + render() { + const { classes, apSettingsFetched, apSettings, errorMessage, handleValueChange, onSubmit, onReset } = this.props; + return ( +
+ { + !apSettingsFetched ? + +
+ + + Loading... + +
+ + : apSettings ? + + + + + Always + When WiFi Disconnected + Never + + + { + isAPEnabled(apSettings.provision_mode) && + [ + , + + ] + } + + + + + + + : + +
+ + {errorMessage} + + +
+ } +
+ ); + } +} + +APSettingsForm.propTypes = { + classes: PropTypes.object.isRequired, + apSettingsFetched: PropTypes.bool.isRequired, + apSettings: PropTypes.object, + errorMessage: PropTypes.string, + onSubmit: PropTypes.func.isRequired, + onReset: PropTypes.func.isRequired, + handleValueChange: PropTypes.func.isRequired +}; + +export default withStyles(styles)(APSettingsForm); diff --git a/interface/src/forms/NTPSettingsForm.js b/interface/src/forms/NTPSettingsForm.js new file mode 100644 index 0000000..d543403 --- /dev/null +++ b/interface/src/forms/NTPSettingsForm.js @@ -0,0 +1,113 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { withStyles } from 'material-ui/styles'; +import Button from 'material-ui/Button'; +import { LinearProgress } from 'material-ui/Progress'; +import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; +import Typography from 'material-ui/Typography'; + +import isIP from '../validators/isIP'; +import isHostname from '../validators/isHostname'; +import or from '../validators/or'; + +const styles = theme => ({ + loadingSettings: { + margin: theme.spacing.unit, + }, + loadingSettingsDetails: { + margin: theme.spacing.unit * 4, + textAlign: "center" + }, + textField: { + width: "100%" + }, + button: { + marginRight: theme.spacing.unit * 2, + marginTop: theme.spacing.unit * 2, + } +}); + +class NTPSettingsForm extends React.Component { + + componentWillMount() { + ValidatorForm.addValidationRule('isIPOrHostname', or(isIP, isHostname)); + } + + render() { + const { classes, ntpSettingsFetched, ntpSettings, errorMessage, handleValueChange, onSubmit, onReset } = this.props; + return ( +
+ { + !ntpSettingsFetched ? + +
+ + + Loading... + +
+ + : ntpSettings ? + + + + + + + + + + + + + : + +
+ + {errorMessage} + + +
+ } +
+ ); + } +} + +NTPSettingsForm.propTypes = { + classes: PropTypes.object.isRequired, + ntpSettingsFetched: PropTypes.bool.isRequired, + ntpSettings: PropTypes.object, + errorMessage: PropTypes.string, + onSubmit: PropTypes.func.isRequired, + onReset: PropTypes.func.isRequired, + handleValueChange: PropTypes.func.isRequired, +}; + +export default withStyles(styles)(NTPSettingsForm); diff --git a/interface/src/forms/OTASettingsForm.js b/interface/src/forms/OTASettingsForm.js new file mode 100644 index 0000000..c9d487f --- /dev/null +++ b/interface/src/forms/OTASettingsForm.js @@ -0,0 +1,132 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { withStyles } from 'material-ui/styles'; +import Button from 'material-ui/Button'; +import Switch from 'material-ui/Switch'; +import { LinearProgress } from 'material-ui/Progress'; +import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; +import Typography from 'material-ui/Typography'; +import { FormControlLabel } from 'material-ui/Form'; + +import isIP from '../validators/isIP'; +import isHostname from '../validators/isHostname'; +import or from '../validators/or'; + +const styles = theme => ({ + loadingSettings: { + margin: theme.spacing.unit, + }, + loadingSettingsDetails: { + margin: theme.spacing.unit * 4, + textAlign: "center" + }, + switchControl: { + width: "100%", + marginTop: theme.spacing.unit * 2, + marginBottom: theme.spacing.unit + }, + textField: { + width: "100%" + }, + button: { + marginRight: theme.spacing.unit * 2, + marginTop: theme.spacing.unit * 2, + } +}); + +class OTASettingsForm extends React.Component { + + componentWillMount() { + ValidatorForm.addValidationRule('isIPOrHostname', or(isIP, isHostname)); + } + + render() { + const { classes, otaSettingsFetched, otaSettings, errorMessage, handleValueChange, handleCheckboxChange, onSubmit, onReset } = this.props; + return ( +
+ { + !otaSettingsFetched ? + +
+ + + Loading... + +
+ + : otaSettings ? + + + + + } + label="Enable OTA Updates?" + /> + + + + + + + + + + + : + +
+ + {errorMessage} + + +
+ } +
+ ); + } +} + +OTASettingsForm.propTypes = { + classes: PropTypes.object.isRequired, + otaSettingsFetched: PropTypes.bool.isRequired, + otaSettings: PropTypes.object, + errorMessage: PropTypes.string, + onSubmit: PropTypes.func.isRequired, + onReset: PropTypes.func.isRequired, + handleValueChange: PropTypes.func.isRequired, + handleCheckboxChange: PropTypes.func.isRequired, +}; + +export default withStyles(styles)(OTASettingsForm); diff --git a/interface/src/forms/WiFiNetworkSelector.js b/interface/src/forms/WiFiNetworkSelector.js new file mode 100644 index 0000000..102c73e --- /dev/null +++ b/interface/src/forms/WiFiNetworkSelector.js @@ -0,0 +1,102 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import { withStyles } from 'material-ui/styles'; +import Button from 'material-ui/Button'; +import { LinearProgress } from 'material-ui/Progress'; +import Typography from 'material-ui/Typography'; + +import { isNetworkOpen, networkSecurityMode } from '../constants/WiFiSecurityModes'; + +import List, { ListItem, ListItemText, ListItemIcon, ListItemAvatar } from 'material-ui/List'; +import Avatar from 'material-ui/Avatar'; +import Badge from 'material-ui/Badge'; + +import WifiIcon from 'material-ui-icons/Wifi'; +import LockIcon from 'material-ui-icons/Lock'; +import LockOpenIcon from 'material-ui-icons/LockOpen'; + +const styles = theme => ({ + scanningProgress: { + margin: theme.spacing.unit * 4, + textAlign: "center" + }, + button: { + marginRight: theme.spacing.unit * 2, + marginTop: theme.spacing.unit * 2, + } +}); + +class WiFiNetworkSelector extends Component { + + constructor(props) { + super(props); + + this.renderNetwork = this.renderNetwork.bind(this); + } + + renderNetwork(network) { + return ([ + this.props.selectNetwork(network)}> + + + {isNetworkOpen(network) ? : } + + + + + + + + + + ] + ); + } + + render() { + const { classes, scanningForNetworks, networkList, errorMessage, requestNetworkScan } = this.props; + return ( +
+ { + scanningForNetworks ? +
+ + + Scanning... + +
+ : + networkList ? + + {networkList.networks.map(this.renderNetwork)} + + : +
+ + {errorMessage} + +
+ } + + +
+ ); + } +} + +WiFiNetworkSelector.propTypes = { + classes: PropTypes.object.isRequired, + selectNetwork: PropTypes.func.isRequired, + scanningForNetworks: PropTypes.bool.isRequired, + errorMessage: PropTypes.string, + networkList: PropTypes.object, + requestNetworkScan: PropTypes.func.isRequired +}; + +export default withStyles(styles)(WiFiNetworkSelector); diff --git a/interface/src/forms/WiFiSettingsForm.js b/interface/src/forms/WiFiSettingsForm.js new file mode 100644 index 0000000..e3b9e06 --- /dev/null +++ b/interface/src/forms/WiFiSettingsForm.js @@ -0,0 +1,237 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import { withStyles } from 'material-ui/styles'; +import Button from 'material-ui/Button'; +import { LinearProgress } from 'material-ui/Progress'; +import Checkbox from 'material-ui/Checkbox'; +import { FormControlLabel } from 'material-ui/Form'; +import { TextValidator, ValidatorForm } from 'react-material-ui-form-validator'; +import Typography from 'material-ui/Typography'; +import List, { ListItem, ListItemText, ListItemSecondaryAction, ListItemAvatar } from 'material-ui/List'; + +import { isNetworkOpen, networkSecurityMode } from '../constants/WiFiSecurityModes'; + +import Avatar from 'material-ui/Avatar'; +import IconButton from 'material-ui/IconButton'; +import LockIcon from 'material-ui-icons/Lock'; +import LockOpenIcon from 'material-ui-icons/LockOpen'; +import DeleteIcon from 'material-ui-icons/Delete'; + +import isIP from '../validators/isIP'; +import isHostname from '../validators/isHostname'; +import optional from '../validators/optional'; + +const styles = theme => ({ + loadingSettings: { + margin: theme.spacing.unit, + }, + loadingSettingsDetails: { + margin: theme.spacing.unit * 4, + textAlign: "center" + }, + textField: { + width: "100%" + }, + checkboxControl: { + width: "100%" + }, + button: { + marginRight: theme.spacing.unit * 2, + marginTop: theme.spacing.unit * 2, + } +}); + +class WiFiSettingsForm extends React.Component { + + componentWillMount() { + ValidatorForm.addValidationRule('isIP', isIP); + ValidatorForm.addValidationRule('isHostname', isHostname); + ValidatorForm.addValidationRule('isOptionalIP', optional(isIP)); + } + + renderSelectedNetwork() { + const { selectedNetwork, deselectNetwork } = this.props; + return ( + + + + + {isNetworkOpen(selectedNetwork) ? : } + + + + + + + + + + + ); + } + + render() { + const { classes, formRef, wifiSettingsFetched, wifiSettings, errorMessage, selectedNetwork, handleValueChange, handleCheckboxChange, onSubmit, onReset } = this.props; + return ( +
+ { + !wifiSettingsFetched ? + +
+ + + Loading... + +
+ + : wifiSettings ? + + + { + selectedNetwork ? this.renderSelectedNetwork() : + + } + { + !isNetworkOpen(selectedNetwork) && + + } + + + + + } + label="Static IP Config?" + /> + + { + wifiSettings.static_ip_config && + [ + , + , + , + , + + ] + } + + + + + + + : + +
+ + {errorMessage} + + +
+ } +
+ ); + } +} + +WiFiSettingsForm.propTypes = { + classes: PropTypes.object.isRequired, + wifiSettingsFetched: PropTypes.bool.isRequired, + wifiSettings: PropTypes.object, + errorMessage: PropTypes.string, + deselectNetwork: PropTypes.func, + selectedNetwork: PropTypes.object, + onSubmit: PropTypes.func.isRequired, + onReset: PropTypes.func.isRequired, + handleValueChange: PropTypes.func.isRequired, + handleCheckboxChange: PropTypes.func.isRequired +}; + +export default withStyles(styles)(WiFiSettingsForm); diff --git a/interface/src/helpers/SimpleGet.js b/interface/src/helpers/SimpleGet.js new file mode 100644 index 0000000..fe262f6 --- /dev/null +++ b/interface/src/helpers/SimpleGet.js @@ -0,0 +1,35 @@ +/** +* Executes a get request for an endpoint, updating the local state of the calling +* component. The calling component must bind setState before using this +* function. +* +* This is designed for re-use in simple situations, we arn't using redux here! +*/ +export const simpleGet = ( + endpointUrl, + setState, + raiseNotification = null, + dataKey="status", + fetchedKey="fetched", + errorMessageKey = "errorMessage" +) => { + setState({ + [dataKey]:null, + [fetchedKey]: false, + [errorMessageKey]:null + }); + fetch(endpointUrl) + .then(response => { + if (response.status === 200) { + return response.json(); + } + throw Error("Invalid status code: " + response.status); + }) + .then(json => {setState({[dataKey]: json, [fetchedKey]:true})}) + .catch(error =>{ + if (raiseNotification) { + raiseNotification("Problem fetching. " + error.message); + } + setState({[dataKey]: null, [fetchedKey]:true, [errorMessageKey]:error.message}); + }); +} diff --git a/interface/src/helpers/SimplePost.js b/interface/src/helpers/SimplePost.js new file mode 100644 index 0000000..7991570 --- /dev/null +++ b/interface/src/helpers/SimplePost.js @@ -0,0 +1,38 @@ +/** +* Executes a post request for saving data to an endpoint, updating the local +* state with the response. The calling component must bind setState before +* using this function. +* +* This is designed for re-use in simple situations, we arn't using redux here! +*/ +export const simplePost = ( + endpointUrl, + state, + setState, + raiseNotification = null, + dataKey="settings", + fetchedKey="fetched", + errorMessageKey = "errorMessage" +) => { + setState({[fetchedKey]: false}); + fetch(endpointUrl, { + method: 'POST', + body: JSON.stringify(state[dataKey]), + headers: new Headers({ + 'Content-Type': 'application/json' + }) + }) + .then(response => { + if (response.status === 200) { + return response.json(); + } + throw Error("Invalid status code: " + response.status); + }) + .then(json => { + raiseNotification("Changes successfully applied."); + setState({[dataKey]: json, [fetchedKey]:true}); + }).catch(error => { + raiseNotification("Problem saving. " + error.message); + setState({[dataKey]: null, [fetchedKey]:true, [errorMessageKey]:error.message}); + }); +} diff --git a/interface/src/history.js b/interface/src/history.js new file mode 100644 index 0000000..eb70d7b --- /dev/null +++ b/interface/src/history.js @@ -0,0 +1,5 @@ +import { createBrowserHistory } from 'history'; + +export default createBrowserHistory({ + /* pass a configuration object here if needed */ +}) diff --git a/interface/src/index.js b/interface/src/index.js new file mode 100644 index 0000000..5e3b43f --- /dev/null +++ b/interface/src/index.js @@ -0,0 +1,16 @@ +import React from 'react'; +import { render } from 'react-dom'; + +import history from './history'; +import { Router, Route, Redirect, Switch } from 'react-router'; + +import App from './App'; + +render(( + + + + + + +), document.getElementById("root")) diff --git a/interface/src/validators/isHostname.js b/interface/src/validators/isHostname.js new file mode 100644 index 0000000..557903e --- /dev/null +++ b/interface/src/validators/isHostname.js @@ -0,0 +1,6 @@ +const hostnameLengthRegex = /^.{0,32}$/ +const hostnamePatternRegex = /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/ + +export default function isHostname(hostname) { + return hostnameLengthRegex.test(hostname) && hostnamePatternRegex.test(hostname); +} diff --git a/interface/src/validators/isIP.js b/interface/src/validators/isIP.js new file mode 100644 index 0000000..1225154 --- /dev/null +++ b/interface/src/validators/isIP.js @@ -0,0 +1,5 @@ +const ipAddressRegexp = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ + +export default function isIp(ipAddress) { + return ipAddressRegexp.test(ipAddress); +} \ No newline at end of file diff --git a/interface/src/validators/optional.js b/interface/src/validators/optional.js new file mode 100644 index 0000000..58bfda5 --- /dev/null +++ b/interface/src/validators/optional.js @@ -0,0 +1 @@ +export default validator => value => !value || validator(value); \ No newline at end of file diff --git a/interface/src/validators/or.js b/interface/src/validators/or.js new file mode 100644 index 0000000..96543f7 --- /dev/null +++ b/interface/src/validators/or.js @@ -0,0 +1 @@ +export default (validator1, validator2) => value => validator1(value) || validator2(value); diff --git a/lib/readme.txt b/lib/readme.txt new file mode 100644 index 0000000..dbadc3d --- /dev/null +++ b/lib/readme.txt @@ -0,0 +1,36 @@ + +This directory is intended for the project specific (private) libraries. +PlatformIO will compile them to static libraries and link to executable file. + +The source code of each library should be placed in separate directory, like +"lib/private_lib/[here are source files]". + +For example, see how can be organized `Foo` and `Bar` libraries: + +|--lib +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| |--Foo +| | |- Foo.c +| | |- Foo.h +| |- readme.txt --> THIS FILE +|- platformio.ini +|--src + |- main.c + +Then in `src/main.c` you should use: + +#include +#include + +// rest H/C/CPP code + +PlatformIO will find your libraries automatically, configure preprocessor's +include paths and build them. + +More information about PlatformIO Library Dependency Finder +- http://docs.platformio.org/page/librarymanager/ldf.html diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..f0a8826 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,22 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; http://docs.platformio.org/page/projectconf.html +[env:esp12e] +platform = espressif8266 +board = esp12e +framework = arduino +;upload_flags = --port=8266 --auth=esp-react +;upload_port = 192.168.0.6 +board_f_cpu = 160000000L +build_flags= -D NO_GLOBAL_ARDUINOOTA +lib_deps = + https://github.com/PaulStoffregen/Time + https://github.com/gmag11/NtpClient + https://github.com/bblanchon/ArduinoJson + https://github.com/me-no-dev/ESPAsyncWebServer diff --git a/screenshots/screenshots.png b/screenshots/screenshots.png new file mode 100644 index 0000000000000000000000000000000000000000..705e4a81cc1a54bc8ddf5ac621ba0ca9de23f1bc GIT binary patch literal 41951 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 literal 0 HcmV?d00001 diff --git a/src/APSettingsService.cpp b/src/APSettingsService.cpp new file mode 100644 index 0000000..1387e98 --- /dev/null +++ b/src/APSettingsService.cpp @@ -0,0 +1,49 @@ +#include + +APSettingsService::APSettingsService(AsyncWebServer* server, FS* fs) : SettingsService(server, fs, AP_SETTINGS_SERVICE_PATH, AP_SETTINGS_FILE) { +} + +APSettingsService::~APSettingsService() {} + +void APSettingsService::loop() { + unsigned long now = millis(); + if (_manageAtMillis <= now){ + WiFiMode_t currentWiFiMode = WiFi.getMode(); + if (_provisionMode == AP_MODE_ALWAYS || (_provisionMode == AP_MODE_DISCONNECTED && WiFi.status() != WL_CONNECTED)) { + if (currentWiFiMode == WIFI_OFF || currentWiFiMode == WIFI_STA){ + Serial.println("Starting software access point"); + WiFi.softAP(_ssid.c_str(), _password.c_str()); + } + } else { + if (currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA){ + Serial.println("Stopping software access point"); + WiFi.softAPdisconnect(true); + } + } + _manageAtMillis = now + MANAGE_NETWORK_DELAY; + } +} + +void APSettingsService::readFromJsonObject(JsonObject& root) { + _provisionMode = root["provision_mode"] | AP_MODE_ALWAYS; + switch (_provisionMode) { + case AP_MODE_ALWAYS: + case AP_MODE_DISCONNECTED: + case AP_MODE_NEVER: + break; + default: + _provisionMode = AP_MODE_ALWAYS; + } + _ssid = root["ssid"] | AP_DEFAULT_SSID; + _password = root["password"] | AP_DEFAULT_PASSWORD; +} + +void APSettingsService::writeToJsonObject(JsonObject& root) { + root["provision_mode"] = _provisionMode; + root["ssid"] = _ssid; + root["password"] = _password; +} + +void APSettingsService::onConfigUpdated() { + _manageAtMillis = 0; +} diff --git a/src/APSettingsService.h b/src/APSettingsService.h new file mode 100644 index 0000000..f6a6576 --- /dev/null +++ b/src/APSettingsService.h @@ -0,0 +1,43 @@ +#ifndef APSettingsConfig_h +#define APSettingsConfig_h + +#include +#include + +#define MANAGE_NETWORK_DELAY 10000 + +#define AP_MODE_ALWAYS 0 +#define AP_MODE_DISCONNECTED 1 +#define AP_MODE_NEVER 2 + +#define AP_DEFAULT_SSID "ssid" +#define AP_DEFAULT_PASSWORD "password" + +#define AP_SETTINGS_FILE "/config/apSettings.json" +#define AP_SETTINGS_SERVICE_PATH "/apSettings" + +class APSettingsService : public SettingsService { + + public: + + APSettingsService(AsyncWebServer* server, FS* fs); + ~APSettingsService(); + + void loop(); + + protected: + + void readFromJsonObject(JsonObject& root); + void writeToJsonObject(JsonObject& root); + void onConfigUpdated(); + + private: + + int _provisionMode; + String _ssid; + String _password; + unsigned long _manageAtMillis; + +}; + +#endif // end APSettingsConfig_h diff --git a/src/APStatus.cpp b/src/APStatus.cpp new file mode 100644 index 0000000..b4ec693 --- /dev/null +++ b/src/APStatus.cpp @@ -0,0 +1,19 @@ +#include + +APStatus::APStatus(AsyncWebServer *server) : _server(server) { + _server->on("/apStatus", HTTP_GET, std::bind(&APStatus::apStatus, this, std::placeholders::_1)); +} + +void APStatus::apStatus(AsyncWebServerRequest *request) { + AsyncJsonResponse * response = new AsyncJsonResponse(); + JsonObject& root = response->getRoot(); + + WiFiMode_t currentWiFiMode = WiFi.getMode(); + root["active"] = (currentWiFiMode == WIFI_AP || currentWiFiMode == WIFI_AP_STA); + root["ip_address"] = WiFi.softAPIP().toString(); + root["mac_address"] = WiFi.softAPmacAddress(); + root["station_num"] = WiFi.softAPgetStationNum(); + + response->setLength(); + request->send(response); +} diff --git a/src/APStatus.h b/src/APStatus.h new file mode 100644 index 0000000..9a32391 --- /dev/null +++ b/src/APStatus.h @@ -0,0 +1,25 @@ +#ifndef APStatus_h +#define APStatus_h + +#include +#include +#include +#include +#include +#include + +class APStatus { + + public: + + APStatus(AsyncWebServer *server); + + private: + + AsyncWebServer* _server; + + void apStatus(AsyncWebServerRequest *request); + +}; + +#endif // end APStatus_h diff --git a/src/AsyncJsonCallbackResponse.h b/src/AsyncJsonCallbackResponse.h new file mode 100644 index 0000000..4b520ed --- /dev/null +++ b/src/AsyncJsonCallbackResponse.h @@ -0,0 +1,31 @@ +#ifndef _AsyncJsonCallbackResponse_H_ +#define _AsyncJsonCallbackResponse_H_ + +#include +#include + +/* +* Listens for a response being destroyed and calls a callback during said distruction. +* used so we can take action after the response has been rendered to the client. +* +* Avoids having to fork ESPAsyncWebServer with a callback feature, but not nice! +*/ + +typedef std::function AsyncJsonCallback; + +class AsyncJsonCallbackResponse: public AsyncJsonResponse { + + private: + + AsyncJsonCallback _callback; + + public: + + AsyncJsonCallbackResponse(AsyncJsonCallback callback, bool isArray=false) : _callback{callback}, AsyncJsonResponse(isArray) {} + ~AsyncJsonCallbackResponse() { + _callback(); + } + +}; + +#endif // end _AsyncJsonCallbackResponse_H_ diff --git a/src/AsyncJsonRequestWebHandler.h b/src/AsyncJsonRequestWebHandler.h new file mode 100644 index 0000000..5846d6e --- /dev/null +++ b/src/AsyncJsonRequestWebHandler.h @@ -0,0 +1,115 @@ +#ifndef Async_Json_Request_Web_Handler_H_ +#define Async_Json_Request_Web_Handler_H_ +#include + +#define ASYNC_JSON_REQUEST_DEFAULT_MAX_SIZE 1024 +#define ASYNC_JSON_REQUEST_MIMETYPE "application/json" + +/* +* Handy little utility for dealing with small JSON request body payloads. +* +* Need to be careful using this as we are somewhat limited by RAM. +* +* Really only of use where there is a determinate payload size. +*/ + +typedef std::function JsonRequestCallback; + +class AsyncJsonRequestWebHandler: public AsyncWebHandler { + + private: + + String _uri; + WebRequestMethodComposite _method; + JsonRequestCallback _onRequest; + int _maxContentLength; + + public: + + AsyncJsonRequestWebHandler() : + _uri(), + _method(HTTP_POST|HTTP_PUT|HTTP_PATCH), + _onRequest(NULL), + _maxContentLength(ASYNC_JSON_REQUEST_DEFAULT_MAX_SIZE) {} + + ~AsyncJsonRequestWebHandler() {} + + void setUri(const String& uri) { _uri = uri; } + void setMethod(WebRequestMethodComposite method) { _method = method; } + void setMaxContentLength(int maxContentLength) { _maxContentLength = maxContentLength; } + void onRequest(JsonRequestCallback fn) { _onRequest = fn; } + + virtual bool canHandle(AsyncWebServerRequest *request) override final { + if(!_onRequest) + return false; + + if(!(_method & request->method())) + return false; + + if(_uri.length() && (_uri != request->url() && !request->url().startsWith(_uri+"/"))) + return false; + + if (!request->contentType().equalsIgnoreCase(ASYNC_JSON_REQUEST_MIMETYPE)) + return false; + + request->addInterestingHeader("ANY"); + return true; + } + + virtual void handleRequest(AsyncWebServerRequest *request) override final { + // no request configured + if(!_onRequest) { + request->send(404); + return; + } + + // we have been handed too much data, return a 413 (payload too large) + if (request->contentLength() > _maxContentLength) { + request->send(413); + return; + } + + // parse JSON and if possible handle the request + if (request->_tempObject) { + DynamicJsonBuffer jsonBuffer; + JsonVariant json = jsonBuffer.parse((uint8_t *) request->_tempObject); + if (json.success()) { + _onRequest(request, json); + }else{ + request->send(400); + } + return; + } + + // fallthrough, we have a null pointer, return 500. + // this can be due to running out of memory or never recieving body data. + request->send(500); + } + + virtual void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) override final { + if (_onRequest) { + // don't allocate if data is too large + if (total > _maxContentLength){ + return; + } + + // try to allocate memory on first call + // NB: the memory allocated here is freed by ~AsyncWebServerRequest + if(index == 0 && !request->_tempObject){ + request->_tempObject = malloc(total); + } + + // copy the data into the buffer, if we have a buffer! + if (request->_tempObject) { + memcpy((uint8_t *) request->_tempObject+index, data, len); + } + } + } + + virtual bool isRequestHandlerTrivial() override final { + return _onRequest ? false : true; + } + +}; + +#endif // end Async_Json_Request_Web_Handler_H_ diff --git a/src/AuthSettingsService.cpp b/src/AuthSettingsService.cpp new file mode 100644 index 0000000..4180684 --- /dev/null +++ b/src/AuthSettingsService.cpp @@ -0,0 +1,47 @@ +#include + +AuthSettingsService::AuthSettingsService(AsyncWebServer* server, FS* fs) : SettingsService(server, fs, AUTH_SETTINGS_SERVICE_PATH, AUTH_SETTINGS_FILE) { + _server->on(AUTH_LOGOUT_PATH, HTTP_GET, std::bind(&AuthSettingsService::logout, this, std::placeholders::_1)); + + // configure authentication handler + _authenticationHandler.setUri(AUTH_AUTHENTICATE_PATH); + _authenticationHandler.setMethod(HTTP_POST); + _authenticationHandler.onRequest(std::bind(&AuthSettingsService::authenticate, this, std::placeholders::_1, std::placeholders::_2)); + _server->addHandler(&_authenticationHandler); +} + +AuthSettingsService::~AuthSettingsService() {} + +// checks the session is authenticated, refreshes the sessions timeout if so +bool AuthSettingsService::authenticated(AsyncWebServerRequest *request){ + request->send(400); + return false; +} + +void AuthSettingsService::readFromJsonObject(JsonObject& root){ + _username = root["username"] | AUTH_DEFAULT_USERNAME; + _password = root["password"] | AUTH_DEFAULT_PASSWORD; + _sessionTimeout= root["session_timeout"] | AUTH_DEFAULT_SESSION_TIMEOUT; +} + +void AuthSettingsService::writeToJsonObject(JsonObject& root){ + root["username"] = _username; + root["password"] = _password; + root["session_timeout"] = _sessionTimeout; +} + +void AuthSettingsService::logout(AsyncWebServerRequest *request){ + // revoke the current requests session +} + +void AuthSettingsService::authenticate(AsyncWebServerRequest *request, JsonVariant &json){ + if (json.is()){ + JsonObject& credentials = json.as(); + if (credentials["username"] == _username && credentials["password"] == _password){ + // store cookie and write to response + } + request->send(401); + } else{ + request->send(400); + } +} diff --git a/src/AuthSettingsService.h b/src/AuthSettingsService.h new file mode 100644 index 0000000..46e7444 --- /dev/null +++ b/src/AuthSettingsService.h @@ -0,0 +1,56 @@ +#ifndef AuthSettingsService_h +#define AuthSettingsService_h + +#include + +#define AUTH_DEFAULT_USERNAME "admin" +#define AUTH_DEFAULT_PASSWORD "admin" +#define AUTH_DEFAULT_SESSION_TIMEOUT 3600 + +#define AUTH_SETTINGS_FILE "/config/authSettings.json" +#define AUTH_SETTINGS_SERVICE_PATH "/authSettings" + +#define AUTH_LOGOUT_PATH "/logout" +#define AUTH_AUTHENTICATE_PATH "/authenticate" + +// max number of concurrently authenticated clients +#define AUTH_MAX_CLIENTS 10 + +/* +* TODO: Will protect services with a cookie based authentication service. +*/ + +class AuthSettingsService : public SettingsService { + + public: + + AuthSettingsService(AsyncWebServer* server, FS* fs); + ~AuthSettingsService(); + + // checks the session is authenticated, + // refreshes the sessions timeout if found + bool authenticated(AsyncWebServerRequest *request); + + protected: + + void readFromJsonObject(JsonObject& root); + void writeToJsonObject(JsonObject& root); + + private: + + // callback handler for authentication endpoint + AsyncJsonRequestWebHandler _authenticationHandler; + + // only supporting one username at the moment + String _username; + String _password; + + // session timeout in seconds + unsigned int _sessionTimeout; + + void logout(AsyncWebServerRequest *request); + void authenticate(AsyncWebServerRequest *request, JsonVariant &json); + +}; + +#endif // end AuthSettingsService_h diff --git a/src/NTPSettingsService.cpp b/src/NTPSettingsService.cpp new file mode 100644 index 0000000..db908b1 --- /dev/null +++ b/src/NTPSettingsService.cpp @@ -0,0 +1,94 @@ +#include + +NTPSettingsService::NTPSettingsService(AsyncWebServer* server, FS* fs) : SettingsService(server, fs, NTP_SETTINGS_SERVICE_PATH, NTP_SETTINGS_FILE) { + _onStationModeDisconnectedHandler = WiFi.onStationModeDisconnected(std::bind(&NTPSettingsService::onStationModeDisconnected, this, std::placeholders::_1)); + _onStationModeGotIPHandler = WiFi.onStationModeGotIP(std::bind(&NTPSettingsService::onStationModeGotIP, this, std::placeholders::_1)); + + NTP.onNTPSyncEvent ([this](NTPSyncEvent_t ntpEvent) { + _ntpEvent = ntpEvent; + _syncEventTriggered = true; + }); +} + +NTPSettingsService::~NTPSettingsService() {} + +void NTPSettingsService::loop() { + // detect when we need to re-configure NTP and do it in the main loop + if (_reconfigureNTP) { + _reconfigureNTP = false; + configureNTP(); + } + + // output sync event to serial + if (_syncEventTriggered) { + processSyncEvent(_ntpEvent); + _syncEventTriggered = false; + } + + // keep time synchronized in background + now(); +} + +void NTPSettingsService::readFromJsonObject(JsonObject& root) { + _server = root["server"] | NTP_SETTINGS_SERVICE_DEFAULT_SERVER; + _interval = root["interval"]; + + // validate server is specified, resorting to default + _server.trim(); + if (!_server){ + _server = NTP_SETTINGS_SERVICE_DEFAULT_SERVER; + } + + // make sure interval is in bounds + if (_interval < NTP_SETTINGS_MIN_INTERVAL){ + _interval = NTP_SETTINGS_MIN_INTERVAL; + } else if (_interval > NTP_SETTINGS_MAX_INTERVAL) { + _interval = NTP_SETTINGS_MAX_INTERVAL; + } +} + +void NTPSettingsService::writeToJsonObject(JsonObject& root) { + root["server"] = _server; + root["interval"] = _interval; +} + +void NTPSettingsService::onConfigUpdated() { + _reconfigureNTP = true; +} + +void NTPSettingsService::onStationModeGotIP(const WiFiEventStationModeGotIP& event) { + Serial.printf("Got IP address, starting NTP Synchronization\n"); + _reconfigureNTP = true; +} + +void NTPSettingsService::onStationModeDisconnected(const WiFiEventStationModeDisconnected& event) { + Serial.printf("WiFi connection dropped, stopping NTP.\n"); + + // stop NTP synchronization, ensuring no re-configuration can take place + _reconfigureNTP = false; + NTP.stop(); +} + +void NTPSettingsService::configureNTP() { + Serial.println("Configuring NTP..."); + + // disable sync + NTP.stop(); + + // enable sync + NTP.begin(_server); + NTP.setInterval(_interval); +} + +void NTPSettingsService::processSyncEvent(NTPSyncEvent_t ntpEvent) { + if (ntpEvent) { + Serial.print ("Time Sync error: "); + if (ntpEvent == noResponse) + Serial.println ("NTP server not reachable"); + else if (ntpEvent == invalidAddress) + Serial.println ("Invalid NTP server address"); + } else { + Serial.print ("Got NTP time: "); + Serial.println (NTP.getTimeDateString (NTP.getLastNTPSync ())); + } +} diff --git a/src/NTPSettingsService.h b/src/NTPSettingsService.h new file mode 100644 index 0000000..309deab --- /dev/null +++ b/src/NTPSettingsService.h @@ -0,0 +1,56 @@ +#ifndef NTPSettingsService_h +#define NTPSettingsService_h + +#include +#include + +#include +#include + +// default time server +#define NTP_SETTINGS_SERVICE_DEFAULT_SERVER "pool.ntp.org" +#define NTP_SETTINGS_SERVICE_DEFAULT_INTERVAL 3600 + +// min poll delay of 60 secs, max 1 day +#define NTP_SETTINGS_MIN_INTERVAL 60 +#define NTP_SETTINGS_MAX_INTERVAL 86400 + +#define NTP_SETTINGS_FILE "/config/ntpSettings.json" +#define NTP_SETTINGS_SERVICE_PATH "/ntpSettings" + +class NTPSettingsService : public SettingsService { + + public: + + NTPSettingsService(AsyncWebServer* server, FS* fs); + ~NTPSettingsService(); + + void loop(); + + protected: + + void readFromJsonObject(JsonObject& root); + void writeToJsonObject(JsonObject& root); + void onConfigUpdated(); + + private: + + WiFiEventHandler _onStationModeDisconnectedHandler; + WiFiEventHandler _onStationModeGotIPHandler; + + String _server; + int _interval; + + bool _reconfigureNTP = false; + bool _syncEventTriggered = false; + NTPSyncEvent_t _ntpEvent; + + void onStationModeGotIP(const WiFiEventStationModeGotIP& event); + void onStationModeDisconnected(const WiFiEventStationModeDisconnected& event); + + void configureNTP(); + void processSyncEvent(NTPSyncEvent_t ntpEvent); + +}; + +#endif // end NTPSettingsService_h diff --git a/src/NTPStatus.cpp b/src/NTPStatus.cpp new file mode 100644 index 0000000..979c1d7 --- /dev/null +++ b/src/NTPStatus.cpp @@ -0,0 +1,28 @@ +#include + +NTPStatus::NTPStatus(AsyncWebServer *server) : _server(server) { + _server->on("/ntpStatus", HTTP_GET, std::bind(&NTPStatus::ntpStatus, this, std::placeholders::_1)); +} + +void NTPStatus::ntpStatus(AsyncWebServerRequest *request) { + AsyncJsonResponse * response = new AsyncJsonResponse(); + JsonObject& root = response->getRoot(); + + // request time now first, this can sometimes force a sync + time_t timeNow = now(); + timeStatus_t status = timeStatus(); + time_t lastSync = NTP.getLastNTPSync(); + root["status"] = (int) status; + root["last_sync"] = lastSync; + root["server"] = NTP.getNtpServerName(); + root["interval"] = NTP.getInterval(); + root["uptime"] = NTP.getUptime(); + + // only add now to response if we have successfully synced + if (status != timeNotSet){ + root["now"] = timeNow; + } + + response->setLength(); + request->send(response); +} diff --git a/src/NTPStatus.h b/src/NTPStatus.h new file mode 100644 index 0000000..85f68d9 --- /dev/null +++ b/src/NTPStatus.h @@ -0,0 +1,26 @@ +#ifndef NTPStatus_h +#define NTPStatus_h + +#include +#include +#include +#include +#include +#include +#include + +class NTPStatus { + + public: + + NTPStatus(AsyncWebServer *server); + + private: + + AsyncWebServer* _server; + + void ntpStatus(AsyncWebServerRequest *request); + +}; + +#endif // end NTPStatus_h diff --git a/src/OTASettingsService.cpp b/src/OTASettingsService.cpp new file mode 100644 index 0000000..1003b42 --- /dev/null +++ b/src/OTASettingsService.cpp @@ -0,0 +1,67 @@ +#include + +OTASettingsService::OTASettingsService(AsyncWebServer* server, FS* fs) : SettingsService(server, fs, OTA_SETTINGS_SERVICE_PATH, OTA_SETTINGS_FILE) {} + +OTASettingsService::~OTASettingsService() {} + +void OTASettingsService::begin() { + // load settings + SettingsService::begin(); + + // configure arduino OTA + configureArduinoOTA(); +} + +void OTASettingsService::loop() { + if (_enabled && _arduinoOTA){ + _arduinoOTA->handle(); + } +} + +void OTASettingsService::onConfigUpdated() { + configureArduinoOTA(); +} + +void OTASettingsService::readFromJsonObject(JsonObject& root) { + _enabled = root["enabled"]; + _port = root["port"]; + _password = root["password"] | DEFAULT_OTA_PASSWORD; + + // provide defaults + if (_port < 0){ + _port = DEFAULT_OTA_PORT; + } +} + +void OTASettingsService::writeToJsonObject(JsonObject& root) { + root["enabled"] = _enabled; + root["port"] = _port; + root["password"] = _password; +} + +void OTASettingsService::configureArduinoOTA() { + delete _arduinoOTA; + if (_enabled) { + _arduinoOTA = new ArduinoOTAClass; + _arduinoOTA->setPort(_port); + _arduinoOTA->setPassword(_password.c_str()); + _arduinoOTA->onStart([]() { + Serial.println("Starting"); + }); + _arduinoOTA->onEnd([]() { + Serial.println("\nEnd"); + }); + _arduinoOTA->onProgress([](unsigned int progress, unsigned int total) { + Serial.printf("Progress: %u%%\r", (progress / (total / 100))); + }); + _arduinoOTA->onError([](ota_error_t error) { + Serial.printf("Error[%u]: ", error); + if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); + else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); + else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); + else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); + else if (error == OTA_END_ERROR) Serial.println("End Failed"); + }); + _arduinoOTA->begin(); + } +} diff --git a/src/OTASettingsService.h b/src/OTASettingsService.h new file mode 100644 index 0000000..0c3caa6 --- /dev/null +++ b/src/OTASettingsService.h @@ -0,0 +1,44 @@ +#ifndef OTASettingsService_h +#define OTASettingsService_h + +#include +#include // ?? +#include +#include +#include + +// Emergency defaults +#define DEFAULT_OTA_PORT 8266 +#define DEFAULT_OTA_PASSWORD "esp-react" + +#define OTA_SETTINGS_FILE "/config/otaSettings.json" +#define OTA_SETTINGS_SERVICE_PATH "/otaSettings" + +class OTASettingsService : public SettingsService { + + public: + + OTASettingsService(AsyncWebServer* server, FS* fs); + ~OTASettingsService(); + + void begin(); + void loop(); + + protected: + + void onConfigUpdated(); + void readFromJsonObject(JsonObject& root); + void writeToJsonObject(JsonObject& root); + + private: + + ArduinoOTAClass *_arduinoOTA; + bool _enabled; + int _port; + String _password; + + void configureArduinoOTA(); + +}; + +#endif // end NTPSettingsService_h diff --git a/src/SettingsService.h b/src/SettingsService.h new file mode 100644 index 0000000..fb74eb6 --- /dev/null +++ b/src/SettingsService.h @@ -0,0 +1,146 @@ +#ifndef SettingsService_h +#define SettingsService_h + +#include +#include +#include +#include +#include +#include +#include +#include + +/** +* At the moment, not expecting settings service to have to deal with large JSON +* files this could be made configurable fairly simply, it's exposed on +* AsyncJsonRequestWebHandler with a setter. +*/ +#define MAX_SETTINGS_SIZE 1024 + +/* +* Abstraction of a service which stores it's settings as JSON in SPIFFS. +*/ +class SettingsService { + +private: + + char const* _filePath; + + AsyncJsonRequestWebHandler _updateHandler; + + bool writeToSPIFFS() { + // create and populate a new json object + DynamicJsonBuffer jsonBuffer; + JsonObject& root = jsonBuffer.createObject(); + writeToJsonObject(root); + + // serialize it to SPIFFS + File configFile = SPIFFS.open(_filePath, "w"); + + // failed to open file, return false + if (!configFile) { + return false; + } + + root.printTo(configFile); + configFile.close(); + + return true; + } + + void readFromSPIFFS(){ + File configFile = SPIFFS.open(_filePath, "r"); + + // use defaults if no config found + if (configFile) { + // Protect against bad data uploaded to SPIFFS + // We never expect the config file to get very large, so cap it. + size_t size = configFile.size(); + if (size <= MAX_SETTINGS_SIZE) { + DynamicJsonBuffer jsonBuffer; + JsonObject& root = jsonBuffer.parseObject(configFile); + if (root.success()) { + readFromJsonObject(root); + configFile.close(); + return; + } + } + configFile.close(); + } + + // If we reach here we have not been successful in loading the config, + // hard-coded emergency defaults are now applied. + applyDefaultConfig(); + } + + void fetchConfig(AsyncWebServerRequest *request){ + AsyncJsonResponse * response = new AsyncJsonResponse(); + writeToJsonObject(response->getRoot()); + response->setLength(); + request->send(response); + } + + void updateConfig(AsyncWebServerRequest *request, JsonVariant &json){ + if (json.is()){ + JsonObject& newConfig = json.as(); + readFromJsonObject(newConfig); + writeToSPIFFS(); + + // write settings back with a callback to reconfigure the wifi + AsyncJsonCallbackResponse * response = new AsyncJsonCallbackResponse([this] () {onConfigUpdated();}); + writeToJsonObject(response->getRoot()); + response->setLength(); + request->send(response); + } else{ + request->send(400); + } + } + + protected: + + // will serve setting endpoints from here + AsyncWebServer* _server; + + // will store and retrieve config from the file system + FS* _fs; + + // reads the local config from the + virtual void readFromJsonObject(JsonObject& root){} + virtual void writeToJsonObject(JsonObject& root){} + + // implement to perform action when config has been updated + virtual void onConfigUpdated(){} + + // We assume the readFromJsonObject supplies sensible defaults if an empty object + // is supplied, this virtual function allows that to be changed. + virtual void applyDefaultConfig(){ + DynamicJsonBuffer jsonBuffer; + JsonObject& root = jsonBuffer.createObject(); + readFromJsonObject(root); + } + + public: + + SettingsService(AsyncWebServer* server, FS* fs, char const* servicePath, char const* filePath): + _server(server), _fs(fs), _filePath(filePath) { + + // configure fetch config handler + _server->on(servicePath, HTTP_GET, std::bind(&SettingsService::fetchConfig, this, std::placeholders::_1)); + + // configure update settings handler + _updateHandler.setUri(servicePath); + _updateHandler.setMethod(HTTP_POST); + _updateHandler.setMaxContentLength(MAX_SETTINGS_SIZE); + _updateHandler.onRequest(std::bind(&SettingsService::updateConfig, this, std::placeholders::_1, std::placeholders::_2)); + _server->addHandler(&_updateHandler); + } + + virtual ~SettingsService() {} + + virtual void begin() { + readFromSPIFFS(); + } + +}; + +#endif // end SettingsService diff --git a/src/WiFiScanner.cpp b/src/WiFiScanner.cpp new file mode 100644 index 0000000..0cefcb5 --- /dev/null +++ b/src/WiFiScanner.cpp @@ -0,0 +1,38 @@ +#include + +WiFiScanner::WiFiScanner(AsyncWebServer *server) : _server(server) { + _server->on("/scanNetworks", HTTP_GET, std::bind(&WiFiScanner::scanNetworks, this, std::placeholders::_1)); + _server->on("/listNetworks", HTTP_GET, std::bind(&WiFiScanner::listNetworks, this, std::placeholders::_1)); +} + +void WiFiScanner::scanNetworks(AsyncWebServerRequest *request) { + if (WiFi.scanComplete() != -1){ + WiFi.scanDelete(); + WiFi.scanNetworks(true); + } + request->send(202); +} + +void WiFiScanner::listNetworks(AsyncWebServerRequest *request) { + int numNetworks = WiFi.scanComplete(); + if (numNetworks > -1){ + AsyncJsonResponse * response = new AsyncJsonResponse(); + JsonObject& root = response->getRoot(); + JsonArray& networks = root.createNestedArray("networks"); + for (int i=0; isetLength(); + request->send(response); + } else if (numNetworks == -1){ + request->send(202); + }else{ + scanNetworks(request); + } +} diff --git a/src/WiFiScanner.h b/src/WiFiScanner.h new file mode 100644 index 0000000..a434752 --- /dev/null +++ b/src/WiFiScanner.h @@ -0,0 +1,26 @@ +#ifndef WiFiScanner_h +#define WiFiScanner_h + +#include +#include +#include +#include +#include +#include + +class WiFiScanner { + + public: + + WiFiScanner(AsyncWebServer *server); + + private: + + AsyncWebServer* _server; + + void scanNetworks(AsyncWebServerRequest *request); + void listNetworks(AsyncWebServerRequest *request); + +}; + +#endif // end WiFiScanner_h diff --git a/src/WiFiSettingsService.cpp b/src/WiFiSettingsService.cpp new file mode 100644 index 0000000..a940f52 --- /dev/null +++ b/src/WiFiSettingsService.cpp @@ -0,0 +1,85 @@ +#include + +WiFiSettingsService::WiFiSettingsService(AsyncWebServer* server, FS* fs) : SettingsService(server, fs, WIFI_SETTINGS_SERVICE_PATH, WIFI_SETTINGS_FILE) { +} + +WiFiSettingsService::~WiFiSettingsService() {} + +void WiFiSettingsService::begin() { + SettingsService::begin(); + reconfigureWiFiConnection(); +} + +void WiFiSettingsService::readFromJsonObject(JsonObject& root){ + _ssid = root["ssid"] | ""; + _password = root["password"] | ""; + _hostname = root["hostname"] | ""; + _staticIPConfig = root["static_ip_config"] | false; + + // extended settings + readIP(root, "local_ip", _localIP); + readIP(root, "gateway_ip", _gatewayIP); + readIP(root, "subnet_mask", _subnetMask); + readIP(root, "dns_ip_1", _dnsIP1); + readIP(root, "dns_ip_2", _dnsIP2); + + // Swap around the dns servers if 2 is populated but 1 is not + if (_dnsIP1 == 0U && _dnsIP2 != 0U){ + _dnsIP1 = _dnsIP2; + _dnsIP2 = 0U; + } + + // Turning off static ip config if we don't meet the minimum requirements + // of ipAddress, gateway and subnet. This may change to static ip only + // as sensible defaults can be assumed for gateway and subnet + if (_staticIPConfig && (_localIP == 0U || _gatewayIP == 0U || _subnetMask == 0U)){ + _staticIPConfig = false; + } +} + +void WiFiSettingsService::writeToJsonObject(JsonObject& root){ + // connection settings + root["ssid"] = _ssid; + root["password"] = _password; + root["hostname"] = _hostname; + root["static_ip_config"] = _staticIPConfig; + + // extended settings + writeIP(root, "local_ip", _localIP); + writeIP(root, "gateway_ip", _gatewayIP); + writeIP(root, "subnet_mask", _subnetMask); + writeIP(root, "dns_ip_1", _dnsIP1); + writeIP(root, "dns_ip_2", _dnsIP2); +} + +void WiFiSettingsService::onConfigUpdated() { + reconfigureWiFiConnection(); +} + +void WiFiSettingsService::reconfigureWiFiConnection() { + Serial.println("Reconfiguring WiFi..."); + + // disconnect and de-configure wifi and software access point + WiFi.disconnect(true); + + // configure static ip config for station mode (if set) + if (_staticIPConfig) { + WiFi.config(_localIP, _gatewayIP, _subnetMask, _dnsIP1, _dnsIP2); + } + + // connect to the network + WiFi.hostname(_hostname); + WiFi.begin(_ssid.c_str(), _password.c_str()); +} + +void WiFiSettingsService::readIP(JsonObject& root, String key, IPAddress& _ip){ + if (!root[key] || !_ip.fromString(root[key].as())){ + _ip = 0U; + } +} + +void WiFiSettingsService::writeIP(JsonObject& root, String key, IPAddress& _ip){ + if (_ip != 0U){ + root[key] = _ip.toString(); + } +} diff --git a/src/WiFiSettingsService.h b/src/WiFiSettingsService.h new file mode 100644 index 0000000..c7395ba --- /dev/null +++ b/src/WiFiSettingsService.h @@ -0,0 +1,46 @@ +#ifndef WiFiSettingsService_h +#define WiFiSettingsService_h + +#include +#include + +#define WIFI_SETTINGS_FILE "/config/wifiSettings.json" +#define WIFI_SETTINGS_SERVICE_PATH "/wifiSettings" + +class WiFiSettingsService : public SettingsService { + + public: + + WiFiSettingsService(AsyncWebServer* server, FS* fs); + ~WiFiSettingsService(); + + void begin(); + + protected: + + void readFromJsonObject(JsonObject& root); + void writeToJsonObject(JsonObject& root); + void onConfigUpdated(); + + void reconfigureWiFiConnection(); + + private: + // connection settings + String _ssid; + String _password; + String _hostname; + bool _staticIPConfig; + + // optional configuration for static IP address + IPAddress _localIP; + IPAddress _gatewayIP; + IPAddress _subnetMask; + IPAddress _dnsIP1; + IPAddress _dnsIP2; + + void readIP(JsonObject& root, String key, IPAddress& _ip); + void writeIP(JsonObject& root, String key, IPAddress& _ip); + +}; + +#endif // end WiFiSettingsService_h diff --git a/src/WiFiStatus.cpp b/src/WiFiStatus.cpp new file mode 100644 index 0000000..bd52f9e --- /dev/null +++ b/src/WiFiStatus.cpp @@ -0,0 +1,52 @@ +#include + +WiFiStatus::WiFiStatus(AsyncWebServer *server) : _server(server) { + _server->on("/wifiStatus", HTTP_GET, std::bind(&WiFiStatus::wifiStatus, this, std::placeholders::_1)); + + _onStationModeConnectedHandler = WiFi.onStationModeConnected(onStationModeConnected); + _onStationModeDisconnectedHandler = WiFi.onStationModeDisconnected(onStationModeDisconnected); + _onStationModeGotIPHandler = WiFi.onStationModeGotIP(onStationModeGotIP); +} + +void WiFiStatus::onStationModeConnected(const WiFiEventStationModeConnected& event) { + Serial.print("WiFi Connected. SSID="); + Serial.println(event.ssid); +} + +void WiFiStatus::onStationModeDisconnected(const WiFiEventStationModeDisconnected& event) { + Serial.print("WiFi Disconnected. Reason code="); + Serial.println(event.reason); +} + +void WiFiStatus::onStationModeGotIP(const WiFiEventStationModeGotIP& event) { + Serial.print("WiFi Got IP. localIP="); + Serial.print(event.ip); + Serial.print(", hostName="); + Serial.println(WiFi.hostname()); +} + +void WiFiStatus::wifiStatus(AsyncWebServerRequest *request) { + AsyncJsonResponse * response = new AsyncJsonResponse(); + JsonObject& root = response->getRoot(); + wl_status_t status = WiFi.status(); + root["status"] = (uint8_t) status; + if (status == WL_CONNECTED){ + root["local_ip"] = WiFi.localIP().toString(); + root["rssi"] = WiFi.RSSI(); + root["ssid"] = WiFi.SSID(); + root["bssid"] = WiFi.BSSIDstr(); + root["channel"] = WiFi.channel(); + root["subnet_mask"] = WiFi.subnetMask().toString(); + root["gateway_ip"] = WiFi.gatewayIP().toString(); + IPAddress dnsIP1 = WiFi.dnsIP(0); + IPAddress dnsIP2 = WiFi.dnsIP(1); + if (dnsIP1 != 0U){ + root["dns_ip_1"] = dnsIP1.toString(); + } + if (dnsIP2 != 0U){ + root["dns_ip_2"] = dnsIP2.toString(); + } + } + response->setLength(); + request->send(response); +} diff --git a/src/WiFiStatus.h b/src/WiFiStatus.h new file mode 100644 index 0000000..bce0b57 --- /dev/null +++ b/src/WiFiStatus.h @@ -0,0 +1,35 @@ +#ifndef WiFiStatus_h +#define WiFiStatus_h + +#include +#include +#include +#include +#include +#include + +class WiFiStatus { + + public: + + WiFiStatus(AsyncWebServer *server); + + private: + + AsyncWebServer* _server; + + // handler refrences for logging important WiFi events over serial + WiFiEventHandler _onStationModeConnectedHandler; + WiFiEventHandler _onStationModeDisconnectedHandler; + WiFiEventHandler _onStationModeGotIPHandler; + + // static functions for logging wifi events to the UART + static void onStationModeConnected(const WiFiEventStationModeConnected& event); + static void onStationModeDisconnected(const WiFiEventStationModeDisconnected& event); + static void onStationModeGotIP(const WiFiEventStationModeGotIP& event); + + void wifiStatus(AsyncWebServerRequest *request); + +}; + +#endif // end WiFiStatus_h diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..f6402ab --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SERIAL_BAUD_RATE 115200 + +AsyncWebServer server(80); + +WiFiSettingsService wifiSettingsService = WiFiSettingsService(&server, &SPIFFS); +WiFiStatus wifiStatus = WiFiStatus(&server); +WiFiScanner wifiScanner = WiFiScanner(&server); +APSettingsService apSettingsService = APSettingsService(&server, &SPIFFS); +NTPSettingsService ntpSettingsService = NTPSettingsService(&server, &SPIFFS); +OTASettingsService otaSettingsService = OTASettingsService(&server, &SPIFFS); +NTPStatus ntpStatus = NTPStatus(&server); +APStatus apStatus = APStatus(&server); + +void setup() { + // Disable wifi config persistance + WiFi.persistent(false); + + Serial.begin(SERIAL_BAUD_RATE); + SPIFFS.begin(); + + // start services + ntpSettingsService.begin(); + otaSettingsService.begin(); + apSettingsService.begin(); + wifiSettingsService.begin(); + + // Serving static resources from /www/ + server.serveStatic("/js/", SPIFFS, "/www/js/"); + server.serveStatic("/css/", SPIFFS, "/www/css/"); + server.serveStatic("/fonts/", SPIFFS, "/www/fonts/"); + server.serveStatic("/app/", SPIFFS, "/www/app/"); + + // Serving all other get requests with "/www/index.htm" + server.onNotFound([](AsyncWebServerRequest *request) { + if (request->method() == HTTP_GET) { + request->send(SPIFFS, "/www/index.html"); + } else { + request->send(404); + } + }); + + server.begin(); +} + +void loop() { + apSettingsService.loop(); + ntpSettingsService.loop(); + otaSettingsService.loop(); +}