diff --git a/.gitignore b/.gitignore
index 93c6ac9925fbd5007cd056d82b05cabc453d55c8..835cccc5cec6b436ce607e1c79b06ae4dca2be6f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,4 +14,5 @@ packages/**/api/**/
 .config/
 .npm/
 .idea
-.DS_Store
\ No newline at end of file
+.DS_Store
+Automation/target
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e238f7b81efdecf15e3127971e79f201bb5d25e1..c20bea08c536b18a50922e524eb8423f94358341 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -75,7 +75,7 @@ push:staging:
   image: docker:latest
   when: manual
   only:
-    - develop
+    - staging
     - master
   stage: push
   variables:
@@ -159,7 +159,7 @@ deploy:staging:
   stage: deploy
   when: manual
   only:
-    - develop
+    - staging
     - master
   variables:
     PACKAGE_NAME: xpub-faraday
diff --git a/Automation/pom.xml b/Automation/pom.xml
index b0057d35e207f6893bccb22c4b9bc0e847cb171e..ce7035265f1bbb81780fdccdb209748e9ab4a07c 100644
--- a/Automation/pom.xml
+++ b/Automation/pom.xml
@@ -18,6 +18,14 @@
             <artifactId>json-simple</artifactId>
             <version>1.1.1</version>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/de.sven-jacobs/loremipsum -->
+        <dependency>
+            <groupId>de.sven-jacobs</groupId>
+            <artifactId>loremipsum</artifactId>
+            <version>1.0</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
+
 </project>
\ No newline at end of file
diff --git a/Automation/selenium.iml b/Automation/selenium.iml
index 27eca1e3004c9623c41bf6dd9fe3738969219c96..e98c1bf43bf05dde8ce158f614b60fb2fcc03ad8 100644
--- a/Automation/selenium.iml
+++ b/Automation/selenium.iml
@@ -9,6 +9,25 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="file://$MODULE_DIR$/../../../../rest-assured-3.1.0-dist/rest-assured-3.1.0-deps" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+        <jarDirectory url="file://$MODULE_DIR$/../../../../rest-assured-3.1.0-dist/rest-assured-3.1.0-deps" recursive="false" />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../../../../rest-assured-3.1.0-dist/rest-assured-3.1.0.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
     <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-server:3.4.0" level="project" />
     <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-java:3.4.0" level="project" />
     <orderEntry type="library" name="Maven: org.seleniumhq.selenium:selenium-api:3.4.0" level="project" />
@@ -59,24 +78,6 @@
     <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
     <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.15" level="project" />
     <orderEntry type="library" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/../../../../rest-assured-3.1.0-dist/rest-assured-3.1.0-deps" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-        <jarDirectory url="file://$MODULE_DIR$/../../../../rest-assured-3.1.0-dist/rest-assured-3.1.0-deps" recursive="false" />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/../../../../rest-assured-3.1.0-dist/rest-assured-3.1.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
+    <orderEntry type="library" scope="TEST" name="Maven: de.sven-jacobs:loremipsum:1.0" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/Automation/src/test/java/Constants.java b/Automation/src/test/java/Constants.java
index 9241623fffafecc3a4ef334d703ba8bfa53853d1..8ad3a853693eb3cea2abaa03da50f7e89652e718 100644
--- a/Automation/src/test/java/Constants.java
+++ b/Automation/src/test/java/Constants.java
@@ -1,7 +1,11 @@
 import org.apache.commons.lang3.RandomStringUtils;
+import de.svenjacobs.loremipsum.LoremIpsum;
 
 public class Constants {
-    public static final String URL = "http://qa.review.hindawi.com";
+
+    static LoremIpsum loremIpsum = new LoremIpsum();
+
+    public static final String URL = "https://qa.review.hindawi.com/";
     public static final String jurnalID = "4b0eb00f-37cb-4fad-bd0d-7ba8ee600123";
     public static final String customManuscriptID = RandomStringUtils.randomNumeric(7);
     public static final String email = "adrian.onofrei+";
@@ -15,13 +19,17 @@ public class Constants {
     public static final String firstnameHE = "Test HE";
     public static final String lastnameHE = "Test HE";
     public static final String passwordHE = "Testing123";
-    public static final String emailHE = "adrian.onofrei+HE";
+    public static final String emailHE = "adrian.onofrei+he";
+    public static final String emailRev = "adrian.onofrei+rev";
     public static final String affiliationHE = "TS HE affiliation";
-    public static final String manusName = RandomStringUtils.randomAlphabetic(16);
-    public static final String manusAbstract = RandomStringUtils.randomAlphanumeric(50);
+    public static final String manusName = "This is test manuscript from ";
+    public static final String manusAbstract = loremIpsum.getWords( 75 );
     public static final String fileManuscript = "/Users/adionofrei/Documents/Manuscript.pdf";
+    public static final String fileManuscriptName = "Manuscript (1).pdf";
     public static final String fileSupplementary = "/Users/adionofrei/Documents/Manuscript.pdf";
     public static final String fileCoverLetter = "/Users/adionofrei/Documents/Manuscript.pdf";
+    public static final String loremIpsumReport = loremIpsum.getParagraphs( 2 );
+    public static final String loremIpsumEditorialNote = loremIpsum.getWords( 75, 2 );
 
 
     public static String uidAuth = null;
@@ -29,3 +37,4 @@ public class Constants {
 
 
 }
+
diff --git a/Automation/src/test/java/CreateAccounts.java b/Automation/src/test/java/CreateAccounts.java
index a8b5fca1fdd64bc0008eb314627e10ee0c6dcb76..1f355202351239db98617d21a86a34a6354ebba6 100644
--- a/Automation/src/test/java/CreateAccounts.java
+++ b/Automation/src/test/java/CreateAccounts.java
@@ -1,17 +1,19 @@
+import io.restassured.RestAssured;
 import io.restassured.path.json.JsonPath;
+import io.restassured.response.Response;
+import io.restassured.specification.RequestSpecification;
+import org.json.simple.JSONObject;
 import org.junit.*;
 import org.openqa.selenium.*;
 import org.openqa.selenium.remote.DesiredCapabilities;
 import org.openqa.selenium.remote.RemoteWebDriver;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.WebDriverWait;
-import static org.junit.Assert.*;
-import io.restassured.RestAssured;
-import io.restassured.response.Response;
-import io.restassured.specification.RequestSpecification;
-import org.json.simple.JSONObject;
+
 import java.net.URL;
 
+import static org.junit.Assert.assertEquals;
+
 
 public class CreateAccounts {
 
@@ -53,7 +55,7 @@ public class CreateAccounts {
 
 
         try {
-            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='new-manuscript']")));
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test-id='new-manuscript']")));
         } catch (NoSuchElementException e) {
             System.out.println(e.toString());
         }
@@ -108,7 +110,7 @@ public class CreateAccounts {
 
 
         try {
-            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='new-manuscript']")));
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test-id='new-manuscript']")));
         } catch (NoSuchElementException e) {
             System.out.println(e.toString());
         }
@@ -168,12 +170,12 @@ public class CreateAccounts {
         driver.findElement(By.cssSelector("button[type=submit]")).click();
 
         try {
-            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='button-add-user']")));
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test-id='button-add-user']")));
         } catch (NoSuchElementException e) {
             System.out.println(e.toString());
         }
 
         assertEquals(URL + "admin/users", driver.getCurrentUrl() );
-        assertEquals("  Add User", driver.findElement(By.cssSelector("button[data-test='button-add-user']")).getText());
+        assertEquals("  Add User", driver.findElement(By.cssSelector("button[data-test-id='button-add-user']")).getText());
     }
 }
diff --git a/Automation/src/test/java/LoginTest.java b/Automation/src/test/java/LoginTest.java
index 9d3380aeed1fd34d53fd4c98c7a9ab10d1cf4319..d64542498ef12a79e85a8e6aee0af7bb4c36e92a 100644
--- a/Automation/src/test/java/LoginTest.java
+++ b/Automation/src/test/java/LoginTest.java
@@ -48,12 +48,12 @@ public class LoginTest {
         WebElement validLogin = null;
 
         try {
-          validLogin = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='new-manuscript']")));
+          validLogin = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test-id='new-manuscript']")));
         } catch (NoSuchElementException e) {
 
         }
         assertNotNull(validLogin);
-        assertEquals("Admin", driver.findElement(By.xpath("//*[@id=\"root\"]/div/div/div[1]/div/div[2]/div/span[2]")).getAttribute("innerText"));
+        assertEquals("Admin", driver.findElement(By.xpath("//*[@id=\"root\"]/div/div/div[1]/div[2]/div[2]/div[1]/span[1]")).getAttribute("innerText"));
 
     }
 }
diff --git a/Automation/src/test/java/ManuscriptFlow.java b/Automation/src/test/java/ManuscriptFlow.java
index 6e211a795c50709c96394d0be1e990f0b69f1bc0..2b0351604eec583d58ae59e67442d8dfbe5b8fc9 100644
--- a/Automation/src/test/java/ManuscriptFlow.java
+++ b/Automation/src/test/java/ManuscriptFlow.java
@@ -1,22 +1,38 @@
-import junit.runner.BaseTestRunner;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import io.restassured.path.json.JsonPath;
+import io.restassured.response.Response;
+import io.restassured.specification.RequestSpecification;
+import org.json.simple.JSONObject;
 import org.junit.*;
+import org.junit.runners.MethodSorters;
 import org.openqa.selenium.*;
+import org.openqa.selenium.interactions.Actions;
 import org.openqa.selenium.remote.DesiredCapabilities;
 import org.openqa.selenium.remote.RemoteWebDriver;
 import org.openqa.selenium.support.ui.ExpectedConditions;
 import org.openqa.selenium.support.ui.WebDriverWait;
 
 import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.Assert.*;
+
+@FixMethodOrder(MethodSorters.JVM)
 
 public class ManuscriptFlow {
     private static WebDriver driver = null;
     private static WebDriverWait wait = null;
     public String URL = Constants.URL;
     public static String manuscriptId;
+    public static String projectId;
+
+    Date date = new Date();
+    SimpleDateFormat sdf = new SimpleDateFormat("MM_dd_yyyy_h:mm:ss a");
+    String formattedDate = sdf.format(date);
 
     @BeforeClass
     public static void setUpClass() throws Exception {
@@ -31,11 +47,12 @@ public class ManuscriptFlow {
         //driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.firefox());
         driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.chrome());
         //driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
-        wait = new WebDriverWait(driver, 20);
+        wait = new WebDriverWait(driver, 10);
         String window = driver.getWindowHandle();
         ((JavascriptExecutor) driver).executeScript("alert('Test')");
         driver.switchTo().alert().accept();
         driver.switchTo().window(window);
+        driver.manage().window().maximize();
     }
 
     @After
@@ -51,26 +68,30 @@ public class ManuscriptFlow {
         WebElement validLogin = null;
 
         try {
-            validLogin = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='new-manuscript']")));
+            validLogin = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test-id='new-manuscript']")));
         } catch (NoSuchElementException e) {
 
         }
 
         assertNotNull(validLogin);
 
-        driver.findElement(By.cssSelector("button[data-test='new-manuscript']")).click();
+        driver.findElement(By.cssSelector("button[data-test-id='new-manuscript']")).click();
 
         try {
-            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test='submission-next']")));
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("button[data-test-id='submission-next']")));
         } catch (NoSuchElementException e) {
 
         }
 
-        assertNotNull(driver.findElement(By.cssSelector("button[data-test='submission-next']")));
+        assertNotNull(driver.findElement(By.cssSelector("button[data-test-id='submission-next']")));
 
         // First step submission flow
+
+        WebElement subButton = driver.findElement(By.cssSelector("button[data-test='submission-next']"));
+
+        Utils.scrollToElement(driver, subButton);
         driver.findElement(By.cssSelector("[data-test-id='agree-checkbox']")).click();
-        driver.findElement(By.cssSelector("button[data-test='submission-next']")).click();
+        driver.findElement(By.cssSelector("button[data-test-id='submission-next']")).click();
 
         // Second step submission flow
         try {
@@ -82,7 +103,7 @@ public class ManuscriptFlow {
         assertEquals("Please provide the details of all the authors of this manuscript, in the order that they appear on the manuscript. Your details have been prefilled as the submitting author.",driver.findElement(By.cssSelector(".wizard-step >[data-test-id='row']:nth-of-type(2) span")).getText());
         assertEquals("MANUSCRIPT TITLE\n*", driver.findElement(By.cssSelector("[data-test-id='submission-title']")).getText());
 
-        driver.findElement(By.cssSelector("input[name='metadata.title']")).sendKeys(Constants.manusName);
+        driver.findElement(By.cssSelector("input[name='metadata.title']")).sendKeys(Constants.manusName + formattedDate);
         driver.findElement(By.cssSelector("[data-test-id='submission-type']")).click();
         try {
             wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[data-test-id='submission-type'] div[role=\"option\"]")));
@@ -90,31 +111,49 @@ public class ManuscriptFlow {
 
         }
         driver.findElement(By.cssSelector("[data-test-id='submission-type'] div[role=\"option\"]:nth-child(1)")).click();
-        driver.findElement(By.cssSelector("[data-test-id='submission-abstract'] textarea")).sendKeys(Constants.manusAbstract);
-        WebElement element = driver.findElement(By.cssSelector("[name='conflicts.hasConflicts'][value='no']"));
+        driver.findElement(By.cssSelector("[data-test-id='submission-abstract'] textarea")).sendKeys(Constants.manusAbstract + formattedDate);
+
+        try {
+            wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("//span[text()='Progress Saved']"))));
+        } catch (NoSuchElementException e) {
 
+        }
+
+        WebElement element = driver.findElement(By.cssSelector("[name='conflicts.hasConflicts'][value='no'] + span"));
         Utils.scrollToElement(driver, element);
         element.click();
 
         try {
-            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[name='conflicts.hasDataAvailability'][value='yes']")));
+            wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("//span[text()='Saving changes...']"))));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        try {
+            wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("//span[text()='Progress Saved']"))));
         } catch (NoSuchElementException e) {
 
         }
 
-        driver.findElement(By.cssSelector("[name='conflicts.hasDataAvailability'][value='yes']")).click();
-        WebElement element1 = driver.findElement(By.cssSelector("[name='conflicts.hasFunding'][value='yes']"));
+        driver.findElement(By.cssSelector("[name='conflicts.hasDataAvailability'][value='yes'] + span")).click();
+        WebElement element1 = driver.findElement(By.cssSelector("[name='conflicts.hasFunding'][value='yes'] + span"));
+
+        try {
+            wait.until(ExpectedConditions.visibilityOf(element1));
+        } catch (NoSuchElementException e) {
+
+        }
 
         Utils.scrollToElement(driver, element1);
         element1.click();
 
         try {
-            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button[data-test='submission-next']")));
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button[data-test-id='submission-next']")));
         } catch (NoSuchElementException e) {
 
         }
 
-        WebElement element2 = driver.findElement(By.cssSelector("button[data-test='submission-next']"));
+        WebElement element2 = driver.findElement(By.cssSelector("button[data-test-id='submission-next']"));
 
         Utils.scrollToElement(driver, element2);
         element2.click();
@@ -137,30 +176,38 @@ public class ManuscriptFlow {
 
         String mURL = driver.getCurrentUrl();
         manuscriptId = Utils.mID(mURL);
+        projectId = Utils.pID(mURL);
 
-        driver.findElement(By.cssSelector(/*"[data-test='upload-manuscripts']*/"input[type=\"file\"]")).sendKeys(Constants.fileManuscript);
-//        driver.findElement(By.cssSelector("[data-test='upload-supplementary'] input[type=\"file\"]")).sendKeys(Constants.fileSupplementary);
-//        driver.findElement(By.cssSelector("[data-test='upload-coverLetter'] input[type=\"file\"]")).sendKeys(Constants.fileCoverLetter);
-
+        driver.findElement(By.cssSelector(/*"[data-test-id='upload-manuscripts']*/"input[type=\"file\"]")).sendKeys(Constants.fileManuscript);
+//        driver.findElement(By.cssSelector("[data-test-id='upload-supplementary'] input[type=\"file\"]")).sendKeys(Constants.fileSupplementary);
+//        driver.findElement(By.cssSelector("[data-test-id='upload-coverLetter'] input[type=\"file\"]")).sendKeys(Constants.fileCoverLetter);
 
         try {
-            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button[data-test='submission-next']")));
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("button[data-test-id='submission-next']")));
         } catch (NoSuchElementException e) {
 
         }
 
         // Confirmation modal
-        WebElement element3 = driver.findElement(By.cssSelector("button[data-test='submission-next']"));
+        WebElement element3 = driver.findElement(By.cssSelector("button[data-test-id='submission-next']"));
 
         try {
-            wait.until(ExpectedConditions.visibilityOf(element3));
+            wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("[data-test='submission-next']"))));
         } catch (NoSuchElementException e) {
 
         }
 
+        WebElement element3 = driver.findElement(By.cssSelector("[data-test='submission-next']"));
         Utils.scrollToElement(driver, element3);
+        try {
+            wait.until(ExpectedConditions.visibilityOf(element3));
+        } catch (NoSuchElementException e) {
+
+        }
+        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
         element3.click();
 
+
         try {
             wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//button[contains(.,'AGREE & SUBMIT')]")));
         } catch (NoSuchElementException e) {
@@ -184,7 +231,7 @@ public class ManuscriptFlow {
         }
 
         // Check if manuscript is displayed on dashboard
-        assertNotNull("fragment-" + manuscriptId);
+        assertNotNull(driver.findElement(By.cssSelector("[data-test-id='fragment-" + manuscriptId + "']")));
 
         driver.findElement(By.cssSelector("[data-test-id='fragment-" + manuscriptId + "']")).click();
 
@@ -201,7 +248,6 @@ public class ManuscriptFlow {
 
     @Test
     public void eqsApproveManuscript() throws Exception{
-        String manuscriptDT = "[data-test-id='fragment-" + manuscriptId + "']";
         Utils.validLogin(driver, wait, URL, Constants.adminEmail, Constants.password);
 
         try {
@@ -210,13 +256,9 @@ public class ManuscriptFlow {
 
         }
 
-        driver.findElement(By.cssSelector("[data-test-id=\"row\"] button[type=\"button\"]")).click();
-        driver.findElement(By.cssSelector("[data-test-id=\"row\"] div[role=\"option\"]:nth-child(1)")).click();
+        Utils.filterLatest(driver);
 
-        driver.findElement(By.cssSelector("[data-test-id=\"item\"]:nth-of-type(2)")).click();
-        driver.findElement(By.cssSelector("[data-test-id=\"row\"] div[role=\"option\"]:nth-child(1)")).click();
-
-        driver.findElement(By.cssSelector(manuscriptDT)).click();
+        driver.findElement(By.cssSelector("[data-test-id='fragment-" + manuscriptId + "']")).click();
 
         try {
             wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[data-test-id='button-qa-manuscript-" + manuscriptId + "']")));
@@ -246,5 +288,351 @@ public class ManuscriptFlow {
 
         driver.findElement(By.cssSelector("input[name='customId'")).sendKeys(Constants.customManuscriptID);
         driver.findElement(By.xpath("//button[contains(.,'OK')]")).click();
+
+        try {
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("img[src='/assets/logo-hindawi@2x.png']")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        driver.get(URL);
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id=\"row\"] button[type=\"button\"]")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        Utils.filterLatest(driver);
+
+        driver.findElement(By.cssSelector("[data-test-id='fragment-" + manuscriptId + "']")).click();
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        //Check if the manuscript status is assign HE
+        assertEquals("Assign HE", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+
+    }
+
+    @Test
+    public void assignHE() throws Exception{
+        Utils.validLogin(driver, wait, URL, Constants.adminEmail, Constants.password);
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id=\"row\"] button[type=\"button\"]")));
+        } catch (NoSuchElementException e) {
+
+        }
+        wait.until(ExpectedConditions.jsReturnsValue("return document.readyState==\"complete\";"));
+
+        Utils.filterLatest(driver);
+
+        driver.findElement(By.cssSelector("[data-test-id='fragment-" + manuscriptId + "']")).click();
+
+        try {
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        assertEquals("Assign HE", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+
+        driver.findElement(By.xpath("//div[@label = 'Assign Handling Editor']")).click();
+        driver.findElement(By.xpath("//input[@placeholder = 'Filter by name or email']")).sendKeys(Constants.emailHE + "@thinslices.com");
+
+        WebElement invite = driver.findElement(By.xpath("//div[@label = 'Assign Handling Editor'] //button[contains(.,'INVITE')]"));
+
+        Actions hover = new Actions(driver);
+        hover.moveToElement(invite);
+
+        hover.build();
+        hover.perform();
+        invite.click();
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[id='ps-modal-root'] button:nth-child(2)")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        driver.findElement(By.cssSelector("[id='ps-modal-root'] button:nth-child(2)")).click();
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+        } catch (NoSuchElementException e) {
+
+        }
+        driver.navigate().refresh();
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+        } catch (NoSuchElementException e) {
+
+        }
+        //Check if the manuscript status is HE invited
+        assertEquals("HE Invited", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+    }
+
+    @Test
+    public void acceptManuscriptAsHE() throws Exception{
+        Utils.validLogin(driver, wait, URL, Constants.emailHE + "@thinslices.com", Constants.password);
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id=\"row\"] button[type=\"button\"]")));
+        } catch (NoSuchElementException e) {
+
+        }
+        wait.until(ExpectedConditions.jsReturnsValue("return document.readyState==\"complete\";"));
+
+        Utils.filterLatest(driver);
+
+        driver.findElement(By.cssSelector("[data-test-id='fragment-" + manuscriptId + "']")).click();
+
+        try {
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        assertEquals("Respond to Invite", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+
+        driver.findElement(By.cssSelector("input[type=\"radio\"][name=\"decision\"][value=\"accept\"] + span")).click();
+        driver.findElement(By.xpath("//button[contains(.,'RESPOND TO INVITATION')]")).click();
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[id=\"ps-modal-root\"] button:nth-child(2)")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        assertEquals("Accept this invitation?", driver.findElement(By.cssSelector("div[id=\"ps-modal-root\"] h2")).getText());
+        driver.findElement(By.cssSelector("[id='ps-modal-root'] button:nth-child(2)")).click();
+
+
+        try {
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@label = 'Reviewer Details & Reports']")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        assertEquals("0 invited", driver.findElement(By.xpath("//span[contains(.,'0 invited')]")).getText());
+    }
+
+    @Test
+    public void inviteReviewersAsHE() throws Exception{
+        Utils.validLogin(driver, wait, URL, Constants.emailHE + "@thinslices.com", Constants.password);
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id=\"row\"] button[type=\"button\"]")));
+        } catch (NoSuchElementException e) {
+
+        }
+        wait.until(ExpectedConditions.jsReturnsValue("return document.readyState==\"complete\";"));
+
+        Utils.filterLatest(driver);
+
+        driver.findElement(By.cssSelector("[data-test-id='fragment-" + manuscriptId + "']")).click();
+
+        try {
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        assertEquals("Invite Reviewers", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+
+        int i;
+        for( i=1; i<6; i++ ){
+
+            try {
+                wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//h3[contains(text(),'Reviewer Details & Reports')]")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            driver.findElement(By.xpath("//h3[contains(text(),'Reviewer Details & Reports')]")).click();
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h4[contains(text(),'Reviewer Details')]")));
+            } catch (NoSuchElementException e) {
+
+            }
+            driver.findElement(By.xpath("//h4[contains(text(),'Reviewer Details')]")).click();
+
+            driver.findElement(By.cssSelector("input[name='email']")).sendKeys(Constants.emailRev + i + "@thinslices.com");
+            driver.findElement(By.cssSelector("input[name='firstName']")).sendKeys("rev" + i);
+            driver.findElement(By.cssSelector("input[name='lastName']")).sendKeys("rev" + i);
+            driver.findElement(By.cssSelector("input[name='affiliation']")).sendKeys("rev" + i);
+            driver.findElement(By.xpath("//span[contains(.,'Choose in the list')]")).click();
+            driver.findElement(By.xpath("//*[contains(text(),'Albania')]")).click();
+            driver.findElement(By.xpath("//button[contains(text(),'Invite')]")).click();
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[id='ps-modal-root'] button:nth-child(2)")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            assertEquals("Send invitation to Review?", driver.findElement(By.cssSelector("div[id='ps-modal-root'] h2")).getText());
+            driver.findElement(By.cssSelector("[id='ps-modal-root'] button:nth-child(2)")).click();
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h4[contains(text(),'Reviewer Details')]")));
+            } catch (NoSuchElementException e) {
+
+            }
+            driver.navigate().refresh();
+        }
+
+        try {
+            wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+        } catch (NoSuchElementException e) {
+
+        }
+
+        assertEquals("Check Review Process", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+
+    }
+
+    //@Test
+    public void submitMajorReview() throws Exception{
+        for(int i = 1; i<=2; i++) {
+            Utils.validLogin(driver, wait, URL, Constants.emailRev + i + "@thinslices.com", Constants.password);
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[data-test-id=\"row\"] button[type=\"button\"]")));
+            } catch (NoSuchElementException e) {
+
+            }
+            wait.until(ExpectedConditions.jsReturnsValue("return document.readyState==\"complete\";"));
+
+            Utils.filterLatest(driver);
+
+            driver.findElement(By.cssSelector("[data-test-id='fragment-" + manuscriptId + "']")).click();
+
+            try {
+                wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            assertEquals("Respond to Invite", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+
+            driver.findElement(By.cssSelector("input[type=\"radio\"][name=\"decision\"][value=\"accept\"] + span")).click();
+            driver.findElement(By.xpath("//button[contains(.,'RESPOND TO INVITATION')]")).click();
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[id=\"ps-modal-root\"] button:nth-child(2)")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            assertEquals("Accept this invitation?", driver.findElement(By.cssSelector("div[id=\"ps-modal-root\"] h2")).getText());
+            driver.findElement(By.cssSelector("[id='ps-modal-root'] button:nth-child(2)")).click();
+
+            driver.navigate().refresh();
+
+            try {
+                wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            assertEquals("Complete Review", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+
+            //driver.findElement(By.cssSelector("div[label=\"Your report\"] h3")).click();
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(.,'Choose in the list')]")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            driver.findElement(By.xpath("//span[contains(.,'Choose in the list')]")).click();
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(),'Major Revision')]")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            driver.findElement(By.xpath("//*[contains(text(),'Major Revision')]")).click();
+            driver.findElement(By.cssSelector("input[type=\"file\"]")).sendKeys(Constants.fileManuscript);
+
+            String mID = Utils.mID(driver.getCurrentUrl());
+
+            try {
+                wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("//span[text()='Progress Saved']"))));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[label='Your report'] [data-test-id^=file-" + mID + "]")));
+            } catch (NoSuchElementException e) {
+
+            }
+            assertThat((driver.findElement(By.cssSelector("[label='Your report'] div[data-test-id^=file-" + mID + "]")).getText()), containsString(Constants.fileManuscriptName));
+
+            driver.findElement(By.cssSelector("textarea[name='public']")).sendKeys(Constants.loremIpsumReport);
+            driver.findElement(By.xpath("//*[contains(text(),'Add Confidential note for the Editorial Team')]")).click();
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("textarea[name='confidential']")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            driver.findElement(By.cssSelector("textarea[name='confidential']")).sendKeys(Constants.loremIpsumEditorialNote);
+
+            driver.findElement(By.xpath("//button[contains(text(),'Submit report')]")).click();
+
+            try {
+                wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div[id='ps-modal-root'] button:nth-child(2)")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            assertEquals("Are you done?", driver.findElement(By.cssSelector("div[id='ps-modal-root'] h2")).getText());
+            driver.findElement(By.cssSelector("[id='ps-modal-root'] button:nth-child(2)")).click();
+            driver.navigate().refresh();
+
+            try {
+                wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("[data-test-id='fragment-status']")));
+            } catch (NoSuchElementException e) {
+
+            }
+
+            assertEquals("Review Completed", driver.findElement(By.cssSelector("[data-test-id='fragment-status']")).getText());
+
+            driver.close();
+        }
+
+    }
+
+    //@Test
+    public void deleteManuscript() throws Exception{
+        Utils.validLogin(driver, wait, URL, Constants.adminEmail, Constants.password);
+
+        RestAssured.baseURI = URL;
+
+        //Get user token after login with admin
+        RequestSpecification request = RestAssured.given().header("Content-Type", "application/json");
+        JSONObject requestParams = new JSONObject();
+        requestParams.put("username", Constants.adminEmail);
+        requestParams.put("password",  Constants.password);
+        request.body(requestParams.toJSONString());
+        Response response = request.post("api/users/authenticate");
+        JsonPath jsonPathEvaluator = response.body().jsonPath();
+        String token = jsonPathEvaluator.get("token");
+
+        RequestSpecification deleteManuscript = RestAssured.given().header("Authorization", "Bearer " + token).contentType(ContentType.JSON);
+        Response deleteResponse = deleteManuscript.delete("api/collections/" + projectId);
+
+        assertEquals(200, deleteResponse.getStatusCode());
     }
 }
diff --git a/Automation/src/test/java/Utils.java b/Automation/src/test/java/Utils.java
index 1a7c06793c5566002c48abbc8fcd2f611134c0f3..149e3ef2a537ce9178435b50ab619a8ee59c5095 100644
--- a/Automation/src/test/java/Utils.java
+++ b/Automation/src/test/java/Utils.java
@@ -40,7 +40,7 @@ public class Utils {
         pass.sendKeys(password);
         pass.sendKeys(Keys.ENTER);
         try {
-            wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("[data-test='new-manuscript']")));
+            wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("[data-test-id='new-manuscript']")));
         } catch (NoSuchElementException e) {
             System.out.println(e.toString());
         }
@@ -58,7 +58,7 @@ public class Utils {
         driver.findElement(By.linkText("Sign up")).click();
 
         try {
-            wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//button[contains(text(),'"+"CONFIRM & PROCEED TO SET PASSWORD"+"')]")));
+            wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//button[contains(text(),'"+"PROCEED TO SET "+"')]")));
         } catch (NoSuchElementException e) {
             System.out.println(e.toString());
         }
@@ -100,22 +100,27 @@ public class Utils {
 
         String fragmentID = txt.split("/versions/")[1].split("/")[0];
 
-//        String re1=".*?";	// Non-greedy match on filler
-//        String re2="[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}";	// Uninteresting: guid
-//        String re3=".*?";	// Non-greedy match on filler
-//        String re4="([A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12})";	// SQL GUID 1
-//
-//        Pattern p = Pattern.compile(re1+re2+re3+re4,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
-//        Matcher m = p.matcher(txt);
-//        if (m.find())
-//        {
-//            String guid1=m.group(1);
-//            System.out.print(guid1+"\n");
-//
-//        }
-//        String guid=m.group(1);
-
         return fragmentID;
     }
+
+    public static String pID(String url)
+    {
+        String txt=url;
+
+        String projectID = txt.split("/projects/")[1].split("/")[0];
+
+        return projectID;
+    }
+
+    public static void filterLatest(WebDriver driver){
+
+        driver.findElement(By.cssSelector("[data-test-id='dashboard-filters'] [data-test-id='item']:nth-of-type(2) button")).click();
+        driver.findElement(By.cssSelector("[data-test-id='dashboard-filters'] [data-test-id='item']:nth-of-type(1) div[role=\"option\"]:nth-child(1)")).click();
+
+        driver.findElement(By.cssSelector("[data-test-id='dashboard-filters'] [data-test-id='item']:nth-of-type(2) button")).click();
+        driver.findElement(By.cssSelector("[data-test-id='dashboard-filters'] [data-test-id='item']:nth-of-type(2) div[role=\"option\"]:nth-child(1)")).click();
+
+    }
+
 }
 
diff --git a/Automation/target/test-classes/Constants.class b/Automation/target/test-classes/Constants.class
index 10f518a5237c51db39b88022760d8d1339963e5c..68f5d0974f805591d39f78d43fde36cc9337ebf7 100644
Binary files a/Automation/target/test-classes/Constants.class and b/Automation/target/test-classes/Constants.class differ
diff --git a/Automation/target/test-classes/LoginTest.class b/Automation/target/test-classes/LoginTest.class
index a098a6b0f1eb5ec1b1942a50a4c98fe74184b040..65f092122d8b7d9c91c03fb301a44ce88bab4701 100644
Binary files a/Automation/target/test-classes/LoginTest.class and b/Automation/target/test-classes/LoginTest.class differ
diff --git a/Automation/target/test-classes/Utils.class b/Automation/target/test-classes/Utils.class
index 9cfb06da5e54e067c54c2e17bed107ef021b1c9a..6aef2c6abc7823d9e0e968ba0d1661279fcbea9f 100644
Binary files a/Automation/target/test-classes/Utils.class and b/Automation/target/test-classes/Utils.class differ
diff --git a/package-lock.json b/package-lock.json
index 85fdecf7cbaa0d5a14da3060c1db5dbcfc1a581c..b230d1ff2447e59ccfaffb6e66a13acceb74258b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,48 +4,6737 @@
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
+    "@babel/code-frame": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
+      "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "7.0.0-beta.44"
+      }
+    },
+    "@babel/generator": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz",
+      "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.0.0-beta.44",
+        "jsesc": "^2.5.1",
+        "lodash": "^4.2.0",
+        "source-map": "^0.5.0",
+        "trim-right": "^1.0.1"
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz",
+      "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-get-function-arity": "7.0.0-beta.44",
+        "@babel/template": "7.0.0-beta.44",
+        "@babel/types": "7.0.0-beta.44"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz",
+      "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.0.0-beta.44"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz",
+      "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "7.0.0-beta.44"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz",
+      "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.0"
+      }
+    },
+    "@babel/template": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz",
+      "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "7.0.0-beta.44",
+        "@babel/types": "7.0.0-beta.44",
+        "babylon": "7.0.0-beta.44",
+        "lodash": "^4.2.0"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz",
+      "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "7.0.0-beta.44",
+        "@babel/generator": "7.0.0-beta.44",
+        "@babel/helper-function-name": "7.0.0-beta.44",
+        "@babel/helper-split-export-declaration": "7.0.0-beta.44",
+        "@babel/types": "7.0.0-beta.44",
+        "babylon": "7.0.0-beta.44",
+        "debug": "^3.1.0",
+        "globals": "^11.1.0",
+        "invariant": "^2.2.0",
+        "lodash": "^4.2.0"
+      }
+    },
+    "@babel/types": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz",
+      "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==",
+      "dev": true,
+      "requires": {
+        "esutils": "^2.0.2",
+        "lodash": "^4.2.0",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "JSONStream": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.3.tgz",
+      "integrity": "sha512-3Sp6WZZ/lXl+nTDoGpGWHEpTnnC6X5fnkolYZR6nwIfzbxxvA8utPWe1gCt7i0m9uVGsSz2IS8K8mJ7HmlduMg==",
+      "dev": true,
+      "requires": {
+        "jsonparse": "^1.2.0",
+        "through": ">=2.2.7 <3"
+      }
+    },
+    "acorn": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+      "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+      "dev": true
+    },
+    "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,
+      "requires": {
+        "acorn": "^3.0.4"
+      },
+      "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
+        }
+      }
+    },
+    "add-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
+      "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
+      "dev": true
+    },
+    "ajv": {
+      "version": "5.5.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+      "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+      "dev": true,
+      "requires": {
+        "co": "^4.6.0",
+        "fast-deep-equal": "^1.0.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.3.0"
+      }
+    },
+    "ajv-keywords": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+      "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+      "dev": true
+    },
+    "align-text": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2",
+        "longest": "^1.0.1",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+      "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "app-root-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz",
+      "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=",
+      "dev": true
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+      "dev": true
+    },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+      "dev": true,
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "aria-query": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
+      "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=",
+      "dev": true,
+      "requires": {
+        "ast-types-flow": "0.0.7",
+        "commander": "^2.11.0"
+      }
+    },
+    "arr-diff": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+      "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.0.1"
+      }
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+      "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-ify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+      "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+      "dev": true
+    },
+    "array-includes": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+      "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.7.0"
+      }
+    },
+    "array-iterate": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.2.tgz",
+      "integrity": "sha512-1hWSHTIlG/8wtYD+PPX5AOBtKWngpDFjrsrHgZpe+JdgNGz0udYu6ZIkAa/xuenIUEqFv7DvE2Yr60jxweJSrQ==",
+      "dev": true
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "^1.0.1"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "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
+    },
+    "ast-types-flow": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+      "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
+      "dev": true
+    },
+    "async": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+      "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+      "dev": true
+    },
+    "autoprefixer": {
+      "version": "7.2.6",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
+      "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^2.11.3",
+        "caniuse-lite": "^1.0.30000805",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^6.0.17",
+        "postcss-value-parser": "^3.2.3"
+      }
+    },
+    "axobject-query": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.1.tgz",
+      "integrity": "sha1-Bd+nBa2orZ25k/polvItOVsLCgc=",
+      "dev": true,
+      "requires": {
+        "ast-types-flow": "0.0.7"
+      }
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "babel-eslint": {
+      "version": "8.2.6",
+      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz",
+      "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "7.0.0-beta.44",
+        "@babel/traverse": "7.0.0-beta.44",
+        "@babel/types": "7.0.0-beta.44",
+        "babylon": "7.0.0-beta.44",
+        "eslint-scope": "3.7.1",
+        "eslint-visitor-keys": "^1.0.0"
+      }
+    },
+    "babel-helper-call-delegate": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+      "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+      "dev": true,
+      "requires": {
+        "babel-helper-hoist-variables": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-define-map": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+      "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-helper-function-name": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+      "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+      "dev": true,
+      "requires": {
+        "babel-helper-get-function-arity": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-get-function-arity": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+      "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-hoist-variables": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+      "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-optimise-call-expression": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+      "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-helper-regex": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+      "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-helper-replace-supers": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+      "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+      "dev": true,
+      "requires": {
+        "babel-helper-optimise-call-expression": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-messages": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-check-es2015-constants": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+      "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-arrow-functions": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+      "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-block-scoped-functions": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+      "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-block-scoping": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+      "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-plugin-transform-es2015-classes": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+      "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+      "dev": true,
+      "requires": {
+        "babel-helper-define-map": "^6.24.1",
+        "babel-helper-function-name": "^6.24.1",
+        "babel-helper-optimise-call-expression": "^6.24.1",
+        "babel-helper-replace-supers": "^6.24.1",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-computed-properties": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+      "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-destructuring": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+      "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-duplicate-keys": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+      "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-for-of": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+      "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-function-name": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+      "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+      "dev": true,
+      "requires": {
+        "babel-helper-function-name": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-literals": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+      "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-amd": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+      "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-commonjs": {
+      "version": "6.26.2",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+      "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-strict-mode": "^6.24.1",
+        "babel-runtime": "^6.26.0",
+        "babel-template": "^6.26.0",
+        "babel-types": "^6.26.0"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-systemjs": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+      "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+      "dev": true,
+      "requires": {
+        "babel-helper-hoist-variables": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-modules-umd": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+      "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-object-super": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+      "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+      "dev": true,
+      "requires": {
+        "babel-helper-replace-supers": "^6.24.1",
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-parameters": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+      "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+      "dev": true,
+      "requires": {
+        "babel-helper-call-delegate": "^6.24.1",
+        "babel-helper-get-function-arity": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-template": "^6.24.1",
+        "babel-traverse": "^6.24.1",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-shorthand-properties": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+      "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-spread": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+      "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-sticky-regex": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+      "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+      "dev": true,
+      "requires": {
+        "babel-helper-regex": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-plugin-transform-es2015-template-literals": {
+      "version": "6.22.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+      "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-typeof-symbol": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+      "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-plugin-transform-es2015-unicode-regex": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+      "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+      "dev": true,
+      "requires": {
+        "babel-helper-regex": "^6.24.1",
+        "babel-runtime": "^6.22.0",
+        "regexpu-core": "^2.0.0"
+      }
+    },
+    "babel-plugin-transform-regenerator": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+      "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+      "dev": true,
+      "requires": {
+        "regenerator-transform": "^0.10.0"
+      }
+    },
+    "babel-plugin-transform-strict-mode": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+      "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0",
+        "babel-types": "^6.24.1"
+      }
+    },
+    "babel-preset-es2015": {
+      "version": "6.24.1",
+      "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+      "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+      "dev": true,
+      "requires": {
+        "babel-plugin-check-es2015-constants": "^6.22.0",
+        "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+        "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+        "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
+        "babel-plugin-transform-es2015-classes": "^6.24.1",
+        "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
+        "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+        "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
+        "babel-plugin-transform-es2015-for-of": "^6.22.0",
+        "babel-plugin-transform-es2015-function-name": "^6.24.1",
+        "babel-plugin-transform-es2015-literals": "^6.22.0",
+        "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+        "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+        "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
+        "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
+        "babel-plugin-transform-es2015-object-super": "^6.24.1",
+        "babel-plugin-transform-es2015-parameters": "^6.24.1",
+        "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
+        "babel-plugin-transform-es2015-spread": "^6.22.0",
+        "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
+        "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+        "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+        "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
+        "babel-plugin-transform-regenerator": "^6.24.1"
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      }
+    },
+    "babel-template": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "lodash": "^4.17.4"
+      },
+      "dependencies": {
+        "babylon": {
+          "version": "6.18.0",
+          "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+          "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+          "dev": true
+        }
+      }
+    },
+    "babel-traverse": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "^6.26.0",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "debug": "^2.6.8",
+        "globals": "^9.18.0",
+        "invariant": "^2.2.2",
+        "lodash": "^4.17.4"
+      },
+      "dependencies": {
+        "babylon": {
+          "version": "6.18.0",
+          "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+          "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+          "dev": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "globals": {
+          "version": "9.18.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+          "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+          "dev": true
+        }
+      }
+    },
+    "babel-types": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.4",
+        "to-fast-properties": "^1.0.3"
+      },
+      "dependencies": {
+        "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
+        }
+      }
+    },
+    "babylon": {
+      "version": "7.0.0-beta.44",
+      "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+      "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+      "dev": true
+    },
+    "bail": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz",
+      "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==",
+      "dev": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+      "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+      "dev": true,
+      "requires": {
+        "expand-range": "^1.8.1",
+        "preserve": "^0.2.0",
+        "repeat-element": "^1.1.2"
+      }
+    },
+    "browserslist": {
+      "version": "2.11.3",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
+      "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30000792",
+        "electron-to-chromium": "^1.3.30"
+      }
+    },
+    "buffer-from": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+      "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==",
+      "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
+    },
+    "byline": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
+      "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=",
+      "dev": true
+    },
+    "caller-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+      "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+      "dev": true,
+      "requires": {
+        "callsites": "^0.2.0"
+      }
+    },
+    "callsites": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+      "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+      "dev": true
+    },
+    "camelcase": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+      "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+      "dev": true,
+      "optional": true
+    },
+    "camelcase-keys": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+      "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^4.1.0",
+        "map-obj": "^2.0.0",
+        "quick-lru": "^1.0.0"
+      },
+      "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
+        }
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30000865",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz",
+      "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==",
+      "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
+    },
+    "ccount": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz",
+      "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==",
+      "dev": true
+    },
+    "center-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "align-text": "^0.1.3",
+        "lazy-cache": "^1.0.3"
+      }
+    },
+    "chalk": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+      "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      }
+    },
+    "character-entities": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz",
+      "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==",
+      "dev": true
+    },
+    "character-entities-html4": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz",
+      "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==",
+      "dev": true
+    },
+    "character-entities-legacy": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz",
+      "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==",
+      "dev": true
+    },
+    "character-reference-invalid": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz",
+      "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==",
+      "dev": true
+    },
+    "chardet": {
+      "version": "0.4.2",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+      "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+      "dev": true
+    },
+    "ci-info": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz",
+      "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==",
+      "dev": true
+    },
+    "circular-json": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+      "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+      "dev": true
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^2.0.0"
+      }
+    },
+    "cli-spinners": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
+      "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
+      "dev": true
+    },
+    "cli-truncate": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
+      "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+      "dev": true,
+      "requires": {
+        "slice-ansi": "0.0.4",
+        "string-width": "^1.0.1"
+      },
+      "dependencies": {
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "slice-ansi": {
+          "version": "0.0.4",
+          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+          "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        }
+      }
+    },
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "dev": true
+    },
+    "cliui": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+      "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "center-align": "^0.1.1",
+        "right-align": "^0.1.1",
+        "wordwrap": "0.0.2"
+      },
+      "dependencies": {
+        "wordwrap": {
+          "version": "0.0.2",
+          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+          "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+      "dev": true
+    },
+    "clone-regexp": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz",
+      "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==",
+      "dev": true,
+      "requires": {
+        "is-regexp": "^1.0.0",
+        "is-supported-regexp-flag": "^1.0.0"
+      }
+    },
+    "cmd-shim": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz",
+      "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "~0.5.0"
+      }
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "dev": true
+    },
+    "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
+    },
+    "collapse-white-space": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz",
+      "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==",
+      "dev": true
+    },
+    "color-convert": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
+      "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
+      "dev": true,
+      "requires": {
+        "color-name": "1.1.1"
+      }
+    },
+    "color-name": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
+      "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
+      "dev": true
+    },
+    "columnify": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
+      "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
+      "dev": true,
+      "requires": {
+        "strip-ansi": "^3.0.0",
+        "wcwidth": "^1.0.0"
+      }
+    },
+    "command-join": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/command-join/-/command-join-2.0.0.tgz",
+      "integrity": "sha1-Uui5hPSHLZUv8b3IuYOX0nxxRM8=",
+      "dev": true
+    },
+    "commander": {
+      "version": "2.16.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
+      "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
+      "dev": true
+    },
+    "compare-func": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
+      "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+      "dev": true,
+      "requires": {
+        "array-ify": "^1.0.0",
+        "dot-prop": "^3.0.0"
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+      "dev": true
+    },
+    "contains-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+      "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+      "dev": true
+    },
+    "conventional-changelog": {
+      "version": "1.1.24",
+      "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
+      "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
+      "dev": true,
+      "requires": {
+        "conventional-changelog-angular": "^1.6.6",
+        "conventional-changelog-atom": "^0.2.8",
+        "conventional-changelog-codemirror": "^0.3.8",
+        "conventional-changelog-core": "^2.0.11",
+        "conventional-changelog-ember": "^0.3.12",
+        "conventional-changelog-eslint": "^1.0.9",
+        "conventional-changelog-express": "^0.3.6",
+        "conventional-changelog-jquery": "^0.1.0",
+        "conventional-changelog-jscs": "^0.1.0",
+        "conventional-changelog-jshint": "^0.3.8",
+        "conventional-changelog-preset-loader": "^1.1.8"
+      }
+    },
+    "conventional-changelog-angular": {
+      "version": "1.6.6",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
+      "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
+      "dev": true,
+      "requires": {
+        "compare-func": "^1.3.1",
+        "q": "^1.5.1"
+      }
+    },
+    "conventional-changelog-atom": {
+      "version": "0.2.8",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
+      "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
+      "dev": true,
+      "requires": {
+        "q": "^1.5.1"
+      }
+    },
+    "conventional-changelog-cli": {
+      "version": "1.3.22",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz",
+      "integrity": "sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==",
+      "dev": true,
+      "requires": {
+        "add-stream": "^1.0.0",
+        "conventional-changelog": "^1.1.24",
+        "lodash": "^4.2.1",
+        "meow": "^4.0.0",
+        "tempfile": "^1.1.1"
+      }
+    },
+    "conventional-changelog-codemirror": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
+      "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
+      "dev": true,
+      "requires": {
+        "q": "^1.5.1"
+      }
+    },
+    "conventional-changelog-core": {
+      "version": "2.0.11",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
+      "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+      "dev": true,
+      "requires": {
+        "conventional-changelog-writer": "^3.0.9",
+        "conventional-commits-parser": "^2.1.7",
+        "dateformat": "^3.0.0",
+        "get-pkg-repo": "^1.0.0",
+        "git-raw-commits": "^1.3.6",
+        "git-remote-origin-url": "^2.0.0",
+        "git-semver-tags": "^1.3.6",
+        "lodash": "^4.2.1",
+        "normalize-package-data": "^2.3.5",
+        "q": "^1.5.1",
+        "read-pkg": "^1.1.0",
+        "read-pkg-up": "^1.0.1",
+        "through2": "^2.0.0"
+      },
+      "dependencies": {
+        "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,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+          "dev": true,
+          "requires": {
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        }
+      }
+    },
+    "conventional-changelog-ember": {
+      "version": "0.3.12",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
+      "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
+      "dev": true,
+      "requires": {
+        "q": "^1.5.1"
+      }
+    },
+    "conventional-changelog-eslint": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
+      "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
+      "dev": true,
+      "requires": {
+        "q": "^1.5.1"
+      }
+    },
+    "conventional-changelog-express": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
+      "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
+      "dev": true,
+      "requires": {
+        "q": "^1.5.1"
+      }
+    },
+    "conventional-changelog-jquery": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
+      "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
+      "dev": true,
+      "requires": {
+        "q": "^1.4.1"
+      }
+    },
+    "conventional-changelog-jscs": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
+      "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+      "dev": true,
+      "requires": {
+        "q": "^1.4.1"
+      }
+    },
+    "conventional-changelog-jshint": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
+      "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+      "dev": true,
+      "requires": {
+        "compare-func": "^1.3.1",
+        "q": "^1.5.1"
+      }
+    },
+    "conventional-changelog-preset-loader": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
+      "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
+      "dev": true
+    },
+    "conventional-changelog-writer": {
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
+      "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
+      "dev": true,
+      "requires": {
+        "compare-func": "^1.3.1",
+        "conventional-commits-filter": "^1.1.6",
+        "dateformat": "^3.0.0",
+        "handlebars": "^4.0.2",
+        "json-stringify-safe": "^5.0.1",
+        "lodash": "^4.2.1",
+        "meow": "^4.0.0",
+        "semver": "^5.5.0",
+        "split": "^1.0.0",
+        "through2": "^2.0.0"
+      }
+    },
     "conventional-commit-types": {
       "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz",
-      "integrity": "sha1-XblXOdbCEqy+e29lahG5QLqmiUY=",
+      "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz",
+      "integrity": "sha1-XblXOdbCEqy+e29lahG5QLqmiUY=",
+      "dev": true
+    },
+    "conventional-commits-filter": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
+      "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+      "dev": true,
+      "requires": {
+        "is-subset": "^0.1.1",
+        "modify-values": "^1.0.0"
+      }
+    },
+    "conventional-commits-parser": {
+      "version": "2.1.7",
+      "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
+      "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+      "dev": true,
+      "requires": {
+        "JSONStream": "^1.0.4",
+        "is-text-path": "^1.0.0",
+        "lodash": "^4.2.1",
+        "meow": "^4.0.0",
+        "split2": "^2.0.0",
+        "through2": "^2.0.0",
+        "trim-off-newlines": "^1.0.0"
+      }
+    },
+    "conventional-recommended-bump": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz",
+      "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.4.10",
+        "conventional-commits-filter": "^1.1.1",
+        "conventional-commits-parser": "^2.1.1",
+        "git-raw-commits": "^1.3.0",
+        "git-semver-tags": "^1.3.0",
+        "meow": "^3.3.0",
+        "object-assign": "^4.0.1"
+      },
+      "dependencies": {
+        "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,
+          "requires": {
+            "camelcase": "^2.0.0",
+            "map-obj": "^1.0.0"
+          }
+        },
+        "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
+        },
+        "indent-string": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+          "dev": true,
+          "requires": {
+            "repeating": "^2.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
+          }
+        },
+        "map-obj": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+          "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+          "dev": true
+        },
+        "meow": {
+          "version": "3.7.0",
+          "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+          "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+          "dev": true,
+          "requires": {
+            "camelcase-keys": "^2.0.0",
+            "decamelize": "^1.1.2",
+            "loud-rejection": "^1.0.0",
+            "map-obj": "^1.0.1",
+            "minimist": "^1.1.3",
+            "normalize-package-data": "^2.3.4",
+            "object-assign": "^4.0.1",
+            "read-pkg-up": "^1.0.1",
+            "redent": "^1.0.0",
+            "trim-newlines": "^1.0.0"
+          }
+        },
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "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,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+          "dev": true,
+          "requires": {
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
+          }
+        },
+        "redent": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+          "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+          "dev": true,
+          "requires": {
+            "indent-string": "^2.1.0",
+            "strip-indent": "^1.0.1"
+          }
+        },
+        "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,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        },
+        "strip-indent": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+          "dev": true,
+          "requires": {
+            "get-stdin": "^4.0.1"
+          }
+        },
+        "trim-newlines": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+          "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+          "dev": true
+        }
+      }
+    },
+    "core-js": {
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+      "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+      "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=",
+      "dev": true
+    },
+    "cosmiconfig": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-1.1.0.tgz",
+      "integrity": "sha1-DeoPmATv37kp+7GxiOJVU+oFPTc=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "js-yaml": "^3.4.3",
+        "minimist": "^1.2.0",
+        "object-assign": "^4.0.1",
+        "os-homedir": "^1.0.1",
+        "parse-json": "^2.2.0",
+        "pinkie-promise": "^2.0.0",
+        "require-from-string": "^1.1.0"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "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,
+      "requires": {
+        "capture-stack-trace": "^1.0.0"
+      }
+    },
+    "cross-spawn": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+      "dev": true,
+      "requires": {
+        "lru-cache": "^4.0.1",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      }
+    },
+    "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,
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "cz-conventional-changelog": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-2.1.0.tgz",
+      "integrity": "sha1-L0vHOQ4yROTfKT5ro1Hkx0Cnx2Q=",
+      "dev": true,
+      "requires": {
+        "conventional-commit-types": "^2.0.0",
+        "lodash.map": "^4.5.1",
+        "longest": "^1.0.1",
+        "right-pad": "^1.0.1",
+        "word-wrap": "^1.0.3"
+      }
+    },
+    "damerau-levenshtein": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz",
+      "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=",
+      "dev": true
+    },
+    "dargs": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+      "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "date-fns": {
+      "version": "1.29.0",
+      "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz",
+      "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==",
+      "dev": true
+    },
+    "dateformat": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+      "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+      "dev": true
+    },
+    "debug": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+      "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
+    },
+    "decamelize-keys": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+      "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+      "dev": true,
+      "requires": {
+        "decamelize": "^1.1.0",
+        "map-obj": "^1.0.0"
+      },
+      "dependencies": {
+        "map-obj": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+          "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+          "dev": true
+        }
+      }
+    },
+    "dedent": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+      "dev": true
+    },
+    "deep-extend": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+      "dev": true
+    },
+    "deep-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "dev": true
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "dev": true,
+      "requires": {
+        "clone": "^1.0.2"
+      }
+    },
+    "define-properties": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
+      "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+      "dev": true,
+      "requires": {
+        "foreach": "^2.0.5",
+        "object-keys": "^1.0.8"
+      }
+    },
+    "del": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+      "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+      "dev": true,
+      "requires": {
+        "globby": "^5.0.0",
+        "is-path-cwd": "^1.0.0",
+        "is-path-in-cwd": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "rimraf": "^2.2.8"
+      }
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+      "dev": true
+    },
+    "detect-indent": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
+      "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
+      "dev": true
+    },
+    "dir-glob": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
+      "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+      "dev": true,
+      "requires": {
+        "arrify": "^1.0.1",
+        "path-type": "^3.0.0"
+      },
+      "dependencies": {
+        "path-type": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+          "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "doctrine": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+      "dev": true,
+      "requires": {
+        "esutils": "^2.0.2"
+      }
+    },
+    "dom-serializer": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+      "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "~1.1.1",
+        "entities": "~1.1.1"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+          "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+          "dev": true
+        }
+      }
+    },
+    "domelementtype": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+      "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+      "dev": true
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "domutils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+      "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+      "dev": true,
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "dot-prop": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+      "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+      "dev": true,
+      "requires": {
+        "is-obj": "^1.0.0"
+      }
+    },
+    "duplexer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+      "dev": true
+    },
+    "duplexer3": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+      "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.52",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz",
+      "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=",
+      "dev": true
+    },
+    "elegant-spinner": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
+      "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+      "dev": true
+    },
+    "emoji-regex": {
+      "version": "6.5.1",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz",
+      "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==",
+      "dev": true
+    },
+    "entities": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+      "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+      "dev": true
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+      "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+      "dev": true,
+      "requires": {
+        "es-to-primitive": "^1.1.1",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.1",
+        "is-callable": "^1.1.3",
+        "is-regex": "^1.0.4"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+      "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.1",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.1"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "eslint": {
+      "version": "4.19.1",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+      "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+      "dev": true,
+      "requires": {
+        "ajv": "^5.3.0",
+        "babel-code-frame": "^6.22.0",
+        "chalk": "^2.1.0",
+        "concat-stream": "^1.6.0",
+        "cross-spawn": "^5.1.0",
+        "debug": "^3.1.0",
+        "doctrine": "^2.1.0",
+        "eslint-scope": "^3.7.1",
+        "eslint-visitor-keys": "^1.0.0",
+        "espree": "^3.5.4",
+        "esquery": "^1.0.0",
+        "esutils": "^2.0.2",
+        "file-entry-cache": "^2.0.0",
+        "functional-red-black-tree": "^1.0.1",
+        "glob": "^7.1.2",
+        "globals": "^11.0.1",
+        "ignore": "^3.3.3",
+        "imurmurhash": "^0.1.4",
+        "inquirer": "^3.0.6",
+        "is-resolvable": "^1.0.0",
+        "js-yaml": "^3.9.1",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.3.0",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.2",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.8.2",
+        "path-is-inside": "^1.0.2",
+        "pluralize": "^7.0.0",
+        "progress": "^2.0.0",
+        "regexpp": "^1.0.1",
+        "require-uncached": "^1.0.3",
+        "semver": "^5.3.0",
+        "strip-ansi": "^4.0.0",
+        "strip-json-comments": "~2.0.1",
+        "table": "4.0.2",
+        "text-table": "~0.2.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "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,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "eslint-config-airbnb": {
+      "version": "16.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz",
+      "integrity": "sha512-zLyOhVWhzB/jwbz7IPSbkUuj7X2ox4PHXTcZkEmDqTvd0baJmJyuxlFPDlZOE/Y5bC+HQRaEkT3FoHo9wIdRiw==",
+      "dev": true,
+      "requires": {
+        "eslint-config-airbnb-base": "^12.1.0"
+      }
+    },
+    "eslint-config-airbnb-base": {
+      "version": "12.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz",
+      "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==",
+      "dev": true,
+      "requires": {
+        "eslint-restricted-globals": "^0.1.1"
+      }
+    },
+    "eslint-config-prettier": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz",
+      "integrity": "sha512-ag8YEyBXsm3nmOv1Hz991VtNNDMRa+MNy8cY47Pl4bw6iuzqKbJajXdqUpiw13STdLLrznxgm1hj9NhxeOYq0A==",
+      "dev": true,
+      "requires": {
+        "get-stdin": "^5.0.1"
+      }
+    },
+    "eslint-config-pubsweet": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/eslint-config-pubsweet/-/eslint-config-pubsweet-0.0.6.tgz",
+      "integrity": "sha512-xrkwbCcs5CEPSom99O5aHprxU0JyG8cKAudztvUytEHUfxGJfzRXwBGvOsW4eQBbU1e52jhMXz2HlQ0RZ9UW6A==",
+      "dev": true,
+      "requires": {
+        "eslint-config-airbnb": "^16.1.0",
+        "eslint-config-prettier": "^2.7.0",
+        "eslint-config-standard": "^10.2.1",
+        "eslint-config-standard-react": "^5.0.0"
+      }
+    },
+    "eslint-config-standard": {
+      "version": "10.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz",
+      "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=",
+      "dev": true
+    },
+    "eslint-config-standard-jsx": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz",
+      "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==",
+      "dev": true
+    },
+    "eslint-config-standard-react": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-5.0.0.tgz",
+      "integrity": "sha1-ZMe4FAFyhSvoEKU9SO6HZJ/xeOM=",
+      "dev": true,
+      "requires": {
+        "eslint-config-standard-jsx": "^4.0.0"
+      }
+    },
+    "eslint-import-resolver-node": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+      "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+      "dev": true,
+      "requires": {
+        "debug": "^2.6.9",
+        "resolve": "^1.5.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "eslint-module-utils": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz",
+      "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.6.8",
+        "pkg-dir": "^1.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "eslint-plugin-import": {
+      "version": "2.13.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz",
+      "integrity": "sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A==",
+      "dev": true,
+      "requires": {
+        "contains-path": "^0.1.0",
+        "debug": "^2.6.8",
+        "doctrine": "1.5.0",
+        "eslint-import-resolver-node": "^0.3.1",
+        "eslint-module-utils": "^2.2.0",
+        "has": "^1.0.1",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.3",
+        "read-pkg-up": "^2.0.0",
+        "resolve": "^1.6.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "doctrine": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+          "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+          "dev": true,
+          "requires": {
+            "esutils": "^2.0.2",
+            "isarray": "^1.0.0"
+          }
+        }
+      }
+    },
+    "eslint-plugin-jest": {
+      "version": "21.18.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-21.18.0.tgz",
+      "integrity": "sha512-fhuJuehoMtuEQ3Klgx0629hDmbs0M0g4tSZ65Wq2NqpLWCK5UC7hQnGS1Wh4+Vc/9P4ss4HxqZ1XK7honqUZNg==",
+      "dev": true
+    },
+    "eslint-plugin-jsx-a11y": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.1.tgz",
+      "integrity": "sha512-JsxNKqa3TwmPypeXNnI75FntkUktGzI1wSa1LgNZdSOMI+B4sxnr1lSF8m8lPiz4mKiC+14ysZQM4scewUrP7A==",
+      "dev": true,
+      "requires": {
+        "aria-query": "^3.0.0",
+        "array-includes": "^3.0.3",
+        "ast-types-flow": "^0.0.7",
+        "axobject-query": "^2.0.1",
+        "damerau-levenshtein": "^1.0.4",
+        "emoji-regex": "^6.5.1",
+        "has": "^1.0.3",
+        "jsx-ast-utils": "^2.0.1"
+      }
+    },
+    "eslint-plugin-node": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz",
+      "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==",
+      "dev": true,
+      "requires": {
+        "ignore": "^3.3.6",
+        "minimatch": "^3.0.4",
+        "resolve": "^1.3.3",
+        "semver": "5.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+          "dev": true
+        }
+      }
+    },
+    "eslint-plugin-prettier": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz",
+      "integrity": "sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==",
+      "dev": true,
+      "requires": {
+        "fast-diff": "^1.1.1",
+        "jest-docblock": "^21.0.0"
+      }
+    },
+    "eslint-plugin-promise": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz",
+      "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==",
+      "dev": true
+    },
+    "eslint-plugin-react": {
+      "version": "7.10.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.10.0.tgz",
+      "integrity": "sha512-18rzWn4AtbSUxFKKM7aCVcj5LXOhOKdwBino3KKWy4psxfPW0YtIbE8WNRDUdyHFL50BeLb6qFd4vpvNYyp7hw==",
+      "dev": true,
+      "requires": {
+        "doctrine": "^2.1.0",
+        "has": "^1.0.3",
+        "jsx-ast-utils": "^2.0.1",
+        "prop-types": "^15.6.2"
+      }
+    },
+    "eslint-plugin-standard": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz",
+      "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==",
+      "dev": true
+    },
+    "eslint-restricted-globals": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz",
+      "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=",
+      "dev": true
+    },
+    "eslint-scope": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+      "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "eslint-visitor-keys": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+      "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+      "dev": true
+    },
+    "espree": {
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+      "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+      "dev": true,
+      "requires": {
+        "acorn": "^5.5.0",
+        "acorn-jsx": "^3.0.0"
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true
+    },
+    "esquery": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+      "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.0.0"
+      }
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+      "dev": true
+    },
+    "execa": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+      "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^5.0.1",
+        "get-stream": "^3.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      }
+    },
+    "execall": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz",
+      "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=",
+      "dev": true,
+      "requires": {
+        "clone-regexp": "^1.0.0"
+      }
+    },
+    "exit-hook": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+      "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+      "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,
+      "requires": {
+        "is-posix-bracket": "^0.1.0"
+      }
+    },
+    "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,
+      "requires": {
+        "fill-range": "^2.1.0"
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
+    },
+    "external-editor": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+      "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+      "dev": true,
+      "requires": {
+        "chardet": "^0.4.0",
+        "iconv-lite": "^0.4.17",
+        "tmp": "^0.0.33"
+      }
+    },
+    "extglob": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+      "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^1.0.0"
+      },
+      "dependencies": {
+        "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
+        }
+      }
+    },
+    "fast-deep-equal": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+      "dev": true
+    },
+    "fast-diff": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
+      "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==",
+      "dev": true
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+      "dev": true
+    },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "dev": true
+    },
+    "figures": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
+    "file-entry-cache": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+      "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+      "dev": true,
+      "requires": {
+        "flat-cache": "^1.2.1",
+        "object-assign": "^4.0.1"
+      }
+    },
+    "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.4",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+      "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+      "dev": true,
+      "requires": {
+        "is-number": "^2.1.0",
+        "isobject": "^2.0.0",
+        "randomatic": "^3.0.0",
+        "repeat-element": "^1.1.2",
+        "repeat-string": "^1.5.2"
+      }
+    },
+    "find-up": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+      "dev": true,
+      "requires": {
+        "path-exists": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "flat-cache": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+      "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+      "dev": true,
+      "requires": {
+        "circular-json": "^0.3.1",
+        "del": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "write": "^0.2.1"
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "for-own": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "foreach": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+      "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+      "dev": true
+    },
+    "fs-extra": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+      "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "functional-red-black-tree": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "dev": true
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
+      },
+      "dependencies": {
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        }
+      }
+    },
+    "get-caller-file": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+      "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+      "dev": true
+    },
+    "get-own-enumerable-property-symbols": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz",
+      "integrity": "sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug==",
+      "dev": true
+    },
+    "get-pkg-repo": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
+      "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "meow": "^3.3.0",
+        "normalize-package-data": "^2.3.0",
+        "parse-github-repo-url": "^1.3.0",
+        "through2": "^2.0.0"
+      },
+      "dependencies": {
+        "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,
+          "requires": {
+            "camelcase": "^2.0.0",
+            "map-obj": "^1.0.0"
+          }
+        },
+        "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
+        },
+        "indent-string": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+          "dev": true,
+          "requires": {
+            "repeating": "^2.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "strip-bom": "^2.0.0"
+          }
+        },
+        "map-obj": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+          "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+          "dev": true
+        },
+        "meow": {
+          "version": "3.7.0",
+          "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+          "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+          "dev": true,
+          "requires": {
+            "camelcase-keys": "^2.0.0",
+            "decamelize": "^1.1.2",
+            "loud-rejection": "^1.0.0",
+            "map-obj": "^1.0.1",
+            "minimist": "^1.1.3",
+            "normalize-package-data": "^2.3.4",
+            "object-assign": "^4.0.1",
+            "read-pkg-up": "^1.0.1",
+            "redent": "^1.0.0",
+            "trim-newlines": "^1.0.0"
+          }
+        },
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "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,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+          "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+          "dev": true,
+          "requires": {
+            "find-up": "^1.0.0",
+            "read-pkg": "^1.0.0"
+          }
+        },
+        "redent": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+          "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+          "dev": true,
+          "requires": {
+            "indent-string": "^2.1.0",
+            "strip-indent": "^1.0.1"
+          }
+        },
+        "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,
+          "requires": {
+            "is-utf8": "^0.2.0"
+          }
+        },
+        "strip-indent": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+          "dev": true,
+          "requires": {
+            "get-stdin": "^4.0.1"
+          }
+        },
+        "trim-newlines": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+          "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+          "dev": true
+        }
+      }
+    },
+    "get-port": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+      "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
+      "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+      "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
+    },
+    "git-raw-commits": {
+      "version": "1.3.6",
+      "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
+      "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
+      "dev": true,
+      "requires": {
+        "dargs": "^4.0.1",
+        "lodash.template": "^4.0.2",
+        "meow": "^4.0.0",
+        "split2": "^2.0.0",
+        "through2": "^2.0.0"
+      }
+    },
+    "git-remote-origin-url": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+      "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+      "dev": true,
+      "requires": {
+        "gitconfiglocal": "^1.0.0",
+        "pify": "^2.3.0"
+      }
+    },
+    "git-semver-tags": {
+      "version": "1.3.6",
+      "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
+      "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
+      "dev": true,
+      "requires": {
+        "meow": "^4.0.0",
+        "semver": "^5.5.0"
+      }
+    },
+    "gitconfiglocal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+      "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+      "dev": true,
+      "requires": {
+        "ini": "^1.3.2"
+      }
+    },
+    "glob": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+      "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-base": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+      "dev": true,
+      "requires": {
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+          "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^2.0.0"
+          }
+        },
+        "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-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "glob-parent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "dev": true,
+      "requires": {
+        "is-glob": "^3.1.0",
+        "path-dirname": "^1.0.0"
+      }
+    },
+    "globals": {
+      "version": "11.7.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz",
+      "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==",
+      "dev": true
+    },
+    "globby": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+      "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+      "dev": true,
+      "requires": {
+        "array-union": "^1.0.1",
+        "arrify": "^1.0.0",
+        "glob": "^7.0.3",
+        "object-assign": "^4.0.1",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "globjoin": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
+      "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=",
+      "dev": true
+    },
+    "gonzales-pe": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.3.tgz",
+      "integrity": "sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw==",
+      "dev": true,
+      "requires": {
+        "minimist": "1.1.x"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
+          "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=",
+          "dev": true
+        }
+      }
+    },
+    "got": {
+      "version": "6.7.1",
+      "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+      "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+      "dev": true,
+      "requires": {
+        "create-error-class": "^3.0.0",
+        "duplexer3": "^0.1.4",
+        "get-stream": "^3.0.0",
+        "is-redirect": "^1.0.0",
+        "is-retry-allowed": "^1.0.0",
+        "is-stream": "^1.0.0",
+        "lowercase-keys": "^1.0.0",
+        "safe-buffer": "^5.0.1",
+        "timed-out": "^4.0.0",
+        "unzip-response": "^2.0.1",
+        "url-parse-lax": "^1.0.0"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+      "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+      "dev": true
+    },
+    "handlebars": {
+      "version": "4.0.11",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+      "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+      "dev": true,
+      "requires": {
+        "async": "^1.4.0",
+        "optimist": "^0.6.1",
+        "source-map": "^0.4.4",
+        "uglify-js": "^2.6"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.4.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+          "dev": true,
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
+    },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+      "dev": true
+    },
+    "history": {
+      "version": "4.7.2",
+      "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz",
+      "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==",
+      "dev": true,
+      "requires": {
+        "invariant": "^2.2.1",
+        "loose-envify": "^1.2.0",
+        "resolve-pathname": "^2.2.0",
+        "value-equal": "^0.4.0",
+        "warning": "^3.0.0"
+      }
+    },
+    "hoist-non-react-statics": {
+      "version": "2.5.5",
+      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
+      "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==",
+      "dev": true
+    },
+    "hosted-git-info": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+      "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+      "dev": true
+    },
+    "html-tags": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
+      "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+      "dev": true
+    },
+    "htmlparser2": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+      "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^1.3.0",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "husky": {
+      "version": "0.14.3",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz",
+      "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==",
+      "dev": true,
+      "requires": {
+        "is-ci": "^1.0.10",
+        "normalize-path": "^1.0.0",
+        "strip-indent": "^2.0.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.23",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+      "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "ignore": {
+      "version": "3.3.10",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+      "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+      "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": "3.2.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+      "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+      "dev": true
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+      "dev": true
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+      "dev": true
+    },
+    "inquirer": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+      "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.0",
+        "cli-cursor": "^2.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^2.0.4",
+        "figures": "^2.0.0",
+        "lodash": "^4.3.0",
+        "mute-stream": "0.0.7",
+        "run-async": "^2.2.0",
+        "rx-lite": "^4.0.8",
+        "rx-lite-aggregates": "^4.0.8",
+        "string-width": "^2.1.0",
+        "strip-ansi": "^4.0.0",
+        "through": "^2.3.6"
+      },
+      "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
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "dev": true,
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "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-alphabetical": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz",
+      "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==",
+      "dev": true
+    },
+    "is-alphanumeric": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz",
+      "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=",
+      "dev": true
+    },
+    "is-alphanumerical": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz",
+      "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==",
+      "dev": true,
+      "requires": {
+        "is-alphabetical": "^1.0.0",
+        "is-decimal": "^1.0.0"
+      }
+    },
+    "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-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "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,
+      "requires": {
+        "builtin-modules": "^1.0.0"
+      }
+    },
+    "is-callable": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+      "dev": true
+    },
+    "is-ci": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
+      "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
+      "dev": true,
+      "requires": {
+        "ci-info": "^1.0.0"
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+      "dev": true
+    },
+    "is-decimal": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz",
+      "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==",
+      "dev": true
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "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,
+      "requires": {
+        "is-primitive": "^2.0.0"
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-finite": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "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
+    },
+    "is-glob": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+      "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.0"
+      }
+    },
+    "is-hexadecimal": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz",
+      "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==",
+      "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,
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "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-path-cwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+      "dev": true
+    },
+    "is-path-in-cwd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+      "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+      "dev": true,
+      "requires": {
+        "is-path-inside": "^1.0.0"
+      }
+    },
+    "is-path-inside": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "^1.0.1"
+      }
+    },
+    "is-plain-obj": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+      "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-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
+    },
+    "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-regex": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.1"
+      }
+    },
+    "is-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+      "dev": true
+    },
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+      "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-subset": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+      "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+      "dev": true
+    },
+    "is-supported-regexp-flag": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz",
+      "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==",
+      "dev": true
+    },
+    "is-symbol": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+      "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
+      "dev": true
+    },
+    "is-text-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+      "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+      "dev": true,
+      "requires": {
+        "text-extensions": "^1.0.0"
+      }
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
+    },
+    "is-whitespace-character": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz",
+      "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==",
+      "dev": true
+    },
+    "is-word-character": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz",
+      "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==",
+      "dev": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "dev": true
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+      "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+      "dev": true,
+      "requires": {
+        "isarray": "1.0.0"
+      }
+    },
+    "jest-docblock": {
+      "version": "21.2.0",
+      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz",
+      "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==",
+      "dev": true
+    },
+    "jest-get-type": {
+      "version": "21.2.0",
+      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-21.2.0.tgz",
+      "integrity": "sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==",
+      "dev": true
+    },
+    "jest-validate": {
+      "version": "21.2.1",
+      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-21.2.1.tgz",
+      "integrity": "sha512-k4HLI1rZQjlU+EC682RlQ6oZvLrE5SCh3brseQc24vbZTxzT/k/3urar5QMCVgjadmSO7lECeGdc6YxnM3yEGg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1",
+        "jest-get-type": "^21.2.0",
+        "leven": "^2.1.0",
+        "pretty-format": "^21.2.1"
+      }
+    },
+    "js-base64": {
+      "version": "2.4.8",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz",
+      "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==",
+      "dev": true
+    },
+    "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.12.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+      "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsesc": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz",
+      "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=",
+      "dev": true
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+      "dev": true
+    },
+    "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-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "jsonparse": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+      "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+      "dev": true
+    },
+    "jsx-ast-utils": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
+      "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+      "dev": true,
+      "requires": {
+        "array-includes": "^3.0.3"
+      }
+    },
+    "kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "dev": true,
+      "requires": {
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "known-css-properties": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.5.0.tgz",
+      "integrity": "sha512-LOS0CoS8zcZnB1EjLw4LLqDXw8nvt3AGH5dXLQP3D9O1nLLA+9GC5GnPl5mmF+JiQAtSX4VyZC7KvEtcA4kUtA==",
+      "dev": true
+    },
+    "lazy-cache": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+      "dev": true,
+      "optional": true
+    },
+    "lcid": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+      "dev": true,
+      "requires": {
+        "invert-kv": "^1.0.0"
+      }
+    },
+    "lerna": {
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/lerna/-/lerna-2.11.0.tgz",
+      "integrity": "sha512-kgM6zwe2P2tR30MYvgiLLW+9buFCm6E7o8HnRlhTgm70WVBvXVhydqv+q/MF2HrVZkCawfVtCfetyQmtd4oHhQ==",
+      "dev": true,
+      "requires": {
+        "async": "^1.5.0",
+        "chalk": "^2.1.0",
+        "cmd-shim": "^2.0.2",
+        "columnify": "^1.5.4",
+        "command-join": "^2.0.0",
+        "conventional-changelog-cli": "^1.3.13",
+        "conventional-recommended-bump": "^1.2.1",
+        "dedent": "^0.7.0",
+        "execa": "^0.8.0",
+        "find-up": "^2.1.0",
+        "fs-extra": "^4.0.1",
+        "get-port": "^3.2.0",
+        "glob": "^7.1.2",
+        "glob-parent": "^3.1.0",
+        "globby": "^6.1.0",
+        "graceful-fs": "^4.1.11",
+        "hosted-git-info": "^2.5.0",
+        "inquirer": "^3.2.2",
+        "is-ci": "^1.0.10",
+        "load-json-file": "^4.0.0",
+        "lodash": "^4.17.4",
+        "minimatch": "^3.0.4",
+        "npmlog": "^4.1.2",
+        "p-finally": "^1.0.0",
+        "package-json": "^4.0.1",
+        "path-exists": "^3.0.0",
+        "read-cmd-shim": "^1.0.1",
+        "read-pkg": "^3.0.0",
+        "rimraf": "^2.6.1",
+        "safe-buffer": "^5.1.1",
+        "semver": "^5.4.1",
+        "signal-exit": "^3.0.2",
+        "slash": "^1.0.0",
+        "strong-log-transformer": "^1.0.6",
+        "temp-write": "^3.3.0",
+        "write-file-atomic": "^2.3.0",
+        "write-json-file": "^2.2.0",
+        "write-pkg": "^3.1.0",
+        "yargs": "^8.0.2"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^2.0.0"
+          }
+        },
+        "globby": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "load-json-file": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+          "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^4.0.0",
+            "pify": "^3.0.0",
+            "strip-bom": "^3.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "dev": true
+            }
+          }
+        },
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        },
+        "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
+        },
+        "path-type": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+          "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "dev": true
+            }
+          }
+        },
+        "read-pkg": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+          "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+          "dev": true,
+          "requires": {
+            "load-json-file": "^4.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^3.0.0"
+          }
+        }
+      }
+    },
+    "leven": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+      "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+      "dev": true
+    },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      }
+    },
+    "lint-staged": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-4.3.0.tgz",
+      "integrity": "sha512-C/Zxslg0VRbsxwmCu977iIs+QyrmW2cyRCPUV5NDFYOH/jtRFHH8ch7ua2fH0voI/nVC3Tpg7DykfgMZySliKw==",
+      "dev": true,
+      "requires": {
+        "app-root-path": "^2.0.0",
+        "chalk": "^2.1.0",
+        "commander": "^2.11.0",
+        "cosmiconfig": "^1.1.0",
+        "execa": "^0.8.0",
+        "is-glob": "^4.0.0",
+        "jest-validate": "^21.1.0",
+        "listr": "^0.12.0",
+        "lodash": "^4.17.4",
+        "log-symbols": "^2.0.0",
+        "minimatch": "^3.0.0",
+        "npm-which": "^3.0.1",
+        "p-map": "^1.1.1",
+        "staged-git-files": "0.0.4",
+        "stringify-object": "^3.2.0"
+      },
+      "dependencies": {
+        "is-glob": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+          "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.1"
+          }
+        }
+      }
+    },
+    "listr": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz",
+      "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "cli-truncate": "^0.2.1",
+        "figures": "^1.7.0",
+        "indent-string": "^2.1.0",
+        "is-promise": "^2.1.0",
+        "is-stream": "^1.1.0",
+        "listr-silent-renderer": "^1.1.1",
+        "listr-update-renderer": "^0.2.0",
+        "listr-verbose-renderer": "^0.4.0",
+        "log-symbols": "^1.0.2",
+        "log-update": "^1.0.2",
+        "ora": "^0.2.3",
+        "p-map": "^1.1.1",
+        "rxjs": "^5.0.0-beta.11",
+        "stream-to-observable": "^0.1.0",
+        "strip-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "figures": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+          "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5",
+            "object-assign": "^4.1.0"
+          }
+        },
+        "indent-string": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+          "dev": true,
+          "requires": {
+            "repeating": "^2.0.0"
+          }
+        },
+        "log-symbols": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+          "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+          "dev": true,
+          "requires": {
+            "chalk": "^1.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "listr-silent-renderer": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
+      "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
+      "dev": true
+    },
+    "listr-update-renderer": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz",
+      "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "cli-truncate": "^0.2.1",
+        "elegant-spinner": "^1.0.1",
+        "figures": "^1.7.0",
+        "indent-string": "^3.0.0",
+        "log-symbols": "^1.0.2",
+        "log-update": "^1.0.2",
+        "strip-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "figures": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+          "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5",
+            "object-assign": "^4.1.0"
+          }
+        },
+        "log-symbols": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+          "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+          "dev": true,
+          "requires": {
+            "chalk": "^1.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "listr-verbose-renderer": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz",
+      "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "cli-cursor": "^1.0.2",
+        "date-fns": "^1.27.2",
+        "figures": "^1.7.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "cli-cursor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+          "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^1.0.1"
+          }
+        },
+        "figures": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+          "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+          "dev": true,
+          "requires": {
+            "escape-string-regexp": "^1.0.5",
+            "object-assign": "^4.1.0"
+          }
+        },
+        "onetime": {
+          "version": "1.1.0",
+          "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+          "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+          "dev": true
+        },
+        "restore-cursor": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+          "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+          "dev": true,
+          "requires": {
+            "exit-hook": "^1.0.0",
+            "onetime": "^1.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "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,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "strip-bom": "^3.0.0"
+      }
+    },
+    "locate-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+      "dev": true,
+      "requires": {
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
+      },
+      "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.10",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+      "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+      "dev": true
+    },
+    "lodash._reinterpolate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+      "dev": true
+    },
+    "lodash.map": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+      "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+      "dev": true
+    },
+    "lodash.template": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+      "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+      "dev": true,
+      "requires": {
+        "lodash._reinterpolate": "~3.0.0",
+        "lodash.templatesettings": "^4.0.0"
+      }
+    },
+    "lodash.templatesettings": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+      "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+      "dev": true,
+      "requires": {
+        "lodash._reinterpolate": "~3.0.0"
+      }
+    },
+    "log-symbols": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "log-update": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz",
+      "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^1.0.0",
+        "cli-cursor": "^1.0.2"
+      },
+      "dependencies": {
+        "ansi-escapes": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+          "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+          "dev": true
+        },
+        "cli-cursor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+          "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^1.0.1"
+          }
+        },
+        "onetime": {
+          "version": "1.1.0",
+          "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+          "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+          "dev": true
+        },
+        "restore-cursor": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+          "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+          "dev": true,
+          "requires": {
+            "exit-hook": "^1.0.0",
+            "onetime": "^1.0.0"
+          }
+        }
+      }
+    },
+    "longest": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+      "dev": true
+    },
+    "longest-streak": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz",
+      "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==",
+      "dev": true
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "dev": true,
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "dev": true,
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lowercase-keys": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+      "dev": true
+    },
+    "lru-cache": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+      "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+      "dev": true,
+      "requires": {
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
+      }
+    },
+    "make-dir": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+      "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "map-obj": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+      "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+      "dev": true
+    },
+    "markdown-escapes": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz",
+      "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==",
+      "dev": true
+    },
+    "markdown-table": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz",
+      "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==",
+      "dev": true
+    },
+    "math-random": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+      "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+      "dev": true
+    },
+    "mathml-tag-names": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz",
+      "integrity": "sha512-3Zs9P/0zzwTob2pdgT0CHZuMbnSUSp8MB1bddfm+HDmnFWHGT4jvEZRf+2RuPoa+cjdn/z25SEt5gFTqdhvJAg==",
+      "dev": true
+    },
+    "mdast-util-compact": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz",
+      "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=",
+      "dev": true,
+      "requires": {
+        "unist-util-modify-children": "^1.0.0",
+        "unist-util-visit": "^1.1.0"
+      }
+    },
+    "mem": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+      "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^1.0.0"
+      }
+    },
+    "meow": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+      "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+      "dev": true,
+      "requires": {
+        "camelcase-keys": "^4.0.0",
+        "decamelize-keys": "^1.0.0",
+        "loud-rejection": "^1.0.0",
+        "minimist": "^1.1.3",
+        "minimist-options": "^3.0.1",
+        "normalize-package-data": "^2.3.4",
+        "read-pkg-up": "^3.0.0",
+        "redent": "^2.0.0",
+        "trim-newlines": "^2.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^2.0.0"
+          }
+        },
+        "load-json-file": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+          "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^4.0.0",
+            "pify": "^3.0.0",
+            "strip-bom": "^3.0.0"
+          }
+        },
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true
+        },
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        },
+        "path-type": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+          "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        },
+        "read-pkg": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+          "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+          "dev": true,
+          "requires": {
+            "load-json-file": "^4.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^3.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+          "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+          "dev": true,
+          "requires": {
+            "find-up": "^2.0.0",
+            "read-pkg": "^3.0.0"
+          }
+        }
+      }
+    },
+    "micromatch": {
+      "version": "2.3.11",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+      "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^2.0.0",
+        "array-unique": "^0.2.1",
+        "braces": "^1.8.2",
+        "expand-brackets": "^0.1.4",
+        "extglob": "^0.3.1",
+        "filename-regex": "^2.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.1",
+        "kind-of": "^3.0.2",
+        "normalize-path": "^2.0.1",
+        "object.omit": "^2.0.0",
+        "parse-glob": "^3.0.4",
+        "regex-cache": "^0.4.2"
+      },
+      "dependencies": {
+        "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-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        }
+      }
+    },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+      "dev": true
+    },
+    "minimist-options": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+      "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+      "dev": true,
+      "requires": {
+        "arrify": "^1.0.1",
+        "is-plain-obj": "^1.1.0"
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8"
+      }
+    },
+    "modify-values": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+      "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+      "dev": true
+    },
+    "moment": {
+      "version": "2.22.2",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
+      "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=",
+      "dev": true
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "dev": true
+    },
+    "mute-stream": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+      "dev": true
+    },
+    "natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "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,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "is-builtin-module": "^1.0.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
+      "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+      "dev": true
+    },
+    "normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "dev": true
+    },
+    "normalize-selector": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
+      "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
+      "dev": true
+    },
+    "npm-path": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz",
+      "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==",
+      "dev": true,
+      "requires": {
+        "which": "^1.2.10"
+      }
+    },
+    "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,
+      "requires": {
+        "path-key": "^2.0.0"
+      }
+    },
+    "npm-which": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz",
+      "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
+      "dev": true,
+      "requires": {
+        "commander": "^2.9.0",
+        "npm-path": "^2.0.2",
+        "which": "^1.2.10"
+      }
+    },
+    "npmlog": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+      "dev": true,
+      "requires": {
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
+      }
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+      "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
+    },
+    "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.12",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+      "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+      "dev": true
+    },
+    "object.omit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+      "dev": true,
+      "requires": {
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
+      }
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^1.0.0"
+      }
+    },
+    "optimist": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+      "dev": true,
+      "requires": {
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
+      },
+      "dependencies": {
+        "wordwrap": {
+          "version": "0.0.3",
+          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+          "dev": true
+        }
+      }
+    },
+    "optionator": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+      "dev": true,
+      "requires": {
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
+      }
+    },
+    "ora": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
+      "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.1",
+        "cli-cursor": "^1.0.2",
+        "cli-spinners": "^0.1.2",
+        "object-assign": "^4.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "cli-cursor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+          "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+          "dev": true,
+          "requires": {
+            "restore-cursor": "^1.0.1"
+          }
+        },
+        "onetime": {
+          "version": "1.1.0",
+          "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+          "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+          "dev": true
+        },
+        "restore-cursor": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+          "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+          "dev": true,
+          "requires": {
+            "exit-hook": "^1.0.0",
+            "onetime": "^1.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "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.1.0",
+      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+      "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+      "dev": true,
+      "requires": {
+        "execa": "^0.7.0",
+        "lcid": "^1.0.0",
+        "mem": "^1.1.0"
+      },
+      "dependencies": {
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^5.0.1",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        }
+      }
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "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.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+      "dev": true,
+      "requires": {
+        "p-try": "^1.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+      "dev": true,
+      "requires": {
+        "p-limit": "^1.1.0"
+      }
+    },
+    "p-map": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+      "dev": true
+    },
+    "p-try": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+      "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,
+      "requires": {
+        "got": "^6.7.1",
+        "registry-auth-token": "^3.0.1",
+        "registry-url": "^3.0.3",
+        "semver": "^5.1.0"
+      }
+    },
+    "parse-entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz",
+      "integrity": "sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==",
+      "dev": true,
+      "requires": {
+        "character-entities": "^1.0.0",
+        "character-entities-legacy": "^1.0.0",
+        "character-reference-invalid": "^1.0.0",
+        "is-alphanumerical": "^1.0.0",
+        "is-decimal": "^1.0.0",
+        "is-hexadecimal": "^1.0.0"
+      }
+    },
+    "parse-github-repo-url": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+      "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+      "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,
+      "requires": {
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "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-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "parse-json": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.2.0"
+      }
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "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,
+      "requires": {
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "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
+    },
+    "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-to-regexp": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+      "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+      "dev": true,
+      "requires": {
+        "isarray": "0.0.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+          "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,
+      "requires": {
+        "pify": "^2.0.0"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "pkg-dir": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+      "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+      "dev": true,
+      "requires": {
+        "find-up": "^1.0.0"
+      }
+    },
+    "pluralize": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+      "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+      "dev": true
+    },
+    "postcss": {
+      "version": "6.0.23",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+      "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.1",
+        "source-map": "^0.6.1",
+        "supports-color": "^5.4.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "postcss-html": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.12.0.tgz",
+      "integrity": "sha512-KxKUpj7AY7nlCbLcTOYxdfJnGE7QFAfU2n95ADj1Q90RM/pOLdz8k3n4avOyRFs7MDQHcRzJQWM1dehCwJxisQ==",
+      "dev": true,
+      "requires": {
+        "htmlparser2": "^3.9.2",
+        "remark": "^8.0.0",
+        "unist-util-find-all-after": "^1.0.1"
+      }
+    },
+    "postcss-less": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.5.tgz",
+      "integrity": "sha512-QQIiIqgEjNnquc0d4b6HDOSFZxbFQoy4MPpli2lSLpKhMyBkKwwca2HFqu4xzxlKID/F2fxSOowwtKpgczhF7A==",
+      "dev": true,
+      "requires": {
+        "postcss": "^5.2.16"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          },
+          "dependencies": {
+            "supports-color": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+              "dev": true
+            }
+          }
+        },
+        "has-flag": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+          "dev": true
+        },
+        "postcss": {
+          "version": "5.2.18",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+          "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+          "dev": true,
+          "requires": {
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
+          }
+        },
+        "supports-color": {
+          "version": "3.2.3",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^1.0.0"
+          }
+        }
+      }
+    },
+    "postcss-media-query-parser": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
+      "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=",
+      "dev": true
+    },
+    "postcss-reporter": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz",
+      "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1",
+        "lodash": "^4.17.4",
+        "log-symbols": "^2.0.0",
+        "postcss": "^6.0.8"
+      }
+    },
+    "postcss-resolve-nested-selector": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
+      "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=",
+      "dev": true
+    },
+    "postcss-safe-parser": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz",
+      "integrity": "sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=",
+      "dev": true,
+      "requires": {
+        "postcss": "^6.0.6"
+      }
+    },
+    "postcss-sass": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.2.0.tgz",
+      "integrity": "sha512-cUmYzkP747fPCQE6d+CH2l1L4VSyIlAzZsok3HPjb5Gzsq3jE+VjpAdGlPsnQ310WKWI42sw+ar0UNN59/f3hg==",
+      "dev": true,
+      "requires": {
+        "gonzales-pe": "^4.0.3",
+        "postcss": "^6.0.6"
+      }
+    },
+    "postcss-scss": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.6.tgz",
+      "integrity": "sha512-4EFYGHcEw+H3E06PT/pQQri06u/1VIIPjeJQaM8skB80vZuXMhp4cSNV5azmdNkontnOID/XYWEvEEELLFB1ww==",
+      "dev": true,
+      "requires": {
+        "postcss": "^6.0.23"
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+      "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+      "dev": true,
+      "requires": {
+        "dot-prop": "^4.1.1",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
+      },
+      "dependencies": {
+        "dot-prop": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+          "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+          "dev": true,
+          "requires": {
+            "is-obj": "^1.0.0"
+          }
+        }
+      }
+    },
+    "postcss-sorting": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-3.1.0.tgz",
+      "integrity": "sha512-YCPTcJwGIInF1LpMD1lIYvMHTGUL4s97o/OraA6eKvoauhhk6vjwOWDDjm6uRKqug/kyDPMKEzmYZ6FtW6RDgw==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.4",
+        "postcss": "^6.0.13"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
+      "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
+      "dev": true
+    },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+      "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
+    },
+    "prettier": {
+      "version": "1.14.0",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.0.tgz",
+      "integrity": "sha512-KtQ2EGaUwf2EyDfp1fxyEb0PqGKakVm0WyXwDt6u+cAoxbO2Z2CwKvOe3+b4+F2IlO9lYHi1kqFuRM70ddBnow==",
+      "dev": true
+    },
+    "pretty-format": {
+      "version": "21.2.1",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz",
+      "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^3.0.0",
+        "ansi-styles": "^3.2.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        }
+      }
+    },
+    "private": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+      "dev": true
+    },
+    "process-nextick-args": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+      "dev": true
+    },
+    "progress": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+      "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+      "dev": true
+    },
+    "prop-types": {
+      "version": "15.6.2",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
+      "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+      "dev": true,
+      "requires": {
+        "loose-envify": "^1.3.1",
+        "object-assign": "^4.1.1"
+      }
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+      "dev": true
+    },
+    "quick-lru": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+      "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+      "dev": true
+    },
+    "randomatic": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
+      "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
+      "dev": true,
+      "requires": {
+        "is-number": "^4.0.0",
+        "kind-of": "^6.0.0",
+        "math-random": "^1.0.1"
+      },
+      "dependencies": {
+        "is-number": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+          "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+          "dev": true
+        }
+      }
+    },
+    "rc": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "dev": true,
+      "requires": {
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+          "dev": true
+        }
+      }
+    },
+    "react-router": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz",
+      "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==",
+      "dev": true,
+      "requires": {
+        "history": "^4.7.2",
+        "hoist-non-react-statics": "^2.5.0",
+        "invariant": "^2.2.4",
+        "loose-envify": "^1.3.1",
+        "path-to-regexp": "^1.7.0",
+        "prop-types": "^15.6.1",
+        "warning": "^4.0.1"
+      },
+      "dependencies": {
+        "warning": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.1.tgz",
+          "integrity": "sha512-rAVtTNZw+cQPjvGp1ox0XC5Q2IBFyqoqh+QII4J/oguyu83Bax1apbo2eqB8bHRS+fqYUBagys6lqUoVwKSmXQ==",
+          "dev": true,
+          "requires": {
+            "loose-envify": "^1.0.0"
+          }
+        }
+      }
+    },
+    "react-router-redux": {
+      "version": "5.0.0-alpha.9",
+      "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-5.0.0-alpha.9.tgz",
+      "integrity": "sha512-euSgNIANnRXr4GydIuwA7RZCefrLQzIw5WdXspS8NPYbV+FxrKSS9MKG7U9vb6vsKHONnA4VxrVNWfnMUnUQAw==",
+      "dev": true,
+      "requires": {
+        "history": "^4.7.2",
+        "prop-types": "^15.6.0",
+        "react-router": "^4.2.0"
+      }
+    },
+    "read-cmd-shim": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz",
+      "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2"
+      }
+    },
+    "read-pkg": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+      "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+      "dev": true,
+      "requires": {
+        "load-json-file": "^2.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^2.0.0"
+      }
+    },
+    "read-pkg-up": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+      "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+      "dev": true,
+      "requires": {
+        "find-up": "^2.0.0",
+        "read-pkg": "^2.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^2.0.0"
+          }
+        }
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+      "dev": true,
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "redent": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+      "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+      "dev": true,
+      "requires": {
+        "indent-string": "^3.0.0",
+        "strip-indent": "^2.0.0"
+      }
+    },
+    "regenerate": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+      "dev": true
+    },
+    "regenerator-runtime": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+      "dev": true
+    },
+    "regenerator-transform": {
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+      "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.18.0",
+        "babel-types": "^6.19.0",
+        "private": "^0.1.6"
+      }
+    },
+    "regex-cache": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+      "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+      "dev": true,
+      "requires": {
+        "is-equal-shallow": "^0.1.3"
+      }
+    },
+    "regexpp": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+      "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+      "dev": true
+    },
+    "regexpu-core": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+      "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.2.1",
+        "regjsgen": "^0.2.0",
+        "regjsparser": "^0.1.4"
+      }
+    },
+    "registry-auth-token": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+      "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+      "dev": true,
+      "requires": {
+        "rc": "^1.1.6",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "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,
+      "requires": {
+        "rc": "^1.0.1"
+      }
+    },
+    "regjsgen": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+      "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+      "dev": true
+    },
+    "regjsparser": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+      "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+      "dev": true,
+      "requires": {
+        "jsesc": "~0.5.0"
+      },
+      "dependencies": {
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "dev": true
+        }
+      }
+    },
+    "remark": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz",
+      "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==",
+      "dev": true,
+      "requires": {
+        "remark-parse": "^4.0.0",
+        "remark-stringify": "^4.0.0",
+        "unified": "^6.0.0"
+      }
+    },
+    "remark-parse": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz",
+      "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==",
+      "dev": true,
+      "requires": {
+        "collapse-white-space": "^1.0.2",
+        "is-alphabetical": "^1.0.0",
+        "is-decimal": "^1.0.0",
+        "is-whitespace-character": "^1.0.0",
+        "is-word-character": "^1.0.0",
+        "markdown-escapes": "^1.0.0",
+        "parse-entities": "^1.0.2",
+        "repeat-string": "^1.5.4",
+        "state-toggle": "^1.0.0",
+        "trim": "0.0.1",
+        "trim-trailing-lines": "^1.0.0",
+        "unherit": "^1.0.4",
+        "unist-util-remove-position": "^1.0.0",
+        "vfile-location": "^2.0.0",
+        "xtend": "^4.0.1"
+      }
+    },
+    "remark-stringify": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz",
+      "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==",
+      "dev": true,
+      "requires": {
+        "ccount": "^1.0.0",
+        "is-alphanumeric": "^1.0.0",
+        "is-decimal": "^1.0.0",
+        "is-whitespace-character": "^1.0.0",
+        "longest-streak": "^2.0.1",
+        "markdown-escapes": "^1.0.0",
+        "markdown-table": "^1.1.0",
+        "mdast-util-compact": "^1.0.0",
+        "parse-entities": "^1.0.2",
+        "repeat-string": "^1.5.4",
+        "state-toggle": "^1.0.0",
+        "stringify-entities": "^1.0.1",
+        "unherit": "^1.0.4",
+        "xtend": "^4.0.1"
+      }
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "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,
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "replace-ext": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+      "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+      "dev": true
+    },
+    "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-from-string": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz",
+      "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=",
+      "dev": true
+    },
+    "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
+    },
+    "require-uncached": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+      "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+      "dev": true,
+      "requires": {
+        "caller-path": "^0.1.0",
+        "resolve-from": "^1.0.0"
+      }
+    },
+    "resolve": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+      "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+      "dev": true,
+      "requires": {
+        "path-parse": "^1.0.5"
+      }
+    },
+    "resolve-from": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+      "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+      "dev": true
+    },
+    "resolve-pathname": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz",
+      "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==",
+      "dev": true
+    },
+    "restore-cursor": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+      "dev": true,
+      "requires": {
+        "onetime": "^2.0.0",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "right-align": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+      "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "align-text": "^0.1.1"
+      }
+    },
+    "right-pad": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz",
+      "integrity": "sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+      "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.5"
+      }
+    },
+    "run-async": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+      "dev": true,
+      "requires": {
+        "is-promise": "^2.1.0"
+      }
+    },
+    "rx-lite": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+      "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+      "dev": true
+    },
+    "rx-lite-aggregates": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+      "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+      "dev": true,
+      "requires": {
+        "rx-lite": "*"
+      }
+    },
+    "rxjs": {
+      "version": "5.5.11",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.11.tgz",
+      "integrity": "sha512-3bjO7UwWfA2CV7lmwYMBzj4fQ6Cq+ftHc2MvUe+WMS7wcdJ1LosDWmdjPQanYp2dBRj572p7PeU81JUxHKOcBA==",
+      "dev": true,
+      "requires": {
+        "symbol-observable": "1.0.1"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "semver": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+      "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+      "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
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "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
+    },
+    "slash": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+      "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+      "dev": true
+    },
+    "slice-ansi": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+      "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+      "dev": true,
+      "requires": {
+        "is-fullwidth-code-point": "^2.0.0"
+      }
+    },
+    "sort-keys": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+      "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+      "dev": true,
+      "requires": {
+        "is-plain-obj": "^1.0.0"
+      }
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true
+    },
+    "spdx-correct": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+      "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+      "dev": true,
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+      "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+      "dev": true
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+      "dev": true,
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+      "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+      "dev": true
+    },
+    "specificity": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.3.2.tgz",
+      "integrity": "sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A==",
+      "dev": true
+    },
+    "split": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+      "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+      "dev": true,
+      "requires": {
+        "through": "2"
+      }
+    },
+    "split2": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+      "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+      "dev": true,
+      "requires": {
+        "through2": "^2.0.2"
+      }
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "dev": true
+    },
+    "staged-git-files": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-0.0.4.tgz",
+      "integrity": "sha1-15fhtVHKemOd7AI33G60u5vhfTU=",
       "dev": true
     },
-    "cz-conventional-changelog": {
+    "state-toggle": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz",
+      "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==",
+      "dev": true
+    },
+    "stream-to-observable": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz",
+      "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=",
+      "dev": true
+    },
+    "string-width": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+      "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+      "dev": true,
+      "requires": {
+        "is-fullwidth-code-point": "^2.0.0",
+        "strip-ansi": "^4.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "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,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "stringify-entities": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz",
+      "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
+      "dev": true,
+      "requires": {
+        "character-entities-html4": "^1.0.0",
+        "character-entities-legacy": "^1.0.0",
+        "is-alphanumerical": "^1.0.0",
+        "is-hexadecimal": "^1.0.0"
+      }
+    },
+    "stringify-object": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.2.tgz",
+      "integrity": "sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg==",
+      "dev": true,
+      "requires": {
+        "get-own-enumerable-property-symbols": "^2.0.1",
+        "is-obj": "^1.0.1",
+        "is-regexp": "^1.0.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "strip-bom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+      "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": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+      "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+      "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
+    },
+    "strong-log-transformer": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz",
+      "integrity": "sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=",
+      "dev": true,
+      "requires": {
+        "byline": "^5.0.0",
+        "duplexer": "^0.1.1",
+        "minimist": "^0.1.0",
+        "moment": "^2.6.0",
+        "through": "^2.3.4"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz",
+          "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=",
+          "dev": true
+        }
+      }
+    },
+    "style-search": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
+      "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=",
+      "dev": true
+    },
+    "stylelint": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-8.4.0.tgz",
+      "integrity": "sha512-56hPH5mTFnk8LzlEuTWq0epa34fHuS54UFYQidBOFt563RJBNi1nz1F2HK2MoT1X1waq47milvRsRahFCCJs/Q==",
+      "dev": true,
+      "requires": {
+        "autoprefixer": "^7.1.2",
+        "balanced-match": "^1.0.0",
+        "chalk": "^2.0.1",
+        "cosmiconfig": "^3.1.0",
+        "debug": "^3.0.0",
+        "execall": "^1.0.0",
+        "file-entry-cache": "^2.0.0",
+        "get-stdin": "^5.0.1",
+        "globby": "^7.0.0",
+        "globjoin": "^0.1.4",
+        "html-tags": "^2.0.0",
+        "ignore": "^3.3.3",
+        "imurmurhash": "^0.1.4",
+        "known-css-properties": "^0.5.0",
+        "lodash": "^4.17.4",
+        "log-symbols": "^2.0.0",
+        "mathml-tag-names": "^2.0.1",
+        "meow": "^4.0.0",
+        "micromatch": "^2.3.11",
+        "normalize-selector": "^0.2.0",
+        "pify": "^3.0.0",
+        "postcss": "^6.0.6",
+        "postcss-html": "^0.12.0",
+        "postcss-less": "^1.1.0",
+        "postcss-media-query-parser": "^0.2.3",
+        "postcss-reporter": "^5.0.0",
+        "postcss-resolve-nested-selector": "^0.1.1",
+        "postcss-safe-parser": "^3.0.1",
+        "postcss-sass": "^0.2.0",
+        "postcss-scss": "^1.0.2",
+        "postcss-selector-parser": "^3.1.0",
+        "postcss-value-parser": "^3.3.0",
+        "resolve-from": "^4.0.0",
+        "specificity": "^0.3.1",
+        "string-width": "^2.1.0",
+        "style-search": "^0.1.0",
+        "sugarss": "^1.0.0",
+        "svg-tags": "^1.0.0",
+        "table": "^4.0.1"
+      },
+      "dependencies": {
+        "cosmiconfig": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-3.1.0.tgz",
+          "integrity": "sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q==",
+          "dev": true,
+          "requires": {
+            "is-directory": "^0.3.1",
+            "js-yaml": "^3.9.0",
+            "parse-json": "^3.0.0",
+            "require-from-string": "^2.0.1"
+          }
+        },
+        "globby": {
+          "version": "7.1.1",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+          "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "dir-glob": "^2.0.0",
+            "glob": "^7.1.2",
+            "ignore": "^3.3.5",
+            "pify": "^3.0.0",
+            "slash": "^1.0.0"
+          }
+        },
+        "parse-json": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz",
+          "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        },
+        "require-from-string": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+          "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+          "dev": true
+        },
+        "resolve-from": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+          "dev": true
+        }
+      }
+    },
+    "stylelint-config-pubsweet": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/stylelint-config-pubsweet/-/stylelint-config-pubsweet-0.0.3.tgz",
+      "integrity": "sha512-YQmvrpIly8chSZYQSDNYY1AbVF+yvYoXkXGgllUGRNLlSn2nra2kBtXlJ3KwkzPkn9/AWaohWVeqaZ7pkB8V6w==",
+      "dev": true,
+      "requires": {
+        "stylelint": "^8.2.0",
+        "stylelint-config-standard": "^18.0.0",
+        "stylelint-order": "^0.7.0"
+      }
+    },
+    "stylelint-config-recommended": {
       "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-2.1.0.tgz",
-      "integrity": "sha1-L0vHOQ4yROTfKT5ro1Hkx0Cnx2Q=",
+      "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz",
+      "integrity": "sha512-ajMbivOD7JxdsnlS5945KYhvt7L/HwN6YeYF2BH6kE4UCLJR0YvXMf+2j7nQpJyYLZx9uZzU5G1ZOSBiWAc6yA==",
+      "dev": true
+    },
+    "stylelint-config-standard": {
+      "version": "18.2.0",
+      "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-18.2.0.tgz",
+      "integrity": "sha512-07x0TaSIzvXlbOioUU4ORkCIM07kyIuojkbSVCyFWNVgXMXYHfhnQSCkqu+oHWJf3YADAnPGWzdJ53NxkoJ7RA==",
       "dev": true,
       "requires": {
-        "conventional-commit-types": "2.2.0",
-        "lodash.map": "4.6.0",
-        "longest": "1.0.1",
-        "right-pad": "1.0.1",
-        "word-wrap": "1.2.3"
+        "stylelint-config-recommended": "^2.1.0"
       }
     },
-    "lodash.map": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
-      "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+    "stylelint-order": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-0.7.0.tgz",
+      "integrity": "sha1-zqtcviSqM/pjWQAkmVOV9u38mrc=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.4",
+        "postcss": "^6.0.11",
+        "postcss-sorting": "^3.0.2"
+      }
+    },
+    "sugarss": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-1.0.1.tgz",
+      "integrity": "sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA==",
+      "dev": true,
+      "requires": {
+        "postcss": "^6.0.14"
+      }
+    },
+    "supports-color": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+      "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+      "dev": true,
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+      "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
       "dev": true
     },
-    "longest": {
+    "symbol-observable": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
-      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
+      "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
       "dev": true
     },
-    "right-pad": {
+    "table": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+      "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+      "dev": true,
+      "requires": {
+        "ajv": "^5.2.3",
+        "ajv-keywords": "^2.1.0",
+        "chalk": "^2.1.0",
+        "lodash": "^4.17.4",
+        "slice-ansi": "1.0.0",
+        "string-width": "^2.1.1"
+      }
+    },
+    "temp-dir": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+      "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+      "dev": true
+    },
+    "temp-write": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz",
+      "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "is-stream": "^1.1.0",
+        "make-dir": "^1.0.0",
+        "pify": "^3.0.0",
+        "temp-dir": "^1.0.0",
+        "uuid": "^3.0.1"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        },
+        "uuid": {
+          "version": "3.3.2",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+          "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+          "dev": true
+        }
+      }
+    },
+    "tempfile": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
+      "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
+      "dev": true,
+      "requires": {
+        "os-tmpdir": "^1.0.0",
+        "uuid": "^2.0.1"
+      }
+    },
+    "text-extensions": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz",
+      "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==",
+      "dev": true
+    },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "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
+    },
+    "through2": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+      "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+      "dev": true,
+      "requires": {
+        "readable-stream": "^2.1.5",
+        "xtend": "~4.0.1"
+      }
+    },
+    "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
+    },
+    "tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "dev": true,
+      "requires": {
+        "os-tmpdir": "~1.0.2"
+      }
+    },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+      "dev": true
+    },
+    "trim": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
+      "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
+      "dev": true
+    },
+    "trim-newlines": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+      "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+      "dev": true
+    },
+    "trim-off-newlines": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz",
-      "integrity": "sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=",
+      "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
+      "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
+      "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
+    },
+    "trim-trailing-lines": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz",
+      "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==",
+      "dev": true
+    },
+    "trough": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.2.tgz",
+      "integrity": "sha512-FHkoUZvG6Egrv9XZAyYGKEyb1JMsFphgPjoczkZC2y6W93U1jswcVURB8MUvtsahEPEVACyxD47JAL63vF4JsQ==",
+      "dev": true
+    },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "dev": true,
+      "requires": {
+        "prelude-ls": "~1.1.2"
+      }
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
+    },
+    "uglify-js": {
+      "version": "2.8.29",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+      "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "source-map": "~0.5.1",
+        "uglify-to-browserify": "~1.0.0",
+        "yargs": "~3.10.0"
+      },
+      "dependencies": {
+        "yargs": {
+          "version": "3.10.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+          "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "camelcase": "^1.0.2",
+            "cliui": "^2.1.0",
+            "decamelize": "^1.0.0",
+            "window-size": "0.1.0"
+          }
+        }
+      }
+    },
+    "uglify-to-browserify": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+      "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+      "dev": true,
+      "optional": true
+    },
+    "unherit": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz",
+      "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "xtend": "^4.0.1"
+      }
+    },
+    "unified": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz",
+      "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==",
+      "dev": true,
+      "requires": {
+        "bail": "^1.0.0",
+        "extend": "^3.0.0",
+        "is-plain-obj": "^1.1.0",
+        "trough": "^1.0.0",
+        "vfile": "^2.0.0",
+        "x-is-string": "^0.1.0"
+      }
+    },
+    "uniq": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+      "dev": true
+    },
+    "unist-util-find-all-after": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz",
+      "integrity": "sha512-nDl79mKpffXojLpCimVXnxhlH/jjaTnDuScznU9J4jjsaUtBdDbxmlc109XtcqxY4SDO0SwzngsxxW8DIISt1w==",
+      "dev": true,
+      "requires": {
+        "unist-util-is": "^2.0.0"
+      }
+    },
+    "unist-util-is": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz",
+      "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==",
+      "dev": true
+    },
+    "unist-util-modify-children": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.2.tgz",
+      "integrity": "sha512-GRi04yhng1WqBf5RBzPkOtWAadcZS2gvuOgNn/cyJBYNxtTuyYqTKN0eg4rC1YJwGnzrqfRB3dSKm8cNCjNirg==",
+      "dev": true,
+      "requires": {
+        "array-iterate": "^1.0.0"
+      }
+    },
+    "unist-util-remove-position": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz",
+      "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==",
+      "dev": true,
+      "requires": {
+        "unist-util-visit": "^1.1.0"
+      }
+    },
+    "unist-util-stringify-position": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
+      "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
+      "dev": true
+    },
+    "unist-util-visit": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz",
+      "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==",
+      "dev": true,
+      "requires": {
+        "unist-util-visit-parents": "^2.0.0"
+      }
+    },
+    "unist-util-visit-parents": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz",
+      "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==",
+      "dev": true,
+      "requires": {
+        "unist-util-is": "^2.1.2"
+      }
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+      "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
+    },
+    "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,
+      "requires": {
+        "prepend-http": "^1.0.1"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "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
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+      "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+      "dev": true,
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "value-equal": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz",
+      "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==",
+      "dev": true
+    },
+    "vfile": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz",
+      "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==",
+      "dev": true,
+      "requires": {
+        "is-buffer": "^1.1.4",
+        "replace-ext": "1.0.0",
+        "unist-util-stringify-position": "^1.0.0",
+        "vfile-message": "^1.0.0"
+      }
+    },
+    "vfile-location": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz",
+      "integrity": "sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==",
+      "dev": true
+    },
+    "vfile-message": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz",
+      "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==",
+      "dev": true,
+      "requires": {
+        "unist-util-stringify-position": "^1.1.1"
+      }
+    },
+    "warning": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+      "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+      "dev": true,
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "wcwidth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+      "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+      "dev": true,
+      "requires": {
+        "defaults": "^1.0.3"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
       "dev": true
     },
+    "wide-align": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "window-size": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+      "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+      "dev": true,
+      "optional": true
+    },
     "word-wrap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
       "dev": true
+    },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "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,
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
+      },
+      "dependencies": {
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "write": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+      "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+      "dev": true,
+      "requires": {
+        "mkdirp": "^0.5.1"
+      }
+    },
+    "write-file-atomic": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+      "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "imurmurhash": "^0.1.4",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "write-json-file": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz",
+      "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=",
+      "dev": true,
+      "requires": {
+        "detect-indent": "^5.0.0",
+        "graceful-fs": "^4.1.2",
+        "make-dir": "^1.0.0",
+        "pify": "^3.0.0",
+        "sort-keys": "^2.0.0",
+        "write-file-atomic": "^2.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "write-pkg": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz",
+      "integrity": "sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==",
+      "dev": true,
+      "requires": {
+        "sort-keys": "^2.0.0",
+        "write-json-file": "^2.2.0"
+      }
+    },
+    "x-is-string": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
+      "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+      "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+      "dev": true
+    },
+    "y18n": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+      "dev": true
+    },
+    "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,
+      "requires": {
+        "camelcase": "^4.1.0",
+        "cliui": "^3.2.0",
+        "decamelize": "^1.1.1",
+        "get-caller-file": "^1.0.1",
+        "os-locale": "^2.0.0",
+        "read-pkg-up": "^2.0.0",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^1.0.1",
+        "set-blocking": "^2.0.0",
+        "string-width": "^2.0.0",
+        "which-module": "^2.0.0",
+        "y18n": "^3.2.1",
+        "yargs-parser": "^7.0.0"
+      },
+      "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
+        },
+        "cliui": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+          "dev": true,
+          "requires": {
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wrap-ansi": "^2.0.0"
+          },
+          "dependencies": {
+            "string-width": {
+              "version": "1.0.2",
+              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+              "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+              "dev": true,
+              "requires": {
+                "code-point-at": "^1.0.0",
+                "is-fullwidth-code-point": "^1.0.0",
+                "strip-ansi": "^3.0.0"
+              }
+            }
+          }
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+      "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+      "dev": true,
+      "requires": {
+        "camelcase": "^4.1.0"
+      },
+      "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
+        }
+      }
     }
   }
 }
diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js
index befba20e17db130dae1feb571429cbcb78248b93..d09bdf1fa58da40194c5485a64687950a6011cec 100644
--- a/packages/component-faraday-selectors/src/index.js
+++ b/packages/component-faraday-selectors/src/index.js
@@ -14,6 +14,7 @@ export const currentUserIs = ({ currentUser: { user } }, role) => {
   const isAdmin = get(user, 'admin')
   const isEic = get(user, 'editorInChief')
   const isHe = get(user, 'handlingEditor')
+
   switch (role) {
     case 'isHE':
       return isHe
@@ -55,32 +56,34 @@ const cannotViewReviewersDetails = [
 ]
 
 export const canViewReviewersDetails = (state, collection = {}) => {
-  if (cannotViewReviewersDetails.includes(get(collection, 'status', 'draft'))) {
+  const isHeAssigned = !!get(collection, 'handlingEditor', false)
+  if (
+    cannotViewReviewersDetails.includes(get(collection, 'status', 'draft')) ||
+    !isHeAssigned
+  ) {
     return false
   }
   return canViewReports(state, collection.id)
 }
 
-const cannotAuthorViewEditorialCommentsStatuses = [
-  'draft',
-  'technicalChecks',
-  'submitted',
-  'heInvited',
-  'heAssigned',
-  'reviewersInvited',
+const authorCanViewReportsDetailsStatuses = [
+  'revisionRequested',
+  'pendingApproval',
+  'rejected',
+  'accepted',
+  'inQa',
 ]
 
-export const canAuthorViewEditorialComments = (
+export const authorCanViewReportsDetails = (
   state,
   collection = {},
   fragmentId,
 ) => {
   const isAuthor = currentUserIsAuthor(state, fragmentId)
   return (
-    isAuthor &&
-    !cannotAuthorViewEditorialCommentsStatuses.includes(
+    authorCanViewReportsDetailsStatuses.includes(
       get(collection, 'status', 'draft'),
-    )
+    ) && isAuthor
   )
 }
 
@@ -90,6 +93,7 @@ const canHeViewEditorialCommentsStatuses = [
   'accepted',
   'inQA',
   'pendingApproval',
+  'reviewCompleted',
 ]
 export const canHeViewEditorialComments = (state, collection = {}) => {
   const isHE = isHEToManuscript(state, collection.id)
@@ -97,7 +101,13 @@ export const canHeViewEditorialComments = (state, collection = {}) => {
   return isHE && canHeViewEditorialCommentsStatuses.includes(status)
 }
 
-const canEICViewEditorialCommentsStatuses = ['rejected', 'accepted', 'inQA']
+const canEICViewEditorialCommentsStatuses = [
+  'rejected',
+  'accepted',
+  'inQA',
+  'pendingApproval',
+  'reviewCompleted',
+]
 export const canEICViewEditorialComments = (state, collection = {}) => {
   const isEIC = currentUserIs(state, 'adminEiC')
   const status = get(collection, 'status', 'draft')
@@ -127,6 +137,28 @@ export const canReviewerViewEditorialComments = (
     canReviewerViewEditorialCommentsStatuses.includes(status)
   )
 }
+const cannotAuthorViewEditorialCommentsStatuses = [
+  'draft',
+  'technicalChecks',
+  'submitted',
+  'heInvited',
+  'heAssigned',
+  'reviewersInvited',
+]
+
+export const canAuthorViewEditorialComments = (
+  state,
+  collection = {},
+  fragmentId,
+) => {
+  const isAuthor = currentUserIsAuthor(state, fragmentId)
+  return (
+    isAuthor &&
+    !cannotAuthorViewEditorialCommentsStatuses.includes(
+      get(collection, 'status', 'draft'),
+    )
+  )
+}
 
 export const canViewEditorialComments = (
   state,
@@ -380,4 +412,14 @@ export const canMakeRecommendation = (state, collection, fragment = {}) => {
   const status = get(collection, 'status', 'draft')
   return isHE && canMakeRecommendationStatuses.includes(status)
 }
+
+export const canSubmitRevision = (state, collection, fragment) => {
+  const userId = get(state, 'currentUser.user.id')
+  const fragmentAuthors = chain(fragment)
+    .get('authors', [])
+    .map(a => a.id)
+    .value()
+
+  return get(fragment, 'revision', null) && fragmentAuthors.includes(userId)
+}
 // #endregion
diff --git a/packages/component-faraday-ui/src/AppBarMenu.js b/packages/component-faraday-ui/src/AppBarMenu.js
index 3a3a93ba7b682469bdcd67ff340efc3ebf8996f7..a4dd501c94d504b33d7273fa54f6d17df17d9d25 100644
--- a/packages/component-faraday-ui/src/AppBarMenu.js
+++ b/packages/component-faraday-ui/src/AppBarMenu.js
@@ -23,21 +23,31 @@ const AppBarMenu = ({
 }) =>
   currentUser.user ? (
     <Root>
-      <User onClick={toggleMenu}>
+      <User data-test-id="admin-menu-button" onClick={toggleMenu}>
         <Text>{username}</Text>
         <Icon secondary size={2}>
           {expanded ? 'chevron-up' : 'chevron-down'}
         </Icon>
       </User>
       {expanded && (
-        <Dropdown>
+        <Dropdown data-test-id="admin-menu-dropdown">
           {currentUser.user.admin && (
-            <DropdownOption onClick={goTo('/admin')}>
+            <DropdownOption
+              data-test-id="admin-dropdown-dashboard"
+              onClick={goTo('/admin')}
+            >
               Admin Dashboard
             </DropdownOption>
           )}
-          <DropdownOption onClick={goTo('/profile')}>My Profile</DropdownOption>
-          <DropdownOption onClick={logout}>Logout</DropdownOption>
+          <DropdownOption
+            data-test-id="admin-dropdown-profile"
+            onClick={goTo('/profile')}
+          >
+            My Profile
+          </DropdownOption>
+          <DropdownOption data-test-id="admin-dropdown-logout" onClick={logout}>
+            Logout
+          </DropdownOption>
         </Dropdown>
       )}
       {expanded && <ToggleOverlay onClick={toggleMenu} />}
diff --git a/packages/component-faraday-ui/src/AuthorCard.js b/packages/component-faraday-ui/src/AuthorCard.js
index bb4112cc6cb8edb64be1702b5132d208737f6dc7..2ace7fa985268bb535cdeff598a1a5ac7a030433 100644
--- a/packages/component-faraday-ui/src/AuthorCard.js
+++ b/packages/component-faraday-ui/src/AuthorCard.js
@@ -39,14 +39,14 @@ const AuthorTitle = ({
   formSubmitting,
   toggleEditMode,
   isCorresponding,
-  isAuthorsFetching,
 }) => (
   <Fragment>
     {!editMode ? (
       <Fragment>
         {!isSubmitting && (
           <OpenModal
-            isFetching={isAuthorsFetching}
+            isFetching={isFetching}
+            modalKey="deleteAuthor"
             onConfirm={deleteAuthor}
             subtitle={`${get(author, 'firstName', '')} ${get(
               author,
@@ -78,6 +78,7 @@ const AuthorTitle = ({
     ) : (
       <Fragment>
         <IconButton
+          data-test-id="author-card-cancel"
           icon="x-circle"
           iconSize={2}
           onClick={toggleEditMode}
@@ -90,6 +91,7 @@ const AuthorTitle = ({
           </StyledSpinner>
         ) : (
           <IconButton
+            data-test-id="author-card-save"
             disabled={formSubmitting}
             icon="check-circle"
             iconSize={2}
@@ -218,6 +220,7 @@ const EnhancedAuthorEdit = compose(
 const Author = ({
   author,
   listIndex,
+  isFetching,
   isAuthorEdit,
   deleteAuthor,
   toggleEditMode,
@@ -230,6 +233,7 @@ const Author = ({
       isAuthorEdit={isAuthorEdit}
       isAuthorsFetching={isAuthorsFetching}
       isCorresponding={author.isCorresponding}
+      isFetching={isFetching}
       isSubmitting={author.isSubmitting}
       listIndex={listIndex}
       toggleEditMode={toggleEditMode}
@@ -275,6 +279,7 @@ const AuthorCard = ({
         editMode={editMode}
         isAuthorEdit={isAuthorEdit}
         isAuthorsFetching={isAuthorsFetching}
+        isFetching={isFetching}
         listIndex={index}
         toggleEditMode={toggleEdit(index)}
       />
diff --git a/packages/component-faraday-ui/src/EditorialReportCard.js b/packages/component-faraday-ui/src/EditorialReportCard.js
index 8414bcdeea77494c6aefd0190cf0d93ae48014bb..9f326c34063697f2aa29ed40f35047d22e86f605 100644
--- a/packages/component-faraday-ui/src/EditorialReportCard.js
+++ b/packages/component-faraday-ui/src/EditorialReportCard.js
@@ -90,6 +90,7 @@ export default compose(
       get(
         recommendations.find(r => r.value === report.recommendation),
         'label',
+        'Return to HE',
       ),
   }),
   withProps(
diff --git a/packages/component-faraday-ui/src/FileSection.js b/packages/component-faraday-ui/src/FileSection.js
index 0da010405bfdf934b7c65ee88d17d44e89849397..596f65e8436d8362ab1fdf506c1f5b1dd822071c 100644
--- a/packages/component-faraday-ui/src/FileSection.js
+++ b/packages/component-faraday-ui/src/FileSection.js
@@ -44,7 +44,7 @@ const FileSection = ({
   connectDropTarget,
   allowedFileExtensions,
   files = [],
-  onFilePick = () => {},
+  onFilePick,
   onPreview,
   onDownload,
   onDelete,
diff --git a/packages/component-faraday-ui/src/InviteReviewers.js b/packages/component-faraday-ui/src/InviteReviewers.js
index 94ce84bf2e74299f42d21386418e181c0fd527ce..7c93ebb316f9a1d7a10c664548a6ee94c6864cdd 100644
--- a/packages/component-faraday-ui/src/InviteReviewers.js
+++ b/packages/component-faraday-ui/src/InviteReviewers.js
@@ -23,10 +23,20 @@ const InviteReviewers = ({ countries, handleSubmit, reset }) => (
     <Row justify="space-between" mb={2}>
       <H4>Invite reviewer</H4>
       <Item justify="flex-end">
-        <Button onClick={reset} size="small">
+        <Button
+          data-type-id="button-invite-reviewer-clear-fields"
+          onClick={reset}
+          size="small"
+        >
           Clear Fields
         </Button>
-        <Button ml={2} onClick={handleSubmit} primary size="small">
+        <Button
+          data-type-id="button-invite-reviewer-invite"
+          ml={2}
+          onClick={handleSubmit}
+          primary
+          size="small"
+        >
           Invite
         </Button>
       </Item>
@@ -36,6 +46,7 @@ const InviteReviewers = ({ countries, handleSubmit, reset }) => (
         <Label required>Email</Label>
         <ValidatedField
           component={TextField}
+          data-test-id="invite-reviewer-email"
           name="email"
           validate={[required, validators.emailValidator]}
         />
@@ -44,6 +55,7 @@ const InviteReviewers = ({ countries, handleSubmit, reset }) => (
         <Label required>First Name</Label>
         <ValidatedField
           component={TextField}
+          data-test-id="invite-reviewer-first-name"
           name="firstName"
           validate={[required]}
         />
@@ -52,6 +64,7 @@ const InviteReviewers = ({ countries, handleSubmit, reset }) => (
         <Label required>Last Name</Label>
         <ValidatedField
           component={TextField}
+          data-test-id="invite-reviewer-last-name"
           name="lastName"
           validate={[required]}
         />
@@ -60,6 +73,7 @@ const InviteReviewers = ({ countries, handleSubmit, reset }) => (
         <Label required>Affiliation</Label>
         <ValidatedField
           component={TextField}
+          data-test-id="invite-reviewer-affiliation"
           name="affiliation"
           validate={[required]}
         />
diff --git a/packages/component-faraday-ui/src/RadioWithComments.js b/packages/component-faraday-ui/src/RadioWithComments.js
index b11595c361030e3a93b05645666c0f799db827f8..785149e94c2ca25bd7bc8b0ee30f21eb5e9b286f 100644
--- a/packages/component-faraday-ui/src/RadioWithComments.js
+++ b/packages/component-faraday-ui/src/RadioWithComments.js
@@ -40,7 +40,12 @@ const RadioWithComments = ({
       </Item>
     </Row>
 
-    <Row alignItems="center" justify="flex-start" mb={1}>
+    <Row
+      alignItems="center"
+      data-test-id={`submission-yes-or-no-${radioFieldName}`}
+      justify="flex-start"
+      mb={1}
+    >
       <Field
         component={({ input }) => <YesOrNo {...input} />}
         name={radioFieldName}
@@ -49,7 +54,7 @@ const RadioWithComments = ({
 
     {get(formValues, radioFieldName, '') === commentsOn && (
       <RowOverrideAlert alignItems="center" justify="flex-start">
-        <Item data-test="submission-conflicts-text" vertical>
+        <Item data-test-id="submission-conflicts-text" vertical>
           {commentsSubtitle && (
             <Text secondary>
               {commentsSubtitle}
diff --git a/packages/component-faraday-ui/src/ReviewerReportAuthor.js b/packages/component-faraday-ui/src/ReviewerReportAuthor.js
new file mode 100644
index 0000000000000000000000000000000000000000..297653497f8a77be8c9bf20135ca64c7c21a54a4
--- /dev/null
+++ b/packages/component-faraday-ui/src/ReviewerReportAuthor.js
@@ -0,0 +1,81 @@
+import React, { Fragment } from 'react'
+import { get } from 'lodash'
+import { withProps } from 'recompose'
+import styled from 'styled-components'
+import { th } from '@pubsweet/ui-toolkit'
+import { DateParser } from '@pubsweet/ui'
+
+import { Label, Item, FileItem, Row, Text } from './'
+
+const ReviewerReportAuthor = ({
+  onPreview,
+  onDownload,
+  reviewFile,
+  publicReport,
+  reviewerName,
+  reviewerIndex,
+  recommendation,
+  showOwner = false,
+  report: { submittedOn },
+}) => (
+  <Root>
+    <Row justify="space-between" mb={2}>
+      <Item justify="flex-end">
+        {publicReport && (
+          <Row mb={1}>
+            <Item vertical>
+              <Label mb={1 / 2}>Report</Label>
+              <Text>{publicReport}</Text>
+            </Item>
+          </Row>
+        )}
+        <Text customId ml={1} mr={1} whiteSpace="nowrap">
+          {`Reviewer ${reviewerIndex}`}
+        </Text>
+        <DateParser timestamp={submittedOn}>
+          {date => <Text>{date}</Text>}
+        </DateParser>
+      </Item>
+    </Row>
+
+    {reviewFile && (
+      <Fragment>
+        <Label mb={1 / 2}>Files</Label>
+        <Row justify="flex-start" mb={1 / 2}>
+          <Item flex={0} mr={1}>
+            <FileItem
+              item={reviewFile}
+              onDownload={onDownload}
+              onPreview={onPreview}
+            />
+          </Item>
+        </Row>
+      </Fragment>
+    )}
+  </Root>
+)
+
+export default withProps(({ report, journal: { recommendations = [] } }) => ({
+  recommendation: get(
+    recommendations.find(r => r.value === report.recommendation),
+    'label',
+  ),
+  reviewFile: get(report, 'comments.0.files.0'),
+  publicReport: get(report, 'comments.0.content'),
+  reviewerName: `${get(report, 'reviewer.firstName', '')} ${get(
+    report,
+    'reviewer.lastName',
+    '',
+  )}`,
+  reviewerIndex: get(report, 'reviewerIndex', ''),
+}))(ReviewerReportAuthor)
+
+// #region styles
+const Root = styled.div`
+  background-color: ${th('colorBackgroundHue')};
+  border: ${th('borderWidth')} ${th('borderStyle')} ${th('colorBackgroundHue3')};
+  border-radius: ${th('borderRadius')};
+  padding: calc(${th('gridUnit')} * 2);
+  margin: ${th('gridUnit')};
+`
+// #endregion
diff --git a/packages/component-faraday-ui/src/ReviewerReportAuthor.md b/packages/component-faraday-ui/src/ReviewerReportAuthor.md
new file mode 100644
index 0000000000000000000000000000000000000000..48fdf8f4faefd2db6af22906b08d22899c94edaa
--- /dev/null
+++ b/packages/component-faraday-ui/src/ReviewerReportAuthor.md
@@ -0,0 +1,61 @@
+Reviewer report.
+
+```js
+const report = {
+  id: '71effdc0-ccb1-4ea9-9422-dcc9f8713347',
+  userId: '9ac5b5b5-252c-4933-9e66-72ec7c644a5c',
+  comments: [
+    {
+      files: [
+        {
+          id:
+            '5c0a233b-2569-443b-8110-ef98a18a60a4/2cac524e-0259-45fb-ad3c-9ebc94af8acc',
+          name: '1508309142.png',
+          size: 35249,
+          originalName: '1508309142.png',
+        },
+      ],
+      public: true,
+      content: 'Public report here.',
+    },
+    {
+      files: [],
+      public: false,
+      content: 'Confidential note is here.',
+    },
+  ],
+  createdOn: 1538053564396,
+  updatedOn: 1538053600643,
+  submittedOn: 1538053600624,
+  recommendation: 'publish',
+  recommendationType: 'review',
+  reviewerIndex: 1
+}
+
+const journal = {
+  recommendations: [
+    {
+      value: 'publish',
+      label: 'Publish',
+    },
+    {
+      value: 'major',
+      label: 'Major revision',
+    },
+    {
+      value: 'minor',
+      label: 'Minor revision',
+    },
+    {
+      value: 'reject',
+      label: 'Reject',
+    },
+  ],
+}
+;<ReviewerReportAuthor
+  journal={journal}
+  report={report}
+  showOwner
+  onPreview={file => console.log('preview file', file)}
+/>
+```
diff --git a/packages/component-faraday-ui/src/WizardAuthors.js b/packages/component-faraday-ui/src/WizardAuthors.js
index 7ea00f08d3c6b3118b2db4edbcd84bb152977f6a..b9dbdcf9a3f93948130124018c7777d1173b643e 100644
--- a/packages/component-faraday-ui/src/WizardAuthors.js
+++ b/packages/component-faraday-ui/src/WizardAuthors.js
@@ -58,23 +58,23 @@ const WizardAuthors = ({
   error,
   journal,
   moveAuthor,
+  isFetching,
   authors = [],
   isAuthorEdit,
   deleteAuthor,
   addNewAuthor,
   setAuthorEdit,
   saveNewAuthor,
-  isAuthorsFetching,
   editExistingAuthor,
   authorEditorSubmit,
-  isFetching,
 }) => (
   <Fragment>
     <Row alignItems="center" justify="flex-start">
       <Item>
         <Label>Authors</Label>
         <ActionLink
-          data-test-id="add-author"
+          data-test-id="submission-add-author"
+          disabled={isAuthorEdit}
           icon="plus"
           onClick={addNewAuthor}
         >
@@ -103,7 +103,6 @@ const WizardAuthors = ({
           dragHandle={DragHandle}
           editExistingAuthor={editExistingAuthor}
           isAuthorEdit={isAuthorEdit}
-          isAuthorsFetching={isAuthorsFetching}
           isFetching={isFetching}
           itemKey="id"
           items={authors}
@@ -131,11 +130,12 @@ export default compose(
       setAuthors,
       setFetching,
       onAuthorEdit,
+      formName = 'submission',
     }) => authors => {
       setAuthors(authors)
       setFetching(false)
-      onAuthorEdit(null)
-      changeForm('submission', 'authors', authors)
+      typeof onAuthorEdit === 'function' && onAuthorEdit(null)
+      changeForm(formName, 'authors', authors)
     },
   }),
   withHandlers({
@@ -143,7 +143,7 @@ export default compose(
       if (authors.some(a => a.id === 'newAuthor')) {
         return
       }
-      onAuthorEdit(0)
+      typeof onAuthorEdit === 'function' && onAuthorEdit(0)
       setAuthors([
         ...authors,
         { id: 'newAuthor', isCorresponding: false, isSubmitting: false },
@@ -153,7 +153,7 @@ export default compose(
       setFormAuthors(SortableList.moveItem(authors, dragIndex, hoverIndex))
     },
     setAuthorEdit: ({ authors, setAuthors, onAuthorEdit }) => index => {
-      onAuthorEdit(index)
+      typeof onAuthorEdit === 'function' && onAuthorEdit(index)
       setAuthors(authors.filter(a => a.id !== 'newAuthor'))
     },
     saveNewAuthor: ({ authors, setFormAuthors }) => author => {
@@ -170,41 +170,52 @@ export default compose(
     },
     deleteAuthor: ({
       authors,
-      project,
-      version,
+      fragment,
+      collection,
+      setFetching,
       deleteAuthor,
       setFormAuthors,
-    }) => author => ({ hideModal, setModalError }) =>
-      deleteAuthor(project.id, version.id, author.id)
+    }) => author => ({ hideModal, setModalError }) => {
+      setFetching(true)
+      return deleteAuthor({
+        authorId: author.id,
+        fragmentId: fragment.id,
+        collectionId: collection.id,
+      })
         .then(() => {
+          setFetching(false)
           const newAuthors = setCorrespondingAuthor(
             authors.filter(a => a.id !== author.id),
           )
           setFormAuthors(newAuthors)
           hideModal()
         })
-        .catch(handleError(setModalError)),
+        .catch(err => {
+          setFetching(false)
+          handleError(setModalError)(err)
+        })
+    },
   }),
   withHandlers({
     authorEditorSubmit: ({
       authors,
-      project,
-      version,
+      fragment,
       addAuthor,
+      collection,
       setFetching,
       saveNewAuthor,
       editExistingAuthor,
     }) => (values, dispatch, { toggleEditMode }) => {
       if (values.id === 'newAuthor') {
         setFetching(true)
-        return addAuthor(
-          {
+        return addAuthor({
+          fragmentId: fragment.id,
+          collectionId: collection.id,
+          author: {
             ...omit(values, 'id'),
             isSubmitting: authors.length === 1,
           },
-          project.id,
-          version.id,
-        ).then(saveNewAuthor)
+        }).then(saveNewAuthor)
       }
       editExistingAuthor(values)
       setTimeout(toggleEditMode, 10)
diff --git a/packages/component-faraday-ui/src/WizardFiles.js b/packages/component-faraday-ui/src/WizardFiles.js
index 5c08242dd168384602c091f6b982435afd147169..9bd0591a7ff21c8ca020583682a8130d7b9da290 100644
--- a/packages/component-faraday-ui/src/WizardFiles.js
+++ b/packages/component-faraday-ui/src/WizardFiles.js
@@ -69,19 +69,29 @@ const WizardFiles = ({
   </Fragment>
 )
 
+const initialFiles = {
+  manuscripts: [],
+  coverLetter: [],
+  supplementary: [],
+}
+
 export default compose(
   withFilePreview,
   withFileDownload,
-  withState('files', 'setFiles', ({ files }) => files),
+  withState('files', 'setFiles', ({ files = initialFiles }) => files),
   withState('fetching', 'setFilesFetching', {
     manuscripts: false,
     coverLetter: false,
     supplementary: false,
   }),
   withHandlers({
-    setFormFiles: ({ changeForm, setFiles }) => files => {
+    setFormFiles: ({
+      setFiles,
+      changeForm,
+      formName = 'submission',
+    }) => files => {
       setFiles(files)
-      changeForm('submission', 'files', files)
+      changeForm(formName, 'files', files)
     },
     setFilesFetching: ({ setFilesFetching }) => (type, value) => {
       setFilesFetching(p => ({
@@ -93,13 +103,13 @@ export default compose(
   withHandlers({
     addFile: ({
       files,
-      version,
+      fragment,
       uploadFile,
       setFormFiles,
       setFilesFetching,
     }) => type => file => {
       setFilesFetching(type, true)
-      uploadFile({ file, type, fragment: version })
+      uploadFile({ file, type, fragment })
         .then(f => {
           const newFiles = {
             ...files,
@@ -112,17 +122,16 @@ export default compose(
           setFilesFetching(type, false)
         })
     },
-    downloadFile: ({ downloadFile, token }) => file => {
-      downloadFile(file)
-    },
+    previewFile: ({ previewFile }) => previewFile,
+    downloadFile: ({ downloadFile, token }) => downloadFile,
     deleteFile: ({
-      deleteFile,
       files,
+      deleteFile,
       setFormFiles,
       setFilesFetching,
     }) => type => file => {
       setFilesFetching(type, true)
-      deleteFile(file.id, type)
+      deleteFile({ fileId: file.id, type })
         .then(() => {
           const newFiles = {
             ...files,
@@ -142,9 +151,6 @@ export default compose(
       }
       setFormFiles(newFiles)
     },
-    previewFile: ({ previewFile }) => file => {
-      previewFile(file)
-    },
     changeList: ({ files, setFormFiles }) => (from, to, fileId) => {
       const swappedFile = files[from].find(f => f.id === fileId)
 
diff --git a/packages/component-faraday-ui/src/contextualBoxes/AssignHE.js b/packages/component-faraday-ui/src/contextualBoxes/AssignHE.js
index c449426ad91a4c5d541c75a602250c2dad27d2f9..c65487c70d9df515d6ec66f630bbef8b429d6eac 100644
--- a/packages/component-faraday-ui/src/contextualBoxes/AssignHE.js
+++ b/packages/component-faraday-ui/src/contextualBoxes/AssignHE.js
@@ -32,6 +32,7 @@ const AssignHE = ({
   <Root pb={2}>
     <TextContainer>
       <TextField
+        data-test-id="manuscript-assign-he-filter"
         onChange={changeSearch}
         placeholder="Filter by name or email"
         value={searchValue}
@@ -60,6 +61,7 @@ const AssignHE = ({
         {handlingEditors.map((he, index) => (
           <CustomRow
             alignItems="center"
+            data-test-id={`manuscript-assign-he-invite-${he.id}`}
             height={4}
             isFirst={index === 0}
             key={he.id}
diff --git a/packages/component-faraday-ui/src/contextualBoxes/AuthorReviews.js b/packages/component-faraday-ui/src/contextualBoxes/AuthorReviews.js
new file mode 100644
index 0000000000000000000000000000000000000000..447a7614b1a06bf362b4d03db9d0d4a6244a571e
--- /dev/null
+++ b/packages/component-faraday-ui/src/contextualBoxes/AuthorReviews.js
@@ -0,0 +1,36 @@
+import React from 'react'
+import { withProps, compose } from 'recompose'
+
+import { ContextualBox, ReviewerReportAuthor, Row, Text } from '../'
+
+const SubmittedReportsNumberForAuthorReviews = ({ reports }) => (
+  <Row fitContent justify="flex-end">
+    <Text customId mr={1 / 2}>
+      {reports}
+    </Text>
+    <Text mr={1 / 2} pr={1 / 2} secondary>
+      {' '}
+      submitted
+    </Text>
+  </Row>
+)
+
+const AuthorReviews = ({ invitations, journal, reports, fragment }) =>
+  reports.length && (
+    <ContextualBox
+      label="Review Reports"
+      rightChildren={
+        <SubmittedReportsNumberForAuthorReviews reports={reports.length} />
+      }
+    >
+      {reports.map((r, i) => (
+        <ReviewerReportAuthor
+          journal={journal}
+          key={r.id}
+          report={reports[i]}
+        />
+      ))}
+    </ContextualBox>
+  )
+
+export default compose(withProps())(AuthorReviews)
diff --git a/packages/component-faraday-ui/src/contextualBoxes/AuthorReviews.md b/packages/component-faraday-ui/src/contextualBoxes/AuthorReviews.md
new file mode 100644
index 0000000000000000000000000000000000000000..aa15139b436a8238511b82742f9202d74516f9ce
--- /dev/null
+++ b/packages/component-faraday-ui/src/contextualBoxes/AuthorReviews.md
@@ -0,0 +1,73 @@
+AuthReviews.
+
+```js
+const reports = [
+  {
+    id: 'f9d3621f-1689-4afb-965f-98be38d99d9f',
+    userId: '84dddb49-177f-4163-89c8-0179184e4395',
+    comments: [
+      {
+        files: [
+          {
+            id:
+              '5c0a233b-2569-443b-8110-ef98a18a60a4/2cac524e-0259-45fb-ad3c-9ebc94af8acc',
+            name: '1508309142.png',
+            size: 35249,
+            originalName: '1508309142.png',
+          },
+        ],
+        public: true,
+        content: 'Public report here.',
+        public: true,
+        content:
+          'CEVA, altceva mult mai mult text pentru a vedea unde anume este limita CEVA, altceva mult mai mult text pentru a vedea unde anume este limita CEVA, altceva mult mai mult text pentru a vedea unde anume este limita',
+      },
+    ],
+    createdOn: 1539339578446,
+    updatedOn: 1539339580846,
+    submittedOn: 1539339580826,
+    recommendation: 'minor',
+    recommendationType: 'review',
+    reviewerIndex: 1,
+  },
+  {
+    id: '21258b47-aba5-4597-926e-765458c4fda2',
+    userId: '078c43af-39d8-4ef2-8ca2-f38b57e5c072',
+    comments: [
+      {
+        files: [],
+        public: true,
+        content: 'ceva',
+      },
+    ],
+    createdOn: 1539689165760,
+    updatedOn: 1539689169634,
+    submittedOn: 1539689169611,
+    recommendation: 'publish',
+    recommendationType: 'review',
+    reviewerIndex: 2,
+  },
+]
+
+const journal = {
+  recommendations: [
+    {
+      value: 'publish',
+      label: 'Publish',
+    },
+    {
+      value: 'major',
+      label: 'Major revision',
+    },
+    {
+      value: 'minor',
+      label: 'Minor revision',
+    },
+    {
+      value: 'reject',
+      label: 'Reject',
+    },
+  ],
+}
+;<AuthorReviews reports={reports} journal={journal} />
+```
diff --git a/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js b/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js
index e5143cfe49b9d9a77998fa1b3f9286355cb5d1d5..877243b16fc5e34b2cc9b4ccb2593124c031624e 100644
--- a/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js
+++ b/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.js
@@ -73,7 +73,11 @@ const HERecommendation = ({
   >
     <Root>
       <Row justify="flex-start">
-        <ItemOverrideAlert flex={0} vertical>
+        <ItemOverrideAlert
+          data-test-id="editorial-recommendation-choose-options"
+          flex={0}
+          vertical
+        >
           <Label required>Recommendation</Label>
           <ValidatedField
             component={input => (
@@ -91,7 +95,11 @@ const HERecommendation = ({
       {get(formValues, 'recommendation') === 'minor' ||
       get(formValues, 'recommendation') === 'major' ? (
         <Row mt={2}>
-          <ResponsiveItem mr={1} vertical>
+          <ResponsiveItem
+            data-test-id="editorial-recommendation-message-for-author"
+            mr={1}
+            vertical
+          >
             <Label>
               Message for Author <Text secondary>Optional</Text>
             </Label>
@@ -100,14 +108,22 @@ const HERecommendation = ({
         </Row>
       ) : (
         <ResponsiveRow mt={2}>
-          <ResponsiveItem mr={1} vertical>
+          <ResponsiveItem
+            data-test-id="editorial-recommendation-message-for-author"
+            mr={1}
+            vertical
+          >
             <Label>
               Message for Author <Text secondary>Optional</Text>
             </Label>
             <ValidatedField component={Textarea} name="public" />
           </ResponsiveItem>
 
-          <ResponsiveItem ml={1} vertical>
+          <ResponsiveItem
+            data-test-id="editorial-recommendation-message-for-eic"
+            ml={1}
+            vertical
+          >
             <Label>
               Message for Editor in Chief <Text secondary>Optional</Text>
             </Label>
@@ -117,7 +133,12 @@ const HERecommendation = ({
       )}
 
       <Row justify="flex-end" mt={2}>
-        <Button onClick={handleSubmit} primary size="medium">
+        <Button
+          data-test-id="button-editorial-recommendation-submit"
+          onClick={handleSubmit}
+          primary
+          size="medium"
+        >
           {
             options.find(
               o => o.value === get(formValues, 'recommendation', 'publish'),
diff --git a/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.md b/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.md
index 004abbffa36093806b1433ed149095634be108e6..8d00e6a5fd7d66796ff780a4ddbc1d9adb172546 100644
--- a/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.md
+++ b/packages/component-faraday-ui/src/contextualBoxes/HERecommendation.md
@@ -8,7 +8,6 @@ const formValues = {
   formValues={formValues}
   modalKey="heRecommendation"
   onRecommendationSubmit={(values, props) => {
-    console.log('se face surmit la', values)
     props.setFetching(true)
   }}
 />
diff --git a/packages/component-faraday-ui/src/contextualBoxes/ReviewerDetails.js b/packages/component-faraday-ui/src/contextualBoxes/ReviewerDetails.js
index 8e242820b8a3077267b79efe84b7355b6d7029d0..efa929afe32fd35476948eca48e366414aaa3c15 100644
--- a/packages/component-faraday-ui/src/contextualBoxes/ReviewerDetails.js
+++ b/packages/component-faraday-ui/src/contextualBoxes/ReviewerDetails.js
@@ -39,99 +39,100 @@ const ReviewerDetails = ({
   expanded,
   highlight,
   canViewReviewersDetails,
+  authorCanViewReportsDetails,
   ...rest
-}) =>
-  canViewReviewersDetails ? (
-    <ContextualBox
-      expanded={expanded}
-      highlight={highlight}
-      label="Reviewer Details & Reports"
-      rightChildren={
-        <ReviewerBreakdown fitContent fragment={fragment} mr={1} />
-      }
-      toggle={toggle}
-      {...rest}
-    >
-      <Tabs selectedTab={reports.length ? 1 : 0}>
-        {({ selectedTab, changeTab }) => (
-          <Fragment>
-            <TabsHeader>
+}) => (
+  <ContextualBox
+    expanded={expanded}
+    highlight={highlight}
+    label="Reviewer Details & Reports"
+    rightChildren={<ReviewerBreakdown fitContent fragment={fragment} mr={1} />}
+    toggle={toggle}
+    {...rest}
+  >
+    <Tabs selectedTab={reports.length ? 1 : 0}>
+      {({ selectedTab, changeTab }) => (
+        <Fragment>
+          <TabsHeader>
+            <TabButton
+              ml={1}
+              mr={1}
+              onClick={() => changeTab(0)}
+              selected={selectedTab === 0}
+            >
+              <H4>Reviewer Details</H4>
+            </TabButton>
+            {canInviteReviewers && (
               <TabButton
+                data-test-id="reviewer-tab-suggestions"
                 ml={1}
                 mr={1}
-                onClick={() => changeTab(0)}
-                selected={selectedTab === 0}
+                onClick={() => changeTab(2)}
+                selected={selectedTab === 2}
               >
-                <H4>Reviewer Details</H4>
+                <H4>Reviewer Suggestions</H4>
               </TabButton>
-              {canInviteReviewers && (
-                <TabButton
-                  ml={1}
-                  mr={1}
-                  onClick={() => changeTab(2)}
-                  selected={selectedTab === 2}
-                >
-                  <H4>Reviewer Suggestions</H4>
-                </TabButton>
-              )}
-              <TabButton
-                ml={1}
-                mr={1}
-                onClick={() => changeTab(1)}
-                selected={selectedTab === 1}
-              >
-                <H4>Reviewer Reports</H4>
-                <Tag mr={1}>{reports.length}</Tag>
-              </TabButton>
-            </TabsHeader>
-            <TabContent>
-              {selectedTab === 0 && (
-                <Fragment>
-                  {canInviteReviewers && (
-                    <InviteReviewers
-                      modalKey="invite-reviewers"
-                      onInvite={onInviteReviewer}
-                    />
-                  )}
-                  <ReviewersTable
-                    invitations={invitations}
-                    onResendReviewerInvite={onResendReviewerInvite}
-                    onRevokeReviewerInvite={onRevokeReviewerInvite}
+            )}
+            <TabButton
+              data-test-id="reviewer-tab-reports"
+              ml={1}
+              mr={1}
+              onClick={() => changeTab(1)}
+              selected={selectedTab === 1}
+            >
+              <H4>Reviewer Reports</H4>
+              <Tag mr={1}>{reports.length}</Tag>
+            </TabButton>
+          </TabsHeader>
+          <TabContent>
+            {selectedTab === 0 && (
+              <Fragment>
+                {canInviteReviewers && (
+                  <InviteReviewers
+                    modalKey="invite-reviewers"
+                    onInvite={onInviteReviewer}
                   />
-                </Fragment>
-              )}
-              {selectedTab === 2 && (
-                <PublonsTable
-                  onInvite={onInvitePublonReviewer}
-                  publonsError={fetchingError}
-                  publonsFetching={isFetching}
-                  reviewers={publonReviewers}
+                )}
+
+                <ReviewersTable
+                  invitations={invitations}
+                  onResendReviewerInvite={onResendReviewerInvite}
+                  onRevokeReviewerInvite={onRevokeReviewerInvite}
                 />
-              )}
-              {selectedTab === 1 && (
-                <Fragment>
-                  {reports.length === 0 && (
-                    <Text align="center">No reports submitted yet.</Text>
-                  )}
-                  {reports.map((report, index) => (
-                    <ReviewerReport
-                      journal={journal}
-                      key={report.id}
-                      onDownload={downloadFile}
-                      onPreview={previewFile}
-                      report={report}
-                      reviewerIndex={index + 1}
-                      showOwner
-                    />
-                  ))}
-                </Fragment>
-              )}
-            </TabContent>
-          </Fragment>
-        )}
-      </Tabs>
-    </ContextualBox>
-  ) : null
+              </Fragment>
+            )}
+            {selectedTab === 2 && (
+              <PublonsTable
+                onInvite={onInvitePublonReviewer}
+                publonsError={fetchingError}
+                publonsFetching={isFetching}
+                reviewers={publonReviewers}
+              />
+            )}
+            {selectedTab === 1 && (
+              <Fragment>
+                {reports.length === 0 && (
+                  <Text align="center">No reports submitted yet.</Text>
+                )}
+                {reports.map((report, index) => (
+                  <ReviewerReport
+                    journal={journal}
+                    key={report.id}
+                    onDownload={downloadFile}
+                    onPreview={previewFile}
+                    report={report}
+                    reviewerIndex={index + 1}
+                    showOwner
+                  />
+                ))}
+              </Fragment>
+            )}
+          </TabContent>
+        </Fragment>
+      )}
+    </Tabs>
+  </ContextualBox>
+)
 
 export default compose(
   withFilePreview,
diff --git a/packages/component-faraday-ui/src/contextualBoxes/ReviewerReportForm.js b/packages/component-faraday-ui/src/contextualBoxes/ReviewerReportForm.js
index cd568ff1c9afd710040804d97e8e1d7988c5b17d..7e98eef25418e5b6cfdf9c0050568ee58b87b1fa 100644
--- a/packages/component-faraday-ui/src/contextualBoxes/ReviewerReportForm.js
+++ b/packages/component-faraday-ui/src/contextualBoxes/ReviewerReportForm.js
@@ -43,7 +43,11 @@ const ReviewerReportForm = ({
   >
     <Root>
       <Row justify="flex-start">
-        <ItemOverrideAlert flex={0} vertical>
+        <ItemOverrideAlert
+          data-test-id="form-report-recommendation"
+          flex={0}
+          vertical
+        >
           <Label required>Recommendation</Label>
           <ValidatedField
             component={input => <Menu {...input} options={recommendations} />}
@@ -53,7 +57,12 @@ const ReviewerReportForm = ({
         </ItemOverrideAlert>
       </Row>
 
-      <Row alignItems="center" justify="space-between" mt={1}>
+      <Row
+        alignItems="center"
+        data-test-id="form-report-upload-file"
+        justify="space-between"
+        mt={1}
+      >
         <Item>
           <Label required>Your report</Label>
           {!formValues.file && (
@@ -71,7 +80,7 @@ const ReviewerReportForm = ({
       </Row>
 
       <Row mb={1 / 2}>
-        <ItemOverrideAlert vertical>
+        <ItemOverrideAlert data-test-id="form-report-textarea" vertical>
           <ValidatedField component={Textarea} name="public" />
         </ItemOverrideAlert>
       </Row>
@@ -80,6 +89,7 @@ const ReviewerReportForm = ({
         <Row justify="flex-start" mb={1}>
           <Item flex={0}>
             <FileItem
+              data-test-id="form-report-file-item-actions"
               item={formValues.file}
               onDelete={removeFile}
               onDownload={downloadFile}
@@ -96,14 +106,18 @@ const ReviewerReportForm = ({
               <Label>Confidential note for the Editorial Team</Label>
             </Item>
             <Item justify="flex-end">
-              <ActionLink icon="x" onClick={removeNote}>
+              <ActionLink
+                data-test-id="form-report-remove-note"
+                icon="x"
+                onClick={removeNote}
+              >
                 Remove
               </ActionLink>
             </Item>
           </Fragment>
         ) : (
           <Item>
-            <ActionLink onClick={addNote}>
+            <ActionLink data-test-id="form-report-add-note" onClick={addNote}>
               Add Confidential note for the Editorial Team
             </ActionLink>
           </Item>
@@ -112,7 +126,10 @@ const ReviewerReportForm = ({
 
       {hasNote && (
         <Row>
-          <ItemOverrideAlert vertical>
+          <ItemOverrideAlert
+            data-test-id="textarea-form-report-add-note"
+            vertical
+          >
             <ValidatedField component={Textarea} name="confidential" />
           </ItemOverrideAlert>
         </Row>
@@ -128,7 +145,12 @@ const ReviewerReportForm = ({
         {isFetching ? (
           <Spinner />
         ) : (
-          <Button onClick={handleSubmit} primary size="medium">
+          <Button
+            data-test-id="button-submit-report"
+            onClick={handleSubmit}
+            primary
+            size="medium"
+          >
             Submit report
           </Button>
         )}
diff --git a/packages/component-faraday-ui/src/contextualBoxes/index.js b/packages/component-faraday-ui/src/contextualBoxes/index.js
index 9cca1b83bdf9aeaafc4fa12a8073b487ae590d88..d3ad70c5ba82387ff832effb11447534d18e4b15 100644
--- a/packages/component-faraday-ui/src/contextualBoxes/index.js
+++ b/packages/component-faraday-ui/src/contextualBoxes/index.js
@@ -2,3 +2,4 @@ export { default as AssignHE } from './AssignHE'
 export { default as ReviewerDetails } from './ReviewerDetails'
 export { default as HERecommendation } from './HERecommendation'
 export { default as ReviewerReportForm } from './ReviewerReportForm'
+export { default as AuthorReviews } from './AuthorReviews'
diff --git a/packages/component-faraday-ui/src/helpers/index.js b/packages/component-faraday-ui/src/helpers/index.js
index f43ebc451a6f32c9046e861345cc7347d00e3747..ecaeaf030074f0afccb587e9da154100f9bf1f9c 100644
--- a/packages/component-faraday-ui/src/helpers/index.js
+++ b/packages/component-faraday-ui/src/helpers/index.js
@@ -10,5 +10,6 @@ export { default as withFetching } from './withFetching'
 export { default as withPagination } from './withPagination'
 export { default as withCountries } from './withCountries'
 export { default as withRoles } from './withRoles'
+export { default as withEditorialDecision } from './withEditorialDecision'
 
 export { validators }
diff --git a/packages/component-faraday-ui/src/helpers/withCountries.js b/packages/component-faraday-ui/src/helpers/withCountries.js
index bd642eddd9bac3cd647a387b93179b957f9513da..fb72d5997d1270d94f7a11dd8325510a24034e1e 100644
--- a/packages/component-faraday-ui/src/helpers/withCountries.js
+++ b/packages/component-faraday-ui/src/helpers/withCountries.js
@@ -1,7 +1,7 @@
 import { withProps } from 'recompose'
 import countrylist from 'country-list'
 
-const countryMapper = c => {
+const countryMapper = (c = 'GB') => {
   switch (c) {
     case 'GB':
       return 'UK'
@@ -14,7 +14,7 @@ const countryMapper = c => {
   }
 }
 
-const codeMapper = c => {
+const codeMapper = (c = 'UK') => {
   switch (c) {
     case 'UK':
       return 'GB'
diff --git a/packages/component-faraday-ui/src/helpers/withEditorialDecision.js b/packages/component-faraday-ui/src/helpers/withEditorialDecision.js
new file mode 100644
index 0000000000000000000000000000000000000000..b668c18a5e5bb312fb888e3b92e890cee62199b7
--- /dev/null
+++ b/packages/component-faraday-ui/src/helpers/withEditorialDecision.js
@@ -0,0 +1,34 @@
+import { update } from 'pubsweet-client/src/helpers/api'
+import { compose, withHandlers, withState } from 'recompose'
+
+import { withFetching, handleError } from './'
+
+const technicalDecision = ({ collectionId, ...body }) =>
+  update(`/collections/${collectionId}/status`, body)
+
+export default compose(
+  withFetching,
+  withState('successMessage', 'setSuccess', ''),
+  withHandlers({
+    technicalDecision: ({ setSuccess, setFetching }) => ({
+      modalProps: { setModalError, hideModal },
+      ...decision
+    }) => {
+      setFetching(true)
+      return technicalDecision(decision)
+        .then(() => {
+          setFetching(false)
+          hideModal()
+          setSuccess(
+            decision.step === 'eqs'
+              ? `Manuscript accepted. Thank you for your technical check!`
+              : 'Manuscript decision submitted. Thank you!',
+          )
+        })
+        .catch(err => {
+          setFetching(false)
+          handleError(setModalError)(err)
+        })
+    },
+  }),
+)
diff --git a/packages/component-faraday-ui/src/index.js b/packages/component-faraday-ui/src/index.js
index 263820a923f836e555affe74bed8bd51d6ea7b6d..4bfa4af165b2ecd8865299970a1ebe90428a1cfb 100644
--- a/packages/component-faraday-ui/src/index.js
+++ b/packages/component-faraday-ui/src/index.js
@@ -46,6 +46,9 @@ export { default as WizardAuthors } from './WizardAuthors'
 export { default as WizardFiles } from './WizardFiles'
 export { default as TextTooltip } from './TextTooltip'
 export { default as EditorialReportCard } from './EditorialReportCard'
+export { default as ReviewerReportAuthor } from './ReviewerReportAuthor'
+
+export { SubmitRevision } from './submissionRevision'
 
 export * from './OverrideAlert'
 export * from './manuscriptDetails'
diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js
index 516a6ca9010541dc82558a0a29f46afbcf0d36cd..2564bf721c3db9d5cd719b699f1d18c57f319d5a 100644
--- a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js
+++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptDetailsTop.js
@@ -36,7 +36,7 @@ const ManuscriptDetailsTop = ({
     <Item alignItems="center" justify="flex-end">
       {canOverrideTechChecks && (
         <ActionLink
-          data-test-id={`button-qa-manuscript-${fragment.id}`}
+          data-test-id="button-qa-manuscript-technical-checks"
           icon="check-square"
           onClick={goToTechnicalCheck(collection)}
           pr={2}
@@ -46,7 +46,7 @@ const ManuscriptDetailsTop = ({
       )}
       {canEditManuscript && (
         <ActionLink
-          data-test-id={`button-qa-manuscript-${fragment.id}`}
+          data-test-id="button-qa-manuscript-edit"
           icon="edit"
           onClick={goToEdit(collection, fragment)}
           pr={2}
diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js
index 268d7af507e41a54af7f5dd2088c905a7681d0ca..70c2afdd45b6ddaf6027801ad72a21902afed42c 100644
--- a/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js
+++ b/packages/component-faraday-ui/src/manuscriptDetails/ManuscriptHeader.js
@@ -146,7 +146,13 @@ export default compose(
 
       if (canAssignHE) {
         return (
-          <Button ml={1} onClick={inviteHE} primary size="small">
+          <Button
+            data-test-id="manuscript-invite-he-button"
+            ml={1}
+            onClick={inviteHE}
+            primary
+            size="small"
+          >
             Invite
           </Button>
         )
diff --git a/packages/component-faraday-ui/src/manuscriptDetails/ResponseToInvitation.js b/packages/component-faraday-ui/src/manuscriptDetails/ResponseToInvitation.js
index 7558e95eb92beb4ceeb8b13e1c504967b82c14f2..a638617e4a1adb041b45b48c310df51e95be1c29 100644
--- a/packages/component-faraday-ui/src/manuscriptDetails/ResponseToInvitation.js
+++ b/packages/component-faraday-ui/src/manuscriptDetails/ResponseToInvitation.js
@@ -47,7 +47,11 @@ const ResponseToInvitation = ({
         <Label required>{label}</Label>
         <ValidatedField
           component={input => (
-            <Row alignItems="center" justify="space-between">
+            <Row
+              alignItems="center"
+              data-test-id="radio-respond-to-invitation"
+              justify="space-between"
+            >
               <RadioGroup inline name="decision" options={options} {...input} />
               <Button
                 mb={1.7}
diff --git a/packages/component-faraday-ui/src/submissionRevision/DetailsAndAuthors.js b/packages/component-faraday-ui/src/submissionRevision/DetailsAndAuthors.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b25942909135eec5dc15b08f14fe2d84162bf85
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/DetailsAndAuthors.js
@@ -0,0 +1,100 @@
+import React from 'react'
+import { get } from 'lodash'
+import { Field } from 'redux-form'
+import { required } from 'xpub-validators'
+import {
+  Row,
+  Item,
+  Label,
+  Textarea,
+  WizardAuthors,
+  RowOverrideAlert,
+  ItemOverrideAlert,
+} from 'pubsweet-component-faraday-ui'
+import { Menu, TextField, ValidatedField } from '@pubsweet/ui'
+import { th } from '@pubsweet/ui-toolkit'
+import styled from 'styled-components'
+import { ContextualBox } from '../'
+
+const Empty = () => <div />
+
+const DetailsAndAuthors = ({
+  journal,
+  fragment,
+  addAuthor,
+  collection,
+  changeForm,
+  formValues,
+  isAuthorEdit,
+  authorsError,
+  deleteAuthor,
+  manuscriptTypes,
+  getTooltipContent,
+  isAuthorsFetching,
+  onAuthorEdit,
+  ...rest
+}) => (
+  <ContextualBox label="Details and Authors" startExpanded transparent>
+    <Root>
+      <Row mb={3}>
+        <Item data-test-id="submission-title" flex={3} mr={1} vertical>
+          <Label required>MANUSCRIPT TITLE</Label>
+          <ValidatedField
+            component={TextField}
+            name="metadata.title"
+            validate={[required]}
+          />
+        </Item>
+        <ItemOverrideAlert data-test-id="submission-type" vertical>
+          <Label required>MANUSCRIPT TYPE</Label>
+          <ValidatedField
+            component={input => (
+              <Menu
+                options={manuscriptTypes}
+                {...input}
+                placeholder="Please select"
+              />
+            )}
+            name="metadata.type"
+            validate={[required]}
+          />
+        </ItemOverrideAlert>
+      </Row>
+
+      <RowOverrideAlert mb={2}>
+        <Item data-test-id="submission-abstract" vertical>
+          <Label required>ABSTRACT</Label>
+          <ValidatedField
+            component={Textarea}
+            minHeight={15}
+            name="metadata.abstract"
+            validate={[required]}
+          />
+        </Item>
+      </RowOverrideAlert>
+
+      <Field component={Empty} name="authors" />
+      <WizardAuthors
+        addAuthor={addAuthor}
+        authors={get(fragment, 'revision.authors', [])}
+        changeForm={changeForm}
+        collection={collection}
+        deleteAuthor={deleteAuthor}
+        error={authorsError}
+        formName="revision"
+        fragment={fragment}
+        isAuthorEdit={isAuthorEdit}
+        isAuthorsFetching={isAuthorsFetching}
+        journal={journal}
+        onAuthorEdit={onAuthorEdit}
+      />
+    </Root>
+  </ContextualBox>
+)
+
+const Root = styled.div`
+  border-left: ${th('borderWidth')} ${th('borderStyle')} ${th('colorBorder')};
+  padding-left: calc(${th('gridUnit')} * 1);
+`
+
+export default DetailsAndAuthors
diff --git a/packages/component-faraday-ui/src/submissionRevision/DetailsAndAuthors.md b/packages/component-faraday-ui/src/submissionRevision/DetailsAndAuthors.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ac22499492ee611bb322827d7f5ad34fae164b8
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/DetailsAndAuthors.md
@@ -0,0 +1,167 @@
+```js
+const { compose, withProps, withHandlers } = require('recompose')
+const { connect } = require('react-redux')
+const { reduxForm, getFormValues, change } = require('redux-form')
+
+const Wrapper = compose(
+  withHandlers({
+    onAuthorEdit: props => () => console.log('Edit author'),
+  }),
+  withProps({
+    manuscriptTypes: [
+      {
+        label: 'Research',
+        value: 'research',
+        author: true,
+        peerReview: true,
+        abstractRequired: true,
+      },
+      {
+        label: 'Review',
+        value: 'review',
+        author: true,
+        peerReview: true,
+        abstractRequired: true,
+      },
+    ],
+    fragment: {
+      id: 'a9dc38fe-5524-4728-b97f-9495a2eb4bee',
+      type: 'fragment',
+      files: {
+        coverLetter: [],
+        manuscripts: [
+          {
+            id:
+              'a9dc38fe-5524-4728-b97f-9495a2eb4bee/4a452733-e05d-485a-a0be-7c199c5eb4a1',
+            name: 'manuscris.pdf',
+            size: 39973,
+            originalName: 'manuscris.pdf',
+          },
+        ],
+        supplementary: [],
+      },
+      owners: [
+        {
+          id: '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+          username: 'mihail.hagiu+re@thinslices.com',
+        },
+        {
+          id: '96673581-5916-46c5-8a57-d9e69c3e713d',
+          username: 'admin',
+        },
+      ],
+      authors: [
+        {
+          id: '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+          email: 'mihail.hagiu+re@thinslices.com',
+          country: 'AX',
+          lastName: 'ihail',
+          firstName: 'M',
+          affiliation: 'TS',
+          isSubmitting: true,
+          isCorresponding: true,
+        },
+      ],
+      created: '2018-10-11T08:04:47.636Z',
+      version: 1,
+      metadata: {
+        type: 'research',
+        title: 'czxcxzc',
+        journal: 'Bioinorganic Chemistry and Applications',
+        abstract: 'xdzczxc',
+      },
+      conflicts: {
+        hasFunding: '',
+        hasConflicts: 'no',
+        hasDataAvailability: '',
+      },
+      submitted: 1539606240257,
+      collectionId: 'e69cddda-74be-47aa-8f99-c388ef5c8a77',
+      declarations: {
+        agree: true,
+      },
+      fragmentType: 'version',
+      recommendations: [],
+    },
+    collection: {
+      id: 'e69cddda-74be-47aa-8f99-c388ef5c8a77',
+      type: 'collection',
+      owners: [
+        '96673581-5916-46c5-8a57-d9e69c3e713d',
+        '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+      ],
+      status: 'rejected',
+      created: 1539245087543,
+      customId: '5074586',
+      fragments: ['a9dc38fe-5524-4728-b97f-9495a2eb4bee'],
+      technicalChecks: {},
+      currentVersion: {
+        id: 'a9dc38fe-5524-4728-b97f-9495a2eb4bee',
+        type: 'fragment',
+        files: {
+          coverLetter: [],
+          manuscripts: [
+            {
+              id:
+                'a9dc38fe-5524-4728-b97f-9495a2eb4bee/4a452733-e05d-485a-a0be-7c199c5eb4a1',
+              name: 'manuscris.pdf',
+              size: 39973,
+              originalName: 'manuscris.pdf',
+            },
+          ],
+          supplementary: [],
+        },
+        owners: [
+          '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+          '96673581-5916-46c5-8a57-d9e69c3e713d',
+        ],
+        authors: [
+          {
+            id: '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+            email: 'mihail.hagiu+re@thinslices.com',
+            country: 'AX',
+            lastName: 'ihail',
+            firstName: 'M',
+            affiliation: 'TS',
+            isSubmitting: true,
+            isCorresponding: true,
+          },
+        ],
+        created: '2018-10-11T08:04:47.636Z',
+        version: 1,
+        metadata: {
+          type: 'research',
+          title: 'czxcxzc',
+          journal: 'Bioinorganic Chemistry and Applications',
+          abstract: 'xdzczxc',
+        },
+        conflicts: {
+          hasFunding: '',
+          hasConflicts: 'no',
+          hasDataAvailability: '',
+        },
+        submitted: 1539606240257,
+        collectionId: 'e69cddda-74be-47aa-8f99-c388ef5c8a77',
+        declarations: {
+          agree: true,
+        },
+        fragmentType: 'version',
+        recommendations: [],
+      },
+      visibleStatus: 'Rejected',
+    },
+  }),
+  connect(
+    state => ({
+      formValues: getFormValues('styleguide')(state),
+    }),
+    {
+      changeForm: change,
+    },
+  ),
+  reduxForm({
+    form: 'styleguide',
+  }),
+)(props => console.log('Padadas', props) || <DetailsAndAuthors {...props} />)
+;<Wrapper />
+```
diff --git a/packages/component-faraday-ui/src/submissionRevision/ManuscriptFiles.js b/packages/component-faraday-ui/src/submissionRevision/ManuscriptFiles.js
new file mode 100644
index 0000000000000000000000000000000000000000..5edc9501d7ae2861cce821a8f8294f31b2986c97
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/ManuscriptFiles.js
@@ -0,0 +1,72 @@
+import React from 'react'
+import { get } from 'lodash'
+import { Field } from 'redux-form'
+import styled from 'styled-components'
+import { Icon } from '@pubsweet/ui'
+import { Row, Text, WizardFiles } from 'pubsweet-component-faraday-ui'
+import { th } from '@pubsweet/ui-toolkit'
+import { ContextualBox } from '../'
+
+const Empty = () => <div />
+
+const ManuscriptFiles = ({
+  token,
+  fragment,
+  formName,
+  collection,
+  changeForm,
+  deleteFile,
+  uploadFile,
+  filesError,
+  previewFile,
+  getSignedUrl,
+}) => (
+  <ContextualBox label="Manuscript Files" startExpanded transparent>
+    <Root>
+      <Row justify="flex-start" mb={2}>
+        <Text secondary>
+          Drag & drop files in the specific section or click{' '}
+          <CustomIcon secondary size={2}>
+            plus
+          </CustomIcon>{' '}
+          to upload. Use the{' '}
+          <CustomIcon secondary size={2}>
+            menu
+          </CustomIcon>{' '}
+          icon to reorder or move files to a different type.
+        </Text>
+      </Row>
+      <Field component={Empty} name="files" />
+      <WizardFiles
+        changeForm={changeForm}
+        collection={collection}
+        deleteFile={deleteFile}
+        files={get(fragment, 'revision.files', {})}
+        formName={formName}
+        fragment={fragment}
+        getSignedUrl={getSignedUrl}
+        previewFile={previewFile}
+        token={token}
+        uploadFile={uploadFile}
+      />
+      {filesError && (
+        <Row justify="flex-start" mt={1}>
+          <Text error>{filesError}</Text>
+        </Row>
+      )}
+    </Root>
+  </ContextualBox>
+)
+
+export default ManuscriptFiles
+
+// #region styled-components
+const Root = styled.div`
+  border-left: ${th('borderWidth')} ${th('borderStyle')} ${th('colorBorder')};
+  padding-left: calc(${th('gridUnit')} * 1);
+`
+
+const CustomIcon = styled(Icon)`
+  vertical-align: sub;
+`
+// #endregion
diff --git a/packages/component-faraday-ui/src/submissionRevision/ManuscriptFiles.md b/packages/component-faraday-ui/src/submissionRevision/ManuscriptFiles.md
new file mode 100644
index 0000000000000000000000000000000000000000..42a8e212005461b35ce3cedc2926dc0ffff6b7a2
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/ManuscriptFiles.md
@@ -0,0 +1,21 @@
+```js
+const { compose, withHandlers } = require('recompose')
+const { connect } = require('react-redux')
+const { reduxForm, getFormValues } = require('redux-form')
+
+const Wrapper = compose(
+  withHandlers({
+    uploadFile: props => file => Promise.resolve(file),
+    deleteFile: props => file => console.log('Deleted', file),
+  }),
+  connect(state => ({
+    formValues: getFormValues('styleguide')(state),
+  })),
+  reduxForm({
+    form: 'styleguide',
+  }),
+)(( props ) => (
+  <ManuscriptFiles {...props} />
+))
+;<Wrapper />
+```
\ No newline at end of file
diff --git a/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.js b/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.js
new file mode 100644
index 0000000000000000000000000000000000000000..f3b6c168fa2da6e0526cdd2d94f8634efa3809b6
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.js
@@ -0,0 +1,85 @@
+import React from 'react'
+import { isEmpty } from 'lodash'
+import styled from 'styled-components'
+import { th } from '@pubsweet/ui-toolkit'
+import { FilePicker, Spinner, ValidatedField } from '@pubsweet/ui'
+
+import {
+  Row,
+  Item,
+  Textarea,
+  ActionLink,
+} from 'pubsweet-component-faraday-ui/src'
+
+import {
+  Label,
+  FileItem,
+  ContextualBox,
+  ItemOverrideAlert,
+  withFilePreview,
+  withFileDownload,
+} from '../'
+
+const allowedFileExtensions = ['pdf', 'doc', 'docx', 'txt', 'rdf', 'odt']
+const ResponseToReviewer = ({
+  file,
+  onDelete,
+  onUpload,
+  isFetching,
+  previewFile,
+  downloadFile,
+}) => (
+  <ContextualBox
+    label="Response to Reviewer Comments"
+    startExpanded
+    transparent
+  >
+    <Root>
+      <Row alignItems="center" justify="space-between">
+        <Item>
+          <Label required>Your Reply</Label>
+          {isFetching ? (
+            <Spinner />
+          ) : (
+            <FilePicker
+              allowedFileExtensions={allowedFileExtensions}
+              disabled={!isEmpty(file)}
+              onUpload={onUpload}
+            >
+              <ActionLink disabled={!isEmpty(file)} icon="plus">
+                UPLOAD FILE
+              </ActionLink>
+            </FilePicker>
+          )}
+        </Item>
+      </Row>
+
+      <Row>
+        <ItemOverrideAlert vertical>
+          <ValidatedField
+            component={Textarea}
+            name="responseToReviewers.content"
+          />
+        </ItemOverrideAlert>
+      </Row>
+
+      {!isEmpty(file) && (
+        <Row justify="flex-start" mt={1}>
+          <FileItem
+            item={file}
+            onDelete={onDelete}
+            onDownload={downloadFile}
+            onPreview={previewFile}
+          />
+        </Row>
+      )}
+    </Root>
+  </ContextualBox>
+)
+
+const Root = styled.div`
+  border-left: ${th('borderWidth')} ${th('borderStyle')} ${th('colorBorder')};
+  padding-left: calc(${th('gridUnit')} * 1);
+`
+
+export default withFileDownload(withFilePreview(ResponseToReviewer))
diff --git a/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.md b/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.md
new file mode 100644
index 0000000000000000000000000000000000000000..e9264445b46902365f4a0d50608d13bd67fde690
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/ResponseToReviewer.md
@@ -0,0 +1,7 @@
+```js
+const allowedFileExtensions = ['pdf', 'doc', 'docx']
+
+const onUpload = (f) => {console.log('Upload', f)}
+
+<ResponseToReviewer onUpload={onUpload} allowedFileExtensions={allowedFileExtensions}/>
+```
diff --git a/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.js b/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.js
new file mode 100644
index 0000000000000000000000000000000000000000..be61f16dd096256d2538fdcbbb4cdae27a5eeb80
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.js
@@ -0,0 +1,94 @@
+import React from 'react'
+import { Button } from '@pubsweet/ui'
+import styled from 'styled-components'
+import { reduxForm } from 'redux-form'
+import { th } from '@pubsweet/ui-toolkit'
+import { Row } from 'pubsweet-component-faraday-ui/src'
+
+import { ContextualBox, Text } from '../'
+import { ManuscriptFiles, DetailsAndAuthors, ResponseToReviewer } from './'
+
+const SubmitRevision = ({
+  journal,
+  addFile,
+  fragment,
+  addAuthor,
+  deleteFile,
+  collection,
+  changeForm,
+  isFetching,
+  currentUser,
+  previewFile,
+  hasFormError,
+  deleteAuthor,
+  getSignedUrl,
+  handleSubmit,
+  responseFile,
+  downloadFile,
+  fetchingError,
+  addResponseFile,
+  deleteResponseFile,
+  //
+  onAuthorEdit,
+  isEditingAuthor,
+}) => (
+  <ContextualBox highlight label="Submit Revision" mb={2}>
+    <Root>
+      <DetailsAndAuthors
+        addAuthor={addAuthor}
+        changeForm={changeForm}
+        collection={collection}
+        deleteAuthor={deleteAuthor}
+        fragment={fragment}
+        isAuthorEdit={isEditingAuthor}
+        manuscriptTypes={journal.manuscriptTypes}
+        onAuthorEdit={onAuthorEdit}
+      />
+
+      <ManuscriptFiles
+        changeForm={changeForm}
+        collection={collection}
+        deleteFile={deleteFile}
+        downloadFile={downloadFile}
+        formName="revision"
+        fragment={fragment}
+        getSignedUrl={getSignedUrl}
+        previewFile={previewFile}
+        token={currentUser.token}
+        uploadFile={addFile}
+      />
+
+      <ResponseToReviewer
+        file={responseFile}
+        getSignedUrl={getSignedUrl}
+        isFetching={isFetching}
+        onDelete={deleteResponseFile}
+        onUpload={addResponseFile}
+        token={currentUser.token}
+      />
+
+      <Row>
+        {hasFormError && (
+          <Text align="center" error mt={1}>
+            There are some missing required fields.
+          </Text>
+        )}
+      </Row>
+
+      <Row justify="flex-end" mt={1}>
+        <Button ml={2} onClick={handleSubmit} primary size="medium">
+          Submit revision
+        </Button>
+      </Row>
+    </Root>
+  </ContextualBox>
+)
+
+const Root = styled.div`
+  background-color: ${th('colorBackgroundHue2')};
+  padding: calc(${th('gridUnit')} * 2);
+`
+
+export default reduxForm({ form: 'revision', destroyOnUnmount: false })(
+  SubmitRevision,
+)
diff --git a/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.md b/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.md
new file mode 100644
index 0000000000000000000000000000000000000000..6c9a0bde8927225e69c55be3fa2ee2cf2f78938c
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/SubmitRevision.md
@@ -0,0 +1,156 @@
+```js
+const props = {
+  fragment: {
+    id: 'a9dc38fe-5524-4728-b97f-9495a2eb4bee',
+    type: 'fragment',
+    files: {
+      coverLetter: [],
+      manuscripts: [
+        {
+          id:
+            'a9dc38fe-5524-4728-b97f-9495a2eb4bee/4a452733-e05d-485a-a0be-7c199c5eb4a1',
+          name: 'manuscris.pdf',
+          size: 39973,
+          originalName: 'manuscris.pdf',
+        },
+      ],
+      supplementary: [],
+    },
+    owners: [
+      {
+        id: '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+        username: 'mihail.hagiu+re@thinslices.com',
+      },
+      {
+        id: '96673581-5916-46c5-8a57-d9e69c3e713d',
+        username: 'admin',
+      },
+    ],
+    authors: [
+      {
+        id: '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+        email: 'mihail.hagiu+re@thinslices.com',
+        country: 'RO',
+        lastName: 'ihail',
+        firstName: 'M',
+        affiliation: 'TS',
+        isSubmitting: true,
+        isCorresponding: true,
+      },
+    ],
+    created: '2018-10-11T08:04:47.636Z',
+    version: 1,
+    metadata: {
+      type: 'research',
+      title: 'czxcxzc',
+      journal: 'Bioinorganic Chemistry and Applications',
+      abstract: 'xdzczxc',
+    },
+    conflicts: {
+      hasFunding: '',
+      hasConflicts: 'no',
+      hasDataAvailability: '',
+    },
+    submitted: 1539606240257,
+    collectionId: 'e69cddda-74be-47aa-8f99-c388ef5c8a77',
+    declarations: {
+      agree: true,
+    },
+    fragmentType: 'version',
+    recommendations: [],
+  },
+  collection: {
+    id: 'e69cddda-74be-47aa-8f99-c388ef5c8a77',
+    type: 'collection',
+    owners: [
+      '96673581-5916-46c5-8a57-d9e69c3e713d',
+      '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+    ],
+    status: 'rejected',
+    created: 1539245087543,
+    customId: '5074586',
+    fragments: ['a9dc38fe-5524-4728-b97f-9495a2eb4bee'],
+    technicalChecks: {},
+    currentVersion: {
+      id: 'a9dc38fe-5524-4728-b97f-9495a2eb4bee',
+      type: 'fragment',
+      files: {
+        coverLetter: [],
+        manuscripts: [
+          {
+            id:
+              'a9dc38fe-5524-4728-b97f-9495a2eb4bee/4a452733-e05d-485a-a0be-7c199c5eb4a1',
+            name: 'manuscris.pdf',
+            size: 39973,
+            originalName: 'manuscris.pdf',
+          },
+        ],
+        supplementary: [],
+      },
+      owners: [
+        '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+        '96673581-5916-46c5-8a57-d9e69c3e713d',
+      ],
+      authors: [
+        {
+          id: '81586d97-d2b4-4423-a1e3-efd228fc67b8',
+          email: 'mihail.hagiu+re@thinslices.com',
+          country: 'AX',
+          lastName: 'ihail',
+          firstName: 'M',
+          affiliation: 'TS',
+          isSubmitting: true,
+          isCorresponding: true,
+        },
+      ],
+      created: '2018-10-11T08:04:47.636Z',
+      version: 1,
+      metadata: {
+        type: 'research',
+        title: 'czxcxzc',
+        journal: 'Bioinorganic Chemistry and Applications',
+        abstract: 'xdzczxc',
+      },
+      conflicts: {
+        hasFunding: '',
+        hasConflicts: 'no',
+        hasDataAvailability: '',
+      },
+      submitted: 1539606240257,
+      collectionId: 'e69cddda-74be-47aa-8f99-c388ef5c8a77',
+      declarations: {
+        agree: true,
+      },
+      fragmentType: 'version',
+      recommendations: [],
+    },
+    visibleStatus: 'Rejected',
+  },
+  journal: {
+    manuscriptTypes: [
+      {
+        label: 'Research Article',
+        value: 'research',
+        author: true,
+        peerReview: true,
+        abstractRequired: true,
+      },
+      {
+        label: 'Review Article',
+        value: 'review',
+        author: true,
+        peerReview: true,
+        abstractRequired: true,
+      },
+      {
+        label: 'Letter to the editor',
+        value: 'letter-to-editor',
+        author: true,
+        peerReview: false,
+        abstractRequired: false,
+      },
+    ],
+  },
+}
+;<SubmitRevision {...props} />
+```
diff --git a/packages/component-faraday-ui/src/submissionRevision/index.js b/packages/component-faraday-ui/src/submissionRevision/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..262a71e3f9707fbb08597535af9a3f1aef39b22f
--- /dev/null
+++ b/packages/component-faraday-ui/src/submissionRevision/index.js
@@ -0,0 +1,4 @@
+export { default as ResponseToReviewer } from './ResponseToReviewer'
+export { default as ManuscriptFiles } from './ManuscriptFiles'
+export { default as DetailsAndAuthors } from './DetailsAndAuthors'
+export { default as SubmitRevision } from './SubmitRevision'
diff --git a/packages/component-helper-service/src/services/Team.js b/packages/component-helper-service/src/services/Team.js
index 2e27f9a149198a158d02cb6d8e163c6a880175c5..dd3050ebddd07abe3bf447ecea75676ca0ebd3e2 100644
--- a/packages/component-helper-service/src/services/Team.js
+++ b/packages/component-helper-service/src/services/Team.js
@@ -112,6 +112,7 @@ class Team {
           team.object.id === objectId,
       ),
       'members',
+      [],
     )
 
     return members
diff --git a/packages/component-manuscript-manager/src/routes/collections/get.js b/packages/component-manuscript-manager/src/routes/collections/get.js
index ddeeb504d1efee96f4362a6e72455cb7529298f2..1314ffda0107a1e4c80a0edab70561f97db82093 100644
--- a/packages/component-manuscript-manager/src/routes/collections/get.js
+++ b/packages/component-manuscript-manager/src/routes/collections/get.js
@@ -1,3 +1,8 @@
+const { last, get } = require('lodash')
+
+const filterDuplicates = collection =>
+  get(collection, 'currentVersion.id') === last(collection.fragments)
+
 const {
   authsome: authsomeHelper,
 } = require('pubsweet-component-helper-service')
@@ -16,5 +21,5 @@ module.exports = models => async (req, res) => {
     })
   }
 
-  res.status(200).json(collections)
+  res.status(200).json(collections.filter(filterDuplicates))
 }
diff --git a/packages/component-manuscript-manager/src/routes/fragments/notifications/emailCopy.js b/packages/component-manuscript-manager/src/routes/fragments/notifications/emailCopy.js
index 64f10e4fc62bc24ca139281b489037818d93ec55..ecfadb0a4ae20fb38e8e9511b10120fb33fabfaf 100644
--- a/packages/component-manuscript-manager/src/routes/fragments/notifications/emailCopy.js
+++ b/packages/component-manuscript-manager/src/routes/fragments/notifications/emailCopy.js
@@ -5,10 +5,12 @@ const journalName = config.get('journal.name')
 const getEmailCopy = ({ emailType, titleText, expectedDate, customId }) => {
   let paragraph
   const hasLink = true
-  const hasIntro = true
-  const hasSignature = true
+  let hasIntro = true
+  let hasSignature = true
   switch (emailType) {
     case 'he-new-version-submitted':
+      hasIntro = false
+      hasSignature = false
       paragraph = `The authors of ${titleText} have submitted a revised version. <br/><br/>
         To review this new submission and proceed with the review process, please visit the manuscript details page.`
       break
diff --git a/packages/component-manuscript-manager/src/routes/fragments/notifications/notifications.js b/packages/component-manuscript-manager/src/routes/fragments/notifications/notifications.js
index 75be73180ca247e1d78800a3f1ac34587cc85208..7f0b8fd3d3364ddc038385f6424ec53b9578fba3 100644
--- a/packages/component-manuscript-manager/src/routes/fragments/notifications/notifications.js
+++ b/packages/component-manuscript-manager/src/routes/fragments/notifications/notifications.js
@@ -21,6 +21,7 @@ module.exports = {
     UserModel,
     collection,
     isNewVersion = false,
+    previousVersion,
     isTechnicalCheck,
     isMajorRecommendation,
   }) {
@@ -59,7 +60,6 @@ module.exports = {
       const heUser = await UserModel.find(handlingEditor.id)
       sendHandlingEditorEmail({
         email,
-        eicName,
         baseUrl,
         customId,
         title: parsedFragment.title,
@@ -73,8 +73,9 @@ module.exports = {
         baseUrl,
         customId,
         UserModel,
-        fragmentHelper,
+        previousVersion,
         title: parsedFragment.title,
+        heName: collection.handlingEditor.name,
       })
     }
 
@@ -104,7 +105,6 @@ module.exports = {
 const sendHandlingEditorEmail = ({
   email,
   title,
-  eicName,
   baseUrl,
   customId,
   handlingEditor,
@@ -113,19 +113,17 @@ const sendHandlingEditorEmail = ({
 
   email.toUser = {
     email: handlingEditor.email,
-    name: handlingEditor.name,
   }
   email.content.unsubscribeLink = services.createUrl(baseUrl, unsubscribeSlug, {
     id: handlingEditor.id,
     token: handlingEditor.accessTokens.unsubscribe,
   })
-  email.content.signatureName = eicName
   email.content.subject = `${customId}: Revision submitted`
 
   const { html, text } = email.getNotificationBody({
     emailBodyProps: getEmailCopy({
       emailType,
-      titleText: `the manuscript titled ${title}`,
+      titleText: `the manuscript titled "${title}"`,
     }),
   })
   email.sendEmail({ html, text })
@@ -134,14 +132,18 @@ const sendHandlingEditorEmail = ({
 const sendReviewersEmail = async ({
   email,
   title,
+  heName,
   baseUrl,
   customId,
   UserModel,
-  fragmentHelper,
+  previousVersion,
 }) => {
   email.content.subject = `${customId}: A manuscript you reviewed has been revised`
+  email.content.signatureName = heName
+  email.fromEmail = `${heName} <${staffEmail}>`
   const emailType = 'submitted-reviewers-after-revision'
 
+  const fragmentHelper = new Fragment({ fragment: previousVersion })
   const reviewers = await fragmentHelper.getReviewers({
     UserModel,
     type: 'submitted',
@@ -165,7 +167,7 @@ const sendReviewersEmail = async ({
     const { html, text } = email.getNotificationBody({
       emailBodyProps: getEmailCopy({
         emailType,
-        titleText: `the manuscript titled ${title}`,
+        titleText: `the manuscript titled "${title}"`,
         expectedDate: services.getExpectedDate({ daysExpected: 14 }),
       }),
     })
diff --git a/packages/component-manuscript-manager/src/routes/fragments/patch.js b/packages/component-manuscript-manager/src/routes/fragments/patch.js
index 6f4cd8a9eb18956142727537add44c9ed28035e0..09e3dbc8f106ff8414952801c8b722eb9e0d711b 100644
--- a/packages/component-manuscript-manager/src/routes/fragments/patch.js
+++ b/packages/component-manuscript-manager/src/routes/fragments/patch.js
@@ -116,10 +116,11 @@ module.exports = models => async (req, res) => {
     collection.save()
 
     notifications.sendNotifications({
-      fragment,
       collection,
       isNewVersion: true,
+      fragment: newFragment,
       UserModel: models.User,
+      previousVersion: fragment,
       baseUrl: services.getBaseUrl(req),
       isMajorRecommendation: heRecommendation.recommendation === 'major',
     })
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index 4cbdb582680e110dc4d067474dfa4cc3e0c3e913..b16803dbdb91e845d3a6e4b9b24fe30ca6776606 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -12,7 +12,7 @@ const {
 
 const { features = {}, recommendations } = config
 
-const sendMTSPackage = async (collection, fragment) => {
+const sendMTSPackage = async (collection, fragment, isEQA = false) => {
   const s3Config = get(config, 'pubsweet-component-aws-s3', {})
   const mtsConfig = get(config, 'mts-service', {})
   const MTSService = require('pubsweet-component-mts-package')
@@ -27,7 +27,7 @@ const sendMTSPackage = async (collection, fragment) => {
     },
   }
 
-  await MTS.sendPackage({ fragment: packageFragment })
+  await MTS.sendPackage({ fragment: packageFragment, isEQA })
 }
 
 const notifications = require('./notifications/notifications')
@@ -112,7 +112,7 @@ module.exports = models => async (req, res) => {
     // the manuscript has not yet passed through the EQA process so we need to upload it to the FTP server
     if (isEditorInChief && recommendation === 'publish' && !hasEQA) {
       if (features.mts) {
-        await sendMTSPackage(collection, fragment)
+        await sendMTSPackage(collection, fragment, true)
       }
 
       collection.status = 'inQA'
diff --git a/packages/component-manuscript/src/components/ManuscriptLayout.js b/packages/component-manuscript/src/components/ManuscriptLayout.js
index 44414cf04113d8822ace002256b938b6cc2e46c8..e9d46aa19c314190e49577a80db5d482fb8c8ac8 100644
--- a/packages/component-manuscript/src/components/ManuscriptLayout.js
+++ b/packages/component-manuscript/src/components/ManuscriptLayout.js
@@ -5,6 +5,7 @@ import {
   Text,
   paddingHelper,
   ReviewerDetails,
+  AuthorReviews,
   HERecommendation,
   ManuscriptHeader,
   ManuscriptAssignHE,
@@ -12,6 +13,7 @@ import {
   ManuscriptDetailsTop,
   ResponseToInvitation,
   ManuscriptEicDecision,
+  SubmitRevision,
 } from 'pubsweet-component-faraday-ui'
 
 import ReviewerReportCard from './ReviewReportCard'
@@ -23,6 +25,8 @@ const messagesLabel = {
   reject: 'Comments for Author',
 }
 
+const cannotViewReviewersDetails = ['revisionRequested', 'pendingApproval']
+
 const ManuscriptLayout = ({
   history,
   assignHE,
@@ -63,9 +67,10 @@ const ManuscriptLayout = ({
   reviewerRecommendations,
   toggleReviewerDetails,
   reviewerDetailsExpanded,
-  toggleHeRecommendation,
-  heRecommendationExpanded,
+  editorialCommentsExpanded,
+  toggleEditorialComments,
   onInvitePublonReviewer,
+  submitRevision,
 }) => (
   <Root pb={30}>
     {!isEmpty(collection) && !isEmpty(fragment) ? (
@@ -99,13 +104,17 @@ const ManuscriptLayout = ({
         {get(currentUser, 'permissions.canViewEditorialComments', true) && (
           <EditorialCommentCard
             collection={collection}
-            expanded={heRecommendationExpanded}
+            expanded={editorialCommentsExpanded}
             journal={journal}
             reports={editorialRecommendations}
-            toggle={toggleHeRecommendation}
+            toggle={toggleEditorialComments}
           />
         )}
 
+        {get(currentUser, 'permissions.canSubmitRevision', false) && (
+          <SubmitRevision {...submitRevision} />
+        )}
+
         {submittedOwnRecommendation && (
           <ReviewerReportCard
             getSignedUrl={getSignedUrl}
@@ -167,7 +176,12 @@ const ManuscriptLayout = ({
             fetchingError={fetchingError}
             fragment={fragment}
             getSignedUrl={getSignedUrl}
-            highlight={reviewerReports.length === 0}
+            highlight={
+              reviewerReports.length === 0 &&
+              !cannotViewReviewersDetails.includes(
+                get(collection, 'status', 'draft'),
+              )
+            }
             invitations={invitationsWithReviewers}
             isFetching={isFetching.publonsFetching}
             journal={journal}
@@ -182,6 +196,13 @@ const ManuscriptLayout = ({
             toggle={toggleReviewerDetails}
           />
         )}
+        {get(currentUser, 'permissions.authorCanViewReportsDetails', false) && (
+          <AuthorReviews
+            currentUser={currentUser}
+            journal={journal}
+            reports={reviewerReports}
+          />
+        )}
 
         {get(currentUser, 'permissions.canMakeHERecommendation', false) &&
           (!invitationsWithReviewers.length ||
diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js
index b68ac1e5326ccf04cc7a7489f4ebbe48071b92a0..c8c59a41eecf3795143ea56713054d53c97cdfe5 100644
--- a/packages/component-manuscript/src/components/ManuscriptPage.js
+++ b/packages/component-manuscript/src/components/ManuscriptPage.js
@@ -42,16 +42,18 @@ import {
   canMakeRevision,
   canMakeDecision,
   isHEToManuscript,
+  canSubmitRevision,
   canEditManuscript,
   canInviteReviewers,
   pendingHEInvitation,
   currentUserIsReviewer,
   parseCollectionDetails,
   canMakeHERecommendation,
-  canViewEditorialComments,
   canViewReviewersDetails,
+  canViewEditorialComments,
   pendingReviewerInvitation,
   canOverrideTechnicalChecks,
+  authorCanViewReportsDetails,
   getOwnPendingRecommendation,
   getOwnSubmittedRecommendation,
   canAuthorViewEditorialComments,
@@ -65,6 +67,7 @@ import {
 } from 'pubsweet-component-faraday-ui'
 
 import ManuscriptLayout from './ManuscriptLayout'
+import withSubmitRevision from '../submitRevision/withSubmitRevision'
 import {
   parseEicDecision,
   parseSearchParams,
@@ -145,11 +148,11 @@ export default compose(
         journal,
         fragment,
         collection,
+        isFetching,
         currentUser,
         pendingHEInvitation,
         pendingOwnRecommendation,
         pendingReviewerInvitation,
-        isFetching,
       },
     ) => ({
       currentUser: {
@@ -162,6 +165,7 @@ export default compose(
         isReviewer: currentUserIsReviewer(state, get(fragment, 'id', '')),
         isHEToManuscript: isHEToManuscript(state, get(collection, 'id', '')),
         permissions: {
+          canSubmitRevision: canSubmitRevision(state, collection, fragment),
           canMakeHERecommendation: canMakeHERecommendation(state, {
             collection,
             statuses: get(journal, 'statuses', {}),
@@ -179,6 +183,11 @@ export default compose(
           canMakeDecision: canMakeDecision(state, collection, fragment),
           canEditManuscript: canEditManuscript(state, collection, fragment),
           canViewReviewersDetails: canViewReviewersDetails(state, collection),
+          authorCanViewReportsDetails: authorCanViewReportsDetails(
+            state,
+            collection,
+            fragment.id,
+          ),
           canOverrideTechChecks: canOverrideTechnicalChecks(state, collection),
           canAuthorViewEditorialComments: canAuthorViewEditorialComments(
             state,
@@ -192,6 +201,7 @@ export default compose(
         publonsFetching: isFetching,
       },
       formValues: {
+        revision: getFormValues('revision')(state),
         eicDecision: getFormValues('eic-decision')(state),
         reviewerReport: getFormValues('reviewerReport')(state),
         responseToInvitation: getFormValues('answer-invitation')(state),
@@ -494,8 +504,8 @@ export default compose(
     reviewerDetailsExpanded: expanded,
   })),
   fromRenderProps(RemoteOpener, ({ toggle, expanded }) => ({
-    toggleHeRecommendation: toggle,
-    heRecommendationExpanded: expanded,
+    toggleEditorialComments: toggle,
+    editorialCommentsExpanded: expanded,
   })),
   withProps(({ currentUser, collection, submittedOwnRecommendation }) => ({
     getSignedUrl,
@@ -503,6 +513,7 @@ export default compose(
       get(currentUser, 'isReviewer', false) &&
       isUndefined(submittedOwnRecommendation),
   })),
+  withSubmitRevision,
   lifecycle({
     componentDidMount() {
       const {
@@ -519,11 +530,11 @@ export default compose(
         fetchUpdatedCollection,
         editorialRecommendations,
         currentUser: {
+          isEIC,
           isInvitedHE,
           isInvitedToReview,
           isHEToManuscript,
-          isEIC,
-          permissions: { canInviteReviewers },
+          permissions: { canInviteReviewers, canSubmitRevision },
         },
       } = this.props
 
@@ -562,12 +573,42 @@ export default compose(
         this.props.toggleReviewerRecommendations()
       }
 
-      if (isHEToManuscript && !!reviewerReports.length) {
+      if (
+        isHEToManuscript &&
+        !!reviewerReports.length &&
+        editorialRecommendations.length === 0
+      ) {
         this.props.toggleReviewerDetails()
       }
 
-      if (isEIC && !!editorialRecommendations.length) {
-        this.props.toggleHeRecommendation()
+      if ((isEIC || isHEToManuscript) && !!editorialRecommendations.length) {
+        this.props.toggleEditorialComments()
+      }
+
+      if (canSubmitRevision) {
+        this.props.toggleEditorialComments()
+      }
+    },
+    componentDidUpdate(prevProps) {
+      const {
+        editorialRecommendations: prevEditorialRecommendations,
+        editorInChief: prevEditorInChief,
+      } = prevProps
+
+      const {
+        currentUser: { isEIC, isHEToManuscript },
+        collection: { status },
+        editorialRecommendations: currentEditorialRecommendations,
+        editorInChief: currentEditorInChief,
+      } = this.props
+
+      if (
+        prevEditorInChief === currentEditorInChief &&
+        prevEditorialRecommendations !== currentEditorialRecommendations &&
+        (isEIC || isHEToManuscript) &&
+        status === 'rejected'
+      ) {
+        prevProps.toggleEditorialComments()
       }
     },
   }),
diff --git a/packages/component-manuscript/src/submitRevision/utils.js b/packages/component-manuscript/src/submitRevision/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab28ccc47a0564071bd987022aa022f5f3fe20a8
--- /dev/null
+++ b/packages/component-manuscript/src/submitRevision/utils.js
@@ -0,0 +1,92 @@
+import { actions } from 'pubsweet-client'
+import { get, debounce, omit, set } from 'lodash'
+import { handleError } from 'pubsweet-component-faraday-ui'
+import { autosaveRequest } from 'pubsweet-component-wizard/src/redux/autosave'
+import { submitRevision } from 'pubsweet-component-wizard/src/redux/conversion'
+
+const parseRevision = (values, fragment) => {
+  const v = omit(values, 'authorForm')
+
+  return {
+    ...fragment,
+    revision: {
+      ...v,
+    },
+  }
+}
+
+const _onChange = (values, dispatch, { collection, fragment }) => {
+  dispatch(autosaveRequest())
+  dispatch(actions.updateFragment(collection, parseRevision(values, fragment)))
+}
+
+export const onChange = debounce(_onChange, 1000, { maxWait: 5000 })
+
+export const onSubmit = (
+  values,
+  dispatch,
+  { history, fragment, collection, showModal, setFetching, canSubmit },
+) => {
+  if (!canSubmit) return
+
+  showModal({
+    title: 'Ready to submit your revision?',
+    subtitle: `Once submitted, the submission can't be modified.`,
+    onConfirm: ({ hideModal, setModalError }) => {
+      setFetching(true)
+      return submitRevision({
+        fragmentId: fragment.id,
+        collectionId: collection.id,
+      })
+        .then(
+          r => {
+            Promise.all([
+              dispatch(actions.getCollection(collection)),
+              dispatch(actions.getFragments({ id: collection.id })),
+            ]).then(() => {
+              setFetching(false)
+              hideModal()
+              history.push(
+                `/projects/${r.collectionId}/versions/${r.id}/details`,
+              )
+            })
+          },
+          err => {
+            throw err
+          },
+        )
+        .catch(err => {
+          setFetching(false)
+          handleError(setModalError)(err)
+        })
+    },
+  })
+}
+
+export const getInitialValues = fragment => ({
+  files: get(fragment, 'revision.files', {}),
+  authors: get(fragment, 'revision.authors', []),
+  metadata: get(fragment, 'revision.metadata', {
+    abstract: '',
+    title: '',
+    type: '',
+  }),
+  responseToReviewers: get(fragment, 'revision.responseToReviewers', {
+    content: '',
+    file: null,
+  }),
+})
+
+export const validate = ({ responseToReviewers }) => {
+  const errors = {}
+
+  if (!responseToReviewers.content && !responseToReviewers.file) {
+    set(
+      errors,
+      'responseToReviewers.content',
+      'A reply or a report file is needed.',
+    )
+  }
+
+  return errors
+}
diff --git a/packages/component-manuscript/src/submitRevision/withSubmitRevision.js b/packages/component-manuscript/src/submitRevision/withSubmitRevision.js
new file mode 100644
index 0000000000000000000000000000000000000000..40427a9ceed7074deb17f989c677d9f3224a7279
--- /dev/null
+++ b/packages/component-manuscript/src/submitRevision/withSubmitRevision.js
@@ -0,0 +1,148 @@
+import { connect } from 'react-redux'
+import { get, pick, isNull } from 'lodash'
+import { withRouter } from 'react-router-dom'
+import {
+  MultiAction,
+  handleError,
+  withFetching,
+  withFilePreview,
+  withFileDownload,
+} from 'pubsweet-component-faraday-ui'
+import { DragDropContext } from 'react-dnd'
+import { change as changeForm } from 'redux-form'
+import HTML5Backend from 'react-dnd-html5-backend'
+import { withModal } from 'pubsweet-component-modal/src/components'
+import {
+  compose,
+  toClass,
+  withProps,
+  withHandlers,
+  setDisplayName,
+  withStateHandlers,
+} from 'recompose'
+
+import {
+  addAuthor,
+  deleteAuthor,
+} from 'pubsweet-components-faraday/src/redux/authors'
+
+import {
+  uploadFile,
+  deleteFile,
+} from 'pubsweet-components-faraday/src/redux/files'
+
+import { onChange, onSubmit, getInitialValues, validate } from './utils'
+
+export default compose(
+  withRouter,
+  withFetching,
+  withFilePreview,
+  withFileDownload,
+  withStateHandlers(
+    { authorEditIndex: null },
+    {
+      onAuthorEdit: () => index => ({
+        authorEditIndex: index,
+      }),
+    },
+  ),
+  connect(
+    state => ({
+      canSubmit: !get(state, 'form.revision.syncErrors'),
+      hasFormError:
+        get(state, 'form.revision.syncErrors') &&
+        get(state, 'form.revision.anyTouched', false),
+    }),
+    { changeForm },
+  ),
+  withProps(() => ({
+    modalKey: 'submitRevision',
+  })),
+  withModal(({ isFetching }) => ({
+    isFetching,
+    modalComponent: MultiAction,
+  })),
+  withHandlers({
+    addResponseFile: ({
+      setError,
+      fragment,
+      changeForm,
+      setFetching,
+    }) => file => {
+      setFetching(true)
+      return uploadFile({
+        file,
+        fragment,
+        type: 'responseToReviewers',
+      })
+        .then(f => {
+          setFetching(false)
+          changeForm('revision', 'responseToReviewers.file', f)
+        })
+        .catch(err => {
+          setFetching(false)
+          handleError(setError)(err)
+        })
+    },
+    deleteResponseFile: ({ setError, changeForm, setFetching }) => file => {
+      setFetching(true)
+      return deleteFile(file.id, 'responseToReviewers')
+        .then(r => {
+          setFetching(false)
+          changeForm('revision', 'responseToReviewers.file', null)
+        })
+        .catch(err => {
+          setFetching(false)
+          handleError(setError)(err)
+        })
+    },
+    addFile: () => uploadFile,
+    addAuthor: () => addAuthor,
+    deleteFile: () => deleteFile,
+    deleteAuthor: () => deleteAuthor,
+    previewFile: ({ previewFile }) => previewFile,
+    downloadFile: ({ downloadFile }) => downloadFile,
+  }),
+  DragDropContext(HTML5Backend),
+  toClass,
+  withProps(props => ({
+    submitRevision: {
+      initialValues: getInitialValues(props.fragment),
+      ...pick(props, [
+        'addFile',
+        'journal',
+        'history',
+        'fragment',
+        'canSubmit',
+        'addAuthor',
+        'showModal',
+        'changeForm',
+        'collection',
+        'isFetching',
+        'deleteFile',
+        'currentUser',
+        'setFetching',
+        'previewFile',
+        'downloadFile',
+        'onAuthorEdit',
+        'deleteAuthor',
+        'getSignedUrl',
+        'hasFormError',
+        'fetchingError',
+        'addResponseFile',
+        'deleteResponseFile',
+      ]),
+      isEditingAuthor: !isNull(props.authorEditIndex),
+      onChange,
+      onSubmit,
+      validate,
+      responseFile: get(
+        props,
+        'formValues.revision.responseToReviewers.file',
+        null,
+      ),
+    },
+  })),
+
+  setDisplayName('SubmitRevisionHOC'),
+)
diff --git a/packages/component-modal/src/components/ConfirmationModal.js b/packages/component-modal/src/components/ConfirmationModal.js
index 55b2b1012309f77fdf25e892516c8c6ff9662fdf..01e52582e3327b54a579e05cf5e19973b47422cc 100644
--- a/packages/component-modal/src/components/ConfirmationModal.js
+++ b/packages/component-modal/src/components/ConfirmationModal.js
@@ -16,7 +16,7 @@ const ConfirmationModal = ({
   cancelText = 'Cancel',
 }) => (
   <Root>
-    <CloseIcon data-test="icon-modal-hide" onClick={onClose}>
+    <CloseIcon data-test-id="icon-modal-hide" onClick={onClose}>
       <Icon primary>x</Icon>
     </CloseIcon>
     {title && <Title dangerouslySetInnerHTML={{ __html: title }} />}
@@ -26,7 +26,7 @@ const ConfirmationModal = ({
     {modalError && <ErrorMessage>{modalError}</ErrorMessage>}
 
     <ButtonsContainer>
-      <Button data-test="button-modal-hide" onClick={onClose}>
+      <Button data-test-id="button-modal-hide" onClick={onClose}>
         {cancelText}
       </Button>
       {onConfirm &&
@@ -35,7 +35,11 @@ const ConfirmationModal = ({
             <Spinner size={4} />
           </SpinnerContainer>
         ) : (
-          <Button data-test="button-modal-confirm" onClick={onConfirm} primary>
+          <Button
+            data-test-id="button-modal-confirm"
+            onClick={onConfirm}
+            primary
+          >
             {confirmText}
           </Button>
         ))}
diff --git a/packages/component-modal/src/components/SubmissionModal.js b/packages/component-modal/src/components/SubmissionModal.js
index e88fdf1695129a07e11d78c2cdc36f22bbb3afa1..f2223512482016ef96d14a8e077759dbbd5883d8 100644
--- a/packages/component-modal/src/components/SubmissionModal.js
+++ b/packages/component-modal/src/components/SubmissionModal.js
@@ -46,7 +46,7 @@ const SubmissionModal = ({
     </Text>
     {modalError && <ErrorMessage>{modalError}</ErrorMessage>}
     <ButtonsContainer>
-      <Button data-test="button-modal-hide" onClick={hideModal}>
+      <Button data-test-id="button-modal-hide" onClick={hideModal}>
         {cancelText}
       </Button>
       {onConfirm &&
@@ -55,7 +55,11 @@ const SubmissionModal = ({
             <Spinner size={4} />
           </SpinnerContainer>
         ) : (
-          <Button data-test="button-modal-confirm" onClick={onConfirm} primary>
+          <Button
+            data-test-id="button-modal-confirm"
+            onClick={onConfirm}
+            primary
+          >
             {confirmText}
           </Button>
         ))}
diff --git a/packages/component-modal/src/components/SuccessModal.js b/packages/component-modal/src/components/SuccessModal.js
index aa63fb4613805ee5cfff44883b7151b9042c4565..7e2b5752655d82ab4085f552796d7a9b3867ff0c 100644
--- a/packages/component-modal/src/components/SuccessModal.js
+++ b/packages/component-modal/src/components/SuccessModal.js
@@ -7,7 +7,7 @@ const SuccessModal = ({ title, confirmText = 'OK', hideModal, theme }) => (
   <Root>
     {title && <Title dangerouslySetInnerHTML={{ __html: title }} />}
     <ButtonsContainer>
-      <Button data-test="button-modal-confirm" onClick={hideModal} primary>
+      <Button data-test-id="button-modal-confirm" onClick={hideModal} primary>
         {confirmText}
       </Button>
     </ButtonsContainer>
diff --git a/packages/component-modal/src/components/withModal.js b/packages/component-modal/src/components/withModal.js
index 3d7f9913d86dd3fb67526c1b0e81d958c7df2a76..a79c64635bc549950020e9251f5af02dbf82e796 100644
--- a/packages/component-modal/src/components/withModal.js
+++ b/packages/component-modal/src/components/withModal.js
@@ -1,7 +1,7 @@
 import React, { Fragment } from 'react'
-import { omit } from 'lodash'
-import { connect } from 'react-redux'
+import { omit, get } from 'lodash'
 import { compose } from 'recompose'
+import { connect } from 'react-redux'
 
 import Modal from './Modal'
 import { showModal, hideModal, setModalError } from '../redux/modal'
@@ -15,7 +15,7 @@ const mapState = state => ({
 const mapDispatch = (dispatch, props) => ({
   hideModal: () => dispatch(hideModal()),
   showModal: (modalProps = {}) =>
-    dispatch(showModal(props.modalKey, modalProps)),
+    dispatch(showModal(get(props, 'modalKey'), modalProps)),
   setModalError: errorMessage => dispatch(setModalError(errorMessage)),
 })
 
diff --git a/packages/component-wizard/src/components/StepThree.js b/packages/component-wizard/src/components/StepThree.js
index 9a4a67aabed1c0cbe89bded838d20fa29f74fc3c..4b7666551a992a1a389bfdd0e050ee00a8bd3a19 100644
--- a/packages/component-wizard/src/components/StepThree.js
+++ b/packages/component-wizard/src/components/StepThree.js
@@ -9,8 +9,8 @@ import { Empty } from './'
 
 const StepThree = ({
   token,
-  version,
-  project,
+  fragment,
+  collection,
   changeForm,
   deleteFile,
   uploadFile,
@@ -36,13 +36,13 @@ const StepThree = ({
     <Field component={Empty} name="files" />
     <WizardFiles
       changeForm={changeForm}
+      collection={collection}
       deleteFile={deleteFile}
-      files={get(version, 'files', {})}
+      files={get(fragment, 'files', {})}
+      fragment={fragment}
       getSignedUrl={getSignedUrl}
-      project={project}
       token={token}
       uploadFile={uploadFile}
-      version={version}
     />
     {filesError && (
       <Row justify="flex-start" mt={1}>
diff --git a/packages/component-wizard/src/components/StepTwo.js b/packages/component-wizard/src/components/StepTwo.js
index 659b4fccc156231e9deaf5baf8f9b042069b9005..4060c434bfab905255b55fddf63e87f9d3548a8d 100644
--- a/packages/component-wizard/src/components/StepTwo.js
+++ b/packages/component-wizard/src/components/StepTwo.js
@@ -20,10 +20,10 @@ import { H2, Menu, TextField, ValidatedField } from '@pubsweet/ui'
 import { Empty } from './'
 
 const StepTwo = ({
-  version,
-  project,
+  fragment,
   journal,
   addAuthor,
+  collection,
   changeForm,
   formValues,
   isAuthorEdit,
@@ -88,16 +88,16 @@ const StepTwo = ({
     <Field component={Empty} name="authors" />
     <WizardAuthors
       addAuthor={addAuthor}
-      authors={get(version, 'authors', [])}
+      authors={get(fragment, 'authors', [])}
       changeForm={changeForm}
+      collection={collection}
       deleteAuthor={deleteAuthor}
       error={authorsError}
+      fragment={fragment}
       isAuthorEdit={isAuthorEdit}
       isAuthorsFetching={isAuthorsFetching}
       journal={journal}
       onAuthorEdit={setAuthorEditIndex}
-      project={project}
-      version={version}
     />
 
     {questions.map(q => (
diff --git a/packages/component-wizard/src/components/SubmissionWizard.js b/packages/component-wizard/src/components/SubmissionWizard.js
index 74047fae170ce629995ecc945d4acecb70fc8e51..2280a49a7cf5e13c423bd0d32021021b96a06dcc 100644
--- a/packages/component-wizard/src/components/SubmissionWizard.js
+++ b/packages/component-wizard/src/components/SubmissionWizard.js
@@ -82,12 +82,12 @@ const Wizard = ({
         ) : (
           <Fragment>
             <Button
-              data-test="submission-back"
+              data-test-id="submission-back"
               mr={1}
               onClick={isFirstStep ? history.goBack : prevStep}
             >{`< BACK`}</Button>
             <Button
-              data-test="submission-next"
+              data-test-id="submission-next"
               ml={isFirstStep ? 0 : 1}
               onClick={handleSubmit}
               primary
@@ -116,19 +116,17 @@ export default compose(
     (state, { match }) => ({
       token: getUserToken(state),
       isFetching: getAutosaveFetching(state),
+      isFilesFetching: getFileFetching(state),
+      reduxAuthorError: getAuthorError(state),
       formValues: getFormValues('submission')(state),
       submitFailed: hasSubmitFailed('submission')(state),
       formSyncErrors: getFormSyncErrors('submission')(state),
-      version: selectFragment(state, get(match, 'params.version')),
-      project: selectCollection(state, get(match, 'params.project')),
-      isFilesFetching: getFileFetching(state),
+      fragment: selectFragment(state, get(match, 'params.version')),
+      collection: selectCollection(state, get(match, 'params.project')),
       isAuthorsFetching: getAuthorFetching(state) || getAutosaveFetching(state),
-      reduxAuthorError: getAuthorError(state),
     }),
     {
-      addAuthor,
       changeForm,
-      deleteAuthor,
       submitManuscript,
       updateFragment: actions.updateFragment,
     },
@@ -156,8 +154,10 @@ export default compose(
       authorEditIndex,
       reduxAuthorError,
     }) => ({
+      addAuthor,
       deleteFile,
       uploadFile,
+      deleteAuthor,
       getSignedUrl,
       isFirstStep: step === 0,
       isAuthorEdit: !isNull(authorEditIndex),
diff --git a/packages/component-wizard/src/components/utils.js b/packages/component-wizard/src/components/utils.js
index 9b922cfc1ee32ab719b35ab431cebafdac41cceb..eb333851dd032ea8341ef8b25144b3d2a0233e0d 100644
--- a/packages/component-wizard/src/components/utils.js
+++ b/packages/component-wizard/src/components/utils.js
@@ -17,21 +17,21 @@ import {
 } from '../redux/autosave'
 import { SubmissionStatement } from './'
 
-export const setInitialValues = ({ version }) => ({
+export const setInitialValues = ({ fragment }) => ({
   initialValues: {
-    files: get(version, 'files', {}),
-    authors: get(version, 'authors', []),
-    metadata: get(version, 'metadata', {}),
-    conflicts: get(version, 'conflicts', {
+    files: get(fragment, 'files', {}),
+    authors: get(fragment, 'authors', []),
+    metadata: get(fragment, 'metadata', {}),
+    conflicts: get(fragment, 'conflicts', {
       hasConflicts: 'no',
       hasDataAvailability: '',
       hasFunding: '',
     }),
-    declarations: get(version, 'declarations', { agree: false }),
+    declarations: get(fragment, 'declarations', { agree: false }),
   },
 })
 
-export const validate = (values, props) => {
+export const validate = values => {
   const errors = {}
 
   if (!get(values, 'declarations.agree')) {
@@ -57,8 +57,12 @@ export const validate = (values, props) => {
   return errors
 }
 
-const _onChange = (values, dispatch, { project, version, updateFragment }) => {
-  const previousValues = pick(version, [
+const _onChange = (
+  values,
+  dispatch,
+  { collection, fragment, updateFragment },
+) => {
+  const previousValues = pick(fragment, [
     'files',
     'authors',
     'metadata',
@@ -68,8 +72,8 @@ const _onChange = (values, dispatch, { project, version, updateFragment }) => {
   const newValues = omit(values, ['agree', 'authorForm'])
   if (!isEqual(newValues, previousValues)) {
     dispatch(autosaveRequest())
-    updateFragment(project, {
-      ...version,
+    updateFragment(collection, {
+      ...fragment,
       ...newValues,
     }).then(
       () => dispatch(autosaveSuccess()),
@@ -92,8 +96,8 @@ export const onSubmit = (
     isEditMode,
     setModalError,
     submitManuscript,
-    version: { id: fragmentId },
-    project: { id: collectionId, customId },
+    fragment: { id: fragmentId },
+    collection: { id: collectionId, customId },
   },
 ) => {
   if (step !== 2) {
@@ -107,14 +111,14 @@ export const onSubmit = (
       cancelText: 'BACK TO SUBMISSION',
       onConfirm: () => {
         dispatch(autosaveRequest())
-        submitManuscript(collectionId, fragmentId)
+        submitManuscript({ collectionId, fragmentId })
           .then(r => {
             hideModal()
             dispatch(autosaveSuccess())
             history.push('/confirmation-page', {
               customId,
-              version: fragmentId,
-              project: collectionId,
+              fragment: fragmentId,
+              collection: collectionId,
             })
           })
           .catch(err => {
diff --git a/packages/component-wizard/src/redux/autosave.js b/packages/component-wizard/src/redux/autosave.js
index 772755f4eb6f3f65900020f484c50bc6ee141f3b..28ec87bc0dc7586c52df6f84cb291d38cbf066af 100644
--- a/packages/component-wizard/src/redux/autosave.js
+++ b/packages/component-wizard/src/redux/autosave.js
@@ -28,6 +28,8 @@ export const getAutosave = state => get(state, 'autosave', initialState)
 export const getAutosaveFetching = state =>
   get(state, 'autosave.isFetching', false)
 
+// due to faulty error handing inside the updateFragment action, we have to
+// handle error and success here
 export default (state = initialState, action) => {
   switch (action.type) {
     case AUTOSAVE_REQUEST:
@@ -35,11 +37,13 @@ export default (state = initialState, action) => {
         ...initialState,
         isFetching: true,
       }
+    case 'UPDATE_FRAGMENT_FAILURE':
     case AUTOSAVE_FAILURE:
       return {
         ...initialState,
         error: action.error,
       }
+    case 'UPDATE_FRAGMENT_SUCCESS':
     case AUTOSAVE_SUCCESS:
       return {
         ...initialState,
diff --git a/packages/component-wizard/src/redux/conversion.js b/packages/component-wizard/src/redux/conversion.js
index 16a116a0dd13395cf820675a45f10e091c3afe9c..12a1703c7baaa28ba973ea8ddf3ecb8d3ed2dc31 100644
--- a/packages/component-wizard/src/redux/conversion.js
+++ b/packages/component-wizard/src/redux/conversion.js
@@ -1,8 +1,8 @@
 import moment from 'moment'
 import { pick, get } from 'lodash'
 import { actions } from 'pubsweet-client'
-import { create, update } from 'pubsweet-client/src/helpers/api'
 import journalConfig from 'xpub-faraday/app/config/journal'
+import { create, update } from 'pubsweet-client/src/helpers/api'
 
 /* constants */
 export const CREATE_DRAFT_REQUEST = 'CREATE_DRAFT_REQUEST'
@@ -90,7 +90,7 @@ export const createDraftSubmission = history => (dispatch, getState) => {
   })
 }
 
-export const submitManuscript = (collectionId, fragmentId) => dispatch =>
+export const submitManuscript = ({ collectionId, fragmentId }) => dispatch =>
   create(`/collections/${collectionId}/fragments/${fragmentId}/submit`)
 
 export const createRevision = (
@@ -122,8 +122,8 @@ export const createRevision = (
   })
 }
 
-export const submitRevision = (collId, fragId) => dispatch =>
-  update(`/collections/${collId}/fragments/${fragId}/submit`)
+export const submitRevision = ({ collectionId, fragmentId }) =>
+  update(`/collections/${collectionId}/fragments/${fragmentId}/submit`)
 
 /* reducer */
 const initialState = {
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardFilters.js b/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
index 2f1794281d784ee183df364b9322a61c56c5f251..642099f9136951bec02aef4983b0a2e796eea196 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardFilters.js
@@ -8,17 +8,17 @@ const DashboardFilters = ({
   changeFilterValue,
   getDefaultFilterValue,
 }) => (
-  <Row
-    alignItems="flex-end"
-    data-test-id="dashboard-filters"
-    justify="flex-start"
-    mb={1}
-    mt={2}
-  >
+  <Row alignItems="flex-end" justify="flex-start" mb={1} mt={2}>
     <Text mr={1} pb={1} secondary>
       Filters
     </Text>
-    <Item alignItems="flex-start" flex={0} mr={1} vertical>
+    <Item
+      alignItems="flex-start"
+      data-test-id="dashboard-filter-priority"
+      flex={0}
+      mr={1}
+      vertical
+    >
       <Label>Priority</Label>
       <Menu
         inline
@@ -28,7 +28,12 @@ const DashboardFilters = ({
         value={getDefaultFilterValue('priority')}
       />
     </Item>
-    <Item alignItems="flex-start" flex={0} vertical>
+    <Item
+      alignItems="flex-start"
+      data-test-id="dashboard-filter-order"
+      flex={0}
+      vertical
+    >
       <Label>Order</Label>
       <Menu
         inline
diff --git a/packages/components-faraday/src/components/Dashboard/DashboardItems.js b/packages/components-faraday/src/components/Dashboard/DashboardItems.js
index 97c067c08aa06b312193e906bdae3bcf11b73485..f5a5e24df3fff52a255f0a70b427cec11726a782 100644
--- a/packages/components-faraday/src/components/Dashboard/DashboardItems.js
+++ b/packages/components-faraday/src/components/Dashboard/DashboardItems.js
@@ -19,7 +19,7 @@ const DashboardItem = compose(
 )(ManuscriptCard)
 
 const DashboardItems = ({ list, onClick, deleteProject, canViewReports }) => (
-  <Root>
+  <Root data-test-id="dashboard-list-items">
     {!list.length ? (
       <Row justify="center" mt={4}>
         <H3>Manuscripts will appear here!</H3>
diff --git a/packages/components-faraday/src/components/Reviewers/InviteReviewers.js b/packages/components-faraday/src/components/Reviewers/InviteReviewers.js
index bb7b1048f4f6046697f73c9daf1c811c5bfe15cc..773a148c2d0b19522f89690d3d5ac76e3e756d57 100644
--- a/packages/components-faraday/src/components/Reviewers/InviteReviewers.js
+++ b/packages/components-faraday/src/components/Reviewers/InviteReviewers.js
@@ -76,7 +76,7 @@ const InviteReviewersModal = compose(
     invitations = [],
   }) => (
     <Root>
-      <CloseIcon data-test="icon-modal-hide" onClick={closeModal}>
+      <CloseIcon data-test-id="icon-modal-hide" onClick={closeModal}>
         <Icon primary>x</Icon>
       </CloseIcon>
 
diff --git a/packages/components-faraday/src/components/SignUp/SignUpStep0.js b/packages/components-faraday/src/components/SignUp/SignUpStep0.js
index f17aabd46a27554e01396ab0369eb5b3124769fd..a158b73643dcabe91d17db7779a17f9f67ffae42 100644
--- a/packages/components-faraday/src/components/SignUp/SignUpStep0.js
+++ b/packages/components-faraday/src/components/SignUp/SignUpStep0.js
@@ -134,7 +134,7 @@ const Step0 = ({
       <Row mt={3}>
         <Text display="flex">
           Already have an account?
-          <ActionLink internal pl={1 / 2} to="/">
+          <ActionLink data-test-id="go-to-sign-in" internal pl={1 / 2} to="/">
             Sign in
           </ActionLink>
         </Text>
diff --git a/packages/components-faraday/src/components/UIComponents/EQADecisionPage.js b/packages/components-faraday/src/components/UIComponents/EQADecisionPage.js
index c1fb89f349ec68b04e977988e1e0bfea9a5fda79..58a7247e17840929fed5a835211e7557153085fa 100644
--- a/packages/components-faraday/src/components/UIComponents/EQADecisionPage.js
+++ b/packages/components-faraday/src/components/UIComponents/EQADecisionPage.js
@@ -1,9 +1,7 @@
-import React from 'react'
+import React, { Fragment } from 'react'
 import { isEmpty } from 'lodash'
-import { connect } from 'react-redux'
-import { Button } from '@pubsweet/ui'
-import styled from 'styled-components'
-import { th } from '@pubsweet/ui-toolkit'
+import { reduxForm } from 'redux-form'
+import { Button, H2, TextArea, ValidatedField } from '@pubsweet/ui'
 import {
   compose,
   withState,
@@ -11,221 +9,140 @@ import {
   withHandlers,
   setDisplayName,
 } from 'recompose'
-
 import {
-  withModal,
-  ConfirmationModal,
-} from 'pubsweet-component-modal/src/components'
+  Row,
+  Text,
+  Label,
+  OpenModal,
+  ShadowedBox,
+  ItemOverrideAlert,
+  withEditorialDecision,
+} from 'pubsweet-component-faraday-ui'
 
-import { Err, Subtitle } from './FormItems'
 import { parseSearchParams } from '../utils'
-import {
-  technicalDecision,
-  technicalCheckFetching,
-} from '../../redux/technicalCheck'
+
+const Enhanced = () => (
+  <Row>
+    <ItemOverrideAlert data-test-id="manuscript-return-reason" vertical>
+      <Label required>Return reason</Label>
+      <ValidatedField component={TextArea} name="comments" />
+    </ItemOverrideAlert>
+  </Row>
+)
+
+const FormModal = reduxForm({
+  form: 'eqa',
+  onSubmit: (
+    { comments },
+    dispatch,
+    { technicalDecision, params: { collectionId, token } },
+  ) => modalProps =>
+    technicalDecision({
+      token,
+      comments,
+      step: 'eqa',
+      agree: false,
+      collectionId,
+      modalProps,
+    }),
+})(({ isFetching, handleSubmit }) => (
+  <OpenModal
+    content={Enhanced}
+    isFetching={isFetching}
+    modalKey="rejectManuscript"
+    onConfirm={modalProps => handleSubmit()(modalProps)}
+    title="Reject Manuscript"
+  >
+    {showModal => (
+      <Button data-test-id="eqs-no-button" onClick={showModal}>
+        RETURN TO EiC
+      </Button>
+    )}
+  </OpenModal>
+))
 
 const EQADecisionPage = ({
   params,
-  showEQAModal,
+  isFetching,
   errorMessage,
   successMessage,
+  acceptManuscript,
+  ...rest
 }) => (
-  <Root>
-    <Title>
-      Take a decision for manuscript <b>{params.customId}</b>.
-    </Title>
-    {errorMessage && <Err>{errorMessage}</Err>}
-    {successMessage && <Subtitle>{successMessage}</Subtitle>}
+  <ShadowedBox center mt={5}>
+    <H2>Editorial decision</H2>
+    {errorMessage && (
+      <Row mt={1}>
+        <Text>{errorMessage}</Text>
+      </Row>
+    )}
+    {successMessage && (
+      <Row mt={1}>
+        <Text>{successMessage}</Text>
+      </Row>
+    )}
     {isEmpty(errorMessage) &&
       isEmpty(successMessage) && (
-        <ButtonContainer>
-          <Button onClick={showEQAModal(false)}>RETURN TO EiC</Button>
-          <Button onClick={showEQAModal(true)} primary>
-            ACCEPT
-          </Button>
-        </ButtonContainer>
+        <Fragment>
+          <Row>
+            <Text mb={2} mt={2} secondary>
+              Take a decision for manuscript <b>{params.customId}</b>.
+            </Text>
+          </Row>
+          <Row>
+            <FormModal isFetching={isFetching} params={params} {...rest} />
+            <OpenModal
+              isFetching={isFetching}
+              modalKey="acceptManuscript"
+              onConfirm={acceptManuscript}
+              subtitle="Are you sure you want to accept this manuscript?"
+              title="Accept Manuscript"
+            >
+              {showModal => (
+                <Button
+                  data-test-id="eqa-yes-button"
+                  onClick={showModal}
+                  primary
+                >
+                  ACCEPT
+                </Button>
+              )}
+            </OpenModal>
+          </Row>
+        </Fragment>
       )}
-  </Root>
+  </ShadowedBox>
 )
 
-const DeclineModal = compose(
-  withState('reason', 'setReason', ''),
-  withHandlers({
-    changeReason: ({ setReason }) => e => {
-      setReason(e.target.value)
-    },
-  }),
-)(({ reason, changeReason, hideModal, onConfirm, modalError }) => (
-  <DeclineRoot>
-    <span>Return Manuscript to Editor in Chief</span>
-    <textarea
-      onChange={changeReason}
-      placeholder="Return reason*"
-      value={reason}
-    />
-    {modalError && <ErrorMessage>{modalError}</ErrorMessage>}
-    <ButtonContainer data-test="eqa-buttons">
-      <Button onClick={hideModal}>Cancel</Button>
-      <Button disabled={!reason} onClick={onConfirm(reason)} primary>
-        Send
-      </Button>
-    </ButtonContainer>
-  </DeclineRoot>
-))
-
-const ModalComponent = ({ type, ...rest }) =>
-  type === 'decline' ? (
-    <DeclineModal {...rest} />
-  ) : (
-    <ConfirmationModal {...rest} />
-  )
-
 export default compose(
+  withEditorialDecision,
   setDisplayName('EQA Decision page'),
-  connect(
-    state => ({
-      isFetching: technicalCheckFetching(state),
-    }),
-    { technicalDecision },
-  ),
-  withModal(({ isFetching }) => ({
-    isFetching,
-    modalComponent: ModalComponent,
-  })),
   withState('params', 'setParams', {
+    title: '',
     token: null,
-    customId: null,
+    comments: null,
     collectionId: null,
   }),
-  withState('successMessage', 'setSuccess', ''),
   lifecycle({
     componentDidMount() {
       const { location, setParams } = this.props
-      const { customId, collectionId, token } = parseSearchParams(
+      const { comments, collectionId, token, title } = parseSearchParams(
         location.search,
       )
-      setParams({ customId, collectionId, token })
+      setParams({ comments, collectionId, token, title })
     },
   }),
   withHandlers({
-    showEQAModal: ({
-      showModal,
-      hideModal,
-      setSuccess,
-      setModalError,
+    acceptManuscript: ({
       technicalDecision,
       params: { collectionId, token },
-    }) => decision => () => {
-      const acceptConfig = {
-        title: `Are you sure you want to accept this EQA package?`,
-        onConfirm: () => {
-          technicalDecision({
-            step: 'eqa',
-            agree: decision,
-            collectionId,
-            token,
-          }).then(() => {
-            setSuccess(
-              `Manuscript accepted. Thank you for your technical check!`,
-            )
-            hideModal()
-          }, setModalError)
-        },
-        onCancel: hideModal,
-      }
-      const declineConfig = {
-        type: 'decline',
-        title: 'Return Manuscript to Editor in Chief',
-        onConfirm: reason => () => {
-          technicalDecision({
-            step: 'eqa',
-            agree: decision,
-            comments: reason,
-            collectionId,
-            token,
-          }).then(() => {
-            setSuccess(
-              `Manuscript returned with comments. An email has been sent to Editor In Chief. Thank you for your technical check!`,
-            )
-            hideModal()
-          }, setModalError)
-        },
-      }
-
-      const cfg = decision ? acceptConfig : declineConfig
-      showModal(cfg)
-    },
+    }) => modalProps =>
+      technicalDecision({
+        token,
+        modalProps,
+        step: 'eqa',
+        agree: true,
+        collectionId,
+      }),
   }),
 )(EQADecisionPage)
-
-// #region styles
-const Root = styled.div`
-  align-items: center;
-  color: ${th('colorText')};
-  display: flex;
-  flex-direction: column;
-  justify-content: flex-start;
-  margin: 0 auto;
-  text-align: center;
-  width: 70vw;
-
-  a {
-    color: ${th('colorText')};
-  }
-`
-
-const Title = styled.div`
-  color: ${th('colorPrimary')};
-  font-size: ${th('fontSizeHeading5')};
-  font-family: ${th('fontHeading')};
-  margin: 10px auto;
-`
-
-const ButtonContainer = styled.div`
-  align-items: center;
-  display: flex;
-  justify-content: space-around;
-  padding: calc(${th('gridUnit')} / 2);
-  width: calc(${th('gridUnit')} * 15);
-`
-const ErrorMessage = styled.div`
-  color: ${th('colorError')};
-  margin: ${th('subGridUnit')};
-  text-align: center;
-`
-const DeclineRoot = styled.div`
-  align-items: center;
-  background-color: ${th('backgroundColor')};
-  display: flex;
-  flex-direction: column;
-  height: calc(${th('gridUnit')} * 13);
-  justify-content: space-between;
-  padding: calc(${th('subGridUnit')} * 7);
-  width: calc(${th('gridUnit')} * 24);
-
-  & span {
-    color: ${th('colorPrimary')};
-    font-size: ${th('fontSizeHeading5')};
-    font-family: ${th('fontHeading')};
-    margin-bottom: ${th('gridUnit')};
-  }
-
-  & textarea {
-    height: 100%;
-    padding: calc(${th('subGridUnit')} * 2);
-    width: 100%;
-  }
-
-  & textarea:focus,
-  & textarea:active {
-    outline: none;
-  }
-
-  & div {
-    display: flex;
-    justify-content: space-evenly;
-    margin: ${th('gridUnit')} auto 0;
-    width: 100%;
-  }
-`
-// #endregion
diff --git a/packages/components-faraday/src/components/UIComponents/EQSDecisionPage.js b/packages/components-faraday/src/components/UIComponents/EQSDecisionPage.js
index a2c978f8660d924d2b7b27bbadd607b8a6a27995..da01cc78751def42896d1f8bb2dd4a04cb1658ba 100644
--- a/packages/components-faraday/src/components/UIComponents/EQSDecisionPage.js
+++ b/packages/components-faraday/src/components/UIComponents/EQSDecisionPage.js
@@ -1,6 +1,5 @@
 import React from 'react'
 import { isEmpty } from 'lodash'
-import { connect } from 'react-redux'
 import { reduxForm } from 'redux-form'
 import { required } from 'xpub-validators'
 import { Button, H2, TextField, ValidatedField } from '@pubsweet/ui'
@@ -18,6 +17,7 @@ import {
   Label,
   OpenModal,
   ShadowedBox,
+  withEditorialDecision,
 } from 'pubsweet-component-faraday-ui'
 
 import {
@@ -25,10 +25,6 @@ import {
   parseSearchParams,
   manuscriptIdSizeValidator,
 } from '../utils'
-import {
-  technicalDecision,
-  technicalCheckFetching,
-} from '../../redux/technicalCheck'
 
 const sizeValidator = manuscriptIdSizeValidator(7)
 
@@ -38,6 +34,7 @@ const Enhanched = () => (
       <Label required>Manuscript ID</Label>
       <ValidatedField
         component={TextField}
+        data-test-id="eqs-manuscript-id"
         name="customId"
         validate={[required, digitValidator, sizeValidator]}
       />
@@ -50,30 +47,22 @@ const FormModal = reduxForm({
   onSubmit: (
     { customId },
     dispatch,
-    { technicalDecision, params: { collectionId, token }, setSuccess },
-  ) => ({ hideModal, setModalError }) => {
+    { params: { collectionId, token }, technicalDecision },
+  ) => modalProps =>
     technicalDecision({
       token,
       customId,
       step: 'eqs',
       agree: true,
       collectionId,
-    })
-      .then(() => {
-        hideModal()
-        setSuccess(`Manuscript accepted. Thank you for your technical check!`)
-      })
-      .catch(e => {
-        setModalError(`There was an error: ${e}`)
-      })
-  },
-})(({ isFetching, handleSubmit, technicalDecision, ...formProps }) => (
+      modalProps,
+    }),
+})(({ isFetching, handleSubmit }) => (
   <OpenModal
     content={Enhanched}
     isFetching={isFetching}
     modalKey="acceptManuscript"
     onConfirm={modalProps => handleSubmit()(modalProps)}
-    technicalDecision={technicalDecision}
     title="Accept Manuscript"
   >
     {showModal => (
@@ -90,7 +79,6 @@ const EQSDecisionPage = ({
   eqsDecision,
   successMessage,
   rejectManuscript,
-  technicalDecision,
   ...rest
 }) => (
   <ShadowedBox center mt={5}>
@@ -122,32 +110,21 @@ const EQSDecisionPage = ({
             </Button>
           )}
         </OpenModal>
-        <FormModal
-          isFetching={isFetching}
-          params={params}
-          technicalDecision={technicalDecision}
-          {...rest}
-        />
+        <FormModal isFetching={isFetching} params={params} {...rest} />
       </Row>
     )}
   </ShadowedBox>
 )
 
 export default compose(
+  withEditorialDecision,
   setDisplayName('EQS Decision page'),
-  connect(
-    (state, { params }) => ({
-      isFetching: technicalCheckFetching(state),
-    }),
-    { technicalDecision },
-  ),
   withState('params', 'setParams', {
     title: '',
     token: null,
     customId: null,
     collectionId: null,
   }),
-  withState('successMessage', 'setSuccess', ''),
   lifecycle({
     componentDidMount() {
       const { location, setParams } = this.props
@@ -159,24 +136,16 @@ export default compose(
   }),
   withHandlers({
     rejectManuscript: ({
-      setSuccess,
       technicalDecision,
       params: { collectionId, token },
-    }) => ({ hideModal, setModalError }) => {
+    }) => modalProps =>
       technicalDecision({
         token,
+        modalProps,
         step: 'eqs',
         agree: false,
         collectionId,
-      })
-        .then(() => {
-          hideModal()
-          setSuccess(`Manuscript rejected. Thank you for your technical check!`)
-        })
-        .catch(e => {
-          setModalError(`There was an error: ${e}`)
-        })
-    },
+      }),
   }),
 )(EQSDecisionPage)
 
diff --git a/packages/components-faraday/src/index.js b/packages/components-faraday/src/index.js
index f2e244a4264d4b2de2337305c35fc60ce134aaa7..da14a556649634aacd2b1eb1ad4acec60dc21cb3 100644
--- a/packages/components-faraday/src/index.js
+++ b/packages/components-faraday/src/index.js
@@ -5,7 +5,6 @@ module.exports = {
       authors: () => require('./redux/authors').default,
       customError: () => require('./redux/errors').default,
       files: () => require('./redux/files').default,
-      technicalCheck: () => require('./redux/technicalCheck').default,
     },
   },
 }
diff --git a/packages/components-faraday/src/redux/authors.js b/packages/components-faraday/src/redux/authors.js
index c867b596751e0c7db39949b1cfa30077156c137c..308d8a6b4b7fe58ec53c093ab3e30b6af1e3c153 100644
--- a/packages/components-faraday/src/redux/authors.js
+++ b/packages/components-faraday/src/redux/authors.js
@@ -1,8 +1,6 @@
 import { get } from 'lodash'
 import { create, remove, get as apiGet } from 'pubsweet-client/src/helpers/api'
 
-import { handleError } from './utils'
-
 // constants
 const REQUEST = 'authors/REQUEST'
 const FAILURE = 'authors/FAILURE'
@@ -25,26 +23,17 @@ export const authorSuccess = () => ({
 export const getAuthors = (collectionId, fragmentId) =>
   apiGet(`/collections/${collectionId}/fragments/${fragmentId}/users`)
 
-export const addAuthor = (author, collectionId, fragmentId) => dispatch => {
-  dispatch(authorRequest())
-  return create(`/collections/${collectionId}/fragments/${fragmentId}/users`, {
+export const addAuthor = ({ author, collectionId, fragmentId }) =>
+  create(`/collections/${collectionId}/fragments/${fragmentId}/users`, {
     email: author.email,
     role: 'author',
     ...author,
-  }).then(author => {
-    dispatch(authorSuccess())
-    return author
-  }, handleError(authorFailure, dispatch))
-}
+  })
 
-export const deleteAuthor = (collectionId, fragmentId, userId) => dispatch => {
-  dispatch(authorRequest())
-  return remove(
-    `/collections/${collectionId}/fragments/${fragmentId}/users/${userId}`,
+export const deleteAuthor = ({ authorId, fragmentId, collectionId }) =>
+  remove(
+    `/collections/${collectionId}/fragments/${fragmentId}/users/${authorId}`,
   )
-    .then(() => dispatch(authorSuccess()))
-    .catch(handleError(authorFailure, dispatch))
-}
 
 // selectors
 export const getFragmentAuthors = (state, fragmentId) =>
diff --git a/packages/components-faraday/src/redux/files.js b/packages/components-faraday/src/redux/files.js
index 02a36e8517af01e2768c6868b75c67467d78e557..4e79e1f65454bfeb0ba21de652bad73557460c03 100644
--- a/packages/components-faraday/src/redux/files.js
+++ b/packages/components-faraday/src/redux/files.js
@@ -72,7 +72,7 @@ export const uploadFile = ({ file, type, fragment }) => {
   )
 }
 
-export const deleteFile = (fileId, type = 'manuscripts') =>
+export const deleteFile = ({ fileId, type = 'manuscripts' }) =>
   remove(`/files/${fileId}`)
 
 export const getSignedUrl = fileId => apiGet(`/files/${fileId}`)
diff --git a/packages/components-faraday/src/redux/index.js b/packages/components-faraday/src/redux/index.js
index 30c41635ad5620a20b3ab66da9d7e4f8e34dc8df..a54fd39b9f12398f8a3127508874979dba3c0e59 100644
--- a/packages/components-faraday/src/redux/index.js
+++ b/packages/components-faraday/src/redux/index.js
@@ -2,5 +2,4 @@ export { default as files } from './files'
 export { default as errors } from './errors'
 export { default as authors } from './authors'
 export { default as reviewers } from './reviewers'
-export { default as technicalCheck } from './technicalCheck'
 export { default as recommendations } from './recommendations'
diff --git a/packages/components-faraday/src/redux/technicalCheck.js b/packages/components-faraday/src/redux/technicalCheck.js
index 0527f214bf8eade2904d165ee0835b9a286a64bb..e862b54b09badeaf4f964649f833cd3ff04e1d87 100644
--- a/packages/components-faraday/src/redux/technicalCheck.js
+++ b/packages/components-faraday/src/redux/technicalCheck.js
@@ -1,23 +1,5 @@
-import { get } from 'lodash'
 import { update } from 'pubsweet-client/src/helpers/api'
 
-const DECISION_REQUEST = 'tc/DECISION_REQUEST'
-const DECISION_SUCCESS = 'tc/DECISION_SUCCESS'
-const DECISION_ERROR = 'tc/DECISION_ERROR'
-
-const decisionRequest = () => ({
-  type: DECISION_REQUEST,
-})
-
-const decisionSuccess = () => ({
-  type: DECISION_SUCCESS,
-})
-
-const decisionError = error => ({
-  type: DECISION_ERROR,
-  error,
-})
-
 export const technicalDecision = ({
   step,
   agree,
@@ -25,52 +7,11 @@ export const technicalDecision = ({
   customId,
   comments,
   collectionId,
-}) => dispatch => {
-  dispatch(decisionRequest())
-  return update(`/collections/${collectionId}/status`, {
+}) =>
+  update(`/collections/${collectionId}/status`, {
     step,
     token,
     agree,
     customId,
     comments,
-  }).then(
-    r => {
-      dispatch(decisionSuccess())
-      return r
-    },
-    err => {
-      const errorMessage = get(
-        JSON.parse(err.response),
-        'error',
-        'Something went wrong. Please try again.',
-      )
-      dispatch(decisionError(errorMessage))
-      throw errorMessage
-    },
-  )
-}
-
-export const technicalCheckFetching = state =>
-  get(state, 'technicalCheck.fetching', false)
-
-export default (state = {}, action = {}) => {
-  switch (action.type) {
-    case DECISION_REQUEST:
-      return {
-        ...state,
-        fetching: true,
-      }
-    case DECISION_SUCCESS:
-      return {
-        error: null,
-        fetching: false,
-      }
-    case DECISION_ERROR:
-      return {
-        error: action.error,
-        fetching: false,
-      }
-    default:
-      return state
-  }
-}
+  })
diff --git a/packages/styleguide/styleguide.config.js b/packages/styleguide/styleguide.config.js
index 1a6fe7ba50ad201d0bc3ee0a474e8ac2c01d53d9..b59df5cb30351edf8f76fe3d11ed90e15664b03a 100644
--- a/packages/styleguide/styleguide.config.js
+++ b/packages/styleguide/styleguide.config.js
@@ -22,6 +22,11 @@ module.exports = {
       sectionDepth: 1,
       components: ['../component-faraday-ui/src/contextualBoxes/[A-Z]*.js'],
     },
+    {
+      name: 'Submit Revision',
+      sectionDepth: 1,
+      components: ['../component-faraday-ui/src/submissionRevision/[A-Z]*.js'],
+    },
     {
       name: 'Pending Items',
       sectionDepth: 1,
diff --git a/packages/xpub-faraday/config/validations.js b/packages/xpub-faraday/config/validations.js
index 978904daf61d9ad44ee03ad187d33d30dc64ac83..cc116eecca70a91cb64c085c77fc0c6b6da39cfd 100644
--- a/packages/xpub-faraday/config/validations.js
+++ b/packages/xpub-faraday/config/validations.js
@@ -42,7 +42,18 @@ module.exports = {
         hasFunding: Joi.any().valid(['yes', 'no', '']),
         fundingMessage: Joi.string().allow(''),
       }),
-      commentsToReviewers: Joi.string(),
+      responseToReviewers: Joi.object({
+        file: Joi.object({
+          id: Joi.string(),
+          name: Joi.string().required(),
+          originalName: Joi.string(),
+          type: Joi.string(),
+          size: Joi.number(),
+          url: Joi.string(),
+          signedUrl: Joi.string(),
+        }).allow(null),
+        content: Joi.string().allow(''),
+      }),
       files: Joi.object({
         manuscript: Joi.any(),
         manuscripts: Joi.array().items(