diff --git a/javascript/README.md b/javascript/README.md
index 143867b460ba9b5d09d9fff6e5d15048e964e5ea..8975e3067668d19ece9096466f791fd4572c9667 100644
--- a/javascript/README.md
+++ b/javascript/README.md
@@ -12,4 +12,3 @@ Project uses ESLint to maintain code quality. Setup instructions:
 #### IDEA 
 - Enable ESLint in `Preferences -> Languages and frameworks -> JavaScript -> Code Quality Tools`
 
-
diff --git a/javascript/package.json b/javascript/package.json
index bab32fc9af6cad2dda7cab5aa4307bebd8a0a301..dd5e3a5305e5b53e23f678b76aa094a57ad7da96 100644
--- a/javascript/package.json
+++ b/javascript/package.json
@@ -23,6 +23,8 @@
   },
   "license": "MIT",
   "dependencies": {
+    "add-asset-html-webpack-plugin": "^3.1.3",
+    "asmcrypto.js": "^2.3.2",
     "asn1js": "^2.0.21",
     "axios": "0.18.0",
     "data-uri-to-blob": "^0.0.4",
@@ -32,13 +34,14 @@
     "penpal": "^3.0.3",
     "pkijs": "^2.1.69",
     "pvutils": "^1.0.16",
-    "qrcode": "^1.3.0"
+    "qrcode": "^1.3.0",
+    "webcrypto-liner": "^1.1.4"
   },
   "devDependencies": {
-    "@babel/core": "^7.1.2",
+    "@babel/core": "^7.8.3",
+    "@babel/polyfill": "^7.8.3",
     "@babel/preset-env": "^7.1.0",
     "babel-loader": "^8.0.4",
-    "babel-polyfill": "^6.26.0",
     "clean-webpack-plugin": "^0.1.19",
     "core-js": "^2.5.7",
     "eslint": "^5.3.0",
diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index 61ae7e489b8b2ccad380728e1682ce24d4b52b9f..f82a7e7bc1b6c1896f20cc7703d4c0f16569f5a7 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -1,3 +1,4 @@
+import '../lib/textencoder.polyfill';
 import { parseSMIME, prepareVCardParts } from "../utilities/emailUtilities";
 import {
   stringToUtf8ByteArray,
@@ -45,7 +46,7 @@ const WopiAPI = require("./wopiapi-iframe");
 const CollaboraAPI = require("./collaboraapi-iframe");
 const ViamAPI = require("../../temp/viamapi");
 
-let identityColors = ["#994392", "#cb0767", "#e51d31", "#ec671b", "#fab610"];
+const identityColors = ["#994392", "#cb0767", "#e51d31", "#ec671b", "#fab610"];
 
 function getNextColor() {
   let colorIndex = localStorage.getItem("colorIndex");
@@ -53,7 +54,7 @@ function getNextColor() {
     colorIndex = 0;
   }
 
-  let color = identityColors[colorIndex];
+  const color = identityColors[colorIndex];
 
   colorIndex++;
 
@@ -65,7 +66,7 @@ function getNextColor() {
 }
 
 function setKeyForUUID(uuid, key) {
-  let storedIdentityForUuid = localStorage.getItem("keyperuuid/" + uuid);
+  const storedIdentityForUuid = localStorage.getItem("keyperuuid/" + uuid);
   if (
     storedIdentityForUuid !== key &&
     storedIdentityForUuid != null &&
@@ -109,8 +110,8 @@ function setIdentityInLocalStorage(identityToStore, extendKey = true) {
       }
       if (success === true) {
         localStorage.setItem(key, encryptedIdentity);
-        let serializedIdentitiesList = localStorage.getItem("identities");
-        let identities = JSON.parse(serializedIdentitiesList);
+        const serializedIdentitiesList = localStorage.getItem("identities");
+        const identities = JSON.parse(serializedIdentitiesList);
         identities[key] = true;
 
         localStorage.setItem("identities", JSON.stringify(identities));
@@ -130,7 +131,7 @@ function getProfileData(identity) {
       null
     ).then(executeResult => {
       if (executeResult.code === "200") {
-        let listItem = {};
+        const listItem = {};
 
         listItem.identityColor = getColorForIdentity(
           identity.authentication.publicKey
@@ -177,19 +178,19 @@ async function getIdentityFromLocalStorage(key, pinCode, extendTtl = true) {
 
 function extendPinCodeTtl(key, pinCode) {
   if (pinCode == null || pinCode === "") {
-    let now = new Date();
-    let nowMillis = now.getTime();
-    let ttl = window.sessionStorage.getItem("pincodettls/" + key);
+    const now = new Date();
+    const nowMillis = now.getTime();
+    const ttl = window.sessionStorage.getItem("pincodettls/" + key);
     if (ttl == null || ttl === "" || nowMillis >= parseInt(ttl)) {
       clearPinCodeTtl(key);
       return false;
     } else {
-      let ttl = now.getTime() + 4 * 60 * 60 * 1000;
+      const ttl = now.getTime() + 4 * 60 * 60 * 1000;
       window.sessionStorage.setItem("pincodettls/" + key, ttl);
     }
   } else {
-    let now = new Date();
-    let ttl = now.getTime() + 4 * 60 * 60 * 1000;
+    const now = new Date();
+    const ttl = now.getTime() + 4 * 60 * 60 * 1000;
     window.sessionStorage.setItem("pincodettls/" + key, ttl);
     window.sessionStorage.setItem("pincodes/" + key, pinCode);
   }
@@ -205,9 +206,9 @@ function clearPinCodeTtl(key) {
 }
 
 function getPincode(key) {
-  let now = new Date();
-  let nowMillis = now.getTime();
-  let ttl = window.sessionStorage.getItem("pincodettls/" + key);
+  const now = new Date();
+  const nowMillis = now.getTime();
+  const ttl = window.sessionStorage.getItem("pincodettls/" + key);
   if (ttl == null || ttl === "") {
     return null;
   } else {
@@ -223,9 +224,9 @@ function getPincode(key) {
 function createEvent(actionId, type, payloads) {
   return {
     actionID: actionId,
-    type: type,
+    type,
     stamp: new Date().getTime(),
-    payloads: payloads
+    payloads
   };
 }
 
@@ -338,13 +339,13 @@ async function executeRestfulFunction(type, that, fn, config, ...args) {
     identity &&
     code === "400" &&
     status === "Bad session";
-  if (!badSession) return response.data;
+  if (!badSession) { return response.data; }
 
   const loginResponse = await viamApi.identityLogin(
     null,
     "previousaddeddevice"
   );
-  if (loginResponse.data.code !== "200") return loginResponse.data;
+  if (loginResponse.data.code !== "200") { return loginResponse.data; }
 
   const uuid = loginResponse.data.data["Uuid"];
   const token = loginResponse.data.data["Session"];
@@ -416,17 +417,19 @@ function loadIdentityInternal(identityKey, pinCode) {
 function getCertificateForPassport(passportUUID, internal) {
   return new Penpal.Promise(certificateResult => {
     if (window.currentlyAuthenticatedIdentity === null) {
-      return { data: "", code: "400", status: "Identity not authenticated" };
+      return { data: "",
+        code: "400",
+        status: "Identity not authenticated" };
     }
 
     const passportIdentity = window.currentlyAuthenticatedIdentity;
-    let passport = passportIdentity.getPassport(passportUUID);
+    const passport = passportIdentity.getPassport(passportUUID);
     if (passport === undefined || passport === null) {
-      createPassportCertificate(passportUUID).then(function(keys) {
-        let cryptoData = new CryptoData();
+      createPassportCertificate(passportUUID).then(function (keys) {
+        const cryptoData = new CryptoData();
         cryptoData.setPublicKey(keys["publicKeyPEM"]);
         cryptoData.setPrivateKey(keys["privateKeyPEM"]);
-        let certificate = keys["certificatePEM"];
+        const certificate = keys["certificatePEM"];
         //download("passportCertificateBeforeSigning.crt", "text/plain", certificate)
         //cryptoData.setx509Certificate(keys["certificate"])
         executeRestfulFunction(
@@ -438,15 +441,15 @@ function getCertificateForPassport(passportUUID, internal) {
           passportUUID
         ).then(executeResult => {
           if (executeResult.code === "200") {
-            let signedCertificate = atob(
+            const signedCertificate = atob(
               executeResult.data["SignedCertificate"]
             );
             //download("passportCertificateAfterSigning.crt", "text/plain", signedCertificate)
-            let keyUUID = executeResult.data["CertificateUUID"];
-            let encodedChain = executeResult.data["Chain"];
+            const keyUUID = executeResult.data["CertificateUUID"];
+            const encodedChain = executeResult.data["Chain"];
             //download("rootCertificate.crt", "text/plain", atob(encodedChain[0]))
 
-            let chain = [];
+            const chain = [];
 
             for (let i = 0; i < encodedChain.length; i++) {
               chain.push(atob(encodedChain[i]));
@@ -492,7 +495,7 @@ function getCertificateForPassport(passportUUID, internal) {
         });
       });
     } else {
-      let copyOfCryptoData = JSON.parse(JSON.stringify(passport));
+      const copyOfCryptoData = JSON.parse(JSON.stringify(passport));
 
       if (internal === false) {
         copyOfCryptoData["privateKey"] = "";
@@ -533,16 +536,16 @@ const connection = Penpal.connectToParent({
       window.WOPI_URL =
         wopiUrl.charAt(wopiUrl.length - 1) === "/" ? wopiUrl : wopiUrl + "/";
       window.COLLABORA_URL =
-        collaboraUrl.charAt(collaboraUrl.length - 1) === "/"
-          ? collaboraUrl
-          : collaboraUrl + "/";
+        collaboraUrl.charAt(collaboraUrl.length - 1) === "/" ?
+          collaboraUrl :
+          collaboraUrl + "/";
     },
     ...penpalMethods,
     createIdentity(pinCode) {
       return new Penpal.Promise(result => {
-        createPassportCertificate(makeid()).then(function(keys) {
-          let newIdentity = new Identity();
-          let cryptoData = new CryptoData();
+        createPassportCertificate(makeid()).then(function (keys) {
+          const newIdentity = new Identity();
+          const cryptoData = new CryptoData();
           cryptoData.setPublicKey(keys["publicKeyPEM"]);
           cryptoData.setPrivateKey(keys["privateKeyPEM"]);
           cryptoData.setx509Certificate(keys["certificatePEM"]);
@@ -574,8 +577,10 @@ const connection = Penpal.connectToParent({
     },
     listIdentities() {
       return new Penpal.Promise(result => {
-        let identities = listIdentitiesFromLocalStorage();
-        result({ data: identities, code: "200", status: "Identities listed" });
+        const identities = listIdentitiesFromLocalStorage();
+        result({ data: identities,
+          code: "200",
+          status: "Identities listed" });
       });
     },
     loadIdentity(identityKey, pinCode) {
@@ -622,7 +627,9 @@ const connection = Penpal.connectToParent({
           "profiles/" + identityKey
         );
         if (serializedProfile === null || serializedProfile === "") {
-          result({ data: "", code: "400", status: "Profile is empty" });
+          result({ data: "",
+            code: "400",
+            status: "Profile is empty" });
         } else {
           result({
             data: JSON.parse(serializedProfile),
@@ -829,7 +836,7 @@ const connection = Penpal.connectToParent({
           });
         }
 
-        let success = extendPinCodeTtl(authenticationPublicKey);
+        const success = extendPinCodeTtl(authenticationPublicKey);
 
         if (success === false) {
           result({
@@ -846,9 +853,9 @@ const connection = Penpal.connectToParent({
           null
         ).then(executeResult => {
           if (executeResult.code === "200") {
-            let actionID = executeResult.data["ActionID"];
-            let QrCode = executeResult.data["QrCode"];
-            QRCode.toDataURL(actionID + "," + QrCode, function(err, url) {
+            const actionID = executeResult.data["ActionID"];
+            const QrCode = executeResult.data["QrCode"];
+            QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
               executeResult.data["image"] = url;
               result(executeResult);
             });
@@ -878,7 +885,7 @@ const connection = Penpal.connectToParent({
           });
         }
 
-        let success = extendPinCodeTtl(authenticationPublicKey);
+        const success = extendPinCodeTtl(authenticationPublicKey);
 
         if (success === false) {
           result({
@@ -960,13 +967,17 @@ const connection = Penpal.connectToParent({
           "authenticatedIdentity"
         );
         if (authenticationPublicKey === null) {
-          return { data: "", code: "400", status: "Identity not loaded" };
+          return { data: "",
+            code: "400",
+            status: "Identity not loaded" };
         }
         if (window.loadedIdentities[authenticationPublicKey] === null) {
-          return { data: "", code: "400", status: "Identity not loaded" };
+          return { data: "",
+            code: "400",
+            status: "Identity not loaded" };
         }
 
-        let success = extendPinCodeTtl(authenticationPublicKey);
+        const success = extendPinCodeTtl(authenticationPublicKey);
 
         if (success === false) {
           result({
@@ -977,7 +988,9 @@ const connection = Penpal.connectToParent({
         }
 
         if (localStorage.getItem("uuid") === null) {
-          result({ data: "", code: "400", status: "Not logged in UUID" });
+          result({ data: "",
+            code: "400",
+            status: "Not logged in UUID" });
         }
         result({
           data: localStorage.getItem("uuid"),
@@ -992,13 +1005,17 @@ const connection = Penpal.connectToParent({
           "authenticatedIdentity"
         );
         if (authenticationPublicKey === null) {
-          return { data: "", code: "400", status: "Identity not loaded" };
+          return { data: "",
+            code: "400",
+            status: "Identity not loaded" };
         }
         if (window.loadedIdentities[authenticationPublicKey] === null) {
-          return { data: "", code: "400", status: "Identity not loaded" };
+          return { data: "",
+            code: "400",
+            status: "Identity not loaded" };
         }
 
-        let success = extendPinCodeTtl(authenticationPublicKey);
+        const success = extendPinCodeTtl(authenticationPublicKey);
 
         if (success === false) {
           result({
@@ -1021,13 +1038,17 @@ const connection = Penpal.connectToParent({
           "authenticatedIdentity"
         );
         if (authenticationPublicKey === null) {
-          return { data: "", code: "400", status: "Identity not loaded" };
+          return { data: "",
+            code: "400",
+            status: "Identity not loaded" };
         }
         if (window.loadedIdentities[authenticationPublicKey] === null) {
-          return { data: "", code: "400", status: "Identity not loaded" };
+          return { data: "",
+            code: "400",
+            status: "Identity not loaded" };
         }
 
-        let success = extendPinCodeTtl(authenticationPublicKey);
+        const success = extendPinCodeTtl(authenticationPublicKey);
 
         if (success === false) {
           result({
@@ -1040,23 +1061,23 @@ const connection = Penpal.connectToParent({
         getCertificateForPassport(passportUUID, true).then(
           certificateResult => {
             if (certificateResult.code === "200") {
-              let passportCertificate =
+              const passportCertificate =
                 certificateResult.data["x509Certificate"];
-              let passportPrivateKey = certificateResult.data["privateKey"];
-              let passportChain = certificateResult.data["chain"];
+              const passportPrivateKey = certificateResult.data["privateKey"];
+              const passportChain = certificateResult.data["chain"];
 
               createOneTimePassportCertificate(
                 makeid() + "-" + passportUUID,
                 emailArg,
                 passportPrivateKey,
                 passportCertificate
-              ).then(function(keys) {
-                let publicKeyOneTime = keys["publicKeyPEM"];
-                let privateKeyOneTime = keys["privateKeyPEM"];
-                let certificateOneTime = keys["certificatePEM"];
+              ).then(function (keys) {
+                const publicKeyOneTime = keys["publicKeyPEM"];
+                const privateKeyOneTime = keys["privateKeyPEM"];
+                const certificateOneTime = keys["certificatePEM"];
                 passportChain.push(passportCertificate);
 
-                let oneTimeCryptoData = new CryptoData();
+                const oneTimeCryptoData = new CryptoData();
                 oneTimeCryptoData.setx509Certificate(certificateOneTime);
                 oneTimeCryptoData.setPrivateKey(privateKeyOneTime);
                 oneTimeCryptoData.setPublicKey(publicKeyOneTime);
@@ -1806,7 +1827,7 @@ const connection = Penpal.connectToParent({
           });
         }
 
-        let success = extendPinCodeTtl(authenticationPublicKey);
+        const success = extendPinCodeTtl(authenticationPublicKey);
 
         if (success === false) {
           result({
@@ -2152,7 +2173,7 @@ connection.promise.then(parent => {
   let previousLocalStorageToken;
   let previousLocalStorageIdentity;
 
-  setInterval(async function() {
+  setInterval(async function () {
     if (window.currentlyAuthenticatedIdentity) {
       const { authentication } = window.currentlyAuthenticatedIdentity;
       const pinCode = getPincode(authentication.publicKey);
@@ -2285,7 +2306,7 @@ connection.promise.then(parent => {
 
               const eventCopy = JSON.parse(JSON.stringify(event));
 
-              QRCode.toDataURL(actionID + "," + QrCode, function(err, url) {
+              QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
                 eventCopy["payloads"].push(url);
                 parent.onEvent(eventCopy);
               });
@@ -2358,7 +2379,7 @@ connection.promise.then(parent => {
 
             const eventCopy = JSON.parse(JSON.stringify(event));
 
-            QRCode.toDataURL(actionID + "," + QrCode, function(err, url) {
+            QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
               eventCopy["payloads"].push(url);
               parent.onEvent(eventCopy);
             });
@@ -2406,7 +2427,7 @@ connection.promise.then(parent => {
 
             const eventCopy = JSON.parse(JSON.stringify(event));
 
-            QRCode.toDataURL(actionID + "," + QrCode, function(err, url) {
+            QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
               eventCopy["payloads"].push(url);
               parent.onEvent(eventCopy);
             });
diff --git a/javascript/src/lib/textencoder.polyfill.js b/javascript/src/lib/textencoder.polyfill.js
new file mode 100644
index 0000000000000000000000000000000000000000..461089a7607e798226cab949f9de7d814fd5ef7a
--- /dev/null
+++ b/javascript/src/lib/textencoder.polyfill.js
@@ -0,0 +1,58 @@
+if (typeof window.TextEncoder === "undefined") {
+  window.TextEncoder = function TextEncoder(){};
+  TextEncoder.prototype.encode = function encode(str) {
+    "use strict";
+    var Len = str.length, resPos = -1;
+    // The Uint8Array's length must be at least 3x the length of the string because an invalid UTF-16
+    //  takes up the equivelent space of 3 UTF-8 characters to encode it properly. However, Array's
+    //  have an auto expanding length and 1.5x should be just the right balance for most uses.
+    var resArr = typeof Uint8Array === "undefined" ? new Array(Len * 1.5) : new Uint8Array(Len * 3);
+    for (var point=0, nextcode=0, i = 0; i !== Len; ) {
+      point = str.charCodeAt(i), i += 1;
+      if (point >= 0xD800 && point <= 0xDBFF) {
+        if (i === Len) {
+          resArr[resPos += 1] = 0xef/*0b11101111*/; resArr[resPos += 1] = 0xbf/*0b10111111*/;
+          resArr[resPos += 1] = 0xbd/*0b10111101*/; break;
+        }
+        // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+        nextcode = str.charCodeAt(i);
+        if (nextcode >= 0xDC00 && nextcode <= 0xDFFF) {
+          point = (point - 0xD800) * 0x400 + nextcode - 0xDC00 + 0x10000;
+          i += 1;
+          if (point > 0xffff) {
+            resArr[resPos += 1] = (0x1e/*0b11110*/<<3) | (point>>>18);
+            resArr[resPos += 1] = (0x2/*0b10*/<<6) | ((point>>>12)&0x3f/*0b00111111*/);
+            resArr[resPos += 1] = (0x2/*0b10*/<<6) | ((point>>>6)&0x3f/*0b00111111*/);
+            resArr[resPos += 1] = (0x2/*0b10*/<<6) | (point&0x3f/*0b00111111*/);
+            continue;
+          }
+        } else {
+          resArr[resPos += 1] = 0xef/*0b11101111*/; resArr[resPos += 1] = 0xbf/*0b10111111*/;
+          resArr[resPos += 1] = 0xbd/*0b10111101*/; continue;
+        }
+      }
+      if (point <= 0x007f) {
+        resArr[resPos += 1] = (0x0/*0b0*/<<7) | point;
+      } else if (point <= 0x07ff) {
+        resArr[resPos += 1] = (0x6/*0b110*/<<5) | (point>>>6);
+        resArr[resPos += 1] = (0x2/*0b10*/<<6)  | (point&0x3f/*0b00111111*/);
+      } else {
+        resArr[resPos += 1] = (0xe/*0b1110*/<<4) | (point>>>12);
+        resArr[resPos += 1] = (0x2/*0b10*/<<6)    | ((point>>>6)&0x3f/*0b00111111*/);
+        resArr[resPos += 1] = (0x2/*0b10*/<<6)    | (point&0x3f/*0b00111111*/);
+      }
+    }
+    if (typeof Uint8Array !== "undefined") return resArr.subarray(0, resPos + 1);
+    // else // IE 6-9
+    resArr.length = resPos + 1; // trim off extra weight
+    return resArr;
+  };
+  TextEncoder.prototype.toString = function(){return "[object TextEncoder]"};
+  try { // Object.defineProperty only works on DOM prototypes in IE8
+    Object.defineProperty(TextEncoder.prototype,"encoding",{
+      get:function(){if(TextEncoder.prototype.isPrototypeOf(this)) return"utf-8";
+      else throw TypeError("Illegal invocation");}
+    });
+  } catch(e) { /*IE6-8 fallback*/ TextEncoder.prototype.encoding = "utf-8"; }
+  if(typeof Symbol!=="undefined")TextEncoder.prototype[Symbol.toStringTag]="TextEncoder";
+}
\ No newline at end of file
diff --git a/javascript/src/utilities/signingUtilities.js b/javascript/src/utilities/signingUtilities.js
index 1c94f7c2e78603e7e6cad83cb40dd7a5887b28eb..0151eac0d6156640a7b22fb424449bb2d8929a52 100644
--- a/javascript/src/utilities/signingUtilities.js
+++ b/javascript/src/utilities/signingUtilities.js
@@ -35,7 +35,14 @@ import {
   byteArrayToBase64
 } from "../utilities/stringUtilities";
 const libmime = require("libmime");
+const webcryptoLiner = require("webcrypto-liner/build/index");
 const pkijs = require("pkijs");
+
+pkijs.setEngine(
+  "webcrypto-liner",
+  webcryptoLiner.crypto,
+  new pkijs.CryptoEngine({ name: "webcrypto-liner", crypto: webcryptoLiner.crypto, subtle: webcryptoLiner.crypto.subtle })
+);
 const asn1js = require("asn1js");
 const pvutils = require("pvutils");
 
@@ -314,9 +321,9 @@ function fixPkijsRDN() {
     //region Decode stored TBS value
     if (this.valueBeforeDecode.byteLength === 0) // No stored encoded array, create "from scratch"
     {
-      return (new asn1js.Sequence({
+      return new asn1js.Sequence({
         value: Array.from(this.typesAndValues, element => new asn1js.Set({value: [element.toSchema()]}))
-      }));
+      });
     }
 
     const asn1 = asn1js.fromBER(this.valueBeforeDecode);
@@ -330,7 +337,6 @@ function fixPkijsRDN() {
 
 //*********************************************************************************
 function createCertificate(certData, issuerData = null) {
-
   if (typeof certData === "undefined" || certData === null) {
     return Promise.reject("No Certificate data provided");
   }
@@ -381,6 +387,7 @@ function createCertificate(certData, issuerData = null) {
   //region Store new key in an interim variables
   sequence = sequence.then(
     keyPair => {
+      console.log('generation key',keyPair);
       publicKey = keyPair.publicKey;
       privateKey = keyPair.privateKey;
     },
@@ -395,11 +402,15 @@ function createCertificate(certData, issuerData = null) {
   //endregion Exporting public key into "subjectPublicKeyInfo" value of certificate
 
   sequence = sequence.then(
-    () =>
-      crypto.digest(
+    () =>{
+      console.log('importing public key');
+      //IN IE11 this is NOT a PROMISE !!! but a Crypto Opearation Object
+      return crypto.digest(
         { name: "SHA-1" },
         certificate.subjectPublicKeyInfo.subjectPublicKey.valueBlock.valueHex
-      ),
+      )
+      ;
+    },
     error => Promise.reject(`Error during importing public key: ${error}`)
   );
 
@@ -596,9 +607,9 @@ function createCertificate(certData, issuerData = null) {
     const keyUsageBuffer = new ArrayBuffer(1);
     const keyUsageBitView = new Uint8Array(keyUsageBuffer);
 
-    keyUsageBitView[0] = !!certData.isCA
-      ? KEY_USAGE_CertificateAuthority
-      : KEY_USAGE_LeafCertificate;
+    keyUsageBitView[0] = certData.isCA ?
+      KEY_USAGE_CertificateAuthority :
+      KEY_USAGE_LeafCertificate;
 
     // noinspection JSUnresolvedFunction
     const keyUsage = new asn1js.BitString({ valueHex: keyUsageBuffer });
@@ -625,7 +636,7 @@ function createCertificate(certData, issuerData = null) {
       keyPurposes.push(OID_ID_PKIX_TimeStamping);
 
       const extKeyUsage = new pkijs.ExtKeyUsage({
-        keyPurposes: keyPurposes
+        keyPurposes
       });
 
       certificate.extensions.push(
@@ -662,7 +673,7 @@ function createCertificate(certData, issuerData = null) {
       }
 
       const subjAltNames = new pkijs.GeneralNames({
-        names: names
+        names
       });
 
       certificate.extensions.push(
@@ -733,21 +744,27 @@ function createCertificate(certData, issuerData = null) {
         //endregion "AuthorityKeyIdentifier" extension
     */
     //endregion Extensions
-  });
+  },error => Promise.reject(`Error calculating hash of public key: ${error}`));
   //region Fill in cert data
 
   //region Signing final certificate
   sequence = sequence.then(
     () => {
-      let signerKey =
-        issuerData && issuerData.privateKey
-          ? issuerData.privateKey
-          : privateKey;
+      const signerKey =
+        issuerData && issuerData.privateKey ?
+          issuerData.privateKey :
+          privateKey;
+
+      console.log({issuerData});
+      console.log({signerKey});
+      console.log({certData});
+      console.log({defaultAlgorithms});
+
       return certificate.sign(
         signerKey,
-        certData.algorithms && certData.algorithms.hashAlg
-          ? certData.algorithms.hashAlg
-          : defaultAlgorithms.hashAlg
+        certData.algorithms && certData.algorithms.hashAlg ?
+          certData.algorithms.hashAlg :
+          defaultAlgorithms.hashAlg
       );
     },
     error => Promise.reject(`Error during exporting public key: ${error}`)
@@ -757,6 +774,7 @@ function createCertificate(certData, issuerData = null) {
   //region Encode and store certificate
   sequence = sequence.then(
     () => {
+      console.log('signing',certificate);
       certificateBuffer = certificate.toSchema(true).toBER(false);
     },
     error => Promise.reject(`Error during signing: ${error}`)
@@ -764,12 +782,14 @@ function createCertificate(certData, issuerData = null) {
   //endregion
 
   //region Exporting public key
+  console.log('before export skpi');
   sequence = sequence.then(() => crypto.exportKey("spki", publicKey));
   //endregion
 
   //region Store exported public key on Web page
   sequence = sequence.then(
     result => {
+      console.log('exporting public key',result);
       publicKeyBuffer = result;
     },
     error => Promise.reject(`Error during exporting of public key: ${error}`)
@@ -777,12 +797,14 @@ function createCertificate(certData, issuerData = null) {
   //endregion
 
   //region Exporting private key
+  console.log('before exporting private key');
   sequence = sequence.then(() => crypto.exportKey("pkcs8", privateKey));
   //endregion
 
   //region Store exported key on Web page
   sequence = sequence.then(
     result => {
+      console.log('exporting private key', result);
       privateKeyBuffer = result;
     },
     error => Promise.reject(`Error during exporting of private key: ${error}`)
@@ -791,11 +813,11 @@ function createCertificate(certData, issuerData = null) {
 
   return sequence.then(() => {
     const result = {
-      certificate: certificate,
+      certificate,
       certificatePEM: encodePEM(certificateBuffer, "CERTIFICATE"),
-      publicKey: publicKey,
+      publicKey,
       publicKeyPEM: encodePEM(publicKeyBuffer, "PUBLIC KEY"),
-      privateKey: privateKey,
+      privateKey,
       privateKeyPEM: encodePEM(privateKeyBuffer, "PRIVATE KEY")
     };
     return result;
@@ -1042,7 +1064,7 @@ Vereign - Authentic Communication
   const hashAlg = "SHA-256";
   let cmsSignedSimpl;
 
-  let mimeHeadersTitles = [
+  const mimeHeadersTitles = [
     "Content-Type",
     "Content-Transfer-Encoding",
     "Content-ID",
@@ -1055,26 +1077,26 @@ Vereign - Authentic Communication
   mime = mime.replace(newline, "\r\n");
 
   let newHeaderLines = "";
-  let headersEnd = mime.indexOf("\r\n\r\n"); //the first empty line
+  const headersEnd = mime.indexOf("\r\n\r\n"); //the first empty line
 
   if (headersEnd < 0 && mime.startsWith("\r\n")) {
     mime = mime.substring(2); //should not happen
   } else if (headersEnd >= 0) {
-    let mimeHeaders = {};
-    let mimeBody = mime.substring(headersEnd + 4);
+    const mimeHeaders = {};
+    const mimeBody = mime.substring(headersEnd + 4);
 
-    let mimeHeadersStr = mime.substring(0, headersEnd);
+    const mimeHeadersStr = mime.substring(0, headersEnd);
 
-    let headers = libmime.decodeHeaders(mimeHeadersStr);
+    const headers = libmime.decodeHeaders(mimeHeadersStr);
     for (let i = 0; i < mimeHeadersTitles.length; i++) {
-      let key = mimeHeadersTitles[i].toLowerCase();
+      const key = mimeHeadersTitles[i].toLowerCase();
       if (key in headers) {
         mimeHeaders[key] = headers[key];
         delete headers[key];
       }
     }
 
-    for (let key in headers) {
+    for (const key in headers) {
       if (!(key === "" || key === "MIME-Version".toLowerCase())) {
         //we have MIME-Version in the template
         newHeaderLines += capitalizeHeader(key) + ": " + headers[key] + "\r\n";
@@ -1082,7 +1104,7 @@ Vereign - Authentic Communication
     }
 
     let newMimeHeaderLines = "";
-    for (let key in mimeHeaders) {
+    for (const key in mimeHeaders) {
       if (!(key === "")) {
         newMimeHeaderLines +=
           capitalizeHeader(key) + ": " + mimeHeaders[key] + "\r\n";
@@ -1096,7 +1118,7 @@ Vereign - Authentic Communication
     mime = newMimeHeaderLines + "\r\n" + mimeBody;
   }
 
-  let dataBuffer = Buffer.from(mime, "utf-8");
+  const dataBuffer = Buffer.from(mime, "utf-8");
 
   let sequence = Promise.resolve();
 
@@ -1235,8 +1257,8 @@ Vereign - Authentic Communication
   //endregion
 
   sequence = sequence.then(cmsSignedBuffer => {
-    let signature = arrayBufferToBase64Formatted(cmsSignedBuffer);
-    let boundary = makeBoundary();
+    const signature = arrayBufferToBase64Formatted(cmsSignedBuffer);
+    const boundary = makeBoundary();
 
     template = template.replace(/{{boundary}}/g, boundary);
     template = template.replace("{{signature}}", signature);
@@ -1278,7 +1300,7 @@ function capitalizeHeader(string) {
 }
 
 function makeBoundary() {
-  let len = 20 + Math.random() * 20;
+  const len = 20 + Math.random() * 20;
   return "W0RyLiBEYW15YW4gTWl0ZXZd--" + makeid(len);
 }
 
@@ -1472,7 +1494,6 @@ export const verifySMIME = (smimeString, rootCaPem) => {
 };
 
 export class ImageData {
-
   /**
    * Constructor for ImageData class
    * @param {Object} [parameters] Object in format
diff --git a/javascript/webpack.config.dev.js b/javascript/webpack.config.dev.js
index 6883e83cea072ba26ed0a403accb9db2f5c23a37..c895fac6b8a4bf6de1ec5851e8548f0e48eac2e9 100644
--- a/javascript/webpack.config.dev.js
+++ b/javascript/webpack.config.dev.js
@@ -10,6 +10,13 @@ module.exports = merge(common, {
     port: 9000,
     headers: {
       'Access-Control-Allow-Origin': '*'
+    },
+    proxy: {
+      '/api': {
+        target: 'https://alexeylunin.dev.vereign.com',
+        secure: false,
+        changeOrigin: true
+      }
     }
   },
   plugins: [
diff --git a/javascript/webpack.config.js b/javascript/webpack.config.js
index aa73aaeb1b9bb7b4aabf324201aaf2f7d6d4d7fa..641729d75365d95c2e16a250069c714dc887cd67 100644
--- a/javascript/webpack.config.js
+++ b/javascript/webpack.config.js
@@ -1,18 +1,23 @@
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin');
-const CleanWebpackPlugin = require('clean-webpack-plugin')
+const HtmlWebpackPlugin = require("html-webpack-plugin");
+const HtmlWebpackInlineSourcePlugin = require("html-webpack-inline-source-plugin");
+const CleanWebpackPlugin = require("clean-webpack-plugin");
 
 module.exports = {
   entry: {
-    'viamapi-client': ['core-js/fn/promise', './src/viamapi-client.js'],
-    'viamapi-iframe': ['babel-polyfill', './src/iframe/viamapi-iframe.js'],
+    "viamapi-client": ["core-js/fn/promise", "./src/viamapi-client.js"],
+    "viamapi-iframe": [
+      'core-js',
+      'regenerator-runtime/runtime',
+      "./src/iframe/viamapi-iframe.js"
+    ]
   },
   plugins: [
-    new HtmlWebpackPlugin({  // Also generate a test.html
-      filename: 'viamapi-iframe.html',
-      template: 'src/iframe/viamapi-iframe.html',
-      chunks: ['viamapi-iframe'],
-      inlineSource: '.(js)$'
+    new HtmlWebpackPlugin({
+      // Also generate a test.html
+      filename: "viamapi-iframe.html",
+      template: "src/iframe/viamapi-iframe.html",
+      chunks: ["viamapi-iframe"],
+      inlineSource: ".(js)$"
     }),
     new CleanWebpackPlugin(),
     new HtmlWebpackInlineSourcePlugin()
@@ -24,9 +29,9 @@ module.exports = {
         // We have to transpile every dependency to make it work for older browsers. (IE 11)
         //exclude: /node_modules/,
         use: {
-          loader: 'babel-loader',
+          loader: "babel-loader",
           options: {
-            presets: ['@babel/preset-env']
+            presets: ["@babel/preset-env"]
           }
         }
       }
diff --git a/javascript/yarn.lock b/javascript/yarn.lock
index e1ea2f56622300f72230db5db0cfa7c949639441..3d2e3f48da2b9f625782e83233af552000b5275b 100644
--- a/javascript/yarn.lock
+++ b/javascript/yarn.lock
@@ -8,26 +8,35 @@
   dependencies:
     "@babel/highlight" "^7.0.0"
 
-"@babel/core@^7.1.2":
-  version "7.1.2"
-  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e"
-  dependencies:
-    "@babel/code-frame" "^7.0.0"
-    "@babel/generator" "^7.1.2"
-    "@babel/helpers" "^7.1.2"
-    "@babel/parser" "^7.1.2"
-    "@babel/template" "^7.1.2"
-    "@babel/traverse" "^7.1.0"
-    "@babel/types" "^7.1.2"
-    convert-source-map "^1.1.0"
-    debug "^3.1.0"
-    json5 "^0.5.0"
-    lodash "^4.17.10"
+"@babel/code-frame@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
+  integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
+  dependencies:
+    "@babel/highlight" "^7.8.3"
+
+"@babel/core@^7.8.3":
+  version "7.8.4"
+  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e"
+  integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@babel/generator" "^7.8.4"
+    "@babel/helpers" "^7.8.4"
+    "@babel/parser" "^7.8.4"
+    "@babel/template" "^7.8.3"
+    "@babel/traverse" "^7.8.4"
+    "@babel/types" "^7.8.3"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.1"
+    json5 "^2.1.0"
+    lodash "^4.17.13"
     resolve "^1.3.2"
     semver "^5.4.1"
     source-map "^0.5.0"
 
-"@babel/generator@^7.1.2", "@babel/generator@^7.1.3":
+"@babel/generator@^7.1.3":
   version "7.1.3"
   resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.3.tgz#2103ec9c42d9bdad9190a6ad5ff2d456fd7b8673"
   dependencies:
@@ -37,6 +46,16 @@
     source-map "^0.5.0"
     trim-right "^1.0.1"
 
+"@babel/generator@^7.8.4":
+  version "7.8.4"
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e"
+  integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==
+  dependencies:
+    "@babel/types" "^7.8.3"
+    jsesc "^2.5.1"
+    lodash "^4.17.13"
+    source-map "^0.5.0"
+
 "@babel/helper-annotate-as-pure@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
@@ -81,12 +100,28 @@
     "@babel/template" "^7.1.0"
     "@babel/types" "^7.0.0"
 
+"@babel/helper-function-name@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca"
+  integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==
+  dependencies:
+    "@babel/helper-get-function-arity" "^7.8.3"
+    "@babel/template" "^7.8.3"
+    "@babel/types" "^7.8.3"
+
 "@babel/helper-get-function-arity@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
   dependencies:
     "@babel/types" "^7.0.0"
 
+"@babel/helper-get-function-arity@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
+  integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
+  dependencies:
+    "@babel/types" "^7.8.3"
+
 "@babel/helper-hoist-variables@^7.0.0":
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88"
@@ -164,6 +199,13 @@
   dependencies:
     "@babel/types" "^7.0.0"
 
+"@babel/helper-split-export-declaration@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
+  integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
+  dependencies:
+    "@babel/types" "^7.8.3"
+
 "@babel/helper-wrap-function@^7.1.0":
   version "7.1.0"
   resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66"
@@ -173,13 +215,14 @@
     "@babel/traverse" "^7.1.0"
     "@babel/types" "^7.0.0"
 
-"@babel/helpers@^7.1.2":
-  version "7.1.2"
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5"
+"@babel/helpers@^7.8.4":
+  version "7.8.4"
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73"
+  integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==
   dependencies:
-    "@babel/template" "^7.1.2"
-    "@babel/traverse" "^7.1.0"
-    "@babel/types" "^7.1.2"
+    "@babel/template" "^7.8.3"
+    "@babel/traverse" "^7.8.4"
+    "@babel/types" "^7.8.3"
 
 "@babel/highlight@^7.0.0":
   version "7.0.0"
@@ -189,10 +232,24 @@
     esutils "^2.0.2"
     js-tokens "^4.0.0"
 
+"@babel/highlight@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797"
+  integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==
+  dependencies:
+    chalk "^2.0.0"
+    esutils "^2.0.2"
+    js-tokens "^4.0.0"
+
 "@babel/parser@^7.1.2", "@babel/parser@^7.1.3":
   version "7.1.3"
   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77"
 
+"@babel/parser@^7.8.3", "@babel/parser@^7.8.4":
+  version "7.8.4"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8"
+  integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==
+
 "@babel/plugin-proposal-async-generator-functions@^7.1.0":
   version "7.1.0"
   resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce"
@@ -442,6 +499,14 @@
     "@babel/helper-regex" "^7.0.0"
     regexpu-core "^4.1.3"
 
+"@babel/polyfill@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.8.3.tgz#2333fc2144a542a7c07da39502ceeeb3abe4debd"
+  integrity sha512-0QEgn2zkCzqGIkSWWAEmvxD7e00Nm9asTtQvi7HdlYvMhjy/J38V/1Y9ode0zEJeIuxAI0uftiAzqc7nVeWUGg==
+  dependencies:
+    core-js "^2.6.5"
+    regenerator-runtime "^0.13.2"
+
 "@babel/preset-env@^7.1.0":
   version "7.1.0"
   resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.0.tgz#e67ea5b0441cfeab1d6f41e9b5c79798800e8d11"
@@ -488,7 +553,7 @@
     js-levenshtein "^1.1.3"
     semver "^5.3.0"
 
-"@babel/template@^7.1.0", "@babel/template@^7.1.2":
+"@babel/template@^7.1.0":
   version "7.1.2"
   resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644"
   dependencies:
@@ -496,6 +561,15 @@
     "@babel/parser" "^7.1.2"
     "@babel/types" "^7.1.2"
 
+"@babel/template@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8"
+  integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@babel/parser" "^7.8.3"
+    "@babel/types" "^7.8.3"
+
 "@babel/traverse@^7.1.0":
   version "7.1.4"
   resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.4.tgz#f4f83b93d649b4b2c91121a9087fa2fa949ec2b4"
@@ -510,6 +584,21 @@
     globals "^11.1.0"
     lodash "^4.17.10"
 
+"@babel/traverse@^7.8.4":
+  version "7.8.4"
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c"
+  integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==
+  dependencies:
+    "@babel/code-frame" "^7.8.3"
+    "@babel/generator" "^7.8.4"
+    "@babel/helper-function-name" "^7.8.3"
+    "@babel/helper-split-export-declaration" "^7.8.3"
+    "@babel/parser" "^7.8.4"
+    "@babel/types" "^7.8.3"
+    debug "^4.1.0"
+    globals "^11.1.0"
+    lodash "^4.17.13"
+
 "@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.3":
   version "7.1.3"
   resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.3.tgz#3a767004567060c2f40fca49a304712c525ee37d"
@@ -518,6 +607,67 @@
     lodash "^4.17.10"
     to-fast-properties "^2.0.0"
 
+"@babel/types@^7.8.3":
+  version "7.8.3"
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
+  integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
+  dependencies:
+    esutils "^2.0.2"
+    lodash "^4.17.13"
+    to-fast-properties "^2.0.0"
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+  integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+  dependencies:
+    call-me-maybe "^1.0.1"
+    glob-to-regexp "^0.3.0"
+
+"@nodelib/fs.stat@^1.1.2":
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+  integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@peculiar/asn1-schema@^1.0.3":
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-1.0.3.tgz#e55ff9e98a1cf31832629aabacf85be3edf13a48"
+  integrity sha512-Tfgj9eNJ6cTKEtEuidKenLHMx/Q5M8KEE9hnohHqvdpqHJXWYr5RlT3GjAHPjGXy5+mr7sSfuXfzE6aAkEGN7A==
+  dependencies:
+    asn1js "^2.0.22"
+    tslib "^1.9.3"
+
+"@peculiar/json-schema@^1.1.9":
+  version "1.1.9"
+  resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.9.tgz#b746e046b787607a1b2804f64437fda2527b3e62"
+  integrity sha512-F2ST2y/IQPgY+1QMw1Q33sqJbGDCeO3lGqI69SL3Hgo0++7iHqprUB1QyxB/A7bN3tuM65MBxoM2JLbwh42lsQ==
+  dependencies:
+    tslib "^1.10.0"
+
+"@types/events@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
+  integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==
+
+"@types/glob@^7.1.1":
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
+  integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
+  dependencies:
+    "@types/events" "*"
+    "@types/minimatch" "*"
+    "@types/node" "*"
+
+"@types/minimatch@*":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+  integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
+"@types/node@*":
+  version "13.7.0"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.0.tgz#b417deda18cf8400f278733499ad5547ed1abec4"
+  integrity sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ==
+
 "@webassemblyjs/ast@1.7.10":
   version "1.7.10"
   resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.10.tgz#0cfc61d61286240b72fc522cb755613699eea40a"
@@ -680,6 +830,15 @@ acorn@^6.0.2:
   version "6.0.4"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754"
 
+add-asset-html-webpack-plugin@^3.1.3:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/add-asset-html-webpack-plugin/-/add-asset-html-webpack-plugin-3.1.3.tgz#bec77dc8182644a58a0eebcae7d1f9eb162dafdf"
+  integrity sha512-VSimIES8z4Y30QSYyURPwpzM2yHe25vVq2FMjrg1x/USoYRyhBFEjIW/VIXmYfQ5NkCFPYoDj4zT+rtAd4BVWw==
+  dependencies:
+    globby "^9.0.0"
+    micromatch "^3.1.3"
+    p-each-series "^1.0.0"
+
 ajv-errors@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59"
@@ -794,7 +953,7 @@ array-includes@^3.0.3:
     define-properties "^1.1.2"
     es-abstract "^1.7.0"
 
-array-union@^1.0.1:
+array-union@^1.0.1, array-union@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
   dependencies:
@@ -808,6 +967,11 @@ array-unique@^0.3.2:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
 
+asmcrypto.js@^2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/asmcrypto.js/-/asmcrypto.js-2.3.2.tgz#b9f84bd0a1fb82f21f8c29cc284a707ad17bba2e"
+  integrity sha512-3FgFARf7RupsZETQ1nHnhLUUvpcttcCq1iZCaVAbJZbCZ5VNRrNyvpDyHTOb0KC3llFcsyOT/a99NZcCbeiEsA==
+
 asn1.js@^4.0.0:
   version "4.10.1"
   resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
@@ -822,6 +986,13 @@ asn1js@^2.0.21, asn1js@latest:
   dependencies:
     pvutils latest
 
+asn1js@^2.0.22, asn1js@^2.0.26:
+  version "2.0.26"
+  resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-2.0.26.tgz#0a6d435000f556a96c6012969d9704d981b71251"
+  integrity sha512-yG89F0j9B4B0MKIcFyWWxnpZPLaNTjCj4tkE3fjbAoo0qmpGw0PYYqSbX/4ebnd9Icn8ZgK4K1fvDyEtW1JYtQ==
+  dependencies:
+    pvutils latest
+
 assert@^1.1.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
@@ -878,21 +1049,6 @@ babel-loader@^8.0.4:
     mkdirp "^0.5.1"
     util.promisify "^1.0.0"
 
-babel-polyfill@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
-  dependencies:
-    babel-runtime "^6.26.0"
-    core-js "^2.5.0"
-    regenerator-runtime "^0.10.5"
-
-babel-runtime@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
-  dependencies:
-    core-js "^2.4.0"
-    regenerator-runtime "^0.11.0"
-
 balanced-match@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -1118,6 +1274,11 @@ cache-base@^1.0.1:
     union-value "^1.0.0"
     unset-value "^1.0.0"
 
+call-me-maybe@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+  integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
 caller-path@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
@@ -1354,9 +1515,10 @@ content-type@~1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
 
-convert-source-map@^1.1.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+convert-source-map@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+  integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
   dependencies:
     safe-buffer "~5.1.1"
 
@@ -1383,10 +1545,20 @@ copy-descriptor@^0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
 
-core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7:
+core-js@^2.5.7:
   version "2.5.7"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
 
+core-js@^2.6.5:
+  version "2.6.11"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+  integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+
+core-js@^3.5.0:
+  version "3.6.4"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647"
+  integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==
+
 core-util-is@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -1510,6 +1682,13 @@ debug@^4.0.1:
   dependencies:
     ms "^2.1.1"
 
+debug@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  dependencies:
+    ms "^2.1.1"
+
 decamelize@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -1594,6 +1773,14 @@ des.js@^1.0.0:
     inherits "^2.0.1"
     minimalistic-assert "^1.0.0"
 
+des.js@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+  integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+  dependencies:
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+
 destroy@~1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
@@ -1618,6 +1805,13 @@ dijkstrajs@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b"
 
+dir-glob@^2.2.2:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4"
+  integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==
+  dependencies:
+    path-type "^3.0.0"
+
 dns-equal@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
@@ -1721,6 +1915,19 @@ elliptic@^6.0.0:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.0"
 
+elliptic@^6.5.2:
+  version "6.5.2"
+  resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+  integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
+  dependencies:
+    bn.js "^4.4.0"
+    brorand "^1.0.1"
+    hash.js "^1.0.0"
+    hmac-drbg "^1.0.0"
+    inherits "^2.0.1"
+    minimalistic-assert "^1.0.0"
+    minimalistic-crypto-utils "^1.0.0"
+
 emoji-regex@^6.5.1:
   version "6.5.1"
   resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"
@@ -2059,6 +2266,18 @@ fast-deep-equal@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
 
+fast-glob@^2.2.6:
+  version "2.2.7"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+  integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+  dependencies:
+    "@mrmlnc/readdir-enhanced" "^2.2.1"
+    "@nodelib/fs.stat" "^1.1.2"
+    glob-parent "^3.1.0"
+    is-glob "^4.0.0"
+    merge2 "^1.2.3"
+    micromatch "^3.1.10"
+
 fast-json-stable-stringify@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
@@ -2246,6 +2465,11 @@ gauge@~2.7.3:
     strip-ansi "^3.0.1"
     wide-align "^1.1.0"
 
+gensync@^1.0.0-beta.1:
+  version "1.0.0-beta.1"
+  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+  integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+
 get-caller-file@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
@@ -2265,6 +2489,11 @@ glob-parent@^3.1.0:
     is-glob "^3.1.0"
     path-dirname "^1.0.0"
 
+glob-to-regexp@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+  integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
 glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
   version "7.1.3"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
@@ -2276,6 +2505,18 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
+glob@^7.1.3:
+  version "7.1.6"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+  integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+  dependencies:
+    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"
+
 global-modules-path@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.3.0.tgz#b0e2bac6beac39745f7db5c59d26a36a0b94f7dc"
@@ -2298,6 +2539,20 @@ globby@^6.1.0:
     pify "^2.0.0"
     pinkie-promise "^2.0.0"
 
+globby@^9.0.0:
+  version "9.2.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d"
+  integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==
+  dependencies:
+    "@types/glob" "^7.1.1"
+    array-union "^1.0.2"
+    dir-glob "^2.2.2"
+    fast-glob "^2.2.6"
+    glob "^7.1.3"
+    ignore "^4.0.3"
+    pify "^4.0.1"
+    slash "^2.0.0"
+
 graceful-fs@^4.1.11, graceful-fs@^4.1.2:
   version "4.1.11"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
@@ -2503,7 +2758,7 @@ ignore-walk@^3.0.1:
   dependencies:
     minimatch "^3.0.4"
 
-ignore@^4.0.6:
+ignore@^4.0.3, ignore@^4.0.6:
   version "4.0.6"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
 
@@ -2837,6 +3092,13 @@ json5@^0.5.0:
   version "0.5.1"
   resolved "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
 
+json5@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
+  integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
+  dependencies:
+    minimist "^1.2.0"
+
 jsonfile@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
@@ -2960,6 +3222,11 @@ lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5
   version "4.17.11"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
 
+lodash@^4.17.13:
+  version "4.17.15"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
 loglevel@^1.4.1:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
@@ -3040,11 +3307,16 @@ merge-descriptors@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
 
+merge2@^1.2.3:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81"
+  integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==
+
 methods@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
 
-micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9:
+micromatch@^3.1.10, micromatch@^3.1.3, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9:
   version "3.1.10"
   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
   dependencies:
@@ -3472,6 +3744,13 @@ p-defer@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
 
+p-each-series@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
+  integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=
+  dependencies:
+    p-reduce "^1.0.0"
+
 p-finally@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -3508,6 +3787,11 @@ p-map@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
 
+p-reduce@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+  integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
 p-try@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
@@ -3602,6 +3886,13 @@ path-type@^2.0.0:
   dependencies:
     pify "^2.0.0"
 
+path-type@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+  integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+  dependencies:
+    pify "^3.0.0"
+
 pbkdf2@^3.0.3:
   version "3.0.17"
   resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
@@ -3624,6 +3915,11 @@ pify@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
 
+pify@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+  integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
 pinkie-promise@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
@@ -3764,6 +4060,13 @@ punycode@^2.1.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
 
+pvtsutils@^1.0.9:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.0.9.tgz#0eb6106f27878ccaa55e7dfbf6bd2c75af461dee"
+  integrity sha512-/kDsuCKPqJuIzn37w6+iN+TiSrN+zrwPEd7FjT61oNbRvceGdsS94fMEWZ4/h6QZU5EZhBMiV+79IYedroP/Yw==
+  dependencies:
+    tslib "^1.10.0"
+
 pvutils@^1.0.16, pvutils@latest:
   version "1.0.16"
   resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.0.16.tgz#b85984388e4d2770686712a2246202d11750d083"
@@ -3883,13 +4186,10 @@ regenerate@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
 
-regenerator-runtime@^0.10.5:
-  version "0.10.5"
-  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
-
-regenerator-runtime@^0.11.0:
-  version "0.11.1"
-  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+regenerator-runtime@^0.13.2:
+  version "0.13.3"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+  integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
 
 regenerator-transform@^0.13.3:
   version "0.13.3"
@@ -4185,6 +4485,11 @@ slash@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
 
+slash@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+  integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
 slice-ansi@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7"
@@ -4527,6 +4832,11 @@ trim-right@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
 
+tslib@^1.10.0, tslib@^1.9.3:
+  version "1.10.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+  integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+
 tslib@^1.9.0:
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
@@ -4740,6 +5050,30 @@ wbuf@^1.1.0, wbuf@^1.7.2:
   dependencies:
     minimalistic-assert "^1.0.0"
 
+webcrypto-core@^1.0.17:
+  version "1.0.17"
+  resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.0.17.tgz#a9354bc0b1ba6735e882f4137ede2c4366e6ad9b"
+  integrity sha512-7jxTLgtM+TahBPErx/Dd2XvxFDfWJrHxjVeTSvIa4LSgiYrmCPlC2INiAMAfb8MbtHiwJKKqF5sPS0AWNjBbXw==
+  dependencies:
+    pvtsutils "^1.0.9"
+    tslib "^1.10.0"
+
+webcrypto-liner@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/webcrypto-liner/-/webcrypto-liner-1.1.4.tgz#a02e587cd772ca0bad2b862528ef4abbaf40d34e"
+  integrity sha512-p4ovRsS8hIyG8KnW2FyrWZG4rZY5eHow5IlNiyOXeisE4gbX3FMZzJPej1dhdxL67111yf0zW2H24qt0ny+JHQ==
+  dependencies:
+    "@peculiar/asn1-schema" "^1.0.3"
+    "@peculiar/json-schema" "^1.1.9"
+    asmcrypto.js "^2.3.2"
+    asn1js "^2.0.26"
+    core-js "^3.5.0"
+    des.js "^1.0.1"
+    elliptic "^6.5.2"
+    pvtsutils "^1.0.9"
+    tslib "^1.10.0"
+    webcrypto-core "^1.0.17"
+
 webpack-clean@^1.2.3:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/webpack-clean/-/webpack-clean-1.2.3.tgz#857f4a432f0267c0424d05e061aa246b0b9d3ba9"