From c6eb9a420b4610a1c17639dc69be067c76b17a65 Mon Sep 17 00:00:00 2001 From: pietrop Date: Thu, 29 Jun 2017 15:21:52 +0800 Subject: [PATCH 1/4] working version? with google without google module --- electron/app.js | 426 +- electron/db.js | 25 +- electron/google_keys.js | 96 + electron/index.html | 24 +- electron/microsoft_keys.js | 71 + lib/app/app.js | 8 +- lib/app/router.js | 6 +- lib/app/templates/settings_template.html.ejs | 172 +- .../transcription_form_template.html.ejs | 145 +- lib/app/views/settings_view.js | 76 +- lib/app/views/transcription_form_view.js | 127 +- .../transcriber/convert_to_audio.js | 2 +- .../transcriber/google_stt/convert_to_json.js | 53 + .../transcriber/google_stt/parse.js | 98 + .../transcriber/google_stt/send_to_google.js | 73 + .../transcriber/google_stt/write_out.js | 80 + .../transcriber/index.js | 43 +- .../transcriber/split.js | 7 +- package-lock.json | 5308 +++++++++++++++++ package.json | 14 +- 20 files changed, 6571 insertions(+), 283 deletions(-) create mode 100644 electron/google_keys.js create mode 100644 electron/microsoft_keys.js create mode 100644 lib/interactive_transcription_generator/transcriber/google_stt/convert_to_json.js create mode 100644 lib/interactive_transcription_generator/transcriber/google_stt/parse.js create mode 100644 lib/interactive_transcription_generator/transcriber/google_stt/send_to_google.js create mode 100644 lib/interactive_transcription_generator/transcriber/google_stt/write_out.js create mode 100644 package-lock.json diff --git a/electron/app.js b/electron/app.js index 94decb0..8d6768d 100644 --- a/electron/app.js +++ b/electron/app.js @@ -26,7 +26,6 @@ module.exports = { }; },{"ffmpeg-static":39,"ffprobe-static":40,"path":50}],2:[function(require,module,exports){ -(function (process){ 'use strict'; var $ = require('jquery'); @@ -74,10 +73,10 @@ $(document).ready(function () { */ if (window.process !== undefined) { - console.info("In Electron v ", process.versions.electron); - console.info("Using chrome v ", process.versions.chrome); - console.info("Using v8 engine v ", process.versions.v8); - console.info("Using node v ", process.versions.node); + console.info("In Electron v ", window.process.versions.electron); + console.info("Using chrome v ", window.process.versions.chrome); + console.info("Using v8 engine v ", window.process.versions.v8); + console.info("Using node v ", window.process.versions.node); //TODO: update this part with Electron compatible code @@ -145,8 +144,7 @@ $(document).ready(function () { } }); -}).call(this,require('_process')) -},{"./demo_db":5,"./router":9,"./router_paperedit":10,"_process":51,"backbone":37,"backbone.mousetrap":125,"bootstrap":38,"jquery":42}],3:[function(require,module,exports){ +},{"./demo_db":5,"./router":9,"./router_paperedit":10,"backbone":37,"backbone.mousetrap":125,"bootstrap":38,"jquery":42}],3:[function(require,module,exports){ 'use strict'; var Backbone = require('backbone'); @@ -729,7 +727,21 @@ module.exports = Backbone.Router.extend({ settingsPanel: function () { console.debug('Router: settings panel: '); - var tmpSettings = { credentials: { ibm: window.IBMWatsonKeys() } }; + var tmpSettings = { credentials: { ibm: window.IBMWatsonKeys(), microsoft: { key: "TBC" }, google: window.GoogleKeys() + //TODO: do window.GoogleKeys(); + // { + // "type": "service_account", + // "project_id": "titanium-link-161713", + // "private_key_id": "b194464245ccea9a5f7318af1333d26b116ff7ca", + // "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC5g5zIssy76yUg\nXxI98RYJs3gXwNXTZeXewdOGtA+7wXz2YB8tRvns0qL+B1lubXEKcvuDwI460MHU\nVmOpfKiYB4KB5JFMfotuKygIsOi798MpOR9Vkpzs4g73q1XVpmVfvlhG/tYH+ATH\nRD64G9Ay30DbPDWpZ+eYLh9mOpFtqzPyXzBoBFgVkm/DmO0ntYHEShPeeanviKkg\nqBGjzqOmbaIBUHMX3x2LEoq1zb6CwxnitONPdd3BiMZ1zJCa2+tCiSOhYOiCsQRJ\n2882Nk1PNuERBiOY9jCcjcut9mAA3fHDIh5f+mj54QgIiaTTSFNNPl+816yv61v4\ng+KohjXJAgMBAAECggEADTeWi8kLY6ca9822OcILuSi3eW/EfEGCCWcjWDFLfqvI\nKLCMABiStWADe1hQM5kqCN3M1CP7ri6R5Lw78Qcf5ucAEhuUC5BnhDOgcFAUYNID\n7lOyyxC9S/ZGLTigjq6CgfoIhZRh8OLnij/vPQRERt+XmhcV1qo/upysoYayNk8x\nVQAzcNqtFJYoMh0ZTEwnGRH8krnZRT3x1f+WTPo46ejlqSGuZ1kxxsXsjtl1ovvO\nuXX0aL0I//M+IaSkBmDUqAaPtw0of6Br3FF/L0SwBDQdv81+o5oEhC2fC3uWXfV4\n/gystrTbxvhvBgi1WKJ6CIZHNHmiYj1T+rHslmJRFQKBgQDx7Jso895Ya8qqsmjV\nWRrOWRmUuSWatgyZIUtGA2lb6g9PSCc/OpvcCpO0Du61FVmVi+yOQa84yFYOEcne\nIJbeYxsQE6e79xTm5U96+nNGrhmo/X0oNT16x03rB+2biwoA52W/ESb0RJoBeqxN\nsOd1fhnUWXZrXUrcyjhBUfYAHQKBgQDETssQWKj7xRIyBUK2Jwro3NO4zFlIK8Ce\nftbIR1CFQghn24FAoyeWwmZlHjNm/g/goAx5secryxbWHPCp5WxDZGaCw3loX4iR\n2/D6JvZJe555zetKJJf1YVaQR86hwJtSNz8NHYhinGbk3WfTYWJS58i18oOZIoE7\nyKNdchd0nQKBgD/UCD/uz6wOjIMq3SPlBYCJ24j0rGo8O+iu8xg+0C5y+6UUSV6S\nTQrqM3wfMHXQczlUmI4T4HIf0SyXHuafPI7iIQLF3Mxn7TjaKXUt3Po59wUyFDJm\nkZjyOqmXBuax8Wq5ooudr+RksSlQv2MkGH1UTuZK0EaVb6n/JIZ/ZGM1AoGBAJ+m\ngQk7Qbr4jBK4KogfeoTlSx8IujeytYVxHFZngTnO+S0V3Klnx0OZuFLWW/GP//Or\n1lmGcL4x/dGGWceieQjZ93CzbuKOh3AwUmvvEe+zJLBk4s06s4bxccgHTipIjUkw\n+ws8kHW6QwgwdEb59U/9h0NKBvKcmEO5qfrOVfsVAoGBAJCzR5Iv5q0nbU0LTtmg\nZFAGO1J3rNDavFpDYDumJzJgG9qhIa5r6JQS+kDxtaysTks2zuveUlESAQsuL/1P\nhk9/uooJ7H3lalf+hvYkc8roJNhPmnZ1Fl+aOt0nPaVYb4yYN6m1nmGMSUEEZXLq\nB6bpLCUGjtVppgQ5E+z+ieIO\n-----END PRIVATE KEY-----\n", + // "client_email": "test-stt@titanium-link-161713.iam.gserviceaccount.com", + // "client_id": "114550441534194190431", + // "auth_uri": "https://accounts.google.com/o/oauth2/auth", + // "token_uri": "https://accounts.google.com/o/oauth2/token", + // "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + // "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-stt%40titanium-link-161713.iam.gserviceaccount.com" + // } + } }; var settingsView = new SettingsView({ settings: tmpSettings }); displayMain(settingsView); }, @@ -1199,11 +1211,45 @@ __p+='
\n\n\t\n\t'; if(!window.frontEndEnviromentNWJS ){ __p+='\n\t \n\t'; } -__p+='\n\t\n\n\t\n\t\n\t\n\n\t\t
\n\t\t ×\n\t\t IBM Watson Speech To Text Service Credentials \n\t\t

Here you can check or edit your credentials for the IBM Speech To Text service.

\n\t\t\t

Note that these are different from your IBM bluemix credentials.

\n\t\t\t

You need to activate a Watson Speech To Text Service on Bluemix to get these.

\n\t\t\t

Checkout the user manual for more info.

\n\t\t
\n\t\n\n\t
\n\t\t\n\t\t
\n\t\t\t
\n\t\t\t\t

IBM Watson Speech to text Service credentials

\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t
  • Settings
  • \n\t\n\t\n\n
    \n\n \n \n\n \n
    \n
    \n \t
    \n\t
    \n\t ×\n\t IBM Watson Speech To Text Service Credentials \n\t

    Here you can check or edit your credentials for the IBM Speech To Text service.

    \n\t\t

    Note that these are different from your IBM bluemix credentials.

    \n\t\t

    You need to activate a Watson Speech To Text Service on Bluemix to get these.

    \n\t\t

    Checkout the user manual for more info.

    \n\t
    \n\t\n\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    IBM Watson Speech to text Service credentials

    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tSave Credentials\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\n
    '; +'" class="form-control" id="password" placeholder="e.g. 2QKJ79uRsD2a">\n\t\t\t\t
    \n\t\t\t\tSave Credentials\n\t\t\t
    \n\t\t
    \n\t\n
    \n\n\n
    \n\t\t
    \n\t
    \n\t ×\n\t Google Speech To Text Service Credentials \n\t

    Here you can check or edit your credentials for the Google Speech To Text service.

    \n\t
    \n\n \n\t\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t
    \n \n '; + if(window.process !== undefined ){ +__p+='\n \n \n\n \n\n

    \n\n '; + }else{ +__p+='\n \n '; + } +__p+='\n
    \n
    \n
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    Google Speech to text Service credentials

    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\n\t\t\t\tSave Credentials\n\t\t\t
    \n\t\t
    \n\t
    \n
    \n
    \n \t\t
    \n\t
    \n\t ×\n\t Microsoft Speech To Text Service \n\t

    Microsoft Bing STT service coming soon.

    \n\t
    \n\n\t
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    Microsoft bing Speech to text Service credentials

    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\n\t\t\t\tSave Credentials\n\t\t\t
    \n\t\t
    \n\t
    \n\n\n\n\n
    \n \n
    \n\n
    \n\n\n'; } return __p; }; @@ -1263,17 +1309,17 @@ __p+='
    \n\n \n '; if(!window.frontEndEnviromentNWJS ){ __p+='\n \n '; } -__p+='\n \n\n \n \n \n
    \n \n
    \n
    \n
    \n \n '; +__p+='\n \n\n \n \n \n\n\n\n\n\n \n \n
    \n
    \n
    \n \n '; if(window.process !== undefined ){ __p+='\n \n \n\n \n\n

    \n\n '; }else{ __p+='\n\n \n '; } -__p+='\n
    \n \n
    \n
    \n
    \n
    \n
    \n

    IBM is fast and more accurate while Gentle is free of charge, works offline, and is only in English. Use Gentle if you are working with sensitve informations. Integration with Gentle is a bit more experimental at this stage. Follow the link for more info on setting it up\n .\n

    \n

    With IBM chose narrowband for telephone recordings, everything else is broadband.\n

    \n

    The IBM option always takes 5 minutes to generate a transcription regardless of the length of the media(audio or video file). In the current version Pocketsphinx and Gentle take slightly more then the duration of the media(audio or video) to do a full transcription (eg 27min will take 30min to transcribe).

    \n
    \n \n
    \n
    \n \n \n

    Chose the language of your media file. The default is English US.

    \n

    IBM® recommends that you use narrowband model for decoding of telephone speech.

    \n
    \n
    \n

    \n

    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n\n
    \n\n \n \n\n \n
    \n
    \n\n

    IBM is fast and more accurate while Gentle is free of charge, works offline, and is only in English. Use Gentle if you are working with sensitve informations. Integration with Gentle is a bit more experimental at this stage. Follow the link for more info on setting it up\n .\n

    \n

    With IBM chose narrowband for telephone recordings, everything else is broadband.\n

    \n

    The IBM option always takes 5 minutes to generate a transcription regardless of the length of the media(audio or video file). In the current version Pocketsphinx and Gentle take slightly more then the duration of the media(audio or video) to do a full transcription (eg 27min will take 30min to transcribe).

    \n\n
    \n\n
    \n
    \n \n
    \n
    \n \n \n

    Chose the language of your media file. The default is English US.

    \n

    IBM® recommends that you use narrowband model for decoding of telephone speech.

    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n \n

    Chose the language of your media file. The default is English US.

    \n
    \n
    \n \n\n
    \n
    \n
    \n \n Coming soon\n \n
    \n
    \n \n \n

    Chose the language of your media file. The default is English US.

    \n
    \n
    \n \n\n\n\n\n
    \n \n
    \n
    \n
    \n See User manual for extra setup needed, Only support US English For now
    \n \n\n\n
    \n
    \n
    \n Does not require extra setup, only supports US English for now
    \n\n
    \n
    \n
    \n coming soon\n
    \n
    \n\n
    \n\n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    \n \n
    \n \n
    \n\n'; +'\n
    \n
    \n \n
    \n\n
    \n\n \n
    \n \n \n \n\n'; } return __p; }; @@ -2201,6 +2247,7 @@ var render = require('./utils').render; if (typeof window.nw !== 'undefined') { var watsonKeysPath = window.nw.App.dataPath + '/wttskeys.json'; + var googleKeysPath = window.nw.App.dataPath + '/gskeys.json'; } else { //not in nwjs var watsonKeysPath = "/"; @@ -2223,7 +2270,10 @@ module.exports = Backbone.View.extend({ }, events: { - 'click #submitBtn': 'save', + 'click #submitBtnIbmCredentials': 'saveIBM', + 'click #submitBtnIbmGoogleCredentisl': 'saveGoogle', + 'click #submitBtnIbmMicrosoftCredentisl': 'saveMicrosoft', + "click #btnElectronInputMediaFileGoogleCredentials": "electronGetFilePathGoogleCredentials", "keypress .form-control": "onEnterListener" }, @@ -2236,8 +2286,43 @@ module.exports = Backbone.View.extend({ } }, - save: function (e) { + electronGetFilePathGoogleCredentials: function (e) { + e.preventDefault(); + var self = this; + window.openFileDiaglogueJSON(function (fileName) { + console.log(fileName); + self.newFilePath = fileName[0]; + console.log(self.newFilePath); + document.getElementById("inputFilePreviewGoogleCredentials").innerHTML = self.newFilePath; + // console.log(document.getElementById("title").value); + if (window.process !== undefined) { + //TODO: maybe use fs instead. + // const fs = require('fs'); + // var obj = JSON.parse(fs.readFileSync('file', 'utf8')); + // const googleCrdentials = require(self.newFilePath); + // console.log(googleCrdentials); + window.setGoogleAPIkeys(self.newFilePath); + window.alert("Thank you! Saved the Google API keys so you don't have to enter them again."); + //update elements in form form + var googleKeys = window.GoogleKeys(); + + document.getElementById("type").value = googleKeys.type; + document.getElementById("project_id").value = googleKeys.project_id; + document.getElementById("private_key_id").value = googleKeys.private_key_id; + document.getElementById("private_key").value = googleKeys.private_key; + document.getElementById("client_email").value = googleKeys.client_email; + document.getElementById("client_id").value = googleKeys.client_id; + document.getElementById("auth_uri").value = googleKeys.auth_uri; + document.getElementById("token_uri").value = googleKeys.token_uri; + document.getElementById("auth_provider_x509_cert_url").value = googleKeys.auth_provider_x509_cert_url; + document.getElementById("client_x509_cert_url").value = googleKeys.client_x509_cert_url; + } + }); + }, + + saveIBM: function (e) { e.preventDefault(); + //SAVE IBM credentialls var ibmCredentials = {}; ibmCredentials.username = this.$('input[name=username]').val().trim(); ibmCredentials.password = this.$('input[name=password]').val().trim(); @@ -2245,10 +2330,37 @@ module.exports = Backbone.View.extend({ if (ibmCredentials.username != "" && ibmCredentials.password != "") { //save window.setWatsonAPIkeys(ibmCredentials); - window.alert("Thank you! Saved the keys so you don't have to enter them again."); + window.alert("Thank you! Saved the IBM keys so you don't have to enter them again."); } else { alert("Please add valid credentials to save"); } + // End Save IBM crdentials + + // + }, + saveGoogle: function (e) { + e.preventDefault(); + //SAVE IBM credentialls + alert("Thank you! Saved the Google keys so you don't have to enter them again."); + + // + }, + + saveMicrosoft: function (e) { + e.preventDefault(); + // var ibmCredentials = {}; + // ibmCredentials.username = this.$('input[name=username]').val().trim(); + // ibmCredentials.password = this.$('input[name=password]').val().trim(); + // //TODO: double check this + // if((ibmCredentials.username != "") && (ibmCredentials.password != "")){ + // //save + // window.setWatsonAPIkeys(ibmCredentials) + // window.alert("Thank you! Saved the keys so you don't have to enter them again."); + // }else{ + // alert("Please add valid credentials to save"); + // } + + // }, render: function () { @@ -2284,10 +2396,15 @@ module.exports = Backbone.View.extend({ this.newFilePath = ""; }, events: { - "click #btnElectronInputMediaFile": "electronGetFilePath", + 'click #btnElectronInputMediaFile': 'electronGetFilePath', 'click #submitBtn': 'save', - "keypress .form-control": "onEnterListener" + 'keypress .form-control': 'onEnterListener', + 'change input[type=radio]': 'changedRadio' + }, + //change view of language tab preferences when making a choice in radio button language options. + changedRadio: function (e) { + $('#languageTabs a[href="#' + e.currentTarget.value + '"]').tab('show'); }, onEnterListener: function (e) { @@ -2302,10 +2419,6 @@ module.exports = Backbone.View.extend({ electronGetFilePath: function (e) { e.preventDefault(); - // if (window.process !== undefined) { - // document.getElementById("open-file").click(); - // } - // var self = this; window.openFileDiaglogue(function (fileName) { console.log(fileName); @@ -2320,29 +2433,6 @@ module.exports = Backbone.View.extend({ }); }, - // console.log(fileName); - // //TODO: here do some file type checks and alert if not compatible file type with ffmpeg. - // //eg add in config.js array off ffmpeg `ffmpeg -formats` in termanl for list. - // //use path library to get extension, if extension not in array then give error. - - // //return an array of files, since we only accepting one, then it's always first elemet - // //TODO: here if modify that can accept multiple, then here could deal with that logic, eg generate a panel/card with title and description for each. - // //here could also default transcript name to name of file. - // self.newFilePath = fileName[0]; - // console.log(self.newFilePath ); - - // document.getElementById("inputFilePreview").innerHTML = self.newFilePath; - - // // console.log(document.getElementById("title").value); - // if(document.getElementById("title").value ===""){ - - // // self.newFilePath.split("/") - // document.getElementById("title").value = path.basename(self.newFilePath); - // } - - - // }, - save: function (e) { console.log(e.target); //TODO: there might be a better way to get values from a form in backbone? @@ -2354,40 +2444,50 @@ module.exports = Backbone.View.extend({ //If using "multiple" in unput will return all selected files's paths separated with `;`. split(";") to make an array. // loop through that array to create a list of title, description etc.. - // //before trying this, test how many clips at same time. // https://trello.com/c/oDr7bSy7/173-raised-by-ben-need-to-be-able-to-add-a-batch-of-clips-into-new-transcription-not-one-by-one - - var newDescription = this.$('textarea[name=description]').val(); //removing # carachter coz it breaks file path as it gets converted to %23 //TODO: there might be other symbols that have effect. figure proper way to sanitise input // var newFilePath = this.$('input[name=file]').val(); - var newLanguage = $('#languageModel').find(":selected")[0].value; + var newLanguage = ''; var newFilePath = this.newFilePath; + var radios = document.querySelectorAll('.languageRadio'); + var sttEngine; + //see which one has been selected by the user. + for (var i = 0; i < radios.length; i++) { + if (radios[i].type === 'radio' && radios[i].checked) { + // get value, set checked flag or do whatever you need to + sttEngine = radios[i].value; + } + } + //Listener on checkbox, that adds and removes IBM options if IBM is unclicked. //Need to have IBM Options as element here in form view that can be appended or removed //TODO: There has to be a better way to get the value of radio buttons check boxes eg document.querySelector(".options"); - if ($('#IBMoption')[0].checked) { - //check if inside electron - // if(window.process!== undefined){ - // //check if the app is connnected to the internet - // if(navigator.onLine){ - // sttEngine = "ibm"; - // //if not connected to the internet, alert that ibm stt won't work - // }else{ - // alert("You seem to be offline, check your internet connection and try again if you want to use IBM as a speech to text option."); - // } - // //if not in electron then just assign sttEngine to ibm - // }else{ - sttEngine = "ibm"; - // } - } else if ($('#genelteOption')[0].checked) { - sttEngine = "gentle"; - } else if ($('#pocketSphinxOption')[0].checked) { - sttEngine = "pocketsphinx"; + // if($('#IBMoption')[0].checked){ + // sttEngine = "ibm"; + // $('#languageModelIBM').find(":selected")[0].value; + // }else if(){ + // sttEngine = "google"; + // $('#languageModelIBM').find(":selected")[0].value; + + // }else if($('#genelteOption')[0].checked){ + // sttEngine = "gentle"; + // }else if($('#pocketSphinxOption')[0].checked){ + // sttEngine = "pocketsphinx"; + // } + + //TODO: there might be a better way to do this? + //set the language + if (sttEngine == 'ibm') { + newLanguage = $('#languageModelIBM').find(":selected")[0].value; + } else if (sttEngine == 'google') { + newLanguage = $('#languageModelGoogle').find(":selected")[0].value; + } else if (sttEngine == 'microsoft') { + newLanguage = $('#languageModelMicrosoft').find(":selected")[0].value; } if (newFilePath == "") { @@ -2397,8 +2497,7 @@ module.exports = Backbone.View.extend({ alert("please give this transcriptiona title"); //TODO: Set description in focus } else { - - if (sttEngine === "ibm") { + if (sttEngine === "ibm" || sttEngine === "google" || sttEngine === "microsoft") { if (navigator.onLine) { this.model.save({ title: newTitle, description: newDescription, @@ -2416,6 +2515,26 @@ module.exports = Backbone.View.extend({ } else { alert("You seem to be offline, check your internet connection and try again if you'd like to use IBM"); } + // }else if(sttEngine === "google"){ + // if(navigator.onLine){ + + + // }else{ + // alert("You seem to be offline, check your internet connection and try again if you'd like to use Google"); + // } + // }else if(sttEngine === "microsoft"){ + // if(navigator.onLine){ + + + // }else{ + // alert("You seem to be offline, check your internet connection and try again if you'd like to use Microsoft"); + // } + //captions can be used offline + } else if (sttEngine === "captions") { + + //pocketsphinx and Gentle handled as fallback cases. + // in the "backend" the `sttEngine` will determine which one is uded. + // these can be used offline } else { //TODO: sort out this repetition this.model.save({ title: newTitle, @@ -7912,9 +8031,9 @@ var path = require('path') var platform = os.platform() //patch for compatibilit with electron-builder, for smart built process. if(platform == "darwin"){ - platform = "mac"; + platform = "mac"; }else if(platform == "win32"){ - platform = "win"; + platform = "win"; } //adding browser, for use case when module is bundled using browserify. and added to html using src. if (platform !== 'linux' && platform !== 'mac' && platform !== 'win' && platform !=="browser") { @@ -25253,9 +25372,9 @@ process.chdir = function (dir) { process.umask = function() { return 0; }; },{}],52:[function(require,module,exports){ -/* globals window, exports, define */ +/* global window, exports, define */ -(function(window) { +!function() { 'use strict' var re = { @@ -25276,22 +25395,22 @@ process.umask = function() { return 0; }; sign: /^[\+\-]/ } - function sprintf() { - var key = arguments[0], cache = sprintf.cache - if (!(cache[key])) { - cache[key] = sprintf.parse(key) - } - return sprintf.format.call(null, cache[key], arguments) + function sprintf(key) { + // `arguments` is not an array, but should be fine for this call + return sprintf_format(sprintf_parse(key), arguments) } - sprintf.format = function(parse_tree, argv) { - var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = '' + function vsprintf(fmt, argv) { + return sprintf.apply(null, [fmt].concat(argv || [])) + } + + function sprintf_format(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, match, pad, pad_character, pad_length, is_positive, sign for (i = 0; i < tree_length; i++) { - node_type = get_type(parse_tree[i]) - if (node_type === 'string') { - output[output.length] = parse_tree[i] + if (typeof parse_tree[i] === 'string') { + output += parse_tree[i] } - else if (node_type === 'array') { + else if (Array.isArray(parse_tree[i])) { match = parse_tree[i] // convenience purposes only if (match[2]) { // keyword argument arg = argv[cursor] @@ -25309,12 +25428,12 @@ process.umask = function() { return 0; }; arg = argv[cursor++] } - if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && get_type(arg) == 'function') { + if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && arg instanceof Function) { arg = arg() } - if (re.numeric_arg.test(match[8]) && (get_type(arg) != 'number' && isNaN(arg))) { - throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) + if (re.numeric_arg.test(match[8]) && (typeof arg !== 'number' && isNaN(arg))) { + throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg)) } if (re.number.test(match[8])) { @@ -25324,57 +25443,57 @@ process.umask = function() { return 0; }; switch (match[8]) { case 'b': arg = parseInt(arg, 10).toString(2) - break + break case 'c': arg = String.fromCharCode(parseInt(arg, 10)) - break + break case 'd': case 'i': arg = parseInt(arg, 10) - break + break case 'j': arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) - break + break case 'e': arg = match[7] ? parseFloat(arg).toExponential(match[7]) : parseFloat(arg).toExponential() - break + break case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) - break + break case 'g': - arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) - break + arg = match[7] ? String(Number(arg.toPrecision(match[7]))) : parseFloat(arg) + break case 'o': - arg = arg.toString(8) - break + arg = (parseInt(arg, 10) >>> 0).toString(8) + break case 's': arg = String(arg) arg = (match[7] ? arg.substring(0, match[7]) : arg) - break + break case 't': arg = String(!!arg) arg = (match[7] ? arg.substring(0, match[7]) : arg) - break + break case 'T': - arg = get_type(arg) + arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase() arg = (match[7] ? arg.substring(0, match[7]) : arg) - break + break case 'u': arg = parseInt(arg, 10) >>> 0 - break + break case 'v': arg = arg.valueOf() arg = (match[7] ? arg.substring(0, match[7]) : arg) - break + break case 'x': - arg = parseInt(arg, 10).toString(16) - break + arg = (parseInt(arg, 10) >>> 0).toString(16) + break case 'X': - arg = parseInt(arg, 10).toString(16).toUpperCase() - break + arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase() + break } if (re.json.test(match[8])) { - output[output.length] = arg + output += arg } else { if (re.number.test(match[8]) && (!is_positive || match[3])) { @@ -25386,45 +25505,49 @@ process.umask = function() { return 0; }; } pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' ' pad_length = match[6] - (sign + arg).length - pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : '') : '' - output[output.length] = match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg) + pad = match[6] ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : '' + output += match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg) } } } - return output.join('') + return output } - sprintf.cache = Object.create(null) + var sprintf_cache = Object.create(null) + + function sprintf_parse(fmt) { + if (sprintf_cache[fmt]) { + return sprintf_cache[fmt] + } - sprintf.parse = function(fmt) { - var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 + var _fmt = fmt, match, parse_tree = [], arg_names = 0 while (_fmt) { if ((match = re.text.exec(_fmt)) !== null) { - parse_tree[parse_tree.length] = match[0] + parse_tree.push(match[0]) } else if ((match = re.modulo.exec(_fmt)) !== null) { - parse_tree[parse_tree.length] = '%' + parse_tree.push('%') } else if ((match = re.placeholder.exec(_fmt)) !== null) { if (match[2]) { arg_names |= 1 var field_list = [], replacement_field = match[2], field_match = [] if ((field_match = re.key.exec(replacement_field)) !== null) { - field_list[field_list.length] = field_match[1] + field_list.push(field_match[1]) while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { if ((field_match = re.key_access.exec(replacement_field)) !== null) { - field_list[field_list.length] = field_match[1] + field_list.push(field_match[1]) } else if ((field_match = re.index_access.exec(replacement_field)) !== null) { - field_list[field_list.length] = field_match[1] + field_list.push(field_match[1]) } else { - throw new SyntaxError("[sprintf] failed to parse named argument key") + throw new SyntaxError('[sprintf] failed to parse named argument key') } } } else { - throw new SyntaxError("[sprintf] failed to parse named argument key") + throw new SyntaxError('[sprintf] failed to parse named argument key') } match[2] = field_list } @@ -25432,72 +25555,41 @@ process.umask = function() { return 0; }; arg_names |= 2 } if (arg_names === 3) { - throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported") + throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported') } - parse_tree[parse_tree.length] = match + parse_tree.push(match) } else { - throw new SyntaxError("[sprintf] unexpected placeholder") + throw new SyntaxError('[sprintf] unexpected placeholder') } _fmt = _fmt.substring(match[0].length) } - return parse_tree - } - - var vsprintf = function(fmt, argv, _argv) { - _argv = (argv || []).slice(0) - _argv.splice(0, 0, fmt) - return sprintf.apply(null, _argv) - } - - /** - * helpers - */ - function get_type(variable) { - if (typeof variable === 'number') { - return 'number' - } - else if (typeof variable === 'string') { - return 'string' - } - else { - return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() - } - } - - var preformattedPadding = { - '0': ['', '0', '00', '000', '0000', '00000', '000000', '0000000'], - ' ': ['', ' ', ' ', ' ', ' ', ' ', ' ', ' '], - '_': ['', '_', '__', '___', '____', '_____', '______', '_______'], - } - function str_repeat(input, multiplier) { - if (multiplier >= 0 && multiplier <= 7 && preformattedPadding[input]) { - return preformattedPadding[input][multiplier] - } - return Array(multiplier + 1).join(input) + return sprintf_cache[fmt] = parse_tree } /** * export to either browser or node.js */ + /* eslint-disable quote-props */ if (typeof exports !== 'undefined') { - exports.sprintf = sprintf - exports.vsprintf = vsprintf + exports['sprintf'] = sprintf + exports['vsprintf'] = vsprintf } if (typeof window !== 'undefined') { - window.sprintf = sprintf - window.vsprintf = vsprintf + window['sprintf'] = sprintf + window['vsprintf'] = vsprintf - if (typeof define === 'function' && define.amd) { + if (typeof define === 'function' && define['amd']) { define(function() { return { - sprintf: sprintf, - vsprintf: vsprintf + 'sprintf': sprintf, + 'vsprintf': vsprintf } }) } } -})(typeof window === 'undefined' ? this : window); + /* eslint-enable quote-props */ +}() },{}],53:[function(require,module,exports){ var trim = require('./trim'); diff --git a/electron/db.js b/electron/db.js index 3c84227..9e01cc8 100644 --- a/electron/db.js +++ b/electron/db.js @@ -1,4 +1,4 @@ -'use strict'; +// 'use strict'; /** * @module db * @description Manages the backend of the app by overwrighting backbone.sync function @@ -99,6 +99,12 @@ function makeLinvoCallback(success, error) { * @returns {object} sucess callback with backbone model containing db id */ DB.create = function(model, success, error){ + + + + + + console.debug('DB.create', model.constructor.modelType); if (model.constructor.modelType == 'transcription') { var newElement = model.toJSON(); @@ -121,6 +127,21 @@ DB.create = function(model, success, error){ // returning saved transcription callback success(model); + //TODO: there might be a way to make this more seamless. need to decide where this logic would go. + //setting STT API Keys for appropriate service, if needed. (eg Offline Open source STT Gentle and Pocketsphinx don't need it) + var sttServiceKeys = ""; + if(newElement.sttEngine =="ibm"){ + sttServiceKeys = window.IBMWatsonKeys(); + }else if(newElement.sttEngine =="google"){ + sttServiceKeys = window.GoogleKeys(); + sttServiceKeys.path = window.getGoogleAPIKeysPath(); + }else if(newElement.sttEngine =="microsoft"){ + console.error("microsoft not yet implemented in backend"); + } + // else{ + // console.error("ERROR: no STT API credentials provided") + // } + // using interactive_transcription_generator to generate metadata, // transcription json // webm video preview @@ -134,7 +155,7 @@ DB.create = function(model, success, error){ // destFolder:"/media", tmpWorkFolder: tmpMediaFolder, destFolder: mediaFolder, - keys: window.IBMWatsonKeys(), + keys: sttServiceKeys, languageModel: newElement.languageModel, sttEngine: newElement.sttEngine, cbMetadata: function(respM) { diff --git a/electron/google_keys.js b/electron/google_keys.js new file mode 100644 index 0000000..63b5682 --- /dev/null +++ b/electron/google_keys.js @@ -0,0 +1,96 @@ +var fs = require('fs'); +var electron = require('electron'); +var currentWindow = electron.remote.getCurrentWindow(); + +if (window.process !== 'undefined') { + var googleKeysPath = currentWindow.dataPath + '/gckeys.json'; +}else{ + //not in nwjs + var googleKeysPath = "/"; +} + +var googleKeys = { + "type": "", + "project_id": "", + "private_key_id": "", + "private_key": "", + "client_email": "", + "client_id": "", + "auth_uri": "", + "token_uri": "", + "auth_provider_x509_cert_url": "", + "client_x509_cert_url": "" +} + +var googleKeysSet = false; + +// load keys on startup +window.document.addEventListener('DOMContentLoaded', function() { + if (areGoogleAPIkeysSet()) { + googleKeys = getGoogleAPIkeys(); + } +}); + +//helper funciton to check/validate the keys +function keysAreValid(tempKeys){ + console.log('tempKeys',tempKeys); + //if hte object has the required attributes + // if (tempKeys.username.length > 0 && tempKeys.password.length > 0) { + return true; + // }else{ + // return false; + // } +} + +// get +function getGoogleAPIkeys(){ + if (fs.existsSync(googleKeysPath)) { + googleKeys = JSON.parse(fs.readFileSync(googleKeysPath).toString()); + return googleKeys; + }else{ + return googleKeys; + } +} + +function getGoogleAPIKeysPath(){ + return googleKeysPath; +} + +//set +function setGoogleAPIkeys(keys){ + // then assuming is a file path + if(typeof keys == 'string'){ + //TODO change to read. + const fs = require('fs'); + keys = JSON.parse(fs.readFileSync(keys, 'utf8')); + // keys = require('keys'); + } + if(keysAreValid(keys)){ + fs.writeFileSync(googleKeysPath, JSON.stringify(keys)); + }else{ + // not setting keys. should add some error handling it, but + // at the moment validation check is handled in view + } +} + +//check if they are set +function areGoogleAPIkeysSet(){ + // fs.writeFileSync(googleKeysPath, JSON.stringify(tempKeys)); + if (fs.existsSync(googleKeysPath)) { + // TODO: add some more validation that values actually make sense + googleKeys = JSON.parse(fs.readFileSync(googleKeysPath).toString()); + var result = keysAreValid(googleKeys); + // googleKeysSet = true; + return result; + } else { + // googleKeysSet = false2; + return false; + } +} + +module.exports = { + areGoogleAPIkeysSet: areGoogleAPIkeysSet, + setGoogleAPIkeys: setGoogleAPIkeys, + getGoogleAPIkeys: getGoogleAPIkeys, + getGoogleAPIKeysPath: getGoogleAPIKeysPath +}; diff --git a/electron/index.html b/electron/index.html index 942810f..3012bed 100644 --- a/electron/index.html +++ b/electron/index.html @@ -81,6 +81,14 @@ window.setWatsonAPIkeys = require('./watson_keys.js').setWatsonAPIkeys; window.areWatsonAPIkeysSet = require('./watson_keys.js').areWatsonAPIkeysSet; + window.GoogleKeys = require('./google_keys.js').getGoogleAPIkeys; + window.setGoogleAPIkeys = require('./google_keys.js').setGoogleAPIkeys; + window.areGoogleAPIkeysSet = require('./google_keys.js').areGoogleAPIkeysSet; + window.getGoogleAPIKeysPath = require('./google_keys.js').getGoogleAPIKeysPath; + + //TODO: do the same for microsoft + + // if you drag a file onto the app, it stops from the window opening that file. // TODO: it be awesome if whichever view you are in if you drag a file onto the window, it opens the transcription form view, with that file prepopulated. document.addEventListener('drop', function(e) { @@ -145,7 +153,21 @@ { properties: ['openFile'], filters: [ - {name: 'Movies',extensions: ffmpegExentions}, + {name: 'Movies',extensions: ffmpegExentions} + ] + }, + function(fileName){ + if(cb){cb(fileName)}; + }); + } + + window.openFileDiaglogueJSON = function(cb){ + dialog.showOpenDialog( + { + properties: ['openFile'], + //filter for JSON not working, not sure how. + filters: [ + {name: 'All Files',extensions: 'json'} ] }, function(fileName){ diff --git a/electron/microsoft_keys.js b/electron/microsoft_keys.js new file mode 100644 index 0000000..d941837 --- /dev/null +++ b/electron/microsoft_keys.js @@ -0,0 +1,71 @@ +var fs = require('fs'); +var electron = require('electron'); +var currentWindow = electron.remote.getCurrentWindow(); + +if (window.process !== 'undefined') { + var keysPath = currentWindow.dataPath + '/keys.json'; +}else{ + //not in nwjs + var keysPath = "/"; +} + +var keys = {username: "", password: ""}; +var keysSet = false; + +// load keys on startup +window.document.addEventListener('DOMContentLoaded', function() { + if (areAPIkeysSet()) { + keys = getAPIkeys(); + } +}); + +//helper funciton to check/validate the keys +function keysAreValid(tempKeys){ + //if hte object has the required attributes + if (tempKeys.username.length > 0 && tempKeys.password.length > 0) { + return true; + }else{ + return false; + } +} + +// get +function getAPIkeys(){ + if (fs.existsSync(keysPath)) { + keys = JSON.parse(fs.readFileSync(keysPath).toString()); + return keys; + }else{ + return keys; + } +} + +//set +function setWatsonAPIkeys(keys){ + if(keysAreValid(keys)){ + fs.writeFileSync(keysPath, JSON.stringify(keys)); + }else{ + // not setting keys. should add some error handling it, but + // at the moment validation check is handled in view + } +} + +//check if they are set +function areAPIkeysSet(){ + // fs.writeFileSync(keysPath, JSON.stringify(tempKeys)); + if (fs.existsSync(keysPath)) { + // TODO: add some more validation that values actually make sense + keys = JSON.parse(fs.readFileSync(keysPath).toString()); + var result = keysAreValid(keys); + // keysSet = true; + return result; + } else { + // keysSet = false2; + return false; + } +} + +module.exports = { + areAPIkeysSet: areAPIkeysSet, + setWatsonAPIkeys: setWatsonAPIkeys, + getAPIkeys: getAPIkeys +}; diff --git a/lib/app/app.js b/lib/app/app.js index 8d2de48..5aad7a3 100644 --- a/lib/app/app.js +++ b/lib/app/app.js @@ -45,10 +45,10 @@ $(document).ready(function() { */ if (window.process !== undefined) { - console.info("In Electron v ", process.versions.electron); - console.info("Using chrome v ", process.versions.chrome); - console.info("Using v8 engine v ", process.versions.v8); - console.info("Using node v ", process.versions.node); + console.info("In Electron v ", window.process.versions.electron); + console.info("Using chrome v ", window.process.versions.chrome); + console.info("Using v8 engine v ", window.process.versions.v8); + console.info("Using node v ", window.process.versions.node); //TODO: update this part with Electron compatible code diff --git a/lib/app/router.js b/lib/app/router.js index 7333be7..e9032cf 100644 --- a/lib/app/router.js +++ b/lib/app/router.js @@ -95,7 +95,11 @@ module.exports = Backbone.Router.extend({ settingsPanel: function(){ console.debug('Router: settings panel: '); - var tmpSettings ={credentials: {ibm: window.IBMWatsonKeys() }} ; + var tmpSettings ={credentials: { + ibm: window.IBMWatsonKeys(), + microsoft: {key:"TBC"}, + google: window.GoogleKeys() + }} ; var settingsView = new SettingsView({settings: tmpSettings}); displayMain(settingsView); }, diff --git a/lib/app/templates/settings_template.html.ejs b/lib/app/templates/settings_template.html.ejs index d743a07..ff9b56e 100644 --- a/lib/app/templates/settings_template.html.ejs +++ b/lib/app/templates/settings_template.html.ejs @@ -19,18 +19,31 @@ -
    - × - IBM Watson Speech To Text Service Credentials -

    Here you can check or edit your credentials for the IBM Speech To Text service.

    -

    Note that these are different from your IBM bluemix credentials.

    -

    You need to activate a Watson Speech To Text Service on Bluemix to get these.

    -

    Checkout the user manual for more info.

    -
    - +
    + + + + +
    +
    +
    +
    + × + IBM Watson Speech To Text Service Credentials +

    Here you can check or edit your credentials for the IBM Speech To Text service.

    +

    Note that these are different from your IBM bluemix credentials.

    +

    You need to activate a Watson Speech To Text Service on Bluemix to get these.

    +

    Checkout the user manual for more info.

    +
    + +
    -

    IBM Watson Speech to text Service credentials

    @@ -42,12 +55,143 @@
    + Save Credentials +
    +
    + +
    + + +
    +
    +
    + × + Google Speech To Text Service Credentials +

    Here you can check or edit your credentials for the Google Speech To Text service.

    +
    - - - Save Credentials - + + +
    +
    +
    +
    + + <% if(window.process !== undefined ){%> + + + + + +

    + + <% }else{%> + + <% }%> +
    +
    +
    + +
    +
    +

    Google Speech to text Service credentials

    +
    + + +
    +
    + + +
    +
    + + +
    + +
    + + +
    + + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + Save Credentials +
    +
    +
    +
    +
    +
    +
    + × + Microsoft Speech To Text Service +

    Microsoft Bing STT service coming soon.

    +
    + +
    + +
    +
    +

    Microsoft bing Speech to text Service credentials

    +
    + + +
    + + + Save Credentials
    + + + + +
    + +
    + + + + \ No newline at end of file diff --git a/lib/app/templates/transcription_form_template.html.ejs b/lib/app/templates/transcription_form_template.html.ejs index 36b2edb..4045da7 100644 --- a/lib/app/templates/transcription_form_template.html.ejs +++ b/lib/app/templates/transcription_form_template.html.ejs @@ -19,10 +19,15 @@
  • New
  • + + + + +
    -
    +
    <% if(window.process !== undefined ){%> @@ -39,23 +44,51 @@ <% }%>
    +

    -
    -
    -
    +
    +
    +
    +
    +
    +
    + + +
    + + + + + +
    +
    +

    IBM is fast and more accurate while Gentle is free of charge, works offline, and is only in English. Use Gentle if you are working with sensitve informations. Integration with Gentle is a bit more experimental at this stage. Follow the link for more info on setting it up .

    With IBM chose narrowband for telephone recordings, everything else is broadband.

    The IBM option always takes 5 minutes to generate a transcription regardless of the length of the media(audio or video file). In the current version Pocketsphinx and Gentle take slightly more then the duration of the media(audio or video) to do a full transcription (eg 27min will take 30min to transcribe).

    -
    - + +
    + +
    +
    +
    - - @@ -86,11 +119,85 @@

    IBM® recommends that you use narrowband model for decoding of telephone speech.

    -

    -

    + +
    +
    +
    + +
    +
    + + +

    Chose the language of your media file. The default is English US.

    +
    +
    + + +
    +
    +
    + + Coming soon + +
    +
    + + +

    Chose the language of your media file. The default is English US.

    +
    +
    + + + + + +
    + +
    +
    +
    + See User manual for extra setup needed, Only support US English For now
    + + + +
    +
    +
    + Does not require extra setup, only supports US English for now
    + +
    +
    +
    + coming soon +
    +
    + +
    +
    -
    +
    @@ -99,17 +206,19 @@
    -
    - - -
    -
    - + +
    + + +
    +
    diff --git a/lib/app/views/settings_view.js b/lib/app/views/settings_view.js index e6b4aa6..66972b2 100644 --- a/lib/app/views/settings_view.js +++ b/lib/app/views/settings_view.js @@ -7,6 +7,7 @@ var render = require('./utils').render; if (typeof window.nw !== 'undefined') { var watsonKeysPath = window.nw.App.dataPath + '/wttskeys.json'; + var googleKeysPath = window.nw.App.dataPath + '/gskeys.json'; }else{ //not in nwjs var watsonKeysPath = "/"; @@ -29,7 +30,10 @@ module.exports = Backbone.View.extend({ }, events :{ - 'click #submitBtn': 'save', + 'click #submitBtnIbmCredentials': 'saveIBM', + 'click #submitBtnIbmGoogleCredentisl': 'saveGoogle', + 'click #submitBtnIbmMicrosoftCredentisl': 'saveMicrosoft', + "click #btnElectronInputMediaFileGoogleCredentials":"electronGetFilePathGoogleCredentials", "keypress .form-control": "onEnterListener" }, @@ -41,8 +45,47 @@ module.exports = Backbone.View.extend({ } }, - save: function(e){ + electronGetFilePathGoogleCredentials: function(e){ + e.preventDefault(); + var self = this; + window.openFileDiaglogueJSON(function(fileName){ + console.log(fileName); + self.newFilePath = fileName[0]; + console.log(self.newFilePath ); + document.getElementById("inputFilePreviewGoogleCredentials").innerHTML = self.newFilePath; + // console.log(document.getElementById("title").value); + if(window.process !== undefined){ + //TODO: maybe use fs instead. + // const fs = require('fs'); + // var obj = JSON.parse(fs.readFileSync('file', 'utf8')); + // const googleCrdentials = require(self.newFilePath); + // console.log(googleCrdentials); + window.setGoogleAPIkeys(self.newFilePath); + window.alert("Thank you! Saved the Google API keys so you don't have to enter them again."); + //update elements in form form + var googleKeys = window.GoogleKeys(); + + document.getElementById("type").value = googleKeys.type; + document.getElementById("project_id").value = googleKeys.project_id; + document.getElementById("private_key_id").value = googleKeys.private_key_id; + document.getElementById("private_key").value = googleKeys.private_key; + document.getElementById("client_email").value = googleKeys.client_email; + document.getElementById("client_id").value = googleKeys.client_id; + document.getElementById("auth_uri").value = googleKeys.auth_uri; + document.getElementById("token_uri").value = googleKeys.token_uri; + document.getElementById("auth_provider_x509_cert_url").value = googleKeys.auth_provider_x509_cert_url; + document.getElementById("client_x509_cert_url").value = googleKeys.client_x509_cert_url; + } + + + + + }); + }, + + saveIBM: function(e){ e.preventDefault(); + //SAVE IBM credentialls var ibmCredentials = {}; ibmCredentials.username = this.$('input[name=username]').val().trim(); ibmCredentials.password = this.$('input[name=password]').val().trim(); @@ -50,10 +93,37 @@ module.exports = Backbone.View.extend({ if((ibmCredentials.username != "") && (ibmCredentials.password != "")){ //save window.setWatsonAPIkeys(ibmCredentials) - window.alert("Thank you! Saved the keys so you don't have to enter them again."); + window.alert("Thank you! Saved the IBM keys so you don't have to enter them again."); }else{ alert("Please add valid credentials to save"); } + // End Save IBM crdentials + + // + }, + saveGoogle: function(e){ + e.preventDefault(); + //SAVE IBM credentialls + alert("Thank you! Saved the Google keys so you don't have to enter them again."); + + // + }, + + saveMicrosoft:function(e){ + e.preventDefault(); + // var ibmCredentials = {}; + // ibmCredentials.username = this.$('input[name=username]').val().trim(); + // ibmCredentials.password = this.$('input[name=password]').val().trim(); + // //TODO: double check this + // if((ibmCredentials.username != "") && (ibmCredentials.password != "")){ + // //save + // window.setWatsonAPIkeys(ibmCredentials) + // window.alert("Thank you! Saved the keys so you don't have to enter them again."); + // }else{ + // alert("Please add valid credentials to save"); + // } + + // }, render: function(){ diff --git a/lib/app/views/transcription_form_view.js b/lib/app/views/transcription_form_view.js index fce8edf..916b950 100644 --- a/lib/app/views/transcription_form_view.js +++ b/lib/app/views/transcription_form_view.js @@ -23,10 +23,15 @@ module.exports = Backbone.View.extend({ this.newFilePath = ""; }, events :{ - "click #btnElectronInputMediaFile":"electronGetFilePath", - 'click #submitBtn': 'save', - "keypress .form-control": "onEnterListener" + 'click #btnElectronInputMediaFile':'electronGetFilePath', + 'click #submitBtn': 'save', + 'keypress .form-control': 'onEnterListener', + 'change input[type=radio]': 'changedRadio' + }, +//change view of language tab preferences when making a choice in radio button language options. + changedRadio: function(e){ + $('#languageTabs a[href="#'+e.currentTarget.value+'"]').tab('show'); }, onEnterListener: function(e){ @@ -39,11 +44,7 @@ module.exports = Backbone.View.extend({ electronGetFilePath: function(e){ e.preventDefault(); - - // if (window.process !== undefined) { - // document.getElementById("open-file").click(); - // } - // + var self = this; window.openFileDiaglogue(function(fileName){ console.log(fileName); @@ -59,33 +60,6 @@ module.exports = Backbone.View.extend({ }, - - - - - // console.log(fileName); - // //TODO: here do some file type checks and alert if not compatible file type with ffmpeg. - // //eg add in config.js array off ffmpeg `ffmpeg -formats` in termanl for list. - // //use path library to get extension, if extension not in array then give error. - - // //return an array of files, since we only accepting one, then it's always first elemet - // //TODO: here if modify that can accept multiple, then here could deal with that logic, eg generate a panel/card with title and description for each. - // //here could also default transcript name to name of file. - // self.newFilePath = fileName[0]; - // console.log(self.newFilePath ); - - // document.getElementById("inputFilePreview").innerHTML = self.newFilePath; - - // // console.log(document.getElementById("title").value); - // if(document.getElementById("title").value ===""){ - - // // self.newFilePath.split("/") - // document.getElementById("title").value = path.basename(self.newFilePath); - // } - - - // }, - save: function(e){ console.log( e.target); //TODO: there might be a better way to get values from a form in backbone? @@ -97,41 +71,53 @@ module.exports = Backbone.View.extend({ //If using "multiple" in unput will return all selected files's paths separated with `;`. split(";") to make an array. // loop through that array to create a list of title, description etc.. - // //before trying this, test how many clips at same time. // https://trello.com/c/oDr7bSy7/173-raised-by-ben-need-to-be-able-to-add-a-batch-of-clips-into-new-transcription-not-one-by-one - - var newDescription = this.$('textarea[name=description]').val(); //removing # carachter coz it breaks file path as it gets converted to %23 //TODO: there might be other symbols that have effect. figure proper way to sanitise input // var newFilePath = this.$('input[name=file]').val(); - var newLanguage = $('#languageModel').find(":selected")[0].value; + var newLanguage = ''; var newFilePath = this.newFilePath; + + var radios = document.querySelectorAll('.languageRadio'); + var sttEngine ; + //see which one has been selected by the user. + for (var i = 0; i < radios.length; i++) { + if (radios[i].type === 'radio' && radios[i].checked) { + // get value, set checked flag or do whatever you need to + sttEngine = radios[i].value; + } + } + //Listener on checkbox, that adds and removes IBM options if IBM is unclicked. //Need to have IBM Options as element here in form view that can be appended or removed //TODO: There has to be a better way to get the value of radio buttons check boxes eg document.querySelector(".options"); - if($('#IBMoption')[0].checked){ - //check if inside electron - // if(window.process!== undefined){ - // //check if the app is connnected to the internet - // if(navigator.onLine){ - // sttEngine = "ibm"; - // //if not connected to the internet, alert that ibm stt won't work - // }else{ - // alert("You seem to be offline, check your internet connection and try again if you want to use IBM as a speech to text option."); - // } - // //if not in electron then just assign sttEngine to ibm - // }else{ - sttEngine = "ibm"; - // } - - }else if($('#genelteOption')[0].checked){ - sttEngine = "gentle"; - }else if($('#pocketSphinxOption')[0].checked){ - sttEngine = "pocketsphinx"; + // if($('#IBMoption')[0].checked){ + // sttEngine = "ibm"; + // $('#languageModelIBM').find(":selected")[0].value; + // }else if(){ + // sttEngine = "google"; + // $('#languageModelIBM').find(":selected")[0].value; + + // }else if($('#genelteOption')[0].checked){ + // sttEngine = "gentle"; + // }else if($('#pocketSphinxOption')[0].checked){ + // sttEngine = "pocketsphinx"; + // } + + //TODO: there might be a better way to do this? + //set the language + if(sttEngine == 'ibm'){ + newLanguage = $('#languageModelIBM').find(":selected")[0].value; + + }else if(sttEngine == 'google'){ + newLanguage = $('#languageModelGoogle').find(":selected")[0].value; + + }else if(sttEngine == 'microsoft'){ + newLanguage = $('#languageModelMicrosoft').find(":selected")[0].value; } if (newFilePath == ""){ @@ -141,9 +127,7 @@ module.exports = Backbone.View.extend({ alert("please give this transcriptiona title"); //TODO: Set description in focus }else{ - - - if(sttEngine === "ibm"){ + if(sttEngine === "ibm" || sttEngine === "google"||sttEngine === "microsoft"){ if(navigator.onLine){ this.model.save({title: newTitle, description: newDescription, @@ -162,6 +146,27 @@ module.exports = Backbone.View.extend({ }else{ alert("You seem to be offline, check your internet connection and try again if you'd like to use IBM"); } + // }else if(sttEngine === "google"){ + // if(navigator.onLine){ + + + // }else{ + // alert("You seem to be offline, check your internet connection and try again if you'd like to use Google"); + // } + // }else if(sttEngine === "microsoft"){ + // if(navigator.onLine){ + + + // }else{ + // alert("You seem to be offline, check your internet connection and try again if you'd like to use Microsoft"); + // } + //captions can be used offline + }else if(sttEngine === "captions"){ + + + //pocketsphinx and Gentle handled as fallback cases. + // in the "backend" the `sttEngine` will determine which one is uded. + // these can be used offline }else{ //TODO: sort out this repetition this.model.save({title: newTitle, diff --git a/lib/interactive_transcription_generator/transcriber/convert_to_audio.js b/lib/interactive_transcription_generator/transcriber/convert_to_audio.js index f4948a5..5711d36 100644 --- a/lib/interactive_transcription_generator/transcriber/convert_to_audio.js +++ b/lib/interactive_transcription_generator/transcriber/convert_to_audio.js @@ -38,7 +38,7 @@ function convertToWav(file,audioFile,ffmpegPath, callback) { //running ffmpeg comand var comand = ffmpeg(file) .noVideo() - .audioCodec('libopus') + // .audioCodec('libopus') .audioChannels(1) .audioFrequency(16000) .output(audioFile) diff --git a/lib/interactive_transcription_generator/transcriber/google_stt/convert_to_json.js b/lib/interactive_transcription_generator/transcriber/google_stt/convert_to_json.js new file mode 100644 index 0000000..d0d64a7 --- /dev/null +++ b/lib/interactive_transcription_generator/transcriber/google_stt/convert_to_json.js @@ -0,0 +1,53 @@ +//a module to convert google results into autoEdit JSON. + +function convertToJson(transcriptionJson){ + var wordCounter = 0; + var lines = []; + var line ={"line":[]}; + //for now IBM does not do speaker diarization so adding everything into one paragraph for now. But modeled transcription with paragraph containing lines with speaker associated to it. + var paragraphs = [{"id":0, "speaker": "Unnamed Speaker","paragraph":{}}]; + //iterating over the IBM STT json lines + for(var i =0; i< transcriptionJson.length; i++){ + var oldLine = transcriptionJson[i]; + //iteratign over words + for(var k =0; k< oldLine.words.length; k++){ + + var oldWord = oldLine.words[k]; + // console.log("oldWord:", JSON.stringify(oldWord,null,2)); + //creates a word object + var newWord = { + id: wordCounter, + text: oldWord.word, + startTime: oldWord.startTime, + endTime: oldWord.endTime + }; + //ad counter id to line object + line.id =i; + //TODO: need to add start and end time for lines + //line start and end time, same as first and last word object times + line.startTime = oldLine.words[0].startTime; + // console.log("line.startTime", line.startTime); + line.endTime = oldLine.words[oldLine.words.length-1].endTime; + // console.log("line.endTime", line.endTime); + //adding words to line + line.line.push(newWord); + // console.log("---line", JSON.stringify(line,null,2)); + wordCounter+=1;// + } + //add to lines + lines.push(line); + //reset words in line for next iteration + line ={"line":[]}; + } + //return results + paragraphs[0].paragraph = lines;; + console.log("-----paragraphs------") + console.log(JSON.stringify(paragraphs,null,2)); + + return paragraphs; + + +} + + +module.exports = convertToJson; \ No newline at end of file diff --git a/lib/interactive_transcription_generator/transcriber/google_stt/parse.js b/lib/interactive_transcription_generator/transcriber/google_stt/parse.js new file mode 100644 index 0000000..9be898f --- /dev/null +++ b/lib/interactive_transcription_generator/transcriber/google_stt/parse.js @@ -0,0 +1,98 @@ +//Not needed for google as no transcriptions in the API? +// or add + +/** +* @module parse +* @description adds time offest onto each word IBM Watson STT Service json. +* @author Pietro Passarelli +* @description this is so that each chunk of audio that has been transcribed separately can be joined back togethere. +* @tutorial IBM_watson_stt_specs +*/ + + +/** +* @function parse +* @description Takes IBM Watson STT Service json and adds time offest onto each word. +* this is so that each chunk of audio that has been transcribed separately can be joined back togethere. +* @param {Object[]} data - array list of transcription json with IBM specs +* @param {number} offset - number offset of the chunked clip relative to original source audio +* @returns {Object} - same json IBM STT transcription specs(but with offset). +*/ + +"use strict"; + +function parse(data, offset) { + // if(data != null){ + //sentences output + var out = { + sentences: [] + }; + + //TODO: not sure if this is necessary. eg when is the case in which offset would be undefined. + if (typeof offset === 'undefined') { + offset = 0; + } + + var paragraphs = [{"id":0, "speaker": "Unknown Speaker","paragraph":{}}]; + + var lines = [ { line: [] } ]; + + // modifying sentences results + // out.sentences = data.results.map(function(r) { + // new item object + var item = {}; + item.words = []; + //TODO: modify for google. + // set item to IBM Json transcription one + var text = data[0]; + + var textAr = text.split(" "); + // console.log(text,data, textAr); + //TODO: here it could calculate word time by using popcornjs SRT parser code + //https://github.com/pietrop/quickQuoteNode/blob/master/lib/interactive_video_components/processing/srt_to_hypertranscript.js + + // https://github.com/pietrop/quickQuoteNode/blob/master/lib/interactive_video_components/processing/srt_to_hypertranscript.js#L97 + //TODO: change to cammel case + var word_counter =0; + var interval = 50; //seconds + var words_in_a_line = textAr; + var number_of_words_in_line = words_in_a_line.length; + var line_duration = (offset+interval) - offset;//line duration = interval?! + var average_word_duration = line_duration / number_of_words_in_line; + var number_of_letters_in_a_sentence = 0; + + textAr.forEach(function(word, index){ + number_of_letters_in_a_sentence += word.length; + }); + + textAr.forEach(function(w, index){ + var word = {}; + word.word = w; + word.id = index; + word.startTime = offset; + word.endTime = offset+interval; + item.words.push(word); + item.offset = offset; + }); + // item.transcript = _item.transcript; + // item.confidence = _item.confidence; + // modify item IBM Json transcription to add time offset + // item.words = _item.timestamps.map(function(t) { + // // add time offset for each word start and end time + // return { + // word: t[0], + // start: t[1] + offset, + // end: t[2] + offset + // }; + // }); + // add item back to the list of results + return item; + // }); + + // //returning results + // return out; + // }//if != null +} + + +module.exports = parse; diff --git a/lib/interactive_transcription_generator/transcriber/google_stt/send_to_google.js b/lib/interactive_transcription_generator/transcriber/google_stt/send_to_google.js new file mode 100644 index 0000000..8de93ca --- /dev/null +++ b/lib/interactive_transcription_generator/transcriber/google_stt/send_to_google.js @@ -0,0 +1,73 @@ +'use strict'; + +const fs = require('fs'); +// Imports the Google Cloud client library +// const Speech = require('@google-cloud/speech'); + +var SendToGoogle = function(){}; + +SendToGoogle.prototype.send = function(audioFile,keys, languageModel, cb){ +// Instantiates a client +const speech = Speech({ + projectId: keys.projectId, + keyFilename: keys.keyFilename +}); + +// // The path to the local file on which to perform speech recognition, e.g. /path/to/audio.raw +const filename = audioFile; + +// // The encoding of the audio file, e.g. 'LINEAR16' +// // TODO Add to optional config, but default to FLAC +const encoding = 'FLAC'; + +// // The sample rate of the audio file in hertz, e.g. 16000 +// // ADD TO optional config with default +const sampleRateHertz = 16000; + +// // The BCP-47 language code to use, e.g. 'en-US' +const languageCode = languageModel ; + +const request = { + encoding: encoding, + // TODO: sample_rate_hertz (16000) in RecognitionConfig must either be unspecified or match the value in the FLAC header (1600). + // sampleRateHertz: sampleRateHertz, + languageCode: languageCode, + verbose: false +}; + +// Detects speech in the audio file +speech.recognize(filename, request) + .then((results) => { + const transcription = results[0]; + + if(cb){cb(null,results)}else{return results}; + //TODO: add callback here + // console.log(`Transcription: ${transcription}`); + }) + .catch((err) => { + if(cb){cb(err,null)}else{return err}; + // console.error('ERROR:', err); + }); + +// +// fs.createReadStream(filename) +// .on('error', console.error) +// .pipe(speech.createRecognizeStream({ +// config: { +// encoding: 'LINEAR16', +// sampleRateHertz: 16000, +// languageCode: languageModel +// }, +// singleUtterance: false, +// interimResults: false +// })) +// .on('error', console.error) +// .on('data', function(data) { +// console.log("here") +// console.log(JSON.stringify(data,null,2)); +// // data.results = "how old is the Brooklyn Bridge" +// }); + +}; + +module.exports = SendToGoogle; diff --git a/lib/interactive_transcription_generator/transcriber/google_stt/write_out.js b/lib/interactive_transcription_generator/transcriber/google_stt/write_out.js new file mode 100644 index 0000000..878f63a --- /dev/null +++ b/lib/interactive_transcription_generator/transcriber/google_stt/write_out.js @@ -0,0 +1,80 @@ +/** + * @module writeOut + * @description reorganise IBM Watson STT Json in the right timecode order + * @author Pietro Passarelli + * @description sorting concat json, deleting tmp audio files, and returning + * takes in data array of ibm watson json stt, callback for final json to output + * @requires fs + * @tutorial IBM_watson_stt_specs + */ + +"use strict"; + +var fs = require('fs'); + + +/** +* @function writeOut +* @description reorganise IBM Watson STT Json in the right timecode order +* @param {object} data - IBM STT transcription Json specs +*/ +function writeOut(data) { + //data[0].data.words + //data[0].f + //data[0].f.name + //data[0].f.offset + // console.log(JSON.stringify(data[0], null,2)); + //results list + var out = []; + + + //order by timecode number in seconds + data = data.sort(function(a, b) { + // console.log("||||--------"); + // console.log("a in writeOut: ",JSON.stringify(a, null,2)); + return a.f.offset - b.f.offset; + }); + // console.log(JSON.stringify(data, null,2)); + + //concat json transcription for individual audio clips into one json + data.forEach(function(d, index) { + var line = {}; + // console.log(JSON.stringify(d, null,2)); + // console.log("----"); + // console.log("--------//////"); + // console.log("d.data.wordsin writeOut: ",JSON.stringify(d.data.words, null,2)); + // var tmpLines =[]; + // tmpLines.concat(d.data.words); + line.id = index; + //TODO: need to add start and end time for lines + line.words =[]; + line.words = d.data.words; + // console.log(JSON.stringify(line, null,2)); + // console.log("----"); + out.push(line); + }); + + //TODO: remove tmp files,this raises error is it coz needs "./" ad beginning of tmp folder path? + //removing temp audio files + // if (data.length > 1) { + // data.forEach(function(d) { + // try { + // fs.unlink(d.f.name); + // }//try + // catch(err) { + // console.error("ERROR: wasn't able to delete temporary transcription files ", err); + // } + // }); + // } + + //return resuls list, output json of transcription IBM Specs + // fs.writeFileSync("./out3.json", JSON.stringify(out, null,2)); + // console.log("----"); + // console.log(JSON.stringify(out, null,2)); + return out; +} + + +// writeOut(exampleOut); + +module.exports = writeOut; diff --git a/lib/interactive_transcription_generator/transcriber/index.js b/lib/interactive_transcription_generator/transcriber/index.js index 1fd7462..42d3cc2 100644 --- a/lib/interactive_transcription_generator/transcriber/index.js +++ b/lib/interactive_transcription_generator/transcriber/index.js @@ -81,6 +81,11 @@ var parse = require('./ibm_stt_node/parse.js'); var writeOut = require('./ibm_stt_node/write_out.js'); var parseSamJsonToTranscripJson = require("./ibm_stt_node/sam_transcriber_json_convert.js"); + +var parseGoogle = require('./google_stt/parse.js'); +var SendToGoogle = require('./google_stt/send_to_google.js'); +var convertGoogleToJson = require('./google_stt/convert_to_json.js'); +var writeOutGoogle = require('./google_stt/write_out.js'); /** * @function transcribe * @description Takes in the file path to a media audio or video file and returns a json of transcription. @@ -127,7 +132,8 @@ var parseSamJsonToTranscripJson = require("./ibm_stt_node/sam_transcriber_json_c // if using IBM STT API if ( config.sttEngine == "ibm" ) { // 2. Split audio into 5 min chunks - split(newFile, tmpFolder, ffmpegPath, ffprobePath, function(files) { + var ibmSttExtension = 'ogg'; + split(newFile, tmpFolder, ffmpegPath, ffprobePath, ibmSttExtension, function(files) { //reading number of audio files total = files.length; //3. iterate and send to STT @@ -174,6 +180,41 @@ var parseSamJsonToTranscripJson = require("./ibm_stt_node/sam_transcriber_json_c //TODO: else if config.sttEngine == "srt" }else if(config.sttEngine == "google"){ console.info("YOU HAVE CHOSEN Google"); + console.info(JSON.stringify(config,null,2)); + + var SendToGoogleUtil = new SendToGoogle(); + var googleSttExtension = 'flac'; + var out = []; + var total = 0; + var googleKeys = {projectId: config.keys.project_id, keyFilename: config.keys.path }; + split(newFile, tmpFolder, ffmpegPath, ffprobePath, googleSttExtension, function(files) { + //iterate [optional] + // reading number of audio files + total = files.length; + //3. iterate and send to STT + files.forEach(function(f, index) { + // TODO: change param to config object to make self documenting. + SendToGoogleUtil.send(f.name, googleKeys, config.languageModel, function(err, data){ + // receive + if(err){ + console.error('ERROR:', err); + callback(error, null ); + } + //parse + var parsed = parseGoogle(data, f.offset); + out.push({ f: f, data: parsed }); + total--; + if (total === 0) { + // callback(null, convertToJson( writeOut( out ))); + callback(null, convertGoogleToJson( writeOutGoogle( out )) ); + } + }); + });//iterate over files split + });//split + + }else if(config.sttEngine == "microsoft"){ + console.info("YOU HAVE CHOSEN Microsoft "); + console.info(JSON.stringify(config,null,2)); diff --git a/lib/interactive_transcription_generator/transcriber/split.js b/lib/interactive_transcription_generator/transcriber/split.js index b327e2e..c707e23 100644 --- a/lib/interactive_transcription_generator/transcriber/split.js +++ b/lib/interactive_transcription_generator/transcriber/split.js @@ -61,7 +61,10 @@ var trimmer = require('./trimmer.js'); * @param {callback} callback - * @returns {callback} callback - returns array of audio clips names with offsts eg [{ name: filename, offset: 0 }] */ -function split(file, tmpFolder, ffmpegBinPath, ffprobeBinPath, cb) { +function split(file, tmpFolder, ffmpegBinPath, ffprobeBinPath, extension, cb) { + // if(extension == undefined){ + // extension = 'ogg'; + // } //maximum legth of clips in seconds. 5 minutes each. var maxLength = 60 * 5; //number of files @@ -108,7 +111,7 @@ function split(file, tmpFolder, ffmpegBinPath, ffprobeBinPath, cb) { //file name of original audio file var fileName = path.parse(file).base; //file name for clips - var filePart = path.join(tmpFolder, fileName + '.' + i + '.ogg'); + var filePart = path.join(tmpFolder, fileName + '.' + i + '.'+extension); //trim audio files trimmer.trim({ src: file, diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d9f5200 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5308 @@ +{ + "name": "autoEdit2", + "version": "1.0.8", + "lockfileVersion": 1, + "dependencies": { + "@types/node": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.32.tgz", + "integrity": "sha512-7+0Ai8r8Xt6NNVM0Eo+XSqiZsBUYXg2yrCwyBhQzSfFHTGQWzFv/pk9106vPR8HWjKmGK+zzUj244POs4xfO2g==", + "dev": true + }, + "7zip-bin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-2.1.0.tgz", + "integrity": "sha512-jgBTCcJ0gQedE9o8Jw+H/Gyq//EnQxmVpha7CdprIwzRSC81Uj37inHvPzv6jaZgZwkCcfho52rAaIFBrdbO7w==", + "dev": true + }, + "7zip-bin-linux": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/7zip-bin-linux/-/7zip-bin-linux-1.1.0.tgz", + "integrity": "sha512-BfW7XsUWNV/j723el3gGbiNWdmvLrnTB9VD0BondfCinxCwz4RQ60W4c3UxRpfHn1Q4Cn1o/DxYFmLMgHTEKqg==", + "dev": true, + "optional": true + }, + "7zip-bin-mac": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz", + "integrity": "sha1-Pmh3i78JJq3GgVlCcHRQXUdVXAI=", + "dev": true, + "optional": true + }, + "7zip-bin-win": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/7zip-bin-win/-/7zip-bin-win-2.1.0.tgz", + "integrity": "sha512-7t8V+cGvZ0xUAuTLH1iDkrl+XVYWxlS3hHCvA6yELTcx2VwgMDNe4FdQlyKJRjO0PExn0sit8wD3PGaPKBpt2A==", + "dev": true, + "optional": true + }, + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true + }, + "abstract-leveldown": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.4.1.tgz", + "integrity": "sha1-s7/tuITraToSd18MVenwpCDM7mQ=" + }, + "accessory": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/accessory/-/accessory-1.1.0.tgz", + "integrity": "sha1-eDPpg5oy3tdtJgIfNqQXB6Ug9ZM=", + "dev": true, + "dependencies": { + "balanced-match": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz", + "integrity": "sha1-e8ZYtL7WHu5CStdPdfXD4sTfPMc=", + "dev": true + } + } + }, + "acorn": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz", + "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=" + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=" + }, + "ajv-keywords": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", + "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true + } + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true + }, + "ap": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ap/-/ap-0.2.0.tgz", + "integrity": "sha1-rglCYAspkS8NKxTsYMRejzMLYRA=", + "dev": true + }, + "appdmg": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/appdmg/-/appdmg-0.4.5.tgz", + "integrity": "sha1-R6gnhluKC+SKuzUiVn40k9LxuDg=", + "dev": true, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "append-stream": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/append-stream/-/append-stream-1.2.2.tgz", + "integrity": "sha1-NsYjgTP/1PktQ3F4KJCkEtoC34Q=" + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true + }, + "arr-flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=", + "dev": true + }, + "array-buffer-from-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/array-buffer-from-string/-/array-buffer-from-string-0.1.0.tgz", + "integrity": "sha1-OxQ1H4YUnYTvxhLFrafthRadewc=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asar": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-0.13.0.tgz", + "integrity": "sha1-3zPdnQG/+EJGTQ2fCVdA1KYq+xQ=", + "dev": true, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true + } + } + }, + "asar-integrity": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/asar-integrity/-/asar-integrity-0.1.1.tgz", + "integrity": "sha512-Nt9p2sWWNFkgqaioFCjsjTQTBAu0YFy2UyW0cWqNr1UBs9vV0j1kG0GI3r1lEJ6XxV4jiz1/AwCJnCDj5DLJUg==", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "asn1.js": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "dev": true + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "astw": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "dev": true, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==" + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "babel-code-frame": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", + "dev": true + }, + "babel-core": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", + "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", + "dev": true + }, + "babel-generator": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "dev": true + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true + }, + "babel-register": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", + "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", + "dev": true + }, + "babel-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", + "dev": true + }, + "babel-template": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", + "dev": true + }, + "babel-traverse": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", + "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", + "dev": true + }, + "babel-types": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", + "dev": true + }, + "babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "dev": true + }, + "babylon": { + "version": "6.17.4", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", + "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", + "dev": true + }, + "backbone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.3.3.tgz", + "integrity": "sha1-TMgOp8sWMaxHSInOQPL4vGg7KZk=" + }, + "bagpipe": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/bagpipe/-/bagpipe-0.3.5.tgz", + "integrity": "sha1-40HRZPyyTN8E6n4Ft2XsEMiupqE=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base32-encode": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base32-encode/-/base32-encode-0.1.0.tgz", + "integrity": "sha1-HrxcnM+r9sJ4yGOSiLpOUO4rsfU=", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true + }, + "bignumber.js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-1.1.1.tgz", + "integrity": "sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc=" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true + }, + "binary-extensions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "binary-search-tree": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.6.tgz", + "integrity": "sha1-xtKRlOKGgn/P/geQEOa/d97xDOM=", + "dependencies": { + "underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" + } + } + }, + "bl": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=" + } + } + }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + }, + "bluebird-lst": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.2.tgz", + "integrity": "sha1-x7JhdrbI+kWL5wPesGRKKPZKR1s=", + "dev": true, + "dependencies": { + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + } + } + }, + "bn.js": { + "version": "4.11.7", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.7.tgz", + "integrity": "sha512-LxFiV5mefv0ley0SzqkOPR1bC4EbpPx8LkOz5vMe/Yi15t5hzwgO/G+tc7wOtL4PZTYjwHu8JnEiSLumuSjSfA==", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=" + }, + "bootstrap": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz", + "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E=" + }, + "boxen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.1.0.tgz", + "integrity": "sha1-sbad1SIwXoB6md7ud329blFnsQI=", + "dev": true, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true + } + } + }, + "bplist-creator": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", + "integrity": "sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=" + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", + "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "dev": true + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz", + "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + } + } + }, + "browserify-aes": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", + "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "dev": true + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true + }, + "browserify-shim": { + "version": "3.8.14", + "resolved": "https://registry.npmjs.org/browserify-shim/-/browserify-shim-3.8.14.tgz", + "integrity": "sha1-vxBXAmky0yU8de991xTzuHft7Gs=", + "dev": true, + "dependencies": { + "resolve": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", + "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + } + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true + }, + "browserify-transform-tools": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/browserify-transform-tools/-/browserify-transform-tools-1.7.0.tgz", + "integrity": "sha1-g+J3Ih9jJZvtLn6yooOpcKUB9MQ=", + "dependencies": { + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + } + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cached-path-relative": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "catharsis": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.8.tgz", + "integrity": "sha1-aTR59DqsVJ2Aa9c+kkzQ2USVGgY=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true + }, + "chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", + "dev": true + }, + "ci-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", + "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", + "dev": true + }, + "cipher-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.3.tgz", + "integrity": "sha1-7qvxlEGc6QDaMBjCB9IS8qbfCgc=", + "dev": true + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=", + "dev": true + }, + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "dev": true, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + } + } + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" + }, + "commander": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.10.0.tgz", + "integrity": "sha512-q/r9trjmuikWDRJNTBHAVnWhuU6w+z80KgBq7j9YDclik5E7X4xi0KnlZBNFA1zOQ+SH/vHMWd2mC9QTOz7GpA==" + }, + "compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "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.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true + } + } + }, + "configstore": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.0.tgz", + "integrity": "sha1-Rd+QcHPibfoc9LLVL1tgVF6qEdE=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "copy-dir": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-0.3.0.tgz", + "integrity": "sha1-3rLcL6nJKQ7UfIQVWpmabUX1o1g=", + "dev": true + }, + "core-js": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cp-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-3.2.0.tgz", + "integrity": "sha1-b4NhYlRiTwrViqSqjQdvAmvn4Yg=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true + }, + "cross-spawn-async": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=" + }, + "crypto-browserify": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.0.tgz", + "integrity": "sha1-NlKgkGq5sqfgw85mpAjpV6JIVSI=", + "dev": true + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "csv-stringify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-1.0.4.tgz", + "integrity": "sha1-vBi6ua1M7zGV/SV5gLWLR5xC0+U=" + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=" + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decompress-zip": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.0.tgz", + "integrity": "sha1-rjvLfjTGWHmt/nfhnDD4ZgK0vbA=", + "dev": true + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "deferred-leveldown": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.1.tgz", + "integrity": "sha1-XSXDMQ9f6QmUb2JA3J+Q3RCace8=" + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true + }, + "detective": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", + "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", + "dev": true, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true + }, + "docco": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/docco/-/docco-0.7.0.tgz", + "integrity": "sha1-1gblqZDLoFLKHhgDqcWH7O48XDg=", + "dev": true + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "dot-parts": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dot-parts/-/dot-parts-1.0.1.tgz", + "integrity": "sha1-iEvXvPwwgv+tL+XbU+SU2PPgdD8=", + "dev": true + }, + "dot-prop": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.1.1.tgz", + "integrity": "sha1-qEk/C3te7sglJbXHWH+n3nyoWcE=", + "dev": true + }, + "ds-store": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ds-store/-/ds-store-0.1.6.tgz", + "integrity": "sha1-0QJO90btDBPw9/7IXH6FjoxLfKc=", + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true + }, + "electron": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/electron/-/electron-1.6.11.tgz", + "integrity": "sha1-vnnA69zv7bW/KBF0CYAPpTus7/o=", + "dev": true + }, + "electron-builder": { + "version": "18.8.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-18.8.1.tgz", + "integrity": "sha512-NpzryxnocKYjGFUrCYYdk3aF0Bq6hEPO14uSo7aYalagVFvMrQh6riVFQixClroX9rcDU+bBbKBSPepEtu55cA==", + "dev": true, + "dependencies": { + "ajv": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.0.tgz", + "integrity": "sha1-wXNQJMXaLvdcwZBxMHPUTwmL9IY=", + "dev": true + }, + "electron-download-tf": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/electron-download-tf/-/electron-download-tf-4.3.1.tgz", + "integrity": "sha1-eTDySgjjZp6q04pffyiKEEYcr3I=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "sumchecker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", + "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", + "dev": true + } + } + }, + "electron-builder-core": { + "version": "18.7.0", + "resolved": "https://registry.npmjs.org/electron-builder-core/-/electron-builder-core-18.7.0.tgz", + "integrity": "sha512-gXQpgtsudDs9CuAthtQHhBDukFt8JNNxOkx60Dy8VAu6AUXmZhfdwb1XyH43axtDlJH5sFBFJVWP68h05LbGzw==", + "dev": true + }, + "electron-builder-http": { + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/electron-builder-http/-/electron-builder-http-18.8.0.tgz", + "integrity": "sha512-pqTGItyJs8aZLJYHtsWZQcBZFCuUrUKE966ElGEvMOySMr1WrntuOyK1CGQGZYhReXoImHzr4zcdzX1gZRsjRw==", + "dev": true + }, + "electron-builder-util": { + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/electron-builder-util/-/electron-builder-util-18.8.0.tgz", + "integrity": "sha512-E0J4RAoDl+95/QQAfmaSIESyUYJFuRmsLOakUvblN2KSIypJwrCKRzOIpwXphtXg1WLOegdUk/JfuzClrURb9w==", + "dev": true + }, + "electron-debug": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/electron-debug/-/electron-debug-1.2.0.tgz", + "integrity": "sha1-IuUac+G/CV0LtRpsPZeiAzZMQiI=" + }, + "electron-download": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", + "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", + "dev": true, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "electron-is-accelerator": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/electron-is-accelerator/-/electron-is-accelerator-0.1.2.tgz", + "integrity": "sha1-UJ5RDCala1Xhf4Y6SwThEYRqsns=" + }, + "electron-is-dev": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.1.2.tgz", + "integrity": "sha1-ihBD4ys6HaHD9VPc4oznZCRhZ+M=" + }, + "electron-localshortcut": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/electron-localshortcut/-/electron-localshortcut-2.0.2.tgz", + "integrity": "sha512-PVPhNwQ7hOPRqGZuK0YTzjAu2gzPOPCDPDU7kzXuuFtNNNAdOdpaXe8XTJW7LOw9JdmT/akrzdGitZ+6xOSnIw==" + }, + "electron-osx-sign": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.6.tgz", + "integrity": "sha1-I5ji18q1wdjD7quxzUkDdlKOw5o=", + "dev": true, + "dependencies": { + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "electron-packager": { + "version": "8.7.2", + "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-8.7.2.tgz", + "integrity": "sha1-RX078kvJYHwGrUsettqkrMrcIQg=", + "dev": true, + "dependencies": { + "electron-download": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.0.tgz", + "integrity": "sha1-v5MsdG8vh//MCdHdRy8v9rkYeEU=", + "dev": true, + "dependencies": { + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "dev": true + } + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "sumchecker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", + "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", + "dev": true + } + } + }, + "electron-publish": { + "version": "18.8.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-18.8.0.tgz", + "integrity": "sha512-T/6zvotjnGYvLYA0AXLsV+gd5fpvltqMIYeGjlbdoQdYmifi6hS5Eq9sFepP6J6lEQhJMA70THEx1JRfu9V2YQ==", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true + }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dependencies": { + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" + } + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true + }, + "es5-ext": { + "version": "0.10.23", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz", + "integrity": "sha1-dXi1G+l0IHpUh4IbVlOMIk5Oezg=" + }, + "es6-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=" + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=" + }, + "es6-promise": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", + "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=" + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.1.0.tgz", + "integrity": "sha1-xmOSP24gqtSNDA+knzHG1PSTYM8=", + "dev": true, + "dependencies": { + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true + }, + "esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=", + "dev": true + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true + } + } + }, + "espree": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.7.tgz", + "integrity": "sha1-/V3ux2qXpRIKnNOnyxF3oJI7EdI=", + "dev": true, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "esprima-fb": { + "version": "3001.1.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", + "integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE=", + "dev": true + }, + "estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", + "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "dev": true + }, + "execa": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", + "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true + }, + "exposify": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/exposify/-/exposify-0.5.0.tgz", + "integrity": "sha1-+S0AlMJls/VT4fpFagOhiD0QWcw=", + "dev": true, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "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 + }, + "through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", + "dev": true + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true + }, + "extract-zip": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.5.tgz", + "integrity": "sha1-maBnNbbqIOqbcF13ms/8yHz/BEA=", + "dev": true, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "readable-stream": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + }, + "falafel": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz", + "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=" + }, + "fast-deep-equal": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz", + "integrity": "sha1-XG9FmaumszPuM0Li7ZeGcvEAH40=", + "dev": true + }, + "fcopy-pre-bundled": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fcopy-pre-bundled/-/fcopy-pre-bundled-0.1.2.tgz", + "integrity": "sha512-tsboc66HjCjXf93MAA316XR4IiL+NFoohvyczR+T/YnVbqVe9V3KchaJMlWLbH+fNX4seugCx3rCqGN9KT+zkg==", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true + }, + "ffmpeg-static": { + "version": "git+ssh://git@github.com/pietrop/ffmpeg-static.git#5355dfdcd79f52a662a3849a18d620d43ca71303" + }, + "ffprobe-static": { + "version": "git+https://github.com/pietrop/ffprobe-static.git#cf75a358c695bd58c94823efb06dab258d019ccb" + }, + "file-saver": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", + "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI=" + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true + }, + "find-parent-dir": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", + "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "fluent-ffmpeg": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz", + "integrity": "sha1-yVLeIkD4EuvaCqgAbXd27irPfXQ=" + }, + "fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=" + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=" + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true + }, + "fs-extra-p": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.3.0.tgz", + "integrity": "sha1-LhSKVEKH3wJYkxyrxYMGO07tIwM=", + "dev": true + }, + "fs-temp": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fs-temp/-/fs-temp-1.1.2.tgz", + "integrity": "sha1-zFLwOLvv5RD2vNCexZK3nQ9pJT8=", + "dev": true + }, + "fs-xattr": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/fs-xattr/-/fs-xattr-0.1.15.tgz", + "integrity": "sha1-huFirCcn5msi/LtF69IMV5Pnq/Q=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "dev": true, + "optional": true, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "dev": true, + "optional": true + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "optional": true + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "dev": true + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=" + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-package-info": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-package-info/-/get-package-info-1.0.0.tgz", + "integrity": "sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw=", + "dev": true, + "dependencies": { + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/globo/-/globo-1.1.0.tgz", + "integrity": "sha1-DSYJiVXepCLrIAGxBImLChAcqvM=", + "dev": true + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=" + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" + }, + "has-require": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/has-require/-/has-require-1.2.2.tgz", + "integrity": "sha1-khZ1qxMNvZdo/I2o8ajiQt+kF3Q=", + "dev": true + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true + }, + "hash.js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.2.tgz", + "integrity": "sha512-SsNl8Ro2uz5xUTRYq8ysWzX8B7jCj7pLvX3opktaI6ZrTT2YElqjFVJXHJZe+5Aby20c9UC7elCjJDe1dhTaAw==", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "hat": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", + "integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=" + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=" + }, + "highlight.js": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", + "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true + }, + "hnp": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/hnp/-/hnp-0.0.1.tgz", + "integrity": "sha1-2RSJpd/N9BznQVhCmKcwZldqkoY=" + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true + }, + "home-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.5.tgz", + "integrity": "sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "html-minifier": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-0.5.6.tgz", + "integrity": "sha1-DxW0N8J7XOmqhKRMooUIgOkleZY=" + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=" + }, + "httperror": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/httperror/-/httperror-0.2.3.tgz", + "integrity": "sha1-yW4NZsvPbg4Z2A5HJ6laCddf4Lg=" + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + }, + "inherits": { + "version": "github:Ivshti/inherits#0c5b02ddc4172bf2e55460916401ac37cfe6f9d3" + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true + }, + "insert-module-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true + }, + "is-ci": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", + "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", + "dev": true + }, + "is-defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-defined/-/is-defined-1.0.0.tgz", + "integrity": "sha1-HwfKZ9Vx9ZTEsUQVpF9774j5K/U=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + }, + "is-in-browser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", + "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" + }, + "is-my-json-valid": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", + "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=" + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jasmine": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.6.0.tgz", + "integrity": "sha1-ayLnCIPo5YnUVjRhU7TSBt2+IX8=", + "dev": true + }, + "jasmine-core": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.4.tgz", + "integrity": "sha1-3skmzQqfoof7bbXHVfpIfnTOysU=", + "dev": true + }, + "jquery": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-1.12.4.tgz", + "integrity": "sha1-AeHfuikP5z3rp3zurLD5ui/sngw=" + }, + "jquery-sortable": { + "version": "0.9.13", + "resolved": "https://registry.npmjs.org/jquery-sortable/-/jquery-sortable-0.9.13.tgz", + "integrity": "sha1-HL+2VQE6B0c3BXHwbiL1JKAP+6I=", + "dependencies": { + "jquery": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", + "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=" + } + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz", + "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=", + "dev": true, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "js2xmlparser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-1.0.0.tgz", + "integrity": "sha1-WhcPLo1kds5FQF4EgjJCUTeC/jA=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsdoc": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.4.3.tgz", + "integrity": "sha1-5XQNYUXGgfZnnmwXeDqI292XzNM=", + "dev": true, + "dependencies": { + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-bigint": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.1.4.tgz", + "integrity": "sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.0.tgz", + "integrity": "sha1-kufHRE5f/V+jLmqa6LhQNN+DR9A=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" + }, + "JSONStream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.0.7.tgz", + "integrity": "sha1-cAyORxH+8c5CH2UL6tVSNbsh194=" + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "keydir": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/keydir/-/keydir-2.1.1.tgz", + "integrity": "sha1-qYHz5/DDw3UdQ1cg5u3jvmol07c=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true + }, + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "dev": true + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true + }, + "level-codec": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-6.1.0.tgz", + "integrity": "sha1-9d8KmVgvdtrEOFUVGrb05NDWAEU=" + }, + "level-errors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.4.tgz", + "integrity": "sha1-NYXmI5dMc3qTdVSSpDwCZ82kQl8=" + }, + "level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=" + }, + "leveldown-open": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/leveldown-open/-/leveldown-open-1.0.3.tgz", + "integrity": "sha1-gJT771sbjFJS8yOewUUX6fhmWgI=" + }, + "levelup": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.8.tgz", + "integrity": "sha1-+0QsSI776hBD9+uZKaeSp0+9HaY=" + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "dev": true + }, + "linvodb3": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/linvodb3/-/linvodb3-3.24.0.tgz", + "integrity": "sha1-fVhtEcADSHQDw5fEWK8gxCfsu0Q=", + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "bagpipe": { + "version": "github:ivshti/bagpipe#328cc576d682539d635af3a8c360696af353e44a" + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true + }, + "ltgt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-1.2.0.tgz", + "integrity": "sha1-YXcH3DnzgpRBXmagLzwnBaxAeGY=" + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "macos-alias": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/macos-alias/-/macos-alias-0.2.11.tgz", + "integrity": "sha1-/u6mwTuhGYFKQ/xDxHCzHlnvcYo=", + "dev": true + }, + "make-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", + "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "marked": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=", + "dev": true + }, + "medea": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/medea/-/medea-1.0.3.tgz", + "integrity": "sha1-0WNlsxXvZNbMjsyOwW22RC/1JYM=", + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + } + } + }, + "medeadown": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/medeadown/-/medeadown-1.1.8.tgz", + "integrity": "sha1-tY+6gN68NRTZ4L1EeBPQlqFrsCc=", + "dependencies": { + "abstract-leveldown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-1.0.0.tgz", + "integrity": "sha1-q83BgnkzExeFJp1dwtYy1Ophl2o=" + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=" + } + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true + }, + "miller-rabin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "dev": true + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=" + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdir-p": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mkdir-p/-/mkdir-p-0.0.7.tgz", + "integrity": "sha1-JMXb4m2jqZ7xWKHu+aXC3Z3laDw=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" + }, + "mkpath": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=", + "dev": true + }, + "mksnapshot": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.1.tgz", + "integrity": "sha1-JQHAVldDbXQs6Vik/5LHfkDdN+Y=", + "dev": true, + "dependencies": { + "fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true + } + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "moment": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" + }, + "monotonic-timestamp": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/monotonic-timestamp/-/monotonic-timestamp-0.0.8.tgz", + "integrity": "sha1-Z5h9AqQcFfVotsCgWIWYndJAK6A=" + }, + "mothership": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mothership/-/mothership-0.2.0.tgz", + "integrity": "sha1-k9SKL7w+UOKl/I7VhvW8RMZfmpk=", + "dev": true + }, + "mousetrap": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.1.tgz", + "integrity": "sha1-KghfXHUSlMdefoH27CVFspy/Qtk=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "murmur-32": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/murmur-32/-/murmur-32-0.1.0.tgz", + "integrity": "sha1-waedT8X6vwQFdJ0K/3fEFAIFWGE=", + "dev": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" + }, + "nested-error-stacks": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", + "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", + "dev": true + }, + "node-emoji": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.5.1.tgz", + "integrity": "sha1-/ZGOQSdpv4xEgFEjgjOECyr/FqE=", + "dev": true + }, + "node-forge": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", + "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", + "dev": true + }, + "node-timecodes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/node-timecodes/-/node-timecodes-2.4.1.tgz", + "integrity": "sha1-mqI9mGjRQ4/T7BnREhl54+OtfaY=" + }, + "node-underscorify": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/node-underscorify/-/node-underscorify-0.0.14.tgz", + "integrity": "sha1-PRC7aHoLYgfpvFeyAqGb7E7mz78=", + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true + }, + "npm-run-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", + "dev": true + }, + "nugget": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", + "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=" + }, + "object.pick": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.1.2.tgz", + "integrity": "sha1-wk2mzkXxDFqr5xeX0WqDnNWWmx4=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + }, + "os-browserify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "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 + }, + "os-locale": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.0.0.tgz", + "integrity": "sha1-FZGN7VEFIrge565aMJ1U9jn8OaQ=", + "dev": true, + "dependencies": { + "execa": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.5.1.tgz", + "integrity": "sha1-3j+4XLjW6RyFvLzrFkWBeFy1ezY=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true + }, + "parse-color": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", + "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true + }, + "patch-text": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/patch-text/-/patch-text-1.0.2.tgz", + "integrity": "sha1-S/NuZeUXM9bpjwz2LgkDTaoDSKw=", + "dev": true + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=" + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", + "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-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.12.tgz", + "integrity": "sha1-vjZ4XFBn6kjYBv+SMojF91C2uKI=", + "dev": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "pidlockfile": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pidlockfile/-/pidlockfile-1.1.1.tgz", + "integrity": "sha1-1nMS+zJt7rReVBmkfBQYd708yYw=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=" + }, + "plist": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", + "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", + "dev": true, + "dependencies": { + "base64-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", + "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=", + "dev": true + } + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true + }, + "private": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dev": true, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dev": true + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true + } + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "q": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "random-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/random-path/-/random-path-0.1.1.tgz", + "integrity": "sha1-+PTTb3WhNMoV/TnH11BfvxY7Y0w=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "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 + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true + }, + "rc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "rcedit": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-0.9.0.tgz", + "integrity": "sha1-ORDfVzRTmeKwMl9KUZAH+J5V7xw=", + "dev": true + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true + }, + "registry-auth-token": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", + "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "dev": true + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", + "dev": true + }, + "rename-function-calls": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/rename-function-calls/-/rename-function-calls-0.1.1.tgz", + "integrity": "sha1-f4M2nAB6MAf2q+MDPM+BaGoQjgE=", + "dev": true, + "dependencies": { + "detective": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-3.1.0.tgz", + "integrity": "sha1-d3gkRKt1K4jKG+Lp0KA5Xx2iXu0=", + "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": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true + }, + "replace-requires": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/replace-requires/-/replace-requires-1.0.4.tgz", + "integrity": "sha1-AUtzMLa54lV7cQQ7ZvsCZgw79mc=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-globify": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/require-globify/-/require-globify-1.4.1.tgz", + "integrity": "sha1-Wxf6WcoyUkJk/T0i0+QNlP6qRFg=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "resolve": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", + "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "dev": true + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true + }, + "run-parallel": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.6.tgz", + "integrity": "sha1-KQA8miFj4B4tLfyQV18sbB1hoDk=" + }, + "run-series": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.4.tgz", + "integrity": "sha1-iac93F51ye+KtjIMChYA1qQRebk=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "sanitize-filename": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", + "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "dev": true + }, + "semver": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.1.tgz", + "integrity": "sha1-oykqNz5vPgeY2gsgZBuanFvEfhk=" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "sha.js": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "dev": true + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "dependencies": { + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true + } + } + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "single-line-log": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", + "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=" + }, + "solr-client": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/solr-client/-/solr-client-0.6.0.tgz", + "integrity": "sha1-xc7bi4bjOr7pkpBcl7ImV0pJBZQ=", + "dependencies": { + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=" + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=" + }, + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=" + }, + "bl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=" + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + }, + "form-data": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", + "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=" + }, + "har-validator": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", + "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=" + }, + "http-signature": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz", + "integrity": "sha1-F5bPZ6ABrVzWhJ3KCZFIXwkIn+Y=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" + }, + "qs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", + "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=" + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=" + }, + "request": { + "version": "2.63.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.63.0.tgz", + "integrity": "sha1-yD58NIXl2b+bFGMYQpvEjxJT2L4=" + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" + } + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "source-map-support": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", + "dev": true + }, + "sprintf-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", + "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, + "stat-mode": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", + "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "dev": true + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "string": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/string/-/string-3.3.1.tgz", + "integrity": "sha1-jSdX7BwObFJnlvu2sUA2pAmDmLc=" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + }, + "string.prototype.codepointat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz", + "integrity": "sha1-aybpvTr8qnvjtCabUm3huCAArHg=", + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "sumchecker": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", + "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "syntax-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "dev": true, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "tempfile": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "dev": true, + "dependencies": { + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "term-size": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-0.1.1.tgz", + "integrity": "sha1-hzYLljlsq1dgljcUzaDQy+7K2co=", + "dev": true + }, + "ternary": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ternary/-/ternary-1.0.0.tgz", + "integrity": "sha1-RXAnJWCMlJnUapYQ6bDkn/JveJ4=", + "dev": true + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", + "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=" + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true + }, + "tmp": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "dev": true + }, + "tn1150": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tn1150/-/tn1150-0.1.0.tgz", + "integrity": "sha1-ZzUD0k1WuH3ouMd/7j/AhT1ZoY0=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "touch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", + "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=", + "dev": true, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true + } + } + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=" + }, + "transformify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/transformify/-/transformify-0.1.2.tgz", + "integrity": "sha1-mk9CoVRDPdcnuAV1Qoo8nlSJ6/E=", + "dev": true + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.2.tgz", + "integrity": "sha1-EBezLZhP9VbroQD1AViauhrOLgQ=" + }, + "umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "underscore.string": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", + "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=" + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true + }, + "universalify": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.0.tgz", + "integrity": "sha1-nrHEZR3rzGcMyU8adXYjMruWd3g=", + "dev": true + }, + "unorm": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", + "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", + "dev": true + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "update-notifier": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz", + "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "dev": true + }, + "util": { + "version": "github:ivshti/node-util#97b6beed8e0e478cd4184965ac94bf316f94e5f5" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "uuid-1345": { + "version": "0.99.6", + "resolved": "https://registry.npmjs.org/uuid-1345/-/uuid-1345-0.99.6.tgz", + "integrity": "sha1-sScK4BWnchx63sbEbsFpxgmK7UA=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true + }, + "vcap_services": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/vcap_services/-/vcap_services-0.2.0.tgz", + "integrity": "sha1-zlNqhWniczyznmzFOUVvxXZ1nyg=" + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=" + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true + }, + "watchify": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.9.0.tgz", + "integrity": "sha1-8HX9LoqGrN6Eztum5cKgvt1SPZ4=", + "dev": true, + "dependencies": { + "browserify": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.4.0.tgz", + "integrity": "sha1-CJo0Y69Y0OSNjNQHCz90ZU1avKk=", + "dev": true + }, + "buffer": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.6.tgz", + "integrity": "sha1-LqZp9+7Atu2gWwj4tf9mGyhXNYg=", + "dev": true + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "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.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.2.tgz", + "integrity": "sha1-WgTfBeT1f+Pw3Gj90R3FyXx+b00=", + "dev": true, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "watson-developer-cloud": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watson-developer-cloud/-/watson-developer-cloud-2.4.1.tgz", + "integrity": "sha1-sjqpi/KxsxsaX1KUJlO64iyxmWE=", + "dependencies": { + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + }, + "form-data": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", + "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=" + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=" + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=" + }, + "request": { + "version": "2.74.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.74.0.tgz", + "integrity": "sha1-dpPKdou7DqXIzgjAhKRe+gW4kqs=" + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" + } + } + }, + "websocket": { + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.24.tgz", + "integrity": "sha1-dJA+dfJUW2suHeFCW8HJBZF6GJA=" + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=" + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "widest-line": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", + "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.1.0.tgz", + "integrity": "sha512-0TZ20a+xcIl4u0+Mj5xDH2yOWdmQiXlKf9Hm+TgDXjTMsEYb+gDrmb8e8UNAzMCitX8NBqG4Z/FUQIyzv/R1JQ==", + "dev": true + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", + "dev": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true + }, + "string-width": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "integrity": "sha1-AwZkVh/BRslCPsfZeP4kV0N/5tA=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 71131af..1a3f3f3 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "electron": "electron .", "make_js": "browserify lib/app/app.js > electron/app.js", "start": "npm run make_js && npm run electron", - "pack": "build --dir", "pack:mac": "build --dir --mac --x64", "pack:linux": "build --dir --linux --x64", @@ -19,15 +18,13 @@ "build:mac_app_store": "echo 'Mac App Store Option Not currently implemented'", "build:win": "build --win nsis-web --x64", "build:linux": "build --linux --x64", - "publish:github": "build --publish always --draft true", - "make_demo": "npm run make_js && node ./config/make_demo.js", "preview_page": "npm run make_demo && jekyll serve --source project_page --destination docs", "preview_page_no_demo_reload": "jekyll serve --source project_page --destination docs", "make_page": "npm run make_demo && jekyll build --source project_page --destination docs" }, - "build": { + "build": { "appId": "org.autoEdit2.autoEdit2-electron", "asar": false, "files": [ @@ -100,7 +97,7 @@ "win": { "target": "nsis", "icon": "build/icon.ico", - "files": [ + "files": [ "node_modules/ffmpeg-static/bin/win/${arch}/ffmpeg", "!node_modules/ffmpeg-static/bin/win/ia32${/*}", "!node_modules/ffmpeg-static/bin/linux${/*}", @@ -116,15 +113,16 @@ "license": "MIT", "dependencies": { "backbone": "^1.3.3", + "bagpipe": "^0.3.5", "bootstrap": "^3.3.7", "electron-debug": "^1.1.0", "ffmpeg-static": "git@github.com:pietrop/ffmpeg-static.git", - "ffprobe-static": "git@github.com:pietrop/ffprobe-static.git", + "ffprobe-static": "git+https://github.com/pietrop/ffprobe-static.git", "file-saver": "^1.3.3", "fluent-ffmpeg": "^2.1.0", "jquery": "1.12.4", "jquery-sortable": "^0.9.13", - "linvodb3": "^3.24.0", + "linvodb3": "3.24.0", "medeadown": "^1.1.8", "moment": "^2.15.2", "mousetrap": "^1.6.0", @@ -140,7 +138,7 @@ "devDependencies": { "appdmg": "^0.4.5", "babelify": "^7.3.0", - "browserify": "^13.1.1", + "browserify": "^13.3.0", "browserify-shim": "^3.8.12", "copy-dir": "^0.3.0", "docco": "^0.7.0", From ae851e50fb46206d875aebade12217a5c9020909 Mon Sep 17 00:00:00 2001 From: pietrop Date: Thu, 29 Jun 2017 15:27:37 +0800 Subject: [PATCH 2/4] IBM works --- electron/app.js | 18 ++++-------------- .../transcriber/index.js | 10 +++++----- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/electron/app.js b/electron/app.js index 8d6768d..1e71685 100644 --- a/electron/app.js +++ b/electron/app.js @@ -727,20 +727,10 @@ module.exports = Backbone.Router.extend({ settingsPanel: function () { console.debug('Router: settings panel: '); - var tmpSettings = { credentials: { ibm: window.IBMWatsonKeys(), microsoft: { key: "TBC" }, google: window.GoogleKeys() - //TODO: do window.GoogleKeys(); - // { - // "type": "service_account", - // "project_id": "titanium-link-161713", - // "private_key_id": "b194464245ccea9a5f7318af1333d26b116ff7ca", - // "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC5g5zIssy76yUg\nXxI98RYJs3gXwNXTZeXewdOGtA+7wXz2YB8tRvns0qL+B1lubXEKcvuDwI460MHU\nVmOpfKiYB4KB5JFMfotuKygIsOi798MpOR9Vkpzs4g73q1XVpmVfvlhG/tYH+ATH\nRD64G9Ay30DbPDWpZ+eYLh9mOpFtqzPyXzBoBFgVkm/DmO0ntYHEShPeeanviKkg\nqBGjzqOmbaIBUHMX3x2LEoq1zb6CwxnitONPdd3BiMZ1zJCa2+tCiSOhYOiCsQRJ\n2882Nk1PNuERBiOY9jCcjcut9mAA3fHDIh5f+mj54QgIiaTTSFNNPl+816yv61v4\ng+KohjXJAgMBAAECggEADTeWi8kLY6ca9822OcILuSi3eW/EfEGCCWcjWDFLfqvI\nKLCMABiStWADe1hQM5kqCN3M1CP7ri6R5Lw78Qcf5ucAEhuUC5BnhDOgcFAUYNID\n7lOyyxC9S/ZGLTigjq6CgfoIhZRh8OLnij/vPQRERt+XmhcV1qo/upysoYayNk8x\nVQAzcNqtFJYoMh0ZTEwnGRH8krnZRT3x1f+WTPo46ejlqSGuZ1kxxsXsjtl1ovvO\nuXX0aL0I//M+IaSkBmDUqAaPtw0of6Br3FF/L0SwBDQdv81+o5oEhC2fC3uWXfV4\n/gystrTbxvhvBgi1WKJ6CIZHNHmiYj1T+rHslmJRFQKBgQDx7Jso895Ya8qqsmjV\nWRrOWRmUuSWatgyZIUtGA2lb6g9PSCc/OpvcCpO0Du61FVmVi+yOQa84yFYOEcne\nIJbeYxsQE6e79xTm5U96+nNGrhmo/X0oNT16x03rB+2biwoA52W/ESb0RJoBeqxN\nsOd1fhnUWXZrXUrcyjhBUfYAHQKBgQDETssQWKj7xRIyBUK2Jwro3NO4zFlIK8Ce\nftbIR1CFQghn24FAoyeWwmZlHjNm/g/goAx5secryxbWHPCp5WxDZGaCw3loX4iR\n2/D6JvZJe555zetKJJf1YVaQR86hwJtSNz8NHYhinGbk3WfTYWJS58i18oOZIoE7\nyKNdchd0nQKBgD/UCD/uz6wOjIMq3SPlBYCJ24j0rGo8O+iu8xg+0C5y+6UUSV6S\nTQrqM3wfMHXQczlUmI4T4HIf0SyXHuafPI7iIQLF3Mxn7TjaKXUt3Po59wUyFDJm\nkZjyOqmXBuax8Wq5ooudr+RksSlQv2MkGH1UTuZK0EaVb6n/JIZ/ZGM1AoGBAJ+m\ngQk7Qbr4jBK4KogfeoTlSx8IujeytYVxHFZngTnO+S0V3Klnx0OZuFLWW/GP//Or\n1lmGcL4x/dGGWceieQjZ93CzbuKOh3AwUmvvEe+zJLBk4s06s4bxccgHTipIjUkw\n+ws8kHW6QwgwdEb59U/9h0NKBvKcmEO5qfrOVfsVAoGBAJCzR5Iv5q0nbU0LTtmg\nZFAGO1J3rNDavFpDYDumJzJgG9qhIa5r6JQS+kDxtaysTks2zuveUlESAQsuL/1P\nhk9/uooJ7H3lalf+hvYkc8roJNhPmnZ1Fl+aOt0nPaVYb4yYN6m1nmGMSUEEZXLq\nB6bpLCUGjtVppgQ5E+z+ieIO\n-----END PRIVATE KEY-----\n", - // "client_email": "test-stt@titanium-link-161713.iam.gserviceaccount.com", - // "client_id": "114550441534194190431", - // "auth_uri": "https://accounts.google.com/o/oauth2/auth", - // "token_uri": "https://accounts.google.com/o/oauth2/token", - // "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - // "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-stt%40titanium-link-161713.iam.gserviceaccount.com" - // } + var tmpSettings = { credentials: { + ibm: window.IBMWatsonKeys(), + microsoft: { key: "TBC" }, + google: window.GoogleKeys() } }; var settingsView = new SettingsView({ settings: tmpSettings }); displayMain(settingsView); diff --git a/lib/interactive_transcription_generator/transcriber/index.js b/lib/interactive_transcription_generator/transcriber/index.js index 42d3cc2..f4af81b 100644 --- a/lib/interactive_transcription_generator/transcriber/index.js +++ b/lib/interactive_transcription_generator/transcriber/index.js @@ -70,7 +70,7 @@ * @tutorial IBM_watson_stt_specs */ -// "use strict"; +"use strict"; var convertToWav = require('./convert_to_audio.js'); var split = require('./split.js'); @@ -184,21 +184,21 @@ var writeOutGoogle = require('./google_stt/write_out.js'); var SendToGoogleUtil = new SendToGoogle(); var googleSttExtension = 'flac'; - var out = []; - var total = 0; + // var out = []; + // var total = 0; var googleKeys = {projectId: config.keys.project_id, keyFilename: config.keys.path }; split(newFile, tmpFolder, ffmpegPath, ffprobePath, googleSttExtension, function(files) { //iterate [optional] // reading number of audio files total = files.length; //3. iterate and send to STT - files.forEach(function(f, index) { + files.forEach(function(f) { // TODO: change param to config object to make self documenting. SendToGoogleUtil.send(f.name, googleKeys, config.languageModel, function(err, data){ // receive if(err){ console.error('ERROR:', err); - callback(error, null ); + callback(err, null ); } //parse var parsed = parseGoogle(data, f.offset); From c6c048b031289bc976787a14967a82d66391d063 Mon Sep 17 00:00:00 2001 From: pietrop Date: Mon, 11 Sep 2017 11:19:10 -0300 Subject: [PATCH 3/4] commiting in branch google stt --- .npmrc | 4 + README.md | 35 + docs/index.html | 2 +- electron/app.js | 56 +- electron/google_keys.js | 35 +- electron/index.html | 2 +- lib/app/templates/settings_template.html.ejs | 45 +- .../transcription_form_template.html.ejs | 113 +- lib/app/views/settings_view.js | 28 +- .../transcriber/baidu_stt_node | 1 + .../transcriber/google_stt/convert_to_json.js | 2 + .../google_stt/convert_to_json.test.js | 502 +++++++++ .../transcriber/google_stt/parse.js | 103 +- .../transcriber/google_stt/parse.test.js | 978 ++++++++++++++++++ .../transcriber/google_stt/send_to_google.js | 98 +- .../transcriber/google_stt/write_out.js | 52 +- .../transcriber/google_stt/write_out.test.js | 431 ++++++++ .../transcriber/ibm_stt_node/parse.js | 2 +- .../transcriber/index.js | 56 +- .../transcriber/split.js | 4 +- package-lock.json | 298 +++--- package.json | 14 +- project_page/_config.yml | 2 +- 23 files changed, 2408 insertions(+), 455 deletions(-) create mode 100644 .npmrc create mode 160000 lib/interactive_transcription_generator/transcriber/baidu_stt_node create mode 100644 lib/interactive_transcription_generator/transcriber/google_stt/convert_to_json.test.js create mode 100644 lib/interactive_transcription_generator/transcriber/google_stt/parse.test.js create mode 100644 lib/interactive_transcription_generator/transcriber/google_stt/write_out.test.js diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..0fbf021 --- /dev/null +++ b/.npmrc @@ -0,0 +1,4 @@ +runtime = electron +target = 1.6.11 +target_arch = x64 +disturl = https://atom.io/download/atom-shell \ No newline at end of file diff --git a/README.md b/README.md index 9577e0b..62d983d 100644 --- a/README.md +++ b/README.md @@ -127,3 +127,38 @@ List of contributors that have helped shaped this version of autoEdit by contrib + + diff --git a/docs/index.html b/docs/index.html index 5990116..33b48ec 100644 --- a/docs/index.html +++ b/docs/index.html @@ -200,7 +200,7 @@

    Open source

    pietro@autoEdit.io | -Twitter | +Twitter | Facebook | Mailing list diff --git a/electron/app.js b/electron/app.js index 1e71685..d1c8f10 100644 --- a/electron/app.js +++ b/electron/app.js @@ -1211,27 +1211,9 @@ __p+='\n \n \n\n \n\n

    \n\n '; +__p+='\n \n \n\n \n\n

    \n\n '; }else{ __p+='\n\n \n '; } -__p+='\n \n \n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n\n
    \n\n \n \n\n \n
    \n
    \n\n

    IBM is fast and more accurate while Gentle is free of charge, works offline, and is only in English. Use Gentle if you are working with sensitve informations. Integration with Gentle is a bit more experimental at this stage. Follow the link for more info on setting it up\n .\n

    \n

    With IBM chose narrowband for telephone recordings, everything else is broadband.\n

    \n

    The IBM option always takes 5 minutes to generate a transcription regardless of the length of the media(audio or video file). In the current version Pocketsphinx and Gentle take slightly more then the duration of the media(audio or video) to do a full transcription (eg 27min will take 30min to transcribe).

    \n\n
    \n\n
    \n
    \n \n
    \n
    \n \n \n

    Chose the language of your media file. The default is English US.

    \n

    IBM® recommends that you use narrowband model for decoding of telephone speech.

    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n \n

    Chose the language of your media file. The default is English US.

    \n
    \n
    \n \n\n
    \n
    \n
    \n \n Coming soon\n \n
    \n
    \n \n \n

    Chose the language of your media file. The default is English US.

    \n
    \n
    \n \n\n\n\n\n
    \n \n
    \n
    \n
    \n See User manual for extra setup needed, Only support US English For now
    \n \n\n\n
    \n
    \n
    \n Does not require extra setup, only supports US English for now
    \n\n
    \n
    \n
    \n coming soon\n
    \n
    \n\n
    \n\n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n\n
    \n\n \n \n\n \n
    \n
    \n\n

    IBM is fast and more accurate while Gentle is free of charge, works offline, and is only in English. Use Gentle if you are working with sensitve informations. Integration with Gentle is a bit more experimental at this stage. Follow the link for more info on setting it up\n .\n

    \n

    With IBM choose narrowband for telephone recordings, everything else is broadband.\n

    \n

    The IBM option always takes 5 minutes to generate a transcription regardless of the length of the media(audio or video file). In the current version Pocketsphinx and Gentle take slightly more then the duration of the media(audio or video) to do a full transcription (eg 27min will take 30min to transcribe).

    \n\n
    \n\n
    \n
    \n \n
    \n
    \n \n \n

    choose the language of your media file. The default is English US.

    \n

    IBM® recommends that you use narrowband model for decoding of telephone speech.

    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n \n

    choose the language of your media file. The default is English US.

    \n
    \n
    \n \n\n
    \n
    \n
    \n \n Coming soon\n \n
    \n
    \n \n \n

    choose the language of your media file. The default is English US.

    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n See User manual for extra setup needed, Only support US English For now
    \n \n\n\n
    \n
    \n
    \n Does not require extra setup, only supports US English for now
    \n\n
    \n
    \n
    \n coming soon\n
    \n
    \n\n
    \n\n
    \n \n
    \n
    \n \n \n
    \n
    \n \n