diff --git a/code/html/vendor/images/border-off.png b/code/html/vendor/images/border-off.png
index 6bfa573b..2163fb0d 100644
Binary files a/code/html/vendor/images/border-off.png and b/code/html/vendor/images/border-off.png differ
diff --git a/code/html/vendor/images/border-on.png b/code/html/vendor/images/border-on.png
index 4b9596ee..2bce84f6 100644
Binary files a/code/html/vendor/images/border-on.png and b/code/html/vendor/images/border-on.png differ
diff --git a/code/html/vendor/images/handle-center.png b/code/html/vendor/images/handle-center.png
index d280d61f..49ceb533 100644
Binary files a/code/html/vendor/images/handle-center.png and b/code/html/vendor/images/handle-center.png differ
diff --git a/code/html/vendor/images/handle-left.png b/code/html/vendor/images/handle-left.png
index 8eacd8d2..9d9257d7 100644
Binary files a/code/html/vendor/images/handle-left.png and b/code/html/vendor/images/handle-left.png differ
diff --git a/code/html/vendor/images/handle-right.png b/code/html/vendor/images/handle-right.png
index 2eaf8b2c..6cda2aed 100644
Binary files a/code/html/vendor/images/handle-right.png and b/code/html/vendor/images/handle-right.png differ
diff --git a/code/html/vendor/images/label-off.png b/code/html/vendor/images/label-off.png
index 1e2faaea..e135de1d 100644
Binary files a/code/html/vendor/images/label-off.png and b/code/html/vendor/images/label-off.png differ
diff --git a/code/html/vendor/images/label-on.png b/code/html/vendor/images/label-on.png
index 888a11b6..47e4c2ee 100644
Binary files a/code/html/vendor/images/label-on.png and b/code/html/vendor/images/label-on.png differ
diff --git a/code/html/vendor/pure-1.0.0.min.css b/code/html/vendor/pure-1.0.0.min.css
index e3ddfbf0..b51d749e 100644
--- a/code/html/vendor/pure-1.0.0.min.css
+++ b/code/html/vendor/pure-1.0.0.min.css
@@ -2,10 +2,10 @@
Pure v1.0.0
Copyright 2013 Yahoo!
Licensed under the BSD License.
-https://github.com/yahoo/pure/blob/master/LICENSE.md
+https://github.com/pure-css/pure/blob/master/LICENSE.md
*/
/*!
normalize.css v^3.0 | MIT License | git.io/normalize
Copyright (c) Nicolas Gallagher and Jonathan Neal
*/
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.pure-button:focus,a:active,a:hover{outline:0}.pure-table,table{border-collapse:collapse;border-spacing:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}.pure-button,input{line-height:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}.pure-button,.pure-form input:not([type]),.pure-menu{box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend,td,th{padding:0}legend{border:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u,.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;display:inline-block;zoom:1}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;zoom:1;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);border:1px solid #999;border:transparent;background-color:#E6E6E6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{filter:alpha(opacity=90);background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button-active,.pure-button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;border-color:#000\9}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto;margin:0;border-radius:0;border-right:1px solid #111;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=tel],.pure-form input[type=color],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=text],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;box-shadow:inset 0 1px 3px #ddd;border-radius:4px}.pure-form input[type=color]{padding:.2em .5em}.pure-form input:not([type]):focus,.pure-form input[type=password]:focus,.pure-form input[type=email]:focus,.pure-form input[type=url]:focus,.pure-form input[type=date]:focus,.pure-form input[type=month]:focus,.pure-form input[type=time]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=week]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=color]:focus,.pure-form input[type=number]:focus,.pure-form input[type=search]:focus,.pure-form input[type=text]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129FEA}.pure-form input[type=file]:focus,.pure-form input[type=checkbox]:focus,.pure-form input[type=radio]:focus{outline:#129FEA auto 1px}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input:not([type])[disabled],.pure-form input[type=password][disabled],.pure-form input[type=email][disabled],.pure-form input[type=url][disabled],.pure-form input[type=date][disabled],.pure-form input[type=month][disabled],.pure-form input[type=time][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=week][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=color][disabled],.pure-form input[type=number][disabled],.pure-form input[type=search][disabled],.pure-form input[type=text][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input:not([type]),.pure-form-stacked input[type=password],.pure-form-stacked input[type=email],.pure-form-stacked input[type=url],.pure-form-stacked input[type=date],.pure-form-stacked input[type=month],.pure-form-stacked input[type=time],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=week],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=color],.pure-form-stacked input[type=file],.pure-form-stacked input[type=number],.pure-form-stacked input[type=search],.pure-form-stacked input[type=text],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-aligned .pure-help-inline,.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=password],.pure-form input[type=email],.pure-form input[type=url],.pure-form input[type=date],.pure-form input[type=month],.pure-form input[type=time],.pure-form input[type=datetime],.pure-form input[type=datetime-local],.pure-form input[type=week],.pure-form input[type=tel],.pure-form input[type=color],.pure-form input[type=number],.pure-form input[type=search],.pure-form input[type=text],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=password],.pure-group input[type=email],.pure-group input[type=url],.pure-group input[type=date],.pure-group input[type=month],.pure-group input[type=time],.pure-group input[type=datetime],.pure-group input[type=datetime-local],.pure-group input[type=week],.pure-group input[type=tel],.pure-group input[type=color],.pure-group input[type=number],.pure-group input[type=search],.pure-group input[type=text]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0}.pure-form .pure-help-inline,.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;zoom:1;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;padding:.5em 0}.pure-menu-horizontal.pure-menu-scrollable::-webkit-scrollbar{display:none}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected .pure-menu-link,.pure-menu-selected .pure-menu-link:visited{color:#000}.pure-table{empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td,.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0}
\ No newline at end of file
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}.pure-g{letter-spacing:-.31em;text-rendering:optimizespeed;font-family:FreeSans,Arimo,"Droid Sans",Helvetica,Arial,sans-serif;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start}@media all and (-ms-high-contrast:none),(-ms-high-contrast:active){table .pure-g{display:block}}.opera-only :-o-prefocus,.pure-g{word-spacing:-.43em}.pure-u{display:inline-block;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-g [class*=pure-u]{font-family:sans-serif}.pure-u-1,.pure-u-1-1,.pure-u-1-12,.pure-u-1-2,.pure-u-1-24,.pure-u-1-3,.pure-u-1-4,.pure-u-1-5,.pure-u-1-6,.pure-u-1-8,.pure-u-10-24,.pure-u-11-12,.pure-u-11-24,.pure-u-12-24,.pure-u-13-24,.pure-u-14-24,.pure-u-15-24,.pure-u-16-24,.pure-u-17-24,.pure-u-18-24,.pure-u-19-24,.pure-u-2-24,.pure-u-2-3,.pure-u-2-5,.pure-u-20-24,.pure-u-21-24,.pure-u-22-24,.pure-u-23-24,.pure-u-24-24,.pure-u-3-24,.pure-u-3-4,.pure-u-3-5,.pure-u-3-8,.pure-u-4-24,.pure-u-4-5,.pure-u-5-12,.pure-u-5-24,.pure-u-5-5,.pure-u-5-6,.pure-u-5-8,.pure-u-6-24,.pure-u-7-12,.pure-u-7-24,.pure-u-7-8,.pure-u-8-24,.pure-u-9-24{display:inline-block;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-1-24{width:4.1667%}.pure-u-1-12,.pure-u-2-24{width:8.3333%}.pure-u-1-8,.pure-u-3-24{width:12.5%}.pure-u-1-6,.pure-u-4-24{width:16.6667%}.pure-u-1-5{width:20%}.pure-u-5-24{width:20.8333%}.pure-u-1-4,.pure-u-6-24{width:25%}.pure-u-7-24{width:29.1667%}.pure-u-1-3,.pure-u-8-24{width:33.3333%}.pure-u-3-8,.pure-u-9-24{width:37.5%}.pure-u-2-5{width:40%}.pure-u-10-24,.pure-u-5-12{width:41.6667%}.pure-u-11-24{width:45.8333%}.pure-u-1-2,.pure-u-12-24{width:50%}.pure-u-13-24{width:54.1667%}.pure-u-14-24,.pure-u-7-12{width:58.3333%}.pure-u-3-5{width:60%}.pure-u-15-24,.pure-u-5-8{width:62.5%}.pure-u-16-24,.pure-u-2-3{width:66.6667%}.pure-u-17-24{width:70.8333%}.pure-u-18-24,.pure-u-3-4{width:75%}.pure-u-19-24{width:79.1667%}.pure-u-4-5{width:80%}.pure-u-20-24,.pure-u-5-6{width:83.3333%}.pure-u-21-24,.pure-u-7-8{width:87.5%}.pure-u-11-12,.pure-u-22-24{width:91.6667%}.pure-u-23-24{width:95.8333%}.pure-u-1,.pure-u-1-1,.pure-u-24-24,.pure-u-5-5{width:100%}.pure-button{display:inline-block;zoom:1;line-height:normal;white-space:nowrap;vertical-align:middle;text-align:center;cursor:pointer;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-button::-moz-focus-inner{padding:0;border:0}.pure-button-group{letter-spacing:-.31em;text-rendering:optimizespeed}.opera-only :-o-prefocus,.pure-button-group{word-spacing:-.43em}.pure-button-group .pure-button{letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-button{font-family:inherit;font-size:100%;padding:.5em 1em;color:#444;color:rgba(0,0,0,.8);border:1px solid #999;border:none transparent;background-color:#e6e6e6;text-decoration:none;border-radius:2px}.pure-button-hover,.pure-button:focus,.pure-button:hover{background-image:-webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(40%,rgba(0,0,0,.05)),to(rgba(0,0,0,.1)));background-image:-webkit-linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1));background-image:linear-gradient(transparent,rgba(0,0,0,.05) 40%,rgba(0,0,0,.1))}.pure-button:focus{outline:0}.pure-button-active,.pure-button:active{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 0 6px rgba(0,0,0,.2) inset}.pure-button-disabled,.pure-button-disabled:active,.pure-button-disabled:focus,.pure-button-disabled:hover,.pure-button[disabled]{border:none;background-image:none;opacity:.4;cursor:not-allowed;-webkit-box-shadow:none;box-shadow:none;pointer-events:none}.pure-button-hidden{display:none}.pure-button-primary,.pure-button-selected,a.pure-button-primary,a.pure-button-selected{background-color:#0078e7;color:#fff}.pure-button-group .pure-button{margin:0;border-radius:0;border-right:1px solid #111;border-right:1px solid rgba(0,0,0,.2)}.pure-button-group .pure-button:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.pure-button-group .pure-button:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px;border-right:none}.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form select,.pure-form textarea{padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;vertical-align:middle;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input:not([type]){padding:.5em .6em;display:inline-block;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 3px #ddd;box-shadow:inset 0 1px 3px #ddd;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box}.pure-form input[type=color]{padding:.2em .5em}.pure-form input[type=color]:focus,.pure-form input[type=date]:focus,.pure-form input[type=datetime-local]:focus,.pure-form input[type=datetime]:focus,.pure-form input[type=email]:focus,.pure-form input[type=month]:focus,.pure-form input[type=number]:focus,.pure-form input[type=password]:focus,.pure-form input[type=search]:focus,.pure-form input[type=tel]:focus,.pure-form input[type=text]:focus,.pure-form input[type=time]:focus,.pure-form input[type=url]:focus,.pure-form input[type=week]:focus,.pure-form select:focus,.pure-form textarea:focus{outline:0;border-color:#129fea}.pure-form input:not([type]):focus{outline:0;border-color:#129fea}.pure-form input[type=checkbox]:focus,.pure-form input[type=file]:focus,.pure-form input[type=radio]:focus{outline:thin solid #129fea;outline:1px auto #129fea}.pure-form .pure-checkbox,.pure-form .pure-radio{margin:.5em 0;display:block}.pure-form input[type=color][disabled],.pure-form input[type=date][disabled],.pure-form input[type=datetime-local][disabled],.pure-form input[type=datetime][disabled],.pure-form input[type=email][disabled],.pure-form input[type=month][disabled],.pure-form input[type=number][disabled],.pure-form input[type=password][disabled],.pure-form input[type=search][disabled],.pure-form input[type=tel][disabled],.pure-form input[type=text][disabled],.pure-form input[type=time][disabled],.pure-form input[type=url][disabled],.pure-form input[type=week][disabled],.pure-form select[disabled],.pure-form textarea[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input:not([type])[disabled]{cursor:not-allowed;background-color:#eaeded;color:#cad2d3}.pure-form input[readonly],.pure-form select[readonly],.pure-form textarea[readonly]{background-color:#eee;color:#777;border-color:#ccc}.pure-form input:focus:invalid,.pure-form select:focus:invalid,.pure-form textarea:focus:invalid{color:#b94a48;border-color:#e9322d}.pure-form input[type=checkbox]:focus:invalid:focus,.pure-form input[type=file]:focus:invalid:focus,.pure-form input[type=radio]:focus:invalid:focus{outline-color:#e9322d}.pure-form select{height:2.25em;border:1px solid #ccc;background-color:#fff}.pure-form select[multiple]{height:auto}.pure-form label{margin:.5em 0 .2em}.pure-form fieldset{margin:0;padding:.35em 0 .75em;border:0}.pure-form legend{display:block;width:100%;padding:.3em 0;margin-bottom:.3em;color:#333;border-bottom:1px solid #e5e5e5}.pure-form-stacked input[type=color],.pure-form-stacked input[type=date],.pure-form-stacked input[type=datetime-local],.pure-form-stacked input[type=datetime],.pure-form-stacked input[type=email],.pure-form-stacked input[type=file],.pure-form-stacked input[type=month],.pure-form-stacked input[type=number],.pure-form-stacked input[type=password],.pure-form-stacked input[type=search],.pure-form-stacked input[type=tel],.pure-form-stacked input[type=text],.pure-form-stacked input[type=time],.pure-form-stacked input[type=url],.pure-form-stacked input[type=week],.pure-form-stacked label,.pure-form-stacked select,.pure-form-stacked textarea{display:block;margin:.25em 0}.pure-form-stacked input:not([type]){display:block;margin:.25em 0}.pure-form-aligned .pure-help-inline,.pure-form-aligned input,.pure-form-aligned select,.pure-form-aligned textarea,.pure-form-message-inline{display:inline-block;vertical-align:middle}.pure-form-aligned textarea{vertical-align:top}.pure-form-aligned .pure-control-group{margin-bottom:.5em}.pure-form-aligned .pure-control-group label{text-align:right;display:inline-block;vertical-align:middle;width:10em;margin:0 1em 0 0}.pure-form-aligned .pure-controls{margin:1.5em 0 0 11em}.pure-form .pure-input-rounded,.pure-form input.pure-input-rounded{border-radius:2em;padding:.5em 1em}.pure-form .pure-group fieldset{margin-bottom:10px}.pure-form .pure-group input,.pure-form .pure-group textarea{display:block;padding:10px;margin:0 0 -1px;border-radius:0;position:relative;top:-1px}.pure-form .pure-group input:focus,.pure-form .pure-group textarea:focus{z-index:3}.pure-form .pure-group input:first-child,.pure-form .pure-group textarea:first-child{top:1px;border-radius:4px 4px 0 0;margin:0}.pure-form .pure-group input:first-child:last-child,.pure-form .pure-group textarea:first-child:last-child{top:1px;border-radius:4px;margin:0}.pure-form .pure-group input:last-child,.pure-form .pure-group textarea:last-child{top:-2px;border-radius:0 0 4px 4px;margin:0}.pure-form .pure-group button{margin:.35em 0}.pure-form .pure-input-1{width:100%}.pure-form .pure-input-3-4{width:75%}.pure-form .pure-input-2-3{width:66%}.pure-form .pure-input-1-2{width:50%}.pure-form .pure-input-1-3{width:33%}.pure-form .pure-input-1-4{width:25%}.pure-form .pure-help-inline,.pure-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:.875em}.pure-form-message{display:block;color:#666;font-size:.875em}@media only screen and (max-width :480px){.pure-form button[type=submit]{margin:.7em 0 0}.pure-form input:not([type]),.pure-form input[type=color],.pure-form input[type=date],.pure-form input[type=datetime-local],.pure-form input[type=datetime],.pure-form input[type=email],.pure-form input[type=month],.pure-form input[type=number],.pure-form input[type=password],.pure-form input[type=search],.pure-form input[type=tel],.pure-form input[type=text],.pure-form input[type=time],.pure-form input[type=url],.pure-form input[type=week],.pure-form label{margin-bottom:.3em;display:block}.pure-group input:not([type]),.pure-group input[type=color],.pure-group input[type=date],.pure-group input[type=datetime-local],.pure-group input[type=datetime],.pure-group input[type=email],.pure-group input[type=month],.pure-group input[type=number],.pure-group input[type=password],.pure-group input[type=search],.pure-group input[type=tel],.pure-group input[type=text],.pure-group input[type=time],.pure-group input[type=url],.pure-group input[type=week]{margin-bottom:0}.pure-form-aligned .pure-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.pure-form-aligned .pure-controls{margin:1.5em 0 0 0}.pure-form .pure-help-inline,.pure-form-message,.pure-form-message-inline{display:block;font-size:.75em;padding:.2em 0 .8em}}.pure-menu{-webkit-box-sizing:border-box;box-sizing:border-box}.pure-menu-fixed{position:fixed;left:0;top:0;z-index:3}.pure-menu-item,.pure-menu-list{position:relative}.pure-menu-list{list-style:none;margin:0;padding:0}.pure-menu-item{padding:0;margin:0;height:100%}.pure-menu-heading,.pure-menu-link{display:block;text-decoration:none;white-space:nowrap}.pure-menu-horizontal{width:100%;white-space:nowrap}.pure-menu-horizontal .pure-menu-list{display:inline-block}.pure-menu-horizontal .pure-menu-heading,.pure-menu-horizontal .pure-menu-item,.pure-menu-horizontal .pure-menu-separator{display:inline-block;zoom:1;vertical-align:middle}.pure-menu-item .pure-menu-item{display:block}.pure-menu-children{display:none;position:absolute;left:100%;top:0;margin:0;padding:0;z-index:3}.pure-menu-horizontal .pure-menu-children{left:0;top:auto;width:inherit}.pure-menu-active>.pure-menu-children,.pure-menu-allow-hover:hover>.pure-menu-children{display:block;position:absolute}.pure-menu-has-children>.pure-menu-link:after{padding-left:.5em;content:"\25B8";font-size:small}.pure-menu-horizontal .pure-menu-has-children>.pure-menu-link:after{content:"\25BE"}.pure-menu-scrollable{overflow-y:scroll;overflow-x:hidden}.pure-menu-scrollable .pure-menu-list{display:block}.pure-menu-horizontal.pure-menu-scrollable .pure-menu-list{display:inline-block}.pure-menu-horizontal.pure-menu-scrollable{white-space:nowrap;overflow-y:hidden;overflow-x:auto;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;padding:.5em 0}.pure-menu-horizontal.pure-menu-scrollable::-webkit-scrollbar{display:none}.pure-menu-horizontal .pure-menu-children .pure-menu-separator,.pure-menu-separator{background-color:#ccc;height:1px;margin:.3em 0}.pure-menu-horizontal .pure-menu-separator{width:1px;height:1.3em;margin:0 .3em}.pure-menu-horizontal .pure-menu-children .pure-menu-separator{display:block;width:auto}.pure-menu-heading{text-transform:uppercase;color:#565d64}.pure-menu-link{color:#777}.pure-menu-children{background-color:#fff}.pure-menu-disabled,.pure-menu-heading,.pure-menu-link{padding:.5em 1em}.pure-menu-disabled{opacity:.5}.pure-menu-disabled .pure-menu-link:hover{background-color:transparent}.pure-menu-active>.pure-menu-link,.pure-menu-link:focus,.pure-menu-link:hover{background-color:#eee}.pure-menu-selected .pure-menu-link,.pure-menu-selected .pure-menu-link:visited{color:#000}.pure-table{border-collapse:collapse;border-spacing:0;empty-cells:show;border:1px solid #cbcbcb}.pure-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.pure-table td,.pure-table th{border-left:1px solid #cbcbcb;border-width:0 0 0 1px;font-size:inherit;margin:0;overflow:visible;padding:.5em 1em}.pure-table td:first-child,.pure-table th:first-child{border-left-width:0}.pure-table thead{background-color:#e0e0e0;color:#000;text-align:left;vertical-align:bottom}.pure-table td{background-color:transparent}.pure-table-odd td{background-color:#f2f2f2}.pure-table-striped tr:nth-child(2n-1) td{background-color:#f2f2f2}.pure-table-bordered td{border-bottom:1px solid #cbcbcb}.pure-table-bordered tbody>tr:last-child>td{border-bottom-width:0}.pure-table-horizontal td,.pure-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #cbcbcb}.pure-table-horizontal tbody>tr:last-child>td{border-bottom-width:0}
\ No newline at end of file
diff --git a/code/html/vendor/pure-grids-responsive-1.0.0.min.css b/code/html/vendor/pure-grids-responsive-1.0.0.min.css
index e10c0003..df66ab56 100644
--- a/code/html/vendor/pure-grids-responsive-1.0.0.min.css
+++ b/code/html/vendor/pure-grids-responsive-1.0.0.min.css
@@ -2,6 +2,6 @@
Pure v1.0.0
Copyright 2013 Yahoo!
Licensed under the BSD License.
-https://github.com/yahoo/pure/blob/master/LICENSE.md
+https://github.com/pure-css/pure/blob/master/LICENSE.md
*/
-@media screen and (min-width:35.5em){.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-1-12,.pure-u-sm-1-2,.pure-u-sm-1-24,.pure-u-sm-1-3,.pure-u-sm-1-4,.pure-u-sm-1-5,.pure-u-sm-1-6,.pure-u-sm-1-8,.pure-u-sm-10-24,.pure-u-sm-11-12,.pure-u-sm-11-24,.pure-u-sm-12-24,.pure-u-sm-13-24,.pure-u-sm-14-24,.pure-u-sm-15-24,.pure-u-sm-16-24,.pure-u-sm-17-24,.pure-u-sm-18-24,.pure-u-sm-19-24,.pure-u-sm-2-24,.pure-u-sm-2-3,.pure-u-sm-2-5,.pure-u-sm-20-24,.pure-u-sm-21-24,.pure-u-sm-22-24,.pure-u-sm-23-24,.pure-u-sm-24-24,.pure-u-sm-3-24,.pure-u-sm-3-4,.pure-u-sm-3-5,.pure-u-sm-3-8,.pure-u-sm-4-24,.pure-u-sm-4-5,.pure-u-sm-5-12,.pure-u-sm-5-24,.pure-u-sm-5-5,.pure-u-sm-5-6,.pure-u-sm-5-8,.pure-u-sm-6-24,.pure-u-sm-7-12,.pure-u-sm-7-24,.pure-u-sm-7-8,.pure-u-sm-8-24,.pure-u-sm-9-24{display:inline-block;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-sm-1-24{width:4.1667%}.pure-u-sm-1-12,.pure-u-sm-2-24{width:8.3333%}.pure-u-sm-1-8,.pure-u-sm-3-24{width:12.5%}.pure-u-sm-1-6,.pure-u-sm-4-24{width:16.6667%}.pure-u-sm-1-5{width:20%}.pure-u-sm-5-24{width:20.8333%}.pure-u-sm-1-4,.pure-u-sm-6-24{width:25%}.pure-u-sm-7-24{width:29.1667%}.pure-u-sm-1-3,.pure-u-sm-8-24{width:33.3333%}.pure-u-sm-3-8,.pure-u-sm-9-24{width:37.5%}.pure-u-sm-2-5{width:40%}.pure-u-sm-10-24,.pure-u-sm-5-12{width:41.6667%}.pure-u-sm-11-24{width:45.8333%}.pure-u-sm-1-2,.pure-u-sm-12-24{width:50%}.pure-u-sm-13-24{width:54.1667%}.pure-u-sm-14-24,.pure-u-sm-7-12{width:58.3333%}.pure-u-sm-3-5{width:60%}.pure-u-sm-15-24,.pure-u-sm-5-8{width:62.5%}.pure-u-sm-16-24,.pure-u-sm-2-3{width:66.6667%}.pure-u-sm-17-24{width:70.8333%}.pure-u-sm-18-24,.pure-u-sm-3-4{width:75%}.pure-u-sm-19-24{width:79.1667%}.pure-u-sm-4-5{width:80%}.pure-u-sm-20-24,.pure-u-sm-5-6{width:83.3333%}.pure-u-sm-21-24,.pure-u-sm-7-8{width:87.5%}.pure-u-sm-11-12,.pure-u-sm-22-24{width:91.6667%}.pure-u-sm-23-24{width:95.8333%}.pure-u-sm-1,.pure-u-sm-1-1,.pure-u-sm-24-24,.pure-u-sm-5-5{width:100%}}@media screen and (min-width:48em){.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-1-12,.pure-u-md-1-2,.pure-u-md-1-24,.pure-u-md-1-3,.pure-u-md-1-4,.pure-u-md-1-5,.pure-u-md-1-6,.pure-u-md-1-8,.pure-u-md-10-24,.pure-u-md-11-12,.pure-u-md-11-24,.pure-u-md-12-24,.pure-u-md-13-24,.pure-u-md-14-24,.pure-u-md-15-24,.pure-u-md-16-24,.pure-u-md-17-24,.pure-u-md-18-24,.pure-u-md-19-24,.pure-u-md-2-24,.pure-u-md-2-3,.pure-u-md-2-5,.pure-u-md-20-24,.pure-u-md-21-24,.pure-u-md-22-24,.pure-u-md-23-24,.pure-u-md-24-24,.pure-u-md-3-24,.pure-u-md-3-4,.pure-u-md-3-5,.pure-u-md-3-8,.pure-u-md-4-24,.pure-u-md-4-5,.pure-u-md-5-12,.pure-u-md-5-24,.pure-u-md-5-5,.pure-u-md-5-6,.pure-u-md-5-8,.pure-u-md-6-24,.pure-u-md-7-12,.pure-u-md-7-24,.pure-u-md-7-8,.pure-u-md-8-24,.pure-u-md-9-24{display:inline-block;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-md-1-24{width:4.1667%}.pure-u-md-1-12,.pure-u-md-2-24{width:8.3333%}.pure-u-md-1-8,.pure-u-md-3-24{width:12.5%}.pure-u-md-1-6,.pure-u-md-4-24{width:16.6667%}.pure-u-md-1-5{width:20%}.pure-u-md-5-24{width:20.8333%}.pure-u-md-1-4,.pure-u-md-6-24{width:25%}.pure-u-md-7-24{width:29.1667%}.pure-u-md-1-3,.pure-u-md-8-24{width:33.3333%}.pure-u-md-3-8,.pure-u-md-9-24{width:37.5%}.pure-u-md-2-5{width:40%}.pure-u-md-10-24,.pure-u-md-5-12{width:41.6667%}.pure-u-md-11-24{width:45.8333%}.pure-u-md-1-2,.pure-u-md-12-24{width:50%}.pure-u-md-13-24{width:54.1667%}.pure-u-md-14-24,.pure-u-md-7-12{width:58.3333%}.pure-u-md-3-5{width:60%}.pure-u-md-15-24,.pure-u-md-5-8{width:62.5%}.pure-u-md-16-24,.pure-u-md-2-3{width:66.6667%}.pure-u-md-17-24{width:70.8333%}.pure-u-md-18-24,.pure-u-md-3-4{width:75%}.pure-u-md-19-24{width:79.1667%}.pure-u-md-4-5{width:80%}.pure-u-md-20-24,.pure-u-md-5-6{width:83.3333%}.pure-u-md-21-24,.pure-u-md-7-8{width:87.5%}.pure-u-md-11-12,.pure-u-md-22-24{width:91.6667%}.pure-u-md-23-24{width:95.8333%}.pure-u-md-1,.pure-u-md-1-1,.pure-u-md-24-24,.pure-u-md-5-5{width:100%}}@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-12,.pure-u-lg-1-2,.pure-u-lg-1-24,.pure-u-lg-1-3,.pure-u-lg-1-4,.pure-u-lg-1-5,.pure-u-lg-1-6,.pure-u-lg-1-8,.pure-u-lg-10-24,.pure-u-lg-11-12,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-2-24,.pure-u-lg-2-3,.pure-u-lg-2-5,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24,.pure-u-lg-3-24,.pure-u-lg-3-4,.pure-u-lg-3-5,.pure-u-lg-3-8,.pure-u-lg-4-24,.pure-u-lg-4-5,.pure-u-lg-5-12,.pure-u-lg-5-24,.pure-u-lg-5-5,.pure-u-lg-5-6,.pure-u-lg-5-8,.pure-u-lg-6-24,.pure-u-lg-7-12,.pure-u-lg-7-24,.pure-u-lg-7-8,.pure-u-lg-8-24,.pure-u-lg-9-24{display:inline-block;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%}.pure-u-lg-1-5{width:20%}.pure-u-lg-5-24{width:20.8333%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%}.pure-u-lg-7-24{width:29.1667%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%}.pure-u-lg-2-5{width:40%}.pure-u-lg-10-24,.pure-u-lg-5-12{width:41.6667%}.pure-u-lg-11-24{width:45.8333%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%}.pure-u-lg-13-24{width:54.1667%}.pure-u-lg-14-24,.pure-u-lg-7-12{width:58.3333%}.pure-u-lg-3-5{width:60%}.pure-u-lg-15-24,.pure-u-lg-5-8{width:62.5%}.pure-u-lg-16-24,.pure-u-lg-2-3{width:66.6667%}.pure-u-lg-17-24{width:70.8333%}.pure-u-lg-18-24,.pure-u-lg-3-4{width:75%}.pure-u-lg-19-24{width:79.1667%}.pure-u-lg-4-5{width:80%}.pure-u-lg-20-24,.pure-u-lg-5-6{width:83.3333%}.pure-u-lg-21-24,.pure-u-lg-7-8{width:87.5%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%}.pure-u-lg-23-24{width:95.8333%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-24-24,.pure-u-lg-5-5{width:100%}}@media screen and (min-width:80em){.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-1-12,.pure-u-xl-1-2,.pure-u-xl-1-24,.pure-u-xl-1-3,.pure-u-xl-1-4,.pure-u-xl-1-5,.pure-u-xl-1-6,.pure-u-xl-1-8,.pure-u-xl-10-24,.pure-u-xl-11-12,.pure-u-xl-11-24,.pure-u-xl-12-24,.pure-u-xl-13-24,.pure-u-xl-14-24,.pure-u-xl-15-24,.pure-u-xl-16-24,.pure-u-xl-17-24,.pure-u-xl-18-24,.pure-u-xl-19-24,.pure-u-xl-2-24,.pure-u-xl-2-3,.pure-u-xl-2-5,.pure-u-xl-20-24,.pure-u-xl-21-24,.pure-u-xl-22-24,.pure-u-xl-23-24,.pure-u-xl-24-24,.pure-u-xl-3-24,.pure-u-xl-3-4,.pure-u-xl-3-5,.pure-u-xl-3-8,.pure-u-xl-4-24,.pure-u-xl-4-5,.pure-u-xl-5-12,.pure-u-xl-5-24,.pure-u-xl-5-5,.pure-u-xl-5-6,.pure-u-xl-5-8,.pure-u-xl-6-24,.pure-u-xl-7-12,.pure-u-xl-7-24,.pure-u-xl-7-8,.pure-u-xl-8-24,.pure-u-xl-9-24{display:inline-block;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-xl-1-24{width:4.1667%}.pure-u-xl-1-12,.pure-u-xl-2-24{width:8.3333%}.pure-u-xl-1-8,.pure-u-xl-3-24{width:12.5%}.pure-u-xl-1-6,.pure-u-xl-4-24{width:16.6667%}.pure-u-xl-1-5{width:20%}.pure-u-xl-5-24{width:20.8333%}.pure-u-xl-1-4,.pure-u-xl-6-24{width:25%}.pure-u-xl-7-24{width:29.1667%}.pure-u-xl-1-3,.pure-u-xl-8-24{width:33.3333%}.pure-u-xl-3-8,.pure-u-xl-9-24{width:37.5%}.pure-u-xl-2-5{width:40%}.pure-u-xl-10-24,.pure-u-xl-5-12{width:41.6667%}.pure-u-xl-11-24{width:45.8333%}.pure-u-xl-1-2,.pure-u-xl-12-24{width:50%}.pure-u-xl-13-24{width:54.1667%}.pure-u-xl-14-24,.pure-u-xl-7-12{width:58.3333%}.pure-u-xl-3-5{width:60%}.pure-u-xl-15-24,.pure-u-xl-5-8{width:62.5%}.pure-u-xl-16-24,.pure-u-xl-2-3{width:66.6667%}.pure-u-xl-17-24{width:70.8333%}.pure-u-xl-18-24,.pure-u-xl-3-4{width:75%}.pure-u-xl-19-24{width:79.1667%}.pure-u-xl-4-5{width:80%}.pure-u-xl-20-24,.pure-u-xl-5-6{width:83.3333%}.pure-u-xl-21-24,.pure-u-xl-7-8{width:87.5%}.pure-u-xl-11-12,.pure-u-xl-22-24{width:91.6667%}.pure-u-xl-23-24{width:95.8333%}.pure-u-xl-1,.pure-u-xl-1-1,.pure-u-xl-24-24,.pure-u-xl-5-5{width:100%}}
\ No newline at end of file
+@media screen and (min-width:64em){.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-1-12,.pure-u-lg-1-2,.pure-u-lg-1-24,.pure-u-lg-1-3,.pure-u-lg-1-4,.pure-u-lg-1-5,.pure-u-lg-1-6,.pure-u-lg-1-8,.pure-u-lg-10-24,.pure-u-lg-11-12,.pure-u-lg-11-24,.pure-u-lg-12-24,.pure-u-lg-13-24,.pure-u-lg-14-24,.pure-u-lg-15-24,.pure-u-lg-16-24,.pure-u-lg-17-24,.pure-u-lg-18-24,.pure-u-lg-19-24,.pure-u-lg-2-24,.pure-u-lg-2-3,.pure-u-lg-2-5,.pure-u-lg-20-24,.pure-u-lg-21-24,.pure-u-lg-22-24,.pure-u-lg-23-24,.pure-u-lg-24-24,.pure-u-lg-3-24,.pure-u-lg-3-4,.pure-u-lg-3-5,.pure-u-lg-3-8,.pure-u-lg-4-24,.pure-u-lg-4-5,.pure-u-lg-5-12,.pure-u-lg-5-24,.pure-u-lg-5-5,.pure-u-lg-5-6,.pure-u-lg-5-8,.pure-u-lg-6-24,.pure-u-lg-7-12,.pure-u-lg-7-24,.pure-u-lg-7-8,.pure-u-lg-8-24,.pure-u-lg-9-24{display:inline-block;zoom:1;letter-spacing:normal;word-spacing:normal;vertical-align:top;text-rendering:auto}.pure-u-lg-1-24{width:4.1667%}.pure-u-lg-1-12,.pure-u-lg-2-24{width:8.3333%}.pure-u-lg-1-8,.pure-u-lg-3-24{width:12.5%}.pure-u-lg-1-6,.pure-u-lg-4-24{width:16.6667%}.pure-u-lg-1-5{width:20%}.pure-u-lg-5-24{width:20.8333%}.pure-u-lg-1-4,.pure-u-lg-6-24{width:25%}.pure-u-lg-7-24{width:29.1667%}.pure-u-lg-1-3,.pure-u-lg-8-24{width:33.3333%}.pure-u-lg-3-8,.pure-u-lg-9-24{width:37.5%}.pure-u-lg-2-5{width:40%}.pure-u-lg-10-24,.pure-u-lg-5-12{width:41.6667%}.pure-u-lg-11-24{width:45.8333%}.pure-u-lg-1-2,.pure-u-lg-12-24{width:50%}.pure-u-lg-13-24{width:54.1667%}.pure-u-lg-14-24,.pure-u-lg-7-12{width:58.3333%}.pure-u-lg-3-5{width:60%}.pure-u-lg-15-24,.pure-u-lg-5-8{width:62.5%}.pure-u-lg-16-24,.pure-u-lg-2-3{width:66.6667%}.pure-u-lg-17-24{width:70.8333%}.pure-u-lg-18-24,.pure-u-lg-3-4{width:75%}.pure-u-lg-19-24{width:79.1667%}.pure-u-lg-4-5{width:80%}.pure-u-lg-20-24,.pure-u-lg-5-6{width:83.3333%}.pure-u-lg-21-24,.pure-u-lg-7-8{width:87.5%}.pure-u-lg-11-12,.pure-u-lg-22-24{width:91.6667%}.pure-u-lg-23-24{width:95.8333%}.pure-u-lg-1,.pure-u-lg-1-1,.pure-u-lg-24-24,.pure-u-lg-5-5{width:100%}}
\ No newline at end of file
diff --git a/code/ota.py b/code/ota.py
index 4726eb76..16b86f82 100755
--- a/code/ota.py
+++ b/code/ota.py
@@ -8,12 +8,13 @@
# -------------------------------------------------------------------------------
from __future__ import print_function
+import shutil
import argparse
import re
import socket
import subprocess
import sys
-from time import sleep
+import time
from zeroconf import ServiceBrowser, ServiceStateChange, Zeroconf
@@ -25,9 +26,11 @@ except NameError:
# -------------------------------------------------------------------------------
-devices = []
-description = "ESPurna OTA Manager v0.1"
+DISCOVER_TIMEOUT = 2
+description = "ESPurna OTA Manager v0.3"
+devices = []
+discover_last = 0
# -------------------------------------------------------------------------------
@@ -37,23 +40,26 @@ def on_service_state_change(zeroconf, service_type, name, state_change):
"""
if state_change is ServiceStateChange.Added:
+ discover_last = time.time()
info = zeroconf.get_service_info(service_type, name)
if info:
+
hostname = info.server.split(".")[0]
device = {
'hostname': hostname.upper(),
- 'ip': socket.inet_ntoa(info.address)
+ 'ip': socket.inet_ntoa(info.address),
+ 'mac': '',
+ 'app_name': '',
+ 'app_version': '',
+ 'target_board': '',
+ 'mem_size': '',
+ 'sdk_size': '',
+ 'free_space': '',
}
- device['mac'] = info.properties.get('mac', '')
- device['app'] = info.properties.get('app_name', '')
- device['version'] = info.properties.get('app_version', '')
- device['device'] = info.properties.get('target_board', '')
- if 'mem_size' in info.properties:
- device['mem_size'] = info.properties.get('mem_size')
- if 'sdk_size' in info.properties:
- device['sdk_size'] = info.properties.get('sdk_size')
- if 'free_space' in info.properties:
- device['free_space'] = info.properties.get('free_space')
+
+ for key, item in info.properties.items():
+ device[key.decode('UTF-8')] = item.decode('UTF-8');
+
devices.append(device)
@@ -84,9 +90,9 @@ def list_devices():
device.get('hostname', ''),
device.get('ip', ''),
device.get('mac', ''),
- device.get('app', ''),
- device.get('version', ''),
- device.get('device', ''),
+ device.get('app_name', ''),
+ device.get('app_version', ''),
+ device.get('target_board', ''),
device.get('mem_size', ''),
device.get('sdk_size', ''),
device.get('free_space', ''),
@@ -106,6 +112,11 @@ def get_boards():
boards.append(m.group(1))
return sorted(boards)
+def get_device_size(device):
+ if device.get('mem_size', 0) == device.get('sdk_size', 0):
+ return int(device.get('mem_size', 0)) / 1024
+ return 0
+
def get_empty_board():
"""
Returns the empty structure of a board to flash
@@ -121,28 +132,41 @@ def get_board_by_index(index):
if 1 <= index and index <= len(devices):
device = devices[index - 1]
board['hostname'] = device.get('hostname')
- board['board'] = device.get('device', '')
+ board['board'] = device.get('target_board', '')
board['ip'] = device.get('ip', '')
- board['size'] = int(device.get('mem_size', 0) if device.get('mem_size', 0) == device.get('sdk_size', 0) else 0) / 1024
+ board['size'] = get_device_size(device)
return board
-def get_board_by_hostname(hostname):
+def get_board_by_mac(mac):
"""
Returns the required data to flash a given board
"""
hostname = hostname.lower()
for device in devices:
- if device.get('hostname', '').lower() == hostname:
+ if device.get('mac', '').lower() == mac:
board = {}
board['hostname'] = device.get('hostname')
board['board'] = device.get('device')
- if not board['board']:
- return None
board['ip'] = device.get('ip')
- if not board['ip']:
+ board['size'] = get_device_size(device)
+ if not board['board'] or not board['ip'] or board['size'] == 0:
return None
- board['size'] = int(device.get('sdk_size', 0)) / 1024
- if board['size'] == 0:
+ return board
+ return None
+
+def get_board_by_hostname(hostname):
+ """
+ Returns the required data to flash a given board
+ """
+ hostname = hostname.lower()
+ for device in devices:
+ if device.get('hostname', '').lower() == hostname:
+ board = {}
+ board['hostname'] = device.get('hostname')
+ board['board'] = device.get('target_board')
+ board['ip'] = device.get('ip')
+ board['size'] = get_device_size(device)
+ if not board['board'] or not board['ip'] or board['size'] == 0:
return None
return board
return None
@@ -196,13 +220,20 @@ def input_board():
return board
+def boardname(board):
+ return board.get('hostname', board['ip'])
+
+def store(device, env):
+ source = ".pioenvs/%s/firmware.elf" % env
+ destination = ".pioenvs/elfs/%s.elf" % boardname(device).lower()
+ shutil.move(source, destination)
def run(device, env):
print("Building and flashing image over-the-air...")
command = "export ESPURNA_IP=\"%s\"; export ESPURNA_BOARD=\"%s\"; export ESPURNA_AUTH=\"%s\"; export ESPURNA_FLAGS=\"%s\"; platformio run --silent --environment %s -t upload"
command = command % (device['ip'], device['board'], device['auth'], device['flags'], env)
subprocess.check_call(command, shell=True)
-
+ store(device, env)
# -------------------------------------------------------------------------------
@@ -226,8 +257,10 @@ if __name__ == '__main__':
# Look for sevices
zeroconf = Zeroconf()
browser = ServiceBrowser(zeroconf, "_arduino._tcp.local.", handlers=[on_service_state_change])
- sleep(5)
- zeroconf.close()
+ discover_last = time.time()
+ while time.time() < discover_last + DISCOVER_TIMEOUT:
+ None
+ #zeroconf.close()
if len(devices) == 0:
print("Nothing found!\n")
@@ -280,7 +313,7 @@ if __name__ == '__main__':
# Summary
print()
- print("HOST = %s" % board.get('hostname', board['ip']))
+ print("HOST = %s" % boardname(board))
print("IP = %s" % board['ip'])
print("BOARD = %s" % board['board'])
print("AUTH = %s" % board['auth'])
diff --git a/code/package-lock.json b/code/package-lock.json
new file mode 100644
index 00000000..2327264c
--- /dev/null
+++ b/code/package-lock.json
@@ -0,0 +1,4314 @@
+{
+ "name": "esp8266-filesystem-builder",
+ "version": "0.2.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "ajv": {
+ "version": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "fast-deep-equal": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "fast-json-stable-stringify": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "json-schema-traverse": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz"
+ }
+ },
+ "align-text": {
+ "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "amdefine": {
+ "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-colors": {
+ "version": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "integrity": "sha1-Y3S03V1HGP884npnGjscrQdxMqk=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz"
+ }
+ },
+ "ansi-gray": {
+ "version": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz"
+ }
+ },
+ "ansi-regex": {
+ "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "ansi-wrap": {
+ "version": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "any-promise": {
+ "version": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-differ": {
+ "version": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"
+ }
+ },
+ "array-uniq": {
+ "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
+ "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ }
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
+ }
+ },
+ "beeper": {
+ "version": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "binaryextensions": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz",
+ "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==",
+ "dev": true
+ },
+ "boolbase": {
+ "version": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boom": {
+ "version": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
+ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
+ "dev": true,
+ "requires": {
+ "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz"
+ }
+ },
+ "brace-expansion": {
+ "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ }
+ },
+ "braces": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
+ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "kind-of": "6.0.2",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.1",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "buffers": {
+ "version": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
+ "dev": true
+ },
+ "bufferstreams": {
+ "version": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.3.tgz",
+ "integrity": "sha1-qFFawCT6kOj6fVjBGxPeofKKvnI=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
+ "integrity": "sha1-yUbD9H+n2Oq8C2FQ9KEvaaRXQHE=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"
+ }
+ }
+ }
+ },
+ "bulk-require": {
+ "version": "https://registry.npmjs.org/bulk-require/-/bulk-require-1.0.1.tgz",
+ "integrity": "sha1-yz0DnmmBOaRE/FdLJh1rOyz0TIk=",
+ "dev": true,
+ "requires": {
+ "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz"
+ }
+ },
+ "bytes": {
+ "version": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "camel-case": {
+ "version": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "requires": {
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz"
+ }
+ },
+ "camelcase": {
+ "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "center-align": {
+ "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz"
+ },
+ "dependencies": {
+ "lazy-cache": {
+ "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz"
+ }
+ },
+ "change-case": {
+ "version": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz",
+ "integrity": "sha1-/Uh0bM4C8D8KZyV30dOo3C7OsDc=",
+ "dev": true,
+ "requires": {
+ "camel-case": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "constant-case": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz",
+ "dot-case": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz",
+ "header-case": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz",
+ "is-lower-case": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz",
+ "is-upper-case": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz",
+ "lower-case": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "lower-case-first": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz",
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "param-case": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "pascal-case": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz",
+ "path-case": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz",
+ "sentence-case": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz",
+ "snake-case": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz",
+ "swap-case": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz",
+ "title-case": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz",
+ "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "upper-case-first": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz"
+ }
+ },
+ "cheerio": {
+ "version": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+ "dev": true,
+ "requires": {
+ "css-select": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "lodash.assignin": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "lodash.bind": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "lodash.defaults": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "lodash.filter": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "lodash.flatten": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "lodash.foreach": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "lodash.map": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "lodash.merge": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+ "lodash.pick": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "lodash.reduce": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "lodash.reject": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "lodash.some": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz"
+ }
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "dev": true,
+ "requires": {
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "define-property": "0.2.5",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "cliui": {
+ "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
+ }
+ },
+ "clone": {
+ "version": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
+ "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=",
+ "dev": true,
+ "requires": {
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ }
+ }
+ },
+ "co": {
+ "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "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=",
+ "dev": true
+ },
+ "color-support": {
+ "version": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha1-k4NDeaHMmgxh+C9S8NBDIiUb1aI=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
+ }
+ },
+ "commander": {
+ "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "constant-case": {
+ "version": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz",
+ "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=",
+ "dev": true,
+ "requires": {
+ "snake-case": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz",
+ "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "crass": {
+ "version": "0.12.3",
+ "resolved": "https://registry.npmjs.org/crass/-/crass-0.12.3.tgz",
+ "integrity": "sha512-0gOYgXVAr6KF7xNUv/+QmTrVsMowpuYu9y1SWzMHFrERzxTygqpeBTXI9CMg1NI1AwQ96ZrkaGHVT9eTC66+Tw==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1",
+ "strong-data-uri": "1.0.5",
+ "svgo": "0.7.2"
+ }
+ },
+ "cryptiles": {
+ "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
+ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
+ "dev": true,
+ "requires": {
+ "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
+ "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=",
+ "dev": true,
+ "requires": {
+ "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz"
+ }
+ }
+ }
+ },
+ "css-select": {
+ "version": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "css-what": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "nth-check": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz"
+ },
+ "dependencies": {
+ "domutils": {
+ "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
+ }
+ }
+ }
+ },
+ "css-what": {
+ "version": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "csslint": {
+ "version": "https://registry.npmjs.org/csslint/-/csslint-1.0.5.tgz",
+ "integrity": "sha1-Gcw+2jIhYP0/cjKvHLKjYOiYouk=",
+ "dev": true,
+ "requires": {
+ "clone": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "parserlib": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ }
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "dev": true,
+ "requires": {
+ "clap": "1.2.3",
+ "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
+ }
+ },
+ "csswring": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/csswring/-/csswring-6.0.3.tgz",
+ "integrity": "sha512-Cz2/8nVqI6li/t4hfZbPTQDF7FkE4qP534j1xbBnLxA1cYl51ZRSg0PTDVWzbzlSsR+tfV2Iv/w+0cTmfKS7JA==",
+ "dev": true,
+ "requires": {
+ "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "onecolor": "3.0.5",
+ "postcss": "6.0.21"
+ }
+ },
+ "dashdash": {
+ "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
+ }
+ },
+ "dateformat": {
+ "version": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "deap": {
+ "version": "https://registry.npmjs.org/deap/-/deap-1.0.0.tgz",
+ "integrity": "sha1-sUi/gkMKJ2mbdIOgPra2dYW/yIg=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
+ }
+ },
+ "del": {
+ "version": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "is-path-cwd": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "is-path-in-cwd": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz"
+ }
+ },
+ "delayed-stream": {
+ "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "deprecated": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "dom-serializer": {
+ "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
+ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
+ }
+ },
+ "domutils": {
+ "version": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
+ }
+ },
+ "dot-case": {
+ "version": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz",
+ "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=",
+ "dev": true,
+ "requires": {
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz"
+ }
+ },
+ "duplexer": {
+ "version": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
+ }
+ },
+ "editions": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz",
+ "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "dev": true,
+ "requires": {
+ "once": "1.3.3"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+ }
+ }
+ }
+ },
+ "entities": {
+ "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "event-stream": {
+ "version": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
+ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+ "dev": true,
+ "requires": {
+ "duplexer": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "from": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "map-stream": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+ "pause-stream": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "split": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "stream-combiner": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1"
+ }
+ },
+ "extend": {
+ "version": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fancy-log": {
+ "version": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "color-support": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "time-stamp": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-index": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "dev": true
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "1.0.0",
+ "is-glob": "3.1.0",
+ "micromatch": "3.1.9",
+ "resolve-dir": "1.0.1"
+ }
+ },
+ "fined": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "object.defaults": "1.1.0",
+ "object.pick": "1.3.0",
+ "parse-filepath": "1.0.2"
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flagged-respawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+ "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "forever-agent": {
+ "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dev": true,
+ "requires": {
+ "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "from": {
+ "version": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "gaze": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "0.1.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
+ }
+ },
+ "glob": {
+ "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+ }
+ },
+ "glob-stream": {
+ "version": "3.1.18",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "dev": true,
+ "requires": {
+ "glob": "4.5.3",
+ "glob2base": "0.0.12",
+ "minimatch": "2.0.10",
+ "ordered-read-streams": "0.1.0",
+ "through2": "0.6.5",
+ "unique-stream": "1.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "minimatch": "2.0.10",
+ "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
+ }
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "dev": true,
+ "requires": {
+ "gaze": "0.5.2"
+ }
+ },
+ "glob2base": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "dev": true,
+ "requires": {
+ "find-index": "0.1.1"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "1.0.2",
+ "is-windows": "1.0.2",
+ "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=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "homedir-polyfill": "1.0.1",
+ "ini": "1.3.5",
+ "is-windows": "1.0.2",
+ "which": "1.3.0"
+ }
+ },
+ "globby": {
+ "version": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz"
+ }
+ },
+ "globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "3.1.21",
+ "lodash": "1.0.2",
+ "minimatch": "0.2.14"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "1.2.3",
+ "inherits": "1.0.2",
+ "minimatch": "0.2.14"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ }
+ }
+ },
+ "glogg": {
+ "version": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+ "integrity": "sha1-3PdY5EeJzD89MsHzVio2duajSBA=",
+ "dev": true,
+ "requires": {
+ "sparkles": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz"
+ }
+ },
+ "graceful-fs": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+ "dev": true,
+ "requires": {
+ "natives": "1.1.1"
+ }
+ },
+ "graceful-readlink": {
+ "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "gulp": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+ "dev": true,
+ "requires": {
+ "archy": "1.0.0",
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "deprecated": "0.0.1",
+ "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "interpret": "1.1.0",
+ "liftoff": "2.5.0",
+ "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "orchestrator": "0.3.8",
+ "pretty-hrtime": "1.0.3",
+ "semver": "4.3.6",
+ "tildify": "1.2.0",
+ "v8flags": "2.1.1",
+ "vinyl-fs": "0.3.14"
+ }
+ },
+ "gulp-base64-favicon": {
+ "version": "https://registry.npmjs.org/gulp-base64-favicon/-/gulp-base64-favicon-1.0.2.tgz",
+ "integrity": "sha1-Bz9GpO4p35HpXXon9w7I45gsah0=",
+ "dev": true
+ },
+ "gulp-crass": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/gulp-crass/-/gulp-crass-0.2.2.tgz",
+ "integrity": "sha1-RtD38aTamVwiG2ftxJNw95i/eNs=",
+ "dev": true,
+ "requires": {
+ "crass": "0.12.3",
+ "csswring": "6.0.3",
+ "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz"
+ }
+ },
+ "gulp-css-base64": {
+ "version": "https://registry.npmjs.org/gulp-css-base64/-/gulp-css-base64-1.3.4.tgz",
+ "integrity": "sha1-r8pF6DQBBF9HLGe3dtGxUU4RSJ8=",
+ "dev": true,
+ "requires": {
+ "async": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "buffers": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "mime": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "request": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz"
+ }
+ },
+ "gulp-csslint": {
+ "version": "https://registry.npmjs.org/gulp-csslint/-/gulp-csslint-1.0.1.tgz",
+ "integrity": "sha1-ESqQj3rvmO/Ce3vQCAHxOne+y5M=",
+ "dev": true,
+ "requires": {
+ "csslint": "https://registry.npmjs.org/csslint/-/csslint-1.0.5.tgz",
+ "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "plugin-error": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "rcloader": "https://registry.npmjs.org/rcloader/-/rcloader-0.2.2.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "plugin-error": {
+ "version": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha1-dwFr2JGdCsN3/c3QMiMolTyleBw=",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "arr-union": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz"
+ }
+ },
+ "replace-ext": {
+ "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
+ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "dev": true,
+ "requires": {
+ "clone": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "clone-buffer": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "cloneable-readable": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
+ "remove-trailing-separator": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz"
+ }
+ }
+ }
+ },
+ "gulp-gzip": {
+ "version": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz",
+ "integrity": "sha1-BCKpQBQkhlW1sanuocKr7h1PQzc=",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "bytes": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "plugin-error": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "stream-to-array": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz"
+ },
+ "dependencies": {
+ "plugin-error": {
+ "version": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha1-dwFr2JGdCsN3/c3QMiMolTyleBw=",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "arr-union": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz"
+ }
+ }
+ }
+ },
+ "gulp-htmllint": {
+ "version": "https://registry.npmjs.org/gulp-htmllint/-/gulp-htmllint-0.0.14.tgz",
+ "integrity": "sha1-fobrpgVmjfsVstLVAZX+VqdVhaI=",
+ "dev": true,
+ "requires": {
+ "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "htmllint": "https://registry.npmjs.org/htmllint/-/htmllint-0.7.2.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz"
+ }
+ },
+ "gulp-htmlmin": {
+ "version": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-2.0.0.tgz",
+ "integrity": "sha1-EspjV2Q3qt/IWdKt36QcOO/OqGk=",
+ "dev": true,
+ "requires": {
+ "bufferstreams": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.3.tgz",
+ "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "html-minifier": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
+ "tryit": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
+ "integrity": "sha1-yUbD9H+n2Oq8C2FQ9KEvaaRXQHE=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"
+ }
+ }
+ }
+ },
+ "gulp-inline": {
+ "version": "https://registry.npmjs.org/gulp-inline/-/gulp-inline-0.1.3.tgz",
+ "integrity": "sha1-iYdqnJNORR12u8tkzAJErA5ZtHw=",
+ "dev": true,
+ "requires": {
+ "cheerio": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "event-stream": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
+ "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz"
+ }
+ },
+ "gulp-replace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.0.0.tgz",
+ "integrity": "sha512-lgdmrFSI1SdhNMXZQbrC75MOl1UjYWlOWNbNRnz+F/KHmgxt3l6XstBoAYIdadwETFyG/6i+vWUSCawdC3pqOw==",
+ "dev": true,
+ "requires": {
+ "istextorbinary": "2.2.1",
+ "readable-stream": "2.3.6",
+ "replacestream": "4.0.3"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "1.0.0",
+ "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"
+ }
+ }
+ }
+ },
+ "gulp-uglify": {
+ "version": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz",
+ "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=",
+ "dev": true,
+ "requires": {
+ "deap": "https://registry.npmjs.org/deap/-/deap-1.0.0.tgz",
+ "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
+ "uglify-save-license": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz",
+ "vinyl-sourcemaps-apply": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
+ }
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "beeper": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "gulplog": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "has-gulplog": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "lodash._reescape": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "lodash._reevaluate": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "lodash.template": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "multipipe": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ }
+ }
+ },
+ "gulplog": {
+ "version": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz"
+ }
+ },
+ "har-schema": {
+ "version": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "dev": true,
+ "requires": {
+ "ajv": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "har-schema": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"
+ }
+ },
+ "has-ansi": {
+ "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz"
+ }
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "hawk": {
+ "version": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
+ "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=",
+ "dev": true,
+ "requires": {
+ "boom": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
+ "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
+ "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
+ "sntp": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz"
+ }
+ },
+ "he": {
+ "version": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "header-case": {
+ "version": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz",
+ "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=",
+ "dev": true,
+ "requires": {
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz"
+ }
+ },
+ "hoek": {
+ "version": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
+ "integrity": "sha1-ljRQKqEsRF3Vp8VzS1cruHOKrLs=",
+ "dev": true
+ },
+ "homedir-polyfill": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "1.0.0"
+ }
+ },
+ "html-minifier": {
+ "version": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz",
+ "integrity": "sha1-kFHW/LvPIU7TB+GtdPQyu5rWVcw=",
+ "dev": true,
+ "requires": {
+ "change-case": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz",
+ "clean-css": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
+ "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "he": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "ncname": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+ "relateurl": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz"
+ },
+ "dependencies": {
+ "clean-css": {
+ "version": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
+ "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "dev": true,
+ "requires": {
+ "commander": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz"
+ }
+ }
+ }
+ },
+ "htmllint": {
+ "version": "https://registry.npmjs.org/htmllint/-/htmllint-0.7.2.tgz",
+ "integrity": "sha1-AuR0FvotvrMLXiw+1mfopUB6jzQ=",
+ "dev": true,
+ "requires": {
+ "bulk-require": "https://registry.npmjs.org/bulk-require/-/bulk-require-1.0.1.tgz",
+ "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "promise": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha1-maktZcAnLevoyWtgV7yPv6O+1RE=",
+ "dev": true
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "domhandler": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
+ "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
+ "integrity": "sha1-yUbD9H+n2Oq8C2FQ9KEvaaRXQHE=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz"
+ }
+ },
+ "inflight": {
+ "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+ }
+ },
+ "inherits": {
+ "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "1.0.0",
+ "is-windows": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-buffer": {
+ "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-lower-case": {
+ "version": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz",
+ "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=",
+ "dev": true,
+ "requires": {
+ "lower-case": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-path-cwd": {
+ "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz"
+ }
+ },
+ "is-path-inside": {
+ "version": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz"
+ }
+ },
+ "is-plain-object": {
+ "version": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+ "dev": true,
+ "requires": {
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
+ }
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "0.1.2"
+ }
+ },
+ "is-upper-case": {
+ "version": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz",
+ "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=",
+ "dev": true,
+ "requires": {
+ "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istextorbinary": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz",
+ "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==",
+ "dev": true,
+ "requires": {
+ "binaryextensions": "2.1.1",
+ "editions": "1.3.4",
+ "textextensions": "2.2.0"
+ }
+ },
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.10",
+ "esprima": "2.7.3"
+ }
+ },
+ "jsbn": {
+ "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "verror": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "lazy-cache": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
+ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
+ "dev": true,
+ "requires": {
+ "set-getter": "0.1.0"
+ }
+ },
+ "liftoff": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "dev": true,
+ "requires": {
+ "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "findup-sync": "2.0.0",
+ "fined": "1.1.0",
+ "flagged-respawn": "1.0.0",
+ "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "object.map": "1.0.1",
+ "rechoir": "0.6.2",
+ "resolve": "1.5.0"
+ }
+ },
+ "lodash": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "lodash._basecopy": {
+ "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true
+ },
+ "lodash.assignin": {
+ "version": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
+ "dev": true
+ },
+ "lodash.bind": {
+ "version": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.defaults": {
+ "version": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz"
+ }
+ },
+ "lodash.filter": {
+ "version": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
+ "dev": true
+ },
+ "lodash.flatten": {
+ "version": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "dev": true
+ },
+ "lodash.foreach": {
+ "version": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
+ "dev": true
+ },
+ "lodash.isarguments": {
+ "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.isobject": {
+ "version": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
+ "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "lodash.isarguments": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "lodash.isarray": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz"
+ }
+ },
+ "lodash.map": {
+ "version": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+ "integrity": "sha1-rcJdnLmbk5HFliTzefu6YNcRHVQ=",
+ "dev": true
+ },
+ "lodash.pick": {
+ "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+ "dev": true
+ },
+ "lodash.reduce": {
+ "version": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
+ "dev": true
+ },
+ "lodash.reject": {
+ "version": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "lodash._basetostring": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "lodash._basevalues": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "lodash.restparam": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "lodash.templatesettings": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz"
+ }
+ },
+ "longest": {
+ "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "lower-case": {
+ "version": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lower-case-first": {
+ "version": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz",
+ "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=",
+ "dev": true,
+ "requires": {
+ "lower-case": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz"
+ }
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "make-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz",
+ "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-stream": {
+ "version": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz",
+ "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "array-unique": "0.3.2",
+ "braces": "2.3.1",
+ "define-property": "2.0.2",
+ "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.2"
+ }
+ },
+ "mime": {
+ "version": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha1-o0kgUKXLm2NFBUHjnZeI0icng9s=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha1-bzI/YKg9ERRvgx/xH9ZuL+VQO7g=",
+ "dev": true,
+ "requires": {
+ "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz"
+ }
+ },
+ "minimatch": {
+ "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
+ }
+ },
+ "minimist": {
+ "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "multipipe": {
+ "version": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz"
+ }
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.2"
+ }
+ },
+ "natives": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.1.tgz",
+ "integrity": "sha512-8eRaxn8u/4wN8tGkhlc2cgwwvOLMLUMUn4IYTexMgWd+LyUDfeXVkk2ygQR0hvIHbJQXgHujia3ieUUDwNGkEA==",
+ "dev": true
+ },
+ "ncname": {
+ "version": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+ "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+ "dev": true,
+ "requires": {
+ "xml-char-classes": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz"
+ }
+ },
+ "no-case": {
+ "version": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
+ "dev": true,
+ "requires": {
+ "lower-case": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz"
+ }
+ },
+ "nth-check": {
+ "version": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "dev": true,
+ "requires": {
+ "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
+ }
+ },
+ "oauth-sign": {
+ "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "1.0.1",
+ "array-slice": "1.1.0",
+ "for-own": "1.0.0",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "1.0.0",
+ "make-iterator": "1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
+ }
+ },
+ "once": {
+ "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+ }
+ },
+ "onecolor": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.5.tgz",
+ "integrity": "sha1-Nu/zIgE3nv3xGA+0ReUajiQl+fY=",
+ "dev": true
+ },
+ "orchestrator": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "0.1.5",
+ "sequencify": "0.0.7",
+ "stream-consume": "0.1.1"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "param-case": {
+ "version": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "requires": {
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "1.0.0",
+ "map-cache": "0.2.2",
+ "path-root": "0.1.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parserlib": {
+ "version": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz",
+ "integrity": "sha1-pkz6ckBiQ0/fw1HJpOwtkrlMBvQ=",
+ "dev": true
+ },
+ "pascal-case": {
+ "version": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz",
+ "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=",
+ "dev": true,
+ "requires": {
+ "camel-case": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "upper-case-first": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-case": {
+ "version": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz",
+ "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=",
+ "dev": true,
+ "requires": {
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz"
+ }
+ },
+ "path-is-absolute": {
+ "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "0.1.2"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "pause-stream": {
+ "version": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "dev": true,
+ "requires": {
+ "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
+ }
+ },
+ "performance-now": {
+ "version": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz"
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "postcss": {
+ "version": "6.0.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.21.tgz",
+ "integrity": "sha512-y/bKfbQz2Nn/QBC08bwvYUxEFOVGfPIUOTsJ2CK5inzlXW9SdYR1x4pEsG9blRAF/PX+wRNdOah+gx/hv4q7dw==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "source-map": "0.6.1",
+ "supports-color": "5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "supports-color": "5.3.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=",
+ "dev": true
+ },
+ "promise": {
+ "version": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz",
+ "integrity": "sha1-5F1osAoXZHttpxG/he1u1HII9FA=",
+ "dev": true,
+ "requires": {
+ "asap": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz"
+ }
+ },
+ "punycode": {
+ "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=",
+ "dev": true
+ },
+ "rcfinder": {
+ "version": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz",
+ "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=",
+ "dev": true,
+ "requires": {
+ "lodash.clonedeep": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz"
+ }
+ },
+ "rcloader": {
+ "version": "https://registry.npmjs.org/rcloader/-/rcloader-0.2.2.tgz",
+ "integrity": "sha1-WNIpi0YtC5v9ITPSoex0+9cFxxc=",
+ "dev": true,
+ "requires": {
+ "lodash.assign": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "lodash.isobject": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
+ "lodash.merge": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+ "rcfinder": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz"
+ }
+ },
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.5.0"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "relateurl": {
+ "version": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "replacestream": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
+ "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "1.0.0",
+ "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"
+ }
+ }
+ }
+ },
+ "request": {
+ "version": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
+ "integrity": "sha1-ygtl2gLtYpNYh4COb1EDgQNOM1Y=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "hawk": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
+ "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "performance-now": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "qs": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "global-modules": "1.0.0"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "right-align": {
+ "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz"
+ }
+ },
+ "rimraf": {
+ "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
+ "dev": true,
+ "requires": {
+ "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz"
+ }
+ },
+ "safe-buffer": {
+ "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ },
+ "sentence-case": {
+ "version": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz",
+ "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=",
+ "dev": true,
+ "requires": {
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "upper-case-first": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz"
+ }
+ },
+ "sequencify": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
+ },
+ "set-getter": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz",
+ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=",
+ "dev": true,
+ "requires": {
+ "to-object-path": "0.3.0"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "snake-case": {
+ "version": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz",
+ "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=",
+ "dev": true,
+ "requires": {
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz",
+ "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "source-map-resolve": "0.5.1",
+ "use": "2.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "sntp": {
+ "version": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
+ "integrity": "sha1-LGzsFP7cIiJznK+bXD2F0cxaLMg=",
+ "dev": true,
+ "requires": {
+ "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz"
+ }
+ },
+ "source-map": {
+ "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.0.3",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
+ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+ "dev": true
+ },
+ "split": {
+ "version": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "dev": true,
+ "requires": {
+ "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "stream-combiner": {
+ "version": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+ "dev": true,
+ "requires": {
+ "duplexer": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz"
+ }
+ },
+ "stream-consume": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+ "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+ "dev": true
+ },
+ "stream-to-array": {
+ "version": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
+ "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=",
+ "dev": true,
+ "requires": {
+ "any-promise": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "stringstream": {
+ "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
+ }
+ },
+ "strip-bom": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "is-utf8": "0.2.1"
+ }
+ },
+ "strong-data-uri": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/strong-data-uri/-/strong-data-uri-1.0.5.tgz",
+ "integrity": "sha512-1iRpXhQLMTVwYEoR3w4k2fDolmFjFxBrCY0foxLLZFja7sKwKCyw1U4MzPQIQ0SPnXLm8R6rykvEpsdBE9TGqw==",
+ "dev": true,
+ "requires": {
+ "truncate": "2.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "dev": true,
+ "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"
+ }
+ },
+ "swap-case": {
+ "version": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz",
+ "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=",
+ "dev": true,
+ "requires": {
+ "lower-case": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz"
+ }
+ },
+ "textextensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz",
+ "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==",
+ "dev": true
+ },
+ "through": {
+ "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz",
+ "integrity": "sha1-yUbD9H+n2Oq8C2FQ9KEvaaRXQHE=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+ }
+ },
+ "string_decoder": {
+ "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"
+ }
+ }
+ }
+ },
+ "tildify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "time-stamp": {
+ "version": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "title-case": {
+ "version": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz",
+ "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=",
+ "dev": true,
+ "requires": {
+ "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz"
+ }
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
+ }
+ },
+ "tough-cookie": {
+ "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha1-7GDO44rGdQY//JelwYlwV47oNlU=",
+ "dev": true,
+ "requires": {
+ "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz"
+ }
+ },
+ "truncate": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/truncate/-/truncate-2.0.1.tgz",
+ "integrity": "sha1-3RptFWMFFWY9hHX28k7fL4AOuxs=",
+ "dev": true
+ },
+ "tryit": {
+ "version": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz"
+ }
+ },
+ "tweetnacl": {
+ "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "uglify-js": {
+ "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
+ "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
+ "dev": true,
+ "requires": {
+ "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz"
+ },
+ "dependencies": {
+ "async": {
+ "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ },
+ "uglify-save-license": {
+ "version": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz",
+ "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=",
+ "dev": true
+ },
+ "uglify-to-browserify": {
+ "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "unique-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "upper-case": {
+ "version": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "upper-case-first": {
+ "version": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz",
+ "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=",
+ "dev": true,
+ "requires": {
+ "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz",
+ "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "lazy-cache": "2.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "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=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "verror": {
+ "version": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
+ }
+ },
+ "vinyl": {
+ "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz"
+ }
+ },
+ "vinyl-fs": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+ "dev": true,
+ "requires": {
+ "defaults": "1.0.3",
+ "glob-stream": "3.1.18",
+ "glob-watcher": "0.0.6",
+ "graceful-fs": "3.0.11",
+ "mkdirp": "0.5.1",
+ "strip-bom": "1.0.0",
+ "through2": "0.6.5",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz"
+ }
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz"
+ }
+ }
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz"
+ }
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xml-char-classes": {
+ "version": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+ "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz"
+ }
+ }
+ }
+}
diff --git a/code/package.json b/code/package.json
index 0d2a39c5..b44335c6 100644
--- a/code/package.json
+++ b/code/package.json
@@ -1,23 +1,23 @@
{
"name": "esp8266-filesystem-builder",
- "version": "0.2.0",
+ "version": "0.2.1",
"description": "Gulp based build system for ESP8266 file system files",
"main": "gulpfile.js",
"author": "Xose Pérez ",
"license": "GPL-3.0",
"devDependencies": {
"del": "^2.2.1",
+ "fancy-log": "^1.3.2",
"gulp": "^3.9.1",
"gulp-base64-favicon": "^1.0.2",
- "gulp-clean-css": "^3.4.2",
+ "gulp-crass": "^0.2.2",
"gulp-css-base64": "^1.3.4",
"gulp-csslint": "^1.0.0",
"gulp-gzip": "^1.4.0",
"gulp-htmllint": "0.0.14",
"gulp-htmlmin": "^2.0.0",
"gulp-inline": "^0.1.1",
- "gulp-uglify": "^1.5.3",
- "gulp-util": "^3.0.8"
- },
- "dependencies": {}
+ "gulp-replace": "^1.0.0",
+ "gulp-uglify": "^1.5.3"
+ }
}
diff --git a/code/platformio.ini b/code/platformio.ini
index de624ad3..e5056070 100644
--- a/code/platformio.ini
+++ b/code/platformio.ini
@@ -4,61 +4,173 @@ src_dir = espurna
data_dir = espurna/data
[common]
-#platform = espressif8266
-platform = https://github.com/platformio/platform-espressif8266.git#v1.5.0
-build_flags = -g -DMQTT_MAX_PACKET_SIZE=400 ${env.ESPURNA_FLAGS}
+# ------------------------------------------------------------------------------
+# PLATFORM:
+# !! DO NOT confuse platformio's ESP8266 development platform with Arduino core for ESP8266
+# We use platformIO 1.5.0 as default
+#
+# platformIO 1.5.0 = arduino core 2.3.0
+# platformIO 1.6.0 = arduino core 2.4.0
+# platformIO 1.7.0 = arduino core 2.4.1
+# ------------------------------------------------------------------------------
+platform_150 = espressif8266@1.5.0
+platform_160 = espressif8266@1.6.0
+platform_170 = espressif8266@1.7.0
+platform = ${common.platform_150}
+
+# ------------------------------------------------------------------------------
+# FLAGS: DEBUG
+#
+# ------------------------------------------------------------------------------
debug_flags = -DDEBUG_ESP_CORE -DDEBUG_ESP_SSL -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_TLS_MEM
-build_flags_512k = ${common.build_flags} -Wl,-Tesp8266.flash.512k0.ld
-build_flags_1m = ${common.build_flags} -Wl,-Tesp8266.flash.1m0.ld
+
+# ------------------------------------------------------------------------------
+# FLAGS: build flags
+# build flags for 512k/1m ESP's are different because we use Linker Scripts to adjust flash split
+# 512 KB = 487 KB sketch, 20 KB eeprom
+# 1 MB = 999 KB sketch, 20 KB eeprom
+#
+# Available lwIP variants (macros):
+# -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH v1.4 Higher Bandwidth (default)
+# -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY v2 Lower Memory
+# -DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH v2 Higher Bandwidth
+# ------------------------------------------------------------------------------
+build_flags = -g -w -DMQTT_MAX_PACKET_SIZE=400 -DNO_GLOBAL_EEPROM ${env.ESPURNA_FLAGS} -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
+build_flags_512k = ${common.build_flags} -Wl,-Teagle.flash.512k0m1s.ld
+build_flags_1m0m = ${common.build_flags} -Wl,-Teagle.flash.1m0m1s.ld
+build_flags_4m1m = ${common.build_flags} -Wl,-Teagle.flash.4m1m4s.ld
+build_flags_4m3m = ${common.build_flags} -Wl,-Teagle.flash.4m3m4s.ld
+
+# ------------------------------------------------------------------------------
+# GLOBALS:
+# ------------------------------------------------------------------------------
+# IP address when using OTA
+upload_port = "192.168.4.1"
+upload_flags = --auth=fibonacci --port 8266
+#upload_port = "${env.ESPURNA_IP}"
+#upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+
+# ------------------------------------------------------------------------------
+# LIBRARIES: required dependencies
+# Please note that we don't always use the latest version of a library.
+# ------------------------------------------------------------------------------
lib_deps =
ArduinoJson
https://github.com/marvinroger/async-mqtt-client#v0.8.1
Brzo I2C
https://bitbucket.org/xoseperez/debounceevent.git#2.0.1
+ https://github.com/xoseperez/eeprom_rotate#0.9.1
Embedis
- https://github.com/krosk93/espsoftwareserial#a770677
- https://github.com/me-no-dev/ESPAsyncTCP#a57560d
- https://github.com/me-no-dev/ESPAsyncWebServer#313f337
+ https://github.com/plerup/espsoftwareserial#3.4.1
+ https://github.com/me-no-dev/ESPAsyncTCP#55cd520
+ https://github.com/me-no-dev/ESPAsyncWebServer#05306e4
https://bitbucket.org/xoseperez/fauxmoesp.git#2.4.2
- https://bitbucket.org/xoseperez/hlw8012.git#1.1.0
+ https://github.com/xoseperez/hlw8012.git#1.1.0
https://github.com/markszabo/IRremoteESP8266#v2.2.0
- https://bitbucket.org/xoseperez/justwifi.git#1.1.6
+ https://github.com/xoseperez/justwifi.git#2.0.0
https://github.com/madpilot/mDNSResolver#4cfcda1
- https://github.com/xoseperez/my92xx#3.0.0
+ https://github.com/xoseperez/my92xx#3.0.1
https://bitbucket.org/xoseperez/nofuss.git#0.2.5
- https://github.com/xoseperez/NtpClient.git#b35e249
+ https://github.com/xoseperez/NtpClient.git#0016a59
OneWire
- PMS Library
+ PZEM004T
PubSubClient
- https://github.com/xoseperez/RemoteSwitch-arduino-library.git
+ rc-switch
https://github.com/xoseperez/Time
lib_ignore =
extra_scripts = extra_scripts.py
+# ------------------------------------------------------------------------------
+# ESPURNA CORE BUILDS
# ------------------------------------------------------------------------------
[env:espurna-core-1MB]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC -DESPURNA_CORE
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DESPURNA_CORE
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:espurna-core-4MB]
platform = ${common.platform}
framework = arduino
board = d1_mini
-board_flash_mode = dout
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DESPURNA_CORE
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+# ------------------------------------------------------------------------------
+# GENERIC OTA ENVIRONMENTS
+# ------------------------------------------------------------------------------
+
+[env:esp8266-1m-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -D${env.ESPURNA_BOARD}
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:esp8266-4m-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -D${env.ESPURNA_BOARD}
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+# ------------------------------------------------------------------------------
+# SPECIAL BUILDS - DO. NOT. USE. ever ---
+# ------------------------------------------------------------------------------
+[env:travis01]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DTRAVIS01
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:travis02]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DTRAVIS02
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:travis03]
+platform = espressif8266@1.6.0
+framework = arduino
+board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DITEAD_SONOFF_BASIC -DESPURNA_CORE
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DTRAVIS03 -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
+# ------------------------------------------------------------------------------
+# DEVELOPMENT BOARDS
# ------------------------------------------------------------------------------
[env:wemos-d1mini-relayshield]
@@ -67,20 +179,20 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH
+build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH
upload_speed = 460800
-monitor_baud = 115200
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:wemos-d1mini-relayshield-ssl]
-platform = espressif8266_stage
+platform = espressif8266@1.6.0
framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1
+build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1
upload_speed = 460800
-monitor_baud = 115200
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:wemos-d1mini-relayshield-ota]
@@ -89,10 +201,10 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH
+build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_MINI_RELAYSHIELD -DDEBUG_FAUXMO=Serial -DNOWSAUTH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
extra_scripts = ${common.extra_scripts}
[env:nodemcu-lolin]
@@ -101,20 +213,20 @@ framework = arduino
board = nodemcuv2
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH
+build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH
upload_speed = 460800
-monitor_baud = 115200
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:nodemcu-lolin-ssl]
-platform = espressif8266_stage
+platform = espressif8266@1.6.0
framework = arduino
board = nodemcuv2
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1
+build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH -DASYNC_TCP_SSL_ENABLED=1
upload_speed = 460800
-monitor_baud = 115200
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:nodemcu-lolin-ota]
@@ -123,13 +235,15 @@ framework = arduino
board = nodemcuv2
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH
+build_flags = ${common.build_flags_4m1m} -DNODEMCU_LOLIN -DDEBUG_FAUXMO=Serial -DNOWSAUTH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
+# ------------------------------------------------------------------------------
+# SPECIFIC BOARDS
# ------------------------------------------------------------------------------
[env:tinkerman-espurna-h06]
@@ -138,8 +252,8 @@ framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_H06
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H06
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:tinkerman-espurna-h06-ota]
@@ -148,11 +262,11 @@ framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_H06
+build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H06
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:tinkerman-espurna-h08]
@@ -161,8 +275,8 @@ framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_H08
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H08
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:tinkerman-espurna-h08-ota]
@@ -171,11 +285,11 @@ framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_H08
+build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_H08
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:tinkerman-espurna-switch]
@@ -184,8 +298,18 @@ framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DTINKERMAN_ESPURNA_SWITCH
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DTINKERMAN_ESPURNA_SWITCH
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:wemos-d1-tarpunashield]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DWEMOS_D1_TARPUNA_SHIELD
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
# ------------------------------------------------------------------------------
@@ -194,407 +318,457 @@ extra_scripts = ${common.extra_scripts}
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-basic-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-basic-dht]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-basic-dht-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDHT_SUPPORT=1
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-basic-dallas]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_BASIC -DDALLAS_SUPPORT=1
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_BASIC -DDALLAS_SUPPORT=1
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-rf]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RF
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RF
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-rf-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RF
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RF
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-th]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_TH
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TH
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-th-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_TH
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-pow]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_POW
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-pow-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_POW
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:itead-sonoff-pow-r2]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW_R2
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:itead-sonoff-pow-r2-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_POW_R2
+upload_speed = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-dual]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_DUAL
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-dual-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_DUAL
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-dual-r2]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_DUAL_R2
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL_R2
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-dual-ota-r2]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_DUAL_R2
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_DUAL_R2
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-4ch]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-4ch-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-4ch-pro]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH_PRO
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH_PRO
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-4ch-pro-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH_PRO
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_4CH_PRO
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-touch]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_TOUCH
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TOUCH
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-touch-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_TOUCH
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_TOUCH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-b1]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_B1
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_B1
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-b1-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_B1
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_B1
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-t1-1ch]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_1CH
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_1CH
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-t1-1ch-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_1CH
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_1CH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-t1-2ch]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_2CH
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_2CH
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-t1-2ch-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_2CH
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_2CH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-t1-3ch]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_3CH
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_3CH
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-t1-3ch-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_T1_3CH
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_T1_3CH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-led]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_LED
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_LED
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-led-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_LED
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_LED
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-rfbridge]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RFBRIDGE
-monitor_baud = 19200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE
+monitor_speed = 19200
extra_scripts = ${common.extra_scripts}
[env:itead-sonoff-rfbridge-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_RFBRIDGE
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=Algernon1 --port 8266
-monitor_baud = 19200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 19200
+extra_scripts = ${common.extra_scripts}
+
+[env:itead-sonoff-rfbridge-direct]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT
+monitor_speed = 19200
+extra_scripts = ${common.extra_scripts}
+
+[env:itead-sonoff-rfbridge-direct-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_RFBRIDGE -DRFB_DIRECT
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+monitor_speed = 19200
extra_scripts = ${common.extra_scripts}
# ------------------------------------------------------------------------------
@@ -603,100 +777,148 @@ extra_scripts = ${common.extra_scripts}
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SLAMPHER
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_SLAMPHER
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-slampher-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_SLAMPHER
+build_flags = ${common.build_flags_1m0m} -DITEAD_SLAMPHER
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-s20]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_S20
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_S20
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-s20-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_S20
+build_flags = ${common.build_flags_1m0m} -DITEAD_S20
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-1ch-inching]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_1CH_INCHING
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_1CH_INCHING
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-1ch-inching-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_1CH_INCHING
+build_flags = ${common.build_flags_1m0m} -DITEAD_1CH_INCHING
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-motor]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_MOTOR
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_MOTOR
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-motor-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_MOTOR
+build_flags = ${common.build_flags_1m0m} -DITEAD_MOTOR
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:itead-sonoff-sv]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_SV
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:itead-sonoff-sv-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_SV
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:itead-sonoff-s31]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_S31
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:itead-sonoff-s31-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DITEAD_SONOFF_S31
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
# ------------------------------------------------------------------------------
@@ -707,8 +929,8 @@ framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:electrodragon-wifi-iot-ota]
@@ -717,453 +939,452 @@ framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1
+build_flags = ${common.build_flags_4m1m} -DELECTRODRAGON_WIFI_IOT -DDHT_SUPPORT=1
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:workchoice-ecoplug]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DWORKCHOICE_ECOPLUG
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DWORKCHOICE_ECOPLUG
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:workchoice-ecoplug-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DWORKCHOICE_ECOPLUG
+build_flags = ${common.build_flags_1m0m} -DWORKCHOICE_ECOPLUG
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:jangoe-wifi-relay]
+[env:jangoe-wifi-relay-nc]
platform = ${common.platform}
framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DJANGOE_WIFI_RELAY_NC
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NC
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:jangoe-wifi-relay-ota]
+[env:jangoe-wifi-relay-nc-ota]
platform = ${common.platform}
framework = arduino
board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DJANGOE_WIFI_RELAY_NC
+build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NC
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:openenergymonitor-mqtt-relay]
+[env:jangoe-wifi-relay-no]
platform = ${common.platform}
framework = arduino
-board = esp_wroom_02
+board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NO
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:openenergymonitor-mqtt-relay-ota]
+[env:jangoe-wifi-relay-no-ota]
platform = ${common.platform}
framework = arduino
-board = esp_wroom_02
+board = esp12e
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1
+build_flags = ${common.build_flags_4m1m} -DJANGOE_WIFI_RELAY_NO
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:jorgegarcia-wifi-relays]
+[env:openenergymonitor-mqtt-relay]
platform = ${common.platform}
framework = arduino
-board = esp01_1m
+board = esp_wroom_02
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DJORGEGARCIA_WIFI_RELAYS
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:jorgegarcia-wifi-relays-ota]
+[env:openenergymonitor-mqtt-relay-ota]
platform = ${common.platform}
framework = arduino
-board = esp01_1m
+board = esp_wroom_02
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DJORGEGARCIA_WIFI_RELAYS
+build_flags = ${common.build_flags_4m1m} -DOPENENERGYMONITOR_MQTT_RELAY -DDALLAS_SUPPORT=1
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:aithinker-ai-light]
+[env:jorgegarcia-wifi-relays]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DAITHINKER_AI_LIGHT
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DJORGEGARCIA_WIFI_RELAYS
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:aithinker-ai-light-ota]
+[env:jorgegarcia-wifi-relays-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DAITHINKER_AI_LIGHT
+build_flags = ${common.build_flags_1m0m} -DJORGEGARCIA_WIFI_RELAYS
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:magichome-led-controller]
+[env:aithinker-ai-light]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DAITHINKER_AI_LIGHT
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:magichome-led-controller-ota]
+[env:aithinker-ai-light-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER
+build_flags = ${common.build_flags_1m0m} -DAITHINKER_AI_LIGHT
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:magichome-led-controller-20]
+[env:magichome-led-controller]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER_20
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:magichome-led-controller-20-ota]
+[env:magichome-led-controller-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER_20
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER
+upload_speed = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:magichome-led-controller-23]
+[env:magichome-led-controller-20]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER_23
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER_20
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:magichome-led-controller-23-ota]
+[env:magichome-led-controller-20-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DMAGICHOME_LED_CONTROLLER_23
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DMAGICHOME_LED_CONTROLLER_20
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:huacanxing-h801]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H801
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DHUACANXING_H801
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:huacanxing-h801-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H801
+build_flags = ${common.build_flags_1m0m} -DHUACANXING_H801
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:huacanxing-h802]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H802
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DHUACANXING_H802
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:huacanxing-h802-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DHUACANXING_H802
+build_flags = ${common.build_flags_1m0m} -DHUACANXING_H802
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-al-lc01]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC01
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC01
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-al-lc01-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC01
+build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC01
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-al-lc02]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC02
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC02
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-al-lc02-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC02
+build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC02
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-al-lc06]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC06
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC06
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-al-lc06-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC06
+build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC06
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-al-lc11]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC11
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC11
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-al-lc11-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_AL_LC11
+build_flags = ${common.build_flags_1m0m} -DARILUX_AL_LC11
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-e27]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_E27
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DARILUX_E27
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:arilux-e27-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = -g -Wl,-Tesp8266.flash.1m0.ld -DARILUX_E27
+build_flags = ${common.build_flags_1m0m} -DARILUX_E27
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-bnsz01]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_BNSZ01
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DITEAD_BNSZ01
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:itead-bnsz01-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DITEAD_BNSZ01
+build_flags = ${common.build_flags_1m0m} -DITEAD_BNSZ01
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:wion-50055]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DWION_50055
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DWION_50055
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:wion-50055-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DWION_50055
+build_flags = ${common.build_flags_1m0m} -DWION_50055
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:exs-wifi-relay-v31]
platform = ${common.platform}
framework = arduino
board = esp07
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DEXS_WIFI_RELAY_V31
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DEXS_WIFI_RELAY_V31
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:exs-wifi-relay-v31-ota]
platform = ${common.platform}
framework = arduino
board = esp07
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DEXS_WIFI_RELAY_V31
+build_flags = ${common.build_flags_1m0m} -DEXS_WIFI_RELAY_V31
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:wemos-v9261f]
@@ -1172,9 +1393,9 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DGENERIC_V9261F
+build_flags = ${common.build_flags_4m1m} -DGENERIC_V9261F
upload_speed = 460800
-monitor_baud = 115200
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:wemos-v9261f-ota]
@@ -1183,36 +1404,36 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DGENERIC_V9261F
+build_flags = ${common.build_flags_4m1m} -DGENERIC_V9261F
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:esp01-v9261f]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DGENERIC_V9261F
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DGENERIC_V9261F
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:esp01-v9261f-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DGENERIC_V9261F
+build_flags = ${common.build_flags_1m0m} -DGENERIC_V9261F
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:wemos-ech1560]
@@ -1221,9 +1442,9 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DGENERIC_ECH1560
+build_flags = ${common.build_flags_4m1m} -DGENERIC_ECH1560
upload_speed = 460800
-monitor_baud = 115200
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:wemos-ech1560-ota]
@@ -1232,36 +1453,36 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DGENERIC_ECH1560
+build_flags = ${common.build_flags_4m1m} -DGENERIC_ECH1560
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:esp01-ech1560]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DGENERIC_ECH1560
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ECH1560
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:esp01-ech1560-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DGENERIC_ECH1560
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ECH1560
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:mancavemade-esplive]
@@ -1270,9 +1491,9 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DMANCAVEMADE_ESPLIVE
+build_flags = ${common.build_flags_4m1m} -DMANCAVEMADE_ESPLIVE
upload_speed = 460800
-monitor_baud = 115200
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:mancavemade-esplive-ota]
@@ -1281,111 +1502,136 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DMANCAVEMADE_ESPLIVE
+build_flags = ${common.build_flags_4m1m} -DMANCAVEMADE_ESPLIVE
upload_speed = 460800
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:intermittech-quinled]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DINTERMITTECH_QUINLED
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DINTERMITTECH_QUINLED
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:intermittech-quinled-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DINTERMITTECH_QUINLED
+build_flags = ${common.build_flags_1m0m} -DINTERMITTECH_QUINLED
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:xenon-sm-pw702u]
platform = ${common.platform}
framework = arduino
board = esp12e
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DXENON_SM_PW702U
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DXENON_SM_PW702U
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:xenon-sm-pw702u-ota]
platform = ${common.platform}
framework = arduino
board = esp12e
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DXENON_SM_PW702U
+build_flags = ${common.build_flags_1m0m} -DXENON_SM_PW702U
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:authometion-lyt8266]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DAUTHOMETION_LYT8266
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DAUTHOMETION_LYT8266
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:authometion-lyt8266-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DAUTHOMETION_LYT8266
+build_flags = ${common.build_flags_1m0m} -DAUTHOMETION_LYT8266
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:kmc-70011]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DKMC_70011
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:kmc-70011-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DKMC_70011
+upload_speed = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:yjzk-switch-2ch]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DYJZK_SWITCH_2CH
-monitor_baud = 115200
+build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_2CH
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:yjzk-switch-2ch-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DYJZK_SWITCH_2CH
+build_flags = ${common.build_flags_1m0m} -DYJZK_SWITCH_2CH
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:generic-8ch]
@@ -1394,62 +1640,601 @@ framework = arduino
board = d1_mini
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -DGENERIC_8CH
+build_flags = ${common.build_flags_4m1m} -DGENERIC_8CH
upload_speed = 460800
-monitor_baud = 115200
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
-[env:stm-relay-ota]
+[env:gizwits-witty-cloud]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DGIZWITS_WITTY_CLOUD
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:gizwits-witty-cloud-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DGIZWITS_WITTY_CLOUD
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:euromate-wifi-stecker-shuko]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DSTM_RELAY
-monitor_baud = 115200
+build_flags = ${common.build_flags_4m1m} -DEUROMATE_WIFI_STECKER_SCHUKO
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:euromate-wifi-stecker-shuko-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DEUROMATE_WIFI_STECKER_SCHUKO
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:tonbux-powerstrip02]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DTONBUX_POWERSTRIP02
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:tonbux-powerstrip02-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DTONBUX_POWERSTRIP02
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:lingan-swa1]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DLINGAN_SWA1
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:lingan-swa1-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DLINGAN_SWA1
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:stm-relay]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DSTM_RELAY
+monitor_speed = 115200
extra_scripts = ${common.extra_scripts}
[env:stm-relay-ota]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -DSTM_RELAY
+build_flags = ${common.build_flags_1m0m} -DSTM_RELAY
upload_speed = 115200
-upload_port = "192.168.4.1"
-upload_flags = --auth=fibonacci --port 8266
-monitor_baud = 115200
+upload_port = ${common.upload_port}
+upload_flags = ${common.upload_flags}
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:heygo-hy02]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DHEYGO_HY02
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:heygo-hy02-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DHEYGO_HY02
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:maxcio-wus002s]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DMAXCIO_WUS002S
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:maxcio-wus002s-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DMAXCIO_WUS002S
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:yidian-xsssa05]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DYIDIAN_XSSSA05
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:yidian-xsssa05-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DYIDIAN_XSSSA05
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:tonbux-xsssa06]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DTONBUX_XSSSA06
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:tonbux-xsssa06-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DTONBUX_XSSSA06
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:green-esp8266relay]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DGREEN_ESP8266RELAY
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:green-esp8266relay-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DGREEN_ESP8266RELAY
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:ike-espike]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DIKE_ESPIKE
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:ike-espike-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DIKE_ESPIKE
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:arniex-swifitch]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DARNIEX_SWIFITCH
+extra_scripts = ${common.extra_scripts}
+monitor_speed = 115200
+
+[env:arniex-swifitch-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DARNIEX_SWIFITCH
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:zhilde-eu44-w]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DZHILDE_EU44_W
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:zhilde-eu44-w-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DZHILDE_EU44_W
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:luani-hvio]
+platform = ${common.platform}
+framework = arduino
+board = esp07
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DLUANI_HVIO
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:luani-hvio-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp07
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DZLUANI_HVIO
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:neo-coolcam-power-plug-wifi]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DNEO_COOLCAM_POWER_PLUG_WIFI
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:neo-coolcam-power-plug-wifi-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DNEO_COOLCAM_POWER_PLUG_WIFI
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:estink-wifi-power-strip]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DESTINK_WIFI_POWER_STRIP
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:estink-wifi-power-strip-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_4m1m} -DESTINK_WIFI_POWER_STRIP
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
extra_scripts = ${common.extra_scripts}
# ------------------------------------------------------------------------------
# GENERIC OTA ENVIRONMENTS
# ------------------------------------------------------------------------------
-[env:esp8266-1m-ota]
+[env:generic-esp01s-relay-40]
platform = ${common.platform}
framework = arduino
board = esp01_1m
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags_1m} -D${env.ESPURNA_BOARD}
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RELAY_V40
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:generic-esp01s-relay-40-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RELAY_V40
upload_speed = 115200
upload_port = "${env.ESPURNA_IP}"
upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
extra_scripts = ${common.extra_scripts}
-[env:esp8266-4m-ota]
+[env:generic-esp01s-rgbled-10]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RGBLED_V10
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:generic-esp01s-rgbled-10-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_RGBLED_V10
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:generic-esp01s-dht11-10]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DHT11_V10
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:generic-esp01s-dht11-10-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DHT11_V10
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:generic-esp01s-ds18b20-10]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DS18B20_V10
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:generic-esp01s-ds18b20-10-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DGENERIC_ESP01S_DS18B20_V10
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:heltec-touch-relay]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DHELTEC_TOUCHRELAY
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:heltec-touch-relay-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DHELTEC_TOUCHRELAY
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:allnet-4duino-iot-wlan-relais]
platform = ${common.platform}
framework = arduino
board = esp12e
-board_flash_mode = dout
+board_build.flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
-build_flags = ${common.build_flags} -D${env.ESPURNA_BOARD}
+build_flags = ${common.build_flags_1m0m} -DALLNET_4DUINO_IOT_WLAN_RELAIS
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:allnet-4duino-iot-wlan-relais-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp12e
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DALLNET_4DUINO_IOT_WLAN_RELAIS
upload_speed = 115200
upload_port = "${env.ESPURNA_IP}"
upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
extra_scripts = ${common.extra_scripts}
+
+[env:tonbux-mosquito-killer]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DTONBUX_MOSQUITO_KILLER
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:tonbux-mosquito-killer-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DTONBUX_MOSQUITO_KILLER
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:pilotak-esp-din-v1]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DPILOTAK_ESP_DIN_V1
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
+
+[env:pilotak-esp-din-v1-ota]
+platform = ${common.platform}
+framework = arduino
+board = esp01_1m
+board_build.flash_mode = dout
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DPILOTAK_ESP_DIN_V1
+upload_speed = 115200
+upload_port = "${env.ESPURNA_IP}"
+upload_flags = --auth=${env.ESPURNA_AUTH} --port 8266
+extra_scripts = ${common.extra_scripts}
+
+[env:nodemcu-geiger]
+platform = ${common.platform}
+framework = arduino
+board = nodemcu
+lib_deps = ${common.lib_deps}
+lib_ignore = ${common.lib_ignore}
+build_flags = ${common.build_flags_1m0m} -DNODEMCU_BASIC -DNOWSAUTH -DGEIGER_SUPPORT=1 -DEVENTS_SUPPORT=0 -DINFLUXDB_SUPPORT=1 -DALEXA_SUPPORT=0 -DALEXA_ENABLED=0
+upload_speed = 460800
+monitor_speed = 115200
+extra_scripts = ${common.extra_scripts}
diff --git a/code/symbols.sh b/code/symbols.sh
new file mode 100755
index 00000000..4156a116
--- /dev/null
+++ b/code/symbols.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# ------------------------------------------------------------------------------
+# CONFIGURATION
+# ------------------------------------------------------------------------------
+
+ENVIRONMENT="wemos-d1mini-relayshield"
+READELF="xtensa-lx106-elf-readelf"
+NUMBER=20
+
+# ------------------------------------------------------------------------------
+# END CONFIGURATION - DO NOT EDIT FURTHER
+# ------------------------------------------------------------------------------
+
+# remove default trace file
+rm -rf $FILE
+
+function help {
+ echo
+ echo "Syntax: $0 [-e ] [-n ]"
+ echo
+}
+
+# get environment from command line
+while [[ $# -gt 1 ]]; do
+
+ key="$1"
+
+ case $key in
+ -e)
+ ENVIRONMENT="$2"
+ shift
+ ;;
+ -n)
+ NUMBER="$2"
+ shift
+ ;;
+ esac
+
+ shift # past argument or value
+
+done
+
+# check environment folder
+if [ $ENVIRONMENT == "" ]; then
+ echo "No environment defined"
+ help
+ exit 1
+fi
+ELF=.pioenvs/$ENVIRONMENT/firmware.elf
+if [ ! -f $ELF ]; then
+ echo "Could not find ELF file for the selected environment: $ELF"
+ exit 2
+fi
+
+$READELF -s $ELF | head -3 | tail -1
+$READELF -s $ELF | sort -r -k3 -n | head -$NUMBER
diff --git a/images/devices/aithinker-ai-light.jpg b/images/devices/aithinker-ai-light.jpg
index 5fc1076e..535c61de 100644
Binary files a/images/devices/aithinker-ai-light.jpg and b/images/devices/aithinker-ai-light.jpg differ
diff --git a/images/devices/arilux-al-lc01.jpg b/images/devices/arilux-al-lc01.jpg
new file mode 100644
index 00000000..de036d83
Binary files /dev/null and b/images/devices/arilux-al-lc01.jpg differ
diff --git a/images/devices/arilux-al-lc02.jpg b/images/devices/arilux-al-lc02.jpg
new file mode 100644
index 00000000..f2058ff1
Binary files /dev/null and b/images/devices/arilux-al-lc02.jpg differ
diff --git a/images/devices/arilux-al-lc06.jpg b/images/devices/arilux-al-lc06.jpg
new file mode 100644
index 00000000..df173391
Binary files /dev/null and b/images/devices/arilux-al-lc06.jpg differ
diff --git a/images/devices/arilux-al-lc11.jpg b/images/devices/arilux-al-lc11.jpg
new file mode 100644
index 00000000..b9300417
Binary files /dev/null and b/images/devices/arilux-al-lc11.jpg differ
diff --git a/images/devices/arilux-e27.jpg b/images/devices/arilux-e27.jpg
new file mode 100644
index 00000000..3dbe44ab
Binary files /dev/null and b/images/devices/arilux-e27.jpg differ
diff --git a/images/devices/arniex-swifitch.jpg b/images/devices/arniex-swifitch.jpg
new file mode 100644
index 00000000..373036ff
Binary files /dev/null and b/images/devices/arniex-swifitch.jpg differ
diff --git a/images/devices/authometion-lyt8266.jpg b/images/devices/authometion-lyt8266.jpg
new file mode 100644
index 00000000..12f37544
Binary files /dev/null and b/images/devices/authometion-lyt8266.jpg differ
diff --git a/images/devices/electrodragon-wifi-iot.jpg b/images/devices/electrodragon-wifi-iot.jpg
index 8a6ac83b..4d567edd 100644
Binary files a/images/devices/electrodragon-wifi-iot.jpg and b/images/devices/electrodragon-wifi-iot.jpg differ
diff --git a/images/devices/exs-wifi-relay-v31.jpg b/images/devices/exs-wifi-relay-v31.jpg
index baefef2c..fda8d78c 100644
Binary files a/images/devices/exs-wifi-relay-v31.jpg and b/images/devices/exs-wifi-relay-v31.jpg differ
diff --git a/images/devices/geiger_espurna_configuration.png b/images/devices/geiger_espurna_configuration.png
new file mode 100644
index 00000000..1316084d
Binary files /dev/null and b/images/devices/geiger_espurna_configuration.png differ
diff --git a/images/devices/geiger_espurna_status.png b/images/devices/geiger_espurna_status.png
new file mode 100644
index 00000000..26bd8185
Binary files /dev/null and b/images/devices/geiger_espurna_status.png differ
diff --git a/images/devices/geiger_grafana_dashboard.png b/images/devices/geiger_grafana_dashboard.png
new file mode 100644
index 00000000..d997f7a4
Binary files /dev/null and b/images/devices/geiger_grafana_dashboard.png differ
diff --git a/images/devices/geiger_scope_following_pulses.png b/images/devices/geiger_scope_following_pulses.png
new file mode 100755
index 00000000..63fd5b5a
Binary files /dev/null and b/images/devices/geiger_scope_following_pulses.png differ
diff --git a/images/devices/geiger_scope_single_pulse.png b/images/devices/geiger_scope_single_pulse.png
new file mode 100755
index 00000000..d5d38782
Binary files /dev/null and b/images/devices/geiger_scope_single_pulse.png differ
diff --git a/images/devices/geiger_wiring_diagram.png b/images/devices/geiger_wiring_diagram.png
new file mode 100644
index 00000000..730a0845
Binary files /dev/null and b/images/devices/geiger_wiring_diagram.png differ
diff --git a/images/devices/generic-dht11-10.jpg b/images/devices/generic-dht11-10.jpg
new file mode 100644
index 00000000..65cf8e9a
Binary files /dev/null and b/images/devices/generic-dht11-10.jpg differ
diff --git a/images/devices/generic-ds18b20-10.jpg b/images/devices/generic-ds18b20-10.jpg
new file mode 100644
index 00000000..16f94d7b
Binary files /dev/null and b/images/devices/generic-ds18b20-10.jpg differ
diff --git a/images/devices/generic-relay-40.jpg b/images/devices/generic-relay-40.jpg
new file mode 100644
index 00000000..62a9144d
Binary files /dev/null and b/images/devices/generic-relay-40.jpg differ
diff --git a/images/devices/generic-rgbled-10.jpg b/images/devices/generic-rgbled-10.jpg
new file mode 100644
index 00000000..24e8ad65
Binary files /dev/null and b/images/devices/generic-rgbled-10.jpg differ
diff --git a/images/devices/generic-v9261f.jpg b/images/devices/generic-v9261f.jpg
index 785a20e9..3fd12208 100644
Binary files a/images/devices/generic-v9261f.jpg and b/images/devices/generic-v9261f.jpg differ
diff --git a/images/devices/heltec-touch-relay.jpg b/images/devices/heltec-touch-relay.jpg
new file mode 100644
index 00000000..883e689f
Binary files /dev/null and b/images/devices/heltec-touch-relay.jpg differ
diff --git a/images/devices/heygo-hy02.jpg b/images/devices/heygo-hy02.jpg
new file mode 100644
index 00000000..4bda4563
Binary files /dev/null and b/images/devices/heygo-hy02.jpg differ
diff --git a/images/devices/huacanxing-h801.jpg b/images/devices/huacanxing-h801.jpg
index da53c685..4f15cf5d 100644
Binary files a/images/devices/huacanxing-h801.jpg and b/images/devices/huacanxing-h801.jpg differ
diff --git a/images/devices/ike-espike.jpg b/images/devices/ike-espike.jpg
new file mode 100644
index 00000000..dbe7a577
Binary files /dev/null and b/images/devices/ike-espike.jpg differ
diff --git a/images/devices/intermittech-quinled-2.6.jpg b/images/devices/intermittech-quinled-2.6.jpg
new file mode 100644
index 00000000..6c491b93
Binary files /dev/null and b/images/devices/intermittech-quinled-2.6.jpg differ
diff --git a/images/devices/itead-1ch-inching.jpg b/images/devices/itead-1ch-inching.jpg
index fc227042..74920b7e 100644
Binary files a/images/devices/itead-1ch-inching.jpg and b/images/devices/itead-1ch-inching.jpg differ
diff --git a/images/devices/itead-bn-sz01.jpg b/images/devices/itead-bn-sz01.jpg
index 46e41873..1b1055f1 100644
Binary files a/images/devices/itead-bn-sz01.jpg and b/images/devices/itead-bn-sz01.jpg differ
diff --git a/images/devices/itead-motor.jpg b/images/devices/itead-motor.jpg
index 576de922..20bdc183 100644
Binary files a/images/devices/itead-motor.jpg and b/images/devices/itead-motor.jpg differ
diff --git a/images/devices/itead-s20.jpg b/images/devices/itead-s20.jpg
index 695850a5..9c620610 100644
Binary files a/images/devices/itead-s20.jpg and b/images/devices/itead-s20.jpg differ
diff --git a/images/devices/itead-slampher.jpg b/images/devices/itead-slampher.jpg
index d62d051f..1f406bbd 100644
Binary files a/images/devices/itead-slampher.jpg and b/images/devices/itead-slampher.jpg differ
diff --git a/images/devices/itead-sonoff-4ch-pro.jpg b/images/devices/itead-sonoff-4ch-pro.jpg
index 2e630d28..632ad0ff 100644
Binary files a/images/devices/itead-sonoff-4ch-pro.jpg and b/images/devices/itead-sonoff-4ch-pro.jpg differ
diff --git a/images/devices/itead-sonoff-4ch.jpg b/images/devices/itead-sonoff-4ch.jpg
index dea3fa45..ecb3477e 100644
Binary files a/images/devices/itead-sonoff-4ch.jpg and b/images/devices/itead-sonoff-4ch.jpg differ
diff --git a/images/devices/itead-sonoff-b1.jpg b/images/devices/itead-sonoff-b1.jpg
index 01f8100b..3b8b7315 100644
Binary files a/images/devices/itead-sonoff-b1.jpg and b/images/devices/itead-sonoff-b1.jpg differ
diff --git a/images/devices/itead-sonoff-basic.jpg b/images/devices/itead-sonoff-basic.jpg
index 26f034cb..9e7008d8 100644
Binary files a/images/devices/itead-sonoff-basic.jpg and b/images/devices/itead-sonoff-basic.jpg differ
diff --git a/images/devices/itead-sonoff-dual.jpg b/images/devices/itead-sonoff-dual.jpg
index 8dbc4a37..f9439cbf 100644
Binary files a/images/devices/itead-sonoff-dual.jpg and b/images/devices/itead-sonoff-dual.jpg differ
diff --git a/images/devices/itead-sonoff-led.jpg b/images/devices/itead-sonoff-led.jpg
index 33215c81..051d84cd 100644
Binary files a/images/devices/itead-sonoff-led.jpg and b/images/devices/itead-sonoff-led.jpg differ
diff --git a/images/devices/itead-sonoff-pow.jpg b/images/devices/itead-sonoff-pow.jpg
index c5458e25..fa5e61dd 100644
Binary files a/images/devices/itead-sonoff-pow.jpg and b/images/devices/itead-sonoff-pow.jpg differ
diff --git a/images/devices/itead-sonoff-rf.jpg b/images/devices/itead-sonoff-rf.jpg
index 70a14bb6..b86bd0fe 100644
Binary files a/images/devices/itead-sonoff-rf.jpg and b/images/devices/itead-sonoff-rf.jpg differ
diff --git a/images/devices/itead-sonoff-rfbridge.jpg b/images/devices/itead-sonoff-rfbridge.jpg
index fec73da1..e7c7b96b 100644
Binary files a/images/devices/itead-sonoff-rfbridge.jpg and b/images/devices/itead-sonoff-rfbridge.jpg differ
diff --git a/images/devices/itead-sonoff-sv.jpg b/images/devices/itead-sonoff-sv.jpg
index 86ea2c44..3b3514c1 100644
Binary files a/images/devices/itead-sonoff-sv.jpg and b/images/devices/itead-sonoff-sv.jpg differ
diff --git a/images/devices/itead-sonoff-t1.jpg b/images/devices/itead-sonoff-t1.jpg
index d01a6459..a081afbd 100644
Binary files a/images/devices/itead-sonoff-t1.jpg and b/images/devices/itead-sonoff-t1.jpg differ
diff --git a/images/devices/itead-sonoff-th.jpg b/images/devices/itead-sonoff-th.jpg
index a3e728d3..ee3c64ae 100644
Binary files a/images/devices/itead-sonoff-th.jpg and b/images/devices/itead-sonoff-th.jpg differ
diff --git a/images/devices/itead-sonoff-touch.jpg b/images/devices/itead-sonoff-touch.jpg
index 5156a2cb..f0e2f7ec 100644
Binary files a/images/devices/itead-sonoff-touch.jpg and b/images/devices/itead-sonoff-touch.jpg differ
diff --git a/images/devices/jangoe-wifi-relay.jpg b/images/devices/jangoe-wifi-relay.jpg
new file mode 100644
index 00000000..1d317921
Binary files /dev/null and b/images/devices/jangoe-wifi-relay.jpg differ
diff --git a/images/devices/jangoe-wifi-relay.png b/images/devices/jangoe-wifi-relay.png
deleted file mode 100644
index 271b6c7d..00000000
Binary files a/images/devices/jangoe-wifi-relay.png and /dev/null differ
diff --git a/images/devices/jorgegarcia-wifi-relays.jpg b/images/devices/jorgegarcia-wifi-relays.jpg
index a73a9069..7aa64595 100644
Binary files a/images/devices/jorgegarcia-wifi-relays.jpg and b/images/devices/jorgegarcia-wifi-relays.jpg differ
diff --git a/images/devices/kmc-70011.jpg b/images/devices/kmc-70011.jpg
new file mode 100644
index 00000000..ed07a7d0
Binary files /dev/null and b/images/devices/kmc-70011.jpg differ
diff --git a/images/devices/lingan-swa1.jpg b/images/devices/lingan-swa1.jpg
new file mode 100644
index 00000000..122a6967
Binary files /dev/null and b/images/devices/lingan-swa1.jpg differ
diff --git a/images/devices/magichome-led-controller.jpg b/images/devices/magichome-led-controller.jpg
index 52abd8d5..b8604977 100644
Binary files a/images/devices/magichome-led-controller.jpg and b/images/devices/magichome-led-controller.jpg differ
diff --git a/images/devices/mancavemade-esp-live.jpg b/images/devices/mancavemade-esp-live.jpg
new file mode 100644
index 00000000..bfe3b379
Binary files /dev/null and b/images/devices/mancavemade-esp-live.jpg differ
diff --git a/images/devices/maxcio-w-us002s.jpg b/images/devices/maxcio-w-us002s.jpg
new file mode 100644
index 00000000..a7974a55
Binary files /dev/null and b/images/devices/maxcio-w-us002s.jpg differ
diff --git a/images/devices/nodemcu-lolin-v3.jpg b/images/devices/nodemcu-lolin-v3.jpg
new file mode 100644
index 00000000..e9392742
Binary files /dev/null and b/images/devices/nodemcu-lolin-v3.jpg differ
diff --git a/images/devices/openenergymonitor-mqtt-relay.jpg b/images/devices/openenergymonitor-mqtt-relay.jpg
index e12231c9..5563f234 100644
Binary files a/images/devices/openenergymonitor-mqtt-relay.jpg and b/images/devices/openenergymonitor-mqtt-relay.jpg differ
diff --git a/images/devices/schuko-wifi-plug.jpg b/images/devices/schuko-wifi-plug.jpg
new file mode 100644
index 00000000..d4fef2be
Binary files /dev/null and b/images/devices/schuko-wifi-plug.jpg differ
diff --git a/images/devices/tinkerman-espurna-h.jpg b/images/devices/tinkerman-espurna-h.jpg
index 9fd00ce7..29400268 100644
Binary files a/images/devices/tinkerman-espurna-h.jpg and b/images/devices/tinkerman-espurna-h.jpg differ
diff --git a/images/devices/tonbux-mosquito-killer.jpg b/images/devices/tonbux-mosquito-killer.jpg
new file mode 100644
index 00000000..dfed5f3c
Binary files /dev/null and b/images/devices/tonbux-mosquito-killer.jpg differ
diff --git a/images/devices/tonbux-powerstrip02.jpg b/images/devices/tonbux-powerstrip02.jpg
new file mode 100644
index 00000000..070955e4
Binary files /dev/null and b/images/devices/tonbux-powerstrip02.jpg differ
diff --git a/images/devices/tonbux-xs-ssa06.jpg b/images/devices/tonbux-xs-ssa06.jpg
new file mode 100644
index 00000000..0aad3a96
Binary files /dev/null and b/images/devices/tonbux-xs-ssa06.jpg differ
diff --git a/images/devices/wemos-d1-mini-relayshield.jpg b/images/devices/wemos-d1-mini-relayshield.jpg
index 8ebb4b2d..a57c03bd 100644
Binary files a/images/devices/wemos-d1-mini-relayshield.jpg and b/images/devices/wemos-d1-mini-relayshield.jpg differ
diff --git a/images/devices/wion-50055.jpg b/images/devices/wion-50055.jpg
index 3d7c3774..1a78abd2 100644
Binary files a/images/devices/wion-50055.jpg and b/images/devices/wion-50055.jpg differ
diff --git a/images/devices/witty-cloud.jpg b/images/devices/witty-cloud.jpg
new file mode 100644
index 00000000..c343f940
Binary files /dev/null and b/images/devices/witty-cloud.jpg differ
diff --git a/images/devices/workchoice-ecoplug.jpg b/images/devices/workchoice-ecoplug.jpg
index 2605517b..49929ed8 100644
Binary files a/images/devices/workchoice-ecoplug.jpg and b/images/devices/workchoice-ecoplug.jpg differ
diff --git a/images/devices/xenon-sm-pw702u.jpg b/images/devices/xenon-sm-pw702u.jpg
new file mode 100644
index 00000000..93173820
Binary files /dev/null and b/images/devices/xenon-sm-pw702u.jpg differ
diff --git a/images/devices/yidian-xs-ssa05.jpg b/images/devices/yidian-xs-ssa05.jpg
new file mode 100644
index 00000000..1f36b69c
Binary files /dev/null and b/images/devices/yidian-xs-ssa05.jpg differ
diff --git a/images/devices/yjzk-2gang-switch.jpg b/images/devices/yjzk-2gang-switch.jpg
new file mode 100644
index 00000000..81696468
Binary files /dev/null and b/images/devices/yjzk-2gang-switch.jpg differ
diff --git a/images/icons/collaborate.png b/images/icons/collaborate.png
index 3223a00d..b008582f 100644
Binary files a/images/icons/collaborate.png and b/images/icons/collaborate.png differ
diff --git a/images/icons/documentation.png b/images/icons/documentation.png
index aad67106..e302d5a6 100644
Binary files a/images/icons/documentation.png and b/images/icons/documentation.png differ
diff --git a/images/icons/features.png b/images/icons/features.png
index 17ea8ea7..fa63293c 100644
Binary files a/images/icons/features.png and b/images/icons/features.png differ
diff --git a/images/icons/hardware.png b/images/icons/hardware.png
index 54e88789..fb988277 100644
Binary files a/images/icons/hardware.png and b/images/icons/hardware.png differ
diff --git a/pre-commit b/pre-commit
index 90640b70..acc37a69 100755
--- a/pre-commit
+++ b/pre-commit
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
"""
Referencing current branch in github README.md [1]
@@ -17,61 +17,107 @@ Copy this file to .git/hooks/
import os
import sys
import re
-import subprocess
-
-BASE = os.path.dirname(os.path.realpath(__file__)) + "/../../"
-README = BASE + "README.md"
-remote = subprocess.check_output(["git", "remote", "-v"]).strip().split('\n')[0]
-parts = re.split('[/\.: ]', remote)
-REPO = parts[ len(parts) - 3]
-USER = parts[ len(parts) - 4]
-BRANCH = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"]).strip()
-
-def getVersion():
- file_name = BASE + "code/espurna/config/version.h"
- lines = open(file_name).readlines()
- for line in lines:
- if "APP_VERSION" in line:
- parts = line.split('"')
- return parts[1]
- return "unknown"
-VERSION = getVersion()
-
-version = "[![version](https://img.shields.io/badge/version-{VERSION}-brightgreen.svg)](CHANGELOG.md)\n".format(
- VERSION = VERSION
-)
-
-branch = "![branch](https://img.shields.io/badge/branch-{BRANCH}-orange.svg)\n".format(
- BRANCH = BRANCH
-)
-
-travis = "[![travis](https://travis-ci.org/{USER}/{REPO}.svg?branch={BRANCH})]" \
- "(https://travis-ci.org/{USER}/{REPO})\n".format(
- USER = USER,
- REPO = REPO,
- BRANCH = BRANCH
-)
-
-codacy = "[![codacy](https://img.shields.io/codacy/grade/{HASH}/{BRANCH}.svg)]" \
- "(https://www.codacy.com/app/{USER}/{REPO}/dashboard)\n".format(
- HASH = "c9496e25cf07434cba786b462cb15f49",
- USER = USER,
- REPO = REPO,
- BRANCH = BRANCH
-)
-
-lines = open(README).readlines()
-with open(README, "w") as fh:
- for line in lines:
- if "![travis]" in line:
- fh.write(travis)
- elif "![version]" in line:
- fh.write(version)
- elif "![branch]" in line:
- fh.write(branch)
- elif "![codacy]" in line:
- fh.write(codacy)
- else:
- fh.write(line)
-
-subprocess.check_output(["git", "add", README ])
+
+from subprocess import call, check_output
+try:
+ from urllib.parse import urlparse
+except ImportError:
+ from urlparse import urlparse
+
+from fileinput import FileInput
+# https://github.com/python/cpython/commit/6cb7b659#diff-78790b53ff259619377058acd4f74672
+if sys.version_info[0] < 3:
+ class FileInputCtx(FileInput):
+ def __enter__(self):
+ return self
+
+ def __exit__(self, type, value, traceback):
+ self.close()
+
+ FileInput = FileInputCtx
+
+
+def run(cmd, cwd=None):
+ out = check_output(cmd, cwd=cwd)
+ out = out.decode("latin1").strip()
+
+ return out
+
+
+def parse_h_string(define, r_quotes=re.compile("\"(.*)\"")):
+ string = r_quotes.search(define).group(1)
+ return string
+
+
+def git_parse_remote(cwd=None, remote="origin"):
+ remote_url = run([
+ "git", "config", "--local",
+ "--get", "remote.{}.url".format(remote)], cwd)
+
+ if remote_url.startswith("git"):
+ _, _, repo = remote_url.partition(":")
+ path = repo.replace(".git", "")
+ elif remote_url.startswith("https"):
+ parsed = urlparse(remote_url)
+ path = parsed.path[1:]
+ return path.split("/")
+
+
+def git_branch(cwd=None):
+ return run(["git", "rev-parse", "--abbrev-ref", "HEAD"], cwd)
+
+
+def espurna_get_version(base, version_h="code/espurna/config/version.h"):
+ version = "unknown"
+
+ path = os.path.join(base, version_h)
+ with open(path, "r") as version_f:
+ for line in version_f:
+ if line.startswith("#define") and "APP_VERSION" in line:
+ version = parse_h_string(line)
+ break
+
+ return version
+
+TEMPLATES = {
+ "![travis]": "[![travis](https://travis-ci.org/{USER}/{REPO}.svg?branch={BRANCH})]" \
+ "(https://travis-ci.org/{USER}/{REPO})\n",
+ "![version]": "[![version](https://img.shields.io/badge/version-{VERSION}-brightgreen.svg)](CHANGELOG.md)\n",
+ "![branch]": "[![branch](https://img.shields.io/badge/branch-{BRANCH}-orange.svg)]" \
+ "(https://github.org/{USER}/{REPO}/tree/{BRANCH}/)\n",
+ "![codacy]": "[![codacy](https://img.shields.io/codacy/grade/c9496e25cf07434cba786b462cb15f49/{BRANCH}.svg)]" \
+ "(https://www.codacy.com/app/{USER}/{REPO}/dashboard)\n"
+}
+
+README = "README.md"
+
+
+if __name__ == "__main__":
+ base = os.getcwd()
+
+ user, repo = git_parse_remote()
+ fmt = {
+ "USER": user,
+ "REPO": repo,
+ "BRANCH": git_branch(),
+ "VERSION": espurna_get_version(base)
+ }
+ templates = [
+ (k, tmpl.format(**fmt))
+ for k, tmpl in TEMPLATES.items()
+ ]
+
+ def fmt_line(line):
+ for match, tmpl in templates:
+ if match in line:
+ return tmpl
+
+ return line
+
+ path = os.path.join(base, README)
+
+ with FileInput(path, inplace=True) as readme:
+ for line in readme:
+ sys.stdout.write(fmt_line(line))
+
+ sys.exit(call(["git", "add", README]))